[v3,2/2] power: supply: bq256xx: Apply TS_IGNORE from devicetree

Message ID 20230323072347.438932-2-chenhuiz@axis.com
State New
Headers
Series [v3,1/2] dt-bindings: power: supply: bq256xx: Add ti,no-thermistor property |

Commit Message

Hermes Zhang March 23, 2023, 7:23 a.m. UTC
  TS_IGNORE is default off in bq256xx chip. For some HW which doesn't have
the NTC, we need to set TS_IGNORE to 1 to make the charge work. The new
"ti,no-thermistor" is introduced to toggle it.

Signed-off-by: Hermes Zhang <chenhuiz@axis.com>
---

Notes:
    v2: change property name to ti,no-thermistor
    
    v3: drop "|" in property description

 drivers/power/supply/bq256xx_charger.c | 28 ++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
  

Comments

Sebastian Reichel March 29, 2023, 10:58 p.m. UTC | #1
Hi,

On Thu, Mar 23, 2023 at 03:23:47PM +0800, Hermes Zhang wrote:
> TS_IGNORE is default off in bq256xx chip. For some HW which doesn't have
> the NTC, we need to set TS_IGNORE to 1 to make the charge work. The new
> "ti,no-thermistor" is introduced to toggle it.
> 
> Signed-off-by: Hermes Zhang <chenhuiz@axis.com>
> ---

Does not apply, please rebase against latest power-supply for-next
branch.

-- Sebastian

