完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 我在驱动程序中开启了按键中断 在porbe函数中,使用函数device_init_wakeup( pdev->dev, 1) 2 通过SIMPLE_DEV_PM_OPS注册了key_drv_suspend函数,并在该函数里面通过enable_irq_wake(),使能了可以通过按键来唤醒系统 3 通过SIMPLE_DEV_PM_OPS注册了key_drv_resume函数,并在该函数里面通过disable_irq_wake(),关闭了可以通过按键来唤醒系统 SIMPLE_DEV_PM_OPS(wj_key_pm_ops, key_drv_suspend,key_drv_resume) 4 在driver中 .pm = wj_key_pm_ops 最后加载驱动 5 在应用程序中通过调用echo mem > /sys/power/state让设备进入低功耗状态,但是按下按键,系统没有恢复。 这种情况大概是哪里出现问题了呢 //这个是我的驱动里面的suspend和resume函数 static int key_drv_suspend(struct device * dev, pm_message_t state) { printk("key supendrn"); printk("key_drv_suspend's which_irq[0] is %dn", which_irq[0]); printk("pm_message_t is %xrn", state.event); enable_irq_wake(which_irq[0]);//使能中断唤醒 return 0; } static int key_drv_resume(struct device * dev) { printk("key resumern"); is_dev_sleep_or_run = 2; printk("key_drv_resume key is down: 按下按键, 唤醒设备rn"); disable_irq_wake(which_irq[0]);//关闭中断唤醒 return 0; } //static SIMPLE_DEV_PM_OPS(wj_key_pm_ops, key_drv_suspend, key_drv_resume); static const struct dev_pm_ops wj_key_pm_ops = { .suspend = key_drv_suspend, .resume = key_drv_resume, }; static struct platform_device_id key_drv_ids[] = { {.name = "nuc977-key"},//匹配的名字 {} }; static struct platform_driver key_driver = { .driver = { .name = "nuc977-key", .owner = THIS_MODULE, .pm = wj_key_pm_ops, }, .probe = key_drv_probe, .remove = key_drv_remove, .id_table = key_drv_ids, // .suspend = key_drv_suspend, // .resume = key_drv_resume, }; |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
624浏览 3评论
506浏览 2评论
361浏览 1评论
381浏览 1评论
348浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:42 , Processed in 0.548855 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号