首页 > 其他分享 >mtk kernel-5.10 tp不进休眠函数

mtk kernel-5.10 tp不进休眠函数

时间:2024-08-15 14:25:58浏览次数:10  
标签:disp kernel tpd struct tp mtk endif +# notifier

之前的tpd_driver_t里面的suspend和resume 不跑了,因为定义了CONFIG_DRM_MEDIATEK 宏

所以要进行修改

--- a/kernel-5.10/drivers/input/touchscreen/mediatek_tpd/tlsc6xxx/tlsc6x_main.c
+++ b/kernel-5.10/drivers/input/touchscreen/mediatek_tpd/tlsc6xxx/tlsc6x_main.c
@@ -31,6 +31,12 @@ static u8 tpd_proximity_suspend         = 0;
 static u8 tpd_proximity_detect      = 1;//0-->close ; 1--> far away
 static u8 tpd_proximity_detect_prev= 0xff;//0-->close ; 1--> far away
 #endif

+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+static int xxx_ts_disp_notifier_callback(struct notifier_block *nb,
+       unsigned long value, void *v);
+#endif


@@ -1935,6 +1983,17 @@ static int tpd_probe(struct i2c_client *client, const struct i2c_device_id *id)
         return -1;
     }
 
+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+       g_tp_drvdata->disp_notifier.notifier_call = xxx_ts_disp_notifier_callback;
+       retval = mtk_disp_notifier_register("Tlsc6x Touch", &g_tp_drvdata->disp_notifier);
+       if (retval) {
+               TPD_DEBUG("Failed to register disp notifier client:%d", retval);
+               goto err_register_disp_notif_failed;
+       }
+#endif
     tlsc6x_tpd_reset();
 



@@ -1995,6 +2057,15 @@ static int tpd_probe(struct i2c_client *client, const struct i2c_device_id *id)
     }
 #endif
     printk("Tlsc6x:%s --!\n", __func__);
+       return 0;

+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+err_register_disp_notif_failed:
+       if (mtk_disp_notifier_unregister(&g_tp_drvdata->disp_notifier))
+               TPD_DEBUG("Error occurred while unregistering disp_notifier.\n");
+#endif



@@ -2006,6 +2077,12 @@ static int tpd_remove(struct i2c_client *client)
 #ifdef __MSG_DMA_MODE__
     msg_dma_release();
 #endif
 
+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+       if (mtk_disp_notifier_unregister(&g_tp_drvdata->disp_notifier))
+               TPD_DEBUG("Error occurred while unregistering disp_notifier.");
+#endif
     gpio_free(tpd_rst_gpio_number);


@@ -2084,6 +2164,36 @@ static void tpd_suspend(struct device *h)
 
 }
 
+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+static int xxx_ts_disp_notifier_callback(struct notifier_block *nb,
+       unsigned long value, void *v)
+{
+       struct tlsc6x_data *ts = container_of(nb, struct tlsc6x_data, disp_notifier);
+       int *data = (int *)v;
+
+       if (ts && v) {
+               TPD_DEBUG("%s IN", __func__);
+               if (value == MTK_DISP_EARLY_EVENT_BLANK) {
+                       if (*data == MTK_DISP_BLANK_POWERDOWN) {
+                               tpd_suspend(ts->dev);
+                       }
+               } else if (value == MTK_DISP_EVENT_BLANK) {
+                       if (*data == MTK_DISP_BLANK_UNBLANK) {
+                               tpd_resume(ts->dev);
+                       }
+               }
+               TPD_DEBUG("%s OUT", __func__);
+       } else {
+               TPD_DEBUG("Tlsc6x touch IC can not suspend or resume");
+               return -1;
+       }
+
+       return 0;
+}
+#endif
--- a/kernel-5.10/drivers/input/touchscreen/mediatek_tpd/tlsc6xxx/tlsc6x_main.h
+++ b/kernel-5.10/drivers/input/touchscreen/mediatek_tpd/tlsc6xxx/tlsc6x_main.h
@@ -40,10 +40,16 @@
 #include <linux/netdevice.h>
 #include <../fs/proc/internal.h>
 
+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)
+#include "../../../../gpu/drm/mediatek/mediatek_v2/mtk_disp_notify.h"
+#endif
+

