Lines Matching refs:pchg

101 static int lp8727_read_bytes(struct lp8727_chg *pchg, u8 reg, u8 *data, u8 len)  in lp8727_read_bytes()  argument
105 mutex_lock(&pchg->xfer_lock); in lp8727_read_bytes()
106 ret = i2c_smbus_read_i2c_block_data(pchg->client, reg, len, data); in lp8727_read_bytes()
107 mutex_unlock(&pchg->xfer_lock); in lp8727_read_bytes()
112 static inline int lp8727_read_byte(struct lp8727_chg *pchg, u8 reg, u8 *data) in lp8727_read_byte() argument
114 return lp8727_read_bytes(pchg, reg, data, 1); in lp8727_read_byte()
117 static int lp8727_write_byte(struct lp8727_chg *pchg, u8 reg, u8 data) in lp8727_write_byte() argument
121 mutex_lock(&pchg->xfer_lock); in lp8727_write_byte()
122 ret = i2c_smbus_write_byte_data(pchg->client, reg, data); in lp8727_write_byte()
123 mutex_unlock(&pchg->xfer_lock); in lp8727_write_byte()
138 static int lp8727_init_device(struct lp8727_chg *pchg) in lp8727_init_device() argument
145 ret = lp8727_read_bytes(pchg, LP8727_INT1, intstat, LP8788_NUM_INTREGS); in lp8727_init_device()
150 ret = lp8727_write_byte(pchg, LP8727_CTRL1, val); in lp8727_init_device()
155 return lp8727_write_byte(pchg, LP8727_CTRL2, val); in lp8727_init_device()
158 static int lp8727_is_dedicated_charger(struct lp8727_chg *pchg) in lp8727_is_dedicated_charger() argument
162 lp8727_read_byte(pchg, LP8727_STATUS1, &val); in lp8727_is_dedicated_charger()
166 static int lp8727_is_usb_charger(struct lp8727_chg *pchg) in lp8727_is_usb_charger() argument
170 lp8727_read_byte(pchg, LP8727_STATUS1, &val); in lp8727_is_usb_charger()
174 static inline void lp8727_ctrl_switch(struct lp8727_chg *pchg, u8 sw) in lp8727_ctrl_switch() argument
176 lp8727_write_byte(pchg, LP8727_SWCTRL, sw); in lp8727_ctrl_switch()
179 static void lp8727_id_detection(struct lp8727_chg *pchg, u8 id, int vbusin) in lp8727_id_detection() argument
181 struct lp8727_platform_data *pdata = pchg->pdata; in lp8727_id_detection()
188 pchg->chg_param = pdata ? pdata->ac : NULL; in lp8727_id_detection()
191 if (lp8727_is_dedicated_charger(pchg)) { in lp8727_id_detection()
192 pchg->chg_param = pdata ? pdata->ac : NULL; in lp8727_id_detection()
194 } else if (lp8727_is_usb_charger(pchg)) { in lp8727_id_detection()
195 pchg->chg_param = pdata ? pdata->usb : NULL; in lp8727_id_detection()
205 pchg->chg_param = NULL; in lp8727_id_detection()
209 pchg->devid = devid; in lp8727_id_detection()
210 lp8727_ctrl_switch(pchg, swctrl); in lp8727_id_detection()
213 static void lp8727_enable_chgdet(struct lp8727_chg *pchg) in lp8727_enable_chgdet() argument
217 lp8727_read_byte(pchg, LP8727_CTRL2, &val); in lp8727_enable_chgdet()
219 lp8727_write_byte(pchg, LP8727_CTRL2, val); in lp8727_enable_chgdet()
224 struct lp8727_chg *pchg = container_of(_work, struct lp8727_chg, in lp8727_delayed_func() local
230 if (lp8727_read_bytes(pchg, LP8727_INT1, intstat, LP8788_NUM_INTREGS)) { in lp8727_delayed_func()
231 dev_err(pchg->dev, "can not read INT registers\n"); in lp8727_delayed_func()
238 lp8727_id_detection(pchg, idno, vbus); in lp8727_delayed_func()
239 lp8727_enable_chgdet(pchg); in lp8727_delayed_func()
241 power_supply_changed(pchg->psy->ac); in lp8727_delayed_func()
242 power_supply_changed(pchg->psy->usb); in lp8727_delayed_func()
243 power_supply_changed(pchg->psy->batt); in lp8727_delayed_func()
248 struct lp8727_chg *pchg = ptr; in lp8727_isr_func() local
250 schedule_delayed_work(&pchg->work, pchg->debounce_jiffies); in lp8727_isr_func()
254 static int lp8727_setup_irq(struct lp8727_chg *pchg) in lp8727_setup_irq() argument
257 int irq = pchg->client->irq; in lp8727_setup_irq()
258 unsigned delay_msec = pchg->pdata ? pchg->pdata->debounce_msec : in lp8727_setup_irq()
261 INIT_DELAYED_WORK(&pchg->work, lp8727_delayed_func); in lp8727_setup_irq()
264 dev_warn(pchg->dev, "invalid irq number: %d\n", irq); in lp8727_setup_irq()
270 "lp8727_irq", pchg); in lp8727_setup_irq()
275 pchg->irq = irq; in lp8727_setup_irq()
276 pchg->debounce_jiffies = msecs_to_jiffies(delay_msec); in lp8727_setup_irq()
281 static void lp8727_release_irq(struct lp8727_chg *pchg) in lp8727_release_irq() argument
283 cancel_delayed_work_sync(&pchg->work); in lp8727_release_irq()
285 if (pchg->irq) in lp8727_release_irq()
286 free_irq(pchg->irq, pchg); in lp8727_release_irq()
310 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_charger_get_property() local
315 val->intval = lp8727_is_charger_attached(psy->desc->name, pchg->devid); in lp8727_charger_get_property()
336 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_battery_get_property() local
337 struct lp8727_platform_data *pdata = pchg->pdata; in lp8727_battery_get_property()
343 if (!lp8727_is_charger_attached(psy->desc->name, pchg->devid)) { in lp8727_battery_get_property()
348 lp8727_read_byte(pchg, LP8727_STATUS1, &read); in lp8727_battery_get_property()
355 lp8727_read_byte(pchg, LP8727_STATUS2, &read); in lp8727_battery_get_property()
399 struct lp8727_chg *pchg = dev_get_drvdata(psy->dev.parent); in lp8727_charger_changed() local
405 if (!lp8727_is_charger_attached(psy->desc->name, pchg->devid)) in lp8727_charger_changed()
409 if (pchg->chg_param) { in lp8727_charger_changed()
410 eoc_level = pchg->chg_param->eoc_level; in lp8727_charger_changed()
411 ichg = pchg->chg_param->ichg; in lp8727_charger_changed()
413 lp8727_write_byte(pchg, LP8727_CHGCTRL2, val); in lp8727_charger_changed()
442 static int lp8727_register_psy(struct lp8727_chg *pchg) in lp8727_register_psy() argument
447 psy = devm_kzalloc(pchg->dev, sizeof(*psy), GFP_KERNEL); in lp8727_register_psy()
451 pchg->psy = psy; in lp8727_register_psy()
456 psy->ac = power_supply_register(pchg->dev, &lp8727_ac_desc, &psy_cfg); in lp8727_register_psy()
460 psy->usb = power_supply_register(pchg->dev, &lp8727_usb_desc, in lp8727_register_psy()
465 psy->batt = power_supply_register(pchg->dev, &lp8727_batt_desc, NULL); in lp8727_register_psy()
479 static void lp8727_unregister_psy(struct lp8727_chg *pchg) in lp8727_unregister_psy() argument
481 struct lp8727_psy *psy = pchg->psy; in lp8727_unregister_psy()
545 struct lp8727_chg *pchg; in lp8727_probe() local
560 pchg = devm_kzalloc(&cl->dev, sizeof(*pchg), GFP_KERNEL); in lp8727_probe()
561 if (!pchg) in lp8727_probe()
564 pchg->client = cl; in lp8727_probe()
565 pchg->dev = &cl->dev; in lp8727_probe()
566 pchg->pdata = pdata; in lp8727_probe()
567 i2c_set_clientdata(cl, pchg); in lp8727_probe()
569 mutex_init(&pchg->xfer_lock); in lp8727_probe()
571 ret = lp8727_init_device(pchg); in lp8727_probe()
573 dev_err(pchg->dev, "i2c communication err: %d", ret); in lp8727_probe()
577 ret = lp8727_register_psy(pchg); in lp8727_probe()
579 dev_err(pchg->dev, "power supplies register err: %d", ret); in lp8727_probe()
583 ret = lp8727_setup_irq(pchg); in lp8727_probe()
585 dev_err(pchg->dev, "irq handler err: %d", ret); in lp8727_probe()
586 lp8727_unregister_psy(pchg); in lp8727_probe()
595 struct lp8727_chg *pchg = i2c_get_clientdata(cl); in lp8727_remove() local
597 lp8727_release_irq(pchg); in lp8727_remove()
598 lp8727_unregister_psy(pchg); in lp8727_remove()