MT3561 开关触摸屏GT928逻辑

1 . MT3561 触摸屏的驱动文件路径:

kernel-3.18/drivers/input/touchscreen/mediatek/GT928/gt9xx_driver.c

2. 需求: 提供接口控制触摸屏幕的开关

此处使用 /proc/gt9xx_config文件作为文件节点提供控制接口

3.具体实现:

(本文档分析此功能的实现方式,并不对触摸屏的驱动架构进行详细的分析)

驱动的注册函数中,发现驱动probe函数中已经创建了proc下的文件节点

static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)

{

….................................

gt91xx_config_proc = proc_create(GT91XX_CONFIG_PROC_FILE, 0660, NULL, &gt_upgrade_proc_fops);

//创建proc目录下的文件节点

…..................................

}

static const struct file_operations gt_upgrade_proc_fops = {

.write = gt91xx_config_write_proc,

.read = gt91xx_config_read_proc

}; //该节点提供的操作的操作函数

static ssize_t gt91xx_config_write_proc(struct file *file, const char *buffer, size_t count,

loff_t *ppos)

{

…................................

if (sscanf(temp, "%s %d", (char *)&mode_str, &mode) == -1)

return -EINVAL;

//解析输入的字符, 根据这里可以看出 调用此函数时 传入命令的格式为: write操作 命令 数值

…...............

if (strcmp(mode_str, "switch") == 0) {

if (mode == 0) /* turn off */

tpd_off();

else if (mode == 1) /* turn on */

tpd_on();

else

GTP_ERROR("error mode :%d", mode);

return count;

}

// 原生写操作接口已经提供了开关屏幕的操作,命令 “switch” ,数值为 0关闭 1打开

//这里的tpd_on函数以及tpd_off函数 实际使用tpd_off操作时存在卡机重启问题,这跟平台硬件

//不匹配有关,所以后续根据触摸屏的手册客制化开关屏幕的功能

…..............................................

if (strcmp(mode_str, "touch") == 0) {

if (mode == 0) /* turn off */

tpd_close();

else if (mode == 1) /* turn on */

tpd_open();

else

GTP_ERROR("error mode :%d", mode);

return count;

}

//此处为客制化开关机的修改, 新加命令 “touch” , 参数 0 关闭 ,1 打开

}

static void tpd_open(void) //触摸屏的打开操作就是让触摸屏进入normal mode (具体时序根据对应 的芯片手册进行操作)

{

if(_irq_state == 0){

tpd_gpio_output(1,0);

msleep(2);

tpd_gpio_output(1,1);

msleep(10);

tpd_gpio_output(1,0); //唤醒(高电平时间大于2~5ms)

gtp_int_sync(); //重新配置引脚为eint 模式

mutex_lock(&i2c_access);

tpd_halt = 0;

enable_irq(touch_irq); //开中断

_irq_state = 1;

mutex_unlock(&i2c_access);

GTP_ERROR("GTP enter NormalMode!");

#ifdef TPD_PROXIMITY

if (tpd_proximity_flag == 1)

return;

#endif

#if GTP_ESD_PROTECT

queue_delayed_work(gtp_esd_check_workqueue, &gtp_esd_check_work, TPD_ESD_CHECK_CIRCLE); //work 重新加入调度

#endif

#ifdef GTP_CHARGER_DETECT

queue_delayed_work(gtp_charger_check_workqueue, &gtp_charger_check_work,

TPD_CHARGER_CHECK_CIRCLE);

#endif

}

}

// 触摸屏的关闭操作就是让触摸屏进入sleep mode

static void tpd_close(void)

