  drivers/media/platform/soc_camera/soc_mediabus.c   |   16 +
  include/media/drv-intf/soc_mediabus.h              |    3 +
  include/media/soc_camera.h                         |    1 +
- 15 files changed, 3615 insertions(+), 97 deletions(-)
+ 15 files changed, 3618 insertions(+), 97 deletions(-)
  create mode 100644 drivers/media/i2c/soc_camera/max9286_max9271.c
  create mode 100644 drivers/media/i2c/soc_camera/max9286_max9271.h
  create mode 100644 drivers/media/i2c/soc_camera/max9286_max9271_ov10635.c

+		return -EINVAL;
+	}
+
+	ov490_otp_id_read(client);
+
+	dev_info(&client->dev, "ov490/ov10640 Product ID %x Manufacturer ID %x, rev 1%x, res %dx%d, dvp %dbit OTP_ID %02x:%02x:%02x:%02x:%02x:%02x\n",
+		 pid, ver, 0xa + rev, priv->width, priv->height, priv->dvp_width, priv->id[0], priv->id[1], priv->id[2], priv->id[3], priv->id[4], priv->id[5]);
+
+	ret = ov490_set_regs(client, ov490_regs_wizard,
+			     ARRAY_SIZE(ov490_regs_wizard));
+	if (ret)
+		return ret;
+
+streamon:
+	/* switch to GMSL serial_link for streaming video */
+	tmp_addr = client->addr;
+	client->addr = maxim_map[1][cam_idx];	/* MAX9271-CAMx */
+	maxim_reg8_write(client, 0x04, 0x83);	/* enable reverse_control/serial_link */
+	usleep_range(2000, 2500);		/* wait 2ms after changing reverse_control */
+	client->addr = tmp_addr;
+
+	return 0;
+}
+
+
+static int ov490_parse_dt(struct device_node *np, struct ov490_priv *priv)
+{

+	return 0;
+}
+
+static int max9286_max9271_registered_async(struct v4l2_subdev *sd)
+{
+	struct max9286_max9271_priv *priv = v4l2_get_subdevdata(sd);
+	struct i2c_client *client = priv->client;
+	int idx, tmp_addr;
+
+	/* switch to GMSL serial_link for streaming video */
+	tmp_addr = client->addr;
+	idx = sd->grp_id + priv->offset;
+	client->addr = maxim_map[1][idx];	/* MAX9271-CAMx */
+	maxim_reg8_write(client, 0x04, 0x83);	/* enable reverse_control/serial_link */
+	usleep_range(2000, 2500);		/* wait 2ms after changing reverse_control */
+	client->addr = tmp_addr;
+
+	return 0;
+}
+
+static struct v4l2_subdev_core_ops max9286_max9271_subdev_core_ops = {
+#ifdef CONFIG_VIDEO_ADV_DEBUG
+	.g_register		= max9286_max9271_g_register,
+	.s_register		= max9286_max9271_s_register,
+#endif
+	.s_power		= max9286_max9271_s_power,
+	.registered_async	= max9286_max9271_registered_async,
+};
+
+static struct v4l2_subdev_ops max9286_max9271_subdev_ops = {
