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,
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章