Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] imx074: support asynchronous probing

Both synchronous and asynchronous imx074 subdevice probing is supported by
this patch.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Guennadi Liakhovetski and committed by
Mauro Carvalho Chehab
ee17608d 676d2d4f

+17 -3
+17 -3
drivers/media/i2c/soc_camera/imx074.c
··· 18 18 #include <linux/module.h> 19 19 20 20 #include <media/soc_camera.h> 21 + #include <media/v4l2-async.h> 21 22 #include <media/v4l2-clk.h> 22 23 #include <media/v4l2-subdev.h> 23 24 ··· 438 437 priv->fmt = &imx074_colour_fmts[0]; 439 438 440 439 priv->clk = v4l2_clk_get(&client->dev, "mclk"); 441 - if (IS_ERR(priv->clk)) 442 - return PTR_ERR(priv->clk); 440 + if (IS_ERR(priv->clk)) { 441 + dev_info(&client->dev, "Error %ld getting clock\n", PTR_ERR(priv->clk)); 442 + return -EPROBE_DEFER; 443 + } 444 + 445 + ret = soc_camera_power_init(&client->dev, ssdd); 446 + if (ret < 0) 447 + goto epwrinit; 443 448 444 449 ret = imx074_video_probe(client); 445 450 if (ret < 0) 446 - v4l2_clk_put(priv->clk); 451 + goto eprobe; 447 452 453 + return v4l2_async_register_subdev(&priv->subdev); 454 + 455 + epwrinit: 456 + eprobe: 457 + v4l2_clk_put(priv->clk); 448 458 return ret; 449 459 } 450 460 ··· 464 452 struct soc_camera_subdev_desc *ssdd = soc_camera_i2c_to_desc(client); 465 453 struct imx074 *priv = to_imx074(client); 466 454 455 + v4l2_async_unregister_subdev(&priv->subdev); 467 456 v4l2_clk_put(priv->clk); 457 + 468 458 if (ssdd->free_bus) 469 459 ssdd->free_bus(ssdd); 470 460