From b1ebdc37781ebf7b25cf55d14365e0f4b2e27268 Mon Sep 17 00:00:00 2001 From: David Collins Date: Wed, 4 Dec 2019 14:48:19 -0800 Subject: [PATCH 1/2] pinctrl: qcom: spmi-gpio: add support for PMR735A and PMR735B PMIC variants Add support for qcom,pmr735a-gpio and qcom,pmr735b-gpio variants. Change-Id: I773d2539af146be56b091ced8709ae8dabe6e36e Signed-off-by: David Collins --- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c index 029a9dc62da1..4485eebd8d3a 100644 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c @@ -1154,6 +1154,8 @@ static const struct of_device_id pmic_gpio_of_match[] = { { .compatible = "qcom,pm8350b-gpio", .data = (void *) 8 }, { .compatible = "qcom,pm8350c-gpio", .data = (void *) 9 }, { .compatible = "qcom,pmk8350-gpio", .data = (void *) 4 }, + { .compatible = "qcom,pmr735a-gpio", .data = (void *) 4 }, + { .compatible = "qcom,pmr735b-gpio", .data = (void *) 4 }, { }, }; From 5cc6a7c4545ca64e6dd1cc9cd111692b62512262 Mon Sep 17 00:00:00 2001 From: David Collins Date: Mon, 9 Dec 2019 16:17:19 -0800 Subject: [PATCH 2/2] pinctrl: qcom: spmi-gpio: define an irqchip for each pinctrl device Generate a new irqchip struct for each pinctrl device that is registered to avoid sharing the same irqchip between devices. This corrects the following error which is printed when registering more than one pinctrl-spmi-gpio device: "detected irqchip that is shared with multiple gpiochips: please fix the driver." Change-Id: I80ce67fc674b96f4386499f547395ceed7480583 Signed-off-by: David Collins --- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c index 4485eebd8d3a..8dcae171a8aa 100644 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c @@ -1083,7 +1083,12 @@ static int pmic_gpio_probe(struct platform_device *pdev) return -ENXIO; girq = &state->chip.irq; - girq->chip = &pmic_gpio_irq_chip; + + girq->chip = devm_kmemdup(dev, &pmic_gpio_irq_chip, + sizeof(pmic_gpio_irq_chip), GFP_KERNEL); + if (!girq->chip) + return -ENOMEM; + girq->default_type = IRQ_TYPE_NONE; girq->handler = handle_level_irq; girq->fwnode = of_node_to_fwnode(state->dev->of_node);