diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2009-04-01 02:41:09 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-04-06 20:44:20 -0400 |
commit | 78a3b4db2e53a1903c86e2856e175d85a3849e84 (patch) | |
tree | c22153691d3ab5210bc02bdc478b29a938e85dc5 | |
parent | b74c0aac357e5c71ee6de98b9887fe478bc73cf4 (diff) |
V4L/DVB (11367): v4l2-common: remove legacy code
Now that all drivers are converted to v4l2_subdev we can remove legacy code
in v4l2-common. Also move the documentation of the internal API to
v4l2-subdev.h where it really belongs.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | Documentation/video4linux/v4l2-framework.txt | 11 | ||||
-rw-r--r-- | drivers/media/video/v4l2-common.c | 27 | ||||
-rw-r--r-- | drivers/media/video/v4l2-ioctl.c | 34 | ||||
-rw-r--r-- | include/media/v4l2-common.h | 135 | ||||
-rw-r--r-- | include/media/v4l2-subdev.h | 107 |
5 files changed, 107 insertions, 207 deletions
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt index 4b54c629bc56..c9ae70a37a6c 100644 --- a/Documentation/video4linux/v4l2-framework.txt +++ b/Documentation/video4linux/v4l2-framework.txt | |||
@@ -351,17 +351,6 @@ And this to go from an i2c_client to a v4l2_subdev struct: | |||
351 | 351 | ||
352 | struct v4l2_subdev *sd = i2c_get_clientdata(client); | 352 | struct v4l2_subdev *sd = i2c_get_clientdata(client); |
353 | 353 | ||
354 | Finally you need to make a command function to make driver->command() | ||
355 | call the right subdev_ops functions: | ||
356 | |||
357 | static int subdev_command(struct i2c_client *client, unsigned cmd, void *arg) | ||
358 | { | ||
359 | return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg); | ||
360 | } | ||
361 | |||
362 | If driver->command is never used then you can leave this out. Eventually the | ||
363 | driver->command usage should be removed from v4l. | ||
364 | |||
365 | Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback | 354 | Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback |
366 | is called. This will unregister the sub-device from the bridge driver. It is | 355 | is called. This will unregister the sub-device from the bridge driver. It is |
367 | safe to call this even if the sub-device was never registered. | 356 | safe to call this even if the sub-device was never registered. |
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c index 1da8cb836cb6..f23a77473aaf 100644 --- a/drivers/media/video/v4l2-common.c +++ b/drivers/media/video/v4l2-common.c | |||
@@ -739,33 +739,8 @@ EXPORT_SYMBOL(v4l2_chip_ident_i2c_client); | |||
739 | 739 | ||
740 | /* ----------------------------------------------------------------- */ | 740 | /* ----------------------------------------------------------------- */ |
741 | 741 | ||
742 | /* Helper function for I2C legacy drivers */ | 742 | /* I2C Helper functions */ |
743 | 743 | ||
744 | int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver, | ||
745 | const char *name, | ||
746 | int (*probe)(struct i2c_client *, const struct i2c_device_id *)) | ||
747 | { | ||
748 | struct i2c_client *client; | ||
749 | int err; | ||
750 | |||
751 | client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
752 | if (!client) | ||
753 | return -ENOMEM; | ||
754 | |||
755 | client->addr = address; | ||
756 | client->adapter = adapter; | ||
757 | client->driver = driver; | ||
758 | strlcpy(client->name, name, sizeof(client->name)); | ||
759 | |||
760 | err = probe(client, NULL); | ||
761 | if (err == 0) { | ||
762 | i2c_attach_client(client); | ||
763 | } else { | ||
764 | kfree(client); | ||
765 | } | ||
766 | return err != -ENOMEM ? 0 : err; | ||
767 | } | ||
768 | EXPORT_SYMBOL(v4l2_i2c_attach); | ||
769 | 744 | ||
770 | void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, | 745 | void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, |
771 | const struct v4l2_subdev_ops *ops) | 746 | const struct v4l2_subdev_ops *ops) |
diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c index f41c6f506f42..88f10d6cbc92 100644 --- a/drivers/media/video/v4l2-ioctl.c +++ b/drivers/media/video/v4l2-ioctl.c | |||
@@ -275,32 +275,6 @@ static const char *v4l2_ioctls[] = { | |||
275 | }; | 275 | }; |
276 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) | 276 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) |
277 | 277 | ||
278 | static const char *v4l2_int_ioctls[] = { | ||
279 | [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO", | ||
280 | |||
281 | [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR", | ||
282 | [_IOC_NR(TUNER_SET_STANDBY)] = "TUNER_SET_STANDBY", | ||
283 | [_IOC_NR(TUNER_SET_CONFIG)] = "TUNER_SET_CONFIG", | ||
284 | |||
285 | [_IOC_NR(VIDIOC_INT_S_TUNER_MODE)] = "VIDIOC_INT_S_TUNER_MODE", | ||
286 | [_IOC_NR(VIDIOC_INT_RESET)] = "VIDIOC_INT_RESET", | ||
287 | [_IOC_NR(VIDIOC_INT_AUDIO_CLOCK_FREQ)] = "VIDIOC_INT_AUDIO_CLOCK_FREQ", | ||
288 | [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE", | ||
289 | [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA", | ||
290 | [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA", | ||
291 | [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ", | ||
292 | [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY", | ||
293 | [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING", | ||
294 | [_IOC_NR(VIDIOC_INT_G_AUDIO_ROUTING)] = "VIDIOC_INT_G_AUDIO_ROUTING", | ||
295 | [_IOC_NR(VIDIOC_INT_S_VIDEO_ROUTING)] = "VIDIOC_INT_S_VIDEO_ROUTING", | ||
296 | [_IOC_NR(VIDIOC_INT_G_VIDEO_ROUTING)] = "VIDIOC_INT_G_VIDEO_ROUTING", | ||
297 | [_IOC_NR(VIDIOC_INT_S_CRYSTAL_FREQ)] = "VIDIOC_INT_S_CRYSTAL_FREQ", | ||
298 | [_IOC_NR(VIDIOC_INT_INIT)] = "VIDIOC_INT_INIT", | ||
299 | [_IOC_NR(VIDIOC_INT_G_STD_OUTPUT)] = "VIDIOC_INT_G_STD_OUTPUT", | ||
300 | [_IOC_NR(VIDIOC_INT_S_STD_OUTPUT)] = "VIDIOC_INT_S_STD_OUTPUT", | ||
301 | }; | ||
302 | #define V4L2_INT_IOCTLS ARRAY_SIZE(v4l2_int_ioctls) | ||
303 | |||
304 | /* Common ioctl debug function. This function can be used by | 278 | /* Common ioctl debug function. This function can be used by |
305 | external ioctl messages as well as internal V4L ioctl */ | 279 | external ioctl messages as well as internal V4L ioctl */ |
306 | void v4l_printk_ioctl(unsigned int cmd) | 280 | void v4l_printk_ioctl(unsigned int cmd) |
@@ -309,12 +283,8 @@ void v4l_printk_ioctl(unsigned int cmd) | |||
309 | 283 | ||
310 | switch (_IOC_TYPE(cmd)) { | 284 | switch (_IOC_TYPE(cmd)) { |
311 | case 'd': | 285 | case 'd': |
312 | if (_IOC_NR(cmd) >= V4L2_INT_IOCTLS) { | 286 | type = "v4l2_int"; |
313 | type = "v4l2_int"; | 287 | break; |
314 | break; | ||
315 | } | ||
316 | printk("%s", v4l2_int_ioctls[_IOC_NR(cmd)]); | ||
317 | return; | ||
318 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | 288 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
319 | case 'v': | 289 | case 'v': |
320 | if (_IOC_NR(cmd) >= V4L1_IOCTLS) { | 290 | if (_IOC_NR(cmd) >= V4L1_IOCTLS) { |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 3a6905615d68..8ec50fea9e0d 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
@@ -125,7 +125,7 @@ int v4l2_chip_match_host(const struct v4l2_dbg_match *match); | |||
125 | 125 | ||
126 | /* ------------------------------------------------------------------------- */ | 126 | /* ------------------------------------------------------------------------- */ |
127 | 127 | ||
128 | /* Helper function for I2C legacy drivers */ | 128 | /* I2C Helper functions */ |
129 | 129 | ||
130 | struct i2c_driver; | 130 | struct i2c_driver; |
131 | struct i2c_adapter; | 131 | struct i2c_adapter; |
@@ -135,9 +135,6 @@ struct v4l2_device; | |||
135 | struct v4l2_subdev; | 135 | struct v4l2_subdev; |
136 | struct v4l2_subdev_ops; | 136 | struct v4l2_subdev_ops; |
137 | 137 | ||
138 | int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver, | ||
139 | const char *name, | ||
140 | int (*probe)(struct i2c_client *, const struct i2c_device_id *)); | ||
141 | 138 | ||
142 | /* Load an i2c module and return an initialized v4l2_subdev struct. | 139 | /* Load an i2c module and return an initialized v4l2_subdev struct. |
143 | Only call request_module if module_name != NULL. | 140 | Only call request_module if module_name != NULL. |
@@ -171,139 +168,25 @@ const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); | |||
171 | 168 | ||
172 | /* ------------------------------------------------------------------------- */ | 169 | /* ------------------------------------------------------------------------- */ |
173 | 170 | ||
174 | /* Internal ioctls */ | 171 | /* Note: these remaining ioctls should be removed as well, but they are still |
175 | 172 | used in tuner-simple.c (TUNER_SET_CONFIG) and cx18/ivtv (RESET and | |
176 | /* VIDIOC_INT_DECODE_VBI_LINE */ | 173 | S_AUDIO_ROUTING). To remove these ioctls some more cleanup is needed in |
177 | struct v4l2_decode_vbi_line { | 174 | those modules. */ |
178 | u32 is_second_field; /* Set to 0 for the first (odd) field, | ||
179 | set to 1 for the second (even) field. */ | ||
180 | u8 *p; /* Pointer to the sliced VBI data from the decoder. | ||
181 | On exit points to the start of the payload. */ | ||
182 | u32 line; /* Line number of the sliced VBI data (1-23) */ | ||
183 | u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ | ||
184 | }; | ||
185 | 175 | ||
176 | /* s_config */ | ||
186 | struct v4l2_priv_tun_config { | 177 | struct v4l2_priv_tun_config { |
187 | int tuner; | 178 | int tuner; |
188 | void *priv; | 179 | void *priv; |
189 | }; | 180 | }; |
190 | |||
191 | /* audio ioctls */ | ||
192 | |||
193 | /* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */ | ||
194 | #define AUDC_SET_RADIO _IO('d',88) | ||
195 | |||
196 | /* tuner ioctls */ | ||
197 | |||
198 | /* Sets tuner type and its I2C addr */ | ||
199 | #define TUNER_SET_TYPE_ADDR _IOW('d', 90, int) | ||
200 | |||
201 | /* Puts tuner on powersaving state, disabling it, except for i2c. To be replaced | ||
202 | by VIDIOC_INT_S_STANDBY. */ | ||
203 | #define TUNER_SET_STANDBY _IOW('d', 91, int) | ||
204 | |||
205 | /* Sets tda9887 specific stuff, like port1, port2 and qss */ | ||
206 | #define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) | 181 | #define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) |
207 | 182 | ||
208 | /* Switch the tuner to a specific tuner mode. Replacement of AUDC_SET_RADIO */ | 183 | /* s_routing: routing definition, device dependent. It specifies which inputs |
209 | #define VIDIOC_INT_S_TUNER_MODE _IOW('d', 93, enum v4l2_tuner_type) | 184 | (if any) should be routed to which outputs (if any). */ |
210 | |||
211 | /* Generic standby command. Passing -1 (all bits set to 1) will put the whole | ||
212 | chip into standby mode, value 0 will make the chip fully active. Specific | ||
213 | bits can be used by certain chips to enable/disable specific subsystems. | ||
214 | Replacement of TUNER_SET_STANDBY. */ | ||
215 | #define VIDIOC_INT_S_STANDBY _IOW('d', 94, u32) | ||
216 | |||
217 | /* 100, 101 used by VIDIOC_DBG_[SG]_REGISTER */ | ||
218 | |||
219 | /* Generic reset command. The argument selects which subsystems to reset. | ||
220 | Passing 0 will always reset the whole chip. */ | ||
221 | #define VIDIOC_INT_RESET _IOW ('d', 102, u32) | ||
222 | |||
223 | /* Set the frequency (in Hz) of the audio clock output. | ||
224 | Used to slave an audio processor to the video decoder, ensuring that audio | ||
225 | and video remain synchronized. | ||
226 | Usual values for the frequency are 48000, 44100 or 32000 Hz. | ||
227 | If the frequency is not supported, then -EINVAL is returned. */ | ||
228 | #define VIDIOC_INT_AUDIO_CLOCK_FREQ _IOW ('d', 103, u32) | ||
229 | |||
230 | /* Video decoders that support sliced VBI need to implement this ioctl. | ||
231 | Field p of the v4l2_sliced_vbi_line struct is set to the start of the VBI | ||
232 | data that was generated by the decoder. The driver then parses the sliced | ||
233 | VBI data and sets the other fields in the struct accordingly. The pointer p | ||
234 | is updated to point to the start of the payload which can be copied | ||
235 | verbatim into the data field of the v4l2_sliced_vbi_data struct. If no | ||
236 | valid VBI data was found, then the type field is set to 0 on return. */ | ||
237 | #define VIDIOC_INT_DECODE_VBI_LINE _IOWR('d', 104, struct v4l2_decode_vbi_line) | ||
238 | |||
239 | /* Used to generate VBI signals on a video signal. v4l2_sliced_vbi_data is | ||
240 | filled with the data packets that should be output. Note that if you set | ||
241 | the line field to 0, then that VBI signal is disabled. If no | ||
242 | valid VBI data was found, then the type field is set to 0 on return. */ | ||
243 | #define VIDIOC_INT_S_VBI_DATA _IOW ('d', 105, struct v4l2_sliced_vbi_data) | ||
244 | |||
245 | /* Used to obtain the sliced VBI packet from a readback register. Not all | ||
246 | video decoders support this. If no data is available because the readback | ||
247 | register contains invalid or erroneous data -EIO is returned. Note that | ||
248 | you must fill in the 'id' member and the 'field' member (to determine | ||
249 | whether CC data from the first or second field should be obtained). */ | ||
250 | #define VIDIOC_INT_G_VBI_DATA _IOWR('d', 106, struct v4l2_sliced_vbi_data) | ||
251 | |||
252 | /* Sets I2S speed in bps. This is used to provide a standard way to select I2S | ||
253 | clock used by driving digital audio streams at some board designs. | ||
254 | Usual values for the frequency are 1024000 and 2048000. | ||
255 | If the frequency is not supported, then -EINVAL is returned. */ | ||
256 | #define VIDIOC_INT_I2S_CLOCK_FREQ _IOW ('d', 108, u32) | ||
257 | |||
258 | /* Routing definition, device dependent. It specifies which inputs (if any) | ||
259 | should be routed to which outputs (if any). */ | ||
260 | struct v4l2_routing { | 185 | struct v4l2_routing { |
261 | u32 input; | 186 | u32 input; |
262 | u32 output; | 187 | u32 output; |
263 | }; | 188 | }; |
264 | |||
265 | /* These internal commands should be used to define the inputs and outputs | ||
266 | of an audio/video chip. They will replace the v4l2 API commands | ||
267 | VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT | ||
268 | that are meant to be used by the user. | ||
269 | The internal commands should be used to switch inputs/outputs | ||
270 | because only the driver knows how to map a 'Television' input to the precise | ||
271 | input/output routing of an A/D converter, or a DSP, or a video digitizer. | ||
272 | These four commands should only be sent directly to an i2c device, they | ||
273 | should not be broadcast as the routing is very device specific. */ | ||
274 | #define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing) | 189 | #define VIDIOC_INT_S_AUDIO_ROUTING _IOW ('d', 109, struct v4l2_routing) |
275 | #define VIDIOC_INT_G_AUDIO_ROUTING _IOR ('d', 110, struct v4l2_routing) | 190 | #define VIDIOC_INT_RESET _IOW ('d', 102, u32) |
276 | #define VIDIOC_INT_S_VIDEO_ROUTING _IOW ('d', 111, struct v4l2_routing) | ||
277 | #define VIDIOC_INT_G_VIDEO_ROUTING _IOR ('d', 112, struct v4l2_routing) | ||
278 | |||
279 | struct v4l2_crystal_freq { | ||
280 | u32 freq; /* frequency in Hz of the crystal */ | ||
281 | u32 flags; /* device specific flags */ | ||
282 | }; | ||
283 | |||
284 | /* Sets the frequency of the crystal used to generate the clocks. | ||
285 | An extra flags field allows device specific configuration regarding | ||
286 | clock frequency dividers, etc. If not used, then set flags to 0. | ||
287 | If the frequency is not supported, then -EINVAL is returned. */ | ||
288 | #define VIDIOC_INT_S_CRYSTAL_FREQ _IOW('d', 113, struct v4l2_crystal_freq) | ||
289 | |||
290 | /* Initialize the sensor registors to some sort of reasonable | ||
291 | default values. */ | ||
292 | #define VIDIOC_INT_INIT _IOW('d', 114, u32) | ||
293 | |||
294 | /* Set v4l2_std_id for video OUTPUT devices. This is ignored by | ||
295 | video input devices. */ | ||
296 | #define VIDIOC_INT_S_STD_OUTPUT _IOW('d', 115, v4l2_std_id) | ||
297 | |||
298 | /* Get v4l2_std_id for video OUTPUT devices. This is ignored by | ||
299 | video input devices. */ | ||
300 | #define VIDIOC_INT_G_STD_OUTPUT _IOW('d', 116, v4l2_std_id) | ||
301 | |||
302 | /* Set GPIO pins. Very simple right now, might need to be extended with | ||
303 | a v4l2_gpio struct if a direction is also needed. */ | ||
304 | #define VIDIOC_INT_S_GPIO _IOW('d', 117, u32) | ||
305 | |||
306 | /* Get input status. Same as the status field in the v4l2_input struct. */ | ||
307 | #define VIDIOC_INT_G_INPUT_STATUS _IOR('d', 118, u32) | ||
308 | 191 | ||
309 | #endif /* V4L2_COMMON_H_ */ | 192 | #endif /* V4L2_COMMON_H_ */ |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 1d181b4ccb01..9a8535be1edf 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -27,6 +27,22 @@ struct v4l2_device; | |||
27 | struct v4l2_subdev; | 27 | struct v4l2_subdev; |
28 | struct tuner_setup; | 28 | struct tuner_setup; |
29 | 29 | ||
30 | /* decode_vbi_line */ | ||
31 | struct v4l2_decode_vbi_line { | ||
32 | u32 is_second_field; /* Set to 0 for the first (odd) field, | ||
33 | set to 1 for the second (even) field. */ | ||
34 | u8 *p; /* Pointer to the sliced VBI data from the decoder. | ||
35 | On exit points to the start of the payload. */ | ||
36 | u32 line; /* Line number of the sliced VBI data (1-23) */ | ||
37 | u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */ | ||
38 | }; | ||
39 | |||
40 | /* s_crystal_freq */ | ||
41 | struct v4l2_crystal_freq { | ||
42 | u32 freq; /* frequency in Hz of the crystal */ | ||
43 | u32 flags; /* device specific flags */ | ||
44 | }; | ||
45 | |||
30 | /* Sub-devices are devices that are connected somehow to the main bridge | 46 | /* Sub-devices are devices that are connected somehow to the main bridge |
31 | device. These devices are usually audio/video muxers/encoders/decoders or | 47 | device. These devices are usually audio/video muxers/encoders/decoders or |
32 | sensors and webcam controllers. | 48 | sensors and webcam controllers. |
@@ -68,6 +84,21 @@ struct tuner_setup; | |||
68 | the use-case it might be better to use subdev-specific ops (currently | 84 | the use-case it might be better to use subdev-specific ops (currently |
69 | not yet implemented) since ops provide proper type-checking. | 85 | not yet implemented) since ops provide proper type-checking. |
70 | */ | 86 | */ |
87 | |||
88 | /* init: initialize the sensor registors to some sort of reasonable default | ||
89 | values. Do not use for new drivers and should be removed in existing | ||
90 | drivers. | ||
91 | |||
92 | reset: generic reset command. The argument selects which subsystems to | ||
93 | reset. Passing 0 will always reset the whole chip. Do not use for new | ||
94 | drivers without discussing this first on the linux-media mailinglist. | ||
95 | There should be no reason normally to reset a device. | ||
96 | |||
97 | s_gpio: set GPIO pins. Very simple right now, might need to be extended with | ||
98 | a direction argument if needed. | ||
99 | |||
100 | s_standby: puts tuner on powersaving state, disabling it, except for i2c. | ||
101 | */ | ||
71 | struct v4l2_subdev_core_ops { | 102 | struct v4l2_subdev_core_ops { |
72 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); | 103 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); |
73 | int (*log_status)(struct v4l2_subdev *sd); | 104 | int (*log_status)(struct v4l2_subdev *sd); |
@@ -89,6 +120,14 @@ struct v4l2_subdev_core_ops { | |||
89 | #endif | 120 | #endif |
90 | }; | 121 | }; |
91 | 122 | ||
123 | /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio. | ||
124 | |||
125 | s_radio: v4l device was opened in Radio mode, to be replaced by s_mode. | ||
126 | |||
127 | s_type_addr: sets tuner type and its I2C addr. | ||
128 | |||
129 | s_config: sets tda9887 specific stuff, like port1, port2 and qss | ||
130 | */ | ||
92 | struct v4l2_subdev_tuner_ops { | 131 | struct v4l2_subdev_tuner_ops { |
93 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); | 132 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); |
94 | int (*s_radio)(struct v4l2_subdev *sd); | 133 | int (*s_radio)(struct v4l2_subdev *sd); |
@@ -101,12 +140,68 @@ struct v4l2_subdev_tuner_ops { | |||
101 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); | 140 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); |
102 | }; | 141 | }; |
103 | 142 | ||
143 | /* s_clock_freq: set the frequency (in Hz) of the audio clock output. | ||
144 | Used to slave an audio processor to the video decoder, ensuring that | ||
145 | audio and video remain synchronized. Usual values for the frequency | ||
146 | are 48000, 44100 or 32000 Hz. If the frequency is not supported, then | ||
147 | -EINVAL is returned. | ||
148 | |||
149 | s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard | ||
150 | way to select I2S clock used by driving digital audio streams at some | ||
151 | board designs. Usual values for the frequency are 1024000 and 2048000. | ||
152 | If the frequency is not supported, then -EINVAL is returned. | ||
153 | |||
154 | s_routing: used to define the input and/or output pins of an audio chip. | ||
155 | Never attempt to use user-level input IDs (e.g. Composite, S-Video, | ||
156 | Tuner) at this level. An i2c device shouldn't know about whether an | ||
157 | input pin is connected to a Composite connector, become on another | ||
158 | board or platform it might be connected to something else entirely. | ||
159 | The calling driver is responsible for mapping a user-level input to | ||
160 | the right pins on the i2c device. | ||
161 | */ | ||
104 | struct v4l2_subdev_audio_ops { | 162 | struct v4l2_subdev_audio_ops { |
105 | int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); | 163 | int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq); |
106 | int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); | 164 | int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq); |
107 | int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); | 165 | int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); |
108 | }; | 166 | }; |
109 | 167 | ||
168 | /* | ||
169 | decode_vbi_line: video decoders that support sliced VBI need to implement | ||
170 | this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the | ||
171 | start of the VBI data that was generated by the decoder. The driver | ||
172 | then parses the sliced VBI data and sets the other fields in the | ||
173 | struct accordingly. The pointer p is updated to point to the start of | ||
174 | the payload which can be copied verbatim into the data field of the | ||
175 | v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the | ||
176 | type field is set to 0 on return. | ||
177 | |||
178 | s_vbi_data: used to generate VBI signals on a video signal. | ||
179 | v4l2_sliced_vbi_data is filled with the data packets that should be | ||
180 | output. Note that if you set the line field to 0, then that VBI signal | ||
181 | is disabled. If no valid VBI data was found, then the type field is | ||
182 | set to 0 on return. | ||
183 | |||
184 | g_vbi_data: used to obtain the sliced VBI packet from a readback register. | ||
185 | Not all video decoders support this. If no data is available because | ||
186 | the readback register contains invalid or erroneous data -EIO is | ||
187 | returned. Note that you must fill in the 'id' member and the 'field' | ||
188 | member (to determine whether CC data from the first or second field | ||
189 | should be obtained). | ||
190 | |||
191 | s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by | ||
192 | video input devices. | ||
193 | |||
194 | s_crystal_freq: sets the frequency of the crystal used to generate the | ||
195 | clocks. An extra flags field allows device specific configuration | ||
196 | regarding clock frequency dividers, etc. If not used, then set flags | ||
197 | to 0. If the frequency is not supported, then -EINVAL is returned. | ||
198 | |||
199 | g_input_status: get input status. Same as the status field in the v4l2_input | ||
200 | struct. | ||
201 | |||
202 | s_routing: see s_routing in audio_ops, except this version is for video | ||
203 | devices. | ||
204 | */ | ||
110 | struct v4l2_subdev_video_ops { | 205 | struct v4l2_subdev_video_ops { |
111 | int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); | 206 | int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route); |
112 | int (*s_crystal_freq)(struct v4l2_subdev *sd, struct v4l2_crystal_freq *freq); | 207 | int (*s_crystal_freq)(struct v4l2_subdev *sd, struct v4l2_crystal_freq *freq); |
@@ -163,18 +258,6 @@ static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd) | |||
163 | return sd->priv; | 258 | return sd->priv; |
164 | } | 259 | } |
165 | 260 | ||
166 | /* Convert an ioctl-type command to the proper v4l2_subdev_ops function call. | ||
167 | This is used by subdev modules that can be called by both old-style ioctl | ||
168 | commands and through the v4l2_subdev_ops. | ||
169 | |||
170 | The ioctl API of the subdev driver can call this function to call the | ||
171 | right ops based on the ioctl cmd and arg. | ||
172 | |||
173 | Once all subdev drivers have been converted and all drivers no longer | ||
174 | use the ioctl interface, then this function can be removed. | ||
175 | */ | ||
176 | int v4l2_subdev_command(struct v4l2_subdev *sd, unsigned cmd, void *arg); | ||
177 | |||
178 | static inline void v4l2_subdev_init(struct v4l2_subdev *sd, | 261 | static inline void v4l2_subdev_init(struct v4l2_subdev *sd, |
179 | const struct v4l2_subdev_ops *ops) | 262 | const struct v4l2_subdev_ops *ops) |
180 | { | 263 | { |