Lines Matching refs:pchg
105 static int lp8727_read_bytes(struct lp8727_chg *pchg, u8 reg, u8 *data, u8 len) in lp8727_read_bytes() argument
109 mutex_lock(&pchg->xfer_lock); in lp8727_read_bytes()
110 ret = i2c_smbus_read_i2c_block_data(pchg->client, reg, len, data); in lp8727_read_bytes()
111 mutex_unlock(&pchg->xfer_lock); in lp8727_read_bytes()
116 static inline int lp8727_read_byte(struct lp8727_chg *pchg, u8 reg, u8 *data) in lp8727_read_byte() argument
118 return lp8727_read_bytes(pchg, reg, data, 1); in lp8727_read_byte()
121 static int lp8727_write_byte(struct lp8727_chg *pchg, u8 reg, u8 data) in lp8727_write_byte() argument
125 mutex_lock(&pchg->xfer_lock); in lp8727_write_byte()
126 ret = i2c_smbus_write_byte_data(pchg->client, reg, data); in lp8727_write_byte()
127 mutex_unlock(&pchg->xfer_lock); in lp8727_write_byte()
142 static int lp8727_init_device(struct lp8727_chg *pchg) in lp8727_init_device() argument
149 ret = lp8727_read_bytes(pchg, LP8727_INT1, intstat, LP8788_NUM_INTREGS); in lp8727_init_device()
154 ret = lp8727_write_byte(pchg, LP8727_CTRL1, val); in lp8727_init_device()
159 return lp8727_write_byte(pchg, LP8727_CTRL2, val); in lp8727_init_device()
162 static int lp8727_is_dedicated_charger(struct lp8727_chg *pchg) in lp8727_is_dedicated_charger() argument
166 lp8727_read_byte(pchg, LP8727_STATUS1, &val); in lp8727_is_dedicated_charger()
170 static int lp8727_is_usb_charger(struct lp8727_chg *pchg) in lp8727_is_usb_charger() argument
174 lp8727_read_byte(pchg, LP8727_STATUS1, &val); in lp8727_is_usb_charger()
178 static inline void lp8727_ctrl_switch(struct lp8727_chg *pchg, u8 sw) in lp8727_ctrl_switch() argument
180 lp8727_write_byte(pchg, LP8727_SWCTRL, sw); in lp8727_ctrl_switch()
183 static void lp8727_id_detection(struct lp8727_chg *pchg, u8 id, int vbusin) in lp8727_id_detection() argument
185 struct lp8727_platform_data *pdata = pchg->pdata; in lp8727_id_detection()
192 pchg->chg_param = pdata ? pdata->ac : NULL; in lp8727_id_detection()
195 if (lp8727_is_dedicated_charger(pchg)) { in lp8727_id_detection()
196 pchg->chg_param = pdata ? pdata->ac : NULL; in lp8727_id_detection()
198 } else if (lp8727_is_usb_charger(pchg)) { in lp8727_id_detection()
199 pchg->chg_param = pdata ? pdata->usb : NULL; in lp8727_id_detection()
209 pchg->chg_param = NULL; in lp8727_id_detection()
213 pchg->devid = devid; in lp8727_id_detection()
214 lp8727_ctrl_switch(pchg, swctrl); in lp8727_id_detection()
217 static void lp8727_enable_chgdet(struct lp8727_chg *pchg) in lp8727_enable_chgdet() argument
221 lp8727_read_byte(pchg, LP8727_CTRL2, &val); in lp8727_enable_chgdet()
223 lp8727_write_byte(pchg, LP8727_CTRL2, val); in lp8727_enable_chgdet()
228 struct lp8727_chg *pchg = container_of(_work, struct lp8727_chg, in lp8727_delayed_func() local
234 if (lp8727_read_bytes(pchg, LP8727_INT1, intstat, LP8788_NUM_INTREGS)) { in lp8727_delayed_func()
235 dev_err(pchg->dev, "can not read INT registers\n"); in lp8727_delayed_func()
242 lp8727_id_detection(pchg, idno, vbus); in lp8727_delayed_func()
243 lp8727_enable_chgdet(pchg); in lp8727_delayed_func()
245 power_supply_changed(pchg->psy->ac); in lp8727_delayed_func()
246 power_supply_changed(pchg->psy->usb); in lp8727_delayed_func()
247 power_supply_changed(pchg->psy->batt); in lp8727_delayed_func()
252 struct lp8727_chg *pchg = ptr; in lp8727_isr_func() local
254 schedule_delayed_work(&pchg->work, pchg->debounce_jiffies); in lp8727_isr_func()
258 static int lp8727_setup_irq(struct lp8727_chg *pchg) in lp8727_setup_irq() argument
261 int irq = pchg->client->irq; in lp8727_setup_irq()
262 unsigned delay_msec = pchg->pdata ? pchg->pdata->debounce_msec : in lp8727_setup_irq()
265 INIT_DELAYED_WORK(&pchg->work, lp8727_delayed_func); in lp8727_setup_irq()
268 dev_warn(pchg->dev, "invalid irq number: %d\n", irq); in lp8727_setup_irq()
274 "lp8727_irq", pchg); in lp8727_setup_irq()
279 pchg->irq = irq; in lp8727_setup_irq()
280 pchg->debounce_jiffies = msecs_to_jiffies(delay_msec); in lp8727_setup_irq()
285 static void lp8727_release_irq(struct lp8727_chg *pchg) in lp8727_release_irq() argument
287 cancel_delayed_work_sync(&pchg->work); in lp8727_release_irq()
289 if (pchg->irq) in lp8727_release_irq()
290 free_irq(pchg->irq, pchg); in lp8727_release_irq()
314 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_charger_get_property() local
319 val->intval = lp8727_is_charger_attached(psy->desc->name, pchg->devid); in lp8727_charger_get_property()
340 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_battery_get_property() local
341 struct lp8727_platform_data *pdata = pchg->pdata; in lp8727_battery_get_property()
347 if (!lp8727_is_charger_attached(psy->desc->name, pchg->devid)) { in lp8727_battery_get_property()
352 lp8727_read_byte(pchg, LP8727_STATUS1, &read); in lp8727_battery_get_property()
359 lp8727_read_byte(pchg, LP8727_STATUS2, &read); in lp8727_battery_get_property()
403 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_charger_changed() local
409 if (!lp8727_is_charger_attached(psy->desc->name, pchg->devid)) in lp8727_charger_changed()
413 if (pchg->chg_param) { in lp8727_charger_changed()
414 eoc_level = pchg->chg_param->eoc_level; in lp8727_charger_changed()
415 ichg = pchg->chg_param->ichg; in lp8727_charger_changed()
417 lp8727_write_byte(pchg, LP8727_CHGCTRL2, val); in lp8727_charger_changed()
446 static int lp8727_register_psy(struct lp8727_chg *pchg) in lp8727_register_psy() argument
451 psy = devm_kzalloc(pchg->dev, sizeof(*psy), GFP_KERNEL); in lp8727_register_psy()
455 pchg->psy = psy; in lp8727_register_psy()
460 psy->ac = power_supply_register(pchg->dev, &lp8727_ac_desc, &psy_cfg); in lp8727_register_psy()
464 psy->usb = power_supply_register(pchg->dev, &lp8727_usb_desc, in lp8727_register_psy()
469 psy->batt = power_supply_register(pchg->dev, &lp8727_batt_desc, NULL); in lp8727_register_psy()
483 static void lp8727_unregister_psy(struct lp8727_chg *pchg) in lp8727_unregister_psy() argument
485 struct lp8727_psy *psy = pchg->psy; in lp8727_unregister_psy()
551 struct lp8727_chg *pchg; in lp8727_probe() local
563 pchg = devm_kzalloc(&cl->dev, sizeof(*pchg), GFP_KERNEL); in lp8727_probe()
564 if (!pchg) in lp8727_probe()
567 pchg->client = cl; in lp8727_probe()
568 pchg->dev = &cl->dev; in lp8727_probe()
569 pchg->pdata = cl->dev.platform_data; in lp8727_probe()
570 i2c_set_clientdata(cl, pchg); in lp8727_probe()
572 mutex_init(&pchg->xfer_lock); in lp8727_probe()
574 ret = lp8727_init_device(pchg); in lp8727_probe()
576 dev_err(pchg->dev, "i2c communication err: %d", ret); in lp8727_probe()
580 ret = lp8727_register_psy(pchg); in lp8727_probe()
582 dev_err(pchg->dev, "power supplies register err: %d", ret); in lp8727_probe()
586 ret = lp8727_setup_irq(pchg); in lp8727_probe()
588 dev_err(pchg->dev, "irq handler err: %d", ret); in lp8727_probe()
589 lp8727_unregister_psy(pchg); in lp8727_probe()
598 struct lp8727_chg *pchg = i2c_get_clientdata(cl); in lp8727_remove() local
600 lp8727_release_irq(pchg); in lp8727_remove()
601 lp8727_unregister_psy(pchg); in lp8727_remove()