在Linux中,GPIO是一种通用的输入输出接口,可以用来连接各种外设,如LED灯、按键、传感器等等,而IRQ中断线则是用来处理硬件中断的。因此,将GPIO引脚映射成IRQ中断线,可以使Linux内核更加高效地处理外设的输入输出。 在本文中,我们将详细介绍gpio_to_irq函数的原理、实现方法以及使用场景。 一、gpio_to_irq函数的原理 ...
staticinlinestructgpio_chip *gpio_to_chip(unsigned gpio) {returngpio_desc[S5PV210_GPH2(0)].chip;//参考gpio-s5pv210.c中//samsung_gpiolib_add_4bit_chips(s5pv210_gpio_4bit, nr_chips)函数//gpio_desc[id].chip = chip;} 10returnchip->to_irq ? chip->to_irq(chip, gpio - chip->base) :...
就是因为很多平台代码都将gpio_to_irq实现成为了函数,而非宏定义,这样就只能进行动态引用。但是,这在驱动编写中也不是什么问题,在上面已经说过,只要在设备资源生效前(设备注册前)将其irq动态赋值好就可以了,现有的很多成熟平台也是这样做的,并没有问题。这里我探究这个问题只是因为自己的好奇心而已。 本文版权归作者...
之前在调试传感器模块的时候发现,在结构体声明的时候irq成员使用gpio_to_irq会报错,而动态使用的话就没有问题。就对gpio_to_irq为什么不能静态使用产生了疑问。恰巧最近又有朋友遇到了同样的问题,也就提醒了我,去找出原因。 开始测试 我写了一个简单的linux执行程序进行测试,因为在内核源码中发现不同平台对gpi...
the func"gpio_to_irq()" return -22, my GPIO_NUM=gpio1_26=480+26=506; Does nxp not provide this interface? In IMX platform i can this function successfully. here is my code: #define BASE_GPIO2 506 static int __init button_init(void){ int error,a; a = gpio_is_valid(BASE_...
gpio ---> irq int gpio_to_irq(unsigned gpio); 首先应该设置此gpio为输入状态,然后获取对应的中断号。返回编号调用: request_irq()和free_irq()。这里的gpio号和io引脚的编号不是同一个意思,可以不相同。在bootrom或者dtb里面会建立一个映射:把gpio映射到具体的io引脚。 2016-6-3 11:16:03 评论 举...
GPIO_INT_BASE (void __iomem *)IO_ADDRESS(PHY_BASEADDR_GPIOA) #define GPIO_BASE_OFFSET (0x1000) #define GPIO_INT_MASK (0xFFFFFFFF) #define ALIVE_INT_BASE (void __iomem *)IO_ADDRESS(PHY_BASEADDR_CLKPWR_MODULE + 0x800) #define ALIVE_INT_MASK (0x000000FF) /* * cpu irq handler ...
static int bcma_gpio_to_irq(struct gpio_chip *chip, unsigned gpio) { struct bcma_drv_cc *cc = bcma_gpio_get_cc(chip);if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC) return irq_find_mapping(cc->irq_domain, gpio);
static int thunderx_gpio_to_irq(struct gpio_chip *chip, unsigned int offset) { struct thunderx_gpio *txgpio = gpiochip_get_data(chip);return irq_find_mapping(txgpio->irqd, offset); }static int thunderx_gpio_probe(struct pci_dev *pdev,...
disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); gpio_direction_output(data->pdata->gpio_data, 1); dts change MX8MM_IOMUXC_NAND_WP_B_GPIO3_IO18 0x80000000 is error,imx6 3.14.28 is ok,imx6 4.9.88 is error。 The following is the Chinese translation: ...