1. 程式人生 > >MTK6737平臺匹配裝置節點的方法

MTK6737平臺匹配裝置節點的方法

在DeviceTree中需要匹配裝置節點,才可以獲取某一個節點的引數資訊。

/**
 * of_find_compatible_node - 通過compatible屬性查詢指定節點
 * @from - 指向開始路徑的節點,如果為NULL,則從根節點開始
 * @type - device_type裝置型別,可以為NULL
 * @compat - 指向節點的compatible屬性的值(字串)的首地址
 * 成功:得到節點的首地址;失敗:NULL
 */
struct device_node *of_find_compatible_node(struct device_node *from,const char *type, const char *compat);
/* 例如:由根裝置節點開始檢索一個名為"mediatek,ACCEL_GYRO_INT1-eint"裝置節點*/

irq_node = of_find_compatible_node(NULL, NULL, "mediatek,ACCEL_GYRO_INT1-eint");

還有一種方法:

/**
 * of_find_matching_node - 通過compatible屬性查詢指定節點
 * @from - 指向開始路徑的節點,如果為NULL,則從根節點開始
 * @matches - 指向裝置ID表,注意ID表必須以NULL結束
 * 範例:  const struct of_device_id mydemo_of_match[] = {
                { .compatible = "mediatek,mt6735-touch", },
                {}
            };      
 * 成功:得到節點的首地址;失敗:NULL
 */
struct device_node *of_find_matching_node(struct device_node *from,const struct of_device_id *matches);

相對於上一個函式介面,這個便於使用of_device_id,因為其實匹配裝置的時候已經配置of_device_id了。
還有兩種方法是按路徑和節點名稱去檢索檢點的函式介面
/**
 * of_find_node_by_path - 通過路徑查詢指定節點
 * @path - 帶全路徑的節點名,也可以是節點的別名
 * 成功:得到節點的首地址;失敗:NULL
 */
struct device_node *of_find_node_by_path(const char *path);


/**
 * of_find_node_by_name - 通過節點名查詢指定節點
 * @from - 開始查詢節點,如果為NULL,則從根節點開始
 * @name- 節點名
 *  成功:得到節點的首地址;失敗:NULL
 */
struct device_node *of_find_node_by_name(struct device_node *from,const char *name);