[PATCH v4 1/2] Remove beagle old i2c code

Sichen Zhao 1473996754 at qq.com
Mon Jun 5 12:49:49 UTC 2017


modify c/src/lib/libbsp/arm/beagle/Makefile.am
modify c/src/lib/libbsp/arm/beagle/include/i2c.h
delete c/src/lib/libbsp/arm/beagle/misc/i2c.c
---
 c/src/lib/libbsp/arm/beagle/Makefile.am   |   1 -
 c/src/lib/libbsp/arm/beagle/include/i2c.h | 181 ------------
 c/src/lib/libbsp/arm/beagle/misc/i2c.c    | 451 ------------------------------
 3 files changed, 633 deletions(-)
 delete mode 100644 c/src/lib/libbsp/arm/beagle/misc/i2c.c

diff --git a/c/src/lib/libbsp/arm/beagle/Makefile.am b/c/src/lib/libbsp/arm/beagle/Makefile.am
index 8bb8478..c14db49 100644
--- a/c/src/lib/libbsp/arm/beagle/Makefile.am
+++ b/c/src/lib/libbsp/arm/beagle/Makefile.am
@@ -114,7 +114,6 @@ libbsp_a_SOURCES += ../../shared/console.c \
         ../../shared/console_control.c
 
 # I2C
-libbsp_a_SOURCES += misc/i2c.c
 
 # GPIO
 libbsp_a_SOURCES += gpio/bbb-gpio.c
diff --git a/c/src/lib/libbsp/arm/beagle/include/i2c.h b/c/src/lib/libbsp/arm/beagle/include/i2c.h
index e7d1716..010fcee 100644
--- a/c/src/lib/libbsp/arm/beagle/include/i2c.h
+++ b/c/src/lib/libbsp/arm/beagle/include/i2c.h
@@ -180,187 +180,6 @@ struct i2c {
   unsigned short res15;
 };
 
