Lines Matching refs:chg
251 static int smbb_charger_attr_write(struct smbb_charger *chg, in smbb_charger_attr_write() argument
262 dev_err(chg->dev, "value out of range for %s [%u:%u]\n", in smbb_charger_attr_write()
268 rc = regmap_read(chg->regmap, in smbb_charger_attr_write()
269 chg->addr + prop->safe_reg, &wval); in smbb_charger_attr_write()
271 dev_err(chg->dev, in smbb_charger_attr_write()
280 dev_warn(chg->dev, in smbb_charger_attr_write()
289 rc = regmap_write(chg->regmap, chg->addr + prop->reg, wval); in smbb_charger_attr_write()
291 dev_err(chg->dev, "unable to update %s", prop->name); in smbb_charger_attr_write()
296 dev_warn(chg->dev, in smbb_charger_attr_write()
301 dev_dbg(chg->dev, "%s <= %d\n", prop->name, out); in smbb_charger_attr_write()
303 chg->attr[which] = out; in smbb_charger_attr_write()
308 static int smbb_charger_attr_read(struct smbb_charger *chg, in smbb_charger_attr_read() argument
317 rc = regmap_read(chg->regmap, chg->addr + prop->reg, &val); in smbb_charger_attr_read()
319 dev_err(chg->dev, "failed to read %s\n", prop->name); in smbb_charger_attr_read()
323 dev_dbg(chg->dev, "%s => %d\n", prop->name, val); in smbb_charger_attr_read()
325 chg->attr[which] = val; in smbb_charger_attr_read()
330 static int smbb_charger_attr_parse(struct smbb_charger *chg, in smbb_charger_attr_parse() argument
339 rc = of_property_read_u32(chg->dev->of_node, prop->name, &val); in smbb_charger_attr_parse()
341 rc = smbb_charger_attr_write(chg, which, val); in smbb_charger_attr_parse()
345 return smbb_charger_attr_read(chg, which); in smbb_charger_attr_parse()
348 static void smbb_set_line_flag(struct smbb_charger *chg, int irq, int flag) in smbb_set_line_flag() argument
355 dev_err(chg->dev, "failed to read irq line\n"); in smbb_set_line_flag()
359 mutex_lock(&chg->statlock); in smbb_set_line_flag()
361 chg->status |= flag; in smbb_set_line_flag()
363 chg->status &= ~flag; in smbb_set_line_flag()
364 mutex_unlock(&chg->statlock); in smbb_set_line_flag()
366 dev_dbg(chg->dev, "status = %03lx\n", chg->status); in smbb_set_line_flag()
371 struct smbb_charger *chg = _data; in smbb_usb_valid_handler() local
373 smbb_set_line_flag(chg, irq, STATUS_USBIN_VALID); in smbb_usb_valid_handler()
374 power_supply_changed(chg->usb_psy); in smbb_usb_valid_handler()
381 struct smbb_charger *chg = _data; in smbb_dc_valid_handler() local
383 smbb_set_line_flag(chg, irq, STATUS_DCIN_VALID); in smbb_dc_valid_handler()
384 if (!chg->dc_disabled) in smbb_dc_valid_handler()
385 power_supply_changed(chg->dc_psy); in smbb_dc_valid_handler()
392 struct smbb_charger *chg = _data; in smbb_bat_temp_handler() local
396 rc = regmap_read(chg->regmap, chg->addr + SMBB_BAT_TEMP_STATUS, &val); in smbb_bat_temp_handler()
400 mutex_lock(&chg->statlock); in smbb_bat_temp_handler()
402 chg->status |= STATUS_BAT_OK; in smbb_bat_temp_handler()
404 chg->status &= ~STATUS_BAT_OK; in smbb_bat_temp_handler()
406 chg->status |= STATUS_BAT_HOT; in smbb_bat_temp_handler()
408 mutex_unlock(&chg->statlock); in smbb_bat_temp_handler()
410 power_supply_changed(chg->bat_psy); in smbb_bat_temp_handler()
416 struct smbb_charger *chg = _data; in smbb_bat_present_handler() local
418 smbb_set_line_flag(chg, irq, STATUS_BAT_PRESENT); in smbb_bat_present_handler()
419 power_supply_changed(chg->bat_psy); in smbb_bat_present_handler()
426 struct smbb_charger *chg = _data; in smbb_chg_done_handler() local
428 smbb_set_line_flag(chg, irq, STATUS_CHG_DONE); in smbb_chg_done_handler()
429 power_supply_changed(chg->bat_psy); in smbb_chg_done_handler()
436 struct smbb_charger *chg = _data; in smbb_chg_gone_handler() local
438 smbb_set_line_flag(chg, irq, STATUS_CHG_GONE); in smbb_chg_gone_handler()
439 power_supply_changed(chg->bat_psy); in smbb_chg_gone_handler()
440 power_supply_changed(chg->usb_psy); in smbb_chg_gone_handler()
441 if (!chg->dc_disabled) in smbb_chg_gone_handler()
442 power_supply_changed(chg->dc_psy); in smbb_chg_gone_handler()
449 struct smbb_charger *chg = _data; in smbb_chg_fast_handler() local
451 smbb_set_line_flag(chg, irq, STATUS_CHG_FAST); in smbb_chg_fast_handler()
452 power_supply_changed(chg->bat_psy); in smbb_chg_fast_handler()
459 struct smbb_charger *chg = _data; in smbb_chg_trkl_handler() local
461 smbb_set_line_flag(chg, irq, STATUS_CHG_TRKL); in smbb_chg_trkl_handler()
462 power_supply_changed(chg->bat_psy); in smbb_chg_trkl_handler()
485 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_usbin_get_property() local
490 mutex_lock(&chg->statlock); in smbb_usbin_get_property()
491 val->intval = !(chg->status & STATUS_CHG_GONE) && in smbb_usbin_get_property()
492 (chg->status & STATUS_USBIN_VALID); in smbb_usbin_get_property()
493 mutex_unlock(&chg->statlock); in smbb_usbin_get_property()
496 val->intval = chg->attr[ATTR_USBIN_IMAX]; in smbb_usbin_get_property()
513 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_usbin_set_property() local
518 rc = smbb_charger_attr_write(chg, ATTR_USBIN_IMAX, in smbb_usbin_set_property()
533 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_dcin_get_property() local
538 mutex_lock(&chg->statlock); in smbb_dcin_get_property()
539 val->intval = !(chg->status & STATUS_CHG_GONE) && in smbb_dcin_get_property()
540 (chg->status & STATUS_DCIN_VALID); in smbb_dcin_get_property()
541 mutex_unlock(&chg->statlock); in smbb_dcin_get_property()
544 val->intval = chg->attr[ATTR_DCIN_IMAX]; in smbb_dcin_get_property()
561 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_dcin_set_property() local
566 rc = smbb_charger_attr_write(chg, ATTR_DCIN_IMAX, in smbb_dcin_set_property()
587 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_battery_get_property() local
591 mutex_lock(&chg->statlock); in smbb_battery_get_property()
592 status = chg->status; in smbb_battery_get_property()
593 mutex_unlock(&chg->statlock); in smbb_battery_get_property()
630 val->intval = chg->attr[ATTR_BAT_IMAX]; in smbb_battery_get_property()
633 val->intval = chg->attr[ATTR_BAT_VMAX]; in smbb_battery_get_property()
657 struct smbb_charger *chg = power_supply_get_drvdata(psy); in smbb_battery_set_property() local
662 rc = smbb_charger_attr_write(chg, ATTR_BAT_IMAX, val->intval); in smbb_battery_set_property()
665 rc = smbb_charger_attr_write(chg, ATTR_BAT_VMAX, val->intval); in smbb_battery_set_property()
786 struct smbb_charger *chg; in smbb_charger_probe() local
789 chg = devm_kzalloc(&pdev->dev, sizeof(*chg), GFP_KERNEL); in smbb_charger_probe()
790 if (!chg) in smbb_charger_probe()
793 chg->dev = &pdev->dev; in smbb_charger_probe()
794 mutex_init(&chg->statlock); in smbb_charger_probe()
796 chg->regmap = dev_get_regmap(pdev->dev.parent, NULL); in smbb_charger_probe()
797 if (!chg->regmap) { in smbb_charger_probe()
802 rc = of_property_read_u32(pdev->dev.of_node, "reg", &chg->addr); in smbb_charger_probe()
808 rc = regmap_read(chg->regmap, chg->addr + SMBB_MISC_REV2, &chg->revision); in smbb_charger_probe()
814 chg->revision += 1; in smbb_charger_probe()
815 if (chg->revision != 2 && chg->revision != 3) { in smbb_charger_probe()
819 dev_info(&pdev->dev, "Initializing SMBB rev %u", chg->revision); in smbb_charger_probe()
821 chg->dc_disabled = of_property_read_bool(pdev->dev.of_node, "qcom,disable-dc"); in smbb_charger_probe()
824 rc = smbb_charger_attr_parse(chg, i); in smbb_charger_probe()
831 bat_cfg.drv_data = chg; in smbb_charger_probe()
833 chg->bat_psy = devm_power_supply_register(&pdev->dev, in smbb_charger_probe()
836 if (IS_ERR(chg->bat_psy)) { in smbb_charger_probe()
838 return PTR_ERR(chg->bat_psy); in smbb_charger_probe()
841 usb_cfg.drv_data = chg; in smbb_charger_probe()
844 chg->usb_psy = devm_power_supply_register(&pdev->dev, in smbb_charger_probe()
847 if (IS_ERR(chg->usb_psy)) { in smbb_charger_probe()
849 return PTR_ERR(chg->usb_psy); in smbb_charger_probe()
852 if (!chg->dc_disabled) { in smbb_charger_probe()
853 dc_cfg.drv_data = chg; in smbb_charger_probe()
856 chg->dc_psy = devm_power_supply_register(&pdev->dev, in smbb_charger_probe()
859 if (IS_ERR(chg->dc_psy)) { in smbb_charger_probe()
861 return PTR_ERR(chg->dc_psy); in smbb_charger_probe()
875 smbb_charger_irqs[i].handler(irq, chg); in smbb_charger_probe()
879 smbb_charger_irqs[i].name, chg); in smbb_charger_probe()
887 chg->jeita_ext_temp = of_property_read_bool(pdev->dev.of_node, in smbb_charger_probe()
891 rc = regmap_update_bits(chg->regmap, chg->addr + SMBB_BAT_BTC_CTRL, in smbb_charger_probe()
893 chg->jeita_ext_temp ? in smbb_charger_probe()
899 chg->jeita_ext_temp ? "JEITA extended" : "normal"); in smbb_charger_probe()
906 if (r->rev_mask & BIT(chg->revision)) in smbb_charger_probe()
909 rc = regmap_update_bits(chg->regmap, chg->addr + r->offset, in smbb_charger_probe()
918 platform_set_drvdata(pdev, chg); in smbb_charger_probe()
925 struct smbb_charger *chg; in smbb_charger_remove() local
927 chg = platform_get_drvdata(pdev); in smbb_charger_remove()
929 regmap_update_bits(chg->regmap, chg->addr + SMBB_CHG_CTRL, CTRL_EN, 0); in smbb_charger_remove()