Some GPIO controllers must be accessed using message based busses like I2C or SPI. Commands to read or write those GPIO values require waiting to get to the head of a queue to transmit a command and get its response. This requires sleeping, which can't be done from inside IRQ handlers.
一些GPIO控制器必须使用基于I2C或者SPI总线的消息机制来访问。发送读写这些GPIO值的命令需要等到获得队列的顶部去传输命令,然后得到GPIO的响应。这样需要去休眠,不能在中断处理中使用。
Platforms that support this type of GPIO distinguish them from other GPIOs by returning nonzero from this call (which requires a valid GPIO number, which should have been previously allocated with gpio_request):
平台通过返回一个非0值把这种类型的GPIO和其他的区别开来。当你需要获得一个有效的GPIO值,你需要先使用gpio_request来申请。
int gpio_cansleep(unsigned gpio);
To access such GPIOs, a different set of accessors is defined:
/* GPIO INPUT: return zero or nonzero, might sleep */
int gpio_get_value_cansleep(unsigned gpio);
/* GPIO OUTPUT, might sleep */
void gpio_set_value_cansleep(unsigned gpio, int value);