Re: [PATCH v3 1/3] iio:adc: add iio driver for Palmas (twl6035/7) gpadc
Am 25.10.2015 um 13:04 schrieb Jonathan Cameron : > On 16/10/15 13:53, H. Nikolaus Schaller wrote: >> This driver code was found as: >> >> https://android.googlesource.com/kernel/tegra/+/aaabb2e045f31e5a970109ffdaae900dd403d17e/drivers/staging/iio/adc >> >> Fixed various compilation issues and test this driver on omap5 evm. >> >> Signed-off-by: Pradeep Goudagunta >> Signed-off-by: H. Nikolaus Schaller >> Signed-off-by: Marek Belisko >> Acked-by: Laxman Dewangan >> Reviewed-by: Jonathan Cameron >> Acked-by: Lee Jones > Applied to the togreg branch of iio.git - initially pushed out as testing. Thanks! I was just working on a V4 - but that is a fix for omap5-uevm DT only. So I will remove the driver code and submit separately. > Unfortunately the timing is such that it's not going to make the upcoming > merge window so will be an early entry to linux-next after the merge window > closes. Well, that happens. We can forward-port it to our distribution kernel so that it is already available to users. > > Jonathan BR, Nikolaus >> --- >> drivers/iio/adc/Kconfig| 8 + >> drivers/iio/adc/Makefile | 1 + >> drivers/iio/adc/palmas_gpadc.c | 817 >> + >> include/linux/mfd/palmas.h | 75 ++-- >> 4 files changed, 877 insertions(+), 24 deletions(-) >> create mode 100644 drivers/iio/adc/palmas_gpadc.c >> >> diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig >> index 50c103d..5100e56 100644 >> --- a/drivers/iio/adc/Kconfig >> +++ b/drivers/iio/adc/Kconfig >> @@ -264,6 +264,14 @@ config NAU7802 >>To compile this driver as a module, choose M here: the >>module will be called nau7802. >> >> +config PALMAS_GPADC >> +tristate "TI Palmas General Purpose ADC" >> +depends on MFD_PALMAS >> +help >> + Palmas series pmic chip by Texas Instruments (twl6035/6037) >> + is used in smartphones and tablets and supports a 16 channel >> + general purpose ADC. >> + >> config QCOM_SPMI_IADC >> tristate "Qualcomm SPMI PMIC current ADC" >> depends on SPMI >> diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile >> index a096210..716f112 100644 >> --- a/drivers/iio/adc/Makefile >> +++ b/drivers/iio/adc/Makefile >> @@ -26,6 +26,7 @@ obj-$(CONFIG_MCP320X) += mcp320x.o >> obj-$(CONFIG_MCP3422) += mcp3422.o >> obj-$(CONFIG_MEN_Z188_ADC) += men_z188_adc.o >> obj-$(CONFIG_NAU7802) += nau7802.o >> +obj-$(CONFIG_PALMAS_GPADC) += palmas_gpadc.o >> obj-$(CONFIG_QCOM_SPMI_IADC) += qcom-spmi-iadc.o >> obj-$(CONFIG_QCOM_SPMI_VADC) += qcom-spmi-vadc.o >> obj-$(CONFIG_ROCKCHIP_SARADC) += rockchip_saradc.o >> diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c >> new file mode 100644 >> index 000..71763c5 >> --- /dev/null >> +++ b/drivers/iio/adc/palmas_gpadc.c >> @@ -0,0 +1,817 @@ >> +/* >> + * palmas-adc.c -- TI PALMAS GPADC. >> + * >> + * Copyright (c) 2013, NVIDIA Corporation. All rights reserved. >> + * >> + * Author: Pradeep Goudagunta >> + * >> + * 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. >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#define MOD_NAME "palmas-gpadc" >> +#define PALMAS_ADC_CONVERSION_TIMEOUT (msecs_to_jiffies(5000)) >> +#define PALMAS_TO_BE_CALCULATED 0 >> +#define PALMAS_GPADC_TRIMINVALID-1 >> + >> +struct palmas_gpadc_info { >> +/* calibration codes and regs */ >> +int x1; /* lower ideal code */ >> +int x2; /* higher ideal code */ >> +int v1; /* expected lower volt reading */ >> +int v2; /* expected higher volt reading */ >> +u8 trim1_reg; /* register number for lower trim */ >> +u8 trim2_reg; /* register number for upper trim */ >> +int gain; /* calculated from above (after reading trim regs) */ >> +int offset; /* calculated from above (after reading trim regs) */ >> +int gain_error; /* calculated from above (after reading trim regs) */ >> +bool is_uncalibrated; /* if channel has calibration data */ >> +}; >> + >> +#define PALMAS_ADC_INFO(_chan, _x1, _x2, _v1, _v2, _t1, _t2, >> _is_uncalibrated) \ >> +[PALMAS_ADC_CH_##_chan] = { \ >> +.x1 = _x1, \ >> +.x2 = _x2, \ >> +.v1 = _v1, \ >> +.v2 = _v2, \ >> +.gain = PALMAS_TO_BE_CALCULATED, \ >> +.offset = PALMAS_TO_BE_CALCULATED, \ >> +.gain_error = PALMAS_TO_BE_CALCULATED, \ >> +.trim1_reg = PALMAS_GPADC_TRIM##_t1, \ >> +.trim2_reg = PALMAS_GPADC_TRIM##_t2, \ >> +.is_uncalibrated = _is_uncalibrated \ >> +} >> + >> +static struct palmas_gpadc_info palmas_gpadc_info[] = { >> +PALMAS_ADC_INFO(IN0, 2
Re: [PATCH v3 1/3] iio:adc: add iio driver for Palmas (twl6035/7) gpadc
On 16/10/15 13:53, H. Nikolaus Schaller wrote: > This driver code was found as: > > https://android.googlesource.com/kernel/tegra/+/aaabb2e045f31e5a970109ffdaae900dd403d17e/drivers/staging/iio/adc > > Fixed various compilation issues and test this driver on omap5 evm. > > Signed-off-by: Pradeep Goudagunta > Signed-off-by: H. Nikolaus Schaller > Signed-off-by: Marek Belisko > Acked-by: Laxman Dewangan > Reviewed-by: Jonathan Cameron > Acked-by: Lee Jones Applied to the togreg branch of iio.git - initially pushed out as testing. Unfortunately the timing is such that it's not going to make the upcoming merge window so will be an early entry to linux-next after the merge window closes. Jonathan > --- > drivers/iio/adc/Kconfig| 8 + > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/palmas_gpadc.c | 817 > + > include/linux/mfd/palmas.h | 75 ++-- > 4 files changed, 877 insertions(+), 24 deletions(-) > create mode 100644 drivers/iio/adc/palmas_gpadc.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 50c103d..5100e56 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -264,6 +264,14 @@ config NAU7802 > To compile this driver as a module, choose M here: the > module will be called nau7802. > > +config PALMAS_GPADC > + tristate "TI Palmas General Purpose ADC" > + depends on MFD_PALMAS > + help > + Palmas series pmic chip by Texas Instruments (twl6035/6037) > + is used in smartphones and tablets and supports a 16 channel > + general purpose ADC. > + > config QCOM_SPMI_IADC > tristate "Qualcomm SPMI PMIC current ADC" > depends on SPMI > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index a096210..716f112 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -26,6 +26,7 @@ obj-$(CONFIG_MCP320X) += mcp320x.o > obj-$(CONFIG_MCP3422) += mcp3422.o > obj-$(CONFIG_MEN_Z188_ADC) += men_z188_adc.o > obj-$(CONFIG_NAU7802) += nau7802.o > +obj-$(CONFIG_PALMAS_GPADC) += palmas_gpadc.o > obj-$(CONFIG_QCOM_SPMI_IADC) += qcom-spmi-iadc.o > obj-$(CONFIG_QCOM_SPMI_VADC) += qcom-spmi-vadc.o > obj-$(CONFIG_ROCKCHIP_SARADC) += rockchip_saradc.o > diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c > new file mode 100644 > index 000..71763c5 > --- /dev/null > +++ b/drivers/iio/adc/palmas_gpadc.c > @@ -0,0 +1,817 @@ > +/* > + * palmas-adc.c -- TI PALMAS GPADC. > + * > + * Copyright (c) 2013, NVIDIA Corporation. All rights reserved. > + * > + * Author: Pradeep Goudagunta > + * > + * 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. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MOD_NAME "palmas-gpadc" > +#define PALMAS_ADC_CONVERSION_TIMEOUT(msecs_to_jiffies(5000)) > +#define PALMAS_TO_BE_CALCULATED 0 > +#define PALMAS_GPADC_TRIMINVALID -1 > + > +struct palmas_gpadc_info { > +/* calibration codes and regs */ > + int x1; /* lower ideal code */ > + int x2; /* higher ideal code */ > + int v1; /* expected lower volt reading */ > + int v2; /* expected higher volt reading */ > + u8 trim1_reg; /* register number for lower trim */ > + u8 trim2_reg; /* register number for upper trim */ > + int gain; /* calculated from above (after reading trim regs) */ > + int offset; /* calculated from above (after reading trim regs) */ > + int gain_error; /* calculated from above (after reading trim regs) */ > + bool is_uncalibrated; /* if channel has calibration data */ > +}; > + > +#define PALMAS_ADC_INFO(_chan, _x1, _x2, _v1, _v2, _t1, _t2, > _is_uncalibrated) \ > + [PALMAS_ADC_CH_##_chan] = { \ > + .x1 = _x1, \ > + .x2 = _x2, \ > + .v1 = _v1, \ > + .v2 = _v2, \ > + .gain = PALMAS_TO_BE_CALCULATED, \ > + .offset = PALMAS_TO_BE_CALCULATED, \ > + .gain_error = PALMAS_TO_BE_CALCULATED, \ > + .trim1_reg = PALMAS_GPADC_TRIM##_t1, \ > + .trim2_reg = PALMAS_GPADC_TRIM##_t2, \ > + .is_uncalibrated = _is_uncalibrated \ > + } > + > +static struct palmas_gpadc_info palmas_gpadc_info[] = { > + PALMAS_ADC_INFO(IN0, 2064, 3112, 630, 950, 1, 2, false), > + PALMAS_ADC_INFO(IN1, 2064, 3112, 630, 950, 1, 2, false), > + PALMAS_ADC_INFO(IN2, 2064, 3112, 1260, 1900, 3, 4, false), > + PALMAS_ADC_INFO(IN3, 2064, 3112, 630, 950, 1, 2, false), > + PALMAS_ADC_INFO(IN4, 2064, 3112, 630, 950, 1, 2, false), > + PALMAS_ADC_INFO(IN5, 2064, 3112, 630, 950, 1, 2, false), > + PALMAS_ADC_INFO(IN6, 2064, 3112, 252
[PATCH v3 1/3] iio:adc: add iio driver for Palmas (twl6035/7) gpadc
This driver code was found as: https://android.googlesource.com/kernel/tegra/+/aaabb2e045f31e5a970109ffdaae900dd403d17e/drivers/staging/iio/adc Fixed various compilation issues and test this driver on omap5 evm. Signed-off-by: Pradeep Goudagunta Signed-off-by: H. Nikolaus Schaller Signed-off-by: Marek Belisko Acked-by: Laxman Dewangan Reviewed-by: Jonathan Cameron Acked-by: Lee Jones --- drivers/iio/adc/Kconfig| 8 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/palmas_gpadc.c | 817 + include/linux/mfd/palmas.h | 75 ++-- 4 files changed, 877 insertions(+), 24 deletions(-) create mode 100644 drivers/iio/adc/palmas_gpadc.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 50c103d..5100e56 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -264,6 +264,14 @@ config NAU7802 To compile this driver as a module, choose M here: the module will be called nau7802. +config PALMAS_GPADC + tristate "TI Palmas General Purpose ADC" + depends on MFD_PALMAS + help + Palmas series pmic chip by Texas Instruments (twl6035/6037) + is used in smartphones and tablets and supports a 16 channel + general purpose ADC. + config QCOM_SPMI_IADC tristate "Qualcomm SPMI PMIC current ADC" depends on SPMI diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index a096210..716f112 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_MCP320X) += mcp320x.o obj-$(CONFIG_MCP3422) += mcp3422.o obj-$(CONFIG_MEN_Z188_ADC) += men_z188_adc.o obj-$(CONFIG_NAU7802) += nau7802.o +obj-$(CONFIG_PALMAS_GPADC) += palmas_gpadc.o obj-$(CONFIG_QCOM_SPMI_IADC) += qcom-spmi-iadc.o obj-$(CONFIG_QCOM_SPMI_VADC) += qcom-spmi-vadc.o obj-$(CONFIG_ROCKCHIP_SARADC) += rockchip_saradc.o diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c new file mode 100644 index 000..71763c5 --- /dev/null +++ b/drivers/iio/adc/palmas_gpadc.c @@ -0,0 +1,817 @@ +/* + * palmas-adc.c -- TI PALMAS GPADC. + * + * Copyright (c) 2013, NVIDIA Corporation. All rights reserved. + * + * Author: Pradeep Goudagunta + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MOD_NAME "palmas-gpadc" +#define PALMAS_ADC_CONVERSION_TIMEOUT (msecs_to_jiffies(5000)) +#define PALMAS_TO_BE_CALCULATED 0 +#define PALMAS_GPADC_TRIMINVALID -1 + +struct palmas_gpadc_info { +/* calibration codes and regs */ + int x1; /* lower ideal code */ + int x2; /* higher ideal code */ + int v1; /* expected lower volt reading */ + int v2; /* expected higher volt reading */ + u8 trim1_reg; /* register number for lower trim */ + u8 trim2_reg; /* register number for upper trim */ + int gain; /* calculated from above (after reading trim regs) */ + int offset; /* calculated from above (after reading trim regs) */ + int gain_error; /* calculated from above (after reading trim regs) */ + bool is_uncalibrated; /* if channel has calibration data */ +}; + +#define PALMAS_ADC_INFO(_chan, _x1, _x2, _v1, _v2, _t1, _t2, _is_uncalibrated) \ + [PALMAS_ADC_CH_##_chan] = { \ + .x1 = _x1, \ + .x2 = _x2, \ + .v1 = _v1, \ + .v2 = _v2, \ + .gain = PALMAS_TO_BE_CALCULATED, \ + .offset = PALMAS_TO_BE_CALCULATED, \ + .gain_error = PALMAS_TO_BE_CALCULATED, \ + .trim1_reg = PALMAS_GPADC_TRIM##_t1, \ + .trim2_reg = PALMAS_GPADC_TRIM##_t2, \ + .is_uncalibrated = _is_uncalibrated \ + } + +static struct palmas_gpadc_info palmas_gpadc_info[] = { + PALMAS_ADC_INFO(IN0, 2064, 3112, 630, 950, 1, 2, false), + PALMAS_ADC_INFO(IN1, 2064, 3112, 630, 950, 1, 2, false), + PALMAS_ADC_INFO(IN2, 2064, 3112, 1260, 1900, 3, 4, false), + PALMAS_ADC_INFO(IN3, 2064, 3112, 630, 950, 1, 2, false), + PALMAS_ADC_INFO(IN4, 2064, 3112, 630, 950, 1, 2, false), + PALMAS_ADC_INFO(IN5, 2064, 3112, 630, 950, 1, 2, false), + PALMAS_ADC_INFO(IN6, 2064, 3112, 2520, 3800, 5, 6, false), + PALMAS_ADC_INFO(IN7, 2064, 3112, 2520, 3800, 7, 8, false), + PALMAS_ADC_INFO(IN8, 2064, 3112, 3150, 4750, 9, 10, false), + PALMAS_ADC_INFO(IN9, 2064, 3112, 5670, 8550, 11, 12, false), + PALMAS_ADC_INFO(IN10, 2064, 3112, 3465, 5225, 13, 14, false), + PALMAS_ADC_INFO(IN11, 0, 0, 0, 0, INVALID, INVALID, true), + PALMAS_ADC_INFO(IN12, 0, 0, 0, 0, INVALID, INVALID, true), + PALMAS_ADC_INFO(IN13, 0, 0, 0, 0