首先看设备树的pwm节点:

vi rk3399.dtsi:
pwm0: pwm@ff420000 {compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm";reg = <0x0 0xff420000 0x0 0x10>;#pwm-cells = <3>;pinctrl-names = "active";pinctrl-0 = <&pwm0_pin>;clocks = <&pmucru PCLK_RKPWM_PMU>;clock-names = "pwm";status = "okay";
};

这个设备树节点会和pwm-rockchip.c匹配,调用probe函数:

根据设备树的信息,配置pwm的底层寄存器,把每个pwm通道都编一个index索引值都放入一个链表。以后我们要用某个pwm端口的时候就直接request端口就行了。

用pwm输出例子:

 pwm_demo: pwm_demo {status = "okay";compatible = "firefly,rk3399-pwm";pwm_id = <0>;      //使用pwm0通道min_period = <0>;max_period = <10000>;duty_ns = <5000>;
};
......
#include <linux/pwm.h>static struct pwm_device * pwm_device = NULL;static int firefly_pwm_probe(struct platform_device *pdev)
{int ret;printk("firefly_pwm_probe!\n");pwm_device = pwm_request(0, "firefly-pwm");    //索引值index = 0;即使用pwm0ret = pwm_config(pwm_device, 500000, 1000000); //没有用设备树的,直接写死占空比50%ret = pwm_enable(pwm_device);return 0;
}static int firefly_pwm_remove(struct platform_device *pdev)
{printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);pwm_disable(pwm_device);return 0;
}static const struct of_device_id firefly_pwm_match[] = {{ .compatible = "firefly,rk3399-pwm" },{},
};static struct platform_driver firefly_pwm_driver = {.probe      = firefly_pwm_probe,.remove     = firefly_pwm_remove,.driver     = {.name   = "firefly_pwm",.owner  = THIS_MODULE,.of_match_table = firefly_pwm_match,},
};static int __init firefly_pwm_init(void)
{printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);return platform_driver_register(&firefly_pwm_driver);
}static void __exit firefly_pwm_exit(void)
{printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);platform_driver_unregister(&firefly_pwm_driver);
}module_init(firefly_pwm_init);
module_exit(firefly_pwm_exit);MODULE_LICENSE("GPL");

rockchip的pwm驱动框架相关推荐

  1. Linux PWM驱动框架 (二)

    Linux内核提供看PWM的驱动框架,让驱动开发人员可以更好地进行PWM驱动的编写. 1.PWM结构体 struct pwm_chip {struct device *dev;struct list_ ...

  2. linux PWM驱动屏幕亮度及pwm子系统框架(Linux驱动开发篇)

    1.对象 imx6ull单片机,控制其下面的pwm3的外设.关于对象的详细介绍看裸机pwm控制屏幕亮度 在dtsi中的位置 /soc/aips1/pwm3 pwm3: pwm@02088000 { c ...

  3. 08.音频系统:第003课_Linux音频驱动程序:第002节_ASoC音频驱动框架

    通过上小节alsa音频驱动框架的分析,知道如果要去写一个声卡驱动,我们需要分配,设置,注册snd_card结构体: 定义一个struct snd_card *card; snd_card_new // ...

  4. linux驱动之LCD驱动框架

    软件框架: lcd框架其实与i2c/spi及其他驱动框架大同小异,都是由一个底层的platform驱动和一个较上层的抽象驱动组成.前者一般由厂商编写,而后者是内核框架提供的. 核心层 \linux-i ...

  5. ALSA驱动框架分析

    一.ALSA驱动框架介绍 1.ALSA介绍 ALSA(Advanced Linux Sound Architecture-高级linux声音架构),目前已经成为了linux的主流音频体系结构,ALSA ...

  6. platform驱动框架梳理

    1.linux中的总线-驱动-设备模型. 总线代码由linux内核提供,只需要编写设备和驱动.当向总线注册驱动时总线会从现有的所有设备中查找和此驱动匹配的设备,当向总线注册设备时总线也会在现有的驱动中 ...

  7. 音频2-ALSA/ASOC音频驱动框架

    计划分成下面8章来详细展开,后面再根据实际情况做调整. 1.基础知识(硬件,音频相关概念) 2.ALSA/ASOC音频驱动框架 3.codec 驱动dapm 相关(kcontrol.widget.ro ...

  8. Android驱动框架整理之KERNEL框架

    文章目录 一.文件系统 1.1 dts配置 1.2 defconfig文件 二.驱动分类 三.Makefile和Konfig还有defconfig文件关系 四.d 继上一篇uboot整理后,继续整理下 ...

  9. Linux驱动之模拟PWM驱动

    pwm(脉冲宽度调制)是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变.这种方式能使电源的输出电压在工作 ...

  10. I2C协议和驱动框架分析(二)

    二.I2C驱动框架浅析 1. I2C驱动框架概述         上一节主要介绍了协议和具体的 I2C 读写操作,本节开始介绍 Linux 内核下的 I2C 驱动框架.代码分析基于 RK3399 An ...

最新文章

  1. zedboard嵌入式linux,zedboard构建嵌入式linux
  2. Python脚本打包成exe文件
  3. java中的socket模型_Socket通信模型
  4. 函数节流之debounce
  5. chstr php,PHPWind与Discuz截取字符函数substrs与cutstr性能比较
  6. Hadoop和Spark三大核心组件介绍与对比
  7. 博弈-Green Hackenbush(无向图删边)
  8. 最新消息!阿里宣布延迟复工,字节跳动、腾讯......等企业也再次延迟!
  9. 基于MATLAB语音识别系统GUI界面
  10. cat3 utp是不是网线_CAT网线品种分类
  11. 常见硬件通信协议介绍
  12. 莱诺和柯南Excel甘特图
  13. 慕尼黑大学计算机语言学,慕尼黑大学,斯图加特大学和萨尔大学的计算语言学硕士如何选择?...
  14. 2020 年值得关注的20个区块链项目,来看看今年该把目光放在哪?
  15. reverse()的使用
  16. 2022实体经济寒冬,商家如何通过短视频平台寻找突破口
  17. Micro:bit 入门介绍
  18. 中国电信超 2 亿用户信息被卖,售价低至 0.01 元/条!个人信息安全何在?
  19. [Keras] 绘制训练过程中Acc和Loss曲线
  20. 基于阿里云IoT平台OTA进行APP确认升级的方案——业务架构类

热门文章

  1. vs2019配置OpenGL教程
  2. 微软卸载工具msicuu2(附带资源)
  3. 软件开发模型有哪些?
  4. 如何拥有类似 hi@hahah.fun 的个人专属域名的邮箱
  5. 突破百度知道瓶颈,问淘宝引流
  6. 细数百度小程序踩的坑
  7. McAfee:僵尸网新威胁远甚Conficker
  8. Fedora9下编译内核
  9. LabVIEW编程LabVIEW开发PXI-6704输出大于20mA的电流例程与相关资料
  10. Win7下Protel 99 SE SCH库文件和PCB库文件添加问题