* Re: [PATCH v4] gpio: Add GPIO support for the ACCES 104-IDIO-16
2015-10-07 2:40 ` William Breathitt Gray
@ 2015-10-07 3:14 kbuild test robot
2015-10-07 2:40 ` William Breathitt Gray
0 siblings, 1 reply; 8+ messages in thread
From: kbuild test robot @ 2015-10-07 3:14 UTC (permalink / raw)
To: William Breathitt Gray
Cc: kbuild-all, linus.walleij, gnurou, linux-kernel, linux-gpio
Hi William,
[auto build test WARNING on v4.3-rc4 -- if it's inappropriate base, please ignore]
coccinelle warnings: (new ones prefixed by >>)
>> drivers/gpio/gpio-104-idio-16.c:151:3-8: No need to set .owner here. The core will do it.
Please review and possibly fold the followup patch.
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v4] gpio: Add GPIO support for the ACCES 104-IDIO-16 @ 2015-10-07 2:40 ` William Breathitt Gray 2015-10-07 3:14 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kbuild test robot 0 siblings, 1 reply; 8+ messages in thread From: William Breathitt Gray @ 2015-10-07 2:40 UTC (permalink / raw) To: linus.walleij, gnurou; +Cc: linux-kernel, linux-gpio The ACCES 104-IDIO-16 family of PC/104 utility boards feature 16 optically isolated inputs and 16 optically isolated FET solid state outputs. This driver provides GPIO support for these 32 channels of digital I/O. Change-of-State detection interrupts are not supported. GPIO 0-15 correspond to digital outputs 0-15, while GPIO 16-31 correspond to digital inputs 0-15. The base port address for the device may be set via the a_104_idio_16_base module parameter. Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com> --- Changes in v4: - Replace compile-time constant CONFIG_104_IDIO_16_BASE with module paramater a_104_idio_16_base - Return -ENODEV when gpio_get is called on outputs - Replace global constant A_104_IDIO_16_EXTENT with struct a_104_idio_16_gpio member extent - Utilize platform API to reduce dependence on global data drivers/gpio/Kconfig | 10 ++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-104-idio-16.c | 196 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+) create mode 100644 drivers/gpio/gpio-104-idio-16.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 8949b3f..dc843e0 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -684,6 +684,16 @@ config GPIO_SX150X endmenu +menu "ISA GPIO drivers" + +config GPIO_104_IDIO_16 + tristate "ACCES 104-IDIO-16 GPIO support" + depends on X86 + help + Enables GPIO support for the ACCES 104-IDIO-16 family. + +endmenu + menu "MFD GPIO expanders" config GPIO_ADP5520 diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index f79a7c4..6f2fea5 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_GPIO_ACPI) += gpiolib-acpi.o # Device drivers. Generally keep list sorted alphabetically obj-$(CONFIG_GPIO_GENERIC) += gpio-generic.o +obj-$(CONFIG_GPIO_104_IDIO_16) += gpio-104-idio-16.o obj-$(CONFIG_GPIO_74X164) += gpio-74x164.o obj-$(CONFIG_GPIO_74XX_MMIO) += gpio-74xx-mmio.o obj-$(CONFIG_GPIO_ADNP) += gpio-adnp.o diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-idio-16.c new file mode 100644 index 0000000..45a2f1a --- /dev/null +++ b/drivers/gpio/gpio-104-idio-16.c @@ -0,0 +1,196 @@ +/* + * GPIO driver for the ACCES 104-IDIO-16 family + * Copyright (C) 2015 William Breathitt Gray + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ +#include <linux/device.h> +#include <linux/err.h> +#include <linux/errno.h> +#include <linux/gpio/driver.h> +#include <linux/io.h> +#include <linux/ioport.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/moduleparam.h> +#include <linux/platform_device.h> +#include <linux/spinlock.h> + +static unsigned a_104_idio_16_base; +module_param(a_104_idio_16_base, uint, 0); +MODULE_PARM_DESC(a_104_idio_16_base, "ACCES 104-IDIO-16 base address"); + +/** + * struct a_104_idio_16_gpio - GPIO device private data structure + * @chip: instance of the gpio_chip + * @lock: synchronization lock to prevent gpio_set race conditions + * @base: base port address of the GPIO device + * @extent: extent of port address region of the GPIO device + * @out_state: output bits state + */ +struct a_104_idio_16_gpio { + struct gpio_chip chip; + spinlock_t lock; + unsigned base; + unsigned extent; + unsigned out_state; +}; + +static int a_104_idio_16_gpio_direction_input(struct gpio_chip *chip, + unsigned offset) +{ + return 0; +} + +static int a_104_idio_16_gpio_direction_output(struct gpio_chip *chip, + unsigned offset, int value) +{ + chip->set(chip, offset, value); + return 0; +} + +static struct a_104_idio_16_gpio *to_a104idio16gp(struct gpio_chip *gc) +{ + return container_of(gc, struct a_104_idio_16_gpio, chip); +} + +static int a_104_idio_16_gpio_get(struct gpio_chip *chip, unsigned offset) +{ + struct a_104_idio_16_gpio *const a104idio16gp = to_a104idio16gp(chip); + const unsigned BIT_MASK = 1U << (offset-16); + + if (offset < 16) + return -ENODEV; + + if (offset < 24) + return !!(inb(a104idio16gp->base + 1) & BIT_MASK); + + return !!(inb(a104idio16gp->base + 5) & (BIT_MASK>>8)); +} + +static void a_104_idio_16_gpio_set(struct gpio_chip *chip, unsigned offset, + int value) +{ + struct a_104_idio_16_gpio *const a104idio16gp = to_a104idio16gp(chip); + const unsigned BIT_MASK = 1U << offset; + unsigned long flags; + + if (offset > 15) + return; + + spin_lock_irqsave(&a104idio16gp->lock, flags); + + if (value) + a104idio16gp->out_state |= BIT_MASK; + else + a104idio16gp->out_state &= ~BIT_MASK; + + if (offset > 7) + outb(~a104idio16gp->out_state >> 8, a104idio16gp->base + 4); + else + outb(~a104idio16gp->out_state, a104idio16gp->base); + + spin_unlock_irqrestore(&a104idio16gp->lock, flags); +} + +static int a_104_idio_16_probe(struct platform_device *pdev) +{ + struct a_104_idio_16_gpio *const a104idio16gp = pdev->dev.platform_data; + struct device *dev = &pdev->dev; + int err; + + const unsigned BASE = a104idio16gp->base; + const unsigned EXTENT = a104idio16gp->extent; + + if (!request_region(BASE, EXTENT, "104-idio-16")) { + dev_err(dev, "Unable to lock 104-idio-16 port addresses (0x%X-0x%X)\n", + BASE, BASE + EXTENT); + err = -EBUSY; + goto out_lock_a_104_idio_16_port; + } + + spin_lock_init(&a104idio16gp->lock); + + dev_info(dev, "104-IDIO-16 GPIO detected\n"); + err = gpiochip_add(&a104idio16gp->chip); + if (err) { + dev_err(dev, "GPIO registering failed (%d)\n", err); + goto out_gpio_register; + } + + return 0; + +out_gpio_register: + release_region(BASE, EXTENT); +out_lock_a_104_idio_16_port: + return err; +} + +static int a_104_idio_16_remove(struct platform_device *pdev) +{ + struct a_104_idio_16_gpio *const a104idio16gp = pdev->dev.platform_data; + + gpiochip_remove(&a104idio16gp->chip); + release_region(a104idio16gp->base, a104idio16gp->extent); + + return 0; +} + +static struct platform_device *a_104_idio_16_device; + +static struct platform_driver a_104_idio_16_driver = { + .driver = { + .name = "104-idio-16", + .owner = THIS_MODULE + }, + .remove = a_104_idio_16_remove +}; + +static void __exit a_104_idio_16_exit(void) +{ + dev_info(&a_104_idio_16_device->dev, "Exiting module\n"); + + platform_device_unregister(a_104_idio_16_device); + platform_driver_unregister(&a_104_idio_16_driver); +} + +static int __init a_104_idio_16_init(void) +{ + struct a_104_idio_16_gpio a104idio16gp = { + .chip = { + .label = "104-IDIO-16 GPIO", + .owner = THIS_MODULE, + .base = -1, + .ngpio = 32, + .direction_input = a_104_idio_16_gpio_direction_input, + .direction_output = a_104_idio_16_gpio_direction_output, + .get = a_104_idio_16_gpio_get, + .set = a_104_idio_16_gpio_set + }, + .base = a_104_idio_16_base, + .extent = 8 + }; + + dev_info(&a_104_idio_16_device->dev, "Initializing module\n"); + + a_104_idio_16_device = platform_device_register_data(NULL, + "104-idio-16", -1, &a104idio16gp, sizeof(a104idio16gp)); + if (IS_ERR(a_104_idio_16_device)) + return PTR_ERR(a_104_idio_16_device); + + return platform_driver_probe(&a_104_idio_16_driver, a_104_idio_16_probe); +} + +module_init(a_104_idio_16_init); +module_exit(a_104_idio_16_exit); + +MODULE_AUTHOR("William Breathitt Gray <vilhelm.gray@gmail.com>"); +MODULE_DESCRIPTION("ACCES 104-IDIO-16 GPIO driver"); +MODULE_LICENSE("GPL"); -- 2.4.9 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2015-10-07 2:40 ` William Breathitt Gray @ 2015-10-07 3:14 ` kbuild test robot 2015-10-16 14:47 ` Linus Walleij 0 siblings, 1 reply; 8+ messages in thread From: kbuild test robot @ 2015-10-07 3:14 UTC (permalink / raw) To: William Breathitt Gray Cc: kbuild-all, linus.walleij, gnurou, linux-kernel, linux-gpio drivers/gpio/gpio-104-idio-16.c:151:3-8: No need to set .owner here. The core will do it. Remove .owner field if calls are used which set it automatically Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci CC: William Breathitt Gray <vilhelm.gray@gmail.com> Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> --- gpio-104-idio-16.c | 1 - 1 file changed, 1 deletion(-) --- a/drivers/gpio/gpio-104-idio-16.c +++ b/drivers/gpio/gpio-104-idio-16.c @@ -148,7 +148,6 @@ static struct platform_device *a_104_idi static struct platform_driver a_104_idio_16_driver = { .driver = { .name = "104-idio-16", - .owner = THIS_MODULE }, .remove = a_104_idio_16_remove }; ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2015-10-07 3:14 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kbuild test robot @ 2015-10-16 14:47 ` Linus Walleij 2015-10-16 15:47 ` [kbuild-all] " Fengguang Wu 0 siblings, 1 reply; 8+ messages in thread From: Linus Walleij @ 2015-10-16 14:47 UTC (permalink / raw) To: kbuild test robot Cc: William Breathitt Gray, kbuild-all@01.org, Alexandre Courbot, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org On Wed, Oct 7, 2015 at 5:14 AM, kbuild test robot <lkp@intel.com> wrote: > drivers/gpio/gpio-104-idio-16.c:151:3-8: No need to set .owner here. The core will do it. > > Remove .owner field if calls are used which set it automatically > > Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci > > CC: William Breathitt Gray <vilhelm.gray@gmail.com> > Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> This is confusing, I mix up the mails coming from my pushed git branches with this new stuff that is obviously checking patches I haven't even applied. It's better if these kbuild fixes are sent as Re: to the mail ID of the patch so it appears in the same thread as the offending patch on the mailing list. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [kbuild-all] [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2015-10-16 14:47 ` Linus Walleij @ 2015-10-16 15:47 ` Fengguang Wu 2015-10-16 15:53 ` Fengguang Wu 0 siblings, 1 reply; 8+ messages in thread From: Fengguang Wu @ 2015-10-16 15:47 UTC (permalink / raw) To: Linus Walleij Cc: Alexandre Courbot, linux-gpio@vger.kernel.org, William Breathitt Gray, linux-kernel@vger.kernel.org, kbuild-all@01.org On Fri, Oct 16, 2015 at 04:47:23PM +0200, Linus Walleij wrote: > On Wed, Oct 7, 2015 at 5:14 AM, kbuild test robot <lkp@intel.com> wrote: > > > drivers/gpio/gpio-104-idio-16.c:151:3-8: No need to set .owner here. The core will do it. > > > > Remove .owner field if calls are used which set it automatically > > > > Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci > > > > CC: William Breathitt Gray <vilhelm.gray@gmail.com> > > Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> > > This is confusing, I mix up the mails coming from my pushed git branches > with this new stuff that is obviously checking patches I haven't even applied. > It's better if these kbuild fixes are sent as Re: to the mail ID of the > patch so it appears in the same thread as the offending patch on the > mailing list. Hi Linus, the patch email does not start with "Re:", however it does contain In-Reply-To: <1444997709-57293-2-git-send-email-ck.hu@mediatek.com> So it should show up in the same thread as this email? [RFC 2/2] drm/bridge: Add I2C based driver for ps8640 bridge Thanks, Fengguang ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [kbuild-all] [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2015-10-16 15:47 ` [kbuild-all] " Fengguang Wu @ 2015-10-16 15:53 ` Fengguang Wu 0 siblings, 0 replies; 8+ messages in thread From: Fengguang Wu @ 2015-10-16 15:53 UTC (permalink / raw) To: Linus Walleij Cc: Alexandre Courbot, linux-gpio@vger.kernel.org, William Breathitt Gray, linux-kernel@vger.kernel.org, kbuild-all@01.org On Fri, Oct 16, 2015 at 11:47:23PM +0800, Fengguang Wu wrote: > On Fri, Oct 16, 2015 at 04:47:23PM +0200, Linus Walleij wrote: > > On Wed, Oct 7, 2015 at 5:14 AM, kbuild test robot <lkp@intel.com> wrote: > > > > > drivers/gpio/gpio-104-idio-16.c:151:3-8: No need to set .owner here. The core will do it. > > > > > > Remove .owner field if calls are used which set it automatically > > > > > > Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci > > > > > > CC: William Breathitt Gray <vilhelm.gray@gmail.com> > > > Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> > > > > This is confusing, I mix up the mails coming from my pushed git branches > > with this new stuff that is obviously checking patches I haven't even applied. > > It's better if these kbuild fixes are sent as Re: to the mail ID of the > > patch so it appears in the same thread as the offending patch on the > > mailing list. > > Hi Linus, the patch email does not start with "Re:", however it does contain > > In-Reply-To: <1444997709-57293-2-git-send-email-ck.hu@mediatek.com> > > So it should show up in the same thread as this email? > > [RFC 2/2] drm/bridge: Add I2C based driver for ps8640 bridge Sorry it's not that email, but here is the mutt thread view in my mbox: Oct 06 William Breathi (7.8K:0) [PATCH v4] gpio: Add GPIO support for the ACCES 104-IDIO-16 Oct 07 kbuild test rob (0.9K:0) |->[PATCH] gpio: fix platform_no_drv_owner.cocci warnings Oct 16 Fengguang Wu (1.3K:0) | `->Re: [kbuild-all] [PATCH] gpio: fix platform_no_drv_owner.cocci warnings Oct 07 kbuild test rob (0.7K:0) `->Re: [PATCH v4] gpio: Add GPIO support for the ACCES 104-IDIO-16 Thanks, Fengguang ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] gpio: add tps65218 gpio driver
2015-10-11 16:41 ` Nicolas Saenz Julienne
@ 2015-10-11 17:12 kbuild test robot
2015-10-11 16:41 ` Nicolas Saenz Julienne
0 siblings, 1 reply; 8+ messages in thread
From: kbuild test robot @ 2015-10-11 17:12 UTC (permalink / raw)
To: Nicolas Saenz Julienne
Cc: kbuild-all, linus.walleij, gnurou, linux-gpio, linux-kernel
Hi Nicolas,
[auto build test WARNING on gpio/for-next -- if it's inappropriate base, please ignore]
coccinelle warnings: (new ones prefixed by >>)
>> drivers/gpio/gpio-tps65218.c:153:3-8: No need to set .owner here. The core will do it.
Please review and possibly fold the followup patch.
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH] gpio: add tps65218 gpio driver @ 2015-10-11 16:41 ` Nicolas Saenz Julienne 2015-10-11 17:12 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kbuild test robot 0 siblings, 1 reply; 8+ messages in thread From: Nicolas Saenz Julienne @ 2015-10-11 16:41 UTC (permalink / raw) To: linus.walleij; +Cc: gnurou, linux-gpio, linux-kernel Driver for the GPIO block found in ti's tps65218 pmics. The device has two GPIOs and one GPO pin which can be configured as follows: GPIO1: -general-purpose, open-drain output controlled by GPO1 user bit and/or sequencer -DDR3 reset input signal from SOC. Signal is either latched or passed-trough to GPO2 pin. See below for details. GPO2: -general-purpose output controlled by GPO2 user bit -DDR3 reset output signal. Signal is controlled by GPIO1 and PGOOD. See below for details. -Output buffer can be configured as open-drain or push-pull. GPIO3: -general-purpose, open-drain output controlled by GPO3 user bit and/or sequencer -reset input-signal for DCDC1 and DCDC2. The input configurations are not meant to be used by the user so the driver only offers GPOs. Also GPO2 is set-up as open drain by default. Signed-off-by: Nicolas Saenz Julienne <nicolassaenzj@gmail.com> --- drivers/gpio/Kconfig | 7 ++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-tps65218.c | 165 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 drivers/gpio/gpio-tps65218.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 63000b1..1669898 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -822,6 +822,13 @@ config GPIO_TIMBERDALE ---help--- Add support for the GPIO IP in the timberdale FPGA. +config GPIO_TPS65218 + tristate "TPS65218 GPIO" + depends on MFD_TPS65218 + help + Select this option to enable GPIO driver for the TPS65218 + chip family. + config GPIO_TPS6586X bool "TPS6586X GPIO" depends on MFD_TPS6586X diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 77a07e9..d4bd2f9 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -93,6 +93,7 @@ obj-$(CONFIG_GPIO_TC3589X) += gpio-tc3589x.o obj-$(CONFIG_ARCH_TEGRA) += gpio-tegra.o obj-$(CONFIG_GPIO_TIMBERDALE) += gpio-timberdale.o obj-$(CONFIG_GPIO_PALMAS) += gpio-palmas.o +obj-$(CONFIG_GPIO_TPS65218) += gpio-tps65218.o obj-$(CONFIG_GPIO_TPS6586X) += gpio-tps6586x.o obj-$(CONFIG_GPIO_TPS65910) += gpio-tps65910.o obj-$(CONFIG_GPIO_TPS65912) += gpio-tps65912.o diff --git a/drivers/gpio/gpio-tps65218.c b/drivers/gpio/gpio-tps65218.c new file mode 100644 index 0000000..a0b3d52 --- /dev/null +++ b/drivers/gpio/gpio-tps65218.c @@ -0,0 +1,165 @@ +/* + * Copyright 2015 Verifone Int. + * + * Author: Nicolas Saenz Julienne <nicolassaenzj@gmail.com> + * + * This program is free software; you can redistribute it and/or modify i t + * under the terms of the GNU General Public License as published by th e + * Free Software Foundation; either version 2 of the License, or (at you r + * option) any later version. + * + * This driver is based on the gpio-tps65912 implementation. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/errno.h> +#include <linux/gpio.h> +#include <linux/platform_device.h> +#include <linux/mfd/tps65218.h> + +struct tps65218_gpio { + struct tps65218 *tps65218; + struct gpio_chip gpio_chip; +}; + +#define to_tg(gc) container_of(gc, struct tps65218_gpio, gpio_chip) + +static int tps65218_gpio_get(struct gpio_chip *gc, unsigned offset) +{ + struct tps65218_gpio *tps65218_gpio = to_tg(gc); + struct tps65218 *tps65218 = tps65218_gpio->tps65218; + unsigned int val; + int ret; + + ret = tps65218_reg_read(tps65218, TPS65218_REG_ENABLE2, &val); + if (ret) + return ret; + + return val & (TPS65218_ENABLE2_GPIO1 << offset); +} + +static void tps65218_gpio_set(struct gpio_chip *gc, unsigned offset, + int value) +{ + struct tps65218_gpio *tps65218_gpio = to_tg(gc); + struct tps65218 *tps65218 = tps65218_gpio->tps65218; + + if (value) + tps65218_set_bits(tps65218, TPS65218_REG_ENABLE2, + TPS65218_ENABLE2_GPIO1 << offset, + TPS65218_ENABLE2_GPIO1 << offset, + TPS65218_PROTECT_L1); + else + tps65218_clear_bits(tps65218, TPS65218_REG_ENABLE2, + TPS65218_ENABLE2_GPIO1 << offset, + TPS65218_PROTECT_L1); +} + +static int tps65218_gpio_output(struct gpio_chip *gc, unsigned offset, + int value) +{ + /* Only drives GPOs */ + return 0; +} + +static struct gpio_chip template_chip = { + .label = "gpio-tps65218", + .owner = THIS_MODULE, + .direction_output = tps65218_gpio_output, + .get = tps65218_gpio_get, + .set = tps65218_gpio_set, + .can_sleep = true, + .ngpio = 3, + .base = -1, +}; + +static int tps65218_setup_gpos(struct tps65218_gpio *tps65218_gpio) +{ + struct tps65218 *tps65218 = tps65218_gpio->tps65218; + int ret; + + /* Disable sequencer for GPO1 and GP03 */ + ret = tps65218_clear_bits(tps65218, TPS65218_REG_SEQ7, 0xFF, + TPS65218_PROTECT_L1); + if (ret) + return ret; + + /* Setup GPO1 and GPO2 */ + ret = tps65218_clear_bits(tps65218, TPS65218_REG_CONFIG1, + TPS65218_CONFIG1_IO1_SEL | + TPS65218_CONFIG1_GPO2_BUF, + TPS65218_PROTECT_L1); + if (ret) + return ret; + + /* Setup GPO3 */ + return tps65218_clear_bits(tps65218, TPS65218_REG_CONFIG2, + TPS65218_CONFIG2_DC12_RST, + TPS65218_PROTECT_L1); +} + +static int tps65218_gpio_probe(struct platform_device *pdev) +{ + struct tps65218 *tps65218 = dev_get_drvdata(pdev->dev.parent); + struct tps65218_gpio *tps65218_gpio; + int ret; + + tps65218_gpio = devm_kzalloc(&pdev->dev, sizeof(*tps65218_gpio), + GFP_KERNEL); + if (!tps65218_gpio) + return -ENOMEM; + + tps65218_gpio->tps65218 = tps65218; + tps65218_gpio->gpio_chip = template_chip; + tps65218_gpio->gpio_chip.dev = &pdev->dev; + tps65218_gpio->gpio_chip.of_node = pdev->dev.of_node; + + ret = tps65218_setup_gpos(tps65218_gpio); + if (ret) { + dev_err(&pdev->dev, "Failed to setup gpos, %d\n", ret); + return ret; + } + + ret = gpiochip_add(&tps65218_gpio->gpio_chip); + if (ret < 0) { + dev_err(&pdev->dev, "Failed to register gpiochip, %d\n", ret); + return ret; + } + + platform_set_drvdata(pdev, tps65218_gpio); + + return ret; +} + +static int tps65218_gpio_remove(struct platform_device *pdev) +{ + struct tps65218_gpio *tps65218_gpio = platform_get_drvdata(pdev); + + gpiochip_remove(&tps65218_gpio->gpio_chip); + + return 0; +} + +static const struct of_device_id tps65218_dt_match[] = { + { .compatible = "ti,tps65218-gpio" }, + { } +}; +MODULE_DEVICE_TABLE(of, tps65218_dt_match); + +static struct platform_driver tps65218_gpio_driver = { + .driver = { + .name = "tps65218-gpio", + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(tps65218_dt_match) + }, + .probe = tps65218_gpio_probe, + .remove = tps65218_gpio_remove, +}; + +module_platform_driver(tps65218_gpio_driver); + +MODULE_ALIAS("platform:tps65218-gpio"); +MODULE_AUTHOR("Nicolas Saenz Julienne <nicolassaenzj@gmail.com>"); +MODULE_DESCRIPTION("GPO interface for TPS65218 PMICs"); +MODULE_LICENSE("GPL v2"); -- 2.5.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2015-10-11 16:41 ` Nicolas Saenz Julienne @ 2015-10-11 17:12 ` kbuild test robot 0 siblings, 0 replies; 8+ messages in thread From: kbuild test robot @ 2015-10-11 17:12 UTC (permalink / raw) To: Nicolas Saenz Julienne Cc: kbuild-all, linus.walleij, gnurou, linux-gpio, linux-kernel drivers/gpio/gpio-tps65218.c:153:3-8: No need to set .owner here. The core will do it. Remove .owner field if calls are used which set it automatically Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci CC: Nicolas Saenz Julienne <nicolassaenzj@gmail.com> Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> --- gpio-tps65218.c | 1 - 1 file changed, 1 deletion(-) --- a/drivers/gpio/gpio-tps65218.c +++ b/drivers/gpio/gpio-tps65218.c @@ -150,7 +150,6 @@ MODULE_DEVICE_TABLE(of, tps65218_dt_matc static struct platform_driver tps65218_gpio_driver = { .driver = { .name = "tps65218-gpio", - .owner = THIS_MODULE, .of_match_table = of_match_ptr(tps65218_dt_match) }, .probe = tps65218_gpio_probe, ^ permalink raw reply [flat|nested] 8+ messages in thread
* [asahilinux:bits/110-smc 3/14] drivers/gpio/gpio-macsmc.c:230:3-8: No need to set .owner here. The core will do it.
@ 2022-05-03 10:00 kernel test robot
2022-05-03 9:53 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kernel test robot
0 siblings, 1 reply; 8+ messages in thread
From: kernel test robot @ 2022-05-03 10:00 UTC (permalink / raw)
To: Hector Martin; +Cc: kbuild-all, linux-kernel
tree: https://github.com/AsahiLinux/linux bits/110-smc
head: dc3db43287ff1d44b447fff8ed6386b28b339f1c
commit: a29b7d982f099846c00493140bbf5b6aff25c948 [3/14] gpio: Add new gpio-macsmc driver for Apple Macs
config: arm64-randconfig-c023-20220501 (https://download.01.org/0day-ci/archive/20220503/202205031706.nUBZtKaH-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cocci warnings: (new ones prefixed by >>)
>> drivers/gpio/gpio-macsmc.c:230:3-8: No need to set .owner here. The core will do it.
Please review and possibly fold the followup patch.
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH] gpio: fix platform_no_drv_owner.cocci warnings 2022-05-03 10:00 [asahilinux:bits/110-smc 3/14] drivers/gpio/gpio-macsmc.c:230:3-8: No need to set .owner here. The core will do it kernel test robot @ 2022-05-03 9:53 ` kernel test robot 0 siblings, 0 replies; 8+ messages in thread From: kernel test robot @ 2022-05-03 9:53 UTC (permalink / raw) To: Hector Martin; +Cc: kbuild-all, linux-kernel From: kernel test robot <lkp@intel.com> drivers/gpio/gpio-macsmc.c:230:3-8: No need to set .owner here. The core will do it. Remove .owner field if calls are used which set it automatically Generated by: scripts/coccinelle/api/platform_no_drv_owner.cocci Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: kernel test robot <lkp@intel.com> --- tree: https://github.com/AsahiLinux/linux bits/110-smc head: dc3db43287ff1d44b447fff8ed6386b28b339f1c commit: a29b7d982f099846c00493140bbf5b6aff25c948 [3/14] gpio: Add new gpio-macsmc driver for Apple Macs :::::: branch date: 26 hours ago :::::: commit date: 27 hours ago drivers/gpio/gpio-macsmc.c | 1 - 1 file changed, 1 deletion(-) --- a/drivers/gpio/gpio-macsmc.c +++ b/drivers/gpio/gpio-macsmc.c @@ -227,7 +227,6 @@ static int macsmc_gpio_probe(struct plat static struct platform_driver macsmc_gpio_driver = { .driver = { .name = "macsmc-gpio", - .owner = THIS_MODULE, }, .probe = macsmc_gpio_probe, }; ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-05-03 9:53 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-10-07 3:14 [PATCH v4] gpio: Add GPIO support for the ACCES 104-IDIO-16 kbuild test robot 2015-10-07 2:40 ` William Breathitt Gray 2015-10-07 3:14 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kbuild test robot 2015-10-16 14:47 ` Linus Walleij 2015-10-16 15:47 ` [kbuild-all] " Fengguang Wu 2015-10-16 15:53 ` Fengguang Wu -- strict thread matches above, loose matches on Subject: below -- 2015-10-11 17:12 [PATCH] gpio: add tps65218 gpio driver kbuild test robot 2015-10-11 16:41 ` Nicolas Saenz Julienne 2015-10-11 17:12 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kbuild test robot 2022-05-03 10:00 [asahilinux:bits/110-smc 3/14] drivers/gpio/gpio-macsmc.c:230:3-8: No need to set .owner here. The core will do it kernel test robot 2022-05-03 9:53 ` [PATCH] gpio: fix platform_no_drv_owner.cocci warnings kernel test robot
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.