mfd: tps65086: Make interrupt line optional
authorEmil Renner Berthing <kernel@esmil.dk>
Tue, 27 Jul 2021 09:25:52 +0000 (11:25 +0200)
committerLee Jones <lee.jones@linaro.org>
Mon, 16 Aug 2021 12:40:26 +0000 (13:40 +0100)
The BeagleV Starlight v0.9 board[1] doesn't have the IRQB line routed to
the SoC, but it is still useful to be able to reach the PMIC over I2C
for the other functionality it provides such as GPIOs and regulator
settings.

[1] https://github.com/beagleboard/beaglev-starlight

Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Documentation/devicetree/bindings/mfd/ti,tps65086.yaml
drivers/mfd/tps65086.c

index 9f6e1349eadcfa522e444364637e1789e0574f2b..6aeedda3be157ac15c6dbaffef2c9a5c984c032a 100644 (file)
@@ -87,9 +87,6 @@ additionalProperties: false
 required:
   - compatible
   - reg
-  - interrupts
-  - interrupt-controller
-  - '#interrupt-cells'
   - gpio-controller
   - '#gpio-cells'
   - regulators
index 341466ef20cca369dcc7954b4b0a1fe891e11dac..cc3478ee9a645727f369996fa9971640de8a0d7e 100644 (file)
@@ -100,29 +100,30 @@ static int tps65086_probe(struct i2c_client *client,
                 (char)((version & TPS65086_DEVICEID_OTP_MASK) >> 4) + 'A',
                 (version & TPS65086_DEVICEID_REV_MASK) >> 6);
 
-       ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
-                                 &tps65086_irq_chip, &tps->irq_data);
-       if (ret) {
-               dev_err(tps->dev, "Failed to register IRQ chip\n");
-               return ret;
+       if (tps->irq > 0) {
+               ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,
+                                         &tps65086_irq_chip, &tps->irq_data);
+               if (ret) {
+                       dev_err(tps->dev, "Failed to register IRQ chip\n");
+                       return ret;
+               }
        }
 
        ret = mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65086_cells,
                              ARRAY_SIZE(tps65086_cells), NULL, 0,
                              regmap_irq_get_domain(tps->irq_data));
-       if (ret) {
+       if (ret && tps->irq > 0)
                regmap_del_irq_chip(tps->irq, tps->irq_data);
-               return ret;
-       }
 
-       return 0;
+       return ret;
 }
 
 static int tps65086_remove(struct i2c_client *client)
 {
        struct tps65086 *tps = i2c_get_clientdata(client);
 
-       regmap_del_irq_chip(tps->irq, tps->irq_data);
+       if (tps->irq > 0)
+               regmap_del_irq_chip(tps->irq, tps->irq_data);
 
        return 0;
 }