Merge tag '9p-for-5.15-rc1' of git://github.com/martinetd/linux
[linux-2.6-microblaze.git] / drivers / mfd / tps65086.c
index 341466e..3bd5728 100644 (file)
@@ -24,6 +24,7 @@
 static const struct mfd_cell tps65086_cells[] = {
        { .name = "tps65086-regulator", },
        { .name = "tps65086-gpio", },
+       { .name = "tps65086-reset", },
 };
 
 static const struct regmap_range tps65086_yes_ranges[] = {
@@ -100,29 +101,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;
 }