mfd: mfd_cell is now implicitly available to mc13xxx drivers
authorAndres Salomon <dilinger@queued.net>
Fri, 18 Feb 2011 03:07:23 +0000 (19:07 -0800)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 23 Mar 2011 09:41:54 +0000 (10:41 +0100)
The cell's platform_data is now accessed with a helper function;
change clients to use that, and remove the now-unused data_size.

Note that mfd-core no longer makes a copy of platform_data, but the
mc13xxx-core driver creates the pdata structures on the stack.  In
order to get around that, the various ARM mach types that set the
pdata have been changed to hold the variable in static (global) memory.
Also note that __initdata references in aforementioned pdata structs
have been dropped.

Signed-off-by: Andres Salomon <dilinger@queued.net>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
arch/arm/mach-imx/mach-mx27_3ds.c
arch/arm/mach-imx/mach-pcm038.c
arch/arm/mach-mx3/mach-mx31_3ds.c
arch/arm/mach-mx3/mach-mx31moboard.c
drivers/leds/leds-mc13783.c
drivers/mfd/mc13xxx-core.c
drivers/regulator/mc13783-regulator.c
drivers/regulator/mc13892-regulator.c
include/linux/mfd/mc13xxx.h

index 614b3c00c4a015fba85b34803b9006e91195cf4f..6e1accf93f811d57b7ab97c463b562a39bd43b82 100644 (file)
@@ -232,10 +232,13 @@ static struct mc13xxx_regulator_init_data mx27_3ds_regulators[] = {
 };
 
 /* MC13783 */
