Skip to content

Commit 92ee9e2

Browse files
committed
power: supply: ln8411: Adds runtime input ovp controls
Allows for runtime configuration of VWPC_OVP and VUSB_OVP via the POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT property. Change-Id: I0131ab5fdb40a96ecf25dc55df1a1594a68bf73b Signed-off-by: Ricardo Rivera-Matos <[email protected]>
1 parent ad7403b commit 92ee9e2

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

drivers/power/supply/ln8411_charger.c

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -515,11 +515,10 @@ static int ln8411_cfg_vwpc_ovp(struct ln8411_device *ln8411)
515515
LN8411_VWPC_OVP_SET_MASK, reg_code);
516516
}
517517

518-
static int ln8411_set_vwpc_ovp(struct ln8411_device *ln8411)
518+
static int ln8411_set_vwpc_ovp(struct ln8411_device *ln8411, int val)
519519
{
520-
struct ln8411_init_data *init_data = &ln8411->init_data;
521-
int val = init_data->vwpc_ovp_uv;
522520
unsigned int reg_code;
521+
int ret;
523522

524523
if (val == LN8411_VWPC_OVP_DFLT_UV) {
525524
reg_code = LN8411_VWPC_OVP_DFLT;
@@ -528,8 +527,14 @@ static int ln8411_set_vwpc_ovp(struct ln8411_device *ln8411)
528527
reg_code = (val - LN8411_VWPC_OVP_OFFSET_UV) / LN8411_VWPC_OVP_STEP_UV;
529528
}
530529

531-
return regmap_update_bits(ln8411->regmap,
532-
LN8411_VWPC_OVP, LN8411_VWPC_OVP_CFG_MASK, reg_code);
530+
ret = regmap_update_bits(ln8411->regmap,
531+
LN8411_VWPC_OVP, LN8411_VWPC_OVP_CFG_MASK, reg_code);
532+
if (ret)
533+
return ret;
534+
535+
ln8411->state.vwpc_ovp_uv = val;
536+
537+
return ret;
533538
}
534539

535540
static int ln8411_cfg_vusb_ovp(struct ln8411_device *ln8411)
@@ -546,11 +551,10 @@ static int ln8411_cfg_vusb_ovp(struct ln8411_device *ln8411)
546551
LN8411_VUSB_OVP_SET_MASK, reg_code);
547552
}
548553

549-
static int ln8411_set_vusb_ovp(struct ln8411_device *ln8411)
554+
static int ln8411_set_vusb_ovp(struct ln8411_device *ln8411, int val)
550555
{
551-
struct ln8411_init_data init_data = ln8411->init_data;
552-
int val = init_data.vusb_ovp_uv;
553556
unsigned int reg_code;
557+
int ret;
554558

555559
if (val == LN8411_VUSB_OVP_DFLT_UV) {
556560
reg_code = LN8411_VUSB_OVP_DFLT;
@@ -559,8 +563,14 @@ static int ln8411_set_vusb_ovp(struct ln8411_device *ln8411)
559563
reg_code = (val - LN8411_VUSB_OVP_OFFSET_UV) / LN8411_VUSB_OVP_STEP_UV;
560564
}
561565

562-
return regmap_update_bits(ln8411->regmap,
563-
LN8411_VUSB_OVP, LN8411_VUSB_OVP_CFG_MASK, reg_code);
566+
ret = regmap_update_bits(ln8411->regmap,
567+
LN8411_VUSB_OVP, LN8411_VUSB_OVP_CFG_MASK, reg_code);
568+
if (ret)
569+
return ret;
570+
571+
ln8411->state.vusb_ovp_uv = val;
572+
573+
return ret;
564574
}
565575

