aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss')
-rw-r--r--drivers/video/omap2/dss/dsi.c9
-rw-r--r--drivers/video/omap2/dss/dss.c8
-rw-r--r--drivers/video/omap2/dss/dss.h2
-rw-r--r--drivers/video/omap2/dss/dss_features.c11
-rw-r--r--drivers/video/omap2/dss/dss_features.h1
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
102enum omap_burst_size { 100enum 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 */
241unsigned long dss_feat_get_max_dss_fck(void)
242{
243 return omap_current_dss_features->max_dss_fck;
244}
245
235enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel) 246enum 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 */
53int dss_feat_get_num_mgrs(void); 53int dss_feat_get_num_mgrs(void);
54int dss_feat_get_num_ovls(void); 54int dss_feat_get_num_ovls(void);
55unsigned long dss_feat_get_max_dss_fck(void);
55enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel); 56enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel);
56enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane); 57enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane);
57bool dss_feat_color_mode_supported(enum omap_plane plane, 58bool dss_feat_color_mode_supported(enum omap_plane plane,