aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx25840/cx25840-core.c
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2009-07-23 12:18:54 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-09-12 12:18:15 -0300
commitf3d6f63302bfcd7462d46bd1fe44146c971634d4 (patch)
tree29f261a29f5ea467e5ca13354d866084f99be55e /drivers/media/video/cx25840/cx25840-core.c
parent73c6f462d1d07f276e279467f311a96a2a43d9c5 (diff)
downloadkernel_samsung_smdk4412-f3d6f63302bfcd7462d46bd1fe44146c971634d4.zip
kernel_samsung_smdk4412-f3d6f63302bfcd7462d46bd1fe44146c971634d4.tar.gz
kernel_samsung_smdk4412-f3d6f63302bfcd7462d46bd1fe44146c971634d4.tar.bz2
V4L/DVB (12347): cx25840: Bugfix for no DVB-T on the Hauppauge HVR-1700
After the i2c subdev changes the ordering of initialization changed, causing a total loss of previous GPIO settings and a loss of DTV. The generic firmware loading routine has now changed to preserve GPIO values if the device is cx23885 based (safety) and I've moved the GPIO configuration from probe() into the cx23885 init func which is a little clearer and fixes the bug. Tested-by: Sohail Syyed <linuxtv@hubstar.net> Reviewed-by: Michael Krufky <mkrufky@kernellabs.com> Signed-off-by: Steven Toth <stoth@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx25840/cx25840-core.c')
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 0be51b6..1aeaf18 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -321,6 +321,15 @@ static void cx23885_initialize(struct i2c_client *client)
/* Select AFE clock pad output source */
cx25840_write(client, 0x144, 0x05);
+ /* Drive GPIO2 direction and values for HVR1700
+ * where an onboard mux selects the output of demodulator
+ * vs the 417. Failure to set this results in no DTV.
+ * It's safe to set this across all Hauppauge boards
+ * currently, regardless of the board type.
+ */
+ cx25840_write(client, 0x160, 0x1d);
+ cx25840_write(client, 0x164, 0x00);
+
/* Do the firmware load in a work handler to prevent.
Otherwise the kernel is blocked waiting for the
bit-banging i2c interface to finish uploading the
@@ -1578,12 +1587,6 @@ static int cx25840_probe(struct i2c_client *client,
state->id = id;
state->rev = device_id;
- if (state->is_cx23885) {
- /* Drive GPIO2 direction and values */
- cx25840_write(client, 0x160, 0x1d);
- cx25840_write(client, 0x164, 0x00);
- }
-
return 0;
}