#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <linux/proc_fs.h>
#include <linux/input/mt.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
#include <linux/sysfs.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <asm-generic/delay.h>
#include <linux/irqreturn.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
#define TEST_IRQ_NAME “test_irq”
extern int irq_count;
int gpio_num;
int irq_gpio;
static irqreturn_t test_irq_handler(int irq, void *handle)
{
irq_count++;
//printk(“%s:irq_count = %d\n”, func,irq_count);
return IRQ_HANDLED;
}
static int test_irq_probe(struct platform_device *pdev)
{
int ret=0;
printk(“%s()!\n”, func);
#if 0
ret = devm_gpio_request_one(&pdev->dev, irq_gpio,
GPIOF_IN, “test,irq-gpio”);
if (ret < 0) {
printk(“%s:Failed to request irq gpio, r:%d\n”, FUNCTION,ret);
return ret;
}
#else
gpio_num = of_get_named_gpio(pdev->dev.of_node, “test,irq-gpio”, 0);
irq_gpio = gpio_to_irq(gpio_num);
#endif
printk(“%s get irq gpio successed:irq_gpio = %d\n”, func,irq_gpio);
ret = request_irq(irq_gpio,test_irq_handler,IRQF_TRIGGER_FALLING|IRQF_ONESHOT,TEST_IRQ_NAME,NULL);
if (ret < 0) {
printk(“%s:Failed to request_irq, ret:%d\n”, FUNCTION,ret);
return ret;
}
printk("%s() is ok!\n", __func__);
return 0;
}
static int test_irq_remove(struct platform_device *pdev)
{
return 0;
}
const struct of_device_id irq_of_match[] = {
{ .compatible = “mytest,irq”, },
{}
};
//MODULE_DEVICE_TABLE(platform, test_of_match);
static struct platform_driver irq_driver = {
.driver = {
.name = “test-irq”,
.owner = THIS_MODULE,
.of_match_table = irq_of_match,
},
.probe = test_irq_probe,
.remove = test_irq_remove,
// .id_table = test_of_match,
};
static int test_pinctrl_init(void)
{
printk(“%s()!\n”, func);
platform_driver_register(&irq_driver);
return 0;
}
static void test_pinctrl_exit(void)
{
platform_driver_unregister(&irq_driver);
printk(“%s()!\n”, func);
}
module_init(test_pinctrl_init);
module_exit(test_pinctrl_exit);
MODULE_DESCRIPTION(“MTK gpio driver”);
MODULE_AUTHOR(“”);
MODULE_LICENSE(“GPL”);