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