console/i2c_smbus: Allow to send data w/o register offset

Not every I2C target requires a register address. Not sending one
for every console char saves us a lot of overhead.

Change-Id: I1c714768fdd4aea4885e40a85d21fa42414ce32c
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/82762
Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Nico Huber 2024-06-01 04:00:56 +02:00 committed by Felix Held
parent 77ae8f0f24
commit ae77d8afac
2 changed files with 16 additions and 3 deletions

View File

@ -318,8 +318,16 @@ config CONSOLE_I2C_SMBUS_SLAVE_ADDRESS
help
I2C address of the device which logs the data.
config CONSOLE_I2C_SMBUS_HAVE_DATA_REGISTER
bool "Write to a specific data register"
default y if SC16IS7XX_INIT
help
Select this to provide a register address that will
be sent before every data byte.
config CONSOLE_I2C_SMBUS_SLAVE_DATA_REGISTER
hex "Data register address of the I2C logging device"
depends on CONSOLE_I2C_SMBUS_HAVE_DATA_REGISTER
default 0x00 if SC16IS7XX_INIT
help
This an 8-bit data register.

View File

@ -13,7 +13,12 @@ void i2c_smbus_console_init(void)
void i2c_smbus_console_tx_byte(unsigned char c)
{
do_smbus_write_byte(CONFIG_FIXED_SMBUS_IO_BASE,
CONFIG_CONSOLE_I2C_SMBUS_SLAVE_ADDRESS,
CONFIG_CONSOLE_I2C_SMBUS_SLAVE_DATA_REGISTER, c);
if (CONFIG(CONSOLE_I2C_SMBUS_HAVE_DATA_REGISTER)) {
do_smbus_write_byte(CONFIG_FIXED_SMBUS_IO_BASE,
CONFIG_CONSOLE_I2C_SMBUS_SLAVE_ADDRESS,
CONFIG_CONSOLE_I2C_SMBUS_SLAVE_DATA_REGISTER, c);
} else {
do_smbus_send_byte(CONFIG_FIXED_SMBUS_IO_BASE,
CONFIG_CONSOLE_I2C_SMBUS_SLAVE_ADDRESS, c);
}
}