Commit ba50e7e1 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab

[media] cx25840: fix regression in HVR-1800 analog support

The refactoring of the cx25840 driver to support the cx23888 caused breakage
with the existing support for cx23885/cx23887 analog support.  Rework the
routines such that the new code is only used for the 888.

Validated with the following boards:

HVR-1800 retail (0070:7801)
HVR-1800 OEM (0070:7809)
HVR_1850 retail (0070:8541)

Thanks to Steven Toth and Hauppauge for loaning me various boards to
regression test with.
Reported-by: default avatarJonathan <sitten74490@mypacks.net>
Thanks-to: Steven Toth <stoth@kernellabs.com>
Signed-off-by: default avatarDevin Heitmueler <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a65c3262
...@@ -84,7 +84,7 @@ MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]"); ...@@ -84,7 +84,7 @@ MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
static void cx23885_std_setup(struct i2c_client *client); static void cx23888_std_setup(struct i2c_client *client);
int cx25840_write(struct i2c_client *client, u16 addr, u8 value) int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
{ {
...@@ -638,10 +638,13 @@ static void cx23885_initialize(struct i2c_client *client) ...@@ -638,10 +638,13 @@ static void cx23885_initialize(struct i2c_client *client)
finish_wait(&state->fw_wait, &wait); finish_wait(&state->fw_wait, &wait);
destroy_workqueue(q); destroy_workqueue(q);
/* Call the cx23885 specific std setup func, we no longer rely on /* Call the cx23888 specific std setup func, we no longer rely on
* the generic cx24840 func. * the generic cx24840 func.
*/ */
cx23885_std_setup(client); if (is_cx23888(state))
cx23888_std_setup(client);
else
cx25840_std_setup(client);
/* (re)set input */ /* (re)set input */
set_input(client, state->vid_input, state->aud_input); set_input(client, state->vid_input, state->aud_input);
...@@ -1298,8 +1301,8 @@ static int set_v4lstd(struct i2c_client *client) ...@@ -1298,8 +1301,8 @@ static int set_v4lstd(struct i2c_client *client)
} }
cx25840_and_or(client, 0x400, ~0xf, fmt); cx25840_and_or(client, 0x400, ~0xf, fmt);
cx25840_and_or(client, 0x403, ~0x3, pal_m); cx25840_and_or(client, 0x403, ~0x3, pal_m);
if (is_cx2388x(state)) if (is_cx23888(state))
cx23885_std_setup(client); cx23888_std_setup(client);
else else
cx25840_std_setup(client); cx25840_std_setup(client);
if (!is_cx2583x(state)) if (!is_cx2583x(state))
...@@ -1782,8 +1785,8 @@ static int cx25840_s_video_routing(struct v4l2_subdev *sd, ...@@ -1782,8 +1785,8 @@ static int cx25840_s_video_routing(struct v4l2_subdev *sd,
struct cx25840_state *state = to_state(sd); struct cx25840_state *state = to_state(sd);
struct i2c_client *client = v4l2_get_subdevdata(sd); struct i2c_client *client = v4l2_get_subdevdata(sd);
if (is_cx2388x(state)) if (is_cx23888(state))
cx23885_std_setup(client); cx23888_std_setup(client);
return set_input(client, input, state->aud_input); return set_input(client, input, state->aud_input);
} }
...@@ -1794,8 +1797,8 @@ static int cx25840_s_audio_routing(struct v4l2_subdev *sd, ...@@ -1794,8 +1797,8 @@ static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
struct cx25840_state *state = to_state(sd); struct cx25840_state *state = to_state(sd);
struct i2c_client *client = v4l2_get_subdevdata(sd); struct i2c_client *client = v4l2_get_subdevdata(sd);
if (is_cx2388x(state)) if (is_cx23888(state))
cx23885_std_setup(client); cx23888_std_setup(client);
return set_input(client, state->vid_input, input); return set_input(client, state->vid_input, input);
} }
...@@ -4939,7 +4942,7 @@ void cx23885_dif_setup(struct i2c_client *client, u32 ifHz) ...@@ -4939,7 +4942,7 @@ void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
} }
} }
static void cx23885_std_setup(struct i2c_client *client) static void cx23888_std_setup(struct i2c_client *client)
{ {
struct cx25840_state *state = to_state(i2c_get_clientdata(client)); struct cx25840_state *state = to_state(i2c_get_clientdata(client));
v4l2_std_id std = state->std; v4l2_std_id std = state->std;
......
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