dm: i2c: Add an explicit test mode to the sandbox I2C driver

At present this driver has a few test features. They are needed for running
the driver model unit tests but are confusing and unnecessary if using
sandbox at the command line. Add a flag to enable the test mode, and don't
enable it by default.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/i2c/sandbox_i2c.c b/drivers/i2c/sandbox_i2c.c
index 621caec..dd1c7e5 100644
--- a/drivers/i2c/sandbox_i2c.c
+++ b/drivers/i2c/sandbox_i2c.c
@@ -18,8 +18,8 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-struct dm_sandbox_i2c_emul_priv {
-	struct udevice *emul;
+struct sandbox_i2c_priv {
+	bool test_mode;
 };
 
 static int get_emul(struct udevice *dev, struct udevice **devp,
@@ -47,17 +47,25 @@
 	return 0;
 }
 
+void sandbox_i2c_set_test_mode(struct udevice *bus, bool test_mode)
+{
+	struct sandbox_i2c_priv *priv = dev_get_priv(bus);
+
+	priv->test_mode = test_mode;
+}
+
 static int sandbox_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
 			    int nmsgs)
 {
 	struct dm_i2c_bus *i2c = dev_get_uclass_priv(bus);
+	struct sandbox_i2c_priv *priv = dev_get_priv(bus);
 	struct dm_i2c_ops *ops;
 	struct udevice *emul, *dev;
 	bool is_read;
 	int ret;
 
 	/* Special test code to return success but with no emulation */
-	if (msg->addr == SANDBOX_I2C_TEST_ADDR)
+	if (priv->test_mode && msg->addr == SANDBOX_I2C_TEST_ADDR)
 		return 0;
 
 	ret = i2c_get_chip(bus, msg->addr, 1, &dev);
@@ -68,15 +76,18 @@
 	if (ret)
 		return ret;
 
-	/*
-	 * For testing, don't allow writing above 100KHz for writes and
-	 * 400KHz for reads
-	 */
-	is_read = nmsgs > 1;
-	if (i2c->speed_hz > (is_read ? 400000 : 100000)) {
-		debug("%s: Max speed exceeded\n", __func__);
-		return -EINVAL;
+	if (priv->test_mode) {
+		/*
+		* For testing, don't allow writing above 100KHz for writes and
+		* 400KHz for reads.
+		*/
+		is_read = nmsgs > 1;
+		if (i2c->speed_hz > (is_read ? 400000 : 100000)) {
+			debug("%s: Max speed exceeded\n", __func__);
+			return -EINVAL;
+		}
 	}
+
 	return ops->xfer(emul, msg, nmsgs);
 }
 
@@ -94,4 +105,5 @@
 	.id	= UCLASS_I2C,
 	.of_match = sandbox_i2c_ids,
 	.ops	= &sandbox_i2c_ops,
+	.priv_auto_alloc_size = sizeof(struct sandbox_i2c_priv),
 };