mirror of https://gitee.com/openkylin/linux.git
pinctrl: sirf/atlas7: stop poking around in GPIO internals
This code is poking around in the gpio_chip:s internal structures to achieve some kind of pin to GPIO mappings. - It is wrong to poke around in these structs and the pinctrl maintainer was stupid to let it pass unnoticed, mea culpa. - The right interface to use is gpiochip_add_pin_range() - The code appears unused: the pin control part of the driver is not adding any ranges, so we're iterating over an empty list. Maybe it is poking around in some other pin controllers GPIO ranges, and that's just totally wrong, again use gpiochip_add_pin_range() and specify the right pin controller. Cc: Barry Song <baohua@kernel.org> Cc: Guoying Zhang <Guoying.Zhang@csr.com> Cc: Wei Chen <Wei.Chen@csr.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
148ad68b3d
commit
4e6fd26dcf
|
@ -338,7 +338,6 @@ struct atlas7_pinctrl_data {
|
||||||
#define ATLAS7_GPIO_CTL_DATAIN_MASK BIT(7)
|
#define ATLAS7_GPIO_CTL_DATAIN_MASK BIT(7)
|
||||||
|
|
||||||
struct atlas7_gpio_bank {
|
struct atlas7_gpio_bank {
|
||||||
struct pinctrl_dev *pctldev;
|
|
||||||
int id;
|
int id;
|
||||||
int irq;
|
int irq;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
|
@ -6070,7 +6069,6 @@ static int atlas7_gpio_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (idx = 0; idx < nbank; idx++) {
|
for (idx = 0; idx < nbank; idx++) {
|
||||||
struct gpio_pin_range *pin_range;
|
|
||||||
struct atlas7_gpio_bank *bank;
|
struct atlas7_gpio_bank *bank;
|
||||||
|
|
||||||
bank = &a7gc->banks[idx];
|
bank = &a7gc->banks[idx];
|
||||||
|
@ -6088,22 +6086,6 @@ static int atlas7_gpio_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
gpiochip_set_chained_irqchip(chip, &atlas7_gpio_irq_chip,
|
gpiochip_set_chained_irqchip(chip, &atlas7_gpio_irq_chip,
|
||||||
bank->irq, atlas7_gpio_handle_irq);
|
bank->irq, atlas7_gpio_handle_irq);
|
||||||
|
|
||||||
/* Records gpio_pin_range to a7gc */
|
|
||||||
list_for_each_entry(pin_range, &chip->pin_ranges, node) {
|
|
||||||
struct pinctrl_gpio_range *range;
|
|
||||||
|
|
||||||
range = &pin_range->range;
|
|
||||||
if (range->id == NGPIO_OF_BANK * idx) {
|
|
||||||
bank->gpio_offset = range->id;
|
|
||||||
bank->ngpio = range->npins;
|
|
||||||
bank->gpio_pins = range->pins;
|
|
||||||
bank->pctldev = pin_range->pctldev;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BUG_ON(!bank->pctldev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_set_drvdata(pdev, a7gc);
|
platform_set_drvdata(pdev, a7gc);
|
||||||
|
|
Loading…
Reference in New Issue