mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
Merge tag 'for-v2023.01-rc2' of https://source.denx.de/u-boot/custodians/u-boot-i2c
i2c Fixes for v2023.01-rc2 - i2c-gpio: add a missing new line in printed string detected and fixed by Sergei - microchip i2c driver fixes from Conor - fix erroneous late ack send - fix ack sending logic
This commit is contained in:
commit
fac432652f
2 changed files with 19 additions and 8 deletions
|
@ -362,7 +362,7 @@ static int i2c_gpio_of_to_plat(struct udevice *dev)
|
|||
|
||||
return 0;
|
||||
error:
|
||||
pr_err("Can't get %s gpios! Error: %d", dev->name, ret);
|
||||
pr_err("Can't get %s gpios! Error: %d\n", dev->name, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
/*
|
||||
* Microchip I2C controller driver
|
||||
*
|
||||
* Copyright (C) 2021 Microchip Technology Inc.
|
||||
* Copyright (C) 2021-2022 Microchip Technology Inc.
|
||||
* Padmarao Begari <padmarao.begari@microchip.com>
|
||||
* Conor Dooley <conor.dooley@microchip.com>
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <clk.h>
|
||||
|
@ -223,7 +224,7 @@ static void mpfs_i2c_empty_rx(struct mpfs_i2c_bus *bus)
|
|||
bus->msg_len--;
|
||||
}
|
||||
|
||||
if (bus->msg_len == 0) {
|
||||
if (bus->msg_len <= 1) {
|
||||
ctrl = readl(bus->base + MPFS_I2C_CTRL);
|
||||
ctrl &= ~CTRL_AA;
|
||||
writel(ctrl, bus->base + MPFS_I2C_CTRL);
|
||||
|
@ -265,16 +266,27 @@ static int mpfs_i2c_service_handler(struct mpfs_i2c_bus *bus)
|
|||
}
|
||||
break;
|
||||
case STATUS_M_SLAR_ACK:
|
||||
ctrl = readl(bus->base + MPFS_I2C_CTRL);
|
||||
ctrl |= CTRL_AA;
|
||||
writel(ctrl, bus->base + MPFS_I2C_CTRL);
|
||||
if (bus->msg_len == 0) {
|
||||
if (bus->msg_len > 1u) {
|
||||
ctrl = readl(bus->base + MPFS_I2C_CTRL);
|
||||
ctrl |= CTRL_AA;
|
||||
writel(ctrl, bus->base + MPFS_I2C_CTRL);
|
||||
} else if (bus->msg_len == 1u) {
|
||||
ctrl = readl(bus->base + MPFS_I2C_CTRL);
|
||||
ctrl &= ~CTRL_AA;
|
||||
writel(ctrl, bus->base + MPFS_I2C_CTRL);
|
||||
} else {
|
||||
ctrl = readl(bus->base + MPFS_I2C_CTRL);
|
||||
ctrl |= CTRL_AA;
|
||||
writel(ctrl, bus->base + MPFS_I2C_CTRL);
|
||||
/* On the last byte to be transmitted, send STOP */
|
||||
mpfs_i2c_stop(bus);
|
||||
finish = true;
|
||||
}
|
||||
break;
|
||||
case STATUS_M_RX_DATA_ACKED:
|
||||
mpfs_i2c_empty_rx(bus);
|
||||
break;
|
||||
case STATUS_M_RX_DATA_NACKED:
|
||||
mpfs_i2c_empty_rx(bus);
|
||||
if (bus->msg_len == 0) {
|
||||
/* On the last byte to be transmitted, send STOP */
|
||||
|
@ -283,7 +295,6 @@ static int mpfs_i2c_service_handler(struct mpfs_i2c_bus *bus)
|
|||
}
|
||||
break;
|
||||
case STATUS_M_TX_DATA_NACK:
|
||||
case STATUS_M_RX_DATA_NACKED:
|
||||
case STATUS_M_SLAR_NACK:
|
||||
case STATUS_M_SLAW_NACK:
|
||||
bus->msg_err = -ENXIO;
|
||||
|
|
Loading…
Reference in a new issue