diff options
| author | Viresh Kumar <viresh.kumar@st.com> | 2012-04-03 07:57:10 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2012-04-22 16:49:26 -0400 |
| commit | 8076dd1b7deeaeb5c6f0b58be95c0a13164e1a99 (patch) | |
| tree | 96e3741dec72d84de577b23c9e821a27bf371f63 | |
| parent | 52130b6033c580c27d968f64cd73209c9609e4e0 (diff) | |
SPEAr: Remove existing padmux support for SPEAr
We must use pinctrl framework instead of defining per SoC pinmux drivers. This
patch removes existing padmux support present for SPEAr platform.
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Stephen Warren <swarren@wwwdotorg.org>
| -rw-r--r-- | arch/arm/mach-spear3xx/include/mach/generic.h | 128 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear300.c | 389 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear310.c | 161 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear320.c | 403 | ||||
| -rw-r--r-- | arch/arm/mach-spear3xx/spear3xx.c | 425 | ||||
| -rw-r--r-- | arch/arm/plat-spear/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/plat-spear/include/plat/padmux.h | 92 | ||||
| -rw-r--r-- | arch/arm/plat-spear/padmux.c | 164 |
8 files changed, 4 insertions, 1760 deletions
diff --git a/arch/arm/mach-spear3xx/include/mach/generic.h b/arch/arm/mach-spear3xx/include/mach/generic.h index a7569584cbe8..9603bf4d5119 100644 --- a/arch/arm/mach-spear3xx/include/mach/generic.h +++ b/arch/arm/mach-spear3xx/include/mach/generic.h | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/amba/bus.h> | 20 | #include <linux/amba/bus.h> |
| 21 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
| 22 | #include <asm/mach/map.h> | 22 | #include <asm/mach/map.h> |
| 23 | #include <plat/padmux.h> | ||
| 24 | 23 | ||
| 25 | /* spear3xx declarations */ | 24 | /* spear3xx declarations */ |
| 26 | /* | 25 | /* |
| @@ -43,147 +42,20 @@ void __init spear3xx_dt_init_irq(void); | |||
| 43 | 42 | ||
| 44 | void spear_restart(char, const char *); | 43 | void spear_restart(char, const char *); |
| 45 | 44 | ||
| 46 | /* pad mux declarations */ | ||
| 47 | #define PMX_FIRDA_MASK (1 << 14) | ||
| 48 | #define PMX_I2C_MASK (1 << 13) | ||
| 49 | #define PMX_SSP_CS_MASK (1 << 12) | ||
| 50 | #define PMX_SSP_MASK (1 << 11) | ||
| 51 | #define PMX_MII_MASK (1 << 10) | ||
| 52 | #define PMX_GPIO_PIN0_MASK (1 << 9) | ||
| 53 | #define PMX_GPIO_PIN1_MASK (1 << 8) | ||
| 54 | #define PMX_GPIO_PIN2_MASK (1 << 7) | ||
| 55 | #define PMX_GPIO_PIN3_MASK (1 << 6) | ||
| 56 | #define PMX_GPIO_PIN4_MASK (1 << 5) | ||
| 57 | #define PMX_GPIO_PIN5_MASK (1 << 4) | ||
| 58 | #define PMX_UART0_MODEM_MASK (1 << 3) | ||
| 59 | #define PMX_UART0_MASK (1 << 2) | ||
| 60 | #define PMX_TIMER_3_4_MASK (1 << 1) | ||
| 61 | #define PMX_TIMER_1_2_MASK (1 << 0) | ||
| 62 | |||
| 63 | /* pad mux devices */ | ||
| 64 | extern struct pmx_dev spear3xx_pmx_firda; | ||
| 65 | extern struct pmx_dev spear3xx_pmx_i2c; | ||
| 66 | extern struct pmx_dev spear3xx_pmx_ssp_cs; | ||
| 67 | extern struct pmx_dev spear3xx_pmx_ssp; | ||
| 68 | extern struct pmx_dev spear3xx_pmx_mii; | ||
| 69 | extern struct pmx_dev spear3xx_pmx_gpio_pin0; | ||
| 70 | extern struct pmx_dev spear3xx_pmx_gpio_pin1; | ||
| 71 | extern struct pmx_dev spear3xx_pmx_gpio_pin2; | ||
| 72 | extern struct pmx_dev spear3xx_pmx_gpio_pin3; | ||
| 73 | extern struct pmx_dev spear3xx_pmx_gpio_pin4; | ||
| 74 | extern struct pmx_dev spear3xx_pmx_gpio_pin5; | ||
| 75 | extern struct pmx_dev spear3xx_pmx_uart0_modem; | ||
| 76 | extern struct pmx_dev spear3xx_pmx_uart0; | ||
| 77 | extern struct pmx_dev spear3xx_pmx_timer_3_4; | ||
| 78 | extern struct pmx_dev spear3xx_pmx_timer_1_2; | ||
| 79 | |||
| 80 | #if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320) | ||
| 81 | /* padmux plgpio devices */ | ||
| 82 | extern struct pmx_dev spear3xx_pmx_plgpio_0_1; | ||
| 83 | extern struct pmx_dev spear3xx_pmx_plgpio_2_3; | ||
| 84 | extern struct pmx_dev spear3xx_pmx_plgpio_4_5; | ||
| 85 | extern struct pmx_dev spear3xx_pmx_plgpio_6_9; | ||
| 86 | extern struct pmx_dev spear3xx_pmx_plgpio_10_27; | ||
| 87 | extern struct pmx_dev spear3xx_pmx_plgpio_28; | ||
| 88 | extern struct pmx_dev spear3xx_pmx_plgpio_29; | ||
| 89 | extern struct pmx_dev spear3xx_pmx_plgpio_30; | ||
| 90 | extern struct pmx_dev spear3xx_pmx_plgpio_31; | ||
| 91 | extern struct pmx_dev spear3xx_pmx_plgpio_32; | ||
| 92 | extern struct pmx_dev spear3xx_pmx_plgpio_33; | ||
| 93 | extern struct pmx_dev spear3xx_pmx_plgpio_34_36; | ||
| 94 | extern struct pmx_dev spear3xx_pmx_plgpio_37_42; | ||
| 95 | extern struct pmx_dev spear3xx_pmx_plgpio_43_44_47_48; | ||
| 96 | extern struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50; | ||
| 97 | #endif | ||
| 98 | |||
| 99 | /* spear300 declarations */ | 45 | /* spear300 declarations */ |
| 100 | #ifdef CONFIG_MACH_SPEAR300 | 46 | #ifdef CONFIG_MACH_SPEAR300 |
| 101 | /* pad mux modes */ | ||
| 102 | extern struct pmx_mode spear300_nand_mode; | ||
| 103 | extern struct pmx_mode spear300_nor_mode; | ||
| 104 | extern struct pmx_mode spear300_photo_frame_mode; | ||
| 105 | extern struct pmx_mode spear300_lend_ip_phone_mode; | ||
| 106 | extern struct pmx_mode spear300_hend_ip_phone_mode; | ||
| 107 | extern struct pmx_mode spear300_lend_wifi_phone_mode; | ||
| 108 | extern struct pmx_mode spear300_hend_wifi_phone_mode; | ||
| 109 | extern struct pmx_mode spear300_ata_pabx_wi2s_mode; | ||
| 110 | extern struct pmx_mode spear300_ata_pabx_i2s_mode; | ||
| 111 | extern struct pmx_mode spear300_caml_lcdw_mode; | ||
| 112 | extern struct pmx_mode spear300_camu_lcd_mode; | ||
| 113 | extern struct pmx_mode spear300_camu_wlcd_mode; | ||
| 114 | extern struct pmx_mode spear300_caml_lcd_mode; | ||
| 115 | |||
| 116 | /* pad mux devices */ | ||
| 117 | extern struct pmx_dev spear300_pmx_fsmc_2_chips; | ||
| 118 | extern struct pmx_dev spear300_pmx_fsmc_4_chips; | ||
| 119 | extern struct pmx_dev spear300_pmx_keyboard; | ||
| 120 | extern struct pmx_dev spear300_pmx_clcd; | ||
| 121 | extern struct pmx_dev spear300_pmx_telecom_gpio; | ||
| 122 | extern struct pmx_dev spear300_pmx_telecom_tdm; | ||
| 123 | extern struct pmx_dev spear300_pmx_telecom_spi_cs_i2c_clk; | ||
| 124 | extern struct pmx_dev spear300_pmx_telecom_camera; | ||
| 125 | extern struct pmx_dev spear300_pmx_telecom_dac; | ||
| 126 | extern struct pmx_dev spear300_pmx_telecom_i2s; | ||
| 127 | extern struct pmx_dev spear300_pmx_telecom_boot_pins; | ||
| 128 | extern struct pmx_dev spear300_pmx_telecom_sdhci_4bit; | ||
| 129 | extern struct pmx_dev spear300_pmx_telecom_sdhci_8bit; | ||
| 130 | extern struct pmx_dev spear300_pmx_gpio1; | ||
| 131 | |||
| 132 | /* Add spear300 machine declarations here */ | ||
| 133 | void __init spear300_clk_init(void); | 47 | void __init spear300_clk_init(void); |
| 134 | 48 | ||
| 135 | #endif /* CONFIG_MACH_SPEAR300 */ | 49 | #endif /* CONFIG_MACH_SPEAR300 */ |
| 136 | 50 | ||
| 137 | /* spear310 declarations */ | 51 | /* spear310 declarations */ |
| 138 | #ifdef CONFIG_MACH_SPEAR310 | 52 | #ifdef CONFIG_MACH_SPEAR310 |
| 139 | /* pad mux devices */ | ||
| 140 | extern struct pmx_dev spear310_pmx_emi_cs_0_1_4_5; | ||
| 141 | extern struct pmx_dev spear310_pmx_emi_cs_2_3; | ||
| 142 | extern struct pmx_dev spear310_pmx_uart1; | ||
| 143 | extern struct pmx_dev spear310_pmx_uart2; | ||
| 144 | extern struct pmx_dev spear310_pmx_uart3_4_5; | ||
| 145 | extern struct pmx_dev spear310_pmx_fsmc; | ||
| 146 | extern struct pmx_dev spear310_pmx_rs485_0_1; | ||
| 147 | extern struct pmx_dev spear310_pmx_tdm0; | ||
| 148 | |||
| 149 | /* Add spear310 machine declarations here */ | ||
| 150 | void __init spear310_clk_init(void); | 53 | void __init spear310_clk_init(void); |
| 151 | 54 | ||
| 152 | #endif /* CONFIG_MACH_SPEAR310 */ | 55 | #endif /* CONFIG_MACH_SPEAR310 */ |
| 153 | 56 | ||
| 154 | /* spear320 declarations */ | 57 | /* spear320 declarations */ |
| 155 | #ifdef CONFIG_MACH_SPEAR320 | 58 | #ifdef CONFIG_MACH_SPEAR320 |
| 156 | /* pad mux modes */ | ||
| 157 | extern struct pmx_mode spear320_auto_net_smii_mode; | ||
| 158 | extern struct pmx_mode spear320_auto_net_mii_mode; | ||
| 159 | extern struct pmx_mode spear320_auto_exp_mode; | ||
| 160 | extern struct pmx_mode spear320_small_printers_mode; | ||
| 161 | |||
| 162 | /* pad mux devices */ | ||
| 163 | extern struct pmx_dev spear320_pmx_clcd; | ||
| 164 | extern struct pmx_dev spear320_pmx_emi; | ||
| 165 | extern struct pmx_dev spear320_pmx_fsmc; | ||
| 166 | extern struct pmx_dev spear320_pmx_spp; | ||
| 167 | extern struct pmx_dev spear320_pmx_sdhci; | ||
| 168 | extern struct pmx_dev spear320_pmx_i2s; | ||
| 169 | extern struct pmx_dev spear320_pmx_uart1; | ||
| 170 | extern struct pmx_dev spear320_pmx_uart1_modem; | ||
| 171 | extern struct pmx_dev spear320_pmx_uart2; | ||
| 172 | extern struct pmx_dev spear320_pmx_touchscreen; | ||
| 173 | extern struct pmx_dev spear320_pmx_can; | ||
| 174 | extern struct pmx_dev spear320_pmx_sdhci_led; | ||
| 175 | extern struct pmx_dev spear320_pmx_pwm0; | ||
| 176 | extern struct pmx_dev spear320_pmx_pwm1; | ||
| 177 | extern struct pmx_dev spear320_pmx_pwm2; | ||
| 178 | extern struct pmx_dev spear320_pmx_pwm3; | ||
| 179 | extern struct pmx_dev spear320_pmx_ssp1; | ||
| 180 | extern struct pmx_dev spear320_pmx_ssp2; | ||
| 181 | extern struct pmx_dev spear320_pmx_mii1; | ||
| 182 | extern struct pmx_dev spear320_pmx_smii0; | ||
| 183 | extern struct pmx_dev spear320_pmx_smii1; | ||
| 184 | extern struct pmx_dev spear320_pmx_i2c1; | ||
| 185 | |||
| 186 | /* Add spear320 machine declarations here */ | ||
| 187 | void __init spear320_clk_init(void); | 59 | void __init spear320_clk_init(void); |
| 188 | 60 | ||
| 189 | #endif /* CONFIG_MACH_SPEAR320 */ | 61 | #endif /* CONFIG_MACH_SPEAR320 */ |
diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c index f46fc2692ab6..2db0bd14e481 100644 --- a/arch/arm/mach-spear3xx/spear300.c +++ b/arch/arm/mach-spear3xx/spear300.c | |||
| @@ -21,357 +21,6 @@ | |||
| 21 | #include <mach/generic.h> | 21 | #include <mach/generic.h> |
| 22 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 23 | 23 | ||
| 24 | /* pad multiplexing support */ | ||
| 25 | /* muxing registers */ | ||
| 26 | #define PAD_MUX_CONFIG_REG 0x00 | ||
| 27 | #define MODE_CONFIG_REG 0x04 | ||
| 28 | |||
| 29 | /* modes */ | ||
| 30 | #define NAND_MODE (1 << 0) | ||
| 31 | #define NOR_MODE (1 << 1) | ||
| 32 | #define PHOTO_FRAME_MODE (1 << 2) | ||
| 33 | #define LEND_IP_PHONE_MODE (1 << 3) | ||
| 34 | #define HEND_IP_PHONE_MODE (1 << 4) | ||
| 35 | #define LEND_WIFI_PHONE_MODE (1 << 5) | ||
| 36 | #define HEND_WIFI_PHONE_MODE (1 << 6) | ||
| 37 | #define ATA_PABX_WI2S_MODE (1 << 7) | ||
| 38 | #define ATA_PABX_I2S_MODE (1 << 8) | ||
| 39 | #define CAML_LCDW_MODE (1 << 9) | ||
| 40 | #define CAMU_LCD_MODE (1 << 10) | ||
| 41 | #define CAMU_WLCD_MODE (1 << 11) | ||
| 42 | #define CAML_LCD_MODE (1 << 12) | ||
| 43 | #define ALL_MODES 0x1FFF | ||
| 44 | |||
| 45 | struct pmx_mode spear300_nand_mode = { | ||
| 46 | .id = NAND_MODE, | ||
| 47 | .name = "nand mode", | ||
| 48 | .mask = 0x00, | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct pmx_mode spear300_nor_mode = { | ||
| 52 | .id = NOR_MODE, | ||
| 53 | .name = "nor mode", | ||
| 54 | .mask = 0x01, | ||
| 55 | }; | ||
| 56 | |||
| 57 | struct pmx_mode spear300_photo_frame_mode = { | ||
| 58 | .id = PHOTO_FRAME_MODE, | ||
| 59 | .name = "photo frame mode", | ||
| 60 | .mask = 0x02, | ||
| 61 | }; | ||
| 62 | |||
| 63 | struct pmx_mode spear300_lend_ip_phone_mode = { | ||
| 64 | .id = LEND_IP_PHONE_MODE, | ||
| 65 | .name = "lend ip phone mode", | ||
| 66 | .mask = 0x03, | ||
| 67 | }; | ||
| 68 | |||
| 69 | struct pmx_mode spear300_hend_ip_phone_mode = { | ||
| 70 | .id = HEND_IP_PHONE_MODE, | ||
| 71 | .name = "hend ip phone mode", | ||
| 72 | .mask = 0x04, | ||
| 73 | }; | ||
| 74 | |||
| 75 | struct pmx_mode spear300_lend_wifi_phone_mode = { | ||
| 76 | .id = LEND_WIFI_PHONE_MODE, | ||
| 77 | .name = "lend wifi phone mode", | ||
| 78 | .mask = 0x05, | ||
| 79 | }; | ||
| 80 | |||
| 81 | struct pmx_mode spear300_hend_wifi_phone_mode = { | ||
| 82 | .id = HEND_WIFI_PHONE_MODE, | ||
| 83 | .name = "hend wifi phone mode", | ||
| 84 | .mask = 0x06, | ||
| 85 | }; | ||
| 86 | |||
| 87 | struct pmx_mode spear300_ata_pabx_wi2s_mode = { | ||
| 88 | .id = ATA_PABX_WI2S_MODE, | ||
| 89 | .name = "ata pabx wi2s mode", | ||
| 90 | .mask = 0x07, | ||
| 91 | }; | ||
| 92 | |||
| 93 | struct pmx_mode spear300_ata_pabx_i2s_mode = { | ||
| 94 | .id = ATA_PABX_I2S_MODE, | ||
| 95 | .name = "ata pabx i2s mode", | ||
| 96 | .mask = 0x08, | ||
| 97 | }; | ||
| 98 | |||
| 99 | struct pmx_mode spear300_caml_lcdw_mode = { | ||
| 100 | .id = CAML_LCDW_MODE, | ||
| 101 | .name = "caml lcdw mode", | ||
| 102 | .mask = 0x0C, | ||
| 103 | }; | ||
| 104 | |||
| 105 | struct pmx_mode spear300_camu_lcd_mode = { | ||
| 106 | .id = CAMU_LCD_MODE, | ||
| 107 | .name = "camu lcd mode", | ||
| 108 | .mask = 0x0D, | ||
| 109 | }; | ||
| 110 | |||
| 111 | struct pmx_mode spear300_camu_wlcd_mode = { | ||
| 112 | .id = CAMU_WLCD_MODE, | ||
| 113 | .name = "camu wlcd mode", | ||
| 114 | .mask = 0x0E, | ||
| 115 | }; | ||
| 116 | |||
| 117 | struct pmx_mode spear300_caml_lcd_mode = { | ||
| 118 | .id = CAML_LCD_MODE, | ||
| 119 | .name = "caml lcd mode", | ||
| 120 | .mask = 0x0F, | ||
| 121 | }; | ||
| 122 | |||
| 123 | /* devices */ | ||
| 124 | static struct pmx_dev_mode pmx_fsmc_2_chips_modes[] = { | ||
| 125 | { | ||
| 126 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
| 127 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
| 128 | .mask = PMX_FIRDA_MASK, | ||
| 129 | }, | ||
| 130 | }; | ||
| 131 | |||
| 132 | struct pmx_dev spear300_pmx_fsmc_2_chips = { | ||
| 133 | .name = "fsmc_2_chips", | ||
| 134 | .modes = pmx_fsmc_2_chips_modes, | ||
| 135 | .mode_count = ARRAY_SIZE(pmx_fsmc_2_chips_modes), | ||
| 136 | .enb_on_reset = 1, | ||
| 137 | }; | ||
| 138 | |||
| 139 | static struct pmx_dev_mode pmx_fsmc_4_chips_modes[] = { | ||
| 140 | { | ||
| 141 | .ids = NAND_MODE | NOR_MODE | PHOTO_FRAME_MODE | | ||
| 142 | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE, | ||
| 143 | .mask = PMX_FIRDA_MASK | PMX_UART0_MASK, | ||
| 144 | }, | ||
| 145 | }; | ||
| 146 | |||
| 147 | struct pmx_dev spear300_pmx_fsmc_4_chips = { | ||
| 148 | .name = "fsmc_4_chips", | ||
| 149 | .modes = pmx_fsmc_4_chips_modes, | ||
| 150 | .mode_count = ARRAY_SIZE(pmx_fsmc_4_chips_modes), | ||
| 151 | .enb_on_reset = 1, | ||
| 152 | }; | ||
| 153 | |||
| 154 | static struct pmx_dev_mode pmx_keyboard_modes[] = { | ||
| 155 | { | ||
| 156 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
| 157 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
| 158 | CAML_LCDW_MODE | CAMU_LCD_MODE | CAMU_WLCD_MODE | | ||
| 159 | CAML_LCD_MODE, | ||
| 160 | .mask = 0x0, | ||
| 161 | }, | ||
| 162 | }; | ||
| 163 | |||
| 164 | struct pmx_dev spear300_pmx_keyboard = { | ||
| 165 | .name = "keyboard", | ||
| 166 | .modes = pmx_keyboard_modes, | ||
| 167 | .mode_count = ARRAY_SIZE(pmx_keyboard_modes), | ||
| 168 | .enb_on_reset = 1, | ||
| 169 | }; | ||
| 170 | |||
| 171 | static struct pmx_dev_mode pmx_clcd_modes[] = { | ||
| 172 | { | ||
| 173 | .ids = PHOTO_FRAME_MODE, | ||
| 174 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK , | ||
| 175 | }, { | ||
| 176 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
| 177 | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
| 178 | .mask = PMX_TIMER_3_4_MASK, | ||
| 179 | }, | ||
| 180 | }; | ||
| 181 | |||
| 182 | struct pmx_dev spear300_pmx_clcd = { | ||
| 183 | .name = "clcd", | ||
| 184 | .modes = pmx_clcd_modes, | ||
| 185 | .mode_count = ARRAY_SIZE(pmx_clcd_modes), | ||
| 186 | .enb_on_reset = 1, | ||
| 187 | }; | ||
| 188 | |||
| 189 | static struct pmx_dev_mode pmx_telecom_gpio_modes[] = { | ||
| 190 | { | ||
| 191 | .ids = PHOTO_FRAME_MODE | CAMU_LCD_MODE | CAML_LCD_MODE, | ||
| 192 | .mask = PMX_MII_MASK, | ||
| 193 | }, { | ||
| 194 | .ids = LEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE, | ||
| 195 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
| 196 | }, { | ||
| 197 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_WLCD_MODE, | ||
| 198 | .mask = PMX_MII_MASK | PMX_TIMER_3_4_MASK, | ||
| 199 | }, { | ||
| 200 | .ids = HEND_IP_PHONE_MODE | HEND_WIFI_PHONE_MODE, | ||
| 201 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK, | ||
| 202 | }, { | ||
| 203 | .ids = ATA_PABX_WI2S_MODE, | ||
| 204 | .mask = PMX_MII_MASK | PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | ||
| 205 | | PMX_UART0_MODEM_MASK, | ||
| 206 | }, | ||
| 207 | }; | ||
| 208 | |||
| 209 | struct pmx_dev spear300_pmx_telecom_gpio = { | ||
| 210 | .name = "telecom_gpio", | ||
| 211 | .modes = pmx_telecom_gpio_modes, | ||
| 212 | .mode_count = ARRAY_SIZE(pmx_telecom_gpio_modes), | ||
| 213 | .enb_on_reset = 1, | ||
| 214 | }; | ||
| 215 | |||
| 216 | static struct pmx_dev_mode pmx_telecom_tdm_modes[] = { | ||
| 217 | { | ||
| 218 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
| 219 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | ||
| 220 | | HEND_WIFI_PHONE_MODE | ATA_PABX_WI2S_MODE | ||
| 221 | | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
| 222 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
| 223 | .mask = PMX_UART0_MODEM_MASK | PMX_SSP_CS_MASK, | ||
| 224 | }, | ||
| 225 | }; | ||
| 226 | |||
| 227 | struct pmx_dev spear300_pmx_telecom_tdm = { | ||
| 228 | .name = "telecom_tdm", | ||
| 229 | .modes = pmx_telecom_tdm_modes, | ||
| 230 | .mode_count = ARRAY_SIZE(pmx_telecom_tdm_modes), | ||
| 231 | .enb_on_reset = 1, | ||
| 232 | }; | ||
| 233 | |||
| 234 | static struct pmx_dev_mode pmx_telecom_spi_cs_i2c_clk_modes[] = { | ||
| 235 | { | ||
| 236 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | | ||
| 237 | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | ||
| 238 | | ATA_PABX_WI2S_MODE | ATA_PABX_I2S_MODE | | ||
| 239 | CAML_LCDW_MODE | CAML_LCD_MODE, | ||
| 240 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
| 241 | }, | ||
| 242 | }; | ||
| 243 | |||
| 244 | struct pmx_dev spear300_pmx_telecom_spi_cs_i2c_clk = { | ||
| 245 | .name = "telecom_spi_cs_i2c_clk", | ||
| 246 | .modes = pmx_telecom_spi_cs_i2c_clk_modes, | ||
| 247 | .mode_count = ARRAY_SIZE(pmx_telecom_spi_cs_i2c_clk_modes), | ||
| 248 | .enb_on_reset = 1, | ||
| 249 | }; | ||
| 250 | |||
| 251 | static struct pmx_dev_mode pmx_telecom_camera_modes[] = { | ||
| 252 | { | ||
| 253 | .ids = CAML_LCDW_MODE | CAML_LCD_MODE, | ||
| 254 | .mask = PMX_MII_MASK, | ||
| 255 | }, { | ||
| 256 | .ids = CAMU_LCD_MODE | CAMU_WLCD_MODE, | ||
| 257 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | PMX_MII_MASK, | ||
| 258 | }, | ||
| 259 | }; | ||
| 260 | |||
| 261 | struct pmx_dev spear300_pmx_telecom_camera = { | ||
| 262 | .name = "telecom_camera", | ||
| 263 | .modes = pmx_telecom_camera_modes, | ||
| 264 | .mode_count = ARRAY_SIZE(pmx_telecom_camera_modes), | ||
| 265 | .enb_on_reset = 1, | ||
| 266 | }; | ||
| 267 | |||
| 268 | static struct pmx_dev_mode pmx_telecom_dac_modes[] = { | ||
| 269 | { | ||
| 270 | .ids = ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
| 271 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
| 272 | .mask = PMX_TIMER_1_2_MASK, | ||
| 273 | }, | ||
| 274 | }; | ||
| 275 | |||
| 276 | struct pmx_dev spear300_pmx_telecom_dac = { | ||
| 277 | .name = "telecom_dac", | ||
| 278 | .modes = pmx_telecom_dac_modes, | ||
| 279 | .mode_count = ARRAY_SIZE(pmx_telecom_dac_modes), | ||
| 280 | .enb_on_reset = 1, | ||
| 281 | }; | ||
| 282 | |||
| 283 | static struct pmx_dev_mode pmx_telecom_i2s_modes[] = { | ||
| 284 | { | ||
| 285 | .ids = LEND_IP_PHONE_MODE | HEND_IP_PHONE_MODE | ||
| 286 | | LEND_WIFI_PHONE_MODE | HEND_WIFI_PHONE_MODE | | ||
| 287 | ATA_PABX_I2S_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | ||
| 288 | | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
| 289 | .mask = PMX_UART0_MODEM_MASK, | ||
| 290 | }, | ||
| 291 | }; | ||
| 292 | |||
| 293 | struct pmx_dev spear300_pmx_telecom_i2s = { | ||
| 294 | .name = "telecom_i2s", | ||
| 295 | .modes = pmx_telecom_i2s_modes, | ||
| 296 | .mode_count = ARRAY_SIZE(pmx_telecom_i2s_modes), | ||
| 297 | .enb_on_reset = 1, | ||
| 298 | }; | ||
| 299 | |||
| 300 | static struct pmx_dev_mode pmx_telecom_boot_pins_modes[] = { | ||
| 301 | { | ||
| 302 | .ids = NAND_MODE | NOR_MODE, | ||
| 303 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
| 304 | PMX_TIMER_3_4_MASK, | ||
| 305 | }, | ||
| 306 | }; | ||
| 307 | |||
| 308 | struct pmx_dev spear300_pmx_telecom_boot_pins = { | ||
| 309 | .name = "telecom_boot_pins", | ||
| 310 | .modes = pmx_telecom_boot_pins_modes, | ||
| 311 | .mode_count = ARRAY_SIZE(pmx_telecom_boot_pins_modes), | ||
| 312 | .enb_on_reset = 1, | ||
| 313 | }; | ||
| 314 | |||
| 315 | static struct pmx_dev_mode pmx_telecom_sdhci_4bit_modes[] = { | ||
| 316 | { | ||
| 317 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
| 318 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
| 319 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
| 320 | CAMU_WLCD_MODE | CAML_LCD_MODE | ATA_PABX_WI2S_MODE | | ||
| 321 | ATA_PABX_I2S_MODE, | ||
| 322 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
| 323 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
| 324 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, | ||
| 325 | }, | ||
| 326 | }; | ||
| 327 | |||
| 328 | struct pmx_dev spear300_pmx_telecom_sdhci_4bit = { | ||
| 329 | .name = "telecom_sdhci_4bit", | ||
| 330 | .modes = pmx_telecom_sdhci_4bit_modes, | ||
| 331 | .mode_count = ARRAY_SIZE(pmx_telecom_sdhci_4bit_modes), | ||
| 332 | .enb_on_reset = 1, | ||
| 333 | }; | ||
| 334 | |||
| 335 | static struct pmx_dev_mode pmx_telecom_sdhci_8bit_modes[] = { | ||
| 336 | { | ||
| 337 | .ids = PHOTO_FRAME_MODE | LEND_IP_PHONE_MODE | | ||
| 338 | HEND_IP_PHONE_MODE | LEND_WIFI_PHONE_MODE | | ||
| 339 | HEND_WIFI_PHONE_MODE | CAML_LCDW_MODE | CAMU_LCD_MODE | | ||
| 340 | CAMU_WLCD_MODE | CAML_LCD_MODE, | ||
| 341 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK | | ||
| 342 | PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
| 343 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK | PMX_MII_MASK, | ||
| 344 | }, | ||
| 345 | }; | ||
| 346 | |||
| 347 | struct pmx_dev spear300_pmx_telecom_sdhci_8bit = { | ||
| 348 | .name = "telecom_sdhci_8bit", | ||
| 349 | .modes = pmx_telecom_sdhci_8bit_modes, | ||
| 350 | .mode_count = ARRAY_SIZE(pmx_telecom_sdhci_8bit_modes), | ||
| 351 | .enb_on_reset = 1, | ||
| 352 | }; | ||
| 353 | |||
| 354 | static struct pmx_dev_mode pmx_gpio1_modes[] = { | ||
| 355 | { | ||
| 356 | .ids = PHOTO_FRAME_MODE, | ||
| 357 | .mask = PMX_UART0_MODEM_MASK | PMX_TIMER_1_2_MASK | | ||
| 358 | PMX_TIMER_3_4_MASK, | ||
| 359 | }, | ||
| 360 | }; | ||
| 361 | |||
| 362 | struct pmx_dev spear300_pmx_gpio1 = { | ||
| 363 | .name = "arm gpio1", | ||
| 364 | .modes = pmx_gpio1_modes, | ||
| 365 | .mode_count = ARRAY_SIZE(pmx_gpio1_modes), | ||
| 366 | .enb_on_reset = 1, | ||
| 367 | }; | ||
| 368 | |||
| 369 | /* pmx driver structure */ | ||
| 370 | static struct pmx_driver pmx_driver = { | ||
| 371 | .mode_reg = {.offset = MODE_CONFIG_REG, .mask = 0x0000000f}, | ||
| 372 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
| 373 | }; | ||
| 374 | |||
| 375 | /* spear3xx shared irq */ | 24 | /* spear3xx shared irq */ |
| 376 | static struct shirq_dev_config shirq_ras1_config[] = { | 25 | static struct shirq_dev_config shirq_ras1_config[] = { |
| 377 | { | 26 | { |
| @@ -425,22 +74,6 @@ static struct spear_shirq shirq_ras1 = { | |||
| 425 | }, | 74 | }, |
| 426 | }; | 75 | }; |
| 427 | 76 | ||
| 428 | /* padmux devices to enable */ | ||
| 429 | static struct pmx_dev *spear300_evb_pmx_devs[] = { | ||
| 430 | /* spear3xx specific devices */ | ||
| 431 | &spear3xx_pmx_i2c, | ||
| 432 | &spear3xx_pmx_ssp_cs, | ||
| 433 | &spear3xx_pmx_ssp, | ||
| 434 | &spear3xx_pmx_mii, | ||
| 435 | &spear3xx_pmx_uart0, | ||
| 436 | |||
| 437 | /* spear300 specific devices */ | ||
| 438 | &spear300_pmx_fsmc_2_chips, | ||
| 439 | &spear300_pmx_clcd, | ||
| 440 | &spear300_pmx_telecom_sdhci_4bit, | ||
| 441 | &spear300_pmx_gpio1, | ||
| 442 | }; | ||
| 443 | |||
| 444 | /* DMAC platform data's slave info */ | 77 | /* DMAC platform data's slave info */ |
| 445 | struct pl08x_channel_data spear300_dma_info[] = { | 78 | struct pl08x_channel_data spear300_dma_info[] = { |
| 446 | { | 79 | { |
| @@ -639,7 +272,7 @@ static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = { | |||
| 639 | 272 | ||
| 640 | static void __init spear300_dt_init(void) | 273 | static void __init spear300_dt_init(void) |
| 641 | { | 274 | { |
| 642 | int ret = -EINVAL; | 275 | int ret; |
| 643 | 276 | ||
| 644 | pl080_plat_data.slave_channels = spear300_dma_info; | 277 | pl080_plat_data.slave_channels = spear300_dma_info; |
| 645 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); | 278 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info); |
| @@ -654,26 +287,6 @@ static void __init spear300_dt_init(void) | |||
| 654 | if (ret) | 287 | if (ret) |
| 655 | pr_err("Error registering Shared IRQ\n"); | 288 | pr_err("Error registering Shared IRQ\n"); |
| 656 | } | 289 | } |
| 657 | |||
| 658 | if (of_machine_is_compatible("st,spear300-evb")) { | ||
| 659 | /* pmx initialization */ | ||
| 660 | pmx_driver.mode = &spear300_photo_frame_mode; | ||
| 661 | pmx_driver.devs = spear300_evb_pmx_devs; | ||
| 662 | pmx_driver.devs_count = ARRAY_SIZE(spear300_evb_pmx_devs); | ||
| 663 | |||
| 664 | pmx_driver.base = ioremap(SPEAR300_SOC_CONFIG_BASE, SZ_4K); | ||
| 665 | if (pmx_driver.base) { | ||
| 666 | ret = pmx_register(&pmx_driver); | ||
| 667 | if (ret) | ||
| 668 | pr_err("padmux: registration failed. err no: %d\n", | ||
| 669 | ret); | ||
| 670 | /* Free Mapping, device selection already done */ | ||
| 671 | iounmap(pmx_driver.base); | ||
| 672 | } | ||
| 673 | |||
| 674 | if (ret) | ||
| 675 | pr_err("Initialization Failed"); | ||
| 676 | } | ||
| 677 | } | 290 | } |
| 678 | 291 | ||
| 679 | static const char * const spear300_dt_board_compat[] = { | 292 | static const char * const spear300_dt_board_compat[] = { |
diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear3xx/spear310.c index 063e7da0438a..aec07c951205 100644 --- a/arch/arm/mach-spear3xx/spear310.c +++ b/arch/arm/mach-spear3xx/spear310.c | |||
| @@ -22,128 +22,6 @@ | |||
| 22 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | 24 | ||
| 25 | /* pad multiplexing support */ | ||
| 26 | /* muxing registers */ | ||
| 27 | #define PAD_MUX_CONFIG_REG 0x08 | ||
| 28 | |||
| 29 | /* devices */ | ||
| 30 | static struct pmx_dev_mode pmx_emi_cs_0_1_4_5_modes[] = { | ||
| 31 | { | ||
| 32 | .ids = 0x00, | ||
| 33 | .mask = PMX_TIMER_3_4_MASK, | ||
| 34 | }, | ||
| 35 | }; | ||
| 36 | |||
| 37 | struct pmx_dev spear310_pmx_emi_cs_0_1_4_5 = { | ||
| 38 | .name = "emi_cs_0_1_4_5", | ||
| 39 | .modes = pmx_emi_cs_0_1_4_5_modes, | ||
| 40 | .mode_count = ARRAY_SIZE(pmx_emi_cs_0_1_4_5_modes), | ||
| 41 | .enb_on_reset = 1, | ||
| 42 | }; | ||
| 43 | |||
| 44 | static struct pmx_dev_mode pmx_emi_cs_2_3_modes[] = { | ||
| 45 | { | ||
| 46 | .ids = 0x00, | ||
| 47 | .mask = PMX_TIMER_1_2_MASK, | ||
| 48 | }, | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct pmx_dev spear310_pmx_emi_cs_2_3 = { | ||
| 52 | .name = "emi_cs_2_3", | ||
| 53 | .modes = pmx_emi_cs_2_3_modes, | ||
| 54 | .mode_count = ARRAY_SIZE(pmx_emi_cs_2_3_modes), | ||
| 55 | .enb_on_reset = 1, | ||
| 56 | }; | ||
| 57 | |||
| 58 | static struct pmx_dev_mode pmx_uart1_modes[] = { | ||
| 59 | { | ||
| 60 | .ids = 0x00, | ||
| 61 | .mask = PMX_FIRDA_MASK, | ||
| 62 | }, | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct pmx_dev spear310_pmx_uart1 = { | ||
| 66 | .name = "uart1", | ||
| 67 | .modes = pmx_uart1_modes, | ||
| 68 | .mode_count = ARRAY_SIZE(pmx_uart1_modes), | ||
| 69 | .enb_on_reset = 1, | ||
| 70 | }; | ||
| 71 | |||
| 72 | static struct pmx_dev_mode pmx_uart2_modes[] = { | ||
| 73 | { | ||
| 74 | .ids = 0x00, | ||
| 75 | .mask = PMX_TIMER_1_2_MASK, | ||
| 76 | }, | ||
| 77 | }; | ||
| 78 | |||
| 79 | struct pmx_dev spear310_pmx_uart2 = { | ||
| 80 | .name = "uart2", | ||
| 81 | .modes = pmx_uart2_modes, | ||
| 82 | .mode_count = ARRAY_SIZE(pmx_uart2_modes), | ||
| 83 | .enb_on_reset = 1, | ||
| 84 | }; | ||
| 85 | |||
| 86 | static struct pmx_dev_mode pmx_uart3_4_5_modes[] = { | ||
| 87 | { | ||
| 88 | .ids = 0x00, | ||
| 89 | .mask = PMX_UART0_MODEM_MASK, | ||
| 90 | }, | ||
| 91 | }; | ||
| 92 | |||
| 93 | struct pmx_dev spear310_pmx_uart3_4_5 = { | ||
| 94 | .name = "uart3_4_5", | ||
| 95 | .modes = pmx_uart3_4_5_modes, | ||
| 96 | .mode_count = ARRAY_SIZE(pmx_uart3_4_5_modes), | ||
| 97 | .enb_on_reset = 1, | ||
| 98 | }; | ||
| 99 | |||
| 100 | static struct pmx_dev_mode pmx_fsmc_modes[] = { | ||
| 101 | { | ||
| 102 | .ids = 0x00, | ||
| 103 | .mask = PMX_SSP_CS_MASK, | ||
| 104 | }, | ||
| 105 | }; | ||
| 106 | |||
| 107 | struct pmx_dev spear310_pmx_fsmc = { | ||
| 108 | .name = "fsmc", | ||
| 109 | .modes = pmx_fsmc_modes, | ||
| 110 | .mode_count = ARRAY_SIZE(pmx_fsmc_modes), | ||
| 111 | .enb_on_reset = 1, | ||
| 112 | }; | ||
| 113 | |||
| 114 | static struct pmx_dev_mode pmx_rs485_0_1_modes[] = { | ||
| 115 | { | ||
| 116 | .ids = 0x00, | ||
| 117 | .mask = PMX_MII_MASK, | ||
| 118 | }, | ||
| 119 | }; | ||
| 120 | |||
| 121 | struct pmx_dev spear310_pmx_rs485_0_1 = { | ||
| 122 | .name = "rs485_0_1", | ||
| 123 | .modes = pmx_rs485_0_1_modes, | ||
| 124 | .mode_count = ARRAY_SIZE(pmx_rs485_0_1_modes), | ||
| 125 | .enb_on_reset = 1, | ||
| 126 | }; | ||
| 127 | |||
| 128 | static struct pmx_dev_mode pmx_tdm0_modes[] = { | ||
| 129 | { | ||
| 130 | .ids = 0x00, | ||
| 131 | .mask = PMX_MII_MASK, | ||
| 132 | }, | ||
| 133 | }; | ||
| 134 | |||
| 135 | struct pmx_dev spear310_pmx_tdm0 = { | ||
| 136 | .name = "tdm0", | ||
| 137 | .modes = pmx_tdm0_modes, | ||
| 138 | .mode_count = ARRAY_SIZE(pmx_tdm0_modes), | ||
| 139 | .enb_on_reset = 1, | ||
| 140 | }; | ||
| 141 | |||
| 142 | /* pmx driver structure */ | ||
| 143 | static struct pmx_driver pmx_driver = { | ||
| 144 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
| 145 | }; | ||
| 146 | |||
| 147 | /* spear3xx shared irq */ | 25 | /* spear3xx shared irq */ |
| 148 | static struct shirq_dev_config shirq_ras1_config[] = { | 26 | static struct shirq_dev_config shirq_ras1_config[] = { |
| 149 | { | 27 | { |
| @@ -260,30 +138,6 @@ static struct spear_shirq shirq_intrcomm_ras = { | |||
| 260 | }, | 138 | }, |
| 261 | }; | 139 | }; |
| 262 | 140 | ||
| 263 | /* padmux devices to enable */ | ||
| 264 | static struct pmx_dev *spear310_evb_pmx_devs[] = { | ||
| 265 | /* spear3xx specific devices */ | ||
| 266 | &spear3xx_pmx_i2c, | ||
| 267 | &spear3xx_pmx_ssp, | ||
| 268 | &spear3xx_pmx_gpio_pin0, | ||
| 269 | &spear3xx_pmx_gpio_pin1, | ||
| 270 | &spear3xx_pmx_gpio_pin2, | ||
| 271 | &spear3xx_pmx_gpio_pin3, | ||
| 272 | &spear3xx_pmx_gpio_pin4, | ||
| 273 | &spear3xx_pmx_gpio_pin5, | ||
| 274 | &spear3xx_pmx_uart0, | ||
| 275 | |||
| 276 | /* spear310 specific devices */ | ||
| 277 | &spear310_pmx_emi_cs_0_1_4_5, | ||
| 278 | &spear310_pmx_emi_cs_2_3, | ||
| 279 | &spear310_pmx_uart1, | ||
| 280 | &spear310_pmx_uart2, | ||
| 281 | &spear310_pmx_uart3_4_5, | ||
| 282 | &spear310_pmx_fsmc, | ||
| 283 | &spear310_pmx_rs485_0_1, | ||
| 284 | &spear310_pmx_tdm0, | ||
| 285 | }; | ||
| 286 | |||
| 287 | /* DMAC platform data's slave info */ | 141 | /* DMAC platform data's slave info */ |
| 288 | struct pl08x_channel_data spear310_dma_info[] = { | 142 | struct pl08x_channel_data spear310_dma_info[] = { |
| 289 | { | 143 | { |
| @@ -518,7 +372,7 @@ static struct of_dev_auxdata spear310_auxdata_lookup[] __initdata = { | |||
| 518 | static void __init spear310_dt_init(void) | 372 | static void __init spear310_dt_init(void) |
| 519 | { | 373 | { |
| 520 | void __iomem *base; | 374 | void __iomem *base; |
| 521 | int ret = 0; | 375 | int ret; |
| 522 | 376 | ||
| 523 | pl080_plat_data.slave_channels = spear310_dma_info; | 377 | pl080_plat_data.slave_channels = spear310_dma_info; |
| 524 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info); | 378 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info); |
| @@ -553,19 +407,6 @@ static void __init spear310_dt_init(void) | |||
| 553 | if (ret) | 407 | if (ret) |
| 554 | pr_err("Error registering Shared IRQ 4\n"); | 408 | pr_err("Error registering Shared IRQ 4\n"); |
| 555 | } | 409 | } |
| 556 | |||
| 557 | if (of_machine_is_compatible("st,spear310-evb")) { | ||
| 558 | /* pmx initialization */ | ||
| 559 | pmx_driver.base = base; | ||
| 560 | pmx_driver.mode = NULL; | ||
| 561 | pmx_driver.devs = spear310_evb_pmx_devs; | ||
| 562 | pmx_driver.devs_count = ARRAY_SIZE(spear310_evb_pmx_devs); | ||
| 563 | |||
| 564 | ret = pmx_register(&pmx_driver); | ||
| 565 | if (ret) | ||
| 566 | pr_err("padmux: registration failed. err no: %d\n", | ||
| 567 | ret); | ||
| 568 | } | ||
| 569 | } | 410 | } |
| 570 | 411 | ||
| 571 | static const char * const spear310_dt_board_compat[] = { | 412 | static const char * const spear310_dt_board_compat[] = { |
diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c index 1e74031e1213..4812c692ca35 100644 --- a/arch/arm/mach-spear3xx/spear320.c +++ b/arch/arm/mach-spear3xx/spear320.c | |||
| @@ -23,373 +23,6 @@ | |||
| 23 | #include <mach/generic.h> | 23 | #include <mach/generic.h> |
| 24 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
| 25 | 25 | ||
| 26 | /* pad multiplexing support */ | ||
| 27 | /* muxing registers */ | ||
| 28 | #define PAD_MUX_CONFIG_REG 0x0C | ||
| 29 | #define MODE_CONFIG_REG 0x10 | ||
| 30 | |||
| 31 | /* modes */ | ||
| 32 | #define AUTO_NET_SMII_MODE (1 << 0) | ||
| 33 | #define AUTO_NET_MII_MODE (1 << 1) | ||
| 34 | #define AUTO_EXP_MODE (1 << 2) | ||
| 35 | #define SMALL_PRINTERS_MODE (1 << 3) | ||
| 36 | #define ALL_MODES 0xF | ||
| 37 | |||
| 38 | struct pmx_mode spear320_auto_net_smii_mode = { | ||
| 39 | .id = AUTO_NET_SMII_MODE, | ||
| 40 | .name = "Automation Networking SMII Mode", | ||
| 41 | .mask = 0x00, | ||
| 42 | }; | ||
| 43 | |||
| 44 | struct pmx_mode spear320_auto_net_mii_mode = { | ||
| 45 | .id = AUTO_NET_MII_MODE, | ||
| 46 | .name = "Automation Networking MII Mode", | ||
| 47 | .mask = 0x01, | ||
| 48 | }; | ||
| 49 | |||
| 50 | struct pmx_mode spear320_auto_exp_mode = { | ||
| 51 | .id = AUTO_EXP_MODE, | ||
| 52 | .name = "Automation Expanded Mode", | ||
| 53 | .mask = 0x02, | ||
| 54 | }; | ||
| 55 | |||
| 56 | struct pmx_mode spear320_small_printers_mode = { | ||
| 57 | .id = SMALL_PRINTERS_MODE, | ||
| 58 | .name = "Small Printers Mode", | ||
| 59 | .mask = 0x03, | ||
| 60 | }; | ||
| 61 | |||
| 62 | /* devices */ | ||
| 63 | static struct pmx_dev_mode pmx_clcd_modes[] = { | ||
| 64 | { | ||
| 65 | .ids = AUTO_NET_SMII_MODE, | ||
| 66 | .mask = 0x0, | ||
| 67 | }, | ||
| 68 | }; | ||
| 69 | |||
| 70 | struct pmx_dev spear320_pmx_clcd = { | ||
| 71 | .name = "clcd", | ||
| 72 | .modes = pmx_clcd_modes, | ||
| 73 | .mode_count = ARRAY_SIZE(pmx_clcd_modes), | ||
| 74 | .enb_on_reset = 1, | ||
| 75 | }; | ||
| 76 | |||
| 77 | static struct pmx_dev_mode pmx_emi_modes[] = { | ||
| 78 | { | ||
| 79 | .ids = AUTO_EXP_MODE, | ||
| 80 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
| 81 | }, | ||
| 82 | }; | ||
| 83 | |||
| 84 | struct pmx_dev spear320_pmx_emi = { | ||
| 85 | .name = "emi", | ||
| 86 | .modes = pmx_emi_modes, | ||
| 87 | .mode_count = ARRAY_SIZE(pmx_emi_modes), | ||
| 88 | .enb_on_reset = 1, | ||
| 89 | }; | ||
| 90 | |||
| 91 | static struct pmx_dev_mode pmx_fsmc_modes[] = { | ||
| 92 | { | ||
| 93 | .ids = ALL_MODES, | ||
| 94 | .mask = 0x0, | ||
| 95 | }, | ||
| 96 | }; | ||
| 97 | |||
| 98 | struct pmx_dev spear320_pmx_fsmc = { | ||
| 99 | .name = "fsmc", | ||
| 100 | .modes = pmx_fsmc_modes, | ||
| 101 | .mode_count = ARRAY_SIZE(pmx_fsmc_modes), | ||
| 102 | .enb_on_reset = 1, | ||
| 103 | }; | ||
| 104 | |||
| 105 | static struct pmx_dev_mode pmx_spp_modes[] = { | ||
| 106 | { | ||
| 107 | .ids = SMALL_PRINTERS_MODE, | ||
| 108 | .mask = 0x0, | ||
| 109 | }, | ||
| 110 | }; | ||
| 111 | |||
| 112 | struct pmx_dev spear320_pmx_spp = { | ||
| 113 | .name = "spp", | ||
| 114 | .modes = pmx_spp_modes, | ||
| 115 | .mode_count = ARRAY_SIZE(pmx_spp_modes), | ||
| 116 | .enb_on_reset = 1, | ||
| 117 | }; | ||
| 118 | |||
| 119 | static struct pmx_dev_mode pmx_sdhci_modes[] = { | ||
| 120 | { | ||
| 121 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | | ||
| 122 | SMALL_PRINTERS_MODE, | ||
| 123 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK, | ||
| 124 | }, | ||
| 125 | }; | ||
| 126 | |||
| 127 | struct pmx_dev spear320_pmx_sdhci = { | ||
| 128 | .name = "sdhci", | ||
| 129 | .modes = pmx_sdhci_modes, | ||
| 130 | .mode_count = ARRAY_SIZE(pmx_sdhci_modes), | ||
| 131 | .enb_on_reset = 1, | ||
| 132 | }; | ||
| 133 | |||
| 134 | static struct pmx_dev_mode pmx_i2s_modes[] = { | ||
| 135 | { | ||
| 136 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
| 137 | .mask = PMX_UART0_MODEM_MASK, | ||
| 138 | }, | ||
| 139 | }; | ||
| 140 | |||
| 141 | struct pmx_dev spear320_pmx_i2s = { | ||
| 142 | .name = "i2s", | ||
| 143 | .modes = pmx_i2s_modes, | ||
| 144 | .mode_count = ARRAY_SIZE(pmx_i2s_modes), | ||
| 145 | .enb_on_reset = 1, | ||
| 146 | }; | ||
| 147 | |||
| 148 | static struct pmx_dev_mode pmx_uart1_modes[] = { | ||
| 149 | { | ||
| 150 | .ids = ALL_MODES, | ||
| 151 | .mask = PMX_GPIO_PIN0_MASK | PMX_GPIO_PIN1_MASK, | ||
| 152 | }, | ||
| 153 | }; | ||
| 154 | |||
| 155 | struct pmx_dev spear320_pmx_uart1 = { | ||
| 156 | .name = "uart1", | ||
| 157 | .modes = pmx_uart1_modes, | ||
| 158 | .mode_count = ARRAY_SIZE(pmx_uart1_modes), | ||
| 159 | .enb_on_reset = 1, | ||
| 160 | }; | ||
| 161 | |||
| 162 | static struct pmx_dev_mode pmx_uart1_modem_modes[] = { | ||
| 163 | { | ||
| 164 | .ids = AUTO_EXP_MODE, | ||
| 165 | .mask = PMX_TIMER_1_2_MASK | PMX_TIMER_3_4_MASK | | ||
| 166 | PMX_SSP_CS_MASK, | ||
| 167 | }, { | ||
| 168 | .ids = SMALL_PRINTERS_MODE, | ||
| 169 | .mask = PMX_GPIO_PIN3_MASK | PMX_GPIO_PIN4_MASK | | ||
| 170 | PMX_GPIO_PIN5_MASK | PMX_SSP_CS_MASK, | ||
| 171 | }, | ||
| 172 | }; | ||
| 173 | |||
| 174 | struct pmx_dev spear320_pmx_uart1_modem = { | ||
| 175 | .name = "uart1_modem", | ||
| 176 | .modes = pmx_uart1_modem_modes, | ||
| 177 | .mode_count = ARRAY_SIZE(pmx_uart1_modem_modes), | ||
| 178 | .enb_on_reset = 1, | ||
| 179 | }; | ||
| 180 | |||
| 181 | static struct pmx_dev_mode pmx_uart2_modes[] = { | ||
| 182 | { | ||
| 183 | .ids = ALL_MODES, | ||
| 184 | .mask = PMX_FIRDA_MASK, | ||
| 185 | }, | ||
| 186 | }; | ||
| 187 | |||
| 188 | struct pmx_dev spear320_pmx_uart2 = { | ||
| 189 | .name = "uart2", | ||
| 190 | .modes = pmx_uart2_modes, | ||
| 191 | .mode_count = ARRAY_SIZE(pmx_uart2_modes), | ||
| 192 | .enb_on_reset = 1, | ||
| 193 | }; | ||
| 194 | |||
| 195 | static struct pmx_dev_mode pmx_touchscreen_modes[] = { | ||
| 196 | { | ||
| 197 | .ids = AUTO_NET_SMII_MODE, | ||
| 198 | .mask = PMX_SSP_CS_MASK, | ||
| 199 | }, | ||
| 200 | }; | ||
| 201 | |||
| 202 | struct pmx_dev spear320_pmx_touchscreen = { | ||
| 203 | .name = "touchscreen", | ||
| 204 | .modes = pmx_touchscreen_modes, | ||
| 205 | .mode_count = ARRAY_SIZE(pmx_touchscreen_modes), | ||
| 206 | .enb_on_reset = 1, | ||
| 207 | }; | ||
| 208 | |||
| 209 | static struct pmx_dev_mode pmx_can_modes[] = { | ||
| 210 | { | ||
| 211 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE | AUTO_EXP_MODE, | ||
| 212 | .mask = PMX_GPIO_PIN2_MASK | PMX_GPIO_PIN3_MASK | | ||
| 213 | PMX_GPIO_PIN4_MASK | PMX_GPIO_PIN5_MASK, | ||
| 214 | }, | ||
| 215 | }; | ||
| 216 | |||
| 217 | struct pmx_dev spear320_pmx_can = { | ||
| 218 | .name = "can", | ||
| 219 | .modes = pmx_can_modes, | ||
| 220 | .mode_count = ARRAY_SIZE(pmx_can_modes), | ||
| 221 | .enb_on_reset = 1, | ||
| 222 | }; | ||
| 223 | |||
| 224 | static struct pmx_dev_mode pmx_sdhci_led_modes[] = { | ||
| 225 | { | ||
| 226 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
| 227 | .mask = PMX_SSP_CS_MASK, | ||
| 228 | }, | ||
| 229 | }; | ||
| 230 | |||
| 231 | struct pmx_dev spear320_pmx_sdhci_led = { | ||
| 232 | .name = "sdhci_led", | ||
| 233 | .modes = pmx_sdhci_led_modes, | ||
| 234 | .mode_count = ARRAY_SIZE(pmx_sdhci_led_modes), | ||
| 235 | .enb_on_reset = 1, | ||
| 236 | }; | ||
| 237 | |||
| 238 | static struct pmx_dev_mode pmx_pwm0_modes[] = { | ||
| 239 | { | ||
| 240 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
| 241 | .mask = PMX_UART0_MODEM_MASK, | ||
| 242 | }, { | ||
| 243 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
| 244 | .mask = PMX_MII_MASK, | ||
| 245 | }, | ||
| 246 | }; | ||
| 247 | |||
| 248 | struct pmx_dev spear320_pmx_pwm0 = { | ||
| 249 | .name = "pwm0", | ||
| 250 | .modes = pmx_pwm0_modes, | ||
| 251 | .mode_count = ARRAY_SIZE(pmx_pwm0_modes), | ||
| 252 | .enb_on_reset = 1, | ||
| 253 | }; | ||
| 254 | |||
| 255 | static struct pmx_dev_mode pmx_pwm1_modes[] = { | ||
| 256 | { | ||
| 257 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
| 258 | .mask = PMX_UART0_MODEM_MASK, | ||
| 259 | }, { | ||
| 260 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
| 261 | .mask = PMX_MII_MASK, | ||
| 262 | }, | ||
| 263 | }; | ||
| 264 | |||
| 265 | struct pmx_dev spear320_pmx_pwm1 = { | ||
| 266 | .name = "pwm1", | ||
| 267 | .modes = pmx_pwm1_modes, | ||
| 268 | .mode_count = ARRAY_SIZE(pmx_pwm1_modes), | ||
| 269 | .enb_on_reset = 1, | ||
| 270 | }; | ||
| 271 | |||
| 272 | static struct pmx_dev_mode pmx_pwm2_modes[] = { | ||
| 273 | { | ||
| 274 | .ids = AUTO_NET_SMII_MODE | AUTO_NET_MII_MODE, | ||
| 275 | .mask = PMX_SSP_CS_MASK, | ||
| 276 | }, { | ||
| 277 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
| 278 | .mask = PMX_MII_MASK, | ||
| 279 | }, | ||
| 280 | }; | ||
| 281 | |||
| 282 | struct pmx_dev spear320_pmx_pwm2 = { | ||
| 283 | .name = "pwm2", | ||
| 284 | .modes = pmx_pwm2_modes, | ||
| 285 | .mode_count = ARRAY_SIZE(pmx_pwm2_modes), | ||
| 286 | .enb_on_reset = 1, | ||
| 287 | }; | ||
| 288 | |||
| 289 | static struct pmx_dev_mode pmx_pwm3_modes[] = { | ||
| 290 | { | ||
| 291 | .ids = AUTO_EXP_MODE | SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE, | ||
| 292 | .mask = PMX_MII_MASK, | ||
| 293 | }, | ||
| 294 | }; | ||
| 295 | |||
| 296 | struct pmx_dev spear320_pmx_pwm3 = { | ||
| 297 | .name = "pwm3", | ||
| 298 | .modes = pmx_pwm3_modes, | ||
| 299 | .mode_count = ARRAY_SIZE(pmx_pwm3_modes), | ||
| 300 | .enb_on_reset = 1, | ||
| 301 | }; | ||
| 302 | |||
| 303 | static struct pmx_dev_mode pmx_ssp1_modes[] = { | ||
| 304 | { | ||
| 305 | .ids = SMALL_PRINTERS_MODE | AUTO_NET_SMII_MODE, | ||
| 306 | .mask = PMX_MII_MASK, | ||
| 307 | }, | ||
| 308 | }; | ||
| 309 | |||
| 310 | struct pmx_dev spear320_pmx_ssp1 = { | ||
| 311 | .name = "ssp1", | ||
| 312 | .modes = pmx_ssp1_modes, | ||
| 313 | .mode_count = ARRAY_SIZE(pmx_ssp1_modes), | ||
| 314 | .enb_on_reset = 1, | ||
| 315 | }; | ||
| 316 | |||
| 317 | static struct pmx_dev_mode pmx_ssp2_modes[] = { | ||
| 318 | { | ||
| 319 | .ids = AUTO_NET_SMII_MODE, | ||
| 320 | .mask = PMX_MII_MASK, | ||
| 321 | }, | ||
| 322 | }; | ||
| 323 | |||
| 324 | struct pmx_dev spear320_pmx_ssp2 = { | ||
| 325 | .name = "ssp2", | ||
| 326 | .modes = pmx_ssp2_modes, | ||
| 327 | .mode_count = ARRAY_SIZE(pmx_ssp2_modes), | ||
| 328 | .enb_on_reset = 1, | ||
| 329 | }; | ||
| 330 | |||
| 331 | static struct pmx_dev_mode pmx_mii1_modes[] = { | ||
| 332 | { | ||
| 333 | .ids = AUTO_NET_MII_MODE, | ||
| 334 | .mask = 0x0, | ||
| 335 | }, | ||
| 336 | }; | ||
| 337 | |||
| 338 | struct pmx_dev spear320_pmx_mii1 = { | ||
| 339 | .name = "mii1", | ||
| 340 | .modes = pmx_mii1_modes, | ||
| 341 | .mode_count = ARRAY_SIZE(pmx_mii1_modes), | ||
| 342 | .enb_on_reset = 1, | ||
| 343 | }; | ||
| 344 | |||
| 345 | static struct pmx_dev_mode pmx_smii0_modes[] = { | ||
| 346 | { | ||
| 347 | .ids = AUTO_NET_SMII_MODE | AUTO_EXP_MODE | SMALL_PRINTERS_MODE, | ||
| 348 | .mask = PMX_MII_MASK, | ||
| 349 | }, | ||
| 350 | }; | ||
| 351 | |||
| 352 | struct pmx_dev spear320_pmx_smii0 = { | ||
| 353 | .name = "smii0", | ||
| 354 | .modes = pmx_smii0_modes, | ||
| 355 | .mode_count = ARRAY_SIZE(pmx_smii0_modes), | ||
| 356 | .enb_on_reset = 1, | ||
| 357 | }; | ||
| 358 | |||
| 359 | static struct pmx_dev_mode pmx_smii1_modes[] = { | ||
| 360 | { | ||
| 361 | .ids = AUTO_NET_SMII_MODE | SMALL_PRINTERS_MODE, | ||
| 362 | .mask = PMX_MII_MASK, | ||
| 363 | }, | ||
| 364 | }; | ||
| 365 | |||
| 366 | struct pmx_dev spear320_pmx_smii1 = { | ||
| 367 | .name = "smii1", | ||
| 368 | .modes = pmx_smii1_modes, | ||
| 369 | .mode_count = ARRAY_SIZE(pmx_smii1_modes), | ||
| 370 | .enb_on_reset = 1, | ||
| 371 | }; | ||
| 372 | |||
| 373 | static struct pmx_dev_mode pmx_i2c1_modes[] = { | ||
| 374 | { | ||
| 375 | .ids = AUTO_EXP_MODE, | ||
| 376 | .mask = 0x0, | ||
| 377 | }, | ||
| 378 | }; | ||
| 379 | |||
| 380 | struct pmx_dev spear320_pmx_i2c1 = { | ||
| 381 | .name = "i2c1", | ||
| 382 | .modes = pmx_i2c1_modes, | ||
| 383 | .mode_count = ARRAY_SIZE(pmx_i2c1_modes), | ||
| 384 | .enb_on_reset = 1, | ||
| 385 | }; | ||
| 386 | |||
| 387 | /* pmx driver structure */ | ||
| 388 | static struct pmx_driver pmx_driver = { | ||
| 389 | .mode_reg = {.offset = MODE_CONFIG_REG, .mask = 0x00000007}, | ||
| 390 | .mux_reg = {.offset = PAD_MUX_CONFIG_REG, .mask = 0x00007fff}, | ||
| 391 | }; | ||
| 392 | |||
| 393 | /* spear3xx shared irq */ | 26 | /* spear3xx shared irq */ |
| 394 | static struct shirq_dev_config shirq_ras1_config[] = { | 27 | static struct shirq_dev_config shirq_ras1_config[] = { |
| 395 | { | 28 | { |
| @@ -514,27 +147,6 @@ static struct spear_shirq shirq_intrcomm_ras = { | |||
| 514 | }, | 147 | }, |
| 515 | }; | 148 | }; |
| 516 | 149 | ||
| 517 | /* padmux devices to enable */ | ||
| 518 | static struct pmx_dev *spear320_evb_pmx_devs[] = { | ||
| 519 | /* spear3xx specific devices */ | ||
| 520 | &spear3xx_pmx_i2c, | ||
| 521 | &spear3xx_pmx_ssp, | ||
| 522 | &spear3xx_pmx_mii, | ||
| 523 | &spear3xx_pmx_uart0, | ||
| 524 | |||
| 525 | /* spear320 specific devices */ | ||
| 526 | &spear320_pmx_fsmc, | ||
| 527 | &spear320_pmx_sdhci, | ||
| 528 | &spear320_pmx_i2s, | ||
| 529 | &spear320_pmx_uart1, | ||
| 530 | &spear320_pmx_uart2, | ||
| 531 | &spear320_pmx_can, | ||
| 532 | &spear320_pmx_pwm0, | ||
| 533 | &spear320_pmx_pwm1, | ||
| 534 | &spear320_pmx_pwm2, | ||
| 535 | &spear320_pmx_mii1, | ||
| 536 | }; | ||
| 537 | |||
| 538 | /* DMAC platform data's slave info */ | 150 | /* DMAC platform data's slave info */ |
| 539 | struct pl08x_channel_data spear320_dma_info[] = { | 151 | struct pl08x_channel_data spear320_dma_info[] = { |
| 540 | { | 152 | { |
| @@ -772,7 +384,7 @@ static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = { | |||
| 772 | static void __init spear320_dt_init(void) | 384 | static void __init spear320_dt_init(void) |
| 773 | { | 385 | { |
| 774 | void __iomem *base; | 386 | void __iomem *base; |
| 775 | int ret = 0; | 387 | int ret; |
| 776 | 388 | ||
| 777 | pl080_plat_data.slave_channels = spear320_dma_info; | 389 | pl080_plat_data.slave_channels = spear320_dma_info; |
| 778 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info); | 390 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info); |
| @@ -801,19 +413,6 @@ static void __init spear320_dt_init(void) | |||
| 801 | if (ret) | 413 | if (ret) |
| 802 | pr_err("Error registering Shared IRQ 4\n"); | 414 | pr_err("Error registering Shared IRQ 4\n"); |
| 803 | } | 415 | } |
| 804 | |||
| 805 | if (of_machine_is_compatible("st,spear320-evb")) { | ||
| 806 | /* pmx initialization */ | ||
| 807 | pmx_driver.base = base; | ||
| 808 | pmx_driver.mode = &spear320_auto_net_mii_mode; | ||
| 809 | pmx_driver.devs = spear320_evb_pmx_devs; | ||
| 810 | pmx_driver.devs_count = ARRAY_SIZE(spear320_evb_pmx_devs); | ||
| 811 | |||
| 812 | ret = pmx_register(&pmx_driver); | ||
| 813 | if (ret) | ||
| 814 | pr_err("padmux: registration failed. err no: %d\n", | ||
| 815 | ret); | ||
| 816 | } | ||
| 817 | } | 416 | } |
| 818 | 417 | ||
| 819 | static const char * const spear320_dt_board_compat[] = { | 418 | static const char * const spear320_dt_board_compat[] = { |
diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c index 17d4ac9a95e1..12bf879a9ef1 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear3xx/spear3xx.c | |||
| @@ -23,431 +23,6 @@ | |||
| 23 | #include <mach/generic.h> | 23 | #include <mach/generic.h> |
| 24 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
| 25 | 25 | ||
| 26 | /* pad multiplexing support */ | ||
| 27 | /* devices */ | ||
| 28 | static struct pmx_dev_mode pmx_firda_modes[] = { | ||
| 29 | { | ||
| 30 | .ids = 0xffffffff, | ||
| 31 | .mask = PMX_FIRDA_MASK, | ||
| 32 | }, | ||
| 33 | }; | ||
| 34 | |||
| 35 | struct pmx_dev spear3xx_pmx_firda = { | ||
| 36 | .name = "firda", | ||
| 37 | .modes = pmx_firda_modes, | ||
| 38 | .mode_count = ARRAY_SIZE(pmx_firda_modes), | ||
| 39 | .enb_on_reset = 0, | ||
| 40 | }; | ||
| 41 | |||
| 42 | static struct pmx_dev_mode pmx_i2c_modes[] = { | ||
| 43 | { | ||
| 44 | .ids = 0xffffffff, | ||
| 45 | .mask = PMX_I2C_MASK, | ||
| 46 | }, | ||
| 47 | }; | ||
| 48 | |||
| 49 | struct pmx_dev spear3xx_pmx_i2c = { | ||
| 50 | .name = "i2c", | ||
| 51 | .modes = pmx_i2c_modes, | ||
| 52 | .mode_count = ARRAY_SIZE(pmx_i2c_modes), | ||
| 53 | .enb_on_reset = 0, | ||
| 54 | }; | ||
| 55 | |||
| 56 | static struct pmx_dev_mode pmx_ssp_cs_modes[] = { | ||
| 57 | { | ||
| 58 | .ids = 0xffffffff, | ||
| 59 | .mask = PMX_SSP_CS_MASK, | ||
| 60 | }, | ||
| 61 | }; | ||
| 62 | |||
| 63 | struct pmx_dev spear3xx_pmx_ssp_cs = { | ||
| 64 | .name = "ssp_chip_selects", | ||
| 65 | .modes = pmx_ssp_cs_modes, | ||
| 66 | .mode_count = ARRAY_SIZE(pmx_ssp_cs_modes), | ||
| 67 | .enb_on_reset = 0, | ||
| 68 | }; | ||
| 69 | |||
| 70 | static struct pmx_dev_mode pmx_ssp_modes[] = { | ||
| 71 | { | ||
| 72 | .ids = 0xffffffff, | ||
| 73 | .mask = PMX_SSP_MASK, | ||
| 74 | }, | ||
| 75 | }; | ||
| 76 | |||
| 77 | struct pmx_dev spear3xx_pmx_ssp = { | ||
| 78 | .name = "ssp", | ||
| 79 | .modes = pmx_ssp_modes, | ||
| 80 | .mode_count = ARRAY_SIZE(pmx_ssp_modes), | ||
| 81 | .enb_on_reset = 0, | ||
| 82 | }; | ||
| 83 | |||
| 84 | static struct pmx_dev_mode pmx_mii_modes[] = { | ||
| 85 | { | ||
| 86 | .ids = 0xffffffff, | ||
| 87 | .mask = PMX_MII_MASK, | ||
| 88 | }, | ||
| 89 | }; | ||
| 90 | |||
| 91 | struct pmx_dev spear3xx_pmx_mii = { | ||
| 92 | .name = "mii", | ||
| 93 | .modes = pmx_mii_modes, | ||
| 94 | .mode_count = ARRAY_SIZE(pmx_mii_modes), | ||
| 95 | .enb_on_reset = 0, | ||
| 96 | }; | ||
| 97 | |||
| 98 | static struct pmx_dev_mode pmx_gpio_pin0_modes[] = { | ||
| 99 | { | ||
| 100 | .ids = 0xffffffff, | ||
| 101 | .mask = PMX_GPIO_PIN0_MASK, | ||
| 102 | }, | ||
| 103 | }; | ||
| 104 | |||
| 105 | struct pmx_dev spear3xx_pmx_gpio_pin0 = { | ||
| 106 | .name = "gpio_pin0", | ||
| 107 | .modes = pmx_gpio_pin0_modes, | ||
| 108 | .mode_count = ARRAY_SIZE(pmx_gpio_pin0_modes), | ||
| 109 | .enb_on_reset = 0, | ||
| 110 | }; | ||
| 111 | |||
| 112 | static struct pmx_dev_mode pmx_gpio_pin1_modes[] = { | ||
| 113 | { | ||
| 114 | .ids = 0xffffffff, | ||
| 115 | .mask = PMX_GPIO_PIN1_MASK, | ||
| 116 | }, | ||
| 117 | }; | ||
| 118 | |||
| 119 | struct pmx_dev spear3xx_pmx_gpio_pin1 = { | ||
| 120 | .name = "gpio_pin1", | ||
| 121 | .modes = pmx_gpio_pin1_modes, | ||
| 122 | .mode_count = ARRAY_SIZE(pmx_gpio_pin1_modes), | ||
| 123 | .enb_on_reset = 0, | ||
| 124 | }; | ||
| 125 | |||
| 126 | static struct pmx_dev_mode pmx_gpio_pin2_modes[] = { | ||
| 127 | { | ||
| 128 | .ids = 0xffffffff, | ||
| 129 | .mask = PMX_GPIO_PIN2_MASK, | ||
| 130 | }, | ||
| 131 | }; | ||
| 132 | |||
| 133 | struct pmx_dev spear3xx_pmx_gpio_pin2 = { | ||
| 134 | .name = "gpio_pin2", | ||
| 135 | .modes = pmx_gpio_pin2_modes, | ||
| 136 | .mode_count = ARRAY_SIZE(pmx_gpio_pin2_modes), | ||
| 137 | .enb_on_reset = 0, | ||
| 138 | }; | ||
| 139 | |||
| 140 | static struct pmx_dev_mode pmx_gpio_pin3_modes[] = { | ||
| 141 | { | ||
| 142 | .ids = 0xffffffff, | ||
| 143 | .mask = PMX_GPIO_PIN3_MASK, | ||
| 144 | }, | ||
| 145 | }; | ||
| 146 | |||
| 147 | struct pmx_dev spear3xx_pmx_gpio_pin3 = { | ||
| 148 | .name = "gpio_pin3", | ||
| 149 | .modes = pmx_gpio_pin3_modes, | ||
| 150 | .mode_count = ARRAY_SIZE(pmx_gpio_pin3_modes), | ||
| 151 | .enb_on_reset = 0, | ||
| 152 | }; | ||
| 153 | |||
| 154 | static struct pmx_dev_mode pmx_gpio_pin4_modes[] = { | ||
| 155 | { | ||
| 156 | .ids = 0xffffffff, | ||
| 157 | .mask = PMX_GPIO_PIN4_MASK, | ||
| 158 | }, | ||
| 159 | }; | ||
| 160 | |||
| 161 | struct pmx_dev spear3xx_pmx_gpio_pin4 = { | ||
| 162 | .name = "gpio_pin4", | ||
| 163 | .modes = pmx_gpio_pin4_modes, | ||
| 164 | .mode_count = ARRAY_SIZE(pmx_gpio_pin4_modes), | ||
| 165 | .enb_on_reset = 0, | ||
| 166 | }; | ||
| 167 | |||
| 168 | static struct pmx_dev_mode pmx_gpio_pin5_modes[] = { | ||
| 169 | { | ||
| 170 | .ids = 0xffffffff, | ||
| 171 | .mask = PMX_GPIO_PIN5_MASK, | ||
| 172 | }, | ||
| 173 | }; | ||
| 174 | |||
| 175 | struct pmx_dev spear3xx_pmx_gpio_pin5 = { | ||
| 176 | .name = "gpio_pin5", | ||
| 177 | .modes = pmx_gpio_pin5_modes, | ||
| 178 | .mode_count = ARRAY_SIZE(pmx_gpio_pin5_modes), | ||
| 179 | .enb_on_reset = 0, | ||
| 180 | }; | ||
| 181 | |||
| 182 | static struct pmx_dev_mode pmx_uart0_modem_modes[] = { | ||
| 183 | { | ||
| 184 | .ids = 0xffffffff, | ||
| 185 | .mask = PMX_UART0_MODEM_MASK, | ||
| 186 | }, | ||
| 187 | }; | ||
| 188 | |||
| 189 | struct pmx_dev spear3xx_pmx_uart0_modem = { | ||
| 190 | .name = "uart0_modem", | ||
| 191 | .modes = pmx_uart0_modem_modes, | ||
| 192 | .mode_count = ARRAY_SIZE(pmx_uart0_modem_modes), | ||
| 193 | .enb_on_reset = 0, | ||
| 194 | }; | ||
| 195 | |||
| 196 | static struct pmx_dev_mode pmx_uart0_modes[] = { | ||
| 197 | { | ||
| 198 | .ids = 0xffffffff, | ||
| 199 | .mask = PMX_UART0_MASK, | ||
| 200 | }, | ||
| 201 | }; | ||
| 202 | |||
| 203 | struct pmx_dev spear3xx_pmx_uart0 = { | ||
| 204 | .name = "uart0", | ||
| 205 | .modes = pmx_uart0_modes, | ||
| 206 | .mode_count = ARRAY_SIZE(pmx_uart0_modes), | ||
| 207 | .enb_on_reset = 0, | ||
| 208 | }; | ||
| 209 | |||
| 210 | static struct pmx_dev_mode pmx_timer_3_4_modes[] = { | ||
| 211 | { | ||
| 212 | .ids = 0xffffffff, | ||
| 213 | .mask = PMX_TIMER_3_4_MASK, | ||
| 214 | }, | ||
| 215 | }; | ||
| 216 | |||
| 217 | struct pmx_dev spear3xx_pmx_timer_3_4 = { | ||
| 218 | .name = "timer_3_4", | ||
| 219 | .modes = pmx_timer_3_4_modes, | ||
| 220 | .mode_count = ARRAY_SIZE(pmx_timer_3_4_modes), | ||
| 221 | .enb_on_reset = 0, | ||
| 222 | }; | ||
| 223 | |||
| 224 | static struct pmx_dev_mode pmx_timer_1_2_modes[] = { | ||
| 225 | { | ||
| 226 | .ids = 0xffffffff, | ||
| 227 | .mask = PMX_TIMER_1_2_MASK, | ||
| 228 | }, | ||
| 229 | }; | ||
| 230 | |||
| 231 | struct pmx_dev spear3xx_pmx_timer_1_2 = { | ||
| 232 | .name = "timer_1_2", | ||
| 233 | .modes = pmx_timer_1_2_modes, | ||
| 234 | .mode_count = ARRAY_SIZE(pmx_timer_1_2_modes), | ||
| 235 | .enb_on_reset = 0, | ||
| 236 | }; | ||
| 237 | |||
| 238 | #if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320) | ||
| 239 | /* plgpios devices */ | ||
| 240 | static struct pmx_dev_mode pmx_plgpio_0_1_modes[] = { | ||
| 241 | { | ||
| 242 | .ids = 0x00, | ||
| 243 | .mask = PMX_FIRDA_MASK, | ||
| 244 | }, | ||
| 245 | }; | ||
| 246 | |||
| 247 | struct pmx_dev spear3xx_pmx_plgpio_0_1 = { | ||
| 248 | .name = "plgpio 0 and 1", | ||
| 249 | .modes = pmx_plgpio_0_1_modes, | ||
| 250 | .mode_count = ARRAY_SIZE(pmx_plgpio_0_1_modes), | ||
| 251 | .enb_on_reset = 1, | ||
| 252 | }; | ||
| 253 | |||
| 254 | static struct pmx_dev_mode pmx_plgpio_2_3_modes[] = { | ||
| 255 | { | ||
| 256 | .ids = 0x00, | ||
| 257 | .mask = PMX_UART0_MASK, | ||
| 258 | }, | ||
| 259 | }; | ||
| 260 | |||
| 261 | struct pmx_dev spear3xx_pmx_plgpio_2_3 = { | ||
| 262 | .name = "plgpio 2 and 3", | ||
| 263 | .modes = pmx_plgpio_2_3_modes, | ||
| 264 | .mode_count = ARRAY_SIZE(pmx_plgpio_2_3_modes), | ||
| 265 | .enb_on_reset = 1, | ||
| 266 | }; | ||
| 267 | |||
| 268 | static struct pmx_dev_mode pmx_plgpio_4_5_modes[] = { | ||
| 269 | { | ||
| 270 | .ids = 0x00, | ||
| 271 | .mask = PMX_I2C_MASK, | ||
| 272 | }, | ||
| 273 | }; | ||
| 274 | |||
| 275 | struct pmx_dev spear3xx_pmx_plgpio_4_5 = { | ||
| 276 | .name = "plgpio 4 and 5", | ||
| 277 | .modes = pmx_plgpio_4_5_modes, | ||
| 278 | .mode_count = ARRAY_SIZE(pmx_plgpio_4_5_modes), | ||
| 279 | .enb_on_reset = 1, | ||
| 280 | }; | ||
| 281 | |||
| 282 | static struct pmx_dev_mode pmx_plgpio_6_9_modes[] = { | ||
| 283 | { | ||
| 284 | .ids = 0x00, | ||
| 285 | .mask = PMX_SSP_MASK, | ||
| 286 | }, | ||
| 287 | }; | ||
| 288 | |||
| 289 | struct pmx_dev spear3xx_pmx_plgpio_6_9 = { | ||
| 290 | .name = "plgpio 6 to 9", | ||
| 291 | .modes = pmx_plgpio_6_9_modes, | ||
| 292 | .mode_count = ARRAY_SIZE(pmx_plgpio_6_9_modes), | ||
| 293 | .enb_on_reset = 1, | ||
| 294 | }; | ||
| 295 | |||
| 296 | static struct pmx_dev_mode pmx_plgpio_10_27_modes[] = { | ||
| 297 | { | ||
| 298 | .ids = 0x00, | ||
| 299 | .mask = PMX_MII_MASK, | ||
| 300 | }, | ||
| 301 | }; | ||
| 302 | |||
| 303 | struct pmx_dev spear3xx_pmx_plgpio_10_27 = { | ||
| 304 | .name = "plgpio 10 to 27", | ||
| 305 | .modes = pmx_plgpio_10_27_modes, | ||
| 306 | .mode_count = ARRAY_SIZE(pmx_plgpio_10_27_modes), | ||
| 307 | .enb_on_reset = 1, | ||
| 308 | }; | ||
| 309 | |||
| 310 | static struct pmx_dev_mode pmx_plgpio_28_modes[] = { | ||
| 311 | { | ||
| 312 | .ids = 0x00, | ||
| 313 | .mask = PMX_GPIO_PIN0_MASK, | ||
| 314 | }, | ||
| 315 | }; | ||
| 316 | |||
| 317 | struct pmx_dev spear3xx_pmx_plgpio_28 = { | ||
| 318 | .name = "plgpio 28", | ||
| 319 | .modes = pmx_plgpio_28_modes, | ||
| 320 | .mode_count = ARRAY_SIZE(pmx_plgpio_28_modes), | ||
| 321 | .enb_on_reset = 1, | ||
| 322 | }; | ||
| 323 | |||
| 324 | static struct pmx_dev_mode pmx_plgpio_29_modes[] = { | ||
| 325 | { | ||
| 326 | .ids = 0x00, | ||
| 327 | .mask = PMX_GPIO_PIN1_MASK, | ||
| 328 | }, | ||
| 329 | }; | ||
| 330 | |||
| 331 | struct pmx_dev spear3xx_pmx_plgpio_29 = { | ||
| 332 | .name = "plgpio 29", | ||
| 333 | .modes = pmx_plgpio_29_modes, | ||
| 334 | .mode_count = ARRAY_SIZE(pmx_plgpio_29_modes), | ||
| 335 | .enb_on_reset = 1, | ||
| 336 | }; | ||
| 337 | |||
| 338 | static struct pmx_dev_mode pmx_plgpio_30_modes[] = { | ||
| 339 | { | ||
| 340 | .ids = 0x00, | ||
| 341 | .mask = PMX_GPIO_PIN2_MASK, | ||
| 342 | }, | ||
| 343 | }; | ||
| 344 | |||
| 345 | struct pmx_dev spear3xx_pmx_plgpio_30 = { | ||
| 346 | .name = "plgpio 30", | ||
| 347 | .modes = pmx_plgpio_30_modes, | ||
| 348 | .mode_count = ARRAY_SIZE(pmx_plgpio_30_modes), | ||
| 349 | .enb_on_reset = 1, | ||
| 350 | }; | ||
| 351 | |||
| 352 | static struct pmx_dev_mode pmx_plgpio_31_modes[] = { | ||
| 353 | { | ||
| 354 | .ids = 0x00, | ||
| 355 | .mask = PMX_GPIO_PIN3_MASK, | ||
| 356 | }, | ||
| 357 | }; | ||
| 358 | |||
| 359 | struct pmx_dev spear3xx_pmx_plgpio_31 = { | ||
| 360 | .name = "plgpio 31", | ||
| 361 | .modes = pmx_plgpio_31_modes, | ||
| 362 | .mode_count = ARRAY_SIZE(pmx_plgpio_31_modes), | ||
| 363 | .enb_on_reset = 1, | ||
| 364 | }; | ||
| 365 | |||
| 366 | static struct pmx_dev_mode pmx_plgpio_32_modes[] = { | ||
| 367 | { | ||
| 368 | .ids = 0x00, | ||
| 369 | .mask = PMX_GPIO_PIN4_MASK, | ||
| 370 | }, | ||
| 371 | }; | ||
| 372 | |||
| 373 | struct pmx_dev spear3xx_pmx_plgpio_32 = { | ||
| 374 | .name = "plgpio 32", | ||
| 375 | .modes = pmx_plgpio_32_modes, | ||
| 376 | .mode_count = ARRAY_SIZE(pmx_plgpio_32_modes), | ||
| 377 | .enb_on_reset = 1, | ||
| 378 | }; | ||
| 379 | |||
| 380 | static struct pmx_dev_mode pmx_plgpio_33_modes[] = { | ||
| 381 | { | ||
| 382 | .ids = 0x00, | ||
| 383 | .mask = PMX_GPIO_PIN5_MASK, | ||
| 384 | }, | ||
| 385 | }; | ||
| 386 | |||
| 387 | struct pmx_dev spear3xx_pmx_plgpio_33 = { | ||
| 388 | .name = "plgpio 33", | ||
| 389 | .modes = pmx_plgpio_33_modes, | ||
| 390 | .mode_count = ARRAY_SIZE(pmx_plgpio_33_modes), | ||
| 391 | .enb_on_reset = 1, | ||
| 392 | }; | ||
| 393 | |||
| 394 | static struct pmx_dev_mode pmx_plgpio_34_36_modes[] = { | ||
| 395 | { | ||
| 396 | .ids = 0x00, | ||
| 397 | .mask = PMX_SSP_CS_MASK, | ||
| 398 | }, | ||
| 399 | }; | ||
| 400 | |||
| 401 | struct pmx_dev spear3xx_pmx_plgpio_34_36 = { | ||
| 402 | .name = "plgpio 34 to 36", | ||
| 403 | .modes = pmx_plgpio_34_36_modes, | ||
| 404 | .mode_count = ARRAY_SIZE(pmx_plgpio_34_36_modes), | ||
| 405 | .enb_on_reset = 1, | ||
| 406 | }; | ||
| 407 | |||
| 408 | static struct pmx_dev_mode pmx_plgpio_37_42_modes[] = { | ||
| 409 | { | ||
| 410 | .ids = 0x00, | ||
| 411 | .mask = PMX_UART0_MODEM_MASK, | ||
| 412 | }, | ||
| 413 | }; | ||
| 414 | |||
| 415 | struct pmx_dev spear3xx_pmx_plgpio_37_42 = { | ||
| 416 | .name = "plgpio 37 to 42", | ||
| 417 | .modes = pmx_plgpio_37_42_modes, | ||
| 418 | .mode_count = ARRAY_SIZE(pmx_plgpio_37_42_modes), | ||
| 419 | .enb_on_reset = 1, | ||
| 420 | }; | ||
| 421 | |||
| 422 | static struct pmx_dev_mode pmx_plgpio_43_44_47_48_modes[] = { | ||
| 423 | { | ||
| 424 | .ids = 0x00, | ||
| 425 | .mask = PMX_TIMER_1_2_MASK, | ||
| 426 | }, | ||
| 427 | }; | ||
| 428 | |||
| 429 | struct pmx_dev spear3xx_pmx_plgpio_43_44_47_48 = { | ||
| 430 | .name = "plgpio 43, 44, 47 and 48", | ||
| 431 | .modes = pmx_plgpio_43_44_47_48_modes, | ||
| 432 | .mode_count = ARRAY_SIZE(pmx_plgpio_43_44_47_48_modes), | ||
| 433 | .enb_on_reset = 1, | ||
| 434 | }; | ||
| 435 | |||
| 436 | static struct pmx_dev_mode pmx_plgpio_45_46_49_50_modes[] = { | ||
| 437 | { | ||
| 438 | .ids = 0x00, | ||
| 439 | .mask = PMX_TIMER_3_4_MASK, | ||
| 440 | }, | ||
| 441 | }; | ||
| 442 | |||
| 443 | struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50 = { | ||
| 444 | .name = "plgpio 45, 46, 49 and 50", | ||
| 445 | .modes = pmx_plgpio_45_46_49_50_modes, | ||
| 446 | .mode_count = ARRAY_SIZE(pmx_plgpio_45_46_49_50_modes), | ||
| 447 | .enb_on_reset = 1, | ||
| 448 | }; | ||
| 449 | #endif /* CONFIG_MACH_SPEAR310 || CONFIG_MACH_SPEAR320 */ | ||
| 450 | |||
| 451 | /* ssp device registration */ | 26 | /* ssp device registration */ |
| 452 | struct pl022_ssp_controller pl022_plat_data = { | 27 | struct pl022_ssp_controller pl022_plat_data = { |
| 453 | .bus_id = 0, | 28 | .bus_id = 0, |
diff --git a/arch/arm/plat-spear/Makefile b/arch/arm/plat-spear/Makefile index 4af6258d0fee..7744802c83e7 100644 --- a/arch/arm/plat-spear/Makefile +++ b/arch/arm/plat-spear/Makefile | |||
| @@ -5,4 +5,4 @@ | |||
| 5 | # Common support | 5 | # Common support |
| 6 | obj-y := clock.o restart.o time.o pl080.o | 6 | obj-y := clock.o restart.o time.o pl080.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_ARCH_SPEAR3XX) += shirq.o padmux.o | 8 | obj-$(CONFIG_ARCH_SPEAR3XX) += shirq.o |
diff --git a/arch/arm/plat-spear/include/plat/padmux.h b/arch/arm/plat-spear/include/plat/padmux.h deleted file mode 100644 index 877f3adcf610..000000000000 --- a/arch/arm/plat-spear/include/plat/padmux.h +++ /dev/null | |||
| @@ -1,92 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/plat-spear/include/plat/padmux.h | ||
| 3 | * | ||
| 4 | * SPEAr platform specific gpio pads muxing file | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __PLAT_PADMUX_H | ||
| 15 | #define __PLAT_PADMUX_H | ||
| 16 | |||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | /* | ||
| 20 | * struct pmx_reg: configuration structure for mode reg and mux reg | ||
| 21 | * | ||
| 22 | * offset: offset of mode reg | ||
| 23 | * mask: mask of mode reg | ||
| 24 | */ | ||
| 25 | struct pmx_reg { | ||
| 26 | u32 offset; | ||
| 27 | u32 mask; | ||
| 28 | }; | ||
| 29 | |||
| 30 | /* | ||
| 31 | * struct pmx_dev_mode: configuration structure every group of modes of a device | ||
| 32 | * | ||
| 33 | * ids: all modes for this configuration | ||
| 34 | * mask: mask for supported mode | ||
| 35 | */ | ||
| 36 | struct pmx_dev_mode { | ||
| 37 | u32 ids; | ||
| 38 | u32 mask; | ||
| 39 | }; | ||
| 40 | |||
| 41 | /* | ||
| 42 | * struct pmx_mode: mode definition structure | ||
| 43 | * | ||
| 44 | * name: mode name | ||
| 45 | * mask: mode mask | ||
| 46 | */ | ||
| 47 | struct pmx_mode { | ||
| 48 | char *name; | ||
| 49 | u32 id; | ||
| 50 | u32 mask; | ||
| 51 | }; | ||
| 52 | |||
| 53 | /* | ||
| 54 | * struct pmx_dev: device definition structure | ||
| 55 | * | ||
| 56 | * name: device name | ||
| 57 | * modes: device configuration array for different modes supported | ||
| 58 | * mode_count: size of modes array | ||
| 59 | * is_active: is peripheral active/enabled | ||
| 60 | * enb_on_reset: if 1, mask bits to be cleared in reg otherwise to be set in reg | ||
| 61 | */ | ||
| 62 | struct pmx_dev { | ||
| 63 | char *name; | ||
| 64 | struct pmx_dev_mode *modes; | ||
| 65 | u8 mode_count; | ||
| 66 | bool is_active; | ||
| 67 | bool enb_on_reset; | ||
| 68 | }; | ||
| 69 | |||
| 70 | /* | ||
| 71 | * struct pmx_driver: driver definition structure | ||
| 72 | * | ||
| 73 | * mode: mode to be set | ||
| 74 | * devs: array of pointer to pmx devices | ||
| 75 | * devs_count: ARRAY_SIZE of devs | ||
| 76 | * base: base address of soc config registers | ||
| 77 | * mode_reg: structure of mode config register | ||
| 78 | * mux_reg: structure of device mux config register | ||
| 79 | */ | ||
| 80 | struct pmx_driver { | ||
| 81 | struct pmx_mode *mode; | ||
| 82 | struct pmx_dev **devs; | ||
| 83 | u8 devs_count; | ||
| 84 | u32 *base; | ||
| 85 | struct pmx_reg mode_reg; | ||
| 86 | struct pmx_reg mux_reg; | ||
| 87 | }; | ||
| 88 | |||
| 89 | /* pmx functions */ | ||
| 90 | int pmx_register(struct pmx_driver *driver); | ||
| 91 | |||
| 92 | #endif /* __PLAT_PADMUX_H */ | ||
diff --git a/arch/arm/plat-spear/padmux.c b/arch/arm/plat-spear/padmux.c deleted file mode 100644 index 555eec6dc1cb..000000000000 --- a/arch/arm/plat-spear/padmux.c +++ /dev/null | |||
| @@ -1,164 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/plat-spear/include/plat/padmux.c | ||
| 3 | * | ||
| 4 | * SPEAr platform specific gpio pads muxing source file | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 ST Microelectronics | ||
| 7 | * Viresh Kumar<viresh.kumar@st.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/err.h> | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/slab.h> | ||
| 17 | #include <plat/padmux.h> | ||
| 18 | |||
| 19 | /* | ||
| 20 | * struct pmx: pmx definition structure | ||
| 21 | * | ||
| 22 | * base: base address of configuration registers | ||
| 23 | * mode_reg: mode configurations | ||
| 24 | * mux_reg: muxing configurations | ||
| 25 | * active_mode: pointer to current active mode | ||
| 26 | */ | ||
| 27 | struct pmx { | ||
| 28 | u32 base; | ||
| 29 | struct pmx_reg mode_reg; | ||
| 30 | struct pmx_reg mux_reg; | ||
| 31 | struct pmx_mode *active_mode; | ||
| 32 | }; | ||
| 33 | |||
| 34 | static struct pmx *pmx; | ||
| 35 | |||
| 36 | /** | ||
| 37 | * pmx_mode_set - Enables an multiplexing mode | ||
| 38 | * @mode - pointer to pmx mode | ||
| 39 | * | ||
| 40 | * It will set mode of operation in hardware. | ||
| 41 | * Returns -ve on Err otherwise 0 | ||
| 42 | */ | ||
| 43 | static int pmx_mode_set(struct pmx_mode *mode) | ||
| 44 | { | ||
| 45 | u32 val; | ||
| 46 | |||
| 47 | if (!mode->name) | ||
| 48 | return -EFAULT; | ||
| 49 | |||
| 50 | pmx->active_mode = mode; | ||
| 51 | |||
| 52 | val = readl(pmx->base + pmx->mode_reg.offset); | ||
| 53 | val &= ~pmx->mode_reg.mask; | ||
| 54 | val |= mode->mask & pmx->mode_reg.mask; | ||
| 55 | writel(val, pmx->base + pmx->mode_reg.offset); | ||
| 56 | |||
| 57 | return 0; | ||
| 58 | } | ||
| 59 | |||
| 60 | /** | ||
| 61 | * pmx_devs_enable - Enables list of devices | ||
| 62 | * @devs - pointer to pmx device array | ||
| 63 | * @count - number of devices to enable | ||
| 64 | * | ||
| 65 | * It will enable pads for all required peripherals once and only once. | ||
| 66 | * If peripheral is not supported by current mode then request is rejected. | ||
| 67 | * Conflicts between peripherals are not handled and peripherals will be | ||
| 68 | * enabled in the order they are present in pmx_dev array. | ||
| 69 | * In case of conflicts last peripheral enabled will be present. | ||
| 70 | * Returns -ve on Err otherwise 0 | ||
| 71 | */ | ||
| 72 | static int pmx_devs_enable(struct pmx_dev **devs, u8 count) | ||
| 73 | { | ||
| 74 | u32 val, i, mask; | ||
| 75 | |||
| 76 | if (!count) | ||
| 77 | return -EINVAL; | ||
| 78 | |||
| 79 | val = readl(pmx->base + pmx->mux_reg.offset); | ||
| 80 | for (i = 0; i < count; i++) { | ||
| 81 | u8 j = 0; | ||
| 82 | |||
| 83 | if (!devs[i]->name || !devs[i]->modes) { | ||
| 84 | printk(KERN_ERR "padmux: dev name or modes is null\n"); | ||
| 85 | continue; | ||
| 86 | } | ||
| 87 | /* check if peripheral exists in active mode */ | ||
| 88 | if (pmx->active_mode) { | ||
| 89 | bool found = false; | ||
| 90 | for (j = 0; j < devs[i]->mode_count; j++) { | ||
| 91 | if (devs[i]->modes[j].ids & | ||
| 92 | pmx->active_mode->id) { | ||
| 93 | found = true; | ||
| 94 | break; | ||
| 95 | } | ||
| 96 | } | ||
| 97 | if (found == false) { | ||
| 98 | printk(KERN_ERR "%s device not available in %s"\ | ||
| 99 | "mode\n", devs[i]->name, | ||
| 100 | pmx->active_mode->name); | ||
| 101 | continue; | ||
| 102 | } | ||
| 103 | } | ||
| 104 | |||
| 105 | /* enable peripheral */ | ||
| 106 | mask = devs[i]->modes[j].mask & pmx->mux_reg.mask; | ||
| 107 | if (devs[i]->enb_on_reset) | ||
| 108 | val &= ~mask; | ||
| 109 | else | ||
| 110 | val |= mask; | ||
| 111 | |||
| 112 | devs[i]->is_active = true; | ||
| 113 | } | ||
| 114 | writel(val, pmx->base + pmx->mux_reg.offset); | ||
| 115 | kfree(pmx); | ||
| 116 | |||
| 117 | /* this will ensure that multiplexing can't be changed now */ | ||
| 118 | pmx = (struct pmx *)-1; | ||
| 119 | |||
| 120 | return 0; | ||
| 121 | } | ||
| 122 | |||
| 123 | /** | ||
| 124 | * pmx_register - registers a platform requesting pad mux feature | ||
| 125 | * @driver - pointer to driver structure containing driver specific parameters | ||
| 126 | * | ||
| 127 | * Also this must be called only once. This will allocate memory for pmx | ||
| 128 | * structure, will call pmx_mode_set, will call pmx_devs_enable. | ||
| 129 | * Returns -ve on Err otherwise 0 | ||
| 130 | */ | ||
| 131 | int pmx_register(struct pmx_driver *driver) | ||
| 132 | { | ||
| 133 | int ret = 0; | ||
| 134 | |||
| 135 | if (pmx) | ||
| 136 | return -EPERM; | ||
| 137 | if (!driver->base || !driver->devs) | ||
| 138 | return -EFAULT; | ||
| 139 | |||
| 140 | pmx = kzalloc(sizeof(*pmx), GFP_KERNEL); | ||
| 141 | if (!pmx) | ||
| 142 | return -ENOMEM; | ||
| 143 | |||
| 144 | pmx->base = (u32)driver->base; | ||
| 145 | pmx->mode_reg.offset = driver->mode_reg.offset; | ||
| 146 | pmx->mode_reg.mask = driver->mode_reg.mask; | ||
| 147 | pmx->mux_reg.offset = driver->mux_reg.offset; | ||
| 148 | pmx->mux_reg.mask = driver->mux_reg.mask; | ||
| 149 | |||
| 150 | /* choose mode to enable */ | ||
| 151 | if (driver->mode) { | ||
| 152 | ret = pmx_mode_set(driver->mode); | ||
| 153 | if (ret) | ||
| 154 | goto pmx_fail; | ||
| 155 | } | ||
| 156 | ret = pmx_devs_enable(driver->devs, driver->devs_count); | ||
| 157 | if (ret) | ||
| 158 | goto pmx_fail; | ||
| 159 | |||
| 160 | return 0; | ||
| 161 | |||
| 162 | pmx_fail: | ||
| 163 | return ret; | ||
| 164 | } | ||
