mfd: Register the ab8500 from db8500-prcmu using the MFD API
authorLee Jones <lee.jones@linaro.org>
Fri, 29 Jun 2012 15:13:35 +0000 (17:13 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 8 Jul 2012 22:16:09 +0000 (00:16 +0200)
Hierarchically, the AB8500 is a child of the DB8500 PRCMU. So now that
Device Tree is being used and MFD core code is Device Tree aware, we
can simply register DB8500 PRCMU from Device Tree in the normal way
then allow the DB8500 PRCMU driver to register the AB8500 as a simple
MFD device at probe time.

Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
arch/arm/mach-ux500/board-mop500.c
drivers/mfd/ab8500-core.c
drivers/mfd/db8500-prcmu.c

index 1509a3cb58335246e19ddf7140e58b875b6e4a31..44d816ffaeb63e1fbf1327d899cb0a41965bf88a 100644 (file)
@@ -793,8 +793,6 @@ static const struct of_device_id u8500_local_bus_nodes[] = {
        /* only create devices below soc node */
        { .compatible = "stericsson,db8500", },
        { .compatible = "stericsson,db8500-prcmu", },
-       { .compatible = "stericsson,db8500-prcmu-regulator", },
-       { .compatible = "stericsson,ab8500", },
        { .compatible = "stericsson,ab8500-regulator", },
        { .compatible = "simple-bus"},
        { },
index 8de3b659626eed0c84e461ef64f9610f44b608e0..3eb15872c3a0352c3c6ae33b2778a17faf319650 100644 (file)
@@ -1230,14 +1230,6 @@ static struct attribute_group ab9540_attr_group = {
        .attrs  = ab9540_sysfs_entries,
 };
 
-static const struct of_device_id ab8500_match[] = {
-       {
-               .compatible = "stericsson,ab8500",
-               .data = (void *)AB8500_VERSION_AB8500,
-       },
-       {},
-};
-
 static int __devinit ab8500_probe(struct platform_device *pdev)
 {
        struct ab8500_platform_data *plat = dev_get_platdata(&pdev->dev);
@@ -1279,9 +1271,6 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
 
        if (platid)
                version = platid->driver_data;
-       else if (np)
-               version = (unsigned int)
-                       of_match_device(ab8500_match, &pdev->dev)->data;
 
        if (version != AB8500_VERSION_UNDEFINED)
                ab8500->version = version;
@@ -1478,7 +1467,6 @@ static struct platform_driver ab8500_core_driver = {
        .driver = {
                .name = "ab8500-core",
                .owner = THIS_MODULE,
-               .of_match_table = ab8500_match,
        },
        .probe  = ab8500_probe,
        .remove = __devexit_p(ab8500_remove),
index 50b49d965f2b53e78285f6595ec1ff9b3eb1b88c..bf5a054a2b91e73ac80d1a6c3f69931c3288fc8e 100644 (file)
@@ -2945,6 +2945,14 @@ static struct regulator_init_data db8500_regulators[DB8500_NUM_REGULATORS] = {
        },
 };
 
+static struct resource ab8500_resources[] = {
+       [0] = {
+               .start  = IRQ_DB8500_AB8500,
+               .end    = IRQ_DB8500_AB8500,
+               .flags  = IORESOURCE_IRQ
+       }
+};
+
 static struct mfd_cell db8500_prcmu_devs[] = {
        {
                .name = "db8500-prcmu-regulators",
@@ -2956,6 +2964,13 @@ static struct mfd_cell db8500_prcmu_devs[] = {
                .name = "cpufreq-u8500",
                .of_compatible = "stericsson,cpufreq-u8500",
        },
+       {
+               .name = "ab8500-core",
+               .of_compatible = "stericsson,ab8500",
+               .num_resources = ARRAY_SIZE(ab8500_resources),
+               .resources = ab8500_resources,
+               .id = AB8500_VERSION_AB8500,
+       },
 };
 
 /**