在高通平台遇到的一個問題:
一個gpio 63, 在 dts 中配置了,在驅動中能讀到這個 gpio , 然后 gpio_request, gpio_direction_output, 都檢查返回值,沒有報錯,但是 通過
gpio_get_value 得到的值就是不生效。
首先 檢查函數的返回值, 比如 gpio_request,可能這是只能表示 這個 gpio 被其他模塊占用,功能還是gpio, 設置output 應該可以生效。
在 dts 中搜索 tlmm 63, 確實也沒有其他模塊占用。
然后,應該是 pinmux 配置不對, 找到 msm8998-pinctrl.dtsi,搜索 gpio63, 配置不正確,修改為 gpio 配置后 ok。
結論: 設置gpio 需要先配置 pinmux, 再 檢查 有沒有被其它模塊占用, 然后在 代碼中 添加 該 gpio 的操作函數。另外,不同的平台設置
有可能不一樣,我看 rk 平台的文檔,里面說明 通過 gpio_request 這個函數設置首先會把 pinmux 配置為gpio,當時在 rk 平台用過
幾個 gpio ,確實沒有注意pinmux 的配置,就生效了,需要看 gpio_request 的函數的實現。