Lines Matching full:charger

3  * TI BQ257000 charger driver
603 static void bq25700_disable_charge(struct bq25700_device *charger);
607 static int bq25700_field_read(struct bq25700_device *charger, in bq25700_field_read() argument
613 ret = regmap_field_read(charger->rmap_fields[field_id], &val); in bq25700_field_read()
620 static int bq25700_field_write(struct bq25700_device *charger, in bq25700_field_write() argument
623 return regmap_field_write(charger->rmap_fields[field_id], val); in bq25700_field_write()
626 static int bq25700_get_chip_state(struct bq25700_device *charger, in bq25700_get_chip_state() argument
652 ret = bq25700_field_read(charger, state_fields[i].id); in bq25700_get_chip_state()
662 static int bq25700_dump_regs(struct bq25700_device *charger) in bq25700_dump_regs() argument
668 ret = bq25700_field_write(charger, ADC_START, 1); in bq25700_dump_regs()
675 regmap_read(charger->regmap, 0x12, &val); in bq25700_dump_regs()
677 regmap_read(charger->regmap, 0x14, &val); in bq25700_dump_regs()
679 regmap_read(charger->regmap, 0x15, &val); in bq25700_dump_regs()
681 regmap_read(charger->regmap, 0x30, &val); in bq25700_dump_regs()
683 regmap_read(charger->regmap, 0x31, &val); in bq25700_dump_regs()
685 regmap_read(charger->regmap, 0x32, &val); in bq25700_dump_regs()
687 regmap_read(charger->regmap, 0x33, &val); in bq25700_dump_regs()
689 regmap_read(charger->regmap, 0x34, &val); in bq25700_dump_regs()
691 regmap_read(charger->regmap, 0x35, &val); in bq25700_dump_regs()
693 regmap_read(charger->regmap, 0x20, &val); in bq25700_dump_regs()
695 regmap_read(charger->regmap, 0x21, &val); in bq25700_dump_regs()
697 regmap_read(charger->regmap, 0x22, &val); in bq25700_dump_regs()
699 regmap_read(charger->regmap, 0x23, &val); in bq25700_dump_regs()
701 regmap_read(charger->regmap, 0x24, &val); in bq25700_dump_regs()
703 regmap_read(charger->regmap, 0x25, &val); in bq25700_dump_regs()
705 regmap_read(charger->regmap, 0x26, &val); in bq25700_dump_regs()
707 regmap_read(charger->regmap, 0x3b, &val); in bq25700_dump_regs()
709 regmap_read(charger->regmap, 0x3c, &val); in bq25700_dump_regs()
711 regmap_read(charger->regmap, 0x3d, &val); in bq25700_dump_regs()
713 regmap_read(charger->regmap, 0x3e, &val); in bq25700_dump_regs()
715 regmap_read(charger->regmap, 0x3f, &val); in bq25700_dump_regs()
717 regmap_read(charger->regmap, 0xfe, &val); in bq25700_dump_regs()
719 regmap_read(charger->regmap, 0xff, &val); in bq25700_dump_regs()
723 bq25700_field_read(charger, OUTPUT_DSG_CUR) * 64); in bq25700_dump_regs()
725 bq25700_field_read(charger, OUTPUT_CHG_CUR) * 256); in bq25700_dump_regs()
727 2880 + bq25700_field_read(charger, OUTPUT_SYS_VOL) * 64); in bq25700_dump_regs()
729 2880 + bq25700_field_read(charger, OUTPUT_BAT_VOL) * 64); in bq25700_dump_regs()
732 bq25700_field_read(charger, CHARGE_CURRENT) * 64); in bq25700_dump_regs()
734 bq25700_field_read(charger, MAX_CHARGE_VOLTAGE) * 16); in bq25700_dump_regs()
736 3200 + bq25700_field_read(charger, INPUT_VOLTAGE) * 64); in bq25700_dump_regs()
738 bq25700_field_read(charger, INPUT_CURRENT) * 50); in bq25700_dump_regs()
740 1024 + bq25700_field_read(charger, MIN_SYS_VOTAGE) * 256); in bq25700_dump_regs()
741 bq25700_get_chip_state(charger, &state); in bq25700_dump_regs()
762 static int bq25703_dump_regs(struct bq25700_device *charger) in bq25703_dump_regs() argument
769 regmap_read(charger->regmap, i, &val); in bq25703_dump_regs()
773 regmap_read(charger->regmap, i, &val); in bq25703_dump_regs()
778 bq25700_field_read(charger, OUTPUT_DSG_CUR) * 64); in bq25703_dump_regs()
780 bq25700_field_read(charger, OUTPUT_CHG_CUR) * 256); in bq25703_dump_regs()
782 2880 + bq25700_field_read(charger, OUTPUT_SYS_VOL) * 64); in bq25703_dump_regs()
784 2880 + bq25700_field_read(charger, OUTPUT_BAT_VOL) * 64); in bq25703_dump_regs()
787 bq25700_field_read(charger, CHARGE_CURRENT) * 64); in bq25703_dump_regs()
789 bq25700_field_read(charger, MAX_CHARGE_VOLTAGE) * 16); in bq25703_dump_regs()
791 3200 + bq25700_field_read(charger, INPUT_VOLTAGE) * 64); in bq25703_dump_regs()
793 bq25700_field_read(charger, INPUT_CURRENT) * 50); in bq25703_dump_regs()
795 1024 + bq25700_field_read(charger, MIN_SYS_VOTAGE) * 256); in bq25703_dump_regs()
796 bq25700_get_chip_state(charger, &state); in bq25703_dump_regs()
820 struct bq25700_device *charger = dev_get_drvdata(dev); in bq25700_charge_info_show() local
822 if ((charger->chip_id & 0xff) == BQ25700_ID) in bq25700_charge_info_show()
823 bq25700_dump_regs(charger); in bq25700_charge_info_show()
824 if ((charger->chip_id & 0xff) == BQ25703_ID) in bq25700_charge_info_show()
825 bq25703_dump_regs(charger); in bq25700_charge_info_show()
834 static void bq25700_init_sysfs(struct bq25700_device *charger) in bq25700_init_sysfs() argument
839 ret = sysfs_create_file(&charger->dev->kobj, in bq25700_init_sysfs()
842 dev_err(charger->dev, "create charger node(%s) error\n", in bq25700_init_sysfs()
888 static int bq25700_fw_read_u32_props(struct bq25700_device *charger) in bq25700_fw_read_u32_props() argument
893 struct bq25700_init_data *init = &charger->init_data; in bq25700_fw_read_u32_props()
921 ret = device_property_read_u32(charger->dev, props[i].name, in bq25700_fw_read_u32_props()
932 dev_err(charger->dev, "ti,charge-current is error\n"); in bq25700_fw_read_u32_props()
937 dev_err(charger->dev, "ti,max-charge-voltage is error\n"); in bq25700_fw_read_u32_props()
942 dev_err(charger->dev, "ti,input-current is error\n"); in bq25700_fw_read_u32_props()
946 if (of_device_is_compatible(charger->dev->of_node, in bq25700_fw_read_u32_props()
951 dev_err(charger->dev, in bq25700_fw_read_u32_props()
958 dev_err(charger->dev, "ti,otg-voltage is error\n"); in bq25700_fw_read_u32_props()
965 dev_err(charger->dev, "ti,otg-current is error\n"); in bq25700_fw_read_u32_props()
978 static int bq25700_hw_init(struct bq25700_device *charger) in bq25700_hw_init() argument
988 {CHARGE_CURRENT, charger->init_data.ichg}, in bq25700_hw_init()
989 {MAX_CHARGE_VOLTAGE, charger->init_data.max_chg_vol}, in bq25700_hw_init()
990 {MIN_SYS_VOTAGE, charger->init_data.sys_min_voltage}, in bq25700_hw_init()
991 {OTG_VOLTAGE, charger->init_data.otg_voltage}, in bq25700_hw_init()
992 {OTG_CURRENT, charger->init_data.otg_current}, in bq25700_hw_init()
996 ret = bq25700_field_write(charger, WDTWR_ADJ, 0); in bq25700_hw_init()
1002 ret = bq25700_field_write(charger, init_data[i].id, in bq25700_hw_init()
1009 bq25700_field_read(charger, CHARGE_CURRENT) * 64); in bq25700_hw_init()
1011 bq25700_field_read(charger, MAX_CHARGE_VOLTAGE) * 16); in bq25700_hw_init()
1013 3200 + bq25700_field_read(charger, INPUT_VOLTAGE) * 64); in bq25700_hw_init()
1015 bq25700_field_read(charger, INPUT_CURRENT) * 50); in bq25700_hw_init()
1017 1024 + bq25700_field_read(charger, MIN_SYS_VOTAGE) * 256); in bq25700_hw_init()
1021 ret = bq25700_field_write(charger, EN_LWPWR, 0); in bq25700_hw_init()
1027 ret = bq25700_field_write(charger, ADC_CONV, 1); in bq25700_hw_init()
1033 ret = bq25700_field_write(charger, ADC_START, 1); in bq25700_hw_init()
1039 ret = bq25700_field_write(charger, ADC_FULLSCALE, 1); in bq25700_hw_init()
1045 ret = bq25700_field_write(charger, EN_ADC_CMPIN, 1); in bq25700_hw_init()
1051 ret = bq25700_field_write(charger, EN_ADC_VBUS, 1); in bq25700_hw_init()
1057 ret = bq25700_field_write(charger, EN_ADC_PSYS, 1); in bq25700_hw_init()
1063 ret = bq25700_field_write(charger, EN_ADC_IIN, 1); in bq25700_hw_init()
1069 ret = bq25700_field_write(charger, EN_ADC_IDCHG, 1); in bq25700_hw_init()
1075 ret = bq25700_field_write(charger, EN_ADC_ICHG, 1); in bq25700_hw_init()
1081 ret = bq25700_field_write(charger, EN_ADC_VSYS, 1); in bq25700_hw_init()
1087 ret = bq25700_field_write(charger, EN_ADC_VBAT, 1); in bq25700_hw_init()
1093 bq25700_get_chip_state(charger, &state); in bq25700_hw_init()
1094 charger->state = state; in bq25700_hw_init()
1099 static int bq25700_fw_probe(struct bq25700_device *charger) in bq25700_fw_probe() argument
1103 ret = bq25700_fw_read_u32_props(charger); in bq25700_fw_probe()
1110 static void bq25700_enable_charger(struct bq25700_device *charger, in bq25700_enable_charger() argument
1113 bq25700_field_write(charger, INPUT_CURRENT, input_current); in bq25700_enable_charger()
1114 bq25700_field_write(charger, CHARGE_CURRENT, charger->init_data.ichg); in bq25700_enable_charger()
1228 "charger",
1232 .name = "bq25700-charger",
1239 static int bq25700_power_supply_init(struct bq25700_device *charger) in bq25700_power_supply_init() argument
1241 struct power_supply_config psy_cfg = { .drv_data = charger, }; in bq25700_power_supply_init()
1245 psy_cfg.of_node = charger->dev->of_node; in bq25700_power_supply_init()
1247 charger->supply_charger = in bq25700_power_supply_init()
1248 power_supply_register(charger->dev, in bq25700_power_supply_init()
1252 return PTR_ERR_OR_ZERO(charger->supply_charger); in bq25700_power_supply_init()
1255 static void bq25700_discnt(struct bq25700_device *charger, enum tpyec_port_t port);
1322 struct bq25700_device *charger = private; in bq25700_irq_handler_thread() local
1326 if (bq25700_field_read(charger, AC_STAT)) { in bq25700_irq_handler_thread()
1330 bq25700_field_write(charger, INPUT_CURRENT, in bq25700_irq_handler_thread()
1331 charger->init_data.input_current_sdp); in bq25700_irq_handler_thread()
1332 bq25700_disable_charge(charger); in bq25700_irq_handler_thread()
1333 bq25700_get_chip_state(charger, &state); in bq25700_irq_handler_thread()
1334 charger->state = state; in bq25700_irq_handler_thread()
1335 power_supply_changed(charger->supply_charger); in bq25700_irq_handler_thread()
1336 charger->typec0_status = USB_STATUS_NONE; in bq25700_irq_handler_thread()
1337 charger->typec1_status = USB_STATUS_NONE; in bq25700_irq_handler_thread()
1344 static void bq25700_enable_typec0(struct bq25700_device *charger) in bq25700_enable_typec0() argument
1346 if (!IS_ERR_OR_NULL(charger->typec0_enable_io)) in bq25700_enable_typec0()
1347 gpiod_direction_output(charger->typec0_enable_io, 1); in bq25700_enable_typec0()
1348 if (!IS_ERR_OR_NULL(charger->typec1_enable_io)) in bq25700_enable_typec0()
1349 gpiod_direction_output(charger->typec1_enable_io, 0); in bq25700_enable_typec0()
1352 static void bq25700_enable_typec1(struct bq25700_device *charger) in bq25700_enable_typec1() argument
1354 if (!IS_ERR_OR_NULL(charger->typec0_enable_io)) in bq25700_enable_typec1()
1355 gpiod_direction_output(charger->typec0_enable_io, 0); in bq25700_enable_typec1()
1356 if (!IS_ERR_OR_NULL(charger->typec1_enable_io)) in bq25700_enable_typec1()
1357 gpiod_direction_output(charger->typec1_enable_io, 1); in bq25700_enable_typec1()
1360 static void bq25700_disable_charge(struct bq25700_device *charger) in bq25700_disable_charge() argument
1362 if (!IS_ERR_OR_NULL(charger->typec0_enable_io)) in bq25700_disable_charge()
1363 gpiod_direction_output(charger->typec0_enable_io, 0); in bq25700_disable_charge()
1364 if (!IS_ERR_OR_NULL(charger->typec1_enable_io)) in bq25700_disable_charge()
1365 gpiod_direction_output(charger->typec1_enable_io, 0); in bq25700_disable_charge()
1368 static void bq25700_typec0_discharge(struct bq25700_device *charger) in bq25700_typec0_discharge() argument
1370 if (!IS_ERR_OR_NULL(charger->typec0_discharge_io)) in bq25700_typec0_discharge()
1371 gpiod_direction_output(charger->typec0_discharge_io, 1); in bq25700_typec0_discharge()
1373 if (!IS_ERR_OR_NULL(charger->typec0_discharge_io)) in bq25700_typec0_discharge()
1374 gpiod_direction_output(charger->typec0_discharge_io, 0); in bq25700_typec0_discharge()
1377 static void bq25700_typec1_discharge(struct bq25700_device *charger) in bq25700_typec1_discharge() argument
1379 if (!IS_ERR_OR_NULL(charger->typec1_discharge_io)) in bq25700_typec1_discharge()
1380 gpiod_direction_output(charger->typec1_discharge_io, 1); in bq25700_typec1_discharge()
1382 if (!IS_ERR_OR_NULL(charger->typec1_discharge_io)) in bq25700_typec1_discharge()
1383 gpiod_direction_output(charger->typec1_discharge_io, 0); in bq25700_typec1_discharge()
1386 static void bq25700_charger_evt_handel(struct bq25700_device *charger, in bq25700_charger_evt_handel() argument
1393 if (charger->typec0_status == USB_STATUS_PD || in bq25700_charger_evt_handel()
1394 charger->typec1_status == USB_STATUS_PD) in bq25700_charger_evt_handel()
1397 /* Determine cable/charger type */ in bq25700_charger_evt_handel()
1401 bq25700_enable_charger(charger, in bq25700_charger_evt_handel()
1402 charger->init_data.input_current_sdp); in bq25700_charger_evt_handel()
1406 bq25700_enable_charger(charger, in bq25700_charger_evt_handel()
1407 charger->init_data.input_current_dcp); in bq25700_charger_evt_handel()
1411 bq25700_enable_charger(charger, in bq25700_charger_evt_handel()
1412 charger->init_data.input_current_cdp); in bq25700_charger_evt_handel()
1417 charger->typec0_status = USB_STATUS_USB; in bq25700_charger_evt_handel()
1419 charger->typec0_status = USB_STATUS_AC; in bq25700_charger_evt_handel()
1420 bq25700_enable_typec0(charger); in bq25700_charger_evt_handel()
1423 charger->typec1_status = USB_STATUS_USB; in bq25700_charger_evt_handel()
1425 charger->typec1_status = USB_STATUS_AC; in bq25700_charger_evt_handel()
1426 bq25700_enable_typec1(charger); in bq25700_charger_evt_handel()
1429 bq25700_get_chip_state(charger, &state); in bq25700_charger_evt_handel()
1430 charger->state = state; in bq25700_charger_evt_handel()
1431 power_supply_changed(charger->supply_charger); in bq25700_charger_evt_handel()
1434 static void bq25700_charger_usb_bc_handel(struct bq25700_device *charger) in bq25700_charger_usb_bc_handel() argument
1438 switch (charger->bc_event) { in bq25700_charger_usb_bc_handel()
1440 bq25700_enable_charger(charger, in bq25700_charger_usb_bc_handel()
1441 charger->init_data.input_current_sdp); in bq25700_charger_usb_bc_handel()
1445 bq25700_enable_charger(charger, in bq25700_charger_usb_bc_handel()
1446 charger->init_data.input_current_dcp); in bq25700_charger_usb_bc_handel()
1449 bq25700_enable_charger(charger, in bq25700_charger_usb_bc_handel()
1450 charger->init_data.input_current_cdp); in bq25700_charger_usb_bc_handel()
1456 bq25700_get_chip_state(charger, &state); in bq25700_charger_usb_bc_handel()
1457 charger->state = state; in bq25700_charger_usb_bc_handel()
1458 power_supply_changed(charger->supply_charger); in bq25700_charger_usb_bc_handel()
1463 struct bq25700_device *charger = container_of(work, in bq25700_charger_evt_worker() local
1465 struct extcon_dev *edev = charger->cable_edev; in bq25700_charger_evt_worker()
1467 if (charger->usb_bc == 0) in bq25700_charger_evt_worker()
1468 bq25700_charger_evt_handel(charger, edev, USB_TYPEC_0); in bq25700_charger_evt_worker()
1470 bq25700_charger_usb_bc_handel(charger); in bq25700_charger_evt_worker()
1475 struct bq25700_device *charger = container_of(work, in bq25700_charger_evt_worker1() local
1477 struct extcon_dev *edev = charger->cable_edev_1; in bq25700_charger_evt_worker1()
1479 bq25700_charger_evt_handel(charger, edev, USB_TYPEC_1); in bq25700_charger_evt_worker1()
1486 struct bq25700_device *charger = in bq25700_charger_evt_notifier() local
1488 charger->bc_event = event; in bq25700_charger_evt_notifier()
1489 queue_delayed_work(charger->usb_charger_wq, &charger->usb_work, in bq25700_charger_evt_notifier()
1499 struct bq25700_device *charger = in bq25700_charger_evt_notifier1() local
1502 queue_delayed_work(charger->usb_charger_wq, &charger->usb_work1, in bq25700_charger_evt_notifier1()
1508 static void bq25700_set_otg_vbus(struct bq25700_device *charger, bool enable) in bq25700_set_otg_vbus() argument
1512 if (!IS_ERR_OR_NULL(charger->otg_mode_en_io)) in bq25700_set_otg_vbus()
1513 gpiod_direction_output(charger->otg_mode_en_io, enable); in bq25700_set_otg_vbus()
1514 bq25700_field_write(charger, EN_OTG, enable); in bq25700_set_otg_vbus()
1519 struct bq25700_device *charger = in bq25700_host_evt_worker() local
1521 struct extcon_dev *edev = charger->cable_edev; in bq25700_host_evt_worker()
1524 bq25700_set_otg_vbus(charger, true); in bq25700_host_evt_worker()
1526 bq25700_set_otg_vbus(charger, false); in bq25700_host_evt_worker()
1531 struct bq25700_device *charger = in bq25700_host_evt_worker1() local
1533 struct extcon_dev *edev = charger->cable_edev_1; in bq25700_host_evt_worker1()
1536 bq25700_set_otg_vbus(charger, true); in bq25700_host_evt_worker1()
1538 bq25700_set_otg_vbus(charger, false); in bq25700_host_evt_worker1()
1544 struct bq25700_device *charger = in bq25700_host_evt_notifier() local
1547 queue_delayed_work(charger->usb_charger_wq, &charger->host_work, in bq25700_host_evt_notifier()
1556 struct bq25700_device *charger = in bq25700_host_evt_notifier1() local
1559 queue_delayed_work(charger->usb_charger_wq, &charger->host_work1, in bq25700_host_evt_notifier1()
1565 static void bq25700_discnt(struct bq25700_device *charger, in bq25700_discnt() argument
1571 if (bq25700_field_read(charger, AC_STAT) == 0) { in bq25700_discnt()
1572 bq25700_disable_charge(charger); in bq25700_discnt()
1574 bq25700_typec0_discharge(charger); in bq25700_discnt()
1575 charger->typec0_status = USB_STATUS_NONE; in bq25700_discnt()
1577 bq25700_typec1_discharge(charger); in bq25700_discnt()
1578 charger->typec1_status = USB_STATUS_NONE; in bq25700_discnt()
1582 bq25700_field_write(charger, INPUT_VOLTAGE, vol_idx); in bq25700_discnt()
1583 bq25700_field_write(charger, INPUT_CURRENT, in bq25700_discnt()
1584 charger->init_data.input_current_sdp); in bq25700_discnt()
1585 bq25700_get_chip_state(charger, &state); in bq25700_discnt()
1586 charger->state = state; in bq25700_discnt()
1587 power_supply_changed(charger->supply_charger); in bq25700_discnt()
1593 struct bq25700_device *charger = container_of(work, in bq25700_discnt_evt_worker() local
1597 bq25700_discnt(charger, USB_TYPEC_0); in bq25700_discnt_evt_worker()
1600 static int bq25700_register_cg_extcon(struct bq25700_device *charger, in bq25700_register_cg_extcon() argument
1610 dev_err(charger->dev, "failed to register notifier for SDP\n"); in bq25700_register_cg_extcon()
1618 dev_err(charger->dev, "failed to register notifier for DCP\n"); in bq25700_register_cg_extcon()
1626 dev_err(charger->dev, "failed to register notifier for CDP\n"); in bq25700_register_cg_extcon()
1633 static int bq25700_register_cg_nb(struct bq25700_device *charger) in bq25700_register_cg_nb() argument
1638 if (charger->usb_bc == 0) { in bq25700_register_cg_nb()
1639 if (charger->cable_edev) { in bq25700_register_cg_nb()
1641 INIT_DELAYED_WORK(&charger->usb_work, in bq25700_register_cg_nb()
1643 charger->cable_cg_nb.notifier_call = in bq25700_register_cg_nb()
1645 bq25700_register_cg_extcon(charger, charger->cable_edev, in bq25700_register_cg_nb()
1646 &charger->cable_cg_nb); in bq25700_register_cg_nb()
1649 if (charger->cable_edev_1) { in bq25700_register_cg_nb()
1650 INIT_DELAYED_WORK(&charger->usb_work1, in bq25700_register_cg_nb()
1652 charger->cable_cg_nb1.notifier_call = in bq25700_register_cg_nb()
1654 bq25700_register_cg_extcon(charger, in bq25700_register_cg_nb()
1655 charger->cable_edev_1, in bq25700_register_cg_nb()
1656 &charger->cable_cg_nb1); in bq25700_register_cg_nb()
1659 INIT_DELAYED_WORK(&charger->usb_work, in bq25700_register_cg_nb()
1661 charger->cable_cg_nb.notifier_call = in bq25700_register_cg_nb()
1664 ret = rk_bc_detect_notifier_register(&charger->cable_cg_nb, in bq25700_register_cg_nb()
1667 dev_err(charger->dev, "failed to register notifier for bc\n"); in bq25700_register_cg_nb()
1674 static int bq25700_register_pd_nb(struct bq25700_device *charger) in bq25700_register_pd_nb() argument
1681 if (charger->notify_node || charger->plat_data.notify_device) { in bq25700_register_pd_nb()
1682 INIT_DELAYED_WORK(&charger->discnt_work, in bq25700_register_pd_nb()
1684 charger->nb.notifier_call = bq2570x_pd_notifier_call; in bq25700_register_pd_nb()
1685 ret = power_supply_reg_notifier(&charger->nb); in bq25700_register_pd_nb()
1687 dev_err(charger->dev, "failed to reg notifier: %d\n", ret); in bq25700_register_pd_nb()
1690 charger->automode = 1; in bq25700_register_pd_nb()
1691 dev_info(charger->dev, "automode supported, waiting for events\n"); in bq25700_register_pd_nb()
1693 charger->automode = -1; in bq25700_register_pd_nb()
1694 dev_info(charger->dev, "automode not supported\n"); in bq25700_register_pd_nb()
1697 if (charger->nb.notifier_call) { in bq25700_register_pd_nb()
1698 if (charger->dev->of_node) { in bq25700_register_pd_nb()
1699 notify_psy = power_supply_get_by_phandle(charger->dev->of_node, in bq25700_register_pd_nb()
1700 "ti,usb-charger-detection"); in bq25700_register_pd_nb()
1702 dev_info(charger->dev, "bq25700 notify_psy is error\n"); in bq25700_register_pd_nb()
1705 } else if (charger->plat_data.notify_device) { in bq25700_register_pd_nb()
1707 charger->plat_data.notify_device); in bq25700_register_pd_nb()
1723 bq25700_field_write(charger, INPUT_CURRENT, cur_idx); in bq25700_register_pd_nb()
1724 bq25700_field_write(charger, INPUT_VOLTAGE, vol_idx); in bq25700_register_pd_nb()
1725 bq25700_field_write(charger, CHARGE_CURRENT, in bq25700_register_pd_nb()
1726 charger->init_data.ichg); in bq25700_register_pd_nb()
1727 dev_info(charger->dev, "INPUT_CURRENT:%d, INPUT_VOLTAGE:%d, CHARGE_CURRENT:%d\n", in bq25700_register_pd_nb()
1728 cur_idx, vol_idx, charger->init_data.ichg); in bq25700_register_pd_nb()
1734 static int bq25700_register_host_nb(struct bq25700_device *charger) in bq25700_register_host_nb() argument
1739 if (charger->cable_edev) { in bq25700_register_host_nb()
1740 INIT_DELAYED_WORK(&charger->host_work, bq25700_host_evt_worker); in bq25700_register_host_nb()
1741 charger->cable_host_nb.notifier_call = in bq25700_register_host_nb()
1743 ret = extcon_register_notifier(charger->cable_edev, in bq25700_register_host_nb()
1745 &charger->cable_host_nb); in bq25700_register_host_nb()
1747 dev_err(charger->dev, in bq25700_register_host_nb()
1753 if (charger->cable_edev_1) { in bq25700_register_host_nb()
1754 INIT_DELAYED_WORK(&charger->host_work1, in bq25700_register_host_nb()
1756 charger->cable_host_nb1.notifier_call = in bq25700_register_host_nb()
1758 ret = extcon_register_notifier(charger->cable_edev_1, in bq25700_register_host_nb()
1760 &charger->cable_host_nb1); in bq25700_register_host_nb()
1762 dev_err(charger->dev, in bq25700_register_host_nb()
1773 struct bq25700_device *charger = rdev_get_drvdata(dev); in bq25700_otg_vbus_enable() local
1775 bq25700_set_otg_vbus(charger, true); in bq25700_otg_vbus_enable()
1782 struct bq25700_device *charger = rdev_get_drvdata(dev); in bq25700_otg_vbus_disable() local
1784 bq25700_set_otg_vbus(charger, false); in bq25700_otg_vbus_disable()
1791 struct bq25700_device *charger = rdev_get_drvdata(dev); in bq25700_otg_vbus_is_enabled() local
1795 val = bq25700_field_read(charger, EN_OTG); in bq25700_otg_vbus_is_enabled()
1796 if (!IS_ERR_OR_NULL(charger->otg_mode_en_io)) in bq25700_otg_vbus_is_enabled()
1797 gpio_status = gpiod_get_value(charger->otg_mode_en_io); in bq25700_otg_vbus_is_enabled()
1819 static int bq25700_register_otg_vbus_regulator(struct bq25700_device *charger) in bq25700_register_otg_vbus_regulator() argument
1824 np = of_get_child_by_name(charger->dev->of_node, "regulators"); in bq25700_register_otg_vbus_regulator()
1826 dev_warn(charger->dev, "cannot find regulators node\n"); in bq25700_register_otg_vbus_regulator()
1830 config.dev = charger->dev; in bq25700_register_otg_vbus_regulator()
1831 config.driver_data = charger; in bq25700_register_otg_vbus_regulator()
1833 charger->otg_vbus_reg = devm_regulator_register(charger->dev, in bq25700_register_otg_vbus_regulator()
1836 if (IS_ERR(charger->otg_vbus_reg)) in bq25700_register_otg_vbus_regulator()
1837 return PTR_ERR(charger->otg_vbus_reg); in bq25700_register_otg_vbus_regulator()
1842 static long bq25700_init_usb(struct bq25700_device *charger) in bq25700_init_usb() argument
1845 struct device *dev = charger->dev; in bq25700_init_usb()
1847 charger->usb_charger_wq = alloc_ordered_workqueue("%s", in bq25700_init_usb()
1856 charger->cable_edev = NULL; in bq25700_init_usb()
1858 charger->cable_edev = edev; in bq25700_init_usb()
1865 charger->cable_edev_1 = NULL; in bq25700_init_usb()
1867 charger->cable_edev_1 = edev1; in bq25700_init_usb()
1870 bq25700_field_write(charger, INPUT_CURRENT, in bq25700_init_usb()
1871 charger->init_data.input_current_sdp); in bq25700_init_usb()
1873 if (!charger->pd_charge_only) in bq25700_init_usb()
1874 bq25700_register_cg_nb(charger); in bq25700_init_usb()
1876 if (bq25700_register_otg_vbus_regulator(charger) < 0) { in bq25700_init_usb()
1877 dev_warn(charger->dev, in bq25700_init_usb()
1879 charger->otg_vbus_reg = NULL; in bq25700_init_usb()
1880 bq25700_register_host_nb(charger); in bq25700_init_usb()
1883 bq25700_register_pd_nb(charger); in bq25700_init_usb()
1885 if (charger->cable_edev) { in bq25700_init_usb()
1886 if (!charger->otg_vbus_reg) in bq25700_init_usb()
1887 schedule_delayed_work(&charger->host_work, 0); in bq25700_init_usb()
1888 if (!charger->pd_charge_only) in bq25700_init_usb()
1889 schedule_delayed_work(&charger->usb_work, 0); in bq25700_init_usb()
1891 if (charger->cable_edev_1) { in bq25700_init_usb()
1892 if (!charger->otg_vbus_reg) in bq25700_init_usb()
1893 schedule_delayed_work(&charger->host_work1, 0); in bq25700_init_usb()
1894 if (!charger->pd_charge_only) in bq25700_init_usb()
1895 schedule_delayed_work(&charger->usb_work1, 0); in bq25700_init_usb()
1901 static int bq25700_parse_dt(struct bq25700_device *charger) in bq25700_parse_dt() argument
1904 struct device_node *np = charger->dev->of_node; in bq25700_parse_dt()
1907 charger->typec0_enable_io = devm_gpiod_get_optional(charger->dev, in bq25700_parse_dt()
1910 if (!IS_ERR_OR_NULL(charger->typec0_enable_io)) in bq25700_parse_dt()
1911 gpiod_direction_output(charger->typec0_enable_io, 0); in bq25700_parse_dt()
1913 charger->typec1_enable_io = devm_gpiod_get_optional(charger->dev, in bq25700_parse_dt()
1916 if (!IS_ERR_OR_NULL(charger->typec1_enable_io)) in bq25700_parse_dt()
1917 gpiod_direction_output(charger->typec1_enable_io, 0); in bq25700_parse_dt()
1919 charger->typec0_discharge_io = in bq25700_parse_dt()
1920 devm_gpiod_get_optional(charger->dev, "typec0-discharge", in bq25700_parse_dt()
1923 charger->typec1_discharge_io = in bq25700_parse_dt()
1924 devm_gpiod_get_optional(charger->dev, "typec1-discharge", in bq25700_parse_dt()
1927 charger->otg_mode_en_io = devm_gpiod_get_optional(charger->dev, in bq25700_parse_dt()
1930 if (!IS_ERR_OR_NULL(charger->otg_mode_en_io)) in bq25700_parse_dt()
1931 gpiod_direction_output(charger->otg_mode_en_io, 0); in bq25700_parse_dt()
1934 &charger->pd_charge_only); in bq25700_parse_dt()
1936 dev_err(charger->dev, "pd-charge-only!\n"); in bq25700_parse_dt()
1940 charger->usb_bc = 0; in bq25700_parse_dt()
1942 charger->usb_bc = 1; in bq25700_parse_dt()
1946 charger->notify_node = of_parse_phandle(np, in bq25700_parse_dt()
1947 "ti,usb-charger-detection", 0); in bq25700_parse_dt()
1956 struct bq25700_device *charger; in bq25700_probe() local
1965 charger = devm_kzalloc(&client->dev, sizeof(*charger), GFP_KERNEL); in bq25700_probe()
1966 if (!charger) in bq25700_probe()
1969 charger->client = client; in bq25700_probe()
1970 charger->dev = dev; in bq25700_probe()
1976 charger->regmap = devm_regmap_init_i2c(client, in bq25700_probe()
1978 if (IS_ERR(charger->regmap)) { in bq25700_probe()
1986 charger->rmap_fields[i] = in bq25700_probe()
1988 charger->regmap, in bq25700_probe()
1990 if (IS_ERR(charger->rmap_fields[i])) { in bq25700_probe()
1992 return PTR_ERR(charger->rmap_fields[i]); in bq25700_probe()
1996 charger->regmap = devm_regmap_init_i2c(client, in bq25700_probe()
1999 if (IS_ERR(charger->regmap)) { in bq25700_probe()
2007 charger->rmap_fields[i] = in bq25700_probe()
2009 charger->regmap, in bq25700_probe()
2011 if (IS_ERR(charger->rmap_fields[i])) { in bq25700_probe()
2013 return PTR_ERR(charger->rmap_fields[i]); in bq25700_probe()
2017 i2c_set_clientdata(client, charger); in bq25700_probe()
2020 charger->chip_id = bq25700_field_read(charger, DEVICE_ID); in bq25700_probe()
2022 if (charger->chip_id < 0) { in bq25700_probe()
2024 return charger->chip_id; in bq25700_probe()
2028 ret = bq25700_fw_probe(charger); in bq25700_probe()
2041 if (of_parse_phandle(charger->dev->of_node, "ti,battery", 0)) { in bq25700_probe()
2043 charger->dev->of_node, in bq25700_probe()
2045 dev_info(charger->dev, "No battery found\n"); in bq25700_probe()
2048 dev_info(charger->dev, "Battery found\n"); in bq25700_probe()
2051 ret = bq25700_hw_init(charger); in bq25700_probe()
2057 bq25700_parse_dt(charger); in bq25700_probe()
2058 bq25700_init_sysfs(charger); in bq25700_probe()
2060 bq25700_power_supply_init(charger); in bq25700_probe()
2061 bq25700_init_usb(charger); in bq25700_probe()
2068 if (bq25700_field_read(charger, AC_STAT)) in bq25700_probe()
2078 "bq25700_irq", charger); in bq25700_probe()
2083 bq25700_charger = charger; in bq25700_probe()
2092 struct bq25700_device *charger = i2c_get_clientdata(client); in bq25700_shutdown() local
2095 bq25700_field_write(charger, INPUT_VOLTAGE, vol_idx); in bq25700_shutdown()
2096 bq25700_field_write(charger, INPUT_CURRENT, in bq25700_shutdown()
2097 charger->init_data.input_current_sdp); in bq25700_shutdown()
2099 if (!bq25700_field_read(charger, AC_STAT)) in bq25700_shutdown()
2100 bq25700_field_write(charger, EN_LWPWR, 1); in bq25700_shutdown()
2106 struct bq25700_device *charger = dev_get_drvdata(dev); in bq25700_pm_suspend() local
2108 if (!bq25700_field_read(charger, AC_STAT)) in bq25700_pm_suspend()
2109 bq25700_field_write(charger, EN_LWPWR, 1); in bq25700_pm_suspend()
2116 struct bq25700_device *charger = dev_get_drvdata(dev); in bq25700_pm_resume() local
2118 bq25700_field_write(charger, EN_LWPWR, 0); in bq25700_pm_resume()
2152 .name = "bq25700-charger",
2161 MODULE_DESCRIPTION("TI bq25700 Charger Driver");