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 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 | ||
| 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 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 | ||
| 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 e65e2e9e16eb..46097bd052a2 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 { |
