linux-kernel - 哪个挂起/恢复指针是正确的?

标签 linux-kernel power-management

我正在研究 i2c 驱动程序的电源管理,并注意到一些奇怪的事情。
include/linux/i2c.h

struct i2c_driver {
    //...
    int (*suspend)(struct i2c_client *, pm_message_t mesg);
    int (*resume)(struct i2c_client *);
    //...
    struct device_driver driver;
    //...
}
include/linux/device.h
struct device_driver {
    //...
    int (*suspend) (struct device *dev, pm_message_t state);
    int (*resume) (struct device *dev);
    //...
    const struct dev_pm_ops *pm;
    //...
}
include/linux/pm.h
struct dev_pm_ops {
    //...
    int (*suspend)(struct device *dev);
    int (*resume)(struct device *dev);
    //...
}

为什么会有这么多挂起和恢复函数指针?某种遗产?我应该为我的驱动程序使用哪一个?

我使用的是旧内核(2.6.35)

谢谢!

最佳答案

Why are there so many suspend and resume function pointers?


  • i2c_driver - 遗留支持。
  • device_driver - 标准支持。
  • dev_pm_ops - 扩展电源管理。

  • 请注意,它们都是函数指针。暂停和恢复有顺序。例如, i2c Controller 必须在设备之后暂停但之前恢复。

    Some kind of legacy thing?



    struct i2c_driver 是一种遗留机制。它在整个电力基础设施创建之前就已经存在。同样,某些配置可能会排除完整的 struct dev_pm_ops指针,但有 suspendresume司机 Hook 。完整的struct dev_pm_ops支持挂起到磁盘等功能。挂起到内存更常见,在 struct device_driver 中给予指针空间.如果 struct dev_pm_ops是非NULL,两个指针将是相同的。这两个应该在您的驱动程序中调用相同的例程。

    Which one should I use for my driver?



    你可能不应该使用它们中的任何一个。您的驱动程序很可能是其他子系统的一部分。见 备注 例如,i2c 用于编解码器,如 wm8940.c .通常,i2c 不是中央控制子系统。它是一个驱动程序,被其他东西用来控制芯片组。声音子系统会在 i2c 之前暂停,最好把你的钩子(Hook)放在那里。如果您的驱动程序是纯 i2c,则使用 pm.h 中的宏,如 SET_SYSTEM_SLEEP_PM_OPS条件化 dev_pm_ops 的设置;所以设置他们两个。很可能是 device_driver将被复制到 dev_pm_ops如果它存在,但明确地这样做会更好。

    driver-model , i2c power managementpower driver文档有更多关于结构和概述的信息。

    注:在这种情况下,有多个 device_driver结构。通常是 i2c_driver由控制驱动程序管理。控制驱动程序应该实现 suspend/resume因为它的子系统使用 i2c_driver界面。

    关于linux-kernel - 哪个挂起/恢复指针是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19462639/

    相关文章:

    linux - insmod 和 modprobe 有什么区别?

    ios - 基准测试 iPhone 应用程序电池使用情况的最佳方法?

    assembly - x86_64 Linux 函数和系统调用之间的 ABI 差异

    linux - 当抢占被禁用时,Linux 中如何处理 IRQ?

    c - 如何浏览C源代码?

    android - Android 1.5 中的服务器套接字编程,最省电的方式?

    android - 从 Android 手机获取可用的剩余电池时间

    android - 当 Droid/Nexus One 上的屏幕关闭时,加速度计停止提供样本,即使使用 WakeLock

    java - android 设备上 Intent.BATTERY_ACTION_CHANGED 时电池温度和电压的单位是什么?

    c - 从分散列表中检索字节