diff options
Diffstat (limited to 'drivers/video/omap2/dss')
| -rw-r--r-- | drivers/video/omap2/dss/core.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dispc.c | 43 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dss.c | 39 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dss_features.c | 64 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dss_features.h | 5 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 3 | 
6 files changed, 105 insertions, 51 deletions
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index b2af72dc20b..d94ef9e31a3 100644 --- a/drivers/video/omap2/dss/core.c +++ b/drivers/video/omap2/dss/core.c @@ -237,7 +237,7 @@ static int __init omap_dss_probe(struct platform_device *pdev)  	core.pdev = pdev; -	dss_features_init(); +	dss_features_init(pdata->version);  	dss_apply_init(); diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index b43477a5fae..a5ab354f267 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c @@ -37,8 +37,6 @@  #include <linux/platform_device.h>  #include <linux/pm_runtime.h> -#include <plat/cpu.h> -  #include <video/omapdss.h>  #include "dss.h" @@ -4042,29 +4040,44 @@ static const struct dispc_features omap44xx_dispc_feats __initconst = {  	.gfx_fifo_workaround	=	true,  }; -static int __init dispc_init_features(struct device *dev) +static int __init dispc_init_features(struct platform_device *pdev)  { +	struct omap_dss_board_info *pdata = pdev->dev.platform_data;  	const struct dispc_features *src;  	struct dispc_features *dst; -	dst = devm_kzalloc(dev, sizeof(*dst), GFP_KERNEL); +	dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);  	if (!dst) { -		dev_err(dev, "Failed to allocate DISPC Features\n"); +		dev_err(&pdev->dev, "Failed to allocate DISPC Features\n");  		return -ENOMEM;  	} -	if (cpu_is_omap24xx()) { +	switch (pdata->version) { +	case OMAPDSS_VER_OMAP24xx:  		src = &omap24xx_dispc_feats; -	} else if (cpu_is_omap34xx()) { -		if (omap_rev() < OMAP3430_REV_ES3_0) -			src = &omap34xx_rev1_0_dispc_feats; -		else -			src = &omap34xx_rev3_0_dispc_feats; -	} else if (cpu_is_omap44xx()) { +		break; + +	case OMAPDSS_VER_OMAP34xx_ES1: +		src = &omap34xx_rev1_0_dispc_feats; +		break; + +	case OMAPDSS_VER_OMAP34xx_ES3: +	case OMAPDSS_VER_OMAP3630: +	case OMAPDSS_VER_AM35xx: +		src = &omap34xx_rev3_0_dispc_feats; +		break; + +	case OMAPDSS_VER_OMAP4430_ES1: +	case OMAPDSS_VER_OMAP4430_ES2: +	case OMAPDSS_VER_OMAP4:  		src = &omap44xx_dispc_feats; -	} else if (soc_is_omap54xx()) { +		break; + +	case OMAPDSS_VER_OMAP5:  		src = &omap44xx_dispc_feats; -	} else { +		break; + +	default:  		return -ENODEV;  	} @@ -4084,7 +4097,7 @@ static int __init omap_dispchw_probe(struct platform_device *pdev)  	dispc.pdev = pdev; -	r = dispc_init_features(&dispc.pdev->dev); +	r = dispc_init_features(dispc.pdev);  	if (r)  		return r; diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index 2ab1c3e9655..363852a0f76 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c @@ -35,8 +35,6 @@  #include <video/omapdss.h> -#include <plat/cpu.h> -  #include "dss.h"  #include "dss_features.h" @@ -792,29 +790,46 @@ static const struct dss_features omap54xx_dss_feats __initconst = {  	.dpi_select_source	=	&dss_dpi_select_source_omap5,  }; -static int __init dss_init_features(struct device *dev) +static int __init dss_init_features(struct platform_device *pdev)  { +	struct omap_dss_board_info *pdata = pdev->dev.platform_data;  	const struct dss_features *src;  	struct dss_features *dst; -	dst = devm_kzalloc(dev, sizeof(*dst), GFP_KERNEL); +	dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);  	if (!dst) { -		dev_err(dev, "Failed to allocate local DSS Features\n"); +		dev_err(&pdev->dev, "Failed to allocate local DSS Features\n");  		return -ENOMEM;  	} -	if (cpu_is_omap24xx()) +	switch (pdata->version) { +	case OMAPDSS_VER_OMAP24xx:  		src = &omap24xx_dss_feats; -	else if (cpu_is_omap34xx()) +		break; + +	case OMAPDSS_VER_OMAP34xx_ES1: +	case OMAPDSS_VER_OMAP34xx_ES3: +	case OMAPDSS_VER_AM35xx:  		src = &omap34xx_dss_feats; -	else if (cpu_is_omap3630()) +		break; + +	case OMAPDSS_VER_OMAP3630:  		src = &omap3630_dss_feats; -	else if (cpu_is_omap44xx()) +		break; + +	case OMAPDSS_VER_OMAP4430_ES1: +	case OMAPDSS_VER_OMAP4430_ES2: +	case OMAPDSS_VER_OMAP4:  		src = &omap44xx_dss_feats; -	else if (soc_is_omap54xx()) +		break; + +	case OMAPDSS_VER_OMAP5:  		src = &omap54xx_dss_feats; -	else +		break; + +	default:  		return -ENODEV; +	}  	memcpy(dst, src, sizeof(*dst));  	dss.feat = dst; @@ -831,7 +846,7 @@ static int __init omap_dsshw_probe(struct platform_device *pdev)  	dss.pdev = pdev; -	r = dss_init_features(&dss.pdev->dev); +	r = dss_init_features(dss.pdev);  	if (r)  		return r; diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c index acbc1e1efba..3e8287c8709 100644 --- a/drivers/video/omap2/dss/dss_features.c +++ b/drivers/video/omap2/dss/dss_features.c @@ -23,7 +23,6 @@  #include <linux/slab.h>  #include <video/omapdss.h> -#include <plat/cpu.h>  #include "dss.h"  #include "dss_features.h" @@ -825,10 +824,20 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {  }; -void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data) +void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data, +		enum omapdss_version version)  { -	if (cpu_is_omap44xx()) +	switch (version) { +	case OMAPDSS_VER_OMAP4430_ES1: +	case OMAPDSS_VER_OMAP4430_ES2: +	case OMAPDSS_VER_OMAP4:  		ip_data->ops = &omap4_hdmi_functions; +		break; +	default: +		ip_data->ops = NULL; +	} + +	WARN_ON(ip_data->ops == NULL);  }  #endif @@ -929,29 +938,44 @@ bool dss_feat_rotation_type_supported(enum omap_dss_rotation_type rot_type)  	return omap_current_dss_features->supported_rotation_types & rot_type;  } -void dss_features_init(void) +void dss_features_init(enum omapdss_version version)  { -	if (cpu_is_omap24xx()) +	switch (version) { +	case OMAPDSS_VER_OMAP24xx:  		omap_current_dss_features = &omap2_dss_features; -	else if (cpu_is_omap3630()) +		break; + +	case OMAPDSS_VER_OMAP34xx_ES1: +	case OMAPDSS_VER_OMAP34xx_ES3: +		omap_current_dss_features = &omap3430_dss_features; +		break; + +	case OMAPDSS_VER_OMAP3630:  		omap_current_dss_features = &omap3630_dss_features; -	else if (cpu_is_omap34xx()) { -		if (soc_is_am35xx()) { -			omap_current_dss_features = &am35xx_dss_features; -		} else { -			omap_current_dss_features = &omap3430_dss_features; -		} -	} -	else if (omap_rev() == OMAP4430_REV_ES1_0) +		break; + +	case OMAPDSS_VER_OMAP4430_ES1:  		omap_current_dss_features = &omap4430_es1_0_dss_features; -	else if (omap_rev() == OMAP4430_REV_ES2_0 || -		omap_rev() == OMAP4430_REV_ES2_1 || -		omap_rev() == OMAP4430_REV_ES2_2) +		break; + +	case OMAPDSS_VER_OMAP4430_ES2:  		omap_current_dss_features = &omap4430_es2_0_1_2_dss_features; -	else if (cpu_is_omap44xx()) +		break; + +	case OMAPDSS_VER_OMAP4:  		omap_current_dss_features = &omap4_dss_features; -	else if (soc_is_omap54xx()) +		break; + +	case OMAPDSS_VER_OMAP5:  		omap_current_dss_features = &omap5_dss_features; -	else +		break; + +	case OMAPDSS_VER_AM35xx: +		omap_current_dss_features = &am35xx_dss_features; +		break; + +	default:  		DSSWARN("Unsupported OMAP version"); +		break; +	}  } diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h index 9218113b5e8..fc492ef72a5 100644 --- a/drivers/video/omap2/dss/dss_features.h +++ b/drivers/video/omap2/dss/dss_features.h @@ -123,8 +123,9 @@ bool dss_feat_rotation_type_supported(enum omap_dss_rotation_type rot_type);  bool dss_has_feature(enum dss_feat_id id);  void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end); -void dss_features_init(void); +void dss_features_init(enum omapdss_version version);  #if defined(CONFIG_OMAP4_DSS_HDMI) -void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data); +void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data, +		enum omapdss_version version);  #endif  #endif diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index a48a7dd75b3..adcc906d12f 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -323,6 +323,7 @@ static void hdmi_runtime_put(void)  static int __init hdmi_init_display(struct omap_dss_device *dssdev)  { +	struct omap_dss_board_info *pdata = hdmi.pdev->dev.platform_data;  	int r;  	struct gpio gpios[] = { @@ -333,7 +334,7 @@ static int __init hdmi_init_display(struct omap_dss_device *dssdev)  	DSSDBG("init_display\n"); -	dss_init_hdmi_ip_ops(&hdmi.ip_data); +	dss_init_hdmi_ip_ops(&hdmi.ip_data, pdata->version);  	if (hdmi.vdda_hdmi_dac_reg == NULL) {  		struct regulator *reg;  |