Home > System Tutorial > LINUX > body text

Linux PWM driver

王林
Release: 2024-02-05 15:40:03
forward
1239 people have browsed it

1 Overview

This article will provide an in-depth introduction to the PWM (Pulse-Width Modulation) driver framework of Linux, including its implementation principles, driver addition methods, and debugging methods to help developers better understand and use this function.

The example Linux kernel version shown in this article is 6.2.8.

2. Principle

PWM technology, as a commonly used modulation technology, can change the duty cycle of the effective signal by adjusting the high-level time width of the periodic waveform, thereby achieving power supply control for the device. Common PWM application areas include screen backlight brightness adjustment, motor speed control, and fan speed control. The Linux kernel supports the PWM driver framework and provides the PWM driver framework core code and sysfs interface code by abstracting the structure data types of the PWM controller and PWM signals. Developers can use this driver framework to easily add their own specific PWM controller drivers and use the sysfs interface for functional debugging.

Linux PWM driver

Driver developers can design a dedicated PWM controller structure as needed, using the struct pwm_chip structure as a member variable. The following is an example, in the ./drivers/pwm/pwm-ab8500.c driver definition.

Linux PWM driver

(2) struct pwm_ops structure, including the operation function of the PWM controller. The two basic functions that should be implemented by driver developers are the apply function and the get_state function; the apply function is used to configure the PWM controller, including configuring the enable state, period, duty cycle, polarity, etc. of the PWM signal; the get_state function is used Obtain the initial status of the specified PWM channel signal when registering the PWM controller, including enable status, period, duty cycle, polarity, etc.

Linux PWM driver

(3) struct pwm_device structure, representing the PWM signal output by the PWM controller.

Linux PWM driver

3.3 Driver Framework Core Function

(1) pwmchip_add function. Used to register a new PWM controller device. Defined in ./drivers/pwm/core.c.

Linux PWM driver

(2) pwmchip_remove function. Used to remove a PWM controller device. Defined in ./drivers/pwm/core.c.

Linux PWM driver

3.4 Driver typical implementation method

(1) Summary

The PWM driver source file is located in the ./drivers/pwm path. The driver developer needs to add the corresponding source file. The source file design can refer to the driver code of other manufacturers. Referring to the naming style of the original code, you can name the newly added driver source file pwm-xx.c, name the probe and remove functions as xx_pwm_probe and xx_pwm_remove respectively, and define the PWM controller structure as struct xx_pwm_chip. The files in the ./drivers/pwm path are as follows.

Linux PWM driver

(2) apply function and get_state function definition

According to the PWM controller manual, the apply function and get_state function are defined by the driver developer.

(3)xx_pwm_probe function definition

The implementation method of the xx_pwm_probe function is: first initialize the PWM controller structure struct xx_pwm_chip variable, and then call the PWM driver framework core function pwmchip_add to register a new PWM controller device.

(4)xx_pwm_remove function definition

xx_pwm_remove function is implemented by calling the PWM driver framework core function pwmchip_remove to remove a PWM controller device.

4. Driver addition method

4.1 Add driver source file

Follow the method described in Section 3.4, write the driver source file pwm-xx.c, and add it to the ./drivers/pwm path.

4.2 Add compilation support

(1) Modify the Kconfig file under the ./drivers/pwm path and add the added PWM driver configuration options.

(2) Modify the Makefile file in the ./drivers/pwm path and add the compilation option of pwm-xx.c.

(3) In the memuconfig interface, enable the added PWM driver. The configuration interface is as follows.

Linux PWM driver

4.3 Add PWM controller device tree node

Add the PWM controller device tree node in the device tree. The basic properties of this node include compatibility, registers and number of #pwm-cells. Add interrupts, clocks, resets and other properties as needed.

PWM controller device tree design method can refer to ./Documentation/devicetree/bindings/pwm.

The following is an example of a PWM controller device tree node. The reference documents are as follows:

./Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.yaml.

Linux PWM driver

5.Debugging method

Use the sysfs interface to perform functional debugging of the PWM driver. Examples of the main debugging commands are as follows.

(1) View PWM controller node

ls /sys/class/pwm/pwmchip0

(2) Open the specified PWM channel signal

echo n > /sys/class/pwm/pwmchip0/export

//n is the channel number

(3)Set the PWM signal period

echo pvalue > /sys/class/pwm/pwmchip0/pwm0/period

//pvalue is the period value

(4)Set the PWM signal duty cycle

echo dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

//dvalue is the effective level width value

(5) Enable a certain PWM channel signal

echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

(6) Disable a certain PWM channel signal

echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

The above is the detailed content of Linux PWM driver. For more information, please follow other related articles on the PHP Chinese website!

source:lxlinux.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template