Commit 02858eed authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB: ir-core: Make use of the new IR keymap modules



Instead of using the ugly keymap sequences, use the new rc-*.ko keymap
files. For now, it is still needed to have one keymap loaded, for the
RC code to work. Later patches will remove this depenency.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent b2245ba1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
ir-common-objs  := ir-functions.o ir-keymaps.o
ir-core-objs	:= ir-keytable.o ir-sysfs.o ir-raw-event.o rc-map.o

obj-y += keymaps/

obj-$(CONFIG_IR_CORE) += ir-core.o
obj-$(CONFIG_VIDEO_IR) += ir-common.o
obj-$(CONFIG_IR_NEC_DECODER) += ir-nec-decoder.o
+3 −1
Original line number Diff line number Diff line
@@ -251,8 +251,10 @@ static int __init ir_core_init(void)
		return rc;
	}

	/* Initialize/load the decoders that will be used */
	/* Initialize/load the decoders/keymap code that will be used */
	ir_raw_init();
	rc_map_init();


	return 0;
}
+21 −6
Original line number Diff line number Diff line
@@ -26,12 +26,14 @@ static struct rc_keymap *seek_rc_map(const char *name)

	spin_lock(&rc_map_lock);
	list_for_each_entry(map, &rc_map_list, list) {
		if (!strcmp(name, map->map.name))
			break;
		if (!strcmp(name, map->map.name)) {
			spin_unlock(&rc_map_lock);
			return map;
		}
	}
	spin_unlock(&rc_map_lock);

	return map;
	return NULL;
}

struct ir_scancode_table *get_rc_map(const char *name)
@@ -43,15 +45,22 @@ struct ir_scancode_table *get_rc_map(const char *name)
	map = seek_rc_map(name);
#ifdef MODULE
	if (!map) {
		rc = request_module("name");
		if (rc < 0)
		rc = request_module(name);
		if (rc < 0) {
			printk(KERN_ERR "Couldn't load IR keymap %s\n", name);
			return NULL;
		}
		msleep(20);	/* Give some time for IR to register */

		map = seek_rc_map(name);
	}
#endif
	if (!map)
	if (!map) {
		printk(KERN_ERR "IR keymap %s not found\n", name);
		return NULL;
	}

	printk(KERN_INFO "Registered IR keymap %s\n", map->map.name);

	return &map->map;
}
@@ -73,3 +82,9 @@ void ir_unregister_map(struct rc_keymap *map)
	spin_unlock(&rc_map_lock);
}
EXPORT_SYMBOL_GPL(ir_unregister_map);

void rc_map_init(void)
{
	spin_lock_init(&rc_map_lock);

}
+2 −2
Original line number Diff line number Diff line
@@ -596,7 +596,7 @@ static irqreturn_t dm1105_irq(int irq, void *dev_id)
int __devinit dm1105_ir_init(struct dm1105_dev *dm1105)
{
	struct input_dev *input_dev;
	struct ir_scancode_table *ir_codes = &IR_KEYTABLE(dm1105_nec);
	char *ir_codes = NULL;
	u64 ir_type = IR_TYPE_OTHER;
	int err = -ENOMEM;

@@ -630,7 +630,7 @@ int __devinit dm1105_ir_init(struct dm1105_dev *dm1105)

	INIT_WORK(&dm1105->ir.work, dm1105_emit_key);

	err = __ir_input_register(input_dev, ir_codes, NULL, MODULE_NAME);
	err = ir_input_register(input_dev, ir_codes, NULL, MODULE_NAME);

	return err;
}
+5 −5
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	struct saa7146_dev *saa = budget_ci->budget.dev;
	struct input_dev *input_dev = budget_ci->ir.dev;
	int error;
	struct ir_scancode_table *ir_codes;
	char *ir_codes = NULL;


	budget_ci->ir.dev = input_dev = input_allocate_device();
@@ -232,7 +232,7 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	case 0x1011:
	case 0x1012:
		/* The hauppauge keymap is a superset of these remotes */
		ir_codes = &IR_KEYTABLE(hauppauge_new);
		ir_codes = RC_MAP_HAUPPAUGE_NEW;

		if (rc5_device < 0)
			budget_ci->ir.rc5_device = 0x1f;
@@ -241,11 +241,11 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	case 0x1017:
	case 0x101a:
		/* for the Technotrend 1500 bundled remote */
		ir_codes = &IR_KEYTABLE(tt_1500);
		ir_codes = RC_MAP_TT_1500;
		break;
	default:
		/* unknown remote */
		ir_codes = &IR_KEYTABLE(budget_ci_old);
		ir_codes = RC_MAP_BUDGET_CI_OLD;
		break;
	}

@@ -256,7 +256,7 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	budget_ci->ir.timer_keyup.function = msp430_ir_keyup;
	budget_ci->ir.timer_keyup.data = (unsigned long) &budget_ci->ir;
	budget_ci->ir.last_raw = 0xffff; /* An impossible value */
	error = __ir_input_register(input_dev, ir_codes, NULL, MODULE_NAME);
	error = ir_input_register(input_dev, ir_codes, NULL, MODULE_NAME);
	if (error) {
		printk(KERN_ERR "budget_ci: could not init driver for IR device (code %d)\n", error);
		return error;
Loading