Commit 4a56eb3f authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

V4L/DVB (6743): cx25840: fix endianness inconsistency

cx25840_read4 reads a little-endian 32-bit value whereas cx25840_write4 writes
the 32-bit value as big-endian. Convert write4 to use little-endian as well
(that's the correct endianness).
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 6b1e5676
...@@ -38,71 +38,71 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq) ...@@ -38,71 +38,71 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
switch (freq) { switch (freq) {
case 32000: case 32000:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f040610); cx25840_write4(client, 0x108, 0x1006040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0xee39bb01); cx25840_write4(client, 0x110, 0x01bb39ee);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src3/4/6_ctl = 0x0801f77f */ /* src3/4/6_ctl = 0x0801f77f */
cx25840_write4(client, 0x900, 0x7ff70108); cx25840_write4(client, 0x900, 0x0801f77f);
cx25840_write4(client, 0x904, 0x7ff70108); cx25840_write4(client, 0x904, 0x0801f77f);
cx25840_write4(client, 0x90c, 0x7ff70108); cx25840_write4(client, 0x90c, 0x0801f77f);
break; break;
case 44100: case 44100:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f040910); cx25840_write4(client, 0x108, 0x1009040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0xd66bec00); cx25840_write4(client, 0x110, 0x00ec6bd6);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src3/4/6_ctl = 0x08016d59 */ /* src3/4/6_ctl = 0x08016d59 */
cx25840_write4(client, 0x900, 0x596d0108); cx25840_write4(client, 0x900, 0x08016d59);
cx25840_write4(client, 0x904, 0x596d0108); cx25840_write4(client, 0x904, 0x08016d59);
cx25840_write4(client, 0x90c, 0x596d0108); cx25840_write4(client, 0x90c, 0x08016d59);
break; break;
case 48000: case 48000:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f040a10); cx25840_write4(client, 0x108, 0x100a040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0xe5d69800); cx25840_write4(client, 0x110, 0x0098d6e5);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src3/4/6_ctl = 0x08014faa */ /* src3/4/6_ctl = 0x08014faa */
cx25840_write4(client, 0x900, 0xaa4f0108); cx25840_write4(client, 0x900, 0x08014faa);
cx25840_write4(client, 0x904, 0xaa4f0108); cx25840_write4(client, 0x904, 0x08014faa);
cx25840_write4(client, 0x90c, 0xaa4f0108); cx25840_write4(client, 0x90c, 0x08014faa);
break; break;
} }
} else { } else {
switch (freq) { switch (freq) {
case 32000: case 32000:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f04081e); cx25840_write4(client, 0x108, 0x1e08040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0x69082a01); cx25840_write4(client, 0x110, 0x012a0869);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src1_ctl = 0x08010000 */ /* src1_ctl = 0x08010000 */
cx25840_write4(client, 0x8f8, 0x00000108); cx25840_write4(client, 0x8f8, 0x08010000);
/* src3/4/6_ctl = 0x08020000 */ /* src3/4/6_ctl = 0x08020000 */
cx25840_write4(client, 0x900, 0x00000208); cx25840_write4(client, 0x900, 0x08020000);
cx25840_write4(client, 0x904, 0x00000208); cx25840_write4(client, 0x904, 0x08020000);
cx25840_write4(client, 0x90c, 0x00000208); cx25840_write4(client, 0x90c, 0x08020000);
/* SA_MCLK_SEL=1, SA_MCLK_DIV=0x14 */ /* SA_MCLK_SEL=1, SA_MCLK_DIV=0x14 */
cx25840_write(client, 0x127, 0x54); cx25840_write(client, 0x127, 0x54);
...@@ -110,40 +110,40 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq) ...@@ -110,40 +110,40 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
case 44100: case 44100:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f040918); cx25840_write4(client, 0x108, 0x1809040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0xd66bec00); cx25840_write4(client, 0x110, 0x00ec6bd6);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src1_ctl = 0x08010000 */ /* src1_ctl = 0x08010000 */
cx25840_write4(client, 0x8f8, 0xcd600108); cx25840_write4(client, 0x8f8, 0x080160cd);
/* src3/4/6_ctl = 0x08020000 */ /* src3/4/6_ctl = 0x08020000 */
cx25840_write4(client, 0x900, 0x85730108); cx25840_write4(client, 0x900, 0x08017385);
cx25840_write4(client, 0x904, 0x85730108); cx25840_write4(client, 0x904, 0x08017385);
cx25840_write4(client, 0x90c, 0x85730108); cx25840_write4(client, 0x90c, 0x08017385);
break; break;
case 48000: case 48000:
/* VID_PLL and AUX_PLL */ /* VID_PLL and AUX_PLL */
cx25840_write4(client, 0x108, 0x0f040a18); cx25840_write4(client, 0x108, 0x180a040f);
/* AUX_PLL_FRAC */ /* AUX_PLL_FRAC */
cx25840_write4(client, 0x110, 0xe5d69800); cx25840_write4(client, 0x110, 0x0098d6e5);
if (state->is_cx25836) if (state->is_cx25836)
break; break;
/* src1_ctl = 0x08010000 */ /* src1_ctl = 0x08010000 */
cx25840_write4(client, 0x8f8, 0x00800108); cx25840_write4(client, 0x8f8, 0x08018000);
/* src3/4/6_ctl = 0x08020000 */ /* src3/4/6_ctl = 0x08020000 */
cx25840_write4(client, 0x900, 0x55550108); cx25840_write4(client, 0x900, 0x08015555);
cx25840_write4(client, 0x904, 0x55550108); cx25840_write4(client, 0x904, 0x08015555);
cx25840_write4(client, 0x90c, 0x55550108); cx25840_write4(client, 0x90c, 0x08015555);
break; break;
} }
} }
...@@ -168,14 +168,14 @@ void cx25840_audio_set_path(struct i2c_client *client) ...@@ -168,14 +168,14 @@ void cx25840_audio_set_path(struct i2c_client *client)
if (state->aud_input == CX25840_AUDIO_SERIAL) { if (state->aud_input == CX25840_AUDIO_SERIAL) {
/* Set Path1 to Serial Audio Input */ /* Set Path1 to Serial Audio Input */
cx25840_write4(client, 0x8d0, 0x12100101); cx25840_write4(client, 0x8d0, 0x01011012);
/* The microcontroller should not be started for the /* The microcontroller should not be started for the
* non-tuner inputs: autodetection is specific for * non-tuner inputs: autodetection is specific for
* TV audio. */ * TV audio. */
} else { } else {
/* Set Path1 to Analog Demod Main Channel */ /* Set Path1 to Analog Demod Main Channel */
cx25840_write4(client, 0x8d0, 0x7038061f); cx25840_write4(client, 0x8d0, 0x1f063870);
} }
set_audclk_freq(client, state->audclk_freq); set_audclk_freq(client, state->audclk_freq);
......
...@@ -73,10 +73,10 @@ int cx25840_write4(struct i2c_client *client, u16 addr, u32 value) ...@@ -73,10 +73,10 @@ int cx25840_write4(struct i2c_client *client, u16 addr, u32 value)
u8 buffer[6]; u8 buffer[6];
buffer[0] = addr >> 8; buffer[0] = addr >> 8;
buffer[1] = addr & 0xff; buffer[1] = addr & 0xff;
buffer[2] = value >> 24; buffer[2] = value & 0xff;
buffer[3] = (value >> 16) & 0xff; buffer[3] = (value >> 8) & 0xff;
buffer[4] = (value >> 8) & 0xff; buffer[4] = (value >> 16) & 0xff;
buffer[5] = value & 0xff; buffer[5] = value >> 24;
return i2c_master_send(client, buffer, 6); return i2c_master_send(client, buffer, 6);
} }
......
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