 +	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)
 +{

+	.pad	= &ov10635_subdev_pad_ops,
+};
+
+static ssize_t ov10635_otp_id_read(struct device *dev,
+				   struct device_attribute *attr, char *buf)
+{
+	struct v4l2_subdev *sd = i2c_get_clientdata(to_i2c_client(dev));
+	struct i2c_client *client = v4l2_get_subdevdata(sd);
+	u8 id[5];
+	int i;
+
+	/* read camera id from OTP memory */
+	maxim_reg16_write(client, 0x100, 1);
+	for (i = 0; i < 5; i++)
+		maxim_reg16_write(client, 0x3d00 + i, 0x00);

+	mdelay(15);
+	for (i = 0; i < 5; i++)
+		maxim_reg16_read(client, 0x3d00 + i, &id[i]);
+#else
+	maxim_reg16_write(client, 0x3d10, 1);
+	for (i = 0; i < 5; i++)
+		maxim_reg16_read(client, 0x3d00 + i, &priv->id[i]);
+#endif
+}
+
+static ssize_t ov10635_otp_id_show(struct device *dev,
+				   struct device_attribute *attr, char *buf)
+{
+	struct v4l2_subdev *sd = i2c_get_clientdata(to_i2c_client(dev));
+	struct i2c_client *client = v4l2_get_subdevdata(sd);
+	struct ov10635_priv *priv = to_ov10635(client);
+
+	return snprintf(buf, 32, "%02x:%02x:%02x:%02x:%02x\n",
+			priv->id[0], priv->id[1], priv->id[2], priv->id[3], priv->id[4]);
+}
+
+static DEVICE_ATTR(otp_id, S_IRUGO, ov10635_otp_id_show, NULL);
+
+static int ov10635_initialize(struct i2c_client *client)
+{
+	struct ov10635_priv *priv = to_ov10635(client);
+	u8 pid, ver;
+	int ret;
+	int tmp_addr, cam_idx = client->addr - CAM;
