lkml.org 
[lkml]   [2020]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.5 008/542] pinctrl: baytrail: Allocate IRQ chip dynamic
    Date
    From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

    [ Upstream commit 539d8bde72c22d760013bf81436d6bb94eb67aed ]

    Keeping the IRQ chip definition static shares it with multiple instances
    of the GPIO chip in the system. This is bad and now we get this warning
    from GPIO library:

    "detected irqchip that is shared with multiple gpiochips: please fix the driver."

    Hence, move the IRQ chip definition from being driver static into the struct
    intel_pinctrl. So a unique IRQ chip is used for each GPIO chip instance.

    Fixes: 9f573b98ca50 ("pinctrl: baytrail: Update irq chip operations")
    Depends-on: ca8a958e2acb ("pinctrl: baytrail: Pass irqchip when adding gpiochip")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pinctrl/intel/pinctrl-baytrail.c | 19 +++++++++----------
    1 file changed, 9 insertions(+), 10 deletions(-)

    diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
    index 55141d5de29e6..72ffd19448e50 100644
    --- a/drivers/pinctrl/intel/pinctrl-baytrail.c
    +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
    @@ -107,6 +107,7 @@ struct byt_gpio_pin_context {

    struct byt_gpio {
    struct gpio_chip chip;
    + struct irq_chip irqchip;
    struct platform_device *pdev;
    struct pinctrl_dev *pctl_dev;
    struct pinctrl_desc pctl_desc;
    @@ -1395,15 +1396,6 @@ static int byt_irq_type(struct irq_data *d, unsigned int type)
    return 0;
    }

    -static struct irq_chip byt_irqchip = {
    - .name = "BYT-GPIO",
    - .irq_ack = byt_irq_ack,
    - .irq_mask = byt_irq_mask,
    - .irq_unmask = byt_irq_unmask,
    - .irq_set_type = byt_irq_type,
    - .flags = IRQCHIP_SKIP_SET_WAKE,
    -};
    -
    static void byt_gpio_irq_handler(struct irq_desc *desc)
    {
    struct irq_data *data = irq_desc_get_irq_data(desc);
    @@ -1551,8 +1543,15 @@ static int byt_gpio_probe(struct byt_gpio *vg)
    if (irq_rc && irq_rc->start) {
    struct gpio_irq_chip *girq;

    + vg->irqchip.name = "BYT-GPIO",
    + vg->irqchip.irq_ack = byt_irq_ack,
    + vg->irqchip.irq_mask = byt_irq_mask,
    + vg->irqchip.irq_unmask = byt_irq_unmask,
    + vg->irqchip.irq_set_type = byt_irq_type,
    + vg->irqchip.flags = IRQCHIP_SKIP_SET_WAKE,
    +
    girq = &gc->irq;
    - girq->chip = &byt_irqchip;
    + girq->chip = &vg->irqchip;
    girq->init_hw = byt_gpio_irq_init_hw;
    girq->parent_handler = byt_gpio_irq_handler;
    girq->num_parents = 1;
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-02-14 19:26    [W:4.258 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site