Use different api name for new i2c interface. Comply all driver.
[bertos.git] / bertos / cpu / arm / drv / i2c_lpc2.c
index 0a02e4fec7bc03762db76841d3a2c11fbe351065..a687e1a92c0f7b72bfb0cebbeddea8a96c13a51d 100644 (file)
 
 #include <drv/timer.h>
 #include <drv/i2c.h>
-#include <drv/vic_lpc2.h> /* vic_handler_t */
 
 #include <io/lpc23xx.h>
 
-#include <stdarg.h>
-
-
 struct I2cHardware
 {
        uint32_t base;
@@ -84,6 +80,7 @@ struct I2cHardware
                        if (timer_clock() - start > ms_to_ticks(CONFIG_I2C_START_TIMEOUT)) \
                        { \
                                LOG_ERR("Timeout SI assert\n"); \
+                               LOG_ERR("[%08lx]\n", HWREG(i2c->hw->base + I2C_STAT_OFF)); \
                                break; \
                        } \
                } \
@@ -109,7 +106,7 @@ static void i2c_hw_stop(I2c *i2c)
        HWREG(i2c->hw->base + I2C_CONCLR_OFF) = BV(I2CON_STAC) | BV(I2CON_SIC) | BV(I2CON_AAC);
 }
 
-static void i2c_lpc2_put(I2c *i2c, uint8_t data)
+static void i2c_lpc2_putc(I2c *i2c, uint8_t data)
 {
        HWREG(i2c->hw->base + I2C_DAT_OFF) = data;
        HWREG(i2c->hw->base + I2C_CONCLR_OFF) = BV(I2CON_SIC);
@@ -140,7 +137,7 @@ static void i2c_lpc2_put(I2c *i2c, uint8_t data)
        }
 }
 
-static uint8_t i2c_lpc2_get(I2c *i2c)
+static uint8_t i2c_lpc2_getc(I2c *i2c)
 {
        /*
         * Set ack bit if we want read more byte, otherwise
@@ -262,10 +259,10 @@ static void i2c_lpc2_start(struct I2c *i2c, uint16_t slave_addr)
 static const I2cVT i2c_lpc_vt =
 {
        .start = i2c_lpc2_start,
-       .get = i2c_lpc2_get,
-       .put = i2c_lpc2_put,
-       .send = i2c_swSend,
-       .recv = i2c_swRecv,
+       .getc = i2c_lpc2_getc,
+       .putc = i2c_lpc2_putc,
+       .write = i2c_genericWrite,
+       .read = i2c_genericRead,
 };
 
 struct I2cHardware i2c_lpc2_hw[] =
@@ -280,6 +277,26 @@ struct I2cHardware i2c_lpc2_hw[] =
                .pclk_mask = I2C0_PCLK_MASK,
                .pclk_div = I2C0_PCLK_DIV8,
        },
+       { /* I2C1 */
+               .base = I2C1_BASE_ADDR,
+               .pconp = BV(PCONP_PCI2C1),
+               .pinsel_port = PINSEL0_OFF,
+               .pinsel = I2C1_PINSEL,
+               .pinsel_mask = I2C1_PINSEL_MASK,
+               .pclksel = PCLKSEL1_OFF,
+               .pclk_mask = I2C1_PCLK_MASK,
+               .pclk_div = I2C1_PCLK_DIV8,
+       },
+       { /* I2C2 */
+               .base = I2C2_BASE_ADDR,
+               .pconp = BV(PCONP_PCI2C2),
+               .pinsel_port = PINSEL0_OFF,
+               .pinsel = I2C2_PINSEL,
+               .pinsel_mask = I2C2_PINSEL_MASK,
+               .pclksel = PCLKSEL1_OFF,
+               .pclk_mask = I2C2_PCLK_MASK,
+               .pclk_div = I2C2_PCLK_DIV8,
+       },
 };
 
 /**
@@ -290,7 +307,6 @@ void i2c_hw_init(I2c *i2c, int dev, uint32_t clock)
        i2c->hw = &i2c_lpc2_hw[dev];
        i2c->vt = &i2c_lpc_vt;
 
-
        /* Enable I2C clock */
        PCONP |= i2c->hw->pconp;
 
@@ -311,11 +327,10 @@ void i2c_hw_init(I2c *i2c, int dev, uint32_t clock)
        ASSERT(HWREG(i2c->hw->base + I2C_SCLH_OFF) > 4);
        ASSERT(HWREG(i2c->hw->base + I2C_SCLL_OFF) > 4);
 
-       /* Assign pins to SCL and SDA (P0_27, P0_28) */
+       /* Assign pins to SCL and SDA */
        HWREG(PINSEL_BASE_ADDR + i2c->hw->pinsel_port) &= ~i2c->hw->pinsel_mask;
        HWREG(PINSEL_BASE_ADDR + i2c->hw->pinsel_port) |= i2c->hw->pinsel;
 
-
        // Enable I2C
        HWREG(i2c->hw->base + I2C_CONSET_OFF) = BV(I2CON_I2EN);