diff options
| -rw-r--r-- | arch/arm/mach-omap2/display.c | 38 | ||||
| -rw-r--r-- | include/video/omapdss.h | 14 | 
2 files changed, 52 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index 1011995f150..28f508724a5 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -284,6 +284,35 @@ err:  	return ERR_PTR(r);  } +static enum omapdss_version __init omap_display_get_version(void) +{ +	if (cpu_is_omap24xx()) +		return OMAPDSS_VER_OMAP24xx; +	else if (cpu_is_omap3630()) +		return OMAPDSS_VER_OMAP3630; +	else if (cpu_is_omap34xx()) { +		if (soc_is_am35xx()) { +			return OMAPDSS_VER_AM35xx; +		} else { +			if (omap_rev() < OMAP3430_REV_ES3_0) +				return OMAPDSS_VER_OMAP34xx_ES1; +			else +				return OMAPDSS_VER_OMAP34xx_ES3; +		} +	} else if (omap_rev() == OMAP4430_REV_ES1_0) +		return OMAPDSS_VER_OMAP4430_ES1; +	else if (omap_rev() == OMAP4430_REV_ES2_0 || +			omap_rev() == OMAP4430_REV_ES2_1 || +			omap_rev() == OMAP4430_REV_ES2_2) +		return OMAPDSS_VER_OMAP4430_ES2; +	else if (cpu_is_omap44xx()) +		return OMAPDSS_VER_OMAP4; +	else if (soc_is_omap54xx()) +		return OMAPDSS_VER_OMAP5; +	else +		return OMAPDSS_VER_UNKNOWN; +} +  int __init omap_display_init(struct omap_dss_board_info *board_data)  {  	int r = 0; @@ -291,9 +320,18 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)  	int i, oh_count;  	const struct omap_dss_hwmod_data *curr_dss_hwmod;  	struct platform_device *dss_pdev; +	enum omapdss_version ver;  	/* create omapdss device */ +	ver = omap_display_get_version(); + +	if (ver == OMAPDSS_VER_UNKNOWN) { +		pr_err("DSS not supported on this SoC\n"); +		return -ENODEV; +	} + +	board_data->version = ver;  	board_data->dsi_enable_pads = omap_dsi_enable_pads;  	board_data->dsi_disable_pads = omap_dsi_disable_pads;  	board_data->get_context_loss_count = omap_pm_get_dev_context_loss_count; diff --git a/include/video/omapdss.h b/include/video/omapdss.h index 3729173b7fb..88c829466fc 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h @@ -314,6 +314,19 @@ int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel);  int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel);  void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel); +enum omapdss_version { +	OMAPDSS_VER_UNKNOWN = 0, +	OMAPDSS_VER_OMAP24xx, +	OMAPDSS_VER_OMAP34xx_ES1,	/* OMAP3430 ES1.0, 2.0 */ +	OMAPDSS_VER_OMAP34xx_ES3,	/* OMAP3430 ES3.0+ */ +	OMAPDSS_VER_OMAP3630, +	OMAPDSS_VER_AM35xx, +	OMAPDSS_VER_OMAP4430_ES1,	/* OMAP4430 ES1.0 */ +	OMAPDSS_VER_OMAP4430_ES2,	/* OMAP4430 ES2.0, 2.1, 2.2 */ +	OMAPDSS_VER_OMAP4,		/* All other OMAP4s */ +	OMAPDSS_VER_OMAP5, +}; +  /* Board specific data */  struct omap_dss_board_info {  	int (*get_context_loss_count)(struct device *dev); @@ -323,6 +336,7 @@ struct omap_dss_board_info {  	int (*dsi_enable_pads)(int dsi_id, unsigned lane_mask);  	void (*dsi_disable_pads)(int dsi_id, unsigned lane_mask);  	int (*set_min_bus_tput)(struct device *dev, unsigned long r); +	enum omapdss_version version;  };  /* Init with the board info */  |