summaryrefslogtreecommitdiffstats
path: root/hw/i2c/i2c-ddc.c
diff options
context:
space:
mode:
authorCorey Minyard2017-01-09 12:40:20 +0100
committerPeter Maydell2017-01-09 12:40:20 +0100
commitd307c28ca9dba7a0677035c9244198b05164c873 (patch)
treeee942307fac668f7a2d531bf6b86e6db025cdfd0 /hw/i2c/i2c-ddc.c
parentMerge remote-tracking branch 'remotes/gonglei/tags/cryptodev-next-20161224' i... (diff)
downloadqemu-d307c28ca9dba7a0677035c9244198b05164c873.tar.gz
qemu-d307c28ca9dba7a0677035c9244198b05164c873.tar.xz
qemu-d307c28ca9dba7a0677035c9244198b05164c873.zip
i2c: Allow I2C devices to NAK start events
Add a return value to the event handler. Some I2C devices will NAK if they have no data, so allow them to do this. This required the following changes: Go through all the event handlers and change them to return int and return 0. Modify i2c_start_transfer to terminate the transaction on a NAK. Modify smbus handing to not assert if a NAK occurs on a second operation, and terminate the transaction and return -1 instead. Add some information on semantics to I2CSlaveClass. Signed-off-by: Corey Minyard <cminyard@mvista.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/i2c/i2c-ddc.c')
-rw-r--r--hw/i2c/i2c-ddc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/i2c/i2c-ddc.c b/hw/i2c/i2c-ddc.c
index 1227212934..66899d7233 100644
--- a/hw/i2c/i2c-ddc.c
+++ b/hw/i2c/i2c-ddc.c
@@ -230,13 +230,15 @@ static void i2c_ddc_reset(DeviceState *ds)
s->reg = 0;
}
-static void i2c_ddc_event(I2CSlave *i2c, enum i2c_event event)
+static int i2c_ddc_event(I2CSlave *i2c, enum i2c_event event)
{
I2CDDCState *s = I2CDDC(i2c);
if (event == I2C_START_SEND) {
s->firstbyte = true;
}
+
+ return 0;
}
static int i2c_ddc_rx(I2CSlave *i2c)