diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2007-10-26 09:54:28 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2007-10-26 09:54:28 +0000 |
commit | 7a4e8e7c8afdf9e1c60c3ae91686bc6a6210c900 (patch) | |
tree | c187ea919b728037042517b9f994c80a47d02cfe | |
parent | *** empty log message *** (diff) | |
download | rtems-7a4e8e7c8afdf9e1c60c3ae91686bc6a6210c900.tar.bz2 |
corrected bug in libchip/i2c/spi-flash-m25p40
-rw-r--r-- | c/src/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/libchip/i2c/spi-flash-m25p40.c | 42 | ||||
-rw-r--r-- | c/src/libchip/i2c/spi-flash-m25p40.h | 4 |
3 files changed, 44 insertions, 7 deletions
diff --git a/c/src/ChangeLog b/c/src/ChangeLog index e1c189ba8c..c9a803db16 100644 --- a/c/src/ChangeLog +++ b/c/src/ChangeLog @@ -1,3 +1,8 @@ +2007-09-26 Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> + + * libchip/i2c/spi-flash-m25p40.c: + added addressing call in write function + 2007-09-24 Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> * libchip/i2c/spi-flash-m25p40.c, libchip/i2c/spi-flash-m25p40.c, diff --git a/c/src/libchip/i2c/spi-flash-m25p40.c b/c/src/libchip/i2c/spi-flash-m25p40.c index 310f9c80cc..782b32f691 100644 --- a/c/src/libchip/i2c/spi-flash-m25p40.c +++ b/c/src/libchip/i2c/spi-flash-m25p40.c @@ -16,8 +16,8 @@ +-----------------------------------------------------------------+ \*===============================================================*/ /* - * FIXME: currently, this driver only supports read accesses - * write/erase accesses are to be completed + * FIXME: currently, this driver only supports read/write accesses + * erase accesses are to be completed */ @@ -108,9 +108,17 @@ rtems_status_code spi_flash_m25p40_write unsigned char cmdbuf[4]; int ret_cnt = 0; /* - * FIXME: check arguments + * check arguments */ if (rc == RTEMS_SUCCESSFUL) { + if ((cnt <= 0) || + (cnt > M25P40_TOTAL_SIZE) || + (off > (M25P40_TOTAL_SIZE-cnt))) { + rc = RTEMS_INVALID_SIZE; + } + else if (buf == NULL) { + rc = RTEMS_INVALID_ADDRESS; + } } /* * select device, set transfer mode, address device @@ -126,6 +134,14 @@ rtems_status_code spi_flash_m25p40_write RTEMS_LIBI2C_IOCTL_SET_TFRMODE, &spi_flash_m25p40_tfr_mode); } + + /* + * address device + */ + if (rc == RTEMS_SUCCESSFUL) { + rc = rtems_libi2c_send_addr(minor,TRUE); + } + /* * send write_enable command */ @@ -150,11 +166,19 @@ rtems_status_code spi_flash_m25p40_write curr_cnt = M25P40_PAGE_SIZE - (off % M25P40_PAGE_SIZE); } /* - * select device, set transfer mode, address device + * select device, set transfer mode */ if (rc == RTEMS_SUCCESSFUL) { rc = rtems_libi2c_send_start(minor); } + + /* + * address device + */ + if (rc == RTEMS_SUCCESSFUL) { + rc = rtems_libi2c_send_addr(minor,TRUE); + } + /* * set transfer mode */ @@ -236,9 +260,17 @@ rtems_status_code spi_flash_m25p40_read unsigned char cmdbuf[4]; int ret_cnt = 0; /* - * FIXME: check arguments + * check arguments */ if (rc == RTEMS_SUCCESSFUL) { + if ((cnt <= 0) || + (cnt > M25P40_TOTAL_SIZE) || + (off > (M25P40_TOTAL_SIZE-cnt))) { + rc = RTEMS_INVALID_SIZE; + } + else if (buf == NULL) { + rc = RTEMS_INVALID_ADDRESS; + } } /* * select device, set transfer mode, address device diff --git a/c/src/libchip/i2c/spi-flash-m25p40.h b/c/src/libchip/i2c/spi-flash-m25p40.h index 786ba55792..26aa37e6f1 100644 --- a/c/src/libchip/i2c/spi-flash-m25p40.h +++ b/c/src/libchip/i2c/spi-flash-m25p40.h @@ -16,8 +16,8 @@ +-----------------------------------------------------------------+ \*===============================================================*/ /* - * FIXME: currently, this driver only supports read accesses - * write/erase accesses are to be completed + * FIXME: currently, this driver only supports read/write accesses + * erase accesses are to be completed */ |