aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2012-06-29 04:49:13 -0400
committerArchit Taneja <archit@ti.com>2012-06-29 05:16:43 -0400
commit5cf9a264115da9b69a2cdbe43ea0e741844bfef6 (patch)
treef3803e94c1fc192c081c4b4090e2df9328888a1d /drivers/video/omap2/dss
parentc56fb3ef051c6cafca48c0ddcf52a570d6257574 (diff)
OMAPDSS: DPI: Configure dss_lcd_mgr_config struct with lcd manager parameters
Create a dss_lcd_mgr_config struct instance in DPI. Fill up all the parameters of the struct with configurations held by the panel, and the configurations required by DPI. Use these to write to the DISPC registers. These direct register writes would be later replaced by a function which applies the configuration using the shadow register programming model. The DISPC_DIVISORo registers were written in the functions dpi_set_dispc_clk() and dpi_set_dsi_clk(), now they just fill up the dispc_clock_info parameter in mgr_config. They are written later in dpi_config_lcd_manager. Signed-off-by: Archit Taneja <archit@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss')
-rw-r--r--drivers/video/omap2/dss/dpi.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index bb0aad8e960a..6664775c3e45 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -38,6 +38,8 @@
38static struct { 38static struct {
39 struct regulator *vdds_dsi_reg; 39 struct regulator *vdds_dsi_reg;
40 struct platform_device *dsidev; 40 struct platform_device *dsidev;
41
42 struct dss_lcd_mgr_config mgr_config;
41} dpi; 43} dpi;
42 44
43static struct platform_device *dpi_get_dsidev(enum omap_dss_clk_source clk) 45static struct platform_device *dpi_get_dsidev(enum omap_dss_clk_source clk)
@@ -83,7 +85,7 @@ static int dpi_set_dsi_clk(struct omap_dss_device *dssdev,
83 85
84 dss_select_dispc_clk_source(dssdev->clocks.dispc.dispc_fclk_src); 86 dss_select_dispc_clk_source(dssdev->clocks.dispc.dispc_fclk_src);
85 87
86 dispc_mgr_set_clock_div(dssdev->manager->id, &dispc_cinfo); 88 dpi.mgr_config.clock_info = dispc_cinfo;
87 89
88 *fck = dsi_cinfo.dsi_pll_hsdiv_dispc_clk; 90 *fck = dsi_cinfo.dsi_pll_hsdiv_dispc_clk;
89 *lck_div = dispc_cinfo.lck_div; 91 *lck_div = dispc_cinfo.lck_div;
@@ -108,7 +110,7 @@ static int dpi_set_dispc_clk(struct omap_dss_device *dssdev,
108 if (r) 110 if (r)
109 return r; 111 return r;
110 112
111 dispc_mgr_set_clock_div(dssdev->manager->id, &dispc_cinfo); 113 dpi.mgr_config.clock_info = dispc_cinfo;
112 114
113 *fck = dss_cinfo.fck; 115 *fck = dss_cinfo.fck;
114 *lck_div = dispc_cinfo.lck_div; 116 *lck_div = dispc_cinfo.lck_div;
@@ -149,15 +151,32 @@ static int dpi_set_mode(struct omap_dss_device *dssdev)
149 return 0; 151 return 0;
150} 152}
151 153
152static void dpi_basic_init(struct omap_dss_device *dssdev) 154static void dpi_config_lcd_manager(struct omap_dss_device *dssdev)
153{ 155{
154 dispc_mgr_set_io_pad_mode(DSS_IO_PAD_MODE_BYPASS); 156 dpi.mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
155 dispc_mgr_enable_stallmode(dssdev->manager->id, false);
156 157
157 dispc_mgr_set_lcd_type_tft(dssdev->manager->id); 158 dpi.mgr_config.stallmode = false;
159 dpi.mgr_config.fifohandcheck = false;
160
161 dpi.mgr_config.video_port_width = dssdev->phy.dpi.data_lines;
162
163 dpi.mgr_config.lcden_sig_polarity = 0;
164
165 dispc_mgr_set_io_pad_mode(dpi.mgr_config.io_pad_mode);
166 dispc_mgr_enable_stallmode(dssdev->manager->id,
167 dpi.mgr_config.stallmode);
168 dispc_mgr_enable_fifohandcheck(dssdev->manager->id,
169 dpi.mgr_config.fifohandcheck);
158 170
159 dispc_mgr_set_tft_data_lines(dssdev->manager->id, 171 dispc_mgr_set_tft_data_lines(dssdev->manager->id,
160 dssdev->phy.dpi.data_lines); 172 dpi.mgr_config.video_port_width);
173
174 dispc_mgr_set_clock_div(dssdev->manager->id,
175 &dpi.mgr_config.clock_info);
176
177 dispc_lcd_enable_signal_polarity(dpi.mgr_config.lcden_sig_polarity);
178
179 dispc_mgr_set_lcd_type_tft(dssdev->manager->id);
161} 180}
162 181
163int omapdss_dpi_display_enable(struct omap_dss_device *dssdev) 182int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
@@ -190,8 +209,6 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
190 if (r) 209 if (r)
191 goto err_get_dispc; 210 goto err_get_dispc;
192 211
193 dpi_basic_init(dssdev);
194
195 if (dpi_use_dsi_pll(dssdev)) { 212 if (dpi_use_dsi_pll(dssdev)) {
196 r = dsi_runtime_get(dpi.dsidev); 213 r = dsi_runtime_get(dpi.dsidev);
197 if (r) 214 if (r)
@@ -206,6 +223,8 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
206 if (r) 223 if (r)
207 goto err_set_mode; 224 goto err_set_mode;
208 225
226 dpi_config_lcd_manager(dssdev);
227
209 mdelay(2); 228 mdelay(2);
210 229
211 r = dss_mgr_enable(dssdev->manager); 230 r = dss_mgr_enable(dssdev->manager);