Commit 131c0c76 authored by Hermes Zhang's avatar Hermes Zhang Committed by Sebastian Reichel

power: supply: bq256xx: Apply TS_IGNORE from devicetree

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: default avatarHermes Zhang <chenhuiz@axis.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent da8a240f
...@@ -41,6 +41,9 @@ ...@@ -41,6 +41,9 @@
#define BQ256XX_IINDPM_MAX_uA 3200000 #define BQ256XX_IINDPM_MAX_uA 3200000
#define BQ256XX_IINDPM_DEF_uA 2400000 #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_MASK GENMASK(3, 0)
#define BQ256XX_VINDPM_STEP_uV 100000 #define BQ256XX_VINDPM_STEP_uV 100000
#define BQ256XX_VINDPM_OFFSET_uV 3900000 #define BQ256XX_VINDPM_OFFSET_uV 3900000
...@@ -156,6 +159,7 @@ ...@@ -156,6 +159,7 @@
* @vindpm: input voltage limit * @vindpm: input voltage limit
* @ichg_max: maximum fast charge current * @ichg_max: maximum fast charge current
* @vbatreg_max: maximum charge voltage * @vbatreg_max: maximum charge voltage
* @ts_ignore: TS_IGNORE flag
*/ */
struct bq256xx_init_data { struct bq256xx_init_data {
u32 ichg; u32 ichg;
...@@ -166,6 +170,7 @@ struct bq256xx_init_data { ...@@ -166,6 +170,7 @@ struct bq256xx_init_data {
u32 vindpm; u32 vindpm;
u32 ichg_max; u32 ichg_max;
u32 vbatreg_max; u32 vbatreg_max;
bool ts_ignore;
}; };
/** /**
...@@ -263,6 +268,7 @@ struct bq256xx_device { ...@@ -263,6 +268,7 @@ struct bq256xx_device {
* @bq256xx_set_iprechg: pointer to instance specific set_iprechg function * @bq256xx_set_iprechg: pointer to instance specific set_iprechg function
* @bq256xx_set_vindpm: pointer to instance specific set_vindpm function * @bq256xx_set_vindpm: pointer to instance specific set_vindpm function
* @bq256xx_set_charge_type: pointer to instance specific set_charge_type function * @bq256xx_set_charge_type: pointer to instance specific set_charge_type function
* @bq256xx_set_ts_ignore: pointer to instance specific set_ts_ignore function
* *
* @bq256xx_def_ichg: default ichg value in microamps * @bq256xx_def_ichg: default ichg value in microamps
* @bq256xx_def_iindpm: default iindpm value in microamps * @bq256xx_def_iindpm: default iindpm value in microamps
...@@ -295,6 +301,7 @@ struct bq256xx_chip_info { ...@@ -295,6 +301,7 @@ struct bq256xx_chip_info {
int (*bq256xx_set_iprechg)(struct bq256xx_device *bq, int iprechg); int (*bq256xx_set_iprechg)(struct bq256xx_device *bq, int iprechg);
int (*bq256xx_set_vindpm)(struct bq256xx_device *bq, int vindpm); int (*bq256xx_set_vindpm)(struct bq256xx_device *bq, int vindpm);
int (*bq256xx_set_charge_type)(struct bq256xx_device *bq, int type); int (*bq256xx_set_charge_type)(struct bq256xx_device *bq, int type);
int (*bq256xx_set_ts_ignore)(struct bq256xx_device *bq, bool ts_ignore);
int bq256xx_def_ichg; int bq256xx_def_ichg;
int bq256xx_def_iindpm; int bq256xx_def_iindpm;
...@@ -696,6 +703,12 @@ static int bq25601d_set_chrg_volt(struct bq256xx_device *bq, int vbatreg) ...@@ -696,6 +703,12 @@ static int bq25601d_set_chrg_volt(struct bq256xx_device *bq, int vbatreg)
BQ256XX_VBATREG_BIT_SHIFT); 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) static int bq256xx_get_prechrg_curr(struct bq256xx_device *bq)
{ {
unsigned int prechg_and_term_curr_lim; unsigned int prechg_and_term_curr_lim;
...@@ -1312,6 +1325,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1312,6 +1325,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_get_iterm = bq256xx_get_term_curr, .bq256xx_get_iterm = bq256xx_get_term_curr,
.bq256xx_get_iprechg = bq256xx_get_prechrg_curr, .bq256xx_get_iprechg = bq256xx_get_prechrg_curr,
.bq256xx_get_vindpm = bq256xx_get_input_volt_lim, .bq256xx_get_vindpm = bq256xx_get_input_volt_lim,
.bq256xx_set_ts_ignore = NULL,
.bq256xx_set_ichg = bq256xx_set_ichg_curr, .bq256xx_set_ichg = bq256xx_set_ichg_curr,
.bq256xx_set_iindpm = bq256xx_set_input_curr_lim, .bq256xx_set_iindpm = bq256xx_set_input_curr_lim,
...@@ -1351,6 +1365,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1351,6 +1365,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq256xx_set_prechrg_curr, .bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = NULL,
.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1382,6 +1397,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1382,6 +1397,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq256xx_set_prechrg_curr, .bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = NULL,
.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1413,6 +1429,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1413,6 +1429,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq256xx_set_prechrg_curr, .bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = NULL,
.bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1444,6 +1461,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1444,6 +1461,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq256xx_set_prechrg_curr, .bq256xx_set_iprechg = bq256xx_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
.bq256xx_def_ichg = BQ25611D_ICHG_DEF_uA, .bq256xx_def_ichg = BQ25611D_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1475,6 +1493,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1475,6 +1493,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr, .bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA, .bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1506,6 +1525,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { ...@@ -1506,6 +1525,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = {
.bq256xx_set_iprechg = bq25618_619_set_prechrg_curr, .bq256xx_set_iprechg = bq25618_619_set_prechrg_curr,
.bq256xx_set_vindpm = bq256xx_set_input_volt_lim, .bq256xx_set_vindpm = bq256xx_set_input_volt_lim,
.bq256xx_set_charge_type = bq256xx_set_charge_type, .bq256xx_set_charge_type = bq256xx_set_charge_type,
.bq256xx_set_ts_ignore = bq256xx_set_ts_ignore,
.bq256xx_def_ichg = BQ25618_ICHG_DEF_uA, .bq256xx_def_ichg = BQ25618_ICHG_DEF_uA,
.bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA,
...@@ -1622,6 +1642,12 @@ static int bq256xx_hw_init(struct bq256xx_device *bq) ...@@ -1622,6 +1642,12 @@ static int bq256xx_hw_init(struct bq256xx_device *bq)
if (ret) if (ret)
return 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); power_supply_put_battery_info(bq->charger, bat_info);
return 0; return 0;
...@@ -1656,6 +1682,8 @@ static int bq256xx_parse_dt(struct bq256xx_device *bq, ...@@ -1656,6 +1682,8 @@ static int bq256xx_parse_dt(struct bq256xx_device *bq,
if (ret) if (ret)
bq->init_data.iindpm = bq->chip_info->bq256xx_def_iindpm; 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; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment