MTK mtk kernel 设置EINT中断响应
本文环境
- 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中断响应相关推荐
- android MTK平台驱动设置
1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...
- MTK 写入SN设置读不到SN问题
我们通过工具写入的SN一帮都是把barcode作为sn的写入字段,然而MTK一般原生代码是没有打开从BARCODE字段获取SN的,所以我们需要把从BARCODE去读SN的开关打开,并且按照自己的需求修 ...
- Mtk平台系统启动设置属性
(1)系统启动时设置属性 //vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.cint boot_linu ...
- mtk camera kernel makefile
对makefile一知半解,就通过camera kernel大概学习下,至少能读懂大部分意思 1.Kconfig kernel-4.19/drivers/misc/mediatek/imgsensor ...
- MTK: mtk 10A 建立socket连接问题
//============================================================================ 1.srv_dtcnt_get_acc_i ...
- MTK 开发调试方法
mtk开发基本调试方法大概就三种模拟器方式,trac方式,串口方式 普通的界面修改,功能行基本都可以通过模拟器完成,但是遇到死机或者与l4c相关的问题是就需要打trac配合cather进行调试了:如果 ...
- mtk 调试方法总结
mtk开发基本调试方法大概就三种模拟器方式,trac方式,串口方式 普通的界面修改,功能行基本都可以通过模拟器完成,但是遇到死机或者与l4c相关的问题是就需要打trac配合cather进行调试了:如果 ...
- MogDB/openGauss 生态工具-MTK(Migration ToolKit) 数据库迁移
点击上方"蓝字" 关注我们,享更多干货! 一.准备环境 1. 源库创建(Oracle) 创建Oracle 11.2.0.4 docker pull registry.cn-hang ...
- linux kernel内存管理之/proc/meminfo下参数介绍
一.前言 /proc/meminfo是了解Linux系统内存状态的主要接口,里面统计了当前系统各类内存的使用状况,需要注意的是:这是从内核的角度来统计.我们常用的free,vmstat等指令都是通过/ ...
最新文章
- php文字超链接怎么写,php 文本URL转换为超链接功能实例
- 在leopard下用textmate开发rails项目
- Linux负载均衡Nginx六种策略
- android 网络开发
- openstack placement 组件作用理解
- C语言中字符数组的初始化与注意事项
- iOS- 快速实现展示布局
- Linux学习总结(44)——Linux操作系统基础知识
- java ide eclipse,java IDE Eclipse
- ssm怎么自动排列序号6位数_小学数学1~6年级知识薄弱点应对方法汇总,建议收藏!...
- LM317稳压电源设计
- 刽子手游戏 做题笔记
- 网站安全检测:推荐8款免费的 Web 安全测试工具
- 数据结构实训——运动会分数统计
- 中国正式进入 5G 商用元年!
- 酷派android最新版本,酷派手机怎么升级系统 酷派手机系统升级操作方法介绍
- 纯CSS实现回到顶部的功能
- php中的逻辑运算符优先级,PHP运算符优先级 运算符分类
- 常用dns114.114.114.114与8.8.8.8的区别
- 找出和为k的所有组合
热门文章
- 怎样才能将刘徽割圆术动画演示
- 【GStreamer 】5-1 gstreamer实现RTSP相机显示
- ORCLE中ALTER、MODIFY和UPDATE的区别
- 前后端分离(VUE+SPRINGBOOT)十四 微信移动端 企业微信的开发1
- RS232RS485串口的区别
- 最长上升子序列计数(dp, 计数,二分,贪心, 数据结构维护),dp12
- 追逐自己的梦想----------辅助制作第一课:人物属性分析
- java 公历 农历_java已知阳历日期求对应阴历日期源代码
- DirectX11 绘制字体
- .Net Core 读取Excel 模板 导出 Excel 文件