Lines Matching refs:pm2
107 static void set_lpn_pin(struct pm2xxx_charger *pm2) in set_lpn_pin() argument
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()
115 static void clear_lpn_pin(struct pm2xxx_charger *pm2) in clear_lpn_pin() argument
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()
121 static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val) in pm2xxx_reg_read() argument
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()
140 static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val) in pm2xxx_reg_write() argument
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()
159 static int pm2xxx_charging_enable_mngt(struct pm2xxx_charger *pm2) in pm2xxx_charging_enable_mngt() argument
164 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG2, in pm2xxx_charging_enable_mngt()
170 static int pm2xxx_charging_disable_mngt(struct pm2xxx_charger *pm2) in pm2xxx_charging_disable_mngt() argument
175 ret = pm2xxx_reg_write(pm2, PM2XXX_SW_CTRL_REG, PM2XXX_SWCTRL_HW); in pm2xxx_charging_disable_mngt()
177 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charging_disable_mngt()
182 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG2, in pm2xxx_charging_disable_mngt()
185 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charging_disable_mngt()
192 static int pm2xxx_charger_batt_therm_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_batt_therm_mngt() argument
194 queue_work(pm2->charger_wq, &pm2->check_main_thermal_prot_work); in pm2xxx_charger_batt_therm_mngt()
200 static int pm2xxx_charger_die_therm_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_die_therm_mngt() argument
202 queue_work(pm2->charger_wq, &pm2->check_main_thermal_prot_work); in pm2xxx_charger_die_therm_mngt()
207 static int pm2xxx_charger_ovv_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_ovv_mngt() argument
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()
219 static int pm2xxx_charger_wd_exp_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_wd_exp_mngt() argument
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()
229 static int pm2xxx_charger_vbat_lsig_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_vbat_lsig_mngt() argument
235 dev_dbg(pm2->dev, "VBAT grows above VBAT_LOW level\n"); in pm2xxx_charger_vbat_lsig_mngt()
237 ret = pm2xxx_reg_write(pm2, PM2XXX_SW_CTRL_REG, 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()
248 ret = pm2xxx_reg_write(pm2, PM2XXX_SW_CTRL_REG, 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()
263 static int pm2xxx_charger_bat_disc_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_bat_disc_mngt() argument
265 dev_dbg(pm2->dev, "battery disconnected\n"); in pm2xxx_charger_bat_disc_mngt()
270 static int pm2xxx_charger_detection(struct pm2xxx_charger *pm2, u8 *val) in pm2xxx_charger_detection() argument
274 ret = pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT2, val); in pm2xxx_charger_detection()
277 dev_err(pm2->dev, "Charger detection failed\n"); in pm2xxx_charger_detection()
287 static int pm2xxx_charger_itv_pwr_plug_mngt(struct pm2xxx_charger *pm2, int val) in pm2xxx_charger_itv_pwr_plug_mngt() argument
298 ret = pm2xxx_charger_detection(pm2, &read_val); 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()
310 static int pm2xxx_charger_itv_pwr_unplug_mngt(struct pm2xxx_charger *pm2, in pm2xxx_charger_itv_pwr_unplug_mngt() argument
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()
321 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg0() local
325 ret = pm2xxx_charger_vbat_lsig_mngt(pm2, in pm2_int_reg0()
332 ret = pm2xxx_charger_vbat_lsig_mngt(pm2, in pm2_int_reg0()
339 ret = pm2xxx_charger_bat_disc_mngt(pm2, in pm2_int_reg0()
350 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg1() local
354 dev_dbg(pm2->dev , "Main charger plugged\n"); in pm2_int_reg1()
355 ret = pm2xxx_charger_itv_pwr_plug_mngt(pm2, val & in pm2_int_reg1()
361 dev_dbg(pm2->dev , "Main charger unplugged\n"); in pm2_int_reg1()
362 ret = pm2xxx_charger_itv_pwr_unplug_mngt(pm2, val & in pm2_int_reg1()
372 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg2() local
376 ret = pm2xxx_charger_wd_exp_mngt(pm2, val); in pm2_int_reg2()
380 dev_dbg(pm2->dev, in pm2_int_reg2()
389 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg3() local
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()
412 ret = pm2xxx_charger_ovv_mngt(pm2, val & in pm2_int_reg3()
414 dev_dbg(pm2->dev, "VPWR/VSYSTEM overvoltage detected\n"); in pm2_int_reg3()
419 ret = pm2xxx_charger_batt_therm_mngt(pm2, val & in pm2_int_reg3()
422 dev_dbg(pm2->dev, "BTEMP is too Low/High\n"); in pm2_int_reg3()
430 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg4() local
434 pm2->failure_case = VSYSTEM_OVV; in pm2_int_reg4()
435 ret = pm2xxx_charger_ovv_mngt(pm2, val & 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()
445 ret = pm2xxx_charger_die_therm_mngt(pm2, val & in pm2_int_reg4()
457 struct pm2xxx_charger *pm2 = pm2_data; in pm2_int_reg5() local
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()
476 struct pm2xxx_charger *pm2 = data; in pm2xxx_irq_int() local
477 struct pm2xxx_interrupts *interrupt = pm2->pm2_int; in pm2xxx_irq_int()
481 pm_runtime_get_sync(pm2->dev); in pm2xxx_irq_int()
485 pm2xxx_reg_read(pm2, 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()
500 static int pm2xxx_charger_get_ac_cv(struct pm2xxx_charger *pm2) in pm2xxx_charger_get_ac_cv() argument
505 if (pm2->ac.charger_connected && pm2->ac.charger_online) { in pm2xxx_charger_get_ac_cv()
507 ret = pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT4, &val); in pm2xxx_charger_get_ac_cv()
509 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_get_ac_cv()
565 struct pm2xxx_charger *pm2; in pm2xxx_charger_update_charger_current() local
569 pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_update_charger_current()
575 dev_err(pm2->dev, in pm2xxx_charger_update_charger_current()
580 ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG6, &val); in pm2xxx_charger_update_charger_current()
584 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG6, val); 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()
600 struct pm2xxx_charger *pm2; in pm2xxx_charger_ac_get_property() local
602 pm2 = to_pm2xxx_charger_ac_device_info(psy_to_ux500_charger(psy)); in pm2xxx_charger_ac_get_property()
606 if (pm2->flags.mainextchnotok) in pm2xxx_charger_ac_get_property()
608 else if (pm2->ac.wd_expired) in pm2xxx_charger_ac_get_property()
610 else if (pm2->flags.main_thermal_prot) in pm2xxx_charger_ac_get_property()
612 else if (pm2->flags.ovv) 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()
633 static int pm2xxx_charging_init(struct pm2xxx_charger *pm2) in pm2xxx_charging_init() argument
638 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG3, in pm2xxx_charging_init()
644 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG4, in pm2xxx_charging_init()
648 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG5, in pm2xxx_charging_init()
656 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG6, in pm2xxx_charging_init()
665 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG7, in pm2xxx_charging_init()
669 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG8, in pm2xxx_charging_init()
673 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG9, in pm2xxx_charging_init()
679 ret = pm2xxx_reg_write(pm2, PM2XXX_INP_VOLT_VPWR2, in pm2xxx_charging_init()
681 ret = pm2xxx_reg_write(pm2, PM2XXX_INP_VOLT_VPWR1, in pm2xxx_charging_init()
685 ret = pm2xxx_reg_write(pm2, PM2XXX_INP_DROP_VPWR2, in pm2xxx_charging_init()
688 ret = pm2xxx_reg_write(pm2, PM2XXX_INP_DROP_VPWR1, in pm2xxx_charging_init()
693 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_LOW_LEV_COMP_REG, in pm2xxx_charging_init()
707 struct pm2xxx_charger *pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_ac_en() local
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()
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()
725 ret = pm2xxx_charging_init(pm2); 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()
742 ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG8, &val); in pm2xxx_charger_ac_en()
744 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_ac_en()
749 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG8, val); in pm2xxx_charger_ac_en()
751 dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__); in pm2xxx_charger_ac_en()
755 ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG6, &val); in pm2xxx_charger_ac_en()
757 dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__); in pm2xxx_charger_ac_en()
762 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG6, val); 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()
769 ret = pm2xxx_reg_read(pm2, PM2XXX_LED_CTRL_REG, &val); in pm2xxx_charger_ac_en()
771 dev_err(pm2->dev, "%s pm2xxx read failed\n", in pm2xxx_charger_ac_en()
776 ret = pm2xxx_reg_write(pm2, PM2XXX_LED_CTRL_REG, val); in pm2xxx_charger_ac_en()
778 dev_err(pm2->dev, "%s pm2xxx write failed\n", in pm2xxx_charger_ac_en()
784 ret = pm2xxx_charging_enable_mngt(pm2); in pm2xxx_charger_ac_en()
786 dev_err(pm2->dev, "Failed to enable" 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()
802 ret = pm2xxx_charging_disable_mngt(pm2); in pm2xxx_charger_ac_en()
804 dev_err(pm2->dev, "failed to disable" 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()
820 struct pm2xxx_charger *pm2; in pm2xxx_charger_watchdog_kick() local
823 pm2 = to_pm2xxx_charger_ac_device_info(charger); in pm2xxx_charger_watchdog_kick()
827 ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_WD_KICK, WD_TIMER); in pm2xxx_charger_watchdog_kick()
829 dev_err(pm2->dev, "Failed to kick WD!\n"); in pm2xxx_charger_watchdog_kick()
836 struct pm2xxx_charger *pm2 = container_of(work, in pm2xxx_charger_ac_work() local
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()
848 struct pm2xxx_charger *pm2 = container_of(work, in pm2xxx_charger_check_hw_failure_work() local
851 if (pm2->flags.ovv) { in pm2xxx_charger_check_hw_failure_work()
852 pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT4, ®_value); 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()
874 struct pm2xxx_charger *pm2 = container_of(work, struct pm2xxx_charger, in pm2xxx_charger_check_main_thermal_prot_work() local
878 ret = pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT5, &val); in pm2xxx_charger_check_main_thermal_prot_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()
909 struct pm2xxx_charger *pm2; in pm2xxx_wall_charger_resume() local
911 pm2 = (struct pm2xxx_charger *)i2c_get_clientdata(i2c_client); in pm2xxx_wall_charger_resume()
912 set_lpn_pin(pm2); in pm2xxx_wall_charger_resume()
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()
925 struct pm2xxx_charger *pm2; in pm2xxx_wall_charger_suspend() local
927 pm2 = (struct pm2xxx_charger *)i2c_get_clientdata(i2c_client); in pm2xxx_wall_charger_suspend()
928 clear_lpn_pin(pm2); in pm2xxx_wall_charger_suspend()
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()
943 struct pm2xxx_charger *pm2; in pm2xxx_runtime_suspend() local
945 pm2 = (struct pm2xxx_charger *)i2c_get_clientdata(pm2xxx_i2c_client); in pm2xxx_runtime_suspend()
946 clear_lpn_pin(pm2); in pm2xxx_runtime_suspend()
954 struct pm2xxx_charger *pm2; in pm2xxx_runtime_resume() local
956 pm2 = (struct pm2xxx_charger *)i2c_get_clientdata(pm2xxx_i2c_client); in pm2xxx_runtime_resume()
958 if (gpio_is_valid(pm2->lpn_pin) && gpio_get_value(pm2->lpn_pin) == 0) in pm2xxx_runtime_resume()
959 set_lpn_pin(pm2); in pm2xxx_runtime_resume()
975 struct pm2xxx_charger *pm2; in pm2xxx_wall_charger_probe() local
985 pm2 = kzalloc(sizeof(struct pm2xxx_charger), GFP_KERNEL); in pm2xxx_wall_charger_probe()
986 if (!pm2) { 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()
998 dev_err(pm2->dev, "no charger platform data supplied\n"); in pm2xxx_wall_charger_probe()
1003 pm2->pdata = pl_data->wall_charger; in pm2xxx_wall_charger_probe()
1007 dev_err(pm2->dev, "no battery platform data supplied\n"); in pm2xxx_wall_charger_probe()
1012 pm2->bat = pl_data->battery; 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()
1024 i2c_set_clientdata(i2c_client, pm2); 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()
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()
1042 pm2->ac_chg.max_out_curr = pm2xxx_charger_current_map[ 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()
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()
1053 dev_err(pm2->dev, "failed to create work queue\n"); 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()
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()
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()
1094 pm2xxx_charger_irq[0].name, pm2); 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()
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()
1141 set_lpn_pin(pm2); in pm2xxx_wall_charger_probe()
1146 pm2xxx_reg_read(pm2, in pm2xxx_wall_charger_probe()
1150 ret = pm2xxx_charger_detection(pm2, &val); 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()
1180 kfree(pm2); in pm2xxx_wall_charger_probe()
1187 struct pm2xxx_charger *pm2 = i2c_get_clientdata(i2c_client); in pm2xxx_wall_charger_remove() local
1190 pm_runtime_disable(pm2->dev); 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()
1213 kfree(pm2); in pm2xxx_wall_charger_remove()