summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@codeaurora.org>2015-11-18 20:33:17 +0100
committerLinus Walleij <linus.walleij@linaro.org>2015-12-01 10:00:53 +0100
commitab4256cfeab91569e1d96e7f0014538fe0845259 (patch)
tree8cde644f222946809446b9d0156c2861bae1702b /drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c
parentpinctrl: qcom: qdf2xxx: improve error checking and reporting (diff)
downloadlinux-ab4256cfeab91569e1d96e7f0014538fe0845259.tar.xz
linux-ab4256cfeab91569e1d96e7f0014538fe0845259.zip
pinctrl: qcom: pmic-gpio/mpp: of_irq_count() == npins
The number of interrupts is always equal to the number of pins provided by the PMIC gpio and MPP hardware blocks. Count the number of irqs to figure out the number of pins instead of adding more compatible strings or doing math on the reg property. This should make the code more generic and ease the number of changes we have to make to the driver for each new pmic revision. Cc: Ivan T. Ivanov <iivanov@mm-sol.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Reviewed-by: Andy Gross <agross@codeaurora.org> Reviewed-by: Björn Andersson <bjorn.andersson@sonymobile.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c')
-rw-r--r--drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c b/drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c
index 8982027de8e8..0831063da54c 100644
--- a/drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c
+++ b/drivers/pinctrl/qcom/pinctrl-ssbi-mpp.c
@@ -23,6 +23,7 @@
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/of_device.h>
+#include <linux/of_irq.h>
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
@@ -741,11 +742,12 @@ static int pm8xxx_pin_populate(struct pm8xxx_mpp *pctrl,
}
static const struct of_device_id pm8xxx_mpp_of_match[] = {
- { .compatible = "qcom,pm8018-mpp", .data = (void *)6 },
- { .compatible = "qcom,pm8038-mpp", .data = (void *)6 },
- { .compatible = "qcom,pm8917-mpp", .data = (void *)10 },
- { .compatible = "qcom,pm8821-mpp", .data = (void *)4 },
- { .compatible = "qcom,pm8921-mpp", .data = (void *)12 },
+ { .compatible = "qcom,pm8018-mpp" },
+ { .compatible = "qcom,pm8038-mpp" },
+ { .compatible = "qcom,pm8917-mpp" },
+ { .compatible = "qcom,pm8821-mpp" },
+ { .compatible = "qcom,pm8921-mpp" },
+ { .compatible = "qcom,ssbi-mpp" },
{ },
};
MODULE_DEVICE_TABLE(of, pm8xxx_mpp_of_match);
@@ -763,7 +765,9 @@ static int pm8xxx_mpp_probe(struct platform_device *pdev)
return -ENOMEM;
pctrl->dev = &pdev->dev;
- pctrl->npins = (unsigned)of_device_get_match_data(&pdev->dev);
+ pctrl->npins = of_irq_count(pdev->dev.of_node);
+ if (!pctrl->npins)
+ return -EINVAL;
pctrl->regmap = dev_get_regmap(pdev->dev.parent, NULL);
if (!pctrl->regmap) {