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 ...
随机推荐
- ajax中的post方法中回调函数不执行的问题
前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接 ...
- Python: tkinter实例改名小工具
#!/usr/bin/env python #coding=utf-8 # # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) # 本代码以MIT ...
- UVA 524
Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers ...
- Oracle监听器—静态注册
注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名一样,也有可能不一样. 注册分: 1. 静 ...
- 2016 系统设计第一期 (档案一)MVC bootstrap model弹出窗
局部代码: <!-- 按钮触发模态框 --> <div style=""> <button class="btn btn-primary&q ...
- ITaCS Change Password web part
http://changepassword.codeplex.com/ A webpart is used to change your sharepoint AD password.
- bnuoj 4225 杨辉三角形(规律)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4225 [题意]: 给定任意杨辉三角的行数n,请输出杨辉三角中前n行中总共有多少偶数. [题解]: 找 ...
- Any Way You Slice It (向量旋转 以及 判断线段是否相交)(模板)
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11353 #include<iostream> # ...
- java第一课:环境、变量、数据类型
一.java编程注意事项1.java区分大小写2.每条语句结尾有分号3.上下级代码注意缩进4.大括号要成对出现5.标点符号要用英文半角(半角全角区别)二.eclipse1.eclipse是自编译及时编 ...
- win8 优化笔记
win8可以关掉的服务: 以下是小编搜集的可以安全更改为手动启动的服务(按名称排序): Application Experience(启动时为程序处理应用程序兼容性缓存请求) ·Computer Br ...