高通LCD背光控制軟體簡析

2021-07-28 03:56:42 字數 2192 閱讀 1323

背光控制驅動分析

1,wled backlight

在driver/leds/目錄下存放著系統背光以及led燈的驅動程式,通常需要在驅動程式中構造好struct led_classdev結構體,用來描述當前的led裝置

structled_classdev ;

name: 用來表述裝置的名稱,在註冊到ledclass上之後將在sys/leds/目錄下建立乙個class

其中還需要注意的是設定背光brightness_set的實現必須是不能睡眠的,通常使用乙個工作佇列,在工作佇列中實現設定的動作。

default_trigger是乙個字串,用來匹配由鍊錶中哪個節點的ledclass_dev作為觸發控制背光,實際是在鍊錶中新增乙個node,trigger_event的時候,根據給定的name與default匹配使用那乙個節點的ledclass device作為觸發。

以我們專案中的leds-qpnp驅動來分析,在probe中構造ledclass_dev結構體

led->cdev.brightness_set    = qpnp_led_set;    //設定背光

led->cdev.brightness_get    = qpnp_led_get;    //獲取背光

。。。led->cdev.name= 「wled:backlight」;

最後使用led_classdev_register(&spmi->dev, &led->cdev);註冊到ledclass驅動上去。

static voidqpnp_led_set(struct led_classdev *led_cdev, enum led_brightness value)

實際上由__qpnp_led_work()函式去設定背光。

2,lcd backlight

lcdbacklight是android的背光控制介面,它是乙個通用的驅動,最終會呼叫到wled的背光控制驅動設定背光。

mdss_fb.c中通過led_classdev_register註冊乙個led classdev,同樣的先需要構造乙個ledclass dev結構體,與wled不同的是它的backlight level是0~255,而wled則由panel決定。

staticstruct led_classdev backlight_led = ;

那麼顯然續作乙個資料數量的轉換。比如我們專案中wled的背光是0~4095,因此需要在**中轉換。在probe同樣需要註冊ledclass device。**如下:

if (!lcd_backlight_registered)    

那麼,使用者層設定背光lcd_backlight是怎麼呼叫到wled backlight驅動中去的呢?首先背光level數量級不同,需要做轉換,將android的backlevel轉換成背光驅動需要的backlevel。通過如下的巨集實現:

#definemdss_bright_to_bl(out, v, bl_max, max_bright) do while (0)

從軟體框圖的執行流程來看,最終backlevel是從pdata->set_backlight(pdata, temp);這條語句設定下去的。

到了這裡,需要提到上面的default_trigger,它是一座橋梁,過渡到wled驅動。

define_led_trigger(bl_led_trigger);實際上這個巨集的作用定義了乙個struct led_trigger型別的指標變數bl_led_trigger.然後在初始化的時候將defualt trigger對應的字串註冊到trigger驅動中去,實際上就是新增到對應的鍊錶中。並返回初始化好的bl_led_trigger

led_trigger_register_******("bkl-trigger",  & bl_led_trigger);

在drivers/video/msm/mdss/mdss_dsi_panel.c中初始化時候將mdss_dsi_panel_bl_ctrl掛在函式指標上面:

ctrl_pdata->panel_data.set_backlight= mdss_dsi_panel_bl_ctrl;在這個函式中遍歷鍊錶找到對應的ledcass dev節點,led_set_brightness去設定背光。

staticinline void led_set_brightness(struct led_classdev *led_cdev,  enum led_brightness value)                                      

LCD背光控制晶元

pwm訊號可通過調整占空比來調節輸出電壓,可以使用pwm來控制lcd的背光。但cpu的pwm引腳驅動能力太弱,常外接乙個背光晶元。rt9293就是這樣的乙個恆流公升壓轉換器。iled vref rset vfb duty 300mv duty是en輸入訊號的占空比,300mv是內部參考電壓 pwm占...

高通LCD之顯示幀資料簡析

1 顯示幀資料 mdp和su ceflinger之間通過hal層來鏈結 hwcomposer便是兩者之間的橋梁。hwcomposer顯示前,要開啟framebuffer裝置 hardware qcom display libhwcomposer hwc utils.cpp檔案 static int ...

高通平台LCD開發

lcd除錯主要有三個任務 1.供電 2.背光 3.lcd驅動 vdd 2.8v 給ic內部供電 vddio 1.8v 給gpio供電 mdss dsi0 qcom,mdss dsi mdss dsi0 qcom,mdss dsi ctrl0 1a94000 主要有兩個gpio需要配置,reset和t...