mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
V4L/DVB (11380): v4l2-subdev: change s_routing prototype
It is no longer needed to use a struct pointer as argument, since v4l2_subdev doesn't require that ioctl-like approach anymore. Instead just pass the input, output and config (new!) arguments directly. 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
c0ff29150d
commit
5325b4272a
@@ -652,7 +652,7 @@ static int au8522_reset(struct v4l2_subdev *sd, u32 val)
|
||||
}
|
||||
|
||||
static int au8522_s_video_routing(struct v4l2_subdev *sd,
|
||||
const struct v4l2_routing *route)
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct au8522_state *state = to_state(sd);
|
||||
|
||||
@@ -663,11 +663,11 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd,
|
||||
closed), and then came back to analog mode */
|
||||
au8522_writereg(state, 0x106, 1);
|
||||
|
||||
if (route->input == AU8522_COMPOSITE_CH1) {
|
||||
if (input == AU8522_COMPOSITE_CH1) {
|
||||
au8522_setup_cvbs_mode(state);
|
||||
} else if (route->input == AU8522_SVIDEO_CH13) {
|
||||
} else if (input == AU8522_SVIDEO_CH13) {
|
||||
au8522_setup_svideo_mode(state);
|
||||
} else if (route->input == AU8522_COMPOSITE_CH4_SIF) {
|
||||
} else if (input == AU8522_COMPOSITE_CH4_SIF) {
|
||||
au8522_setup_cvbs_tuner_mode(state);
|
||||
} else {
|
||||
printk(KERN_ERR "au8522 mode not currently supported\n");
|
||||
@@ -677,10 +677,10 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int au8522_s_audio_routing(struct v4l2_subdev *sd,
|
||||
const struct v4l2_routing *route)
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct au8522_state *state = to_state(sd);
|
||||
set_audio_input(state, route->input);
|
||||
set_audio_input(state, input);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -219,18 +219,19 @@ static int adv7170_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adv7170_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int adv7170_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct adv7170 *encoder = to_adv7170(sd);
|
||||
|
||||
/* RJ: route->input = 0: input is from decoder
|
||||
route->input = 1: input is from ZR36060
|
||||
route->input = 2: color bar */
|
||||
/* RJ: input = 0: input is from decoder
|
||||
input = 1: input is from ZR36060
|
||||
input = 2: color bar */
|
||||
|
||||
v4l2_dbg(1, debug, sd, "set input from %s\n",
|
||||
route->input == 0 ? "decoder" : "ZR36060");
|
||||
input == 0 ? "decoder" : "ZR36060");
|
||||
|
||||
switch (route->input) {
|
||||
switch (input) {
|
||||
case 0:
|
||||
adv7170_write(sd, 0x01, 0x20);
|
||||
adv7170_write(sd, 0x08, TR1CAPT); /* TR1 */
|
||||
@@ -250,11 +251,11 @@ static int adv7170_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
|
||||
break;
|
||||
|
||||
default:
|
||||
v4l2_dbg(1, debug, sd, "illegal input: %d\n", route->input);
|
||||
v4l2_dbg(1, debug, sd, "illegal input: %d\n", input);
|
||||
return -EINVAL;
|
||||
}
|
||||
v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[route->input]);
|
||||
encoder->input = route->input;
|
||||
v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[input]);
|
||||
encoder->input = input;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -237,15 +237,16 @@ static int adv7175_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adv7175_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int adv7175_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct adv7175 *encoder = to_adv7175(sd);
|
||||
|
||||
/* RJ: route->input = 0: input is from decoder
|
||||
route->input = 1: input is from ZR36060
|
||||
route->input = 2: color bar */
|
||||
/* RJ: input = 0: input is from decoder
|
||||
input = 1: input is from ZR36060
|
||||
input = 2: color bar */
|
||||
|
||||
switch (route->input) {
|
||||
switch (input) {
|
||||
case 0:
|
||||
adv7175_write(sd, 0x01, 0x00);
|
||||
|
||||
@@ -288,11 +289,11 @@ static int adv7175_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *
|
||||
break;
|
||||
|
||||
default:
|
||||
v4l2_dbg(1, debug, sd, "illegal input: %d\n", route->input);
|
||||
v4l2_dbg(1, debug, sd, "illegal input: %d\n", input);
|
||||
return -EINVAL;
|
||||
}
|
||||
v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[route->input]);
|
||||
encoder->input = route->input;
|
||||
v4l2_dbg(1, debug, sd, "switched to %s\n", inputs[input]);
|
||||
encoder->input = input;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1154,7 +1154,6 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
|
||||
struct au0828_fh *fh = priv;
|
||||
struct au0828_dev *dev = fh->dev;
|
||||
int i;
|
||||
struct v4l2_routing route;
|
||||
|
||||
dprintk(1, "VIDIOC_S_INPUT in function %s, input=%d\n", __func__,
|
||||
index);
|
||||
@@ -1180,9 +1179,8 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
|
||||
break;
|
||||
}
|
||||
|
||||
route.input = AUVI_INPUT(index).vmux;
|
||||
route.output = 0;
|
||||
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing, &route);
|
||||
v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
|
||||
AUVI_INPUT(index).vmux, 0, 0);
|
||||
|
||||
for (i = 0; i < AU0828_MAX_INPUT; i++) {
|
||||
int enable = 0;
|
||||
@@ -1205,8 +1203,8 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
|
||||
}
|
||||
}
|
||||
|
||||
route.input = AUVI_INPUT(index).amux;
|
||||
v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing, &route);
|
||||
v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
|
||||
AUVI_INPUT(index).amux, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -292,21 +292,22 @@ static int bt819_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt819_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int bt819_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct bt819 *decoder = to_bt819(sd);
|
||||
|
||||
v4l2_dbg(1, debug, sd, "set input %x\n", route->input);
|
||||
v4l2_dbg(1, debug, sd, "set input %x\n", input);
|
||||
|
||||
if (route->input < 0 || route->input > 7)
|
||||
if (input < 0 || input > 7)
|
||||
return -EINVAL;
|
||||
|
||||
if (sd->v4l2_dev == NULL || sd->v4l2_dev->notify == NULL)
|
||||
v4l2_err(sd, "no notify found!\n");
|
||||
|
||||
if (decoder->input != route->input) {
|
||||
if (decoder->input != input) {
|
||||
v4l2_subdev_notify(sd, BT819_FIFO_RESET_LOW, 0);
|
||||
decoder->input = route->input;
|
||||
decoder->input = input;
|
||||
/* select mode */
|
||||
if (decoder->input == 0) {
|
||||
bt819_setbit(decoder, 0x0b, 6, 0);
|
||||
|
||||
@@ -142,16 +142,17 @@ static int bt856_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt856_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int bt856_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct bt856 *encoder = to_bt856(sd);
|
||||
|
||||
v4l2_dbg(1, debug, sd, "set input %d\n", route->input);
|
||||
v4l2_dbg(1, debug, sd, "set input %d\n", input);
|
||||
|
||||
/* We only have video bus.
|
||||
* route->input= 0: input is from bt819
|
||||
* route->input= 1: input is from ZR36060 */
|
||||
switch (route->input) {
|
||||
* input= 0: input is from bt819
|
||||
* input= 1: input is from ZR36060 */
|
||||
switch (input) {
|
||||
case 0:
|
||||
bt856_setbit(encoder, 0xde, 4, 0);
|
||||
bt856_setbit(encoder, 0xde, 3, 1);
|
||||
|
||||
@@ -99,7 +99,8 @@ static int bt866_s_std_output(struct v4l2_subdev *sd, v4l2_std_id std)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int bt866_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
static const __u8 init[] = {
|
||||
0xc8, 0xcc, /* CRSCALE */
|
||||
@@ -137,7 +138,7 @@ static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *ro
|
||||
|
||||
val = encoder->reg[0xdc];
|
||||
|
||||
if (route->input == 0)
|
||||
if (input == 0)
|
||||
val |= 0x40; /* CBSWAP */
|
||||
else
|
||||
val &= ~0x40; /* !CBSWAP */
|
||||
@@ -145,15 +146,15 @@ static int bt866_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *ro
|
||||
bt866_write(encoder, 0xdc, val);
|
||||
|
||||
val = encoder->reg[0xcc];
|
||||
if (route->input == 2)
|
||||
if (input == 2)
|
||||
val |= 0x01; /* OSDBAR */
|
||||
else
|
||||
val &= ~0x01; /* !OSDBAR */
|
||||
bt866_write(encoder, 0xcc, val);
|
||||
|
||||
v4l2_dbg(1, debug, sd, "set input %d\n", route->input);
|
||||
v4l2_dbg(1, debug, sd, "set input %d\n", input);
|
||||
|
||||
switch (route->input) {
|
||||
switch (input) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
|
||||
@@ -1198,7 +1198,7 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
ctrl.value = btv->mute;
|
||||
bttv_call_all(btv, core, s_ctrl, &ctrl);
|
||||
if (btv->sd_msp34xx) {
|
||||
struct v4l2_routing route;
|
||||
u32 in;
|
||||
|
||||
/* Note: the inputs tuner/radio/extern/intern are translated
|
||||
to msp routings. This assumes common behavior for all msp3400
|
||||
@@ -1207,11 +1207,11 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
For now this is sufficient. */
|
||||
switch (input) {
|
||||
case TVAUDIO_INPUT_RADIO:
|
||||
route.input = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
case TVAUDIO_INPUT_EXTERN:
|
||||
route.input = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1,
|
||||
in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
case TVAUDIO_INPUT_INTERN:
|
||||
@@ -1220,7 +1220,7 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
input is the BTTV_BOARD_AVERMEDIA98. I wonder how
|
||||
that was tested. My guess is that the whole INTERN
|
||||
input does not work. */
|
||||
route.input = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
case TVAUDIO_INPUT_TUNER:
|
||||
@@ -1229,21 +1229,18 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
is the only difference between the VOODOOTV_FM
|
||||
and VOODOOTV_200 */
|
||||
if (btv->c.type == BTTV_BOARD_VOODOOTV_200)
|
||||
route.input = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \
|
||||
in = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \
|
||||
MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER);
|
||||
else
|
||||
route.input = MSP_INPUT_DEFAULT;
|
||||
in = MSP_INPUT_DEFAULT;
|
||||
break;
|
||||
}
|
||||
route.output = MSP_OUTPUT_DEFAULT;
|
||||
v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing, &route);
|
||||
v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing,
|
||||
in, MSP_OUTPUT_DEFAULT, 0);
|
||||
}
|
||||
if (btv->sd_tvaudio) {
|
||||
struct v4l2_routing route;
|
||||
|
||||
route.input = input;
|
||||
route.output = 0;
|
||||
v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing, &route);
|
||||
v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing,
|
||||
input, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -53,14 +53,15 @@ static inline int cs5345_read(struct v4l2_subdev *sd, u8 reg)
|
||||
return i2c_smbus_read_byte_data(client, reg);
|
||||
}
|
||||
|
||||
static int cs5345_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int cs5345_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
if ((route->input & 0xf) > 6) {
|
||||
v4l2_err(sd, "Invalid input %d.\n", route->input);
|
||||
if ((input & 0xf) > 6) {
|
||||
v4l2_err(sd, "Invalid input %d.\n", input);
|
||||
return -EINVAL;
|
||||
}
|
||||
cs5345_write(sd, 0x09, route->input & 0xf);
|
||||
cs5345_write(sd, 0x05, route->input & 0xf0);
|
||||
cs5345_write(sd, 0x09, input & 0xf);
|
||||
cs5345_write(sd, 0x05, input & 0xf0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -58,17 +58,18 @@ static int cs53l32a_read(struct v4l2_subdev *sd, u8 reg)
|
||||
return i2c_smbus_read_byte_data(client, reg);
|
||||
}
|
||||
|
||||
static int cs53l32a_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int cs53l32a_s_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
/* There are 2 physical inputs, but the second input can be
|
||||
placed in two modes, the first mode bypasses the PGA (gain),
|
||||
the second goes through the PGA. Hence there are three
|
||||
possible inputs to choose from. */
|
||||
if (route->input > 2) {
|
||||
v4l2_err(sd, "Invalid input %d.\n", route->input);
|
||||
if (input > 2) {
|
||||
v4l2_err(sd, "Invalid input %d.\n", input);
|
||||
return -EINVAL;
|
||||
}
|
||||
cs53l32a_write(sd, 0x01, 0x01 + (route->input << 4));
|
||||
cs53l32a_write(sd, 0x01, 0x01 + (input << 4));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
int cx18_audio_set_io(struct cx18 *cx)
|
||||
{
|
||||
const struct cx18_card_audio_input *in;
|
||||
struct v4l2_routing route;
|
||||
u32 val;
|
||||
int err;
|
||||
|
||||
@@ -44,13 +43,11 @@ int cx18_audio_set_io(struct cx18 *cx)
|
||||
in = &cx->card->audio_inputs[cx->audio_input];
|
||||
|
||||
/* handle muxer chips */
|
||||
route.input = in->muxer_input;
|
||||
route.output = 0;
|
||||
v4l2_subdev_call(cx->sd_extmux, audio, s_routing, &route);
|
||||
v4l2_subdev_call(cx->sd_extmux, audio, s_routing,
|
||||
in->audio_input, 0, 0);
|
||||
|
||||
route.input = in->audio_input;
|
||||
err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl,
|
||||
audio, s_routing, &route);
|
||||
audio, s_routing, in->audio_input, 0, 0);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
@@ -547,19 +547,19 @@ static int set_input(struct cx18 *cx, enum cx18_av_video_input vid_input,
|
||||
}
|
||||
|
||||
static int cx18_av_s_video_routing(struct v4l2_subdev *sd,
|
||||
const struct v4l2_routing *route)
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct cx18_av_state *state = to_cx18_av_state(sd);
|
||||
struct cx18 *cx = v4l2_get_subdevdata(sd);
|
||||
return set_input(cx, route->input, state->aud_input);
|
||||
return set_input(cx, input, state->aud_input);
|
||||
}
|
||||
|
||||
static int cx18_av_s_audio_routing(struct v4l2_subdev *sd,
|
||||
const struct v4l2_routing *route)
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct cx18_av_state *state = to_cx18_av_state(sd);
|
||||
struct cx18 *cx = v4l2_get_subdevdata(sd);
|
||||
return set_input(cx, state->vid_input, route->input);
|
||||
return set_input(cx, state->vid_input, input);
|
||||
}
|
||||
|
||||
static int cx18_av_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
|
||||
|
||||
@@ -156,12 +156,12 @@ static int gpiomux_s_std(struct v4l2_subdev *sd, v4l2_std_id norm)
|
||||
}
|
||||
|
||||
static int gpiomux_s_audio_routing(struct v4l2_subdev *sd,
|
||||
const struct v4l2_routing *route)
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct cx18 *cx = v4l2_get_subdevdata(sd);
|
||||
u32 data;
|
||||
|
||||
switch (route->input) {
|
||||
switch (input) {
|
||||
case 0:
|
||||
data = cx->card->gpio_audio_input.tuner;
|
||||
break;
|
||||
|
||||
@@ -932,7 +932,7 @@ static long cx18_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
CX18_DEBUG_IOCTL("VIDIOC_INT_S_AUDIO_ROUTING(%d, %d)\n",
|
||||
route->input, route->output);
|
||||
cx18_call_hw(cx, cx->card->hw_audio_ctrl, audio, s_routing,
|
||||
route);
|
||||
route->input, route->output, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,20 +25,8 @@
|
||||
|
||||
void cx18_video_set_io(struct cx18 *cx)
|
||||
{
|
||||
struct v4l2_routing route;
|
||||
int inp = cx->active_input;
|
||||
u32 type;
|
||||
|
||||
route.input = cx->card->video_inputs[inp].video_input;
|
||||
route.output = 0;
|
||||
v4l2_subdev_call(cx->sd_av, video, s_routing, &route);
|
||||
|
||||
type = cx->card->video_inputs[inp].video_type;
|
||||
|
||||
if (type == CX18_CARD_INPUT_VID_TUNER)
|
||||
route.input = 0; /* Tuner */
|
||||
else if (type < CX18_CARD_INPUT_COMPOSITE1)
|
||||
route.input = 2; /* S-Video */
|
||||
else
|
||||
route.input = 1; /* Composite */
|
||||
v4l2_subdev_call(cx->sd_av, video, s_routing,
|
||||
cx->card->video_inputs[inp].video_input, 0, 0);
|
||||
}
|
||||
|
||||
@@ -357,10 +357,7 @@ int cx231xx_config(struct cx231xx *dev)
|
||||
*/
|
||||
void cx231xx_config_i2c(struct cx231xx *dev)
|
||||
{
|
||||
struct v4l2_routing route;
|
||||
|
||||
route.input = INPUT(dev->video_input)->vmux;
|
||||
route.output = 0;
|
||||
/* u32 input = INPUT(dev->video_input)->vmux; */
|
||||
|
||||
call_all(dev, video, s_stream, 1);
|
||||
}
|
||||
|
||||
@@ -820,17 +820,12 @@ static struct videobuf_queue_ops cx231xx_video_qops = {
|
||||
|
||||
void video_mux(struct cx231xx *dev, int index)
|
||||
{
|
||||
|
||||
struct v4l2_routing route;
|
||||
|
||||
route.input = INPUT(index)->vmux;
|
||||
route.output = 0;
|
||||
dev->video_input = index;
|
||||
dev->ctl_ainput = INPUT(index)->amux;
|
||||
|
||||
cx231xx_set_video_input_mux(dev, index);
|
||||
|
||||
cx25840_call(dev, video, s_routing, &route);
|
||||
cx25840_call(dev, video, s_routing, INPUT(index)->vmux, 0, 0);
|
||||
|
||||
cx231xx_set_audio_input(dev, dev->ctl_ainput);
|
||||
|
||||
|
||||
@@ -393,9 +393,6 @@ static void res_free(struct cx23885_dev *dev, struct cx23885_fh *fh,
|
||||
|
||||
static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
|
||||
{
|
||||
struct v4l2_routing route;
|
||||
memset(&route, 0, sizeof(route));
|
||||
|
||||
dprintk(1, "%s() video_mux: %d [vmux=%d, gpio=0x%x,0x%x,0x%x,0x%x]\n",
|
||||
__func__,
|
||||
input, INPUT(input)->vmux,
|
||||
@@ -403,10 +400,9 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
|
||||
INPUT(input)->gpio2, INPUT(input)->gpio3);
|
||||
dev->input = input;
|
||||
|
||||
route.input = INPUT(input)->vmux;
|
||||
|
||||
/* Tell the internal A/V decoder */
|
||||
v4l2_subdev_call(dev->sd_cx25840, video, s_routing, &route);
|
||||
v4l2_subdev_call(dev->sd_cx25840, video, s_routing,
|
||||
INPUT(input)->vmux, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1322,22 +1322,24 @@ static int cx25840_s_radio(struct v4l2_subdev *sd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx25840_s_video_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int cx25840_s_video_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct cx25840_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
return set_input(client, route->input, state->aud_input);
|
||||
return set_input(client, input, state->aud_input);
|
||||
}
|
||||
|
||||
static int cx25840_s_audio_routing(struct v4l2_subdev *sd, const struct v4l2_routing *route)
|
||||
static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
|
||||
u32 input, u32 output, u32 config)
|
||||
{
|
||||
struct cx25840_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (state->is_cx25836)
|
||||
return -EINVAL;
|
||||
return set_input(client, state->vid_input, route->input);
|
||||
return set_input(client, state->vid_input, input);
|
||||
}
|
||||
|
||||
static int cx25840_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *freq)
|
||||
|
||||
@@ -428,10 +428,8 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input)
|
||||
routes for different inputs. HVR-1300 surely does */
|
||||
if (core->board.audio_chip &&
|
||||
core->board.audio_chip == V4L2_IDENT_WM8775) {
|
||||
struct v4l2_routing route;
|
||||
|
||||
route.input = INPUT(input).audioroute;
|
||||
call_all(core, audio, s_routing, &route);
|
||||
call_all(core, audio, s_routing,
|
||||
INPUT(input).audioroute, 0, 0);
|
||||
}
|
||||
/* cx2388's C-ADC is connected to the tuner only.
|
||||
When used with S-Video, that ADC is busy dealing with
|
||||
@@ -823,10 +821,8 @@ static int video_open(struct file *file)
|
||||
if (core->board.radio.audioroute) {
|
||||
if(core->board.audio_chip &&
|
||||
core->board.audio_chip == V4L2_IDENT_WM8775) {
|
||||
struct v4l2_routing route;
|
||||
|
||||
route.input = core->board.radio.audioroute;
|
||||
call_all(core, audio, s_routing, &route);
|
||||
call_all(core, audio, s_routing,
|
||||
core->board.radio.audioroute, 0, 0);
|
||||
}
|
||||
/* "I2S ADC mode" */
|
||||
core->tvaudio = WW_I2SADC;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user