Lines Matching full:info

67 static void sc2731_charger_stop_charge(struct sc2731_charger_info *info)
69 regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
72 regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
76 static int sc2731_charger_start_charge(struct sc2731_charger_info *info)
81 ret = regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
87 return regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
91 static int sc2731_charger_set_current_limit(struct sc2731_charger_info *info,
105 return regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG5,
110 static int sc2731_charger_set_current(struct sc2731_charger_info *info, u32 cur)
124 ret = regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
130 return regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG1,
134 static int sc2731_charger_get_status(struct sc2731_charger_info *info)
139 ret = regmap_read(info->regmap, SC2731_CHARGE_STATUS, &val);
149 static int sc2731_charger_get_current(struct sc2731_charger_info *info,
155 ret = regmap_read(info->regmap, info->base + SC2731_CHG_CFG1, &val);
165 static int sc2731_charger_get_current_limit(struct sc2731_charger_info *info,
171 ret = regmap_read(info->regmap, info->base + SC2731_CHG_CFG5, &val);
206 struct sc2731_charger_info *info = power_supply_get_drvdata(psy);
209 mutex_lock(&info->lock);
211 if (!info->charging) {
212 mutex_unlock(&info->lock);
218 ret = sc2731_charger_set_current(info, val->intval / 1000);
220 dev_err(info->dev, "set charge current failed\n");
224 ret = sc2731_charger_set_current_limit(info,
227 dev_err(info->dev, "set input current limit failed\n");
234 mutex_unlock(&info->lock);
242 struct sc2731_charger_info *info = power_supply_get_drvdata(psy);
246 mutex_lock(&info->lock);
250 if (info->charging)
251 val->intval = sc2731_charger_get_status(info);
257 if (!info->charging) {
260 ret = sc2731_charger_get_current(info, &cur);
269 if (!info->charging) {
272 ret = sc2731_charger_get_current_limit(info, &cur);
285 mutex_unlock(&info->lock);
325 struct sc2731_charger_info *info =
329 mutex_lock(&info->lock);
331 if (info->limit > 0 && !info->charging) {
333 ret = sc2731_charger_set_current_limit(info, info->limit);
337 ret = sc2731_charger_set_current(info, info->limit);
341 ret = sc2731_charger_start_charge(info);
345 info->charging = true;
346 } else if (!info->limit && info->charging) {
348 info->charging = false;
349 sc2731_charger_stop_charge(info);
353 mutex_unlock(&info->lock);
359 struct sc2731_charger_info *info =
362 info->limit = limit;
364 schedule_work(&info->work);
369 static int sc2731_charger_hw_init(struct sc2731_charger_info *info)
376 ret = regmap_update_bits(info->regmap, SC2731_MODULE_EN1,
381 ret = power_supply_get_battery_info(info->psy_usb, &bat_info);
383 dev_warn(info->dev, "no battery information is supplied\n");
412 power_supply_put_battery_info(info->psy_usb, bat_info);
416 ret = regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG2,
422 ret = regmap_update_bits(info->regmap, info->base + SC2731_CHG_CFG0,
433 regmap_update_bits(info->regmap, SC2731_MODULE_EN1, SC2731_CHARGE_EN, 0);
437 static void sc2731_charger_detect_status(struct sc2731_charger_info *info)
446 if (info->usb_phy->chg_state != USB_CHARGER_PRESENT)
449 usb_phy_get_charger_current(info->usb_phy, &min, &max);
450 info->limit = min;
452 schedule_work(&info->work);
458 struct sc2731_charger_info *info;
462 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
463 if (!info)
466 mutex_init(&info->lock);
467 info->dev = &pdev->dev;
468 INIT_WORK(&info->work, sc2731_charger_work);
470 info->regmap = dev_get_regmap(pdev->dev.parent, NULL);
471 if (!info->regmap) {
476 ret = of_property_read_u32(np, "reg", &info->base);
482 charger_cfg.drv_data = info;
484 info->psy_usb = devm_power_supply_register(&pdev->dev,
487 if (IS_ERR(info->psy_usb)) {
489 return PTR_ERR(info->psy_usb);
492 ret = sc2731_charger_hw_init(info);
496 info->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "phys", 0);
497 if (IS_ERR(info->usb_phy)) {
499 return PTR_ERR(info->usb_phy);
502 info->usb_notify.notifier_call = sc2731_charger_usb_change;
503 ret = usb_register_notifier(info->usb_phy, &info->usb_notify);
509 sc2731_charger_detect_status(info);
516 struct sc2731_charger_info *info = platform_get_drvdata(pdev);
518 usb_unregister_notifier(info->usb_phy, &info->usb_notify);