本文环境

  • mt6797
  • kernel 3.18
  • android 6.0

DTS设置

&eintc {irq_my_irq@3 {compatible = "eint, my-irq";interrupt-parent = <&eintc>;interrupts = <65 IRQ_TYPE_EDGE_RISING>;debounce = <65 0>;};irq_my_gpio@3 {compatible = "eint, my-gpio";interrupt-parent = <&eintc>;interrupts = <179 IRQ_TYPE_EDGE_RISING>;debounce = <179 0>;};
};{//...pinctrl-names = "default", "my_irq_as_int", "nor_irq_as_gpio";pinctrl-0 = <&pins_default>;pinctrl-1 = <&pins_my_irq_as_int>;pinctrl-2 = <&pins_normal_irq_as_gpio>;
};&pio {pins_default: eint0default {};pins_my_irq_as_int: eint@0 {pins_cmd_dat {pins = <PINMUX_GPIO65__FUNC_EINT4>;slew-rate = <0>;bias-disable;};};pins_normal_irq_as_gpio: normal_irq_as_gpio@0 {pins_cmd_dat {pins = <PINMUX_GPIO179__FUNC_GPIO179>;slew-rate = <0>;bias-disable;};};
};

driver配置


struct pinctrl *my_pinctrl;
struct pinctrl_state *pins_default;
struct pinctrl_state *my_irq_as_int, *nor_irq_as_gpio;int parse_dt(struct platform_device *pdev)
{//...my_pinctrl = devm_pinctrl_get(&pdev->dev);if (IS_ERR(my_pinctrl)) {ret = PTR_ERR(my_pinctrl);dev_err(&pdev->dev, "failed to find pinctrl!\n");return ret;}pins_default = pinctrl_lookup_state(my_pinctrl, "default");if (IS_ERR(pins_default)) {ret = PTR_ERR(pins_default);dev_err(&pdev->dev, "cannot find default: %d!\n", ret);}my_irq_as_int= pinctrl_lookup_state(my_pinctrl, "my_irq_as_int");if (IS_ERR(my_irq_as_int)) {ret = PTR_ERR(my_irq_as_int);dev_err(&pdev->dev, "cannot find my_irq_as_int\n");return ret;}nor_irq_as_gpio = pinctrl_lookup_state(my_pinctrl, "nor_irq_as_gpio");
}
// 设置INT
int my_probe(*dev)
{// ...pinctrl_select_state(my_pinctrl, eint_as_int);pinctrl_select_state(my_pinctrl, nor_irq_as_gpio);// ...
}static struct of_device_id my_irq_match[] = {{.compatible = "eint,my-irq", },
};
static struct of_device_id my_gpio_match[] = {{.compatible = "eint,my-gpio", },
};
// 中断响应函数
static irqreturn_t my_irq_handler(int irq, void *dev_id)
{//...return IRQ_HANDLED;
}
// 关联注册中断响应函数
int my_register_irq(void)
{struct device_node *node = NULL;int ret = 0;int irq;node = of_find_matching_node(node, my_irq_match);if (NULL == node) {pr_err("Can not find eint node!");return -ENODATA;}irq = irq_of_parse_and_map(node, 0); pr_debug("%s irq: %d", my_irq_match->compatible, irq);ret = request_irq(irq, my_irq_handler,IRQF_TRIGGER_FALLING, "my-irq", NULL);return ret;
}
#define GPIO_MY_IRQ_GPIO (GPIO179)
int my_register_irq_gpio(void)
{struct device_node *node = NULL;int ret = 0;int irq;int gpio = GPIO_MY_IRQ_GPIO;/* request irq gpio */if (gpio_is_valid(gpio)) {ret = gpio_request(gpio, "irq_gpio");if (ret) {pr_err("irq gpio request failed");}ret = gpio_direction_input(gpio);if (ret) {pr_err("set_direction for irq gpio failed");}} else {pr_err("gpio: %d invalid", gpio);}node = of_find_matching_node(node, my_gpio_match);if (NULL == node) {pr_err("Can not find eint node!");return -ENODATA;}irq = irq_of_parse_and_map(node, 0); pr_debug("%s irq: %d", my_gpio_match->compatible, irq);ret = request_irq(irq, my_irq_handler,IRQF_TRIGGER_FALLING, "my-gpio-irq", NULL);return ret;
}

