Commit e93854da authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (13634): ir-core: allow passing IR device parameters to ir-core



Adds an structure to ir_input_register to contain IR device characteristics,
like supported protocols and a callback to handle protocol event changes.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 4714eda8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir)
/* -------------------------------------------------------------------------- */

int ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
		   int ir_type)
		  const enum ir_type ir_type)
{
	ir->ir_type = ir_type;

+7 −2
Original line number Diff line number Diff line
@@ -89,6 +89,8 @@ EXPORT_SYMBOL_GPL(ir_roundup_tablesize);
 * @origin:	origin table
 *
 * Copies all entries where the keycode is not KEY_UNKNOWN/KEY_RESERVED
 * Also copies table size and table protocol.
 * NOTE: It shouldn't copy the lock field
 */

int ir_copy_table(struct ir_scancode_table *destin,
@@ -105,6 +107,7 @@ int ir_copy_table(struct ir_scancode_table *destin,
		j++;
	}
	destin->size = j;
	destin->ir_type = origin->ir_type;

	IR_dprintk(1, "Copied %d scancodes to the new keycode table\n", destin->size);

@@ -404,7 +407,8 @@ EXPORT_SYMBOL_GPL(ir_g_keycode_from_table);
 * It should be called before registering the IR device.
 */
int ir_input_register(struct input_dev *input_dev,
		      struct ir_scancode_table *rc_tab)
		      const struct ir_scancode_table *rc_tab,
		      const struct ir_dev_props *props)
{
	struct ir_input_dev *ir_dev;
	struct ir_scancode  *keymap    = rc_tab->scan;
@@ -417,7 +421,7 @@ int ir_input_register(struct input_dev *input_dev,
	if (!ir_dev)
		return -ENOMEM;

	spin_lock_init(&rc_tab->lock);
	spin_lock_init(&ir_dev->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 *
@@ -430,6 +434,7 @@ int ir_input_register(struct input_dev *input_dev,
		ir_dev->rc_tab.size * sizeof(ir_dev->rc_tab.scan));

	ir_copy_table(&ir_dev->rc_tab, rc_tab);
	ir_dev->props = props;

	/* set the bits for the keys */
	IR_dprintk(1, "key map size: %d\n", rc_tab->size);
+2 −2
Original line number Diff line number Diff line
@@ -578,7 +578,7 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)
{
	struct input_dev *input_dev;
	struct ir_scancode_table *ir_codes = &ir_codes_dm1105_nec_table;
	int ir_type = IR_TYPE_OTHER;
	enum ir_type ir_type = IR_TYPE_OTHER;
	int err = -ENOMEM;

	input_dev = input_allocate_device();
@@ -611,7 +611,7 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)

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

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

	return err;
}
+1 −1
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ int mantis_input_init(struct mantis_pci *mantis)
	rc->id.version	= 1;
	rc->dev		= mantis->pdev->dev;

	err = ir_input_register(rc, &ir_mantis);
	err = ir_input_register(rc, &ir_mantis, NULL);
	if (err) {
		dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err);
		input_free_device(rc);
+1 −1
Original line number Diff line number Diff line
@@ -254,7 +254,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);
	error = ir_input_register(input_dev, ir_codes, NULL);
	if (error) {
		printk(KERN_ERR "budget_ci: could not init driver for IR device (code %d)\n", error);
		return error;
Loading