mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
gpio: lynxpoint: Move hardware initialization to callback
The driver wants to initialize related registers before IRQ chip will be added. That's why move it to a corresponding callback. It also fixes the NULL pointer dereference. Fixes: 7b1e889436a1 ("gpio: lynxpoint: Pass irqchip when adding gpiochip") Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
a752fbb4b4
commit
a339120616
@ -294,8 +294,9 @@ static struct irq_chip lp_irqchip = {
|
|||||||
.flags = IRQCHIP_SKIP_SET_WAKE,
|
.flags = IRQCHIP_SKIP_SET_WAKE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void lp_gpio_irq_init_hw(struct lp_gpio *lg)
|
static int lp_gpio_irq_init_hw(struct gpio_chip *chip)
|
||||||
{
|
{
|
||||||
|
struct lp_gpio *lg = gpiochip_get_data(chip);
|
||||||
unsigned long reg;
|
unsigned long reg;
|
||||||
unsigned base;
|
unsigned base;
|
||||||
|
|
||||||
@ -307,6 +308,8 @@ static void lp_gpio_irq_init_hw(struct lp_gpio *lg)
|
|||||||
reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT);
|
reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT);
|
||||||
outl(0xffffffff, reg);
|
outl(0xffffffff, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lp_gpio_probe(struct platform_device *pdev)
|
static int lp_gpio_probe(struct platform_device *pdev)
|
||||||
@ -364,6 +367,7 @@ static int lp_gpio_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
girq = &gc->irq;
|
girq = &gc->irq;
|
||||||
girq->chip = &lp_irqchip;
|
girq->chip = &lp_irqchip;
|
||||||
|
girq->init_hw = lp_gpio_irq_init_hw;
|
||||||
girq->parent_handler = lp_gpio_irq_handler;
|
girq->parent_handler = lp_gpio_irq_handler;
|
||||||
girq->num_parents = 1;
|
girq->num_parents = 1;
|
||||||
girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
|
girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
|
||||||
@ -374,8 +378,6 @@ static int lp_gpio_probe(struct platform_device *pdev)
|
|||||||
girq->parents[0] = (unsigned)irq_rc->start;
|
girq->parents[0] = (unsigned)irq_rc->start;
|
||||||
girq->default_type = IRQ_TYPE_NONE;
|
girq->default_type = IRQ_TYPE_NONE;
|
||||||
girq->handler = handle_simple_irq;
|
girq->handler = handle_simple_irq;
|
||||||
|
|
||||||
lp_gpio_irq_init_hw(lg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = devm_gpiochip_add_data(dev, gc, lg);
|
ret = devm_gpiochip_add_data(dev, gc, lg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user