Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 344963
b: refs/heads/master
c: 1ac9626
h: refs/heads/master
i:
  344961: bbac3a7
  344959: 800b5bb
v: v3
  • Loading branch information
Peter Ujfalusi authored and Samuel Ortiz committed Nov 13, 2012
1 parent 2124bb1 commit f85c79c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 22 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: f9be134357c0200ce48f4cd56b4ec50d3d2e777e
refs/heads/master: 1ac96265a6f35080083e85b0f58182cdc9c07d0e
52 changes: 31 additions & 21 deletions trunk/drivers/mfd/twl6040-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,27 +193,27 @@ static void twl6040_power_down_manual(struct twl6040 *twl6040)
twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);
}

static irqreturn_t twl6040_naudint_handler(int irq, void *data)
static irqreturn_t twl6040_readyint_handler(int irq, void *data)
{
struct twl6040 *twl6040 = data;
u8 intid, status;

intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);
complete(&twl6040->ready);

if (intid & TWL6040_READYINT)
complete(&twl6040->ready);
return IRQ_HANDLED;
}

if (intid & TWL6040_THINT) {
status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);
if (status & TWL6040_TSHUTDET) {
dev_warn(twl6040->dev,
"Thermal shutdown, powering-off");
twl6040_power(twl6040, 0);
} else {
dev_warn(twl6040->dev,
"Leaving thermal shutdown, powering-on");
twl6040_power(twl6040, 1);
}
static irqreturn_t twl6040_thint_handler(int irq, void *data)
{
struct twl6040 *twl6040 = data;
u8 status;

status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);
if (status & TWL6040_TSHUTDET) {
dev_warn(twl6040->dev, "Thermal shutdown, powering-off");
twl6040_power(twl6040, 0);
} else {
dev_warn(twl6040->dev, "Leaving thermal shutdown, powering-on");
twl6040_power(twl6040, 1);
}

return IRQ_HANDLED;
Expand Down Expand Up @@ -580,12 +580,19 @@ static int __devinit twl6040_probe(struct i2c_client *client,
goto irq_init_err;

ret = request_threaded_irq(twl6040->irq_base + TWL6040_IRQ_READY,
NULL, twl6040_naudint_handler, IRQF_ONESHOT,
NULL, twl6040_readyint_handler, IRQF_ONESHOT,
"twl6040_irq_ready", twl6040);
if (ret) {
dev_err(twl6040->dev, "READY IRQ request failed: %d\n",
ret);
goto irq_err;
dev_err(twl6040->dev, "READY IRQ request failed: %d\n", ret);
goto readyirq_err;
}

ret = request_threaded_irq(twl6040->irq_base + TWL6040_IRQ_TH,
NULL, twl6040_thint_handler, IRQF_ONESHOT,
"twl6040_irq_th", twl6040);
if (ret) {
dev_err(twl6040->dev, "Thermal IRQ request failed: %d\n", ret);
goto thirq_err;
}

/* dual-access registers controlled by I2C only */
Expand Down Expand Up @@ -650,8 +657,10 @@ static int __devinit twl6040_probe(struct i2c_client *client,
return 0;

mfd_err:
free_irq(twl6040->irq_base + TWL6040_IRQ_TH, twl6040);
thirq_err:
free_irq(twl6040->irq_base + TWL6040_IRQ_READY, twl6040);
irq_err:
readyirq_err:
twl6040_irq_exit(twl6040);
irq_init_err:
if (gpio_is_valid(twl6040->audpwron))
Expand All @@ -677,6 +686,7 @@ static int __devexit twl6040_remove(struct i2c_client *client)
gpio_free(twl6040->audpwron);

free_irq(twl6040->irq_base + TWL6040_IRQ_READY, twl6040);
free_irq(twl6040->irq_base + TWL6040_IRQ_TH, twl6040);
twl6040_irq_exit(twl6040);

mfd_remove_devices(&client->dev);
Expand Down

0 comments on commit f85c79c

Please sign in to comment.