 +	return 0;
 +}
 +
++static int ov490_s_crop(struct v4l2_subdev *sd, const struct v4l2_crop *a)
++{
++	struct v4l2_crop a_writable = *a;
++	struct v4l2_rect *rect = &a_writable.c;
++	struct i2c_client *client = v4l2_get_subdevdata(sd);
++	struct ov490_priv *priv = to_ov490(client);
++
++	rect->left = 0;
++	rect->top = 0;
++	rect->width = priv->width;
++	rect->height = priv->height;
++
++	return 0;
++}
++
++static int ov490_g_crop(struct v4l2_subdev *sd, struct v4l2_crop *a)
++{
++	struct i2c_client *client = v4l2_get_subdevdata(sd);
++	struct ov490_priv *priv = to_ov490(client);
++
++	a->c.left = 0;
++	a->c.top = 0;
++	a->c.width = priv->width;
++	a->c.height = priv->height;
++	a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++
++	return 0;
++}
++
++static int ov490_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a)
++{
++	struct i2c_client *client = v4l2_get_subdevdata(sd);
++	struct ov490_priv *priv = to_ov490(client);
++
++	a->bounds.left = 0;
++	a->bounds.top = 0;
++	a->bounds.width = priv->width;
++	a->bounds.height = priv->height;
++	a->defrect = a->bounds;
++	a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++
++	return 0;
++}
++
 +static int ov490_g_mbus_config(struct v4l2_subdev *sd,
 +			       struct v4l2_mbus_config *cfg)
 +{

+
+static struct v4l2_subdev_video_ops ov490_video_ops = {
+	.s_stream	= ov490_s_stream,
+	.g_mbus_config	= ov490_g_mbus_config,
+};
+

+	int				height;
+	int				fps_denominator;
+	int				init_complete;
+	u8				id[5];
+};
+
+static inline struct ov10635_priv *to_ov10635(const struct i2c_client *client)
