diff options
author | Thomas Huth <thuth@redhat.com> | 2019-09-09 12:04:01 +0200 |
---|---|---|
committer | Thomas Huth <thuth@redhat.com> | 2020-01-12 11:42:41 +0100 |
commit | 1e8a1fae7464ef79c9e50aa0f807d2c511be3c8e (patch) | |
tree | 80d1a4f0454b9a75c09461e69f969213350540ea /tests/qtest/pca9552-test.c | |
parent | 10ae5b303a0de07f0659a2c90d9c1266b3908b97 (diff) | |
download | qemu-1e8a1fae7464ef79c9e50aa0f807d2c511be3c8e.zip qemu-1e8a1fae7464ef79c9e50aa0f807d2c511be3c8e.tar.gz qemu-1e8a1fae7464ef79c9e50aa0f807d2c511be3c8e.tar.bz2 |
test: Move qtests to a separate directory
The tests directory itself is pretty overcrowded, and it's hard to
see which test belongs to which test subsystem (unit, qtest, ...).
Let's move the qtests to a separate folder for more clarity.
Message-Id: <20191218103059.11729-6-thuth@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'tests/qtest/pca9552-test.c')
-rw-r--r-- | tests/qtest/pca9552-test.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/qtest/pca9552-test.c b/tests/qtest/pca9552-test.c new file mode 100644 index 0000000..4b800d3 --- /dev/null +++ b/tests/qtest/pca9552-test.c @@ -0,0 +1,93 @@ +/* + * QTest testcase for the PCA9552 LED blinker + * + * Copyright (c) 2017-2018, IBM Corporation. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" + +#include "libqtest.h" +#include "libqos/qgraph.h" +#include "libqos/i2c.h" +#include "hw/misc/pca9552_regs.h" + +#define PCA9552_TEST_ID "pca9552-test" +#define PCA9552_TEST_ADDR 0x60 + +static void pca9552_init(QI2CDevice *i2cdev) +{ + /* Switch on LEDs 0 and 12 */ + i2c_set8(i2cdev, PCA9552_LS0, 0x54); + i2c_set8(i2cdev, PCA9552_LS3, 0x54); +} + +static void receive_autoinc(void *obj, void *data, QGuestAllocator *alloc) +{ + QI2CDevice *i2cdev = (QI2CDevice *)obj; + uint8_t resp; + uint8_t reg = PCA9552_LS0 | PCA9552_AUTOINC; + + pca9552_init(i2cdev); + + i2c_send(i2cdev, ®, 1); + + /* PCA9552_LS0 */ + i2c_recv(i2cdev, &resp, 1); + g_assert_cmphex(resp, ==, 0x54); + + /* PCA9552_LS1 */ + i2c_recv(i2cdev, &resp, 1); + g_assert_cmphex(resp, ==, 0x55); + + /* PCA9552_LS2 */ + i2c_recv(i2cdev, &resp, 1); + g_assert_cmphex(resp, ==, 0x55); + + /* PCA9552_LS3 */ + i2c_recv(i2cdev, &resp, 1); + g_assert_cmphex(resp, ==, 0x54); +} + +static void send_and_receive(void *obj, void *data, QGuestAllocator *alloc) +{ + QI2CDevice *i2cdev = (QI2CDevice *)obj; + uint8_t value; + + value = i2c_get8(i2cdev, PCA9552_LS0); + g_assert_cmphex(value, ==, 0x55); + + value = i2c_get8(i2cdev, PCA9552_INPUT0); + g_assert_cmphex(value, ==, 0x0); + + pca9552_init(i2cdev); + + value = i2c_get8(i2cdev, PCA9552_LS0); + g_assert_cmphex(value, ==, 0x54); + + value = i2c_get8(i2cdev, PCA9552_INPUT0); + g_assert_cmphex(value, ==, 0x01); + + value = i2c_get8(i2cdev, PCA9552_LS3); + g_assert_cmphex(value, ==, 0x54); + + value = i2c_get8(i2cdev, PCA9552_INPUT1); + g_assert_cmphex(value, ==, 0x10); +} + +static void pca9552_register_nodes(void) +{ + QOSGraphEdgeOptions opts = { + .extra_device_opts = "address=0x60" + }; + add_qi2c_address(&opts, &(QI2CAddress) { 0x60 }); + + qos_node_create_driver("pca9552", i2c_device_create); + qos_node_consumes("pca9552", "i2c-bus", &opts); + + qos_add_test("tx-rx", "pca9552", send_and_receive, NULL); + qos_add_test("rx-autoinc", "pca9552", receive_autoinc, NULL); +} +libqos_init(pca9552_register_nodes); |