> Notes:
>     v2: change property name to ti,no-thermistor
>     
>     v3: drop "|" in property description
> 
>  drivers/power/supply/bq256xx_charger.c | 28 ++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/drivers/power/supply/bq256xx_charger.c b/drivers/power/supply/bq256xx_charger.c
> index 9cf4936440c9..cacaae1d559b 100644
> --- a/drivers/power/supply/bq256xx_charger.c
> +++ b/drivers/power/supply/bq256xx_charger.c
> @@ -41,6 +41,9 @@
>  #define BQ256XX_IINDPM_MAX_uA		3200000
>  #define BQ256XX_IINDPM_DEF_uA		2400000
>  
> +#define BQ256XX_TS_IGNORE		BIT(6)
> +#define BQ256XX_TS_IGNORE_SHIFT		6
> +
>  #define BQ256XX_VINDPM_MASK		GENMASK(3, 0)
>  #define BQ256XX_VINDPM_STEP_uV		100000
>  #define BQ256XX_VINDPM_OFFSET_uV	3900000
> @@ -153,6 +156,7 @@
>   * @vindpm: input voltage limit
>   * @ichg_max: maximum fast charge current
>   * @vbatreg_max: maximum charge voltage
> + * @ts_ignore: TS_IGNORE flag
>   */
>  struct bq256xx_init_data {
>  	u32 ichg;
> @@ -163,6 +167,7 @@ struct bq256xx_init_data {
>  	u32 vindpm;
>  	u32 ichg_max;
>  	u32 vbatreg_max;
> +	bool ts_ignore;
>  };
>  
>  /**
> @@ -259,6 +264,7 @@ struct bq256xx_device {
>   * @bq256xx_set_iterm: pointer to instance specific set_iterm function
>   * @bq256xx_set_iprechg: pointer to instance specific set_iprechg function
>   * @bq256xx_set_vindpm: pointer to instance specific set_vindpm function
> + * @bq256xx_set_ts_ignore: pointer to instance specific set_ts_ignore function
>   *
>   * @bq256xx_def_ichg: default ichg value in microamps
>   * @bq256xx_def_iindpm: default iindpm value in microamps
> @@ -290,6 +296,7 @@ struct bq256xx_chip_info {
>  	int (*bq256xx_set_iterm)(struct bq256xx_device *bq, int iterm);
>  	int (*bq256xx_set_iprechg)(struct bq256xx_device *bq, int iprechg);
>  	int (*bq256xx_set_vindpm)(struct bq256xx_device *bq, int vindpm);
> +	int (*bq256xx_set_ts_ignore)(struct bq256xx_device *bq, bool ts_ignore);
>  
>  	int bq256xx_def_ichg;
>  	int bq256xx_def_iindpm;
> @@ -670,6 +677,12 @@ static int bq25601d_set_chrg_volt(struct bq256xx_device *bq, int vbatreg)
>  						BQ256XX_VBATREG_BIT_SHIFT);
>  }
>  
> +static int bq256xx_set_ts_ignore(struct bq256xx_device *bq, bool ts_ignore)
> +{
> +	return regmap_update_bits(bq->regmap, BQ256XX_INPUT_CURRENT_LIMIT,
> +				BQ256XX_TS_IGNORE, (ts_ignore ? 1 : 0) << BQ256XX_TS_IGNORE_SHIFT);
> +}
> +
>  static int bq256xx_get_prechrg_curr(struct bq256xx_device *bq)
>  {
>  	unsigned int prechg_and_term_curr_lim;
> @@ -1279,6 +1292,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_get_iterm = bq256xx_get_term_curr,
>  		.bq256xx_get_iprechg = bq256xx_get_prechrg_curr,
>  		.bq256xx_get_vindpm = bq256xx_get_input_volt_lim,
> +		.bq256xx_set_ts_ignore = NULL,
>  
>  		.bq256xx_set_ichg = bq256xx_set_ichg_curr,
>  		.bq256xx_set_iindpm = bq256xx_set_input_curr_lim,
> @@ -1316,6 +1330,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq256xx_set_term_curr,
>  		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = NULL,
>  
>  		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1346,6 +1361,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq256xx_set_term_curr,
>  		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = NULL,
>  
>  		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1376,6 +1392,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq256xx_set_term_curr,
>  		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = NULL,
>  
>  		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1406,6 +1423,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq256xx_set_term_curr,
>  		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
>  
>  		.bq256xx_def_ichg = BQ25611D_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1436,6 +1454,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq25618_619_set_term_curr,
>  		.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
>  
>  		.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1466,6 +1485,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
>  		.bq256xx_set_iterm = bq25618_619_set_term_curr,
>  		.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
>  		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
> +		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
>  
>  		.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
>  		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
> @@ -1582,6 +1602,12 @@ static int bq256xx_hw_init(struct bq256xx_device *bq)
>  	if (ret)
>  		return ret;
>  
> +	if (bq->chip_info->bq256xx_set_ts_ignore) {
> +		ret = bq->chip_info->bq256xx_set_ts_ignore(bq, bq->init_data.ts_ignore);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	power_supply_put_battery_info(bq->charger, bat_info);
>  
>  	return 0;
> @@ -1616,6 +1642,8 @@ static int bq256xx_parse_dt(struct bq256xx_device *bq,
>  	if (ret)
>  		bq->init_data.iindpm = bq->chip_info->bq256xx_def_iindpm;
>  
> +	bq->init_data.ts_ignore = device_property_read_bool(bq->dev, "ti,no-thermistor");
> +
>  	return 0;
>  }
>  
> -- 
> 2.30.2
>
  

Patch

diff --git a/drivers/power/supply/bq256xx_charger.c b/drivers/power/supply/bq256xx_charger.c
index 9cf4936440c9..cacaae1d559b 100644
--- a/drivers/power/supply/bq256xx_charger.c
+++ b/drivers/power/supply/bq256xx_charger.c
@@ -41,6 +41,9 @@ 
 #define BQ256XX_IINDPM_MAX_uA		3200000
 #define BQ256XX_IINDPM_DEF_uA		2400000
 
+#define BQ256XX_TS_IGNORE		BIT(6)
+#define BQ256XX_TS_IGNORE_SHIFT		6
+
 #define BQ256XX_VINDPM_MASK		GENMASK(3, 0)
 #define BQ256XX_VINDPM_STEP_uV		100000
 #define BQ256XX_VINDPM_OFFSET_uV	3900000
@@ -153,6 +156,7 @@ 
  * @vindpm: input voltage limit
  * @ichg_max: maximum fast charge current
  * @vbatreg_max: maximum charge voltage
+ * @ts_ignore: TS_IGNORE flag
  */
 struct bq256xx_init_data {
 	u32 ichg;
@@ -163,6 +167,7 @@  struct bq256xx_init_data {
 	u32 vindpm;
 	u32 ichg_max;
 	u32 vbatreg_max;
+	bool ts_ignore;
 };
 
 /**
@@ -259,6 +264,7 @@  struct bq256xx_device {
  * @bq256xx_set_iterm: pointer to instance specific set_iterm function
  * @bq256xx_set_iprechg: pointer to instance specific set_iprechg function
  * @bq256xx_set_vindpm: pointer to instance specific set_vindpm function
+ * @bq256xx_set_ts_ignore: pointer to instance specific set_ts_ignore function
  *
  * @bq256xx_def_ichg: default ichg value in microamps
  * @bq256xx_def_iindpm: default iindpm value in microamps
@@ -290,6 +296,7 @@  struct bq256xx_chip_info {
 	int (*bq256xx_set_iterm)(struct bq256xx_device *bq, int iterm);
 	int (*bq256xx_set_iprechg)(struct bq256xx_device *bq, int iprechg);
 	int (*bq256xx_set_vindpm)(struct bq256xx_device *bq, int vindpm);
+	int (*bq256xx_set_ts_ignore)(struct bq256xx_device *bq, bool ts_ignore);
 
 	int bq256xx_def_ichg;
 	int bq256xx_def_iindpm;
@@ -670,6 +677,12 @@  static int bq25601d_set_chrg_volt(struct bq256xx_device *bq, int vbatreg)
 						BQ256XX_VBATREG_BIT_SHIFT);
 }
 
+static int bq256xx_set_ts_ignore(struct bq256xx_device *bq, bool ts_ignore)
+{
+	return regmap_update_bits(bq->regmap, BQ256XX_INPUT_CURRENT_LIMIT,
+				BQ256XX_TS_IGNORE, (ts_ignore ? 1 : 0) << BQ256XX_TS_IGNORE_SHIFT);
+}
+
 static int bq256xx_get_prechrg_curr(struct bq256xx_device *bq)
 {
 	unsigned int prechg_and_term_curr_lim;
@@ -1279,6 +1292,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_get_iterm = bq256xx_get_term_curr,
 		.bq256xx_get_iprechg = bq256xx_get_prechrg_curr,
 		.bq256xx_get_vindpm = bq256xx_get_input_volt_lim,
+		.bq256xx_set_ts_ignore = NULL,
 
 		.bq256xx_set_ichg = bq256xx_set_ichg_curr,
 		.bq256xx_set_iindpm = bq256xx_set_input_curr_lim,
@@ -1316,6 +1330,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq256xx_set_term_curr,
 		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = NULL,
 
 		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1346,6 +1361,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq256xx_set_term_curr,
 		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = NULL,
 
 		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1376,6 +1392,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq256xx_set_term_curr,
 		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = NULL,
 
 		.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1406,6 +1423,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq256xx_set_term_curr,
 		.bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
 
 		.bq256xx_def_ichg = BQ25611D_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1436,6 +1454,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq25618_619_set_term_curr,
 		.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
 
 		.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1466,6 +1485,7 @@  static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
 		.bq256xx_set_iterm = bq25618_619_set_term_curr,
 		.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
 		.bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
+		.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
 
 		.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
 		.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
@@ -1582,6 +1602,12 @@  static int bq256xx_hw_init(struct bq256xx_device *bq)
 	if (ret)
 		return ret;
 
+	if (bq->chip_info->bq256xx_set_ts_ignore) {
+		ret = bq->chip_info->bq256xx_set_ts_ignore(bq, bq->init_data.ts_ignore);
+		if (ret)
+			return ret;
+	}
+
 	power_supply_put_battery_info(bq->charger, bat_info);
 
 	return 0;
@@ -1616,6 +1642,8 @@  static int bq256xx_parse_dt(struct bq256xx_device *bq,
 	if (ret)
 		bq->init_data.iindpm = bq->chip_info->bq256xx_def_iindpm;
 
+	bq->init_data.ts_ignore = device_property_read_bool(bq->dev, "ti,no-thermistor");
+
 	return 0;
 }