From patchwork Tue Dec 15 08:27:18 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 556835 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 615E31402ED for ; Tue, 15 Dec 2015 19:29:21 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0309B4BBA6; Tue, 15 Dec 2015 09:28:11 +0100 (CET) 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 jW9eohTKmqTO; Tue, 15 Dec 2015 09:28:10 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 21AB64BB8F; Tue, 15 Dec 2015 09:28:10 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8746A4BBC6 for ; Tue, 15 Dec 2015 09:27:53 +0100 (CET) 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 G0o7-8Ze0zdu for ; Tue, 15 Dec 2015 09:27:53 +0100 (CET) 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-bn1-obe.outbound.protection.outlook.com (mail-bn1bbn0105.outbound.protection.outlook.com [157.56.111.105]) by theia.denx.de (Postfix) with ESMTPS id 428114BBC5 for ; Tue, 15 Dec 2015 09:27:36 +0100 (CET) Received: from BLUPR0301CA0013.namprd03.prod.outlook.com (10.162.113.151) by CY1PR03MB1439.namprd03.prod.outlook.com (10.163.17.149) with Microsoft SMTP Server (TLS) id 15.1.355.16; Tue, 15 Dec 2015 08:27:28 +0000 Received: from BN1AFFO11FD043.protection.gbl (2a01:111:f400:7c10::198) by BLUPR0301CA0013.outlook.office365.com (2a01:111:e400:5259::23) with Microsoft SMTP Server (TLS) id 15.1.355.16 via Frontend Transport; Tue, 15 Dec 2015 08:27:28 +0000 Authentication-Results: spf=permerror (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: PermError (protection.outlook.com: domain of freescale.com used an invalid SPF mechanism) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD043.mail.protection.outlook.com (10.58.52.190) with Microsoft SMTP Server (TLS) id 15.1.346.13 via Frontend Transport; Tue, 15 Dec 2015 08:27:27 +0000 Received: from linux-7smt.suse ([10.193.99.203]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id tBF8RMGT007081; Tue, 15 Dec 2015 01:27:25 -0700 From: Peng Fan To: Date: Tue, 15 Dec 2015 16:27:18 +0800 Message-ID: <1450168038-13371-1-git-send-email-Peng.Fan@freescale.com> X-Mailer: git-send-email 2.6.2 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD043; 1:Qe6MOkqnaP/dDM/1r74bNPqTS2DreMjXXbmYOd96/Mge2hdM4JF+R0A7VQlsO2acWHhhCZdXODoRCG1HIRsAKezDCSJTqZ107eAi1H6UR/WGWAXfhUd9yN6lRqJAThpuvNnPJyz/hrVr5n191duX2j/gafC0Y9c2U2f8Z47URRyvtrszPuLQPl0gszPYMr+kdEeh0HZ+4DSHlWC4C//PPDfypHwuTOId8p/ZLP8jyytIaShNp+yXxn2tYF8N/6B/53lURwgQIFiOZ5QoXlNbNMRm7FE5AGuCiWbtQSlYBmQC3Mv26pv/3tyxZf8zEfaQ0U5ElKhan2EkppYx+goL5k07eMAeFG+fbn3nVW1yd6SHMFtgyqUln7XfZTZaGEztdPdmETS8PciAY514CZDSaiyWWRlSfS/KFtsiltIB48I= X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(448002)(199003)(189002)(106466001)(5001960100002)(36756003)(47776003)(92566002)(5008740100001)(1220700001)(586003)(1096002)(110136002)(6806005)(104016004)(77096005)(87936001)(48376002)(50986999)(81156007)(189998001)(5003940100001)(85326001)(19580395003)(50466002)(97736004)(229853001)(575784001)(11100500001)(2351001)(50226001)(86362001)(19580405001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR03MB1439; H:tx30smr01.am.freescale.net; FPR:; SPF:PermError; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1439; 2:ONuTHHolLfivnPVxF+vJsVjt+P9xSdU6Ld/XyBmOQqECAb2alRI0F/3cU5ntqXotnzgvLtI04SFbkFvPw0XJfkt2ri5RJf5RbK8yUfDete1iEnotYy7lyC3Lk6rFaZzuG21b0SxxldIcp3icQ/Uvhg==; 3:zMm5nstHDQBi4vt1a4LCnMP2TCtY0ChL9oaHvjR8bhyzhz3ety8XT2dwAuvsmZjGxuN/BnPMJb+y3d+DIfhEfy840xiPAJEqACgoEUZ7YwuB5R0s86SnU0gjK7RYccrZpBCb1YqJmvjhnQco9vjuVV7neV1+NuI1PECDBbaoYaFojQFuKJ5dmdu3ltWlOmpWzMFQ81V3nr2My7idafE6ZKtb8G6h+PT+qyqbMOWjAS0=; 25:rVYbFKwvDhtwegtrnvnjZ2QOnHrv8EJFkt4hDQ1J5CK55u0r4dzydFabRCZl+6U2BZHdR+k9rGO63g+S+rOuDuoH0mafdLRrqPAitn1Px7m5gr8HMUyqkWRUpelR3OIXvFSt8b2E5TYU0mfJYyKw2RPQGnio/LkTRGkkaJuDLlOL289WYmryKPYCFU76UkGsRMovf0NBuIlSuy5Lzqu+Nu15f8a+DQQFHczaAdu6FeHEflO4gbHmNpTVSeJY7CQN8xZneim+C4rTSnHWZ5lUiA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1439; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1439; 20:cjlO1WLNthL8FuypXEUjMRYHh9oYP8Gaf1JdbjVblU61UPIAQezpbhAXNYY1/HiV5i2jGY/IWqpImbrLu7/7Ohs8rhs42uUGAIKpTtz+zG/FDD033ZM1/zD/9yAI+SMXj+GQwQUyzE0Q/rVgyxFBr01w0Dv1zXT+ah2juhMnQvaE7ecIINBJXRPntsGT0oR8rFbhjq4hznH+WYQ4I6W/G9C2nQLXOWUq4C6Jo3j0+N2Vx2/9rZ1UBpDUgAU+DnKTUHIgr/R/MfDe91A4Xtg0GiM2QFgqj/JkdAKC+uWTgpqN/EKcr+GlhzmXrBwLVIS5xL8grkYukdWUx1p6j7YEHlh18u9qLuGc8KoqrNI3EwY=; 4:DBdJs5XUSXhgTcyNP4kAem363UgXmvqywcKEwcnsD7LO1pV8kbSm1HOlBJYP/C7E4lfP2VK+DcEffsISCxY/pz3rFo+dqmd24/bVt8Z1dSTZAWNO9nD5WKPEGw5jJfBSnsbXmy6hN6jmLfOJzFBfvSUKwOKLUyUxv2ck2OTq/ztaE5BjxxJJGkFYzEY92xCBVElpDPx+Yx0SsYyCQUF90ETBE+FVUwL9rjmfBI6iswOSZkO0EUOiypbemLRz5/P98mpSwSpxFwLX1+VQhkVoBfm362yTCTtE7K420r2JHPJ2diJIQLln9NfBSMAfZTQv0E3XOYT/sQbIVEJA08vF9jz1+TSs3MJGO53ftHX2sElIZuAGn4Kvo046Zks7Vd5QBN4puwisvGsL25j1QZJ2QKcmbIVOGcAwzDXj+pii/qOJw0XH3eKUqdBtu9d9zJJ2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001)(10201501046); SRVR:CY1PR03MB1439; BCL:0; PCL:0; RULEID:; SRVR:CY1PR03MB1439; X-Forefront-PRVS: 07915F544A X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1439; 23:w7JU6HS7hl9GVDguaQEHvV9Dpn6haWk2vSXV92QRxiBBxTF5wwTeApK1F/cRUBQHJNo2w9Llw3N8jENARDjZ7ppw0VkpH6tJghrEaF2uQ2FrKTPRJYn+BdWoClT6n215aiKAs08zGatqvo8Te6v5KnwnkZeMZ03D10T1JSJBiKXbkB53UiCPlcEkBFSlnWvg8OvngKeIieFTsCDxY9tRcVH4yYq3DTI3D/ndyel3DumvctcJcSzVpT5NUsi5nQMamdauPQO5TnPk6SpByfAd3lyAsADgZ/wx9HTodIpLOGdNVVwx8vlG1dgpGdt5xoXEynG5J1looL/qOSjpd1fuzi+Mw2jebP3Awja/+ZfWOsAEaKeBnVXtmIZXEEu0a0hjKnctFMjK0xukJ1FLAU9hFX75Gtr2Xd8sB7F+edOYpjTBFTqsZokbKCO2thkHSznespAHmz9uU2OPCCYvJhaViTm5v6Iff12+82VqGLRDrJTcrybCZCypp/sdG7v2LH70GWZqNmyv/ybqKKkImmh1cnrJ+pIWihtF/7ivCVDyPLd8qF634w9R5LaF9PwAPL51WvlQyFdWYkJKSdg3SMXK+GCwetFRzx2lRVlTqkFwjAvwnZBQxhQnA7ltDSgxhtw7YNgzSMJSv8MsioH42KKNNmTsYySTu/zvjOtGCsqR+CR7p5hD4CVKzE0hJhHJZfz7y8npp36O7+BcAjLkupsXldZ5VN/Z7fBBmoFmzmJH5QA6kbGtrcKkx9qsUcnzta3r/1PaXfZy3xOX0yEeVXB2XLn0G/FfvVI+2BXQHbsTKFuG2e5WfkBLeTG6Pc+weqCvCpFrji58E3WH0NZ1/RY3l3PRftq/eatFw6P2/QuJfw7Vs+9nlkPkDdu0FKP9yQy6KXxEWATT6a3Ceyh6ClvrM7PmQogJcwmepqwoV+/lnM5tpD/DzTN9TdLzxFEA3xUZ X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB1439; 5:KIcRKFhKlrXs3e/NpmjwpRM6cVuvu846Aod2H3n44IcQbMGatUegLPenpxSHsxHQ0NIb26PtKtvBEZTkWGFoTE+Ztdmh5wLQHlwPd6AXl/mNzhdSvCCHlHQgxPDZPLw6unR9H5n8MGZd94U7QxaKhw==; 24:8iLMPbDexn9y1xZwbwWARnrpFTSAKEVys9jo5eV4Xs+MRRAjE7W6gXxalzemRWwDXd+ICJSCVWIOMSNm8NXJqfOq4vD89B+V+VLIMSR0zBQ= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Dec 2015 08:27:27.4090 (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: CY1PR03MB1439 Cc: Fabio Estevam Subject: [U-Boot] [PATCH] imx: mx6qsabreauto: support lvds display 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" Move setup_display from board_early_init_f to board_init. Add more clock settings. Add blacklight iomux setting. Add display_info_t info for the lvds screen. Signed-off-by: Peng Fan Cc: Fabio Estevam Cc: Stefano Babic --- board/freescale/mx6qsabreauto/mx6qsabreauto.c | 87 ++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/board/freescale/mx6qsabreauto/mx6qsabreauto.c b/board/freescale/mx6qsabreauto/mx6qsabreauto.c index 7c0e90a..c2e9c57 100644 --- a/board/freescale/mx6qsabreauto/mx6qsabreauto.c +++ b/board/freescale/mx6qsabreauto/mx6qsabreauto.c @@ -412,14 +412,44 @@ u32 get_board_rev(void) } #if defined(CONFIG_VIDEO_IPUV3) +static void disable_lvds(struct display_info_t const *dev) +{ + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; + + clrbits_le32(&iomux->gpr[2], + IOMUXC_GPR2_LVDS_CH0_MODE_MASK | + IOMUXC_GPR2_LVDS_CH1_MODE_MASK); +} + static void do_enable_hdmi(struct display_info_t const *dev) { + disable_lvds(dev); imx_enable_hdmi_phy(); } struct display_info_t const displays[] = {{ .bus = -1, .addr = 0, + .pixfmt = IPU_PIX_FMT_RGB666, + .detect = NULL, + .enable = NULL, + .mode = { + .name = "Hannstar-XGA", + .refresh = 60, + .xres = 1024, + .yres = 768, + .pixclock = 15385, + .left_margin = 220, + .right_margin = 40, + .upper_margin = 21, + .lower_margin = 7, + .hsync_len = 60, + .vsync_len = 10, + .sync = FB_SYNC_EXT, + .vmode = FB_VMODE_NONINTERLACED +} }, { + .bus = -1, + .addr = 0, .pixfmt = IPU_PIX_FMT_RGB24, .detect = detect_hdmi, .enable = do_enable_hdmi, @@ -440,18 +470,69 @@ struct display_info_t const displays[] = {{ } } }; size_t display_count = ARRAY_SIZE(displays); +iomux_v3_cfg_t const backlight_pads[] = { + MX6_PAD_SD4_DAT1__GPIO2_IO09 | MUX_PAD_CTRL(ENET_PAD_CTRL), +}; + +static void setup_iomux_backlight(void) +{ + gpio_direction_output(IMX_GPIO_NR(2, 9), 1); + imx_iomux_v3_setup_multiple_pads(backlight_pads, + ARRAY_SIZE(backlight_pads)); +} + static void setup_display(void) { struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; int reg; + setup_iomux_backlight(); enable_ipu_clock(); imx_setup_hdmi(); + /* Turn on LDB_DI0 and LDB_DI1 clocks */ + reg = readl(&mxc_ccm->CCGR3); + reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK; + writel(reg, &mxc_ccm->CCGR3); + + /* Set LDB_DI0 and LDB_DI1 clk select to 3b'011 */ + reg = readl(&mxc_ccm->cs2cdr); + reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK | + MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK); + reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET) | + (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET); + writel(reg, &mxc_ccm->cs2cdr); + + reg = readl(&mxc_ccm->cscmr2); + reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV | MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV; + writel(reg, &mxc_ccm->cscmr2); + reg = readl(&mxc_ccm->chsccdr); reg |= (CHSCCDR_CLK_SEL_LDB_DI0 << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET); + reg |= (CHSCCDR_CLK_SEL_LDB_DI0 << + MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET); writel(reg, &mxc_ccm->chsccdr); + + reg = IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW | + IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW | + IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG | + IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT | + IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG | + IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT | + IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0 | + IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED; + writel(reg, &iomux->gpr[2]); + + reg = readl(&iomux->gpr[3]); + reg &= ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK | + IOMUXC_GPR3_HDMI_MUX_CTL_MASK); + reg |= (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 << + IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET) | + (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 << + IOMUXC_GPR3_HDMI_MUX_CTL_OFFSET); + writel(reg, &iomux->gpr[3]); } #endif /* CONFIG_VIDEO_IPUV3 */ @@ -467,9 +548,6 @@ int overwrite_console(void) int board_early_init_f(void) { setup_iomux_uart(); -#ifdef CONFIG_VIDEO_IPUV3 - setup_display(); -#endif #ifdef CONFIG_NAND_MXS setup_gpmi_nand(); @@ -494,6 +572,9 @@ int board_init(void) gpio_direction_output(IMX_GPIO_NR(1, 15), 1); imx_iomux_v3_setup_multiple_pads(port_exp, ARRAY_SIZE(port_exp)); +#ifdef CONFIG_VIDEO_IPUV3 + setup_display(); +#endif setup_iomux_eimnor(); return 0; }