diff options
-rw-r--r-- | drivers/video/omap2/dss/dispc.c | 20 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dss_features.c | 38 | ||||
-rw-r--r-- | include/video/omapdss.h | 2 |
3 files changed, 42 insertions, 18 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index 334842a3b52..3e1007810f8 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 | ||
701 | static void dispc_ovl_set_pos(enum omap_plane plane, int x, int y) | 701 | static 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 | ||
1054 | static void dispc_ovl_enable_replication(enum omap_plane plane, bool enable) | 1060 | static 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 bfe7fc7b859..5a5c25b134b 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 | ||
315 | static const enum omap_overlay_caps omap2_dss_overlay_caps[] = { | 315 | static 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 | ||
326 | static const enum omap_overlay_caps omap3430_dss_overlay_caps[] = { | 328 | static 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 | ||
337 | static const enum omap_overlay_caps omap3630_dss_overlay_caps[] = { | 342 | static 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 | ||
349 | static const enum omap_overlay_caps omap4_dss_overlay_caps[] = { | 357 | static 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 | ||
367 | static const char * const omap2_dss_clk_source_names[] = { | 379 | static const char * const omap2_dss_clk_source_names[] = { |
diff --git a/include/video/omapdss.h b/include/video/omapdss.h index e65e2e9e16e..46097bd052a 100644 --- a/include/video/omapdss.h +++ b/include/video/omapdss.h | |||
@@ -187,6 +187,8 @@ enum omap_overlay_caps { | |||
187 | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA = 1 << 1, | 187 | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA = 1 << 1, |
188 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA = 1 << 2, | 188 | OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA = 1 << 2, |
189 | OMAP_DSS_OVL_CAP_ZORDER = 1 << 3, | 189 | OMAP_DSS_OVL_CAP_ZORDER = 1 << 3, |
190 | OMAP_DSS_OVL_CAP_POS = 1 << 4, | ||
191 | OMAP_DSS_OVL_CAP_REPLICATION = 1 << 5, | ||
190 | }; | 192 | }; |
191 | 193 | ||
192 | enum omap_overlay_manager_caps { | 194 | enum omap_overlay_manager_caps { |