@@ -282,6 +282,7 @@ struct qcom_battmgr_wireless {
282282
283283struct qcom_battmgr {
284284 struct device * dev ;
285+ struct auxiliary_device * adev ;
285286 struct pmic_glink_client * client ;
286287
287288 enum qcom_battmgr_variant variant ;
@@ -1293,11 +1294,69 @@ static void qcom_battmgr_enable_worker(struct work_struct *work)
12931294 dev_err (battmgr -> dev , "failed to request power notifications\n" );
12941295}
12951296
1297+ static char * qcom_battmgr_battery [] = { "battery" };
1298+
1299+ static void qcom_battmgr_register_psy (struct qcom_battmgr * battmgr )
1300+ {
1301+ struct power_supply_config psy_cfg_supply = {};
1302+ struct auxiliary_device * adev = battmgr -> adev ;
1303+ struct power_supply_config psy_cfg = {};
1304+ struct device * dev = & adev -> dev ;
1305+
1306+ psy_cfg .drv_data = battmgr ;
1307+ psy_cfg .of_node = adev -> dev .of_node ;
1308+
1309+ psy_cfg_supply .drv_data = battmgr ;
1310+ psy_cfg_supply .of_node = adev -> dev .of_node ;
1311+ psy_cfg_supply .supplied_to = qcom_battmgr_battery ;
1312+ psy_cfg_supply .num_supplicants = 1 ;
1313+
1314+ if (battmgr -> variant == QCOM_BATTMGR_SC8280XP ) {
1315+ battmgr -> bat_psy = devm_power_supply_register (dev , & sc8280xp_bat_psy_desc , & psy_cfg );
1316+ if (IS_ERR (battmgr -> bat_psy ))
1317+ dev_err (dev , "failed to register battery power supply (%ld)\n" ,
1318+ PTR_ERR (battmgr -> bat_psy ));
1319+
1320+ battmgr -> ac_psy = devm_power_supply_register (dev , & sc8280xp_ac_psy_desc , & psy_cfg_supply );
1321+ if (IS_ERR (battmgr -> ac_psy ))
1322+ dev_err (dev , "failed to register AC power supply (%ld)\n" ,
1323+ PTR_ERR (battmgr -> ac_psy ));
1324+
1325+ battmgr -> usb_psy = devm_power_supply_register (dev , & sc8280xp_usb_psy_desc , & psy_cfg_supply );
1326+ if (IS_ERR (battmgr -> usb_psy ))
1327+ dev_err (dev , "failed to register USB power supply (%ld)\n" ,
1328+ PTR_ERR (battmgr -> usb_psy ));
1329+
1330+ battmgr -> wls_psy = devm_power_supply_register (dev , & sc8280xp_wls_psy_desc , & psy_cfg_supply );
1331+ if (IS_ERR (battmgr -> wls_psy ))
1332+ dev_err (dev , "failed to register wireless charing power supply (%ld)\n" ,
1333+ PTR_ERR (battmgr -> wls_psy ));
1334+ } else {
1335+ battmgr -> bat_psy = devm_power_supply_register (dev , & sm8350_bat_psy_desc , & psy_cfg );
1336+ if (IS_ERR (battmgr -> bat_psy ))
1337+ dev_err (dev , "failed to register battery power supply (%ld)\n" ,
1338+ PTR_ERR (battmgr -> bat_psy ));
1339+
1340+ battmgr -> usb_psy = devm_power_supply_register (dev , & sm8350_usb_psy_desc , & psy_cfg_supply );
1341+ if (IS_ERR (battmgr -> usb_psy ))
1342+ dev_err (dev , "failed to register USB power supply (%ld)\n" ,
1343+ PTR_ERR (battmgr -> usb_psy ));
1344+
1345+ battmgr -> wls_psy = devm_power_supply_register (dev , & sm8350_wls_psy_desc , & psy_cfg_supply );
1346+ if (IS_ERR (battmgr -> wls_psy ))
1347+ dev_err (dev , "failed to register wireless charing power supply (%ld)\n" ,
1348+ PTR_ERR (battmgr -> wls_psy ));
1349+ }
1350+ }
1351+
12961352static void qcom_battmgr_pdr_notify (void * priv , int state )
12971353{
12981354 struct qcom_battmgr * battmgr = priv ;
12991355
13001356 if (state == SERVREG_SERVICE_STATE_UP ) {
1357+ if (!battmgr -> bat_psy )
1358+ qcom_battmgr_register_psy (battmgr );
1359+
13011360 battmgr -> service_up = true;
13021361 schedule_work (& battmgr -> enable_work );
13031362 } else {
@@ -1312,13 +1371,9 @@ static const struct of_device_id qcom_battmgr_of_variants[] = {
13121371 {}
13131372};
13141373
1315- static char * qcom_battmgr_battery [] = { "battery" };
1316-
13171374static int qcom_battmgr_probe (struct auxiliary_device * adev ,
13181375 const struct auxiliary_device_id * id )
13191376{
1320- struct power_supply_config psy_cfg_supply = {};
1321- struct power_supply_config psy_cfg = {};
13221377 const struct of_device_id * match ;
13231378 struct qcom_battmgr * battmgr ;
13241379 struct device * dev = & adev -> dev ;
@@ -1328,14 +1383,7 @@ static int qcom_battmgr_probe(struct auxiliary_device *adev,
13281383 return - ENOMEM ;
13291384
13301385 battmgr -> dev = dev ;
1331-
1332- psy_cfg .drv_data = battmgr ;
1333- psy_cfg .of_node = adev -> dev .of_node ;
1334-
1335- psy_cfg_supply .drv_data = battmgr ;
1336- psy_cfg_supply .of_node = adev -> dev .of_node ;
1337- psy_cfg_supply .supplied_to = qcom_battmgr_battery ;
1338- psy_cfg_supply .num_supplicants = 1 ;
1386+ battmgr -> adev = adev ;
13391387
13401388 INIT_WORK (& battmgr -> enable_work , qcom_battmgr_enable_worker );
13411389 mutex_init (& battmgr -> lock );
@@ -1347,43 +1395,6 @@ static int qcom_battmgr_probe(struct auxiliary_device *adev,
13471395 else
13481396 battmgr -> variant = QCOM_BATTMGR_SM8350 ;
13491397
1350- if (battmgr -> variant == QCOM_BATTMGR_SC8280XP ) {
1351- battmgr -> bat_psy = devm_power_supply_register (dev , & sc8280xp_bat_psy_desc , & psy_cfg );
1352- if (IS_ERR (battmgr -> bat_psy ))
1353- return dev_err_probe (dev , PTR_ERR (battmgr -> bat_psy ),
1354- "failed to register battery power supply\n" );
1355-
1356- battmgr -> ac_psy = devm_power_supply_register (dev , & sc8280xp_ac_psy_desc , & psy_cfg_supply );
1357- if (IS_ERR (battmgr -> ac_psy ))
1358- return dev_err_probe (dev , PTR_ERR (battmgr -> ac_psy ),
1359- "failed to register AC power supply\n" );
1360-
1361- battmgr -> usb_psy = devm_power_supply_register (dev , & sc8280xp_usb_psy_desc , & psy_cfg_supply );
1362- if (IS_ERR (battmgr -> usb_psy ))
1363- return dev_err_probe (dev , PTR_ERR (battmgr -> usb_psy ),
1364- "failed to register USB power supply\n" );
1365-
1366- battmgr -> wls_psy = devm_power_supply_register (dev , & sc8280xp_wls_psy_desc , & psy_cfg_supply );
1367- if (IS_ERR (battmgr -> wls_psy ))
1368- return dev_err_probe (dev , PTR_ERR (battmgr -> wls_psy ),
1369- "failed to register wireless charing power supply\n" );
1370- } else {
1371- battmgr -> bat_psy = devm_power_supply_register (dev , & sm8350_bat_psy_desc , & psy_cfg );
1372- if (IS_ERR (battmgr -> bat_psy ))
1373- return dev_err_probe (dev , PTR_ERR (battmgr -> bat_psy ),
1374- "failed to register battery power supply\n" );
1375-
1376- battmgr -> usb_psy = devm_power_supply_register (dev , & sm8350_usb_psy_desc , & psy_cfg_supply );
1377- if (IS_ERR (battmgr -> usb_psy ))
1378- return dev_err_probe (dev , PTR_ERR (battmgr -> usb_psy ),
1379- "failed to register USB power supply\n" );
1380-
1381- battmgr -> wls_psy = devm_power_supply_register (dev , & sm8350_wls_psy_desc , & psy_cfg_supply );
1382- if (IS_ERR (battmgr -> wls_psy ))
1383- return dev_err_probe (dev , PTR_ERR (battmgr -> wls_psy ),
1384- "failed to register wireless charing power supply\n" );
1385- }
1386-
13871398 battmgr -> client = devm_pmic_glink_register_client (dev ,
13881399 PMIC_GLINK_OWNER_BATTMGR ,
13891400 qcom_battmgr_callback ,
0 commit comments