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>
This commit is contained in:
Родитель
157da2762c
Коммит
1b6e59e3f4
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче