|
@@ -426,24 +426,7 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input)
|
|
|
|
|
|
/* if there are audioroutes defined, we have an external
|
|
|
ADC to deal with audio */
|
|
|
-
|
|
|
if (INPUT(input).audioroute) {
|
|
|
-
|
|
|
- /* cx2388's C-ADC is connected to the tuner only.
|
|
|
- When used with S-Video, that ADC is busy dealing with
|
|
|
- chroma, so an external must be used for baseband audio */
|
|
|
-
|
|
|
- if (INPUT(input).type != CX88_VMUX_TELEVISION &&
|
|
|
- INPUT(input).type != CX88_RADIO) {
|
|
|
- /* "ADC mode" */
|
|
|
- cx_write(AUD_I2SCNTL, 0x1);
|
|
|
- cx_set(AUD_CTL, EN_I2SIN_ENABLE);
|
|
|
- } else {
|
|
|
- /* Normal mode */
|
|
|
- cx_write(AUD_I2SCNTL, 0x0);
|
|
|
- cx_clear(AUD_CTL, EN_I2SIN_ENABLE);
|
|
|
- }
|
|
|
-
|
|
|
/* The wm8775 module has the "2" route hardwired into
|
|
|
the initialization. Some boards may use different
|
|
|
routes for different inputs. HVR-1300 surely does */
|
|
@@ -454,9 +437,19 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input)
|
|
|
route.input = INPUT(input).audioroute;
|
|
|
cx88_call_i2c_clients(core,
|
|
|
VIDIOC_INT_S_AUDIO_ROUTING, &route);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
+ /* cx2388's C-ADC is connected to the tuner only.
|
|
|
+ When used with S-Video, that ADC is busy dealing with
|
|
|
+ chroma, so an external must be used for baseband audio */
|
|
|
+ if (INPUT(input).type != CX88_VMUX_TELEVISION ) {
|
|
|
+ /* "I2S ADC mode" */
|
|
|
+ core->tvaudio = WW_I2SADC;
|
|
|
+ cx88_set_tvaudio(core);
|
|
|
+ } else {
|
|
|
+ /* Normal mode */
|
|
|
+ cx_write(AUD_I2SCNTL, 0x0);
|
|
|
+ cx_clear(AUD_CTL, EN_I2SIN_ENABLE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -832,9 +825,24 @@ static int video_open(struct inode *inode, struct file *file)
|
|
|
cx_write(MO_GP0_IO, core->board.radio.gpio0);
|
|
|
cx_write(MO_GP1_IO, core->board.radio.gpio1);
|
|
|
cx_write(MO_GP2_IO, core->board.radio.gpio2);
|
|
|
- core->tvaudio = WW_FM;
|
|
|
- cx88_set_tvaudio(core);
|
|
|
- cx88_set_stereo(core,V4L2_TUNER_MODE_STEREO,1);
|
|
|
+ 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;
|
|
|
+ cx88_call_i2c_clients(core,
|
|
|
+ VIDIOC_INT_S_AUDIO_ROUTING, &route);
|
|
|
+ }
|
|
|
+ /* "I2S ADC mode" */
|
|
|
+ core->tvaudio = WW_I2SADC;
|
|
|
+ cx88_set_tvaudio(core);
|
|
|
+ } else {
|
|
|
+ /* FM Mode */
|
|
|
+ core->tvaudio = WW_FM;
|
|
|
+ cx88_set_tvaudio(core);
|
|
|
+ cx88_set_stereo(core,V4L2_TUNER_MODE_STEREO,1);
|
|
|
+ }
|
|
|
cx88_call_i2c_clients(core,AUDC_SET_RADIO,NULL);
|
|
|
}
|
|
|
unlock_kernel();
|