/*******************************************************************************
* 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的更多相关文章

  1. I.MX6 U-boot lvds display hacking

    /*********************************************************************************** * I.MX6 U-boot ...

  2. I.MX6 Power off register hacking

    /*********************************************************************** * I.MX6 Power off register ...

  3. I.MX6 android BatteryService jni hacking

    /**************************************************************************** * I.MX6 android Batter ...

  4. I.MX6 Ar8031 device register hacking

    /***************************************************************************** * I.MX6 Ar8031 device ...

  5. I.MX6 change boot partition 1 to User area

    /************************************************************************************ * I.MX6 change ...

  6. I.MX6 PWM buzzer driver hacking with Demo test

    /***************************************************************************** * I.MX6 PWM buzzer dr ...

  7. I.MX6 天嵌 E9 U-boot menu hacking

    /************************************************************************************ * I.MX6 天嵌 E9 ...

  8. I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking

    /******************************************************************** * I.MX6 mfgtool2-android-mx6q- ...

  9. I.MX6 gpio-keys driver hacking

    /**************************************************************************** * I.MX6 gpio-keys driv ...

随机推荐

  1. scala知识点(一)

    1.drop,dropRight,dropWhile drop: drop(n: Int): List[A] 丢弃前n个元素,返回剩下的元素 dropRight: dropRight(n: Int): ...

  2. MYSQL外键约束的参照操作

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...

  3. JavaScript 权威指南第6版 - [阅读笔记]

    JavaScript 基础   Page 13 (1)<script> 的属性:async,charset,defer='defer',language已废,src,type   (2)n ...

  4. DataGrid中取HyperLinkColumn列的值,处理DataGrid中绑定的特殊字符

    DataGrid中取HyperLinkColumn列的值. /// <summary> /// 对datagrid中标签进行编码,处理特殊字符 /// </summary> / ...

  5. (转)inux Read系统调用

    转载网址:http://my.oschina.net/haomcu/blog/468656 1. 什么是系统调用 2. read系统调用在内核空间的处理层次模型 3. 相关的内核数据结构 4. rea ...

  6. Angular与React的一些看法

    Angular - React之争 Angular和React无疑是目前最受追捧的两个前端框架,谷歌也发现Angular1.x不足的地方,开始开发2.0版本,脸书发现React的组件化和虚拟DOM非常 ...

  7. java中四种引用类型

    java中四种引用类型  今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...

  8. springMVC+MyBatis+Spring 整合(3)

    spring mvc 与mybatis 的整合. 加入配置文件: spring-mybaits.xml <?xml version="1.0" encoding=" ...

  9. __builtin_popcount()

    计算一个 32 位无符号整数有多少个位为1 Counting out the bits     可以很容易的判断一个数是不是2的幂次:清除最低的1位(见上面)并且检查结果是不是0.尽管如此,有的时候需 ...

  10. HDU 1203 I NEED A OFFER!(01 背包DP)

    点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...