* [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers @ 2017-03-20 8:16 Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers Quentin Schulz ` (9 more replies) 0 siblings, 10 replies; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi These patches haven't changed since v4. The goal is to split the series in two series, one (this one) with patches ready to be merged and the other one (everything impacting the battery power supply) which depends on an ongoing series by Liam Breck to be merged once the ongoing series has a consensus. Therefore, this series of patch is ready to be merged. I don't see any dependency between subsystems. Thanks, Quentin Quote from v4 cover letter: The X-Powers AXP20X and AXP22X PMICs have multiple ADCs. They expose information and data of the various power supplies they support such as ACIN, battery and VBUS. For example, they expose the current battery voltage, charge or discharge, as well as ACIN and VBUS current voltages and currents, internal PMIC temperature and ADC on 2 different GPIOs when in the right mode (for the AXP209 only). The ACIN power supply driver is added by this patch. The AXP20X and AXP22X can both read the status and the "usability" of the power supply but only the AXP209 will be able to tell the current current and voltage of the power supply by reading ADC channels. It is simply not supported by the AXP22X PMICs. The battery power supply driver is also added by this patch. The AXP20X and AXP22X share most of their behaviour but have slight variations. The allowed target voltages for battery charging are not the same, the AXP22X PMIC are able to tell if the battery percentage computed by the PMIC is trustworthy and they have different formulas for computing max current for battery power supply. The driver is able to give the current voltage and current of the battery (be it charging or discharging), the maximal and minimal voltage and maximal current allowed for the battery, whether the battery is present and usable and its capacity. It will get the battery current current and voltage by reading the ADC channels. The PMIC allows maximal voltages (4.36V for AXP20X and 4.22V and 4.24V for AXP22X) that should not be used with Lithium-based batteries and since this PMIC is supposed to be used with Lithium-based batteries, they have been disabled. The values returned by the ADC driver are multipled by 1000 to scale from the mV returned by the ADC to the uV expected by the power supply framework. This series of patch adds DT bindings for ACIN power supply, ADC and battery power supply drivers for AXP20X and AXP22X PMICs and their documentation. It also enables the supported power supplies for the Nextthing Co. CHIP and Sinlinx SinA33 boards. The different drivers are also added to the MFD cells of the AXP20X and AXP22X cells and the writeable and volatile regs updated to work with the newly added drivers. This series of patch is based on a previous upstreaming attempt done by Bruno Prémont few months ago. It differs in three points: the ADC driver does not tell the battery temperature (TS_IN) as I do not have a board to test it with, it does not tell the instantaneous battery power as it returns crazy values for me and finally no support for OCV curves for the battery. You can test these patches from this repo and branch: https://github.com/QSchulz/linux/tree/axp2xx_adc_batt_ac_v4 v4: - added the ability to set maximum constant charge current from sysfs, - added a warning when setting a higher than current maximum constant charge current, - set default to minimum possible value for current and maximum constant charge current when no battery DT is present or invalid battery DT, - fixed a forgotten custom formula to compute maximum constant charge current for AXP22X, - automatically lower the current constant charge current when it is higher than the maximum constant charge current about to be set, v3: - Removed DT property for constant charge current in favor of the WIP battery framework as requested by Sebastian Reichel, - Using a simple if condition instead of a switch in the ADC driver, - Fixed error handling in ADC driver's probe, - Fixed missing call to iio_map_array_unregister in the ADC driver's remove, - Removed ADC driver's DT node and documentation, - Merged IIO channel mapping patches into the original ADC driver patch, - Removed `adding V-OFF to writeable reg' patch as it's already in writeable reg range, v2: - Some registers' name have been changed to better reflect their purpose, - Make VBUS power supply driver use IIO channels when AXP ADC driver is enabled, but fall back on previous behavior when disabled. This is made to avoid the ADC driver overwritting registers for VBUS power supply ADC when removed, - Removed useless adding of data registers to volatile registers, - Reordered IIO channels, now grouped by same part of the PMIC (e.g. voltage and current of the battery have the same index in different IIO types), - Added structures for specific data instead of matching on IDs, - Switched from DT IIO channels mapping to iio_map structures IIO channels mapping, Quentin Quentin Schulz (9): mfd: axp20x: correct name of temperature data ADC registers iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs mfd: axp20x: add AC power supply cells for AXP22X PMICs ARM: dtsi: axp209: add AC power supply subnode ARM: dtsi: axp22x: add AC power supply subnode ARM: dts: sun8i: sina33: enable ACIN power supply subnode ARM: sun5i: chip: enable ACIN power supply subnode mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X arch/arm/boot/dts/axp209.dtsi | 5 + arch/arm/boot/dts/axp22x.dtsi | 5 + arch/arm/boot/dts/sun5i-r8-chip.dts | 4 + arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts | 4 + drivers/iio/adc/Kconfig | 10 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/axp20x_adc.c | 617 +++++++++++++++++++++++++ drivers/mfd/axp20x.c | 20 +- include/linux/mfd/axp20x.h | 4 +- 9 files changed, 667 insertions(+), 3 deletions(-) create mode 100644 drivers/iio/adc/axp20x_adc.c -- 2.9.3 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs Quentin Schulz ` (8 subsequent siblings) 9 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The registers 0x56 and 0x57 of AXP22X PMIC store the value of the internal temperature of the PMIC. This patch modifies the name of these registers from AXP22X_PMIC_ADC_H/L to AXP22X_PMIC_TEMP_H/L so their purpose is clearer. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> --- added in v2 drivers/mfd/axp20x.c | 2 +- include/linux/mfd/axp20x.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 0512900..e02edf1 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -101,7 +101,7 @@ static const struct regmap_range axp22x_volatile_ranges[] = { regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP20X_PWR_OP_MODE), regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), regmap_reg_range(AXP22X_GPIO_STATE, AXP22X_GPIO_STATE), - regmap_reg_range(AXP22X_PMIC_ADC_H, AXP20X_IPSOUT_V_HIGH_L), + regmap_reg_range(AXP22X_PMIC_TEMP_H, AXP20X_IPSOUT_V_HIGH_L), regmap_reg_range(AXP20X_FG_RES, AXP20X_FG_RES), }; diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h index 0d9a1ff..dc8798c 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -228,8 +228,8 @@ enum axp20x_variants { #define AXP20X_OCV_MAX 0xf /* AXP22X specific registers */ -#define AXP22X_PMIC_ADC_H 0x56 -#define AXP22X_PMIC_ADC_L 0x57 +#define AXP22X_PMIC_TEMP_H 0x56 +#define AXP22X_PMIC_TEMP_L 0x57 #define AXP22X_TS_ADC_H 0x58 #define AXP22X_TS_ADC_L 0x59 #define AXP22X_BATLOW_THRES1 0xe6 -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers 2017-03-20 8:16 ` [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers Quentin Schulz @ 2017-03-20 10:43 ` Lee Jones 0 siblings, 0 replies; 21+ messages in thread From: Lee Jones @ 2017-03-20 10:43 UTC (permalink / raw) To: Quentin Schulz Cc: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, icenowy, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On Mon, 20 Mar 2017, Quentin Schulz wrote: > The registers 0x56 and 0x57 of AXP22X PMIC store the value of the > internal temperature of the PMIC. > > This patch modifies the name of these registers from AXP22X_PMIC_ADC_H/L > to AXP22X_PMIC_TEMP_H/L so their purpose is clearer. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Acked-by: Chen-Yu Tsai <wens@csie.org> > Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> > Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> > --- > > added in v2 > > drivers/mfd/axp20x.c | 2 +- > include/linux/mfd/axp20x.h | 4 ++-- > 2 files changed, 3 insertions(+), 3 deletions(-) Applied, thanks. > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index 0512900..e02edf1 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -101,7 +101,7 @@ static const struct regmap_range axp22x_volatile_ranges[] = { > regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP20X_PWR_OP_MODE), > regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), > regmap_reg_range(AXP22X_GPIO_STATE, AXP22X_GPIO_STATE), > - regmap_reg_range(AXP22X_PMIC_ADC_H, AXP20X_IPSOUT_V_HIGH_L), > + regmap_reg_range(AXP22X_PMIC_TEMP_H, AXP20X_IPSOUT_V_HIGH_L), > regmap_reg_range(AXP20X_FG_RES, AXP20X_FG_RES), > }; > > diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h > index 0d9a1ff..dc8798c 100644 > --- a/include/linux/mfd/axp20x.h > +++ b/include/linux/mfd/axp20x.h > @@ -228,8 +228,8 @@ enum axp20x_variants { > #define AXP20X_OCV_MAX 0xf > > /* AXP22X specific registers */ > -#define AXP22X_PMIC_ADC_H 0x56 > -#define AXP22X_PMIC_ADC_L 0x57 > +#define AXP22X_PMIC_TEMP_H 0x56 > +#define AXP22X_PMIC_TEMP_L 0x57 > #define AXP22X_TS_ADC_H 0x58 > #define AXP22X_TS_ADC_L 0x59 > #define AXP22X_BATLOW_THRES1 0xe6 -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-22 4:34 ` Chen-Yu Tsai 2017-03-20 8:16 ` [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs Quentin Schulz ` (7 subsequent siblings) 9 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The X-Powers AXP20X and AXP22X PMICs have multiple ADCs. They expose the battery voltage, battery charge and discharge currents, AC-in and VBUS voltages and currents, 2 GPIOs muxable in ADC mode and PMIC temperature. This adds support for most of AXP20X and AXP22X ADCs. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Reviewed-by: Jonathan Cameron <jic23@kernel.org> --- v4: - added missing space at the beginning of a comment, - tidied axp20x_adc_offset_voltage and axp20x_write_raw to use switch case instead of if conditions, - added MODULE_DEVICE_TABLE for axp20x_adc_id_match for module autoloading, - merged two lines in axp20x_remove, v3: - moved from switch to if condition in axp20x_adc_raw and axp22x_adc_raw, - removed DT support as DT node has been dropped, - use of platform_device_id - correctly defined the name of the iio device (name used to probe the driver), - added goto for errors in probe, - added iio_map_array_unregister to the remove function, v2: - removed unused defines, - changed BIT(x) to 1 << x when describing bits purpose for which 2 << x or 3 << x exists, to be consistent, - changed ADC rate defines to macro formulas, - reordered IIO channels, now different measures (current/voltage) of the same part of the PMIC (e.g. battery), have the same IIO channel in their respective IIO type. When a part of the PMIC have only one measure, a number is jumped, - left IIO channel mapping in DT to use iio_map structure, - removed indexing of ADC internal temperature, - removed unused iio_dev structure in axp20x_adc_iio, - added a structure for data specific to AXP20X or AXP22X PMICs instead of using an ID and an if condition when needing to separate the behaviour of both, - added a comment on batt_chrg_i really being on 12bits rather than what the Chinese datasheets say (13 bits), - corrected the offset for AXP22X PMIC temperature, - set the ADC rate to a value (100Hz) shared by the AXP20X and AXP22X, - created macro formulas to compute the ADC rate for each, - added a condition on presence of ADC_EN2 reg before setting/resetting it, - switched from devm_iio_device_unregister to the non-devm function because of the need for a remove function, - removed some dead code, drivers/iio/adc/Kconfig | 10 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/axp20x_adc.c | 617 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 628 insertions(+) create mode 100644 drivers/iio/adc/axp20x_adc.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index d777a97..d15e1bd 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -154,6 +154,16 @@ config AT91_SAMA5D2_ADC To compile this driver as a module, choose M here: the module will be called at91-sama5d2_adc. +config AXP20X_ADC + tristate "X-Powers AXP20X and AXP22X ADC driver" + depends on MFD_AXP20X + help + Say yes here to have support for X-Powers power management IC (PMIC) + AXP20X and AXP22X ADC devices. + + To compile this driver as a module, choose M here: the module will be + called axp20x_adc. + config AXP288_ADC tristate "X-Powers AXP288 ADC driver" depends on MFD_AXP20X diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index b11bb57..17899b5 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_AD7887) += ad7887.o obj-$(CONFIG_AD799X) += ad799x.o obj-$(CONFIG_AT91_ADC) += at91_adc.o obj-$(CONFIG_AT91_SAMA5D2_ADC) += at91-sama5d2_adc.o +obj-$(CONFIG_AXP20X_ADC) += axp20x_adc.o obj-$(CONFIG_AXP288_ADC) += axp288_adc.o obj-$(CONFIG_BCM_IPROC_ADC) += bcm_iproc_adc.o obj-$(CONFIG_BERLIN2_ADC) += berlin2-adc.o diff --git a/drivers/iio/adc/axp20x_adc.c b/drivers/iio/adc/axp20x_adc.c new file mode 100644 index 0000000..11e1771 --- /dev/null +++ b/drivers/iio/adc/axp20x_adc.c @@ -0,0 +1,617 @@ +/* ADC driver for AXP20X and AXP22X PMICs + * + * Copyright (c) 2016 Free Electrons NextThing Co. + * Quentin Schulz <quentin.schulz@free-electrons.com> + * + * 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. + */ + +#include <linux/completion.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/regmap.h> +#include <linux/thermal.h> + +#include <linux/iio/iio.h> +#include <linux/iio/driver.h> +#include <linux/iio/machine.h> +#include <linux/mfd/axp20x.h> + +#define AXP20X_ADC_EN1_MASK GENMASK(7, 0) + +#define AXP20X_ADC_EN2_MASK (GENMASK(3, 2) | BIT(7)) +#define AXP22X_ADC_EN1_MASK (GENMASK(7, 5) | BIT(0)) + +#define AXP20X_GPIO10_IN_RANGE_GPIO0 BIT(0) +#define AXP20X_GPIO10_IN_RANGE_GPIO1 BIT(1) +#define AXP20X_GPIO10_IN_RANGE_GPIO0_VAL(x) ((x) & BIT(0)) +#define AXP20X_GPIO10_IN_RANGE_GPIO1_VAL(x) (((x) & BIT(0)) << 1) + +#define AXP20X_ADC_RATE_MASK GENMASK(7, 6) +#define AXP20X_ADC_RATE_HZ(x) ((ilog2((x) / 25) << 6) & AXP20X_ADC_RATE_MASK) +#define AXP22X_ADC_RATE_HZ(x) ((ilog2((x) / 100) << 6) & AXP20X_ADC_RATE_MASK) + +#define AXP20X_ADC_CHANNEL(_channel, _name, _type, _reg) \ + { \ + .type = _type, \ + .indexed = 1, \ + .channel = _channel, \ + .address = _reg, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ + BIT(IIO_CHAN_INFO_SCALE), \ + .datasheet_name = _name, \ + } + +#define AXP20X_ADC_CHANNEL_OFFSET(_channel, _name, _type, _reg) \ + { \ + .type = _type, \ + .indexed = 1, \ + .channel = _channel, \ + .address = _reg, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ + BIT(IIO_CHAN_INFO_SCALE) |\ + BIT(IIO_CHAN_INFO_OFFSET),\ + .datasheet_name = _name, \ + } + +struct axp_data; + +struct axp20x_adc_iio { + struct regmap *regmap; + struct axp_data *data; +}; + +enum axp20x_adc_channel_v { + AXP20X_ACIN_V = 0, + AXP20X_VBUS_V, + AXP20X_TS_IN, + AXP20X_GPIO0_V, + AXP20X_GPIO1_V, + AXP20X_IPSOUT_V, + AXP20X_BATT_V, +}; + +enum axp20x_adc_channel_i { + AXP20X_ACIN_I = 0, + AXP20X_VBUS_I, + AXP20X_BATT_CHRG_I, + AXP20X_BATT_DISCHRG_I, +}; + +enum axp22x_adc_channel_v { + AXP22X_TS_IN = 0, + AXP22X_BATT_V, +}; + +enum axp22x_adc_channel_i { + AXP22X_BATT_CHRG_I = 1, + AXP22X_BATT_DISCHRG_I, +}; + +static struct iio_map axp20x_maps[] = { + { + .consumer_dev_name = "axp20x-usb-power-supply", + .consumer_channel = "vbus_v", + .adc_channel_label = "vbus_v", + }, { + .consumer_dev_name = "axp20x-usb-power-supply", + .consumer_channel = "vbus_i", + .adc_channel_label = "vbus_i", + }, { + .consumer_dev_name = "axp20x-ac-power-supply", + .consumer_channel = "acin_v", + .adc_channel_label = "acin_v", + }, { + .consumer_dev_name = "axp20x-ac-power-supply", + .consumer_channel = "acin_i", + .adc_channel_label = "acin_i", + }, { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_v", + .adc_channel_label = "batt_v", + }, { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_chrg_i", + .adc_channel_label = "batt_chrg_i", + }, { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_dischrg_i", + .adc_channel_label = "batt_dischrg_i", + }, { /* sentinel */ } +}; + +static struct iio_map axp22x_maps[] = { + { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_v", + .adc_channel_label = "batt_v", + }, { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_chrg_i", + .adc_channel_label = "batt_chrg_i", + }, { + .consumer_dev_name = "axp20x-battery-power-supply", + .consumer_channel = "batt_dischrg_i", + .adc_channel_label = "batt_dischrg_i", + }, { /* sentinel */ } +}; + +/* + * Channels are mapped by physical system. Their channels share the same index. + * i.e. acin_i is in_current0_raw and acin_v is in_voltage0_raw. + * The only exception is for the battery. batt_v will be in_voltage6_raw and + * charge current in_current6_raw and discharge current will be in_current7_raw. + */ +static const struct iio_chan_spec axp20x_adc_channels[] = { + AXP20X_ADC_CHANNEL(AXP20X_ACIN_V, "acin_v", IIO_VOLTAGE, + AXP20X_ACIN_V_ADC_H), + AXP20X_ADC_CHANNEL(AXP20X_ACIN_I, "acin_i", IIO_CURRENT, + AXP20X_ACIN_I_ADC_H), + AXP20X_ADC_CHANNEL(AXP20X_VBUS_V, "vbus_v", IIO_VOLTAGE, + AXP20X_VBUS_V_ADC_H), + AXP20X_ADC_CHANNEL(AXP20X_VBUS_I, "vbus_i", IIO_CURRENT, + AXP20X_VBUS_I_ADC_H), + { + .type = IIO_TEMP, + .address = AXP20X_TEMP_ADC_H, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_OFFSET), + .datasheet_name = "pmic_temp", + }, + AXP20X_ADC_CHANNEL_OFFSET(AXP20X_GPIO0_V, "gpio0_v", IIO_VOLTAGE, + AXP20X_GPIO0_V_ADC_H), + AXP20X_ADC_CHANNEL_OFFSET(AXP20X_GPIO1_V, "gpio1_v", IIO_VOLTAGE, + AXP20X_GPIO1_V_ADC_H), + AXP20X_ADC_CHANNEL(AXP20X_IPSOUT_V, "ipsout_v", IIO_VOLTAGE, + AXP20X_IPSOUT_V_HIGH_H), + AXP20X_ADC_CHANNEL(AXP20X_BATT_V, "batt_v", IIO_VOLTAGE, + AXP20X_BATT_V_H), + AXP20X_ADC_CHANNEL(AXP20X_BATT_CHRG_I, "batt_chrg_i", IIO_CURRENT, + AXP20X_BATT_CHRG_I_H), + AXP20X_ADC_CHANNEL(AXP20X_BATT_DISCHRG_I, "batt_dischrg_i", IIO_CURRENT, + AXP20X_BATT_DISCHRG_I_H), +}; + +static const struct iio_chan_spec axp22x_adc_channels[] = { + { + .type = IIO_TEMP, + .address = AXP22X_PMIC_TEMP_H, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE) | + BIT(IIO_CHAN_INFO_OFFSET), + .datasheet_name = "pmic_temp", + }, + AXP20X_ADC_CHANNEL(AXP22X_BATT_V, "batt_v", IIO_VOLTAGE, + AXP20X_BATT_V_H), + AXP20X_ADC_CHANNEL(AXP22X_BATT_CHRG_I, "batt_chrg_i", IIO_CURRENT, + AXP20X_BATT_CHRG_I_H), + AXP20X_ADC_CHANNEL(AXP22X_BATT_DISCHRG_I, "batt_dischrg_i", IIO_CURRENT, + AXP20X_BATT_DISCHRG_I_H), +}; + +static int axp20x_adc_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val) +{ + struct axp20x_adc_iio *info = iio_priv(indio_dev); + int size = 12; + + /* + * N.B.: Unlike the Chinese datasheets tell, the charging current is + * stored on 12 bits, not 13 bits. Only discharging current is on 13 + * bits. + */ + if (chan->type == IIO_CURRENT && chan->channel == AXP20X_BATT_DISCHRG_I) + size = 13; + else + size = 12; + + *val = axp20x_read_variable_width(info->regmap, chan->address, size); + if (*val < 0) + return *val; + + return IIO_VAL_INT; +} + +static int axp22x_adc_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val) +{ + struct axp20x_adc_iio *info = iio_priv(indio_dev); + int size; + + /* + * N.B.: Unlike the Chinese datasheets tell, the charging current is + * stored on 12 bits, not 13 bits. Only discharging current is on 13 + * bits. + */ + if (chan->type == IIO_CURRENT && chan->channel == AXP22X_BATT_DISCHRG_I) + size = 13; + else + size = 12; + + *val = axp20x_read_variable_width(info->regmap, chan->address, size); + if (*val < 0) + return *val; + + return IIO_VAL_INT; +} + +static int axp20x_adc_scale_voltage(int channel, int *val, int *val2) +{ + switch (channel) { + case AXP20X_ACIN_V: + case AXP20X_VBUS_V: + *val = 1; + *val2 = 700000; + return IIO_VAL_INT_PLUS_MICRO; + + case AXP20X_GPIO0_V: + case AXP20X_GPIO1_V: + *val = 0; + *val2 = 500000; + return IIO_VAL_INT_PLUS_MICRO; + + case AXP20X_BATT_V: + *val = 1; + *val2 = 100000; + return IIO_VAL_INT_PLUS_MICRO; + + case AXP20X_IPSOUT_V: + *val = 1; + *val2 = 400000; + return IIO_VAL_INT_PLUS_MICRO; + + default: + return -EINVAL; + } +} + +static int axp20x_adc_scale_current(int channel, int *val, int *val2) +{ + switch (channel) { + case AXP20X_ACIN_I: + *val = 0; + *val2 = 625000; + return IIO_VAL_INT_PLUS_MICRO; + + case AXP20X_VBUS_I: + *val = 0; + *val2 = 375000; + return IIO_VAL_INT_PLUS_MICRO; + + case AXP20X_BATT_DISCHRG_I: + case AXP20X_BATT_CHRG_I: + *val = 0; + *val2 = 500000; + return IIO_VAL_INT_PLUS_MICRO; + + default: + return -EINVAL; + } +} + +static int axp20x_adc_scale(struct iio_chan_spec const *chan, int *val, + int *val2) +{ + switch (chan->type) { + case IIO_VOLTAGE: + return axp20x_adc_scale_voltage(chan->channel, val, val2); + + case IIO_CURRENT: + return axp20x_adc_scale_current(chan->channel, val, val2); + + case IIO_TEMP: + *val = 100; + return IIO_VAL_INT; + + default: + return -EINVAL; + } +} + +static int axp22x_adc_scale(struct iio_chan_spec const *chan, int *val, + int *val2) +{ + switch (chan->type) { + case IIO_VOLTAGE: + if (chan->channel != AXP22X_BATT_V) + return -EINVAL; + + *val = 1; + *val2 = 100000; + return IIO_VAL_INT_PLUS_MICRO; + + case IIO_CURRENT: + *val = 0; + *val2 = 500000; + return IIO_VAL_INT_PLUS_MICRO; + + case IIO_TEMP: + *val = 100; + return IIO_VAL_INT; + + default: + return -EINVAL; + } +} + +static int axp20x_adc_offset_voltage(struct iio_dev *indio_dev, int channel, + int *val) +{ + struct axp20x_adc_iio *info = iio_priv(indio_dev); + int ret; + + ret = regmap_read(info->regmap, AXP20X_GPIO10_IN_RANGE, val); + if (ret < 0) + return ret; + + switch (channel) { + case AXP20X_GPIO0_V: + *val &= AXP20X_GPIO10_IN_RANGE_GPIO0; + break; + + case AXP20X_GPIO1_V: + *val &= AXP20X_GPIO10_IN_RANGE_GPIO1; + break; + + default: + return -EINVAL; + } + + *val = !!(*val) * 700000; + + return IIO_VAL_INT; +} + +static int axp20x_adc_offset(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val) +{ + switch (chan->type) { + case IIO_VOLTAGE: + return axp20x_adc_offset_voltage(indio_dev, chan->channel, val); + + case IIO_TEMP: + *val = -1447; + return IIO_VAL_INT; + + default: + return -EINVAL; + } +} + +static int axp20x_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val, + int *val2, long mask) +{ + switch (mask) { + case IIO_CHAN_INFO_OFFSET: + return axp20x_adc_offset(indio_dev, chan, val); + + case IIO_CHAN_INFO_SCALE: + return axp20x_adc_scale(chan, val, val2); + + case IIO_CHAN_INFO_RAW: + return axp20x_adc_raw(indio_dev, chan, val); + + default: + return -EINVAL; + } +} + +static int axp22x_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val, + int *val2, long mask) +{ + switch (mask) { + case IIO_CHAN_INFO_OFFSET: + *val = -2677; + return IIO_VAL_INT; + + case IIO_CHAN_INFO_SCALE: + return axp22x_adc_scale(chan, val, val2); + + case IIO_CHAN_INFO_RAW: + return axp22x_adc_raw(indio_dev, chan, val); + + default: + return -EINVAL; + } +} + +static int axp20x_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int val, int val2, + long mask) +{ + struct axp20x_adc_iio *info = iio_priv(indio_dev); + unsigned int reg, regval; + + /* + * The AXP20X PMIC allows the user to choose between 0V and 0.7V offsets + * for (independently) GPIO0 and GPIO1 when in ADC mode. + */ + if (mask != IIO_CHAN_INFO_OFFSET) + return -EINVAL; + + if (val != 0 && val != 700000) + return -EINVAL; + + switch (chan->channel) { + case AXP20X_GPIO0_V: + reg = AXP20X_GPIO10_IN_RANGE_GPIO0; + regval = AXP20X_GPIO10_IN_RANGE_GPIO0_VAL(!!val); + break; + + case AXP20X_GPIO1_V: + reg = AXP20X_GPIO10_IN_RANGE_GPIO1; + regval = AXP20X_GPIO10_IN_RANGE_GPIO1_VAL(!!val); + break; + + default: + return -EINVAL; + } + + return regmap_update_bits(info->regmap, AXP20X_GPIO10_IN_RANGE, reg, + regval); +} + +static const struct iio_info axp20x_adc_iio_info = { + .read_raw = axp20x_read_raw, + .write_raw = axp20x_write_raw, + .driver_module = THIS_MODULE, +}; + +static const struct iio_info axp22x_adc_iio_info = { + .read_raw = axp22x_read_raw, + .driver_module = THIS_MODULE, +}; + +static int axp20x_adc_rate(int rate) +{ + return AXP20X_ADC_RATE_HZ(rate); +} + +static int axp22x_adc_rate(int rate) +{ + return AXP22X_ADC_RATE_HZ(rate); +} + +struct axp_data { + const struct iio_info *iio_info; + int num_channels; + struct iio_chan_spec const *channels; + unsigned long adc_en1_mask; + int (*adc_rate)(int rate); + bool adc_en2; + struct iio_map *maps; +}; + +static const struct axp_data axp20x_data = { + .iio_info = &axp20x_adc_iio_info, + .num_channels = ARRAY_SIZE(axp20x_adc_channels), + .channels = axp20x_adc_channels, + .adc_en1_mask = AXP20X_ADC_EN1_MASK, + .adc_rate = axp20x_adc_rate, + .adc_en2 = true, + .maps = axp20x_maps, +}; + +static const struct axp_data axp22x_data = { + .iio_info = &axp22x_adc_iio_info, + .num_channels = ARRAY_SIZE(axp22x_adc_channels), + .channels = axp22x_adc_channels, + .adc_en1_mask = AXP22X_ADC_EN1_MASK, + .adc_rate = axp22x_adc_rate, + .adc_en2 = false, + .maps = axp22x_maps, +}; + +static const struct platform_device_id axp20x_adc_id_match[] = { + { .name = "axp20x-adc", .driver_data = (kernel_ulong_t)&axp20x_data, }, + { .name = "axp22x-adc", .driver_data = (kernel_ulong_t)&axp22x_data, }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(platform, axp20x_adc_id_match); + +static int axp20x_probe(struct platform_device *pdev) +{ + struct axp20x_adc_iio *info; + struct iio_dev *indio_dev; + struct axp20x_dev *axp20x_dev; + int ret; + + axp20x_dev = dev_get_drvdata(pdev->dev.parent); + + indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); + if (!indio_dev) + return -ENOMEM; + + info = iio_priv(indio_dev); + platform_set_drvdata(pdev, indio_dev); + + info->regmap = axp20x_dev->regmap; + indio_dev->dev.parent = &pdev->dev; + indio_dev->dev.of_node = pdev->dev.of_node; + indio_dev->modes = INDIO_DIRECT_MODE; + + info->data = (struct axp_data *)platform_get_device_id(pdev)->driver_data; + + indio_dev->name = platform_get_device_id(pdev)->name; + indio_dev->info = info->data->iio_info; + indio_dev->num_channels = info->data->num_channels; + indio_dev->channels = info->data->channels; + + /* Enable the ADCs on IP */ + regmap_write(info->regmap, AXP20X_ADC_EN1, info->data->adc_en1_mask); + + if (info->data->adc_en2) + /* Enable GPIO0/1 and internal temperature ADCs */ + regmap_update_bits(info->regmap, AXP20X_ADC_EN2, + AXP20X_ADC_EN2_MASK, AXP20X_ADC_EN2_MASK); + + /* Configure ADCs rate */ + regmap_update_bits(info->regmap, AXP20X_ADC_RATE, AXP20X_ADC_RATE_MASK, + info->data->adc_rate(100)); + + ret = iio_map_array_register(indio_dev, info->data->maps); + if (ret < 0) { + dev_err(&pdev->dev, "failed to register IIO maps: %d\n", ret); + goto fail_map; + } + + ret = iio_device_register(indio_dev); + if (ret < 0) { + dev_err(&pdev->dev, "could not register the device\n"); + goto fail_register; + } + + return 0; + +fail_register: + iio_map_array_unregister(indio_dev); + +fail_map: + regmap_write(info->regmap, AXP20X_ADC_EN1, 0); + + if (info->data->adc_en2) + regmap_write(info->regmap, AXP20X_ADC_EN2, 0); + + return ret; +} + +static int axp20x_remove(struct platform_device *pdev) +{ + struct iio_dev *indio_dev = platform_get_drvdata(pdev); + struct axp20x_adc_iio *info = iio_priv(indio_dev); + + iio_device_unregister(indio_dev); + iio_map_array_unregister(indio_dev); + + regmap_write(info->regmap, AXP20X_ADC_EN1, 0); + + if (info->data->adc_en2) + regmap_write(info->regmap, AXP20X_ADC_EN2, 0); + + return 0; +} + +static struct platform_driver axp20x_adc_driver = { + .driver = { + .name = "axp20x-adc", + }, + .id_table = axp20x_adc_id_match, + .probe = axp20x_probe, + .remove = axp20x_remove, +}; + +module_platform_driver(axp20x_adc_driver); + +MODULE_DESCRIPTION("ADC driver for AXP20X and AXP22X PMICs"); +MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>"); +MODULE_LICENSE("GPL"); -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-20 8:16 ` [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs Quentin Schulz @ 2017-03-22 4:34 ` Chen-Yu Tsai 2017-03-22 6:31 ` Jonathan Cameron 2017-03-23 9:35 ` Sebastian Reichel 0 siblings, 2 replies; 21+ messages in thread From: Chen-Yu Tsai @ 2017-03-22 4:34 UTC (permalink / raw) To: Jonathan Cameron Cc: Quentin Schulz, Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai, Russell King, Maxime Ripard, knaack.h, Lars-Peter Clausen, Peter Meerwald-Stadler, Lee Jones, Icenowy Zheng, Liam Breck, Thomas Petazzoni, open list:THERMAL, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi Hi, On Mon, Mar 20, 2017 at 4:16 PM, Quentin Schulz <quentin.schulz@free-electrons.com> wrote: > The X-Powers AXP20X and AXP22X PMICs have multiple ADCs. They expose the > battery voltage, battery charge and discharge currents, AC-in and VBUS > voltages and currents, 2 GPIOs muxable in ADC mode and PMIC temperature. > > This adds support for most of AXP20X and AXP22X ADCs. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> > Acked-by: Chen-Yu Tsai <wens@csie.org> > Reviewed-by: Jonathan Cameron <jic23@kernel.org> This patch seems to depend on commit 4707274714ef ("mfd: axp20x: Correct name of temperature data ADC registers") currently in the mfd tree. Jonathan, would it be ok for Lee to take this patch through the mfd tree as well? Thanks ChenYu P.S. I'm thinking about having MFD_AXP20X imply its various sub-drivers. Not sure if that was the intended usage of the new imply syntax though. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-22 4:34 ` Chen-Yu Tsai @ 2017-03-22 6:31 ` Jonathan Cameron 2017-03-23 9:35 ` Sebastian Reichel 1 sibling, 0 replies; 21+ messages in thread From: Jonathan Cameron @ 2017-03-22 6:31 UTC (permalink / raw) To: Chen-Yu Tsai, Jonathan Cameron Cc: Quentin Schulz, Sebastian Reichel, Rob Herring, Mark Rutland, Russell King, Maxime Ripard, knaack.h, Lars-Peter Clausen, Peter Meerwald-Stadler, Lee Jones, Icenowy Zheng, Liam Breck, Thomas Petazzoni, open list:THERMAL, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On 22 March 2017 04:34:45 GMT+00:00, Chen-Yu Tsai <wens@csie.org> wrote: >Hi, > >On Mon, Mar 20, 2017 at 4:16 PM, Quentin Schulz ><quentin.schulz@free-electrons.com> wrote: >> The X-Powers AXP20X and AXP22X PMICs have multiple ADCs. They expose >the >> battery voltage, battery charge and discharge currents, AC-in and >VBUS >> voltages and currents, 2 GPIOs muxable in ADC mode and PMIC >temperature. >> >> This adds support for most of AXP20X and AXP22X ADCs. >> >> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> >> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> >> Acked-by: Chen-Yu Tsai <wens@csie.org> >> Reviewed-by: Jonathan Cameron <jic23@kernel.org> > >This patch seems to depend on commit 4707274714ef ("mfd: axp20x: >Correct name >of temperature data ADC registers") currently in the mfd tree. > >Jonathan, would it be ok for Lee to take this patch through the mfd >tree >as well? Sure. > > >Thanks >ChenYu > >P.S. I'm thinking about having MFD_AXP20X imply its various >sub-drivers. >Not sure if that was the intended usage of the new imply syntax though. -- Sent from my Android device with K-9 Mail. Please excuse my brevity. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-22 4:34 ` Chen-Yu Tsai 2017-03-22 6:31 ` Jonathan Cameron @ 2017-03-23 9:35 ` Sebastian Reichel 2017-03-23 9:52 ` Chen-Yu Tsai 1 sibling, 1 reply; 21+ messages in thread From: Sebastian Reichel @ 2017-03-23 9:35 UTC (permalink / raw) To: Chen-Yu Tsai Cc: Jonathan Cameron, Quentin Schulz, Rob Herring, Mark Rutland, Russell King, Maxime Ripard, knaack.h, Lars-Peter Clausen, Peter Meerwald-Stadler, Lee Jones, Icenowy Zheng, Liam Breck, Thomas Petazzoni, open list:THERMAL, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi [-- Attachment #1: Type: text/plain, Size: 339 bytes --] Hi, On Wed, Mar 22, 2017 at 12:34:45PM +0800, Chen-Yu Tsai wrote: > P.S. I'm thinking about having MFD_AXP20X imply its various sub-drivers. > Not sure if that was the intended usage of the new imply syntax though. I think adding "default MFD_AXP20X" to the sub-drivers is cleaner, as you will not end up with a long list. -- Sebastian [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-23 9:35 ` Sebastian Reichel @ 2017-03-23 9:52 ` Chen-Yu Tsai 2017-03-24 7:55 ` Quentin Schulz 0 siblings, 1 reply; 21+ messages in thread From: Chen-Yu Tsai @ 2017-03-23 9:52 UTC (permalink / raw) To: Sebastian Reichel Cc: Chen-Yu Tsai, Jonathan Cameron, Quentin Schulz, Rob Herring, Mark Rutland, Russell King, Maxime Ripard, knaack.h, Lars-Peter Clausen, Peter Meerwald-Stadler, Lee Jones, Icenowy Zheng, Liam Breck, Thomas Petazzoni, open list:THERMAL, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On Thu, Mar 23, 2017 at 5:35 PM, Sebastian Reichel <sre@kernel.org> wrote: > Hi, > > On Wed, Mar 22, 2017 at 12:34:45PM +0800, Chen-Yu Tsai wrote: >> P.S. I'm thinking about having MFD_AXP20X imply its various sub-drivers. >> Not sure if that was the intended usage of the new imply syntax though. > > I think adding "default MFD_AXP20X" to the sub-drivers is cleaner, > as you will not end up with a long list. I'd still need to add imply statements for the various subsystems though, like regulators, power supplies, extcon, etc.. But I suppose that's cleaner, and fits the original intent of the syntax. ChenYu ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-23 9:52 ` Chen-Yu Tsai @ 2017-03-24 7:55 ` Quentin Schulz 2017-03-24 8:01 ` [linux-sunxi] " Chen-Yu Tsai 0 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-24 7:55 UTC (permalink / raw) To: Chen-Yu Tsai, Sebastian Reichel Cc: Mark Rutland, Thomas Petazzoni, devicetree, Lars-Peter Clausen, open list:THERMAL, Liam Breck, linux-sunxi, Russell King, linux-iio, linux-kernel, Rob Herring, Icenowy Zheng, Peter Meerwald-Stadler, knaack.h, Maxime Ripard, Lee Jones, Jonathan Cameron, linux-arm-kernel Hi, On 23/03/2017 10:52, Chen-Yu Tsai wrote: > On Thu, Mar 23, 2017 at 5:35 PM, Sebastian Reichel <sre@kernel.org> wrote: >> Hi, >> >> On Wed, Mar 22, 2017 at 12:34:45PM +0800, Chen-Yu Tsai wrote: >>> P.S. I'm thinking about having MFD_AXP20X imply its various sub-drivers. >>> Not sure if that was the intended usage of the new imply syntax though. >> >> I think adding "default MFD_AXP20X" to the sub-drivers is cleaner, >> as you will not end up with a long list. > > I'd still need to add imply statements for the various subsystems though, > like regulators, power supplies, extcon, etc.. > But I suppose that's cleaner, and fits the original intent of the syntax. > Hum. I don't really understand what you are saying.. Am I supposed to modify something or, is it okay and we're waiting for Lee to apply on his tree? Thanks in advance for clearing it up, Quentin -- Quentin Schulz, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [linux-sunxi] Re: [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs 2017-03-24 7:55 ` Quentin Schulz @ 2017-03-24 8:01 ` Chen-Yu Tsai 0 siblings, 0 replies; 21+ messages in thread From: Chen-Yu Tsai @ 2017-03-24 8:01 UTC (permalink / raw) To: Quentin Schulz Cc: Chen-Yu Tsai, Sebastian Reichel, Mark Rutland, Thomas Petazzoni, devicetree, Lars-Peter Clausen, open list:THERMAL, Liam Breck, linux-sunxi, Russell King, linux-iio, linux-kernel, Rob Herring, Icenowy Zheng, Peter Meerwald-Stadler, knaack.h, Maxime Ripard, Lee Jones, Jonathan Cameron, linux-arm-kernel On Fri, Mar 24, 2017 at 3:55 PM, Quentin Schulz <quentin.schulz@free-electrons.com> wrote: > Hi, > > On 23/03/2017 10:52, Chen-Yu Tsai wrote: >> On Thu, Mar 23, 2017 at 5:35 PM, Sebastian Reichel <sre@kernel.org> wrote: >>> Hi, >>> >>> On Wed, Mar 22, 2017 at 12:34:45PM +0800, Chen-Yu Tsai wrote: >>>> P.S. I'm thinking about having MFD_AXP20X imply its various sub-drivers. >>>> Not sure if that was the intended usage of the new imply syntax though. >>> >>> I think adding "default MFD_AXP20X" to the sub-drivers is cleaner, >>> as you will not end up with a long list. >> >> I'd still need to add imply statements for the various subsystems though, >> like regulators, power supplies, extcon, etc.. >> But I suppose that's cleaner, and fits the original intent of the syntax. >> > > Hum. I don't really understand what you are saying.. Am I supposed to > modify something or, is it okay and we're waiting for Lee to apply on > his tree? > > Thanks in advance for clearing it up, > > Quentin I'm just mentioning some follow up tasks I want to do. The patch is fine and we're waiting for Lee to take it. ChenYu ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for " Quentin Schulz ` (6 subsequent siblings) 9 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi This adds the AXP20X/AXP22x ADCs driver to the mfd cells of the AXP209, AXP221 and AXP223 MFD. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> Acked-by: Chen-Yu Tsai <wens@csie.org> --- v3: - removed of_compatible as DT node has been removed, - use different names to probe the ADC driver, drivers/mfd/axp20x.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index e02edf1..46bdd23 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -590,6 +590,8 @@ static struct mfd_cell axp20x_cells[] = { }, { .name = "axp20x-regulator", }, { + .name = "axp20x-adc", + }, { .name = "axp20x-ac-power-supply", .of_compatible = "x-powers,axp202-ac-power-supply", .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), @@ -610,6 +612,8 @@ static struct mfd_cell axp221_cells[] = { }, { .name = "axp20x-regulator", }, { + .name = "axp22x-adc" + }, { .name = "axp20x-usb-power-supply", .of_compatible = "x-powers,axp221-usb-power-supply", .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), @@ -623,6 +627,8 @@ static struct mfd_cell axp223_cells[] = { .num_resources = ARRAY_SIZE(axp22x_pek_resources), .resources = axp22x_pek_resources, }, { + .name = "axp22x-adc", + }, { .name = "axp20x-regulator", }, { .name = "axp20x-usb-power-supply", -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs 2017-03-20 8:16 ` [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs Quentin Schulz @ 2017-03-20 10:43 ` Lee Jones 0 siblings, 0 replies; 21+ messages in thread From: Lee Jones @ 2017-03-20 10:43 UTC (permalink / raw) To: Quentin Schulz Cc: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, icenowy, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On Mon, 20 Mar 2017, Quentin Schulz wrote: > This adds the AXP20X/AXP22x ADCs driver to the mfd cells of the AXP209, > AXP221 and AXP223 MFD. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> > Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> > Acked-by: Chen-Yu Tsai <wens@csie.org> > --- > > v3: > - removed of_compatible as DT node has been removed, > - use different names to probe the ADC driver, > > drivers/mfd/axp20x.c | 6 ++++++ > 1 file changed, 6 insertions(+) Applied, thanks. > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index e02edf1..46bdd23 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -590,6 +590,8 @@ static struct mfd_cell axp20x_cells[] = { > }, { > .name = "axp20x-regulator", > }, { > + .name = "axp20x-adc", > + }, { > .name = "axp20x-ac-power-supply", > .of_compatible = "x-powers,axp202-ac-power-supply", > .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), > @@ -610,6 +612,8 @@ static struct mfd_cell axp221_cells[] = { > }, { > .name = "axp20x-regulator", > }, { > + .name = "axp22x-adc" > + }, { > .name = "axp20x-usb-power-supply", > .of_compatible = "x-powers,axp221-usb-power-supply", > .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), > @@ -623,6 +627,8 @@ static struct mfd_cell axp223_cells[] = { > .num_resources = ARRAY_SIZE(axp22x_pek_resources), > .resources = axp22x_pek_resources, > }, { > + .name = "axp22x-adc", > + }, { > .name = "axp20x-regulator", > }, { > .name = "axp20x-usb-power-supply", -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for AXP22X PMICs 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (2 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 5/9] ARM: dtsi: axp209: add AC power supply subnode Quentin Schulz ` (5 subsequent siblings) 9 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The X-Powers AXP20X and AXP22X PMICs expose the status of AC power supply. This adds the AC power supply driver to the MFD cells of the AXP22X PMICs. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-By: Sebastian Reichel <sre@kernel.org> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> --- drivers/mfd/axp20x.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 46bdd23..37643b1 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -614,6 +614,11 @@ static struct mfd_cell axp221_cells[] = { }, { .name = "axp22x-adc" }, { + .name = "axp20x-ac-power-supply", + .of_compatible = "x-powers,axp221-ac-power-supply", + .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), + .resources = axp20x_ac_power_supply_resources, + }, { .name = "axp20x-usb-power-supply", .of_compatible = "x-powers,axp221-usb-power-supply", .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), @@ -631,6 +636,11 @@ static struct mfd_cell axp223_cells[] = { }, { .name = "axp20x-regulator", }, { + .name = "axp20x-ac-power-supply", + .of_compatible = "x-powers,axp221-ac-power-supply", + .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), + .resources = axp20x_ac_power_supply_resources, + }, { .name = "axp20x-usb-power-supply", .of_compatible = "x-powers,axp223-usb-power-supply", .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for AXP22X PMICs 2017-03-20 8:16 ` [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for " Quentin Schulz @ 2017-03-20 10:43 ` Lee Jones 0 siblings, 0 replies; 21+ messages in thread From: Lee Jones @ 2017-03-20 10:43 UTC (permalink / raw) To: Quentin Schulz Cc: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, icenowy, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On Mon, 20 Mar 2017, Quentin Schulz wrote: > The X-Powers AXP20X and AXP22X PMICs expose the status of AC power > supply. > > This adds the AC power supply driver to the MFD cells of the AXP22X > PMICs. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> > Acked-By: Sebastian Reichel <sre@kernel.org> > Acked-by: Chen-Yu Tsai <wens@csie.org> > Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> > --- > drivers/mfd/axp20x.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) Applied, thanks. > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index 46bdd23..37643b1 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -614,6 +614,11 @@ static struct mfd_cell axp221_cells[] = { > }, { > .name = "axp22x-adc" > }, { > + .name = "axp20x-ac-power-supply", > + .of_compatible = "x-powers,axp221-ac-power-supply", > + .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), > + .resources = axp20x_ac_power_supply_resources, > + }, { > .name = "axp20x-usb-power-supply", > .of_compatible = "x-powers,axp221-usb-power-supply", > .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), > @@ -631,6 +636,11 @@ static struct mfd_cell axp223_cells[] = { > }, { > .name = "axp20x-regulator", > }, { > + .name = "axp20x-ac-power-supply", > + .of_compatible = "x-powers,axp221-ac-power-supply", > + .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources), > + .resources = axp20x_ac_power_supply_resources, > + }, { > .name = "axp20x-usb-power-supply", > .of_compatible = "x-powers,axp223-usb-power-supply", > .num_resources = ARRAY_SIZE(axp22x_usb_power_supply_resources), -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 5/9] ARM: dtsi: axp209: add AC power supply subnode 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (3 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for " Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 6/9] ARM: dtsi: axp22x: " Quentin Schulz ` (4 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The X-Powers AXP20X PMIC exposes the status of AC power supply, the current current and voltage supplied to the board by the AC power supply. This adds the AC power supply subnode for AXP20X PMIC. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- v2: - changed DT node name from ac_power_supply to ac-power-supply, - removed io-channels and io-channel-names from DT (the IIO mapping is done in the IIO ADC driver now), arch/arm/boot/dts/axp209.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/axp209.dtsi b/arch/arm/boot/dts/axp209.dtsi index 675bb0f..9677dd5 100644 --- a/arch/arm/boot/dts/axp209.dtsi +++ b/arch/arm/boot/dts/axp209.dtsi @@ -53,6 +53,11 @@ interrupt-controller; #interrupt-cells = <1>; + ac_power_supply: ac-power-supply { + compatible = "x-powers,axp202-ac-power-supply"; + status = "disabled"; + }; + axp_gpio: gpio { compatible = "x-powers,axp209-gpio"; gpio-controller; -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 6/9] ARM: dtsi: axp22x: add AC power supply subnode 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (4 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 5/9] ARM: dtsi: axp209: add AC power supply subnode Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 7/9] ARM: dts: sun8i: sina33: enable ACIN " Quentin Schulz ` (3 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The X-Powers AXP22X PMIC exposes the status of AC power supply. This adds the AC power supply subnode for the AXP22X PMIC. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- v2: - changed DT node name from ac_power_supply to ac-power-supply, - removed io-channels and io-channel-names from DT (the IIO mapping is done in the IIO ADC driver now), arch/arm/boot/dts/axp22x.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/dts/axp22x.dtsi b/arch/arm/boot/dts/axp22x.dtsi index 458b668..67331c5 100644 --- a/arch/arm/boot/dts/axp22x.dtsi +++ b/arch/arm/boot/dts/axp22x.dtsi @@ -52,6 +52,11 @@ interrupt-controller; #interrupt-cells = <1>; + ac_power_supply: ac-power-supply { + compatible = "x-powers,axp221-ac-power-supply"; + status = "disabled"; + }; + regulators { /* Default work frequency for buck regulators */ x-powers,dcdc-freq = <3000>; -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 7/9] ARM: dts: sun8i: sina33: enable ACIN power supply subnode 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (5 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 6/9] ARM: dtsi: axp22x: " Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 8/9] ARM: sun5i: chip: " Quentin Schulz ` (2 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The Sinlinx SinA33 has an AXP223 PMIC and an ACIN connector, thus, we enable the ACIN power supply in its Device Tree. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts b/arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts index cde14b3..c012afe 100644 --- a/arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts +++ b/arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts @@ -174,6 +174,10 @@ #include "axp223.dtsi" +&ac_power_supply { + status = "okay"; +}; + ®_aldo1 { regulator-always-on; regulator-min-microvolt = <3000000>; -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 8/9] ARM: sun5i: chip: enable ACIN power supply subnode 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (6 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 7/9] ARM: dts: sun8i: sina33: enable ACIN " Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X Quentin Schulz 2017-03-22 7:11 ` [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Maxime Ripard 9 siblings, 0 replies; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The NextThing Co. CHIP has an AXP209 PMIC and can be power-supplied by ACIN via the CHG-IN pin. This enables the ACIN power supply subnode in the DT. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun5i-r8-chip.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/boot/dts/sun5i-r8-chip.dts b/arch/arm/boot/dts/sun5i-r8-chip.dts index c9a1821..d078560 100644 --- a/arch/arm/boot/dts/sun5i-r8-chip.dts +++ b/arch/arm/boot/dts/sun5i-r8-chip.dts @@ -128,6 +128,10 @@ #include "axp209.dtsi" +&ac_power_supply { + status = "okay"; +}; + &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins_a>; -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (7 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 8/9] ARM: sun5i: chip: " Quentin Schulz @ 2017-03-20 8:16 ` Quentin Schulz 2017-03-20 10:44 ` Lee Jones 2017-03-22 7:11 ` [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Maxime Ripard 9 siblings, 1 reply; 21+ messages in thread From: Quentin Schulz @ 2017-03-20 8:16 UTC (permalink / raw) To: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy Cc: Quentin Schulz, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi The CHRG_CTRL1 and CHRG_CTRL2 registers are made for controlling different battery charging settings such as the constant current charge value. The AXP22X also have a third register CHRG_CTRL3 which has settings for battery charging too. This adds the CHRG_CTRL1, CHRG_CTRL2 and CHRG_CTRL3 registers to the list of writeable registers for AXP20X and AXP22X PMICs. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> --- v2: - added AXP20X_CHRG_CTRL2 and AXP20X_CHRG_CTRL3 to the writeable registers table, - removed added reg range for ADC data in volatile regs range, drivers/mfd/axp20x.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 37643b1..5ba3b04 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -68,6 +68,7 @@ static const struct regmap_access_table axp152_volatile_table = { static const struct regmap_range axp20x_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), + regmap_reg_range(AXP20X_CHRG_CTRL1, AXP20X_CHRG_CTRL2), regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), regmap_reg_range(AXP20X_RDC_H, AXP20X_OCV(AXP20X_OCV_MAX)), }; @@ -94,6 +95,7 @@ static const struct regmap_access_table axp20x_volatile_table = { /* AXP22x ranges are shared with the AXP809, as they cover the same range */ static const struct regmap_range axp22x_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), + regmap_reg_range(AXP20X_CHRG_CTRL1, AXP22X_CHRG_CTRL3), regmap_reg_range(AXP20X_DCDC_MODE, AXP22X_BATLOW_THRES1), }; -- 2.9.3 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X 2017-03-20 8:16 ` [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X Quentin Schulz @ 2017-03-20 10:44 ` Lee Jones 0 siblings, 0 replies; 21+ messages in thread From: Lee Jones @ 2017-03-20 10:44 UTC (permalink / raw) To: Quentin Schulz Cc: sre, robh+dt, mark.rutland, wens, linux, maxime.ripard, jic23, knaack.h, lars, pmeerw, icenowy, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi On Mon, 20 Mar 2017, Quentin Schulz wrote: > The CHRG_CTRL1 and CHRG_CTRL2 registers are made for controlling > different battery charging settings such as the constant current charge > value. > > The AXP22X also have a third register CHRG_CTRL3 which has settings for > battery charging too. > > This adds the CHRG_CTRL1, CHRG_CTRL2 and CHRG_CTRL3 registers to the > list of writeable registers for AXP20X and AXP22X PMICs. > > Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> > Acked-by: Chen-Yu Tsai <wens@csie.org> > Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org> > --- > > v2: > - added AXP20X_CHRG_CTRL2 and AXP20X_CHRG_CTRL3 to the writeable > registers table, > - removed added reg range for ADC data in volatile regs range, > > drivers/mfd/axp20x.c | 2 ++ > 1 file changed, 2 insertions(+) Applied, thanks. > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index 37643b1..5ba3b04 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -68,6 +68,7 @@ static const struct regmap_access_table axp152_volatile_table = { > > static const struct regmap_range axp20x_writeable_ranges[] = { > regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), > + regmap_reg_range(AXP20X_CHRG_CTRL1, AXP20X_CHRG_CTRL2), > regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), > regmap_reg_range(AXP20X_RDC_H, AXP20X_OCV(AXP20X_OCV_MAX)), > }; > @@ -94,6 +95,7 @@ static const struct regmap_access_table axp20x_volatile_table = { > /* AXP22x ranges are shared with the AXP809, as they cover the same range */ > static const struct regmap_range axp22x_writeable_ranges[] = { > regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), > + regmap_reg_range(AXP20X_CHRG_CTRL1, AXP22X_CHRG_CTRL3), > regmap_reg_range(AXP20X_DCDC_MODE, AXP22X_BATLOW_THRES1), > }; > -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz ` (8 preceding siblings ...) 2017-03-20 8:16 ` [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X Quentin Schulz @ 2017-03-22 7:11 ` Maxime Ripard 9 siblings, 0 replies; 21+ messages in thread From: Maxime Ripard @ 2017-03-22 7:11 UTC (permalink / raw) To: Quentin Schulz Cc: sre, robh+dt, mark.rutland, wens, linux, jic23, knaack.h, lars, pmeerw, lee.jones, icenowy, liam, thomas.petazzoni, linux-pm, devicetree, linux-kernel, linux-arm-kernel, linux-iio, linux-sunxi [-- Attachment #1: Type: text/plain, Size: 642 bytes --] On Mon, Mar 20, 2017 at 09:16:44AM +0100, Quentin Schulz wrote: > These patches haven't changed since v4. The goal is to split the series in > two series, one (this one) with patches ready to be merged and the other > one (everything impacting the battery power supply) which depends on an > ongoing series by Liam Breck to be merged once the ongoing series has a > consensus. > > Therefore, this series of patch is ready to be merged. I don't see any > dependency between subsystems. Merged the patches 5-8, thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 801 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2017-03-24 8:02 UTC | newest] Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-03-20 8:16 [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 1/9] mfd: axp20x: correct name of temperature data ADC registers Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 2/9] iio: adc: add support for X-Powers AXP20X and AXP22X PMICs ADCs Quentin Schulz 2017-03-22 4:34 ` Chen-Yu Tsai 2017-03-22 6:31 ` Jonathan Cameron 2017-03-23 9:35 ` Sebastian Reichel 2017-03-23 9:52 ` Chen-Yu Tsai 2017-03-24 7:55 ` Quentin Schulz 2017-03-24 8:01 ` [linux-sunxi] " Chen-Yu Tsai 2017-03-20 8:16 ` [RESEND PATCH v4 3/9] mfd: axp20x: add ADC cells for AXP20X and AXP22X PMICs Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 4/9] mfd: axp20x: add AC power supply cells for " Quentin Schulz 2017-03-20 10:43 ` Lee Jones 2017-03-20 8:16 ` [RESEND PATCH v4 5/9] ARM: dtsi: axp209: add AC power supply subnode Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 6/9] ARM: dtsi: axp22x: " Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 7/9] ARM: dts: sun8i: sina33: enable ACIN " Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 8/9] ARM: sun5i: chip: " Quentin Schulz 2017-03-20 8:16 ` [RESEND PATCH v4 9/9] mfd: axp20x: add CHRG_CTRL1/2/3 to writeable regs for AXP20X/AXP22X Quentin Schulz 2017-03-20 10:44 ` Lee Jones 2017-03-22 7:11 ` [RESEND PATCH v4 0/9] add support for AXP20X and AXP22X power supply drivers Maxime Ripard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).