axp20x->regmap_irq_chip = &axp803_regmap_irq_chip;
                break;
        case AXP806_ID:
+               /*
+                * Don't register the power key part if in slave mode or
+                * if there is no interrupt line.
+                */
                if (of_property_read_bool(axp20x->dev->of_node,
-                                         "x-powers,self-working-mode")) {
+                                         "x-powers,self-working-mode") &&
+                   axp20x->irq > 0) {
                        axp20x->nr_cells = ARRAY_SIZE(axp806_self_working_cells);
                        axp20x->cells = axp806_self_working_cells;
                } else {
                                     AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE);
        }
 
-       ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq,
-                         IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags,
-                          -1, axp20x->regmap_irq_chip, &axp20x->regmap_irqc);
-       if (ret) {
-               dev_err(axp20x->dev, "failed to add irq chip: %d\n", ret);
-               return ret;
+       /* Only if there is an interrupt line connected towards the CPU. */
+       if (axp20x->irq > 0) {
+               ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq,
+                               IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags,
+                               -1, axp20x->regmap_irq_chip,
+                               &axp20x->regmap_irqc);
+               if (ret) {
+                       dev_err(axp20x->dev, "failed to add irq chip: %d\n",
+                               ret);
+                       return ret;
+               }
        }
 
        ret = mfd_add_devices(axp20x->dev, -1, axp20x->cells,