Driver core: add ability for classes to handle devices properly
[pandora-kernel.git] / include / linux / device.h
index 1e5f30d..3122bd2 100644 (file)
@@ -51,8 +51,11 @@ struct bus_type {
        int             (*probe)(struct device * dev);
        int             (*remove)(struct device * dev);
        void            (*shutdown)(struct device * dev);
-       int             (*suspend)(struct device * dev, pm_message_t state);
-       int             (*resume)(struct device * dev);
+
+       int (*suspend)(struct device * dev, pm_message_t state);
+       int (*suspend_late)(struct device * dev, pm_message_t state);
+       int (*resume_early)(struct device * dev);
+       int (*resume)(struct device * dev);
 };
 
 extern int bus_register(struct bus_type * bus);
@@ -148,12 +151,19 @@ struct class {
 
        struct class_attribute          * class_attrs;
        struct class_device_attribute   * class_dev_attrs;
+       struct device_attribute         * dev_attrs;
 
        int     (*uevent)(struct class_device *dev, char **envp,
                           int num_envp, char *buffer, int buffer_size);
+       int     (*dev_uevent)(struct device *dev, char **envp, int num_envp,
+                               char *buffer, int buffer_size);
 
        void    (*release)(struct class_device *dev);
        void    (*class_release)(struct class *class);
+       void    (*dev_release)(struct device *dev);
+
+       int     (*suspend)(struct device *, pm_message_t state);
+       int     (*resume)(struct device *);
 };
 
 extern int class_register(struct class *);
@@ -271,13 +281,13 @@ struct class_interface {
 extern int class_interface_register(struct class_interface *);
 extern void class_interface_unregister(struct class_interface *);
 
-extern struct class *class_create(struct module *owner, char *name);
+extern struct class *class_create(struct module *owner, const char *name);
 extern void class_destroy(struct class *cls);
 extern struct class_device *class_device_create(struct class *cls,
                                                struct class_device *parent,
                                                dev_t devt,
                                                struct device *device,
-                                               char *fmt, ...)
+                                               const char *fmt, ...)
                                        __attribute__((format(printf,5,6)));
 extern void class_device_destroy(struct class *cls, dev_t devt);
 
@@ -338,6 +348,7 @@ struct device {
        struct list_head        node;
        struct class            *class;         /* optional*/
        dev_t                   devt;           /* dev_t, creates the sysfs "dev" */
+       struct attribute_group  **groups;       /* optional groups */
 
        void    (*release)(struct device * dev);
 };
@@ -384,7 +395,7 @@ extern void device_reprobe(struct device *dev);
  * Easy functions for dynamically creating devices on the fly
  */
 extern struct device *device_create(struct class *cls, struct device *parent,
-                                   dev_t devt, char *fmt, ...)
+                                   dev_t devt, const char *fmt, ...)
                                    __attribute__((format(printf,4,5)));
 extern void device_destroy(struct class *cls, dev_t devt);