Hi:
I added a GPIO driver on Linux 5.4.47, but it did not generate an interrupt. Currently, I am using lsdk2012.Here are my testing steps:
1)Configure gpio3_ 10 is GPIO mode in rcw
Eddy1_0-1690862117447.png
Eddy1_1-1690862146563.png
2)Add gpio configuration to the device tree:
Eddy1_2-1690862344893.png
3)Added GPIO interrupt driver and posted some probe codes as follows:
static int ls1028_gpio_probe(struct platform_device *pdev)
{
int ret;
unsigned int pin_number;
struct device_node *np = pdev->dev.of_node;
printk("gpio_IRQ_probe \n");
ls1028_gpio_irq.gpio = of_get_named_gpio(np, "detect-gpios", 0);
if(!gpio_is_valid(ls1028_gpio_irq.gpio))
{
printk("Error : invalid pin number\n");
return -EINVAL;
}
ret = gpio_request(ls1028_gpio_irq.gpio, "ls1028-irq-gpio");
if(ret < 0)
{
printk("ERROR : can not open GPIO %d \n", pin_number);
goto exit;
}
gpio_direction_input(ls1028_gpio_irq.gpio);
ls1028_gpio_irq.irqnum = gpio_to_irq(ls1028_gpio_irq.gpio);
ls1028_gpio_irq.handler = detect_hander;
ret = request_irq(ls1028_gpio_irq.irqnum, ls1028_gpio_irq.handler, \
IRQF_TRIGGER_RISING, "ls1028_gpio_irq",&ls1028_gpio_irq);
if(ret != 0)
{
printk("ls1028_gpio_irq_probe request irq \n");
}
disable_irq(ls1028_gpio_irq.irqnum);
ret = misc_register(&gpio_irq_dev);
if(ret < 0)
{
printk("GPIO_IRQ : misc register error \n");
goto exit_kfree;
}
printk("GPIO_IRQ : misc register successed \n");
return ret;
exit_kfree:
exit:
return ret;
return 0;
}
4)After updating the kernel and device tree, the driver can load normally and generate nodes in “/dev”, but running the "cat/proc/interrupt" command did not see the GPIO interrupt generated. How can I enable the GPIO interrupt?
Eddy1_3-1690862493373.png
Eddy1_4-1690862672180.png
Can you give some suggestions