aboutsummaryrefslogtreecommitdiffstats
path: root/sysmoOCTSIM/octsim_i2c.c
blob: 5b8a30abd593b58c2d373e789ca59981f57d8990 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "atmel_start_pins.h"
#include "i2c_bitbang.h"

/* FIXME: This somehow ends up with measured 125 kHz SCL speed ?!?  We should probably
 * switch away from using delay_us() and instead use some hardware timer? */
#define I2C_DELAY_US	1

#ifndef SDA1
/* We should define those pins in Atmel START. Until they are, define them here */
#define SDA1 GPIO(GPIO_PORTB, 15)
#define SCL1 GPIO(GPIO_PORTB, 14)
#define SDA2 GPIO(GPIO_PORTB, 3)
#define SCL2 GPIO(GPIO_PORTB, 2)
#define SDA3 GPIO(GPIO_PORTB, 7)
#define SCL3 GPIO(GPIO_PORTB, 6)
#define SDA4 GPIO(GPIO_PORTC, 28)
#define SCL4 GPIO(GPIO_PORTC, 27)
#endif

/* Unfortunately the schematics count I2C busses from '1', not from '0' :(
 * In software, we [obviously] count from '0' upwards. */
const struct i2c_adapter i2c[4] = {
	[0] = {
		.pin_sda = SDA1,
		.pin_scl = SCL1,
		.udelay = I2C_DELAY_US,
	},
	[1] = {
		.pin_sda = SDA2,
		.pin_scl = SCL2,
		.udelay = I2C_DELAY_US,
	},
	[2] = {
		.pin_sda = SDA3,
		.pin_scl = SCL3,
		.udelay = I2C_DELAY_US,
	},
	[3] = {
		.pin_sda = SDA4,
		.pin_scl = SCL4,
		.udelay = I2C_DELAY_US,
	}
};