[RK3399][Android7.1] 獲取gpio函式devm_gpiod_get_optional()
阿新 • • 發佈:2018-12-31
latform: RK3399
OS: Android 7.1
Board: Firefly-RK3399
呼叫流程:
在看顯示模組的程式碼時看到一個函式devm_gpiod_get_optional(), 之前沒接觸過,它的呼叫如下:
devm_gpiod_get_optional ->
devm_gpiod_get_index_optional -> //index為0
devm_gpiod_get_index ->
gpiod_get_index
可以看到devm_gpiod_get_optional只是對gpiod_get_index的包裝而已,並且index為0。index引數後面會提。
函式引數:
struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
const char *con_id,
unsigned int idx,
enum gpiod_flags flags);
- 1
- 2
- 3
- 4
重點關注第二個和第三個引數。
gpiod_get_index()到底用來幹什麼?
答:gpiod_get_index()本質上和gpio_request()是一個功能,是申請gpio的,只是它是從device tree去查詢,
因此看到第二個引數”con_id”是字串型別,也就是gpio的名字。
例如在顯示驅動看到的去查詢名字為”enable”的gpio
panel-simple.c:
panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", 0);
- 1
在使用mipi螢幕的主dts就有enable pin的定義
rk3399-firefly-mipi.dts:
enable-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
- 1
那麼index又有什麼用呢?
核心文件有個例子,比如gpio如下定義:
led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH> , /* red */
<&gpio 16 GPIO_ACTIVE_HIGH>, /* green */
<&gpio 17 GPIO_ACTIVE_HIGH>; /* blue */
- 1
- 2
- 3
如果index是0,那麼對應的就是gpio 15; 如果index是1,那麼對應就是gpio 16,以此類推。