 +
 +static struct v4l2_subdev_video_ops ov490_video_ops = {
 +	.s_stream	= ov490_s_stream,
++	.cropcap	= ov490_cropcap,
++	.g_crop		= ov490_g_crop,
++	.s_crop		= ov490_s_crop,
 +	.g_mbus_config	= ov490_g_mbus_config,
 +};
 +

+	int				height;
+	int				fps_denominator;
+	int				init_complete;
+};
+
+static inline struct ov10635_priv *to_ov10635(const struct i2c_client *client)

+	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;
