forked from Minki/linux
This is a first set of GPIO fixes for the v4.2 series, all
hitting individual drivers and nothing else. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJVqPoCAAoJEEEQszewGV1zccEP/2bGViiPxrlBV2plLlteE4sT 7zujWF3v1rkRZ1jr6tDafAthxtaL8WBY6O3rDWAVCZiVYATsYBGoh/Rg9EFwaKZ/ 6i5aqVFqAo9aNOFVmKabjUs8YESRTB4Wo1Ccuju/n4PkL7sGM+fBuZw5R6J7R+GU TpXMulHI4mDVjHuZWeUJ+GRnp6xmaTv5/PR1p1NC7D7zFulk6h4ZPYXJUhX8fhwC 6Pp0bgH8JEvlzphDLHziX41jSEz8Pr3vWk0WJTYCisdsNl6oklfCMBcCOgluZmgO 7v32RmxqXqBevhDgzd7sUUGjntmATb9kS4ZIcW6awX9Ia7TK55iG/pEd5pHfXAVV j79ViWfWxWLH2kVPiBTKSe+nCtMSg8hEj5RtPxTkBdUOL4BBgAigyY1DW4OgKPv5 YOHiG0FN9UT/tNH8EmUNtnUW8k4a6LpLN+r+3Tgjbz1xgVcd/5wGlEzDm+TVnyMf RBojHUDYI0taE/KpGl7RkhcKZoDNsrYK/M+pKw5DTD8Ca/hfjMoLvqAs0uKzWjc7 HDTtTTjAqFICNnf+yAaAKcjjpEp7r8xaj0c/cBIItIqG79vjLd+VnUvonjVzuTGP icysBdY5J2+NWBgWeVotopGhGs4NOYNIDQjzUwBLUBFcAVzvhsvTRc9LoncZq5Bn SWHIW/sZZ8hnWETNoz6q =mTd/ -----END PGP SIGNATURE----- Merge tag 'gpio-v4.2-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio Pull GPIO fixes from Linus Walleij: "This is a first set of GPIO fixes for the v4.2 series, all hitting individual drivers and nothing else (except for a documentation oneliner. I intended to send a request earlier but life intervened)" * tag 'gpio-v4.2-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: gpio: pca953x: fix nested irqs rescheduling gpio: omap: prevent module from being unloaded while in use gpio: max732x: Add missing dev reference to gpiochip gpio/xilinx: Use correct address when setting initial values. gpio: zynq: Fix problem with unbalanced pm_runtime_enable gpio: omap: add missed spin_unlock_irqrestore in omap_gpio_irq_type gpio: brcmstb: fix null ptr dereference in driver remove gpio: Remove double "base" in comment
This commit is contained in:
commit
9bca4df258
@ -87,6 +87,15 @@ static int brcmstb_gpio_remove(struct platform_device *pdev)
|
||||
struct brcmstb_gpio_bank *bank;
|
||||
int ret = 0;
|
||||
|
||||
if (!priv) {
|
||||
dev_err(&pdev->dev, "called %s without drvdata!\n", __func__);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
/*
|
||||
* You can lose return values below, but we report all errors, and it's
|
||||
* more important to actually perform all of the steps.
|
||||
*/
|
||||
list_for_each(pos, &priv->bank_list) {
|
||||
bank = list_entry(pos, struct brcmstb_gpio_bank, node);
|
||||
ret = bgpio_remove(&bank->bgc);
|
||||
@ -143,6 +152,8 @@ static int brcmstb_gpio_probe(struct platform_device *pdev)
|
||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
platform_set_drvdata(pdev, priv);
|
||||
INIT_LIST_HEAD(&priv->bank_list);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
reg_base = devm_ioremap_resource(dev, res);
|
||||
@ -153,7 +164,6 @@ static int brcmstb_gpio_probe(struct platform_device *pdev)
|
||||
priv->reg_base = reg_base;
|
||||
priv->pdev = pdev;
|
||||
|
||||
INIT_LIST_HEAD(&priv->bank_list);
|
||||
if (brcmstb_gpio_sanity_check_banks(dev, np, res))
|
||||
return -EINVAL;
|
||||
|
||||
@ -221,8 +231,6 @@ static int brcmstb_gpio_probe(struct platform_device *pdev)
|
||||
dev_info(dev, "Registered %d banks (GPIO(s): %d-%d)\n",
|
||||
priv->num_banks, priv->gpio_base, gpio_base - 1);
|
||||
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
|
@ -603,6 +603,7 @@ static int max732x_setup_gpio(struct max732x_chip *chip,
|
||||
gc->base = gpio_start;
|
||||
gc->ngpio = port;
|
||||
gc->label = chip->client->name;
|
||||
gc->dev = &chip->client->dev;
|
||||
gc->owner = THIS_MODULE;
|
||||
|
||||
return port;
|
||||
|
@ -500,8 +500,10 @@ static int omap_gpio_irq_type(struct irq_data *d, unsigned type)
|
||||
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
retval = omap_set_gpio_triggering(bank, offset, type);
|
||||
if (retval)
|
||||
if (retval) {
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
goto error;
|
||||
}
|
||||
omap_gpio_init_irq(bank, offset);
|
||||
if (!omap_gpio_is_input(bank, offset)) {
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
@ -1185,6 +1187,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
|
||||
bank->irq = res->start;
|
||||
bank->dev = dev;
|
||||
bank->chip.dev = dev;
|
||||
bank->chip.owner = THIS_MODULE;
|
||||
bank->dbck_flag = pdata->dbck_flag;
|
||||
bank->stride = pdata->bank_stride;
|
||||
bank->width = pdata->bank_width;
|
||||
|
@ -570,6 +570,10 @@ static int pca953x_irq_setup(struct pca953x_chip *chip,
|
||||
"could not connect irqchip to gpiochip\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
gpiochip_set_chained_irqchip(&chip->gpio_chip,
|
||||
&pca953x_irq_chip,
|
||||
client->irq, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -220,9 +220,9 @@ static void xgpio_save_regs(struct of_mm_gpio_chip *mm_gc)
|
||||
if (!chip->gpio_width[1])
|
||||
return;
|
||||
|
||||
xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + XGPIO_TRI_OFFSET,
|
||||
xgpio_writereg(mm_gc->regs + XGPIO_DATA_OFFSET + XGPIO_CHANNEL_OFFSET,
|
||||
chip->gpio_state[1]);
|
||||
xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET + XGPIO_TRI_OFFSET,
|
||||
xgpio_writereg(mm_gc->regs + XGPIO_TRI_OFFSET + XGPIO_CHANNEL_OFFSET,
|
||||
chip->gpio_dir[1]);
|
||||
}
|
||||
|
||||
|
@ -757,6 +757,7 @@ static int zynq_gpio_remove(struct platform_device *pdev)
|
||||
gpiochip_remove(&gpio->chip);
|
||||
clk_disable_unprepare(gpio->clk);
|
||||
device_set_wakeup_capable(&pdev->dev, 0);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ struct seq_file;
|
||||
* @base: identifies the first GPIO number handled by this chip;
|
||||
* or, if negative during registration, requests dynamic ID allocation.
|
||||
* DEPRECATION: providing anything non-negative and nailing the base
|
||||
* base offset of GPIO chips is deprecated. Please pass -1 as base to
|
||||
* offset of GPIO chips is deprecated. Please pass -1 as base to
|
||||
* let gpiolib select the chip base in all possible cases. We want to
|
||||
* get rid of the static GPIO number space in the long run.
|
||||
* @ngpio: the number of GPIOs handled by this controller; the last GPIO
|
||||
|
Loading…
Reference in New Issue
Block a user