Module Name: src Committed By: ryo Date: Sat Sep 19 18:19:09 UTC 2020
Modified Files: src/sys/arch/arm/rockchip: rk_i2c.c Log Message: fix to work on big endian To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/rockchip/rk_i2c.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/rockchip/rk_i2c.c diff -u src/sys/arch/arm/rockchip/rk_i2c.c:1.7 src/sys/arch/arm/rockchip/rk_i2c.c:1.8 --- src/sys/arch/arm/rockchip/rk_i2c.c:1.7 Sun Dec 22 23:23:29 2019 +++ src/sys/arch/arm/rockchip/rk_i2c.c Sat Sep 19 18:19:09 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_i2c.c,v 1.7 2019/12/22 23:23:29 thorpej Exp $ */ +/* $NetBSD: rk_i2c.c,v 1.8 2020/09/19 18:19:09 ryo Exp $ */ /*- * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca> @@ -28,7 +28,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.7 2019/12/22 23:23:29 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.8 2020/09/19 18:19:09 ryo Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -251,6 +251,10 @@ rk_i2c_write(struct rk_i2c_softc *sc, i2 txdata.data8[0] = addr << 1; memcpy(&txdata.data8[1], cmd, cmdlen); memcpy(&txdata.data8[1 + cmdlen], buf, buflen); +#if _BYTE_ORDER == _BIG_ENDIAN + for (int i = 0; i < howmany(len + 1, 4); i++) + LE32TOH(txdata.data32[i]); +#endif bus_space_write_region_4(sc->sc_bst, sc->sc_bsh, RKI2C_TXDATA(0), txdata.data32, howmany(len + 1, 4)); WR4(sc, RKI2C_MTXCNT, __SHIFTIN(len + 1, RKI2C_MTXCNT_MTXCNT)); @@ -312,6 +316,11 @@ rk_i2c_read(struct rk_i2c_softc *sc, i2c rxdata[n/4] = RD4(sc, RKI2C_RXDATA(n/4)); #endif +#if _BYTE_ORDER == _BIG_ENDIAN + for (int i = 0; i < howmany(buflen, 4); i++) + HTOLE32(rxdata[i]); +#endif + memcpy(buf, rxdata, buflen); return 0;