MTK mtk kernel 设置EINT中断响应相关推荐

  1. android MTK平台驱动设置

    1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...

  2. MTK 写入SN设置读不到SN问题

    我们通过工具写入的SN一帮都是把barcode作为sn的写入字段,然而MTK一般原生代码是没有打开从BARCODE字段获取SN的,所以我们需要把从BARCODE去读SN的开关打开,并且按照自己的需求修 ...

  3. Mtk平台系统启动设置属性

    (1)系统启动时设置属性 //vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.cint boot_linu ...

  4. mtk camera kernel makefile

    对makefile一知半解,就通过camera kernel大概学习下,至少能读懂大部分意思 1.Kconfig kernel-4.19/drivers/misc/mediatek/imgsensor ...

  5. MTK: mtk 10A 建立socket连接问题

    //============================================================================ 1.srv_dtcnt_get_acc_i ...

  6. MTK 开发调试方法

    mtk开发基本调试方法大概就三种模拟器方式,trac方式,串口方式 普通的界面修改,功能行基本都可以通过模拟器完成,但是遇到死机或者与l4c相关的问题是就需要打trac配合cather进行调试了:如果 ...

  7. mtk 调试方法总结

    mtk开发基本调试方法大概就三种模拟器方式,trac方式,串口方式 普通的界面修改,功能行基本都可以通过模拟器完成,但是遇到死机或者与l4c相关的问题是就需要打trac配合cather进行调试了:如果 ...

  8. MogDB/openGauss 生态工具-MTK(Migration ToolKit) 数据库迁移

    点击上方"蓝字" 关注我们,享更多干货! 一.准备环境 1. 源库创建(Oracle) 创建Oracle 11.2.0.4 docker pull registry.cn-hang ...

  9. linux kernel内存管理之/proc/meminfo下参数介绍

    一.前言 /proc/meminfo是了解Linux系统内存状态的主要接口,里面统计了当前系统各类内存的使用状况,需要注意的是:这是从内核的角度来统计.我们常用的free,vmstat等指令都是通过/ ...

最新文章

  1. php文字超链接怎么写,php 文本URL转换为超链接功能实例
  2. 在leopard下用textmate开发rails项目
  3. Linux负载均衡Nginx六种策略
  4. android 网络开发
  5. openstack placement 组件作用理解
  6. C语言中字符数组的初始化与注意事项
  7. iOS- 快速实现展示布局
  8. Linux学习总结(44)——Linux操作系统基础知识
  9. java ide eclipse,java IDE Eclipse
  10. ssm怎么自动排列序号6位数_小学数学1~6年级知识薄弱点应对方法汇总,建议收藏!...
  11. LM317稳压电源设计
  12. 刽子手游戏 做题笔记
  13. 网站安全检测:推荐8款免费的 Web 安全测试工具
  14. 数据结构实训——运动会分数统计
  15. 中国正式进入 5G 商用元年!
  16. 酷派android最新版本,酷派手机怎么升级系统 酷派手机系统升级操作方法介绍
  17. 纯CSS实现回到顶部的功能
  18. php中的逻辑运算符优先级,PHP运算符优先级 运算符分类
  19. 常用dns114.114.114.114与8.8.8.8的区别
  20. 找出和为k的所有组合

热门文章

  1. 怎样才能将刘徽割圆术动画演示
  2. 【GStreamer 】5-1 gstreamer实现RTSP相机显示
  3. ORCLE中ALTER、MODIFY和UPDATE的区别
  4. 前后端分离(VUE+SPRINGBOOT)十四 微信移动端 企业微信的开发1
  5. RS232RS485串口的区别
  6. 最长上升子序列计数(dp, 计数,二分,贪心, 数据结构维护),dp12
  7. 追逐自己的梦想----------辅助制作第一课:人物属性分析
  8. java 公历 农历_java已知阳历日期求对应阴历日期源代码
  9. DirectX11 绘制字体
  10. .Net Core 读取Excel 模板 导出 Excel 文件