Lines Matching +full:ac +full:- +full:charger
1 // SPDX-License-Identifier: GPL-2.0-only
4 * power supplies (AC/USB) connected to main and backup batteries,
5 * and optional builtin charger.
24 return IRQF_SHARED | (res->flags & IRQF_TRIGGER_MASK); in get_irq_flags()
48 static int new_ac_status = -1;
49 static int new_usb_status = -1;
50 static int ac_status = -1;
51 static int usb_status = -1;
59 if (psy->desc->type == POWER_SUPPLY_TYPE_MAINS) in pda_power_get_property()
60 val->intval = pdata->is_ac_online ? in pda_power_get_property()
61 pdata->is_ac_online() : 0; in pda_power_get_property()
63 val->intval = pdata->is_usb_online ? in pda_power_get_property()
64 pdata->is_usb_online() : 0; in pda_power_get_property()
67 return -EINVAL; in pda_power_get_property()
77 "main-battery",
78 "backup-battery",
82 .name = "ac",
99 if (pdata->is_ac_online) in update_status()
100 new_ac_status = !!pdata->is_ac_online(); in update_status()
102 if (pdata->is_usb_online) in update_status()
103 new_usb_status = !!pdata->is_usb_online(); in update_status()
109 int max_uA = pdata->ac_max_uA; in update_charger()
111 if (pdata->set_charge) { in update_charger()
113 dev_dbg(dev, "charger on (AC)\n"); in update_charger()
114 pdata->set_charge(PDA_POWER_CHARGE_AC); in update_charger()
116 dev_dbg(dev, "charger on (USB)\n"); in update_charger()
117 pdata->set_charge(PDA_POWER_CHARGE_USB); in update_charger()
119 dev_dbg(dev, "charger off\n"); in update_charger()
120 pdata->set_charge(0); in update_charger()
126 dev_dbg(dev, "charger on (AC)\n"); in update_charger()
132 dev_dbg(dev, "charger off\n"); in update_charger()
158 * Okay, charger set. Now wait a bit before notifying supplicants, in psy_changed()
163 msecs_to_jiffies(pdata->wait_for_charger)); in psy_changed()
182 * Wait a bit before reading ac/usb line status and setting charger, in power_changed_isr()
183 * because ac/usb status readings may lag from irq. in power_changed_isr()
187 msecs_to_jiffies(pdata->wait_for_status)); in power_changed_isr()
215 msecs_to_jiffies(pdata->polling_interval)); in polling_work_func()
221 return (transceiver->last_event == USB_EVENT_VBUS || in otg_is_usb_online()
222 transceiver->last_event == USB_EVENT_ENUMERATED); in otg_is_usb_online()
227 return (transceiver->last_event == USB_EVENT_CHARGER); in otg_is_ac_online()
250 * Wait a bit before reading ac/usb line status and setting charger, in otg_handle_notification()
251 * because ac/usb status readings may lag from irq. in otg_handle_notification()
255 msecs_to_jiffies(pdata->wait_for_status)); in otg_handle_notification()
266 dev = &pdev->dev; in pda_power_probe()
268 if (pdev->id != -1) { in pda_power_probe()
270 "pda_powers; use id = -1\n"); in pda_power_probe()
271 ret = -EINVAL; in pda_power_probe()
275 pdata = pdev->dev.platform_data; in pda_power_probe()
277 if (pdata->init) { in pda_power_probe()
278 ret = pdata->init(dev); in pda_power_probe()
292 if (!pdata->wait_for_status) in pda_power_probe()
293 pdata->wait_for_status = 500; in pda_power_probe()
295 if (!pdata->wait_for_charger) in pda_power_probe()
296 pdata->wait_for_charger = 500; in pda_power_probe()
298 if (!pdata->polling_interval) in pda_power_probe()
299 pdata->polling_interval = 2000; in pda_power_probe()
301 if (!pdata->ac_max_uA) in pda_power_probe()
302 pdata->ac_max_uA = 500000; in pda_power_probe()
307 ac_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ac"); in pda_power_probe()
310 if (pdata->supplied_to) { in pda_power_probe()
311 psy_cfg.supplied_to = pdata->supplied_to; in pda_power_probe()
312 psy_cfg.num_supplicants = pdata->num_supplicants; in pda_power_probe()
321 if (!pdata->is_usb_online) in pda_power_probe()
322 pdata->is_usb_online = otg_is_usb_online; in pda_power_probe()
323 if (!pdata->is_ac_online) in pda_power_probe()
324 pdata->is_ac_online = otg_is_ac_online; in pda_power_probe()
328 if (pdata->is_ac_online) { in pda_power_probe()
329 pda_psy_ac = power_supply_register(&pdev->dev, in pda_power_probe()
339 ret = request_irq(ac_irq->start, power_changed_isr, in pda_power_probe()
340 get_irq_flags(ac_irq), ac_irq->name, in pda_power_probe()
343 dev_err(dev, "request ac irq failed\n"); in pda_power_probe()
351 if (pdata->is_usb_online) { in pda_power_probe()
352 pda_psy_usb = power_supply_register(&pdev->dev, in pda_power_probe()
363 ret = request_irq(usb_irq->start, power_changed_isr, in pda_power_probe()
365 usb_irq->name, pda_psy_usb); in pda_power_probe()
376 if (!IS_ERR_OR_NULL(transceiver) && pdata->use_otg_notifier) { in pda_power_probe()
392 msecs_to_jiffies(pdata->polling_interval)); in pda_power_probe()
396 device_init_wakeup(&pdev->dev, 1); in pda_power_probe()
402 if (pdata->is_usb_online && usb_irq) in pda_power_probe()
403 free_irq(usb_irq->start, pda_psy_usb); in pda_power_probe()
406 if (pdata->is_usb_online) in pda_power_probe()
409 if (pdata->is_ac_online && ac_irq) in pda_power_probe()
410 free_irq(ac_irq->start, pda_psy_ac); in pda_power_probe()
416 if (pdata->is_ac_online) in pda_power_probe()
423 if (pdata->exit) in pda_power_probe()
424 pdata->exit(dev); in pda_power_probe()
433 if (!IS_ERR_OR_NULL(transceiver) && pdata->use_otg_notifier) in pda_power_remove()
436 if (pdata->is_usb_online && usb_irq) in pda_power_remove()
437 free_irq(usb_irq->start, pda_psy_usb); in pda_power_remove()
438 if (pdata->is_ac_online && ac_irq) in pda_power_remove()
439 free_irq(ac_irq->start, pda_psy_ac); in pda_power_remove()
446 if (pdata->is_usb_online) in pda_power_remove()
448 if (pdata->is_ac_online) in pda_power_remove()
458 if (pdata->exit) in pda_power_remove()
459 pdata->exit(dev); in pda_power_remove()
470 if (pdata->suspend) { in pda_power_suspend()
471 int ret = pdata->suspend(state); in pda_power_suspend()
477 if (device_may_wakeup(&pdev->dev)) { in pda_power_suspend()
479 ac_wakeup_enabled = !enable_irq_wake(ac_irq->start); in pda_power_suspend()
481 usb_wakeup_enabled = !enable_irq_wake(usb_irq->start); in pda_power_suspend()
489 if (device_may_wakeup(&pdev->dev)) { in pda_power_resume()
491 disable_irq_wake(usb_irq->start); in pda_power_resume()
493 disable_irq_wake(ac_irq->start); in pda_power_resume()
496 if (pdata->resume) in pda_power_resume()
497 return pdata->resume(); in pda_power_resume()
508 .name = "pda-power",
520 MODULE_ALIAS("platform:pda-power");