aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/bt8xx
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2009-08-29 13:15:55 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-09-12 11:19:47 -0400
commit715a223323c8c8bcbe7739e20f6c619f7343b595 (patch)
tree0c7eddcdd3c778428fc936009af085940c0394bb /drivers/media/video/bt8xx
parent47f7f6fb7949b6546baf4b6f26bf0ca075d12759 (diff)
V4L/DVB (12595): common/ir: use a struct for keycode tables
Currently, V4L uses a scancode table whose index is the scancode and the value is the keycode. While this works, it has some drawbacks: 1) It requires that the scancode to be at the range 00-7f; 2) keycodes should be masked on 7 bits in order for it to work; 3) due to the 7 bits approach, sometimes it is not possible to replace the default keyboard to another one with a different encoding rule; 4) it is different than what is done with dvb-usb approach; 5) it requires a typedef for it to work. This is not a recommended Linux CodingStyle. This patch is part of a larger series of IR changes. It basically replaces the IR_KEYTAB_TYPE tables by a structured table: struct ir_scancode { u16 scancode; u32 keycode; }; This is very close to what dvb does. So, a further integration with DVB code will be easy. While we've changed the tables, for now, the IR keycode handling is still based on the old approach. The only notable effect is the redution of about 35% of the ir-common module size: text data bss dec hex filename 6721 29208 4 35933 8c5d old/ir-common.ko 5756 18040 4 23800 5cf8 new/ir-common.ko In thesis, we could be using above u8 for scancode, reducing even more the size of the module, but defining it as u16 is more convenient, since, on dvb, each scancode has up to 16 bits, and we currently have a few troubles with rc5, as their scancodes are defined with more than 8 bits. This patch itself shouldn't be doing any functional changes. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/bt8xx')
-rw-r--r--drivers/media/video/bt8xx/bttv-input.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/media/video/bt8xx/bttv-input.c b/drivers/media/video/bt8xx/bttv-input.c
index 3e7b48e73b01..ebd51afe8761 100644
--- a/drivers/media/video/bt8xx/bttv-input.c
+++ b/drivers/media/video/bt8xx/bttv-input.c
@@ -245,7 +245,7 @@ static void bttv_ir_stop(struct bttv *btv)
245int bttv_input_init(struct bttv *btv) 245int bttv_input_init(struct bttv *btv)
246{ 246{
247 struct card_ir *ir; 247 struct card_ir *ir;
248 IR_KEYTAB_TYPE *ir_codes = NULL; 248 struct ir_scancode_table *ir_codes = NULL;
249 struct input_dev *input_dev; 249 struct input_dev *input_dev;
250 int ir_type = IR_TYPE_OTHER; 250 int ir_type = IR_TYPE_OTHER;
251 int err = -ENOMEM; 251 int err = -ENOMEM;
@@ -263,7 +263,7 @@ int bttv_input_init(struct bttv *btv)
263 case BTTV_BOARD_AVERMEDIA: 263 case BTTV_BOARD_AVERMEDIA:
264 case BTTV_BOARD_AVPHONE98: 264 case BTTV_BOARD_AVPHONE98:
265 case BTTV_BOARD_AVERMEDIA98: 265 case BTTV_BOARD_AVERMEDIA98:
266 ir_codes = ir_codes_avermedia; 266 ir_codes = &ir_codes_avermedia_table;
267 ir->mask_keycode = 0xf88000; 267 ir->mask_keycode = 0xf88000;
268 ir->mask_keydown = 0x010000; 268 ir->mask_keydown = 0x010000;
269 ir->polling = 50; // ms 269 ir->polling = 50; // ms
@@ -271,14 +271,14 @@ int bttv_input_init(struct bttv *btv)
271 271
272 case BTTV_BOARD_AVDVBT_761: 272 case BTTV_BOARD_AVDVBT_761:
273 case BTTV_BOARD_AVDVBT_771: 273 case BTTV_BOARD_AVDVBT_771:
274 ir_codes = ir_codes_avermedia_dvbt; 274 ir_codes = &ir_codes_avermedia_dvbt_table;
275 ir->mask_keycode = 0x0f00c0; 275 ir->mask_keycode = 0x0f00c0;
276 ir->mask_keydown = 0x000020; 276 ir->mask_keydown = 0x000020;
277 ir->polling = 50; // ms 277 ir->polling = 50; // ms
278 break; 278 break;
279 279
280 case BTTV_BOARD_PXELVWPLTVPAK: 280 case BTTV_BOARD_PXELVWPLTVPAK:
281 ir_codes = ir_codes_pixelview; 281 ir_codes = &ir_codes_pixelview_table;
282 ir->mask_keycode = 0x003e00; 282 ir->mask_keycode = 0x003e00;
283 ir->mask_keyup = 0x010000; 283 ir->mask_keyup = 0x010000;
284 ir->polling = 50; // ms 284 ir->polling = 50; // ms
@@ -286,24 +286,24 @@ int bttv_input_init(struct bttv *btv)
286 case BTTV_BOARD_PV_M4900: 286 case BTTV_BOARD_PV_M4900:
287 case BTTV_BOARD_PV_BT878P_9B: 287 case BTTV_BOARD_PV_BT878P_9B:
288 case BTTV_BOARD_PV_BT878P_PLUS: 288 case BTTV_BOARD_PV_BT878P_PLUS:
289 ir_codes = ir_codes_pixelview; 289 ir_codes = &ir_codes_pixelview_table;
290 ir->mask_keycode = 0x001f00; 290 ir->mask_keycode = 0x001f00;
291 ir->mask_keyup = 0x008000; 291 ir->mask_keyup = 0x008000;
292 ir->polling = 50; // ms 292 ir->polling = 50; // ms
293 break; 293 break;
294 294
295 case BTTV_BOARD_WINFAST2000: 295 case BTTV_BOARD_WINFAST2000:
296 ir_codes = ir_codes_winfast; 296 ir_codes = &ir_codes_winfast_table;
297 ir->mask_keycode = 0x1f8; 297 ir->mask_keycode = 0x1f8;
298 break; 298 break;
299 case BTTV_BOARD_MAGICTVIEW061: 299 case BTTV_BOARD_MAGICTVIEW061:
300 case BTTV_BOARD_MAGICTVIEW063: 300 case BTTV_BOARD_MAGICTVIEW063:
301 ir_codes = ir_codes_winfast; 301 ir_codes = &ir_codes_winfast_table;
302 ir->mask_keycode = 0x0008e000; 302 ir->mask_keycode = 0x0008e000;
303 ir->mask_keydown = 0x00200000; 303 ir->mask_keydown = 0x00200000;
304 break; 304 break;
305 case BTTV_BOARD_APAC_VIEWCOMP: 305 case BTTV_BOARD_APAC_VIEWCOMP:
306 ir_codes = ir_codes_apac_viewcomp; 306 ir_codes = &ir_codes_apac_viewcomp_table;
307 ir->mask_keycode = 0x001f00; 307 ir->mask_keycode = 0x001f00;
308 ir->mask_keyup = 0x008000; 308 ir->mask_keyup = 0x008000;
309 ir->polling = 50; // ms 309 ir->polling = 50; // ms
@@ -311,30 +311,30 @@ int bttv_input_init(struct bttv *btv)
311 case BTTV_BOARD_ASKEY_CPH03X: 311 case BTTV_BOARD_ASKEY_CPH03X:
312 case BTTV_BOARD_CONCEPTRONIC_CTVFMI2: 312 case BTTV_BOARD_CONCEPTRONIC_CTVFMI2:
313 case BTTV_BOARD_CONTVFMI: 313 case BTTV_BOARD_CONTVFMI:
314 ir_codes = ir_codes_pixelview; 314 ir_codes = &ir_codes_pixelview_table;
315 ir->mask_keycode = 0x001F00; 315 ir->mask_keycode = 0x001F00;
316 ir->mask_keyup = 0x006000; 316 ir->mask_keyup = 0x006000;
317 ir->polling = 50; // ms 317 ir->polling = 50; // ms
318 break; 318 break;
319 case BTTV_BOARD_NEBULA_DIGITV: 319 case BTTV_BOARD_NEBULA_DIGITV:
320 ir_codes = ir_codes_nebula; 320 ir_codes = &ir_codes_nebula_table;
321 btv->custom_irq = bttv_rc5_irq; 321 btv->custom_irq = bttv_rc5_irq;
322 ir->rc5_gpio = 1; 322 ir->rc5_gpio = 1;
323 break; 323 break;
324 case BTTV_BOARD_MACHTV_MAGICTV: 324 case BTTV_BOARD_MACHTV_MAGICTV:
325 ir_codes = ir_codes_apac_viewcomp; 325 ir_codes = &ir_codes_apac_viewcomp_table;
326 ir->mask_keycode = 0x001F00; 326 ir->mask_keycode = 0x001F00;
327 ir->mask_keyup = 0x004000; 327 ir->mask_keyup = 0x004000;
328 ir->polling = 50; /* ms */ 328 ir->polling = 50; /* ms */
329 break; 329 break;
330 case BTTV_BOARD_KOZUMI_KTV_01C: 330 case BTTV_BOARD_KOZUMI_KTV_01C:
331 ir_codes = ir_codes_pctv_sedna; 331 ir_codes = &ir_codes_pctv_sedna_table;
332 ir->mask_keycode = 0x001f00; 332 ir->mask_keycode = 0x001f00;
333 ir->mask_keyup = 0x006000; 333 ir->mask_keyup = 0x006000;
334 ir->polling = 50; /* ms */ 334 ir->polling = 50; /* ms */
335 break; 335 break;
336 case BTTV_BOARD_ENLTV_FM_2: 336 case BTTV_BOARD_ENLTV_FM_2:
337 ir_codes = ir_codes_encore_enltv2; 337 ir_codes = &ir_codes_encore_enltv2_table;
338 ir->mask_keycode = 0x00fd00; 338 ir->mask_keycode = 0x00fd00;
339 ir->mask_keyup = 0x000080; 339 ir->mask_keyup = 0x000080;
340 ir->polling = 1; /* ms */ 340 ir->polling = 1; /* ms */