Lines Matching refs:rc_tab
28 * @rc_tab: the ir_scancode_table to resize
34 static int ir_resize_table(struct ir_scancode_table *rc_tab)
36 unsigned int oldalloc = rc_tab->alloc;
38 struct ir_scancode *oldscan = rc_tab->scan;
41 if (rc_tab->size == rc_tab->len) {
43 if (rc_tab->alloc >= IR_TAB_MAX_SIZE)
50 if ((rc_tab->len * 3 < rc_tab->size) && (oldalloc > IR_TAB_MIN_SIZE)) {
65 memcpy(newscan, rc_tab->scan, rc_tab->len * sizeof(struct ir_scancode));
66 rc_tab->scan = newscan;
67 rc_tab->alloc = newalloc;
68 rc_tab->size = rc_tab->alloc / sizeof(struct ir_scancode);
77 * @rc_tab: the struct ir_scancode_table to set the keycode in
84 * The caller has to hold @rc_tab->lock.
87 struct ir_scancode_table *rc_tab,
107 for (i = 0; i < rc_tab->len; i++) {
109 if (rc_tab->scan[i].scancode > scancode)
111 else if (rc_tab->scan[i].scancode < scancode)
114 old_keycode = rc_tab->scan[i].keycode;
115 rc_tab->scan[i].keycode = keycode;
121 rc_tab->len--;
122 memmove(&rc_tab->scan[i], &rc_tab->scan[i + 1],
123 (rc_tab->len - i) * sizeof(struct ir_scancode));
127 ir_resize_table(rc_tab);
133 if (resize && ir_resize_table(rc_tab))
140 memmove(&rc_tab->scan[i + 1], &rc_tab->scan[i],
141 (rc_tab->len - i) * sizeof(struct ir_scancode));
142 rc_tab->scan[i].scancode = scancode;
143 rc_tab->scan[i].keycode = keycode;
144 rc_tab->len++;
152 for (i = 0; i < rc_tab->len; i++) {
153 if (rc_tab->scan[i].keycode == old_keycode) {
178 struct ir_scancode_table *rc_tab = &ir_dev->rc_tab;
180 spin_lock_irqsave(&rc_tab->lock, flags);
181 rc = ir_do_setkeycode(dev, rc_tab, scancode, keycode, true);
182 spin_unlock_irqrestore(&rc_tab->lock, flags);
200 struct ir_scancode_table *rc_tab = &ir_dev->rc_tab;
205 spin_lock_irqsave(&rc_tab->lock, flags);
212 spin_unlock_irqrestore(&rc_tab->lock, flags);
232 struct ir_scancode_table *rc_tab = &ir_dev->rc_tab;
234 spin_lock_irqsave(&rc_tab->lock, flags);
236 end = rc_tab->len - 1;
239 if (rc_tab->scan[mid].scancode < scancode)
241 else if (rc_tab->scan[mid].scancode > scancode)
244 key = rc_tab->scan[mid].keycode;
248 spin_unlock_irqrestore(&rc_tab->lock, flags);
427 * @rc_tab: the struct ir_scancode_table table of scancode/keymap
435 const struct ir_scancode_table *rc_tab,
442 if (rc_tab->scan == NULL || !rc_tab->size)
460 spin_lock_init(&ir_dev->rc_tab.lock);
464 ir_dev->rc_tab.name = rc_tab->name;
465 ir_dev->rc_tab.ir_type = rc_tab->ir_type;
466 ir_dev->rc_tab.alloc = roundup_pow_of_two(rc_tab->size *
468 ir_dev->rc_tab.scan = kmalloc(ir_dev->rc_tab.alloc, GFP_KERNEL);
469 ir_dev->rc_tab.size = ir_dev->rc_tab.alloc / sizeof(struct ir_scancode);
478 if (!ir_dev->rc_tab.scan) {
484 ir_dev->rc_tab.size, ir_dev->rc_tab.alloc);
491 if (ir_setkeytable(input_dev, &ir_dev->rc_tab, rc_tab)) {
508 driver_name, rc_tab->name,
524 kfree(ir_dev->rc_tab.scan);
542 struct ir_scancode_table *rc_tab;
554 rc_tab = &ir_dev->rc_tab;
555 rc_tab->size = 0;
556 kfree(rc_tab->scan);
557 rc_tab->scan = NULL;