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

Commit d86e2ee9 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (7754): ivtv: change initialization order to fix an oops when device registration failed

parent c117d05c
Loading
Loading
Loading
Loading
+16 −17
Original line number Diff line number Diff line
@@ -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);
	}

	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 */
	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);
	if (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);
	if (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);
	return 0;

      free_irq:
	free_irq(itv->dev->irq, (void *)itv);
free_streams:
	ivtv_streams_cleanup(itv);
free_irq:
	free_irq(itv->dev->irq, (void *)itv);
free_i2c:
	exit_ivtv_i2c(itv);
free_io: