From: Manuel Capinha <mcapinha@gmail.com>

The following patch adds support for the PixelView Ultra Pro video capture
card in v4l.

- It removes the remote control key definitions from ir-kbd-gpio.c and
  moves them to ir-common.c so that they can be shared between bt878 and
  cx88 based cards.

- The patch also moves the FUSIONHDTV_3_GOLD_Q card from number 27 to 28
  to regain compatibility with the V4L cvs.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/media/common/ir-common.c      |   33 +++++++++++++++++++++++++++++++++
 drivers/media/video/cx88/cx88-cards.c |   21 +++++++++++++++++++++
 drivers/media/video/cx88/cx88-input.c |    7 +++++++
 drivers/media/video/cx88/cx88.h       |    3 ++-
 drivers/media/video/ir-kbd-gpio.c     |   32 --------------------------------
 include/media/ir-common.h             |    1 +
 6 files changed, 64 insertions(+), 33 deletions(-)

diff -puN drivers/media/common/ir-common.c~v4l-add-support-for-pixelview-ultra-pro drivers/media/common/ir-common.c
--- 25/drivers/media/common/ir-common.c~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/drivers/media/common/ir-common.c	Thu Jun  2 16:50:24 2005
@@ -213,6 +213,39 @@ IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR
 };
 EXPORT_SYMBOL(ir_codes_hauppauge_new);
 
+IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = {
+	[  2 ] = KEY_KP0,
+	[  1 ] = KEY_KP1,
+	[ 11 ] = KEY_KP2,
+	[ 27 ] = KEY_KP3,
+	[  5 ] = KEY_KP4,
+	[  9 ] = KEY_KP5,
+	[ 21 ] = KEY_KP6,
+	[  6 ] = KEY_KP7,
+	[ 10 ] = KEY_KP8,
+	[ 18 ] = KEY_KP9,
+
+	[  3 ] = KEY_TUNER,       // TV/FM
+	[  7 ] = KEY_SEARCH,      // scan
+	[ 28 ] = KEY_ZOOM,        // full screen
+	[ 30 ] = KEY_POWER,
+	[ 23 ] = KEY_VOLUMEDOWN,
+	[ 31 ] = KEY_VOLUMEUP,
+	[ 20 ] = KEY_CHANNELDOWN,
+	[ 22 ] = KEY_CHANNELUP,
+	[ 24 ] = KEY_MUTE,
+
+	[  0 ] = KEY_LIST,        // source
+	[ 19 ] = KEY_INFO,        // loop
+	[ 16 ] = KEY_LAST,        // +100
+	[ 13 ] = KEY_CLEAR,       // reset
+	[ 12 ] = BTN_RIGHT,       // fun++
+	[  4 ] = BTN_LEFT,        // fun--
+	[ 14 ] = KEY_GOTO,        // function
+	[ 15 ] = KEY_STOP,         // freeze
+};
+EXPORT_SYMBOL(ir_codes_pixelview);
+
 /* -------------------------------------------------------------------------- */
 
 static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir)
diff -puN drivers/media/video/cx88/cx88-cards.c~v4l-add-support-for-pixelview-ultra-pro drivers/media/video/cx88/cx88-cards.c
--- 25/drivers/media/video/cx88/cx88-cards.c~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/drivers/media/video/cx88/cx88-cards.c	Thu Jun  2 16:50:24 2005
@@ -628,6 +628,27 @@ struct cx88_board cx88_boards[] = {
 			.gpio1  = 0x0000e07f,
 		}}
 	},
+	[CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = {
+		.name           = "PixelView PlayTV Ultra Pro (Stereo)",
+		.tuner_type     = 38,
+		.input          = {{
+			.type   = CX88_VMUX_TELEVISION,
+			.vmux   = 0,
+			.gpio0  = 0xbf61,  // internal decoder
+		},{
+			.type   = CX88_VMUX_COMPOSITE1,
+			.vmux   = 1,
+			.gpio0  = 0xbf63,
+		},{
+			.type   = CX88_VMUX_SVIDEO,
+			.vmux   = 2,
+			.gpio0  = 0xbf63,
+		}},
+		.radio = {
+			.type  = CX88_RADIO,
+			.gpio0 = 0xbf60,
+		},
+	},
 };
 const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
 
