• Home
  • Raw
  • Download

Lines Matching refs:bci

211 static int twl4030_is_battery_present(struct twl4030_bci *bci)  in twl4030_is_battery_present()  argument
271 static int twl4030_charger_update_current(struct twl4030_bci *bci) in twl4030_charger_update_current() argument
284 if (ac_available(bci->channel_vac)) { in twl4030_charger_update_current()
285 cur = bci->ac_cur; in twl4030_charger_update_current()
286 bci->ac_is_active = true; in twl4030_charger_update_current()
288 cur = bci->usb_cur; in twl4030_charger_update_current()
289 bci->ac_is_active = false; in twl4030_charger_update_current()
290 if (cur > bci->usb_cur_target) { in twl4030_charger_update_current()
291 cur = bci->usb_cur_target; in twl4030_charger_update_current()
292 bci->usb_cur = cur; in twl4030_charger_update_current()
294 if (cur < bci->usb_cur_target) in twl4030_charger_update_current()
295 schedule_delayed_work(&bci->current_worker, USB_CUR_DELAY); in twl4030_charger_update_current()
299 if (bci->ichg_eoc >= 200000) in twl4030_charger_update_current()
301 if (bci->ichg_lo >= 400000) in twl4030_charger_update_current()
303 if (bci->ichg_hi >= 820000) in twl4030_charger_update_current()
328 reg = ua2regval(bci->ichg_eoc, cgain); in twl4030_charger_update_current()
340 reg = ua2regval(bci->ichg_lo, cgain); in twl4030_charger_update_current()
362 reg = ua2regval(bci->ichg_hi, cgain); in twl4030_charger_update_current()
436 struct twl4030_bci *bci = container_of(data, struct twl4030_bci, in twl4030_current_worker() local
447 dev_dbg(bci->dev, "v=%d cur=%d limit=%d target=%d\n", v, curr, in twl4030_current_worker()
448 bci->usb_cur, bci->usb_cur_target); in twl4030_current_worker()
452 if (bci->usb_cur >= USB_CUR_STEP) in twl4030_current_worker()
453 bci->usb_cur -= USB_CUR_STEP; in twl4030_current_worker()
454 bci->usb_cur_target = bci->usb_cur; in twl4030_current_worker()
455 } else if (bci->usb_cur >= bci->usb_cur_target || in twl4030_current_worker()
456 bci->usb_cur + USB_CUR_STEP > USB_MAX_CURRENT) { in twl4030_current_worker()
460 bci->usb_cur += USB_CUR_STEP; in twl4030_current_worker()
461 schedule_delayed_work(&bci->current_worker, USB_CUR_DELAY); in twl4030_current_worker()
463 twl4030_charger_update_current(bci); in twl4030_current_worker()
469 static int twl4030_charger_enable_usb(struct twl4030_bci *bci, bool enable) in twl4030_charger_enable_usb() argument
474 if (bci->usb_mode == CHARGE_OFF) in twl4030_charger_enable_usb()
476 if (enable && !IS_ERR_OR_NULL(bci->transceiver)) { in twl4030_charger_enable_usb()
478 twl4030_charger_update_current(bci); in twl4030_charger_enable_usb()
481 if (!bci->usb_enabled) { in twl4030_charger_enable_usb()
482 pm_runtime_get_sync(bci->transceiver->dev); in twl4030_charger_enable_usb()
483 bci->usb_enabled = 1; in twl4030_charger_enable_usb()
486 if (bci->usb_mode == CHARGE_AUTO) { in twl4030_charger_enable_usb()
494 dev_err(bci->dev, in twl4030_charger_enable_usb()
506 if (bci->usb_mode == CHARGE_LINEAR) { in twl4030_charger_enable_usb()
513 dev_err(bci->dev, in twl4030_charger_enable_usb()
546 if (bci->usb_enabled) { in twl4030_charger_enable_usb()
547 pm_runtime_mark_last_busy(bci->transceiver->dev); in twl4030_charger_enable_usb()
548 pm_runtime_put_autosuspend(bci->transceiver->dev); in twl4030_charger_enable_usb()
549 bci->usb_enabled = 0; in twl4030_charger_enable_usb()
551 bci->usb_cur = 0; in twl4030_charger_enable_usb()
560 static int twl4030_charger_enable_ac(struct twl4030_bci *bci, bool enable) in twl4030_charger_enable_ac() argument
564 if (bci->ac_mode == CHARGE_OFF) in twl4030_charger_enable_ac()
623 struct twl4030_bci *bci = arg; in twl4030_charger_interrupt() local
625 dev_dbg(bci->dev, "CHG_PRES irq\n"); in twl4030_charger_interrupt()
627 bci->ac_cur = 500000; in twl4030_charger_interrupt()
628 twl4030_charger_update_current(bci); in twl4030_charger_interrupt()
629 power_supply_changed(bci->ac); in twl4030_charger_interrupt()
630 power_supply_changed(bci->usb); in twl4030_charger_interrupt()
640 struct twl4030_bci *bci = arg; in twl4030_bci_interrupt() local
654 dev_dbg(bci->dev, "BCI irq %02x %02x\n", irqs2, irqs1); in twl4030_bci_interrupt()
658 power_supply_changed(bci->ac); in twl4030_bci_interrupt()
659 power_supply_changed(bci->usb); in twl4030_bci_interrupt()
661 twl4030_charger_update_current(bci); in twl4030_bci_interrupt()
665 dev_warn(bci->dev, "battery temperature out of range\n"); in twl4030_bci_interrupt()
668 dev_crit(bci->dev, "battery disconnected\n"); in twl4030_bci_interrupt()
671 dev_crit(bci->dev, "VBAT overvoltage\n"); in twl4030_bci_interrupt()
674 dev_crit(bci->dev, "VBUS overvoltage\n"); in twl4030_bci_interrupt()
677 dev_crit(bci->dev, "Ac charger overvoltage\n"); in twl4030_bci_interrupt()
689 struct twl4030_bci *bci = dev_get_drvdata(dev->parent); in twl4030_bci_max_current_store() local
697 if (dev == &bci->ac->dev) in twl4030_bci_max_current_store()
698 bci->ac_cur = cur; in twl4030_bci_max_current_store()
700 bci->usb_cur_target = cur; in twl4030_bci_max_current_store()
702 twl4030_charger_update_current(bci); in twl4030_bci_max_current_store()
715 struct twl4030_bci *bci = dev_get_drvdata(dev->parent); in twl4030_bci_max_current_show() local
717 if (dev == &bci->ac->dev) { in twl4030_bci_max_current_show()
718 if (!bci->ac_is_active) in twl4030_bci_max_current_show()
719 cur = bci->ac_cur; in twl4030_bci_max_current_show()
721 if (bci->ac_is_active) in twl4030_bci_max_current_show()
722 cur = bci->usb_cur_target; in twl4030_bci_max_current_show()
741 struct twl4030_bci *bci = container_of(data, struct twl4030_bci, work); in twl4030_bci_usb_work() local
743 switch (bci->event) { in twl4030_bci_usb_work()
746 twl4030_charger_enable_usb(bci, true); in twl4030_bci_usb_work()
749 twl4030_charger_enable_usb(bci, false); in twl4030_bci_usb_work()
757 struct twl4030_bci *bci = container_of(nb, struct twl4030_bci, usb_nb); in twl4030_bci_usb_ncb() local
759 dev_dbg(bci->dev, "OTG notify %lu\n", val); in twl4030_bci_usb_ncb()
763 bci->usb_cur_target = 500000; in twl4030_bci_usb_ncb()
765 bci->usb_cur_target = 100000; in twl4030_bci_usb_ncb()
767 bci->event = val; in twl4030_bci_usb_ncb()
768 schedule_work(&bci->work); in twl4030_bci_usb_ncb()
780 struct twl4030_bci *bci = dev_get_drvdata(dev->parent); in twl4030_bci_mode_store() local
792 if (dev == &bci->ac->dev) { in twl4030_bci_mode_store()
795 twl4030_charger_enable_ac(bci, false); in twl4030_bci_mode_store()
796 bci->ac_mode = mode; in twl4030_bci_mode_store()
797 status = twl4030_charger_enable_ac(bci, true); in twl4030_bci_mode_store()
799 twl4030_charger_enable_usb(bci, false); in twl4030_bci_mode_store()
800 bci->usb_mode = mode; in twl4030_bci_mode_store()
801 status = twl4030_charger_enable_usb(bci, true); in twl4030_bci_mode_store()
813 struct twl4030_bci *bci = dev_get_drvdata(dev->parent); in twl4030_bci_mode_show() local
816 int mode = bci->usb_mode; in twl4030_bci_mode_show()
818 if (dev == &bci->ac->dev) in twl4030_bci_mode_show()
819 mode = bci->ac_mode; in twl4030_bci_mode_show()
855 static int twl4030bci_state(struct twl4030_bci *bci) in twl4030bci_state() argument
866 dev_dbg(bci->dev, "state: %02x\n", state); in twl4030bci_state()
887 struct twl4030_bci *bci = dev_get_drvdata(psy->dev.parent); in twl4030_bci_get_property() local
892 state = twl4030bci_state(bci); in twl4030_bci_get_property()
1011 struct twl4030_bci *bci; in twl4030_bci_probe() local
1016 bci = devm_kzalloc(&pdev->dev, sizeof(*bci), GFP_KERNEL); in twl4030_bci_probe()
1017 if (bci == NULL) in twl4030_bci_probe()
1023 bci->ichg_eoc = 80100; /* Stop charging when current drops to here */ in twl4030_bci_probe()
1024 bci->ichg_lo = 241000; /* Low threshold */ in twl4030_bci_probe()
1025 bci->ichg_hi = 500000; /* High threshold */ in twl4030_bci_probe()
1026 bci->ac_cur = 500000; /* 500mA */ in twl4030_bci_probe()
1028 bci->usb_cur_target = 500000; /* 500mA */ in twl4030_bci_probe()
1030 bci->usb_cur_target = 100000; /* 100mA */ in twl4030_bci_probe()
1031 bci->usb_mode = CHARGE_AUTO; in twl4030_bci_probe()
1032 bci->ac_mode = CHARGE_AUTO; in twl4030_bci_probe()
1034 bci->dev = &pdev->dev; in twl4030_bci_probe()
1035 bci->irq_chg = platform_get_irq(pdev, 0); in twl4030_bci_probe()
1036 bci->irq_bci = platform_get_irq(pdev, 1); in twl4030_bci_probe()
1039 ret = twl4030_is_battery_present(bci); in twl4030_bci_probe()
1045 platform_set_drvdata(pdev, bci); in twl4030_bci_probe()
1047 bci->ac = devm_power_supply_register(&pdev->dev, &twl4030_bci_ac_desc, in twl4030_bci_probe()
1049 if (IS_ERR(bci->ac)) { in twl4030_bci_probe()
1050 ret = PTR_ERR(bci->ac); in twl4030_bci_probe()
1055 bci->usb = devm_power_supply_register(&pdev->dev, &twl4030_bci_usb_desc, in twl4030_bci_probe()
1057 if (IS_ERR(bci->usb)) { in twl4030_bci_probe()
1058 ret = PTR_ERR(bci->usb); in twl4030_bci_probe()
1063 ret = devm_request_threaded_irq(&pdev->dev, bci->irq_chg, NULL, in twl4030_bci_probe()
1065 bci); in twl4030_bci_probe()
1068 bci->irq_chg, ret); in twl4030_bci_probe()
1072 ret = devm_request_threaded_irq(&pdev->dev, bci->irq_bci, NULL, in twl4030_bci_probe()
1073 twl4030_bci_interrupt, IRQF_ONESHOT, pdev->name, bci); in twl4030_bci_probe()
1076 bci->irq_bci, ret); in twl4030_bci_probe()
1080 bci->channel_vac = iio_channel_get(&pdev->dev, "vac"); in twl4030_bci_probe()
1081 if (IS_ERR(bci->channel_vac)) { in twl4030_bci_probe()
1082 bci->channel_vac = NULL; in twl4030_bci_probe()
1086 INIT_WORK(&bci->work, twl4030_bci_usb_work); in twl4030_bci_probe()
1087 INIT_DELAYED_WORK(&bci->current_worker, twl4030_current_worker); in twl4030_bci_probe()
1089 bci->usb_nb.notifier_call = twl4030_bci_usb_ncb; in twl4030_bci_probe()
1090 if (bci->dev->of_node) { in twl4030_bci_probe()
1093 phynode = of_find_compatible_node(bci->dev->of_node->parent, in twl4030_bci_probe()
1096 bci->transceiver = devm_usb_get_phy_by_node( in twl4030_bci_probe()
1097 bci->dev, phynode, &bci->usb_nb); in twl4030_bci_probe()
1116 twl4030_charger_update_current(bci); in twl4030_bci_probe()
1117 if (device_create_file(&bci->usb->dev, &dev_attr_max_current)) in twl4030_bci_probe()
1119 if (device_create_file(&bci->usb->dev, &dev_attr_mode)) in twl4030_bci_probe()
1121 if (device_create_file(&bci->ac->dev, &dev_attr_mode)) in twl4030_bci_probe()
1123 if (device_create_file(&bci->ac->dev, &dev_attr_max_current)) in twl4030_bci_probe()
1126 twl4030_charger_enable_ac(bci, true); in twl4030_bci_probe()
1127 if (!IS_ERR_OR_NULL(bci->transceiver)) in twl4030_bci_probe()
1128 twl4030_bci_usb_ncb(&bci->usb_nb, in twl4030_bci_probe()
1129 bci->transceiver->last_event, in twl4030_bci_probe()
1132 twl4030_charger_enable_usb(bci, false); in twl4030_bci_probe()
1141 iio_channel_release(bci->channel_vac); in twl4030_bci_probe()
1148 struct twl4030_bci *bci = platform_get_drvdata(pdev); in twl4030_bci_remove() local
1150 twl4030_charger_enable_ac(bci, false); in twl4030_bci_remove()
1151 twl4030_charger_enable_usb(bci, false); in twl4030_bci_remove()
1154 iio_channel_release(bci->channel_vac); in twl4030_bci_remove()
1156 device_remove_file(&bci->usb->dev, &dev_attr_max_current); in twl4030_bci_remove()
1157 device_remove_file(&bci->usb->dev, &dev_attr_mode); in twl4030_bci_remove()
1158 device_remove_file(&bci->ac->dev, &dev_attr_max_current); in twl4030_bci_remove()
1159 device_remove_file(&bci->ac->dev, &dev_attr_mode); in twl4030_bci_remove()