1/* 2 * Copyright 2017, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#include "../../mach/exynos/mux.h" 14#include <platsupport/plat/gpio.h> 15 16static struct mux_feature_data i2c0_data[] = { 17 { .port = GPD1, .pin = 0, MUXVALUE_CPD(2, PUD_PULLUP, DRV1X)}, 18 { .port = GPD1, .pin = 1, MUXVALUE_CPD(2, PUD_PULLUP, DRV1X)}, 19 { .port = GPIOPORT_NONE } 20}; 21static struct mux_feature_data i2c1_data[] = { 22 { .port = GPD1, .pin = 2, MUXVALUE_CPD(2, PUD_PULLUP, DRV1X)}, 23 { .port = GPD1, .pin = 3, MUXVALUE_CPD(2, PUD_PULLUP, DRV1X)}, 24 { .port = GPIOPORT_NONE } 25}; 26 27static struct mux_feature_data i2c2_data[] = { 28 { .port = GPA0, .pin = 6, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 29 { .port = GPA0, .pin = 7, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 30 { .port = GPIOPORT_NONE } 31}; 32 33static struct mux_feature_data i2c3_data[] = { 34 { .port = GPA1, .pin = 2, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 35 { .port = GPA1, .pin = 3, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 36 { .port = GPIOPORT_NONE } 37}; 38 39static struct mux_feature_data i2c4_data[] = { 40 { .port = GPB, .pin = 0, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 41 { .port = GPB, .pin = 1, MUXVALUE_CPD(2, PUD_PULLUP, DRV1X)}, 42 { .port = GPIOPORT_NONE } 43}; 44 45static struct mux_feature_data i2c5_data[] = { 46 { .port = GPB, .pin = 2, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 47 { .port = GPB, .pin = 3, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 48 { .port = GPIOPORT_NONE } 49}; 50 51static struct mux_feature_data i2c6_data[] = { 52 { .port = GPC1, .pin = 3, MUXVALUE_CPD(4, PUD_PULLUP, DRV1X)}, 53 { .port = GPC1, .pin = 4, MUXVALUE_CPD(4, PUD_PULLUP, DRV1X)}, 54 { .port = GPIOPORT_NONE } 55}; 56 57static struct mux_feature_data i2c7_data[] = { 58 { .port = GPD0, .pin = 2, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 59 { .port = GPD0, .pin = 3, MUXVALUE_CPD(3, PUD_PULLUP, DRV1X)}, 60 { .port = GPIOPORT_NONE } 61}; 62 63/* SPI */ 64static struct mux_feature_data spi0_data[] = { 65 { .port = GPB, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 66 { .port = GPB, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 67 { .port = GPB, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 68 { .port = GPB, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 69 { .port = GPIOPORT_NONE } 70}; 71static struct mux_feature_data spi1_data[] = { 72 { .port = GPB, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 73 { .port = GPB, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 74 { .port = GPB, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 75 { .port = GPB, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 76 { .port = GPIOPORT_NONE } 77}; 78static struct mux_feature_data spi2_data[] = { 79 { .port = GPC1, .pin = 1, .value = MUXVALUE_CPD(5, PUD_PULLUP, DRV3X)}, 80 { .port = GPC1, .pin = 2, .value = MUXVALUE_CPD(5, PUD_PULLUP, DRV3X)}, 81 { .port = GPC1, .pin = 3, .value = MUXVALUE_CPD(5, PUD_PULLUP, DRV3X)}, 82 { .port = GPC1, .pin = 4, .value = MUXVALUE_CPD(5, PUD_PULLUP, DRV3X)}, 83 { .port = GPIOPORT_NONE } 84}; 85 86/* UART */ 87static struct mux_feature_data uart0_data[] = { 88 { .port = GPA0, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 89 { .port = GPA0, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 90 { .port = GPIOPORT_NONE } 91}; 92static struct mux_feature_data uart0_flow_data[] = { 93 { .port = GPA0, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 94 { .port = GPA0, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 95 { .port = GPIOPORT_NONE } 96}; 97static struct mux_feature_data uart1_data[] = { 98 { .port = GPA0, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 99 { .port = GPA0, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 100 { .port = GPIOPORT_NONE } 101}; 102static struct mux_feature_data uart1_flow_data[] = { 103 { .port = GPA0, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 104 { .port = GPA0, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 105 { .port = GPIOPORT_NONE } 106}; 107static struct mux_feature_data uart2_data[] = { 108 { .port = GPA1, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 109 { .port = GPA1, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 110 { .port = GPIOPORT_NONE } 111}; 112static struct mux_feature_data uart2_flow_data[] = { 113 { .port = GPA1, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 114 { .port = GPA1, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 115 { .port = GPIOPORT_NONE } 116}; 117static struct mux_feature_data uart3_data[] = { 118 { .port = GPA1, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 119 { .port = GPA1, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 120 { .port = GPIOPORT_NONE } 121}; 122static struct mux_feature_data uart3_flow_data[] = { 123 { .port = GPA1, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 124 { .port = GPA1, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 125 { .port = GPIOPORT_NONE } 126}; 127 128/* EBI */ 129static struct mux_feature_data srom_data[] = { 130 /* SROM_CSn[3:0] */ 131 { .port = GPY0, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 132 { .port = GPY0, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 133 { .port = GPY0, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 134 { .port = GPY0, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 135 /* SROM_WAITn */ 136 { .port = GPY1, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 137 /* Terminate the list */ 138 { .port = GPIOPORT_NONE } 139}; 140 141static struct mux_feature_data ebi_data[] = { 142 /* EBI_OEn */ 143 { .port = GPY0, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 144 /* EBI_WEn */ 145 { .port = GPY0, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 146 /* EBI_BE[1:0] */ 147 { .port = GPY1, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 148 { .port = GPY1, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 149 /* EBI_ADDR[15:0] */ 150 { .port = GPY3, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 151 { .port = GPY3, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 152 { .port = GPY3, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 153 { .port = GPY3, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 154 { .port = GPY3, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 155 { .port = GPY3, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 156 { .port = GPY3, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 157 { .port = GPY3, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 158 { .port = GPY4, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 159 { .port = GPY4, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 160 { .port = GPY4, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 161 { .port = GPY4, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 162 { .port = GPY4, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 163 { .port = GPY4, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 164 { .port = GPY4, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 165 { .port = GPY4, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 166 /* EBI_DATA[15:0] */ 167 { .port = GPY5, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 168 { .port = GPY5, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 169 { .port = GPY5, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 170 { .port = GPY5, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 171 { .port = GPY5, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 172 { .port = GPY5, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 173 { .port = GPY5, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 174 { .port = GPY5, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 175 { .port = GPY6, .pin = 0, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 176 { .port = GPY6, .pin = 1, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 177 { .port = GPY6, .pin = 2, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 178 { .port = GPY6, .pin = 3, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 179 { .port = GPY6, .pin = 4, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 180 { .port = GPY6, .pin = 5, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 181 { .port = GPY6, .pin = 6, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 182 { .port = GPY6, .pin = 7, .value = MUXVALUE_CPD(2, PUD_PULLUP, DRV3X)}, 183 /* Terminate the list */ 184 { .port = GPIOPORT_NONE } 185}; 186 187struct mux_feature_data* feature_data[] = { 188 [MUX_I2C0] = i2c0_data, 189 [MUX_I2C1] = i2c1_data, 190 [MUX_I2C2] = i2c2_data, 191 [MUX_I2C3] = i2c3_data, 192 [MUX_I2C4] = i2c4_data, 193 [MUX_I2C5] = i2c5_data, 194 [MUX_I2C6] = i2c6_data, 195 [MUX_I2C7] = i2c7_data, 196 [MUX_SPI0] = spi0_data, 197 [MUX_SPI1] = spi1_data, 198 [MUX_SPI2] = spi2_data, 199 [MUX_UART0] = uart0_data, 200 [MUX_UART1] = uart1_data, 201 [MUX_UART2] = uart2_data, 202 [MUX_UART3] = uart3_data, 203 [MUX_UART0_FLOW] = uart0_flow_data, 204 [MUX_UART1_FLOW] = uart1_flow_data, 205 [MUX_UART2_FLOW] = uart2_flow_data, 206 [MUX_UART3_FLOW] = uart3_flow_data, 207 [MUX_EBI] = ebi_data, 208 [MUX_SROM] = srom_data, 209}; 210