Где находится правильное место в ядре, чтобы добавить остановку и отключение питания для конкретной платформы

Я пишу драйвер многофункционального устройства для конкретной платформы, который включает драйвер i2c.

Я хочу отправить сообщение i2c на специальную микросхему управления питанием, когда ядро ​​​​Linux остановлено или выключено.

Я попытался pm_power_off = my_func переопределить функцию отключения питания, но она не вызывается. (my_func выполняет printk и pr_emerg, чтобы попытаться вывести текст на консоль во время завершения работы.)

Какие правильные хуки следует использовать для добавления функциональности к остановке ядра и отключению питания? (Я бы предпочел добавить код в свой драйвер, а не исправлять kernel/reboot.c и т. д.)


person fadedbee    schedule 11.01.2017    source источник
comment
Проверьте хуки для конкретной платформы в drivers/power/reset/. Например Atmel — drivers/power/reset/at91-poweroff.c, Qualcomm — drivers/power/reset/msm-poweroff.c   -  person SD.    schedule 11.01.2017
comment
Спасибо, но at91-poweroff.c делает pm_power_off = at91_poweroff; в at91_poweroff_probe так же, как я.   -  person fadedbee    schedule 11.01.2017
comment
Это правильно. В вашем случае вы можете подтвердить, что my_func успешно зарегистрирован при инициализации драйвера?   -  person SD.    schedule 11.01.2017
comment
Да, это было что-то странное, возможно, файл не был сохранен до make. my_func сейчас вызывается.   -  person fadedbee    schedule 11.01.2017
comment
Также см.: stackoverflow.com/questions/41596661/   -  person fadedbee    schedule 11.01.2017
comment
Почему бы не добавить struct dev_pm_ops к вашему struct i2c_driver.driver.pm, назначив .poweroff вашей функции ловушки? Как это сделано в drivers/mfd/wm831x-i2c. в.   -  person Sam Protsenko    schedule 12.01.2017