{

s32 ret = -1;

s8 retry = 0;

u8 i2c_control_buf[3] = { (u8) (GTP_REG_SLEEP >> 8), (u8) GTP_REG_SLEEP

if(_irq_state == 1){

mutex_lock(&i2c_access);

disable_irq(touch_irq);

_irq_state = 0;

tpd_halt = 1;

mutex_unlock(&i2c_access);

//gpio_direction_output(tpd_int_gpio_number, 0);

tpd_gpio_output(1,0);

msleep(20); //先拉低EINT 引脚

while (retry++ < 5) {

ret = gtp_i2c_write(i2c_client_point, i2c_control_buf, 3); //再设置寄存器进入sleep mode

if (ret > 0) {

GTP_ERROR("GTP enter SleepMode!");

return;

}

msleep(20);

}

#if GTP_ESD_PROTECT

cancel_delayed_work_sync(&gtp_esd_check_work); //取消work调度

#endif

#ifdef GTP_CHARGER_DETECT

cancel_delayed_work_sync(&gtp_charger_check_work);

#endif

#ifdef TPD_PROXIMITY

if (tpd_proximity_flag == 1)

return;

#endif

}

}

irq_state 这个参数为了保证tpd_opentpd_close 成对出现才会有实际的开关操作,原因在于 disable_irq enable_irq需成对操作

图1

具体的时序操作如图1,

具体操作的命令:

echo touch 1 > /proc/gt9xx_config //开屏幕

echo touch 0 > /proc/gt9xx_config //关闭屏幕

MTK Android GT928触摸屏驱动客制化触摸的开关相关推荐

  1. Android 12.0 Launcher客制化指导手册

    主要包含 Launcher3升级变化:小部件变化 . Go版本差异.支持自动生成Work文件夹 . UI客制化 :桌面布局 .布局配置 .预置图标 .图标客制化 .待机界面客制化.应用抽屉客制化 功能 ...

  2. Android 5.0 Launcher客制化定制之 主题包协议(MIUI主题、乐蛙主题兼容)

    Android 5.0 Launcher客制化定制之 主题包协议(MIUI主题.乐蛙主题兼容) 春节更新

  3. android 7.0平台客制化虚拟导航按键(隐藏NavigationBar,上滑显示NavigationBar)

    如图,需求是增加一个按钮可以隐藏NavigationBar,上滑显示NavigationBar. 参考文章: Android 8.1平台客制化虚拟导航按键 Android 7.0 虚拟按键(Navig ...

  4. Android系统之路(初识MTK) ------ 设置系统默认语言/客制化可选语言/设置默认时区

    在这一版本的平板系统定制中,客户需要定制系统默认语言,默认英语,可选语种分别是 语言代码      国家/地区 bn_BD      孟加拉语(孟加拉) en_US      英文  ar       ...

  5. 高通和MTK针对国家wifi channel 客制化修改方法

    高通方案: 主要修改的方法是g_all_countries和g_reg_dmn_pairs方法中,文件是vendor/qcom/opensource/wlan/qcawifi-host-cmn/uma ...

  6. Android 8.1平台客制化虚拟导航按键

    文章目录 @[toc] 需求 运行截图 代码修改步骤 欢迎关注公众号,给你更多技术干货: 需求 基于MTK8163 8.1平台定制导航栏部分,在左边增加音量减,右边增加音量加 运行截图 代码修改步骤 ...

  7. MTK Android 13平台开关机动画铃声客制化

    MTK Android 13平台开关机动画铃声客制化 Android T和S的差异很大 主要是MtkShutdownThread.java和ShutdownThread.java差异 未完,待更新,填 ...

  8. Android 11.0 充电指示灯红绿显示简单客制化

    客制化充电指示灯的文章在网上也有不少了,项目的需求是在百分百情况下量绿灯,其它情况下都是红灯,这里简单记录下在Android11,kernel-4.19版本下的修改内容,也给有相关需求的各位提供下思路 ...

  9. Android 系统序列号从哪里来,以及客制化序列号

    Android 系统序列号从哪里来,以及客制化序列号 系统获取序列号过程 客制化序列号 系统获取序列号过程 Android系统的SN号,实际是从"cmdline"里面的" ...

  10. Android 手机按键客制化详解

    在Android 中会有以下5个按键(Back.Home.Menu.Power.Volume)与用户进行交互,Framework 层中实现按键功能,因此,从手机系统定制的角度,可以满足客户的客制化要求 ...

最新文章

  1. python中的decode(编码)和encode(解码)
  2. python 语言教程(3)变量之字符串
  3. 如何查看oracle trace 文件
  4. struts2 跳转类型 result type=chain、dispatcher、redirect
  5. 零元学Expression Blend 4 ndash; Chapter 21 以实作案例学习MouseDragElementBehavior
  6. 安装工程图形算量离我们还多远
  7. 一键分享手机代码_通过广告路由器指定手机浏览器自动认证WIFI上网 附代码
  8. 标签分布学习相关研究
  9. 安卓手机使用linux(含图形界面)——Aid Learning
  10. Win8 Metro(C#)数字图像处理--2.50图像运动模糊
  11. php常见预定义常量,php跨平台小结 常用预定义常量
  12. 最简单上手的音频处理软件Cool Edit,这些操作你该知道
  13. [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
  14. 什么是作用域链(源码解析)
  15. OpenCV-Python实战(番外篇)——利用 K-Means 聚类进行色彩量化
  16. 添加类库引用后,命名空间出错的解决方案
  17. RSA原理及其攻击方法
  18. 实验七:散点图和折线图绘制
  19. ubuntu18.04查看网卡mac地址
  20. 用go填写pdf模板

热门文章

  1. Python暴力破解wifi密码
  2. 阿里巴巴分布式调度引擎tbschedule实战三tbschedule的调度原理
  3. 封装继承多态_继承重写重载
  4. 消息队列原理及activeMQ基本知识点
  5. 教你如何用两个队列实现一个栈
  6. python判断字符串是否为空
  7. 自带win10系统换win7的那些坑
  8. java设计模式案例及使用
  9. 恶意代码分析相关工具漏洞挖掘相关工具
  10. win10专业版占多少空间_win10正常占用磁盘多大空间?