前言
一些设备在进入深度睡眠时,需要做一些处理,例如下一些电,减少功耗等处理。
一、代码
需要先打开CONFIG_PM的配置,一般代码如下(设备初始化的内容就没做,需要初始化的也可以在对应回调里添加即可)
#ifdef CONFIG_PM
/*
* 下电
*/
static int pm_suspend(struct device *dev)
{
struct test *test = dev_get_drvdata(dev);
printk("%s \n", __func__);
gpio_direction_output(test->gpio, 0);
return 0;
}
/*
* 上电
*/
static int pm_resume(struct device *dev)
{
struct test *test = dev_get_drvdata(dev);
printk("%s \n", __func__);
gpio_direction_output(test->gpio, 1);
return 0;
}
static const struct dev_pm_ops pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(pm_suspend, pm_resume)
};
#endif
static struct kk_test_driver = {
.probe = kk_test_probe,
.id_table = kk_test_id,
.driver = {
.name = "kk_test",
.of_match_table = of_match_ptr(kk_test_of_match),
#ifdef CONFIG_PM
//这部分内容就是深度睡眠与唤醒会执行的回调,可见需要先打开CONFIG_PM的配置
.pm = &pm_ops,
#endif
},
};