list_del(&dev->devlist);
        mutex_unlock(&em28xx_devlist_mutex);
 }
+
+int em28xx_suspend_extension(struct em28xx *dev)
+{
+       const struct em28xx_ops *ops = NULL;
+
+       em28xx_info("Suspending extensions");
+       mutex_lock(&em28xx_devlist_mutex);
+       list_for_each_entry(ops, &em28xx_extension_devlist, next) {
+               if (ops->suspend)
+                       ops->suspend(dev);
+       }
+       mutex_unlock(&em28xx_devlist_mutex);
+       return 0;
+}
+
+int em28xx_resume_extension(struct em28xx *dev)
+{
+       const struct em28xx_ops *ops = NULL;
+
+       em28xx_info("Resuming extensions");
+       mutex_lock(&em28xx_devlist_mutex);
+       list_for_each_entry(ops, &em28xx_extension_devlist, next) {
+               if (ops->resume)
+                       ops->resume(dev);
+       }
+       mutex_unlock(&em28xx_devlist_mutex);
+       return 0;
+}
 
        int id;
        int (*init)(struct em28xx *);
        int (*fini)(struct em28xx *);
+       int (*suspend)(struct em28xx *);
+       int (*resume)(struct em28xx *);
 };
 
 /* Provided by em28xx-i2c.c */
 void em28xx_unregister_extension(struct em28xx_ops *dev);
 void em28xx_init_extension(struct em28xx *dev);
 void em28xx_close_extension(struct em28xx *dev);
+int em28xx_suspend_extension(struct em28xx *dev);
+int em28xx_resume_extension(struct em28xx *dev);
 
 /* Provided by em28xx-cards.c */
 extern struct em28xx_board em28xx_boards[];