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

Linux kernel 哪个挂起/恢复指针是正确的?,linux-kernel,power-management,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/d

我正在研究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)

谢谢

为什么有这么多挂起和恢复函数指针

  • i2c\u驱动程序
    -传统支持
  • 设备驱动程序
    -标准支持
  • dev\u pm\u ops
    -扩展电源管理
  • 请注意,它们都是函数指针。有暂停和恢复的顺序。例如,i2c控制器必须在设备之后暂停,但在设备之前恢复

    什么遗产

    这是一种传统的机械。它在整个电力基础设施建立之前就存在了。此外,某些配置可能会排除完整的
    结构开发pmu ops
    指针,但具有
    挂起
    恢复
    驱动程序挂钩。完整的
    struct dev_pm_ops
    支持挂起到磁盘和其他功能。挂起到内存更为常见,在
    struct device\u驱动程序中为指针提供了空间。如果
    struct dev_pm_ops
    为非空,则两个指针将相同。这两个应该在驱动程序中调用相同的例程

    我的司机应该用哪一个

    你可能不应该使用它们中的任何一个。您的驱动程序很可能是其他子系统的一部分。请参见注意例如,i2c用于编解码器,如。通常,i2c不是中央控制子系统。它是一个被其他东西用来控制芯片组的驱动程序。音响子系统将在i2c之前暂停,最好将挂钩放在那里。如果您的驱动程序是纯i2c,则使用中的宏,如
    SET\u SYSTEM\u SLEEP\u PM\u OPS
    dev\u PM\u OPS
    的设置进行条件化;所以把它们都设定好。如果存在
    设备驱动程序
    ,则很可能会将其复制到
    开发项目管理操作
    ,但显式执行会更好

    和文档中有关于结构和概述的更多信息

    注意:在这种情况下,有多个
    设备驱动程序
    结构。通常,
    i2c_驱动程序
    由控制驱动程序管理。控制驱动程序应为其子系统执行
    暂停
    /
    恢复
    ,该子系统使用
    i2c_驱动程序
    接口。

    是一个封闭问题,可能有助于理解注释部分。