]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
V4L/DVB (12366): ir-kbd-i2c: Allow use of ir-kdb-i2c internal get_key funcs and set...
authorAndy Walls <awalls@radix.net>
Tue, 28 Jul 2009 14:44:05 +0000 (11:44 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 12 Sep 2009 15:18:25 +0000 (12:18 -0300)
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>
drivers/media/video/ir-kbd-i2c.c
include/media/ir-kbd-i2c.h

index 6e4a2341edf89623669cef8ecb061f535bc09f99..f144acc400cdbd1713aa125e924e41927fb4fff6 100644 (file)
@@ -392,7 +392,36 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
                ir_codes = init_data->ir_codes;
                name = init_data->name;
-               ir->get_key = init_data->get_key;
+               if (init_data->type)
+                       ir_type = init_data->type;
+
+               switch (init_data->internal_get_key_func) {
+               case IR_KBD_GET_KEY_CUSTOM:
+                       /* The bridge driver provided us its own function */
+                       ir->get_key = init_data->get_key;
+                       break;
+               case IR_KBD_GET_KEY_PIXELVIEW:
+                       ir->get_key = get_key_pixelview;
+                       break;
+               case IR_KBD_GET_KEY_PV951:
+                       ir->get_key = get_key_pv951;
+                       break;
+               case IR_KBD_GET_KEY_HAUP:
+                       ir->get_key = get_key_haup;
+                       break;
+               case IR_KBD_GET_KEY_KNC1:
+                       ir->get_key = get_key_knc1;
+                       break;
+               case IR_KBD_GET_KEY_FUSIONHDTV:
+                       ir->get_key = get_key_fusionhdtv;
+                       break;
+               case IR_KBD_GET_KEY_HAUP_XVR:
+                       ir->get_key = get_key_haup_xvr;
+                       break;
+               case IR_KBD_GET_KEY_AVERMEDIA_CARDBUS:
+                       ir->get_key = get_key_avermedia_cardbus;
+                       break;
+               }
        }
 
        /* Make sure we are all setup before going on */
index 3ad4ed5402fb8b6782ad6b1600f8dfdfd4394ea1..defef3b18dfddaf5971d536d97fbf731cdb09a67 100644 (file)
@@ -20,10 +20,27 @@ struct IR_i2c {
        int                    (*get_key)(struct IR_i2c*, u32*, u32*);
 };
 
+enum ir_kbd_get_key_fn {
+       IR_KBD_GET_KEY_CUSTOM = 0,
+       IR_KBD_GET_KEY_PIXELVIEW,
+       IR_KBD_GET_KEY_PV951,
+       IR_KBD_GET_KEY_HAUP,
+       IR_KBD_GET_KEY_KNC1,
+       IR_KBD_GET_KEY_FUSIONHDTV,
+       IR_KBD_GET_KEY_HAUP_XVR,
+       IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
+};
+
 /* Can be passed when instantiating an ir_video i2c device */
 struct IR_i2c_init_data {
        IR_KEYTAB_TYPE         *ir_codes;
        const char             *name;
+       int                    type; /* IR_TYPE_RC5, IR_TYPE_PD, etc */
+       /*
+        * Specify either a function pointer or a value indicating one of
+        * ir_kbd_i2c's internal get_key functions
+        */
        int                    (*get_key)(struct IR_i2c*, u32*, u32*);
+       enum ir_kbd_get_key_fn internal_get_key_func;
 };
 #endif