From dd89adc47b75e3d0f237d07884e0c69faecc6d9c Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Mon, 5 May 2014 20:00:20 +0100 Subject: [PATCH 1/3] 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 | 294 ++++++++++++++++++++++---------------- 2 files changed, 218 insertions(+), 138 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; + 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; - //Analog in mapping and mux. 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; + 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; - 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; + //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; - 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->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; } From ef4bdeebaa6cb809512a2bdeea91926169fddfea Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Mon, 5 May 2014 20:13:58 +0100 Subject: [PATCH 2/3] maa: Update functions within maa to use new api. * Use new board definitions. Signed-off-by: Thomas Ingleby --- src/intel_galileo_rev_d.c | 13 ++++++------ src/maa.c | 43 +++++++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/intel_galileo_rev_d.c b/src/intel_galileo_rev_d.c index 2304da9..03ec721 100644 --- a/src/intel_galileo_rev_d.c +++ b/src/intel_galileo_rev_d.c @@ -62,7 +62,7 @@ maa_intel_galileo_rev_d() 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].capabilites = (maa_pincapabilities_t) {1,1,1,1,0,0,0}; b->pins[3].gpio.pinmap = 18; @@ -73,7 +73,7 @@ maa_intel_galileo_rev_d() 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].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,0,0}; b->pins[4].gpio.pinmap = 28; @@ -86,7 +86,7 @@ maa_intel_galileo_rev_d() 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].gpio.pinmap = 24; b->pins[6].capabilites = (maa_pincapabilities_t) {1,1,1,0,0,0,0}; @@ -109,7 +109,6 @@ maa_intel_galileo_rev_d() b->pins[9].capabilites = (maa_pincapabilities_t) {1,1,1,0,0,0,0}; b->pins[9].gpio.pinmap = 19; b->pins[9].gpio.mux_total = 0; - strncpy(b->pins[10].name, "IO10", 8); b->pins[10].capabilites = (maa_pincapabilities_t) {1,1,1,0,1,0,0}; @@ -210,13 +209,13 @@ maa_intel_galileo_rev_d() b->pins[17].aio.mux[0].value = 0; strncpy(b->pins[18].name, "A4", 8); - b->pins[18].capabilites = (maa_pincapabilities_t) {1,1,0,0,0,1,1}; + 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].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; @@ -235,7 +234,7 @@ maa_intel_galileo_rev_d() 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].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; diff --git a/src/maa.c b/src/maa.c index 97f7619..971c239 100644 --- a/src/maa.c +++ b/src/maa.c @@ -50,7 +50,7 @@ maa_init() } static maa_result_t -maa_setup_mux_mapped(maa_pininfo_t meta) +maa_setup_mux_mapped(maa_pin_t meta) { int mi; for (mi = 0; mi < meta.mux_total; mi++) { @@ -72,12 +72,16 @@ maa_check_gpio(int pin) if (plat == NULL) return -1; - if (pin < 0 || pin > plat->gpio_count) + if (pin < 0 || pin > plat->phy_pin_count) return -1; - if (plat->pins[pin].mux_total > 0) - if (maa_setup_mux_mapped(plat->pins[pin]) != MAA_SUCCESS) + + if(plat->pins[pin].capabilites.gpio != 1) + return -1; + + if (plat->pins[pin].gpio.mux_total > 0) + if (maa_setup_mux_mapped(plat->pins[pin].gpio) != MAA_SUCCESS) return -1; - return plat->pins[pin].pin; + return plat->pins[pin].gpio.pinmap; } unsigned int @@ -91,15 +95,18 @@ maa_check_aio(int aio) int pin = aio + plat->gpio_count; - if (plat->pins[pin].mux_total > 0) - if (maa_setup_mux_mapped(plat->pins[pin]) != MAA_SUCCESS) - return -2; + if(plat->pins[pin].capabilites.aio != 1) + return -1; + + if (plat->pins[pin].aio.mux_total > 0) + if (maa_setup_mux_mapped(plat->pins[pin].aio) != MAA_SUCCESS) + return -1; + return plat->pins[pin].aio.pinmap; - return plat->pins[pin].pin; } unsigned int -maa_check_i2c(int bus) +maa_check_i2c(int bus_s) { if (plat == NULL) return -3; @@ -108,11 +115,17 @@ maa_check_i2c(int bus) fprintf(stderr, "No i2c buses defined in platform"); return -1; } - int pin = (plat->gpio_count + plat->aio_count) + bus; + int bus = 0; - if (plat->pins[pin].mux_total > 0) - if (maa_setup_mux_mapped(plat->pins[pin]) != MAA_SUCCESS) - return -2; + int pos = plat->i2c_bus[bus].sda; + if (plat->pins[pos].i2c.mux_total > 0) + if (maa_setup_mux_mapped(plat->pins[pos].i2c) != MAA_SUCCESS) + return -2; - return plat->pins[pin].pin; + pos = plat->i2c_bus[bus].scl; + if (plat->pins[pos].i2c.mux_total > 0) + if (maa_setup_mux_mapped(plat->pins[pos].i2c) != MAA_SUCCESS) + return -2; + + return plat->i2c_bus[bus].bus_id; } From d99a0d855a8a21ba2d9e393112e8197b005b00f1 Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Tue, 6 May 2014 09:18:35 +0100 Subject: [PATCH 3/3] intel_galileo_rev_d: Wrong I2C bus definition. Signed-off-by: Thomas Ingleby --- src/intel_galileo_rev_d.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/intel_galileo_rev_d.c b/src/intel_galileo_rev_d.c index 03ec721..316c33f 100644 --- a/src/intel_galileo_rev_d.c +++ b/src/intel_galileo_rev_d.c @@ -181,7 +181,7 @@ maa_intel_galileo_rev_d() 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.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; @@ -249,7 +249,7 @@ maa_intel_galileo_rev_d() //BUS DEFINITIONS b->i2c_bus_count = 1; b->def_i2c_bus = 0; - b->i2c_bus[0].bus_id = 1; + b->i2c_bus[0].bus_id = 0; b->i2c_bus[0].sda = 17; b->i2c_bus[0].scl = 18;