bcm2835_isp_remove is called on an initialisation failure, but at that
point the drvdata hasn't been set. This causes a crash when e.g. using
the cutdown firmware (gpu_mem=16).
Move platform_set_drvdata before the instance probing loop to avoid the
problem.
See: https://github.com/raspberrypi/linux/issues/4774
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
if (!bcm2835_isp_instances)
return -ENOMEM;
+ platform_set_drvdata(pdev, bcm2835_isp_instances);
+
for (i = 0; i < BCM2835_ISP_NUM_INSTANCES; i++) {
ret = bcm2835_isp_probe_instance(pdev,
&bcm2835_isp_instances[i], i);
goto error;
}
- platform_set_drvdata(pdev, bcm2835_isp_instances);
dev_info(&pdev->dev, "Loaded V4L2 %s\n", BCM2835_ISP_NAME);
return 0;