Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 297936
b: refs/heads/master
c: 7da6334
h: refs/heads/master
v: v3
  • Loading branch information
Kim, Milo authored and Anton Vorontsov committed Mar 26, 2012
1 parent a4ccd2a commit 679a772
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e39b828f5355e41a8fd24f413fb9dfb81d808397
refs/heads/master: 7da6334e73fe3c0579d8c6a56001336a430a5d99
57 changes: 39 additions & 18 deletions trunk/drivers/power/lp8727_charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,17 +138,22 @@ static int lp8727_is_charger_attached(const char *name, int id)
return (id >= ID_TA && id <= ID_USB_CHG) ? 1 : 0;
}

static void lp8727_init_device(struct lp8727_chg *pchg)
static int lp8727_init_device(struct lp8727_chg *pchg)
{
u8 val;
int ret;

val = ID200_EN | ADC_EN | CP_EN;
if (lp8727_i2c_write_byte(pchg, CTRL1, &val))
dev_err(pchg->dev, "i2c write err : addr=0x%.2x\n", CTRL1);
ret = lp8727_i2c_write_byte(pchg, CTRL1, &val);
if (ret)
return ret;

val = INT_EN | CHGDET_EN;
if (lp8727_i2c_write_byte(pchg, CTRL2, &val))
dev_err(pchg->dev, "i2c write err : addr=0x%.2x\n", CTRL2);
ret = lp8727_i2c_write_byte(pchg, CTRL2, &val);
if (ret)
return ret;

return 0;
}

static int lp8727_is_dedicated_charger(struct lp8727_chg *pchg)
Expand Down Expand Up @@ -245,20 +250,22 @@ static irqreturn_t lp8727_isr_func(int irq, void *ptr)
return IRQ_HANDLED;
}

static void lp8727_intr_config(struct lp8727_chg *pchg)
static int lp8727_intr_config(struct lp8727_chg *pchg)
{
INIT_DELAYED_WORK(&pchg->work, lp8727_delayed_func);

pchg->irqthread = create_singlethread_workqueue("lp8727-irqthd");
if (!pchg->irqthread)
if (!pchg->irqthread) {
dev_err(pchg->dev, "can not create thread for lp8727\n");

if (request_threaded_irq(pchg->client->irq,
NULL,
lp8727_isr_func,
IRQF_TRIGGER_FALLING, "lp8727_irq", pchg)) {
dev_err(pchg->dev, "lp8727 irq can not be registered\n");
return -ENOMEM;
}

return request_threaded_irq(pchg->client->irq,
NULL,
lp8727_isr_func,
IRQF_TRIGGER_FALLING,
"lp8727_irq",
pchg);
}

static enum power_supply_property lp8727_charger_prop[] = {
Expand Down Expand Up @@ -440,15 +447,29 @@ static int lp8727_probe(struct i2c_client *cl, const struct i2c_device_id *id)

mutex_init(&pchg->xfer_lock);

lp8727_init_device(pchg);
lp8727_intr_config(pchg);
ret = lp8727_init_device(pchg);
if (ret) {
dev_err(pchg->dev, "i2c communication err: %d", ret);
goto error;
}

ret = lp8727_intr_config(pchg);
if (ret) {
dev_err(pchg->dev, "irq handler err: %d", ret);
goto error;
}

ret = lp8727_register_psy(pchg);
if (ret)
dev_err(pchg->dev,
"can not register power supplies. err=%d", ret);
if (ret) {
dev_err(pchg->dev, "power supplies register err: %d", ret);
goto error;
}

return 0;

error:
kfree(pchg);
return ret;
}

static int __devexit lp8727_remove(struct i2c_client *cl)
Expand Down

0 comments on commit 679a772

Please sign in to comment.