diff options
author | Philippe Mathieu-Daudé | 2021-06-17 13:53:33 +0200 |
---|---|---|
committer | Corey Minyard | 2021-07-08 21:15:01 +0200 |
commit | 265caf45c6157f6b23f16292152ed9da5d2d1982 (patch) | |
tree | 9fe6fd2a5756e3cefe53a0f4e50b6bf4d003950e /hw/i2c | |
parent | hw/i2c: Make i2c_start_transfer() direction argument a boolean (diff) | |
download | qemu-265caf45c6157f6b23f16292152ed9da5d2d1982.tar.gz qemu-265caf45c6157f6b23f16292152ed9da5d2d1982.tar.xz qemu-265caf45c6157f6b23f16292152ed9da5d2d1982.zip |
hw/i2c: Extract i2c_do_start_transfer() from i2c_start_transfer()
To allow further simplications, extract i2c_do_start_transfer()
from i2c_start_transfer(). This is mostly the same function,
but the former is static and takes an enum argument.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Diffstat (limited to 'hw/i2c')
-rw-r--r-- | hw/i2c/core.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/hw/i2c/core.c b/hw/i2c/core.c index 6639ca8c2e..5483bf95a3 100644 --- a/hw/i2c/core.c +++ b/hw/i2c/core.c @@ -114,8 +114,11 @@ bool i2c_scan_bus(I2CBus *bus, uint8_t address, bool broadcast, * protocol uses a start transfer to switch from write to read mode * without releasing the bus. If that fails, the bus is still * in a transaction. + * + * @event must be I2C_START_RECV or I2C_START_SEND. */ -int i2c_start_transfer(I2CBus *bus, uint8_t address, bool is_recv) +static int i2c_do_start_transfer(I2CBus *bus, uint8_t address, + enum i2c_event event) { I2CSlaveClass *sc; I2CNode *node; @@ -157,7 +160,7 @@ int i2c_start_transfer(I2CBus *bus, uint8_t address, bool is_recv) if (sc->event) { trace_i2c_event("start", s->address); - rv = sc->event(s, is_recv ? I2C_START_RECV : I2C_START_SEND); + rv = sc->event(s, event); if (rv && !bus->broadcast) { if (bus_scanned) { /* First call, terminate the transfer. */ @@ -170,6 +173,13 @@ int i2c_start_transfer(I2CBus *bus, uint8_t address, bool is_recv) return 0; } +int i2c_start_transfer(I2CBus *bus, uint8_t address, bool is_recv) +{ + return i2c_do_start_transfer(bus, address, is_recv + ? I2C_START_RECV + : I2C_START_SEND); +} + void i2c_end_transfer(I2CBus *bus) { I2CSlaveClass *sc; |