#include #include #include #include #define DEVICE(x) ((x >> 16)&0x07) #define PAGE(x) (x >> 7) #define PAGEBASE(x) (x & 0xFF80) #define PAGEOFFSET(x) (x & 0x007F) int i2cee_load(int32_t base,void *p,int16_t len){ uint8_t *b = p; uint16_t ilen,slen; int r; int32_t offset = base; MUTEXED(&i2c.mutex); uint8_t off8[2]; slen = 0; while (len > 0){ if (!(i2cee.emask & (1< len) { ilen = len; }; off8[0] = (offset>>8) & 0xFF; off8[1] = (offset) & 0xFF; r = noassert( i2c_transfer( (0xA0 + (DEVICE(offset) << 1)), off8, 2 ) ); if (r != 2) return -EFAIL; r = noassert( i2c_transfer( (0xA0 + (DEVICE(offset) << 1)) | 1, b, ilen ) ); if (r != ilen){ return r; }; len -= ilen; b += ilen; offset += ilen; slen += ilen; }; return slen; };