aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2013-12-06 13:52:58 -0500
committerTony Lindgren <tony@atomide.com>2013-12-08 17:15:46 -0500
commitdad12d11380882616872a8243a9c3f706fcedd31 (patch)
treebb0722a754a0351bff8370fdccd963d4514b1436
parent841af81f7a180f5793cb0d82a7a7626bbc17c028 (diff)
ARM: OMAP2+: Add support for legacy auxdata for twl
As we currently need to support a mix of legacy platform data and device tree intialized data, let's make sure things keep working for the TWL GPIOs. Mostly the issue is caused by the fact that DSS does not yet have device tree bindings, so we need to rely on the TWL GPIO callback for setting up things like LCD backlight for some boards. As of_platform_populate() for the TWL GPIO is called by twl-core after the I2C bus has been initialized, we cannot pass the auxdata table from the board init code to twl-core like we used to with just legacy platform data. So let's use the omap_device bus hook to patch in the platform data for TWL GPIO until we have sorted out the issues with the TWL GPIOs and device tree bindings. The other option was be to initialize twl core using legacy platform data, which seems like a step backwards as we're moving to device tree only initialization. And we really don't want to add custom configuration functions to the TWL GPIO driver either for this. Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r--arch/arm/mach-omap2/common.h1
-rw-r--r--arch/arm/mach-omap2/omap_device.c2
-rw-r--r--arch/arm/mach-omap2/pdata-quirks.c16
3 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
index e30ef6797c63..240db38f232c 100644
--- a/arch/arm/mach-omap2/common.h
+++ b/arch/arm/mach-omap2/common.h
@@ -293,6 +293,7 @@ static inline void omap4_cpu_resume(void)
293#endif 293#endif
294 294
295void pdata_quirks_init(struct of_device_id *); 295void pdata_quirks_init(struct of_device_id *);
296void omap_auxdata_legacy_init(struct device *dev);
296void omap_pcs_legacy_init(int irq, void (*rearm)(void)); 297void omap_pcs_legacy_init(int irq, void (*rearm)(void));
297 298
298struct omap_sdrc_params; 299struct omap_sdrc_params;
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
index 53f0735817bb..828f538b1c4e 100644
--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
@@ -36,6 +36,7 @@
36#include <linux/of.h> 36#include <linux/of.h>
37#include <linux/notifier.h> 37#include <linux/notifier.h>
38 38
39#include "common.h"
39#include "soc.h" 40#include "soc.h"
40#include "omap_device.h" 41#include "omap_device.h"
41#include "omap_hwmod.h" 42#include "omap_hwmod.h"
@@ -200,6 +201,7 @@ static int _omap_device_notifier_call(struct notifier_block *nb,
200 case BUS_NOTIFY_ADD_DEVICE: 201 case BUS_NOTIFY_ADD_DEVICE:
201 if (pdev->dev.of_node) 202 if (pdev->dev.of_node)
202 omap_device_build_from_dt(pdev); 203 omap_device_build_from_dt(pdev);
204 omap_auxdata_legacy_init(dev);
203 /* fall through */ 205 /* fall through */
204 default: 206 default:
205 od = to_omap_device(pdev); 207 od = to_omap_device(pdev);
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
index 6a7554515b6e..47afff3b9c37 100644
--- a/arch/arm/mach-omap2/pdata-quirks.c
+++ b/arch/arm/mach-omap2/pdata-quirks.c
@@ -27,6 +27,7 @@ struct pdata_init {
27}; 27};
28 28
29struct of_dev_auxdata omap_auxdata_lookup[]; 29struct of_dev_auxdata omap_auxdata_lookup[];
30static struct twl4030_gpio_platform_data twl_gpio_auxdata;
30 31
31/* 32/*
32 * Create alias for USB host PHY clock. 33 * Create alias for USB host PHY clock.
@@ -137,6 +138,21 @@ void omap_pcs_legacy_init(int irq, void (*rearm)(void))
137} 138}
138 139
139/* 140/*
141 * GPIOs for TWL are initialized by the I2C bus and need custom
142 * handing until DSS has device tree bindings.
143 */
144void omap_auxdata_legacy_init(struct device *dev)
145{
146 if (dev->platform_data)
147 return;
148
149 if (strcmp("twl4030-gpio", dev_name(dev)))
150 return;
151
152 dev->platform_data = &twl_gpio_auxdata;
153}
154
155/*
140 * Few boards still need auxdata populated before we populate 156 * Few boards still need auxdata populated before we populate
141 * the dev entries in of_platform_populate(). 157 * the dev entries in of_platform_populate().
142 */ 158 */