diff -puN drivers/media/video/cx88/cx88.h~v4l-add-support-for-pixelview-ultra-pro drivers/media/video/cx88/cx88.h
--- 25/drivers/media/video/cx88/cx88.h~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/drivers/media/video/cx88/cx88.h	Thu Jun  2 16:50:24 2005
@@ -162,7 +162,8 @@ extern struct sram_channel cx88_sram_cha
 #define CX88_BOARD_HAUPPAUGE_ROSLYN        24
 #define CX88_BOARD_DIGITALLOGIC_MEC	       25
 #define CX88_BOARD_IODATA_GVBCTV7E         26
-#define CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q   27
+#define CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO 27
+#define CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q   28
 
 enum cx88_itype {
 	CX88_VMUX_COMPOSITE1 = 1,
diff -puN drivers/media/video/cx88/cx88-input.c~v4l-add-support-for-pixelview-ultra-pro drivers/media/video/cx88/cx88-input.c
--- 25/drivers/media/video/cx88/cx88-input.c~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/drivers/media/video/cx88/cx88-input.c	Thu Jun  2 16:50:24 2005
@@ -261,6 +261,13 @@ int cx88_ir_init(struct cx88_core *core,
 		ir->mask_keydown = 0x02;
 		ir->polling      = 5; // ms
 		break;
+	case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO:
+		ir_codes         = ir_codes_pixelview;
+		ir->gpio_addr    = MO_GP1_IO;
+		ir->mask_keycode = 0x1f;
+		ir->mask_keyup   = 0x80;
+		ir->polling      = 1; // ms
+		break;
 	}
 	if (NULL == ir_codes) {
 		kfree(ir);
diff -puN drivers/media/video/ir-kbd-gpio.c~v4l-add-support-for-pixelview-ultra-pro drivers/media/video/ir-kbd-gpio.c
--- 25/drivers/media/video/ir-kbd-gpio.c~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/drivers/media/video/ir-kbd-gpio.c	Thu Jun  2 16:50:24 2005
@@ -114,38 +114,6 @@ static IR_KEYTAB_TYPE ir_codes_avermedia
 	[ 0x3e ] = KEY_VOLUMEUP,    // 'volume +'
 };
 
-static IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = {
-	[  2 ] = KEY_KP0,
-	[  1 ] = KEY_KP1,
-	[ 11 ] = KEY_KP2,
-	[ 27 ] = KEY_KP3,
-	[  5 ] = KEY_KP4,
-	[  9 ] = KEY_KP5,
-	[ 21 ] = KEY_KP6,
-	[  6 ] = KEY_KP7,
-	[ 10 ] = KEY_KP8,
-	[ 18 ] = KEY_KP9,
-
-	[  3 ] = KEY_TUNER,       // TV/FM
-	[  7 ] = KEY_SEARCH,      // scan
-	[ 28 ] = KEY_ZOOM,        // full screen
-	[ 30 ] = KEY_POWER,
-	[ 23 ] = KEY_VOLUMEDOWN,
-	[ 31 ] = KEY_VOLUMEUP,
-	[ 20 ] = KEY_CHANNELDOWN,
-	[ 22 ] = KEY_CHANNELUP,
-	[ 24 ] = KEY_MUTE,
-
-	[  0 ] = KEY_LIST,        // source
-	[ 19 ] = KEY_INFO,        // loop
-	[ 16 ] = KEY_LAST,        // +100
-	[ 13 ] = KEY_CLEAR,       // reset
-	[ 12 ] = BTN_RIGHT,       // fun++
-	[  4 ] = BTN_LEFT,        // fun--
-	[ 14 ] = KEY_GOTO,        // function
-	[ 15 ] = KEY_STOP,         // freeze
-};
-
 /* Attila Kondoros <attila.kondoros@chello.hu> */
 static IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE] = {
 
diff -puN include/media/ir-common.h~v4l-add-support-for-pixelview-ultra-pro include/media/ir-common.h
--- 25/include/media/ir-common.h~v4l-add-support-for-pixelview-ultra-pro	Thu Jun  2 16:50:24 2005
+++ 25-akpm/include/media/ir-common.h	Thu Jun  2 16:50:24 2005
@@ -50,6 +50,7 @@ extern IR_KEYTAB_TYPE ir_codes_rc5_tv[IR
 extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE];
 extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE];
 extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
+extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE];
 
 void ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
 		   int ir_type, IR_KEYTAB_TYPE *ir_codes);
_