cygnus: Implement I2C driver

BUG=chrome-os-partner:35810
BRANCH=purin
TEST=Enable I2C1, reset devboard codec, read a register.
     Here is the code that demonstrates how I2C works:

	i2c_init(1, 100*KHz);
	mdelay(50);

	int rc = i2c_writeb(1, 0x18, 1, 0x80); // reset codec
	printk(BIOS_INFO, "I2C reset rc=%d\n", rc);
	mdelay(50);
	uint8_t data = 0;
	rc = i2c_readb(1, 0x18, 43, &data);
	printk(BIOS_INFO, "I2C read rc=%d data=%x\n", rc, data); // data == 0x80

Signed-off-by: Anatol Pomazau <anatol@google.com>
Reviewed-on: https://chrome-internal-review.googlesource.com/195706
Reviewed-by: Daisuke Nojiri <dnojiri@google.com>
Reviewed-by: Anatol Pomazau <anatol@google.com>
Commit-Queue: Anatol Pomazau <anatol@google.com>
Tested-by: Anatol Pomazau <anatol@google.com>
Change-Id: I178acef9de18fa854983294edcd2c05886795e2a
Reviewed-on: https://chromium-review.googlesource.com/263496
Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org>
Trybot-Ready: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
1 file changed