Cena do problema
Versão do kernel do Linux: versão 4.14.117 do Linux (veja o comando cat / proc / version das informações da versão do kernel)
O ic de carregamento que usamos deve ser redefinido durante o processo de desligamento. A função de redefinir o IC de carregamento foi chamada em .remove, por que o chip não foi redefinido?
Solucionar problemas e resolver problemas
- Inicialmente, imaginei que o processo de desligamento não tivesse o processo de remoção.Verifique a conjectura, adicione impressão à função de remover, faça o processo de desligamento, verifique as informações do LOG e não encontrou o LOG de impressão adicionado.
- Fique on-line para encontrar informações relevantes e descobrir que o desligamento requer um processo de desligamento, adicione módulos, aumente as informações de impressão, imprima com sucesso, adicione operação de chip de redefinição e redefinição de desligamento bem-sucedida.
Resolução de problemas
Método: aumentar o processo de desligamento
Atenção
O valor de retorno do encerramento é nulo e o processo de remoção não foi modificado, resultando em erros de compilação. . . Os detalhes ainda precisam de atenção! ! !
Análise simples
- Há duas oportunidades para a execução do probe, uma é quando o dispositivo é criado e a outra é quando o driver é registrado; remove também tem duas oportunidades de execução, uma é quando o dispositivo é desconectado e a outra é quando o driver é desconectado.
- Quando o sistema é desligado ou reiniciado, a função de desligamento do driver do dispositivo é chamada para concluir a operação de desligamento do dispositivo.Se necessário, a função pode ser definida no driver.
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,
};