Skip to content

Commit

Permalink
V4L/DVB (4006): Stop/start microcontroller when changing sampling fre…
Browse files Browse the repository at this point in the history
…quency

Stop/start microcontroller when changing sampling frequency to prevent 
tinny audio.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
hverkuil authored and mchehab committed Jun 25, 2006
1 parent e2b8cf4 commit c0c044a
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions drivers/media/video/cx25840/cx25840-audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,13 +181,15 @@ void cx25840_audio_set_path(struct i2c_client *client)
} else {
/* Set Path1 to Analog Demod Main Channel */
cx25840_write4(client, 0x8d0, 0x7038061f);
}

set_audclk_freq(client, state->audclk_freq);

if (state->aud_input != CX25840_AUDIO_SERIAL) {
/* When the microcontroller detects the
* audio format, it will unmute the lines */
cx25840_and_or(client, 0x803, ~0x10, 0x10);
}

set_audclk_freq(client, state->audclk_freq);
}

static int get_volume(struct i2c_client *client)
Expand Down Expand Up @@ -311,11 +313,21 @@ static void set_mute(struct i2c_client *client, int mute)

int cx25840_audio(struct i2c_client *client, unsigned int cmd, void *arg)
{
struct cx25840_state *state = i2c_get_clientdata(client);
struct v4l2_control *ctrl = arg;
int retval;

switch (cmd) {
case VIDIOC_INT_AUDIO_CLOCK_FREQ:
return set_audclk_freq(client, *(u32 *)arg);
if (state->aud_input != CX25840_AUDIO_SERIAL) {
cx25840_and_or(client, 0x803, ~0x10, 0);
cx25840_write(client, 0x8d3, 0x1f);
}
retval = set_audclk_freq(client, *(u32 *)arg);
if (state->aud_input != CX25840_AUDIO_SERIAL) {
cx25840_and_or(client, 0x803, ~0x10, 0x10);
}
return retval;

case VIDIOC_G_CTRL:
switch (ctrl->id) {
Expand Down

0 comments on commit c0c044a

Please sign in to comment.