V4L/DVB (7754): ivtv: change initialization order to fix an oops when device registration failed
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
c117d05cd4
commit
d86e2ee98e
@@ -1195,13 +1195,6 @@ static int __devinit ivtv_probe(struct pci_dev *dev,
|
|||||||
ivtv_call_i2c_clients(itv, VIDIOC_INT_S_STD_OUTPUT, &itv->std);
|
ivtv_call_i2c_clients(itv, VIDIOC_INT_S_STD_OUTPUT, &itv->std);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = ivtv_streams_setup(itv);
|
|
||||||
if (retval) {
|
|
||||||
IVTV_ERR("Error %d setting up streams\n", retval);
|
|
||||||
goto free_i2c;
|
|
||||||
}
|
|
||||||
|
|
||||||
IVTV_DEBUG_IRQ("Masking interrupts\n");
|
|
||||||
/* clear interrupt mask, effectively disabling interrupts */
|
/* clear interrupt mask, effectively disabling interrupts */
|
||||||
ivtv_set_irq_mask(itv, 0xffffffff);
|
ivtv_set_irq_mask(itv, 0xffffffff);
|
||||||
|
|
||||||
@@ -1210,20 +1203,26 @@ static int __devinit ivtv_probe(struct pci_dev *dev,
|
|||||||
IRQF_SHARED | IRQF_DISABLED, itv->name, (void *)itv);
|
IRQF_SHARED | IRQF_DISABLED, itv->name, (void *)itv);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
IVTV_ERR("Failed to register irq %d\n", retval);
|
IVTV_ERR("Failed to register irq %d\n", retval);
|
||||||
goto free_streams;
|
goto free_i2c;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = ivtv_streams_setup(itv);
|
||||||
|
if (retval) {
|
||||||
|
IVTV_ERR("Error %d setting up streams\n", retval);
|
||||||
|
goto free_irq;
|
||||||
}
|
}
|
||||||
retval = ivtv_streams_register(itv);
|
retval = ivtv_streams_register(itv);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
IVTV_ERR("Error %d registering devices\n", retval);
|
IVTV_ERR("Error %d registering devices\n", retval);
|
||||||
goto free_irq;
|
goto free_streams;
|
||||||
}
|
}
|
||||||
IVTV_INFO("Initialized card #%d: %s\n", itv->num, itv->card_name);
|
IVTV_INFO("Initialized card #%d: %s\n", itv->num, itv->card_name);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free_irq:
|
|
||||||
free_irq(itv->dev->irq, (void *)itv);
|
|
||||||
free_streams:
|
free_streams:
|
||||||
ivtv_streams_cleanup(itv);
|
ivtv_streams_cleanup(itv);
|
||||||
|
free_irq:
|
||||||
|
free_irq(itv->dev->irq, (void *)itv);
|
||||||
free_i2c:
|
free_i2c:
|
||||||
exit_ivtv_i2c(itv);
|
exit_ivtv_i2c(itv);
|
||||||
free_io:
|
free_io:
|
||||||
|
Reference in New Issue
Block a user