summaryrefslogtreecommitdiff
path: root/test/i2c_bitbang.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/i2c_bitbang.c')
-rw-r--r--test/i2c_bitbang.c192
1 files changed, 0 insertions, 192 deletions
diff --git a/test/i2c_bitbang.c b/test/i2c_bitbang.c
deleted file mode 100644
index ab1136a922..0000000000
--- a/test/i2c_bitbang.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Copyright 2019 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 "console.h"
-#include "i2c.h"
-#include "i2c_bitbang.h"
-#include "test_util.h"
-#include "util.h"
-
-const struct i2c_port_t i2c_bitbang_ports[] = {
- {"", 0, 100, GPIO_I2C_SCL, GPIO_I2C_SDA}
-};
-const unsigned int i2c_bitbang_ports_used = 1;
-
-struct pin_state {
- int scl, sda;
-} history[64];
-
-int history_count;
-
-void reset_state(void)
-{
- history[0] = (struct pin_state) {1, 1};
- history_count = 1;
- bitbang_set_started(0);
-}
-
-void gpio_set_level(enum gpio_signal signal, int level)
-{
- struct pin_state new = history[history_count - 1];
-
- /* reject if stack is full */
- if (history_count >= ARRAY_SIZE(history))
- return;
-
- if (signal == GPIO_I2C_SDA)
- new.sda = level;
- else if (signal == GPIO_I2C_SCL)
- new.scl = level;
-
- if (new.scl != history[history_count - 1].scl ||
- new.sda != history[history_count - 1].sda)
- history[history_count++] = new;
-}
-
-int gpio_get_level(enum gpio_signal signal)
-{
- if (signal == GPIO_I2C_SDA)
- return history[history_count - 1].sda;
- else if (signal == GPIO_I2C_SCL)
- return history[history_count - 1].scl;
-
- return 0;
-}
-
-static int test_i2c_start_stop(void)
-{
- struct pin_state expected[] = {
- /* start */
- {1, 1},
- {1, 0},
- {0, 0},
- /* stop */
- {1, 0},
- {1, 1},
- };
- int i;
-
- reset_state();
-
- bitbang_start_cond(&i2c_bitbang_ports[0]);
- bitbang_stop_cond(&i2c_bitbang_ports[0]);
-
- TEST_EQ((int)ARRAY_SIZE(expected), history_count, "%d");
-
- for (i = 0; i < ARRAY_SIZE(expected); i++) {
- TEST_EQ(expected[i].scl, history[i].scl, "%d");
- TEST_EQ(expected[i].sda, history[i].sda, "%d");
- }
-
- return EC_SUCCESS;
-}
-
-static int test_i2c_repeated_start(void)
-{
- struct pin_state expected[] = {
- /* start */
- {1, 1},
- {1, 0},
- {0, 0},
- /* repeated start */
- {0, 1},
- {1, 1},
- {1, 0},
- {0, 0},
- };
- int i;
-
- reset_state();
-
- bitbang_start_cond(&i2c_bitbang_ports[0]);
- bitbang_start_cond(&i2c_bitbang_ports[0]);
-
- TEST_EQ((int)ARRAY_SIZE(expected), history_count, "%d");
-
- for (i = 0; i < ARRAY_SIZE(expected); i++) {
- TEST_EQ(expected[i].scl, history[i].scl, "%d");
- TEST_EQ(expected[i].sda, history[i].sda, "%d");
- }
-
- return EC_SUCCESS;
-}
-
-static int test_i2c_write(void)
-{
- struct pin_state expected[] = {
- /* start */
- {1, 1},
- {1, 0},
- {0, 0},
- /* bit 7: 0 */
- {1, 0},
- {0, 0},
- /* bit 6: 1 */
- {0, 1},
- {1, 1},
- {0, 1},
- /* bit 5: 0 */
- {0, 0},
- {1, 0},
- {0, 0},
- /* bit 4: 1 */
- {0, 1},
- {1, 1},
- {0, 1},
- /* bit 3: 0 */
- {0, 0},
- {1, 0},
- {0, 0},
- /* bit 2: 1 */
- {0, 1},
- {1, 1},
- {0, 1},
- /* bit 1: 1 */
- {1, 1},
- {0, 1},
- /* bit 0: 0 */
- {0, 0},
- {1, 0},
- {0, 0},
- /* read bit */
- {0, 1},
- {1, 1},
- {0, 1},
- /* stop */
- {0, 0},
- {1, 0},
- {1, 1},
- };
- int i, ret;
-
- reset_state();
-
- bitbang_start_cond(&i2c_bitbang_ports[0]);
- ret = bitbang_write_byte(&i2c_bitbang_ports[0], 0x56);
-
- /* expected to fail because no slave answering the nack bit */
- TEST_EQ(EC_ERROR_BUSY, ret, "%d");
-
- TEST_EQ((int)ARRAY_SIZE(expected), history_count, "%d");
-
- for (i = 0; i < ARRAY_SIZE(expected); i++) {
- TEST_EQ(expected[i].scl, history[i].scl, "%d");
- TEST_EQ(expected[i].sda, history[i].sda, "%d");
- }
-
- return EC_SUCCESS;
-}
-
-void run_test(int argc, char **argv)
-{
- test_reset();
-
- RUN_TEST(test_i2c_start_stop);
- RUN_TEST(test_i2c_repeated_start);
- RUN_TEST(test_i2c_write);
-
- test_print_result();
-}