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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MSM8909平台 LED背光的控制

發布時間:2025/4/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MSM8909平台 LED背光的控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前齊師兄問我,是不是應該有一個文件記錄背光燈的亮度,我說理論上有,但是在哪里我真的還沒有見過。只知道在調LCD驅動的時候會調用一個背光控制的函數,傳進來一個亮度值就可以配置亮度了,至于這個函數是誰調用的,以及和上層是怎么聯系的,自己一直沒想過,最近系統的看了一下,特作此總結。

路徑:root/andriod/kernel/drivers/video/

在Mdss_dsi_panel.c文件里,有一個背光控制函數static void?mdss_dsi_panel_bl_ctrl(struct mdss_panel_data *pdata,u32 bl_level)

背光的亮度就是根據這個參數值bl_level進行調節的。

首先看看誰調用的這個函數:

在mdss_dsi_panel_init()函數里,有這么一句ctrl_pdata->panel_data.set_backlight?=mdss_dsi_panel_bl_ctrl;

然后看看panel_data.set_backlight是在哪里調用的。

用搜索功能排除萬難后發現,在Mdss_fb.c()文件里有函數

void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl){

…… ……;

pdata->set_backlight(pdata, temp);//其中pdata就是從mdss_dsi_panel.c那傳過來的結構體。

…… ……;

}

繼續找函數調用的地方:

static void mdss_fb_set_bl_brightness(struct led_classdev *led_cdev,?enum led_brightness value)
{
…… ……;
mdss_fb_set_backlight(mfd, bl_lvl);
…… ……;
}
繼續

static struct led_classdev backlight_led = {
.name ? ? ? ? ? = "lcd-backlight",
.brightness ? ? = MDSS_MAX_BL_BRIGHTNESS,
.brightness_set = mdss_fb_set_bl_brightness,
.max_brightness = MDSS_MAX_BL_BRIGHTNESS,
};

可以看到,這個mdss_fb_set_bl_brightness()函數又是某個結構體的回調函數。那么我們來看看這個結構體是在哪里定義,以及其中的britness_set函數是在哪里調用的。

繼續條件搜索,排除無關文件,可以定位到:

路徑:root/android/kernel/drivers/leds/Led-class.c

在這個文件里這樣一些關于設備文件的操作:

static ssize_t led_brightness_show(struct device *dev,struct device_attribute *attr, char *buf)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
return snprintf(buf, LED_BUFF_SIZE, "%u\n", led_cdev->brightness);
}


static ssize_t led_brightness_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t size)
{
struct led_classdev *led_cdev = dev_get_drvdata(dev);
……?……;
__led_set_brightness(led_cdev, state);
return size;
}
??

繼續看__led_set_brightness()函數的定義:

static inline void__led_set_brightness(struct led_classdev *led_cdev,enum led_brightness value)
{
if (value > led_cdev->max_brightness)
value = led_cdev->max_brightness;
led_cdev->brightness = value;
if (!(led_cdev->flags & LED_SUSPENDED))
led_cdev->brightness_set(led_cdev, value);
}

最后就是設備文件操作的調用了:

__ATTR(brightness, 0644,led_brightness_show, led_brightness_store)

至此,所有的謎團都解開了。

? ? ? 當上層應用修改亮度時(比如用手指化凍亮度調節的進度條),亮度的數值會存到一個名為“brightness”的文件里,并且這時候底層會調用led_brightness_store()函數把當前亮度值存到led_cdev->brightness變量里,且調用配置好的背光調節函數來修改背光。

? 當上層函數想要獲取當前背光時,就會調用led_brightness_show()函數,此時底層就會把當前驅動里的背光亮度值返回

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的MSM8909平台 LED背光的控制的全部內容,希望文章能夠幫你解決所遇到的問題。

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