Lines Matching refs:info
280 static int rt9455_get_field_val(struct rt9455_info *info, in rt9455_get_field_val() argument
287 ret = regmap_field_read(info->regmap_fields[field], &v); in rt9455_get_field_val()
297 static int rt9455_set_field_val(struct rt9455_info *info, in rt9455_set_field_val() argument
303 return regmap_field_write(info->regmap_fields[field], idx); in rt9455_set_field_val()
306 static int rt9455_register_reset(struct rt9455_info *info) in rt9455_register_reset() argument
308 struct device *dev = &info->client->dev; in rt9455_register_reset()
312 ret = regmap_field_write(info->regmap_fields[F_RST], 0x01); in rt9455_register_reset()
323 ret = regmap_field_read(info->regmap_fields[F_RST], &v); in rt9455_register_reset()
361 static int rt9455_charger_get_status(struct rt9455_info *info, in rt9455_charger_get_status() argument
367 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], in rt9455_charger_get_status()
370 dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n"); in rt9455_charger_get_status()
383 ret = regmap_field_read(info->regmap_fields[F_STAT], &v); in rt9455_charger_get_status()
385 dev_err(&info->client->dev, "Failed to read STAT bits\n"); in rt9455_charger_get_status()
413 static int rt9455_charger_get_health(struct rt9455_info *info, in rt9455_charger_get_health() argument
416 struct device *dev = &info->client->dev; in rt9455_charger_get_health()
422 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &v); in rt9455_charger_get_health()
441 ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &v); in rt9455_charger_get_health()
456 ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &v); in rt9455_charger_get_health()
479 ret = regmap_field_read(info->regmap_fields[F_STAT], &v); in rt9455_charger_get_health()
493 static int rt9455_charger_get_battery_presence(struct rt9455_info *info, in rt9455_charger_get_battery_presence() argument
499 ret = regmap_field_read(info->regmap_fields[F_BATAB], &v); in rt9455_charger_get_battery_presence()
501 dev_err(&info->client->dev, "Failed to read BATAB bit\n"); in rt9455_charger_get_battery_presence()
514 static int rt9455_charger_get_online(struct rt9455_info *info, in rt9455_charger_get_online() argument
520 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &v); in rt9455_charger_get_online()
522 dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n"); in rt9455_charger_get_online()
531 static int rt9455_charger_get_current(struct rt9455_info *info, in rt9455_charger_get_current() argument
537 ret = rt9455_get_field_val(info, F_ICHRG, in rt9455_charger_get_current()
542 dev_err(&info->client->dev, "Failed to read ICHRG value\n"); in rt9455_charger_get_current()
551 static int rt9455_charger_get_current_max(struct rt9455_info *info, in rt9455_charger_get_current_max() argument
561 static int rt9455_charger_get_voltage(struct rt9455_info *info, in rt9455_charger_get_voltage() argument
567 ret = rt9455_get_field_val(info, F_VOREG, in rt9455_charger_get_voltage()
572 dev_err(&info->client->dev, "Failed to read VOREG value\n"); in rt9455_charger_get_voltage()
581 static int rt9455_charger_get_voltage_max(struct rt9455_info *info, in rt9455_charger_get_voltage_max() argument
591 static int rt9455_charger_get_term_current(struct rt9455_info *info, in rt9455_charger_get_term_current() argument
594 struct device *dev = &info->client->dev; in rt9455_charger_get_term_current()
597 ret = rt9455_get_field_val(info, F_ICHRG, in rt9455_charger_get_term_current()
606 ret = rt9455_get_field_val(info, F_IEOC_PERCENTAGE, in rt9455_charger_get_term_current()
624 struct rt9455_info *info = power_supply_get_drvdata(psy); in rt9455_charger_get_property() local
628 return rt9455_charger_get_status(info, val); in rt9455_charger_get_property()
630 return rt9455_charger_get_health(info, val); in rt9455_charger_get_property()
632 return rt9455_charger_get_battery_presence(info, val); in rt9455_charger_get_property()
634 return rt9455_charger_get_online(info, val); in rt9455_charger_get_property()
636 return rt9455_charger_get_current(info, val); in rt9455_charger_get_property()
638 return rt9455_charger_get_current_max(info, val); in rt9455_charger_get_property()
640 return rt9455_charger_get_voltage(info, val); in rt9455_charger_get_property()
642 return rt9455_charger_get_voltage_max(info, val); in rt9455_charger_get_property()
647 return rt9455_charger_get_term_current(info, val); in rt9455_charger_get_property()
659 static int rt9455_hw_init(struct rt9455_info *info, u32 ichrg, in rt9455_hw_init() argument
663 struct device *dev = &info->client->dev; in rt9455_hw_init()
666 ret = rt9455_register_reset(info); in rt9455_hw_init()
673 ret = regmap_field_write(info->regmap_fields[F_TE], 1); in rt9455_hw_init()
680 ret = regmap_field_write(info->regmap_fields[F_TE_SHDN_EN], 1); in rt9455_hw_init()
690 ret = regmap_field_write(info->regmap_fields[F_BATD_EN], 1); in rt9455_hw_init()
707 ret = regmap_field_write(info->regmap_fields[F_TMR_EN], 0x00); in rt9455_hw_init()
714 ret = rt9455_set_field_val(info, F_ICHRG, in rt9455_hw_init()
723 ret = rt9455_set_field_val(info, F_IEOC_PERCENTAGE, in rt9455_hw_init()
733 ret = rt9455_set_field_val(info, F_VOREG, in rt9455_hw_init()
736 info->voreg); in rt9455_hw_init()
744 ret = rt9455_set_field_val(info, F_VMREG, in rt9455_hw_init()
760 ret = rt9455_set_field_val(info, F_MIVR, in rt9455_hw_init()
775 ret = rt9455_set_field_val(info, F_IAICR, in rt9455_hw_init()
787 ret = regmap_field_write(info->regmap_fields[F_IAICR_INT], 0x01); in rt9455_hw_init()
798 ret = regmap_field_write(info->regmap_fields[F_CHMIVRIM], 0x01); in rt9455_hw_init()
816 static int rt9455_set_boost_voltage_before_boost_mode(struct rt9455_info *info) in rt9455_set_boost_voltage_before_boost_mode() argument
818 struct device *dev = &info->client->dev; in rt9455_set_boost_voltage_before_boost_mode()
821 ret = rt9455_set_field_val(info, F_VOREG, in rt9455_set_boost_voltage_before_boost_mode()
824 info->boost_voltage); in rt9455_set_boost_voltage_before_boost_mode()
842 static int rt9455_set_voreg_before_charge_mode(struct rt9455_info *info) in rt9455_set_voreg_before_charge_mode() argument
844 struct device *dev = &info->client->dev; in rt9455_set_voreg_before_charge_mode()
847 ret = rt9455_set_field_val(info, F_VOREG, in rt9455_set_voreg_before_charge_mode()
850 info->voreg); in rt9455_set_voreg_before_charge_mode()
859 static int rt9455_irq_handler_check_irq1_register(struct rt9455_info *info, in rt9455_irq_handler_check_irq1_register() argument
864 struct device *dev = &info->client->dev; in rt9455_irq_handler_check_irq1_register()
869 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1); in rt9455_irq_handler_check_irq1_register()
875 ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1); in rt9455_irq_handler_check_irq1_register()
897 ret = regmap_field_write(info->regmap_fields[F_BATABM], in rt9455_irq_handler_check_irq1_register()
905 ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2); in rt9455_irq_handler_check_irq1_register()
913 info->regmap_fields[F_CHTERMIM], 0x00); in rt9455_irq_handler_check_irq1_register()
922 info->regmap_fields[F_CHRCHGIM], 0x00); in rt9455_irq_handler_check_irq1_register()
933 cancel_delayed_work_sync(&info->max_charging_time_work); in rt9455_irq_handler_check_irq1_register()
941 &info->batt_presence_work, in rt9455_irq_handler_check_irq1_register()
953 static int rt9455_irq_handler_check_irq2_register(struct rt9455_info *info, in rt9455_irq_handler_check_irq2_register() argument
958 struct device *dev = &info->client->dev; in rt9455_irq_handler_check_irq2_register()
962 ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &irq2); in rt9455_irq_handler_check_irq2_register()
968 ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2); in rt9455_irq_handler_check_irq2_register()
988 &info->pwr_rdy_work, in rt9455_irq_handler_check_irq2_register()
1000 info->regmap_fields[F_CHTERMIM], 0x01); in rt9455_irq_handler_check_irq2_register()
1011 cancel_delayed_work_sync(&info->max_charging_time_work); in rt9455_irq_handler_check_irq2_register()
1017 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], in rt9455_irq_handler_check_irq2_register()
1025 info->regmap_fields[F_CHTERMIM], 0x00); in rt9455_irq_handler_check_irq2_register()
1041 &info->max_charging_time_work, in rt9455_irq_handler_check_irq2_register()
1066 static int rt9455_irq_handler_check_irq3_register(struct rt9455_info *info, in rt9455_irq_handler_check_irq3_register() argument
1070 struct device *dev = &info->client->dev; in rt9455_irq_handler_check_irq3_register()
1074 ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &irq3); in rt9455_irq_handler_check_irq3_register()
1080 ret = regmap_read(info->regmap, RT9455_REG_MASK3, &mask3); in rt9455_irq_handler_check_irq3_register()
1105 ret = rt9455_set_voreg_before_charge_mode(info); in rt9455_irq_handler_check_irq3_register()
1110 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], in rt9455_irq_handler_check_irq3_register()
1124 struct rt9455_info *info = data; in rt9455_irq_handler_thread() local
1131 if (!info) in rt9455_irq_handler_thread()
1134 dev = &info->client->dev; in rt9455_irq_handler_thread()
1136 if (irq != info->client->irq) { in rt9455_irq_handler_thread()
1141 ret = regmap_field_read(info->regmap_fields[F_STAT], &status); in rt9455_irq_handler_thread()
1159 ret = rt9455_irq_handler_check_irq1_register(info, &is_battery_absent, in rt9455_irq_handler_thread()
1166 ret = rt9455_irq_handler_check_irq2_register(info, is_battery_absent, in rt9455_irq_handler_thread()
1173 ret = rt9455_irq_handler_check_irq3_register(info, &alert_userspace); in rt9455_irq_handler_thread()
1185 if (info->charger) in rt9455_irq_handler_thread()
1186 power_supply_changed(info->charger); in rt9455_irq_handler_thread()
1192 static int rt9455_discover_charger(struct rt9455_info *info, u32 *ichrg, in rt9455_discover_charger() argument
1196 struct device *dev = &info->client->dev; in rt9455_discover_charger()
1223 &info->voreg); in rt9455_discover_charger()
1230 &info->boost_voltage); in rt9455_discover_charger()
1249 static int rt9455_usb_event_none(struct rt9455_info *info, in rt9455_usb_event_none() argument
1252 struct device *dev = &info->client->dev; in rt9455_usb_event_none()
1256 ret = rt9455_set_voreg_before_charge_mode(info); in rt9455_usb_event_none()
1268 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], in rt9455_usb_event_none()
1278 ret = regmap_field_write(info->regmap_fields[F_IAICR], in rt9455_usb_event_none()
1289 static int rt9455_usb_event_vbus(struct rt9455_info *info, in rt9455_usb_event_vbus() argument
1292 struct device *dev = &info->client->dev; in rt9455_usb_event_vbus()
1296 ret = rt9455_set_voreg_before_charge_mode(info); in rt9455_usb_event_vbus()
1308 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], in rt9455_usb_event_vbus()
1318 ret = regmap_field_write(info->regmap_fields[F_IAICR], in rt9455_usb_event_vbus()
1329 static int rt9455_usb_event_id(struct rt9455_info *info, in rt9455_usb_event_id() argument
1332 struct device *dev = &info->client->dev; in rt9455_usb_event_id()
1336 ret = rt9455_set_boost_voltage_before_boost_mode(info); in rt9455_usb_event_id()
1348 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], in rt9455_usb_event_id()
1358 ret = regmap_field_write(info->regmap_fields[F_IAICR], in rt9455_usb_event_id()
1369 static int rt9455_usb_event_charger(struct rt9455_info *info, in rt9455_usb_event_charger() argument
1372 struct device *dev = &info->client->dev; in rt9455_usb_event_charger()
1376 ret = rt9455_set_voreg_before_charge_mode(info); in rt9455_usb_event_charger()
1388 ret = regmap_field_write(info->regmap_fields[F_OPA_MODE], in rt9455_usb_event_charger()
1398 ret = regmap_field_write(info->regmap_fields[F_IAICR], in rt9455_usb_event_charger()
1412 struct rt9455_info *info = container_of(nb, struct rt9455_info, nb); in rt9455_usb_event() local
1413 struct device *dev = &info->client->dev; in rt9455_usb_event()
1421 ret = regmap_field_read(info->regmap_fields[F_OPA_MODE], in rt9455_usb_event()
1428 ret = regmap_field_read(info->regmap_fields[F_IAICR], in rt9455_usb_event()
1438 return rt9455_usb_event_none(info, opa_mode, iaicr); in rt9455_usb_event()
1440 return rt9455_usb_event_vbus(info, opa_mode, iaicr); in rt9455_usb_event()
1442 return rt9455_usb_event_id(info, opa_mode, iaicr); in rt9455_usb_event()
1444 return rt9455_usb_event_charger(info, opa_mode, iaicr); in rt9455_usb_event()
1454 struct rt9455_info *info = container_of(work, struct rt9455_info, in rt9455_pwr_rdy_work_callback() local
1456 struct device *dev = &info->client->dev; in rt9455_pwr_rdy_work_callback()
1460 ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &pwr_rdy); in rt9455_pwr_rdy_work_callback()
1468 cancel_delayed_work_sync(&info->max_charging_time_work); in rt9455_pwr_rdy_work_callback()
1472 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], in rt9455_pwr_rdy_work_callback()
1479 &info->max_charging_time_work, in rt9455_pwr_rdy_work_callback()
1487 power_supply_changed(info->charger); in rt9455_pwr_rdy_work_callback()
1492 struct rt9455_info *info = container_of(work, struct rt9455_info, in rt9455_max_charging_time_work_callback() local
1494 struct device *dev = &info->client->dev; in rt9455_max_charging_time_work_callback()
1498 ret = regmap_field_write(info->regmap_fields[F_CHG_EN], in rt9455_max_charging_time_work_callback()
1506 struct rt9455_info *info = container_of(work, struct rt9455_info, in rt9455_batt_presence_work_callback() local
1508 struct device *dev = &info->client->dev; in rt9455_batt_presence_work_callback()
1512 ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1); in rt9455_batt_presence_work_callback()
1524 &info->batt_presence_work, in rt9455_batt_presence_work_callback()
1528 &info->max_charging_time_work, in rt9455_batt_presence_work_callback()
1531 ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1); in rt9455_batt_presence_work_callback()
1538 ret = regmap_field_write(info->regmap_fields[F_BATABM], in rt9455_batt_presence_work_callback()
1547 power_supply_changed(info->charger); in rt9455_batt_presence_work_callback()
1598 struct rt9455_info *info; in rt9455_probe() local
1614 info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); in rt9455_probe()
1615 if (!info) in rt9455_probe()
1618 info->client = client; in rt9455_probe()
1619 i2c_set_clientdata(client, info); in rt9455_probe()
1621 info->regmap = devm_regmap_init_i2c(client, in rt9455_probe()
1623 if (IS_ERR(info->regmap)) { in rt9455_probe()
1629 info->regmap_fields[i] = in rt9455_probe()
1630 devm_regmap_field_alloc(dev, info->regmap, in rt9455_probe()
1632 if (IS_ERR(info->regmap_fields[i])) { in rt9455_probe()
1635 return PTR_ERR(info->regmap_fields[i]); in rt9455_probe()
1639 ret = rt9455_discover_charger(info, &ichrg, &ieoc_percentage, in rt9455_probe()
1647 info->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); in rt9455_probe()
1648 if (IS_ERR(info->usb_phy)) { in rt9455_probe()
1651 info->nb.notifier_call = rt9455_usb_event; in rt9455_probe()
1652 ret = usb_register_notifier(info->usb_phy, &info->nb); in rt9455_probe()
1659 info->nb.notifier_call = NULL; in rt9455_probe()
1664 INIT_DEFERRABLE_WORK(&info->pwr_rdy_work, rt9455_pwr_rdy_work_callback); in rt9455_probe()
1665 INIT_DEFERRABLE_WORK(&info->max_charging_time_work, in rt9455_probe()
1667 INIT_DEFERRABLE_WORK(&info->batt_presence_work, in rt9455_probe()
1671 rt9455_charger_config.drv_data = info; in rt9455_probe()
1678 RT9455_DRIVER_NAME, info); in rt9455_probe()
1684 ret = rt9455_hw_init(info, ichrg, ieoc_percentage, mivr, iaicr); in rt9455_probe()
1690 info->charger = devm_power_supply_register(dev, &rt9455_charger_desc, in rt9455_probe()
1692 if (IS_ERR(info->charger)) { in rt9455_probe()
1694 ret = PTR_ERR(info->charger); in rt9455_probe()
1702 if (info->nb.notifier_call) { in rt9455_probe()
1703 usb_unregister_notifier(info->usb_phy, &info->nb); in rt9455_probe()
1704 info->nb.notifier_call = NULL; in rt9455_probe()
1713 struct rt9455_info *info = i2c_get_clientdata(client); in rt9455_remove() local
1715 ret = rt9455_register_reset(info); in rt9455_remove()
1717 dev_err(&info->client->dev, "Failed to set charger to its default values\n"); in rt9455_remove()
1720 if (info->nb.notifier_call) in rt9455_remove()
1721 usb_unregister_notifier(info->usb_phy, &info->nb); in rt9455_remove()
1724 cancel_delayed_work_sync(&info->pwr_rdy_work); in rt9455_remove()
1725 cancel_delayed_work_sync(&info->max_charging_time_work); in rt9455_remove()
1726 cancel_delayed_work_sync(&info->batt_presence_work); in rt9455_remove()