Rabin Vincent | fe05203 | 2011-02-11 17:07:21 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) ST-Ericsson SA 2010 |
| 3 | * |
| 4 | * License terms: GNU General Public License (GPL) version 2 |
| 5 | */ |
| 6 | |
| 7 | #include <linux/kernel.h> |
| 8 | #include <linux/init.h> |
Paul Gortmaker | 50af5ea | 2012-01-20 18:35:53 -0500 | [diff] [blame] | 9 | #include <linux/bug.h> |
Linus Walleij | 1baa574 | 2012-04-19 18:27:38 +0200 | [diff] [blame] | 10 | #include <linux/string.h> |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 11 | #include <linux/pinctrl/machine.h> |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 12 | #include <linux/pinctrl/pinconf-generic.h> |
Rabin Vincent | fe05203 | 2011-02-11 17:07:21 -0700 | [diff] [blame] | 13 | |
Bibek Basu | 4bc3a69 | 2011-02-15 10:46:59 +0100 | [diff] [blame] | 14 | #include <asm/mach-types.h> |
Linus Walleij | 1baa574 | 2012-04-19 18:27:38 +0200 | [diff] [blame] | 15 | |
Linus Walleij | 1baa574 | 2012-04-19 18:27:38 +0200 | [diff] [blame] | 16 | #include "board-mop500.h" |
| 17 | |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 18 | /* These simply sets bias for pins */ |
| 19 | #define BIAS(a,b) static unsigned long a[] = { b } |
Bibek Basu | 4bc3a69 | 2011-02-15 10:46:59 +0100 | [diff] [blame] | 20 | |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 21 | BIAS(abx500_in_pd, PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_DOWN, 1)); |
| 22 | BIAS(abx500_in_nopull, PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_DOWN, 0)); |
| 23 | |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 24 | #define AB8500_MUX_HOG(group, func) \ |
| 25 | PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-ab8500.0", group, func) |
| 26 | #define AB8500_PIN_HOG(pin, conf) \ |
| 27 | PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-ab8500.0", pin, abx500_##conf) |
| 28 | |
| 29 | #define AB8500_MUX_STATE(group, func, dev, state) \ |
| 30 | PIN_MAP_MUX_GROUP(dev, state, "pinctrl-ab8500.0", group, func) |
| 31 | #define AB8500_PIN_STATE(pin, conf, dev, state) \ |
| 32 | PIN_MAP_CONFIGS_PIN(dev, state, "pinctrl-ab8500.0", pin, abx500_##conf) |
| 33 | |
| 34 | #define AB8505_MUX_HOG(group, func) \ |
| 35 | PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-ab8505.0", group, func) |
| 36 | #define AB8505_PIN_HOG(pin, conf) \ |
| 37 | PIN_MAP_CONFIGS_PIN_HOG_DEFAULT("pinctrl-ab8505.0", pin, abx500_##conf) |
| 38 | |
| 39 | #define AB8505_MUX_STATE(group, func, dev, state) \ |
| 40 | PIN_MAP_MUX_GROUP(dev, state, "pinctrl-ab8505.0", group, func) |
| 41 | #define AB8505_PIN_STATE(pin, conf, dev, state) \ |
| 42 | PIN_MAP_CONFIGS_PIN(dev, state, "pinctrl-ab8505.0", pin, abx500_##conf) |
| 43 | |
| 44 | static struct pinctrl_map __initdata ab8500_pinmap[] = { |
| 45 | /* Sysclkreq2 */ |
| 46 | AB8500_MUX_STATE("sysclkreq2_d_1", "sysclkreq", "regulator.35", PINCTRL_STATE_DEFAULT), |
| 47 | AB8500_PIN_STATE("GPIO1_T10", in_nopull, "regulator.35", PINCTRL_STATE_DEFAULT), |
| 48 | /* sysclkreq2 disable, mux in gpio configured in input pulldown */ |
| 49 | AB8500_MUX_STATE("gpio1_a_1", "gpio", "regulator.35", PINCTRL_STATE_SLEEP), |
| 50 | AB8500_PIN_STATE("GPIO1_T10", in_pd, "regulator.35", PINCTRL_STATE_SLEEP), |
| 51 | |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 52 | /* Sysclkreq4 */ |
| 53 | AB8500_MUX_STATE("sysclkreq4_d_1", "sysclkreq", "regulator.36", PINCTRL_STATE_DEFAULT), |
| 54 | AB8500_PIN_STATE("GPIO3_U9", in_nopull, "regulator.36", PINCTRL_STATE_DEFAULT), |
| 55 | /* sysclkreq4 disable, mux in gpio configured in input pulldown */ |
| 56 | AB8500_MUX_STATE("gpio3_a_1", "gpio", "regulator.36", PINCTRL_STATE_SLEEP), |
| 57 | AB8500_PIN_STATE("GPIO3_U9", in_pd, "regulator.36", PINCTRL_STATE_SLEEP), |
| 58 | |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 59 | /* |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 60 | * pins 14,15 are muxed in PWM1 and PWM2 |
| 61 | * configured in INPUT PULL DOWN |
| 62 | */ |
| 63 | AB8500_MUX_HOG("pwmout1_d_1", "pwmout"), |
| 64 | AB8500_PIN_HOG("GPIO14_F14", in_pd), |
| 65 | |
| 66 | AB8500_MUX_HOG("pwmout2_d_1", "pwmout"), |
| 67 | AB8500_PIN_HOG("GPIO15_B17", in_pd), |
| 68 | |
| 69 | /* |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 70 | * pins 17,18,19 and 20 are muxed in AUDIO interface 1 |
| 71 | * configured in INPUT PULL DOWN |
| 72 | */ |
| 73 | AB8500_MUX_HOG("adi1_d_1", "adi1"), |
| 74 | AB8500_PIN_HOG("GPIO17_P5", in_pd), |
| 75 | AB8500_PIN_HOG("GPIO18_R5", in_pd), |
| 76 | AB8500_PIN_HOG("GPIO19_U5", in_pd), |
| 77 | AB8500_PIN_HOG("GPIO20_T5", in_pd), |
| 78 | |
| 79 | /* |
| 80 | * pins 21,22 and 23 are muxed in USB UICC |
| 81 | * configured in INPUT PULL DOWN |
| 82 | */ |
| 83 | AB8500_MUX_HOG("usbuicc_d_1", "usbuicc"), |
| 84 | AB8500_PIN_HOG("GPIO21_H19", in_pd), |
| 85 | AB8500_PIN_HOG("GPIO22_G20", in_pd), |
| 86 | AB8500_PIN_HOG("GPIO23_G19", in_pd), |
| 87 | |
| 88 | /* |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 89 | * pins 27,28 are muxed in DMIC12 |
| 90 | * configured in INPUT PULL DOWN |
| 91 | */ |
| 92 | AB8500_MUX_HOG("dmic12_d_1", "dmic"), |
| 93 | AB8500_PIN_HOG("GPIO27_J6", in_pd), |
| 94 | AB8500_PIN_HOG("GPIO28_K6", in_pd), |
| 95 | |
| 96 | /* |
| 97 | * pins 29,30 are muxed in DMIC34 |
| 98 | * configured in INPUT PULL DOWN |
| 99 | */ |
| 100 | AB8500_MUX_HOG("dmic34_d_1", "dmic"), |
| 101 | AB8500_PIN_HOG("GPIO29_G6", in_pd), |
| 102 | AB8500_PIN_HOG("GPIO30_H6", in_pd), |
| 103 | |
| 104 | /* |
| 105 | * pins 31,32 are muxed in DMIC56 |
| 106 | * configured in INPUT PULL DOWN |
| 107 | */ |
| 108 | AB8500_MUX_HOG("dmic56_d_1", "dmic"), |
| 109 | AB8500_PIN_HOG("GPIO31_F5", in_pd), |
| 110 | AB8500_PIN_HOG("GPIO32_G5", in_pd), |
| 111 | |
| 112 | /* |
| 113 | * pins 34 is muxed in EXTCPENA |
| 114 | * configured INPUT PULL DOWN |
| 115 | */ |
| 116 | AB8500_MUX_HOG("extcpena_d_1", "extcpena"), |
| 117 | AB8500_PIN_HOG("GPIO34_R17", in_pd), |
| 118 | |
| 119 | /* |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 120 | * pins 40 and 41 are muxed in MODCSLSDA |
| 121 | * configured INPUT PULL DOWN |
| 122 | */ |
| 123 | AB8500_MUX_HOG("modsclsda_d_1", "modsclsda"), |
| 124 | AB8500_PIN_HOG("GPIO40_T19", in_pd), |
| 125 | AB8500_PIN_HOG("GPIO41_U19", in_pd), |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 126 | }; |
| 127 | |
| 128 | static struct pinctrl_map __initdata ab8505_pinmap[] = { |
| 129 | /* Sysclkreq2 */ |
| 130 | AB8505_MUX_STATE("sysclkreq2_d_1", "sysclkreq", "regulator.36", PINCTRL_STATE_DEFAULT), |
| 131 | AB8505_PIN_STATE("GPIO1_N4", in_nopull, "regulator.36", PINCTRL_STATE_DEFAULT), |
| 132 | /* sysclkreq2 disable, mux in gpio configured in input pulldown */ |
| 133 | AB8505_MUX_STATE("gpio1_a_1", "gpio", "regulator.36", PINCTRL_STATE_SLEEP), |
| 134 | AB8505_PIN_STATE("GPIO1_N4", in_pd, "regulator.36", PINCTRL_STATE_SLEEP), |
| 135 | |
| 136 | /* pins 2 is muxed in GPIO, configured in INPUT PULL DOWN */ |
| 137 | AB8505_MUX_HOG("gpio2_a_1", "gpio"), |
| 138 | AB8505_PIN_HOG("GPIO2_R5", in_pd), |
| 139 | |
| 140 | /* Sysclkreq4 */ |
| 141 | AB8505_MUX_STATE("sysclkreq4_d_1", "sysclkreq", "regulator.37", PINCTRL_STATE_DEFAULT), |
| 142 | AB8505_PIN_STATE("GPIO3_P5", in_nopull, "regulator.37", PINCTRL_STATE_DEFAULT), |
| 143 | /* sysclkreq4 disable, mux in gpio configured in input pulldown */ |
| 144 | AB8505_MUX_STATE("gpio3_a_1", "gpio", "regulator.37", PINCTRL_STATE_SLEEP), |
| 145 | AB8505_PIN_STATE("GPIO3_P5", in_pd, "regulator.37", PINCTRL_STATE_SLEEP), |
| 146 | |
| 147 | AB8505_MUX_HOG("gpio10_d_1", "gpio"), |
| 148 | AB8505_PIN_HOG("GPIO10_B16", in_pd), |
| 149 | |
| 150 | AB8505_MUX_HOG("gpio11_d_1", "gpio"), |
| 151 | AB8505_PIN_HOG("GPIO11_B17", in_pd), |
| 152 | |
| 153 | AB8505_MUX_HOG("gpio13_d_1", "gpio"), |
| 154 | AB8505_PIN_HOG("GPIO13_D17", in_nopull), |
| 155 | |
| 156 | AB8505_MUX_HOG("pwmout1_d_1", "pwmout"), |
| 157 | AB8505_PIN_HOG("GPIO14_C16", in_pd), |
| 158 | |
| 159 | AB8505_MUX_HOG("adi2_d_1", "adi2"), |
| 160 | AB8505_PIN_HOG("GPIO17_P2", in_pd), |
| 161 | AB8505_PIN_HOG("GPIO18_N3", in_pd), |
| 162 | AB8505_PIN_HOG("GPIO19_T1", in_pd), |
| 163 | AB8505_PIN_HOG("GPIO20_P3", in_pd), |
| 164 | |
| 165 | AB8505_MUX_HOG("gpio34_a_1", "gpio"), |
| 166 | AB8505_PIN_HOG("GPIO34_H14", in_pd), |
| 167 | |
| 168 | AB8505_MUX_HOG("modsclsda_d_1", "modsclsda"), |
| 169 | AB8505_PIN_HOG("GPIO40_J15", in_pd), |
| 170 | AB8505_PIN_HOG("GPIO41_J14", in_pd), |
| 171 | |
| 172 | AB8505_MUX_HOG("gpio50_d_1", "gpio"), |
| 173 | AB8505_PIN_HOG("GPIO50_L4", in_nopull), |
| 174 | |
| 175 | AB8505_MUX_HOG("resethw_d_1", "resethw"), |
| 176 | AB8505_PIN_HOG("GPIO52_D16", in_pd), |
| 177 | |
| 178 | AB8505_MUX_HOG("service_d_1", "service"), |
| 179 | AB8505_PIN_HOG("GPIO53_D15", in_pd), |
| 180 | }; |
| 181 | |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 182 | void __init mop500_pinmaps_init(void) |
Lee Jones | 110c2c2 | 2011-08-26 16:54:07 +0100 | [diff] [blame] | 183 | { |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 184 | if (machine_is_u8520()) |
| 185 | pinctrl_register_mappings(ab8505_pinmap, |
| 186 | ARRAY_SIZE(ab8505_pinmap)); |
| 187 | else |
| 188 | pinctrl_register_mappings(ab8500_pinmap, |
| 189 | ARRAY_SIZE(ab8500_pinmap)); |
Lee Jones | 110c2c2 | 2011-08-26 16:54:07 +0100 | [diff] [blame] | 190 | } |
| 191 | |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 192 | void __init snowball_pinmaps_init(void) |
Lee Jones | 110c2c2 | 2011-08-26 16:54:07 +0100 | [diff] [blame] | 193 | { |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 194 | pinctrl_register_mappings(ab8500_pinmap, |
| 195 | ARRAY_SIZE(ab8500_pinmap)); |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 196 | } |
Lee Jones | 110c2c2 | 2011-08-26 16:54:07 +0100 | [diff] [blame] | 197 | |
Linus Walleij | ed781d39 | 2012-05-03 00:44:52 +0200 | [diff] [blame] | 198 | void __init hrefv60_pinmaps_init(void) |
| 199 | { |
Patrice Chotard | 8258b18 | 2013-05-28 09:29:34 +0200 | [diff] [blame] | 200 | pinctrl_register_mappings(ab8500_pinmap, |
| 201 | ARRAY_SIZE(ab8500_pinmap)); |
Rabin Vincent | fe05203 | 2011-02-11 17:07:21 -0700 | [diff] [blame] | 202 | } |