From patchwork Thu Aug 26 10:15:52 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "K, Mythri P" X-Patchwork-Id: 134171 X-Patchwork-Delegate: tomi.valkeinen@nokia.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o7QAIBum013983 for ; Thu, 26 Aug 2010 10:19:36 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752735Ab0HZKP7 (ORCPT ); Thu, 26 Aug 2010 06:15:59 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:55273 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752150Ab0HZKP6 convert rfc822-to-8bit (ORCPT ); Thu, 26 Aug 2010 06:15:58 -0400 Received: from dbdp20.itg.ti.com ([172.24.170.38]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id o7QAFrmp026996 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 26 Aug 2010 05:15:56 -0500 Received: from dbde70.ent.ti.com (localhost [127.0.0.1]) by dbdp20.itg.ti.com (8.13.8/8.13.8) with ESMTP id o7QAFqJE002713; Thu, 26 Aug 2010 15:45:52 +0530 (IST) Received: from dbde02.ent.ti.com ([172.24.170.145]) by dbde70.ent.ti.com ([172.24.170.148]) with mapi; Thu, 26 Aug 2010 15:45:53 +0530 From: "K, Mythri P" To: "linux-omap@vger.kernel.org" , Tomi Valkeinen CC: "Semwal, Sumit" Date: Thu, 26 Aug 2010 15:45:52 +0530 Subject: [PATCHv2] OMAP:DSS:Add support for Additional color modes supported by OMAP4 Thread-Topic: [PATCHv2] OMAP:DSS:Add support for Additional color modes supported by OMAP4 Thread-Index: Acs/kP3mCvGRnhYOSde2b0ArX3FpFQFdnphw Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US MIME-Version: 1.0 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Thu, 26 Aug 2010 10:20:10 +0000 (UTC) diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h index 7a6eedd..c8ff8f6 100644 --- a/arch/arm/plat-omap/include/plat/display.h +++ b/arch/arm/plat-omap/include/plat/display.h @@ -89,6 +89,12 @@ enum omap_color_mode { OMAP_DSS_COLOR_ARGB32 = 1 << 11, /* ARGB32 */ OMAP_DSS_COLOR_RGBA32 = 1 << 12, /* RGBA32 */ OMAP_DSS_COLOR_RGBX32 = 1 << 13, /* RGBx32 */ + OMAP_DSS_COLOR_NV12 = 1 << 14, /* NV12 format: YUV 4:2:0 */ + OMAP_DSS_COLOR_RGBA12 = 1 << 15, /* RGBA12 - 4444 */ + OMAP_DSS_COLOR_XRGB12 = 1 << 16, /* xRGB12, 16-bit container */ + OMAP_DSS_COLOR_ARGB16_1555 = 1 << 17, /* ARGB16-1555 */ + OMAP_DSS_COLOR_RGBX24_32_ALGN = 1 << 18, /* 32-msb aligned 24bit */ + OMAP_DSS_COLOR_XRGB15 = 1 << 19, /* xRGB15: 1555*/ OMAP_DSS_COLOR_GFX_OMAP2 = OMAP_DSS_COLOR_CLUT1 | OMAP_DSS_COLOR_CLUT2 | @@ -121,7 +127,16 @@ enum omap_color_mode { OMAP_DSS_COLOR_UYVY | OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32, - OMAP_DSS_COLOR_VID3_OMAP3 = OMAP_DSS_COLOR_VID2_OMAP3, + OMAP_DSS_COLOR_VID_OMAP4 = + OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U | + OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 | + OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 | + OMAP_DSS_COLOR_RGBA12 | OMAP_DSS_COLOR_RGB24U | + OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY | + OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB15 | + OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_XRGB12 | + OMAP_DSS_COLOR_RGBX24_32_ALGN, + }; enum omap_lcd_display_type { diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index d4a7e10..86702c5 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c @@ -1059,18 +1059,38 @@ static void _dispc_set_color_mode(enum omap_plane plane, enum omap_color_mode color_mode) { u32 m = 0; - switch (color_mode) { - case OMAP_DSS_COLOR_CLUT1: - m = 0x0; break; - case OMAP_DSS_COLOR_CLUT2: - m = 0x1; break; - case OMAP_DSS_COLOR_CLUT4: - m = 0x2; break; - case OMAP_DSS_COLOR_CLUT8: - m = 0x3; break; + if ((!cpu_is_omap44xx()) || (OMAP_DSS_GFX == plane)) { + case OMAP_DSS_COLOR_CLUT1: + m = 0x0; break; + case OMAP_DSS_COLOR_CLUT2: + m = 0x1; break; + case OMAP_DSS_COLOR_CLUT4: + m = 0x2; break; + case OMAP_DSS_COLOR_CLUT8: + m = 0x3; break; + case OMAP_DSS_COLOR_RGBX32: + m = 0xe; break; + } else { + case OMAP_DSS_COLOR_NV12: + m = 0x0; break; + case OMAP_DSS_COLOR_RGBA12: + m = 0x2; break; + case OMAP_DSS_COLOR_XRGB12: + m = 0x4; break; + case OMAP_DSS_COLOR_ARGB16_1555: + m = 0x7; break; + case OMAP_DSS_COLOR_RGBX24_32_ALGN: + m = 0xe; break; + case OMAP_DSS_COLOR_XRGB15: + m = 0xf; break; + } case OMAP_DSS_COLOR_RGB12U: - m = 0x4; break; + if ((!cpu_is_omap44xx()) || (OMAP_DSS_GFX == plane)) + m = 0x4; + else + m = 0x1; + break; case OMAP_DSS_COLOR_ARGB16: m = 0x5; break; case OMAP_DSS_COLOR_RGB16: @@ -1087,8 +1107,6 @@ static void _dispc_set_color_mode(enum omap_plane plane, m = 0xc; break; case OMAP_DSS_COLOR_RGBA32: m = 0xd; break; - case OMAP_DSS_COLOR_RGBX32: - m = 0xe; break; default: BUG(); break; } @@ -1901,7 +1919,16 @@ static int _dispc_setup_plane(enum omap_plane plane, case OMAP_DSS_COLOR_RGBA32: if (cpu_is_omap24xx()) return -EINVAL; - if (plane == OMAP_DSS_VIDEO1) + if ((!cpu_is_omap44xx()) && (plane == OMAP_DSS_VIDEO1)) + return -EINVAL; + break; + + case OMAP_DSS_COLOR_RGBA12: + case OMAP_DSS_COLOR_XRGB12: + case OMAP_DSS_COLOR_ARGB16_1555: + case OMAP_DSS_COLOR_RGBX24_32_ALGN: + case OMAP_DSS_COLOR_XRGB15: + if (!cpu_is_omap44xx()) return -EINVAL; break; diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c index 0c189f8..4a2d908 100644 --- a/drivers/video/omap2/dss/overlay.c +++ b/drivers/video/omap2/dss/overlay.c @@ -588,7 +588,8 @@ void dss_init_overlays(struct platform_device *pdev) case 0: ovl->name = "gfx"; ovl->id = OMAP_DSS_GFX; - ovl->supported_modes = cpu_is_omap34xx() ? + ovl->supported_modes = (cpu_is_omap44xx() | + cpu_is_omap34xx()) ? OMAP_DSS_COLOR_GFX_OMAP3 : OMAP_DSS_COLOR_GFX_OMAP2; ovl->caps = OMAP_DSS_OVL_CAP_DISPC; @@ -598,7 +599,9 @@ void dss_init_overlays(struct platform_device *pdev) case 1: ovl->name = "vid1"; ovl->id = OMAP_DSS_VIDEO1; - ovl->supported_modes = cpu_is_omap34xx() ? + ovl->supported_modes = cpu_is_omap44xx() ? + OMAP_DSS_COLOR_VID_OMAP4 : + cpu_is_omap34xx() ? OMAP_DSS_COLOR_VID1_OMAP3 : OMAP_DSS_COLOR_VID_OMAP2; ovl->caps = OMAP_DSS_OVL_CAP_SCALE | @@ -611,8 +614,10 @@ void dss_init_overlays(struct platform_device *pdev) case 2: ovl->name = "vid2"; ovl->id = OMAP_DSS_VIDEO2; - ovl->supported_modes = cpu_is_omap34xx() ? - OMAP_DSS_COLOR_VID2_OMAP3 : + ovl->supported_modes = cpu_is_omap44xx() ? + OMAP_DSS_COLOR_VID_OMAP4 : + cpu_is_omap34xx() ? + OMAP_DSS_COLOR_VID1_OMAP3 : OMAP_DSS_COLOR_VID_OMAP2; ovl->caps = OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_DISPC; @@ -624,7 +629,7 @@ void dss_init_overlays(struct platform_device *pdev) case 3: ovl->name = "vid3"; ovl->id = OMAP_DSS_VIDEO3; - ovl->supported_modes = OMAP_DSS_COLOR_VID3_OMAP3; + ovl->supported_modes = OMAP_DSS_COLOR_VID_OMAP4; ovl->caps = OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_DISPC; ovl->info.global_alpha = 255;