Skip to content

Commit eb609f8

Browse files
committed
ODROID C1: Enable I2C pins when the I2C module isn't loaded
Change-Id: I1b581fc1335b59bcb8565d96490d9c6fccada9ae
1 parent efb5151 commit eb609f8

File tree

2 files changed

+43
-11
lines changed

2 files changed

+43
-11
lines changed

wiringPi/odroidc1.c

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ static const int pinToGpio[64] = {
3030
116, 115, // 2 | 3 : GPIOX.19, GPIOX.18
3131
104, 102, // 4 | 5 : GPIOX.7, GPIOX.5
3232
103, 83, // 6 | 7 : GPIOX.6, GPIOY.3
33-
-1, -1, // 8 | 9 : GPIODV.24(I2CA_SDA), GPIODV.25(I2CA_SCL)
33+
74, 75, // 8 | 9 : GPIODV.24(I2CA_SDA), GPIODV.25(I2CA_SCL)
3434
117, 118, // 10 | 11 : GPIOX.20(SPI_CE0), GPIOX.21(SPI_CE1)
3535
107, 106, // 12 | 13 : GPIOX.10(SPI_MOSI), GPIOX.9(SPI_MISO)
3636
105, -1, // 14 | 15 : GPIOX.8(SPI_SCLK), GPIOX.16(UART_TX_B)
@@ -52,8 +52,8 @@ static const int phyToGpio[64] = {
5252
// physical header pin number to native gpio number
5353
-1, // 0
5454
-1, -1, // 1 | 2 : 3.3V, 5.0V
55-
-1, -1, // 3 | 4 : GPIODV.24(I2CA_SDA), 5.0V
56-
-1, -1, // 5 | 6 : GPIODV.25(I2CA_SCL), GND
55+
74, -1, // 3 | 4 : GPIODV.24(I2CA_SDA), 5.0V
56+
75, -1, // 5 | 6 : GPIODV.25(I2CA_SCL), GND
5757
83, -1, // 7 | 8 : GPIOY.3, GPIOX.16(UART_TX_B)
5858
-1, -1, // 9 | 10 : GND, GPIOX.17(UART_RX_B)
5959
88, 87, // 11 | 12 : GPIOY.8, GPIOY.7
@@ -135,6 +135,8 @@ static int gpioToGPSETReg (int pin)
135135
return GPIOX_OUTP_REG_OFFSET;
136136
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
137137
return GPIOY_OUTP_REG_OFFSET;
138+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
139+
return GPIODV_OUTP_REG_OFFSET;
138140
return -1;
139141
}
140142

@@ -149,6 +151,8 @@ static int gpioToGPLEVReg (int pin)
149151
return GPIOX_INP_REG_OFFSET;
150152
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
151153
return GPIOY_INP_REG_OFFSET;
154+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
155+
return GPIODV_INP_REG_OFFSET;
152156
return -1;
153157
}
154158

@@ -163,6 +167,8 @@ static int gpioToPUENReg (int pin)
163167
return GPIOX_PUEN_REG_OFFSET;
164168
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
165169
return GPIOY_PUEN_REG_OFFSET;
170+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
171+
return GPIODV_PUEN_REG_OFFSET;
166172
return -1;
167173
}
168174

@@ -177,6 +183,8 @@ static int gpioToPUPDReg (int pin)
177183
return GPIOX_PUPD_REG_OFFSET;
178184
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
179185
return GPIOY_PUPD_REG_OFFSET;
186+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
187+
return GPIODV_PUPD_REG_OFFSET;
180188
return -1;
181189
}
182190

@@ -191,6 +199,8 @@ static int gpioToShiftReg (int pin)
191199
return pin - GPIOX_PIN_START;
192200
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
193201
return pin - GPIOY_PIN_START;
202+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
203+
return pin - GPIODV_PIN_START;
194204
return -1;
195205
}
196206

@@ -205,29 +215,42 @@ static int gpioToGPFSELReg (int pin)
205215
return GPIOX_FSEL_REG_OFFSET;
206216
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
207217
return GPIOY_FSEL_REG_OFFSET;
218+
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
219+
return GPIODV_FSEL_REG_OFFSET;
208220
return -1;
209221
}
210222
/*----------------------------------------------------------------------------*/
211223
static int getModeToGpio (int mode, int pin)
212224
{
225+
int retPin = -1;
226+
213227
switch (mode) {
214228
/* Native gpio number */
215229
case MODE_GPIO:
216-
return pin;
230+
retPin = pin;
231+
break;
217232
/* Native gpio number for sysfs */
218233
case MODE_GPIO_SYS:
219-
return lib->sysFds[pin] != -1 ? pin : -1;
234+
retPin = lib->sysFds[pin] != -1 ? pin : -1;
235+
break;
220236
/* wiringPi number */
221237
case MODE_PINS:
222-
return pin < 64 ? pinToGpio[pin] : -1;
238+
retPin = pin < 64 ? pinToGpio[pin] : -1;
239+
break;
223240
/* header pin number */
224241
case MODE_PHYS:
225-
return pin < 64 ? phyToGpio[pin] : -1;
226-
default :
242+
retPin = pin < 64 ? phyToGpio[pin] : -1;
227243
break;
244+
default :
245+
msg(MSG_WARN, "%s : Unknown Mode %d\n", __func__, mode);
246+
return -1;
228247
}
229-
msg(MSG_WARN, "%s : Unknown Mode %d\n", __func__, mode);
230-
return -1;
248+
249+
/* To check I2C module loaded */
250+
if (moduleLoaded(AML_MODULE_I2C) && (retPin == 74 || retPin == 75))
251+
return -1;
252+
else
253+
return retPin;
231254
}
232255

233256
/*----------------------------------------------------------------------------*/

wiringPi/odroidc1.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
#define ODROIDC_GPIO_MASK (0xFFFFFF80)
1313
#define ODROIDC1_GPIO_BASE 0xC1108000
1414

15-
#define GPIO_PIN_BASE 80
15+
#define GPIO_PIN_BASE 0
16+
17+
#define GPIODV_PIN_START 50
18+
#define GPIODV_PIN_END 79
1619
#define GPIOY_PIN_START 80
1720
#define GPIOY_PIN_END 96
1821
#define GPIOX_PIN_START 97
@@ -30,6 +33,12 @@
3033
#define GPIOY_PUPD_REG_OFFSET 0x3D
3134
#define GPIOY_PUEN_REG_OFFSET 0x4B
3235

36+
#define GPIODV_FSEL_REG_OFFSET 0x12
37+
#define GPIODV_OUTP_REG_OFFSET 0x13
38+
#define GPIODV_INP_REG_OFFSET 0x14
39+
#define GPIODV_PUPD_REG_OFFSET 0x3A
40+
#define GPIODV_PUEN_REG_OFFSET 0x48
41+
3342
#ifdef __cplusplus
3443
extern "C" {
3544
#endif

0 commit comments

Comments
 (0)