pinmap: new way of defining board io.
authorThomas Ingleby <thomas.c.ingleby@intel.com>
Mon, 5 May 2014 19:00:20 +0000 (20:00 +0100)
committerThomas Ingleby <thomas.c.ingleby@intel.com>
Mon, 5 May 2014 19:13:03 +0000 (20:13 +0100)
* Intel Galileo Rev D pinmap updated to use new format

Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
api/maa.h
src/intel_galileo_rev_d.c

index b6f89b7..ecadb51 100644 (file)
--- a/api/maa.h
+++ b/api/maa.h
@@ -1,6 +1,6 @@
 /*
- * Author: Brendan Le Foll
- *
+ * Author: Brendan Le Foll <brendan.le.foll@intel.com>
+ * Author: Thomas Ingleby <thomas.c.ingleby@intel.com>
  * 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;
index 215bafe..2304da9 100644 (file)
@@ -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;
 }