<MTK> mtk kernel 设置EINT中断响应

mtk 中断 MTK平台有个图层的概念。每个层的数据存放在不同的buffer中,这些buffer可以从LCD对应的寄存器中读出。具体的自己去查对应平台的规格书吧。MTK的平台是你在blockwrite中通过STARTLCDTRANSFER打开这个寄存器对应的位,然后硬件把每一层图像中对应的像素点取出,然后通过硬件合成,把合成后的数据通过你在LCD_DATA_ADDR中设置的端口地址找到LCD接口,送入L 阅读详情

本文环境

  • 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;
}
arm GIC介绍之四 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致流程,从硬件IRQ到来,到IRQ结束。我们实际在KERNEL里面,或者在设备驱动里面处理的IRQ其实是软件意义上的,那么硬件的中断和软件的中断如何联系起来的呢,大概的处理流程是如何呢? 这章我们介绍这部分内容。GIC 中断处理流程我们希望理解概念和流程,总结认识和思路,所以代码细节上的解释需要忽略掉。可以看代码细节, 阅读详情

相关推荐

MTK SD卡中断配置

一般在项目bring up阶段就要解决这个事情 整个流程是这样的 首先要根据BSP接口文件和电路图,外加和硬件确认SD卡的中断引脚是那个管脚 从bsp接口文件中可以知道SD卡的中断管脚是gpio79(最好和硬件确认一下,看看有没有问题) 接下来就是去修改dws配置文件了,dws文件是MTK搞得一套用来配置GPIO的东西,dws文件最终会转换为dts设备树文件。 只不过配置dws文件MTK专门提供了工具来打开,图形化显示看的友好一点,但和设备树文件作用是一样的 打开dws文件的工具是ap_

qq_39695119的博客 786

mtk智能机平台LCM,CTP的ESD防护处理

