 +
 +	if (on) {
 +		if (!atomic_read(&priv->use_count))
-+			reg8_write(client, 0x33, ((priv->lanes - 1) ^ 0x3) << 4 | 0x1); /* enable CSI output, set CSI lane count, non-continuous CSI mode */
++			reg8_write(client, 0x20, 0x00);		/* enable port forwarding to CSI */
 +		atomic_inc(&priv->use_count);
 +	} else {
 +		atomic_dec(&priv->use_count);
 +		if (!atomic_read(&priv->use_count))
-+			reg8_write(client, 0x33, ((priv->lanes - 1) ^ 0x3) << 4); /* disable CSI output, set CSI lane count, non-continuous CSI mode */
++			reg8_write(client, 0x20, 0xf0);		/* disable port forwarding to CSI */
 +	}
 +
 +	return 0;

 obj-$(CONFIG_SOC_CAMERA_OV6650)		+= ov6650.o
diff --git a/drivers/media/i2c/soc_camera/max9286_max9271.c b/drivers/media/i2c/soc_camera/max9286_max9271.c
new file mode 100644
index 0000000..7c0b719
--- /dev/null
+++ b/drivers/media/i2c/soc_camera/max9286_max9271.c
@@ -0,0 +1,529 @@
+/*
+ * MAXIM max9286-max9271 GMSL driver
+ *

+
+	if (on) {
+		if (!atomic_read(&priv->use_count))
+			reg8_write(client, 0x69, priv->links_mask ^ 0x0f); /* unmask CSI forwarding from detected links */
+		atomic_inc(&priv->use_count);
+	} else {
+		atomic_dec(&priv->use_count);
+		if (!atomic_read(&priv->use_count))
+			reg8_write(client, 0x69, 0x0f);		/* mask CSI forwarding from all links */
+	}
+
+	return 0;
