[PATCH] v4l: add support for PixelView Ultra Pro

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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Manuel Capinha and committed by Linus Torvalds 239df2e2 d81ef559

+64 -33
+33
drivers/media/common/ir-common.c
··· 213 213 }; 214 214 EXPORT_SYMBOL(ir_codes_hauppauge_new); 215 215 216 + IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = { 217 + [ 2 ] = KEY_KP0, 218 + [ 1 ] = KEY_KP1, 219 + [ 11 ] = KEY_KP2, 220 + [ 27 ] = KEY_KP3, 221 + [ 5 ] = KEY_KP4, 222 + [ 9 ] = KEY_KP5, 223 + [ 21 ] = KEY_KP6, 224 + [ 6 ] = KEY_KP7, 225 + [ 10 ] = KEY_KP8, 226 + [ 18 ] = KEY_KP9, 227 + 228 + [ 3 ] = KEY_TUNER, // TV/FM 229 + [ 7 ] = KEY_SEARCH, // scan 230 + [ 28 ] = KEY_ZOOM, // full screen 231 + [ 30 ] = KEY_POWER, 232 + [ 23 ] = KEY_VOLUMEDOWN, 233 + [ 31 ] = KEY_VOLUMEUP, 234 + [ 20 ] = KEY_CHANNELDOWN, 235 + [ 22 ] = KEY_CHANNELUP, 236 + [ 24 ] = KEY_MUTE, 237 + 238 + [ 0 ] = KEY_LIST, // source 239 + [ 19 ] = KEY_INFO, // loop 240 + [ 16 ] = KEY_LAST, // +100 241 + [ 13 ] = KEY_CLEAR, // reset 242 + [ 12 ] = BTN_RIGHT, // fun++ 243 + [ 4 ] = BTN_LEFT, // fun-- 244 + [ 14 ] = KEY_GOTO, // function 245 + [ 15 ] = KEY_STOP, // freeze 246 + }; 247 + EXPORT_SYMBOL(ir_codes_pixelview); 248 + 216 249 /* -------------------------------------------------------------------------- */ 217 250 218 251 static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir)
+21
drivers/media/video/cx88/cx88-cards.c
··· 628 628 .gpio1 = 0x0000e07f, 629 629 }} 630 630 }, 631 + [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = { 632 + .name = "PixelView PlayTV Ultra Pro (Stereo)", 633 + .tuner_type = 38, 634 + .input = {{ 635 + .type = CX88_VMUX_TELEVISION, 636 + .vmux = 0, 637 + .gpio0 = 0xbf61, // internal decoder 638 + },{ 639 + .type = CX88_VMUX_COMPOSITE1, 640 + .vmux = 1, 641 + .gpio0 = 0xbf63, 642 + },{ 643 + .type = CX88_VMUX_SVIDEO, 644 + .vmux = 2, 645 + .gpio0 = 0xbf63, 646 + }}, 647 + .radio = { 648 + .type = CX88_RADIO, 649 + .gpio0 = 0xbf60, 650 + }, 651 + }, 631 652 }; 632 653 const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); 633 654
+7
drivers/media/video/cx88/cx88-input.c
··· 261 261 ir->mask_keydown = 0x02; 262 262 ir->polling = 5; // ms 263 263 break; 264 + case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO: 265 + ir_codes = ir_codes_pixelview; 266 + ir->gpio_addr = MO_GP1_IO; 267 + ir->mask_keycode = 0x1f; 268 + ir->mask_keyup = 0x80; 269 + ir->polling = 1; // ms 270 + break; 264 271 } 265 272 if (NULL == ir_codes) { 266 273 kfree(ir);
+2 -1
drivers/media/video/cx88/cx88.h
··· 162 162 #define CX88_BOARD_HAUPPAUGE_ROSLYN 24 163 163 #define CX88_BOARD_DIGITALLOGIC_MEC 25 164 164 #define CX88_BOARD_IODATA_GVBCTV7E 26 165 - #define CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q 27 165 + #define CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO 27 166 + #define CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q 28 166 167 167 168 enum cx88_itype { 168 169 CX88_VMUX_COMPOSITE1 = 1,
-32
drivers/media/video/ir-kbd-gpio.c
··· 114 114 [ 0x3e ] = KEY_VOLUMEUP, // 'volume +' 115 115 }; 116 116 117 - static IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = { 118 - [ 2 ] = KEY_KP0, 119 - [ 1 ] = KEY_KP1, 120 - [ 11 ] = KEY_KP2, 121 - [ 27 ] = KEY_KP3, 122 - [ 5 ] = KEY_KP4, 123 - [ 9 ] = KEY_KP5, 124 - [ 21 ] = KEY_KP6, 125 - [ 6 ] = KEY_KP7, 126 - [ 10 ] = KEY_KP8, 127 - [ 18 ] = KEY_KP9, 128 - 129 - [ 3 ] = KEY_TUNER, // TV/FM 130 - [ 7 ] = KEY_SEARCH, // scan 131 - [ 28 ] = KEY_ZOOM, // full screen 132 - [ 30 ] = KEY_POWER, 133 - [ 23 ] = KEY_VOLUMEDOWN, 134 - [ 31 ] = KEY_VOLUMEUP, 135 - [ 20 ] = KEY_CHANNELDOWN, 136 - [ 22 ] = KEY_CHANNELUP, 137 - [ 24 ] = KEY_MUTE, 138 - 139 - [ 0 ] = KEY_LIST, // source 140 - [ 19 ] = KEY_INFO, // loop 141 - [ 16 ] = KEY_LAST, // +100 142 - [ 13 ] = KEY_CLEAR, // reset 143 - [ 12 ] = BTN_RIGHT, // fun++ 144 - [ 4 ] = BTN_LEFT, // fun-- 145 - [ 14 ] = KEY_GOTO, // function 146 - [ 15 ] = KEY_STOP, // freeze 147 - }; 148 - 149 117 /* Attila Kondoros <attila.kondoros@chello.hu> */ 150 118 static IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE] = { 151 119
+1
include/media/ir-common.h
··· 50 50 extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE]; 51 51 extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE]; 52 52 extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE]; 53 + extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; 53 54 54 55 void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, 55 56 int ir_type, IR_KEYTAB_TYPE *ir_codes);