aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorIcenowy Zheng <icenowy@aosc.io>2018-07-21 18:19:43 +0800
committerIcenowy Zheng <icenowy@aosc.io>2018-09-05 22:43:38 +0800
commitf348c3519e138f607b18cc63d1d34a61352fb7c6 (patch)
tree155284933cc4dc261657221428491f8017962a0f /drivers
parent42dc33106996c4a5849d405c3e54964a7231d272 (diff)
downloadtrusted-firmware-a-f348c3519e138f607b18cc63d1d34a61352fb7c6.tar.gz
marvell: drivers: use anonymous union in I2C driver
The I2C controller found in Marvell A8K SoCs (and some older SoCs) mux status and baudrate registers into the same address, however, it's a vendor customization, and the original IP core by Mentor Graphics uses two different addresses for the two registers. Use anonymous union in the driver, in order to ease code sharing for other SoC vendors that use this IP core (Allwinner SoCs that are newly introduced to mainline ATF use this core). Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/marvell/i2c/a8k_i2c.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/marvell/i2c/a8k_i2c.c b/drivers/marvell/i2c/a8k_i2c.c
index 72a773162c..fe8bc52eb2 100644
--- a/drivers/marvell/i2c/a8k_i2c.c
+++ b/drivers/marvell/i2c/a8k_i2c.c
@@ -50,6 +50,7 @@
#define I2C_UNSTUCK_TRIGGER 0x1
#define I2C_UNSTUCK_ONGOING 0x2
#define I2C_UNSTUCK_ERROR 0x4
+
struct marvell_i2c_regs {
uint32_t slave_address;
uint32_t data;
@@ -57,7 +58,7 @@ struct marvell_i2c_regs {
union {
uint32_t status; /* when reading */
uint32_t baudrate; /* when writing */
- } u;
+ };
uint32_t xtnd_slave_addr;
uint32_t reserved[2];
uint32_t soft_reset;
@@ -69,7 +70,7 @@ static struct marvell_i2c_regs *base;
static int marvell_i2c_lost_arbitration(uint32_t *status)
{
- *status = mmio_read_32((uintptr_t)&base->u.status);
+ *status = mmio_read_32((uintptr_t)&base->status);
if ((*status == I2C_STATUS_LOST_ARB_DATA_ADDR_TRANSFER) ||
(*status == I2C_STATUS_LOST_ARB_GENERAL_CALL))
return -EAGAIN;
@@ -271,7 +272,7 @@ static unsigned int marvell_i2c_bus_speed_set(unsigned int requested_speed)
VERBOSE("%s: actual_n = %u, actual_m = %u\n",
__func__, actual_n, actual_m);
/* Set the baud rate */
- mmio_write_32((uintptr_t)&base->u.baudrate, (actual_m << 3) | actual_n);
+ mmio_write_32((uintptr_t)&base->baudrate, (actual_m << 3) | actual_n);
return 0;
}