@@ -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
535540static 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
566576static 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 :
@@ -1472,6 +1489,7 @@ static void ln8411_wpc_external_power_changed(struct power_supply *psy)
14721489}
14731490
14741491static enum power_supply_property ln8411_input_props [] = {
1492+ POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT ,
14751493 POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT ,
14761494 POWER_SUPPLY_PROP_VOLTAGE_MAX ,
14771495 POWER_SUPPLY_PROP_CURRENT_MAX ,
@@ -1914,7 +1932,7 @@ static int ln8411_apply_vwpc_dt(struct ln8411_device *ln8411, struct ln8411_init
19141932 if (ret )
19151933 return ret ;
19161934
1917- return ln8411_set_vwpc_ovp (ln8411 );
1935+ return ln8411_set_vwpc_ovp (ln8411 , init_data -> vwpc_ovp_uv );
19181936}
19191937
19201938static int ln8411_apply_vusb_dt (struct ln8411_device * ln8411 , struct ln8411_init_data * init_data )
@@ -1925,7 +1943,7 @@ static int ln8411_apply_vusb_dt(struct ln8411_device *ln8411, struct ln8411_init
19251943 if (ret )
19261944 return ret ;
19271945
1928- return ln8411_set_vusb_ovp (ln8411 );
1946+ return ln8411_set_vusb_ovp (ln8411 , init_data -> vusb_ovp_uv );
19291947}
19301948
19311949static int ln8411_apply_ibat_dt (struct ln8411_device * ln8411 , struct ln8411_init_data * init_data )
0 commit comments