/* Selects the audio input and output according to the current
settings. */ int cx18_audio_set_io(struct cx18 *cx)
{ conststruct cx18_card_audio_input *in;
u32 u, v; int err;
/* Determine which input to use */ if (test_bit(CX18_F_I_RADIO_USER, &cx->i_flags))
in = &cx->card->radio_input; else
in = &cx->card->audio_inputs[cx->audio_input];
/* FIXME - this internal mux should be abstracted to a subdev */
u = cx18_read_reg(cx, CX18_AUDIO_ENABLE);
v = u & ~CX18_AI1_MUX_MASK; switch (in->audio_input) { case CX18_AV_AUDIO_SERIAL1:
v |= CX18_AI1_MUX_I2S1; break; case CX18_AV_AUDIO_SERIAL2:
v |= CX18_AI1_MUX_I2S2; break; default:
v |= CX18_AI1_MUX_843_I2S; break;
} if (v == u) { /* force a toggle of some AI1 MUX control bits */
u &= ~CX18_AI1_MUX_MASK; switch (in->audio_input) { case CX18_AV_AUDIO_SERIAL1:
u |= CX18_AI1_MUX_843_I2S; break; case CX18_AV_AUDIO_SERIAL2:
u |= CX18_AI1_MUX_843_I2S; break; default:
u |= CX18_AI1_MUX_I2S1; break;
}
cx18_write_reg_expect(cx, u | 0xb00, CX18_AUDIO_ENABLE,
u, CX18_AI1_MUX_MASK);
}
cx18_write_reg_expect(cx, v | 0xb00, CX18_AUDIO_ENABLE,
v, CX18_AI1_MUX_MASK); return 0;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.