 +		/* Check if already initialized (after reboot/reset ?) */
 +		client->addr = priv->max9271_addr_map[idx];		/* MAX9271-CAMx I2C */
 +		maxim_reg8_read(client, 0x1e, &val);			/* read max9271 ID */
-+		if (val == MAX9271_ID)
++		if (val == MAX9271_ID) {
++			ret = -EADDRINUSE;
 +			break;
-+	}
-+
-+	if (!timeout) {
-+		dev_info(&client->dev, "link%d max9271 at 0x%x not found: timeout GMSL link establish\n",
-+				       idx, priv->max9271_addr_map[idx]);
-+		return -ENODEV;
-+	}
-+
-+	dev_info(&client->dev, "link%d MAX9271 at 0x%x\n", idx, priv->max9271_addr_map[idx]);
-+
-+	return 0;
++		}
++	}
++
++	if (!timeout)
++		ret = -ETIMEDOUT;
++
++	dev_info(&client->dev, "link%d MAX9271 %sat 0x%x %s\n", idx,
++			       ret == -EADDRINUSE ? "already " : "", priv->max9271_addr_map[idx],
++			       ret == -ETIMEDOUT ? "not found: timeout GMSL link establish" : "");
++
++	return ret;
 +}
 +
 +static void max9286_max9271_initial_setup(struct i2c_client *client)

 create mode 100644 drivers/media/i2c/soc_camera/max9271_ov490_ov10640.h
 create mode 100644 drivers/media/i2c/soc_camera/max9286_max9271.c
 create mode 100644 drivers/media/i2c/soc_camera/max9286_max9271.h
 create mode 100755 drivers/media/i2c/soc_camera/max9286_max9271_ov10635_debug.h

diff --git a/drivers/media/i2c/soc_camera/Kconfig b/drivers/media/i2c/soc_camera/Kconfig
index 23d352f..9128f63 100644

+{0xfffe, 0x82},
+{0x0071, 0x11},
+{0x0075, 0x11},
+{0xfffe, 0x29},
+{0x6010, 0x01},
+{0x4017, 0x00},
+{0xfffe, 0x28},
+{0x6000, 0x04},
+{0x6004, 0x00},
+{0x6008, 0x01},
+{0xfffe, 0x80},
+{0x0091, 0x00},
+{0x00bb, 0x1d},
+};
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..d734203
--- /dev/null
+++ b/drivers/media/i2c/soc_camera/max9286_max9271.c
@@ -0,0 +1,478 @@
+/*
+ * MAXIM max9286-max9271 GMSL driver
+ *
