TP调试总结

最近为一个项目调试TP,现将遇到的问题总结如下。

平台为国产某款soc,TP型号Atmel mXT。

1、从TP功能调通后回看TP调试,个人感觉调试难度不大。TP厂商已将TP源码给给出,我主要做的工作是验证probe内的代码逻辑是否正常走完,I2C通讯是否正常。我调试过程中,能够通过I2C读到芯片ID,证明I2C通信没有问题。查看log发现,TP中断申请函数注册失败,申请API如下。

error = request_threaded_irq(client->irq, NULL, mxt_interrupt, pdata->irqflags, client->dev.driver->name, data); if (error) { dev_err(&client->dev, "Error %d registering irq\n", error); goto err_free_input_device; } data->irq_enabled = true;

出错log提示和irqflags相关,看log怀疑其中的一个IRQF_ONESHOT属性,但是对于TP这种外设需要该属性,中断服务函数中有I2C的读写操作,不希望被终止。这只是理论,实际试一下即可,去掉IRQF_ONESHOT属性,仍申请失败,将irqflags试了很多种组合也不行。
最后只能更改中断注册方式,用request_irq()申请中断,然后用work queue方式将中断服务函数加到工作队列当中,放弃线程化中断申请。部分代码如下。

在这里插入图片描述
在这里插入图片描述
做了如上改动后,TP功能可用,调试完成。至于用线程化中断申请为何失败,原因在查,也欢迎各位大侠们评论、指正。

2、在功耗优化时,也发现一个比较严重问题,给TP供电的一路LDO在灭屏状态下无法掉电。这个问题查了好久,甚至怀疑过平台BUG,因为调用regulator_disable(),查log函数返回正确值,查看LDO对应寄存器值没有改变。最后发现TP的灭屏掉电策略没有采用early suspend方式,而是notifier LCD,“监控”LCD状态来上下电,系统在启动到内核阶段,LCD不知为何会“enable”一次,导致TP初始化时会regulator_enable()两次,深坑啊!!!,把哥坑的太惨了!!!只能在TP驱动里做个逻辑处理,规避系统启动时因LCD二次regulator_enable()。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值