背光支援¶
背光核心支援實現背光碟機動程式。
背光碟機動程式使用 devm_backlight_device_register() 註冊一個驅動程式。必須指定背光碟機動程式的屬性,例如型別和 max_brightness。當核心檢測到亮度或電源狀態等方面的變化時,會呼叫 update_status() 操作。背光碟機動程式應實現此操作並使用它來調整背光。
背光核心提供多個 sysfs 屬性
- brightness R/W, set the requested brightness level
- actual_brightness RO, the brightness level used by the HW
- max_brightness RO, the maximum brightness level supported
有關完整列表,請參閱 ABI 檔案 stable/sysfs-class-backlight。
可以使用 sysfs 介面調整背光,並且背光碟機動程式也可能支援使用熱鍵或一些其他平臺或韌體特定的方式調整背光。
如果硬體不支援可以在亮度中指定的所有級別,則驅動程式必須實現 get_brightness() 操作,從而透過 actual_brightness 屬性向使用者空間提供對實際級別的訪問。
當背光更改時,這會使用連線到 actual_brightness 屬性的 uevent 報告給使用者空間。當透過平臺特定方式設定亮度時,例如用於調整背光的熱鍵,驅動程式必須使用 backlight_force_update() 通知背光核心亮度已更改。
顯示驅動程式可以使用 backlight_notify_blank() 和 backlight_notify_blank_all() 控制背光裝置的狀態。如果這導致背光狀態發生更改,則函式會呼叫 update_status() 操作。
-
enum backlight_update_reason¶
用於更新背光的方法
常量
BACKLIGHT_UPDATE_HOTKEY背光已使用熱鍵更新。
BACKLIGHT_UPDATE_SYSFS背光已使用 sysfs 更新。
描述
驅動程式在呼叫 backlight_force_update() 時指示用於更新背光的方法(原因)。
-
enum backlight_type¶
背光控制的型別
常量
BACKLIGHT_RAW背光使用硬體暫存器控制。
BACKLIGHT_PLATFORM背光使用平臺特定的介面控制。
BACKLIGHT_FIRMWARE背光使用標準韌體介面控制。
BACKLIGHT_TYPE_MAX條目數。
描述
用於控制背光的介面型別。
-
struct backlight_ops¶
背光操作
定義:
struct backlight_ops {
unsigned int options;
#define BL_CORE_SUSPENDRESUME (1 << 0);
int (*update_status)(struct backlight_device *);
int (*get_brightness)(struct backlight_device *);
bool (*controls_device)(struct backlight_device *bd, struct device *display_dev);
};
成員
options配置如何從核心呼叫操作。
options 引數用於調整核心的行為。設定 BL_CORE_SUSPENDRESUME 以在暫停和恢復時呼叫 update_status() 操作。
update_status當屬性發生更改時呼叫的操作。
通知背光碟機動程式某些屬性已更改。update_status 操作受 update_lock 的保護。
背光碟機動程式應使用
backlight_is_blank()檢查顯示是否已消隱並相應地設定亮度。當任何屬性發生更改時,都會呼叫 update_status()。返回值
成功時為 0,如果發生任何故障,則為負錯誤程式碼。
get_brightness返回當前背光亮度。
驅動程式可以將此實現為從硬體的回讀。此操作是可選的,如果不存在,則使用當前亮度屬性值。
返回值
亮度值為 0 或正數。失敗時,將返回負錯誤程式碼。
controls_device檢查顯示裝置
檢查背光是否控制給定的顯示裝置。此操作是可選的,如果未實現,則假定顯示始終是由背光控制的。
返回值
如果 display_dev 為 NULL 或 display_dev 與背光控制的裝置匹配,則返回 true。否則,返回 false。
描述
在註冊背光裝置時指定背光操作。
-
struct backlight_properties¶
背光屬性
定義:
struct backlight_properties {
int brightness;
int max_brightness;
int power;
#define BACKLIGHT_POWER_ON (0);
#define BACKLIGHT_POWER_OFF (4);
#define BACKLIGHT_POWER_REDUCED (1) ;
enum backlight_type type;
unsigned int state;
#define BL_CORE_SUSPENDED (1 << 0) ;
#define BL_CORE_FBBLANK (1 << 1) ;
enum backlight_scale scale;
};
成員
brightness使用者請求的當前亮度。
當透過 sysfs 屬性設定亮度時,背光核心確保範圍是(0 到 max_brightness):/sys/class/backlight/<backlight>/brightness。
可以在傳遞給
devm_backlight_device_register()的 backlight_properties 中設定此值,以設定預設亮度值。max_brightness最大亮度值。
必須在傳遞給
devm_backlight_device_register()的 backlight_properties 中設定此值,並且驅動程式在註冊後不得修改此值。power當前電源模式。
使用者空間可以使用 sysfs 屬性配置電源模式:/sys/class/backlight/<backlight>/bl_power。更新 power 屬性時,會呼叫 update_status()。
可能的值為:(0:完全開啟,4:完全關閉),請參閱 BACKLIGHT_POWER 常量。
啟用背光裝置時,power 設定為 BACKLIGHT_POWER_ON。停用背光裝置時,power 設定為 BACKLIGHT_POWER_OFF。
type支援的背光型別。
背光型別允許使用者空間根據背光型別做出適當的策略決策。
必須在傳遞給
devm_backlight_device_register()的 backlight_properties 中設定此值。state背光核心的狀態。
state 是一個位掩碼。當預期顯示消隱時,設定 BL_CORE_FBBLANK。當驅動程式暫停時,設定 BL_CORE_SUSPENDED。
背光碟機動程式應在其 update_status() 操作中使用
backlight_is_blank(),而不是讀取 state 屬性。狀態由核心維護,驅動程式不得修改它。
scale亮度刻度的型別。
描述
此結構定義背光的所有屬性。
-
struct backlight_device¶
背光裝置資料
定義:
struct backlight_device {
struct backlight_properties props;
struct mutex update_lock;
struct mutex ops_lock;
const struct backlight_ops *ops;
struct list_head entry;
struct device dev;
int use_count;
};
成員
props背光屬性
update_lock呼叫 update_status() 操作時使用的鎖。
update_lock 是一個內部背光鎖,它序列化對 update_status() 操作的訪問。背光核心在呼叫 update_status() 操作時持有 update_lock。背光碟機動程式不得使用 update_lock。
ops_lock在與 backlight_ops 相關的所有內容周圍使用的鎖。
ops_lock 是一個內部背光鎖,用於保護 ops 指標,並且在所有對 ops 的訪問以及呼叫操作時使用。背光碟機動程式不得使用 ops_lock。
ops指向背光操作的指標。
如果 ops 為 NULL,則註冊此裝置的驅動程式已解除安裝,並且如果 class_get_devdata() 指向該驅動程式主體中的某些內容,則它也無效。
entry所有已註冊背光裝置的列表條目
dev父裝置。
use_count未消隱顯示的數目。
描述
此結構包含背光裝置所需的所有資料。
-
int backlight_update_status(struct backlight_device *bd)¶
強制更新背光裝置狀態
引數
struct backlight_device *bd背光裝置
-
int backlight_enable(struct backlight_device *bd)¶
啟用背光
引數
struct backlight_device *bd要啟用的背光裝置
-
int backlight_disable(struct backlight_device *bd)¶
停用背光
引數
struct backlight_device *bd要停用的背光裝置
-
bool backlight_is_blank(const struct backlight_device *bd)¶
如果預期顯示消隱,則返回 true
引數
const struct backlight_device *bd背光裝置
描述
如果以下任何一個為 true,則預期顯示消隱
1) if power in not UNBLANK
2) if state indicate BLANK or SUSPENDED
如果預期顯示消隱,則返回 true,否則返回 false。
-
int backlight_get_brightness(const struct backlight_device *bd)¶
返回當前亮度值
引數
const struct backlight_device *bd背光裝置
描述
返回當前亮度值,同時考慮當前狀態。如果 backlight_is_blank() 返回 true,則返回 0 作為亮度,否則返回當前亮度屬性值。
背光碟機動程式應在其 update_status() 操作中使用此函式來獲取亮度值。
-
void *bl_get_data(struct backlight_device *bl_dev)¶
訪問 devdata
引數
struct backlight_device *bl_dev指向背光裝置的指標
描述
註冊背光裝置時,驅動程式可以提供 void * devdata。bl_get_data() 返回指向 devdata 的指標。
指向註冊背光裝置時儲存的 devdata 的指標。
-
void backlight_force_update(struct backlight_device *bd, enum backlight_update_reason reason)¶
告知背光子系統硬體狀態已更改
引數
struct backlight_device *bd要更新的背光裝置
enum backlight_update_reason reason更新原因
描述
更新背光的內部狀態以響應硬體事件,並生成 uevent 以通知使用者空間。例如,當使用熱鍵更改背光時,背光碟機動程式應呼叫 backlight_force_update()。更新後的亮度使用 get_brightness() 讀取,並且亮度值使用 uevent 報告。
-
struct backlight_device *backlight_device_get_by_name(const char *name)¶
按名稱獲取背光裝置
引數
const char *name裝置名稱
描述
此函式按名稱查詢背光裝置。它獲取對背光裝置的引用,並且呼叫方有責任透過呼叫 put_device() 來釋放引用。
返回值
如果找到,則返回指向背光裝置的指標,否則返回 NULL。
-
struct backlight_device *devm_backlight_device_register(struct device *dev, const char *name, struct device *parent, void *devdata, const struct backlight_ops *ops, const struct backlight_properties *props)¶
註冊新的背光裝置
引數
struct device *dev要註冊的裝置
const char *name裝置的名稱
struct device *parent指向父裝置的指標(通常與 dev 相同)
void *devdata要儲存的用於私有驅動程式的可選指標
const struct backlight_ops *ops背光操作結構
const struct backlight_properties *props背光屬性
描述
建立並註冊新的背光裝置。註冊背光裝置時,必須在 props 引數中指定配置。請參閱 backlight_properties 的說明。
成功時返回 struct backlight,出錯時返回 ERR_PTR
-
void devm_backlight_device_unregister(struct device *dev, struct backlight_device *bd)¶
登出背光裝置
引數
struct device *dev要登出的裝置
struct backlight_device *bd要登出的背光裝置
描述
釋放使用 devm_backlight_device_register() 分配的背光。通常,不需要呼叫此函式,資源管理程式碼將確保釋放資源。
-
struct backlight_device *of_find_backlight_by_node(struct device_node *node)¶
按裝置樹節點查詢背光裝置
引數
struct device_node *node背光裝置的裝置樹節點
描述
返回指向與給定 DT 節點對應的背光裝置的指標,如果不存在此類背光裝置,或者如果尚未探測該裝置,則返回 NULL。
此函式獲取對背光裝置的引用,並且呼叫方有責任透過在背光裝置的 .dev 欄位上呼叫 put_device() 來釋放引用。
-
struct backlight_device *devm_of_find_backlight(struct device *dev)¶
查詢裝置的背光
引數
struct device *dev裝置
描述
此函式查詢連線到 dev 的 DT 節點上的名為“backlight”的屬性,並查詢背光裝置。查詢是裝置管理的,因此對背光裝置的引用在驅動程式分離時會自動釋放。
如果找到,則返回指向背光裝置的指標。如果設定了 DT 屬性,但未找到任何背光裝置,則返回錯誤指標 -EPROBE_DEFER。如果不存在背光屬性,則返回 NULL。