I.MX6 U-boot PWM hacking
- /*******************************************************************************
- * I.MX6 U-boot PWM hacking
- * 说明:
- * 本文主要记录I.MX6 U-boot是如何配置PWM,发现文中的pwm0对应的引脚和真正的
- * 电路板的pwm0不是一个,也就意味着其实是引脚连接错了,另外之前一直有一个
- * 疑问:为什么双屏显示的时候,有一个屏在U-boot阶段和Kernel阶段总是不亮。原因
- * 应该是这里只初始化了一个显示控制部分,也就是不会初始两个PWM。
- *
- * 2016-3-7 深圳 南山平山村 曾剑锋
- ******************************************************************************/
- cat bootable/bootloader/uboot-imx/board/freescale/mx6q_sabresd/mx6q_sabresd.c
- ......
- #ifdef CONFIG_LCD
- void lcd_enable(void)
- {
- ......
- imx_pwm_config(pwm0, , ); ------------+
- imx_pwm_enable(pwm0); ------------*-+
- | |
- #if defined CONFIG_MX6Q | |
- /* PWM backlight */ | |
- mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT3__PWM1_PWMO); | |
- /* LVDS panel CABC_EN0 */ | |
- mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS2__GPIO_6_15); | |
- /* LVDS panel CABC_EN1 */ | |
- mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS3__GPIO_6_16); | |
- #elif defined CONFIG_MX6DL | |
- /* PWM backlight */ | |
- mxc_iomux_v3_setup_pad(MX6DL_PAD_SD1_DAT3__PWM1_PWMO); | |
- /* LVDS panel CABC_EN0 */ | |
- mxc_iomux_v3_setup_pad(MX6DL_PAD_NANDF_CS2__GPIO_6_15); | |
- /* LVDS panel CABC_EN1 */ | |
- mxc_iomux_v3_setup_pad(MX6DL_PAD_NANDF_CS3__GPIO_6_16); | |
- #endif | |
- ...... | |
- } | |
- ...... | |
- | |
- static struct pwm_device pwm0 = { <-----------+ |
- .pwm_id = , | |
- .pwmo_invert = , | |
- }; | |
- | |
- | |
- int imx_pwm_config(struct pwm_device pwm, int duty_ns, int period_ns) <----+ |
- { |
- unsigned long long c; |
- unsigned long period_cycles, duty_cycles, prescale; |
- u32 cr; |
- |
- if (period_ns == || duty_ns > period_ns) |
- return -; |
- |
- pwm.mmio_base = pwm.pwm_id ? (unsigned long)IMX_PWM2_BASE: |
- (unsigned long)IMX_PWM1_BASE; |
- |
- if (pwm.pwmo_invert) |
- duty_ns = period_ns - duty_ns; |
- |
- c = mxc_get_clock(MXC_IPG_PERCLK); |
- c = c * period_ns; |
- do_div(c, ); |
- period_cycles = c; |
- |
- prescale = period_cycles / 0x10000 + ; |
- |
- period_cycles /= prescale; |
- c = (unsigned long long)period_cycles * duty_ns; |
- do_div(c, period_ns); |
- duty_cycles = c; |
- |
- writel(duty_cycles, pwm.mmio_base + MX_PWMSAR); |
- writel(period_cycles, pwm.mmio_base + MX_PWMPR); |
- |
- cr = MX_PWMCR_PRESCALER(prescale) | |
- MX_PWMCR_STOPEN | MX_PWMCR_DOZEEN | |
- MX_PWMCR_WAITEN | MX_PWMCR_DBGEN; |
- |
- cr |= MX_PWMCR_CLKSRC_IPG_HIGH; |
- |
- writel(cr, pwm.mmio_base + MX_PWMCR); |
- |
- return ; |
- } |
- |
- int imx_pwm_enable(struct pwm_device pwm) <----------------+
- {
- unsigned long reg;
- int rc = ;
- if (pwm.enable_pwm_clk)
- pwm.enable_pwm_clk();
- pwm.mmio_base = pwm.pwm_id ? (unsigned long)IMX_PWM2_BASE:
- (unsigned long)IMX_PWM1_BASE;
- reg = readl(pwm.mmio_base + MX_PWMCR);
- reg |= MX_PWMCR_EN;
- writel(reg, pwm.mmio_base + MX_PWMCR);
- if (pwm.enable_pwm_pad)
- pwm.enable_pwm_pad();
- return rc;
- }
I.MX6 U-boot PWM hacking的更多相关文章
- I.MX6 U-boot lvds display hacking
/*********************************************************************************** * I.MX6 U-boot ...
- I.MX6 Power off register hacking
/*********************************************************************** * I.MX6 Power off register ...
- I.MX6 android BatteryService jni hacking
/**************************************************************************** * I.MX6 android Batter ...
- I.MX6 Ar8031 device register hacking
/***************************************************************************** * I.MX6 Ar8031 device ...
- I.MX6 change boot partition 1 to User area
/************************************************************************************ * I.MX6 change ...
- I.MX6 PWM buzzer driver hacking with Demo test
/***************************************************************************** * I.MX6 PWM buzzer dr ...
- I.MX6 天嵌 E9 U-boot menu hacking
/************************************************************************************ * I.MX6 天嵌 E9 ...
- I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking
/******************************************************************** * I.MX6 mfgtool2-android-mx6q- ...
- I.MX6 gpio-keys driver hacking
/**************************************************************************** * I.MX6 gpio-keys driv ...
随机推荐
- python 模拟ajax查询社工库...
在windows中使用,输入有关信息查询社工库,本来是网页版的,我把ajax请求提取出来.粗略的封装下,挺好玩. #coding:utf8 import urllib2,urllib from Bea ...
- 文件大小的友好输出及其 Python 实现
在数据库中存储时,使用 Bytes 更精确,可扩展性和灵活性都很高. 输出时,需要做一些适配. 1. 注意事项与测试代码 需要考虑 sizeInBytes 为 None 的场景. 除以 1024.0 ...
- 【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)
讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增. ]={21.1, 32.8, 23.4, 45.2, 37.4 }; double *pt=arr; //pt指针指向arr[0 ...
- 《WPF程序设计指南》读书笔记——第3章 内容的概念
1.Content属性及字体相关的属性 using System; using System.Windows; using System.Windows.Media; namespace LY.Dis ...
- Battle Over Cities (25)(DFS、连通图)
It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...
- 【多路复用】I/O多路复用
http://www.tuicool.com/articles/RBvqUz C#下用select方法实现socket服务端
- EXTJS 4.2 资料 跨域的问题
关于跨域,在项目开发中难免会遇到:之前笔者是用EXTJS3.0开发项目的,在开发过程中遇到了关于跨域的问题,但是在网上找到资料大部分都是ExtJs4.0以上版本的 在ExtJs中 例如:Ext.Aja ...
- 【BZOJ 1003】 [ZJOI2006]物流运输trans
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- Navicat for mysql 远程连接 mySql数据库10061、1045错误问题 (转)
远程使用Navicat for mysql 客户端软件连接 mySql数据时,连接出现 2003-Can’t connect to MySQL on ’192.168.1.2’(10061)错误时,是 ...
- 看几道JQuery试题后总结(下篇)
感谢圆友的提醒 昨天下午完成了9道试题中的前4道,之后好多园友存在些疑惑和建议,在这里我一并说一下吧.首先对于昨天第一题可能存在误导,在JQuery中并没有innerHTML这个属性,不过我们可以将J ...