我正在使用一些内核2.6.37驱动程序。
我有一个LCD面板驱动程序(就像那些面板驱动程序here),其电源控制实现像LED类下的那些LED设备
http://lxr.free-electrons.com/source/drivers/leds/leds-lp5521.c?v=2.6.37
这已经工作了一段时间,因为如果以正确的顺序初始化,LED设备总是会在面板开始初始化之前出现。
然而,我现在正试图暂停工作,我正在努力使LED和面板暂停/恢复正确的顺序。电源关闭后,面板始终处于暂停状态,这样做没有任何好处,并且在电源启动之前总是会唤醒,这也会适得其反。
我做了一些研究,发现在2.6.33左右,他们为电源管理引入了多线程,似乎唯一的解决方案是在两者之间指定明确的父子关系。
这非常重要,因为LED类驱动程序并非设计为父类。更糟糕的是,这款功率控制LED驱动器是通过I2C实现的,并且在挂起到ram期间本身就会损坏。更糟糕的是,面板驱动程序是omap-dss驱动程序的子代,这是非常特定于平台的,我还没有时间完全理解它。
或者,只是摆脱伪装成LED的丑陋电源驱动程序并用真正的PM驱动程序接口重写它,我再也不知道如何做到这一点。
这已经是一堆丑陋的黑客,所以我觉得很难让它变成丑陋的,因为它需要暂停工作。
在这种特殊情况下,暂停/唤醒发生在一个且仅在特定应用程序的上下文中,因此要求应用程序重新启动应用程序中用户空间中的面板唤醒并不是很困难回来稳定。
任何有关这项工作的精彩(或丑陋)建议?