Lines Matching defs:charger

3  * Battery charger driver for RT5033
44 static int rt5033_get_charger_state(struct rt5033_charger *charger)
46 struct regmap *regmap = charger->regmap;
73 if (charger->otg)
79 static int rt5033_get_charger_type(struct rt5033_charger *charger)
81 struct regmap *regmap = charger->regmap;
101 static int rt5033_get_charger_current_limit(struct rt5033_charger *charger)
103 struct regmap *regmap = charger->regmap;
117 static int rt5033_get_charger_const_voltage(struct rt5033_charger *charger)
119 struct regmap *regmap = charger->regmap;
133 static inline int rt5033_init_const_charge(struct rt5033_charger *charger)
135 struct rt5033_charger_data *chg = &charger->chg;
143 dev_err(charger->dev,
159 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL2,
163 dev_err(charger->dev, "Failed regmap update\n");
168 charger->cv_regval = reg_data;
173 dev_err(charger->dev,
197 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL4,
200 dev_err(charger->dev, "Failed regmap update\n");
207 static inline int rt5033_init_fast_charge(struct rt5033_charger *charger)
209 struct rt5033_charger_data *chg = &charger->chg;
215 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1,
218 dev_err(charger->dev, "Failed regmap update\n");
225 dev_err(charger->dev,
241 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL5,
245 dev_err(charger->dev, "Failed regmap update\n");
252 static inline int rt5033_init_pre_charge(struct rt5033_charger *charger)
254 struct rt5033_charger_data *chg = &charger->chg;
262 dev_err(charger->dev,
278 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL5,
281 dev_err(charger->dev, "Failed regmap update\n");
288 dev_err(charger->dev,
304 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL4,
308 dev_err(charger->dev, "Failed regmap update\n");
315 static int rt5033_charger_reg_init(struct rt5033_charger *charger)
320 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1,
323 dev_err(charger->dev, "Failed to enable charging termination.\n");
331 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL4,
334 dev_err(charger->dev, "Failed to disable MIVR.\n");
338 ret = rt5033_init_pre_charge(charger);
342 ret = rt5033_init_fast_charge(charger);
346 ret = rt5033_init_const_charge(charger);
353 static int rt5033_charger_set_otg(struct rt5033_charger *charger)
357 mutex_lock(&charger->lock);
360 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL2,
364 dev_err(charger->dev, "Failed set OTG boost v_out\n");
370 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1,
373 dev_err(charger->dev, "Failed to update OTG mode.\n");
379 if (charger->online)
380 charger->online = false;
382 charger->otg = true;
385 mutex_unlock(&charger->lock);
390 static int rt5033_charger_unset_otg(struct rt5033_charger *charger)
396 data = charger->cv_regval;
397 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL2,
401 dev_err(charger->dev, "Failed to restore constant voltage\n");
406 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1,
409 dev_err(charger->dev, "Failed to update charger mode.\n");
413 charger->otg = false;
418 static int rt5033_charger_set_charging(struct rt5033_charger *charger)
422 mutex_lock(&charger->lock);
425 if (charger->otg) {
426 ret = rt5033_charger_unset_otg(charger);
428 mutex_unlock(&charger->lock);
433 charger->online = true;
435 mutex_unlock(&charger->lock);
440 static int rt5033_charger_set_mivr(struct rt5033_charger *charger)
444 mutex_lock(&charger->lock);
453 ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL4,
456 dev_err(charger->dev, "Failed to set MIVR level.\n");
457 mutex_unlock(&charger->lock);
461 charger->mivr_enabled = true;
463 mutex_unlock(&charger->lock);
466 rt5033_charger_set_charging(charger);
471 static int rt5033_charger_set_disconnect(struct rt5033_charger *charger)
475 mutex_lock(&charger->lock);
478 if (charger->mivr_enabled) {
479 ret = regmap_update_bits(charger->regmap,
484 dev_err(charger->dev, "Failed to disable MIVR.\n");
489 charger->mivr_enabled = false;
492 if (charger->otg) {
493 ret = rt5033_charger_unset_otg(charger);
500 if (charger->online)
501 charger->online = false;
504 mutex_unlock(&charger->lock);
523 struct rt5033_charger *charger = power_supply_get_drvdata(psy);
527 val->intval = rt5033_get_charger_state(charger);
530 val->intval = rt5033_get_charger_type(charger);
533 val->intval = rt5033_get_charger_current_limit(charger);
536 val->intval = rt5033_get_charger_const_voltage(charger);
545 val->intval = charger->online;
554 static int rt5033_charger_dt_init(struct rt5033_charger *charger)
556 struct rt5033_charger_data *chg = &charger->chg;
560 ret = power_supply_get_battery_info(charger->psy, &info);
562 return dev_err_probe(charger->dev, -EINVAL,
577 struct rt5033_charger *charger =
579 struct extcon_dev *edev = charger->edev;
600 ret = rt5033_charger_set_mivr(charger);
602 dev_err(charger->dev, "failed to set USB mode\n");
605 dev_info(charger->dev, "USB mode. connector type: %d\n",
615 ret = rt5033_charger_set_charging(charger);
617 dev_err(charger->dev, "failed to set charging\n");
620 dev_info(charger->dev, "charging. connector type: %d\n",
624 ret = rt5033_charger_set_otg(charger);
626 dev_err(charger->dev, "failed to set OTG\n");
629 dev_info(charger->dev, "OTG enabled\n");
632 ret = rt5033_charger_set_disconnect(charger);
634 dev_err(charger->dev, "failed to set disconnect\n");
637 dev_info(charger->dev, "disconnected\n");
641 power_supply_changed(charger->psy);
647 struct rt5033_charger *charger =
650 schedule_work(&charger->extcon_work);
656 .name = "rt5033-charger",
665 struct rt5033_charger *charger;
670 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL);
671 if (!charger)
674 platform_set_drvdata(pdev, charger);
675 charger->dev = &pdev->dev;
676 charger->regmap = dev_get_regmap(pdev->dev.parent, NULL);
677 mutex_init(&charger->lock);
680 psy_cfg.drv_data = charger;
682 charger->psy = devm_power_supply_register(charger->dev,
685 if (IS_ERR(charger->psy))
686 return dev_err_probe(charger->dev, PTR_ERR(charger->psy),
689 ret = rt5033_charger_dt_init(charger);
693 ret = rt5033_charger_reg_init(charger);
698 * Extcon support is not vital for the charger to work. If no extcon
703 charger->edev = extcon_find_edev_by_node(np_edev);
704 if (IS_ERR(charger->edev)) {
705 dev_warn(charger->dev, "no extcon device found in device-tree\n");
709 ret = devm_work_autocancel(charger->dev, &charger->extcon_work,
712 dev_err(charger->dev, "failed to initialize extcon work\n");
716 charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier;
717 ret = devm_extcon_register_notifier_all(charger->dev, charger->edev,
718 &charger->extcon_nb);
720 dev_err(charger->dev, "failed to register extcon notifier\n");
728 { "rt5033-charger", },
734 { .compatible = "richtek,rt5033-charger", },
741 .name = "rt5033-charger",
749 MODULE_DESCRIPTION("Richtek RT5033 charger driver");