]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
regulator: pca9450: Make IRQ optional
authorFrieder Schrempf <frieder.schrempf@kontron.de>
Mon, 8 Jul 2024 08:40:34 +0000 (10:40 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 8 Jul 2024 11:50:20 +0000 (12:50 +0100)
The IRQ line might not be connected on some boards. Allow the driver
to be probed without it.

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Link: https://patch.msgid.link/20240708084107.38986-5-frieder@fris.de
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/pca9450-regulator.c

index be488c5dff140f5bf59fd6eed2af33efa140293a..9714afe347dcc0205b40243252638dff5f9298ad 100644 (file)
@@ -891,11 +891,6 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
        unsigned int reset_ctrl;
        int ret;
 
-       if (!i2c->irq) {
-               dev_err(&i2c->dev, "No IRQ configured?\n");
-               return -EINVAL;
-       }
-
        pca9450 = devm_kzalloc(&i2c->dev, sizeof(struct pca9450), GFP_KERNEL);
        if (!pca9450)
                return -ENOMEM;
@@ -967,23 +962,25 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
                }
        }
 
-       ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL,
-                                       pca9450_irq_handler,
-                                       (IRQF_TRIGGER_FALLING | IRQF_ONESHOT),
-                                       "pca9450-irq", pca9450);
-       if (ret != 0) {
-               dev_err(pca9450->dev, "Failed to request IRQ: %d\n",
-                       pca9450->irq);
-               return ret;
-       }
-       /* Unmask all interrupt except PWRON/WDOG/RSVD */
-       ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK,
-                               IRQ_VR_FLT1 | IRQ_VR_FLT2 | IRQ_LOWVSYS |
-                               IRQ_THERM_105 | IRQ_THERM_125,
-                               IRQ_PWRON | IRQ_WDOGB | IRQ_RSVD);
-       if (ret) {
-               dev_err(&i2c->dev, "Unmask irq error\n");
-               return ret;
+       if (pca9450->irq) {
+               ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL,
+                                               pca9450_irq_handler,
+                                               (IRQF_TRIGGER_FALLING | IRQF_ONESHOT),
+                                               "pca9450-irq", pca9450);
+               if (ret != 0) {
+                       dev_err(pca9450->dev, "Failed to request IRQ: %d\n",
+                               pca9450->irq);
+                       return ret;
+               }
+               /* Unmask all interrupt except PWRON/WDOG/RSVD */
+               ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK,
+                                       IRQ_VR_FLT1 | IRQ_VR_FLT2 | IRQ_LOWVSYS |
+                                       IRQ_THERM_105 | IRQ_THERM_125,
+                                       IRQ_PWRON | IRQ_WDOGB | IRQ_RSVD);
+               if (ret) {
+                       dev_err(&i2c->dev, "Unmask irq error\n");
+                       return ret;
+               }
        }
 
        /* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */