linux kernel 中, X86架构中的GPIO,一般都会由EC来提供,正常情况下EC和南桥通过LPC总线通信,GPIO会注册成一个PCI设备,都会生成一个gpio_chip。注册进PCI总线中。用户可以操作GPIO的工作状态。
gpio_chip 结构体
struct gpio_chip{ const char*label; struct device *dev; struct module *owner; int (*request)(struct gpio_chip*chip, unsigned offset); void (*free)(struct gpio_chip *chip, unsigned offset); int (*direction_input)(struct gpio_chip*chip, unsigned offset);// gpio 输入 int (*get)(struct gpio_chip*chip, unsigned offset); int (*direction_output)(struct gpio_chip*chip, unsigned offset,int value);//gpio 输出 void (*set)(struct gpio_chip *chip, unsigned offset,int value); int (*to_irq)(struct gpio_chip*chip, unsigned offset); void (*dbg_show)(struct seq_file*s, struct gpio_chip*chip); int base; u16 ngpio; char **names; unsigned can_sleep:1; unsigned exported:1; enum gpio_direction (*get_direction)(struct gpio_chip*chip, unsigned offset); }; |