Commit 2e2aef7d authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

V4L/DVB (4008): Audio soft reset improvements

The soft reset (de)assert commands where not at the right place.
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent c0c044a7
...@@ -30,10 +30,6 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq) ...@@ -30,10 +30,6 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
if (freq != 32000 && freq != 44100 && freq != 48000) if (freq != 32000 && freq != 44100 && freq != 48000)
return -EINVAL; return -EINVAL;
/* assert soft reset */
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 0x01);
/* common for all inputs and rates */ /* common for all inputs and rates */
/* SA_MCLK_SEL=1, SA_MCLK_DIV=0x10 */ /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x10 */
cx25840_write(client, 0x127, 0x50); cx25840_write(client, 0x127, 0x50);
...@@ -152,10 +148,6 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq) ...@@ -152,10 +148,6 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
} }
} }
/* deassert soft reset */
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 0x00);
state->audclk_freq = freq; state->audclk_freq = freq;
return 0; return 0;
...@@ -168,6 +160,10 @@ void cx25840_audio_set_path(struct i2c_client *client) ...@@ -168,6 +160,10 @@ void cx25840_audio_set_path(struct i2c_client *client)
/* stop microcontroller */ /* stop microcontroller */
cx25840_and_or(client, 0x803, ~0x10, 0); cx25840_and_or(client, 0x803, ~0x10, 0);
/* assert soft reset */
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 0x01);
/* Mute everything to prevent the PFFT! */ /* Mute everything to prevent the PFFT! */
cx25840_write(client, 0x8d3, 0x1f); cx25840_write(client, 0x8d3, 0x1f);
...@@ -185,6 +181,10 @@ void cx25840_audio_set_path(struct i2c_client *client) ...@@ -185,6 +181,10 @@ void cx25840_audio_set_path(struct i2c_client *client)
set_audclk_freq(client, state->audclk_freq); set_audclk_freq(client, state->audclk_freq);
/* deassert soft reset */
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 0x00);
if (state->aud_input != CX25840_AUDIO_SERIAL) { if (state->aud_input != CX25840_AUDIO_SERIAL) {
/* When the microcontroller detects the /* When the microcontroller detects the
* audio format, it will unmute the lines */ * audio format, it will unmute the lines */
...@@ -323,7 +323,11 @@ int cx25840_audio(struct i2c_client *client, unsigned int cmd, void *arg) ...@@ -323,7 +323,11 @@ int cx25840_audio(struct i2c_client *client, unsigned int cmd, void *arg)
cx25840_and_or(client, 0x803, ~0x10, 0); cx25840_and_or(client, 0x803, ~0x10, 0);
cx25840_write(client, 0x8d3, 0x1f); cx25840_write(client, 0x8d3, 0x1f);
} }
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 1);
retval = set_audclk_freq(client, *(u32 *)arg); retval = set_audclk_freq(client, *(u32 *)arg);
if (!state->is_cx25836)
cx25840_and_or(client, 0x810, ~0x1, 0);
if (state->aud_input != CX25840_AUDIO_SERIAL) { if (state->aud_input != CX25840_AUDIO_SERIAL) {
cx25840_and_or(client, 0x803, ~0x10, 0x10); cx25840_and_or(client, 0x803, ~0x10, 0x10);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment