Lines Matching +full:ac +full:- +full:charger
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Power supply driver for ST Ericsson pm2xxx_charger charger
21 #include <linux/mfd/abx500/ab8500-bm.h>
109 if (!pm2->ac.charger_connected && gpio_is_valid(pm2->lpn_pin)) { in set_lpn_pin()
110 gpio_set_value(pm2->lpn_pin, 1); in set_lpn_pin()
117 if (!pm2->ac.charger_connected && gpio_is_valid(pm2->lpn_pin)) in clear_lpn_pin()
118 gpio_set_value(pm2->lpn_pin, 0); in clear_lpn_pin()
126 pm_runtime_get_sync(pm2->dev); in pm2xxx_reg_read()
128 ret = i2c_smbus_read_i2c_block_data(pm2->config.pm2xxx_i2c, reg, in pm2xxx_reg_read()
131 dev_err(pm2->dev, "Error reading register at 0x%x\n", reg); in pm2xxx_reg_read()
135 pm_runtime_put_sync(pm2->dev); in pm2xxx_reg_read()
145 pm_runtime_get_sync(pm2->dev); in pm2xxx_reg_write()
147 ret = i2c_smbus_write_i2c_block_data(pm2->config.pm2xxx_i2c, reg, in pm2xxx_reg_write()
150 dev_err(pm2->dev, "Error writing register at 0x%x\n", reg); in pm2xxx_reg_write()
154 pm_runtime_put_sync(pm2->dev); in pm2xxx_reg_write()
177 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charging_disable_mngt()
185 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charging_disable_mngt()
194 queue_work(pm2->charger_wq, &pm2->check_main_thermal_prot_work); in pm2xxx_charger_batt_therm_mngt()
202 queue_work(pm2->charger_wq, &pm2->check_main_thermal_prot_work); in pm2xxx_charger_die_therm_mngt()
209 dev_err(pm2->dev, "Overvoltage detected\n"); in pm2xxx_charger_ovv_mngt()
210 pm2->flags.ovv = true; in pm2xxx_charger_ovv_mngt()
211 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_ovv_mngt()
214 queue_delayed_work(pm2->charger_wq, &pm2->check_hw_failure_work, 0); in pm2xxx_charger_ovv_mngt()
221 dev_dbg(pm2->dev , "20 minutes watchdog expired\n"); in pm2xxx_charger_wd_exp_mngt()
223 pm2->ac.wd_expired = true; in pm2xxx_charger_wd_exp_mngt()
224 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_wd_exp_mngt()
235 dev_dbg(pm2->dev, "VBAT grows above VBAT_LOW level\n"); in pm2xxx_charger_vbat_lsig_mngt()
240 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charger_vbat_lsig_mngt()
246 dev_dbg(pm2->dev, "VBAT drops below VBAT_LOW level\n"); in pm2xxx_charger_vbat_lsig_mngt()
251 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charger_vbat_lsig_mngt()
257 dev_err(pm2->dev, "Unknown VBAT level\n"); in pm2xxx_charger_vbat_lsig_mngt()
265 dev_dbg(pm2->dev, "battery disconnected\n"); in pm2xxx_charger_bat_disc_mngt()
277 dev_err(pm2->dev, "Charger detection failed\n"); in pm2xxx_charger_detection()
295 * synchronously, we have the check if the main charger is in pm2xxx_charger_itv_pwr_plug_mngt()
301 pm2->ac.charger_connected = 1; in pm2xxx_charger_itv_pwr_plug_mngt()
302 pm2->ac_conn = true; in pm2xxx_charger_itv_pwr_plug_mngt()
303 queue_work(pm2->charger_wq, &pm2->ac_work); in pm2xxx_charger_itv_pwr_plug_mngt()
313 pm2->ac.charger_connected = 0; in pm2xxx_charger_itv_pwr_unplug_mngt()
314 queue_work(pm2->charger_wq, &pm2->ac_work); in pm2xxx_charger_itv_pwr_unplug_mngt()
354 dev_dbg(pm2->dev , "Main charger plugged\n"); in pm2_int_reg1()
361 dev_dbg(pm2->dev , "Main charger unplugged\n"); in pm2_int_reg1()
380 dev_dbg(pm2->dev, in pm2_int_reg2()
393 dev_dbg(pm2->dev , in pm2_int_reg3()
398 dev_dbg(pm2->dev, in pm2_int_reg3()
403 dev_dbg(pm2->dev , "battery fully detected\n"); in pm2_int_reg3()
407 dev_dbg(pm2->dev, "CV phase enter with 0.5C charging\n"); in pm2_int_reg3()
411 pm2->failure_case = VPWR_OVV; in pm2_int_reg3()
414 dev_dbg(pm2->dev, "VPWR/VSYSTEM overvoltage detected\n"); in pm2_int_reg3()
422 dev_dbg(pm2->dev, "BTEMP is too Low/High\n"); in pm2_int_reg3()
434 pm2->failure_case = VSYSTEM_OVV; in pm2_int_reg4()
437 dev_dbg(pm2->dev, "VSYSTEM overvoltage detected\n"); in pm2_int_reg4()
444 dev_dbg(pm2->dev, "BTEMP die temperature is too Low/High\n"); in pm2_int_reg4()
461 dev_dbg(pm2->dev, "VMPWR drop to VBAT level\n"); in pm2_int_reg5()
468 dev_dbg(pm2->dev, "Falling/Rising edge on WPWR1/2\n"); in pm2_int_reg5()
477 struct pm2xxx_interrupts *interrupt = pm2->pm2_int; in pm2xxx_irq_int()
481 pm_runtime_get_sync(pm2->dev); in pm2xxx_irq_int()
487 &(interrupt->reg[i])); in pm2xxx_irq_int()
489 if (interrupt->reg[i] > 0) in pm2xxx_irq_int()
490 interrupt->handler[i](pm2, interrupt->reg[i]); in pm2xxx_irq_int()
492 } while (gpio_get_value(pm2->pdata->gpio_irq_number) == 0); in pm2xxx_irq_int()
494 pm_runtime_mark_last_busy(pm2->dev); in pm2xxx_irq_int()
495 pm_runtime_put_autosuspend(pm2->dev); in pm2xxx_irq_int()
505 if (pm2->ac.charger_connected && pm2->ac.charger_online) { in pm2xxx_charger_get_ac_cv()
509 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_get_ac_cv()
531 return (i - 1); in pm2xxx_current_to_regval()
534 i = ARRAY_SIZE(pm2xxx_charger_current_map) - 1; in pm2xxx_current_to_regval()
538 return -EINVAL; in pm2xxx_current_to_regval()
550 return i - 1; in pm2xxx_voltage_to_regval()
553 i = ARRAY_SIZE(pm2xxx_charger_voltage_map) - 1; in pm2xxx_voltage_to_regval()
557 return -EINVAL; in pm2xxx_voltage_to_regval()
560 static int pm2xxx_charger_update_charger_current(struct ux500_charger *charger, in pm2xxx_charger_update_charger_current() argument
568 if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS) in pm2xxx_charger_update_charger_current()
569 pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_update_charger_current()
571 return -ENXIO; in pm2xxx_charger_update_charger_current()
575 dev_err(pm2->dev, in pm2xxx_charger_update_charger_current()
576 "Charger current too high, charging not started\n"); in pm2xxx_charger_update_charger_current()
577 return -ENXIO; in pm2xxx_charger_update_charger_current()
586 dev_err(pm2->dev, in pm2xxx_charger_update_charger_current()
591 dev_err(pm2->dev, "%s read failed\n", __func__); in pm2xxx_charger_update_charger_current()
606 if (pm2->flags.mainextchnotok) in pm2xxx_charger_ac_get_property()
607 val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; in pm2xxx_charger_ac_get_property()
608 else if (pm2->ac.wd_expired) in pm2xxx_charger_ac_get_property()
609 val->intval = POWER_SUPPLY_HEALTH_DEAD; in pm2xxx_charger_ac_get_property()
610 else if (pm2->flags.main_thermal_prot) in pm2xxx_charger_ac_get_property()
611 val->intval = POWER_SUPPLY_HEALTH_OVERHEAT; in pm2xxx_charger_ac_get_property()
612 else if (pm2->flags.ovv) in pm2xxx_charger_ac_get_property()
613 val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE; in pm2xxx_charger_ac_get_property()
615 val->intval = POWER_SUPPLY_HEALTH_GOOD; in pm2xxx_charger_ac_get_property()
618 val->intval = pm2->ac.charger_online; in pm2xxx_charger_ac_get_property()
621 val->intval = pm2->ac.charger_connected; in pm2xxx_charger_ac_get_property()
624 pm2->ac.cv_active = pm2xxx_charger_get_ac_cv(pm2); in pm2xxx_charger_ac_get_property()
625 val->intval = pm2->ac.cv_active; in pm2xxx_charger_ac_get_property()
628 return -EINVAL; in pm2xxx_charger_ac_get_property()
668 /* float voltage charger level = 4.2V */ in pm2xxx_charging_init()
678 /* Input charger level of over voltage = 10V */ in pm2xxx_charging_init()
684 /* Input charger drop */ in pm2xxx_charging_init()
699 static int pm2xxx_charger_ac_en(struct ux500_charger *charger, in pm2xxx_charger_ac_en() argument
707 struct pm2xxx_charger *pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_ac_en()
710 if (!pm2->ac.charger_connected) { in pm2xxx_charger_ac_en()
711 dev_dbg(pm2->dev, "AC charger not connected\n"); in pm2xxx_charger_ac_en()
712 return -ENXIO; in pm2xxx_charger_ac_en()
715 dev_dbg(pm2->dev, "Enable AC: %dmV %dmA\n", vset, iset); in pm2xxx_charger_ac_en()
716 if (!pm2->vddadc_en_ac) { in pm2xxx_charger_ac_en()
717 ret = regulator_enable(pm2->regu); in pm2xxx_charger_ac_en()
719 dev_warn(pm2->dev, in pm2xxx_charger_ac_en()
722 pm2->vddadc_en_ac = true; in pm2xxx_charger_ac_en()
727 dev_err(pm2->dev, "%s charging init failed\n", in pm2xxx_charger_ac_en()
736 dev_err(pm2->dev, in pm2xxx_charger_ac_en()
737 "Charger voltage or current too high, " in pm2xxx_charger_ac_en()
739 return -ENXIO; in pm2xxx_charger_ac_en()
744 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_ac_en()
751 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charger_ac_en()
757 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_ac_en()
764 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charger_ac_en()
768 if (!pm2->bat->enable_overshoot) { in pm2xxx_charger_ac_en()
771 dev_err(pm2->dev, "%s pm2xxx read failed\n", in pm2xxx_charger_ac_en()
778 dev_err(pm2->dev, "%s pm2xxx write failed\n", in pm2xxx_charger_ac_en()
786 dev_err(pm2->dev, "Failed to enable" in pm2xxx_charger_ac_en()
787 "pm2xxx ac charger\n"); in pm2xxx_charger_ac_en()
791 pm2->ac.charger_online = 1; in pm2xxx_charger_ac_en()
793 pm2->ac.charger_online = 0; in pm2xxx_charger_ac_en()
794 pm2->ac.wd_expired = false; in pm2xxx_charger_ac_en()
797 if (pm2->vddadc_en_ac) { in pm2xxx_charger_ac_en()
798 regulator_disable(pm2->regu); in pm2xxx_charger_ac_en()
799 pm2->vddadc_en_ac = false; in pm2xxx_charger_ac_en()
804 dev_err(pm2->dev, "failed to disable" in pm2xxx_charger_ac_en()
805 "pm2xxx ac charger\n"); in pm2xxx_charger_ac_en()
809 dev_dbg(pm2->dev, "PM2301: " "Disabled AC charging\n"); in pm2xxx_charger_ac_en()
811 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_ac_en()
817 static int pm2xxx_charger_watchdog_kick(struct ux500_charger *charger) in pm2xxx_charger_watchdog_kick() argument
822 if (charger->psy->desc->type == POWER_SUPPLY_TYPE_MAINS) in pm2xxx_charger_watchdog_kick()
823 pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_watchdog_kick()
825 return -ENXIO; in pm2xxx_charger_watchdog_kick()
829 dev_err(pm2->dev, "Failed to kick WD!\n"); in pm2xxx_charger_watchdog_kick()
840 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_ac_work()
841 sysfs_notify(&pm2->ac_chg.psy->dev.kobj, NULL, "present"); in pm2xxx_charger_ac_work()
851 if (pm2->flags.ovv) { in pm2xxx_charger_check_hw_failure_work()
856 pm2->flags.ovv = false; in pm2xxx_charger_check_hw_failure_work()
857 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_check_hw_failure_work()
862 if (pm2->flags.ovv) { in pm2xxx_charger_check_hw_failure_work()
863 queue_delayed_work(pm2->charger_wq, in pm2xxx_charger_check_hw_failure_work()
864 &pm2->check_hw_failure_work, round_jiffies(HZ)); in pm2xxx_charger_check_hw_failure_work()
880 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_check_main_thermal_prot_work()
885 pm2->flags.main_thermal_prot = true; in pm2xxx_charger_check_main_thermal_prot_work()
888 pm2->flags.main_thermal_prot = false; in pm2xxx_charger_check_main_thermal_prot_work()
890 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_charger_check_main_thermal_prot_work()
915 if (pm2->flags.ovv) in pm2xxx_wall_charger_resume()
916 queue_delayed_work(pm2->charger_wq, in pm2xxx_wall_charger_resume()
917 &pm2->check_hw_failure_work, 0); in pm2xxx_wall_charger_resume()
931 if (delayed_work_pending(&pm2->check_hw_failure_work)) in pm2xxx_wall_charger_suspend()
932 cancel_delayed_work(&pm2->check_hw_failure_work); in pm2xxx_wall_charger_suspend()
934 flush_work(&pm2->ac_work); in pm2xxx_wall_charger_suspend()
935 flush_work(&pm2->check_main_thermal_prot_work); in pm2xxx_wall_charger_suspend()
958 if (gpio_is_valid(pm2->lpn_pin) && gpio_get_value(pm2->lpn_pin) == 0) in pm2xxx_runtime_resume()
973 struct pm2xxx_platform_data *pl_data = i2c_client->dev.platform_data; in pm2xxx_wall_charger_probe()
981 dev_err(&i2c_client->dev, "No platform data supplied\n"); in pm2xxx_wall_charger_probe()
982 return -EINVAL; in pm2xxx_wall_charger_probe()
987 dev_err(&i2c_client->dev, "pm2xxx_charger allocation failed\n"); in pm2xxx_wall_charger_probe()
988 return -ENOMEM; in pm2xxx_wall_charger_probe()
992 pm2->dev = &i2c_client->dev; in pm2xxx_wall_charger_probe()
994 pm2->pm2_int = &pm2xxx_int; in pm2xxx_wall_charger_probe()
996 /* get charger spcific platform data */ in pm2xxx_wall_charger_probe()
997 if (!pl_data->wall_charger) { in pm2xxx_wall_charger_probe()
998 dev_err(pm2->dev, "no charger platform data supplied\n"); in pm2xxx_wall_charger_probe()
999 ret = -EINVAL; in pm2xxx_wall_charger_probe()
1003 pm2->pdata = pl_data->wall_charger; in pm2xxx_wall_charger_probe()
1006 if (!pl_data->battery) { in pm2xxx_wall_charger_probe()
1007 dev_err(pm2->dev, "no battery platform data supplied\n"); in pm2xxx_wall_charger_probe()
1008 ret = -EINVAL; in pm2xxx_wall_charger_probe()
1012 pm2->bat = pl_data->battery; in pm2xxx_wall_charger_probe()
1014 if (!i2c_check_functionality(i2c_client->adapter, in pm2xxx_wall_charger_probe()
1017 ret = -ENODEV; in pm2xxx_wall_charger_probe()
1018 dev_info(pm2->dev, "pm2301 i2c_check_functionality failed\n"); in pm2xxx_wall_charger_probe()
1022 pm2->config.pm2xxx_i2c = i2c_client; in pm2xxx_wall_charger_probe()
1023 pm2->config.pm2xxx_id = (struct i2c_device_id *) id; in pm2xxx_wall_charger_probe()
1026 /* AC supply */ in pm2xxx_wall_charger_probe()
1028 pm2->ac_chg_desc.name = pm2->pdata->label; in pm2xxx_wall_charger_probe()
1029 pm2->ac_chg_desc.type = POWER_SUPPLY_TYPE_MAINS; in pm2xxx_wall_charger_probe()
1030 pm2->ac_chg_desc.properties = pm2xxx_charger_ac_props; in pm2xxx_wall_charger_probe()
1031 pm2->ac_chg_desc.num_properties = ARRAY_SIZE(pm2xxx_charger_ac_props); in pm2xxx_wall_charger_probe()
1032 pm2->ac_chg_desc.get_property = pm2xxx_charger_ac_get_property; in pm2xxx_wall_charger_probe()
1034 psy_cfg.supplied_to = pm2->pdata->supplied_to; in pm2xxx_wall_charger_probe()
1035 psy_cfg.num_supplicants = pm2->pdata->num_supplicants; in pm2xxx_wall_charger_probe()
1036 /* pm2xxx_charger sub-class */ in pm2xxx_wall_charger_probe()
1037 pm2->ac_chg.ops.enable = &pm2xxx_charger_ac_en; in pm2xxx_wall_charger_probe()
1038 pm2->ac_chg.ops.kick_wd = &pm2xxx_charger_watchdog_kick; in pm2xxx_wall_charger_probe()
1039 pm2->ac_chg.ops.update_curr = &pm2xxx_charger_update_charger_current; in pm2xxx_wall_charger_probe()
1040 pm2->ac_chg.max_out_volt = pm2xxx_charger_voltage_map[ in pm2xxx_wall_charger_probe()
1041 ARRAY_SIZE(pm2xxx_charger_voltage_map) - 1]; in pm2xxx_wall_charger_probe()
1042 pm2->ac_chg.max_out_curr = pm2xxx_charger_current_map[ in pm2xxx_wall_charger_probe()
1043 ARRAY_SIZE(pm2xxx_charger_current_map) - 1]; in pm2xxx_wall_charger_probe()
1044 pm2->ac_chg.wdt_refresh = WD_KICK_INTERVAL; in pm2xxx_wall_charger_probe()
1045 pm2->ac_chg.enabled = true; in pm2xxx_wall_charger_probe()
1046 pm2->ac_chg.external = true; in pm2xxx_wall_charger_probe()
1048 /* Create a work queue for the charger */ in pm2xxx_wall_charger_probe()
1049 pm2->charger_wq = alloc_ordered_workqueue("pm2xxx_charger_wq", in pm2xxx_wall_charger_probe()
1051 if (pm2->charger_wq == NULL) { in pm2xxx_wall_charger_probe()
1052 ret = -ENOMEM; in pm2xxx_wall_charger_probe()
1053 dev_err(pm2->dev, "failed to create work queue\n"); in pm2xxx_wall_charger_probe()
1057 /* Init work for charger detection */ in pm2xxx_wall_charger_probe()
1058 INIT_WORK(&pm2->ac_work, pm2xxx_charger_ac_work); in pm2xxx_wall_charger_probe()
1061 INIT_WORK(&pm2->check_main_thermal_prot_work, in pm2xxx_wall_charger_probe()
1065 INIT_DEFERRABLE_WORK(&pm2->check_hw_failure_work, in pm2xxx_wall_charger_probe()
1070 * is a charger connected to avoid erroneous BTEMP_HIGH/LOW in pm2xxx_wall_charger_probe()
1073 pm2->regu = regulator_get(pm2->dev, "vddadc"); in pm2xxx_wall_charger_probe()
1074 if (IS_ERR(pm2->regu)) { in pm2xxx_wall_charger_probe()
1075 ret = PTR_ERR(pm2->regu); in pm2xxx_wall_charger_probe()
1076 dev_err(pm2->dev, "failed to get vddadc regulator\n"); in pm2xxx_wall_charger_probe()
1080 /* Register AC charger class */ in pm2xxx_wall_charger_probe()
1081 pm2->ac_chg.psy = power_supply_register(pm2->dev, &pm2->ac_chg_desc, in pm2xxx_wall_charger_probe()
1083 if (IS_ERR(pm2->ac_chg.psy)) { in pm2xxx_wall_charger_probe()
1084 dev_err(pm2->dev, "failed to register AC charger\n"); in pm2xxx_wall_charger_probe()
1085 ret = PTR_ERR(pm2->ac_chg.psy); in pm2xxx_wall_charger_probe()
1090 ret = request_threaded_irq(gpio_to_irq(pm2->pdata->gpio_irq_number), in pm2xxx_wall_charger_probe()
1093 pm2->pdata->irq_type | IRQF_ONESHOT, in pm2xxx_wall_charger_probe()
1097 dev_err(pm2->dev, "failed to request %s IRQ %d: %d\n", in pm2xxx_wall_charger_probe()
1099 gpio_to_irq(pm2->pdata->gpio_irq_number), ret); in pm2xxx_wall_charger_probe()
1103 ret = pm_runtime_set_active(pm2->dev); in pm2xxx_wall_charger_probe()
1105 dev_err(pm2->dev, "set active Error\n"); in pm2xxx_wall_charger_probe()
1107 pm_runtime_enable(pm2->dev); in pm2xxx_wall_charger_probe()
1108 pm_runtime_set_autosuspend_delay(pm2->dev, PM2XXX_AUTOSUSPEND_DELAY); in pm2xxx_wall_charger_probe()
1109 pm_runtime_use_autosuspend(pm2->dev); in pm2xxx_wall_charger_probe()
1110 pm_runtime_resume(pm2->dev); in pm2xxx_wall_charger_probe()
1113 ret = enable_irq_wake(gpio_to_irq(pm2->pdata->gpio_irq_number)); in pm2xxx_wall_charger_probe()
1115 dev_err(pm2->dev, "failed to set irq wake\n"); in pm2xxx_wall_charger_probe()
1119 mutex_init(&pm2->lock); in pm2xxx_wall_charger_probe()
1121 if (gpio_is_valid(pm2->pdata->lpn_gpio)) { in pm2xxx_wall_charger_probe()
1123 pm2->lpn_pin = pm2->pdata->lpn_gpio; in pm2xxx_wall_charger_probe()
1126 * Charger detection mechanism requires pulling up the LPN pin in pm2xxx_wall_charger_probe()
1127 * while i2c communication if Charger is not connected in pm2xxx_wall_charger_probe()
1130 ret = gpio_request(pm2->lpn_pin, "pm2301_lpm_gpio"); in pm2xxx_wall_charger_probe()
1133 dev_err(pm2->dev, "pm2301_lpm_gpio request failed\n"); in pm2xxx_wall_charger_probe()
1136 ret = gpio_direction_output(pm2->lpn_pin, 0); in pm2xxx_wall_charger_probe()
1138 dev_err(pm2->dev, "pm2301_lpm_gpio direction failed\n"); in pm2xxx_wall_charger_probe()
1153 pm2->ac.charger_connected = 1; in pm2xxx_wall_charger_probe()
1156 pm2->ac_conn = true; in pm2xxx_wall_charger_probe()
1157 power_supply_changed(pm2->ac_chg.psy); in pm2xxx_wall_charger_probe()
1158 sysfs_notify(&pm2->ac_chg.psy->dev.kobj, NULL, "present"); in pm2xxx_wall_charger_probe()
1164 if (gpio_is_valid(pm2->lpn_pin)) in pm2xxx_wall_charger_probe()
1165 gpio_free(pm2->lpn_pin); in pm2xxx_wall_charger_probe()
1167 disable_irq_wake(gpio_to_irq(pm2->pdata->gpio_irq_number)); in pm2xxx_wall_charger_probe()
1170 free_irq(gpio_to_irq(pm2->pdata->gpio_irq_number), pm2); in pm2xxx_wall_charger_probe()
1173 power_supply_unregister(pm2->ac_chg.psy); in pm2xxx_wall_charger_probe()
1176 regulator_put(pm2->regu); in pm2xxx_wall_charger_probe()
1178 destroy_workqueue(pm2->charger_wq); in pm2xxx_wall_charger_probe()
1190 pm_runtime_disable(pm2->dev); in pm2xxx_wall_charger_remove()
1191 /* Disable AC charging */ in pm2xxx_wall_charger_remove()
1192 pm2xxx_charger_ac_en(&pm2->ac_chg, false, 0, 0); in pm2xxx_wall_charger_remove()
1195 disable_irq_wake(gpio_to_irq(pm2->pdata->gpio_irq_number)); in pm2xxx_wall_charger_remove()
1198 free_irq(gpio_to_irq(pm2->pdata->gpio_irq_number), pm2); in pm2xxx_wall_charger_remove()
1201 destroy_workqueue(pm2->charger_wq); in pm2xxx_wall_charger_remove()
1206 regulator_put(pm2->regu); in pm2xxx_wall_charger_remove()
1208 power_supply_unregister(pm2->ac_chg.psy); in pm2xxx_wall_charger_remove()
1210 if (gpio_is_valid(pm2->lpn_pin)) in pm2xxx_wall_charger_remove()
1211 gpio_free(pm2->lpn_pin); in pm2xxx_wall_charger_remove()
1229 .name = "pm2xxx-wall_charger",
1250 MODULE_DESCRIPTION("PM2xxx charger management driver");