/*
首先是在dtsi中定義一些和設備(觸屏)相關的重要變量。
定義這些個變量的目的就是在不同項目中,去讀取與該項目對應
的dtsi文件,對於觸屏,提高了代碼的兼容性,使內核代碼更清晰明瞭。
*/
/*首先看一下dtsi文件裏寫了什麼。*/
/* ty-focaltech-ft6206.dtsi */
&soc {
i2c@78b9000 { /* BLSP1 QUP5 */
focaltech@38 {
};
};
gen-vkeys {
compatible = "qcom,gen-vkeys";
label = "ft5x06_ts";
qcom,disp-maxx = <480>;
qcom,disp-maxy = <854>;
qcom,panel-maxx = <480>;
qcom,panel-maxy = <946>;
qcom,key-codes = <158 172 139>;
qcom,y-offset = <0>;
qcom,key-menu-coords = <120 900 30 30>;
qcom,key-home-coords = <240 900 30 30>;
qcom,key-back-coords = <360 900 30 30>;
qcom,key-search-coords = <0 0 0 0>;
};
};
處於方便的目的吧,通過of_find_property()函數,獲取dtsi文件中的內容。
dtsi文件中,等號左邊是爲了便於搜索,右邊是真正的數值。
瞭解了框架,下面在具體看一下of_find_property()函數執行的過程。
讀取dtsi中數據前,我們先建立一個數組:
struct vkeys_platform_data {
const char *name;
int disp_maxx;
int disp_maxy;
int panel_maxx;
int panel_maxy;
int *keycodes;
int num_keys;
int y_offset;
int y_center;
int *x_center;
int v_width;
int v_height;
};
1. 讀取字符串
例如:label = "ft5x06_ts";
char *name;
rc = of_property_read_string(np, "label", &pdata->name);
if (rc) {
dev_err(dev, "Failed to read label\n");
return -EINVAL;
}
snprintf(name, MAX_BUF_SIZE,
"virtualkeys.%s", pdata->name);
name指針就指向virtualkeys.ft5x06_ts了!
這裏面主要利用of_property_read_string()這個API!
2. 讀取單個數值
例如:qcom,y-offset = <0>;
rc = of_property_read_u32(np, "qcom,y-offset", &val);
if (!rc)
pdata->y_offset = val;
else if (rc != -EINVAL) {
dev_err(dev, "Failed to read y position offset\n");
return rc;
}
//這個也很簡單
3. 讀取數組:
prop = of_find_property(np, "qcom,key-codes", NULL);
if (prop) {
pdata->num_keys = prop->length / sizeof(u32);
pdata->keycodes = devm_kzalloc(dev,
sizeof(u32) * pdata->num_keys, GFP_KERNEL);
if (!pdata->keycodes)
return -ENOMEM;
rc = of_property_read_u32_array(np, "qcom,key-codes",
pdata->keycodes, pdata->num_keys);
if (rc) {
dev_err(dev, "Failed to read key codes\n");
return -EINVAL;
}
}
這一步主要集中在rc = of_property_read_u32_array(np, "qcom,key-codes",
pdata->keycodes, pdata->num_keys);
結束後,數據存儲在指針pdata->keycodes中, pdata->num_keys爲數組中數據個數!
---------------------------------------------------------------------------
OK!
device tree在觸屏中的實際應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.