一 LCM ESD防护 1 TE方法 屏幕定义TE中断脚 dts文件中定义中断脚: dsi_te: dsi_te { compatible = "mediatek, dsi_te-eint"; interrupt-parent = <&eintc>; interrupts = <44 IRQ_TYPE_EDGE_RISING>; //修改为44 debounce = <44 0>; status = "okay...

rosir_zhong的博客 1151

零基础学习MTK平台camera引脚配置

mt8766平台camera gpio配置基础学习笔记

Dead_John 3037

IRQL中断请求级别及APC_LEVEL讨论

什么是IRQL? IRQL是Interrupt ReQuest Level,中断请求级别。处理器在一个IRQL上执行线程代码。IRQL是帮助决定线程如何被中断的。在同一处理器上,线程只能被更高级别IRQL的线程能中断。每个处理器都有自己的中断IRQL。 我们经常遇见的有四种IRQL级别。“Passive”, “APC”, “Dispatch” and “DIRQL”. “DriverEnt

二月麦苗的专栏 6531

MTK Android Driver:EINT

外部中断设置,以TP EINT说明: mediatek\custom\项目名\kernel\dct\cust_eint.h 1.分配中断向量号: #define CUST_EINT_TOUCH_PANEL_NUM 9 2去抖时间值设定: #define CUST_EINT_TOUCH_PANEL_DEBOUNCE_CN 0 3中断极性: #define ...

caobaokang的专栏 5007

MTK AOSP Kernel Overview

MTK Kernel驱动相关文档,比较完善,安卓固件开发必备,文档全名:AOSP Kernel Overview -Kconfigand Driver Customization。

中断请求级

中断请求级 在设计windows的时候,设计者3将中断请求划分为软件中断和硬件中断,并将这些中断都映射成不同级别的中断请求级(IRQL)。同步处理机制很大程度上依赖于中断请求级。 1.中断请求(IRQ)与可编程中断控制器(PIC) 中断请求(IRQ)一般有两种,一种是外部中断,也就是硬件产生的中断,另一种由软件指令int n产生的中断。 PIC的中断向量 IRQ编号 设备

125096 1105

C# CAD2016 多边形顶点按方向重新排序

这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。

转眼之间 一路有你 1356

MTK 平台的Irq 中断号,dts匹配过程

MTK一直以傻瓜化,工具化出名,导致了许多代码逻辑的缺失;所以很多做 MTK平台的人,对很多东西都不甚了解,一知半解。最近我们调试一个驱动,在添加 irq时,就找不到代码的逻辑关联,现把关键的过程记录下。 1. 万能的DrvGen.exe (其实挺SB的) 在目录:vendor\mediatek\proprietary\scripts\dct 2. 配...

求变,从思想开始 5173

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 304

ANSYS Fluent DPM实战:从单点到锥形注入的粒子模拟全流程解析

本文深度解析了ANSYS Fluent中离散相模型(DPM)的粒子注入(Injection)设置全流程。从单点注入到锥形喷雾,详细阐述了不同注入类型的物理本质、参数逻辑与适用场景,并提供了粒径分布、湍流扩散等高级参数设置技巧与实战避坑指南,帮助工程师精准模拟喷雾、粉尘等粒子运动行为。

weixin_29276847的博客 654

在设备树中描述中断

DTS,linux,interrupt,device-tree

专业技术人员的归宿 736

camera 知识速查

本文总结了Camera开发中的常见问题排查方法和关键技术点。主要内容包括:I2C/MIPI不通的排查步骤、时序问题分析方法、Sensor/AF/Flash/PDAF的Bring Up流程、OTP调试方法、PDAF原理及调试、CTS/ITS问题解决思路、AE震荡解决方案、Systrace性能分析方法、Flicker产生原理、Tombstone问题定位等。还涉及V4L2框架解析、问题定位分层方法、Sensor Setting注意事项、时钟信号概念、第三方应用卡顿排查、大光圈概念、Monkey测试方法。

qq_41665131的博客 783

MT6765中断处理IO口配置流程

1 添加EINT_VAR alps/vender/mediated/proprietary/scripts/dct/ 目录下文件 YuSu.cmp,EINT_YuSu.cmp, GPIO_YuSu.cmp 添加 IRQ_M300 和GPIO_IRQ_M300_PIN 2 运行 alps/vender/mediated/proprietary/scripts/dct/DrvGen 分别打开下面三个问题,相同配置: alps/kernel-4.9/drivers/misc/mediatek/dws/..

rosir_zhong的博客 679

AMP架构下的核间通信:RPMSG与共享内存原理详解

本文以RK3568等异构多核硬件为例,深入浅出解析了AMP架构下核间通信的核心逻辑,阐明RPMSG并非替代共享内存,而是以共享内存为数据载体、硬件信箱为中断通知工具、VirtIO为数据管理规则,构建的标准化高层协议与框架,为开发者提供简洁API,实现不同操作系统核心间高效通信。

qq_61335271的博客 2049

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

MTK耳机识别

当插入耳机后,INT通过耳机接触到L声道的PIN,因L声道在PMIC内部存在着470R的下拉,也就使得下图圆点位置,也就是Eint的电压值被拉低接近至0V小于Vref,此时耳机被识别,手机显示耳机图标。在PMIC内部其实存在一个比较器,其Vref值可通过软件进行修改,可为2.8V,2.4V,2V,1V。在无耳机插入时,Eint 内部通过470k电阻被上拉到VDD 2.8V,大于Vref,手机无耳机图标显示。从图示可以看出,按下按键,相当于在原有耳机MIC阻抗的基础上又多并上了一部分相关联的阻抗。

weixin_43772512的博客 2488

【云原生技术】helm中Chart.yaml、values.yaml、_helpers.tpl 各自的写法与作用

Chart.yaml、values.yaml、_helpers.tpl 各自的写法与作用 在一个标准的 Helm Chart 中,通常会包含以下关键文件: - **Chart.yaml** - **values.yaml** - **templates/`_helpers.tpl`** - 以及若干模板文件(`deployment.yaml`、`service.yaml` 等) 下面分别介绍这几个文件的作用、常见字段及其含义。

weixin_46453070的博客 751

MTK平台dts里添加中断pin

在MTK dts里配置中断pin,有两种方式。

qq_40114866的博客 1170

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用DynamicConv高效动态卷积改进YOLO26检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

YOLO26作为新一代轻量化目标检测模型的代表,凭借精简的Backbone架构、高效的特征融合 Neck 设计,在实时检测场景(如嵌入式设备、边缘计算)中展现出优异的性能,成为工业落地与科研入门的优选模型。但在实际应用中,YOLO26原生检测头仍存在核心瓶颈:采用固定参数卷积核,无法根据输入特征的目标尺度、纹理差异动态调整卷积权重,导致多尺度目标适配不足、复杂背景下特征利用率低,且传统改进方案往往难以平衡“精度提升”与“轻量化”,要么精度提升有限,要么大幅增加参数量、拖累推理速度。

qq_36130719的博客 370

BPSK-QPSK-16QAM-64QAM调制解调

BPSK,QPSK,16QAM和64QAM的调制解调,没有使用matlab自带函数,全是自写的,简单明了。

MTK平台DWS中GPIO配置知识

深入理解MTK平台中DWS配置中,各个配置项的具体含义

weixin_45304260的博客 2920

黄土高原空间范围shp数据

黄土高原空间范围shp数据

MTK 驱动开发(2)---GPIO 配置

1.GPIO 配置   拿到一个手机项目,GPIO 总是和MTK 提供的默认的代码的GPIO 的使用不一样,需要根据原理图进行修改GPIO配置,配置GPIO 需要使用MTK 提供的工具DrvGen.exe。  打开mediatek/dct/DrvGen.exe工具,选择mediatek/custom/project_dir/kernel/dct/dct/codegen.dws文件,点击Edit,将...

zhangbijun1230的专栏 3382

断网急救箱(独立版)

电脑连接不上互联网了,硬件、软件故障逐一排查很是繁琐,通过它可快速定位断网原因,胜在方便、快捷、实用

OFD文件预览插件指南[代码]

本文介绍了ofdViewer插件的使用指南,该插件是一个用于前端预览OFD文件的开源工具。插件具有简单易用、前端预览和轻量级等特点,无需后端支持即可在网页中直接加载和预览OFD文件。文章详细说明了插件的下载、引入、初始化和使用方法,并提供了示例代码帮助用户快速集成。此外,还鼓励用户参与项目贡献,并提到项目采用MIT许可证。ofdViewer插件旨在帮助开发者轻松实现OFD文件的前端预览,提升用户体验。

MTK功能机实现sim卡热插拔功能

MTK功能机实现sim卡热插拔功能   1 打mtk sim卡热插拔补丁 联系MTK或代理商   2 配置中断脚 没有硬件上拉就配置硬件上拉, R0 R1也需打勾.     3 根据sim卡座来配置中断 本人的sim卡座中断脚是: 插卡为低,拔卡为高.   看这段代码得知: 如果是REMOVE 后的电平是高,则配置中断极性为TRUE; 反之,则配置为FALSE;

Horsdy123的专栏 2950

MTK 按键驱动流程总结

前言 简单介绍了 Input 按键驱动流程 流程 位置:Kpd.c (kernel-3.18\drivers\input\keyboard\mediatek) module_init(kpd_mod_init); static int __init kpd_mod_init(void) ////////////////////////////////////////////////////...

wangjun7121的专栏 4170

LTF散热框架软件实现_结合MTK6797平台

一. LTF热管理框架简介  LTF(Linux Thermal Framework),主要位于BSP kernel模块,LTF抽象出两种类型的设备,热区设备TZD[Thermal Zone Device] 和冷却设备[Cooling Device]。 热区设备主要负责获取和上报从热传感器读取的转换温度值[单位毫摄氏度]。 冷却设备通过开关某一个特定的处理函数,来给绑定的热区设备组件降温。 ...

pan0755的博客 1663

<Qcom> DSI PANEL的参数解析

&amp;mdss_mdp { dsi_dual_jdi_cmd_0: qcom,mdss_dsi_jdi_qhd_dualmipi0_cmd{ qcom,mdss-dsi-panel-name = "Dual 0 cmd mode dsi panel"; qcom,mdss-dsi-panel-controller = &lt;&amp;mdss_dsi0&gt;; qcom,md...

Lulixue的专栏 6769
上一篇: <Android> 实时监控记录Android的Kernel和上层LOG
下一篇: <Linux> pinctrl MTK 举例
_Lulixue_
博客等级 码龄16年 45粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值