Skip to content

Commit

Permalink
i2c: have I2C receive operation return uint8_t
Browse files Browse the repository at this point in the history
It is never supposed to fail and cannot return an error, so just
have it return the proper type.  Have it return 0xff on nothing
available, since that's what would happen on a real bus.

Signed-off-by: Corey Minyard <[email protected]>
Reviewed-by: Peter Maydell <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Tested-by: Philippe Mathieu-Daudé <[email protected]>
  • Loading branch information
cminyard committed Feb 28, 2019
1 parent 93198b6 commit 2ac4c5f
Show file tree
Hide file tree
Showing 19 changed files with 37 additions and 44 deletions.
2 changes: 1 addition & 1 deletion hw/arm/pxa2xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1286,7 +1286,7 @@ static int pxa2xx_i2c_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int pxa2xx_i2c_rx(I2CSlave *i2c)
static uint8_t pxa2xx_i2c_rx(I2CSlave *i2c)
{
PXA2xxI2CSlaveState *slave = PXA2XX_I2C_SLAVE(i2c);
PXA2xxI2CState *s = slave->host;
Expand Down
4 changes: 2 additions & 2 deletions hw/arm/tosa.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,10 @@ static int tosa_dac_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int tosa_dac_recv(I2CSlave *s)
static uint8_t tosa_dac_recv(I2CSlave *s)
{
printf("%s: recv not supported!!!\n", __func__);
return -1;
return 0xff;
}

static void tosa_tg_init(PXA2xxState *cpu)
Expand Down
2 changes: 1 addition & 1 deletion hw/arm/z2.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ static int aer915_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int aer915_recv(I2CSlave *slave)
static uint8_t aer915_recv(I2CSlave *slave)
{
AER915State *s = AER915(slave);
int retval = 0x00;
Expand Down
2 changes: 1 addition & 1 deletion hw/audio/wm8750.c
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ static int wm8750_tx(I2CSlave *i2c, uint8_t data)
return 0;
}

static int wm8750_rx(I2CSlave *i2c)
static uint8_t wm8750_rx(I2CSlave *i2c)
{
return 0x00;
}
Expand Down
2 changes: 1 addition & 1 deletion hw/display/sii9022.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ static int sii9022_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int sii9022_rx(I2CSlave *i2c)
static uint8_t sii9022_rx(I2CSlave *i2c)
{
sii9022_state *s = SII9022(i2c);
uint8_t res = 0x00;
Expand Down
4 changes: 2 additions & 2 deletions hw/display/ssd0303.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ typedef struct {
uint8_t framebuffer[132*8];
} ssd0303_state;

static int ssd0303_recv(I2CSlave *i2c)
static uint8_t ssd0303_recv(I2CSlave *i2c)
{
BADF("Reads not implemented\n");
return -1;
return 0xff;
}

static int ssd0303_send(I2CSlave *i2c, uint8_t data)
Expand Down
2 changes: 1 addition & 1 deletion hw/gpio/max7310.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ static void max7310_reset(DeviceState *dev)
s->command = 0x00;
}

static int max7310_rx(I2CSlave *i2c)
static uint8_t max7310_rx(I2CSlave *i2c)
{
MAX7310State *s = MAX7310(i2c);

Expand Down
32 changes: 13 additions & 19 deletions hw/i2c/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,23 +191,17 @@ int i2c_send_recv(I2CBus *bus, uint8_t *data, bool send)
}
return ret ? -1 : 0;
} else {
if ((QLIST_EMPTY(&bus->current_devs)) || (bus->broadcast)) {
return -1;
}

sc = I2C_SLAVE_GET_CLASS(QLIST_FIRST(&bus->current_devs)->elt);
if (sc->recv) {
s = QLIST_FIRST(&bus->current_devs)->elt;
ret = sc->recv(s);
trace_i2c_recv(s->address, ret);
if (ret < 0) {
return ret;
} else {
*data = ret;
return 0;
ret = 0xff;
if (!QLIST_EMPTY(&bus->current_devs) && !bus->broadcast) {
sc = I2C_SLAVE_GET_CLASS(QLIST_FIRST(&bus->current_devs)->elt);
if (sc->recv) {
s = QLIST_FIRST(&bus->current_devs)->elt;
ret = sc->recv(s);
trace_i2c_recv(s->address, ret);
}
}
return -1;
*data = ret;
return 0;
}
}

Expand All @@ -216,12 +210,12 @@ int i2c_send(I2CBus *bus, uint8_t data)
return i2c_send_recv(bus, &data, true);
}

int i2c_recv(I2CBus *bus)
uint8_t i2c_recv(I2CBus *bus)
{
uint8_t data;
int ret = i2c_send_recv(bus, &data, false);
uint8_t data = 0xff;

return ret < 0 ? ret : data;
i2c_send_recv(bus, &data, false);
return data;
}

