linux关机外围芯片未复位(高通平台)

问题场景

linux内核版本:Linux version 4.14.117(查看内核版本信息命令 cat /proc/version)
我们使用的充电ic,需要在关机流程中进行复位。在.remove中已经调用了复位充电IC的函数,为什么芯片没有复位?

问题的排查与解决

  • 初步猜测关机并没有走remove的流程,验证猜想,在remove函数中增加打印,走关机流程,查看LOG信息,并未找到增加的打印LOG。
  • 上网查找相关资料,发现关机需要走shutdown流程,增加模块,增加打印信息,信息打印成功,增加复位芯片操作,关机复位成功。

问题解决

方法:增加shutdown流程

注意

shutdown返回值为void,开始抄remove流程未修改,导致编译报错。。。细节还是需要注意!!!

简单分析

  • probe的执行有两个时机,一是设备创建时,二是驱动注册时;remove相对也有两个执行时机,一是设备注销时,二是驱动注销时。
  • 系统关机或重启的过程中,会调用设备驱动的shutdown函数来完成设备的关闭操作,有需要的设备可以在驱动中定义该函数。
static struct i2c_driver bq25890_driver = {
 .driver = {
  .name = "bq25890-charger",
  .of_match_table = of_match_ptr(bq25890_of_match),
  .acpi_match_table = ACPI_PTR(bq25890_acpi_match),
  .pm = &bq25890_pm,
 },
 .probe = bq25890_probe,
 .remove = bq25890_remove,
 .shutdown = bq25890_shutdown,
 .id_table = bq25890_i2c_ids,
};
发布了162 篇原创文章 · 获赞 183 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_31339221/article/details/105287770