566576
static int ln8411_cfg_ibat_ocp(struct ln8411_device *ln8411)
@@ -1275,6 +1285,7 @@ static int ln8411_property_is_writeable(struct power_supply *psy,
12751285
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
12761286
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
12771287
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
1288+
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
12781289
case POWER_SUPPLY_PROP_CHARGE_TYPE:
12791290
case POWER_SUPPLY_PROP_STATUS:
12801291
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
@@ -1318,6 +1329,8 @@ static int ln8411_set_wpc_property(struct power_supply *psy,
13181329
struct ln8411_device *ln8411 = power_supply_get_drvdata(psy);
13191330

13201331
switch (psp) {
1332+
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
1333+
return ln8411_set_vwpc_ovp(ln8411, val->intval);
13211334
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
13221335
ln8411->state.iwpc_ocp_ua = val->intval;
13231336
break;
@@ -1339,8 +1352,9 @@ static int ln8411_get_wpc_property(struct power_supply *psy,
13391352
int ret;
13401353

13411354
switch (psp) {
1355+
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
13421356
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
1343-
val->intval = ln8411->init_data.vwpc_ovp_uv;
1357+
val->intval = ln8411->state.vwpc_ovp_uv;
13441358
break;
13451359
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
13461360
case POWER_SUPPLY_PROP_CURRENT_MAX:
@@ -1400,6 +1414,8 @@ static int ln8411_set_usb_property(struct power_supply *psy,
14001414
struct ln8411_device *ln8411 = power_supply_get_drvdata(psy);
14011415

14021416
switch (psp) {
1417+
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
1418+
return ln8411_set_vusb_ovp(ln8411, val->intval);
14031419
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
14041420
ln8411->state.iusb_ocp_ua = val->intval;
14051421
break;
@@ -1421,8 +1437,9 @@ static int ln8411_get_usb_property(struct power_supply *psy,
14211437
int ret;
14221438

14231439
switch (psp) {
1440+
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
14241441
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
1425-
val->intval = ln8411->init_data.vusb_ovp_uv;
1442+
val->intval = ln8411->state.vusb_ovp_uv;
14261443
break;
14271444
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
14281445
case POWER_SUPPLY_PROP_CURRENT_MAX:
@@ -1484,6 +1501,7 @@ static void ln8411_wpc_external_power_changed(struct power_supply *psy)
14841501
}
14851502

14861503
static enum power_supply_property ln8411_input_props[] = {
1504+
POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT,
14871505
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
14881506
POWER_SUPPLY_PROP_VOLTAGE_MAX,
14891507
POWER_SUPPLY_PROP_CURRENT_MAX,
@@ -1926,7 +1944,7 @@ static int ln8411_apply_vwpc_dt(struct ln8411_device *ln8411, struct ln8411_init
19261944
if (ret)
19271945
return ret;
19281946

1929-
return ln8411_set_vwpc_ovp(ln8411);
1947+
return ln8411_set_vwpc_ovp(ln8411, init_data->vwpc_ovp_uv);
19301948
}
19311949

19321950
static int ln8411_apply_vusb_dt(struct ln8411_device *ln8411, struct ln8411_init_data *init_data)
@@ -1937,7 +1955,7 @@ static int ln8411_apply_vusb_dt(struct ln8411_device *ln8411, struct ln8411_init
19371955
if (ret)
19381956
return ret;
19391957

1940-
return ln8411_set_vusb_ovp(ln8411);
1958+
return ln8411_set_vusb_ovp(ln8411, init_data->vusb_ovp_uv);
19411959
}
19421960

19431961
static int ln8411_apply_ibat_dt(struct ln8411_device *ln8411, struct ln8411_init_data *init_data)

drivers/power/supply/ln8411_charger.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,8 @@ enum ln8411_keys {
379379
*/
380380
struct ln8411_state {
381381
u32 vbat_ovp_uv;
382+
u32 vwpc_ovp_uv;
383+
u32 vusb_ovp_uv;
382384
u32 ibat_ocp_ua;
383385
u32 ibus_ocp_ua;
384386
u32 iwpc_ocp_ua;

0 commit comments

Comments
 (0)