void i2c_nack(I2CBus *bus)
Expand Down
2 changes: 1 addition & 1 deletion hw/i2c/i2c-ddc.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ static int i2c_ddc_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int i2c_ddc_rx(I2CSlave *i2c)
static uint8_t i2c_ddc_rx(I2CSlave *i2c)
{
I2CDDCState *s = I2CDDC(i2c);

Expand Down
4 changes: 2 additions & 2 deletions hw/i2c/smbus_slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,11 @@ static int smbus_i2c_event(I2CSlave *s, enum i2c_event event)
return 0;
}

static int smbus_i2c_recv(I2CSlave *s)
static uint8_t smbus_i2c_recv(I2CSlave *s)
{
SMBusDevice *dev = SMBUS_DEVICE(s);
SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
int ret;
uint8_t ret;

switch (dev->mode) {
case SMBUS_RECV_BYTE:
Expand Down
2 changes: 1 addition & 1 deletion hw/input/lm832x.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ static int lm_i2c_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int lm_i2c_rx(I2CSlave *i2c)
static uint8_t lm_i2c_rx(I2CSlave *i2c)
{
LM823KbdState *s = LM8323(i2c);

Expand Down
2 changes: 1 addition & 1 deletion hw/misc/pca9552.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ static void pca9552_autoinc(PCA9552State *s)
}
}

static int pca9552_recv(I2CSlave *i2c)
static uint8_t pca9552_recv(I2CSlave *i2c)
{
PCA9552State *s = PCA9552(i2c);
uint8_t ret;
Expand Down
2 changes: 1 addition & 1 deletion hw/misc/tmp105.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ static void tmp105_write(TMP105State *s)
}
}

static int tmp105_rx(I2CSlave *i2c)
static uint8_t tmp105_rx(I2CSlave *i2c)
{
TMP105State *s = TMP105(i2c);

Expand Down
2 changes: 1 addition & 1 deletion hw/misc/tmp421.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ static void tmp421_write(TMP421State *s)
}
}

static int tmp421_rx(I2CSlave *i2c)
static uint8_t tmp421_rx(I2CSlave *i2c)
{
TMP421State *s = TMP421(i2c);

Expand Down
4 changes: 2 additions & 2 deletions hw/nvram/eeprom_at24c.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ int at24c_eeprom_event(I2CSlave *s, enum i2c_event event)
}

static
int at24c_eeprom_recv(I2CSlave *s)
uint8_t at24c_eeprom_recv(I2CSlave *s)
{
EEPROMState *ee = AT24C_EE(s);
int ret;
uint8_t ret;

ret = ee->mem[ee->cur];

Expand Down
2 changes: 1 addition & 1 deletion hw/timer/ds1338.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ static int ds1338_event(I2CSlave *i2c, enum i2c_event event)
return 0;
}

static int ds1338_recv(I2CSlave *i2c)
static uint8_t ds1338_recv(I2CSlave *i2c)
{
DS1338State *s = DS1338(i2c);
uint8_t res;
Expand Down
2 changes: 1 addition & 1 deletion hw/timer/m41t80.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ static int m41t80_send(I2CSlave *i2c, uint8_t data)
return 0;
}

static int m41t80_recv(I2CSlave *i2c)
static uint8_t m41t80_recv(I2CSlave *i2c)
{
M41t80State *s = M41T80(i2c);
struct tm now;
Expand Down
2 changes: 1 addition & 1 deletion hw/timer/twl92230.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ static int menelaus_tx(I2CSlave *i2c, uint8_t data)
return 0;
}

static int menelaus_rx(I2CSlave *i2c)
static uint8_t menelaus_rx(I2CSlave *i2c)
{
MenelausState *s = TWL92230(i2c);

Expand Down
7 changes: 3 additions & 4 deletions include/hw/i2c/i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,9 @@ typedef struct I2CSlaveClass {

/*
* Slave to master. This cannot fail, the device should always
* return something here. Negative values probably result in 0xff
* and a possible log from the driver, and shouldn't be used.
* return something here.
*/
int (*recv)(I2CSlave *s);
uint8_t (*recv)(I2CSlave *s);

/*
* Notify the slave of a bus state change. For start event,
Expand Down Expand Up @@ -78,7 +77,7 @@ void i2c_end_transfer(I2CBus *bus);
void i2c_nack(I2CBus *bus);
int i2c_send_recv(I2CBus *bus, uint8_t *data, bool send);
int i2c_send(I2CBus *bus, uint8_t data);
int i2c_recv(I2CBus *bus);
uint8_t i2c_recv(I2CBus *bus);

DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr);

Expand Down

0 comments on commit 2ac4c5f

Please sign in to comment.