diff options
| author | Archit Taneja <archit@ti.com> | 2011-04-18 09:32:13 +0530 | 
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2011-05-11 14:20:11 +0300 | 
| commit | 179e045369a36c67d590463548749cacc53c9d85 (patch) | |
| tree | 87ee44a583298da36789cf4e6920e670bdc9dfd2 /arch/arm/mach-omap2/display.c | |
| parent | ab46d8b2a346ef9d2dc70d7e11aef5e752a090f8 (diff) | |
| download | olio-linux-3.10-179e045369a36c67d590463548749cacc53c9d85.tar.xz olio-linux-3.10-179e045369a36c67d590463548749cacc53c9d85.zip  | |
OMAP2PLUS: DSS2: Clean up omap_display_init()
Currently, omap_display_init() maintains arrays for hwmod name(oh_name) and the
correspnding platform_device name(dev_name) needed by omap_device_build().
A variable oh_count keeps a track of the number of devices to build from oh_name
based on what omap revision it is.
Clean this up by maintaining an array of omap_dss_hwmod_data struct which is
defined for each omap revision as suggested by Tomi Valkeinen. Assign the
corresponding omap_dss_hwmod_data array struct to the pointer curr_dss_hwmod in
omap_display_init().
Signed-off-by: Archit Taneja <archit@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2/display.c')
| -rw-r--r-- | arch/arm/mach-omap2/display.c | 75 | 
1 files changed, 49 insertions, 26 deletions
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index faebcbc52b0..543fcb8b518 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -56,37 +56,58 @@ static bool opt_clock_available(const char *clk_role)  	return false;  } +struct omap_dss_hwmod_data { +	const char *oh_name; +	const char *dev_name; +	const int id; +}; + +static const struct omap_dss_hwmod_data omap2_dss_hwmod_data[] __initdata = { +	{ "dss_core", "omapdss_dss", -1 }, +	{ "dss_dispc", "omapdss_dispc", -1 }, +	{ "dss_rfbi", "omapdss_rfbi", -1 }, +	{ "dss_venc", "omapdss_venc", -1 }, +}; + +static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initdata = { +	{ "dss_core", "omapdss_dss", -1 }, +	{ "dss_dispc", "omapdss_dispc", -1 }, +	{ "dss_rfbi", "omapdss_rfbi", -1 }, +	{ "dss_venc", "omapdss_venc", -1 }, +	{ "dss_dsi1", "omapdss_dsi1", -1 }, +}; + +static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = { +	{ "dss_core", "omapdss_dss", -1 }, +	{ "dss_dispc", "omapdss_dispc", -1 }, +	{ "dss_rfbi", "omapdss_rfbi", -1 }, +	{ "dss_venc", "omapdss_venc", -1 }, +	{ "dss_dsi1", "omapdss_dsi1", -1 }, +	{ "dss_dsi2", "omapdss_dsi2", -1 }, +	{ "dss_hdmi", "omapdss_hdmi", -1 }, +}; +  int __init omap_display_init(struct omap_dss_board_info *board_data)  {  	int r = 0;  	struct omap_hwmod *oh;  	struct omap_device *od; -	int i; +	int i, oh_count;  	struct omap_display_platform_data pdata; - -	/* -	 * omap: valid DSS hwmod names -	 * omap2,3,4: dss_core, dss_dispc, dss_rfbi, dss_venc -	 * omap3,4: dss_dsi1 -	 * omap4: dss_dsi2, dss_hdmi -	 */ -	char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc", -		"dss_dsi1", "dss_dsi2", "dss_hdmi" }; -	char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi", -		"omapdss_venc", "omapdss_dsi1", "omapdss_dsi2", -		"omapdss_hdmi" }; -	int oh_count; +	const struct omap_dss_hwmod_data *curr_dss_hwmod;  	memset(&pdata, 0, sizeof(pdata)); -	if (cpu_is_omap24xx()) -		oh_count = ARRAY_SIZE(oh_name) - 3; -		/* last 3 hwmod dev in oh_name are not available for omap2 */ -	else if (cpu_is_omap44xx()) -		oh_count = ARRAY_SIZE(oh_name); -	else -		oh_count = ARRAY_SIZE(oh_name) - 2; -		/* last 2 hwmod dev in oh_name are not available for omap3 */ +	if (cpu_is_omap24xx()) { +		curr_dss_hwmod = omap2_dss_hwmod_data; +		oh_count = ARRAY_SIZE(omap2_dss_hwmod_data); +	} else if (cpu_is_omap34xx()) { +		curr_dss_hwmod = omap3_dss_hwmod_data; +		oh_count = ARRAY_SIZE(omap3_dss_hwmod_data); +	} else { +		curr_dss_hwmod = omap4_dss_hwmod_data; +		oh_count = ARRAY_SIZE(omap4_dss_hwmod_data); +	}  	/* opt_clks are always associated with dss hwmod */  	oh_core = omap_hwmod_lookup("dss_core"); @@ -100,19 +121,21 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)  	pdata.opt_clock_available = opt_clock_available;  	for (i = 0; i < oh_count; i++) { -		oh = omap_hwmod_lookup(oh_name[i]); +		oh = omap_hwmod_lookup(curr_dss_hwmod[i].oh_name);  		if (!oh) { -			pr_err("Could not look up %s\n", oh_name[i]); +			pr_err("Could not look up %s\n", +				curr_dss_hwmod[i].oh_name);  			return -ENODEV;  		} -		od = omap_device_build(dev_name[i], -1, oh, &pdata, +		od = omap_device_build(curr_dss_hwmod[i].dev_name, +				curr_dss_hwmod[i].id, oh, &pdata,  				sizeof(struct omap_display_platform_data),  				omap_dss_latency,  				ARRAY_SIZE(omap_dss_latency), 0);  		if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n", -				oh_name[i])) +				curr_dss_hwmod[i].oh_name))  			return -ENODEV;  	}  	omap_display_device.dev.platform_data = board_data;  |