Skip to content

Commit 12a1185

Browse files
Dzmitry Sankouskisre
authored andcommitted
power: supply: max77705_charger: rework interrupts
Current implementation uses handle_post_irq to actually handle chgin irq. This is not how things are meant to work in regmap-irq. Remove handle_post_irq, and request a threaded interrupt for chgin. Fixes: a6a494c ("power: supply: max77705: Add charger driver for Maxim 77705") Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
1 parent baedd8b commit 12a1185

1 file changed

Lines changed: 12 additions & 10 deletions

File tree

drivers/power/supply/max77705_charger.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ static enum power_supply_property max77705_charger_props[] = {
4040
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
4141
};
4242

43-
static int max77705_chgin_irq(void *irq_drv_data)
43+
static irqreturn_t max77705_chgin_irq(int irq, void *irq_drv_data)
4444
{
4545
struct max77705_charger_data *chg = irq_drv_data;
4646

4747
queue_work(chg->wqueue, &chg->chgin_work);
4848

49-
return 0;
49+
return IRQ_HANDLED;
5050
}
5151

5252
static const struct regmap_irq max77705_charger_irqs[] = {
@@ -64,7 +64,6 @@ static struct regmap_irq_chip max77705_charger_irq_chip = {
6464
.name = "max77705-charger",
6565
.status_base = MAX77705_CHG_REG_INT,
6666
.mask_base = MAX77705_CHG_REG_INT_MASK,
67-
.handle_post_irq = max77705_chgin_irq,
6867
.num_regs = 1,
6968
.irqs = max77705_charger_irqs,
7069
.num_irqs = ARRAY_SIZE(max77705_charger_irqs),
@@ -593,12 +592,6 @@ static int max77705_charger_probe(struct i2c_client *i2c)
593592
"cannot allocate regmap field\n");
594593
}
595594

596-
ret = regmap_update_bits(chg->regmap,
597-
MAX77705_CHG_REG_INT_MASK,
598-
MAX77705_CHGIN_IM, 0);
599-
if (ret)
600-
return ret;
601-
602595
pscfg.fwnode = dev_fwnode(dev);
603596
pscfg.drv_data = chg;
604597

@@ -608,7 +601,7 @@ static int max77705_charger_probe(struct i2c_client *i2c)
608601

609602
max77705_charger_irq_chip.irq_drv_data = chg;
610603
ret = devm_regmap_add_irq_chip(chg->dev, chg->regmap, i2c->irq,
611-
IRQF_ONESHOT | IRQF_SHARED, 0,
604+
IRQF_ONESHOT, 0,
612605
&max77705_charger_irq_chip,
613606
&irq_data);
614607
if (ret)
@@ -630,6 +623,15 @@ static int max77705_charger_probe(struct i2c_client *i2c)
630623
goto destroy_wq;
631624
}
632625

626+
ret = devm_request_threaded_irq(dev, regmap_irq_get_virq(irq_data, MAX77705_CHGIN_I),
627+
NULL, max77705_chgin_irq,
628+
IRQF_TRIGGER_NONE,
629+
"chgin-irq", chg);
630+
if (ret) {
631+
dev_err_probe(dev, ret, "Failed to Request chgin IRQ\n");
632+
goto destroy_wq;
633+
}
634+
633635
ret = max77705_charger_enable(chg);
634636
if (ret) {
635637
dev_err_probe(dev, ret, "failed to enable charge\n");

0 commit comments

Comments
 (0)