From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lee Jones Subject: Re: [PATCH v6 3/3] gpio: tps65086: Add GPO driver for the TPS65086 PMIC Date: Tue, 26 Jan 2016 14:03:12 +0000 Message-ID: <20160126140312.GB3368@x1> References: <1453737012-3130-1-git-send-email-afd@ti.com> <1453737012-3130-4-git-send-email-afd@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: Received: from mail-wm0-f41.google.com ([74.125.82.41]:37534 "EHLO mail-wm0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965757AbcAZODQ (ORCPT ); Tue, 26 Jan 2016 09:03:16 -0500 Received: by mail-wm0-f41.google.com with SMTP id n5so131879978wmn.0 for ; Tue, 26 Jan 2016 06:03:16 -0800 (PST) Content-Disposition: inline In-Reply-To: <1453737012-3130-4-git-send-email-afd@ti.com> Sender: linux-gpio-owner@vger.kernel.org List-Id: linux-gpio@vger.kernel.org To: "Andrew F. Davis" Cc: Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Linus Walleij , Alexandre Courbot , Samuel Ortiz , Liam Girdwood , Mark Brown , devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org On Mon, 25 Jan 2016, Andrew F. Davis wrote: > Add support for the TPS65086 PMIC GPOs. >=20 > TPS65086 has four configurable GPOs that can be used for several > purposes. These are output only. >=20 > Signed-off-by: Andrew F. Davis > --- > drivers/gpio/Kconfig | 6 ++ > drivers/gpio/Makefile | 1 + > drivers/gpio/gpio-tps65086.c | 144 +++++++++++++++++++++++++++++++++= ++++++++++ > 3 files changed, 151 insertions(+) > create mode 100644 drivers/gpio/gpio-tps65086.c Is this patch orthogonal to the other two in the set, or do they all need to go in together? > diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig > index c88dd24..e35e120 100644 > --- a/drivers/gpio/Kconfig > +++ b/drivers/gpio/Kconfig > @@ -844,6 +844,12 @@ config GPIO_TIMBERDALE > ---help--- > Add support for the GPIO IP in the timberdale FPGA. > =20 > +config GPIO_TPS65086 > + tristate "TI TPS65086 GPO" > + depends on MFD_TPS65086 > + help > + This driver supports the GPO on TI TPS65086x PMICs. > + > config GPIO_TPS6586X > bool "TPS6586X GPIO" > depends on MFD_TPS6586X > diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile > index ece7d7c..c759190 100644 > --- a/drivers/gpio/Makefile > +++ b/drivers/gpio/Makefile > @@ -95,6 +95,7 @@ obj-$(CONFIG_GPIO_TC3589X) +=3D gpio-tc3589x.o > obj-$(CONFIG_ARCH_TEGRA) +=3D gpio-tegra.o > obj-$(CONFIG_GPIO_TIMBERDALE) +=3D gpio-timberdale.o > obj-$(CONFIG_GPIO_PALMAS) +=3D gpio-palmas.o > +obj-$(CONFIG_GPIO_TPS65086) +=3D gpio-tps65086.o > obj-$(CONFIG_GPIO_TPS6586X) +=3D gpio-tps6586x.o > obj-$(CONFIG_GPIO_TPS65910) +=3D gpio-tps65910.o > obj-$(CONFIG_GPIO_TPS65912) +=3D gpio-tps65912.o > diff --git a/drivers/gpio/gpio-tps65086.c b/drivers/gpio/gpio-tps6508= 6.c > new file mode 100644 > index 0000000..d5d9e47 > --- /dev/null > +++ b/drivers/gpio/gpio-tps65086.c > @@ -0,0 +1,144 @@ > +/* > + * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti= =2Ecom/ > + * Andrew F. Davis > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License versi= on 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed "as is" WITHOUT ANY WARRANTY of any > + * kind, whether expressed or implied; without even the implied warr= anty > + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License version 2 for more details. > + * > + * Based on the TPS65912 driver > + */ > + > +#include > +#include > +#include > + > +#include > + > +struct tps65086_gpio { > + struct gpio_chip chip; > + struct tps65086 *tps; > +}; > + > +static inline struct tps65086_gpio *to_tps65086_gpio(struct gpio_chi= p *chip) > +{ > + return container_of(chip, struct tps65086_gpio, chip); > +} > + > +static int tps65086_gpio_get_direction(struct gpio_chip *chip, > + unsigned offset) > +{ > + /* This device is output only */ > + return 0; > +} > + > +static int tps65086_gpio_direction_input(struct gpio_chip *chip, > + unsigned offset) > +{ > + /* This device is output only */ > + return -EINVAL; > +} > + > +static int tps65086_gpio_direction_output(struct gpio_chip *chip, > + unsigned offset, int value) > +{ > + struct tps65086_gpio *gpio =3D to_tps65086_gpio(chip); > + > + /* Set the initial value */ > + regmap_update_bits(gpio->tps->regmap, TPS65086_GPOCTRL, > + BIT(4 + offset), value ? BIT(4 + offset) : 0); > + > + return 0; > +} > + > +static int tps65086_gpio_get(struct gpio_chip *chip, unsigned offset= ) > +{ > + struct tps65086_gpio *gpio =3D to_tps65086_gpio(chip); > + int ret, val; > + > + ret =3D regmap_read(gpio->tps->regmap, TPS65086_GPOCTRL, &val); > + if (ret < 0) > + return ret; > + > + return val & BIT(4 + offset); > +} > + > +static void tps65086_gpio_set(struct gpio_chip *chip, unsigned offse= t, > + int value) > +{ > + struct tps65086_gpio *gpio =3D to_tps65086_gpio(chip); > + > + regmap_update_bits(gpio->tps->regmap, TPS65086_GPOCTRL, > + BIT(4 + offset), value ? BIT(4 + offset) : 0); > +} > + > +static struct gpio_chip template_chip =3D { > + .label =3D "tps65086-gpio", > + .owner =3D THIS_MODULE, > + .get_direction =3D tps65086_gpio_get_direction, > + .direction_input =3D tps65086_gpio_direction_input, > + .direction_output =3D tps65086_gpio_direction_output, > + .get =3D tps65086_gpio_get, > + .set =3D tps65086_gpio_set, > + .base =3D -1, > + .ngpio =3D 4, > + .can_sleep =3D true, > +}; > + > +static int tps65086_gpio_probe(struct platform_device *pdev) > +{ > + struct tps65086_gpio *gpio; > + int ret; > + > + gpio =3D devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); > + if (!gpio) > + return -ENOMEM; > + > + platform_set_drvdata(pdev, gpio); > + > + gpio->tps =3D dev_get_drvdata(pdev->dev.parent); > + gpio->chip =3D template_chip; > + gpio->chip.parent =3D gpio->tps->dev; > + > + ret =3D gpiochip_add(&gpio->chip); > + if (ret < 0) { > + dev_err(&pdev->dev, "Could not register gpiochip, %d\n", ret); > + return ret; > + } > + > + return 0; > +} > + > +static int tps65086_gpio_remove(struct platform_device *pdev) > +{ > + struct tps65086_gpio *gpio =3D platform_get_drvdata(pdev); > + > + gpiochip_remove(&gpio->chip); > + > + return 0; > +} > + > +static const struct platform_device_id tps65086_gpio_id_table[] =3D = { > + { "tps65086-gpio", }, > + { /* sentinel */ } > +}; > +MODULE_DEVICE_TABLE(platform, tps65086_gpio_id_table); > + > +static struct platform_driver tps65086_gpio_driver =3D { > + .driver =3D { > + .name =3D "tps65086-gpio", > + }, > + .probe =3D tps65086_gpio_probe, > + .remove =3D tps65086_gpio_remove, > + .id_table =3D tps65086_gpio_id_table, > +}; > +module_platform_driver(tps65086_gpio_driver); > + > +MODULE_AUTHOR("Andrew F. Davis "); > +MODULE_DESCRIPTION("TPS65086 GPIO driver"); > +MODULE_LICENSE("GPL v2"); --=20 Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org =E2=94=82 Open source software for ARM SoCs =46ollow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" i= n the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html