Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 055cd556 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (13537): ir: Prepare the code for dynamic keycode table allocation



Currently, the IR table is initialized by calling ir_input_init(). However,
this function doesn't return any error code, nor has a function to be called
when de-initializing the IR's.

Change the return argment to integer and make sure that each driver will
handle the error code. Also adds a function to free any resources that may
be allocating there: ir_input_free().

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 0278155c
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -54,11 +54,13 @@ static void ir_input_key_event(struct input_dev *dev, struct ir_input_state *ir)

/* -------------------------------------------------------------------------- */

void ir_input_init(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, struct ir_scancode_table *ir_codes)
{
	ir->ir_type = ir_type;

	/* FIXME: Add the proper code to dynamically allocate IR table */

	ir_set_keycode_table(dev, ir_codes);

	clear_bit(0, dev->keybit);
@@ -66,9 +68,17 @@ void ir_input_init(struct input_dev *dev, struct ir_input_state *ir,
	set_bit(EV_KEY, dev->evbit);
	if (repeat)
		set_bit(EV_REP, dev->evbit);

	return 0;
}
EXPORT_SYMBOL_GPL(ir_input_init);

void ir_input_free(struct input_dev *input_dev)
{
	/* FIXME: Add the proper code to free allocated resources */
}
EXPORT_SYMBOL_GPL(ir_input_free);

void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir)
{
	if (ir->keypressed) {
+8 −2
Original line number Diff line number Diff line
@@ -589,7 +589,12 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)
	snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys),
		"pci-%s/ir0", pci_name(dm1105->pdev));

	ir_input_init(input_dev, &dm1105->ir.ir, ir_type, ir_codes);
	err = ir_input_init(input_dev, &dm1105->ir.ir, ir_type, ir_codes);
	if (err < 0) {
		input_free_device(input_dev);
		return err;
	}

	input_dev->name = "DVB on-card IR receiver";
	input_dev->phys = dm1105->ir.input_phys;
	input_dev->id.bustype = BUS_PCI;
@@ -608,6 +613,7 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)

	err = input_register_device(input_dev);
	if (err) {
		ir_input_free(input_dev);
		input_free_device(input_dev);
		return err;
	}
@@ -617,8 +623,8 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)

void __devexit dm1105_ir_exit(struct dm1105dvb *dm1105)
{
	ir_input_free(dm1105->ir.input_dev);
	input_unregister_device(dm1105->ir.input_dev);

}

static int __devinit dm1105dvb_hw_init(struct dm1105dvb *dm1105dvb)
+11 −3
Original line number Diff line number Diff line
@@ -224,8 +224,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	case 0x1011:
	case 0x1012:
		/* The hauppauge keymap is a superset of these remotes */
		ir_input_init(input_dev, &budget_ci->ir.state,
		error = ir_input_init(input_dev, &budget_ci->ir.state,
			      IR_TYPE_RC5, &ir_codes_hauppauge_new_table);
		if (error < 0)
			goto out2;

		if (rc5_device < 0)
			budget_ci->ir.rc5_device = 0x1f;
@@ -236,8 +238,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	case 0x1017:
	case 0x101a:
		/* for the Technotrend 1500 bundled remote */
		ir_input_init(input_dev, &budget_ci->ir.state,
		error = ir_input_init(input_dev, &budget_ci->ir.state,
			      IR_TYPE_RC5, &ir_codes_tt_1500_table);
		if (error < 0)
			goto out2;

		if (rc5_device < 0)
			budget_ci->ir.rc5_device = IR_DEVICE_ANY;
@@ -246,8 +250,10 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
		break;
	default:
		/* unknown remote */
		ir_input_init(input_dev, &budget_ci->ir.state,
		error = ir_input_init(input_dev, &budget_ci->ir.state,
			      IR_TYPE_RC5, &ir_codes_budget_ci_old_table);
		if (error < 0)
			goto out2;

		if (rc5_device < 0)
			budget_ci->ir.rc5_device = IR_DEVICE_ANY;
@@ -280,6 +286,7 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
	return 0;

out2:
	ir_input_free(input_dev);
	input_free_device(input_dev);
out1:
	return error;
@@ -297,6 +304,7 @@ static void msp430_ir_deinit(struct budget_ci *budget_ci)
	del_timer_sync(&dev->timer);
	ir_input_nokey(dev, &budget_ci->ir.state);

	ir_input_free(dev);
	input_unregister_device(dev);
}

+6 −1
Original line number Diff line number Diff line
@@ -368,7 +368,10 @@ int bttv_input_init(struct bttv *btv)
	snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0",
		 pci_name(btv->c.pci));

	ir_input_init(input_dev, &ir->ir, ir_type, ir_codes);
	err = ir_input_init(input_dev, &ir->ir, ir_type, ir_codes);
	if (err < 0)
		goto err_out_free;

	input_dev->name = ir->name;
	input_dev->phys = ir->phys;
	input_dev->id.bustype = BUS_PCI;
@@ -400,6 +403,7 @@ int bttv_input_init(struct bttv *btv)
	bttv_ir_stop(btv);
	btv->remote = NULL;
 err_out_free:
	ir_input_free(input_dev);
	input_free_device(input_dev);
	kfree(ir);
	return err;
@@ -411,6 +415,7 @@ void bttv_input_fini(struct bttv *btv)
		return;

	bttv_ir_stop(btv);
	ir_input_free(btv->remote->dev);
	input_unregister_device(btv->remote->dev);
	kfree(btv->remote);
	btv->remote = NULL;
+7 −1
Original line number Diff line number Diff line
@@ -197,7 +197,11 @@ int cx231xx_ir_init(struct cx231xx *dev)
	usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
	strlcat(ir->phys, "/input0", sizeof(ir->phys));

	ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER, dev->board.ir_codes);
	err = ir_input_init(input_dev, &ir->ir, IR_TYPE_OTHER,
			    dev->board.ir_codes);
	if (err < 0)
		goto err_out_free;

	input_dev->name = ir->name;
	input_dev->phys = ir->phys;
	input_dev->id.bustype = BUS_USB;
@@ -222,6 +226,7 @@ int cx231xx_ir_init(struct cx231xx *dev)
	cx231xx_ir_stop(ir);
	dev->ir = NULL;
err_out_free:
	ir_input_free(input_dev);
	input_free_device(input_dev);
	kfree(ir);
	return err;
@@ -236,6 +241,7 @@ int cx231xx_ir_fini(struct cx231xx *dev)
		return 0;

	cx231xx_ir_stop(ir);
	ir_input_free(ir->input);
	input_unregister_device(ir->input);
	kfree(ir);

Loading