/* * Copyright (c) 2021 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include /* 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 */ ZTEST(boards_mec172x_pca95xx, test_i2c_pca95xx) { int32_t ret; uint8_t datas[3]; uint32_t i2c_cfg = I2C_SPEED_SET(I2C_SPEED_STANDARD) | I2C_MODE_CONTROLLER; /* get i2c device */ const struct i2c_dt_spec i2c = I2C_DT_SPEC_GET(DT_COMPAT_GET_ANY_STATUS_OKAY(nxp_pca95xx)); zassert_true(device_is_ready(i2c.bus), "I2C controller device is not ready"); /* configure i2c device */ ret = i2c_configure(i2c.bus, 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_dt(&i2c, datas, 3); 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_dt(&i2c, datas, 1); zassert_true(ret == 0, "Failed to write data to i2c device"); (void)memset(datas, 0, 3); ret = i2c_read_dt(&i2c, datas, 2); 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"); } ZTEST_SUITE(boards_mec172x_pca95xx, NULL, NULL, NULL, NULL, NULL);