【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

pwm方波可以用来控制很多的设备,比如它可以被用来控制电机。简单来说,就是单位时间内的方波越多,那么电机的转速就会越快;反之就越慢。通过这个特性,soc就可以轻松地利用pwm对外设进行自动控制。所以,今天的主题就是pwm驱动。

1、驱动目录

drivers/pwm

2、查看对应目录下的Kconfig

config PWM_SAMSUNGtristate "Samsung PWM support"depends on PLAT_SAMSUNG || ARCH_EXYNOShelpGeneric PWM framework driver for Samsung.To compile this driver as a module, choose M here: the modulewill be called pwm-samsung.

3、确认PWM_SAMSUNG只依赖于自己之外,继续看Makefile

obj-$(CONFIG_PWM)        += core.oobj-$(CONFIG_PWM_SAMSUNG)    += pwm-samsung.o

4、根据Makefile查阅pwm-samsung.c文件,结构比较清楚

static struct platform_driver pwm_samsung_driver = {.driver     = {.name   = "samsung-pwm",.pm  = &pwm_samsung_pm_ops,.of_match_table = of_match_ptr(samsung_pwm_matches),},.probe        = pwm_samsung_probe,.remove        = pwm_samsung_remove,
};
module_platform_driver(pwm_samsung_driver);

5、soc设备大多数是platform设备,继续寻找probe函数中的有用信息

 ret = pwmchip_add(&chip->chip);if (ret < 0) {dev_err(dev, "failed to register PWM chip\n");clk_disable_unprepare(chip->base_clk);return ret;}

6、找到注册函数后,接续看看函数接口点在什么地方

static const struct pwm_ops pwm_samsung_ops = {.request = pwm_samsung_request,.free        = pwm_samsung_free,.enable     = pwm_samsung_enable,.disable  = pwm_samsung_disable,.config      = pwm_samsung_config,.set_polarity = pwm_samsung_set_polarity,.owner      = THIS_MODULE,
};

7、pwm设备没有中断函数,一般是立马生效,除此之外,代码中还是有设备树的内容,可以看看

static const struct of_device_id samsung_pwm_matches[] = {{ .compatible = "samsung,s3c2410-pwm", .data = &s3c24xx_variant },{ .compatible = "samsung,s3c6400-pwm", .data = &s3c64xx_variant },{ .compatible = "samsung,s5p6440-pwm", .data = &s5p64x0_variant },{ .compatible = "samsung,s5pc100-pwm", .data = &s5pc100_variant },{ .compatible = "samsung,exynos4210-pwm", .data = &s5p64x0_variant },{},
};
MODULE_DEVICE_TABLE(of, samsung_pwm_matches);static int pwm_samsung_parse_dt(struct samsung_pwm_chip *chip)
{struct device_node *np = chip->chip.dev->of_node;const struct of_device_id *match;struct property *prop;const __be32 *cur;u32 val;match = of_match_node(samsung_pwm_matches, np);if (!match)return -ENODEV;memcpy(&chip->variant, match->data, sizeof(chip->variant));of_property_for_each_u32(np, "samsung,pwm-outputs", prop, cur, val) {if (val >= SAMSUNG_PWM_NUM) {dev_err(chip->chip.dev,"%s: invalid channel index in samsung,pwm-outputs property\n",__func__);continue;}chip->variant.output_mask |= BIT(val);}return 0;
}

linux驱动编写(pwm驱动)相关推荐

  1. STM32F427库函数配置DMA驱动TIM5 PWM驱动WS2812B单总线全彩RGB

    STM32F427库函数配置DMA驱动TIM5 PWM驱动WS2812B单总线全彩RGB 系列文章传送门: STM32F4多路PWM DMA控制千颗WS2812/SK6812配置过程全解析 STM32 ...

  2. Linux下IIC驱动编写(驱动adxl345传感器)

    基于IMX6ULL Mini开发板,硬件连接:SCL->43, SDA->42,CS->3.3V INT1->7 一.搭建基础框架 1.设置私有数据client,linux/i ...

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

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

  4. 海思3559A pwm驱动编写记录

    由于hisi3559a的内核中未包含pwm驱动,故需自己编写. 1. 修改Kconfig文件 打开XXX/drivers/pwm文件夹(XXX代表内核路径)中的Kconfig文件 增加如下内容 con ...

  5. pwm驱动 pca9685 代码简析

    pwm驱动十分常见,这篇博文就以pca9685为例,简单分析一下pwm驱动的常用套路,本文注重重代码逻辑,轻寄存器hack,寄存器hack,请参考datasheet. 代码解析 源码路径drivers ...

  6. Linux下的FrameBuffer驱动框架

    一.RGB LCD经典显示器件介绍: 1.LCD屏幕的重要属性参数: ① 分辨率:也就是屏幕上的像素点的个数: ② 像素格式:即单个像素点RGB三种颜色的表达方式,包括RGB888.ARGB8888和 ...

  7. linux的LCD的驱动编写

    Framebuffer设备 ​ Framebuffer 翻译过来就是帧缓冲,简称 fb,因 此大家在以后的 Linux 学习中见到"Framebuffer"或者"fb&q ...

  8. Linux PWM驱动框架 (二)

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

  9. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

最新文章

  1. 计算机二级第十九套题电子表格,2012年计算机二级Access第十九套上机试题及答案详解...
  2. 今天参加面试 上机题,整理一下
  3. memcpy函数_如何理解c语言中的回调函数
  4. FTP服务器配置与管理(4) 服务器端的常用配置及FTP命令
  5. CSS3 Media Query:移动 Web 的完美开端
  6. Kaggle : Using a Convolutional Neural Network for classifying Cats vs Dogs
  7. c是过程化语言吗数据库,A.数据库语言B.过程化语言C.宿主语言D.数据库管理系统...
  8. c/c++ linux 进程 fork wait函数
  9. 传奇服务器+技能cd修改器,CD登陆器KEY文件修改教程+配套工具_【传奇爱好者】...
  10. 【转】程序员10月书讯
  11. Log4j史诗级漏洞,我们这些小公司能做些什么?
  12. linux最后一行awk,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  13. 企业级安全攻防三:身份认证,只有账号密码吗?
  14. 2k2实用球员_NBA2K Online2实用平民球员推荐:上篇
  15. SpringBoot使用JavaMailSender发送邮件:com.sun.mail.smtp.SMTPSendFailedException: 451 MI:SFQ 163 smtp7
  16. [Ubuntu]使用DataDog集成跟踪Django项目
  17. 《易经》否、泰两卦的启示---让人饱受困扰的沟通问题
  18. CFD解决一维标量问题(迎风、Lax-Wendroff、TVD、WENO5+3阶Runge-Kutta)
  19. Vue教程 第一篇 基础
  20. Android(一)使用eclipse开发一个Android拨号器

热门文章

  1. 钢铁侠要为Facebook的智能管家配音,really?
  2. 解决Maven的Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
  3. 棋牌游戏服务器设计(1)
  4. Huge page使用的一些问题
  5. Ubuntu 14.04 配置caffe环境
  6. 从HP收购ArcSight看SIEM/MSS市场现状与格局【9月17日更新】
  7. 产品设计体会(7024)有关交互设计,读过的6本书
  8. 第三章·MySQL版本区别及管理
  9. 指针辨析:悬垂指针、哑指针、野指针、智能指针
  10. Spring MVC-页面重定向示例(转载实践)