From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.42.129; helo=nam03-by2-obe.outbound.protection.outlook.com; envelope-from=christopher.co@microsoft.com; receiver=edk2-devel@lists.01.org Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0129.outbound.protection.outlook.com [104.47.42.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C2272211518E8 for ; Fri, 21 Sep 2018 01:25:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=85zq8EB4VKEtP8oUX+WuI29CAvCdMs/AXORkZ2kXix8=; b=Xmi9BRXwY2d9IyiWj2qF+xNb+yI99be8QgCFzvpUz+CLrFD+j5nfm1Bn1NpE0g4n141AYHRv5sm9wiVd4SrK/dUJpOIz+G/kv+WjpgnQF4K5NNkRTM05tLQ3C06/iC+aTbf+s5TRigHnCEdA7tQngFd5msnQ+3YmxNOqAX77+F8= Received: from DM5PR2101MB1128.namprd21.prod.outlook.com (52.132.133.20) by DM5PR2101MB1112.namprd21.prod.outlook.com (52.132.133.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.5; Fri, 21 Sep 2018 08:25:58 +0000 Received: from DM5PR2101MB1128.namprd21.prod.outlook.com ([fe80::81f8:300e:d90:d49]) by DM5PR2101MB1128.namprd21.prod.outlook.com ([fe80::81f8:300e:d90:d49%3]) with mapi id 15.20.1164.008; Fri, 21 Sep 2018 08:25:58 +0000 From: Chris Co To: "edk2-devel@lists.01.org" CC: Ard Biesheuvel , Leif Lindholm , Michael D Kinney Thread-Topic: [PATCH edk2-platforms 07/27] Silicon/NXP: Add i.MX display library support Thread-Index: AQHUUYS5T9aFHgXl5EKsEdl9iMj7nA== Date: Fri, 21 Sep 2018 08:25:58 +0000 Message-ID: <20180921082542.35768-8-christopher.co@microsoft.com> References: <20180921082542.35768-1-christopher.co@microsoft.com> In-Reply-To: <20180921082542.35768-1-christopher.co@microsoft.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MWHPR17CA0054.namprd17.prod.outlook.com (2603:10b6:300:93::16) To DM5PR2101MB1128.namprd21.prod.outlook.com (2603:10b6:4:a8::20) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2001:4898:80e8:8:388a:edc9:7085:c18] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DM5PR2101MB1112; 6:Z4QcKk1PJFyWAMeEdd6NqxJn2sYcp/M9AONcs+NrIiYGLUjwrJ0vmsNsth+K8wmQk6kv64IIkhV+lwQNzBUeq5L4hYv7fwsmvNfpom4SyufEc+oTED0Ym2oqixa0quYjPiHJy6dfM7WqAJEbiDB+jaXpNlYCNP84wRWixl42OP105Fhpt0Eiz5B/6JNlV0SwqWf96FflPDXLx4Zc88r7GzPiyk4uo7lKBUiOxIFmnVvatTGjjYjsCLpq7ASntsJoX0ZmqITWBpr7NSDR0aLM0hLxlzb+IqR/ixy8V5r0Q8nFankdiOvNmYKOwCmpAyXW6TmzpXl/AFqd2UNhsRmO6Z4NiTRClL8ooNL9iYARqBmVMzPX/r+3cn4omMQFzuy9YQHzOZRwwFFNgf00ce8l+WA93ksAlsgOme8mUNUv9R7+bJxQ9oSo5ir8V32nfZ8X6zYpD2+Aldg37LmrwU87Ig==; 5:dPSBYbC0dRuLqBd0DToAyfuWMXyuanXCUL/5qBT/xJnuL3sTOaqSvehuWfyXbPsOSaL9ql7kqexcv6THm7u45JIXzYf8ZHczzjsVowVst31Ad90bWR2fkAaKf6wGyiH/YMzR2TuJDGHuXL+EXcFr43UA4HDyf8w/D0v5yg7jZ8Q=; 7:8hrPVQgXdHt7GvxxAJFVjcs4ZgSt91dCqrlL5MHufFUSByV/DVbZkjVaT0mhwH6yihMzR5vQc0rRCo1KdSXpE1yFxT2BXi+2HRKta0zlYpqnBmIOls27yODPzkgHDIVsYihDGUiC89BcLTSGqUWaz4WMPFhTME6vLcgUxxqTQ8hCxEDwVcyUf+ssDPBpe0HH6sXoLlCn7DcBG/XrFT+5XPsfpNu1EXynH5aqcpUt2I0EV+uXfxon81JQQDZ31mVY x-ms-office365-filtering-correlation-id: 84a577d1-4866-452e-42d8-08d61f9bdb7d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7193020); SRVR:DM5PR2101MB1112; x-ms-traffictypediagnostic: DM5PR2101MB1112: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(28532068793085)(89211679590171)(12401385986421)(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231355)(2280164)(944501410)(52105095)(2018427008)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991041); SRVR:DM5PR2101MB1112; BCL:0; PCL:0; RULEID:; SRVR:DM5PR2101MB1112; x-forefront-prvs: 0802ADD973 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(136003)(346002)(39860400002)(376002)(366004)(396003)(199004)(189003)(106356001)(6512007)(81166006)(6306002)(7736002)(966005)(10090500001)(14444005)(15188155005)(186003)(6436002)(6506007)(54906003)(102836004)(386003)(6346003)(6916009)(316002)(256004)(81156014)(5640700003)(86362001)(105586002)(14454004)(86612001)(68736007)(305945005)(8676002)(575784001)(5250100002)(52116002)(5660300001)(25786009)(2501003)(76176011)(6486002)(6116002)(8936002)(486006)(71190400001)(71200400001)(4326008)(11346002)(2616005)(53376002)(476003)(446003)(97736004)(53936002)(478600001)(10290500003)(72206003)(22452003)(2351001)(2900100001)(36756003)(16799955002)(1076002)(99286004)(46003)(2906002)(60540400001); DIR:OUT; SFP:1102; SCL:1; SRVR:DM5PR2101MB1112; H:DM5PR2101MB1128.namprd21.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microsoft.com does not designate permitted sender hosts) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Christopher.Co@microsoft.com; x-microsoft-antispam-message-info: VhT3rfEGFCX5SYLMJq0/oACwpLuxlnztx5ADXgsnHtJzdLetj0Gd7Ba/QcXVH5xKtTEOljMX3JPvt1QdJozNKZYrebf66qgjqZp/GeRDDB4ehjxAm9DMgOsIyq+YiHPfPeDHnTtHZzeJKvo9MeOiR6WlMy8ChVRxH9RFkxQPgB4evk5GeHLgtNndK8Uz5awCB0wc1ktSDF5NNkZLSP83tvVLiRx2dyvkIAdKJgXkxyE6ip2mjW/XaZ2T0QMtnx+P/AKIPtMWd57+9WmL32D/m3Is7SBtpBA7xM/jFmdJA/YiAuIN66U0tDdJJE1iq+8uB2RMLo6WiWB00OqYxtVQELBCXgvnZrZy0UYQR/pioNkxLblvz3rAt6e9KBSJWQzYA4Ix88uEU52hxBi78fn7SfOiuPl+zmOXSOOGnBRA+fjLoWmzMWorLMR1OReQah+BYbCEl6W2cjTXbGZzWM41xLnE320T3MUAOxv6JiWZnosw/YHXwpkADULXCYei9GomBgXs35hEH8Nu3J44qRXnMZ4jOaIdQOVmdo/XJok2HtNpEsIpdOd29TMBGP8VGqOH spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 84a577d1-4866-452e-42d8-08d61f9bdb7d X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Sep 2018 08:25:58.6064 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR2101MB1112 Subject: [PATCH edk2-platforms 07/27] Silicon/NXP: Add i.MX display library support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Sep 2018 08:26:00 -0000 Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This adds support for processing EDID data on NXP i.MX platforms. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Christopher Co Cc: Ard Biesheuvel Cc: Leif Lindholm Cc: Michael D Kinney --- Silicon/NXP/iMXPlatformPkg/Include/iMXDisplay.h | 114 += ++++++++++++++ Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.c | 152 += +++++++++++++++++++ Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.inf | 31 += +++ 3 files changed, 297 insertions(+) diff --git a/Silicon/NXP/iMXPlatformPkg/Include/iMXDisplay.h b/Silicon/NXP/= iMXPlatformPkg/Include/iMXDisplay.h new file mode 100644 index 000000000000..70ef8d0af97f --- /dev/null +++ b/Silicon/NXP/iMXPlatformPkg/Include/iMXDisplay.h @@ -0,0 +1,114 @@ +/** @file +* +* Copyright (c) 2018 Microsoft Corporation. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the B= SD License +* which accompanies this distribution. The full text of the license may = be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +* +**/ + +#ifndef __IMX_DISPLAY_H__ +#define __IMX_DISPLAY_H__ + +#define EDID_MIN_SIZE 128 +#define EDID_I2C_ADDRESS 0x50 + +// The first DTD is the preferred timing, refer to 3.1 VESA EDID spec. +#define EDID_DTD_1_OFFSET 0x36 +#define EDID_DTD_2_OFFSET 0x48 +#define EDID_DTD_3_OFFSET 0x5A +#define EDID_DTD_4_OFFSET 0x6C + +typedef enum { + PIXEL_FORMAT_ARGB32, + PIXEL_FORMAT_BGRA32, +} PIXEL_FORMAT; + +typedef struct _DISPLAY_TIMING { + UINT32 PixelClock; + UINT32 HActive; + UINT32 HBlank; + UINT32 VActive; + UINT32 VBlank; + UINT32 HSync; + UINT32 VSync; + UINT32 HSyncOffset; + UINT32 VSyncOffset; + UINT32 HImageSize; + UINT32 VImageSize; + UINT32 HBorder; + UINT32 VBorder; + UINT32 EdidFlags; + UINT32 Flags; + UINT32 PixelRepetition; + UINT32 Bpp; + PIXEL_FORMAT PixelFormat; +} DISPLAY_TIMING, *PDISPLAY_TIMING, DTD; + +typedef struct _DETAILED_TIMING_DESCRIPTOR { + UINT8 PixelClock[2]; + UINT8 HActive; + UINT8 HBlank; + UINT8 HActiveBlank; + UINT8 VActive; + UINT8 VBlank; + UINT8 VActiveBlank; + UINT8 HSyncOffset; + UINT8 HSyncWidth; + UINT8 VSyncOffsetWidth; + UINT8 HVOffsetWidth; + UINT8 HImageSize; + UINT8 VImageSize; + UINT8 HVImageSize; + UINT8 HBorder; + UINT8 VBorder; + UINT8 EdidFlags; +} DETAILED_TIMING_DESCRIPTOR, *PDETAILED_TIMING_DESCRIPTOR; + +/** + Convert detailed timing descriptor to display timing format + + @param[in] DTDPtr Pointer to detailed timing descriptor. + @param[out] DisplayTimingPtr Pointer to display timing structure. + + @retval EFI_SUCCESS Detailed timing descriptor data was converted. + +**/ +EFI_STATUS +ConvertDTDToDisplayTiming ( + IN DETAILED_TIMING_DESCRIPTOR *DTDPtr, + OUT DISPLAY_TIMING *DisplayTimingPtr + ); + +/** + Debug dump of Display Timing structure + + @param[in] DisplayTimingNamePtr Name of display timing structure. + @param[in] DisplayTimingPtr Pointer to display timing structure. +**/ +VOID +PrintDisplayTiming ( + IN CHAR8 *DisplayTimingNamePtr, + IN DISPLAY_TIMING *DisplayTimingPtr + ); + +/** + Check if EDID is valid + + @param[in] EdidDataPtr Pointer to EDID data. + + @retval EFI_SUCCESS EDID data is a valid EDID. + @retval EFI_INVALID_PARAMETER EDID data is invalid. + +**/ +EFI_STATUS +ValidateEdidData ( + IN UINT8 *EdidDataPtr + ); + +#endif // __IMX_DISPLAY_H__ diff --git a/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib= .c b/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.c new file mode 100644 index 000000000000..9e90ece96260 --- /dev/null +++ b/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.c @@ -0,0 +1,152 @@ +/** @file +* +* Copyright (c) 2018 Microsoft Corporation. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the B= SD License +* which accompanies this distribution. The full text of the license may = be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +* +**/ + +#include + +#include + +#include + +/** + Convert detailed timing descriptor to display timing format + + @param[in] DTDPtr Pointer to detailed timing descriptor. + @param[out] DisplayTimingPtr Pointer to display timing structure. + + @retval EFI_SUCCESS Detailed timing descriptor data was converted. + +**/ +EFI_STATUS +ConvertDTDToDisplayTiming ( + IN DETAILED_TIMING_DESCRIPTOR *DTDPtr, + OUT DISPLAY_TIMING *DisplayTimingPtr + ) +{ + UINT32 edidPixelClock; + + DEBUG ((DEBUG_INFO, "++ConvertDTDToDisplayTiming()\r\n")); + // Refer to 3.10.2 VESA EDID spec + edidPixelClock =3D (DTDPtr->PixelClock[0] | (DTDPtr->PixelClock[1] << 8)= ); + DisplayTimingPtr->PixelClock =3D edidPixelClock * 10000; + DisplayTimingPtr->HActive =3D (DTDPtr->HActiveBlank & 0xF0); + DisplayTimingPtr->HActive =3D (DisplayTimingPtr->HActive << 4) | DTDPtr-= >HActive; + DisplayTimingPtr->HBlank =3D (DTDPtr->HActiveBlank & 0x0F); + DisplayTimingPtr->HBlank =3D (DisplayTimingPtr->HBlank << 8) | DTDPtr->H= Blank; + DisplayTimingPtr->VActive =3D (DTDPtr->VActiveBlank & 0xF0); + DisplayTimingPtr->VActive =3D (DisplayTimingPtr->VActive << 4) | DTDPtr-= >VActive; + DisplayTimingPtr->VBlank =3D (DTDPtr->VActiveBlank & 0x0F); + DisplayTimingPtr->VBlank =3D (DisplayTimingPtr->VBlank << 8) | DTDPtr->V= Blank; + DisplayTimingPtr->HSyncOffset =3D (DTDPtr->HVOffsetWidth & 0xC0); + DisplayTimingPtr->HSyncOffset =3D (DisplayTimingPtr->HSyncOffset << 2) | + DTDPtr->HSyncOffset; + DisplayTimingPtr->VSyncOffset =3D (DTDPtr->HVOffsetWidth & 0x0C); + DisplayTimingPtr->VSyncOffset =3D (DisplayTimingPtr->VSyncOffset << 2) | + ((DTDPtr->VSyncOffsetWidth & 0xF0) >> 4)= ; + DisplayTimingPtr->HSync =3D (DTDPtr->HVOffsetWidth & 0x30); + DisplayTimingPtr->HSync =3D (DisplayTimingPtr->HSync << 4) | DTDPtr->HSy= ncWidth; + DisplayTimingPtr->VSync =3D (DTDPtr->HVOffsetWidth & 0x03); + DisplayTimingPtr->VSync =3D (DisplayTimingPtr->VSync << 4) | + (DTDPtr->VSyncOffsetWidth & 0x0F); + DisplayTimingPtr->HImageSize =3D ((DTDPtr->HVImageSize & 0xF0) << 4) | + DTDPtr->HImageSize; + DisplayTimingPtr->VImageSize =3D ((DTDPtr->HVImageSize & 0x0F) << 8) | + DTDPtr->VImageSize; + DisplayTimingPtr->HBorder =3D DTDPtr->HBorder; + DisplayTimingPtr->VBorder =3D DTDPtr->VBorder; + DisplayTimingPtr->EdidFlags =3D DTDPtr->EdidFlags; + DisplayTimingPtr->Flags =3D 0; + + DEBUG ((DEBUG_INFO, "--ConvertDTDToDisplayTiming()=3Dok\r\n")); + return EFI_SUCCESS; +} + +/** + Debug dump of Display Timing structure + + @param[in] DisplayTimingNamePtr Name of display timing structure. + @param[in] DisplayTimingPtr Pointer to display timing structure. +**/ +VOID +PrintDisplayTiming ( + IN CHAR8 *DisplayTimingNamePtr, + IN DISPLAY_TIMING *DisplayTimingPtr + ) +{ + DEBUG ((DEBUG_INFO, "**********************\n")); + DEBUG ((DEBUG_INFO, "%a\n", DisplayTimingNamePtr)); + DEBUG ((DEBUG_INFO, "**********************\n")); + DEBUG ((DEBUG_INFO, "PixelClock %d\n", DisplayTimingPtr->PixelClock)); + DEBUG ((DEBUG_INFO, "HActive %d\n", DisplayTimingPtr->HActive)); + DEBUG ((DEBUG_INFO, "HBlank %d\n", DisplayTimingPtr->HBlank)); + DEBUG ((DEBUG_INFO, "VActive %d\n", DisplayTimingPtr->VActive)); + DEBUG ((DEBUG_INFO, "VBlank %d\n", DisplayTimingPtr->VBlank)); + DEBUG ((DEBUG_INFO, "HSync %d\n", DisplayTimingPtr->HSync)); + DEBUG ((DEBUG_INFO, "VSync %d\n", DisplayTimingPtr->VSync)); + DEBUG ((DEBUG_INFO, "HSyncOffset %d\n", DisplayTimingPtr->HSyncOffset)); + DEBUG ((DEBUG_INFO, "VSyncOffset %d\n", DisplayTimingPtr->VSyncOffset)); + DEBUG ((DEBUG_INFO, "HBorder %d\n", DisplayTimingPtr->HBorder)); + DEBUG ((DEBUG_INFO, "VBorder %d\n", DisplayTimingPtr->VBorder)); + DEBUG ((DEBUG_INFO, "EdidFlags %d\n", DisplayTimingPtr->EdidFlags)); + DEBUG ((DEBUG_INFO, "Flags %d\n", DisplayTimingPtr->Flags)); + DEBUG ((DEBUG_INFO, "PixelRepetition %d\n", DisplayTimingPtr->PixelRepet= ition)); + DEBUG ((DEBUG_INFO, "BPP %d\n", DisplayTimingPtr->Bpp)); + DEBUG ((DEBUG_INFO, "PixelFormat %d\n", DisplayTimingPtr->PixelFormat)); + DEBUG ((DEBUG_INFO, "**********************\n")); +} + +/** + Check if EDID is valid + + @param[in] EdidDataPtr Pointer to EDID data. + + @retval EFI_SUCCESS EDID data is a valid EDID. + @retval EFI_INVALID_PARAMETER EDID data is invalid. + +**/ +EFI_STATUS +ValidateEdidData ( + IN UINT8 *EdidDataPtr + ) +{ + UINT8 Checksum; + UINT8 Index; + + DEBUG ((DEBUG_INFO, "++ValidateEdidData()\r\n")); + + if (EdidDataPtr[0] !=3D 0x00 || + EdidDataPtr[1] !=3D 0xFF || + EdidDataPtr[2] !=3D 0xFF || + EdidDataPtr[3] !=3D 0xFF || + EdidDataPtr[4] !=3D 0xFF || + EdidDataPtr[5] !=3D 0xFF || + EdidDataPtr[6] !=3D 0xFF || + EdidDataPtr[7] !=3D 0x00) { + DEBUG ((DEBUG_ERROR, "Invalid EDID header\n")); + return EFI_INVALID_PARAMETER; + } + + // Validate EDID checksum + Checksum =3D 0; + for (Index =3D 0; Index < EDID_MIN_SIZE; Index++) { + Checksum +=3D EdidDataPtr[Index]; + } + + if (Checksum !=3D 0) { + DEBUG ((DEBUG_ERROR, "Invalid EDID checksum\n")); + return EFI_INVALID_PARAMETER; + } + + DEBUG ((DEBUG_INFO, "--ValidateEdidData()=3Dok\r\n")); + return EFI_SUCCESS; +} diff --git a/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib= .inf b/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.inf new file mode 100644 index 000000000000..bd77d4159639 --- /dev/null +++ b/Silicon/NXP/iMXPlatformPkg/Library/iMXDisplayLib/iMXDisplayLib.inf @@ -0,0 +1,31 @@ +## @file +# +# Copyright (c) 2018 Microsoft Corporation. All rights reserved. +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the B= SD License +# which accompanies this distribution. The full text of the license may = be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IM= PLIED. +# +## + +[Defines] + INF_VERSION =3D 0x0001001A + BASE_NAME =3D iMXDisplayLib + FILE_GUID =3D C0408490-F09B-4CFA-9A2F-5159F2705323 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D iMXDisplayLib + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + Silicon/NXP/iMXPlatformPkg/iMXPlatformPkg.dec + +[LibraryClasses] + +[Sources.common] + iMXDisplayLib.c --=20 2.16.2.gvfs.1.33.gf5370f1