服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 详解linux pwm驱动编写

详解linux pwm驱动编写

2022-03-07 16:31feixiaoxing Linux

这篇文章主要介绍了详解linux pwm驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

1、驱动目录

?
1
drivers/pwm

2、查看对应目录下的Kconfig

?
1
2
3
4
5
6
7
8
config PWM_SAMSUNG
 tristate "Samsung PWM support"
 depends on PLAT_SAMSUNG || ARCH_EXYNOS
 help
  Generic PWM framework driver for Samsung.
 
  To compile this driver as a module, choose M here: the module
  will be called pwm-samsung.

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

?
1
2
3
obj-$(CONFIG_PWM) += core.o
 
obj-$(CONFIG_PWM_SAMSUNG) += pwm-samsung.o

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

?
1
2
3
4
5
6
7
8
9
10
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函数中的有用信息

?
1
2
3
4
5
6
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、找到注册函数后,接续看看函数接口点在什么地方

?
1
2
3
4
5
6
7
8
9
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设备没有中断函数,一般是立马生效,除此之外,代码中还是有设备树的内容,可以看看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/feixiaoxing/article/details/79889240

延伸 · 阅读

精彩推荐
  • Linux通过案例深入解析linux NFS机制

    通过案例深入解析linux NFS机制

    这篇文章主要介绍了通过案例深入解析linux NFS机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    盗哥泡茶去了4692020-09-21
  • LinuxLinux服务器被黑以后的详细处理步骤

    Linux服务器被黑以后的详细处理步骤

    作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况供参考...

    techug9442022-02-25
  • Linuxlinux查看防火墙状态与开启关闭命令详解

    linux查看防火墙状态与开启关闭命令详解

    linux查看防火墙状态与开启关闭命令常用的有以下两种方式,大家可以参考一下...

    Linux教程网8492022-03-03
  • Linux理解Linux系统中Systemd 启动时在做什么

    理解Linux系统中Systemd 启动时在做什么

    本文我将开始探索管理 Linux 启动序列的文件和工具。我会解释 systemd 启动序列、如何更改默认的启动目标(即 SystemV 术语中的运行级别)、以及在不重启的情...

    Linux中国9812021-08-26
  • LinuxLinux系统如何安装配置Sendmail?

    Linux系统如何安装配置Sendmail?

    Sendmail 是目前在网络上最受欢迎的一种E-mail服务器,在互联网上是广受好评,很多企业用户都在使用。那么, Linux 系统如何安装配置Sendmail呢?下面,我们就...

    系统之家4632020-06-10
  • Linuxlinux nc命令传输文件(远程复制文件)

    linux nc命令传输文件(远程复制文件)

    今天主要讲下用nc 传输文件。由于公司的设备sudo 后没有ssh ,scp 等远程接入命令,或host.deny 里面设置了ssh 的deny ,不管怎样的原因。我今天跨过大家常用...

    脚本之家11622019-06-14
  • LinuxLinux系统中管理用户和用户组的相关配置文件简介

    Linux系统中管理用户和用户组的相关配置文件简介

    这篇文章主要介绍了Linux系统中管理用户和用户组的相关配置文件,是Linux入门学习中的基础知识,需要的朋友可以参考下...

    Now we are free!4182019-07-07
  • LinuxLinux系统安全配置详细解析

    Linux系统安全配置详细解析

    系统安全性对于用户来说至关重要,Linux用户也不例外。笔者就自己使用Linux的经历,总结了一些增强Linux安全防护的小窍门,在此介绍给大家 ...

    Linux教程网4562019-12-01