什麼樣的gpio才需要用can_sleep

由 gpio_set_value_cansleep(data->pdata->reset_gpio, 1);  引發了我對此函數的好奇心和求知念頭,因而引用下述簡單解釋:


對於有些掛載在I2C,SPI總線上的擴展GPIO,讀寫操作可能會導致睡眠,因此不能在中斷函數中

  使用。使用下面的函數以區別於正常的GPIO
  int gpio_get_value_cansleep(unsigned gpio);//讀GPIO
  void gpio_set_value_cansleep(unsigned gpio, int value);//寫GPIO
 
這句話的意思:如果soc本身(比如100個)gpio不夠用, 那麼就要另外接一個gpio controller, 上面再提供額外的50個gpio,這個controller連接到soc上是通過總線比如i2c總線連上去的。這個時候寫gpio值,就是通過i2c總線去寫新加的那個gpio controller的寄存器的值,所以有可能會有睡眠發生,所以要用can_sleep.

另:GPIO詳解請參考轉載文章:http://blog.chinaunix.net/uid-27717694-id-3701921.html

GPIO接口解析 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章