From patchwork Tue Oct 20 11:39:37 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 532915 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 80739140180 for ; Tue, 20 Oct 2015 22:41:49 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8FDCF4B6B5; Tue, 20 Oct 2015 13:41:35 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S4sxFqTi9Mvj; Tue, 20 Oct 2015 13:41:35 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id BBE114B6F4; Tue, 20 Oct 2015 13:41:06 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id EA8174B656 for ; Tue, 20 Oct 2015 13:40:44 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TblTdAWXnWdr for ; Tue, 20 Oct 2015 13:40:44 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0147.outbound.protection.outlook.com [207.46.100.147]) by theia.denx.de (Postfix) with ESMTPS id 0F1C84B632 for ; Tue, 20 Oct 2015 13:40:41 +0200 (CEST) Received: from BLUPR03CA006.namprd03.prod.outlook.com (10.255.124.23) by DM2PR0301MB0687.namprd03.prod.outlook.com (10.160.96.25) with Microsoft SMTP Server (TLS) id 15.1.300.14; Tue, 20 Oct 2015 11:40:38 +0000 Received: from BY2FFO11FD015.protection.gbl (10.255.124.4) by BLUPR03CA006.outlook.office365.com (10.255.124.23) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Tue, 20 Oct 2015 11:40:38 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; denx.de; dkim=none (message not signed) header.d=none; denx.de; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD015.mail.protection.outlook.com (10.1.14.131) with Microsoft SMTP Server (TLS) id 15.1.300.4 via Frontend Transport; Tue, 20 Oct 2015 11:40:37 +0000 Received: from linux-jyl1.am.freescale.net ([10.192.185.234]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t9KBdndn020794; Tue, 20 Oct 2015 04:40:35 -0700 From: Peng Fan To: Date: Tue, 20 Oct 2015 19:39:37 +0800 Message-ID: <1445341184-22272-8-git-send-email-Peng.Fan@freescale.com> X-Mailer: git-send-email 1.8.4 In-Reply-To: <1445341184-22272-1-git-send-email-Peng.Fan@freescale.com> References: <1445341184-22272-1-git-send-email-Peng.Fan@freescale.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD015; 1:1JYkO3bIxGiK7o6DayXki0HxNJnmiK2cn07GXthu5kvrVWB/hCc2j0e9MFWVsSjdGqKbTLpdqJGaujnbYpIwMuNbRbzEhhBV5b1CHAcbAM427Gg2OOZaJ1/WVOR2wGrRgPN9/Ndq5KX7RC+54X/95J5vlqHohlb/CokNFerPwRxvlLoWUMEnZQVDwZ9EvZje+eChOU+mHMHzh19YlaZRLOcaidrJgjhl07Oyv/xEyhUxJ2JuKnEQpeSfM+kwg2p+vP/V1p/MGc/eizjZPKwefo/FMqKI8sdRxbarsxQfTIrQmihFboX5L1/5iOSIEqqEnU2UTo5SlGP+9cGm76FmA1ZhJmF0nFB2wMEELB7Q5oHdORwJLYpEF+sBOyObFVgeuBqSFyAMDQM4SoRIwLI64w== X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(2351001)(19580395003)(85426001)(19580405001)(76176999)(77096005)(64706001)(5008740100001)(104016004)(50986999)(87936001)(6806005)(5007970100001)(97736004)(11100500001)(81156007)(47776003)(105606002)(106466001)(50466002)(229853001)(36756003)(189998001)(110136002)(5001960100002)(2950100001)(50226001)(86362001)(46102003)(92566002); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR0301MB0687; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0687; 2:KPg+SySt29lW6EEkPiAyPG+THUvCXtpsM3HYA9rEgalclXyOlXFMRYpRcgGHrg7Q34YzSVIyZlZdC4vai4Sn1Dl4YYTRmK65XYq2d+O34qyAuZtyt97WPKvumslsM6d5gBHKxFzLbDn1l6/1ltjJ5d7EscwPLp/UaxVNIA5xZH4=; 3:hqYnntCJpP1GJehYleDIWDOXq0vgkPvM+wSDvbjLi0tVmQBudb5mnSpKmXL+DlqDW4ocTB/kKW2CdBDJ/B+w8Ux92p8dG/rDFud7QLvsypuvUYldq8IsbR9E4wKV2fwODGtvEm/6+1j8bAwXy6wN8oAD4XY4rfreitd3CfRnU4ISaqtP0rATIouNURbRpf5j6iFdY5YapqpMeDAcEz7tyjGpxZcFPty5erNcSR/99WA=; 25:UpJPm1IgYrCwO5GD4G1pcVIlezVz7rZzGqIbI5vlyncCUAcqKmGcGEDm7QHo8xk4YbdyhvuSBu1ZJ2EeTWZ5uuel0EhRpZFYXskZyAssqle0pfYugJGT2cO/u+yYPEMgM6AJ+dTZ43kb3FEvYtc2Rm3FbJx5guXg7vKkG5C8wNrOg8ErXTyIVf63D+YGBILaEt43DEXAVAXCqTnb3z+ICg9CNot1m0dH/KK4p4LGUsf71wwxT0RWc1MXXIsD18THnraV9UJ9ESeydwIT1iQSTA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0687; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0687; 20:03YMo7UKUNMshnWzoTID7MxetYDq7iApMAXQsRTnc1ywfCzv/eiIFZyI8T0swW4bPEyNF6Dh5UChQEq2frPUcsZBxPWm6MSA4S9b7bfBuc4tk0iri199Hadh33ZqYqgykknZdP8OAD4hEPuOVTnl4PRNEBt+XtiEMkd9ikZKB6PN6ec4w+k8xnm9D/amIgVgPEGBZ2PuO2EIr8DUd3kFQ60AOSm/liRi3wKYdN8zJLa9nEgE4WoADXE75fW7jxa70MAdw+/ikBCi5g4aHYx5N+0J00m9FGJoC3J6kLv2RrFReOZj+KHSexnkd4j2EMoZs1zJnMMLsK0toNtRo3EWQLl8idhnsBff4+tUd0uf1tk=; 4:9hHjgyi9pYALp8oV0e2uKxKnyChd+WfDiMlOCCOckTugNBHqANAB5ZU00bdAcLcWj/LLZ0YOyeyw4o3PC5I7krJ8z0HEE8oD262oRmTFQvqdpbGT0zJA3VJzA1vG1Wnqksb0zdEXGyhKUTFm60rcuejfvn9ICq+qlkSTcJcdhP4zpXaKj3mqFclUlFfZgwfTWBdlxjYXrux1WjBycpCOkip/UuMTcppDDp/0ragMusi2/eJTT98Ng0bgtpbV1ji3v2U8uOwBzZsR7EmGwR2I2JYPzwQiDpHgRqWuRFra/H1o7pwCt5P2P8oRCwbu2cJyBxnEVOdXMevIhCSXwXvW+jY4Q2t0Ah5WjI0M9AntgBA= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001); SRVR:DM2PR0301MB0687; BCL:0; PCL:0; RULEID:; SRVR:DM2PR0301MB0687; X-Forefront-PRVS: 073515755F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0687; 23:Fc6qBGoWhnuNv0RXUGWFIyaOggmzcNj4CJ/xg71?= =?us-ascii?Q?cBtf/dA50fs0U9GDm30j0nrm0hNLwkdaHRzcmxU0ZlrMGRV0NupHk87BRbwH?= =?us-ascii?Q?FadUUjPhBEQPEzoguJn2UR5C6h9BbqwTS6qwV57iXakDJ6zrcJAzrhDv4HIZ?= =?us-ascii?Q?Fskwj9ziWKwHjaymUOodLZ9LthGbwE3MNtTfJowcvx4f0xBzGMBENALJw1nW?= =?us-ascii?Q?5tbrwjjsQSqYkft9KWR2GANiJK0X+Iz8fNAHMROeS1OOT5KzC3UM7SY6bUhQ?= =?us-ascii?Q?KaCpu1hailLwVpB+nFY9te1OLO5DEPgHn5C8UGoJ0tU2FXz94GywEtKGXh9B?= =?us-ascii?Q?8JwMavwG1DCW9BAB+O6STz4k1lfT275/af8AzJ2Bj15Yb6TkXPkij4xja+3l?= =?us-ascii?Q?C3udouSXowbeLuIeA4fR8jKdVIHnemPOhYqvri2IV1PSfZPwA5NoNlYTLXU6?= =?us-ascii?Q?3fX/pIlkJ1bK/rT5/dB4HbLbNxRVYZPDFbCwYScp5RWf8D8Hd7KHANtepgkq?= =?us-ascii?Q?EpaSp9bTaAxWaSp6jycnRaOCBigBCjOSo5XccFYlKIO0qnoUU2cm/9vqWD0A?= =?us-ascii?Q?azKPrbGZ1sxcswUvg0zA00Dm8Fz3qGzVRQOBFhnxuSFREVAtH1xEHSTLN0lk?= =?us-ascii?Q?85RbNNMu2eP4toCx8rCypBbKUYQu8Ra4x1pYjQbNqGfRIkX66BPiGw4BjySs?= =?us-ascii?Q?/tFrVgEi5vrwqeK+WXPwn9G+MyPnVxKNICIH3zXqOhpoah+DMxNHI+zquQlt?= =?us-ascii?Q?KTKfo/NlpsiI1OxdHxGkZhx8vQDEQcvYlTeiDEQHR6l3YzgCyhGcy/b0H8P4?= =?us-ascii?Q?4HuYMrhCvNZhsAsoSSoRpKuU4E/HlbTEnBEAzmw2kYAXWvaDZPFsY8ODD9yu?= =?us-ascii?Q?9DN+JA+eyafKOD1f+sz0y5EmBS0jXxTN8M7+9TZU/zJWVryClycQIXOACmpD?= =?us-ascii?Q?3n20JkerCKDczoYqQg8p1sQzwz/Fc6CEVPR+UZ/+rbPaqLbk4KZ1H/KnhKRA?= =?us-ascii?Q?2CRPGihuU5FzeEMTFLEX367ne?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0687; 5:bRUmxhUCoPh2gyDKua99u74lZGfpJB1T1KAqe8sbWlFMXdKIwpkeuSWKyEhQBepCMMsX+njG6w/1MNub5driloIMu8VIpaPeB6k5swi0sfv9jCNpSKFsnidcbXdiMmnujCrg//5oUGJh0HZ73rrSbQ==; 24:oKn7dwzsu2/sVFO+BBJR/P2etd99kPVSJgG5ERN6bzZZrbWsNm+qwhyXtsEaN5sJtp/LpUrSPFuJWPyPJf+dAHQhbmdktC3r3da3i9WJ66g=; 20:AhCJRNdKoFjrHU35RjU9x1hdc/C4xiYLnvmKfyZ/Gg02/O4ySuwfLA2PtoaORSiRiE2qm7SJZzUvNAhaB8Vc9A== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2015 11:40:37.3074 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0687 Subject: [U-Boot] [PATCH V2 07/14] imx: mx6: add clock api for lcdif X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Implement mxs_set_lcdclk, enable_lcdif_clock and enable_pll_video. The three API can be used to configure lcdif related clock when CONFIG_VIDEO_MXS enabled. Signed-off-by: Peng Fan Cc: Stefano Babic --- V2: none arch/arm/cpu/armv7/mx6/clock.c | 239 ++++++++++++++++++++++++++++++++++ arch/arm/include/asm/arch-mx6/clock.h | 2 + 2 files changed, 241 insertions(+) diff --git a/arch/arm/cpu/armv7/mx6/clock.c b/arch/arm/cpu/armv7/mx6/clock.c index 11efd12..8a88378 100644 --- a/arch/arm/cpu/armv7/mx6/clock.c +++ b/arch/arm/cpu/armv7/mx6/clock.c @@ -473,6 +473,245 @@ static u32 get_mmdc_ch0_clk(void) } } +#if defined(CONFIG_VIDEO_MXS) +static int enable_pll_video(u32 pll_div, u32 pll_num, u32 pll_denom, + u32 post_div) +{ + u32 reg = 0; + ulong start; + + debug("pll5 div = %d, num = %d, denom = %d\n", + pll_div, pll_num, pll_denom); + + /* Power up PLL5 video */ + writel(BM_ANADIG_PLL_VIDEO_POWERDOWN | + BM_ANADIG_PLL_VIDEO_BYPASS | + BM_ANADIG_PLL_VIDEO_DIV_SELECT | + BM_ANADIG_PLL_VIDEO_POST_DIV_SELECT, + &imx_ccm->analog_pll_video_clr); + + /* Set div, num and denom */ + switch (post_div) { + case 1: + writel(BF_ANADIG_PLL_VIDEO_DIV_SELECT(pll_div) | + BF_ANADIG_PLL_VIDEO_POST_DIV_SELECT(0x2), + &imx_ccm->analog_pll_video_set); + break; + case 2: + writel(BF_ANADIG_PLL_VIDEO_DIV_SELECT(pll_div) | + BF_ANADIG_PLL_VIDEO_POST_DIV_SELECT(0x1), + &imx_ccm->analog_pll_video_set); + break; + case 4: + writel(BF_ANADIG_PLL_VIDEO_DIV_SELECT(pll_div) | + BF_ANADIG_PLL_VIDEO_POST_DIV_SELECT(0x0), + &imx_ccm->analog_pll_video_set); + break; + default: + puts("Wrong test_div!\n"); + return -EINVAL; + } + + writel(BF_ANADIG_PLL_VIDEO_NUM_A(pll_num), + &imx_ccm->analog_pll_video_num); + writel(BF_ANADIG_PLL_VIDEO_DENOM_B(pll_denom), + &imx_ccm->analog_pll_video_denom); + + /* Wait PLL5 lock */ + start = get_timer(0); /* Get current timestamp */ + + do { + reg = readl(&imx_ccm->analog_pll_video); + if (reg & BM_ANADIG_PLL_VIDEO_LOCK) { + /* Enable PLL out */ + writel(BM_ANADIG_PLL_VIDEO_ENABLE, + &imx_ccm->analog_pll_video_set); + return 0; + } + } while (get_timer(0) < (start + 10)); /* Wait 10ms */ + + printf("Lock PLL5 timeout\n"); + + return -ETIME; +} + +/* + * 24M--> PLL_VIDEO -> LCDIFx_PRED -> LCDIFx_PODF -> LCD + * + * 'freq' using KHz as unit, see driver/video/mxsfb.c. + */ +void mxs_set_lcdclk(u32 base_addr, u32 freq) +{ + u32 reg = 0; + u32 hck = MXC_HCLK / 1000; + /* DIV_SELECT ranges from 27 to 54 */ + u32 min = hck * 27; + u32 max = hck * 54; + u32 temp, best = 0; + u32 i, j, max_pred = 8, max_postd = 8, pred = 1, postd = 1; + u32 pll_div, pll_num, pll_denom, post_div = 1; + + debug("mxs_set_lcdclk, freq = %dKHz\n", freq); + + if ((!is_cpu_type(MXC_CPU_MX6SX)) && !is_cpu_type(MXC_CPU_MX6UL)) + return; + + if (base_addr == LCDIF1_BASE_ADDR) { + reg = readl(&imx_ccm->cscdr2); + /* Can't change clocks when clock not from pre-mux */ + if ((reg & MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK) != 0) + return; + } + + if (is_cpu_type(MXC_CPU_MX6SX)) { + reg = readl(&imx_ccm->cscdr2); + /* Can't change clocks when clock not from pre-mux */ + if ((reg & MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK) != 0) + return; + } + + temp = freq * max_pred * max_postd; + if (temp > max) { + puts("Please decrease freq, too large!\n"); + return; + } + if (temp < min) { + /* + * Register: PLL_VIDEO + * Bit Field: POST_DIV_SELECT + * 00 — Divide by 4. + * 01 — Divide by 2. + * 10 — Divide by 1. + * 11 — Reserved + * No need to check post_div(1) + */ + for (post_div = 2; post_div <= 4; post_div <<= 1) { + if ((temp * post_div) > min) { + freq *= post_div; + break; + } + } + + if (post_div > 4) { + printf("Fail to set rate to %dkhz", freq); + return; + } + } + + /* Choose the best pred and postd to match freq for lcd */ + for (i = 1; i <= max_pred; i++) { + for (j = 1; j <= max_postd; j++) { + temp = freq * i * j; + if (temp > max || temp < min) + continue; + if (best == 0 || temp < best) { + best = temp; + pred = i; + postd = j; + } + } + } + + if (best == 0) { + printf("Fail to set rate to %dKHz", freq); + return; + } + + debug("best %d, pred = %d, postd = %d\n", best, pred, postd); + + pll_div = best / hck; + pll_denom = 1000000; + pll_num = (best - hck * pll_div) * pll_denom / hck; + + /* + * pll_num + * (24MHz * (pll_div + --------- )) + * pll_denom + *freq KHz = -------------------------------- + * post_div * pred * postd * 1000 + */ + + if (base_addr == LCDIF1_BASE_ADDR) { + if (enable_pll_video(pll_div, pll_num, pll_denom, post_div)) + return; + + /* Select pre-lcd clock to PLL5 and set pre divider */ + clrsetbits_le32(&imx_ccm->cscdr2, + MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_MASK | + MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_MASK, + (0x2 << MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_OFFSET) | + ((pred - 1) << + MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_OFFSET)); + + /* Set the post divider */ + clrsetbits_le32(&imx_ccm->cbcmr, + MXC_CCM_CBCMR_LCDIF1_PODF_MASK, + ((postd - 1) << + MXC_CCM_CBCMR_LCDIF1_PODF_OFFSET)); + } + + if (is_cpu_type(MXC_CPU_MX6SX)) { + if (enable_pll_video(pll_div, pll_num, pll_denom, post_div)) + return; + + /* Select pre-lcd clock to PLL5 and set pre divider */ + clrsetbits_le32(&imx_ccm->cscdr2, + MXC_CCM_CSCDR2_LCDIF2_PRED_SEL_MASK | + MXC_CCM_CSCDR2_LCDIF2_PRE_DIV_MASK, + (0x2 << MXC_CCM_CSCDR2_LCDIF2_PRED_SEL_OFFSET) | + ((pred - 1) << + MXC_CCM_CSCDR2_LCDIF2_PRE_DIV_OFFSET)); + + /* Set the post divider */ + clrsetbits_le32(&imx_ccm->cscmr1, + MXC_CCM_CSCMR1_LCDIF2_PODF_MASK, + ((postd - 1) << + MXC_CCM_CSCMR1_LCDIF2_PODF_OFFSET)); + } +} + +void enable_lcdif_clock(u32 index) +{ + u32 reg = 0; + u32 lcdif_clk_sel_mask, lcdif_ccgr3_mask; + + if (is_cpu_type(MXC_CPU_MX6SX)) { + if (index > 1) + return; + /* Set to pre-mux clock at default */ + lcdif_clk_sel_mask = (index == 1) ? + MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK : + MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK; + lcdif_ccgr3_mask = (index == 1) ? + (MXC_CCM_CCGR3_LCDIF2_PIX_MASK | + MXC_CCM_CCGR3_DISP_AXI_MASK) : + (MXC_CCM_CCGR3_LCDIF1_PIX_MASK | + MXC_CCM_CCGR3_DISP_AXI_MASK); + } else if (is_cpu_type(MXC_CPU_MX6UL)) { + if (index > 0) + return; + /* Set to pre-mux clock at default */ + lcdif_clk_sel_mask = MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK; + lcdif_ccgr3_mask = MXC_CCM_CCGR3_LCDIF1_PIX_MASK; + } else { + return; + } + + reg = readl(&imx_ccm->cscdr2); + reg &= ~lcdif_clk_sel_mask; + writel(reg, &imx_ccm->cscdr2); + + /* Enable the LCDIF pix clock */ + reg = readl(&imx_ccm->CCGR3); + reg |= lcdif_ccgr3_mask; + writel(reg, &imx_ccm->CCGR3); + + reg = readl(&imx_ccm->CCGR2); + reg |= MXC_CCM_CCGR2_LCD_MASK; + writel(reg, &imx_ccm->CCGR2); +} +#endif + #ifdef CONFIG_FSL_QSPI /* qspi_num can be from 0 - 1 */ void enable_qspi_clk(int qspi_num) diff --git a/arch/arm/include/asm/arch-mx6/clock.h b/arch/arm/include/asm/arch-mx6/clock.h index 2b220d6..15d14f0 100644 --- a/arch/arm/include/asm/arch-mx6/clock.h +++ b/arch/arm/include/asm/arch-mx6/clock.h @@ -66,6 +66,8 @@ int enable_spi_clk(unsigned char enable, unsigned spi_num); void enable_ipu_clock(void); int enable_fec_anatop_clock(int fec_id, enum enet_freq freq); void enable_enet_clk(unsigned char enable); +void enable_lcdif_clock(unsigned int index); void enable_qspi_clk(int qspi_num); void enable_thermal_clk(void); +void mxs_set_lcdclk(u32 base_addr, u32 freq); #endif /* __ASM_ARCH_CLOCK_H */