mfd: Add parameter to disable ab8500 battery management
authorRickard Andersson <rickard.andersson@stericsson.com>
Tue, 17 Apr 2012 07:30:57 +0000 (09:30 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Tue, 1 May 2012 11:33:53 +0000 (13:33 +0200)
This patch makes it possible to disable battery management
via a module boot parameter. When 'ab8500-core.no_bm=1' then
ab8500_btemp, ab8500_chargalg, ab8500_charger and ab8500_fg will
not be probed. This boot parameter is used for scripted testing
of the system.

Signed-off-by: Rickard Andersson <rickard.andersson@stericsson.com>
Reviewed-by: Jonas Aberg <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/mfd/ab8500-core.c

index eee9560..08850f0 100644 (file)
@@ -97,6 +97,9 @@
 
 #define AB8500_TURN_ON_STATUS          0x00
 
+static bool no_bm; /* No battery management */
+module_param(no_bm, bool, S_IRUGO);
+
 #define AB9540_MODEM_CTRL2_REG                 0x23
 #define AB9540_MODEM_CTRL2_SWDBBRSTN_BIT       BIT(2)
 
@@ -834,26 +837,6 @@ static struct mfd_cell __devinitdata abx500_common_devs[] = {
                .resources = ab8500_rtc_resources,
        },
        {
-               .name = "ab8500-charger",
-               .num_resources = ARRAY_SIZE(ab8500_charger_resources),
-               .resources = ab8500_charger_resources,
-       },
-       {
-               .name = "ab8500-btemp",
-               .num_resources = ARRAY_SIZE(ab8500_btemp_resources),
-               .resources = ab8500_btemp_resources,
-       },
-       {
-               .name = "ab8500-fg",
-               .num_resources = ARRAY_SIZE(ab8500_fg_resources),
-               .resources = ab8500_fg_resources,
-       },
-       {
-               .name = "ab8500-chargalg",
-               .num_resources = ARRAY_SIZE(ab8500_chargalg_resources),
-               .resources = ab8500_chargalg_resources,
-       },
-       {
                .name = "ab8500-acc-det",
                .num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources),
                .resources = ab8500_av_acc_detect_resources,
@@ -886,6 +869,29 @@ static struct mfd_cell __devinitdata abx500_common_devs[] = {
        },
 };
 
+static struct mfd_cell __devinitdata ab8500_bm_devs[] = {
+       {
+               .name = "ab8500-charger",
+               .num_resources = ARRAY_SIZE(ab8500_charger_resources),
+               .resources = ab8500_charger_resources,
+       },
+       {
+               .name = "ab8500-btemp",
+               .num_resources = ARRAY_SIZE(ab8500_btemp_resources),
+               .resources = ab8500_btemp_resources,
+       },
+       {
+               .name = "ab8500-fg",
+               .num_resources = ARRAY_SIZE(ab8500_fg_resources),
+               .resources = ab8500_fg_resources,
+       },
+       {
+               .name = "ab8500-chargalg",
+               .num_resources = ARRAY_SIZE(ab8500_chargalg_resources),
+               .resources = ab8500_chargalg_resources,
+       },
+};
+
 static struct mfd_cell __devinitdata ab8500_devs[] = {
        {
                .name = "ab8500-gpio",
@@ -1204,6 +1210,15 @@ int __devinit ab8500_init(struct ab8500 *ab8500, enum ab8500_version version)
        if (ret)
                goto out_freeirq;
 
+       if (!no_bm) {
+               /* Add battery management devices */
+               ret = mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs,
+                                     ARRAY_SIZE(ab8500_bm_devs), NULL,
+                                     ab8500->irq_base);
+               if (ret)
+                       dev_err(ab8500->dev, "error adding bm devices\n");
+       }
+
        if (is_ab9540(ab8500))
                ret = sysfs_create_group(&ab8500->dev->kobj,
                                        &ab9540_attr_group);