summaryrefslogtreecommitdiff
path: root/cts/i2c/dut.c
diff options
context:
space:
mode:
Diffstat (limited to 'cts/i2c/dut.c')
-rw-r--r--cts/i2c/dut.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/cts/i2c/dut.c b/cts/i2c/dut.c
new file mode 100644
index 0000000000..b629475ffa
--- /dev/null
+++ b/cts/i2c/dut.c
@@ -0,0 +1,104 @@
+/* Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "common.h"
+#include "cts_common.h"
+#include "cts_i2c.h"
+#include "dut_common.h"
+#include "i2c.h"
+#include "registers.h"
+#include "timer.h"
+#include "uart.h"
+#include "watchdog.h"
+
+#define TH_ADDR 0x3c
+
+enum cts_rc write8_test(void)
+{
+ int port = i2c_ports[0].port;
+
+ i2c_write8(port, TH_ADDR, WRITE_8_OFFSET, WRITE_8_DATA);
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc write16_test(void)
+{
+ int port = i2c_ports[0].port;
+
+ i2c_write16(port, TH_ADDR, WRITE_16_OFFSET, WRITE_16_DATA);
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc write32_test(void)
+{
+ int port = i2c_ports[0].port;
+
+ i2c_write32(port, TH_ADDR, WRITE_32_OFFSET, WRITE_32_DATA);
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc read8_test(void)
+{
+ int result;
+ int port = i2c_ports[0].port;
+
+ i2c_read8(port, TH_ADDR, READ_8_OFFSET, &result);
+
+ if (result != READ_8_DATA)
+ return CTS_RC_FAILURE;
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc read16_test(void)
+{
+ int result;
+ int port = i2c_ports[0].port;
+
+ i2c_read16(port, TH_ADDR, READ_16_OFFSET, &result);
+
+ if (result != READ_16_DATA)
+ return CTS_RC_FAILURE;
+
+ return CTS_RC_SUCCESS;
+}
+
+enum cts_rc read32_test(void)
+{
+ int result;
+ int port = i2c_ports[0].port;
+
+ i2c_read32(port, TH_ADDR, READ_32_OFFSET, &result);
+
+ if (result != READ_32_DATA)
+ return CTS_RC_FAILURE;
+
+ return CTS_RC_SUCCESS;
+}
+
+
+#include "cts_testlist.h"
+
+void cts_task(void)
+{
+ int i;
+
+ cflush();
+ for (i = 0; i < CTS_TEST_ID_COUNT; i++) {
+ sync();
+ CPRINTF("\n%s %d\n", tests[i].name, tests[i].run());
+ uart_flush_output();
+ }
+
+ CPRINTS("I2C test suite finished");
+ uart_flush_output();
+ while (1) {
+ watchdog_reload();
+ sleep(1);
+ }
+}