Re: [PATCH] mfd: twl: fix TWL6032 phy vbus detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 19 Nov 2022, Andreas Kemnade wrote:

> TWL6032 has a few charging registers prepended before the charging
> registers the TWL6030 has. To be able to use common register defines
> declare the additional registers as additional module.
> At the moment this affects the access to CHARGERUSB_CTRL1 in
> phy-twl6030-usb.  Without this patch, it is accessing the wrong register
> on TWL6032.
> The consequence is that presence of Vbus is not reported.
> 
> Cc: Bin Liu <b-liu@xxxxxx>
> Cc: Tony Lindgren <tony@xxxxxxxxxxx>
> Signed-off-by: Andreas Kemnade <andreas@xxxxxxxxxxxx>
> ---
>  drivers/mfd/twl-core.c  | 8 ++++----
>  include/linux/mfd/twl.h | 2 ++
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
> index f6b4b9d94bbd..5a7ed71d0e30 100644
> --- a/drivers/mfd/twl-core.c
> +++ b/drivers/mfd/twl-core.c
> @@ -111,6 +111,7 @@
>  #define TWL6030_BASEADD_GASGAUGE	0x00C0
>  #define TWL6030_BASEADD_PIH		0x00D0
>  #define TWL6030_BASEADD_CHARGER		0x00E0
> +/* A few regs prepended before the 6030 regs */

This would be better represented if the defines were in order.

The comment is also superfluous.

>  #define TWL6032_BASEADD_CHARGER		0x00DA

Are you sure this is prepended i.e. before the other registers?

These looks as though they sit in the middle.

>  #define TWL6030_BASEADD_LED		0x00F4
>  
> @@ -353,6 +354,9 @@ static struct twl_mapping twl6030_map[] = {
>  	{ 2, TWL6030_BASEADD_ZERO },
>  	{ 1, TWL6030_BASEADD_GPADC_CTRL },
>  	{ 1, TWL6030_BASEADD_GASGAUGE },
> +
> +	/* TWL6032 specific charger registers */
> +	{ 1, TWL6032_BASEADD_CHARGER },
>  };
>  
>  static const struct regmap_config twl6030_regmap_config[3] = {
> @@ -802,10 +806,6 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
>  	if ((id->driver_data) & TWL6030_CLASS) {
>  		twl_priv->twl_id = TWL6030_CLASS_ID;
>  		twl_priv->twl_map = &twl6030_map[0];
> -		/* The charger base address is different in twl6032 */
> -		if ((id->driver_data) & TWL6032_SUBCLASS)
> -			twl_priv->twl_map[TWL_MODULE_MAIN_CHARGE].base =
> -							TWL6032_BASEADD_CHARGER;
>  		twl_regmap_config = twl6030_regmap_config;
>  	} else {
>  		twl_priv->twl_id = TWL4030_CLASS_ID;
> diff --git a/include/linux/mfd/twl.h b/include/linux/mfd/twl.h
> index eaa233038254..6e3d99b7a0ee 100644
> --- a/include/linux/mfd/twl.h
> +++ b/include/linux/mfd/twl.h
> @@ -69,6 +69,8 @@ enum twl6030_module_ids {
>  	TWL6030_MODULE_GPADC,
>  	TWL6030_MODULE_GASGAUGE,
>  
> +	/* A few extra registers before the registers shared with the 6030 */
> +	TWL6032_MODULE_CHARGE,
>  	TWL6030_MODULE_LAST,
>  };
>  

-- 
Lee Jones [李琼斯]



[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux