diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-11-20 00:00:56 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-11-20 00:00:56 +0000 |
| commit | d3d1583adbb1489e6d6e6c38dd018c77c0cfdcc1 (patch) | |
| tree | f8097adef6d3b3ecf3b39a1a51472d97dce138d2 | |
| parent | 85969853d5533b8b70192590274c5d63f31735ec (diff) | |
| download | rockbox-d3d1583adbb1489e6d6e6c38dd018c77c0cfdcc1.zip rockbox-d3d1583adbb1489e6d6e6c38dd018c77c0cfdcc1.tar.gz rockbox-d3d1583adbb1489e6d6e6c38dd018c77c0cfdcc1.tar.bz2 rockbox-d3d1583adbb1489e6d6e6c38dd018c77c0cfdcc1.tar.xz | |
Added rtc_read_multiple()
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2862 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/drivers/rtc.c | 34 | ||||
| -rw-r--r-- | firmware/drivers/rtc.h | 1 |
2 files changed, 34 insertions, 1 deletions
diff --git a/firmware/drivers/rtc.c b/firmware/drivers/rtc.c index c8e19aa..d052247 100644 --- a/firmware/drivers/rtc.c +++ b/firmware/drivers/rtc.c @@ -65,7 +65,6 @@ int rtc_write(unsigned char address, unsigned char value) return ret; } - int rtc_read(unsigned char address) { int value = -1; @@ -92,4 +91,37 @@ int rtc_read(unsigned char address) return value; } +int rtc_read_multiple(unsigned char address, unsigned char *buf, int numbytes) +{ + int ret = 0; + unsigned char obuf[1]; + int i; + + i2c_begin(); + + obuf[0] = address; + + /* send read command */ + if (i2c_write(RTC_DEV_READ, obuf, 1) >= 0) + { + i2c_start(); + i2c_outb(RTC_DEV_READ); + if (i2c_getack()) + { + for(i = 0;i < numbytes-1;i++) + buf[i] = i2c_inb(0); + + buf[i] = i2c_inb(1); + } + else + { + ret = -1; + } + } + + i2c_stop(); + + i2c_end(); + return ret; +} #endif diff --git a/firmware/drivers/rtc.h b/firmware/drivers/rtc.h index 695683e..7b101ee 100644 --- a/firmware/drivers/rtc.h +++ b/firmware/drivers/rtc.h @@ -22,6 +22,7 @@ #ifdef HAVE_RTC void rtc_init(void); int rtc_read(unsigned char address); +int rtc_read_multiple(unsigned char address, unsigned char *buf, int numbytes); int rtc_write(unsigned char address, unsigned char value); #endif |