mfd: twl4030-power: Add support for board specific configuration
authorTony Lindgren <tony@atomide.com>
Tue, 20 May 2014 18:17:54 +0000 (11:17 -0700)
committerLee Jones <lee.jones@linaro.org>
Wed, 28 May 2014 07:06:04 +0000 (08:06 +0100)
With the recommended twl4030 configuration added, we can now add
board specific changes as modifications to the recommended
configuration.

Note that the data is private to this driver, and the data must
always have a NULL resource in the sentinel.

Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/twl4030-power.c
include/linux/i2c/twl.h

index 2bfbb40ca9d2576723f38fafd7e1ddf79c7b4feb..4846c7b48ebb3d86b41836730390efa1713944a1 100644 (file)
@@ -567,13 +567,34 @@ twl4030_power_configure_scripts(const struct twl4030_power_data *pdata)
        return 0;
 }
 
+static void twl4030_patch_rconfig(struct twl4030_resconfig *common,
+                                 struct twl4030_resconfig *board)
+{
+       while (common->resource) {
+               struct twl4030_resconfig *b = board;
+
+               while (b->resource) {
+                       if (b->resource == common->resource) {
+                               *common = *b;
+                               break;
+                       }
+                       b++;
+               }
+               common++;
+       }
+}
+
 static int
 twl4030_power_configure_resources(const struct twl4030_power_data *pdata)
 {
        struct twl4030_resconfig *resconfig = pdata->resource_config;
+       struct twl4030_resconfig *boardconf = pdata->board_config;
        int err;
 
        if (resconfig) {
+               if (boardconf)
+                       twl4030_patch_rconfig(resconfig, boardconf);
+
                while (resconfig->resource) {
                        err = twl4030_configure_resource(resconfig);
                        if (err)
index 5fe031375ed4dfe998fe5dbaf1bb431fca587f66..57fe782bf031a1375342bd3f36c39c8e720088c1 100644 (file)
@@ -662,6 +662,7 @@ struct twl4030_power_data {
        struct twl4030_script **scripts;
        unsigned num;
        struct twl4030_resconfig *resource_config;
+       struct twl4030_resconfig *board_config;
 #define TWL4030_RESCONFIG_UNDEF        ((u8)-1)
        bool use_poweroff;      /* Board is wired for TWL poweroff */
 };