summaryrefslogtreecommitdiffstats
path: root/c/src/libchip
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2007-10-26 09:54:28 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2007-10-26 09:54:28 +0000
commit7a4e8e7c8afdf9e1c60c3ae91686bc6a6210c900 (patch)
treec187ea919b728037042517b9f994c80a47d02cfe /c/src/libchip
parent*** empty log message *** (diff)
downloadrtems-7a4e8e7c8afdf9e1c60c3ae91686bc6a6210c900.tar.bz2
corrected bug in libchip/i2c/spi-flash-m25p40
Diffstat (limited to 'c/src/libchip')
-rw-r--r--c/src/libchip/i2c/spi-flash-m25p40.c42
-rw-r--r--c/src/libchip/i2c/spi-flash-m25p40.h4
2 files changed, 39 insertions, 7 deletions
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
*/