aboutsummaryrefslogtreecommitdiffstats
path: root/include/media
diff options
context:
space:
mode:
Diffstat (limited to 'include/media')
-rw-r--r--include/media/soc_camera.h52
1 files changed, 38 insertions, 14 deletions
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h
index c886b1e64872..3e48e435b21a 100644
--- a/include/media/soc_camera.h
+++ b/include/media/soc_camera.h
@@ -34,7 +34,7 @@ struct soc_camera_device {
34 unsigned short exposure; 34 unsigned short exposure;
35 unsigned char iface; /* Host number */ 35 unsigned char iface; /* Host number */
36 unsigned char devnum; /* Device number per host */ 36 unsigned char devnum; /* Device number per host */
37 unsigned char cached_datawidth; /* See comment in .c */ 37 unsigned char buswidth; /* See comment in .c */
38 struct soc_camera_ops *ops; 38 struct soc_camera_ops *ops;
39 struct video_device *vdev; 39 struct video_device *vdev;
40 const struct soc_camera_data_format *current_fmt; 40 const struct soc_camera_data_format *current_fmt;
@@ -61,11 +61,13 @@ struct soc_camera_host {
61 char *drv_name; 61 char *drv_name;
62 int (*add)(struct soc_camera_device *); 62 int (*add)(struct soc_camera_device *);
63 void (*remove)(struct soc_camera_device *); 63 void (*remove)(struct soc_camera_device *);
64 int (*set_capture_format)(struct soc_camera_device *, __u32, 64 int (*set_fmt_cap)(struct soc_camera_device *, __u32,
65 struct v4l2_rect *); 65 struct v4l2_rect *);
66 int (*try_fmt_cap)(struct soc_camera_host *, struct v4l2_format *); 66 int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *);
67 int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *); 67 int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *);
68 int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); 68 int (*querycap)(struct soc_camera_host *, struct v4l2_capability *);
69 int (*try_bus_param)(struct soc_camera_device *, __u32);
70 int (*set_bus_param)(struct soc_camera_device *, __u32);
69 unsigned int (*poll)(struct file *, poll_table *); 71 unsigned int (*poll)(struct file *, poll_table *);
70}; 72};
71 73
@@ -108,9 +110,11 @@ struct soc_camera_ops {
108 int (*release)(struct soc_camera_device *); 110 int (*release)(struct soc_camera_device *);
109 int (*start_capture)(struct soc_camera_device *); 111 int (*start_capture)(struct soc_camera_device *);
110 int (*stop_capture)(struct soc_camera_device *); 112 int (*stop_capture)(struct soc_camera_device *);
111 int (*set_capture_format)(struct soc_camera_device *, __u32, 113 int (*set_fmt_cap)(struct soc_camera_device *, __u32,
112 struct v4l2_rect *, unsigned int); 114 struct v4l2_rect *);
113 int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); 115 int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *);
116 unsigned long (*query_bus_param)(struct soc_camera_device *);
117 int (*set_bus_param)(struct soc_camera_device *, unsigned long);
114 int (*get_chip_id)(struct soc_camera_device *, 118 int (*get_chip_id)(struct soc_camera_device *,
115 struct v4l2_chip_ident *); 119 struct v4l2_chip_ident *);
116#ifdef CONFIG_VIDEO_ADV_DEBUG 120#ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -123,7 +127,6 @@ struct soc_camera_ops {
123 int (*set_control)(struct soc_camera_device *, struct v4l2_control *); 127 int (*set_control)(struct soc_camera_device *, struct v4l2_control *);
124 const struct v4l2_queryctrl *controls; 128 const struct v4l2_queryctrl *controls;
125 int num_controls; 129 int num_controls;
126 unsigned int(*get_datawidth)(struct soc_camera_device *icd);
127}; 130};
128 131
129static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( 132static inline struct v4l2_queryctrl const *soc_camera_find_qctrl(
@@ -138,12 +141,33 @@ static inline struct v4l2_queryctrl const *soc_camera_find_qctrl(
138 return NULL; 141 return NULL;
139} 142}
140 143
141#define IS_MASTER (1<<0) 144#define SOCAM_MASTER (1 << 0)
142#define IS_HSYNC_ACTIVE_HIGH (1<<1) 145#define SOCAM_SLAVE (1 << 1)
143#define IS_VSYNC_ACTIVE_HIGH (1<<2) 146#define SOCAM_HSYNC_ACTIVE_HIGH (1 << 2)
144#define IS_DATAWIDTH_8 (1<<3) 147#define SOCAM_HSYNC_ACTIVE_LOW (1 << 3)
145#define IS_DATAWIDTH_9 (1<<4) 148#define SOCAM_VSYNC_ACTIVE_HIGH (1 << 4)
146#define IS_DATAWIDTH_10 (1<<5) 149#define SOCAM_VSYNC_ACTIVE_LOW (1 << 5)
147#define IS_PCLK_SAMPLE_RISING (1<<6) 150#define SOCAM_DATAWIDTH_8 (1 << 6)
151#define SOCAM_DATAWIDTH_9 (1 << 7)
152#define SOCAM_DATAWIDTH_10 (1 << 8)
153#define SOCAM_PCLK_SAMPLE_RISING (1 << 9)
154#define SOCAM_PCLK_SAMPLE_FALLING (1 << 10)
155
156#define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_8 | SOCAM_DATAWIDTH_9 | \
157 SOCAM_DATAWIDTH_10)
158
159static inline unsigned long soc_camera_bus_param_compatible(
160 unsigned long camera_flags, unsigned long bus_flags)
161{
162 unsigned long common_flags, hsync, vsync, pclk;
163
164 common_flags = camera_flags & bus_flags;
165
166 hsync = common_flags & (SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW);
167 vsync = common_flags & (SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW);
168 pclk = common_flags & (SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING);
169
170 return (!hsync || !vsync || !pclk) ? 0 : common_flags;
171}
148 172
149#endif 173#endif