All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Reichel <sebastian.reichel@collabora.com>
To: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
Cc: linus.walleij@linaro.org, brgl@bgdev.pl, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org, wens@csie.org,
	jic23@kernel.org, lee.jones@linaro.org, broonie@kernel.org,
	gregkh@linuxfoundation.org, lgirdwood@gmail.com, lars@metafoo.de,
	rafael@kernel.org, quic_gurus@quicinc.com,
	linux-gpio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH v2 13/17] power: supply: axp20x_usb_power: Add support for AXP192
Date: Thu, 9 Jun 2022 22:53:19 +0200	[thread overview]
Message-ID: <20220609205319.ws5a74xjyxfrdx6p@mercury.elektranox.org> (raw)
In-Reply-To: <20220607155324.118102-14-aidanmacdonald.0x0@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5828 bytes --]

Hi,

On Tue, Jun 07, 2022 at 04:53:20PM +0100, Aidan MacDonald wrote:
> The AXP192 is mostly the same as the AXP202 but has a different
> current limit.
> 
> Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com>
> ---

Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com>

-- Sebastian

>  drivers/power/supply/axp20x_usb_power.c | 80 +++++++++++++++++++++----
>  1 file changed, 69 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/power/supply/axp20x_usb_power.c b/drivers/power/supply/axp20x_usb_power.c
> index a1e6d1d44808..03145374ae72 100644
> --- a/drivers/power/supply/axp20x_usb_power.c
> +++ b/drivers/power/supply/axp20x_usb_power.c
> @@ -48,6 +48,9 @@
>  #define AXP813_VBUS_CLIMIT_2000mA	2
>  #define AXP813_VBUS_CLIMIT_2500mA	3
>  
> +#define AXP192_VBUS_CLIMIT_EN		BIT(1)
> +#define AXP192_VBUS_CLIMIT_100mA	BIT(0)
> +
>  #define AXP20X_ADC_EN1_VBUS_CURR	BIT(2)
>  #define AXP20X_ADC_EN1_VBUS_VOLT	BIT(3)
>  
> @@ -121,6 +124,24 @@ static void axp20x_usb_power_poll_vbus(struct work_struct *work)
>  		mod_delayed_work(system_power_efficient_wq, &power->vbus_detect, DEBOUNCE_TIME);
>  }
>  
> +static int axp192_get_current_max(struct axp20x_usb_power *power, int *val)
> +{
> +	unsigned int v;
> +	int ret = regmap_read(power->regmap, AXP20X_VBUS_IPSOUT_MGMT, &v);
> +
> +	if (ret)
> +		return ret;
> +
> +	if (!(v & AXP192_VBUS_CLIMIT_EN))
> +		*val = -1;
> +	else if (v & AXP192_VBUS_CLIMIT_100mA)
> +		*val = 100000;
> +	else
> +		*val = 500000;
> +
> +	return 0;
> +}
> +
>  static int axp20x_get_current_max(struct axp20x_usb_power *power, int *val)
>  {
>  	unsigned int v;
> @@ -179,7 +200,7 @@ static int axp20x_usb_power_get_property(struct power_supply *psy,
>  	enum power_supply_property psp, union power_supply_propval *val)
>  {
>  	struct axp20x_usb_power *power = power_supply_get_drvdata(psy);
> -	unsigned int input, v;
> +	unsigned int input, v, reg;
>  	int ret;
>  
>  	switch (psp) {
> @@ -215,6 +236,8 @@ static int axp20x_usb_power_get_property(struct power_supply *psy,
>  	case POWER_SUPPLY_PROP_CURRENT_MAX:
>  		if (power->axp20x_id == AXP813_ID)
>  			return axp813_get_current_max(power, &val->intval);
> +		else if (power->axp20x_id == AXP192_ID)
> +			return axp192_get_current_max(power, &val->intval);
>  		return axp20x_get_current_max(power, &val->intval);
>  	case POWER_SUPPLY_PROP_CURRENT_NOW:
>  		if (IS_ENABLED(CONFIG_AXP20X_ADC)) {
> @@ -256,16 +279,20 @@ static int axp20x_usb_power_get_property(struct power_supply *psy,
>  
>  		val->intval = POWER_SUPPLY_HEALTH_GOOD;
>  
> -		if (power->axp20x_id == AXP202_ID) {
> -			ret = regmap_read(power->regmap,
> -					  AXP20X_USB_OTG_STATUS, &v);
> -			if (ret)
> -				return ret;
> +		if (power->axp20x_id == AXP192_ID)
> +			reg = AXP192_USB_OTG_STATUS;
> +		else if (power->axp20x_id == AXP202_ID)
> +			reg = AXP20X_USB_OTG_STATUS;
> +		else
> +			/* Other chips do not have an OTG status register */
> +			break;
>  
> -			if (!(v & AXP20X_USB_STATUS_VBUS_VALID))
> -				val->intval =
> -					POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
> -		}
> +		ret = regmap_read(power->regmap, reg, &v);
> +		if (ret)
> +			return ret;
> +
> +		if (!(v & AXP20X_USB_STATUS_VBUS_VALID))
> +			val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
>  		break;
>  	case POWER_SUPPLY_PROP_PRESENT:
>  		val->intval = !!(input & AXP20X_PWR_STATUS_VBUS_PRESENT);
> @@ -316,6 +343,24 @@ static int axp20x_usb_power_set_voltage_min(struct axp20x_usb_power *power,
>  	return -EINVAL;
>  }
>  
> +static int axp192_usb_power_set_current_max(struct axp20x_usb_power *power,
> +					    int intval)
> +{
> +	int val = AXP192_VBUS_CLIMIT_EN;
> +	const int mask = AXP192_VBUS_CLIMIT_EN | AXP192_VBUS_CLIMIT_100mA;
> +
> +	switch (intval) {
> +	case 100000:
> +		val |= AXP192_VBUS_CLIMIT_100mA;
> +		fallthrough;
> +	case 500000:
> +		return regmap_update_bits(power->regmap,
> +					  AXP20X_VBUS_IPSOUT_MGMT, mask, val);
> +	default:
> +		return -EINVAL;
> +	}
> +}
> +
>  static int axp813_usb_power_set_current_max(struct axp20x_usb_power *power,
>  					    int intval)
>  {
> @@ -383,6 +428,9 @@ static int axp20x_usb_power_set_property(struct power_supply *psy,
>  		if (power->axp20x_id == AXP813_ID)
>  			return axp813_usb_power_set_current_max(power,
>  								val->intval);
> +		else if (power->axp20x_id == AXP192_ID)
> +			return axp192_usb_power_set_current_max(power,
> +								val->intval);
>  		return axp20x_usb_power_set_current_max(power, val->intval);
>  
>  	default:
> @@ -468,6 +516,13 @@ struct axp_data {
>  	enum axp20x_variants		axp20x_id;
>  };
>  
> +static const struct axp_data axp192_data = {
> +	.power_desc	= &axp20x_usb_power_desc,
> +	.irq_names	= axp20x_irq_names,
> +	.num_irq_names	= ARRAY_SIZE(axp20x_irq_names),
> +	.axp20x_id	= AXP192_ID,
> +};
> +
>  static const struct axp_data axp202_data = {
>  	.power_desc	= &axp20x_usb_power_desc,
>  	.irq_names	= axp20x_irq_names,
> @@ -600,7 +655,7 @@ static int axp20x_usb_power_probe(struct platform_device *pdev)
>  	if (ret)
>  		return ret;
>  
> -	if (power->axp20x_id == AXP202_ID) {
> +	if (power->axp20x_id == AXP192_ID || power->axp20x_id == AXP202_ID) {
>  		/* Enable vbus valid checking */
>  		ret = regmap_update_bits(power->regmap, AXP20X_VBUS_MON,
>  					 AXP20X_VBUS_MON_VBUS_VALID,
> @@ -659,6 +714,9 @@ static int axp20x_usb_power_probe(struct platform_device *pdev)
>  
>  static const struct of_device_id axp20x_usb_power_match[] = {
>  	{
> +		.compatible = "x-powers,axp192-usb-power-supply",
> +		.data = &axp192_data,
> +	}, {
>  		.compatible = "x-powers,axp202-usb-power-supply",
>  		.data = &axp202_data,
>  	}, {
> -- 
> 2.35.1
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-06-09 20:53 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-07 15:53 [PATCH v2 00/17] Add support for AXP192 PMIC Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 01/17] regmap-irq: Use sub_irq_reg() to calculate unmask register address Aidan MacDonald
2022-06-09 16:39   ` Guru Das Srinagesh
2022-06-11 14:32     ` Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 02/17] regmap-irq: Add get_irq_reg to support unusual register layouts Aidan MacDonald
2022-06-08 16:17   ` Mark Brown
2022-06-10 15:40     ` Aidan MacDonald
2022-06-10 16:47       ` Mark Brown
2022-06-11 14:22         ` Aidan MacDonald
2022-06-23  8:54       ` Matti Vaittinen
2022-06-23 20:35         ` Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 03/17] dt-bindings: mfd: add bindings for AXP192 MFD device Aidan MacDonald
2022-06-08 10:48   ` Krzysztof Kozlowski
2022-06-09 17:52     ` Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 04/17] dt-bindings: iio: adc: axp209: Add AXP192 compatible Aidan MacDonald
2022-06-08 10:49   ` Krzysztof Kozlowski
2022-06-07 15:53 ` [PATCH v2 05/17] dt-bindings: power: supply: axp20x: " Aidan MacDonald
2022-06-08 10:50   ` Krzysztof Kozlowski
2022-06-07 15:53 ` [PATCH v2 06/17] dt-bindings: gpio: Add AXP192 GPIO bindings Aidan MacDonald
2022-06-09 20:24   ` Rob Herring
2022-06-07 15:53 ` [PATCH v2 07/17] dt-bindings: power: axp20x-battery: Add AXP192 compatible Aidan MacDonald
2022-06-09 20:24   ` Rob Herring
2022-06-07 15:53 ` [PATCH v2 08/17] mfd: axp20x: Add support for AXP192 Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 09/17] regulator: " Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 10/17] iio: adc: axp20x_adc: Minor code cleanups Aidan MacDonald
2022-06-08 13:22   ` Jonathan Cameron
2022-06-08 22:58     ` Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 11/17] iio: adc: axp20x_adc: Consolidate ADC raw read functions Aidan MacDonald
2022-06-08 13:28   ` Jonathan Cameron
2022-06-08 23:13     ` Aidan MacDonald
2022-06-11 18:23       ` Jonathan Cameron
2022-06-08 13:30   ` Jonathan Cameron
2022-06-07 15:53 ` [PATCH v2 12/17] iio: adc: axp20x_adc: Add support for AXP192 Aidan MacDonald
2022-06-08 13:35   ` Jonathan Cameron
2022-06-07 15:53 ` [PATCH v2 13/17] power: supply: axp20x_usb_power: " Aidan MacDonald
2022-06-09 20:53   ` Sebastian Reichel [this message]
2022-06-07 15:53 ` [PATCH v2 14/17] pinctrl: Add AXP192 pin control driver Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 15/17] power: axp20x_battery: Add constant charge current table Aidan MacDonald
2022-06-09 21:11   ` Sebastian Reichel
2022-06-10 15:40     ` Aidan MacDonald
2022-06-07 15:53 ` [PATCH v2 16/17] power: axp20x_battery: Support battery status without fuel gauge Aidan MacDonald
2022-06-09 21:11   ` Sebastian Reichel
2022-06-07 15:53 ` [PATCH v2 17/17] power: axp20x_battery: Add support for AXP192 Aidan MacDonald
2022-06-09 21:12   ` Sebastian Reichel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220609205319.ws5a74xjyxfrdx6p@mercury.elektranox.org \
    --to=sebastian.reichel@collabora.com \
    --cc=aidanmacdonald.0x0@gmail.com \
    --cc=brgl@bgdev.pl \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jic23@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=lars@metafoo.de \
    --cc=lee.jones@linaro.org \
    --cc=lgirdwood@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=quic_gurus@quicinc.com \
    --cc=rafael@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=wens@csie.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.