Module Name: src Committed By: jmcneill Date: Thu Oct 31 10:21:29 UTC 2019
Modified Files: src/sys/arch/arm/ti: ti_iic.c ti_iicreg.h Log Message: Handle different register layout on OMAP3 To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/ti/ti_iic.c \ src/sys/arch/arm/ti/ti_iicreg.h 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/ti/ti_iic.c diff -u src/sys/arch/arm/ti/ti_iic.c:1.2 src/sys/arch/arm/ti/ti_iic.c:1.3 --- src/sys/arch/arm/ti/ti_iic.c:1.2 Tue Oct 29 22:19:13 2019 +++ src/sys/arch/arm/ti/ti_iic.c Thu Oct 31 10:21:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ti_iic.c,v 1.2 2019/10/29 22:19:13 jmcneill Exp $ */ +/* $NetBSD: ti_iic.c,v 1.3 2019/10/31 10:21:29 jmcneill Exp $ */ /* * Copyright (c) 2013 Manuel Bouyer. All rights reserved. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ti_iic.c,v 1.2 2019/10/29 22:19:13 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ti_iic.c,v 1.3 2019/10/31 10:21:29 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -81,10 +81,75 @@ __KERNEL_RCSID(0, "$NetBSD: ti_iic.c,v 1 #define DPRINTF(args) #endif +enum ti_iic_type { + TI_IIC_OMAP3, + TI_IIC_OMAP4, + TI_NTYPES +}; + +enum { + I2C_SYSC, + I2C_IRQSTATUS_RAW, + I2C_IRQSTATUS, + I2C_IRQENABLE, /* OMAP3 */ + I2C_IRQENABLE_SET, /* OMAP4 */ + I2C_IRQENABLE_CLR, /* OMAP4 */ + I2C_SYSS, + I2C_BUF, + I2C_CNT, + I2C_DATA, + I2C_CON, + I2C_OA, + I2C_SA, + I2C_PSC, + I2C_SCLL, + I2C_SCLH, + I2C_BUFSTAT, + TI_NREGS +}; + +static const u_int ti_iic_regmap[TI_NTYPES][TI_NREGS] = { + [TI_IIC_OMAP3] = { + [I2C_SYSC] = 0x20, + [I2C_IRQSTATUS_RAW] = 0x08, + [I2C_IRQSTATUS] = 0x08, + [I2C_IRQENABLE] = 0x04, + [I2C_SYSS] = 0x10, + [I2C_BUF] = 0x14, + [I2C_CNT] = 0x18, + [I2C_DATA] = 0x1c, + [I2C_CON] = 0x24, + [I2C_OA] = 0x28, + [I2C_SA] = 0x2c, + [I2C_PSC] = 0x30, + [I2C_SCLL] = 0x34, + [I2C_SCLH] = 0x38, + [I2C_BUFSTAT] = 0x40, + }, + [TI_IIC_OMAP4] = { + [I2C_SYSC] = 0x10, + [I2C_IRQSTATUS_RAW] = 0x24, + [I2C_IRQSTATUS] = 0x28, + [I2C_IRQENABLE_SET] = 0x2c, + [I2C_IRQENABLE_CLR] = 0x30, + [I2C_SYSS] = 0x90, + [I2C_BUF] = 0x94, + [I2C_CNT] = 0x98, + [I2C_DATA] = 0x9c, + [I2C_CON] = 0xa4, + [I2C_OA] = 0xa8, + [I2C_SA] = 0xac, + [I2C_PSC] = 0xb0, + [I2C_SCLL] = 0xb4, + [I2C_SCLH] = 0xb8, + [I2C_BUFSTAT] = 0xc0, + }, +}; + static const struct of_compat_data compat_data[] = { - /* compatible reg shift */ - { "ti,omap3-i2c", 2 }, - { "ti,omap4-i2c", 0 }, + /* compatible type */ + { "ti,omap3-i2c", TI_IIC_OMAP3 }, + { "ti,omap4-i2c", TI_IIC_OMAP4 }, { NULL } }; @@ -105,7 +170,7 @@ struct ti_iic_softc { bus_space_tag_t sc_iot; bus_space_handle_t sc_ioh; - u_int sc_reg_shift; + enum ti_iic_type sc_type; void *sc_ih; kmutex_t sc_mtx; @@ -122,13 +187,13 @@ struct ti_iic_softc { }; #define I2C_READ_REG(sc, reg) \ - bus_space_read_2((sc)->sc_iot, (sc)->sc_ioh, (reg) << (sc)->sc_reg_shift) + bus_space_read_2((sc)->sc_iot, (sc)->sc_ioh, ti_iic_regmap[(sc)->sc_type][(reg)]) #define I2C_READ_DATA(sc) \ - bus_space_read_1((sc)->sc_iot, (sc)->sc_ioh, OMAP2_I2C_DATA << (sc)->sc_reg_shift); + bus_space_read_1((sc)->sc_iot, (sc)->sc_ioh, ti_iic_regmap[(sc)->sc_type][I2C_DATA]) #define I2C_WRITE_REG(sc, reg, val) \ - bus_space_write_2((sc)->sc_iot, (sc)->sc_ioh, (reg) << (sc)->sc_reg_shift, (val)) + bus_space_write_2((sc)->sc_iot, (sc)->sc_ioh, ti_iic_regmap[(sc)->sc_type][(reg)], (val)) #define I2C_WRITE_DATA(sc, val) \ - bus_space_write_1((sc)->sc_iot, (sc)->sc_ioh, OMAP2_I2C_DATA << (sc)->sc_reg_shift, (val)) + bus_space_write_1((sc)->sc_iot, (sc)->sc_ioh, ti_iic_regmap[(sc)->sc_type][I2C_DATA], (val)) static int ti_iic_match(device_t, cfdata_t, void *); static void ti_iic_attach(device_t, device_t, void *); @@ -174,11 +239,11 @@ ti_iic_attach(device_t parent, device_t struct ti_iic_softc *sc = device_private(self); struct fdt_attach_args * const faa = opaque; const int phandle = faa->faa_phandle; - int scheme, major, minor, fifodepth, fifo; + int fifodepth, fifo; + const char *modname; char intrstr[128]; bus_addr_t addr; bus_size_t size; - uint16_t rev; if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) { aprint_error(": couldn't get registers\n"); @@ -208,7 +273,7 @@ ti_iic_attach(device_t parent, device_t aprint_error(": couldn't map registers\n"); return; } - sc->sc_reg_shift = of_search_compatible(phandle, compat_data)->data; + sc->sc_type = of_search_compatible(phandle, compat_data)->data; sc->sc_ih = fdtbus_intr_establish(phandle, 0, IPL_NET, 0, ti_iic_intr, sc); @@ -217,23 +282,17 @@ ti_iic_attach(device_t parent, device_t return; } - scheme = I2C_REVNB_HI_SCHEME(I2C_READ_REG(sc, OMAP2_I2C_REVNB_HI)); - rev = I2C_READ_REG(sc, OMAP2_I2C_REVNB_LO); - if (scheme == 0) { - major = I2C_REV_SCHEME_0_MAJOR(rev); - minor = I2C_REV_SCHEME_0_MINOR(rev); - } else { - major = I2C_REVNB_LO_MAJOR(rev); - minor = I2C_REVNB_LO_MINOR(rev); - } - aprint_normal(": rev %d.%d, scheme %d\n", major, minor, scheme); - aprint_naive("\n"); + modname = fdtbus_get_string(phandle, "ti,hwmods"); + if (modname == NULL) + modname = fdtbus_get_string(OF_parent(phandle), "ti,hwmods"); - fifodepth = I2C_BUFSTAT_FIFODEPTH(I2C_READ_REG(sc, OMAP2_I2C_BUFSTAT)); + fifodepth = I2C_BUFSTAT_FIFODEPTH(I2C_READ_REG(sc, I2C_BUFSTAT)); fifo = OMAP2_I2C_FIFOBYTES(fifodepth); - aprint_normal_dev(self, "%d-bytes FIFO\n", fifo); sc->sc_rxthres = sc->sc_txthres = fifo >> 1; + aprint_naive("\n"); + aprint_normal(": I2C controller (%s), %d-bytes FIFO\n", modname, fifo); + ti_iic_reset(sc); ti_iic_flush(sc); @@ -250,10 +309,10 @@ ti_iic_intr(void *arg) mutex_enter(&sc->sc_mtx); DPRINTF(("ti_iic_intr\n")); - stat = I2C_READ_REG(sc, OMAP2_I2C_IRQSTATUS); + stat = I2C_READ_REG(sc, I2C_IRQSTATUS); DPRINTF(("ti_iic_intr pre handle sc->sc_op eq %#x\n", sc->sc_op)); ti_iic_handle_intr(sc, stat); - I2C_WRITE_REG(sc, OMAP2_I2C_IRQSTATUS, stat); + I2C_WRITE_REG(sc, I2C_IRQSTATUS, stat); if (sc->sc_op == TI_I2CERROR || sc->sc_op == TI_I2CDONE) { DPRINTF(("ti_iic_intr post handle sc->sc_op %#x\n", sc->sc_op)); cv_broadcast(&sc->sc_cv); @@ -342,19 +401,19 @@ ti_iic_reset(struct ti_iic_softc *sc) DPRINTF(("ti_iic_reset\n")); /* Disable */ - I2C_WRITE_REG(sc, OMAP2_I2C_CON, 0); + I2C_WRITE_REG(sc, I2C_CON, 0); /* Soft reset */ - I2C_WRITE_REG(sc, OMAP2_I2C_SYSC, I2C_SYSC_SRST); + I2C_WRITE_REG(sc, I2C_SYSC, I2C_SYSC_SRST); delay(1000); /* enable so that we can check for reset complete */ - I2C_WRITE_REG(sc, OMAP2_I2C_CON, I2C_CON_EN); + I2C_WRITE_REG(sc, I2C_CON, I2C_CON_EN); delay(1000); for (i = 0; i < 1000; i++) { /* 1s delay for reset */ - if (I2C_READ_REG(sc, OMAP2_I2C_SYSS) & I2C_SYSS_RDONE) + if (I2C_READ_REG(sc, I2C_SYSS) & I2C_SYSS_RDONE) break; } /* Disable again */ - I2C_WRITE_REG(sc, OMAP2_I2C_CON, 0); + I2C_WRITE_REG(sc, I2C_CON, 0); delay(50000); if (i >= 1000) { @@ -369,19 +428,19 @@ ti_iic_reset(struct ti_iic_softc *sc) sclh = 55; /* Clocks */ - I2C_WRITE_REG(sc, OMAP2_I2C_PSC, psc); - I2C_WRITE_REG(sc, OMAP2_I2C_SCLL, scll); - I2C_WRITE_REG(sc, OMAP2_I2C_SCLH, sclh); + I2C_WRITE_REG(sc, I2C_PSC, psc); + I2C_WRITE_REG(sc, I2C_SCLL, scll); + I2C_WRITE_REG(sc, I2C_SCLH, sclh); /* Own I2C address */ - I2C_WRITE_REG(sc, OMAP2_I2C_OA, OMAP2_I2C_SLAVE_ADDR); + I2C_WRITE_REG(sc, I2C_OA, OMAP2_I2C_SLAVE_ADDR); /* 5 bytes fifo */ - I2C_WRITE_REG(sc, OMAP2_I2C_BUF, + I2C_WRITE_REG(sc, I2C_BUF, I2C_BUF_RXTRSH(sc->sc_rxthres) | I2C_BUF_TXTRSH(sc->sc_txthres)); /* Enable */ - I2C_WRITE_REG(sc, OMAP2_I2C_CON, I2C_CON_EN); + I2C_WRITE_REG(sc, I2C_CON, I2C_CON_EN); return 0; } @@ -426,21 +485,25 @@ ti_iic_op(struct ti_iic_softc *sc, i2c_a sc->sc_buflen = buflen; sc->sc_bufidx = 0; - I2C_WRITE_REG(sc, OMAP2_I2C_CON, I2C_CON_EN | I2C_CON_MST | I2C_CON_STP); + I2C_WRITE_REG(sc, I2C_CON, I2C_CON_EN | I2C_CON_MST | I2C_CON_STP); DPRINTF(("ti_iic_op: op %d con 0x%x ", op, con)); - I2C_WRITE_REG(sc, OMAP2_I2C_CNT, buflen); - I2C_WRITE_REG(sc, OMAP2_I2C_SA, (addr & I2C_SA_MASK)); - DPRINTF(("SA 0x%x len %d\n", I2C_READ_REG(sc, OMAP2_I2C_SA), I2C_READ_REG(sc, OMAP2_I2C_CNT))); + I2C_WRITE_REG(sc, I2C_CNT, buflen); + I2C_WRITE_REG(sc, I2C_SA, (addr & I2C_SA_MASK)); + DPRINTF(("SA 0x%x len %d\n", I2C_READ_REG(sc, I2C_SA), I2C_READ_REG(sc, I2C_CNT))); if ((flags & I2C_F_POLL) == 0) { /* clear any pending interrupt */ - I2C_WRITE_REG(sc, OMAP2_I2C_IRQSTATUS, - I2C_READ_REG(sc, OMAP2_I2C_IRQSTATUS)); + I2C_WRITE_REG(sc, I2C_IRQSTATUS, + I2C_READ_REG(sc, I2C_IRQSTATUS)); /* and enable */ - I2C_WRITE_REG(sc, OMAP2_I2C_IRQENABLE_SET, mask); + if (sc->sc_type == TI_IIC_OMAP4) { + I2C_WRITE_REG(sc, I2C_IRQENABLE_SET, mask); + } else { + I2C_WRITE_REG(sc, I2C_IRQENABLE, mask); + } } /* start transfer */ - I2C_WRITE_REG(sc, OMAP2_I2C_CON, con); + I2C_WRITE_REG(sc, I2C_CON, con); if ((flags & I2C_F_POLL) == 0) { /* and wait for completion */ @@ -455,7 +518,11 @@ ti_iic_op(struct ti_iic_softc *sc, i2c_a DPRINTF(("ti_iic_op waiting done, op %#x\n", sc->sc_op)); /* disable interrupts */ - I2C_WRITE_REG(sc, OMAP2_I2C_IRQENABLE_CLR, 0xffff); + if (sc->sc_type == TI_IIC_OMAP4) { + I2C_WRITE_REG(sc, I2C_IRQENABLE_CLR, 0xffff); + } else { + I2C_WRITE_REG(sc, I2C_IRQENABLE, 0); + } } else { /* poll for completion */ DPRINTF(("ti_iic_op polling, op %x\n", sc->sc_op)); @@ -468,14 +535,14 @@ ti_iic_op(struct ti_iic_softc *sc, i2c_a } else { ti_iic_handle_intr(sc, stat); } - I2C_WRITE_REG(sc, OMAP2_I2C_IRQSTATUS, stat); + I2C_WRITE_REG(sc, I2C_IRQSTATUS, stat); } DPRINTF(("ti_iic_op polling done, op now %x\n", sc->sc_op)); } mutex_exit(&sc->sc_mtx); retry = 10000; - I2C_WRITE_REG(sc, OMAP2_I2C_CON, 0); - while (I2C_READ_REG(sc, OMAP2_I2C_CON) & I2C_CON_MST) { + I2C_WRITE_REG(sc, I2C_CON, 0); + while (I2C_READ_REG(sc, I2C_CON) & I2C_CON_MST) { delay(100); if (--retry == 0) break; @@ -514,14 +581,14 @@ ti_iic_do_read(struct ti_iic_softc *sc, KASSERT(mutex_owned(&sc->sc_mtx)); DPRINTF(("ti_iic_do_read stat %#x\n", stat)); if (stat & I2C_IRQSTATUS_RDR) { - len = I2C_READ_REG(sc, OMAP2_I2C_BUFSTAT); + len = I2C_READ_REG(sc, I2C_BUFSTAT); len = I2C_BUFSTAT_RXSTAT(len); DPRINTF(("ti_iic_do_read receive drain len %d left %d\n", - len, I2C_READ_REG(sc, OMAP2_I2C_CNT))); + len, I2C_READ_REG(sc, I2C_CNT))); } else if (stat & I2C_IRQSTATUS_RRDY) { len = sc->sc_rxthres + 1; DPRINTF(("ti_iic_do_read receive len %d left %d\n", - len, I2C_READ_REG(sc, OMAP2_I2C_CNT))); + len, I2C_READ_REG(sc, I2C_CNT))); } for (; sc->sc_bufidx < sc->sc_buflen && len > 0; @@ -541,14 +608,14 @@ ti_iic_do_write(struct ti_iic_softc *sc, DPRINTF(("ti_iic_do_write stat %#x\n", stat)); KASSERT(mutex_owned(&sc->sc_mtx)); if (stat & I2C_IRQSTATUS_XDR) { - len = I2C_READ_REG(sc, OMAP2_I2C_BUFSTAT); + len = I2C_READ_REG(sc, I2C_BUFSTAT); len = I2C_BUFSTAT_TXSTAT(len); DPRINTF(("ti_iic_do_write xmit drain len %d left %d\n", - len, I2C_READ_REG(sc, OMAP2_I2C_CNT))); + len, I2C_READ_REG(sc, I2C_CNT))); } else if (stat & I2C_IRQSTATUS_XRDY) { len = sc->sc_txthres + 1; DPRINTF(("ti_iic_do_write xmit len %d left %d\n", - len, I2C_READ_REG(sc, OMAP2_I2C_CNT))); + len, I2C_READ_REG(sc, I2C_CNT))); } for (; sc->sc_bufidx < sc->sc_buflen && len > 0; @@ -567,7 +634,7 @@ ti_iic_wait(struct ti_iic_softc *sc, uin uint16_t v; DPRINTF(("ti_iic_wait mask %#x val %#x flags %#x\n", mask, val, flags)); - while (((v = I2C_READ_REG(sc, OMAP2_I2C_IRQSTATUS_RAW)) & mask) != val) { + while (((v = I2C_READ_REG(sc, I2C_IRQSTATUS_RAW)) & mask) != val) { --retry; if (retry == 0) { aprint_error_dev(sc->sc_dev, ": wait timeout, " @@ -593,7 +660,7 @@ ti_iic_stat(struct ti_iic_softc *sc, uin int retry = 500; DPRINTF(("ti_iic_wait mask %#x\n", mask)); while (--retry > 0) { - v = I2C_READ_REG(sc, OMAP2_I2C_IRQSTATUS_RAW) & mask; + v = I2C_READ_REG(sc, I2C_IRQSTATUS_RAW) & mask; if (v != 0) break; delay(100); @@ -610,7 +677,7 @@ ti_iic_flush(struct ti_iic_softc *sc) int retry = 1000; uint16_t v; - while ((v = I2C_READ_REG(sc, OMAP2_I2C_IRQSTATUS_RAW)) & I2C_IRQSTATUS_RRDY) { + while ((v = I2C_READ_REG(sc, I2C_IRQSTATUS_RAW)) & I2C_IRQSTATUS_RRDY) { if (--retry == 0) { aprint_error_dev(sc->sc_dev, ": flush timeout, stat = %#x\n", v); @@ -621,7 +688,7 @@ ti_iic_flush(struct ti_iic_softc *sc) } #endif - I2C_WRITE_REG(sc, OMAP2_I2C_CNT, 0); + I2C_WRITE_REG(sc, I2C_CNT, 0); return 0; } Index: src/sys/arch/arm/ti/ti_iicreg.h diff -u src/sys/arch/arm/ti/ti_iicreg.h:1.2 src/sys/arch/arm/ti/ti_iicreg.h:1.3 --- src/sys/arch/arm/ti/ti_iicreg.h:1.2 Tue Oct 29 10:54:10 2019 +++ src/sys/arch/arm/ti/ti_iicreg.h Thu Oct 31 10:21:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ti_iicreg.h,v 1.2 2019/10/29 10:54:10 jmcneill Exp $ */ +/* $NetBSD: ti_iicreg.h,v 1.3 2019/10/31 10:21:29 jmcneill Exp $ */ /* * Copyright (c) 2013 Manuel Bouyer. All rights reserved. @@ -24,24 +24,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* register definitions for the i2c controller found in the - * Texas Instrument AM335x SOC - */ - -#ifndef _OMAP2IICREG_H -#define _OMAP2IICREG_H +#ifndef _TI_IICREG_H +#define _TI_IICREG_H -#define OMAP2_I2C_REVNB_LO 0x00 -#define I2C_REVNB_LO_RTL(x) (((x) >> 11) & 0x01f) -#define I2C_REVNB_LO_MAJOR(x) (((x) >> 8) & 0x007) -#define I2C_REVNB_LO_CUSTOM(x) (((x) >> 6) & 0x003) -#define I2C_REVNB_LO_MINOR(x) (((x) >> 0) & 0x01f) -#define I2C_REV_SCHEME_0_MAJOR(r) (((r) >> 4) && 0xf) -#define I2C_REV_SCHEME_0_MINOR(r) (((r) >> 0) && 0xf) -#define OMAP2_I2C_REVNB_HI 0x04 -#define I2C_REVNB_HI_SCHEME(x) (((x) >> 14) & 0x003) -#define I2C_REVNB_HI_FUNC(x) (((x) >> 0) & 0xfff) -#define OMAP2_I2C_SYSC 0x10 #define I2C_SYSC_CLKACTIVITY_OCP 0x0010 #define I2C_SYSC_CLKACTIVITY_SYSTEM 0x0020 #define I2C_SYSC_IDLE_MASK 0x0018 @@ -51,11 +36,7 @@ #define I2C_SYSC_ENAWAKEUP 0x0004 #define I2C_SYSC_SRST 0x0002 #define I2C_SYSC_AUTOIDLE 0x0001 -#define OMAP2_I2C_IRQSTATUS_RAW 0x24 -#define OMAP2_I2C_IRQSTATUS 0x28 -#define OMAP2_I2C_IRQENABLE_SET 0x2C -#define OMAP2_I2C_IRQENABLE_CLR 0x30 -#define OMAP2_I2C_WE 0x34 + #define I2C_IRQSTATUS_XDR 0x4000 #define I2C_IRQSTATUS_RDR 0x2000 #define I2C_IRQSTATUS_BB 0x1000 @@ -71,19 +52,13 @@ #define I2C_IRQSTATUS_ARDY 0x0004 #define I2C_IRQSTATUS_NACK 0x0002 #define I2C_IRQSTATUS_AL 0x0001 -#define OMAP2_I2C_DMARXENABLE_SET 0x38 -#define OMAP2_I2C_DMATXENABLE_SET 0x3C -#define OMAP2_I2C_DMARXENABLE_CLR 0x40 + #define I2C_DMARXENABLE 0x0001 -#define OMAP2_I2C_DMATXENABLE_CLR 0x44 + #define I2C_DMATXENABLE 0x0001 -#define OMAP2_I2C_DMARXWAKE_EN 0x48 - /* use same bits as IRQ */ -#define OMAP2_I2C_DMATXWAKE_EN 0x4C - /* use same bits as IRQ */ -#define OMAP2_I2C_SYSS 0x90 + #define I2C_SYSS_RDONE 0x0001 -#define OMAP2_I2C_BUF 0x94 + #define I2C_BUF_RDMA_EN 0x8000 #define I2C_BUF_RXFIFO_CLR 0x4000 #define I2C_BUF_RXTRSH_MASK 0x3f00 @@ -92,11 +67,11 @@ #define I2C_BUF_TXFIFO_CLR 0x0040 #define I2C_BUF_TXTRSH_MASK 0x003f #define I2C_BUF_TXTRSH(x) ((x) << 0) -#define OMAP2_I2C_CNT 0x98 + #define I2C_CNT_MASK 0xffff -#define OMAP2_I2C_DATA 0x9C + #define I2C_DATA_MASK 0x00ff -#define OMAP2_I2C_CON 0xA4 + #define I2C_CON_EN 0x8000 #define I2C_CON_STB 0x0800 #define I2C_CON_MST 0x0400 @@ -108,30 +83,24 @@ #define I2C_CON_XOA3 0x0010 #define I2C_CON_STP 0x0002 #define I2C_CON_STT 0x0001 -#define OMAP2_I2C_OA 0xA8 + #define I2C_OA_MASK 0x03ff -#define OMAP2_I2C_SA 0xAC + #define I2C_SA_MASK 0x03ff -#define OMAP2_I2C_PSC 0xB0 + #define I2C_PSC_MASK 0x000f -#define OMAP2_I2C_SCLL 0xB4 + #define I2C_SCLL_MASK 0x000f -#define OMAP2_I2C_SCLH 0xB8 + #define I2C_SCLH_MASK 0x000f -#define OMAP2_I2C_SYSTEST 0xBC -#define OMAP2_I2C_BUFSTAT 0xC0 + #define I2C_BUFSTAT_FIFODEPTH(x) (((x) >> 14) & 0x03) #define I2C_BUFSTAT_RXSTAT(x) (((x) >> 8) & 0x3f) #define I2C_BUFSTAT_TXSTAT(x) (((x) >> 0) & 0x3f) -#define OMAP2_I2C_OA1 0xC4 -#define OMAP2_I2C_OA2 0xC8 -#define OMAP2_I2C_OA3 0xCC - /* same bits as I2C_OA */ -#define OMAP2_I2C_ACTOA 0xD0 -#define OMAP2_I2C_SBLOCK 0xD4 + #define I2C_ACTOA_OA3_ACT 0x0008 #define I2C_ACTOA_OA2_ACT 0x0004 #define I2C_ACTOA_OA1_ACT 0x0002 #define I2C_ACTOA_OA0_ACT 0x0001 -#endif /* _OMAP2IICREG_H */ +#endif /* _TI_IICREG_H */