RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
Thanks Lee. Sorry for the noise, as some keystrokes sent out the empty response earlier. Raj > -Original Message- > From: Mani, Rajmohan > Sent: Tuesday, August 08, 2017 11:58 AM > To: 'Lee Jones' <lee.jo...@linaro.org> > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > a...@vger.kernel.org; Linus Walleij <linus.wall...@linaro.org>; Alexandre > Courbot <gnu...@gmail.com>; Rafael J. Wysocki <r...@rjwysocki.net>; Len > Brown <l...@kernel.org>; sakari.ai...@linux.intel.com; Andy Shevchenko > <andy.shevche...@gmail.com> > Subject: RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > > > > -Original Message- > > From: Lee Jones [mailto:lee.jo...@linaro.org] > > Sent: Tuesday, August 08, 2017 12:40 AM > > To: Mani, Rajmohan <rajmohan.m...@intel.com> > > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > > a...@vger.kernel.org; Linus Walleij <linus.wall...@linaro.org>; > > Alexandre Courbot <gnu...@gmail.com>; Rafael J. Wysocki > > <r...@rjwysocki.net>; Len Brown <l...@kernel.org>; > > sakari.ai...@linux.intel.com; Andy Shevchenko > > <andy.shevche...@gmail.com> > > Subject: Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > > > On Fri, 28 Jul 2017, Rajmohan Mani wrote: > > > > > The TPS68470 device is an advanced power management unit that > powers > > a > > > Compact Camera Module (CCM), generates clocks for image sensors, > > > drives a dual LED for Flash and incorporates two LED drivers for > > > general purpose indicators. > > > > > > This patch adds support for TPS68470 mfd device. > > > > > > Signed-off-by: Rajmohan Mani <rajmohan.m...@intel.com> > > > --- > > > drivers/mfd/Kconfig | 18 > > > drivers/mfd/Makefile | 1 + > > > drivers/mfd/tps68470.c | 106 > > +++ > > > include/linux/mfd/tps68470.h | 97 > > > +++ > > > 4 files changed, 222 insertions(+) > > > create mode 100644 drivers/mfd/tps68470.c create mode 100644 > > > include/linux/mfd/tps68470.h > > > > Applied, thanks. > > > > -- > > Lee Jones > > Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source > > software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
Thanks Lee. Sorry for the noise, as some keystrokes sent out the empty response earlier. Raj > -Original Message- > From: Mani, Rajmohan > Sent: Tuesday, August 08, 2017 11:58 AM > To: 'Lee Jones' > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > a...@vger.kernel.org; Linus Walleij ; Alexandre > Courbot ; Rafael J. Wysocki ; Len > Brown ; sakari.ai...@linux.intel.com; Andy Shevchenko > > Subject: RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > > > > -Original Message- > > From: Lee Jones [mailto:lee.jo...@linaro.org] > > Sent: Tuesday, August 08, 2017 12:40 AM > > To: Mani, Rajmohan > > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > > a...@vger.kernel.org; Linus Walleij ; > > Alexandre Courbot ; Rafael J. Wysocki > > ; Len Brown ; > > sakari.ai...@linux.intel.com; Andy Shevchenko > > > > Subject: Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > > > On Fri, 28 Jul 2017, Rajmohan Mani wrote: > > > > > The TPS68470 device is an advanced power management unit that > powers > > a > > > Compact Camera Module (CCM), generates clocks for image sensors, > > > drives a dual LED for Flash and incorporates two LED drivers for > > > general purpose indicators. > > > > > > This patch adds support for TPS68470 mfd device. > > > > > > Signed-off-by: Rajmohan Mani > > > --- > > > drivers/mfd/Kconfig | 18 > > > drivers/mfd/Makefile | 1 + > > > drivers/mfd/tps68470.c | 106 > > +++ > > > include/linux/mfd/tps68470.h | 97 > > > +++ > > > 4 files changed, 222 insertions(+) > > > create mode 100644 drivers/mfd/tps68470.c create mode 100644 > > > include/linux/mfd/tps68470.h > > > > Applied, thanks. > > > > -- > > Lee Jones > > Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source > > software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
> -Original Message- > From: Lee Jones [mailto:lee.jo...@linaro.org] > Sent: Tuesday, August 08, 2017 12:40 AM > To: Mani, Rajmohan <rajmohan.m...@intel.com> > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > a...@vger.kernel.org; Linus Walleij <linus.wall...@linaro.org>; Alexandre > Courbot <gnu...@gmail.com>; Rafael J. Wysocki <r...@rjwysocki.net>; Len > Brown <l...@kernel.org>; sakari.ai...@linux.intel.com; Andy Shevchenko > <andy.shevche...@gmail.com> > Subject: Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > On Fri, 28 Jul 2017, Rajmohan Mani wrote: > > > The TPS68470 device is an advanced power management unit that powers > a > > Compact Camera Module (CCM), generates clocks for image sensors, > > drives a dual LED for Flash and incorporates two LED drivers for > > general purpose indicators. > > > > This patch adds support for TPS68470 mfd device. > > > > Signed-off-by: Rajmohan Mani <rajmohan.m...@intel.com> > > --- > > drivers/mfd/Kconfig | 18 > > drivers/mfd/Makefile | 1 + > > drivers/mfd/tps68470.c | 106 > +++ > > include/linux/mfd/tps68470.h | 97 > > +++ > > 4 files changed, 222 insertions(+) > > create mode 100644 drivers/mfd/tps68470.c create mode 100644 > > include/linux/mfd/tps68470.h > > Applied, thanks. > > -- > Lee Jones > Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source > software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
RE: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
> -Original Message- > From: Lee Jones [mailto:lee.jo...@linaro.org] > Sent: Tuesday, August 08, 2017 12:40 AM > To: Mani, Rajmohan > Cc: linux-kernel@vger.kernel.org; linux-g...@vger.kernel.org; linux- > a...@vger.kernel.org; Linus Walleij ; Alexandre > Courbot ; Rafael J. Wysocki ; Len > Brown ; sakari.ai...@linux.intel.com; Andy Shevchenko > > Subject: Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470 > > On Fri, 28 Jul 2017, Rajmohan Mani wrote: > > > The TPS68470 device is an advanced power management unit that powers > a > > Compact Camera Module (CCM), generates clocks for image sensors, > > drives a dual LED for Flash and incorporates two LED drivers for > > general purpose indicators. > > > > This patch adds support for TPS68470 mfd device. > > > > Signed-off-by: Rajmohan Mani > > --- > > drivers/mfd/Kconfig | 18 > > drivers/mfd/Makefile | 1 + > > drivers/mfd/tps68470.c | 106 > +++ > > include/linux/mfd/tps68470.h | 97 > > +++ > > 4 files changed, 222 insertions(+) > > create mode 100644 drivers/mfd/tps68470.c create mode 100644 > > include/linux/mfd/tps68470.h > > Applied, thanks. > > -- > Lee Jones > Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source > software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
On Fri, 28 Jul 2017, Rajmohan Mani wrote: > The TPS68470 device is an advanced power management > unit that powers a Compact Camera Module (CCM), > generates clocks for image sensors, drives a dual > LED for Flash and incorporates two LED drivers for > general purpose indicators. > > This patch adds support for TPS68470 mfd device. > > Signed-off-by: Rajmohan Mani> --- > drivers/mfd/Kconfig | 18 > drivers/mfd/Makefile | 1 + > drivers/mfd/tps68470.c | 106 > +++ > include/linux/mfd/tps68470.h | 97 +++ > 4 files changed, 222 insertions(+) > create mode 100644 drivers/mfd/tps68470.c > create mode 100644 include/linux/mfd/tps68470.h Applied, thanks. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Re: [PATCH v6 1/3] mfd: Add new mfd device TPS68470
On Fri, 28 Jul 2017, Rajmohan Mani wrote: > The TPS68470 device is an advanced power management > unit that powers a Compact Camera Module (CCM), > generates clocks for image sensors, drives a dual > LED for Flash and incorporates two LED drivers for > general purpose indicators. > > This patch adds support for TPS68470 mfd device. > > Signed-off-by: Rajmohan Mani > --- > drivers/mfd/Kconfig | 18 > drivers/mfd/Makefile | 1 + > drivers/mfd/tps68470.c | 106 > +++ > include/linux/mfd/tps68470.h | 97 +++ > 4 files changed, 222 insertions(+) > create mode 100644 drivers/mfd/tps68470.c > create mode 100644 include/linux/mfd/tps68470.h Applied, thanks. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
[PATCH v6 1/3] mfd: Add new mfd device TPS68470
The TPS68470 device is an advanced power management unit that powers a Compact Camera Module (CCM), generates clocks for image sensors, drives a dual LED for Flash and incorporates two LED drivers for general purpose indicators. This patch adds support for TPS68470 mfd device. Signed-off-by: Rajmohan Mani--- drivers/mfd/Kconfig | 18 drivers/mfd/Makefile | 1 + drivers/mfd/tps68470.c | 106 +++ include/linux/mfd/tps68470.h | 97 +++ 4 files changed, 222 insertions(+) create mode 100644 drivers/mfd/tps68470.c create mode 100644 include/linux/mfd/tps68470.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 94ad2c1..74f41a1 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1337,6 +1337,24 @@ config MFD_TPS65217 This driver can also be built as a module. If so, the module will be called tps65217. +config MFD_TPS68470 + bool "TI TPS68470 Power Management / LED chips" + depends on ACPI && I2C=y + select MFD_CORE + select REGMAP_I2C + select I2C_DESIGNWARE_PLATFORM + help + If you say yes here you get support for the TPS68470 series of + Power Management / LED chips. + + These include voltage regulators, LEDs and other features + that are often used in portable devices. + + This option is a bool as it provides an ACPI operation + region, which must be available before any of the devices + using this are probed. This option also configures the + designware-i2c driver to be built-in, for the same reason. + config MFD_TI_LP873X tristate "TI LP873X Power Management IC" depends on I2C diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 080793b..0b1fd82 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -83,6 +83,7 @@ obj-$(CONFIG_MFD_TPS65910)+= tps65910.o obj-$(CONFIG_MFD_TPS65912) += tps65912-core.o obj-$(CONFIG_MFD_TPS65912_I2C) += tps65912-i2c.o obj-$(CONFIG_MFD_TPS65912_SPI) += tps65912-spi.o +obj-$(CONFIG_MFD_TPS68470) += tps68470.o obj-$(CONFIG_MFD_TPS80031) += tps80031.o obj-$(CONFIG_MENELAUS) += menelaus.o diff --git a/drivers/mfd/tps68470.c b/drivers/mfd/tps68470.c new file mode 100644 index 000..189efae --- /dev/null +++ b/drivers/mfd/tps68470.c @@ -0,0 +1,106 @@ +/* + * TPS68470 chip Parent driver + * + * Copyright (C) 2017 Intel Corporation + * + * Authors: + * Rajmohan Mani + * Tianshu Qiu + * Jian Xu Zheng + * Yuning Pu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include + +static const struct mfd_cell tps68470s[] = { + { .name = "tps68470-gpio" }, + { .name = "tps68470_pmic_opregion" }, +}; + +static const struct regmap_config tps68470_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .max_register = TPS68470_REG_MAX, +}; + +static int tps68470_chip_init(struct device *dev, struct regmap *regmap) +{ + unsigned int version; + int ret; + + /* Force software reset */ + ret = regmap_write(regmap, TPS68470_REG_RESET, TPS68470_REG_RESET_MASK); + if (ret) + return ret; + + ret = regmap_read(regmap, TPS68470_REG_REVID, ); + if (ret) { + dev_err(dev, "Failed to read revision register: %d\n", ret); + return ret; + } + + dev_info(dev, "TPS68470 REVID: 0x%x\n", version); + + return 0; +} + +static int tps68470_probe(struct i2c_client *client) +{ + struct device *dev = >dev; + struct regmap *regmap; + int ret; + + regmap = devm_regmap_init_i2c(client, _regmap_config); + if (IS_ERR(regmap)) { + dev_err(dev, "devm_regmap_init_i2c Error %ld\n", + PTR_ERR(regmap)); + return PTR_ERR(regmap); + } + + i2c_set_clientdata(client, regmap); + + ret = tps68470_chip_init(dev, regmap); + if (ret < 0) { + dev_err(dev, "TPS68470 Init Error %d\n", ret); + return ret; + } + + ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, tps68470s, + ARRAY_SIZE(tps68470s), NULL, 0, NULL); + if (ret < 0) { + dev_err(dev, "devm_mfd_add_devices failed: %d\n", ret); +
[PATCH v6 1/3] mfd: Add new mfd device TPS68470
The TPS68470 device is an advanced power management unit that powers a Compact Camera Module (CCM), generates clocks for image sensors, drives a dual LED for Flash and incorporates two LED drivers for general purpose indicators. This patch adds support for TPS68470 mfd device. Signed-off-by: Rajmohan Mani --- drivers/mfd/Kconfig | 18 drivers/mfd/Makefile | 1 + drivers/mfd/tps68470.c | 106 +++ include/linux/mfd/tps68470.h | 97 +++ 4 files changed, 222 insertions(+) create mode 100644 drivers/mfd/tps68470.c create mode 100644 include/linux/mfd/tps68470.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 94ad2c1..74f41a1 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1337,6 +1337,24 @@ config MFD_TPS65217 This driver can also be built as a module. If so, the module will be called tps65217. +config MFD_TPS68470 + bool "TI TPS68470 Power Management / LED chips" + depends on ACPI && I2C=y + select MFD_CORE + select REGMAP_I2C + select I2C_DESIGNWARE_PLATFORM + help + If you say yes here you get support for the TPS68470 series of + Power Management / LED chips. + + These include voltage regulators, LEDs and other features + that are often used in portable devices. + + This option is a bool as it provides an ACPI operation + region, which must be available before any of the devices + using this are probed. This option also configures the + designware-i2c driver to be built-in, for the same reason. + config MFD_TI_LP873X tristate "TI LP873X Power Management IC" depends on I2C diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 080793b..0b1fd82 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -83,6 +83,7 @@ obj-$(CONFIG_MFD_TPS65910)+= tps65910.o obj-$(CONFIG_MFD_TPS65912) += tps65912-core.o obj-$(CONFIG_MFD_TPS65912_I2C) += tps65912-i2c.o obj-$(CONFIG_MFD_TPS65912_SPI) += tps65912-spi.o +obj-$(CONFIG_MFD_TPS68470) += tps68470.o obj-$(CONFIG_MFD_TPS80031) += tps80031.o obj-$(CONFIG_MENELAUS) += menelaus.o diff --git a/drivers/mfd/tps68470.c b/drivers/mfd/tps68470.c new file mode 100644 index 000..189efae --- /dev/null +++ b/drivers/mfd/tps68470.c @@ -0,0 +1,106 @@ +/* + * TPS68470 chip Parent driver + * + * Copyright (C) 2017 Intel Corporation + * + * Authors: + * Rajmohan Mani + * Tianshu Qiu + * Jian Xu Zheng + * Yuning Pu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include + +static const struct mfd_cell tps68470s[] = { + { .name = "tps68470-gpio" }, + { .name = "tps68470_pmic_opregion" }, +}; + +static const struct regmap_config tps68470_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .max_register = TPS68470_REG_MAX, +}; + +static int tps68470_chip_init(struct device *dev, struct regmap *regmap) +{ + unsigned int version; + int ret; + + /* Force software reset */ + ret = regmap_write(regmap, TPS68470_REG_RESET, TPS68470_REG_RESET_MASK); + if (ret) + return ret; + + ret = regmap_read(regmap, TPS68470_REG_REVID, ); + if (ret) { + dev_err(dev, "Failed to read revision register: %d\n", ret); + return ret; + } + + dev_info(dev, "TPS68470 REVID: 0x%x\n", version); + + return 0; +} + +static int tps68470_probe(struct i2c_client *client) +{ + struct device *dev = >dev; + struct regmap *regmap; + int ret; + + regmap = devm_regmap_init_i2c(client, _regmap_config); + if (IS_ERR(regmap)) { + dev_err(dev, "devm_regmap_init_i2c Error %ld\n", + PTR_ERR(regmap)); + return PTR_ERR(regmap); + } + + i2c_set_clientdata(client, regmap); + + ret = tps68470_chip_init(dev, regmap); + if (ret < 0) { + dev_err(dev, "TPS68470 Init Error %d\n", ret); + return ret; + } + + ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, tps68470s, + ARRAY_SIZE(tps68470s), NULL, 0, NULL); + if (ret < 0) { + dev_err(dev, "devm_mfd_add_devices failed: %d\n", ret); + return ret; + } + + return 0; +} + +static const struct acpi_device_id tps68470_acpi_ids[] = { +