linux/drivers/pinctrl/qcom
Brian Masney ca69e2d165 qcom: spmi-gpio: add support for hierarchical IRQ chip
spmi-gpio did not have any irqchip support so consumers of this in
device tree would need to call gpio[d]_to_irq() in order to get the
proper IRQ on the underlying PMIC. IRQ chips in device tree should
be usable from the start without the consumer having to make an
additional call to get the proper IRQ on the parent. This patch adds
hierarchical IRQ chip support to the spmi-gpio code to correct this
issue.

Driver was tested using the volume buttons (via gpio-keys) on the LG
Nexus 5 (hammerhead) phone with the following two configurations.

volume-up {
        interrupts-extended = <&pm8941_gpios 2 IRQ_TYPE_EDGE_BOTH>;
        ...
};

volume-up {
        gpios = <&pm8941_gpios 2 GPIO_ACTIVE_LOW>;
        ...
};

Both configurations now show that spmi-gpio is the IRQ domain and that
the IRQ is setup in a hierarchy.

$ grep volume_up /proc/interrupts
 72:          6          0  spmi-gpio   1 Edge      volume_up

$ cat /sys/kernel/debug/irq/irqs/72
handler:  handle_edge_irq
device:   (null)
status:   0x00000403
            _IRQ_NOPROBE
istate:   0x00000000
ddepth:   0
wdepth:   0
dstate:   0x02400203
            IRQ_TYPE_EDGE_RISING
            IRQ_TYPE_EDGE_FALLING
            IRQD_ACTIVATED
            IRQD_IRQ_STARTED
node:     0
affinity: 0-3
effectiv:
domain:  :soc:spmi@fc4cf000:pm8941@0:gpios@c000
 hwirq:   0x1
 chip:    spmi-gpio
  flags:   0x4
             IRQCHIP_MASK_ON_SUSPEND
 parent:
    domain:  :soc:spmi@fc4cf000
     hwirq:   0xc100057
     chip:    pmic_arb
      flags:   0x4
                 IRQCHIP_MASK_ON_SUSPEND

Signed-off-by: Brian Masney <masneyb@onstation.org>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2019-01-24 15:33:26 +01:00
..
Kconfig pinctrl: qcom: Add qcs404 pinctrl driver 2018-09-26 09:43:01 +02:00
Makefile pinctrl: qcom: Add qcs404 pinctrl driver 2018-09-26 09:43:01 +02:00
pinctrl-apq8064.c pinctrl: qcom: General Purpose clocks for apq8064 2017-08-31 11:32:19 +02:00
pinctrl-apq8084.c
pinctrl-ipq4019.c pinctrl: msm: add support to configure ipq40xx GPIO_PULL bits 2017-08-14 15:00:59 +02:00
pinctrl-ipq8064.c
pinctrl-ipq8074.c pinctrl: qcom: Add ipq8074 pinctrl driver 2017-06-29 15:12:40 +02:00
pinctrl-mdm9615.c pinctrl: qcom: Add support for MDM9615 TLMM 2016-06-29 10:10:52 +02:00
pinctrl-msm8x74.c pinctrl: qcom: msm8974: Add hsic_ctl pinmux 2016-06-29 10:14:46 +02:00
pinctrl-msm8660.c pinctrl: qcom: msm8660: rename some SDC1->SDC4 2017-01-03 09:26:20 +01:00
pinctrl-msm8916.c
pinctrl-msm8960.c
pinctrl-msm8994.c pinctrl: qcom: Add msm8994 pinctrl driver 2016-11-04 23:55:36 +01:00
pinctrl-msm8996.c pinctrl: qcom: Add msm8996 pinctrl driver 2015-12-01 10:29:03 +01:00
pinctrl-msm8998.c pinctrl: msm8998: Remove owner assignment from platform_driver 2018-03-27 14:05:11 +02:00
pinctrl-msm.c pinctrl: msm: mark PM functions as __maybe_unused 2018-12-21 11:06:41 +01:00
pinctrl-msm.h pinctrl: msm: Add sleep pinctrl state transitions 2018-11-19 15:40:27 +01:00
pinctrl-qcs404.c pinctrl: qcom: Add qcs404 pinctrl driver 2018-09-26 09:43:01 +02:00
pinctrl-qdf2xxx.c pinctrl: qcom: qdf2xxx: add support for new ACPI HID QCOM8002 2018-05-02 14:36:08 +02:00
pinctrl-sdm660.c pinctrl: sdm660: Set tile property for pingroups 2018-11-19 15:40:55 +01:00
pinctrl-sdm845.c pinctrl: msm: Add sleep pinctrl state transitions 2018-11-19 15:40:27 +01:00
pinctrl-spmi-gpio.c qcom: spmi-gpio: add support for hierarchical IRQ chip 2019-01-24 15:33:26 +01:00
pinctrl-spmi-mpp.c pinctrl: qcom: spmi-mpp: Fix err handling of pmic_mpp_set_mux 2018-09-21 08:17:43 -07:00
pinctrl-ssbi-gpio.c pinctrl: qcom: ssbi-gpio: fix gpio-hog related boot issues 2018-11-16 23:15:03 +01:00
pinctrl-ssbi-mpp.c pinctrl: Include <linux/gpio/driver.h> nothing else 2018-09-14 15:10:57 +02:00