|
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