text: /* pinmux_board_galileo.c - pin out mapping for the Galileo board */
  
  /*
   * Copyright (c) 2016 Intel Corporation
   *
   * SPDX-License-Identifier: Apache-2.0
   */
  
  #include <kernel.h>
  #include "board.h"
  #include <device.h>
  #include <init.h>
  
  #include <pinmux.h>
  #include <i2c.h>
  #include <gpio.h>
  #include <pwm.h>
  
  #include <pinmux/pinmux.h>
  
  #include "pinmux_galileo.h"
  
  /* max number of functions per pin */
  #define NUM_PIN_FUNCS		4
  
  enum gpio_chip {
  	NONE,
  	EXP0,
  	EXP1,
  	EXP2,
  	PWM0,
  	G_DW,
  	G_CW,
  	G_RW,
  };
  
  enum pin_level {
  	PIN_LOW = 0x00,
  	PIN_HIGH = 0x01,
  	DONT_CARE = 0xFF,
  };
  
  struct mux_pin {
  	enum gpio_chip	mux;
  	u8_t		pin;
  	enum pin_level	level;
  
  	/* Pin configuration (e.g. direction, pull up/down, etc.) */
  	u32_t	cfg;
  };
  
  /*
   * This structure provides the breakdown mapping for the pinmux to follow to
   * enable each functionality within the hardware.  There should be nothing to
   * edit here unless you absolutely know what you are doing
   */
  struct mux_path {
  	u8_t		io_pin;
  	u8_t		func;
  	struct mux_pin	path[5];
  };
  
  static struct mux_path _galileo_path[PINMUX_NUM_PINS * NUM_PIN_FUNCS] = {
  	{0, PINMUX_FUNC_A, {{ EXP1,  0,  PIN_HIGH, (GPIO_DIR_OUT) }, /* GPIO3 out */
  			    { EXP1,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{0, PINMUX_FUNC_B, {{ EXP1,  0,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO3 in */
  			    { EXP1,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  3,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{0, PINMUX_FUNC_C, {{ EXP1,  0,   PIN_HIGH, (GPIO_DIR_OUT) }, /* UART0_RXD */
  			    { EXP1,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{0, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{1, PINMUX_FUNC_A, {{ EXP1, 13,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO4 out */
  			    { EXP0, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0, 13,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  4,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{1, PINMUX_FUNC_B, {{ EXP1, 13,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO4 in */
  			    { EXP0, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0, 13,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  4,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{1, PINMUX_FUNC_C, {{ EXP1, 13,  PIN_HIGH, (GPIO_DIR_OUT) }, /* UART0_TXD */
  			    { EXP0, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0, 13,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{1, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{2, PINMUX_FUNC_A, {{ PWM0, 13,  PIN_HIGH, (GPIO_DIR_OUT) }, /* GPIO5 out */
  			    { EXP1,  2,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP1,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{2, PINMUX_FUNC_B, {{ PWM0, 13,  PIN_HIGH, (GPIO_DIR_OUT) }, /* GPIO5 in */
  			    { EXP1,  2,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP1,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  5,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{2, PINMUX_FUNC_C, {{ PWM0, 13,   PIN_LOW, (GPIO_DIR_OUT) }, /* UART1_RXD */
  			    { EXP1,  2,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP1,  3,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{2, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{3, PINMUX_FUNC_A, {{ PWM0,  0,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO6 out */
  			    { PWM0, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  0,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  6,   PIN_LOW, (GPIO_DIR_OUT) } } },
  	{3, PINMUX_FUNC_B, {{ PWM0,  0,   PIN_LOW, (GPIO_DIR_OUT) },  /* GPIO6 in */
  			    { PWM0, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  0,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_DW,  6,   PIN_LOW, (GPIO_DIR_IN)  } } },
  	{3, PINMUX_FUNC_C, {{ PWM0,  0,   PIN_LOW, (GPIO_DIR_OUT) },  /* UART1_TXD */
  			    { PWM0, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0,  0,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{3, PINMUX_FUNC_D, {{ PWM0,  0,  PIN_HIGH, (GPIO_DIR_OUT) },  /* PWM.LED1 */
  			    { PWM0, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  0,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{4, PINMUX_FUNC_A, {{ EXP1,  4,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS4 out */
  			    { EXP1,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  4,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{4, PINMUX_FUNC_B, {{ EXP1,  4,  PIN_HIGH, (GPIO_DIR_OUT) }, /* GPIO_SUS4 in */
  			    { EXP1,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  4,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{4, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{4, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{5, PINMUX_FUNC_A, {{ PWM0,  2,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO8 (out) */
  			    { EXP0,  2,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_CW,  0,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{5, PINMUX_FUNC_B, {{ PWM0,  2,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO8 (in) */
  			    { EXP0,  2,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_CW,  0,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{5, PINMUX_FUNC_C, {{ PWM0,  2,  PIN_HIGH, (GPIO_DIR_OUT) }, /* PWM.LED3 */
  			    { EXP0,  2,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{5, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{6, PINMUX_FUNC_A, {{ PWM0,  4,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO9 (out) */
  			    { EXP0,  4,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_CW,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{6, PINMUX_FUNC_B, {{ PWM0,  4,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO9 (in) */
  			    { EXP0,  4,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_CW,  1,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{6, PINMUX_FUNC_C, {{ PWM0,  4,  PIN_HIGH, (GPIO_DIR_OUT) }, /* PWM.LED5 */
  			    { EXP0,  4,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{6, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{7, PINMUX_FUNC_A, {{ EXP1,  6,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS0 (out) */
  			    { EXP1,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  0,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{7, PINMUX_FUNC_B, {{ EXP1,  6,   PIN_LOW, (GPIO_DIR_IN)  }, /* GPIO_SUS0 (in) */
  			    { EXP1,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  0,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{7, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{7, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{8, PINMUX_FUNC_A, {{ EXP1,  8,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS1 (out) */
  			    { EXP1,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{8, PINMUX_FUNC_B, {{ EXP1,  8,   PIN_LOW, (GPIO_DIR_IN)  }, /* GPIO_SUS1 (in) */
  			    { EXP1,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  1,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{8, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{8, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{9, PINMUX_FUNC_A, {{ PWM0,  6,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS2 (out) */
  			    { EXP0,  6,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  2,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{9, PINMUX_FUNC_B, {{ PWM0,  6,   PIN_LOW, (GPIO_DIR_OUT) },  /* GPIO_SUS2 (in) */
  			    { EXP0,  6,  PIN_HIGH, (GPIO_DIR_OUT) },
  			    { EXP0,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { G_RW,  2,   PIN_LOW, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{9, PINMUX_FUNC_C, {{ PWM0,  6,  PIN_HIGH, (GPIO_DIR_OUT) }, /* PWM.LED7 */
  			    { EXP0,  6,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { EXP0,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{9, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			    { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{10, PINMUX_FUNC_A, {{ PWM0, 10,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO2 (out) */
  			     { EXP0, 10,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_DW,  2,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{10, PINMUX_FUNC_B, {{ PWM0, 10,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO2 (in) */
  			     { EXP0, 10,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP0, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_DW,  2,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{10, PINMUX_FUNC_C, {{ PWM0, 10,  PIN_HIGH, (GPIO_DIR_OUT) }, /* PWM.LED11 */
  			     { EXP0, 10,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{10, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{11, PINMUX_FUNC_A, {{ EXP1, 12,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS3 (out) */
  			     { PWM0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_RW,  3,   PIN_LOW, (GPIO_DIR_OUT) } } },
  	{11, PINMUX_FUNC_B, {{ EXP1, 12,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS3 (in) */
  			     { PWM0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  8,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP0,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_RW,  3,   PIN_LOW, (GPIO_DIR_IN)  } } },
  	{11, PINMUX_FUNC_C, {{ EXP1, 12,   PIN_LOW, (GPIO_DIR_OUT) }, /* PWM.LED9 */
  			     { PWM0,  8,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{11, PINMUX_FUNC_D, {{ EXP1, 12,  PIN_HIGH, (GPIO_DIR_OUT) }, /* SPI1_MOSI */
  			     { PWM0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{12, PINMUX_FUNC_A, {{ EXP1, 10,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO7 (out) */
  			     { EXP1, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_DW,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{12, PINMUX_FUNC_B, {{ EXP1, 10,  PIN_HIGH, (GPIO_DIR_OUT) }, /* GPIO7 (in) */
  			     { EXP1, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_DW,  7,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{12, PINMUX_FUNC_C, {{ EXP1, 10,  PIN_HIGH, (GPIO_DIR_OUT) }, /* SPI1_MISO */
  			     { EXP1, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_DW,  7,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{12, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{13, PINMUX_FUNC_A, {{ EXP1, 14,   PIN_LOW, (GPIO_DIR_OUT) }, /* GPIO_SUS5 (out) */
  			     { EXP0, 14,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0, 15,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_RW,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{13, PINMUX_FUNC_B, {{ EXP1, 14,   PIN_LOW, (GPIO_DIR_OUT) },  /* GPIO_SUS5 (in) */
  			     { EXP0, 14,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP0, 15,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { G_RW,  5,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{13, PINMUX_FUNC_C, {{ EXP1, 14,  PIN_HIGH, (GPIO_DIR_OUT) }, /* SPI1_CLK */
  			     { EXP0, 14,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP0, 15,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{13, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{14, PINMUX_FUNC_A, {{ EXP2,  0,   PIN_LOW, (GPIO_DIR_OUT) }, /* EXP2.P0_0 (out)/ADC.IN0 */
  			     { EXP2,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{14, PINMUX_FUNC_B, {{ EXP2,  0,   PIN_LOW, (GPIO_DIR_IN)  }, /* EXP2.P0_0 (in)/ADC.IN0 */
  			     { EXP2,  1,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{14, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{14, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{15, PINMUX_FUNC_A, {{ EXP2,  2,   PIN_LOW, (GPIO_DIR_OUT) }, /* EXP2.P0_2 (out)/ADC.IN1 */
  			     { EXP2,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{15, PINMUX_FUNC_B, {{ EXP2,  2,   PIN_LOW, (GPIO_DIR_IN)  }, /* EXP2.P0_2 (in)/ADC.IN1 */
  			     { EXP2,  3,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{15, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{15, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{16, PINMUX_FUNC_A, {{ EXP2,  4,   PIN_LOW, (GPIO_DIR_OUT) }, /* EXP2.P0_4 (out)/ADC.IN2 */
  			     { EXP2,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{16, PINMUX_FUNC_B, {{ EXP2,  4,   PIN_LOW, (GPIO_DIR_IN)  }, /* EXP2.P0_4 (in)/ADC.IN2 */
  			     { EXP2,  5,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{16, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{16, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{17, PINMUX_FUNC_A, {{ EXP2,  6,   PIN_LOW, (GPIO_DIR_OUT) }, /* EXP2.P0_6 (out)/ADC.IN3 */
  			     { EXP2,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{17, PINMUX_FUNC_B, {{ EXP2,  6,   PIN_LOW, (GPIO_DIR_IN)  }, /* EXP2.P0_6 (in)/ADC.IN3 */
  			     { EXP2,  7,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{17, PINMUX_FUNC_C, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{17, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{18, PINMUX_FUNC_A, {{ PWM0, 14,  PIN_HIGH, (GPIO_DIR_OUT) }, /* EXP2.P1_0 (out) */
  			     { EXP2, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP2,  8,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP2,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{18, PINMUX_FUNC_B, {{ PWM0, 14,   PIN_LOW, (GPIO_DIR_OUT) }, /* ADC.IN4 (in) */
  			     { EXP2, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP2,  8,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { EXP2,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{18, PINMUX_FUNC_C, {{ PWM0, 14,  PIN_HIGH, (GPIO_DIR_OUT) }, /* I2C SDA */
  			     { EXP2,  9,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP2, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{18, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  
  	{19, PINMUX_FUNC_A, {{ PWM0, 15,  PIN_HIGH, (GPIO_DIR_OUT) }, /* EXP2.P1_2 (out)*/
  			     { EXP2, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP2, 10,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP2, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{19, PINMUX_FUNC_B, {{ PWM0, 15,   PIN_LOW, (GPIO_DIR_OUT) }, /* ADC.IN5 */
  			     { EXP2, 12,  PIN_HIGH, (GPIO_DIR_OUT) },
  			     { EXP2, 10,   PIN_LOW, (GPIO_DIR_IN)  },
  			     { EXP2, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{19, PINMUX_FUNC_C, {{ PWM0, 15,  PIN_HIGH, (GPIO_DIR_OUT) }, /* I2C SCL */
  			     { EXP2, 11,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { EXP2, 12,   PIN_LOW, (GPIO_DIR_OUT) },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  	{19, PINMUX_FUNC_D, {{ NONE,  0, DONT_CARE, (GPIO_DIR_IN)  }, /* NONE */
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  },
  			     { NONE,  0, DONT_CARE, (GPIO_DIR_IN)  } } },
  };
  
  int _galileo_pinmux_set_pin(struct device *port, u8_t pin, u32_t func)
  {
  	struct galileo_data * const drv_data = port->driver_data;
  
  	u8_t mux_index = 0;
  	u8_t i = 0;
  	struct mux_path *enable = NULL;
  	struct pin_config *mux_config = drv_data->mux_config;
  
  	if (pin > PINMUX_NUM_PINS) {
  		return -ENOTSUP;
  	}
  
  	mux_config[pin].mode = func;
  
  	/* NUM_PIN_FUNCS being the number of alt functions */
  	mux_index = NUM_PIN_FUNCS * pin;
  	/*
  	 * functions are in numeric order, we can just skip to the index
  	 * needed
  	 */
  	mux_index += func;
  
  	enable = &_galileo_path[mux_index];
  
  	for (i = 0; i < 5; i++) {
  		switch (enable->path[i].mux) {
  		case EXP0:
  			gpio_pin_write(drv_data->exp0,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->exp0,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  		case EXP1:
  			gpio_pin_write(drv_data->exp1,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->exp1,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  		case EXP2:
  			gpio_pin_write(drv_data->exp2,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->exp2,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  		case PWM0:
  			pwm_pin_set_cycles(drv_data->pwm0,
  					   enable->path[i].pin,
  					   100,
  					   enable->path[i].level ? 100 : 0);
  			break;
  		case G_DW:
  			gpio_pin_write(drv_data->gpio_dw,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->gpio_dw,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  		case G_CW:
  			gpio_pin_write(drv_data->gpio_core,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->gpio_core,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  		case G_RW:
  			gpio_pin_write(drv_data->gpio_resume,
  					   enable->path[i].pin,
  					   enable->path[i].level);
  			gpio_pin_configure(drv_data->gpio_resume,
  					   enable->path[i].pin,
  					   enable->path[i].cfg);
  			break;
  
  		case NONE:
  			/* no need to do anything */
  			break;
  		}
  	}
  
  	return 0;
  }
  
  int _galileo_pinmux_get_pin(struct device *port, u32_t pin, u32_t *func)
  {
  	struct galileo_data * const drv_data = port->driver_data;
  	struct pin_config *mux_config = drv_data->mux_config;
  
  	*func = mux_config[pin].mode;
  
  	return 0;
  }
  
  /* Alter this table to change the default pin settings on the Galileo Gen2
   * boards.  Specifically change the PINMUX_FUNC_* value to represent the
   * functionaltiy desired
   */
  static struct pin_config mux_config[PINMUX_NUM_PINS] = {
  	/* pin, selected mode    <mode A, mode B, mode C, mode D> */
  	/* Analog Inputs */
  	{ 0,  PINMUX_FUNC_C }, /* GPIO3 (out), GPIO3 (in), UART0_RXD, NA */
  	{ 1,  PINMUX_FUNC_C }, /* GPIO4 (out), GPIO4 (in), UART0_TXD, NA */
  	{ 2,  PINMUX_FUNC_C }, /* GPIO5 (out), GPIO5 (in), UART1_RXD, NA */
  	{ 3,  PINMUX_FUNC_C }, /* GPIO6 (out), GPIO6 (in), UART1_TXD, PWM.LED1 */
  	{ 4,  PINMUX_FUNC_B }, /* GPIO_SUS4 (out), GPIO_SUS4 (in), NA, NA */
  	{ 5,  PINMUX_FUNC_B }, /* GPIO8 (out), GPIO8 (in), PWM.LED3, NA */
  	{ 6,  PINMUX_FUNC_B }, /* GPIO9 (out), GPIO9 (in), PWM.LED5, NA */
  	{ 7,  PINMUX_FUNC_A }, /* EXP1.P0_6 (out), EXP1.P0_6 (in), NA, NA */
  	{ 8,  PINMUX_FUNC_A }, /* EXP1.P1_0 (out), EXP1.P1_0 (in), NA, NA */
  	{ 9,  PINMUX_FUNC_B }, /* GPIO_SUS2 (out), GPIO_SUS2 (in), PWM.LED7, NA */
  #if defined(CONFIG_SPI_1)
  	{ 10, PINMUX_FUNC_A }, /* GPIO2 (out), GPIO2 (in), PWM.LED11, NA */
  	{ 11, PINMUX_FUNC_D }, /* GPIO_SUS3 (out), GPIO_SUS3 (in), PWM.LED9, SPI1_MOSI */
  	{ 12, PINMUX_FUNC_C }, /* GPIO7 (out), GPIO7 (in), SPI1_MISO, NA */
  	{ 13, PINMUX_FUNC_C }, /* GPIO_SUS5 (out), GPIO_SUS5(in), SPI1_SCK, NA */
  #else
  	{ 10, PINMUX_FUNC_B }, /* GPIO2 (out), GPIO2 (in), PWM.LED11, NA */
  	{ 11, PINMUX_FUNC_B }, /* GPIO_SUS3 (out), GPIO_SUS3 (in), PWM.LED9, SPI1_MOSI */
  	{ 12, PINMUX_FUNC_B }, /* GPIO7 (out), GPIO7 (in), SPI1_MISO, NA */
  	{ 13, PINMUX_FUNC_B }, /* GPIO_SUS5 (out), GPIO_SUS5(in), SPI1_SCK, NA */
  #endif
  	{ 14, PINMUX_FUNC_B }, /* EXP2.P0_0 (out)/ADC.IN0, EXP2.P0_0 (in)/ADC.IN0, NA, NA */
  	{ 15, PINMUX_FUNC_B }, /* EXP2.P0_2 (out)/ADC.IN1, EXP2.P0_2 (in)/ADC.IN1, NA, NA */
  	{ 16, PINMUX_FUNC_B }, /* EXP2.P0_4 (out)/ADC.IN2, EXP2.P0_4 (in)/ADC.IN2, NA, NA */
  	{ 17, PINMUX_FUNC_B }, /* EXP2.P0_6 (out)/ADC.IN3, EXP2.P0_6 (in)/ADC.IN3, NA, NA */
  	{ 18, PINMUX_FUNC_C }, /* EXP2.P1_0 (out), ADC.IN4, I2C_SDA, NA */
  	{ 19, PINMUX_FUNC_C }, /* EXP2.P1_2 (out), ADC.IN5, I2C_SCL, NA */
  };
  
  static int pinmux_pullup(struct device *dev,
  				   u32_t pin,
  				   u8_t func)
  {
  	/*
  	 * Nothing to do.
  	 * On Galileo the pullup operation is handled through the selection
  	 * of an actual pin
  	 */
  	ARG_UNUSED(dev);
  	ARG_UNUSED(pin);
  	ARG_UNUSED(func);
  
  	return 0;
  }
  
  static int pinmux_input_enable(struct device *dev,
  					 u32_t pin,
  					 u8_t func)
  {
  	/*
  	 * Nothing to do.
  	 * On Galileo select a pin for input enabling is handled through the
  	 * selection of an actual pin user configuration.
  	 */
  	ARG_UNUSED(dev);
  	ARG_UNUSED(pin);
  	ARG_UNUSED(func);
  
  	return 0;
  }
  
  static int pinmux_set(struct device *dev,
  				u32_t pin,
  				u32_t func)
  {
  	if (pin > PINMUX_NUM_PINS) {
  		return -EINVAL;
  	}
  
  	return _galileo_pinmux_set_pin(dev, pin, func);
  }
  
  static int pinmux_get(struct device *dev,
  				u32_t pin,
  				u32_t *func)
  {
  	if (pin > PINMUX_NUM_PINS) {
  		return -EINVAL;
  	}
  
  	return _galileo_pinmux_get_pin(dev, pin, func);
  }
  
  static struct pinmux_driver_api api_funcs = {
  	.set = pinmux_set,
  	.get = pinmux_get,
  	.pullup = pinmux_pullup,
  	.input = pinmux_input_enable
  };
  
  struct galileo_data galileo_pinmux_driver = {
  	.exp0 = NULL,
  	.exp1 = NULL,
  	.exp2 = NULL,
  	.pwm0 = NULL,
  	.mux_config = mux_config,
  };
  
  static int pinmux_galileo_initialize(struct device *port)
  {
  	struct galileo_data *dev = port->driver_data;
  	int i;
  
  	/* Grab the EXP0, EXP1, EXP2, and PWM0 now by name */
  	dev->exp0 = device_get_binding(PINMUX_GALILEO_EXP0_NAME);
  	if (!dev->exp0) {
  		return -EINVAL;
  	}
  	dev->exp1 = device_get_binding(PINMUX_GALILEO_EXP1_NAME);
  	if (!dev->exp1) {
  		return -EINVAL;
  	}
  	dev->exp2 = device_get_binding(PINMUX_GALILEO_EXP2_NAME);
  	if (!dev->exp2) {
  		return -EINVAL;
  	}
  	dev->pwm0 = device_get_binding(PINMUX_GALILEO_PWM0_NAME);
  	if (!dev->pwm0) {
  		return -EINVAL;
  	}
  	dev->gpio_dw = device_get_binding(PINMUX_GALILEO_GPIO_DW_NAME);
  	if (!dev->gpio_dw) {
  		return -EINVAL;
  	}
  	dev->gpio_core = device_get_binding(
  			    PINMUX_GALILEO_GPIO_INTEL_CW_NAME);
  	if (!dev->gpio_core) {
  		return -EINVAL;
  	}
  	dev->gpio_resume = device_get_binding(
  			    PINMUX_GALILEO_GPIO_INTEL_RW_NAME);
  	if (!dev->gpio_resume) {
  		return -EINVAL;
  	}
  
  	/*
  	 * Now that we have everything, let us start parsing everything
  	 * from the above mapping as selected by the end user
  	 */
  	for (i = 0; i < PINMUX_NUM_PINS; i++) {
  		_galileo_pinmux_set_pin(port,
  				 mux_config[i].pin_num,
  				 mux_config[i].mode);
  	}
  
  	return 0;
  }
  
  /*
   * This needs to be a level 2 or later init process due to the following
   * dependency chain:
   * 0 - I2C
   * 1 - PCA9535 and PCAL9685
   * 2 - pinmux
   */
  DEVICE_AND_API_INIT(pmux, CONFIG_PINMUX_NAME, &pinmux_galileo_initialize,
  			&galileo_pinmux_driver, NULL,
  			POST_KERNEL, CONFIG_PINMUX_INIT_PRIORITY, &api_funcs);
  