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 ...
随机推荐
- 别让emacs损伤你的小母指
刚接触emacs时感觉,这东西怎么这么难用,还说是编辑器的神,我去. 写个代码跟挫游戏机手柄似的,关键是还这么难挫,平时用的最多的左ctrl键,这么难按,可怜的我的小母指(Petyr Baelish) ...
- sublime text2 配置php调试环境
步骤一: 首先确保你电脑安装了php,并把php设置到环境变量里了. 步骤二: 点击 sublime_text的“工具”->"编译系统"->"编译新系统&qu ...
- insert into (select...WITH CHECK OPTION) values(...)
insert into (<subquery> WITH CHECK OPTION) values (...) 语法看起来很特殊,其实是insert进subquery的这张表里: 1. 只 ...
- 请给出一个左侧定宽右侧自适应的HTML结构及样式
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- EXTJS 4.2 资料 控件之textfield文本框加事件的用法
{ xtype: "textfield", width: 100, id: "txtGroupName", name: "txtGroupName&q ...
- 关于安装Android Studio的一些问题的解决方法
问题1:每次Fetching android sdk component information 这是在检查你的 Android SDK .有人会在这里卡上很长时间,很大的原因就是:网络连接有问题.可 ...
- linux学习笔记(3)-文件系统
三大类文件类型 普通文件:包括文本文件.数据文件.可执行的二进制程序文件 目录文件:linux系统把目录看成一种特殊的文件,利用它构成了文件系统的树形结构 设备文件:把设备也看成是一个文件,例如你的鼠 ...
- 1034: [ZJOI2008]泡泡堂BNB - BZOJ
Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...
- OpenSessionInViewFilter 的配置及替代方案(转)
鸣谢:http://justsee.iteye.com/blog/1174999,http://blog.csdn.net/sunsea08/article/details/4545186 Sprin ...
- C#学习笔记(三)
1.我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,管Test()函数称之为被调用者.如果被调用者想要得到调用者的值:1).传递参数.2).使用静态字段来模拟全局变 ...