-static unsigned short wait_for_pin( void );
-
-static void wait_for_bb( void );
-
-static void flush_fifo( void );
-
-void i2c_init( int speed, int slaveadd );
-
-static int i2c_read_byte(
-  unsigned char devaddr,
-  unsigned char regoffset,
-  unsigned char *value
-);
-
-int i2c_write(
-  unsigned char chip,
-  unsigned int addr,
-  int alen,
-  unsigned char *buffer,
-  int len
-);
-
-int i2c_read(
-  unsigned char chip,
-  uint addr,
-  int alen,
-  unsigned char *buffer,
-  int len
-);
-
-static int imw ( unsigned char  chip, unsigned long addr, unsigned char byte );
-
-static int imd( unsigned char chip, unsigned int addr, unsigned int length );
-
-/**
- * @brief Initializes the I2C module @a i2c.
- *
- * Valid @a clock_in_hz values are 100000 and 400000.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INVALID_ID Invalid @a i2c value.
- * @retval RTEMS_INVALID_CLOCK Invalid @a clock_in_hz value.
- */
-rtems_status_code beagle_i2c_init(
-  volatile beagle_i2c *i2c,
-  unsigned clock_in_hz
-);
-
-/**
- * @brief Resets the I2C module @a i2c.
- */
-void beagle_i2c_reset(volatile beagle_i2c *i2c);
-
-/**
- * @brief Sets the I2C module @a i2c clock.
- *
- * Valid @a clock_in_hz values are 100000 and 400000.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INVALID_CLOCK Invalid @a clock_in_hz value.
- */
-rtems_status_code beagle_i2c_clock(
-  volatile beagle_i2c *i2c,
-  unsigned clock_in_hz
-);
-
-/**
- * @brief Starts a write transaction on the I2C module @a i2c.
- *
- * The address parameter @a addr must not contain the read/write bit.
- *
- * The error status may be delayed to the next
- * beagle_i2c_write_with_optional_stop() due to controller flaws.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-rtems_status_code beagle_i2c_write_start(
-  volatile beagle_i2c *i2c,
-  unsigned addr
-);
-
-/**
- * @brief Writes data via the I2C module @a i2c with optional stop.
- *
- * The error status may be delayed to the next
- * beagle_i2c_write_with_optional_stop() due to controller flaws.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-rtems_status_code beagle_i2c_write_with_optional_stop(
-  volatile beagle_i2c *i2c,
-  const uint8_t *out,
-  size_t n,
-  bool stop
-);
-
-/**
- * @brief Starts a read transaction on the I2C module @a i2c.
- *
- * The address parameter @a addr must not contain the read/write bit.
- *
- * The error status may be delayed to the next
- * beagle_i2c_read_with_optional_stop() due to controller flaws.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-rtems_status_code beagle_i2c_read_start(
-  volatile beagle_i2c *i2c,
-  unsigned addr
-);
-
-/**
- * @brief Reads data via the I2C module @a i2c with optional stop.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- * @retval RTEMS_NOT_IMPLEMENTED Stop is @a false.
- */
-rtems_status_code beagle_i2c_read_with_optional_stop(
-  volatile beagle_i2c *i2c,
-  uint8_t *in,
-  size_t n,
-  bool stop
-);
-
-/**
- * @brief Writes and reads data via the I2C module @a i2c.
- *
- * This will be one bus transaction.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-rtems_status_code beagle_i2c_write_and_read(
-  volatile beagle_i2c *i2c,
-  unsigned addr,
-  const uint8_t *out,
-  size_t out_size,
-  uint8_t *in,
-  size_t in_size
-);
-
-/**
- * @brief Writes data via the I2C module @a i2c.
- *
- * This will be one bus transaction.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-static inline rtems_status_code beagle_i2c_write(
-  volatile beagle_i2c *i2c,
-  unsigned addr,
-  const uint8_t *out,
-  size_t out_size
-)
-{
-  return beagle_i2c_write_and_read(i2c, addr, out, out_size, NULL, 0);
-}
-
-/**
- * @brief Reads data via the I2C module @a i2c.
- *
- * This will be one bus transaction.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_IO_ERROR Received a NACK from the slave.
- */
-static inline rtems_status_code beagle_i2c_read(
-  volatile beagle_i2c *i2c,
-  unsigned addr,
-  uint8_t *in,
-  size_t in_size
-)
-{
-  return beagle_i2c_write_and_read(i2c, addr, NULL, 0, in, in_size);
-}
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
diff --git a/c/src/lib/libbsp/arm/beagle/misc/i2c.c b/c/src/lib/libbsp/arm/beagle/misc/i2c.c
deleted file mode 100644
index 40af879..0000000
--- a/c/src/lib/libbsp/arm/beagle/misc/i2c.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/**
- * @file
- *
- * @ingroup arm_beagle
- *
- * @brief I2C support implementation.
- */
-
-/*
- * Copyright (c) 2012 Claas Ziemke. All rights reserved.
- *
- *  Claas Ziemke
- *  Kernerstrasse 11
- *  70182 Stuttgart
- *  Germany
- *  <claas.ziemke at gmx.net>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems.h>
-#include <rtems/bspIo.h>
-
-#include <bsp.h>
-#include <bsp/i2c.h>
-
-static struct i2c *i2c_base = (struct i2c *)I2C_DEFAULT_BASE;
-
-static unsigned short wait_for_pin( void ) {
-
-  unsigned short status;
-  int timeout = I2C_TIMEOUT;
-
-  do {
-    udelay( 1000 );
-    status = readw( &i2c_base->stat );
-  } while( !( status &
-        ( I2C_STAT_ROVR | I2C_STAT_XUDF | I2C_STAT_XRDY |
-        I2C_STAT_RRDY | I2C_STAT_ARDY | I2C_STAT_NACK |
-        I2C_STAT_AL ) ) && timeout-- );
-
-  if( timeout <= 0 ) {
-    printk( "timed out in wait_for_pin: I2C_STAT = %x\n",
-      readw( &i2c_base->stat ) );
-    writew( 0xFFFF, &i2c_base->stat );  /* clear current interrupts...*/
-    status = 0;
-  }
-
-  return status;
-}
-
-static void wait_for_bb( void ) {
-
-  int timeout = I2C_TIMEOUT;
-  unsigned short status;
-
-  writew( 0xFFFF, &i2c_base->stat );  /* clear current interrupts...*/
-  while( ( status = readw( &i2c_base->stat ) & I2C_STAT_BB ) && timeout-- ) {
-    writew( status, &i2c_base->stat );
-    udelay( 1000 );
-  }
-
-  if( timeout <= 0 ) {
-    printk( "timed out in wait_for_bb: I2C_STAT = %x\n",
-      readw( &i2c_base->stat ) );
-  }
-  writew( 0xFFFF, &i2c_base->stat );   /* clear delayed stuff*/
-}
-
-static void flush_fifo( void ) {
-
-  unsigned short status;
-
-  /* note: if you try and read data when its not there or ready
-   * you get a bus error
-   */
-  while( 1 ) {
-    status = readw( &i2c_base->stat );
-    if( status == I2C_STAT_RRDY ) {
-      readw( &i2c_base->data );
-      writew( I2C_STAT_RRDY, &i2c_base->stat );
-      udelay( 1000 );
-    } else {
-      break;
-    }
-  }
-}
-
-void i2c_init( int speed, int slaveadd ) {
-
-  int psc, fsscll, fssclh;
-  int hsscll = 0, hssclh = 0;
-  unsigned int scll, sclh;
-  int timeout = I2C_TIMEOUT;
-
-  // Only handle standard, fast and high speeds
-  if( ( speed != OMAP_I2C_STANDARD   ) &&
-      ( speed != OMAP_I2C_FAST_MODE  ) &&
-      ( speed != OMAP_I2C_HIGH_SPEED ) ) {
-    printk( "Error : I2C unsupported speed %d\n", speed );
-    return;
-  }
-
-  psc = I2C_IP_CLK / I2C_INTERNAL_SAMPLING_CLK;
-  psc -= 1;
-  if( psc < I2C_PSC_MIN ) {
-    printk( "Error : I2C unsupported prescalar %d\n", psc );
-    return;
-  }
-
-  if( speed == OMAP_I2C_HIGH_SPEED ) {
-    // High speed
-
-    // For first phase of HS mode
-    fsscll = fssclh = I2C_INTERNAL_SAMPLING_CLK / ( 2 * OMAP_I2C_FAST_MODE );
-
-    fsscll -= I2C_HIGHSPEED_PHASE_ONE_SCLL_TRIM;
-    fssclh -= I2C_HIGHSPEED_PHASE_ONE_SCLH_TRIM;
-    if( ( ( fsscll < 0 ) || ( fssclh < 0 ) ) || ( ( fsscll > 255 ) ||
-      ( fssclh > 255 ) ) ) {
-      printk( "Error : I2C initializing first phase clock\n" );
-      return;
-    }
-
-    // For second phase of HS mode
-    hsscll = hssclh = I2C_INTERNAL_SAMPLING_CLK / ( 2 * speed );
-
-    hsscll -= I2C_HIGHSPEED_PHASE_TWO_SCLL_TRIM;
-    hssclh -= I2C_HIGHSPEED_PHASE_TWO_SCLH_TRIM;
-    if( ( ( fsscll < 0 ) || ( fssclh < 0 ) ) || ( ( fsscll > 255 ) ||
-      ( fssclh > 255 ) ) ) {
-      printk( "Error : I2C initializing second phase clock\n" );
-      return;
-    }
-
-    scll = ( unsigned int ) hsscll << 8 | ( unsigned int ) fsscll;
-    sclh = ( unsigned int ) hssclh << 8 | ( unsigned int ) fssclh;
-
-  } else {
-    // Standard and fast speed
-    fsscll = fssclh = I2C_INTERNAL_SAMPLING_CLK / ( 2 * speed );
-
-    fsscll -= I2C_FASTSPEED_SCLL_TRIM;
-    fssclh -= I2C_FASTSPEED_SCLH_TRIM;
-    if( ( ( fsscll < 0 ) || ( fssclh < 0 ) ) || ( ( fsscll > 255 ) ||
-      ( fssclh > 255 ) ) ) {
-      printk( "Error : I2C initializing clock\n" );
-      return;
-    }
-
-    scll = ( unsigned int ) fsscll;
-    sclh = ( unsigned int ) fssclh;
-  }
-
-  if( readw( &i2c_base->con ) & I2C_CON_EN ) {
-    writew( 0, &i2c_base->con );
-    udelay( 50000  );
-  }
-
-  writew( 0x2, &i2c_base->sysc ); /* for ES2 after soft reset */
-  udelay( 1000 );
-
-  writew( I2C_CON_EN, &i2c_base->con );
-  while( !( readw( &i2c_base->syss ) & I2C_SYSS_RDONE ) && timeout-- ) {
-    if (timeout <= 0) {
-      printk( "ERROR: Timeout in soft-reset\n" );
-      return;
-    }
-    udelay( 1000 );
-  }
-
-  writew( 0, &i2c_base->con );
-  writew( psc, &i2c_base->psc );
-  writew( scll, &i2c_base->scll );
-  writew( sclh, &i2c_base->sclh );
-
-  /* own address */
-  writew( slaveadd, &i2c_base->oa );
-  writew( I2C_CON_EN, &i2c_base->con );
-
-  /* have to enable intrrupts or OMAP i2c module doesn't work */
-  writew( I2C_IE_XRDY_IE | I2C_IE_RRDY_IE | I2C_IE_ARDY_IE | I2C_IE_NACK_IE |
-          I2C_IE_AL_IE, &i2c_base->ie );
-  udelay( 1000 );
-  flush_fifo();
-  writew( 0xFFFF, &i2c_base->stat );
-  writew( 0, &i2c_base->cnt );
-
-  //if( gd->flags & GD_FLG_RELOC ) bus_initialized[ current_bus ] = 1;
-}
-
-static int i2c_read_byte(
-  unsigned char devaddr,
-  unsigned char regoffset,
-  unsigned char *value
-)
-{
-  int i2c_error = 0;
-  unsigned short status;
-
-  /* wait until bus not busy */
-  wait_for_bb();
-
-  /* one byte only */
-  writew(1, &i2c_base->cnt);
-  /* set slave address */
-  writew(devaddr, &i2c_base->sa);
-  /* no stop bit needed here */
-  writew(I2C_CON_EN | I2C_CON_MST | I2C_CON_STT |
-        I2C_CON_TRX, &i2c_base->con);
-
-  /* send register offset */
-  while (1) {
-    status = wait_for_pin();
-    if (status == 0 || status & I2C_STAT_NACK) {
-      i2c_error = 1;
-      goto read_exit;
-    }
-    if (status & I2C_STAT_XRDY) {
-      /* Important: have to use byte access */
-      writeb(regoffset, &i2c_base->data);
-      writew(I2C_STAT_XRDY, &i2c_base->stat);
-    }
-    if (status & I2C_STAT_ARDY) {
-      writew(I2C_STAT_ARDY, &i2c_base->stat);
-      break;
-    }
-  }
-
-  /* set slave address */
-  writew(devaddr, &i2c_base->sa);
-  /* read one byte from slave */
-  writew(1, &i2c_base->cnt);
-  /* need stop bit here */
-  writew(I2C_CON_EN | I2C_CON_MST |
-    I2C_CON_STT | I2C_CON_STP,
-    &i2c_base->con);
-
-  /* receive data */
-  while (1) {
-    status = wait_for_pin();
-    if (status == 0 || status & I2C_STAT_NACK) {
-      i2c_error = 1;
-      goto read_exit;
-    }
-    if (status & I2C_STAT_RRDY) {
-      *value = readw(&i2c_base->data);
-      writew(I2C_STAT_RRDY, &i2c_base->stat);
-    }
-    if (status & I2C_STAT_ARDY) {
-      writew(I2C_STAT_ARDY, &i2c_base->stat);
-      break;
-    }
-  }
-
-read_exit:
-  flush_fifo();
-  writew(0xFFFF, &i2c_base->stat);
-  writew(0, &i2c_base->cnt);
-  return i2c_error;
-}
-
-int i2c_write(
-  unsigned char chip,
-  unsigned int addr,
-  int alen,
-  unsigned char *buffer,
-  int len
-)
-{
-  int i;
-  unsigned short status;
-  int i2c_error = 0;
-
-  if (alen > 1) {
-    printk("I2C write: addr len %d not supported\n", alen);
-    return 1;
-  }
-
-  if (addr + len > 256) {
-    printk("I2C write: address 0x%x + 0x%x out of range\n",
-        addr, len);
-    return 1;
-  }
-
-  /* wait until bus not busy */
-  wait_for_bb();
-
-  /* start address phase - will write regoffset + len bytes data */
-  writew(alen + len, &i2c_base->cnt);
-  /* set slave address */
-  writew(chip, &i2c_base->sa);
-  /* stop bit needed here */
-  writew(I2C_CON_EN | I2C_CON_MST | I2C_CON_STT | I2C_CON_TRX |
-    I2C_CON_STP, &i2c_base->con);
-
-  /* Send address byte */
-  status = wait_for_pin();
-
-  if (status == 0 || status & I2C_STAT_NACK) {
-    i2c_error = 1;
-    printk("error waiting for i2c address ACK (status=0x%x)\n",
-          status);
-    goto write_exit;
-  }
-
-  if (status & I2C_STAT_XRDY) {
-    writeb(addr & 0xFF, &i2c_base->data);
-    writew(I2C_STAT_XRDY, &i2c_base->stat);
-  } else {
-    i2c_error = 1;
-    printk("i2c bus not ready for transmit (status=0x%x)\n",
-          status);
-    goto write_exit;
-  }
-
-  /* address phase is over, now write data */
-  for (i = 0; i < len; i++) {
-    status = wait_for_pin();
-
-    if (status == 0 || status & I2C_STAT_NACK) {
-      i2c_error = 1;
-      printk("i2c error waiting for data ACK (status=0x%x)\n",
-          status);
-      goto write_exit;
-    }
-
-    if (status & I2C_STAT_XRDY) {
-      writeb(buffer[i], &i2c_base->data);
-      writew(I2C_STAT_XRDY, &i2c_base->stat);
-    } else {
-      i2c_error = 1;
-      printk("i2c bus not ready for Tx (i=%d)\n", i);
-      goto write_exit;
-    }
-  }
-
-write_exit:
-  flush_fifo();
-  writew(0xFFFF, &i2c_base->stat);
-  return i2c_error;
-}
-
-int i2c_read(
-  unsigned char chip,
-  uint addr,
-  int alen,
-  unsigned char *buffer,
-  int len
-)
-{
-  int i;
-
-  if (alen > 1) {
-    printk("I2C read: addr len %d not supported\n", alen);
-    return 1;
-  }
-
-  if (addr + len > 256) {
-    printk("I2C read: address out of range\n");
-    return 1;
-  }
-
-  for (i = 0; i < len; i++) {
-    if (i2c_read_byte(chip, addr + i, &buffer[i])) {
-      printk("I2C read: I/O error\n");
-      i2c_init( CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE );
-      return 1;
-    }
-  }
-
-  return 0;
-}
-
-/* Write (fill) memory
- *
- * Syntax:
- *  i2c mw {i2c_chip} {addr}{.0, .1, .2} {data} [{count}]
- */
-static int imw ( unsigned char  chip, unsigned long addr, unsigned char byte )
-{
-
-  unsigned int  alen;
-  int count;
-
-  alen = 1;
-  count = 1;
-
-  while (count-- > 0) {
-    if (i2c_write(chip, addr++, alen, &byte, 1) != 0)
-      printk("Error writing the chip.\n");
-    /*
-     * Wait for the write to complete.  The write can take
-     * up to 10mSec (we allow a little more time).
-     */
-  }
-
-  return (0);
-}
-
-/*
- * Syntax:
- *  i2c md {i2c_chip} {addr}{.0, .1, .2} {len}
- */
-static int imd( unsigned char chip, unsigned int addr, unsigned int length )
-{
-  int j, nbytes, linebytes;
-
-  unsigned int alen = 0;
-  if (alen > 3) return 0;
-
-  /*
-   * Print the lines.
-   *
-   * We buffer all read data, so we can make sure data is read only
-   * once.
-   */
-  nbytes = length;
-  do {
-    unsigned char linebuf[DISP_LINE_LEN];
-    unsigned char *cp;
-
-    linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes;
-
-    if (i2c_read(chip, addr, alen, linebuf, linebytes) != 0)
-      printk ("Error reading the chip.\n");
-    else {
-      printk("%04x:", addr);
-      cp = linebuf;
-      for (j=0; j<linebytes; j++) {
-        printk(" %02x", *cp++);
-        addr++;
-      }
-      printk ("    ");
-      cp = linebuf;
-      for (j=0; j<linebytes; j++) {
-        if ((*cp < 0x20) || (*cp > 0x7e))
-          printk (".");
-        else
-          printk("%c", *cp);
-        cp++;
-      }
-      printk ("\n");
-    }
-    nbytes -= linebytes;
-  } while (nbytes > 0);
-
-  return 0;
-}
-- 
2.7.4





More information about the devel mailing list