XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


PWM

目录

PWM

imx6ull有8路PWM输出

NXP定义结构体imx_chip, 下面的pwd_chip是内核自己的结构体,

对应的结构体是

static struct imx_pwm_data imx_pwm_data_v2 = {
	.config = imx_pwm_config_v2,
	.set_enable = imx_pwm_set_enable_v2,
};

imx_chip

struct imx_chip {
	struct clk	*clk_per;
	struct clk	*clk_ipg;

	void __iomem	*mmio_base;

	struct pwm_chip	chip;

	int (*config)(struct pwm_chip *chip,
		struct pwm_device *pwm, int duty_ns, int period_ns);
	void (*set_enable)(struct pwm_chip *chip, bool enable);
};

最终imx_chip->config = imx_pwm_config_v2, imx_chip->set_enable = imx_pwm_set_enable_v2

pwm_chip

struct pwm_chip {
	struct device		*dev;
	struct list_head	list;
	const struct pwm_ops	*ops;		//操作集, 需要驱动人员
	int			base;
	unsigned int		npwm;

	struct pwm_device	*pwms;

	struct pwm_device *	(*of_xlate)(struct pwm_chip *pc,
					    const struct of_phandle_args *args);
	unsigned int		of_pwm_n_cells;
	bool			can_sleep;
};

里面的ops包括了开启关闭, 切换频率等

初始化这个结构体之后, 使用pwnchip_add进行注册

 1	&pwm3 {
 2		pinctrl-names ="default";
 3		pinctrl-0=<&pinctrl_pwm3>;
 4		clocks =<&clks IMX6UL_CLK_PWM3>,
 5		<&clks IMX6UL_CLK_PWM3>;
 6		status ="okay";
 7	};

设备树

-> Device Drivers -> Pulse-Width Modulation (PWM) Support -> <*> i.MX PWM support

图形化界面

直接看linux内核里面关于backlight(背光)的绑定文档,路径为Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt