diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/omap2/dss/dsi.c | 9 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss.c | 8 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss.h | 2 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss_features.c | 11 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss_features.h | 1 |
5 files changed, 23 insertions, 8 deletions
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c index c3019d95618..705599ad316 100644 --- a/drivers/video/omap2/dss/dsi.c +++ b/drivers/video/omap2/dss/dsi.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <plat/clock.h> | 38 | #include <plat/clock.h> |
39 | 39 | ||
40 | #include "dss.h" | 40 | #include "dss.h" |
41 | #include "dss_features.h" | ||
41 | 42 | ||
42 | /*#define VERBOSE_IRQ*/ | 43 | /*#define VERBOSE_IRQ*/ |
43 | #define DSI_CATCH_MISSING_TE | 44 | #define DSI_CATCH_MISSING_TE |
@@ -856,10 +857,12 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck, | |||
856 | struct dispc_clock_info best_dispc; | 857 | struct dispc_clock_info best_dispc; |
857 | int min_fck_per_pck; | 858 | int min_fck_per_pck; |
858 | int match = 0; | 859 | int match = 0; |
859 | unsigned long dss_clk_fck2; | 860 | unsigned long dss_clk_fck2, max_dss_fck; |
860 | 861 | ||
861 | dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_SYSCK); | 862 | dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_SYSCK); |
862 | 863 | ||
864 | max_dss_fck = dss_feat_get_max_dss_fck(); | ||
865 | |||
863 | if (req_pck == dsi.cache_req_pck && | 866 | if (req_pck == dsi.cache_req_pck && |
864 | dsi.cache_cinfo.clkin == dss_clk_fck2) { | 867 | dsi.cache_cinfo.clkin == dss_clk_fck2) { |
865 | DSSDBG("DSI clock info found from cache\n"); | 868 | DSSDBG("DSI clock info found from cache\n"); |
@@ -872,7 +875,7 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck, | |||
872 | min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK; | 875 | min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK; |
873 | 876 | ||
874 | if (min_fck_per_pck && | 877 | if (min_fck_per_pck && |
875 | req_pck * min_fck_per_pck > DISPC_MAX_FCK) { | 878 | req_pck * min_fck_per_pck > max_dss_fck) { |
876 | DSSERR("Requested pixel clock not possible with the current " | 879 | DSSERR("Requested pixel clock not possible with the current " |
877 | "OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning " | 880 | "OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning " |
878 | "the constraint off.\n"); | 881 | "the constraint off.\n"); |
@@ -925,7 +928,7 @@ retry: | |||
925 | if (cur.dsi1_pll_fclk < req_pck) | 928 | if (cur.dsi1_pll_fclk < req_pck) |
926 | break; | 929 | break; |
927 | 930 | ||
928 | if (cur.dsi1_pll_fclk > DISPC_MAX_FCK) | 931 | if (cur.dsi1_pll_fclk > max_dss_fck) |
929 | continue; | 932 | continue; |
930 | 933 | ||
931 | if (min_fck_per_pck && | 934 | if (min_fck_per_pck && |
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c index 0cf5f8bd1c8..01be82a4f42 100644 --- a/drivers/video/omap2/dss/dss.c +++ b/drivers/video/omap2/dss/dss.c | |||
@@ -387,7 +387,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck, | |||
387 | struct dss_clock_info best_dss; | 387 | struct dss_clock_info best_dss; |
388 | struct dispc_clock_info best_dispc; | 388 | struct dispc_clock_info best_dispc; |
389 | 389 | ||
390 | unsigned long fck; | 390 | unsigned long fck, max_dss_fck; |
391 | 391 | ||
392 | u16 fck_div; | 392 | u16 fck_div; |
393 | 393 | ||
@@ -396,6 +396,8 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck, | |||
396 | 396 | ||
397 | prate = dss_get_dpll4_rate(); | 397 | prate = dss_get_dpll4_rate(); |
398 | 398 | ||
399 | max_dss_fck = dss_feat_get_max_dss_fck(); | ||
400 | |||
399 | fck = dss_clk_get_rate(DSS_CLK_FCK); | 401 | fck = dss_clk_get_rate(DSS_CLK_FCK); |
400 | if (req_pck == dss.cache_req_pck && | 402 | if (req_pck == dss.cache_req_pck && |
401 | ((cpu_is_omap34xx() && prate == dss.cache_prate) || | 403 | ((cpu_is_omap34xx() && prate == dss.cache_prate) || |
@@ -409,7 +411,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck, | |||
409 | min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK; | 411 | min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK; |
410 | 412 | ||
411 | if (min_fck_per_pck && | 413 | if (min_fck_per_pck && |
412 | req_pck * min_fck_per_pck > DISPC_MAX_FCK) { | 414 | req_pck * min_fck_per_pck > max_dss_fck) { |
413 | DSSERR("Requested pixel clock not possible with the current " | 415 | DSSERR("Requested pixel clock not possible with the current " |
414 | "OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning " | 416 | "OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning " |
415 | "the constraint off.\n"); | 417 | "the constraint off.\n"); |
@@ -445,7 +447,7 @@ retry: | |||
445 | else | 447 | else |
446 | fck = prate / fck_div * 2; | 448 | fck = prate / fck_div * 2; |
447 | 449 | ||
448 | if (fck > DISPC_MAX_FCK) | 450 | if (fck > max_dss_fck) |
449 | continue; | 451 | continue; |
450 | 452 | ||
451 | if (min_fck_per_pck && | 453 | if (min_fck_per_pck && |
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h index 4b02e079f20..7fe32d1647f 100644 --- a/drivers/video/omap2/dss/dss.h +++ b/drivers/video/omap2/dss/dss.h | |||
@@ -97,8 +97,6 @@ extern unsigned int dss_debug; | |||
97 | #define FLD_MOD(orig, val, start, end) \ | 97 | #define FLD_MOD(orig, val, start, end) \ |
98 | (((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end)) | 98 | (((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end)) |
99 | 99 | ||
100 | #define DISPC_MAX_FCK 173000000 | ||
101 | |||
102 | enum omap_burst_size { | 100 | enum omap_burst_size { |
103 | OMAP_DSS_BURST_4x32 = 0, | 101 | OMAP_DSS_BURST_4x32 = 0, |
104 | OMAP_DSS_BURST_8x32 = 1, | 102 | OMAP_DSS_BURST_8x32 = 1, |
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c index 679be14b73a..3ebe0d91afd 100644 --- a/drivers/video/omap2/dss/dss_features.c +++ b/drivers/video/omap2/dss/dss_features.c | |||
@@ -41,6 +41,7 @@ struct omap_dss_features { | |||
41 | 41 | ||
42 | const int num_mgrs; | 42 | const int num_mgrs; |
43 | const int num_ovls; | 43 | const int num_ovls; |
44 | const unsigned long max_dss_fck; | ||
44 | const enum omap_display_type *supported_displays; | 45 | const enum omap_display_type *supported_displays; |
45 | const enum omap_color_mode *supported_color_modes; | 46 | const enum omap_color_mode *supported_color_modes; |
46 | }; | 47 | }; |
@@ -168,6 +169,7 @@ static struct omap_dss_features omap2_dss_features = { | |||
168 | 169 | ||
169 | .num_mgrs = 2, | 170 | .num_mgrs = 2, |
170 | .num_ovls = 3, | 171 | .num_ovls = 3, |
172 | .max_dss_fck = 173000000, | ||
171 | .supported_displays = omap2_dss_supported_displays, | 173 | .supported_displays = omap2_dss_supported_displays, |
172 | .supported_color_modes = omap2_dss_supported_color_modes, | 174 | .supported_color_modes = omap2_dss_supported_color_modes, |
173 | }; | 175 | }; |
@@ -185,6 +187,7 @@ static struct omap_dss_features omap3430_dss_features = { | |||
185 | 187 | ||
186 | .num_mgrs = 2, | 188 | .num_mgrs = 2, |
187 | .num_ovls = 3, | 189 | .num_ovls = 3, |
190 | .max_dss_fck = 173000000, | ||
188 | .supported_displays = omap3430_dss_supported_displays, | 191 | .supported_displays = omap3430_dss_supported_displays, |
189 | .supported_color_modes = omap3_dss_supported_color_modes, | 192 | .supported_color_modes = omap3_dss_supported_color_modes, |
190 | }; | 193 | }; |
@@ -202,6 +205,7 @@ static struct omap_dss_features omap3630_dss_features = { | |||
202 | 205 | ||
203 | .num_mgrs = 2, | 206 | .num_mgrs = 2, |
204 | .num_ovls = 3, | 207 | .num_ovls = 3, |
208 | .max_dss_fck = 173000000, | ||
205 | .supported_displays = omap3630_dss_supported_displays, | 209 | .supported_displays = omap3630_dss_supported_displays, |
206 | .supported_color_modes = omap3_dss_supported_color_modes, | 210 | .supported_color_modes = omap3_dss_supported_color_modes, |
207 | }; | 211 | }; |
@@ -217,6 +221,7 @@ static struct omap_dss_features omap4_dss_features = { | |||
217 | 221 | ||
218 | .num_mgrs = 3, | 222 | .num_mgrs = 3, |
219 | .num_ovls = 3, | 223 | .num_ovls = 3, |
224 | .max_dss_fck = 186000000, | ||
220 | .supported_displays = omap4_dss_supported_displays, | 225 | .supported_displays = omap4_dss_supported_displays, |
221 | .supported_color_modes = omap3_dss_supported_color_modes, | 226 | .supported_color_modes = omap3_dss_supported_color_modes, |
222 | }; | 227 | }; |
@@ -232,6 +237,12 @@ int dss_feat_get_num_ovls(void) | |||
232 | return omap_current_dss_features->num_ovls; | 237 | return omap_current_dss_features->num_ovls; |
233 | } | 238 | } |
234 | 239 | ||
240 | /* Max supported DSS FCK in Hz */ | ||
241 | unsigned long dss_feat_get_max_dss_fck(void) | ||
242 | { | ||
243 | return omap_current_dss_features->max_dss_fck; | ||
244 | } | ||
245 | |||
235 | enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel) | 246 | enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel) |
236 | { | 247 | { |
237 | return omap_current_dss_features->supported_displays[channel]; | 248 | return omap_current_dss_features->supported_displays[channel]; |
diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h index b3f81415507..18ab1951581 100644 --- a/drivers/video/omap2/dss/dss_features.h +++ b/drivers/video/omap2/dss/dss_features.h | |||
@@ -52,6 +52,7 @@ enum dss_feat_reg_field { | |||
52 | /* DSS Feature Functions */ | 52 | /* DSS Feature Functions */ |
53 | int dss_feat_get_num_mgrs(void); | 53 | int dss_feat_get_num_mgrs(void); |
54 | int dss_feat_get_num_ovls(void); | 54 | int dss_feat_get_num_ovls(void); |
55 | unsigned long dss_feat_get_max_dss_fck(void); | ||
55 | enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel); | 56 | enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel); |
56 | enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane); | 57 | enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane); |
57 | bool dss_feat_color_mode_supported(enum omap_plane plane, | 58 | bool dss_feat_color_mode_supported(enum omap_plane plane, |