drivers/i2c/designware/dw_i2c: handle bus < 0 in dw_i2c_dev_transfer

dw_i2c_soc_dev_to_bus will return -1 if it failed to find an I2C bus
number for a device. In this case return -1 instead of implicitly
casting the -1 to an unsigned int and passing that as bus number to
dw_i2c_transfer. The dw_i2c_base_address call inside _dw_i2c_transfer
already ended up handling this error case correctly, but better handle
the error more directly.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: I06b6005cee0c5c43855cb5b388a9911fc286c984
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70828
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
This commit is contained in:
Felix Held 2022-12-15 15:35:35 +01:00 committed by Fred Reitberger
parent d832bda32b
commit 76364fb66b
1 changed files with 6 additions and 1 deletions

View File

@ -857,7 +857,12 @@ void dw_i2c_acpi_fill_ssdt(const struct device *dev)
static int dw_i2c_dev_transfer(struct device *dev,
const struct i2c_msg *msg, size_t count)
{
return dw_i2c_transfer(dw_i2c_soc_dev_to_bus(dev), msg, count);
int bus = dw_i2c_soc_dev_to_bus(dev);
if (bus < 0) {
printk(BIOS_ERR, "Invalid I2C bus number.\n");
return -1;
}
return dw_i2c_transfer(bus, msg, count);
}
const struct i2c_bus_operations dw_i2c_bus_ops = {