gpiochip_irqchip_add
时间: 2023-12-14 10:03:23 浏览: 30
`gpiochip_irqchip_add`函数是用于向Linux内核添加GPIO中断控制器的函数。它将GPIO控制器的IRQ处理程序注册到内核中断子系统中,并将中断描述符添加到GPIO控制器的内部数据结构中。这样,当GPIO引脚状态发生变化时,中断处理程序就会被调用,从而触发相应的中断处理操作。
该函数的定义如下:
```c
int gpiochip_irqchip_add(struct gpio_chip *chip, struct irq_chip *irq,
unsigned int first, irq_flow_handler_t handler,
void *handle)
```
其中,参数`chip`是指向GPIO控制器的指针,参数`irq`是指向IRQ控制器的指针,参数`first`是IRQ编号,参数`handler`是中断处理函数,参数`handle`是中断处理函数的参数。
需要注意的是,该函数需要在GPIO控制器初始化之后调用,以便正确地注册中断处理程序。
相关问题
of_gpiochip_add
`of_gpiochip_add()`函数是用于将一个GPIO控制器设备注册到Linux内核GPIO子系统中的函数。它会解析设备树中的GPIO节点信息,并根据这些信息来创建并注册一个GPIO控制器设备。
该函数在`drivers/gpio/gpiolib-of.c`文件中实现,其定义如下:
```c
int of_gpiochip_add(struct gpio_chip *chip)
```
参数`chip`是一个指向GPIO控制器设备的指针,它包含了一些控制器设备的信息,例如GPIO数量、GPIO编号等等。函数返回值为0表示成功,否则表示失败。
示例代码:
```c
struct gpio_chip my_gpio_chip = {
.label = "my-gpio-controller",
.direction_input = my_gpio_direction_input,
.direction_output = my_gpio_direction_output,
.get = my_gpio_get,
.set = my_gpio_set,
.base = -1, // 根据设备树解析出来的值填充
.ngpio = -1, // 根据设备树解析出来的值填充
};
int my_gpio_probe(struct platform_device *pdev)
{
int ret = 0;
struct device_node *np = pdev->dev.of_node;
// 从设备树中获取GPIO节点信息,填充my_gpio_chip结构体
my_gpio_chip.base = of_get_gpio_chip_base(np);
my_gpio_chip.ngpio = of_gpio_count(np);
// 注册GPIO控制器设备到内核GPIO子系统
ret = of_gpiochip_add(&my_gpio_chip);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to add gpio_chip\n");
goto err;
}
return 0;
err:
return ret;
}
```
gpiochip_add_pin_range
`gpiochip_add_pin_range`是Linux内核中的函数,用于向GPIO子系统注册一组GPIO引脚范围。它的定义在`include/linux/gpio/driver.h`头文件中。
该函数的原型如下:
```
int gpiochip_add_pin_range(struct gpio_chip *chip,
const char *range_name,
unsigned int base,
unsigned int ngpios);
```
参数说明:
- `chip`:指向包含GPIO芯片信息的`struct gpio_chip`结构体的指针。
- `range_name`:GPIO引脚范围的名称。
- `base`:GPIO引脚的起始编号。
- `ngpios`:GPIO引脚的数量。
该函数的作用是将一组GPIO引脚范围注册到GPIO子系统中,并将它们与所属的GPIO芯片相关联。通过这种方式,用户空间程序可以通过/sys/class/gpio目录中的文件来访问这些GPIO引脚。例如,如果使用了gpiochip_add_pin_range函数将引脚范围注册到名为gpiochip0的GPIO芯片上,则可以使用/sys/class/gpio/gpiochip0目录来访问这些引脚。