Lines Matching refs:sgm

254 static int sgm4154x_set_term_curr(struct sgm4154x_device *sgm, int uA)  in sgm4154x_set_term_curr()  argument
266 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_term_curr()
271 dev_err(sgm->dev, "set term current error!\n"); in sgm4154x_set_term_curr()
276 static int sgm4154x_set_prechrg_curr(struct sgm4154x_device *sgm, int uA) in sgm4154x_set_prechrg_curr() argument
289 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_prechrg_curr()
294 dev_err(sgm->dev, "set precharge current error!\n"); in sgm4154x_set_prechrg_curr()
299 static int sgm4154x_set_ichrg_curr(struct sgm4154x_device *sgm, int uA) in sgm4154x_set_ichrg_curr() argument
307 if ((sgm->init_data.max_ichg > 0) && (uA > sgm->init_data.max_ichg)) in sgm4154x_set_ichrg_curr()
308 uA = sgm->init_data.max_ichg; in sgm4154x_set_ichrg_curr()
314 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_ichrg_curr()
319 dev_err(sgm->dev, "set icharge current error!\n"); in sgm4154x_set_ichrg_curr()
324 static int sgm4154x_set_chrg_volt(struct sgm4154x_device *sgm, int chrg_volt) in sgm4154x_set_chrg_volt() argument
332 if ((sgm->init_data.max_vreg > 0) && (chrg_volt > sgm->init_data.max_vreg)) in sgm4154x_set_chrg_volt()
333 chrg_volt = sgm->init_data.max_vreg; in sgm4154x_set_chrg_volt()
341 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_chrg_volt()
346 dev_err(sgm->dev, "set charge voltage error!\n"); in sgm4154x_set_chrg_volt()
351 static int sgm4154x_set_vindpm_offset_os(struct sgm4154x_device *sgm, in sgm4154x_set_vindpm_offset_os() argument
356 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_vindpm_offset_os()
362 dev_err(sgm->dev, "set vindpm offset os error!\n"); in sgm4154x_set_vindpm_offset_os()
367 static int sgm4154x_set_input_volt_lim(struct sgm4154x_device *sgm, in sgm4154x_set_input_volt_lim() argument
394 ret = sgm4154x_set_vindpm_offset_os(sgm, os_val); in sgm4154x_set_input_volt_lim()
396 dev_err(sgm->dev, "set vin dpm error!\n"); in sgm4154x_set_input_volt_lim()
402 ret = regmap_update_bits(sgm->regmap, SGM4154x_CHRG_CTRL_6, in sgm4154x_set_input_volt_lim()
405 dev_err(sgm->dev, "input voltage error!\n"); in sgm4154x_set_input_volt_lim()
412 static int sgm4154x_set_input_curr_lim(struct sgm4154x_device *sgm, int iindpm) in sgm4154x_set_input_curr_lim() argument
420 if ((iindpm > SGM4154x_IINDPM_I_MAX_uA) || (iindpm > sgm->init_data.ilim)) in sgm4154x_set_input_curr_lim()
421 iindpm = min(SGM4154x_IINDPM_I_MAX_uA, sgm->init_data.ilim); in sgm4154x_set_input_curr_lim()
423 sgm->input_current = iindpm; in sgm4154x_set_input_curr_lim()
426 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_input_curr_lim()
431 dev_err(sgm->dev, "set input current limit error!\n"); in sgm4154x_set_input_curr_lim()
436 static int sgm4154x_get_input_curr_lim(struct sgm4154x_device *sgm) in sgm4154x_get_input_curr_lim() argument
441 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_0, &ilim); in sgm4154x_get_input_curr_lim()
443 dev_err(sgm->dev, "get input current limit error!\n"); in sgm4154x_get_input_curr_lim()
454 static int sgm4154x_watchdog_timer_reset(struct sgm4154x_device *sgm) in sgm4154x_watchdog_timer_reset() argument
458 ret = regmap_update_bits(sgm->regmap, in sgm4154x_watchdog_timer_reset()
464 dev_err(sgm->dev, "set watchdog timer error!\n"); in sgm4154x_watchdog_timer_reset()
469 static int sgm4154x_set_watchdog_timer(struct sgm4154x_device *sgm, int time) in sgm4154x_set_watchdog_timer() argument
483 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_watchdog_timer()
489 dev_err(sgm->dev, "set watchdog timer error!\n"); in sgm4154x_set_watchdog_timer()
495 if (!sgm->watchdog_enable) in sgm4154x_set_watchdog_timer()
496 queue_delayed_work(sgm->sgm_monitor_wq, in sgm4154x_set_watchdog_timer()
497 &sgm->sgm_delay_work, in sgm4154x_set_watchdog_timer()
499 sgm->watchdog_enable = true; in sgm4154x_set_watchdog_timer()
502 sgm->watchdog_enable = false; in sgm4154x_set_watchdog_timer()
503 sgm4154x_watchdog_timer_reset(sgm); in sgm4154x_set_watchdog_timer()
509 static int sgm4154x_enable_charger(struct sgm4154x_device *sgm) in sgm4154x_enable_charger() argument
513 ret = regmap_update_bits(sgm->regmap, in sgm4154x_enable_charger()
518 dev_err(sgm->dev, "enable charger error!\n"); in sgm4154x_enable_charger()
523 static int sgm4154x_disable_charger(struct sgm4154x_device *sgm) in sgm4154x_disable_charger() argument
527 ret = regmap_update_bits(sgm->regmap, in sgm4154x_disable_charger()
532 dev_err(sgm->dev, "disable charger error!\n"); in sgm4154x_disable_charger()
537 static int sgm4154x_set_vac_ovp(struct sgm4154x_device *sgm) in sgm4154x_set_vac_ovp() argument
544 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_vac_ovp()
549 dev_err(sgm->dev, "set vac ovp error!\n"); in sgm4154x_set_vac_ovp()
554 static int sgm4154x_set_recharge_volt(struct sgm4154x_device *sgm, int recharge_volt) in sgm4154x_set_recharge_volt() argument
561 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_recharge_volt()
566 dev_err(sgm->dev, "set recharger error!\n"); in sgm4154x_set_recharge_volt()
571 static int sgm4154x_get_state(struct sgm4154x_device *sgm, in sgm4154x_get_state() argument
579 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_STAT, &chrg_stat); in sgm4154x_get_state()
592 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_FAULT, &fault); in sgm4154x_get_state()
602 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_0, &chrg_param_0); in sgm4154x_get_state()
610 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_5, &chrg_param_1); in sgm4154x_get_state()
618 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_a, &chrg_param_2); in sgm4154x_get_state()
659 struct sgm4154x_device *sgm = power_supply_get_drvdata(psy); in sgm4154x_charger_set_property() local
665 ret = sgm4154x_enable_charger(sgm); in sgm4154x_charger_set_property()
666 sgm4154x_set_watchdog_timer(sgm, SGM4154x_WDT_TIMER_40S); in sgm4154x_charger_set_property()
668 sgm4154x_set_watchdog_timer(sgm, 0); in sgm4154x_charger_set_property()
669 ret = sgm4154x_disable_charger(sgm); in sgm4154x_charger_set_property()
674 ret = sgm4154x_set_input_curr_lim(sgm, val->intval); in sgm4154x_charger_set_property()
677 ret = sgm4154x_set_ichrg_curr(sgm, val->intval); in sgm4154x_charger_set_property()
680 ret = sgm4154x_set_chrg_volt(sgm, val->intval); in sgm4154x_charger_set_property()
694 struct sgm4154x_device *sgm = power_supply_get_drvdata(psy); in sgm4154x_charger_get_property() local
698 mutex_lock(&sgm->lock); in sgm4154x_charger_get_property()
699 ret = sgm4154x_get_state(sgm, &state); in sgm4154x_charger_get_property()
701 dev_err(sgm->dev, "get state error!\n"); in sgm4154x_charger_get_property()
702 mutex_unlock(&sgm->lock); in sgm4154x_charger_get_property()
705 sgm->state = state; in sgm4154x_charger_get_property()
706 mutex_unlock(&sgm->lock); in sgm4154x_charger_get_property()
755 val->intval = sgm->init_data.max_vreg; in sgm4154x_charger_get_property()
765 val->intval = sgm4154x_get_input_curr_lim(sgm); in sgm4154x_charger_get_property()
907 static int sgm4154x_power_supply_init(struct sgm4154x_device *sgm, in sgm4154x_power_supply_init() argument
910 struct power_supply_config psy_cfg = { .drv_data = sgm, in sgm4154x_power_supply_init()
916 sgm->charger = devm_power_supply_register(sgm->dev, in sgm4154x_power_supply_init()
919 if (IS_ERR(sgm->charger)) in sgm4154x_power_supply_init()
925 static int sgm4154x_hw_init(struct sgm4154x_device *sgm) in sgm4154x_hw_init() argument
930 ret = power_supply_get_battery_info(sgm->charger, &bat_info); in sgm4154x_hw_init()
946 sgm->init_data.max_ichg = in sgm4154x_hw_init()
948 sgm->init_data.max_vreg = SGM4154x_VREG_V_DEF_uV; in sgm4154x_hw_init()
962 if (!sgm->init_data.max_ichg) in sgm4154x_hw_init()
963 sgm->init_data.max_ichg = in sgm4154x_hw_init()
967 sgm->init_data.max_vreg = bat_info.constant_charge_voltage_max_uv; in sgm4154x_hw_init()
969 ret = sgm4154x_set_watchdog_timer(sgm, 0); in sgm4154x_hw_init()
974 ret = sgm4154x_set_prechrg_curr(sgm, bat_info.precharge_current_ua); in sgm4154x_hw_init()
978 ret = sgm4154x_set_chrg_volt(sgm, in sgm4154x_hw_init()
979 sgm->init_data.max_vreg); in sgm4154x_hw_init()
983 ret = sgm4154x_set_term_curr(sgm, in sgm4154x_hw_init()
988 ret = sgm4154x_set_input_volt_lim(sgm, sgm->init_data.vlim); in sgm4154x_hw_init()
992 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_STAT, &chrg_stat); in sgm4154x_hw_init()
999 ret = sgm4154x_set_input_curr_lim(sgm, DEFAULT_INPUT_CURRENT); in sgm4154x_hw_init()
1002 ret = sgm4154x_set_ichrg_curr(sgm, in sgm4154x_hw_init()
1007 ret = sgm4154x_disable_charger(sgm); in sgm4154x_hw_init()
1011 ret = sgm4154x_set_vac_ovp(sgm); in sgm4154x_hw_init()
1015 regmap_update_bits(sgm->regmap, in sgm4154x_hw_init()
1020 regmap_update_bits(sgm->regmap, in sgm4154x_hw_init()
1025 regmap_update_bits(sgm->regmap, in sgm4154x_hw_init()
1031 ret = sgm4154x_set_recharge_volt(sgm, 200); in sgm4154x_hw_init()
1044 sgm->init_data.ilim); in sgm4154x_hw_init()
1052 static int sgm4154x_parse_dt(struct sgm4154x_device *sgm) in sgm4154x_parse_dt() argument
1056 ret = device_property_read_u32(sgm->dev, in sgm4154x_parse_dt()
1058 &sgm->init_data.vlim); in sgm4154x_parse_dt()
1060 sgm->init_data.vlim = SGM4154x_VINDPM_DEF_uV; in sgm4154x_parse_dt()
1062 if (sgm->init_data.vlim > SGM4154x_VINDPM_V_MAX_uV || in sgm4154x_parse_dt()
1063 sgm->init_data.vlim < SGM4154x_VINDPM_V_MIN_uV) in sgm4154x_parse_dt()
1066 ret = device_property_read_u32(sgm->dev, in sgm4154x_parse_dt()
1068 &sgm->init_data.ilim); in sgm4154x_parse_dt()
1070 sgm->init_data.ilim = SGM4154x_IINDPM_DEF_uA; in sgm4154x_parse_dt()
1072 if (sgm->init_data.ilim > SGM4154x_IINDPM_I_MAX_uA || in sgm4154x_parse_dt()
1073 sgm->init_data.ilim < SGM4154x_IINDPM_I_MIN_uA) in sgm4154x_parse_dt()
1079 static int sgm4154x_set_otg_voltage(struct sgm4154x_device *sgm, int uv) in sgm4154x_set_otg_voltage() argument
1095 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_otg_voltage()
1100 dev_err(sgm->dev, "set otg voltage error!\n"); in sgm4154x_set_otg_voltage()
1107 static int sgm4154x_set_otg_current(struct sgm4154x_device *sgm, int ua) in sgm4154x_set_otg_current() argument
1112 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_otg_current()
1117 dev_err(sgm->dev, "set boost current limit error!\n"); in sgm4154x_set_otg_current()
1121 ret = regmap_update_bits(sgm->regmap, in sgm4154x_set_otg_current()
1126 dev_err(sgm->dev, "set boost current limit error!\n"); in sgm4154x_set_otg_current()
1136 struct sgm4154x_device *sgm = rdev_get_drvdata(rdev); in sgm4154x_enable_vbus() local
1139 ret = regmap_update_bits(sgm->regmap, in sgm4154x_enable_vbus()
1144 dev_err(sgm->dev, "set OTG enable error!\n"); in sgm4154x_enable_vbus()
1153 struct sgm4154x_device *sgm = rdev_get_drvdata(rdev); in sgm4154x_disable_vbus() local
1156 ret = regmap_update_bits(sgm->regmap, in sgm4154x_disable_vbus()
1161 dev_err(sgm->dev, "set OTG disable error!\n"); in sgm4154x_disable_vbus()
1170 struct sgm4154x_device *sgm = rdev_get_drvdata(rdev); in sgm4154x_is_enabled_vbus() local
1174 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_1, &temp); in sgm4154x_is_enabled_vbus()
1176 dev_err(sgm->dev, "get vbus status error!\n"); in sgm4154x_is_enabled_vbus()
1200 static int sgm4154x_vbus_regulator_register(struct sgm4154x_device *sgm) in sgm4154x_vbus_regulator_register() argument
1206 np = of_get_child_by_name(sgm->dev->of_node, "regulators"); in sgm4154x_vbus_regulator_register()
1208 dev_warn(sgm->dev, "cannot find regulators node\n"); in sgm4154x_vbus_regulator_register()
1213 config.dev = sgm->dev; in sgm4154x_vbus_regulator_register()
1214 config.driver_data = sgm; in sgm4154x_vbus_regulator_register()
1215 sgm->otg_rdev = devm_regulator_register(sgm->dev, in sgm4154x_vbus_regulator_register()
1218 if (IS_ERR(sgm->otg_rdev)) in sgm4154x_vbus_regulator_register()
1219 ret = PTR_ERR(sgm->otg_rdev); in sgm4154x_vbus_regulator_register()
1228 struct sgm4154x_device *sgm = container_of(nb, struct sgm4154x_device, pm_nb); in sgm4154x_suspend_notifier() local
1233 sgm->sgm4154x_suspend_flag = 1; in sgm4154x_suspend_notifier()
1237 sgm->sgm4154x_suspend_flag = 0; in sgm4154x_suspend_notifier()
1245 static int sgm4154x_hw_chipid_detect(struct sgm4154x_device *sgm) in sgm4154x_hw_chipid_detect() argument
1250 ret = regmap_read(sgm->regmap, SGM4154x_CHRG_CTRL_b, &val); in sgm4154x_hw_chipid_detect()
1259 struct sgm4154x_device *sgm = in sgm_charger_work() local
1264 sgm4154x_watchdog_timer_reset(sgm); in sgm_charger_work()
1265 if (sgm->watchdog_enable) in sgm_charger_work()
1266 queue_delayed_work(sgm->sgm_monitor_wq, in sgm_charger_work()
1267 &sgm->sgm_delay_work, in sgm_charger_work()
1275 struct sgm4154x_device *sgm; in sgm4154x_probe() local
1278 sgm = devm_kzalloc(dev, sizeof(*sgm), GFP_KERNEL); in sgm4154x_probe()
1279 if (!sgm) in sgm4154x_probe()
1282 sgm->client = client; in sgm4154x_probe()
1283 sgm->dev = dev; in sgm4154x_probe()
1285 mutex_init(&sgm->lock); in sgm4154x_probe()
1287 strncpy(sgm->model_name, id->name, I2C_NAME_SIZE); in sgm4154x_probe()
1289 sgm->regmap = devm_regmap_init_i2c(client, &sgm4154x_regmap_config); in sgm4154x_probe()
1290 if (IS_ERR(sgm->regmap)) { in sgm4154x_probe()
1292 return PTR_ERR(sgm->regmap); in sgm4154x_probe()
1295 i2c_set_clientdata(client, sgm); in sgm4154x_probe()
1297 ret = sgm4154x_parse_dt(sgm); in sgm4154x_probe()
1303 ret = sgm4154x_hw_chipid_detect(sgm); in sgm4154x_probe()
1316 "sgm41542-irq", sgm); in sgm4154x_probe()
1322 sgm->pm_nb.notifier_call = sgm4154x_suspend_notifier; in sgm4154x_probe()
1323 register_pm_notifier(&sgm->pm_nb); in sgm4154x_probe()
1325 ret = sgm4154x_power_supply_init(sgm, dev); in sgm4154x_probe()
1331 ret = sgm4154x_hw_init(sgm); in sgm4154x_probe()
1338 ret = sgm4154x_set_otg_voltage(sgm, 5000000); in sgm4154x_probe()
1340 dev_err(sgm->dev, "set OTG voltage error!\n"); in sgm4154x_probe()
1344 ret = sgm4154x_set_otg_current(sgm, 1200000); in sgm4154x_probe()
1346 dev_err(sgm->dev, "set OTG current error!\n"); in sgm4154x_probe()
1350 sgm->sgm_monitor_wq = alloc_ordered_workqueue("%s", in sgm4154x_probe()
1352 INIT_DELAYED_WORK(&sgm->sgm_delay_work, sgm_charger_work); in sgm4154x_probe()
1354 sgm4154x_vbus_regulator_register(sgm); in sgm4154x_probe()
1355 sgm4154x_create_device_node(sgm->dev); in sgm4154x_probe()
1364 struct sgm4154x_device *sgm = i2c_get_clientdata(client); in sgm4154x_charger_remove() local
1366 destroy_workqueue(sgm->sgm_monitor_wq); in sgm4154x_charger_remove()
1367 regulator_unregister(sgm->otg_rdev); in sgm4154x_charger_remove()
1368 power_supply_unregister(sgm->charger); in sgm4154x_charger_remove()
1369 mutex_destroy(&sgm->lock); in sgm4154x_charger_remove()
1376 struct sgm4154x_device *sgm = i2c_get_clientdata(client); in sgm4154x_charger_shutdown() local
1379 sgm4154x_set_prechrg_curr(sgm, SGM4154x_PRECHRG_I_DEF_uA); in sgm4154x_charger_shutdown()
1380 ret = sgm4154x_disable_charger(sgm); in sgm4154x_charger_shutdown()