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

Christian Mauderer christian.mauderer at embedded-brains.de
Tue Jun 13 15:46:22 UTC 2017


Hello Sichen,

the patch builds and works well. I would say it is ready for being applied.

Kind regards

Christian

----- Ursprüngliche Mail -----
> Von: "赵 思晨" outlook.com>
> An: devel at rtems.org
> CC: "punit vara" <punitvara at gmail.com>, "Christian Mauderer" <christian.mauderer at embedded-brains.de>
> Gesendet: Dienstag, 13. Juni 2017 11:48:36
> Betreff: Re: [PATCH v4 1/2] Remove beagle old i2c code

> Hi all,
> 
> Any feedback or review for the i2c patch?
> 
> Best Regards
> Sichen Zhao
> 
> ________________________________________
> From: devel <devel-bounces at rtems.org> on behalf of Sichen Zhao
> <1473996754 at qq.com>
> Sent: Monday, June 5, 2017 20:49
> To: devel at rtems.org
> Cc: punitvara at gmail.com; christian.mauderer at embedded-brains.de
> Subject: [PATCH v4 1/2] Remove beagle old i2c code
> 
> 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
> - *  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
> 
> 
> 
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel

-- 
--------------------------------------------
embedded brains GmbH
Christian Mauderer
Dornierstr. 4
D-82178 Puchheim
Germany
email: christian.mauderer at embedded-brains.de
Phone: +49-89-18 94 741 - 18
Fax:   +49-89-18 94 741 - 08
PGP: Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list