diff options
-rw-r--r-- | drivers/media/video/soc_camera.c | 26 | ||||
-rw-r--r-- | include/media/soc_camera.h | 5 |
2 files changed, 31 insertions, 0 deletions
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index b6be5ee678b6..66ebe5956a87 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c | |||
@@ -732,10 +732,36 @@ static int soc_camera_remove(struct device *dev) | |||
732 | return 0; | 732 | return 0; |
733 | } | 733 | } |
734 | 734 | ||
735 | static int soc_camera_suspend(struct device *dev, pm_message_t state) | ||
736 | { | ||
737 | struct soc_camera_device *icd = to_soc_camera_dev(dev); | ||
738 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | ||
739 | int ret = 0; | ||
740 | |||
741 | if (ici->ops->suspend) | ||
742 | ret = ici->ops->suspend(icd, state); | ||
743 | |||
744 | return ret; | ||
745 | } | ||
746 | |||
747 | static int soc_camera_resume(struct device *dev) | ||
748 | { | ||
749 | struct soc_camera_device *icd = to_soc_camera_dev(dev); | ||
750 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | ||
751 | int ret = 0; | ||
752 | |||
753 | if (ici->ops->resume) | ||
754 | ret = ici->ops->resume(icd); | ||
755 | |||
756 | return ret; | ||
757 | } | ||
758 | |||
735 | static struct bus_type soc_camera_bus_type = { | 759 | static struct bus_type soc_camera_bus_type = { |
736 | .name = "soc-camera", | 760 | .name = "soc-camera", |
737 | .probe = soc_camera_probe, | 761 | .probe = soc_camera_probe, |
738 | .remove = soc_camera_remove, | 762 | .remove = soc_camera_remove, |
763 | .suspend = soc_camera_suspend, | ||
764 | .resume = soc_camera_resume, | ||
739 | }; | 765 | }; |
740 | 766 | ||
741 | static struct device_driver ic_drv = { | 767 | static struct device_driver ic_drv = { |
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 1de98f150e99..d548de326722 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/videodev2.h> | 15 | #include <linux/videodev2.h> |
16 | #include <media/videobuf-core.h> | 16 | #include <media/videobuf-core.h> |
17 | #include <linux/pm.h> | ||
17 | 18 | ||
18 | struct soc_camera_device { | 19 | struct soc_camera_device { |
19 | struct list_head list; | 20 | struct list_head list; |
@@ -63,6 +64,8 @@ struct soc_camera_host_ops { | |||
63 | struct module *owner; | 64 | struct module *owner; |
64 | int (*add)(struct soc_camera_device *); | 65 | int (*add)(struct soc_camera_device *); |
65 | void (*remove)(struct soc_camera_device *); | 66 | void (*remove)(struct soc_camera_device *); |
67 | int (*suspend)(struct soc_camera_device *, pm_message_t state); | ||
68 | int (*resume)(struct soc_camera_device *); | ||
66 | int (*set_fmt_cap)(struct soc_camera_device *, __u32, | 69 | int (*set_fmt_cap)(struct soc_camera_device *, __u32, |
67 | struct v4l2_rect *); | 70 | struct v4l2_rect *); |
68 | int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); | 71 | int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); |
@@ -111,6 +114,8 @@ struct soc_camera_ops { | |||
111 | struct module *owner; | 114 | struct module *owner; |
112 | int (*probe)(struct soc_camera_device *); | 115 | int (*probe)(struct soc_camera_device *); |
113 | void (*remove)(struct soc_camera_device *); | 116 | void (*remove)(struct soc_camera_device *); |
117 | int (*suspend)(struct soc_camera_device *, pm_message_t state); | ||
118 | int (*resume)(struct soc_camera_device *); | ||
114 | int (*init)(struct soc_camera_device *); | 119 | int (*init)(struct soc_camera_device *); |
115 | int (*release)(struct soc_camera_device *); | 120 | int (*release)(struct soc_camera_device *); |
116 | int (*start_capture)(struct soc_camera_device *); | 121 | int (*start_capture)(struct soc_camera_device *); |