|
70 | 70 | #define BQ25611D_VBATREG_THRESH_uV 4290000 |
71 | 71 | #define BQ25618_VBATREG_THRESH_uV 4300000 |
72 | 72 |
|
| 73 | +#define BQ256XX_CHG_CONFIG_MASK BIT(4) |
| 74 | +#define BQ256XX_CHG_CONFIG_BIT_SHIFT 4 |
| 75 | + |
73 | 76 | #define BQ256XX_ITERM_MASK GENMASK(3, 0) |
74 | 77 | #define BQ256XX_ITERM_STEP_uA 60000 |
75 | 78 | #define BQ256XX_ITERM_OFFSET_uA 60000 |
@@ -259,6 +262,7 @@ struct bq256xx_device { |
259 | 262 | * @bq256xx_set_iterm: pointer to instance specific set_iterm function |
260 | 263 | * @bq256xx_set_iprechg: pointer to instance specific set_iprechg function |
261 | 264 | * @bq256xx_set_vindpm: pointer to instance specific set_vindpm function |
| 265 | + * @bq256xx_set_charge_type: pointer to instance specific set_charge_type function |
262 | 266 | * |
263 | 267 | * @bq256xx_def_ichg: default ichg value in microamps |
264 | 268 | * @bq256xx_def_iindpm: default iindpm value in microamps |
@@ -290,6 +294,7 @@ struct bq256xx_chip_info { |
290 | 294 | int (*bq256xx_set_iterm)(struct bq256xx_device *bq, int iterm); |
291 | 295 | int (*bq256xx_set_iprechg)(struct bq256xx_device *bq, int iprechg); |
292 | 296 | int (*bq256xx_set_vindpm)(struct bq256xx_device *bq, int vindpm); |
| 297 | + int (*bq256xx_set_charge_type)(struct bq256xx_device *bq, int type); |
293 | 298 |
|
294 | 299 | int bq256xx_def_ichg; |
295 | 300 | int bq256xx_def_iindpm; |
@@ -449,6 +454,27 @@ static int bq256xx_get_state(struct bq256xx_device *bq, |
449 | 454 | return 0; |
450 | 455 | } |
451 | 456 |
|
| 457 | +static int bq256xx_set_charge_type(struct bq256xx_device *bq, int type) |
| 458 | +{ |
| 459 | + int chg_config = 0; |
| 460 | + |
| 461 | + switch (type) { |
| 462 | + case POWER_SUPPLY_CHARGE_TYPE_NONE: |
| 463 | + chg_config = 0x0; |
| 464 | + break; |
| 465 | + case POWER_SUPPLY_CHARGE_TYPE_TRICKLE: |
| 466 | + case POWER_SUPPLY_CHARGE_TYPE_FAST: |
| 467 | + chg_config = 0x1; |
| 468 | + break; |
| 469 | + default: |
| 470 | + return -EINVAL; |
| 471 | + } |
| 472 | + |
| 473 | + return regmap_update_bits(bq->regmap, BQ256XX_CHARGER_CONTROL_0, |
| 474 | + BQ256XX_CHG_CONFIG_MASK, |
| 475 | + (chg_config ? 1 : 0) << BQ256XX_CHG_CONFIG_BIT_SHIFT); |
| 476 | +} |
| 477 | + |
452 | 478 | static int bq256xx_get_ichg_curr(struct bq256xx_device *bq) |
453 | 479 | { |
454 | 480 | unsigned int charge_current_limit; |
@@ -915,6 +941,12 @@ static int bq256xx_set_charger_property(struct power_supply *psy, |
915 | 941 | return ret; |
916 | 942 | break; |
917 | 943 |
|
| 944 | + case POWER_SUPPLY_PROP_CHARGE_TYPE: |
| 945 | + ret = bq->chip_info->bq256xx_set_charge_type(bq, val->intval); |
| 946 | + if (ret) |
| 947 | + return ret; |
| 948 | + break; |
| 949 | + |
918 | 950 | default: |
919 | 951 | break; |
920 | 952 | } |
@@ -1197,6 +1229,7 @@ static int bq256xx_property_is_writeable(struct power_supply *psy, |
1197 | 1229 | case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT: |
1198 | 1230 | case POWER_SUPPLY_PROP_STATUS: |
1199 | 1231 | case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT: |
| 1232 | + case POWER_SUPPLY_PROP_CHARGE_TYPE: |
1200 | 1233 | return true; |
1201 | 1234 | default: |
1202 | 1235 | return false; |
@@ -1286,6 +1319,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1286 | 1319 | .bq256xx_set_iterm = bq256xx_set_term_curr, |
1287 | 1320 | .bq256xx_set_iprechg = bq256xx_set_prechrg_curr, |
1288 | 1321 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1322 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1289 | 1323 |
|
1290 | 1324 | .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, |
1291 | 1325 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1316,6 +1350,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1316 | 1350 | .bq256xx_set_iterm = bq256xx_set_term_curr, |
1317 | 1351 | .bq256xx_set_iprechg = bq256xx_set_prechrg_curr, |
1318 | 1352 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1353 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1319 | 1354 |
|
1320 | 1355 | .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, |
1321 | 1356 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1346,6 +1381,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1346 | 1381 | .bq256xx_set_iterm = bq256xx_set_term_curr, |
1347 | 1382 | .bq256xx_set_iprechg = bq256xx_set_prechrg_curr, |
1348 | 1383 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1384 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1349 | 1385 |
|
1350 | 1386 | .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, |
1351 | 1387 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1376,6 +1412,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1376 | 1412 | .bq256xx_set_iterm = bq256xx_set_term_curr, |
1377 | 1413 | .bq256xx_set_iprechg = bq256xx_set_prechrg_curr, |
1378 | 1414 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1415 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1379 | 1416 |
|
1380 | 1417 | .bq256xx_def_ichg = BQ2560X_ICHG_DEF_uA, |
1381 | 1418 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1406,6 +1443,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1406 | 1443 | .bq256xx_set_iterm = bq256xx_set_term_curr, |
1407 | 1444 | .bq256xx_set_iprechg = bq256xx_set_prechrg_curr, |
1408 | 1445 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1446 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1409 | 1447 |
|
1410 | 1448 | .bq256xx_def_ichg = BQ25611D_ICHG_DEF_uA, |
1411 | 1449 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1436,6 +1474,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1436 | 1474 | .bq256xx_set_iterm = bq25618_619_set_term_curr, |
1437 | 1475 | .bq256xx_set_iprechg = bq25618_619_set_prechrg_curr, |
1438 | 1476 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1477 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1439 | 1478 |
|
1440 | 1479 | .bq256xx_def_ichg = BQ25618_ICHG_DEF_uA, |
1441 | 1480 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
@@ -1466,6 +1505,7 @@ static const struct bq256xx_chip_info bq256xx_chip_info_tbl[] = { |
1466 | 1505 | .bq256xx_set_iterm = bq25618_619_set_term_curr, |
1467 | 1506 | .bq256xx_set_iprechg = bq25618_619_set_prechrg_curr, |
1468 | 1507 | .bq256xx_set_vindpm = bq256xx_set_input_volt_lim, |
| 1508 | + .bq256xx_set_charge_type = bq256xx_set_charge_type, |
1469 | 1509 |
|
1470 | 1510 | .bq256xx_def_ichg = BQ25618_ICHG_DEF_uA, |
1471 | 1511 | .bq256xx_def_iindpm = BQ256XX_IINDPM_DEF_uA, |
|
0 commit comments