Lines Matching +full:usb +full:- +full:switch

1 // SPDX-License-Identifier: GPL-2.0-or-later
19 #include <linux/usb/phy.h>
29 struct power_supply *usb; member
48 val->intval = (psy == charger->supply_online) ? 1 : 0; in da9150_charger_supply_online()
59 /* Read processed value - mV units */ in da9150_charger_vbus_voltage_now()
60 ret = iio_read_channel_processed(charger->vbus_chan, &v_val); in da9150_charger_vbus_voltage_now()
65 val->intval = v_val * 1000; in da9150_charger_vbus_voltage_now()
75 /* Read processed value - mA units */ in da9150_charger_ibus_current_avg()
76 ret = iio_read_channel_processed(charger->ibus_chan, &i_val); in da9150_charger_ibus_current_avg()
81 val->intval = i_val * 1000; in da9150_charger_ibus_current_avg()
91 /* Read processed value - 0.001 degrees C units */ in da9150_charger_tjunc_temp()
92 ret = iio_read_channel_processed(charger->tjunc_chan, &t_val); in da9150_charger_tjunc_temp()
97 val->intval = t_val / 100; in da9150_charger_tjunc_temp()
113 struct da9150_charger *charger = dev_get_drvdata(psy->dev.parent); in da9150_charger_get_prop()
116 switch (psp) { in da9150_charger_get_prop()
130 ret = -EINVAL; in da9150_charger_get_prop()
144 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_H); in da9150_charger_battery_status()
148 val->intval = POWER_SUPPLY_STATUS_DISCHARGING; in da9150_charger_battery_status()
153 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_J); in da9150_charger_battery_status()
156 switch (reg & DA9150_CHG_STAT_MASK) { in da9150_charger_battery_status()
161 val->intval = POWER_SUPPLY_STATUS_CHARGING; in da9150_charger_battery_status()
168 val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; in da9150_charger_battery_status()
171 val->intval = POWER_SUPPLY_STATUS_FULL; in da9150_charger_battery_status()
174 val->intval = POWER_SUPPLY_STATUS_UNKNOWN; in da9150_charger_battery_status()
186 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_J); in da9150_charger_battery_health()
189 switch (reg & DA9150_CHG_TEMP_MASK) { in da9150_charger_battery_health()
191 val->intval = POWER_SUPPLY_HEALTH_COLD; in da9150_charger_battery_health()
194 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT; in da9150_charger_battery_health()
201 switch (reg & DA9150_CHG_STAT_MASK) { in da9150_charger_battery_health()
204 val->intval = POWER_SUPPLY_HEALTH_DEAD; in da9150_charger_battery_health()
207 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; in da9150_charger_battery_health()
210 val->intval = POWER_SUPPLY_HEALTH_GOOD; in da9150_charger_battery_health()
223 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_J); in da9150_charger_battery_present()
225 val->intval = 0; in da9150_charger_battery_present()
227 val->intval = 1; in da9150_charger_battery_present()
237 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_J); in da9150_charger_battery_charge_type()
239 switch (reg & DA9150_CHG_STAT_MASK) { in da9150_charger_battery_charge_type()
241 val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST; in da9150_charger_battery_charge_type()
246 val->intval = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; in da9150_charger_battery_charge_type()
249 val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE; in da9150_charger_battery_charge_type()
261 reg = da9150_reg_read(charger->da9150, DA9150_PPR_CHGCTRL_C); in da9150_charger_battery_voltage_min()
264 val->intval = ((reg & DA9150_CHG_VFAULT_MASK) * 50000) + 2500000; in da9150_charger_battery_voltage_min()
274 /* Read processed value - mV units */ in da9150_charger_battery_voltage_now()
275 ret = iio_read_channel_processed(charger->vbat_chan, &v_val); in da9150_charger_battery_voltage_now()
279 val->intval = v_val * 1000; in da9150_charger_battery_voltage_now()
289 reg = da9150_reg_read(charger->da9150, DA9150_PPR_CHGCTRL_D); in da9150_charger_battery_current_max()
292 val->intval = reg * 25000; in da9150_charger_battery_current_max()
302 reg = da9150_reg_read(charger->da9150, DA9150_PPR_CHGCTRL_B); in da9150_charger_battery_voltage_max()
305 val->intval = ((reg & DA9150_CHG_VBAT_MASK) * 25000) + 3650000; in da9150_charger_battery_voltage_max()
325 struct da9150_charger *charger = dev_get_drvdata(psy->dev.parent); in da9150_charger_battery_get_prop()
328 switch (psp) { in da9150_charger_battery_get_prop()
357 ret = -EINVAL; in da9150_charger_battery_get_prop()
368 power_supply_changed(charger->battery); in da9150_charger_chg_irq()
378 dev_crit(charger->dev, "TJunc over temperature!!!\n"); in da9150_charger_tjunc_irq()
379 power_supply_changed(charger->usb); in da9150_charger_tjunc_irq()
389 dev_crit(charger->dev, "VSYS under voltage!!!\n"); in da9150_charger_vfault_irq()
390 power_supply_changed(charger->usb); in da9150_charger_vfault_irq()
391 power_supply_changed(charger->battery); in da9150_charger_vfault_irq()
401 reg = da9150_reg_read(charger->da9150, DA9150_STATUS_H); in da9150_charger_vbus_irq()
404 switch (reg & DA9150_VBUS_STAT_MASK) { in da9150_charger_vbus_irq()
407 charger->supply_online = charger->battery; in da9150_charger_vbus_irq()
410 charger->supply_online = charger->usb; in da9150_charger_vbus_irq()
413 dev_warn(charger->dev, "Unknown VBUS state - reg = 0x%x\n", in da9150_charger_vbus_irq()
415 charger->supply_online = NULL; in da9150_charger_vbus_irq()
419 power_supply_changed(charger->usb); in da9150_charger_vbus_irq()
420 power_supply_changed(charger->battery); in da9150_charger_vbus_irq()
430 switch (charger->usb_event) { in da9150_charger_otg_work()
433 da9150_set_bits(charger->da9150, DA9150_PPR_BKCTRL_A, in da9150_charger_otg_work()
438 power_supply_changed(charger->usb); in da9150_charger_otg_work()
439 power_supply_changed(charger->battery); in da9150_charger_otg_work()
440 da9150_set_bits(charger->da9150, DA9150_PPR_BKCTRL_A, in da9150_charger_otg_work()
452 dev_dbg(charger->dev, "DA9150 OTG notify %lu\n", val); in da9150_charger_otg_ncb()
454 charger->usb_event = val; in da9150_charger_otg_ncb()
455 schedule_work(&charger->otg_work); in da9150_charger_otg_ncb()
464 struct device *dev = &pdev->dev; in da9150_charger_register_irq()
485 struct device *dev = &pdev->dev; in da9150_charger_unregister_irq()
499 .name = "da9150-usb",
507 .name = "da9150-battery",
516 struct device *dev = &pdev->dev; in da9150_charger_probe()
517 struct da9150 *da9150 = dev_get_drvdata(dev->parent); in da9150_charger_probe()
524 return -ENOMEM; in da9150_charger_probe()
527 charger->da9150 = da9150; in da9150_charger_probe()
528 charger->dev = dev; in da9150_charger_probe()
531 charger->ibus_chan = iio_channel_get(dev, "CHAN_IBUS"); in da9150_charger_probe()
532 if (IS_ERR(charger->ibus_chan)) { in da9150_charger_probe()
533 ret = PTR_ERR(charger->ibus_chan); in da9150_charger_probe()
537 charger->vbus_chan = iio_channel_get(dev, "CHAN_VBUS"); in da9150_charger_probe()
538 if (IS_ERR(charger->vbus_chan)) { in da9150_charger_probe()
539 ret = PTR_ERR(charger->vbus_chan); in da9150_charger_probe()
543 charger->tjunc_chan = iio_channel_get(dev, "CHAN_TJUNC"); in da9150_charger_probe()
544 if (IS_ERR(charger->tjunc_chan)) { in da9150_charger_probe()
545 ret = PTR_ERR(charger->tjunc_chan); in da9150_charger_probe()
549 charger->vbat_chan = iio_channel_get(dev, "CHAN_VBAT"); in da9150_charger_probe()
550 if (IS_ERR(charger->vbat_chan)) { in da9150_charger_probe()
551 ret = PTR_ERR(charger->vbat_chan); in da9150_charger_probe()
556 charger->usb = power_supply_register(dev, &usb_desc, NULL); in da9150_charger_probe()
557 if (IS_ERR(charger->usb)) { in da9150_charger_probe()
558 ret = PTR_ERR(charger->usb); in da9150_charger_probe()
562 charger->battery = power_supply_register(dev, &battery_desc, NULL); in da9150_charger_probe()
563 if (IS_ERR(charger->battery)) { in da9150_charger_probe()
564 ret = PTR_ERR(charger->battery); in da9150_charger_probe()
571 switch (reg & DA9150_VBUS_STAT_MASK) { in da9150_charger_probe()
574 charger->supply_online = charger->battery; in da9150_charger_probe()
577 charger->supply_online = charger->usb; in da9150_charger_probe()
580 dev_warn(dev, "Unknown VBUS state - reg = 0x%x\n", reg); in da9150_charger_probe()
581 charger->supply_online = NULL; in da9150_charger_probe()
586 charger->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); in da9150_charger_probe()
587 if (!IS_ERR_OR_NULL(charger->usb_phy)) { in da9150_charger_probe()
588 INIT_WORK(&charger->otg_work, da9150_charger_otg_work); in da9150_charger_probe()
589 charger->otg_nb.notifier_call = da9150_charger_otg_ncb; in da9150_charger_probe()
590 usb_register_notifier(charger->usb_phy, &charger->otg_nb); in da9150_charger_probe()
624 if (!IS_ERR_OR_NULL(charger->usb_phy)) in da9150_charger_probe()
625 usb_unregister_notifier(charger->usb_phy, &charger->otg_nb); in da9150_charger_probe()
627 power_supply_unregister(charger->usb); in da9150_charger_probe()
630 iio_channel_release(charger->vbat_chan); in da9150_charger_probe()
633 iio_channel_release(charger->tjunc_chan); in da9150_charger_probe()
636 iio_channel_release(charger->vbus_chan); in da9150_charger_probe()
639 iio_channel_release(charger->ibus_chan); in da9150_charger_probe()
663 if (!IS_ERR_OR_NULL(charger->usb_phy)) in da9150_charger_remove()
664 usb_unregister_notifier(charger->usb_phy, &charger->otg_nb); in da9150_charger_remove()
666 power_supply_unregister(charger->battery); in da9150_charger_remove()
667 power_supply_unregister(charger->usb); in da9150_charger_remove()
670 iio_channel_release(charger->ibus_chan); in da9150_charger_remove()
671 iio_channel_release(charger->vbus_chan); in da9150_charger_remove()
672 iio_channel_release(charger->tjunc_chan); in da9150_charger_remove()
673 iio_channel_release(charger->vbat_chan); in da9150_charger_remove()
680 .name = "da9150-charger",