aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/dss.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/dss.c')
-rw-r--r--drivers/video/omap2/dss/dss.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 5f6eea801b06..602102cebcbf 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -35,8 +35,6 @@
35 35
36#include <video/omapdss.h> 36#include <video/omapdss.h>
37 37
38#include <plat/cpu.h>
39
40#include "dss.h" 38#include "dss.h"
41#include "dss_features.h" 39#include "dss_features.h"
42 40
@@ -796,29 +794,46 @@ static const struct dss_features omap54xx_dss_feats __initconst = {
796 .dpi_select_source = &dss_dpi_select_source_omap5, 794 .dpi_select_source = &dss_dpi_select_source_omap5,
797}; 795};
798 796
799static int __init dss_init_features(struct device *dev) 797static int __init dss_init_features(struct platform_device *pdev)
800{ 798{
799 struct omap_dss_board_info *pdata = pdev->dev.platform_data;
801 const struct dss_features *src; 800 const struct dss_features *src;
802 struct dss_features *dst; 801 struct dss_features *dst;
803 802
804 dst = devm_kzalloc(dev, sizeof(*dst), GFP_KERNEL); 803 dst = devm_kzalloc(&pdev->dev, sizeof(*dst), GFP_KERNEL);
805 if (!dst) { 804 if (!dst) {
806 dev_err(dev, "Failed to allocate local DSS Features\n"); 805 dev_err(&pdev->dev, "Failed to allocate local DSS Features\n");
807 return -ENOMEM; 806 return -ENOMEM;
808 } 807 }
809 808
810 if (cpu_is_omap24xx()) 809 switch (pdata->version) {
810 case OMAPDSS_VER_OMAP24xx:
811 src = &omap24xx_dss_feats; 811 src = &omap24xx_dss_feats;
812 else if (cpu_is_omap3630()) 812 break;
813 src = &omap3630_dss_feats; 813
814 else if (cpu_is_omap34xx()) 814 case OMAPDSS_VER_OMAP34xx_ES1:
815 case OMAPDSS_VER_OMAP34xx_ES3:
816 case OMAPDSS_VER_AM35xx:
815 src = &omap34xx_dss_feats; 817 src = &omap34xx_dss_feats;
816 else if (cpu_is_omap44xx()) 818 break;
819
820 case OMAPDSS_VER_OMAP3630:
821 src = &omap3630_dss_feats;
822 break;
823
824 case OMAPDSS_VER_OMAP4430_ES1:
825 case OMAPDSS_VER_OMAP4430_ES2:
826 case OMAPDSS_VER_OMAP4:
817 src = &omap44xx_dss_feats; 827 src = &omap44xx_dss_feats;
818 else if (soc_is_omap54xx()) 828 break;
829
830 case OMAPDSS_VER_OMAP5:
819 src = &omap54xx_dss_feats; 831 src = &omap54xx_dss_feats;
820 else 832 break;
833
834 default:
821 return -ENODEV; 835 return -ENODEV;
836 }
822 837
823 memcpy(dst, src, sizeof(*dst)); 838 memcpy(dst, src, sizeof(*dst));
824 dss.feat = dst; 839 dss.feat = dst;
@@ -835,7 +850,7 @@ static int __init omap_dsshw_probe(struct platform_device *pdev)
835 850
836 dss.pdev = pdev; 851 dss.pdev = pdev;
837 852
838 r = dss_init_features(&dss.pdev->dev); 853 r = dss_init_features(dss.pdev);
839 if (r) 854 if (r)
840 return r; 855 return r;
841 856