@@ -87,6 +93,10 @@ struct tlsc6x_data {
        int needKeepRamCode;
        int esdHelperFreeze;
        struct tlsc6x_platform_data *platform_data;
+#if IS_ENABLED(CONFIG_DRM_MEDIATEK)    
+       struct device *dev;
+       struct notifier_block disp_notifier;
+#endif
 };

标签:disp,kernel,tpd,struct,tp,mtk,endif,+#,notifier
From: https://blog.csdn.net/qq_49102600/article/details/141217367

相关文章

  • Springmvc -- 使用`@RequestParam`接收数组类型参数
    在SpringMVC中,处理数组类型的请求参数是一个常见需求,尤其是在处理表单数据或查询参数时。SpringMVC提供了多种方式来接收数组类型的请求参数,包括使用@RequestParam注解、直接绑定到方法参数、以及使用@ModelAttribute注解。本文将深入探讨这些方式的用法、优缺点以及如何......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务阶段4】任务阶段1、2、3链接一、实现任务阶段1-编写自己Spring容器,实现扫描包,得到bean的class对象二、实现任务阶段2-扫描将bean信息封装到BeanDefinition对象,并......
  • TP6发送邮件的功能安全性与性能优化探讨!
    TP6发送邮件功能集成测试?如何优化TP6发送邮件性能?ThinkPHP6以其高效、便捷的特点,成为许多开发者的首选。AokSend将重点探讨TP6发送邮件功能的安全性和性能优化问题,以确保邮件发送的稳定性和安全性。TP6发送邮件:功能概述TP6发送邮件功能支持多种邮件协议,如SMTP、Mailgun、S......
  • [开题报告]FLASK框架文件加密系统的设计与实现tp835(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,文件作为信息交换的重要载体,在日常生活和工作中扮演着不可或缺的角色。然而,这些文件往往包含大量的敏感信息,如个人......
  • 计算机网络——HTTP协议详解(上)
    一、HTTP协议简单介绍1.1什么是HTTP协议HTTP(超文本传输协议)是一种用于在Web浏览器和Web服务器之间传输数据的应用层协议。它是一种无状态协议,即服务器不会保留与客户端的任何连接状态信息,每个请求都被视为一个独立的事务。假设你使用Web浏览器(例如Chrome)访问一个网页。当......
  • HTTP请求走私
    http请求走私 Conent-LengthConent-Length表示实体内容长度,当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容大小,然后通过Content-length消息首部字段告诉客户端需要接收多少数据。Transfer-Encoding分块编码,数据分解成一系列数据块,并以一个或多......
  • Golang httputil 包深度解析:HTTP请求与响应的操控艺术
    标题:Golanghttputil包深度解析:HTTP请求与响应的操控艺术引言在Go语言的丰富标准库中,net/http/httputil包是一个强大的工具集,它提供了操作HTTP请求和响应的高级功能。从创建自定义的HTTP代理到调试HTTP流量,httputil包都能提供必要的支持。本文将深入探讨httputil包的功能......
  • GPS时钟服务器(NTP授时服务器)助力厂站自控系统
    GPS时钟服务器(NTP授时服务器)助力厂站自控系统GPS时钟服务器(NTP授时服务器)助力厂站自控系统京准电子科技官微——ahjzsz厂站自动化系统的正常运行离不开时间的准确计量,而且需要高精度的时间,否则就会因为时间不确定性引发许多......
  • https原理
    目录一、HTTPS的实现原理1.证书验证阶段:2.数据传输阶段:二、为什么数据传输是用对称加密?三、为什么需要CA认证机构颁发证书?1.过程原理如下:四、浏览器是如何确保CA证书的合法性?1.证书包含什么信息?2.证书的合法性依据是什么?3.浏览器如何验证证书的合法性?4.只有认证机......
  • 肿瘤细胞表皮生长因子EGFR靶向肽;GE11;YHWYGYTPQNVI
    【GE11简介】GE11肽是从噬菌体展示肽库中筛选出来的一种有效的EGFR配体,它是一种十二肽,可以高亲和力和选择性地与EGFR特异性结合。GE11已广泛用于EGFR阳性肿瘤的放射治疗、基因治疗和化疗药物的诊断和靶向递送。【中文名称】肿瘤细胞表皮生长因子肽【英文名称】GE11【分子式......