mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 21:21:47 +00:00
[media] vpif_capture.c: v4l2_device_register() is called too late in vpif_probe()
The function v4l2_device_register() is called too late in vpif_probe(). This meant that vpif_obj.v4l2_dev is accessed before it is initialized which caused a crash. This used to work in the past, but video_register_device() is now actually using the v4l2_dev pointer. Note that vpif_display.c doesn't have this bug, there v4l2_device_register() is called at the beginning of vpif_probe. Signed-off-by: Georgios Plakaris <gplakari@cisco.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Manjunath Hadli <Manjunath.hadli@ti.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
bb0a896e3d
commit
d2f7a1a246
@ -2177,6 +2177,12 @@ static __init int vpif_probe(struct platform_device *pdev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = v4l2_device_register(vpif_dev, &vpif_obj.v4l2_dev);
|
||||||
|
if (err) {
|
||||||
|
v4l2_err(vpif_dev->driver, "Error registering v4l2 device\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
k = 0;
|
k = 0;
|
||||||
while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, k))) {
|
while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, k))) {
|
||||||
for (i = res->start; i <= res->end; i++) {
|
for (i = res->start; i <= res->end; i++) {
|
||||||
@ -2246,12 +2252,6 @@ static __init int vpif_probe(struct platform_device *pdev)
|
|||||||
goto probe_out;
|
goto probe_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = v4l2_device_register(vpif_dev, &vpif_obj.v4l2_dev);
|
|
||||||
if (err) {
|
|
||||||
v4l2_err(vpif_dev->driver, "Error registering v4l2 device\n");
|
|
||||||
goto probe_subdev_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < subdev_count; i++) {
|
for (i = 0; i < subdev_count; i++) {
|
||||||
subdevdata = &config->subdev_info[i];
|
subdevdata = &config->subdev_info[i];
|
||||||
vpif_obj.sd[i] =
|
vpif_obj.sd[i] =
|
||||||
@ -2281,7 +2281,6 @@ probe_subdev_out:
|
|||||||
|
|
||||||
j = VPIF_CAPTURE_MAX_DEVICES;
|
j = VPIF_CAPTURE_MAX_DEVICES;
|
||||||
probe_out:
|
probe_out:
|
||||||
v4l2_device_unregister(&vpif_obj.v4l2_dev);
|
|
||||||
for (k = 0; k < j; k++) {
|
for (k = 0; k < j; k++) {
|
||||||
/* Get the pointer to the channel object */
|
/* Get the pointer to the channel object */
|
||||||
ch = vpif_obj.dev[k];
|
ch = vpif_obj.dev[k];
|
||||||
@ -2303,6 +2302,7 @@ vpif_int_err:
|
|||||||
if (res)
|
if (res)
|
||||||
i = res->end;
|
i = res->end;
|
||||||
}
|
}
|
||||||
|
v4l2_device_unregister(&vpif_obj.v4l2_dev);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user