Private
Public Access
2
0

96boards: Use consistent pin numbering on 96boards platforms

Every 96Boards baseboard uses the same expansion connector, but the
current 96Boards initialization code assigns the SoC specific GPIO
numbers instead of being consistent across all boards. Change the code
to assign 96Boards GPIO-A through GPIO-L to MRAA GPIOs 23-34.

v2: Create info for all the LS connector pins, not just the GPIO pins.
    This gives us room to describe other pins in the future.

Signed-off-by: Grant Likely <grant.likely@linaro.org>
Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
This commit is contained in:
Grant Likely
2016-02-18 14:48:19 +00:00
committed by Brendan Le Foll
parent 2b73083955
commit 8e8ed7d52d
2 changed files with 55 additions and 15 deletions

View File

@@ -37,9 +37,7 @@ extern "C" {
#define MRAA_96BOARDS_LS_I2C_COUNT 2
#define MRAA_96BOARDS_LS_SPI_COUNT 1
#define MRAA_96BOARDS_LS_UART_COUNT 2
#define DB410C_PINCOUNT 122
#define HIKEY_PINCOUNT 512
#define MRAA_96BOARDS_LS_PIN_COUNT 40
mraa_board_t* mraa_96boards();

View File

@@ -26,6 +26,7 @@
*/
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <sys/mman.h>
#include <mraa/common.h>
@@ -50,12 +51,30 @@ int hikey_ls_gpio_pins[MRAA_96BOARDS_LS_GPIO_COUNT] = {
const char* hikey_serialdev[MRAA_96BOARDS_LS_UART_COUNT] = { "/dev/ttyAMA2", "/dev/ttyAMA3"};
void mraa_96boards_pininfo(mraa_board_t* board, int index, int sysfs_pin,
char *fmt, ...)
{
va_list arg_ptr;
if (index > board->phy_pin_count)
return;
mraa_pininfo_t* pininfo = &board->pins[index];
va_start(arg_ptr, fmt);
vsnprintf(pininfo->name, MRAA_PIN_NAME_SIZE, fmt, arg_ptr);
va_end(arg_ptr);
if (sysfs_pin >= 0)
pininfo->capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
else
pininfo->capabilites = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 };
pininfo->gpio.pinmap = sysfs_pin;
pininfo->gpio.mux_total = 0;
}
mraa_board_t* mraa_96boards()
{
int i, pin;
int *ls_gpio_pins;
int *ls_gpio_pins = NULL;
char ch;
char name[MRAA_PIN_NAME_SIZE];
mraa_board_t* b = (mraa_board_t*) calloc(1, sizeof(mraa_board_t));
if (b == NULL) {
@@ -64,18 +83,17 @@ mraa_board_t* mraa_96boards()
// pin mux for buses are setup by default by kernel so tell mraa to ignore them
b->no_bus_mux = 1;
b->phy_pin_count = MRAA_96BOARDS_LS_PIN_COUNT + 1;
if (mraa_file_exist(DT_BASE "/model")) {
// We are on a modern kernel, great!!!!
if (mraa_file_contains(DT_BASE "/model", "Qualcomm Technologies, Inc. APQ 8016 SBC")) {
b->platform_name = PLATFORM_NAME_DB410C;
b->phy_pin_count = DB410C_PINCOUNT;
ls_gpio_pins = db410c_ls_gpio_pins;
b->uart_dev[0].device_path = db410c_serialdev[0];
b->uart_dev[1].device_path = db410c_serialdev[1];
} else if (mraa_file_contains(DT_BASE "/model", "HiKey Development Board")) {
b->platform_name = PLATFORM_NAME_HIKEY;
b->phy_pin_count = HIKEY_PINCOUNT;
ls_gpio_pins = hikey_ls_gpio_pins;
b->uart_dev[0].device_path = hikey_serialdev[0];
b->uart_dev[1].device_path = hikey_serialdev[1];
@@ -110,17 +128,41 @@ mraa_board_t* mraa_96boards()
return NULL;
}
// gpio lable starts from GPIO-A to GPIO-F
ch = 'A';
mraa_96boards_pininfo(b, 0, -1, "INVALID");
mraa_96boards_pininfo(b, 1, -1, "GND");
mraa_96boards_pininfo(b, 2, -1, "GND");
mraa_96boards_pininfo(b, 3, -1, "UART0_CTS");
mraa_96boards_pininfo(b, 4, -1, "PWR_BTN_N");
mraa_96boards_pininfo(b, 5, -1, "UART0_TXD");
mraa_96boards_pininfo(b, 6, -1, "RST_BTN_N");
mraa_96boards_pininfo(b, 7, -1, "UART0_RXD");
mraa_96boards_pininfo(b, 8, -1, "SPI0_SCLK");
mraa_96boards_pininfo(b, 9, -1, "UART0_RTS");
mraa_96boards_pininfo(b, 10, -1, "SPI0_DIN");
mraa_96boards_pininfo(b, 11, -1, "UART1_TXD");
mraa_96boards_pininfo(b, 12, -1, "SPI0_CS");
mraa_96boards_pininfo(b, 13, -1, "UART1_RXD");
mraa_96boards_pininfo(b, 14, -1, "SPI0_DOUT");
mraa_96boards_pininfo(b, 15, -1, "I2C0_SCL");
mraa_96boards_pininfo(b, 16, -1, "PCM_FS");
mraa_96boards_pininfo(b, 17, -1, "I2C0_SDA");
mraa_96boards_pininfo(b, 18, -1, "PCM_CLK");
mraa_96boards_pininfo(b, 19, -1, "I2C1_SCL");
mraa_96boards_pininfo(b, 20, -1, "PCM_DO");
mraa_96boards_pininfo(b, 21, -1, "I2C1_SDA");
mraa_96boards_pininfo(b, 22, -1, "PCM_DI");
// GPIOs are labelled "GPIO-A" through "GPIO-L"
for (i = 0; i < MRAA_96BOARDS_LS_GPIO_COUNT; i++)
{
pin = ls_gpio_pins[i];
sprintf(name, "GPIO-%c", ch++);
strncpy(b->pins[pin].name, name, MRAA_PIN_NAME_SIZE);
b->pins[pin].capabilites = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[pin].gpio.pinmap = pin;
b->pins[pin].gpio.mux_total = 0;
mraa_96boards_pininfo(b, 23 + i, ls_gpio_pins ? ls_gpio_pins[i] : -1,
"GPIO-%c", 'A'+i);
}
mraa_96boards_pininfo(b, 35, -1, "1.8v");
mraa_96boards_pininfo(b, 36, -1, "SYS_DCIN");
mraa_96boards_pininfo(b, 37, -1, "5v");
mraa_96boards_pininfo(b, 38, -1, "SYS_DCIN");
mraa_96boards_pininfo(b, 39, -1, "GND");
mraa_96boards_pininfo(b, 40, -1, "GND");
b->gpio_count = MRAA_96BOARDS_LS_GPIO_COUNT;