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

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

[media] ov2640: add MC support



The MC support is needed by the em28xx driver.

Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Acked-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 46796cfc
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -282,6 +282,9 @@ struct ov2640_win_size {

struct ov2640_priv {
	struct v4l2_subdev		subdev;
#if defined(CONFIG_MEDIA_CONTROLLER)
	struct media_pad pad;
#endif
	struct v4l2_ctrl_handler	hdl;
	u32	cfmt_code;
	struct clk			*clk;
@@ -1063,6 +1066,7 @@ static int ov2640_probe(struct i2c_client *client,
		goto err_clk;

	v4l2_i2c_subdev_init(&priv->subdev, client, &ov2640_subdev_ops);
	priv->subdev.flags = V4L2_SUBDEV_FL_HAS_DEVNODE;
	v4l2_ctrl_handler_init(&priv->hdl, 2);
	v4l2_ctrl_new_std(&priv->hdl, &ov2640_ctrl_ops,
			V4L2_CID_VFLIP, 0, 1, 1, 0);
@@ -1073,19 +1077,30 @@ static int ov2640_probe(struct i2c_client *client,
		ret = priv->hdl.error;
		goto err_hdl;
	}
#if defined(CONFIG_MEDIA_CONTROLLER)
	priv->pad.flags = MEDIA_PAD_FL_SOURCE;
	priv->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
	ret = media_entity_pads_init(&priv->subdev.entity, 1, &priv->pad);
	if (ret < 0)
		goto err_hdl;
#endif

	ret = ov2640_video_probe(client);
	if (ret < 0)
		goto err_hdl;
		goto err_videoprobe;

	ret = v4l2_async_register_subdev(&priv->subdev);
	if (ret < 0)
		goto err_hdl;
		goto err_videoprobe;

	dev_info(&adapter->dev, "OV2640 Probed\n");

	return 0;

err_videoprobe:
#if defined(CONFIG_MEDIA_CONTROLLER)
	media_entity_cleanup(&priv->subdev.entity);
#endif
err_hdl:
	v4l2_ctrl_handler_free(&priv->hdl);
err_clk:
@@ -1099,6 +1114,9 @@ static int ov2640_remove(struct i2c_client *client)

	v4l2_async_unregister_subdev(&priv->subdev);
	v4l2_ctrl_handler_free(&priv->hdl);
#if defined(CONFIG_MEDIA_CONTROLLER)
	media_entity_cleanup(&priv->subdev.entity);
#endif
	v4l2_device_unregister_subdev(&priv->subdev);
	clk_disable_unprepare(priv->clk);
	return 0;