aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2012-09-22 03:00:17 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-09-26 07:58:49 -0400
commitd79db853000c271fbfc944dc1d4f527805109b0c (patch)
tree353e5e7eaffa2b9b5e870c848c429769ca647706 /drivers/video
parent5b54ed3ec36ddc8ac25aff9233c7d3fb3e2b629a (diff)
OMAPDSS: OVERLAY: Add position and replication as overlay caps
Add position and replication as overlay caps, and pass overlay caps as an argument to the corresponding functions. Adding position and replication to overlay caps seems a bit unnecessary, but it allows us to use the corresponding functions for writeback too. These caps will be set for all overlays, but not for writeback. This is done so writeback can reuse dispc_ovl_setup() to the maximum. Signed-off-by: Archit Taneja <archit@ti.com>
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dss/dispc.c20
-rw-r--r--drivers/video/omap2/dss/dss_features.c38
2 files changed, 40 insertions, 18 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 334842a3b527..3e1007810f83 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -698,9 +698,15 @@ static void dispc_ovl_set_ba1_uv(enum omap_plane plane, u32 paddr)
698 dispc_write_reg(DISPC_OVL_BA1_UV(plane), paddr); 698 dispc_write_reg(DISPC_OVL_BA1_UV(plane), paddr);
699} 699}
700 700
701static void dispc_ovl_set_pos(enum omap_plane plane, int x, int y) 701static void dispc_ovl_set_pos(enum omap_plane plane,
702 enum omap_overlay_caps caps, int x, int y)
702{ 703{
703 u32 val = FLD_VAL(y, 26, 16) | FLD_VAL(x, 10, 0); 704 u32 val;
705
706 if ((caps & OMAP_DSS_OVL_CAP_POS) == 0)
707 return;
708
709 val = FLD_VAL(y, 26, 16) | FLD_VAL(x, 10, 0);
704 710
705 dispc_write_reg(DISPC_OVL_POSITION(plane), val); 711 dispc_write_reg(DISPC_OVL_POSITION(plane), val);
706} 712}
@@ -1051,11 +1057,15 @@ static void dispc_ovl_set_vid_color_conv(enum omap_plane plane, bool enable)
1051 dispc_write_reg(DISPC_OVL_ATTRIBUTES(plane), val); 1057 dispc_write_reg(DISPC_OVL_ATTRIBUTES(plane), val);
1052} 1058}
1053 1059
1054static void dispc_ovl_enable_replication(enum omap_plane plane, bool enable) 1060static void dispc_ovl_enable_replication(enum omap_plane plane,
1061 enum omap_overlay_caps caps, bool enable)
1055{ 1062{
1056 static const unsigned shifts[] = { 5, 10, 10, 10 }; 1063 static const unsigned shifts[] = { 5, 10, 10, 10 };
1057 int shift; 1064 int shift;
1058 1065
1066 if ((caps & OMAP_DSS_OVL_CAP_REPLICATION) == 0)
1067 return;
1068
1059 shift = shifts[plane]; 1069 shift = shifts[plane];
1060 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), enable, shift, shift); 1070 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), enable, shift, shift);
1061} 1071}
@@ -2385,7 +2395,7 @@ int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
2385 DSSDBG("%d,%d %dx%d -> %dx%d\n", oi->pos_x, oi->pos_y, in_width, 2395 DSSDBG("%d,%d %dx%d -> %dx%d\n", oi->pos_x, oi->pos_y, in_width,
2386 in_height, out_width, out_height); 2396 in_height, out_width, out_height);
2387 2397
2388 dispc_ovl_set_pos(plane, oi->pos_x, pos_y); 2398 dispc_ovl_set_pos(plane, caps, oi->pos_x, pos_y);
2389 2399
2390 dispc_ovl_set_input_size(plane, in_width, in_height); 2400 dispc_ovl_set_input_size(plane, in_width, in_height);
2391 2401
@@ -2405,7 +2415,7 @@ int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
2405 dispc_ovl_set_pre_mult_alpha(plane, caps, oi->pre_mult_alpha); 2415 dispc_ovl_set_pre_mult_alpha(plane, caps, oi->pre_mult_alpha);
2406 dispc_ovl_setup_global_alpha(plane, caps, oi->global_alpha); 2416 dispc_ovl_setup_global_alpha(plane, caps, oi->global_alpha);
2407 2417
2408 dispc_ovl_enable_replication(plane, replication); 2418 dispc_ovl_enable_replication(plane, caps, replication);
2409 2419
2410 return 0; 2420 return 0;
2411} 2421}
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index bfe7fc7b8593..5a5c25b134b1 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -314,54 +314,66 @@ static const enum omap_color_mode omap4_dss_supported_color_modes[] = {
314 314
315static const enum omap_overlay_caps omap2_dss_overlay_caps[] = { 315static const enum omap_overlay_caps omap2_dss_overlay_caps[] = {
316 /* OMAP_DSS_GFX */ 316 /* OMAP_DSS_GFX */
317 0, 317 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
318 318
319 /* OMAP_DSS_VIDEO1 */ 319 /* OMAP_DSS_VIDEO1 */
320 OMAP_DSS_OVL_CAP_SCALE, 320 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS |
321 OMAP_DSS_OVL_CAP_REPLICATION,
321 322
322 /* OMAP_DSS_VIDEO2 */ 323 /* OMAP_DSS_VIDEO2 */
323 OMAP_DSS_OVL_CAP_SCALE, 324 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS |
325 OMAP_DSS_OVL_CAP_REPLICATION,
324}; 326};
325 327
326static const enum omap_overlay_caps omap3430_dss_overlay_caps[] = { 328static const enum omap_overlay_caps omap3430_dss_overlay_caps[] = {
327 /* OMAP_DSS_GFX */ 329 /* OMAP_DSS_GFX */
328 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA, 330 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_POS |
331 OMAP_DSS_OVL_CAP_REPLICATION,
329 332
330 /* OMAP_DSS_VIDEO1 */ 333 /* OMAP_DSS_VIDEO1 */
331 OMAP_DSS_OVL_CAP_SCALE, 334 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS |
335 OMAP_DSS_OVL_CAP_REPLICATION,
332 336
333 /* OMAP_DSS_VIDEO2 */ 337 /* OMAP_DSS_VIDEO2 */
334 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA, 338 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
339 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
335}; 340};
336 341
337static const enum omap_overlay_caps omap3630_dss_overlay_caps[] = { 342static const enum omap_overlay_caps omap3630_dss_overlay_caps[] = {
338 /* OMAP_DSS_GFX */ 343 /* OMAP_DSS_GFX */
339 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA, 344 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA |
345 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
340 346
341 /* OMAP_DSS_VIDEO1 */ 347 /* OMAP_DSS_VIDEO1 */
342 OMAP_DSS_OVL_CAP_SCALE, 348 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_POS |
349 OMAP_DSS_OVL_CAP_REPLICATION,
343 350
344 /* OMAP_DSS_VIDEO2 */ 351 /* OMAP_DSS_VIDEO2 */
345 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | 352 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
346 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA, 353 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_POS |
354 OMAP_DSS_OVL_CAP_REPLICATION,
347}; 355};
348 356
349static const enum omap_overlay_caps omap4_dss_overlay_caps[] = { 357static const enum omap_overlay_caps omap4_dss_overlay_caps[] = {
350 /* OMAP_DSS_GFX */ 358 /* OMAP_DSS_GFX */
351 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | 359 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA |
352 OMAP_DSS_OVL_CAP_ZORDER, 360 OMAP_DSS_OVL_CAP_ZORDER | OMAP_DSS_OVL_CAP_POS |
361 OMAP_DSS_OVL_CAP_REPLICATION,
353 362
354 /* OMAP_DSS_VIDEO1 */ 363 /* OMAP_DSS_VIDEO1 */
355 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | 364 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
356 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER, 365 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER |
366 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
357 367
358 /* OMAP_DSS_VIDEO2 */ 368 /* OMAP_DSS_VIDEO2 */
359 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | 369 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
360 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER, 370 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER |
371 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
361 372
362 /* OMAP_DSS_VIDEO3 */ 373 /* OMAP_DSS_VIDEO3 */
363 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA | 374 OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
364 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER, 375 OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER |
376 OMAP_DSS_OVL_CAP_POS | OMAP_DSS_OVL_CAP_REPLICATION,
365}; 377};
366 378
367static const char * const omap2_dss_clk_source_names[] = { 379static const char * const omap2_dss_clk_source_names[] = {