aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2012-07-01 15:15:09 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-07-06 18:36:30 -0400
commitba50e7e16b86e25048290b682f7a4e09e069d321 (patch)
tree6f79eccf4d48f5aa9f9a821c7af9d6fc03c888f3
parenta65c3262a766311d4704a9ea29354480c5e8590d (diff)
[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: Jonathan <sitten74490@mypacks.net> Thanks-to: Steven Toth <stoth@kernellabs.com> Signed-off-by: Devin Heitmueler <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index fc1ff69cffd0..a82b7045f8c9 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -84,7 +84,7 @@ MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
84 84
85 85
86/* ----------------------------------------------------------------------- */ 86/* ----------------------------------------------------------------------- */
87static void cx23885_std_setup(struct i2c_client *client); 87static void cx23888_std_setup(struct i2c_client *client);
88 88
89int cx25840_write(struct i2c_client *client, u16 addr, u8 value) 89int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
90{ 90{
@@ -638,10 +638,13 @@ static void cx23885_initialize(struct i2c_client *client)
638 finish_wait(&state->fw_wait, &wait); 638 finish_wait(&state->fw_wait, &wait);
639 destroy_workqueue(q); 639 destroy_workqueue(q);
640 640
641 /* Call the cx23885 specific std setup func, we no longer rely on 641 /* Call the cx23888 specific std setup func, we no longer rely on
642 * the generic cx24840 func. 642 * the generic cx24840 func.
643 */ 643 */
644 cx23885_std_setup(client); 644 if (is_cx23888(state))
645 cx23888_std_setup(client);
646 else
647 cx25840_std_setup(client);
645 648
646 /* (re)set input */ 649 /* (re)set input */
647 set_input(client, state->vid_input, state->aud_input); 650 set_input(client, state->vid_input, state->aud_input);
@@ -1298,8 +1301,8 @@ static int set_v4lstd(struct i2c_client *client)
1298 } 1301 }
1299 cx25840_and_or(client, 0x400, ~0xf, fmt); 1302 cx25840_and_or(client, 0x400, ~0xf, fmt);
1300 cx25840_and_or(client, 0x403, ~0x3, pal_m); 1303 cx25840_and_or(client, 0x403, ~0x3, pal_m);
1301 if (is_cx2388x(state)) 1304 if (is_cx23888(state))
1302 cx23885_std_setup(client); 1305 cx23888_std_setup(client);
1303 else 1306 else
1304 cx25840_std_setup(client); 1307 cx25840_std_setup(client);
1305 if (!is_cx2583x(state)) 1308 if (!is_cx2583x(state))
@@ -1782,8 +1785,8 @@ static int cx25840_s_video_routing(struct v4l2_subdev *sd,
1782 struct cx25840_state *state = to_state(sd); 1785 struct cx25840_state *state = to_state(sd);
1783 struct i2c_client *client = v4l2_get_subdevdata(sd); 1786 struct i2c_client *client = v4l2_get_subdevdata(sd);
1784 1787
1785 if (is_cx2388x(state)) 1788 if (is_cx23888(state))
1786 cx23885_std_setup(client); 1789 cx23888_std_setup(client);
1787 1790
1788 return set_input(client, input, state->aud_input); 1791 return set_input(client, input, state->aud_input);
1789} 1792}
@@ -1794,8 +1797,8 @@ static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
1794 struct cx25840_state *state = to_state(sd); 1797 struct cx25840_state *state = to_state(sd);
1795 struct i2c_client *client = v4l2_get_subdevdata(sd); 1798 struct i2c_client *client = v4l2_get_subdevdata(sd);
1796 1799
1797 if (is_cx2388x(state)) 1800 if (is_cx23888(state))
1798 cx23885_std_setup(client); 1801 cx23888_std_setup(client);
1799 return set_input(client, state->vid_input, input); 1802 return set_input(client, state->vid_input, input);
1800} 1803}
1801 1804
@@ -4939,7 +4942,7 @@ void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
4939 } 4942 }
4940} 4943}
4941 4944
4942static void cx23885_std_setup(struct i2c_client *client) 4945static void cx23888_std_setup(struct i2c_client *client)
4943{ 4946{
4944 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); 4947 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
4945 v4l2_std_id std = state->std; 4948 v4l2_std_id std = state->std;