Ejemplo n.º 1
0
int fd_eeprom_write(struct fd_dev *fd, int i2c_addr, uint32_t offset,
		 void *buf, size_t size)
{
	int i, busy;
	uint8_t *buf8 = buf;

	for(i = 0; i < size; i++) {
		mi2c_start(fd);

		if(mi2c_put_byte(fd, i2c_addr << 1) < 0) {
			mi2c_stop(fd);
			return -1;
		}
		mi2c_put_byte(fd, (offset >> 8) & 0xff);
		mi2c_put_byte(fd, offset & 0xff);
		mi2c_put_byte(fd, *buf8++);
		offset++;
		mi2c_stop(fd);

		do { /* wait until the chip becomes ready */
			mi2c_start(fd);
			busy = mi2c_put_byte(fd, i2c_addr << 1);
			mi2c_stop(fd);
		} while(busy);
	}
	return size;
}
Ejemplo n.º 2
0
/* FIXME: this is very inefficient: read several bytes in a row instead */
int fd_eeprom_read(struct fd_dev *fd, int i2c_addr, uint32_t offset,
		void *buf, size_t size)
{
	int i;
	uint8_t *buf8 = buf;
	unsigned char c;

	for(i = 0; i < size; i++) {
		mi2c_start(fd);
		if(mi2c_put_byte(fd, i2c_addr << 1) < 0) {
			mi2c_stop(fd);
			return -EIO;
		}

		mi2c_put_byte(fd, (offset >> 8) & 0xff);
		mi2c_put_byte(fd, offset & 0xff);
		offset++;
		mi2c_stop(fd);
		mi2c_start(fd);
		mi2c_put_byte(fd, (i2c_addr << 1) | 1);
		mi2c_get_byte(fd, &c, 0);
		*buf8++ = c;
		mi2c_stop(fd);
	}
	return size;
}
Ejemplo n.º 3
0
int spec_eeprom_write(struct fmc_device *fmc, int i2c_addr, uint32_t offset,
		 const void *buf, size_t size)
{
	int i, busy;
	const uint8_t *buf8 = buf;

	for(i = 0; i < size; i++) {
		mi2c_start((fmc));

		if(mi2c_put_byte(fmc, i2c_addr << 1) < 0) {
			mi2c_stop(fmc);
			return -1;
		}
		mi2c_put_byte(fmc, (offset >> 8) & 0xff);
		mi2c_put_byte(fmc, offset & 0xff);
		mi2c_put_byte(fmc, *buf8++);
		offset++;
		mi2c_stop(fmc);

		do { /* wait until the chip becomes ready */
			mi2c_start(fmc);
			busy = mi2c_put_byte(fmc, i2c_addr << 1);
			mi2c_stop(fmc);
		} while(busy);
	}
	return size;
}
Ejemplo n.º 4
0
int mi2c_scan(struct fmc_device *fmc)
{
	int i, found = 0;
	for(i = 0; i < 256; i += 2) {
		mi2c_start(fmc);
		if(!mi2c_put_byte(fmc, i))
			found++;
		mi2c_stop(fmc);
	}
	return found;
}
Ejemplo n.º 5
0
void mi2c_scan(struct fd_dev *fd)
{
	int i;
	for(i = 0; i < 256; i += 2) {
		mi2c_start(fd);
		if(!mi2c_put_byte(fd, i))
			dev_info(&fd->fmc->dev,
				 "%s: Found i2c device at 0x%x\n",
			         KBUILD_MODNAME, i >> 1);
		mi2c_stop(fd);
	}
}