在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...
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 ...
In that case GPIO controller is registered as an interrupt controller. There are a lot of examples, like gpio-intel-mid.cgpio-merrifield (in v6.4 the main part was moved to gpio-tangier.c) where you have: retval = gpiochip_irqchip_add(&priv->chip, &intel_mid_irqchip, irq_base, ...
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);
irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_s… Browse files …pinlock_t' This lock is acquired under irq_desc::lock with interrupts disabled. When PREEMPT_RT is enabled, 'spinlock_t' becomes preemptible, which results in invalid lock acquire context; [ BUG: ...
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: ...