rc_map
char *rc_map;
rc_map = RC_MAP_HAUPPAUGE;
rc_map = RC_MAP_NEC_TERRATEC_CINERGY_XS;
rc_map = RC_MAP_TEVII_NEC;
rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02;
rc_map = RC_MAP_TBS_NEC;
rc_map = RC_MAP_DVBSKY;
rc_map = RC_MAP_TT_1500;
rc->map_name = rc_map;
rc_dev->map_name = dev->info->rc_map;
.rc_map = RC_MAP_DVBSKY,
.rc_map = RC_MAP_DVBSKY,
.rc_map = RC_MAP_DVBSKY,
.rc_map = RC_MAP_TT_1500,
char *rc_map;
if (mceusb_model[ir->model].rc_map)
rc->map_name = mceusb_model[ir->model].rc_map;
const char *rc_map; /* Allow specify a per-board map */
.rc_map = RC_MAP_TIVO,
.rc_map = RC_MAP_MSI_DIGIVOX_III,
.rc_map = RC_MAP_ASTROMETA_T2HYBRID,
struct rc_map *rc_map_get(const char *name)
if (ret == 0 && dev->rc_map.name)
ret = add_uevent_var(env, "NAME=%s", dev->rc_map.name);
spin_lock_init(&dev->rc_map.lock);
struct rc_map *rc_map;
rc_map = rc_map_get(dev->map_name);
if (!rc_map)
rc_map = rc_map_get(RC_MAP_EMPTY);
if (!rc_map || !rc_map->scan || rc_map->size == 0)
rc = ir_setkeytable(dev, rc_map);
rc_proto = BIT_ULL(rc_map->rc_proto);
ir_free_table(&dev->rc_map);
ir_free_table(&dev->rc_map);
ir_free_table(&dev->rc_map);
static int ir_create_table(struct rc_dev *dev, struct rc_map *rc_map,
rc_map->name = kstrdup(name, GFP_KERNEL);
if (!rc_map->name)
rc_map->rc_proto = rc_proto;
rc_map->alloc = roundup_pow_of_two(size * sizeof(struct rc_map_table));
rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
rc_map->scan = kmalloc(rc_map->alloc, GFP_KERNEL);
if (!rc_map->scan) {
kfree(rc_map->name);
rc_map->name = NULL;
rc_map->size, rc_map->alloc);
static void ir_free_table(struct rc_map *rc_map)
rc_map->size = 0;
kfree(rc_map->name);
rc_map->name = NULL;
kfree(rc_map->scan);
rc_map->scan = NULL;
static int ir_resize_table(struct rc_dev *dev, struct rc_map *rc_map,
unsigned int oldalloc = rc_map->alloc;
struct rc_map_table *oldscan = rc_map->scan;
if (rc_map->size == rc_map->len) {
if (rc_map->alloc >= IR_TAB_MAX_SIZE)
if ((rc_map->len * 3 < rc_map->size) && (oldalloc > IR_TAB_MIN_SIZE)) {
memcpy(newscan, rc_map->scan, rc_map->len * sizeof(struct rc_map_table));
rc_map->scan = newscan;
rc_map->alloc = newalloc;
rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
struct rc_map *rc_map,
int old_keycode = rc_map->scan[index].keycode;
index, rc_map->scan[index].scancode);
rc_map->len--;
memmove(&rc_map->scan[index], &rc_map->scan[index+ 1],
(rc_map->len - index) * sizeof(struct rc_map_table));
rc_map->scan[index].scancode, new_keycode);
rc_map->scan[index].keycode = new_keycode;
for (i = 0; i < rc_map->len; i++) {
if (rc_map->scan[i].keycode == old_keycode) {
ir_resize_table(dev, rc_map, GFP_ATOMIC);
struct rc_map *rc_map,
for (i = 0; i < rc_map->len; i++) {
if (rc_map->scan[i].scancode == scancode)
if (rc_map->scan[i].scancode >= scancode)
if (rc_map->size == rc_map->len) {
if (!resize || ir_resize_table(dev, rc_map, GFP_ATOMIC))
if (i < rc_map->len)
memmove(&rc_map->scan[i + 1], &rc_map->scan[i],
(rc_map->len - i) * sizeof(struct rc_map_table));
rc_map->scan[i].scancode = scancode;
rc_map->scan[i].keycode = KEY_RESERVED;
rc_map->len++;
struct rc_map *rc_map = &rdev->rc_map;
spin_lock_irqsave(&rc_map->lock, flags);
if (index >= rc_map->len) {
index = ir_establish_scancode(rdev, rc_map, scancode, true);
if (index >= rc_map->len) {
*old_keycode = ir_update_mapping(rdev, rc_map, index, ke->keycode);
spin_unlock_irqrestore(&rc_map->lock, flags);
static int ir_setkeytable(struct rc_dev *dev, const struct rc_map *from)
struct rc_map *rc_map = &dev->rc_map;
rc = ir_create_table(dev, rc_map, from->name, from->rc_proto,
index = ir_establish_scancode(dev, rc_map,
if (index >= rc_map->len) {
ir_update_mapping(dev, rc_map, index,
ir_free_table(rc_map);
static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map,
res = bsearch(&scancode, rc_map->scan, rc_map->len,
return res - rc_map->scan;
struct rc_map *rc_map = &rdev->rc_map;
spin_lock_irqsave(&rc_map->lock, flags);
index = ir_lookup_by_scancode(rc_map, scancode);
if (index < rc_map->len) {
entry = &rc_map->scan[index];
spin_unlock_irqrestore(&rc_map->lock, flags);
struct rc_map *rc_map = &dev->rc_map;
spin_lock_irqsave(&rc_map->lock, flags);
index = ir_lookup_by_scancode(rc_map, scancode);
keycode = index < rc_map->len ?
rc_map->scan[index].keycode : KEY_RESERVED;
spin_unlock_irqrestore(&rc_map->lock, flags);
struct rc_map *ir_codes;
const char *rc_map;
const char *rc_map;
.rc_map = (rc), \
d->rc.map_name = d->rc_map;
d->rc_map = driver_info->rc_map;
d->rc_map = NULL;
struct rc_map rc_map;
struct rc_map map;
struct rc_map *rc_map_get(const char *name);