-static struct mc13xxx_platform_data mc13783_pdata __initdata = {
-       .regulators = mx27_3ds_regulators,
-       .num_regulators = ARRAY_SIZE(mx27_3ds_regulators),
-       .flags  = MC13XXX_USE_REGULATOR,
+static struct mc13xxx_platform_data mc13783_pdata = {
+       .regulators = {
+               .regulators = mx27_3ds_regulators,
+               .num_regulators = ARRAY_SIZE(mx27_3ds_regulators),
+
+       },
+       .flags  = MC13783_USE_REGULATOR,
 };
 
 /* SPI */
index 38c77084b615222d4064fae7d8f7b1c5adaa4426..4cbce6d0fef1652ff9358a496ef907d5b239e129 100644 (file)
@@ -263,10 +263,12 @@ static struct mc13xxx_regulator_init_data pcm038_regulators[] = {
 };
 
 static struct mc13xxx_platform_data pcm038_pmic = {
-       .regulators = pcm038_regulators,
-       .num_regulators = ARRAY_SIZE(pcm038_regulators),
-       .flags = MC13XXX_USE_ADC | MC13XXX_USE_REGULATOR |
-                MC13XXX_USE_TOUCHSCREEN,
+       .regulators = {
+               .regulators = pcm038_regulators,
+               .num_regulators = ARRAY_SIZE(pcm038_regulators),
+       },
+       .flags = MC13783_USE_ADC | MC13783_USE_REGULATOR |
+                MC13783_USE_TOUCHSCREEN,
 };
 
 static struct spi_board_info pcm038_spi_board_info[] __initdata = {
index 544d3e414f5846f08ba96ef71c3fa41b29422cd2..034be624d35cb31f14c0e380e8e9eee3bf0b5339 100644 (file)
@@ -488,10 +488,12 @@ static struct mc13xxx_regulator_init_data mx31_3ds_regulators[] = {
 };
 
 /* MC13783 */
-static struct mc13xxx_platform_data mc13783_pdata __initdata = {
-       .regulators = mx31_3ds_regulators,
-       .num_regulators = ARRAY_SIZE(mx31_3ds_regulators),
-       .flags  = MC13XXX_USE_REGULATOR | MC13XXX_USE_TOUCHSCREEN
+static struct mc13xxx_platform_data mc13783_pdata = {
+       .regulators = {
+               .regulators = mx31_3ds_regulators,
+               .num_regulators = ARRAY_SIZE(mx31_3ds_regulators),
+       },
+       .flags  = MC13783_USE_REGULATOR | MC13783_USE_TOUCHSCREEN,
 };
 
 /* SPI */
index 6f3692bccb8ad3201418015a4f28bc23dedf96af..3a021b01161db3ad122f531d9fe366bb1961b146 100644 (file)
@@ -268,8 +268,10 @@ static struct mc13783_leds_platform_data moboard_leds = {
 };
 
 static struct mc13xxx_platform_data moboard_pmic = {
-       .regulators = moboard_regulators,
-       .num_regulators = ARRAY_SIZE(moboard_regulators),
+       .regulators = {
+               .regulators = moboard_regulators,
+               .num_regulators = ARRAY_SIZE(moboard_regulators),
+       },
        .leds = &moboard_leds,
        .flags = MC13XXX_USE_REGULATOR | MC13XXX_USE_RTC |
                MC13XXX_USE_ADC | MC13XXX_USE_LED,
index f05bb08d0f0968e49a51e7b96aeee392c48287d2..06a5bb484707b47dd005504140b1fb9e649aa7b1 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/leds.h>
 #include <linux/workqueue.h>
 #include <linux/mfd/mc13783.h>
+#include <linux/mfd/core.h>
 #include <linux/slab.h>
 
 struct mc13783_led {
@@ -183,7 +184,7 @@ static int __devinit mc13783_led_setup(struct mc13783_led *led, int max_current)
 
 static int __devinit mc13783_leds_prepare(struct platform_device *pdev)
 {
-       struct mc13783_leds_platform_data *pdata = dev_get_platdata(&pdev->dev);
+       struct mc13783_leds_platform_data *pdata = mfd_get_data(pdev);
        struct mc13783 *dev = dev_get_drvdata(pdev->dev.parent);
        int ret = 0;
        int reg = 0;
@@ -264,7 +265,7 @@ out:
 
 static int __devinit mc13783_led_probe(struct platform_device *pdev)
 {
-       struct mc13783_leds_platform_data *pdata = dev_get_platdata(&pdev->dev);
+       struct mc13783_leds_platform_data *pdata = mfd_get_data(pdev);
        struct mc13783_led_platform_data *led_cur;
        struct mc13783_led *led, *led_dat;
        int ret, i;
@@ -351,7 +352,7 @@ err_free:
 
 static int __devexit mc13783_led_remove(struct platform_device *pdev)
 {
-       struct mc13783_leds_platform_data *pdata = dev_get_platdata(&pdev->dev);
+       struct mc13783_leds_platform_data *pdata = mfd_get_data(pdev);
        struct mc13783_led *led = platform_get_drvdata(pdev);
        struct mc13783 *dev = dev_get_drvdata(pdev->dev.parent);
        int i;
index b9fcaf0004da79142414ef54d53f866122df1a1e..30807d3a65390743779f1d0835b44f2d36673d80 100644 (file)
@@ -683,14 +683,13 @@ out:
 EXPORT_SYMBOL_GPL(mc13783_adc_do_conversion);
 
 static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx,
-               const char *format, void *pdata, size_t pdata_size)
+               const char *format, void *pdata)
 {
        char buf[30];
        const char *name = mc13xxx_get_chipname(mc13xxx);
 
        struct mfd_cell cell = {
                .platform_data = pdata,
-               .data_size = pdata_size,
        };
 
        /* there is no asnprintf in the kernel :-( */
@@ -706,7 +705,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx,
 
 static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *format)
 {
-       return mc13xxx_add_subdevice_pdata(mc13xxx, format, NULL, 0);
+       return mc13xxx_add_subdevice_pdata(mc13xxx, format, NULL);
 }
 
 static int mc13xxx_probe(struct spi_device *spi)
@@ -764,13 +763,8 @@ err_revision:
                mc13xxx_add_subdevice(mc13xxx, "%s-codec");
 
        if (pdata->flags & MC13XXX_USE_REGULATOR) {
-               struct mc13xxx_regulator_platform_data regulator_pdata = {
-                       .num_regulators = pdata->num_regulators,
-                       .regulators = pdata->regulators,
-               };
-
                mc13xxx_add_subdevice_pdata(mc13xxx, "%s-regulator",
-                               &regulator_pdata, sizeof(regulator_pdata));
+                               &pdata->regulators);
        }
 
        if (pdata->flags & MC13XXX_USE_RTC)
@@ -779,10 +773,8 @@ err_revision:
        if (pdata->flags & MC13XXX_USE_TOUCHSCREEN)
                mc13xxx_add_subdevice(mc13xxx, "%s-ts");
 
-       if (pdata->flags & MC13XXX_USE_LED) {
-               mc13xxx_add_subdevice_pdata(mc13xxx, "%s-led",
-                                       pdata->leds, sizeof(*pdata->leds));
-       }
+       if (pdata->flags & MC13XXX_USE_LED)
+               mc13xxx_add_subdevice_pdata(mc13xxx, "%s-led", pdata->leds);
 
        return 0;
 }
index 3e5d0c3b4e53134e84fa1ce2b5b32413de9b9a65..23249cb0a8bdcc6be50b0ccb52e89f5e3cf5fa36 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/regulator/driver.h>
 #include <linux/platform_device.h>
 #include <linux/kernel.h>
+#include <linux/mfd/core.h>
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/err.h>
@@ -336,8 +337,7 @@ static int __devinit mc13783_regulator_probe(struct platform_device *pdev)
 {
        struct mc13xxx_regulator_priv *priv;
        struct mc13xxx *mc13783 = dev_get_drvdata(pdev->dev.parent);
-       struct mc13783_regulator_platform_data *pdata =
-               dev_get_platdata(&pdev->dev);
+       struct mc13783_regulator_platform_data *pdata = mfd_get_data(pdev);
        struct mc13783_regulator_init_data *init_data;
        int i, ret;
 
@@ -381,8 +381,7 @@ err:
 static int __devexit mc13783_regulator_remove(struct platform_device *pdev)
 {
        struct mc13xxx_regulator_priv *priv = platform_get_drvdata(pdev);
-       struct mc13783_regulator_platform_data *pdata =
-               dev_get_platdata(&pdev->dev);
+       struct mc13783_regulator_platform_data *pdata = mfd_get_data(pdev);
        int i;
 
        platform_set_drvdata(pdev, NULL);
index 1b8f7398a4a8f9709a17d17463be54afcbda9ae4..6f15168e5ed494e04cbc4d38a9589bdc0847c97c 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/regulator/driver.h>
 #include <linux/platform_device.h>
 #include <linux/kernel.h>
+#include <linux/mfd/core.h>
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/err.h>
@@ -520,8 +521,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
 {
        struct mc13xxx_regulator_priv *priv;
        struct mc13xxx *mc13892 = dev_get_drvdata(pdev->dev.parent);
-       struct mc13xxx_regulator_platform_data *pdata =
-               dev_get_platdata(&pdev->dev);
+       struct mc13xxx_regulator_platform_data *pdata = mfd_get_data(pdev);
        struct mc13xxx_regulator_init_data *init_data;
        int i, ret;
        u32 val;
@@ -595,8 +595,7 @@ err_free:
 static int __devexit mc13892_regulator_remove(struct platform_device *pdev)
 {
        struct mc13xxx_regulator_priv *priv = platform_get_drvdata(pdev);
-       struct mc13xxx_regulator_platform_data *pdata =
-               dev_get_platdata(&pdev->dev);
+       struct mc13xxx_regulator_platform_data *pdata = mfd_get_data(pdev);
        int i;
 
        platform_set_drvdata(pdev, NULL);
index a1d391b40e682ca9cc7a659739e3ebed1efd670d..c064beaaccb7f482bd969c226ef2aae0de9e8612 100644 (file)
@@ -146,8 +146,7 @@ struct mc13xxx_platform_data {
 #define MC13XXX_USE_LED                (1 << 5)
        unsigned int flags;
 
-       int num_regulators;
-       struct mc13xxx_regulator_init_data *regulators;
+       struct mc13xxx_regulator_platform_data regulators;
        struct mc13xxx_leds_platform_data *leds;
 };