日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

imx6背光驱动调试

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 imx6背光驱动调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.內核配置pwm背光驅動
make menuconfig:
Device Driver --->
Graphics support --->
[*] Backlight & LCD device support --->
<*> Lowlevel Backlight controls
<*> Generic PWM based Backlight Driver

2.背光sys文件節點/sys/class/backlight/的由來
在drivers/video/backlight/backlight.c中backlight_class_init()函數中class_create(THIS_MODULE, "backlight")中創建的, 那么剩下的/sys/class/backlight/backlight.27/brightness又是怎么來的呢?我們可以看到在drivers/video/backlight/pwm_bl.c中有backlight_device_register(dev_name(&pdev->dev), &pdev->dev, pb, &pwm_backlight_ops, &props), 這個注冊函數接口在/sys/class/backlight/下又創建了一個設備接口, 名字是通過dev_name(&pdev->dev)實參傳遞的. 那么dev_name(&pdev->dev)是怎樣的呢?
static inline const char *dev_name(const struct device *dev)
{
/* Use the init name until the kobject becomes available */
if (dev->init_name)
return dev->init_name;

return kobject_name(&dev->kobj);
}
由此可知, 如果dev的init_name成員不為空, 則dev_name就是dev的init_name成員值, 否則dev_name就是kobject_name(&dev->kobj), 官方驅動中dev的init_name為空, 所有dev_name為kobject_name(&dev->kobj), 這個會是隨機值, 會產生/sys/class/backlight/backlight.27/...等目錄, 或產生/sys/class/backlight/backlight.16/...等目錄, 現在項目中我需要固定這個目錄為/sys/class/backlight/hud-lcd-backlight/..., 所以我可以給dev的init_name賦值, 這樣就可以產生我們想要的目錄了, 在drivers/video/backlight/pwm_bl.c文件probe函數中backlight_device_register函數前增加dev_set_name(&pdev->dev, "%s", "hud-lcd-backlight");即可實現

3.背光驅動源碼分析driver/video/backlight/pwm_bl.c
3.1通過compitable = "pwm-backlight";匹配到設備樹上arch/arm/boot/dts/imx6dl-hud.dtsi的pwm-backlight設備
3.2進入到探測函數pwm_backlight_probe, 由于backlight設備是采用設備樹, 所以data = dev_get_platdata(&pdev->dev), data = NULL, 所以會進入到pwm_backlight_parse_dt函數
3.3進入到pwm_backlight_parse_dt(&pdev->dev, &defdata)函數,解析設備樹的設備值, 其實就是把設備樹的值(pdev->dev)解析賦值給defdata, 其中prop = of_find_property(node, "brightness-levels", &length);
該函數讀取設備數結點中"brightness-levels"屬性,并把讀取的值放到length中去,這里length = 32,因為每一個bright-levels的元素(0 4 8 16 32 64 128 255)占4個字節, 共8個元素(0 4 8 16 32 64 128 255)所有共占32字節, 所以length = 32
3.4data = &defdata把解析好的數據defdata賦值給data
3.5data->init = NULL
3.6devm_regulator_get(&pdev->dev, "power"); 由于沒有power節點, 所以會返回錯誤(backlight.27 supply power not found, using dummy regulator)
3.7devm_pwm_get()獲取pwm
3.8注意這里backlight_device_register(dev_name(&dev->dev), &pdev->dev, pb, &pwm_backlight_ops, &props);通過這個注冊函數接口就創建了/sys/class/backlight/目錄下相應的brightness, max_brightness等屬性(通過backlight_device_register()函數中memcpy()實現)

4.背光驅動IC(U8 SC44ATETRT)與imx6接口控制有3個信號
LCD_BL_EN:背光驅動IC使能
LCD_BL_FFLAG:背光驅動IC電源失效檢測信號, 正常是低電平
LCD_BL_PWM:背光驅動IC pwm控制
4.1LCD_BL_EN
對應原理圖中的NANDF_CS2 pad
需要配置成gpio模式 對應gpio為GPIO6_IO15(MX6QDL_PAD_NANDF_CS2__GPIO6_IO15)
4.2LCD_BL_FFLAG
對應原理圖中的NANDF_CLE pad
需要配置成gpio模式 對應gpio為GPIO6_IO07(MX6QDL_PAD_NANDF_CLE__GPIO6_IO07)
4.3LCD_BL_PWM
對應原理圖中的SD1_DAT2 pad
需要配置成pwm模式 對應的是pwm2輸出(MX6QDL_PAD_SD1_DAT2__PWM2_OUT),在arch/arm/boot/dts/imx6dl-hud.dtsi設備樹要配置
可以在該文件搜索pwm,所有配置如pwm所示

5.SYS_12V_EN
對應原理圖U4電源管理ic的使能腳 對應SD1_DAT0 pad
需要配置成gpio模式 對應gpio為GPIO1_IO16
這個使能后才能給背光驅動IC供電

6.imx6qdl上的背光驅動設備樹分析
imx6q設備樹上的pwm背光驅動描述如下,各節點的具體含義可參考http://blog.csdn.net/mike8825/article/details/51656400
pwm-backlight {
compatible = "pwm-backlight";
pwms = <&pwm2 0 50000>;
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <7>;
status = "okay";
};


&pwm2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2>;
status = "okay";
};


pinctrl_pwm2: pwm2grp {
fsl,pins = <
MX6QDL_PAD_SD1_DAT2__PWM2_OUT 0x1b0b1
>;
};

?

參考http://blog.csdn.net/wilsonboliu/article/details/14170135

轉載于:https://www.cnblogs.com/fah936861121/p/7085977.html

總結

以上是生活随笔為你收集整理的imx6背光驱动调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。