From dd89adc47b75e3d0f237d07884e0c69faecc6d9c Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Mon, 5 May 2014 20:00:20 +0100 Subject: [PATCH] pinmap: new way of defining board io. * Intel Galileo Rev D pinmap updated to use new format Signed-off-by: Thomas Ingleby --- api/maa.h | 62 ++++++++-- src/intel_galileo_rev_d.c | 300 ++++++++++++++++++++++++++-------------------- 2 files changed, 221 insertions(+), 141 deletions(-) diff --git a/api/maa.h b/api/maa.h index b6f89b7..ecadb51 100644 --- a/api/maa.h +++ b/api/maa.h @@ -1,6 +1,6 @@ /* - * Author: Brendan Le Foll - * + * Author: Brendan Le Foll + * Author: Thomas Ingleby * Copyright © 2014 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -82,35 +82,75 @@ typedef struct { /*@{*/ unsigned int pin; /**< Raw GPIO pin id */ unsigned int value; /**< Raw GPIO value */ - /*@}*/ } maa_mux_t; /** + * A Strucutre representing a singular I/O pin. i.e GPIO/PWM + */ +typedef struct { + /*@{*/ + unsigned int pinmap; + unsigned int parent_id; + unsigned int mux_total; + maa_mux_t mux[6]; + /*@}*/ +} maa_pin_t; + +/** * A Structure representing a physical Pin. */ typedef struct { /*@{*/ char name[8]; /**< Pin's real world name */ - unsigned int pin; /**< Pin ID */ - int parent_id; /**< IO Parent ID*/ maa_pincapabilities_t capabilites; /**< Pin Capabiliites */ - maa_mux_t mux[4]; /**< Multiplexer array */ - unsigned int mux_total; /**< Total Multiplexors required */ + maa_pin_t gpio; /**< GPIO structure */ + maa_pin_t pwm; /**< PWM structure */ + maa_pin_t aio; /**< Anaglog Pin */ + maa_pin_t fast_gpio; /**< Fast GPIO */ + maa_pin_t i2c; /**< i2c bus/pin */ + maa_pin_t spi; /**< spi bus/pin */ /*@}*/ } maa_pininfo_t; /** + * A Structure representing the physical properties of a i2c bus. + */ +typedef struct { + /*@{*/ + unsigned int bus_id; /**< ID as exposed in the system */ + unsigned int scl; /**< i2c SCL */ + unsigned int sda; /**< i2c SDA */ + /*@}*/ +} maa_i2c_bus_t; + +/** + * A Structure representing the physical properties of a spi bus. + */ +typedef struct { + /*@{*/ + double bus_id; /**< The Bus ID as exposed to the system. */ + maa_boolean_t three_wire; /**< Is the bus only a three wire system */ + unsigned int sclk; /**< Serial Clock */ + unsigned int mosi; /**< Master Out, Slave In. */ + unsigned int miso; /**< Master In, Slave Out. */ + unsigned int cs; /**< Chip Select, used when the board is a spi slave */ + /*@}*/ +} maa_spi_bus_t; + +/** * A Structure representing a platform/board. */ typedef struct { /*@{*/ + unsigned int phy_pin_count; /**< The Total IO pins on board */ unsigned int gpio_count; /**< GPIO Count */ - unsigned int aio_count; /**< Analog In Count */ - unsigned int pwm_count; /**< PWM Count */ + unsigned int aio_count; /**< Analog side Count */ unsigned int i2c_bus_count; /**< Usable i2c Count */ - unsigned int i2c_bus[8]; /**< Array of i2c */ + maa_i2c_bus_t i2c_bus[6]; /**< Array of i2c */ + unsigned int def_i2c_bus; /**< Position in array of default i2c bus */ unsigned int spi_bus_count; /**< Usable spi Count */ - double spi_bus[8]; /**< Array of spi */ + maa_spi_bus_t spi_bus[6]; /**< Array of spi */ + unsigned int def_spi_bus; /**< Position in array of defult spi bus */ maa_pininfo_t* pins; /**< Pointer to pin array */ /*@}*/ } maa_board_t; diff --git a/src/intel_galileo_rev_d.c b/src/intel_galileo_rev_d.c index 215bafe..2304da9 100644 --- a/src/intel_galileo_rev_d.c +++ b/src/intel_galileo_rev_d.c @@ -34,193 +34,233 @@ maa_intel_galileo_rev_d() if(b == NULL) return NULL; + b->phy_pin_count = 20; b->gpio_count = 14; b->aio_count = 6; - b->pwm_count = 5; - - b->i2c_bus_count = 1; - b->i2c_bus[0] = 0; - - b->spi_bus_count = 1; - b->spi_bus[0] = 1.0; b->pins = (maa_pininfo_t*) malloc(sizeof(maa_pininfo_t)*25); - //GPIO + //GPIO IO0 - IO10 strncpy(b->pins[0].name, "IO0", 8); - b->pins[0].pin = 50; - b->pins[0].parent_id = 0; b->pins[0].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; - b->pins[0].mux_total = 1; - b->pins[0].mux[0].pin = 40; - b->pins[0].mux[0].value = 1; + b->pins[0].gpio.pinmap = 50; + b->pins[0].gpio.parent_id = 0; + b->pins[0].gpio.mux_total = 1; + b->pins[0].gpio.mux[0].pin = 40; + b->pins[0].gpio.mux[0].value = 1; strncpy(b->pins[1].name, "IO1", 8); - b->pins[1].pin = 51; - b->pins[1].parent_id = 0; b->pins[1].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; - b->pins[1].mux_total = 1; - b->pins[1].mux[0].pin = 41; - b->pins[1].mux[0].value = 1; + b->pins[1].gpio.pinmap = 51; + b->pins[1].gpio.mux_total = 1; + b->pins[1].gpio.mux[0].pin = 41; + b->pins[1].gpio.mux[0].value = 1; strncpy(b->pins[2].name, "IO2", 8); - b->pins[2].pin = 32; - b->pins[2].parent_id = 0; b->pins[2].capabilites = (maa_pincapabilities_t) {1,1,0,1,0,0,0}; - b->pins[2].mux_total = 1; - b->pins[2].mux[0].pin = 31; - b->pins[2].mux[0].value = 1; - + b->pins[2].gpio.pinmap = 32; + b->pins[2].gpio.mux_total = 1; + b->pins[2].gpio.mux[0].pin = 31; + b->pins[2].gpio.mux[0].value = 1; + strncpy(b->pins[3].name, "IO3", 8); - b->pins[3].pin = 18; - b->pins[3].parent_id = 0; b->pins[3].capabilites = (maa_pincapabilities_t) {1,1,1,1,0,0,0}; - b->pins[3].mux_total = 1; - b->pins[3].mux[0].pin = 30; - b->pins[3].mux[0].value = 1; - + b->pins[3].gpio.pinmap = 18; + b->pins[3].gpio.mux_total = 1; + b->pins[3].gpio.mux[0].pin = 30; + b->pins[3].gpio.mux[0].value = 1; + b->pins[3].fast_gpio.pinmap = 15; + b->pins[3].fast_gpio.mux_total = 1; + b->pins[3].fast_gpio.mux[0].pin = 30; + b->pins[3].fast_gpio.mux[0].value = 0; + strncpy(b->pins[4].name, "IO4", 8); - b->pins[4].pin = 28; - b->pins[4].parent_id = 0; b->pins[4].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; - b->pins[4].mux_total = 0; + b->pins[4].gpio.pinmap = 28; + b->pins[4].gpio.mux_total = 0; strncpy(b->pins[5].name, "IO5", 8); - b->pins[5].pin = 17; - b->pins[5].parent_id = 0; b->pins[5].capabilites = (maa_pincapabilities_t) {1,1,1,0,0,0,0}; - b->pins[5].mux_total = 0; - + b->pins[5].gpio.pinmap = 17; + b->pins[5].gpio.mux_total = 0; + b->pins[5].pwm.pinmap = 5; + b->pins[5].pwm.parent_id = 0; + b->pins[5].pwm.mux_total = 0; + strncpy(b->pins[6].name, "IO6", 8); - b->pins[6].pin = 24; - b->pins[6].parent_id = 0; + b->pins[6].gpio.pinmap = 24; b->pins[6].capabilites = (maa_pincapabilities_t) {1,1,1,0,0,0,0}; - b->pins[6].mux_total = 0; + b->pins[6].gpio.mux_total = 0; + b->pins[6].pwm.pinmap = 6; + b->pins[6].pwm.parent_id = 0; + b->pins[6].pwm.mux_total = 0; strncpy(b->pins[7].name, "IO7", 8); - b->pins[7].pin = 27; - b->pins[7].parent_id = 0; b->pins[7].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; - b->pins[7].mux_total = 0; + b->pins[7].gpio.pinmap = 27; + b->pins[7].gpio.mux_total = 0; strncpy(b->pins[8].name, "IO8", 8); - b->pins[8].pin = 26; - b->pins[8].parent_id = 0; b->pins[8].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; - b->pins[8].mux_total = 0; + b->pins[8].gpio.pinmap = 26; + b->pins[8].gpio.mux_total = 0; strncpy(b->pins[9].name, "IO9", 8); - b->pins[9].pin = 19; - b->pins[9].parent_id = 0; b->pins[9].capabilites = (maa_pincapabilities_t) {1,1,1,0,0,0,0}; - b->pins[9].mux_total = 0; + b->pins[9].gpio.pinmap = 19; + b->pins[9].gpio.mux_total = 0; + strncpy(b->pins[10].name, "IO10", 8); - b->pins[10].pin = 16; - b->pins[10].parent_id = 0; b->pins[10].capabilites = (maa_pincapabilities_t) {1,1,1,0,1,0,0}; - b->pins[10].mux_total = 1; - b->pins[10].mux[0].pin = 42; - b->pins[10].mux[0].value = 1; + b->pins[10].gpio.pinmap = 16; + b->pins[10].gpio.mux_total = 1; + b->pins[10].gpio.mux[0].pin = 42; + b->pins[10].gpio.mux[0].value = 1; + b->pins[10].pwm.pinmap = 7; + b->pins[10].pwm.parent_id = 0; + b->pins[10].pwm.mux_total = 1; + b->pins[10].pwm.mux[0].pin = 42; + b->pins[10].pwm.mux[0].value = 1; + b->pins[10].spi.pinmap = 1; + b->pins[10].spi.mux_total = 1; + b->pins[10].spi.mux[0].pin = 42; + b->pins[10].spi.mux[0].value = 0; strncpy(b->pins[11].name, "IO11", 8); - b->pins[11].pin = 25; - b->pins[11].parent_id = 0; b->pins[11].capabilites = (maa_pincapabilities_t) {1,1,1,0,1,0,0}; - b->pins[11].mux_total = 1; - b->pins[11].mux[0].pin = 43; - b->pins[11].mux[0].value = 1; + b->pins[11].gpio.pinmap = 25; + b->pins[11].gpio.mux_total = 1; + b->pins[11].gpio.mux[0].pin = 43; + b->pins[11].gpio.mux[0].value = 1; + b->pins[11].pwm.pinmap = 4; + b->pins[11].pwm.parent_id = 0; + b->pins[11].pwm.mux_total = 1; + b->pins[11].pwm.mux[0].pin = 43; + b->pins[11].gpio.mux[0].value = 1; + b->pins[11].spi.pinmap = 1; + b->pins[11].spi.mux_total = 1; + b->pins[11].spi.mux[0].pin = 43; + b->pins[11].spi.mux[0].value = 0; strncpy(b->pins[12].name, "IO12", 8); - b->pins[12].pin = 38; - b->pins[12].parent_id = 0; - b->pins[12].capabilites = (maa_pincapabilities_t) {1,1,1,0,1,0,0}; - b->pins[12].mux_total = 1; - b->pins[12].mux[0].pin = 54; - b->pins[12].mux[0].value = 1; + b->pins[12].capabilites = (maa_pincapabilities_t) {1,1,0,0,1,0,0}; + b->pins[12].gpio.pinmap = 38; + b->pins[12].gpio.mux_total = 1; + b->pins[12].gpio.mux[0].pin = 54; + b->pins[12].gpio.mux[0].value = 1; + b->pins[12].spi.pinmap = 1; + b->pins[12].spi.mux_total = 1; + b->pins[12].spi.mux[0].pin = 54; + b->pins[12].spi.mux[0].value = 0; strncpy(b->pins[13].name, "IO13", 8); - b->pins[13].pin = 39; - b->pins[13].parent_id = 0; - b->pins[13].capabilites = (maa_pincapabilities_t) {1,1,1,0,1,0,0}; - b->pins[13].mux_total = 1; - b->pins[13].mux[0].pin = 55; - b->pins[13].mux[0].value = 1; - - //Analog in mapping and mux. + b->pins[13].capabilites = (maa_pincapabilities_t) {1,1,0,0,1,0,0}; + b->pins[13].gpio.pinmap = 39; + b->pins[13].gpio.mux_total = 1; + b->pins[13].gpio.mux[0].pin = 55; + b->pins[13].gpio.mux[0].value = 1; + b->pins[13].spi.pinmap = 1; + b->pins[13].spi.mux_total = 1; + b->pins[13].spi.mux[0].pin = 55; + b->pins[13].spi.mux[0].value = 0; + strncpy(b->pins[14].name, "A0", 8); - b->pins[14].pin = 0; - b->pins[14].parent_id = 0; b->pins[14].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,1}; - b->pins[14].mux_total = 1; - b->pins[14].mux[0].pin = 37; - b->pins[14].mux[0].value = 0; + b->pins[14].gpio.pinmap = 44; + b->pins[14].gpio.mux_total = 1; + b->pins[14].gpio.mux[0].pin = 37; + b->pins[14].gpio.mux[0].value = 1; + b->pins[14].aio.pinmap = 0; + b->pins[14].aio.mux_total = 1; + b->pins[14].aio.mux[0].pin = 37; + b->pins[14].aio.mux[0].value = 0; strncpy(b->pins[15].name, "A1", 8); - b->pins[15].pin = 1; - b->pins[15].parent_id = 0; b->pins[15].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,1}; - b->pins[15].mux_total = 1; - b->pins[15].mux[0].pin = 36; - b->pins[15].mux[0].value = 0; + b->pins[15].gpio.pinmap = 45; + b->pins[15].gpio.mux_total = 1; + b->pins[15].gpio.mux[0].pin = 36; + b->pins[15].gpio.mux[0].value = 1; + b->pins[15].aio.pinmap = 1; + b->pins[15].aio.mux_total = 1; + b->pins[15].aio.mux[0].pin = 36; + b->pins[15].aio.mux[0].value = 0; strncpy(b->pins[16].name, "A2", 8); - b->pins[16].pin = 2; - b->pins[16].parent_id = 0; b->pins[16].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,1}; - b->pins[16].mux_total = 1; - b->pins[16].mux[0].pin = 23; - b->pins[16].mux[0].value = 0; + b->pins[16].gpio.pinmap = 46; + b->pins[16].gpio.mux_total = 1; + b->pins[16].gpio.mux[0].pin = 23; + b->pins[16].gpio.mux[0].value = 1; + b->pins[16].aio.pinmap = 2; + b->pins[16].aio.mux_total = 1; + b->pins[16].aio.mux[0].pin = 23; + b->pins[16].aio.mux[0].value = 0; strncpy(b->pins[17].name, "A3", 8); - b->pins[17].pin = 3; - b->pins[17].parent_id = 0; b->pins[17].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,1}; - b->pins[17].mux_total = 1; - b->pins[17].mux[0].pin = 22; - b->pins[17].mux[0].value = 0; + b->pins[17].gpio.pinmap = 47; + b->pins[17].gpio.mux_total = 1; + b->pins[17].gpio.mux[0].pin = 22; + b->pins[17].gpio.mux[0].value = 1; + b->pins[17].aio.pinmap = 3; + b->pins[17].aio.mux_total = 1; + b->pins[17].aio.mux[0].pin = 22; + b->pins[17].aio.mux[0].value = 0; strncpy(b->pins[18].name, "A4", 8); - b->pins[18].pin = 4; - b->pins[18].parent_id = 0; - b->pins[18].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; - b->pins[18].mux_total = 2; - b->pins[18].mux[0].pin = 29; - b->pins[18].mux[0].value = 1; - b->pins[18].mux[1].pin = 21; - b->pins[18].mux[1].value = 0; + b->pins[18].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; + b->pins[18].gpio.pinmap = 48; + b->pins[18].gpio.mux_total = 2; + b->pins[18].gpio.mux[0].pin = 29; + b->pins[18].gpio.mux[0].value = 1; + b->pins[18].gpio.mux[1].pin = 21; + b->pins[18].gpio.mux[1].value = 1; + b->pins[18].i2c.pinmap = 1; + b->pins[18].i2c.mux_total = 1; + b->pins[18].i2c.mux[0].pin = 29; + b->pins[18].i2c.mux[0].value = 0; + b->pins[18].aio.pinmap = 4; + b->pins[18].aio.mux_total = 2; + b->pins[18].aio.mux[0].pin = 29; + b->pins[18].aio.mux[0].value = 1; + b->pins[18].aio.mux[1].pin = 21; + b->pins[18].aio.mux[1].value = 0; strncpy(b->pins[19].name, "A5", 8); - b->pins[19].pin = 5; - b->pins[19].parent_id = 0; b->pins[19].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; - b->pins[19].mux_total = 2; - b->pins[19].mux[0].pin = 29; - b->pins[19].mux[0].value = 1; - b->pins[19].mux[1].pin = 20; - b->pins[19].mux[1].value = 0; - - strncpy(b->pins[20].name, "I2C", 8); - b->pins[20].pin = 0; - b->pins[20].parent_id = 0; - b->pins[20].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; - b->pins[20].mux_total = 1; - b->pins[20].mux[0].pin = 29; - b->pins[20].mux[0].value = 0; - - strncpy(b->pins[21].name, "SPI-1.0", 8); - b->pins[21].pin = 1; - b->pins[21].parent_id = 0; - b->pins[21].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; - b->pins[21].mux_total = 4; - b->pins[21].mux[0].pin = 42; - b->pins[21].mux[0].value = 0; - b->pins[21].mux[1].pin = 43; - b->pins[21].mux[1].value = 0; - b->pins[21].mux[2].pin = 54; - b->pins[21].mux[2].value = 0; - b->pins[21].mux[3].pin = 55; - b->pins[21].mux[3].value = 0; + b->pins[19].gpio.pinmap = 49; + b->pins[19].gpio.mux_total = 2; + b->pins[19].gpio.mux[0].pin = 29; + b->pins[19].gpio.mux[0].value = 1; + b->pins[19].gpio.mux[1].pin = 20; + b->pins[19].gpio.mux[1].value = 1; + b->pins[19].i2c.pinmap = 1; + b->pins[19].i2c.mux_total = 1; + b->pins[19].i2c.mux[0].pin = 29; + b->pins[19].i2c.mux[0].value = 0; + b->pins[19].aio.pinmap = 5; + b->pins[19].aio.mux_total = 2; + b->pins[19].aio.mux[0].pin = 29; + b->pins[19].aio.mux[0].value = 1; + b->pins[19].aio.mux[1].pin = 20; + b->pins[19].aio.mux[1].value = 0; + + //BUS DEFINITIONS + b->i2c_bus_count = 1; + b->def_i2c_bus = 0; + b->i2c_bus[0].bus_id = 1; + b->i2c_bus[0].sda = 17; + b->i2c_bus[0].scl = 18; + + b->spi_bus_count = 1; + b->def_spi_bus = 0; + b->spi_bus[0].bus_id = 1; + b->spi_bus[0].cs = 10; + b->spi_bus[0].mosi = 11; + b->spi_bus[0].miso = 12; + b->spi_bus[0].sclk = 13; return b; } -- 2.7.4