aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Walls <awalls@radix.net>2009-07-28 10:44:05 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-09-12 11:18:25 -0400
commit1b6e59e3f48eecdab97bdd1568422e22f7d2f4f5 (patch)
tree20bc019fe092d4ac7cf2ce21d4e70963618082e7
parent157da2762c610073e76329bb030e993fb4c2cc77 (diff)
V4L/DVB (12366): ir-kbd-i2c: Allow use of ir-kdb-i2c internal get_key funcs and set ir_type
This patch augments the init data passed by bridge drivers to ir-kbd-i2c, so that the ir_type can be set explicitly, and so ir-kbd-i2c internal get_key functions can be reused without requiring symbols from ir-kbd-i2c in the bridge driver. Signed-off-by: Andy Walls <awalls@radix.net> Reviewed-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/ir-kbd-i2c.c31
-rw-r--r--include/media/ir-kbd-i2c.h17
2 files changed, 47 insertions, 1 deletions
diff --git a/drivers/media/video/ir-kbd-i2c.c b/drivers/media/video/ir-kbd-i2c.c
index 6e4a2341edf8..f144acc400cd 100644
--- a/drivers/media/video/ir-kbd-i2c.c
+++ b/drivers/media/video/ir-kbd-i2c.c
@@ -392,7 +392,36 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
392 392
393 ir_codes = init_data->ir_codes; 393 ir_codes = init_data->ir_codes;
394 name = init_data->name; 394 name = init_data->name;
395 ir->get_key = init_data->get_key; 395 if (init_data->type)
396 ir_type = init_data->type;
397
398 switch (init_data->internal_get_key_func) {
399 case IR_KBD_GET_KEY_CUSTOM:
400 /* The bridge driver provided us its own function */
401 ir->get_key = init_data->get_key;
402 break;
403 case IR_KBD_GET_KEY_PIXELVIEW:
404 ir->get_key = get_key_pixelview;
405 break;
406 case IR_KBD_GET_KEY_PV951:
407 ir->get_key = get_key_pv951;
408 break;
409 case IR_KBD_GET_KEY_HAUP:
410 ir->get_key = get_key_haup;
411 break;
412 case IR_KBD_GET_KEY_KNC1:
413 ir->get_key = get_key_knc1;
414 break;
415 case IR_KBD_GET_KEY_FUSIONHDTV:
416 ir->get_key = get_key_fusionhdtv;
417 break;
418 case IR_KBD_GET_KEY_HAUP_XVR:
419 ir->get_key = get_key_haup_xvr;
420 break;
421 case IR_KBD_GET_KEY_AVERMEDIA_CARDBUS:
422 ir->get_key = get_key_avermedia_cardbus;
423 break;
424 }
396 } 425 }
397 426
398 /* Make sure we are all setup before going on */ 427 /* Make sure we are all setup before going on */
diff --git a/include/media/ir-kbd-i2c.h b/include/media/ir-kbd-i2c.h
index 3ad4ed5402fb..defef3b18dfd 100644
--- a/include/media/ir-kbd-i2c.h
+++ b/include/media/ir-kbd-i2c.h
@@ -20,10 +20,27 @@ struct IR_i2c {
20 int (*get_key)(struct IR_i2c*, u32*, u32*); 20 int (*get_key)(struct IR_i2c*, u32*, u32*);
21}; 21};
22 22
23enum ir_kbd_get_key_fn {
24 IR_KBD_GET_KEY_CUSTOM = 0,
25 IR_KBD_GET_KEY_PIXELVIEW,
26 IR_KBD_GET_KEY_PV951,
27 IR_KBD_GET_KEY_HAUP,
28 IR_KBD_GET_KEY_KNC1,
29 IR_KBD_GET_KEY_FUSIONHDTV,
30 IR_KBD_GET_KEY_HAUP_XVR,
31 IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
32};
33
23/* Can be passed when instantiating an ir_video i2c device */ 34/* Can be passed when instantiating an ir_video i2c device */
24struct IR_i2c_init_data { 35struct IR_i2c_init_data {
25 IR_KEYTAB_TYPE *ir_codes; 36 IR_KEYTAB_TYPE *ir_codes;
26 const char *name; 37 const char *name;
38 int type; /* IR_TYPE_RC5, IR_TYPE_PD, etc */
39 /*
40 * Specify either a function pointer or a value indicating one of
41 * ir_kbd_i2c's internal get_key functions
42 */
27 int (*get_key)(struct IR_i2c*, u32*, u32*); 43 int (*get_key)(struct IR_i2c*, u32*, u32*);
44 enum ir_kbd_get_key_fn internal_get_key_func;
28}; 45};
29#endif 46#endif