Loading drivers/media/IR/ir-functions.c +2 −15 Original line number Diff line number Diff line Loading @@ -56,24 +56,11 @@ int ir_input_init(struct input_dev *dev, struct ir_input_state *ir, { ir->ir_type = ir_type; ir->keytable.size = ir_roundup_tablesize(ir_codes->size); ir->keytable.scan = kzalloc(ir->keytable.size * sizeof(struct ir_scancode), GFP_KERNEL); if (!ir->keytable.scan) return -ENOMEM; IR_dprintk(1, "Allocated space for %d keycode entries (%zd bytes)\n", ir->keytable.size, ir->keytable.size * sizeof(ir->keytable.scan)); ir_copy_table(&ir->keytable, ir_codes); ir_set_keycode_table(dev, &ir->keytable); clear_bit(0, dev->keybit); set_bit(EV_KEY, dev->evbit); if (repeat) set_bit(EV_REP, dev->evbit); ir_input_register(dev, ir_codes); return 0; } EXPORT_SYMBOL_GPL(ir_input_init); Loading drivers/media/IR/ir-keytable.c +39 −12 Original line number Diff line number Diff line Loading @@ -125,7 +125,8 @@ static int ir_getkeycode(struct input_dev *dev, int scancode, int *keycode) { int elem; struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; elem = ir_seek_table(rc_tab, scancode); if (elem >= 0) { Loading Loading @@ -296,7 +297,8 @@ static int ir_setkeycode(struct input_dev *dev, int scancode, int keycode) { int rc = 0; struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; struct ir_scancode *keymap = rc_tab->scan; unsigned long flags; Loading Loading @@ -370,7 +372,8 @@ static int ir_setkeycode(struct input_dev *dev, */ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode) { struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; struct ir_scancode *keymap = rc_tab->scan; int elem; Loading @@ -391,7 +394,7 @@ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode) EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); /** * ir_set_keycode_table() - sets the IR keycode table and add the handlers * ir_input_register() - sets the IR keycode table and add the handlers * for keymap table get/set * @input_dev: the struct input_dev descriptor of the device * @rc_tab: the struct ir_scancode_table table of scancode/keymap Loading @@ -400,17 +403,34 @@ EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); * an IR. * It should be called before registering the IR device. */ int ir_set_keycode_table(struct input_dev *input_dev, int ir_input_register(struct input_dev *input_dev, struct ir_scancode_table *rc_tab) { struct ir_input_dev *ir_dev; struct ir_scancode *keymap = rc_tab->scan; int i; spin_lock_init(&rc_tab->lock); if (rc_tab->scan == NULL || !rc_tab->size) return -EINVAL; ir_dev = kzalloc(sizeof(*ir_dev), GFP_KERNEL); if (!ir_dev) return -ENOMEM; spin_lock_init(&rc_tab->lock); ir_dev->rc_tab.size = ir_roundup_tablesize(rc_tab->size); ir_dev->rc_tab.scan = kzalloc(ir_dev->rc_tab.size * sizeof(struct ir_scancode), GFP_KERNEL); if (!ir_dev->rc_tab.scan) return -ENOMEM; IR_dprintk(1, "Allocated space for %d keycode entries (%zd bytes)\n", ir_dev->rc_tab.size, ir_dev->rc_tab.size * sizeof(ir_dev->rc_tab.scan)); ir_copy_table(&ir_dev->rc_tab, rc_tab); /* set the bits for the keys */ IR_dprintk(1, "key map size: %d\n", rc_tab->size); for (i = 0; i < rc_tab->size; i++) { Loading @@ -418,18 +438,22 @@ int ir_set_keycode_table(struct input_dev *input_dev, i, keymap[i].keycode); set_bit(keymap[i].keycode, input_dev->keybit); } clear_bit(0, input_dev->keybit); set_bit(EV_KEY, input_dev->evbit); input_dev->getkeycode = ir_getkeycode; input_dev->setkeycode = ir_setkeycode; input_set_drvdata(input_dev, rc_tab); input_set_drvdata(input_dev, ir_dev); return 0; } EXPORT_SYMBOL_GPL(ir_set_keycode_table); EXPORT_SYMBOL_GPL(ir_input_register); void ir_input_free(struct input_dev *dev) { struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; if (!rc_tab) return; Loading @@ -439,6 +463,9 @@ void ir_input_free(struct input_dev *dev) rc_tab->size = 0; kfree(rc_tab->scan); rc_tab->scan = NULL; kfree(ir_dev); input_set_drvdata(dev, NULL); } EXPORT_SYMBOL_GPL(ir_input_free); Loading include/media/ir-common.h +0 −2 Original line number Diff line number Diff line Loading @@ -37,8 +37,6 @@ struct ir_input_state { /* configuration */ int ir_type; struct ir_scancode_table keytable; /* key info */ u32 ir_key; /* ir scancode */ u32 keycode; /* linux key code */ Loading include/media/ir-core.h +7 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,11 @@ struct ir_scancode_table { spinlock_t lock; }; struct ir_input_dev { struct input_dev *dev; struct ir_scancode_table rc_tab; }; /* Routines from ir-keytable.c */ u32 ir_g_keycode_from_table(struct input_dev *input_dev, Loading @@ -50,8 +55,8 @@ int ir_set_keycode_table(struct input_dev *input_dev, struct ir_scancode_table *rc_tab); int ir_roundup_tablesize(int n_elems); int ir_copy_table(struct ir_scancode_table *destin, const struct ir_scancode_table *origin); int ir_input_register(struct input_dev *dev, struct ir_scancode_table *ir_codes); void ir_input_free(struct input_dev *input_dev); #endif Loading
drivers/media/IR/ir-functions.c +2 −15 Original line number Diff line number Diff line Loading @@ -56,24 +56,11 @@ int ir_input_init(struct input_dev *dev, struct ir_input_state *ir, { ir->ir_type = ir_type; ir->keytable.size = ir_roundup_tablesize(ir_codes->size); ir->keytable.scan = kzalloc(ir->keytable.size * sizeof(struct ir_scancode), GFP_KERNEL); if (!ir->keytable.scan) return -ENOMEM; IR_dprintk(1, "Allocated space for %d keycode entries (%zd bytes)\n", ir->keytable.size, ir->keytable.size * sizeof(ir->keytable.scan)); ir_copy_table(&ir->keytable, ir_codes); ir_set_keycode_table(dev, &ir->keytable); clear_bit(0, dev->keybit); set_bit(EV_KEY, dev->evbit); if (repeat) set_bit(EV_REP, dev->evbit); ir_input_register(dev, ir_codes); return 0; } EXPORT_SYMBOL_GPL(ir_input_init); Loading
drivers/media/IR/ir-keytable.c +39 −12 Original line number Diff line number Diff line Loading @@ -125,7 +125,8 @@ static int ir_getkeycode(struct input_dev *dev, int scancode, int *keycode) { int elem; struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; elem = ir_seek_table(rc_tab, scancode); if (elem >= 0) { Loading Loading @@ -296,7 +297,8 @@ static int ir_setkeycode(struct input_dev *dev, int scancode, int keycode) { int rc = 0; struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; struct ir_scancode *keymap = rc_tab->scan; unsigned long flags; Loading Loading @@ -370,7 +372,8 @@ static int ir_setkeycode(struct input_dev *dev, */ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode) { struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; struct ir_scancode *keymap = rc_tab->scan; int elem; Loading @@ -391,7 +394,7 @@ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode) EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); /** * ir_set_keycode_table() - sets the IR keycode table and add the handlers * ir_input_register() - sets the IR keycode table and add the handlers * for keymap table get/set * @input_dev: the struct input_dev descriptor of the device * @rc_tab: the struct ir_scancode_table table of scancode/keymap Loading @@ -400,17 +403,34 @@ EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); * an IR. * It should be called before registering the IR device. */ int ir_set_keycode_table(struct input_dev *input_dev, int ir_input_register(struct input_dev *input_dev, struct ir_scancode_table *rc_tab) { struct ir_input_dev *ir_dev; struct ir_scancode *keymap = rc_tab->scan; int i; spin_lock_init(&rc_tab->lock); if (rc_tab->scan == NULL || !rc_tab->size) return -EINVAL; ir_dev = kzalloc(sizeof(*ir_dev), GFP_KERNEL); if (!ir_dev) return -ENOMEM; spin_lock_init(&rc_tab->lock); ir_dev->rc_tab.size = ir_roundup_tablesize(rc_tab->size); ir_dev->rc_tab.scan = kzalloc(ir_dev->rc_tab.size * sizeof(struct ir_scancode), GFP_KERNEL); if (!ir_dev->rc_tab.scan) return -ENOMEM; IR_dprintk(1, "Allocated space for %d keycode entries (%zd bytes)\n", ir_dev->rc_tab.size, ir_dev->rc_tab.size * sizeof(ir_dev->rc_tab.scan)); ir_copy_table(&ir_dev->rc_tab, rc_tab); /* set the bits for the keys */ IR_dprintk(1, "key map size: %d\n", rc_tab->size); for (i = 0; i < rc_tab->size; i++) { Loading @@ -418,18 +438,22 @@ int ir_set_keycode_table(struct input_dev *input_dev, i, keymap[i].keycode); set_bit(keymap[i].keycode, input_dev->keybit); } clear_bit(0, input_dev->keybit); set_bit(EV_KEY, input_dev->evbit); input_dev->getkeycode = ir_getkeycode; input_dev->setkeycode = ir_setkeycode; input_set_drvdata(input_dev, rc_tab); input_set_drvdata(input_dev, ir_dev); return 0; } EXPORT_SYMBOL_GPL(ir_set_keycode_table); EXPORT_SYMBOL_GPL(ir_input_register); void ir_input_free(struct input_dev *dev) { struct ir_scancode_table *rc_tab = input_get_drvdata(dev); struct ir_input_dev *ir_dev = input_get_drvdata(dev); struct ir_scancode_table *rc_tab = &ir_dev->rc_tab; if (!rc_tab) return; Loading @@ -439,6 +463,9 @@ void ir_input_free(struct input_dev *dev) rc_tab->size = 0; kfree(rc_tab->scan); rc_tab->scan = NULL; kfree(ir_dev); input_set_drvdata(dev, NULL); } EXPORT_SYMBOL_GPL(ir_input_free); Loading
include/media/ir-common.h +0 −2 Original line number Diff line number Diff line Loading @@ -37,8 +37,6 @@ struct ir_input_state { /* configuration */ int ir_type; struct ir_scancode_table keytable; /* key info */ u32 ir_key; /* ir scancode */ u32 keycode; /* linux key code */ Loading
include/media/ir-core.h +7 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,11 @@ struct ir_scancode_table { spinlock_t lock; }; struct ir_input_dev { struct input_dev *dev; struct ir_scancode_table rc_tab; }; /* Routines from ir-keytable.c */ u32 ir_g_keycode_from_table(struct input_dev *input_dev, Loading @@ -50,8 +55,8 @@ int ir_set_keycode_table(struct input_dev *input_dev, struct ir_scancode_table *rc_tab); int ir_roundup_tablesize(int n_elems); int ir_copy_table(struct ir_scancode_table *destin, const struct ir_scancode_table *origin); int ir_input_register(struct input_dev *dev, struct ir_scancode_table *ir_codes); void ir_input_free(struct input_dev *input_dev); #endif