X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/blobdiff_plain/99e4226b74acd4286b735b5da275853701dcacf0..5bece6bf8c66ade0960290b6fe75623da7968e09:/bmc/i2c.c diff --git a/bmc/i2c.c b/bmc/i2c.c index 992d6ce..07d2e79 100644 --- a/bmc/i2c.c +++ b/bmc/i2c.c @@ -2,24 +2,145 @@ #include #include #include "i2c.h" +#include "bmc.h" +#include "config.h" +#include "ipmb.h" #define TWCR_ACK TWCR = (1< + * TWBR = (F_CPU/(2 * SCL)) - 8 + */ + TWBR = (F_CPU/(2*I2C_FREQ))-8; + TWAR = BMC_ADDR & 0xfe; + TWDR = 0x00; + TWCR &= ~((1<= sizeof(i2c_databuf)) { + TWCR_RESET; + i2c_pos = 0x00; + break; + } + i2c_databuf[i2c_pos] = TWDR; + i2c_pos++; + TWCR_ACK; + break; + + case TW_SR_STOP: +#ifdef DEBUG + printf("I2C: STOP received\n"); +#endif + i2c_len = i2c_pos; + i2c_pos = 0x00; + i2c_done = 0x01; + TWCR_RESET; + break; + + case TW_NO_INFO: +#ifdef DEBUG + printf("I2C: TW_NO_INFO received status 0x%2x\n", TW_STATUS); +#endif + TWCR |= (1<