Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754075AbcKYJ01 (ORCPT ); Fri, 25 Nov 2016 04:26:27 -0500 Received: from mail-bn3nam01on0075.outbound.protection.outlook.com ([104.47.33.75]:11759 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752378AbcKYJ0V (ORCPT ); Fri, 25 Nov 2016 04:26:21 -0500 X-Greylist: delayed 3571 seconds by postgrey-1.27 at vger.kernel.org; Fri, 25 Nov 2016 04:26:21 EST Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; X-IncomingTopHeaderMarker: OriginalChecksum:;UpperCasedChecksum:;SizeAsReceived:598;Count:8 From: Meng Yi To: , CC: , , Jason Jin , Meng Yi Subject: [PATCH] nxp/diu: enable diu support for t1042 platform Date: Fri, 25 Nov 2016 14:40:55 +0800 Message-ID: <1480056055-3385-1-git-send-email-meng.yi@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 X-IncomingHeaderCount: 8 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131245304515769378;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(339900001)(336004)(199003)(189002)(47776003)(189998001)(39410400001)(305945005)(7846002)(356003)(8666005)(50986999)(5003940100001)(106466001)(68736007)(36756003)(575784001)(105606002)(50226002)(8936002)(5001770100001)(48376002)(8676002)(81156014)(97736004)(39450400002)(33646002)(86362001)(92566002)(85426001)(81166006)(626004)(50466002)(104016004)(6666003)(38730400001)(2906002)(77096005)(39380400001)(5660300001)(39400400001)(4326007)(7059030)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR03MB2465;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD047;1:WbQ/DV1nHszCrhWLdgKGWZXoO2FATBsONbbytR5ldYYlq9n9cu6uvAKfAWGJlQr8Qn8AuE6HUX0OLhOCtnMFCLZCGUZpZo0QzfkGPqfQtBYhxvlUchzhxYPhfF3zvxU496QcI31ptPcEPjcEYvVn1LJ0HJO+dWVCUaJnBhTkyEcJqOnzovxC6oLiijJavUh1KoAPyz18fX0sCeH4EQWJyRvQEJ+VaFTRfjgnRXOTmS6hLppFJG3vqSmL8X69oifS4TBennUeXreq/iJyujcX5y36lVB674YiIBNdxAxvaHKMHSb3Ll5snVzcglwCdgROqIGxnBWqO8P9lDKTVwATB0c3eF633O4AW3w8o+jt1pE/uhjo6I/q/M8BuWww9opEvWOZnmDegFckeaGLz0bT+aHbP5rfzANncOgtamjoSkMdWWsPTKmhM42it6n9m6CjTHjyTX85hsQLQjt+RWP+O0I1KlA9nJx8Dq+uLLg42ZKKJNyuqt0ESy25y6eSdYEOMDvLzqL2MRkTRjivf8feSb6I12JqqwNDbTIRtHdb8IOaHJ9eynafGzALFLOzN9zTfnhxL5nzHg4PT6LgyuwoYMJHAs2/eINbsJRBrTcsixLzs2MTllKGD5qK2Tg8j3R1AhPwwyEocbaVTjtpFX04WSrEbQvDi3CvKQG0+rzCLuoP9rM8i3KypZ/YghLdb8ShRmN9Z02DJgaTxxCmiaNmTwoMcQNEaZr3uWAsTQvA96c= MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2465;2:u8ZwVNSpP7zeaImDceA7ayddjcp7n4+15MUhaewiFimA+3p9VAs3YD/KwZi0516MZzLCMakRSZxltNhWskultQ/cLkhjVPLAKKMhSYEgjOW3H0vGD1N+psZQCBW/j/HlKWxwo6IdXWTKvd1vZ4BuF/A5WBIcumoAYuQUiNK+VqE=;3:4MbREXHMEC3XuPbr9A3bReXonlhsY6R/7TAg1Q2BlGjKqmxOQe+mjvW0nMMTYbnHXgOP0PrPL3c0mtTDK6z4tbM0TULGcrZxWyh4iLJfOwzU3Y6fJxvaZUF/2oG9ZW5h/Ro0bGd4xbI8fpisTJLXUDNVx50m5OivHpp3s9cfV4BVjWgi2DOBdQzpY5Oi97NDtGyUrylvqXzvsaD+5Lbe1WB8S+oBM7fquvFZ/UOysu33zshDJ1oX+x5dSXN+S7cHUmqpd5V5fOStkd5ByDTQ+w==;25://bOq6gacIHmIJPtKHevUItbA91TaXDghs5d8QtNPhLmwOLJdxsATFz2okqGPYxXbqMDCVTAuckx7IatSO0hmUDMm/1HkmzbAiHf8dVlgrRhjCZRpRCj0UTEso4rT80Ugrc8QqJSu7X27daOVWfaLPpMkWNv6qQJqXf8sFJBgggRs3YmgdQfSgQZPSg2HdHxvzVYEAcbYEeoaE/5uM1CUaUu8+S1M/sNzay3hxi9yKaU/gpsIhLwud5cluZSgwG/hNHWjF8DT9NgW9pp4Un1WZLWJ82c56QogxH8Z7hvRY9efTs9GqHxLFUxNh0ZMn4d/uYEHDRT4Krbt4Q2WiaR7ZO+N6QVb+km1//Q0RjpJjjWOEhJbQQWPDi78DQoCyU3xqX/7A1h025TsQz0WlpB+If2vU3F6/adP+flhU2669lKXCgYlLnNCHcA7gE9bt+lDI00HGpXWlDCMYU3qNuvSQ== X-MS-Office365-Filtering-Correlation-Id: 63583186-bc95-4190-52c5-08d414ffdc8e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BN6PR03MB2465; X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2465;31:by+RyPQrlbyBHYV+EKlaXKr+VZcrY6lEuM90Ndg3iiqOSFe1zrN+h36Pg/6z7sjUt06w6JCZMfePg0xrDPKjDqaco+pC2SHG7gUQcuTf2RZD0+LAo6tSlgEZW2mF8k2kXQhT8IHdMJtwQnJPo2v7ohXANUdEkxpPogpmOtH39gleDCU9DVy/j+rmIUrTo0gLUzNj7uLkzTY6OKo9v6ANYbzT3C+am7cR1NJy9PAyQ1FsMIxbl2ziediBk6Pe9EIatTpvBtWVjkz0fU+IdO655pm1owNKLdjHwHg1kLt3Mqk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095060)(601004)(2401047)(13015025)(8121501046)(13017025)(13018025)(5005006)(13024025)(13023025)(10201501046)(3002001)(6055026)(6096035)(20161123556025)(20161123561025)(20161123565025)(20161123559025)(20161123563025);SRVR:BN6PR03MB2465;BCL:0;PCL:0;RULEID:(400006);SRVR:BN6PR03MB2465; X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2465;4:ekHysrvhxu5wec0oUKDz+s6K4q3j1vDHkz6/duPB1qvFMbe11n/90ciylItqdDU2n+uVta0fihj63HcGu8jJUXOBwpzqY6byn4TOSYvJ7YuXkJz8MW9oUu8vggZmRrx6wSkXLhIWeGKjGSKRHqrh/2kbXj+nfbn+MMN5YLfuMM77AzpJjxrNp+EQMcOJhLWNLes/iLHBhClCu0V2jwBrW8+iqxgY17zZ/nVLTCYoiovAD2A9q4I3xUDfPlD4VLkv/LwRHB0p/paQypIU4gRBB8tlFMH4IcxBPGuwZqaAZv/bMsGR8f6d+TZugp3BH8a1QrgFUJSTBgQH/bRd4zj2FKuN0VxvtwMwtvcdEgujHEbXSXW8Bju3bA5PEHvjqRKIUCgwI/OxhfdV5I3fKNUvBe8CzWv7mI3UuTc9ION1lL42SBGQ78AoZkex7EGbSSHXpAot7L+19IriMtQQwApPEVf2+H4K4mh1QKtT01UBSnZM/dbYDcTJ8szZtmvFUpBUOZmNkZWkwJPYiAgWibuGFnG5f83pD0w/m+uQkbuJci3jkvlzofcA+acmcTH4w9PVu0EiYcMzMJutmtkB9d8hTPqbI1eCMMnPpVkJvHhUQYXu5Cpk4GUj8y5VWZQWIQm+YilXceb5RrE8OEUwftwqEAbhPGfxmqAcI8WFUV9/ABiSrKkTmhO9V0Chnyw2jaJUDoSy60enFo2lkZuFoswVBkn0Bm5B/P7RRhgUtRjbltLPa1AAZJYPGhINmut58ts7 X-Forefront-PRVS: 01371B902F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR03MB2465;23:TMJdm9NY+YGjtBMilqFjRRbxANjfc14E3L94licCB?= =?us-ascii?Q?LI8QCtQwcpmQIACkxxUEWl3bFMYQZ0QFa5xMTpyHHfeic9FPm8sQrXxq+FjI?= =?us-ascii?Q?ofY+P56+8vKpqGvmvm2GOb1Nc30y/lCW6TXfKU3jZrzp1sLrdhzO4gKVSRiq?= =?us-ascii?Q?JPYDmlZKzsrA1CGyjWnqQMxhfQGIwpoFLoU/kFKm+36INoG2pRmLW2JVpuxZ?= =?us-ascii?Q?SClbPqzNeHPJ7m44du9FTlTeLgFlNPtXMmGL/OCbQYqMAAG3ya4r48lfJBq1?= =?us-ascii?Q?N6trRGhdld0qqmsAbk6Trtwes5m3a41ao4i4rPRO4+Y4vS0DiHZuqDtJ3XIo?= =?us-ascii?Q?KlQd3Bp0becuHAB97E9uiHENv/M9f748E0DycAm0ToLZwiyoHAuGAlb5VXBn?= =?us-ascii?Q?SbqoUXB71qA7v3UlsxBeJICAqyNd1dXmNp91KAfcL5lLy+kgwB/MET7APawZ?= =?us-ascii?Q?SJA1t6ElT74S/Iod5An0wcX5FwI7UDAUCM6hqpBYxLl0rwCit4mV5NDOwuPP?= =?us-ascii?Q?8R+Fs67iZmKpr4ptxjVlHxC5LEq6wb/RWZhrQXkOUaT+J+zC+cf9ljpybvxx?= =?us-ascii?Q?FNB2ei2pT1zsZEuxpOzfpHk/w3+0Hro9kuEnufFAOvq3XKWKRkP4umTGOCoC?= =?us-ascii?Q?I6ydEy4JiG3kGLiptuIAKFB9Sn8TudHAcbt32bLlLlPBRfaV/QevOuRvZE+E?= =?us-ascii?Q?EqsZbY58b2ns+Ng+lhci5G6hu2XaHgILoBp/oAcaguditVwnkvHZzD0uKNVD?= =?us-ascii?Q?h1CCxrIFXxGc6Esh7YOyR02zNBTn2gC8O/9hFHTdULws1Hhitgc5wqddrc7w?= =?us-ascii?Q?pv+YHNazwcqYzJvI+kSakq8nPXZGE5r95kmqQxgCk6MssxprKR8/U+o7CwH+?= =?us-ascii?Q?Pk8LmwD+HpUu/8mI6oYY4twqVzM81Pkyns3UzG0VdaFBjiXw6nNdlE9945FW?= =?us-ascii?Q?jWR1MPBMq1c7ngko+L0aAhA09m9ZEHTinjcIYRBl5u/q17m7h7mF7cC+eoec?= =?us-ascii?Q?Xgms3OhDRlvcog+Fer7r6b5waigOLRVu7jD5Y8g3agGfzwFhc1xsjPEQVuhu?= =?us-ascii?Q?ZhersQOVCWkaNPgRGNu8qniQcXgT15wIEmZi06KFOO9OV4reqO0dEpEQQNGZ?= =?us-ascii?Q?Vsrn+dERDw83c8YwD6s9t614ixoZSjHJTYkHnGqRAfWeMn1ofBOM9yMT/bfx?= =?us-ascii?Q?laU2Yqf0Yp1Qfw=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2465;6:7KmGlvSjS5yFHcK6v6UhYiZ56HpsKFQyVzgqw2c8ANjiVIiZL9LrVhkfohO+54Tu9otq5GdaBRms+tD6W6Ku3k59mBRux5Qz+GTiIomq1Zm2019x1KtVZo1mr/uS8NrxtX+jT7kG5Sl2FpaEXB+BEa/uwAztp0aMMr5EofQ+vtoxNdHe+R+VVhAK+PY44lhj8nBlocVaucNESH0+0TR5MULGbbfyoVHWMi74cF0/bO49zZB+TJ6SkaRmemQuaPGAg35kQdxe9/lvdCiw2irGcJ0rdNO2zkkLDS8G6h0w+hEWhieRxPg+CYlbWhcbZL8bKLRG5VaVypyyhPvIdpaanw==;5:hAfrcatM1Pv6mwDBHgviq5Iz5vlZuOKx2EXB8amJuwRYdJPGx77telJr3/I7zRbJz5kUX/JeKgsPgMY+XeUc04xdyTBXLmIfwtO1mR08zLJ8NO2yiUgaejEasBbTymbNvcEUWOVVz3yL6N9nOJrbJ0tedS53CZ+RcUQrKD6SspKnFbwV7OYA24W/uGirE6bg;24:dQyFi+avKerzYc1mMAJjDCp7KF14PJK92T4D902rzudGVUlGcElgFRXUksEGQobK+QczaFPta87AGK40XA7m8l96ODOQ5ZiIrq2XCWxQhPo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2465;7:cQy3BKnj/QMTCmr7y2arFgZiBYS0wKidUqwBNAt/3pZMOgrWVPLHU4LOMzwL53J1cUe0CC2554oJIczCKymatI5WR6RDX+Y/iQuCs0o/CPS3idSxQ/vMQYWP7Rs+nvdnGsrF7xpc1m9C2ugZH3kCfzXd+3ZgDfI92D7cbbf58lJCXWR4yAADCH8YjeIvbQXaVAFC3wg+Dgqb64DsN3CbsNLCeTawezLdNdgzJFdwX6EXWnJw1oxaR3NP7CwOe5LL0dBku0QbESIEr0f89RHw4WW4OP/GcpqvzCrnYNQZyp9b3BK+SoHn4jZbf6h1lFLDSSV/h5Ia/E3mg9FdM6miNRbi7XvWPeNkEtIRnIyHsMA= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2016 06:54:11.3585 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB2465 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5259 Lines: 183 From: Jason Jin This patch add the DIU support for t1042 platform. signed-off-by: Jason Jin [Meng Yi: Made file t1042rdb-specific] Signed-off-by: Meng Yi --- arch/powerpc/platforms/85xx/Makefile | 1 + arch/powerpc/platforms/85xx/t1042rdb_diu.c | 152 +++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 arch/powerpc/platforms/85xx/t1042rdb_diu.c diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index 7bc86da..fe19dad 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_P1022_RDK) += p1022_rdk.o obj-$(CONFIG_P1023_RDB) += p1023_rdb.o obj-$(CONFIG_TWR_P102x) += twr_p102x.o obj-$(CONFIG_CORENET_GENERIC) += corenet_generic.o +obj-$(CONFIG_FB_FSL_DIU) += t1042rdb_diu.o obj-$(CONFIG_STX_GP3) += stx_gp3.o obj-$(CONFIG_TQM85xx) += tqm85xx.o obj-$(CONFIG_SBC8548) += sbc8548.o diff --git a/arch/powerpc/platforms/85xx/t1042rdb_diu.c b/arch/powerpc/platforms/85xx/t1042rdb_diu.c new file mode 100644 index 0000000..58fa3d3 --- /dev/null +++ b/arch/powerpc/platforms/85xx/t1042rdb_diu.c @@ -0,0 +1,152 @@ +/* + * T1042 platform DIU operation + * + * Copyright 2014 Freescale Semiconductor Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include +#include + +#include + +/*DIU Pixel ClockCR offset in scfg*/ +#define CCSR_SCFG_PIXCLKCR 0x28 + +/* DIU Pixel Clock bits of the PIXCLKCR */ +#define PIXCLKCR_PXCKEN 0x80000000 +#define PIXCLKCR_PXCKINV 0x40000000 +#define PIXCLKCR_PXCKDLY 0x0000FF00 +#define PIXCLKCR_PXCLK_MASK 0x00FF0000 + +/* Some CPLD register definitions */ +#define CPLD_DIUCSR 0x16 +#define CPLD_DIUCSR_DVIEN 0x80 +#define CPLD_DIUCSR_BACKLIGHT 0x0f + +struct device_node *cpld_node; + +/** + * t1042rdb_set_monitor_port: switch the output to a different monitor port + */ +static void t1042rdb_set_monitor_port(enum fsl_diu_monitor_port port) +{ + static void __iomem *cpld_base; + + cpld_base = of_iomap(cpld_node, 0); + if (!cpld_base) { + pr_err("%s: Could not map cpld registers\n", __func__); + goto exit; + } + + switch (port) { + case FSL_DIU_PORT_DVI: + /* Enable the DVI(HDMI) port, disable the DFP and + * the backlight + */ + clrbits8(cpld_base + CPLD_DIUCSR, CPLD_DIUCSR_DVIEN); + break; + case FSL_DIU_PORT_LVDS: + /* + * LVDS also needs backlight enabled, otherwise the display + * will be blank. + */ + /* Enable the DFP port, disable the DVI*/ + setbits8(cpld_base + CPLD_DIUCSR, 0x01 << 8); + setbits8(cpld_base + CPLD_DIUCSR, 0x01 << 4); + setbits8(cpld_base + CPLD_DIUCSR, CPLD_DIUCSR_BACKLIGHT); + break; + default: + pr_err("%s: Unsupported monitor port %i\n", __func__, port); + } + + iounmap(cpld_base); +exit: + of_node_put(cpld_node); +} + +/** + * t1042rdb_set_pixel_clock: program the DIU's clock + * @pixclock: pixel clock in ps (pico seconds) + */ +static void t1042rdb_set_pixel_clock(unsigned int pixclock) +{ + struct device_node *scfg_np; + void __iomem *scfg; + unsigned long freq; + u64 temp; + u32 pxclk; + + scfg_np = of_find_compatible_node(NULL, NULL, "fsl,t1040-scfg"); + if (!scfg_np) { + pr_err("%s: Missing scfg node. Can not display video.\n", + __func__); + return; + } + + scfg = of_iomap(scfg_np, 0); + of_node_put(scfg_np); + if (!scfg) { + pr_err("%s: Could not map device. Can not display video.\n", + __func__); + return; + } + + /* Convert pixclock into frequency */ + temp = 1000000000000ULL; + do_div(temp, pixclock); + freq = temp; + + /* + * 'pxclk' is the ratio of the platform clock to the pixel clock. + * This number is programmed into the PIXCLKCR register, and the valid + * range of values is 2-255. + */ + pxclk = DIV_ROUND_CLOSEST(fsl_get_sys_freq(), freq); + pxclk = clamp_t(u32, pxclk, 2, 255); + + /* Disable the pixel clock, and set it to non-inverted and no delay */ + clrbits32(scfg + CCSR_SCFG_PIXCLKCR, + PIXCLKCR_PXCKEN | PIXCLKCR_PXCKDLY | PIXCLKCR_PXCLK_MASK); + + /* Enable the clock and set the pxclk */ + setbits32(scfg + CCSR_SCFG_PIXCLKCR, PIXCLKCR_PXCKEN | (pxclk << 16)); + + iounmap(scfg); +} + +/** + * t1042rdb_valid_monitor_port: set the monitor port for sysfs + */ +static enum fsl_diu_monitor_port +t1042rdb_valid_monitor_port(enum fsl_diu_monitor_port port) +{ + switch (port) { + case FSL_DIU_PORT_DVI: + case FSL_DIU_PORT_LVDS: + return port; + default: + return FSL_DIU_PORT_DVI; /* Dual-link LVDS is not supported */ + } +} + +static int __init t1042rdb_diu_init(void) +{ + cpld_node = of_find_compatible_node(NULL, NULL, "fsl,t1042rdb-cpld"); + if (!cpld_node) + return 0; + + diu_ops.set_monitor_port = t1042rdb_set_monitor_port; + diu_ops.set_pixel_clock = t1042rdb_set_pixel_clock; + diu_ops.valid_monitor_port = t1042rdb_valid_monitor_port; + + return 0; +} + +early_initcall(t1042rdb_diu_init); -- 2.1.0.27.g96db324