diff options
author | Devin Heitmueller <dheitmueller@kernellabs.com> | 2012-07-01 15:15:09 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-07-06 18:36:30 -0400 |
commit | ba50e7e16b86e25048290b682f7a4e09e069d321 (patch) | |
tree | 6f79eccf4d48f5aa9f9a821c7af9d6fc03c888f3 /drivers/media/video | |
parent | a65c3262a766311d4704a9ea29354480c5e8590d (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>
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/cx25840/cx25840-core.c | 23 |
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 | /* ----------------------------------------------------------------------- */ |
87 | static void cx23885_std_setup(struct i2c_client *client); | 87 | static void cx23888_std_setup(struct i2c_client *client); |
88 | 88 | ||
89 | int cx25840_write(struct i2c_client *client, u16 addr, u8 value) | 89 | int 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 | ||
4942 | static void cx23885_std_setup(struct i2c_client *client) | 4945 | static 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; |