Merge tag 'for-v3.7' of git://git.infradead.org/battery-2.6
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / 88pm860x-core.c
index 59d117e9fa313840bfc95190b3e9160e8deec742..8fa86edf70d46ae77d7e47589b6641a3e411ba58 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/88pm860x.h>
 #include <linux/regulator/machine.h>
+#include <linux/power/charger-manager.h>
 
 #define INT_STATUS_NUM                 3
 
@@ -150,7 +151,8 @@ static struct resource battery_resources[] __devinitdata = {
 static struct resource charger_resources[] __devinitdata = {
        {PM8607_IRQ_CHG,  PM8607_IRQ_CHG,  "charger detect",  IORESOURCE_IRQ,},
        {PM8607_IRQ_CHG_DONE,  PM8607_IRQ_CHG_DONE,  "charging done",       IORESOURCE_IRQ,},
-       {PM8607_IRQ_CHG_FAULT, PM8607_IRQ_CHG_FAULT, "charging timeout",    IORESOURCE_IRQ,},
+       {PM8607_IRQ_CHG_FAIL,  PM8607_IRQ_CHG_FAIL,  "charging timeout",    IORESOURCE_IRQ,},
+       {PM8607_IRQ_CHG_FAULT, PM8607_IRQ_CHG_FAULT, "charging fault",      IORESOURCE_IRQ,},
        {PM8607_IRQ_GPADC1,    PM8607_IRQ_GPADC1,    "battery temperature", IORESOURCE_IRQ,},
        {PM8607_IRQ_VBAT, PM8607_IRQ_VBAT, "battery voltage", IORESOURCE_IRQ,},
        {PM8607_IRQ_VCHG, PM8607_IRQ_VCHG, "vchg voltage",    IORESOURCE_IRQ,},
@@ -318,10 +320,15 @@ static struct regulator_init_data preg_init_data = {
        .consumer_supplies      = &preg_supply[0],
 };
 
+static struct charger_regulator chg_desc_regulator_data[] = {
+       { .regulator_name = "preg", },
+};
+
 static struct mfd_cell power_devs[] = {
        {"88pm860x-battery", -1,},
        {"88pm860x-charger", -1,},
        {"88pm860x-preg",    -1,},
+       {"charger-manager", -1,},
 };
 
 static struct mfd_cell rtc_devs[] = {
@@ -929,6 +936,19 @@ static void __devinit device_power_init(struct pm860x_chip *chip,
                              NULL, chip->irq_base, NULL);
        if (ret < 0)
                dev_err(chip->dev, "Failed to add preg subdev\n");
+
+       if (pdata->chg_desc) {
+               pdata->chg_desc->charger_regulators =
+                       &chg_desc_regulator_data[0];
+               pdata->chg_desc->num_charger_regulators =
+                       ARRAY_SIZE(chg_desc_regulator_data),
+               power_devs[3].platform_data = pdata->chg_desc;
+               power_devs[3].pdata_size = sizeof(*pdata->chg_desc);
+               ret = mfd_add_devices(chip->dev, 0, &power_devs[3], 1,
+                                     NULL, chip->irq_base, NULL);
+               if (ret < 0)
+                       dev_err(chip->dev, "Failed to add chg-manager subdev\n");
+       }
 }
 
 static void __devinit device_onkey_init(struct pm860x_chip *chip,