問題シーン
Linuxカーネルバージョン:Linuxバージョン4.14.117(カーネルバージョン情報コマンドcat / proc / versionを表示)
使用している充電icは、シャットダウンプロセス中にリセットする必要があります。充電ICをリセットする機能が.removeで呼び出されましたが、なぜチップがリセットされていないのですか?
問題のトラブルシューティングと解決
- シャットダウンプロセスでは削除プロセスが実行されなかったと最初に推測しました。推測を確認し、削除機能に印刷を追加し、シャットダウンプロセスを実行して、LOG情報を確認しましたが、追加された印刷ログが見つかりませんでした。
- オンラインにアクセスして関連情報を見つけ、シャットダウンにシャットダウンプロセスが必要であること、モジュールの追加、印刷情報の増加、情報の印刷、チップのリセット操作の追加、シャットダウンリセットの成功を見つけます。
問題解決
方法:シャットダウンプロセスを増やす
注目
shutdownの戻り値はvoidであり、削除プロセスは変更されていないため、コンパイルエラーが発生します。。。詳細にはまだ注意が必要です!!!
簡単な分析
- プローブの実行には2つの機会があります。1つはデバイスの作成時、もう1つはドライバーの登録時です。removeには2つの実行機会があります。1つはデバイスのログオフ時、もう1つはドライバーのログオフ時です。
- システムがシャットダウンまたは再起動すると、デバイスドライバーのシャットダウン関数が呼び出され、デバイスのシャットダウン操作が完了します。必要に応じて、ドライバーで関数を定義できます。
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,
};