Skip to content

Commit

Permalink
V4L/DVB (4877): budget-ci IR: improve error checking in init and dein…
Browse files Browse the repository at this point in the history
…it functions

Improve the error checking in the IR init and deinit functions.
Based on Darren Salt's dvb-ir patchset.

Signed-off-by: David Hardeman <david@hardeman.nu>
Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
David Hardeman authored and Mauro Carvalho Chehab committed Dec 10, 2006
1 parent 5cc8ae0 commit 8cc532e
Showing 1 changed file with 37 additions and 23 deletions.
60 changes: 37 additions & 23 deletions drivers/media/dvb/ttpci/budget-ci.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,13 @@ 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 i;
int err;
int error;

budget_ci->ir.dev = input_dev = input_allocate_device();
if (!input_dev)
return -ENOMEM;
if (!input_dev) {
error = -ENOMEM;
goto out1;
}

snprintf(budget_ci->ir.name, sizeof(budget_ci->ir.name),
"Budget-CI dvb ir receiver %s", saa->name);
Expand Down Expand Up @@ -232,20 +234,26 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
if (key_map[i])
set_bit(key_map[i], input_dev->keybit);

err = input_register_device(input_dev);
if (err) {
input_free_device(input_dev);
return err;
error = input_register_device(input_dev);
if (error) {
printk(KERN_ERR "budget_ci: could not init driver for IR device (code %d)\n", error);
goto out2;
}

input_register_device(budget_ci->ir.dev);

input_dev->timer.function = msp430_ir_debounce;

tasklet_init(&budget_ci->ir.msp430_irq_tasklet, msp430_ir_interrupt,
(unsigned long) budget_ci);

saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06);
saa7146_setgpio(saa, 3, SAA7146_GPIO_IRQHI);

return 0;

out2:
input_free_device(input_dev);
out1:
return error;
}

static void msp430_ir_deinit(struct budget_ci *budget_ci)
Expand All @@ -255,6 +263,7 @@ static void msp430_ir_deinit(struct budget_ci *budget_ci)

saa7146_write(saa, IER, saa7146_read(saa, IER) & ~MASK_06);
saa7146_setgpio(saa, 3, SAA7146_GPIO_INPUT);
tasklet_kill(&budget_ci->ir.msp430_irq_tasklet);

if (del_timer(&dev->timer)) {
input_event(dev, EV_KEY, key_map[dev->repeat_key], 0);
Expand Down Expand Up @@ -1115,24 +1124,25 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
struct budget_ci *budget_ci;
int err;

if (!(budget_ci = kmalloc(sizeof(struct budget_ci), GFP_KERNEL)))
return -ENOMEM;
budget_ci = kmalloc(sizeof(struct budget_ci), GFP_KERNEL);
if (!budget_ci) {
err = -ENOMEM;
goto out1;
}

dprintk(2, "budget_ci: %p\n", budget_ci);

budget_ci->budget.ci_present = 0;

dev->ext_priv = budget_ci;

if ((err = ttpci_budget_init(&budget_ci->budget, dev, info, THIS_MODULE))) {
kfree(budget_ci);
return err;
}
err = ttpci_budget_init(&budget_ci->budget, dev, info, THIS_MODULE);
if (err)
goto out2;

tasklet_init(&budget_ci->ir.msp430_irq_tasklet, msp430_ir_interrupt,
(unsigned long) budget_ci);

msp430_ir_init(budget_ci);
err = msp430_ir_init(budget_ci);
if (err)
goto out3;

ciintf_init(budget_ci);

Expand All @@ -1142,6 +1152,13 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
ttpci_budget_init_hooks(&budget_ci->budget);

return 0;

out3:
ttpci_budget_deinit(&budget_ci->budget);
out2:
kfree(budget_ci);
out1:
return err;
}

static int budget_ci_detach(struct saa7146_dev *dev)
Expand All @@ -1152,16 +1169,13 @@ static int budget_ci_detach(struct saa7146_dev *dev)

if (budget_ci->budget.ci_present)
ciintf_deinit(budget_ci);
msp430_ir_deinit(budget_ci);
if (budget_ci->budget.dvb_frontend) {
dvb_unregister_frontend(budget_ci->budget.dvb_frontend);
dvb_frontend_detach(budget_ci->budget.dvb_frontend);
}
err = ttpci_budget_deinit(&budget_ci->budget);

tasklet_kill(&budget_ci->ir.msp430_irq_tasklet);

msp430_ir_deinit(budget_ci);

// disable frontend and CI interface
saa7146_setgpio(saa, 2, SAA7146_GPIO_INPUT);

Expand Down

0 comments on commit 8cc532e

Please sign in to comment.