i2c_test: add a testcase to test i2c api for microchip board

test i2c api on microchip mec15xxevb_assy6853 board by writing
and reading data with nxp pca95xx device on board.

Signed-off-by: peng1 chen <peng1.chen@intel.com>
diff --git a/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts b/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts
index 1f83562..8db6cdf 100644
--- a/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts
+++ b/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts
@@ -93,7 +93,7 @@
 		label = "GPIO_P0";
 
 		/* Depends on JP53 for device address.
-		 * Pin 1-2 = A2, pin 3-4 = A1, pin 5-6 = A0.
+		 * Pin 1-2 = A0, pin 3-4 = A1, pin 5-6 = A2.
 		 * Address is: 0100<A2><A1><A0>b.
 		 *
 		 * Default has pin 1-2 on JP53 connected,
diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt b/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt
new file mode 100644
index 0000000..db76b6e
--- /dev/null
+++ b/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: Apache-2.0
+
+cmake_minimum_required(VERSION 3.13.1)
+find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
+project(i2c_api)
+
+FILE(GLOB app_sources src/*.c)
+target_sources(app PRIVATE ${app_sources})
diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt b/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt
new file mode 100644
index 0000000..72edd86
--- /dev/null
+++ b/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt
@@ -0,0 +1,23 @@
+I2C Test For Microchip board
+############################
+
+This application test is used to test the I2C driver on Microchip
+mec15xxevb_assy6853 board.
+
+
+Board Hardware Setup
+####################
+
+As the I2C slave device NXP pca95xx on mec15xxevb_assy6853 is connected
+to I2C00 port, however, I2C00 port is shared with UART2 RS232 to TTL
+converter used to catch serial log, so it's not possible to use UART2
+and I2C00 port simultaneously.
+We need to change to use I2C01 port by making some jumpers setting as below:
+
+ * JP99 	1-2 	Connected	Connect I2C01_SDA from CPU to header J5
+ * JP99 	13-14 	Connected	Connect I2C01_SCL from CPU to header J5
+ * JP25 	21-22 	Connected	External pull-up for I2C01_SDA
+ * JP25 	23-24 	Connected	External pull-up for I2C01_SCL
+ *
+ * JP44.1 	J5.1 	Connected	Connect NXP PCA95xx to I2C01
+ * JP44.3 	J5.3	Connected	Connect NXP PCA95xx to I2C01
diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf b/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf
new file mode 100644
index 0000000..4b19609
--- /dev/null
+++ b/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf
@@ -0,0 +1,2 @@
+CONFIG_I2C=y
+CONFIG_ZTEST=y
diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c b/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c
new file mode 100644
index 0000000..344394d
--- /dev/null
+++ b/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2021 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <drivers/i2c.h>
+#include <zephyr.h>
+#include <ztest.h>
+
+#define I2C_DEV_NAME DT_LABEL(DT_ALIAS(i2c1))
+
+/* command to configure port direction of NXP PCA95xx */
+#define REG_CONF_PORT0 0x06U
+
+/* test data used to write into registers */
+uint8_t test_data[2] = {0xAA, 0xAA};
+
+/**
+ * @brief Test i2c api by communicating with pca95xx
+ * @details
+ * - get i2c mainline device
+ * - write data into pca95xx
+ * - read data from pca95xx
+ * - check read data whether correct
+ */
+void test_i2c_pca95xx(void)
+{
+	int32_t ret;
+	uint8_t datas[3];
+	uint32_t i2c_cfg = I2C_SPEED_SET(I2C_SPEED_STANDARD) | I2C_MODE_MASTER;
+
+	/* get i2c device */
+	const struct device *i2c_dev = device_get_binding(I2C_DEV_NAME);
+
+	zassert_true(i2c_dev, "Cannot get i2c device");
+
+	/* configure i2c device */
+	ret = i2c_configure(i2c_dev, i2c_cfg);
+	zassert_true(ret == 0, "Failed to configure i2c device");
+
+	/* write configuration to register 6 and 7 of PCA95XX*/
+	(void)memset(datas, 0, 3);
+	datas[0] = REG_CONF_PORT0;
+	datas[1] = test_data[0];
+	datas[2] = test_data[1];
+	ret = i2c_write(i2c_dev, datas, 3, 0x26);
+	zassert_true(ret == 0, "Failed to write data to i2c device");
+
+	/* read configuration from register 6 and 7 */
+	(void)memset(datas, 0, 3);
+	datas[0] = REG_CONF_PORT0;
+	ret = i2c_write(i2c_dev, datas, 1, 0x26);
+	zassert_true(ret == 0, "Failed to write data to i2c device");
+
+	(void)memset(datas, 0, 3);
+	ret = i2c_read(i2c_dev, datas, 2, 0x26);
+	zassert_true(ret == 0, "Failed to read data from i2c device");
+
+	/* check read data whether correct */
+	ret = memcmp(datas, test_data, 2);
+	zassert_true(ret == 0, "Read data is different to write data");
+}
+
+void test_main(void)
+{
+	ztest_test_suite(i2c_test,
+			ztest_unit_test(test_i2c_pca95xx)
+			);
+	ztest_run_test_suite(i2c_test);
+}
diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml b/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml
new file mode 100644
index 0000000..03726eb
--- /dev/null
+++ b/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml
@@ -0,0 +1,6 @@
+tests:
+  boards.mec15xxevb_assy6853.i2c:
+    depends_on: i2c
+    tags: drivers i2c
+    filter: dt_compat_enabled("nxp,pca95xx")
+    platform_allow: mec15xxevb_assy6853