From: Lee Jones <lee.jones@linaro.org>
To: Brian Masney <masneyb@onstation.org>
Cc: linus.walleij@linaro.org, sboyd@kernel.org,
bjorn.andersson@linaro.org, andy.gross@linaro.org,
marc.zyngier@arm.com, tglx@linutronix.de, shawnguo@kernel.org,
dianders@chromium.org, linux-gpio@vger.kernel.org,
nicolas.dechesne@linaro.org, niklas.cassel@linaro.org,
david.brown@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com,
thierry.reding@gmail.com, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 3/9] mfd: pm8xxx: convert to v2 irq interfaces to support hierarchical IRQ chips
Date: Wed, 30 Jan 2019 13:27:39 +0000 [thread overview]
Message-ID: <20190130132739.GE4701@dell> (raw)
In-Reply-To: <20190125162302.14036-4-masneyb@onstation.org>
On Fri, 25 Jan 2019, Brian Masney wrote:
> Convert the PM8XXX IRQ code to use the version 2 IRQ interface in order
> to support hierarchical IRQ chips. This is necessary so that ssbi-gpio
> can be setup as a hierarchical IRQ chip with PM8xxx as the parent. IRQ
> chips in device tree should be usable from the start without the
> having to make an additional call to gpio[d]_to_irq() to get the proper
> IRQ on the parent.
>
> The IRQ handler was hardcoded as handle_level_irq and this patch
> properly sets the handler to either handle_edge_irq or handle_level_irq
> depending on the IRQ type.
>
> pm8821_irq_domain_ops and pm8821_irq_domain_map are removed by this
> patch since the irq_chip is now contained in the pm_irq_data struct, and
> that allows us to use a common IRQ mapping function.
>
> This change was not tested on any actual hardware, however the same
> change was made to spmi-gpio and tested on a LG Nexus 5 (hammerhead)
> phone.
>
> Signed-off-by: Brian Masney <masneyb@onstation.org>
> ---
> drivers/mfd/qcom-pm8xxx.c | 86 +++++++++++++++++++++++----------------
> 1 file changed, 50 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/mfd/qcom-pm8xxx.c b/drivers/mfd/qcom-pm8xxx.c
> index e6e8d81c15fd..a976890c4019 100644
> --- a/drivers/mfd/qcom-pm8xxx.c
> +++ b/drivers/mfd/qcom-pm8xxx.c
> @@ -70,20 +70,20 @@
> #define PM8XXX_NR_IRQS 256
> #define PM8821_NR_IRQS 112
>
> +struct pm_irq_data {
> + int num_irqs;
> + struct irq_chip *irq_chip;
> + void (*irq_handler)(struct irq_desc *desc);
> +};
> +
> struct pm_irq_chip {
> struct regmap *regmap;
> spinlock_t pm_irq_lock;
> struct irq_domain *irqdomain;
> - unsigned int num_irqs;
> unsigned int num_blocks;
> unsigned int num_masters;
> u8 config[0];
> -};
> -
> -struct pm_irq_data {
> - int num_irqs;
> - const struct irq_domain_ops *irq_domain_ops;
> - void (*irq_handler)(struct irq_desc *desc);
> + const struct pm_irq_data *pm_irq_data;
> };
>
> static int pm8xxx_read_block_irq(struct pm_irq_chip *chip, unsigned int bp,
> @@ -303,6 +303,7 @@ static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
> {
> struct pm_irq_chip *chip = irq_data_get_irq_chip_data(d);
> unsigned int pmirq = irqd_to_hwirq(d);
> + irq_flow_handler_t flow_handler;
> int irq_bit;
> u8 block, config;
>
> @@ -316,6 +317,8 @@ static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
> chip->config[pmirq] &= ~PM_IRQF_MASK_RE;
> if (flow_type & IRQF_TRIGGER_FALLING)
> chip->config[pmirq] &= ~PM_IRQF_MASK_FE;
> +
> + flow_handler = handle_edge_irq;
> } else {
> chip->config[pmirq] |= PM_IRQF_LVL_SEL;
>
> @@ -323,8 +326,12 @@ static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
> chip->config[pmirq] &= ~PM_IRQF_MASK_RE;
> else
> chip->config[pmirq] &= ~PM_IRQF_MASK_FE;
> +
> + flow_handler = handle_level_irq;
> }
>
> + irq_set_handler_locked(d, flow_handler);
> +
Why don't you save yourself 3 lines of code and a variable and just
call irq_set_handler_locked() where you set flow_handler?
Apart from that nit, the code looks good to me.
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2019-01-30 13:27 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-25 16:22 [PATCH 0/9] qcom: ssbi-gpio: add support for hierarchical IRQ chip Brian Masney
2019-01-25 16:22 ` [PATCH 1/9] pinctrl: qcom: ssbi-gpio: hardcode IRQ counts Brian Masney
2019-02-06 9:38 ` Linus Walleij
2019-02-06 9:38 ` Linus Walleij
2019-02-06 12:01 ` Linus Walleij
2019-02-06 12:01 ` Linus Walleij
2019-01-25 16:22 ` [PATCH 2/9] genirq: introduce irq_domain_translate_twocell Brian Masney
2019-01-30 13:54 ` Marc Zyngier
2019-01-25 16:22 ` [PATCH 3/9] mfd: pm8xxx: convert to v2 irq interfaces to support hierarchical IRQ chips Brian Masney
2019-01-30 13:27 ` Lee Jones [this message]
2019-02-04 10:20 ` Brian Masney
2019-02-06 10:02 ` Linus Walleij
2019-02-06 10:02 ` Linus Walleij
2019-02-06 13:07 ` Linus Walleij
2019-02-06 13:07 ` Linus Walleij
2019-02-06 14:10 ` Brian Masney
2019-02-06 14:10 ` Brian Masney
2019-02-06 14:37 ` Linus Walleij
2019-02-06 14:37 ` Linus Walleij
2019-01-25 16:22 ` [PATCH 4/9] mfd: pm8xxx: disassociate old virq if hwirq mapping already exists Brian Masney
2019-01-30 13:31 ` Lee Jones
2019-01-25 16:22 ` [PATCH 5/9] qcom: ssbi-gpio: add support for hierarchical IRQ chip Brian Masney
2019-01-25 16:22 ` [PATCH 6/9] arm: dts: qcom: apq8064: add interrupt controller properties Brian Masney
2019-01-25 16:23 ` [PATCH 7/9] arm: dts: qcom: msm8660: " Brian Masney
2019-01-25 16:23 ` [PATCH 8/9] arm: dts: qcom: mdm9615: " Brian Masney
2019-01-25 16:23 ` [PATCH 9/9] mfd: pm8xxx: revert "disassociate old virq if hwirq mapping already exists" Brian Masney
2019-02-06 15:21 ` [PATCH 0/9] qcom: ssbi-gpio: add support for hierarchical IRQ chip Linus Walleij
2019-02-06 15:21 ` Linus Walleij
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190130132739.GE4701@dell \
--to=lee.jones@linaro.org \
--cc=andy.gross@linaro.org \
--cc=bjorn.andersson@linaro.org \
--cc=david.brown@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=mark.rutland@arm.com \
--cc=masneyb@onstation.org \
--cc=nicolas.dechesne@linaro.org \
--cc=niklas.cassel@linaro.org \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=shawnguo@kernel.org \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.