IMX6ULL 设备树修改背光控制PWM

修改imx6ull的lcd屏幕背光控制的pwm引脚

一、找到GPIO及其使用的PWM

  首先查看硬件电路上的屏幕背光控制所使用的GPIO,找到其连接的GPIO后,在内核imx6ullGPIO宏定义的头文件“arch\arm\boot\dts\imx6ul-pinfunc.h”中找到GPIO使用的PWM。 原理图如下图所示:

attachments-2020-03-U7VZ4zuC5e833d6becb7b.png

查看原理图,背光控制“BL_EN_PWM”连接在“CSI_HSYNC”引脚上。在“imx6ul-pinfunc.h”文件找到“CSI_HSYNC”。 CSI_HSYNC复用功能如下所示:

#define MX6UL_PAD_CSI_HSYNC__CSI_HSYNC                            0x01E0 0x046C 0x0524 0x0 0x0
#define MX6UL_PAD_CSI_HSYNC__USDHC2_CMD                           0x01E0 0x046C 0x0678 0x1 0x0
#define MX6UL_PAD_CSI_HSYNC__SIM1_PORT1_PD                        0x01E0 0x046C 0x0000 0x2 0x0
#define MX6UL_PAD_CSI_HSYNC__I2C2_SCL                             0x01E0 0x046C 0x05AC 0x3 0x0
#define MX6UL_PAD_CSI_HSYNC__EIM_LBA_B                            0x01E0 0x046C 0x0000 0x4 0x0
#define MX6UL_PAD_CSI_HSYNC__GPIO4_IO20                           0x01E0 0x046C 0x0000 0x5 0x0
#define MX6UL_PAD_CSI_HSYNC__PWM8_OUT                             0x01E0 0x046C 0x0000 0x6 0x0
#define MX6UL_PAD_CSI_HSYNC__UART6_DCE_CTS                        0x01E0 0x046C 0x0000 0x8 0x0
#define MX6UL_PAD_CSI_HSYNC__UART6_DTE_RTS                        0x01E0 0x046C 0x0648 0x8 0x1

  查看文件内容,此处需要将CSI_HSYNC复用为PWM功能,所以需要使用宏定义“MX6UL_PAD_CSI_HSYNC__PWM8_OUT”。

二、在设备树文件dts中添加背光GPIO

需要修改的文件:"arch\arm\boot\dts\imx6ull-14x14-evk.dts" "arch\arm\boot\dts\imx6ull.dtsi"

  dts文件中,默认有一个backlight节点,使用的是PWM1 GPIO1_IO08,而现在需要修改为pwm8,所以需要添加pwm8所使用的IO初始化,和pwm8的使能,添加CSI_HSYNC的时候,要注意别的地方是否有用到CSI_HSYNC引脚作为其它功能,避免冲突。
修改内容如下:

/*iomuxc节点下,增加pinctrl_pwm8,初始化GPIO*/
pinctrl_pwm8: pwm8grp {
	fsl,pins = <
		MX6UL_PAD_CSI_HSYNC__PWM8_OUT   0x110b0
	>;
};
		
/*引用pwm8并设置使用的GPIO组和使能pwm8*/
&pwm8 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm8>;
	status = "okay";
};

/*修改backlight节点,设置使用pwm8*/
backlight {
	compatible = "pwm-backlight";
	pwms = <&pwm8 0 5000000>;
	brightness-levels = <0 4 8 16 32 64 128 255>;
	default-brightness-level = <6>;
	status = "okay";
};

  修改以后dts文件之后,还需要在imx6ull.dtsi文件中将PWM8使用的时钟修改为PWM8的时钟“IMX6UL_CLK_PWM8”。
修改内容如下所示:

pwm8: pwm@020fc000 {
	compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
	reg = <0x020fc000 0x4000>;
	interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&clks IMX6UL_CLK_PWM8>,
		 <&clks IMX6UL_CLK_PWM8>;
	clock-names = "ipg", "per";
	#pwm-cells = <2>;
};

三、背光测试

  dts中添加的backlight设备节点的驱动位于“drivers\video\backlight\pwm_bl.c”文件中,此驱动文件已经实现了背光控制的驱动。修改完dts后,下载到开发板中测试即可。
测试方法:

#设置背光亮度为3挡,此处echo的值对应的真实值在dtsbrightness-levels属性中定义
echo 2 > /sys/class/backlight/backlight/brightness

参考文档

1、imx6q上的背光驱动分析
2、MX6UL如何修改PWM输出

  • 发表于 2020-03-31 20:55
  • 阅读 ( 235 )
  • 分类:nxp imx6

0 条评论

请先 登录 后评论
FU
FU

6 篇文章

作家榜 »

  1. ronnie 11 文章
  2. FU 6 文章
  3. toca 4 文章
  4. 大飞 3 文章
  5. Vivek 3 文章
  6. BBelephant 2 文章
  7. jack-fang 2 文章
  8. Bin 1 文章