Lines Matching defs:chg

256 static int smbb_charger_attr_write(struct smbb_charger *chg,
267 dev_err(chg->dev, "value out of range for %s [%u:%u]\n",
273 rc = regmap_read(chg->regmap,
274 chg->addr + prop->safe_reg, &wval);
276 dev_err(chg->dev,
285 dev_warn(chg->dev,
294 rc = regmap_write(chg->regmap, chg->addr + prop->reg, wval);
296 dev_err(chg->dev, "unable to update %s", prop->name);
301 dev_warn(chg->dev,
306 dev_dbg(chg->dev, "%s <= %d\n", prop->name, out);
308 chg->attr[which] = out;
313 static int smbb_charger_attr_read(struct smbb_charger *chg,
322 rc = regmap_read(chg->regmap, chg->addr + prop->reg, &val);
324 dev_err(chg->dev, "failed to read %s\n", prop->name);
328 dev_dbg(chg->dev, "%s => %d\n", prop->name, val);
330 chg->attr[which] = val;
335 static int smbb_charger_attr_parse(struct smbb_charger *chg,
344 rc = of_property_read_u32(chg->dev->of_node, prop->name, &val);
346 rc = smbb_charger_attr_write(chg, which, val);
350 return smbb_charger_attr_read(chg, which);
353 static void smbb_set_line_flag(struct smbb_charger *chg, int irq, int flag)
360 dev_err(chg->dev, "failed to read irq line\n");
364 mutex_lock(&chg->statlock);
366 chg->status |= flag;
368 chg->status &= ~flag;
369 mutex_unlock(&chg->statlock);
371 dev_dbg(chg->dev, "status = %03lx\n", chg->status);
376 struct smbb_charger *chg = _data;
378 smbb_set_line_flag(chg, irq, STATUS_USBIN_VALID);
379 extcon_set_state_sync(chg->edev, EXTCON_USB,
380 chg->status & STATUS_USBIN_VALID);
381 power_supply_changed(chg->usb_psy);
388 struct smbb_charger *chg = _data;
390 smbb_set_line_flag(chg, irq, STATUS_DCIN_VALID);
391 if (!chg->dc_disabled)
392 power_supply_changed(chg->dc_psy);
399 struct smbb_charger *chg = _data;
403 rc = regmap_read(chg->regmap, chg->addr + SMBB_BAT_TEMP_STATUS, &val);
407 mutex_lock(&chg->statlock);
409 chg->status |= STATUS_BAT_OK;
411 chg->status &= ~STATUS_BAT_OK;
413 chg->status |= STATUS_BAT_HOT;
415 mutex_unlock(&chg->statlock);
417 power_supply_changed(chg->bat_psy);
423 struct smbb_charger *chg = _data;
425 smbb_set_line_flag(chg, irq, STATUS_BAT_PRESENT);
426 power_supply_changed(chg->bat_psy);
433 struct smbb_charger *chg = _data;
435 smbb_set_line_flag(chg, irq, STATUS_CHG_DONE);
436 power_supply_changed(chg->bat_psy);
443 struct smbb_charger *chg = _data;
445 smbb_set_line_flag(chg, irq, STATUS_CHG_GONE);
446 power_supply_changed(chg->bat_psy);
447 power_supply_changed(chg->usb_psy);
448 if (!chg->dc_disabled)
449 power_supply_changed(chg->dc_psy);
456 struct smbb_charger *chg = _data;
458 smbb_set_line_flag(chg, irq, STATUS_CHG_FAST);
459 power_supply_changed(chg->bat_psy);
466 struct smbb_charger *chg = _data;
468 smbb_set_line_flag(chg, irq, STATUS_CHG_TRKL);
469 power_supply_changed(chg->bat_psy);
478 { "chg-done", smbb_chg_done_handler },
479 { "chg-fast", smbb_chg_fast_handler },
480 { "chg-trkl", smbb_chg_trkl_handler },
483 { "chg-gone", smbb_chg_gone_handler },
492 struct smbb_charger *chg = power_supply_get_drvdata(psy);
497 mutex_lock(&chg->statlock);
498 val->intval = !(chg->status & STATUS_CHG_GONE) &&
499 (chg->status & STATUS_USBIN_VALID);
500 mutex_unlock(&chg->statlock);
503 val->intval = chg->attr[ATTR_USBIN_IMAX];
520 struct smbb_charger *chg = power_supply_get_drvdata(psy);
525 rc = smbb_charger_attr_write(chg, ATTR_USBIN_IMAX,
540 struct smbb_charger *chg = power_supply_get_drvdata(psy);
545 mutex_lock(&chg->statlock);
546 val->intval = !(chg->status & STATUS_CHG_GONE) &&
547 (chg->status & STATUS_DCIN_VALID);
548 mutex_unlock(&chg->statlock);
551 val->intval = chg->attr[ATTR_DCIN_IMAX];
568 struct smbb_charger *chg = power_supply_get_drvdata(psy);
573 rc = smbb_charger_attr_write(chg, ATTR_DCIN_IMAX,
594 struct smbb_charger *chg = power_supply_get_drvdata(psy);
598 mutex_lock(&chg->statlock);
599 status = chg->status;
600 mutex_unlock(&chg->statlock);
637 val->intval = chg->attr[ATTR_BAT_IMAX];
640 val->intval = chg->attr[ATTR_BAT_VMAX];
664 struct smbb_charger *chg = power_supply_get_drvdata(psy);
669 rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval);
672 rc = smbb_charger_attr_write(chg, ATTR_BAT_VMAX, val->intval);
790 struct smbb_charger *chg = rdev_get_drvdata(rdev);
793 rc = regmap_update_bits(chg->regmap, chg->addr + SMBB_USB_OTG_CTL,
796 dev_err(chg->dev, "failed to update OTG_CTL\n");
802 struct smbb_charger *chg = rdev_get_drvdata(rdev);
805 rc = regmap_update_bits(chg->regmap, chg->addr + SMBB_USB_OTG_CTL,
808 dev_err(chg->dev, "failed to update OTG_CTL\n");
814 struct smbb_charger *chg = rdev_get_drvdata(rdev);
818 rc = regmap_read(chg->regmap, chg->addr + SMBB_USB_OTG_CTL, &value);
820 dev_err(chg->dev, "failed to read OTG_CTL\n");
836 struct smbb_charger *chg;
840 chg = devm_kzalloc(&pdev->dev, sizeof(*chg), GFP_KERNEL);
841 if (!chg)
844 chg->dev = &pdev->dev;
845 mutex_init(&chg->statlock);
847 chg->regmap = dev_get_regmap(pdev->dev.parent, NULL);
848 if (!chg->regmap) {
853 rc = of_property_read_u32(pdev->dev.of_node, "reg", &chg->addr);
859 rc = regmap_read(chg->regmap, chg->addr + SMBB_MISC_REV2, &chg->revision);
865 chg->revision += 1;
866 if (chg->revision != 1 && chg->revision != 2 && chg->revision != 3) {
867 dev_err(&pdev->dev, "v%d hardware not supported\n", chg->revision);
870 dev_info(&pdev->dev, "Initializing SMBB rev %u", chg->revision);
872 chg->dc_disabled = of_property_read_bool(pdev->dev.of_node, "qcom,disable-dc");
875 rc = smbb_charger_attr_parse(chg, i);
882 bat_cfg.drv_data = chg;
884 chg->bat_psy = devm_power_supply_register(&pdev->dev,
887 if (IS_ERR(chg->bat_psy)) {
889 return PTR_ERR(chg->bat_psy);
892 usb_cfg.drv_data = chg;
895 chg->usb_psy = devm_power_supply_register(&pdev->dev,
898 if (IS_ERR(chg->usb_psy)) {
900 return PTR_ERR(chg->usb_psy);
903 chg->edev = devm_extcon_dev_allocate(&pdev->dev, smbb_usb_extcon_cable);
904 if (IS_ERR(chg->edev)) {
909 rc = devm_extcon_dev_register(&pdev->dev, chg->edev);
915 if (!chg->dc_disabled) {
916 dc_cfg.drv_data = chg;
919 chg->dc_psy = devm_power_supply_register(&pdev->dev,
922 if (IS_ERR(chg->dc_psy)) {
924 return PTR_ERR(chg->dc_psy);
935 smbb_charger_irqs[i].handler(irq, chg);
939 smbb_charger_irqs[i].name, chg);
951 chg->otg_rdesc.id = -1;
952 chg->otg_rdesc.name = "otg-vbus";
953 chg->otg_rdesc.ops = &smbb_chg_otg_ops;
954 chg->otg_rdesc.owner = THIS_MODULE;
955 chg->otg_rdesc.type = REGULATOR_VOLTAGE;
956 chg->otg_rdesc.supply_name = "usb-otg-in";
957 chg->otg_rdesc.of_match = "otg-vbus";
960 config.driver_data = chg;
962 chg->otg_reg = devm_regulator_register(&pdev->dev, &chg->otg_rdesc,
964 if (IS_ERR(chg->otg_reg))
965 return PTR_ERR(chg->otg_reg);
967 chg->jeita_ext_temp = of_property_read_bool(pdev->dev.of_node,
971 rc = regmap_update_bits(chg->regmap, chg->addr + SMBB_BAT_BTC_CTRL,
973 chg->jeita_ext_temp ?
979 chg->jeita_ext_temp ? "JEITA extended" : "normal");
986 if (r->rev_mask & BIT(chg->revision))
989 rc = regmap_update_bits(chg->regmap, chg->addr + r->offset,
998 platform_set_drvdata(pdev, chg);
1005 struct smbb_charger *chg;
1007 chg = platform_get_drvdata(pdev);
1009 regmap_update_bits(chg->regmap, chg->addr + SMBB_CHG_CTRL, CTRL_EN, 0);