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>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
b74c0aac35
commit
78a3b4db2e
@ -27,6 +27,22 @@ struct v4l2_device;
|
||||
struct v4l2_subdev;
|
||||
struct tuner_setup;
|
||||
|
||||
/* decode_vbi_line */
|
||||
struct v4l2_decode_vbi_line {
|
||||
u32 is_second_field; /* Set to 0 for the first (odd) field,
|
||||
set to 1 for the second (even) field. */
|
||||
u8 *p; /* Pointer to the sliced VBI data from the decoder.
|
||||
On exit points to the start of the payload. */
|
||||
u32 line; /* Line number of the sliced VBI data (1-23) */
|
||||
u32 type; /* VBI service type (V4L2_SLICED_*). 0 if no service found */
|
||||
};
|
||||
|
||||
/* s_crystal_freq */
|
||||
struct v4l2_crystal_freq {
|
||||
u32 freq; /* frequency in Hz of the crystal */
|
||||
u32 flags; /* device specific flags */
|
||||
};
|
||||
|
||||
/* Sub-devices are devices that are connected somehow to the main bridge
|
||||
device. These devices are usually audio/video muxers/encoders/decoders or
|
||||
sensors and webcam controllers.
|
||||
@ -68,6 +84,21 @@ struct tuner_setup;
|
||||
the use-case it might be better to use subdev-specific ops (currently
|
||||
not yet implemented) since ops provide proper type-checking.
|
||||
*/
|
||||
|
||||
/* init: initialize the sensor registors to some sort of reasonable default
|
||||
values. Do not use for new drivers and should be removed in existing
|
||||
drivers.
|
||||
|
||||
reset: generic reset command. The argument selects which subsystems to
|
||||
reset. Passing 0 will always reset the whole chip. Do not use for new
|
||||
drivers without discussing this first on the linux-media mailinglist.
|
||||
There should be no reason normally to reset a device.
|
||||
|
||||
s_gpio: set GPIO pins. Very simple right now, might need to be extended with
|
||||
a direction argument if needed.
|
||||
|
||||
s_standby: puts tuner on powersaving state, disabling it, except for i2c.
|
||||
*/
|
||||
struct v4l2_subdev_core_ops {
|
||||
int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip);
|
||||
int (*log_status)(struct v4l2_subdev *sd);
|
||||
@ -89,6 +120,14 @@ struct v4l2_subdev_core_ops {
|
||||
#endif
|
||||
};
|
||||
|
||||
/* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio.
|
||||
|
||||
s_radio: v4l device was opened in Radio mode, to be replaced by s_mode.
|
||||
|
||||
s_type_addr: sets tuner type and its I2C addr.
|
||||
|
||||
s_config: sets tda9887 specific stuff, like port1, port2 and qss
|
||||
*/
|
||||
struct v4l2_subdev_tuner_ops {
|
||||
int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type);
|
||||
int (*s_radio)(struct v4l2_subdev *sd);
|
||||
@ -101,12 +140,68 @@ struct v4l2_subdev_tuner_ops {
|
||||
int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
|
||||
};
|
||||
|
||||
/* s_clock_freq: set the frequency (in Hz) of the audio clock output.
|
||||
Used to slave an audio processor to the video decoder, ensuring that
|
||||
audio and video remain synchronized. Usual values for the frequency
|
||||
are 48000, 44100 or 32000 Hz. If the frequency is not supported, then
|
||||
-EINVAL is returned.
|
||||
|
||||
s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard
|
||||
way to select I2S clock used by driving digital audio streams at some
|
||||
board designs. Usual values for the frequency are 1024000 and 2048000.
|
||||
If the frequency is not supported, then -EINVAL is returned.
|
||||
|
||||
s_routing: used to define the input and/or output pins of an audio chip.
|
||||
Never attempt to use user-level input IDs (e.g. Composite, S-Video,
|
||||
Tuner) at this level. An i2c device shouldn't know about whether an
|
||||
input pin is connected to a Composite connector, become on another
|
||||
board or platform it might be connected to something else entirely.
|
||||
The calling driver is responsible for mapping a user-level input to
|
||||
the right pins on the i2c device.
|
||||
*/
|
||||
struct v4l2_subdev_audio_ops {
|
||||
int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
|
||||
int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
|
||||
int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route);
|
||||
};
|
||||
|
||||
/*
|
||||
decode_vbi_line: video decoders that support sliced VBI need to implement
|
||||
this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the
|
||||
start of the VBI data that was generated by the decoder. The driver
|
||||
then parses the sliced VBI data and sets the other fields in the
|
||||
struct accordingly. The pointer p is updated to point to the start of
|
||||
the payload which can be copied verbatim into the data field of the
|
||||
v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the
|
||||
type field is set to 0 on return.
|
||||
|
||||
s_vbi_data: used to generate VBI signals on a video signal.
|
||||
v4l2_sliced_vbi_data is filled with the data packets that should be
|
||||
output. Note that if you set the line field to 0, then that VBI signal
|
||||
is disabled. If no valid VBI data was found, then the type field is
|
||||
set to 0 on return.
|
||||
|
||||
g_vbi_data: used to obtain the sliced VBI packet from a readback register.
|
||||
Not all video decoders support this. If no data is available because
|
||||
the readback register contains invalid or erroneous data -EIO is
|
||||
returned. Note that you must fill in the 'id' member and the 'field'
|
||||
member (to determine whether CC data from the first or second field
|
||||
should be obtained).
|
||||
|
||||
s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by
|
||||
video input devices.
|
||||
|
||||
s_crystal_freq: sets the frequency of the crystal used to generate the
|
||||
clocks. An extra flags field allows device specific configuration
|
||||
regarding clock frequency dividers, etc. If not used, then set flags
|
||||
to 0. If the frequency is not supported, then -EINVAL is returned.
|
||||
|
||||
g_input_status: get input status. Same as the status field in the v4l2_input
|
||||
struct.
|
||||
|
||||
s_routing: see s_routing in audio_ops, except this version is for video
|
||||
devices.
|
||||
*/
|
||||
struct v4l2_subdev_video_ops {
|
||||
int (*s_routing)(struct v4l2_subdev *sd, const struct v4l2_routing *route);
|
||||
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)
|
||||
return sd->priv;
|
||||
}
|
||||
|
||||
/* Convert an ioctl-type command to the proper v4l2_subdev_ops function call.
|
||||
This is used by subdev modules that can be called by both old-style ioctl
|
||||
commands and through the v4l2_subdev_ops.
|
||||
|
||||
The ioctl API of the subdev driver can call this function to call the
|
||||
right ops based on the ioctl cmd and arg.
|
||||
|
||||
Once all subdev drivers have been converted and all drivers no longer
|
||||
use the ioctl interface, then this function can be removed.
|
||||
*/
|
||||
int v4l2_subdev_command(struct v4l2_subdev *sd, unsigned cmd, void *arg);
|
||||
|
||||
static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
|
||||
const struct v4l2_subdev_ops *ops)
|
||||
{
|
||||
|
Reference in New Issue
Block a user