static int pwm_beeper_resume(struct device *dev) { struct pwm_beeper *beeper = dev_get_drvdata(dev); if 2, beeper->period); pwm_enable(beeper->pwm); } return 0; } static SIMPLE_DEV_PM_OPS(pwm_beeper_pm_ops, pwm_beeper_suspend, pwm_beeper_resume); #define #else #define #endif ...
SIMPLE_DEV_PM_OPS宏位于pm.h,它将会定义一个dev_pm_ops结构体,用来被pm子系统调用,实现休眠唤醒4.2 首先来看probe函数如下图所示,probe函数为gpio_keys_probe()gpio_keys_probe()函数定义如下所示:static int gpio_keys_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; //获取...
SIMPLE_DEV_PM_OPS宏位于pm.h,它将会定义一个dev_pm_ops结构体,用来被pm子系统调用,实现休眠唤醒 4.2 首先来看probe函数 如下图所示,probe函数为gpio_keys_probe() gpio_keys_probe()函数定义如下所示: 代码语言:javascript 复制 staticintgpio_keys_probe(struct platform_device*pdev){struct device*dev=&pde...
dev_err(&pdev->dev,"input clock not found.\n");returnPTR_ERR(id->clk); } ret = clk_prepare_enable(id->clk);if(ret) dev_err(&pdev->dev,"Unable to enable clock.\n"); pm_runtime_set_autosuspend_delay(id->dev, CNDS_I2C_PM_TIMEOUT); pm_runtime_use_autosuspend(id->dev);...
SIMPLE_DEV_PM_OPS是Linux封装的一层结构体: #ifdef CONFIG_PM_SLEEP #define SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn 流程:在linux要执行休眠时,换遍历一遍所有注册到内核驱动的suspend函数,执行suspend内部代码;在被唤醒时会遍历resume函数,执行内部代码。至于为什么都要执行中断唤醒失能?对于休眠唤醒,...
{ dev_err(dev, "Unable to enable regulator\n"); return ret; } ret = regmap_clear_bits(afe->regmap, AFE440X_CONTROL2, AFE440X_CONTROL2_PDN_AFE); if (ret) return ret; return 0; } static DEFINE_SIMPLE_DEV_PM_OPS(afe4403_pm_ops, afe4403_suspend, afe4403_resume); static int ...
int (*restore_noirq)(struct device *dev); int (*runtime_suspend)(struct device *dev); int (*runtime_resume)(struct device *dev); int (*runtime_idle)(struct device *dev); }; #define SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \ .suspend = pm_sleep_ptr(suspend_fn), \...
const struct dev_pm_ops *pm; 设备的功耗管理 struct driver_private *p; 驱动的私有数据}; 2.3.3. platform_driver_register Platform_driver的注册接口是platform_driver_register,其定义如下: int platform_driver_register(struct platform_driver *drv){ drv->driver.bus =&platform_bus_type; 设置总线类型 ...
#dd if=/dev/zero of=/swapfile bs=1024 count=65536 mkswap /swapfile 65536 sync swapon /swapfile swap should be equal to twice your computer's RAM, or 32MB, whichever amount is larger, but no larger than 2GB.# To create a swap partition mkswap /dev/hdb2 ...
/* System suspend device counter */unsignedintprepared_count;/* Suspend counter of prepared devices */int(*power_off)(struct generic_pm_domain *domain);//驱动只要实现该函数即可int(*power_on)(struct generic_pm_domain *domain);//驱动只要实现该函数即可structgpd_dev_opsdev_ops;s64 max_off_...