aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/sdi.c42
1 files changed, 26 insertions, 16 deletions
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 73f8357955a..f102eae6e2a 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -32,18 +32,34 @@
32static struct { 32static struct {
33 bool update_enabled; 33 bool update_enabled;
34 struct regulator *vdds_sdi_reg; 34 struct regulator *vdds_sdi_reg;
35} sdi;
36 35
37static void sdi_basic_init(struct omap_dss_device *dssdev) 36 struct dss_lcd_mgr_config mgr_config;
37} sdi;
38 38
39static void sdi_config_lcd_manager(struct omap_dss_device *dssdev)
39{ 40{
40 dispc_mgr_set_io_pad_mode(DSS_IO_PAD_MODE_BYPASS); 41 sdi.mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
41 dispc_mgr_enable_stallmode(dssdev->manager->id, false);
42 42
43 dispc_mgr_set_lcd_type_tft(dssdev->manager->id); 43 sdi.mgr_config.stallmode = false;
44 sdi.mgr_config.fifohandcheck = false;
45
46 sdi.mgr_config.video_port_width = 24;
47 sdi.mgr_config.lcden_sig_polarity = 1;
48
49 dispc_mgr_set_io_pad_mode(sdi.mgr_config.io_pad_mode);
50 dispc_mgr_enable_stallmode(dssdev->manager->id,
51 sdi.mgr_config.stallmode);
52 dispc_mgr_enable_fifohandcheck(dssdev->manager->id,
53 sdi.mgr_config.fifohandcheck);
44 54
45 dispc_mgr_set_tft_data_lines(dssdev->manager->id, 24); 55 dispc_mgr_set_clock_div(dssdev->manager->id,
46 dispc_lcd_enable_signal_polarity(1); 56 &sdi.mgr_config.clock_info);
57
58 dispc_mgr_set_tft_data_lines(dssdev->manager->id,
59 sdi.mgr_config.video_port_width);
60 dispc_lcd_enable_signal_polarity(sdi.mgr_config.lcden_sig_polarity);
61
62 dispc_mgr_set_lcd_type_tft(dssdev->manager->id);
47} 63}
48 64
49int omapdss_sdi_display_enable(struct omap_dss_device *dssdev) 65int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
@@ -51,8 +67,6 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
51 struct omap_video_timings *t = &dssdev->panel.timings; 67 struct omap_video_timings *t = &dssdev->panel.timings;
52 struct dss_clock_info dss_cinfo; 68 struct dss_clock_info dss_cinfo;
53 struct dispc_clock_info dispc_cinfo; 69 struct dispc_clock_info dispc_cinfo;
54 u16 lck_div, pck_div;
55 unsigned long fck;
56 unsigned long pck; 70 unsigned long pck;
57 int r; 71 int r;
58 72
@@ -75,8 +89,6 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
75 if (r) 89 if (r)
76 goto err_get_dispc; 90 goto err_get_dispc;
77 91
78 sdi_basic_init(dssdev);
79
80 /* 15.5.9.1.2 */ 92 /* 15.5.9.1.2 */
81 dssdev->panel.timings.data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE; 93 dssdev->panel.timings.data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
82 dssdev->panel.timings.sync_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE; 94 dssdev->panel.timings.sync_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
@@ -85,11 +97,9 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
85 if (r) 97 if (r)
86 goto err_calc_clock_div; 98 goto err_calc_clock_div;
87 99
88 fck = dss_cinfo.fck; 100 sdi.mgr_config.clock_info = dispc_cinfo;
89 lck_div = dispc_cinfo.lck_div;
90 pck_div = dispc_cinfo.pck_div;
91 101
92 pck = fck / lck_div / pck_div / 1000; 102 pck = dss_cinfo.fck / dispc_cinfo.lck_div / dispc_cinfo.pck_div / 1000;
93 103
94 if (pck != t->pixel_clock) { 104 if (pck != t->pixel_clock) {
95 DSSWARN("Could not find exact pixel clock. Requested %d kHz, " 105 DSSWARN("Could not find exact pixel clock. Requested %d kHz, "
@@ -106,7 +116,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
106 if (r) 116 if (r)
107 goto err_set_dss_clock_div; 117 goto err_set_dss_clock_div;
108 118
109 dispc_mgr_set_clock_div(dssdev->manager->id, &dispc_cinfo); 119 sdi_config_lcd_manager(dssdev);
110 120
111 dss_sdi_init(dssdev->phy.sdi.datapairs); 121 dss_sdi_init(dssdev->phy.sdi.datapairs);
112 r = dss_sdi_enable(); 122 r = dss_sdi_enable();