Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'imx-dt-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/late

Pull "The i.MX device tree updates for 4.1" from Shawn Guo:

- Convert GPC controller to use stacked interrupt domains
- Add power domain descriptions for i.MX6 platforms
- Improve i.MX25 pin function defines
- Disable PWM devices in <soc>.dtsi by default and enable it at board
level dts where the device is actually available.
- Define labels for SNVS RTC device to ease the board description,
where an external RTC is available.
- Add dr_mode host setting to all i.MX host-only USB instances
- Support Miscellaneous System Control Module (MSCM) for VF610
- Add initial i.MX6SL WaRP Board support
- Add i.MX6SX SDB revision B board support
- A bunch of imx28-apf28dev board updates, including gpio polarity
correction and CAN, AUART device support.
- SolidRun iMX6 platform updates: dual-license of GPLv2/X11, PWM
setup, PCF8523 RTC, GPIO key and SGTL5000 audio support.
- A number of random device additions for boards: SPI and CAN for
vf-colibri, MAX7310 GPIO expander for imx6qdl-sabreauto and LCD
support for imx25-pdk.

Note: Branch imx/cleanup was merged as the base to solve conflict on
imx25 iomux header. Branch imx/soc was merged as the base to solve
conflict on arch/arm/mach-imx/gpc.c. And Jason Cooper's irqchip/vybrid
branch was pulled into the base as a run-time dependency.

* tag 'imx-dt-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: (69 commits)
ARM: dts: hummingboard: add sgtl5000 support for Hummingboard Pro
ARM: dts: imx25-pinfunc: Add several pinfunctions
ARM: dts: vf610: fix missing irqs
ARM: dts: cubox: Map gpio-keys to gpio3 8
ARM: dts: hummingboard: Setup pwm lines
ARM: dts: hummingboard: enable PCF8523 RTC support
ARM: dts: Re-license SolidRun iMX6 platform DT GPL v2/X11
ARM: dts: imx28: add alternative pinmuxing for spi3
ARM: dts: imx6sx: Add label snvs_rtc
ARM: dts: imx6sl: Add label snvs_rtc
ARM: imx6: Warn when an old DT is detected
ARM: imx6: Allow GPC interrupts affinity to be changed
ARM: imx6qdl-sabreauto.dtsi: add max7310 support
ARM: dts: imx6sl-warp: Add BCM4330 support
ARM: dts: imx28-apf28dev: add wakeup function to user button
ARM: dts: imx28-apf28dev: fix user button polarity
ARM: dts: imx25-pinfunc: remove input values for pinfuncs without input register
ARM: dts: vf610: add Miscellaneous System Control Module (MSCM)
ARM: dts: imx6sl-warp: Pass 'bus-width' property
ARM: dts: imx6qdl: disable PWMs by default
...

+2529 -2766
+14
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-mscm-cpucfg.txt
··· 1 + Freescale Vybrid Miscellaneous System Control - CPU Configuration 2 + 3 + The MSCM IP contains multiple sub modules, this binding describes the first 4 + block of registers which contains CPU configuration information. 5 + 6 + Required properties: 7 + - compatible: "fsl,vf610-mscm-cpucfg", "syscon" 8 + - reg: the register range of the MSCM CPU configuration registers 9 + 10 + Example: 11 + mscm_cpucfg: cpucfg@40001000 { 12 + compatible = "fsl,vf610-mscm-cpucfg", "syscon"; 13 + reg = <0x40001000 0x800>; 14 + }
+33
Documentation/devicetree/bindings/arm/freescale/fsl,vf610-mscm-ir.txt
··· 1 + Freescale Vybrid Miscellaneous System Control - Interrupt Router 2 + 3 + The MSCM IP contains multiple sub modules, this binding describes the second 4 + block of registers which control the interrupt router. The interrupt router 5 + allows to configure the recipient of each peripheral interrupt. Furthermore 6 + it controls the directed processor interrupts. The module is available in all 7 + Vybrid SoC's but is only really useful in dual core configurations (VF6xx 8 + which comes with a Cortex-A5/Cortex-M4 combination). 9 + 10 + Required properties: 11 + - compatible: "fsl,vf610-mscm-ir" 12 + - reg: the register range of the MSCM Interrupt Router 13 + - fsl,cpucfg: The handle to the MSCM CPU configuration node, required 14 + to get the current CPU ID 15 + - interrupt-controller: Identifies the node as an interrupt controller 16 + - #interrupt-cells: Two cells, interrupt number and cells. 17 + The hardware interrupt number according to interrupt 18 + assignment of the interrupt router is required. 19 + Flags get passed only when using GIC as parent. Flags 20 + encoding as documented by the GIC bindings. 21 + - interrupt-parent: Should be the phandle for the interrupt controller of 22 + the CPU the device tree is intended to be used on. This 23 + is either the node of the GIC or NVIC controller. 24 + 25 + Example: 26 + mscm_ir: interrupt-controller@40001800 { 27 + compatible = "fsl,vf610-mscm-ir"; 28 + reg = <0x40001800 0x400>; 29 + fsl,cpucfg = <&mscm_cpucfg>; 30 + interrupt-controller; 31 + #interrupt-cells = <2>; 32 + interrupt-parent = <&intc>; 33 + }
+59
Documentation/devicetree/bindings/power/fsl,imx-gpc.txt
··· 1 + Freescale i.MX General Power Controller 2 + ======================================= 3 + 4 + The i.MX6Q General Power Control (GPC) block contains DVFS load tracking 5 + counters and Power Gating Control (PGC) for the CPU and PU (GPU/VPU) power 6 + domains. 7 + 8 + Required properties: 9 + - compatible: Should be "fsl,imx6q-gpc" or "fsl,imx6sl-gpc" 10 + - reg: should be register base and length as documented in the 11 + datasheet 12 + - interrupts: Should contain GPC interrupt request 1 13 + - pu-supply: Link to the LDO regulator powering the PU power domain 14 + - clocks: Clock phandles to devices in the PU power domain that need 15 + to be enabled during domain power-up for reset propagation. 16 + - #power-domain-cells: Should be 1, see below: 17 + 18 + The gpc node is a power-controller as documented by the generic power domain 19 + bindings in Documentation/devicetree/bindings/power/power_domain.txt. 20 + 21 + Example: 22 + 23 + gpc: gpc@020dc000 { 24 + compatible = "fsl,imx6q-gpc"; 25 + reg = <0x020dc000 0x4000>; 26 + interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>, 27 + <0 90 IRQ_TYPE_LEVEL_HIGH>; 28 + pu-supply = <&reg_pu>; 29 + clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>, 30 + <&clks IMX6QDL_CLK_GPU3D_SHADER>, 31 + <&clks IMX6QDL_CLK_GPU2D_CORE>, 32 + <&clks IMX6QDL_CLK_GPU2D_AXI>, 33 + <&clks IMX6QDL_CLK_OPENVG_AXI>, 34 + <&clks IMX6QDL_CLK_VPU_AXI>; 35 + #power-domain-cells = <1>; 36 + }; 37 + 38 + 39 + Specifying power domain for IP modules 40 + ====================================== 41 + 42 + IP cores belonging to a power domain should contain a 'power-domains' property 43 + that is a phandle pointing to the gpc device node and a DOMAIN_INDEX specifying 44 + the power domain the device belongs to. 45 + 46 + Example of a device that is part of the PU power domain: 47 + 48 + vpu: vpu@02040000 { 49 + reg = <0x02040000 0x3c000>; 50 + /* ... */ 51 + power-domains = <&gpc 1>; 52 + /* ... */ 53 + }; 54 + 55 + The following DOMAIN_INDEX values are valid for i.MX6Q: 56 + ARM_DOMAIN 0 57 + PU_DOMAIN 1 58 + The following additional DOMAIN_INDEX value is valid for i.MX6SL: 59 + DISPLAY_DOMAIN 2
+3 -1
arch/arm/boot/dts/Makefile
··· 299 299 imx6q-wandboard.dtb \ 300 300 imx6q-wandboard-revb1.dtb 301 301 dtb-$(CONFIG_SOC_IMX6SL) += \ 302 - imx6sl-evk.dtb 302 + imx6sl-evk.dtb \ 303 + imx6sl-warp.dtb 303 304 dtb-$(CONFIG_SOC_IMX6SX) += \ 304 305 imx6sx-sabreauto.dtb \ 306 + imx6sx-sdb-reva.dtb \ 305 307 imx6sx-sdb.dtb 306 308 dtb-$(CONFIG_SOC_LS1021A) += \ 307 309 ls1021a-qds.dtb \
+58
arch/arm/boot/dts/imx25-pdk.dts
··· 75 75 mux-int-port = <1>; 76 76 mux-ext-port = <4>; 77 77 }; 78 + 79 + wvga: display { 80 + model = "CLAA057VC01CW"; 81 + bits-per-pixel = <16>; 82 + fsl,pcr = <0xfa208b80>; 83 + bus-width = <18>; 84 + native-mode = <&wvga_timings>; 85 + display-timings { 86 + wvga_timings: 640x480 { 87 + hactive = <640>; 88 + vactive = <480>; 89 + hback-porch = <45>; 90 + hfront-porch = <114>; 91 + hsync-len = <1>; 92 + vback-porch = <33>; 93 + vfront-porch = <11>; 94 + vsync-len = <1>; 95 + clock-frequency = <25200000>; 96 + }; 97 + }; 98 + }; 78 99 }; 79 100 80 101 &audmux { ··· 211 190 >; 212 191 }; 213 192 193 + pinctrl_lcd: lcdgrp { 194 + fsl,pins = < 195 + MX25_PAD_LD0__LD0 0xe0 196 + MX25_PAD_LD1__LD1 0xe0 197 + MX25_PAD_LD2__LD2 0xe0 198 + MX25_PAD_LD3__LD3 0xe0 199 + MX25_PAD_LD4__LD4 0xe0 200 + MX25_PAD_LD5__LD5 0xe0 201 + MX25_PAD_LD6__LD6 0xe0 202 + MX25_PAD_LD7__LD7 0xe0 203 + MX25_PAD_LD8__LD8 0xe0 204 + MX25_PAD_LD9__LD9 0xe0 205 + MX25_PAD_LD10__LD10 0xe0 206 + MX25_PAD_LD11__LD11 0xe0 207 + MX25_PAD_LD12__LD12 0xe0 208 + MX25_PAD_LD13__LD13 0xe0 209 + MX25_PAD_LD14__LD14 0xe0 210 + MX25_PAD_LD15__LD15 0xe0 211 + MX25_PAD_GPIO_E__LD16 0xe0 212 + MX25_PAD_GPIO_F__LD17 0xe0 213 + MX25_PAD_HSYNC__HSYNC 0xe0 214 + MX25_PAD_VSYNC__VSYNC 0xe0 215 + MX25_PAD_LSCLK__LSCLK 0xe0 216 + MX25_PAD_OE_ACD__OE_ACD 0xe0 217 + MX25_PAD_CONTRAST__CONTRAST 0xe0 218 + >; 219 + }; 214 220 215 221 pinctrl_uart1: uart1grp { 216 222 fsl,pins = < ··· 248 200 >; 249 201 }; 250 202 }; 203 + }; 204 + 205 + &lcdc { 206 + display = <&wvga>; 207 + fsl,lpccr = <0x00a903ff>; 208 + fsl,lscr1 = <0x00120300>; 209 + fsl,dmacr = <0x00020010>; 210 + pinctrl-names = "default"; 211 + pinctrl-0 = <&pinctrl_lcd>; 212 + status = "okay"; 251 213 }; 252 214 253 215 &nfc {
+70 -16
arch/arm/boot/dts/imx25-pinfunc.h
··· 17 17 * <mux_reg conf_reg input_reg mux_mode input_val> 18 18 */ 19 19 20 + #define MX25_PAD_TDO__TDO 0x000 0x3e8 0x000 0x00 0x000 21 + 20 22 #define MX25_PAD_A10__A10 0x008 0x000 0x000 0x00 0x000 21 23 #define MX25_PAD_A10__GPIO_4_0 0x008 0x000 0x000 0x05 0x000 22 24 23 25 #define MX25_PAD_A13__A13 0x00c 0x22C 0x000 0x00 0x000 24 26 #define MX25_PAD_A13__GPIO_4_1 0x00c 0x22C 0x000 0x05 0x000 27 + #define MX25_PAD_A13__LCDC_CLS 0x00c 0x22C 0x000 0x07 0x000 25 28 26 29 #define MX25_PAD_A14__A14 0x010 0x230 0x000 0x10 0x000 27 30 #define MX25_PAD_A14__GPIO_2_0 0x010 0x230 0x000 0x15 0x000 31 + #define MX25_PAD_A14__SIM1_CLK1 0x010 0x230 0x000 0x16 0x000 32 + #define MX25_PAD_A14__LCDC_SPL 0x010 0x230 0x000 0x17 0x000 28 33 29 34 #define MX25_PAD_A15__A15 0x014 0x234 0x000 0x10 0x000 30 35 #define MX25_PAD_A15__GPIO_2_1 0x014 0x234 0x000 0x15 0x000 36 + #define MX25_PAD_A15__SIM1_RST1 0x014 0x234 0x000 0x16 0x000 37 + #define MX25_PAD_A15__LCDC_PS 0x014 0x234 0x000 0x17 0x000 31 38 32 39 #define MX25_PAD_A16__A16 0x018 0x000 0x000 0x10 0x000 33 40 #define MX25_PAD_A16__GPIO_2_2 0x018 0x000 0x000 0x15 0x000 41 + #define MX25_PAD_A16__SIM1_VEN1 0x018 0x000 0x000 0x16 0x000 42 + #define MX25_PAD_A16__LCDC_REV 0x018 0x000 0x000 0x17 0x000 34 43 35 44 #define MX25_PAD_A17__A17 0x01c 0x238 0x000 0x10 0x000 36 45 #define MX25_PAD_A17__GPIO_2_3 0x01c 0x238 0x000 0x15 0x000 46 + #define MX25_PAD_A17__SIM1_TX 0x01c 0x238 0x554 0x16 0x000 47 + #define MX25_PAD_A17__FEC_TX_ERR 0x01c 0x238 0x000 0x17 0x000 37 48 38 49 #define MX25_PAD_A18__A18 0x020 0x23c 0x000 0x10 0x000 39 50 #define MX25_PAD_A18__GPIO_2_4 0x020 0x23c 0x000 0x15 0x000 51 + #define MX25_PAD_A18__SIM1_PD1 0x020 0x23c 0x550 0x16 0x000 40 52 #define MX25_PAD_A18__FEC_COL 0x020 0x23c 0x504 0x17 0x000 41 53 42 54 #define MX25_PAD_A19__A19 0x024 0x240 0x000 0x10 0x000 43 - #define MX25_PAD_A19__FEC_RX_ER 0x024 0x240 0x518 0x17 0x000 44 55 #define MX25_PAD_A19__GPIO_2_5 0x024 0x240 0x000 0x15 0x000 56 + #define MX25_PAD_A19__SIM1_RX1 0x024 0x240 0x54c 0x16 0x000 57 + #define MX25_PAD_A19__FEC_RX_ERR 0x024 0x240 0x518 0x17 0x000 45 58 46 59 #define MX25_PAD_A20__A20 0x028 0x244 0x000 0x10 0x000 47 60 #define MX25_PAD_A20__GPIO_2_6 0x028 0x244 0x000 0x15 0x000 61 + #define MX25_PAD_A20__SIM2_CLK1 0x028 0x244 0x000 0x16 0x000 48 62 #define MX25_PAD_A20__FEC_RDATA2 0x028 0x244 0x50c 0x17 0x000 49 63 50 64 #define MX25_PAD_A21__A21 0x02c 0x248 0x000 0x10 0x000 51 65 #define MX25_PAD_A21__GPIO_2_7 0x02c 0x248 0x000 0x15 0x000 66 + #define MX25_PAD_A21__SIM2_RST1 0x02c 0x248 0x000 0x16 0x000 52 67 #define MX25_PAD_A21__FEC_RDATA3 0x02c 0x248 0x510 0x17 0x000 53 68 54 69 #define MX25_PAD_A22__A22 0x030 0x000 0x000 0x10 0x000 55 70 #define MX25_PAD_A22__GPIO_2_8 0x030 0x000 0x000 0x15 0x000 71 + #define MX25_PAD_A22__FEC_TDATA2 0x030 0x000 0x000 0x17 0x000 72 + #define MX25_PAD_A22__SIM2_VEN1 0x030 0x000 0x000 0x16 0x000 73 + #define MX25_PAD_A22__FEC_TDATA2 0x030 0x000 0x000 0x17 0x000 56 74 57 75 #define MX25_PAD_A23__A23 0x034 0x24c 0x000 0x10 0x000 58 76 #define MX25_PAD_A23__GPIO_2_9 0x034 0x24c 0x000 0x15 0x000 77 + #define MX25_PAD_A23__SIM2_TX1 0x034 0x24c 0x560 0x16 0x000 78 + #define MX25_PAD_A23__FEC_TDATA3 0x034 0x24c 0x000 0x17 0x000 59 79 60 80 #define MX25_PAD_A24__A24 0x038 0x250 0x000 0x10 0x000 61 81 #define MX25_PAD_A24__GPIO_2_10 0x038 0x250 0x000 0x15 0x000 82 + #define MX25_PAD_A24__SIM2_PD1 0x038 0x250 0x55c 0x16 0x000 62 83 #define MX25_PAD_A24__FEC_RX_CLK 0x038 0x250 0x514 0x17 0x000 63 84 64 85 #define MX25_PAD_A25__A25 0x03c 0x254 0x000 0x10 0x000 ··· 154 133 #define MX25_PAD_D15__D15 0x088 0x280 0x000 0x00 0x000 155 134 #define MX25_PAD_D15__LD16 0x088 0x280 0x000 0x01 0x000 156 135 #define MX25_PAD_D15__GPIO_4_5 0x088 0x280 0x000 0x05 0x000 136 + #define MX25_PAD_D15__SDHC1_DAT7 0x088 0x280 0x4d8 0x06 0x000 157 137 158 138 #define MX25_PAD_D14__D14 0x08c 0x284 0x000 0x00 0x000 159 139 #define MX25_PAD_D14__LD17 0x08c 0x284 0x000 0x01 0x000 160 140 #define MX25_PAD_D14__GPIO_4_6 0x08c 0x284 0x000 0x05 0x000 141 + #define MX25_PAD_D14__SDHC1_DAT6 0x08c 0x284 0x4d4 0x06 0x000 161 142 162 143 #define MX25_PAD_D13__D13 0x090 0x288 0x000 0x00 0x000 163 144 #define MX25_PAD_D13__LD18 0x090 0x288 0x000 0x01 0x000 164 145 #define MX25_PAD_D13__GPIO_4_7 0x090 0x288 0x000 0x05 0x000 146 + #define MX25_PAD_D13__SDHC1_DAT5 0x090 0x288 0x4d0 0x06 0x000 165 147 166 148 #define MX25_PAD_D12__D12 0x094 0x28c 0x000 0x00 0x000 167 149 #define MX25_PAD_D12__GPIO_4_8 0x094 0x28c 0x000 0x05 0x000 150 + #define MX25_PAD_D12__SDHC1_DAT4 0x094 0x28c 0x4cc 0x06 0x000 168 151 169 152 #define MX25_PAD_D11__D11 0x098 0x290 0x000 0x00 0x000 170 153 #define MX25_PAD_D11__GPIO_4_9 0x098 0x290 0x000 0x05 0x000 154 + #define MX25_PAD_D11__USBOTG_PWR 0x098 0x290 0x000 0x06 0x000 171 155 172 156 #define MX25_PAD_D10__D10 0x09c 0x294 0x000 0x00 0x000 173 157 #define MX25_PAD_D10__GPIO_4_10 0x09c 0x294 0x000 0x05 0x000 ··· 238 212 239 213 #define MX25_PAD_LD8__LD8 0x0e8 0x2e0 0x000 0x10 0x000 240 214 #define MX25_PAD_LD8__FEC_TX_ERR 0x0e8 0x2e0 0x000 0x15 0x000 215 + #define MX25_PAD_LD8__SDHC2_CMD 0x0e8 0x2e0 0x4e0 0x06 0x000 241 216 242 217 #define MX25_PAD_LD9__LD9 0x0ec 0x2e4 0x000 0x10 0x000 243 218 #define MX25_PAD_LD9__FEC_COL 0x0ec 0x2e4 0x504 0x15 0x001 219 + #define MX25_PAD_LD9__SDHC2_CLK 0x0ec 0x2e4 0x4dc 0x06 0x000 244 220 245 221 #define MX25_PAD_LD10__LD10 0x0f0 0x2e8 0x000 0x10 0x000 246 - #define MX25_PAD_LD10__FEC_RX_ER 0x0f0 0x2e8 0x518 0x15 0x001 222 + #define MX25_PAD_LD10__FEC_RX_ERR 0x0f0 0x2e8 0x518 0x15 0x001 247 223 248 224 #define MX25_PAD_LD11__LD11 0x0f4 0x2ec 0x000 0x10 0x000 249 225 #define MX25_PAD_LD11__FEC_RDATA2 0x0f4 0x2ec 0x50c 0x15 0x001 226 + #define MX25_PAD_LD11__SDHC2_DAT1 0x0f4 0x2ec 0x4e8 0x06 0x000 250 227 251 228 #define MX25_PAD_LD12__LD12 0x0f8 0x2f0 0x000 0x10 0x000 229 + #define MX25_PAD_LD12__CSPI2_MOSI 0x0f8 0x2f0 0x4a0 0x02 0x000 252 230 #define MX25_PAD_LD12__FEC_RDATA3 0x0f8 0x2f0 0x510 0x15 0x001 253 231 254 232 #define MX25_PAD_LD13__LD13 0x0fc 0x2f4 0x000 0x10 0x000 233 + #define MX25_PAD_LD13__CSPI2_MISO 0x0fc 0x2f4 0x49c 0x02 0x000 255 234 #define MX25_PAD_LD13__FEC_TDATA2 0x0fc 0x2f4 0x000 0x15 0x000 256 235 257 236 #define MX25_PAD_LD14__LD14 0x100 0x2f8 0x000 0x10 0x000 237 + #define MX25_PAD_LD14__CSPI2_SCLK 0x100 0x2f8 0x494 0x02 0x000 258 238 #define MX25_PAD_LD14__FEC_TDATA3 0x100 0x2f8 0x000 0x15 0x000 259 239 260 240 #define MX25_PAD_LD15__LD15 0x104 0x2fc 0x000 0x10 0x000 241 + #define MX25_PAD_LD15__CSPI2_RDY 0x104 0x2fc 0x498 0x02 0x000 261 242 #define MX25_PAD_LD15__FEC_RX_CLK 0x104 0x2fc 0x514 0x15 0x001 262 243 263 244 #define MX25_PAD_HSYNC__HSYNC 0x108 0x300 0x000 0x10 0x000 ··· 277 244 #define MX25_PAD_LSCLK__GPIO_1_24 0x110 0x308 0x000 0x15 0x000 278 245 279 246 #define MX25_PAD_OE_ACD__OE_ACD 0x114 0x30c 0x000 0x10 0x000 247 + #define MX25_PAD_OE_ACD__CSPI2_SS0 0x114 0x30c 0x4a4 0x02 0x000 280 248 #define MX25_PAD_OE_ACD__GPIO_1_25 0x114 0x30c 0x000 0x15 0x000 281 249 282 250 #define MX25_PAD_CONTRAST__CONTRAST 0x118 0x310 0x000 0x10 0x000 ··· 291 257 292 258 #define MX25_PAD_CSI_D2__CSI_D2 0x120 0x318 0x000 0x10 0x000 293 259 #define MX25_PAD_CSI_D2__UART5_RXD_MUX 0x120 0x318 0x578 0x11 0x001 260 + #define MX25_PAD_CSI_D2__SIM1_CLK0 0x120 0x318 0x000 0x04 0x000 294 261 #define MX25_PAD_CSI_D2__GPIO_1_27 0x120 0x318 0x000 0x15 0x000 295 262 #define MX25_PAD_CSI_D2__CSPI3_MOSI 0x120 0x318 0x000 0x17 0x000 296 263 297 264 #define MX25_PAD_CSI_D3__CSI_D3 0x124 0x31c 0x000 0x10 0x000 298 265 #define MX25_PAD_CSI_D3__UART5_TXD_MUX 0x124 0x31c 0x000 0x11 0x000 266 + #define MX25_PAD_CSI_D3__SIM1_RST0 0x124 0x31c 0x000 0x04 0x000 299 267 #define MX25_PAD_CSI_D3__GPIO_1_28 0x124 0x31c 0x000 0x15 0x000 300 268 #define MX25_PAD_CSI_D3__CSPI3_MISO 0x124 0x31c 0x4b4 0x17 0x001 301 269 302 270 #define MX25_PAD_CSI_D4__CSI_D4 0x128 0x320 0x000 0x10 0x000 303 271 #define MX25_PAD_CSI_D4__UART5_RTS 0x128 0x320 0x574 0x11 0x001 272 + #define MX25_PAD_CSI_D4__SIM1_VEN0 0x128 0x320 0x000 0x04 0x000 304 273 #define MX25_PAD_CSI_D4__GPIO_1_29 0x128 0x320 0x000 0x15 0x000 305 274 #define MX25_PAD_CSI_D4__CSPI3_SCLK 0x128 0x320 0x000 0x17 0x000 306 275 307 276 #define MX25_PAD_CSI_D5__CSI_D5 0x12c 0x324 0x000 0x10 0x000 308 - #define MX25_PAD_CSI_D5__UART5_CTS 0x12c 0x324 0x000 0x11 0x001 277 + #define MX25_PAD_CSI_D5__UART5_CTS 0x12c 0x324 0x000 0x11 0x000 278 + #define MX25_PAD_CSI_D5__SIM1_TX0 0x12c 0x324 0x000 0x04 0x000 309 279 #define MX25_PAD_CSI_D5__GPIO_1_30 0x12c 0x324 0x000 0x15 0x000 310 280 #define MX25_PAD_CSI_D5__CSPI3_RDY 0x12c 0x324 0x000 0x17 0x000 311 281 312 282 #define MX25_PAD_CSI_D6__CSI_D6 0x130 0x328 0x000 0x10 0x000 313 283 #define MX25_PAD_CSI_D6__SDHC2_CMD 0x130 0x328 0x4e0 0x12 0x001 284 + #define MX25_PAD_CSI_D6__SIM1_PD0 0x130 0x328 0x000 0x04 0x000 314 285 #define MX25_PAD_CSI_D6__GPIO_1_31 0x130 0x328 0x000 0x15 0x000 315 286 316 287 #define MX25_PAD_CSI_D7__CSI_D7 0x134 0x32c 0x000 0x10 0x000 ··· 323 284 #define MX25_PAD_CSI_D7__GPIO_1_6 0x134 0x32c 0x000 0x15 0x000 324 285 325 286 #define MX25_PAD_CSI_D8__CSI_D8 0x138 0x330 0x000 0x10 0x000 326 - #define MX25_PAD_CSI_D8__AUD6_RXC 0x138 0x330 0x000 0x12 0x001 287 + #define MX25_PAD_CSI_D8__AUD6_RXC 0x138 0x330 0x000 0x12 0x000 327 288 #define MX25_PAD_CSI_D8__GPIO_1_7 0x138 0x330 0x000 0x15 0x000 328 289 #define MX25_PAD_CSI_D8__CSPI3_SS2 0x138 0x330 0x4c4 0x17 0x000 329 290 330 291 #define MX25_PAD_CSI_D9__CSI_D9 0x13c 0x334 0x000 0x10 0x000 331 - #define MX25_PAD_CSI_D9__AUD6_RXFS 0x13c 0x334 0x000 0x12 0x001 292 + #define MX25_PAD_CSI_D9__AUD6_RXFS 0x13c 0x334 0x000 0x12 0x000 332 293 #define MX25_PAD_CSI_D9__GPIO_4_21 0x13c 0x334 0x000 0x15 0x000 333 294 #define MX25_PAD_CSI_D9__CSPI3_SS3 0x13c 0x334 0x4c8 0x17 0x000 334 295 335 296 #define MX25_PAD_CSI_MCLK__CSI_MCLK 0x140 0x338 0x000 0x10 0x000 336 - #define MX25_PAD_CSI_MCLK__AUD6_TXD 0x140 0x338 0x000 0x11 0x001 297 + #define MX25_PAD_CSI_MCLK__AUD6_TXD 0x140 0x338 0x000 0x11 0x000 337 298 #define MX25_PAD_CSI_MCLK__SDHC2_DAT0 0x140 0x338 0x4e4 0x12 0x001 338 299 #define MX25_PAD_CSI_MCLK__GPIO_1_8 0x140 0x338 0x000 0x15 0x000 339 300 340 301 #define MX25_PAD_CSI_VSYNC__CSI_VSYNC 0x144 0x33c 0x000 0x10 0x000 341 - #define MX25_PAD_CSI_VSYNC__AUD6_RXD 0x144 0x33c 0x000 0x11 0x001 302 + #define MX25_PAD_CSI_VSYNC__AUD6_RXD 0x144 0x33c 0x000 0x11 0x000 342 303 #define MX25_PAD_CSI_VSYNC__SDHC2_DAT1 0x144 0x33c 0x4e8 0x12 0x001 343 304 #define MX25_PAD_CSI_VSYNC__GPIO_1_9 0x144 0x33c 0x000 0x15 0x000 344 305 345 306 #define MX25_PAD_CSI_HSYNC__CSI_HSYNC 0x148 0x340 0x000 0x10 0x000 346 - #define MX25_PAD_CSI_HSYNC__AUD6_TXC 0x148 0x340 0x000 0x11 0x001 307 + #define MX25_PAD_CSI_HSYNC__AUD6_TXC 0x148 0x340 0x000 0x11 0x000 347 308 #define MX25_PAD_CSI_HSYNC__SDHC2_DAT2 0x148 0x340 0x4ec 0x12 0x001 348 309 #define MX25_PAD_CSI_HSYNC__GPIO_1_10 0x148 0x340 0x000 0x15 0x000 349 310 350 311 #define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK 0x14c 0x344 0x000 0x10 0x000 351 - #define MX25_PAD_CSI_PIXCLK__AUD6_TXFS 0x14c 0x344 0x000 0x11 0x001 312 + #define MX25_PAD_CSI_PIXCLK__AUD6_TXFS 0x14c 0x344 0x000 0x11 0x000 352 313 #define MX25_PAD_CSI_PIXCLK__SDHC2_DAT3 0x14c 0x344 0x4f0 0x12 0x001 353 314 #define MX25_PAD_CSI_PIXCLK__GPIO_1_11 0x14c 0x344 0x000 0x15 0x000 354 315 ··· 408 369 #define MX25_PAD_UART2_RTS__CC1 0x188 0x380 0x000 0x13 0x000 409 370 #define MX25_PAD_UART2_RTS__GPIO_4_28 0x188 0x380 0x000 0x15 0x000 410 371 411 - #define MX25_PAD_UART2_CTS__FEC_RX_ER 0x18c 0x384 0x518 0x12 0x002 412 372 #define MX25_PAD_UART2_CTS__UART2_CTS 0x18c 0x384 0x000 0x10 0x000 373 + #define MX25_PAD_UART2_CTS__FEC_RX_ERR 0x18c 0x384 0x518 0x12 0x002 413 374 #define MX25_PAD_UART2_CTS__GPIO_4_29 0x18c 0x384 0x000 0x15 0x000 414 375 415 376 #define MX25_PAD_SD1_CMD__SD1_CMD 0x190 0x388 0x000 0x10 0x000 ··· 431 392 #define MX25_PAD_SD1_DATA1__GPIO_2_26 0x19c 0x394 0x000 0x15 0x000 432 393 433 394 #define MX25_PAD_SD1_DATA2__SD1_DATA2 0x1a0 0x398 0x000 0x10 0x000 434 - #define MX25_PAD_SD1_DATA2__FEC_RX_CLK 0x1a0 0x398 0x514 0x15 0x002 395 + #define MX25_PAD_SD1_DATA2__FEC_RX_CLK 0x1a0 0x398 0x514 0x12 0x002 435 396 #define MX25_PAD_SD1_DATA2__GPIO_2_27 0x1a0 0x398 0x000 0x15 0x000 436 397 437 398 #define MX25_PAD_SD1_DATA3__SD1_DATA3 0x1a4 0x39c 0x000 0x10 0x000 438 - #define MX25_PAD_SD1_DATA3__FEC_CRS 0x1a4 0x39c 0x508 0x10 0x002 399 + #define MX25_PAD_SD1_DATA3__FEC_CRS 0x1a4 0x39c 0x508 0x12 0x002 439 400 #define MX25_PAD_SD1_DATA3__GPIO_2_28 0x1a4 0x39c 0x000 0x15 0x000 440 401 441 402 #define MX25_PAD_KPP_ROW0__KPP_ROW0 0x1a8 0x3a0 0x000 0x10 0x000 ··· 449 410 #define MX25_PAD_KPP_ROW2__GPIO_2_31 0x1b0 0x3a8 0x000 0x15 0x000 450 411 451 412 #define MX25_PAD_KPP_ROW3__KPP_ROW3 0x1b4 0x3ac 0x000 0x10 0x000 452 - #define MX25_PAD_KPP_ROW3__CSI_LD1 0x1b4 0x3ac 0x48c 0x13 0x002 413 + #define MX25_PAD_KPP_ROW3__CSI_D1 0x1b4 0x3ac 0x48c 0x13 0x002 453 414 #define MX25_PAD_KPP_ROW3__GPIO_3_0 0x1b4 0x3ac 0x000 0x15 0x000 454 415 455 416 #define MX25_PAD_KPP_COL0__KPP_COL0 0x1b8 0x3b0 0x000 0x10 0x000 ··· 494 455 #define MX25_PAD_FEC_RDATA0__GPIO_3_10 0x1dc 0x3d4 0x000 0x15 0x000 495 456 496 457 #define MX25_PAD_FEC_RDATA1__FEC_RDATA1 0x1e0 0x3d8 0x000 0x10 0x000 458 + /* 459 + * According to the i.MX25 Reference manual (IMX25RM, Rev. 2, 460 + * 01/2011) this is CAN1_TX but that's wrong. 461 + */ 462 + #define MX25_PAD_FEC_RDATA1__CAN2_TX 0x1e0 0x3d8 0x000 0x14 0x000 497 463 #define MX25_PAD_FEC_RDATA1__GPIO_3_11 0x1e0 0x3d8 0x000 0x15 0x000 498 464 499 465 #define MX25_PAD_FEC_RX_DV__FEC_RX_DV 0x1e4 0x3dc 0x000 0x10 0x000 466 + /* 467 + * According to the i.MX25 Reference manual (IMX25RM, Rev. 2, 468 + * 01/2011) this is CAN1_RX but that's wrong. 469 + */ 500 470 #define MX25_PAD_FEC_RX_DV__CAN2_RX 0x1e4 0x3dc 0x484 0x14 0x000 501 471 #define MX25_PAD_FEC_RX_DV__GPIO_3_12 0x1e4 0x3dc 0x000 0x15 0x000 502 472 ··· 519 471 #define MX25_PAD_DE_B__DE_B 0x1f0 0x3ec 0x000 0x10 0x000 520 472 #define MX25_PAD_DE_B__GPIO_2_20 0x1f0 0x3ec 0x000 0x15 0x000 521 473 522 - #define MX25_PAD_TDO__TDO 0x000 0x3e8 0x000 0x00 0x000 523 - 524 474 #define MX25_PAD_GPIO_A__GPIO_A 0x1f4 0x3f0 0x000 0x10 0x000 525 475 #define MX25_PAD_GPIO_A__CAN1_TX 0x1f4 0x3f0 0x000 0x16 0x000 526 476 #define MX25_PAD_GPIO_A__USBOTG_PWR 0x1f4 0x3f0 0x000 0x12 0x000 527 477 528 478 #define MX25_PAD_GPIO_B__GPIO_B 0x1f8 0x3f4 0x000 0x10 0x000 529 - #define MX25_PAD_GPIO_B__CAN1_RX 0x1f8 0x3f4 0x480 0x16 0x001 530 479 #define MX25_PAD_GPIO_B__USBOTG_OC 0x1f8 0x3f4 0x57c 0x12 0x001 480 + #define MX25_PAD_GPIO_B__CAN1_RX 0x1f8 0x3f4 0x480 0x16 0x001 531 481 532 482 #define MX25_PAD_GPIO_C__GPIO_C 0x1fc 0x3f8 0x000 0x10 0x000 483 + #define MX25_PAD_GPIO_C__PWM4_PWMO 0x1fc 0x3f8 0x000 0x11 0x000 484 + #define MX25_PAD_GPIO_C__I2C2_SCL 0x1fc 0x3f8 0x51c 0x12 0x001 485 + #define MX25_PAD_GPIO_C__KPP_COL4 0x1fc 0x3f8 0x52c 0x13 0x001 533 486 #define MX25_PAD_GPIO_C__CAN2_TX 0x1fc 0x3f8 0x000 0x16 0x000 534 487 535 488 #define MX25_PAD_GPIO_D__GPIO_D 0x200 0x3fc 0x000 0x10 0x000 489 + #define MX25_PAD_GPIO_D__I2C2_SDA 0x200 0x3fc 0x520 0x12 0x001 536 490 #define MX25_PAD_GPIO_D__CAN2_RX 0x200 0x3fc 0x484 0x16 0x001 537 491 538 492 #define MX25_PAD_GPIO_E__GPIO_E 0x204 0x400 0x000 0x10 0x000 539 493 #define MX25_PAD_GPIO_E__I2C3_CLK 0x204 0x400 0x524 0x11 0x002 540 494 #define MX25_PAD_GPIO_E__LD16 0x204 0x400 0x000 0x12 0x000 541 495 #define MX25_PAD_GPIO_E__AUD7_TXD 0x204 0x400 0x000 0x14 0x000 496 + #define MX25_PAD_GPIO_E__UART4_RXD 0x204 0x400 0x570 0x16 0x002 542 497 543 498 #define MX25_PAD_GPIO_F__GPIO_F 0x208 0x404 0x000 0x10 0x000 544 499 #define MX25_PAD_GPIO_F__LD17 0x208 0x404 0x000 0x12 0x000 545 500 #define MX25_PAD_GPIO_F__AUD7_TXC 0x208 0x404 0x000 0x14 0x000 501 + #define MX25_PAD_GPIO_F__UART4_TXD 0x208 0x404 0x000 0x16 0x000 546 502 547 503 #define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK 0x20c 0x000 0x000 0x10 0x000 548 504 #define MX25_PAD_EXT_ARMCLK__GPIO_3_15 0x20c 0x000 0x000 0x15 0x000 ··· 557 505 #define MX25_PAD_VSTBY_REQ__VSTBY_REQ 0x214 0x408 0x000 0x10 0x000 558 506 #define MX25_PAD_VSTBY_REQ__AUD7_TXFS 0x214 0x408 0x000 0x14 0x000 559 507 #define MX25_PAD_VSTBY_REQ__GPIO_3_17 0x214 0x408 0x000 0x15 0x000 508 + 560 509 #define MX25_PAD_VSTBY_ACK__VSTBY_ACK 0x218 0x40c 0x000 0x10 0x000 561 510 #define MX25_PAD_VSTBY_ACK__GPIO_3_18 0x218 0x40c 0x000 0x15 0x000 562 511 ··· 570 517 571 518 #define MX25_PAD_BOOT_MODE0__BOOT_MODE0 0x224 0x000 0x000 0x00 0x000 572 519 #define MX25_PAD_BOOT_MODE0__GPIO_4_30 0x224 0x000 0x000 0x05 0x000 520 + 573 521 #define MX25_PAD_BOOT_MODE1__BOOT_MODE1 0x228 0x000 0x000 0x00 0x000 574 522 #define MX25_PAD_BOOT_MODE1__GPIO_4_31 0x228 0x000 0x000 0x05 0x000 575 523
+2
arch/arm/boot/dts/imx27.dtsi
··· 488 488 interrupts = <54>; 489 489 clocks = <&clks IMX27_CLK_USB_IPG_GATE>; 490 490 fsl,usbmisc = <&usbmisc 1>; 491 + dr_mode = "host"; 491 492 status = "disabled"; 492 493 }; 493 494 ··· 498 497 interrupts = <55>; 499 498 clocks = <&clks IMX27_CLK_USB_IPG_GATE>; 500 499 fsl,usbmisc = <&usbmisc 2>; 500 + dr_mode = "host"; 501 501 status = "disabled"; 502 502 }; 503 503
+1 -1
arch/arm/boot/dts/imx28-apf28.dts
··· 78 78 phy-mode = "rmii"; 79 79 pinctrl-names = "default"; 80 80 pinctrl-0 = <&mac0_pins_a>; 81 - phy-reset-gpios = <&gpio4 13 0>; 81 + phy-reset-gpios = <&gpio4 13 GPIO_ACTIVE_LOW>; 82 82 status = "okay"; 83 83 }; 84 84 };
+27 -3
arch/arm/boot/dts/imx28-apf28dev.dts
··· 110 110 }; 111 111 }; 112 112 }; 113 + 114 + can0: can@80032000 { 115 + pinctrl-names = "default"; 116 + pinctrl-0 = <&can0_pins_a>; 117 + xceiver-supply = <&reg_can0_vcc>; 118 + status = "okay"; 119 + }; 113 120 }; 114 121 115 122 apbx@80040000 { ··· 137 130 status = "okay"; 138 131 }; 139 132 133 + auart0: serial@8006a000 { 134 + pinctrl-names = "default"; 135 + pinctrl-0 = <&auart0_pins_a>; 136 + fsl,uart-has-rtscts; 137 + status = "okay"; 138 + }; 139 + 140 140 usbphy0: usbphy@8007c000 { 141 141 status = "okay"; 142 142 }; ··· 157 143 ahb@80080000 { 158 144 usb0: usb@80080000 { 159 145 pinctrl-names = "default"; 160 - pinctrl-0 = <&usb0_otg_apf28dev>; 146 + pinctrl-0 = <&usb0_otg_apf28dev 147 + &usb0_id_pins_b>; 161 148 vbus-supply = <&reg_usb0_vbus>; 162 149 status = "okay"; 163 150 }; ··· 171 156 phy-mode = "rmii"; 172 157 pinctrl-names = "default"; 173 158 pinctrl-0 = <&mac1_pins_a>; 174 - phy-reset-gpios = <&gpio0 23 0>; 159 + phy-reset-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>; 175 160 status = "okay"; 176 161 }; 177 162 }; ··· 189 174 regulator-max-microvolt = <5000000>; 190 175 gpio = <&gpio1 23 1>; 191 176 enable-active-high; 177 + }; 178 + 179 + reg_can0_vcc: regulator@1 { 180 + compatible = "regulator-fixed"; 181 + reg = <1>; 182 + regulator-name = "can0_vcc"; 183 + regulator-min-microvolt = <5000000>; 184 + regulator-max-microvolt = <5000000>; 192 185 }; 193 186 }; 194 187 ··· 223 200 224 201 user-button { 225 202 label = "User button"; 226 - gpios = <&gpio0 17 0>; 203 + gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; 227 204 linux,code = <0x100>; 205 + gpio-key,wakeup; 228 206 }; 229 207 }; 230 208 };
+14
arch/arm/boot/dts/imx28.dtsi
··· 829 829 fsl,pull-up = <MXS_PULL_DISABLE>; 830 830 }; 831 831 832 + spi3_pins_b: spi3@1 { 833 + reg = <1>; 834 + fsl,pinmux-ids = < 835 + MX28_PAD_SSP3_SCK__SSP3_SCK 836 + MX28_PAD_SSP3_MOSI__SSP3_CMD 837 + MX28_PAD_SSP3_MISO__SSP3_D0 838 + MX28_PAD_SSP3_SS0__SSP3_D3 839 + >; 840 + fsl,drive-strength = <MXS_DRIVE_8mA>; 841 + fsl,voltage = <MXS_VOLTAGE_HIGH>; 842 + fsl,pull-up = <MXS_PULL_ENABLE>; 843 + }; 844 + 832 845 usb0_pins_a: usb0@0 { 833 846 reg = <0>; 834 847 fsl,pinmux-ids = < ··· 1210 1197 interrupts = <92>; 1211 1198 clocks = <&clks 61>; 1212 1199 fsl,usbphy = <&usbphy1>; 1200 + dr_mode = "host"; 1213 1201 status = "disabled"; 1214 1202 }; 1215 1203
+1
arch/arm/boot/dts/imx35.dtsi
··· 318 318 clocks = <&clks 73>; 319 319 fsl,usbmisc = <&usbmisc 1>; 320 320 fsl,usbphy = <&usbphy1>; 321 + dr_mode = "host"; 321 322 status = "disabled"; 322 323 }; 323 324
+3
arch/arm/boot/dts/imx50.dtsi
··· 197 197 reg = <0x53f80200 0x0200>; 198 198 interrupts = <14>; 199 199 clocks = <&clks IMX5_CLK_USB_PHY2_GATE>; 200 + dr_mode = "host"; 200 201 status = "disabled"; 201 202 }; 202 203 ··· 206 205 reg = <0x53f80400 0x0200>; 207 206 interrupts = <16>; 208 207 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 208 + dr_mode = "host"; 209 209 status = "disabled"; 210 210 }; 211 211 ··· 215 213 reg = <0x53f80600 0x0200>; 216 214 interrupts = <17>; 217 215 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 216 + dr_mode = "host"; 218 217 status = "disabled"; 219 218 }; 220 219
+3
arch/arm/boot/dts/imx51.dtsi
··· 265 265 interrupts = <14>; 266 266 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 267 267 fsl,usbmisc = <&usbmisc 1>; 268 + dr_mode = "host"; 268 269 status = "disabled"; 269 270 }; 270 271 ··· 275 274 interrupts = <16>; 276 275 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 277 276 fsl,usbmisc = <&usbmisc 2>; 277 + dr_mode = "host"; 278 278 status = "disabled"; 279 279 }; 280 280 ··· 285 283 interrupts = <17>; 286 284 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 287 285 fsl,usbmisc = <&usbmisc 3>; 286 + dr_mode = "host"; 288 287 status = "disabled"; 289 288 }; 290 289
+3
arch/arm/boot/dts/imx53.dtsi
··· 309 309 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 310 310 fsl,usbmisc = <&usbmisc 1>; 311 311 fsl,usbphy = <&usbphy1>; 312 + dr_mode = "host"; 312 313 status = "disabled"; 313 314 }; 314 315 ··· 319 318 interrupts = <16>; 320 319 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 321 320 fsl,usbmisc = <&usbmisc 2>; 321 + dr_mode = "host"; 322 322 status = "disabled"; 323 323 }; 324 324 ··· 329 327 interrupts = <17>; 330 328 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 331 329 fsl,usbmisc = <&usbmisc 3>; 330 + dr_mode = "host"; 332 331 status = "disabled"; 333 332 }; 334 333
+4
arch/arm/boot/dts/imx6dl-aristainetos_4.dts
··· 83 83 &ipu1_di0_disp0 { 84 84 remote-endpoint = <&display0_in>; 85 85 }; 86 + 87 + &pwm1 { 88 + status = "okay"; 89 + };
+4
arch/arm/boot/dts/imx6dl-aristainetos_7.dts
··· 72 72 &ipu1_di0_disp0 { 73 73 remote-endpoint = <&display0_in>; 74 74 }; 75 + 76 + &pwm3 { 77 + status = "okay"; 78 + };
+38
arch/arm/boot/dts/imx6dl-cubox-i.dts
··· 1 1 /* 2 2 * Copyright (C) 2014 Russell King 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of the 12 + * License. 13 + * 14 + * This file is distributed in the hope that it will be useful 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * Or, alternatively 20 + * 21 + * b) Permission is hereby granted, free of charge, to any person 22 + * obtaining a copy of this software and associated documentation 23 + * files (the "Software"), to deal in the Software without 24 + * restriction, including without limitation the rights to use 25 + * copy, modify, merge, publish, distribute, sublicense, and/or 26 + * sell copies of the Software, and to permit persons to whom the 27 + * Software is furnished to do so, subject to the following 28 + * conditions: 29 + * 30 + * The above copyright notice and this permission notice shall be 31 + * included in all copies or substantial portions of the Software. 32 + * 33 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 34 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 35 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 37 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 38 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 39 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 40 + * OTHER DEALINGS IN THE SOFTWARE. 3 41 */ 4 42 /dts-v1/; 5 43
+38
arch/arm/boot/dts/imx6dl-hummingboard.dts
··· 1 1 /* 2 2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) 3 3 * Based on dt work by Russell King 4 + * 5 + * This file is dual-licensed: you can use it either under the terms 6 + * of the GPL or the X11 license, at your option. Note that this dual 7 + * licensing only applies to this file, and not this project as a 8 + * whole. 9 + * 10 + * a) This file is free software; you can redistribute it and/or 11 + * modify it under the terms of the GNU General Public License as 12 + * published by the Free Software Foundation; either version 2 of the 13 + * License. 14 + * 15 + * This file is distributed in the hope that it will be useful 16 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 + * GNU General Public License for more details. 19 + * 20 + * Or, alternatively 21 + * 22 + * b) Permission is hereby granted, free of charge, to any person 23 + * obtaining a copy of this software and associated documentation 24 + * files (the "Software"), to deal in the Software without 25 + * restriction, including without limitation the rights to use 26 + * copy, modify, merge, publish, distribute, sublicense, and/or 27 + * sell copies of the Software, and to permit persons to whom the 28 + * Software is furnished to do so, subject to the following 29 + * conditions: 30 + * 31 + * The above copyright notice and this permission notice shall be 32 + * included in all copies or substantial portions of the Software. 33 + * 34 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 35 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 36 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 37 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 38 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 39 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 40 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 41 + * OTHER DEALINGS IN THE SOFTWARE. 4 42 */ 5 43 /dts-v1/; 6 44
+38
arch/arm/boot/dts/imx6q-cubox-i.dts
··· 1 1 /* 2 2 * Copyright (C) 2014 Russell King 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of the 12 + * License. 13 + * 14 + * This file is distributed in the hope that it will be useful 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * Or, alternatively 20 + * 21 + * b) Permission is hereby granted, free of charge, to any person 22 + * obtaining a copy of this software and associated documentation 23 + * files (the "Software"), to deal in the Software without 24 + * restriction, including without limitation the rights to use 25 + * copy, modify, merge, publish, distribute, sublicense, and/or 26 + * sell copies of the Software, and to permit persons to whom the 27 + * Software is furnished to do so, subject to the following 28 + * conditions: 29 + * 30 + * The above copyright notice and this permission notice shall be 31 + * included in all copies or substantial portions of the Software. 32 + * 33 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 34 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 35 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 37 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 38 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 39 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 40 + * OTHER DEALINGS IN THE SOFTWARE. 3 41 */ 4 42 /dts-v1/; 5 43
+38
arch/arm/boot/dts/imx6q-hummingboard.dts
··· 1 1 /* 2 2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) 3 3 * Based on dt work by Russell King 4 + * 5 + * This file is dual-licensed: you can use it either under the terms 6 + * of the GPL or the X11 license, at your option. Note that this dual 7 + * licensing only applies to this file, and not this project as a 8 + * whole. 9 + * 10 + * a) This file is free software; you can redistribute it and/or 11 + * modify it under the terms of the GNU General Public License as 12 + * published by the Free Software Foundation; either version 2 of the 13 + * License. 14 + * 15 + * This file is distributed in the hope that it will be useful 16 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 + * GNU General Public License for more details. 19 + * 20 + * Or, alternatively 21 + * 22 + * b) Permission is hereby granted, free of charge, to any person 23 + * obtaining a copy of this software and associated documentation 24 + * files (the "Software"), to deal in the Software without 25 + * restriction, including without limitation the rights to use 26 + * copy, modify, merge, publish, distribute, sublicense, and/or 27 + * sell copies of the Software, and to permit persons to whom the 28 + * Software is furnished to do so, subject to the following 29 + * conditions: 30 + * 31 + * The above copyright notice and this permission notice shall be 32 + * included in all copies or substantial portions of the Software. 33 + * 34 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 35 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 36 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 37 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 38 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 39 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 40 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 41 + * OTHER DEALINGS IN THE SOFTWARE. 4 42 */ 5 43 /dts-v1/; 6 44
+11 -9
arch/arm/boot/dts/imx6q.dtsi
··· 294 294 }; 295 295 296 296 &mipi_dsi { 297 - port@2 { 298 - reg = <2>; 297 + ports { 298 + port@2 { 299 + reg = <2>; 299 300 300 - mipi_mux_2: endpoint { 301 - remote-endpoint = <&ipu2_di0_mipi>; 301 + mipi_mux_2: endpoint { 302 + remote-endpoint = <&ipu2_di0_mipi>; 303 + }; 302 304 }; 303 - }; 304 305 305 - port@3 { 306 - reg = <3>; 306 + port@3 { 307 + reg = <3>; 307 308 308 - mipi_mux_3: endpoint { 309 - remote-endpoint = <&ipu2_di1_mipi>; 309 + mipi_mux_3: endpoint { 310 + remote-endpoint = <&ipu2_di1_mipi>; 311 + }; 310 312 }; 311 313 }; 312 314 };
+62
arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
··· 1 1 /* 2 2 * Copyright (C) 2014 Russell King 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of the 12 + * License. 13 + * 14 + * This file is distributed in the hope that it will be useful 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * Or, alternatively 20 + * 21 + * b) Permission is hereby granted, free of charge, to any person 22 + * obtaining a copy of this software and associated documentation 23 + * files (the "Software"), to deal in the Software without 24 + * restriction, including without limitation the rights to use 25 + * copy, modify, merge, publish, distribute, sublicense, and/or 26 + * sell copies of the Software, and to permit persons to whom the 27 + * Software is furnished to do so, subject to the following 28 + * conditions: 29 + * 30 + * The above copyright notice and this permission notice shall be 31 + * included in all copies or substantial portions of the Software. 32 + * 33 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 34 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 35 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 37 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 38 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 39 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 40 + * OTHER DEALINGS IN THE SOFTWARE. 3 41 */ 4 42 #include "imx6qdl-microsom.dtsi" 5 43 #include "imx6qdl-microsom-ar8035.dtsi" 44 + #include <dt-bindings/input/input.h> 45 + #include <dt-bindings/gpio/gpio.h> 6 46 7 47 / { 8 48 ir_recv: ir-receiver { ··· 105 65 /* IMX6 doesn't implement this yet */ 106 66 spdif-controller = <&spdif>; 107 67 spdif-out; 68 + }; 69 + 70 + gpio-keys { 71 + compatible = "gpio-keys"; 72 + pinctrl-0 = <&pinctrl_gpio_key>; 73 + pinctrl-names = "default"; 74 + 75 + button_0 { 76 + label = "Button 0"; 77 + gpios = <&gpio3 8 GPIO_ACTIVE_LOW>; 78 + linux,code = <BTN_0>; 79 + }; 108 80 }; 109 81 }; 110 82 ··· 222 170 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059 223 171 >; 224 172 }; 173 + 174 + pinctrl_gpio_key: gpio-key { 175 + fsl,pins = < 176 + MX6QDL_PAD_EIM_DA8__GPIO3_IO08 0x17059 177 + >; 178 + }; 225 179 }; 180 + }; 181 + 182 + &pwm1 { 183 + status = "okay"; 226 184 }; 227 185 228 186 &spdif {
+97 -4
arch/arm/boot/dts/imx6qdl-hummingboard.dtsi
··· 1 1 /* 2 2 * Copyright (C) 2013,2014 Russell King 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of the 12 + * License. 13 + * 14 + * This file is distributed in the hope that it will be useful 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * Or, alternatively 20 + * 21 + * b) Permission is hereby granted, free of charge, to any person 22 + * obtaining a copy of this software and associated documentation 23 + * files (the "Software"), to deal in the Software without 24 + * restriction, including without limitation the rights to use 25 + * copy, modify, merge, publish, distribute, sublicense, and/or 26 + * sell copies of the Software, and to permit persons to whom the 27 + * Software is furnished to do so, subject to the following 28 + * conditions: 29 + * 30 + * The above copyright notice and this permission notice shall be 31 + * included in all copies or substantial portions of the Software. 32 + * 33 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 34 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 35 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 37 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 38 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 39 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 40 + * OTHER DEALINGS IN THE SOFTWARE. 3 41 */ 4 42 #include "imx6qdl-microsom.dtsi" 5 43 #include "imx6qdl-microsom-ar8035.dtsi" ··· 88 50 }; 89 51 }; 90 52 53 + sound-sgtl5000 { 54 + audio-codec = <&sgtl5000>; 55 + audio-routing = 56 + "MIC_IN", "Mic Jack", 57 + "Mic Jack", "Mic Bias", 58 + "Headphone Jack", "HP_OUT"; 59 + compatible = "fsl,imx-audio-sgtl5000"; 60 + model = "On-board Codec"; 61 + mux-ext-port = <5>; 62 + mux-int-port = <1>; 63 + ssi-controller = <&ssi1>; 64 + }; 65 + 91 66 sound-spdif { 92 67 compatible = "fsl,imx-audio-spdif"; 93 68 model = "On-board SPDIF"; ··· 108 57 spdif-controller = <&spdif>; 109 58 spdif-out; 110 59 }; 60 + }; 61 + 62 + &audmux { 63 + status = "okay"; 111 64 }; 112 65 113 66 &can1 { ··· 130 75 &i2c1 { 131 76 pinctrl-names = "default"; 132 77 pinctrl-0 = <&pinctrl_hummingboard_i2c1>; 133 - 134 - /* 135 - * Not fitted on Carrier-1 board... yet 136 78 status = "okay"; 137 79 80 + /* Pro baseboard model */ 138 81 rtc: pcf8523@68 { 139 82 compatible = "nxp,pcf8523"; 140 83 reg = <0x68>; 141 84 }; 142 - */ 85 + 86 + /* Pro baseboard model */ 87 + sgtl5000: sgtl5000@0a { 88 + clocks = <&clks IMX6QDL_CLK_CKO>; 89 + compatible = "fsl,sgtl5000"; 90 + pinctrl-names = "default"; 91 + pinctrl-0 = <&pinctrl_hummingboard_sgtl5000>; 92 + reg = <0x0a>; 93 + VDDA-supply = <&reg_3p3v>; 94 + VDDIO-supply = <&reg_3p3v>; 95 + }; 143 96 }; 144 97 145 98 &i2c2 { ··· 192 129 >; 193 130 }; 194 131 132 + pinctrl_hummingboard_pwm1: pwm1grp { 133 + fsl,pins = <MX6QDL_PAD_DISP0_DAT8__PWM1_OUT 0x1b0b1>; 134 + }; 135 + 136 + pinctrl_hummingboard_sgtl5000: hummingboard-sgtl5000 { 137 + fsl,pins = < 138 + MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0 139 + MX6QDL_PAD_KEY_COL0__AUD5_TXC 0x130b0 140 + MX6QDL_PAD_KEY_ROW0__AUD5_TXD 0x110b0 141 + MX6QDL_PAD_KEY_COL1__AUD5_TXFS 0x130b0 142 + MX6QDL_PAD_GPIO_5__CCM_CLKO1 0x130b0 143 + >; 144 + }; 145 + 195 146 pinctrl_hummingboard_spdif: hummingboard-spdif { 196 147 fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; 197 148 }; ··· 245 168 }; 246 169 }; 247 170 171 + &pwm1 { 172 + pinctrl-names = "default"; 173 + pinctrl-0 = <&pinctrl_hummingboard_pwm1>; 174 + status = "okay"; 175 + }; 176 + 177 + &pwm2 { 178 + pinctrl-names = "default"; 179 + status = "okay"; 180 + }; 181 + 248 182 &spdif { 249 183 pinctrl-names = "default"; 250 184 pinctrl-0 = <&pinctrl_hummingboard_spdif>; 185 + status = "okay"; 186 + }; 187 + 188 + &ssi1 { 189 + fsl,mode = "i2s-slave"; 251 190 status = "okay"; 252 191 }; 253 192
+38
arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi
··· 3 3 * 4 4 * This describes the hookup for an AR8035 to the iMX6 on the SolidRun 5 5 * MicroSOM. 6 + * 7 + * This file is dual-licensed: you can use it either under the terms 8 + * of the GPL or the X11 license, at your option. Note that this dual 9 + * licensing only applies to this file, and not this project as a 10 + * whole. 11 + * 12 + * a) This file is free software; you can redistribute it and/or 13 + * modify it under the terms of the GNU General Public License as 14 + * published by the Free Software Foundation; either version 2 of the 15 + * License. 16 + * 17 + * This file is distributed in the hope that it will be useful 18 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 + * GNU General Public License for more details. 21 + * 22 + * Or, alternatively 23 + * 24 + * b) Permission is hereby granted, free of charge, to any person 25 + * obtaining a copy of this software and associated documentation 26 + * files (the "Software"), to deal in the Software without 27 + * restriction, including without limitation the rights to use 28 + * copy, modify, merge, publish, distribute, sublicense, and/or 29 + * sell copies of the Software, and to permit persons to whom the 30 + * Software is furnished to do so, subject to the following 31 + * conditions: 32 + * 33 + * The above copyright notice and this permission notice shall be 34 + * included in all copies or substantial portions of the Software. 35 + * 36 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 37 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 38 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 39 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 40 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 41 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 42 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 43 + * OTHER DEALINGS IN THE SOFTWARE. 6 44 */ 7 45 &fec { 8 46 pinctrl-names = "default";
+38
arch/arm/boot/dts/imx6qdl-microsom.dtsi
··· 1 1 /* 2 2 * Copyright (C) 2013,2014 Russell King 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of the 12 + * License. 13 + * 14 + * This file is distributed in the hope that it will be useful 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * Or, alternatively 20 + * 21 + * b) Permission is hereby granted, free of charge, to any person 22 + * obtaining a copy of this software and associated documentation 23 + * files (the "Software"), to deal in the Software without 24 + * restriction, including without limitation the rights to use 25 + * copy, modify, merge, publish, distribute, sublicense, and/or 26 + * sell copies of the Software, and to permit persons to whom the 27 + * Software is furnished to do so, subject to the following 28 + * conditions: 29 + * 30 + * The above copyright notice and this permission notice shall be 31 + * included in all copies or substantial portions of the Software. 32 + * 33 + * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND 34 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 35 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 36 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 37 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY 38 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 39 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 40 + * OTHER DEALINGS IN THE SOFTWARE. 3 41 */ 4 42 5 43 &iomuxc {
+35
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
··· 182 182 }; 183 183 }; 184 184 185 + &i2c3 { 186 + pinctrl-names = "default"; 187 + pinctrl-0 = <&pinctrl_i2c3>; 188 + pinctrl-assert-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>; 189 + status = "okay"; 190 + 191 + max7310_a: gpio@30 { 192 + compatible = "maxim,max7310"; 193 + reg = <0x30>; 194 + gpio-controller; 195 + #gpio-cells = <2>; 196 + }; 197 + 198 + max7310_b: gpio@32 { 199 + compatible = "maxim,max7310"; 200 + reg = <0x32>; 201 + gpio-controller; 202 + #gpio-cells = <2>; 203 + }; 204 + 205 + max7310_c: gpio@34 { 206 + compatible = "maxim,max7310"; 207 + reg = <0x34>; 208 + gpio-controller; 209 + #gpio-cells = <2>; 210 + }; 211 + }; 212 + 185 213 &iomuxc { 186 214 pinctrl-names = "default"; 187 215 pinctrl-0 = <&pinctrl_hog>; ··· 290 262 fsl,pins = < 291 263 MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1 292 264 MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 265 + >; 266 + }; 267 + 268 + pinctrl_i2c3: i2c3grp { 269 + fsl,pins = < 270 + MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1 271 + MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1 293 272 >; 294 273 }; 295 274
+37 -12
arch/arm/boot/dts/imx6qdl.dtsi
··· 53 53 interrupt-controller; 54 54 reg = <0x00a01000 0x1000>, 55 55 <0x00a00100 0x100>; 56 + interrupt-parent = <&intc>; 56 57 }; 57 58 58 59 clocks { ··· 83 82 #address-cells = <1>; 84 83 #size-cells = <1>; 85 84 compatible = "simple-bus"; 86 - interrupt-parent = <&intc>; 85 + interrupt-parent = <&gpc>; 87 86 ranges; 88 87 89 88 dma_apbh: dma-apbh@00110000 { ··· 123 122 compatible = "arm,cortex-a9-twd-timer"; 124 123 reg = <0x00a00600 0x20>; 125 124 interrupts = <1 13 0xf01>; 125 + interrupt-parent = <&intc>; 126 126 clocks = <&clks IMX6QDL_CLK_TWD>; 127 127 }; 128 128 ··· 359 357 clocks = <&clks IMX6QDL_CLK_IPG>, 360 358 <&clks IMX6QDL_CLK_PWM1>; 361 359 clock-names = "ipg", "per"; 360 + status = "disabled"; 362 361 }; 363 362 364 363 pwm2: pwm@02084000 { ··· 370 367 clocks = <&clks IMX6QDL_CLK_IPG>, 371 368 <&clks IMX6QDL_CLK_PWM2>; 372 369 clock-names = "ipg", "per"; 370 + status = "disabled"; 373 371 }; 374 372 375 373 pwm3: pwm@02088000 { ··· 381 377 clocks = <&clks IMX6QDL_CLK_IPG>, 382 378 <&clks IMX6QDL_CLK_PWM3>; 383 379 clock-names = "ipg", "per"; 380 + status = "disabled"; 384 381 }; 385 382 386 383 pwm4: pwm@0208c000 { ··· 392 387 clocks = <&clks IMX6QDL_CLK_IPG>, 393 388 <&clks IMX6QDL_CLK_PWM4>; 394 389 clock-names = "ipg", "per"; 390 + status = "disabled"; 395 391 }; 396 392 397 393 can1: flexcan@02090000 { ··· 604 598 regulator-name = "vddpu"; 605 599 regulator-min-microvolt = <725000>; 606 600 regulator-max-microvolt = <1450000>; 607 - regulator-always-on; 601 + regulator-enable-ramp-delay = <150>; 608 602 anatop-reg-offset = <0x140>; 609 603 anatop-vol-bit-shift = <9>; 610 604 anatop-vol-bit-width = <5>; ··· 664 658 #size-cells = <1>; 665 659 ranges = <0 0x020cc000 0x4000>; 666 660 667 - snvs-rtc-lp@34 { 661 + snvs_rtc: snvs-rtc-lp@34 { 668 662 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 669 663 reg = <0x34 0x58>; 670 664 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, ··· 699 693 gpc: gpc@020dc000 { 700 694 compatible = "fsl,imx6q-gpc"; 701 695 reg = <0x020dc000 0x4000>; 696 + interrupt-controller; 697 + #interrupt-cells = <3>; 702 698 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>, 703 699 <0 90 IRQ_TYPE_LEVEL_HIGH>; 700 + interrupt-parent = <&intc>; 701 + pu-supply = <&reg_pu>; 702 + clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>, 703 + <&clks IMX6QDL_CLK_GPU3D_SHADER>, 704 + <&clks IMX6QDL_CLK_GPU2D_CORE>, 705 + <&clks IMX6QDL_CLK_GPU2D_AXI>, 706 + <&clks IMX6QDL_CLK_OPENVG_AXI>, 707 + <&clks IMX6QDL_CLK_VPU_AXI>; 708 + #power-domain-cells = <1>; 704 709 }; 705 710 706 711 gpr: iomuxc-gpr@020e0000 { ··· 862 845 clocks = <&clks IMX6QDL_CLK_USBOH3>; 863 846 fsl,usbphy = <&usbphy2>; 864 847 fsl,usbmisc = <&usbmisc 1>; 848 + dr_mode = "host"; 865 849 status = "disabled"; 866 850 }; 867 851 ··· 872 854 interrupts = <0 41 IRQ_TYPE_LEVEL_HIGH>; 873 855 clocks = <&clks IMX6QDL_CLK_USBOH3>; 874 856 fsl,usbmisc = <&usbmisc 2>; 857 + dr_mode = "host"; 875 858 status = "disabled"; 876 859 }; 877 860 ··· 882 863 interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>; 883 864 clocks = <&clks IMX6QDL_CLK_USBOH3>; 884 865 fsl,usbmisc = <&usbmisc 3>; 866 + dr_mode = "host"; 885 867 status = "disabled"; 886 868 }; 887 869 ··· 1042 1022 reg = <0x021e0000 0x4000>; 1043 1023 status = "disabled"; 1044 1024 1045 - port@0 { 1046 - reg = <0>; 1025 + ports { 1026 + #address-cells = <1>; 1027 + #size-cells = <0>; 1047 1028 1048 - mipi_mux_0: endpoint { 1049 - remote-endpoint = <&ipu1_di0_mipi>; 1029 + port@0 { 1030 + reg = <0>; 1031 + 1032 + mipi_mux_0: endpoint { 1033 + remote-endpoint = <&ipu1_di0_mipi>; 1034 + }; 1050 1035 }; 1051 - }; 1052 1036 1053 - port@1 { 1054 - reg = <1>; 1037 + port@1 { 1038 + reg = <1>; 1055 1039 1056 - mipi_mux_1: endpoint { 1057 - remote-endpoint = <&ipu1_di1_mipi>; 1040 + mipi_mux_1: endpoint { 1041 + remote-endpoint = <&ipu1_di1_mipi>; 1042 + }; 1058 1043 }; 1059 1044 }; 1060 1045 };
+262
arch/arm/boot/dts/imx6sl-warp.dts
··· 1 + /* 2 + * Copyright 2014, 2015 O.S. Systems Software LTDA. 3 + * 4 + * This file is dual-licensed: you can use it either under the terms 5 + * of the GPL or the X11 license, at your option. Note that this dual 6 + * licensing only applies to this file, and not this project as a 7 + * whole. 8 + * 9 + * a) This file is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of 12 + * the License, or (at your option) any later version. 13 + * 14 + * This file is distributed in the hope that it will be useful, 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * You should have received a copy of the GNU General Public 20 + * License along with this file; if not, write to the Free 21 + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, 22 + * MA 02110-1301 USA 23 + * 24 + * Or, alternatively, 25 + * 26 + * b) Permission is hereby granted, free of charge, to any person 27 + * obtaining a copy of this software and associated documentation 28 + * files (the "Software"), to deal in the Software without 29 + * restriction, including without limitation the rights to use, 30 + * copy, modify, merge, publish, distribute, sublicense, and/or 31 + * sell copies of the Software, and to permit persons to whom the 32 + * Software is furnished to do so, subject to the following 33 + * conditions: 34 + * 35 + * The above copyright notice and this permission notice shall be 36 + * included in all copies or substantial portions of the Software. 37 + * 38 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 39 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 40 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 41 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 42 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 43 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 44 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 45 + * OTHER DEALINGS IN THE SOFTWARE. 46 + */ 47 + 48 + /dts-v1/; 49 + 50 + #include <dt-bindings/gpio/gpio.h> 51 + #include "imx6sl.dtsi" 52 + 53 + / { 54 + model = "WaRP Board"; 55 + compatible = "warp,imx6sl-warp", "fsl,imx6sl"; 56 + 57 + memory { 58 + reg = <0x80000000 0x20000000>; 59 + }; 60 + 61 + regulators { 62 + compatible = "simple-bus"; 63 + #address-cells = <1>; 64 + #size-cells = <0>; 65 + 66 + reg_usb_otg1_vbus: regulator@0 { 67 + compatible = "regulator-fixed"; 68 + reg = <0>; 69 + regulator-name = "usb_otg1_vbus"; 70 + regulator-min-microvolt = <5000000>; 71 + regulator-max-microvolt = <5000000>; 72 + gpio = <&gpio4 0 0>; 73 + enable-active-high; 74 + }; 75 + 76 + reg_usb_otg2_vbus: regulator@1 { 77 + compatible = "regulator-fixed"; 78 + reg = <1>; 79 + regulator-name = "usb_otg2_vbus"; 80 + regulator-min-microvolt = <5000000>; 81 + regulator-max-microvolt = <5000000>; 82 + gpio = <&gpio4 2 0>; 83 + enable-active-high; 84 + }; 85 + 86 + reg_1p8v: regulator@2 { 87 + compatible = "regulator-fixed"; 88 + reg = <2>; 89 + regulator-name = "1P8V"; 90 + regulator-min-microvolt = <1800000>; 91 + regulator-max-microvolt = <1800000>; 92 + }; 93 + }; 94 + 95 + usdhc3_pwrseq: usdhc3_pwrseq { 96 + compatible = "mmc-pwrseq-simple"; 97 + reset-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>, /* WL_REG_ON */ 98 + <&gpio3 25 GPIO_ACTIVE_LOW>, /* BT_REG_ON */ 99 + <&gpio4 4 GPIO_ACTIVE_LOW>, /* BT_WAKE */ 100 + <&gpio4 6 GPIO_ACTIVE_LOW>; /* BT_RST_N */ 101 + }; 102 + }; 103 + 104 + &uart1 { 105 + pinctrl-names = "default"; 106 + pinctrl-0 = <&pinctrl_uart1>; 107 + status = "okay"; 108 + }; 109 + 110 + &uart2 { 111 + pinctrl-names = "default"; 112 + pinctrl-0 = <&pinctrl_uart2>; 113 + fsl,uart-has-rtscts; 114 + status = "okay"; 115 + }; 116 + 117 + &uart3 { 118 + pinctrl-names = "default"; 119 + pinctrl-0 = <&pinctrl_uart3>; 120 + status = "okay"; 121 + }; 122 + 123 + &usbotg1 { 124 + vbus-supply = <&reg_usb_otg1_vbus>; 125 + dr_mode = "host"; 126 + disable-over-current; 127 + status = "okay"; 128 + }; 129 + 130 + &usbotg2 { 131 + vbus-supply = <&reg_usb_otg2_vbus>; 132 + disable-over-current; 133 + status = "okay"; 134 + }; 135 + 136 + &usdhc2 { 137 + pinctrl-names = "default", "state_100mhz", "state_200mhz"; 138 + pinctrl-0 = <&pinctrl_usdhc2>; 139 + pinctrl-1 = <&pinctrl_usdhc2_100mhz>; 140 + pinctrl-2 = <&pinctrl_usdhc2_200mhz>; 141 + bus-width = <8>; 142 + non-removable; 143 + status = "okay"; 144 + }; 145 + 146 + &usdhc3 { 147 + pinctrl-names = "default", "state_100mhz", "state_200mhz"; 148 + pinctrl-0 = <&pinctrl_usdhc3>; 149 + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; 150 + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; 151 + bus-width = <4>; 152 + non-removable; 153 + keep-power-in-suspend; 154 + enable-sdio-wakeup; 155 + mmc-pwrseq = <&usdhc3_pwrseq>; 156 + status = "okay"; 157 + }; 158 + 159 + &iomuxc { 160 + imx6sl-warp { 161 + pinctrl_uart1: uart1grp { 162 + fsl,pins = < 163 + MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x41b0b1 164 + MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x41b0b1 165 + >; 166 + }; 167 + 168 + pinctrl_uart2: uart2grp { 169 + fsl,pins = < 170 + MX6SL_PAD_EPDC_D12__UART2_RX_DATA 0x41b0b1 171 + MX6SL_PAD_EPDC_D13__UART2_TX_DATA 0x41b0b1 172 + MX6SL_PAD_EPDC_D14__UART2_RTS_B 0x4130B1 173 + MX6SL_PAD_EPDC_D15__UART2_CTS_B 0x4130B1 174 + >; 175 + }; 176 + 177 + pinctrl_uart3: uart3grp { 178 + fsl,pins = < 179 + MX6SL_PAD_AUD_RXC__UART3_RX_DATA 0x41b0b1 180 + MX6SL_PAD_AUD_RXC__UART3_TX_DATA 0x41b0b1 181 + >; 182 + }; 183 + 184 + pinctrl_usdhc2: usdhc2grp { 185 + fsl,pins = < 186 + MX6SL_PAD_SD2_CMD__SD2_CMD 0x417059 187 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x410059 188 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x417059 189 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x417059 190 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x417059 191 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x417059 192 + MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x417059 193 + MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x417059 194 + MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x417059 195 + MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x417059 196 + >; 197 + }; 198 + 199 + pinctrl_usdhc2_100mhz: usdhc2grp100mhz { 200 + fsl,pins = < 201 + MX6SL_PAD_SD2_CMD__SD2_CMD 0x4170b9 202 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x4100b9 203 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x4170b9 204 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x4170b9 205 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x4170b9 206 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x4170b9 207 + MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x4170b9 208 + MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x4170b9 209 + MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x4170b9 210 + MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x4170b9 211 + >; 212 + }; 213 + 214 + pinctrl_usdhc2_200mhz: usdhc2grp200mhz { 215 + fsl,pins = < 216 + MX6SL_PAD_SD2_CMD__SD2_CMD 0x4170f9 217 + MX6SL_PAD_SD2_CLK__SD2_CLK 0x4100f9 218 + MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x4170f9 219 + MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x4170f9 220 + MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x4170f9 221 + MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x4170f9 222 + MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x4170f9 223 + MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x4170f9 224 + MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x4170f9 225 + MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x4170f9 226 + >; 227 + }; 228 + 229 + pinctrl_usdhc3: usdhc3grp { 230 + fsl,pins = < 231 + MX6SL_PAD_SD3_CMD__SD3_CMD 0x417059 232 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x410059 233 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x417059 234 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x417059 235 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x417059 236 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x417059 237 + >; 238 + }; 239 + 240 + pinctrl_usdhc3_100mhz: usdhc3grp100mhz { 241 + fsl,pins = < 242 + MX6SL_PAD_SD3_CMD__SD3_CMD 0x4170b9 243 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x4100b9 244 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x4170b9 245 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x4170b9 246 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x4170b9 247 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x4170b9 248 + >; 249 + }; 250 + 251 + pinctrl_usdhc3_200mhz: usdhc3grp200mhz { 252 + fsl,pins = < 253 + MX6SL_PAD_SD3_CMD__SD3_CMD 0x4170f9 254 + MX6SL_PAD_SD3_CLK__SD3_CLK 0x4100f9 255 + MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x4170f9 256 + MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x4170f9 257 + MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x4170f9 258 + MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x4170f9 259 + >; 260 + }; 261 + }; 262 + };
+11 -2
arch/arm/boot/dts/imx6sl.dtsi
··· 72 72 interrupt-controller; 73 73 reg = <0x00a01000 0x1000>, 74 74 <0x00a00100 0x100>; 75 + interrupt-parent = <&intc>; 75 76 }; 76 77 77 78 clocks { ··· 96 95 #address-cells = <1>; 97 96 #size-cells = <1>; 98 97 compatible = "simple-bus"; 99 - interrupt-parent = <&intc>; 98 + interrupt-parent = <&gpc>; 100 99 ranges; 101 100 102 101 ocram: sram@00900000 { ··· 569 568 #size-cells = <1>; 570 569 ranges = <0 0x020cc000 0x4000>; 571 570 572 - snvs-rtc-lp@34 { 571 + snvs_rtc: snvs-rtc-lp@34 { 573 572 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 574 573 reg = <0x34 0x58>; 575 574 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, ··· 604 603 gpc: gpc@020dc000 { 605 604 compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc"; 606 605 reg = <0x020dc000 0x4000>; 606 + interrupt-controller; 607 + #interrupt-cells = <3>; 607 608 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>; 609 + interrupt-parent = <&intc>; 610 + pu-supply = <&reg_pu>; 611 + clocks = <&clks IMX6SL_CLK_GPU2D_OVG>, 612 + <&clks IMX6SL_CLK_GPU2D_PODF>; 613 + #power-domain-cells = <1>; 608 614 }; 609 615 610 616 gpr: iomuxc-gpr@020e0000 { ··· 707 699 interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>; 708 700 clocks = <&clks IMX6SL_CLK_USBOH3>; 709 701 fsl,usbmisc = <&usbmisc 2>; 702 + dr_mode = "host"; 710 703 status = "disabled"; 711 704 }; 712 705
+143
arch/arm/boot/dts/imx6sx-sdb-reva.dts
··· 1 + /* 2 + * Copyright (C) 2015 Freescale Semiconductor, Inc. 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License version 2 as 6 + * published by the Free Software Foundation. 7 + */ 8 + 9 + #include "imx6sx-sdb.dtsi" 10 + 11 + / { 12 + model = "Freescale i.MX6 SoloX SDB RevA Board"; 13 + }; 14 + 15 + &i2c1 { 16 + clock-frequency = <100000>; 17 + pinctrl-names = "default"; 18 + pinctrl-0 = <&pinctrl_i2c1>; 19 + status = "okay"; 20 + 21 + pmic: pfuze100@08 { 22 + compatible = "fsl,pfuze100"; 23 + reg = <0x08>; 24 + 25 + regulators { 26 + sw1a_reg: sw1ab { 27 + regulator-min-microvolt = <300000>; 28 + regulator-max-microvolt = <1875000>; 29 + regulator-boot-on; 30 + regulator-always-on; 31 + regulator-ramp-delay = <6250>; 32 + }; 33 + 34 + sw1c_reg: sw1c { 35 + regulator-min-microvolt = <300000>; 36 + regulator-max-microvolt = <1875000>; 37 + regulator-boot-on; 38 + regulator-always-on; 39 + regulator-ramp-delay = <6250>; 40 + }; 41 + 42 + sw2_reg: sw2 { 43 + regulator-min-microvolt = <800000>; 44 + regulator-max-microvolt = <3300000>; 45 + regulator-boot-on; 46 + regulator-always-on; 47 + }; 48 + 49 + sw3a_reg: sw3a { 50 + regulator-min-microvolt = <400000>; 51 + regulator-max-microvolt = <1975000>; 52 + regulator-boot-on; 53 + regulator-always-on; 54 + }; 55 + 56 + sw3b_reg: sw3b { 57 + regulator-min-microvolt = <400000>; 58 + regulator-max-microvolt = <1975000>; 59 + regulator-boot-on; 60 + regulator-always-on; 61 + }; 62 + 63 + sw4_reg: sw4 { 64 + regulator-min-microvolt = <800000>; 65 + regulator-max-microvolt = <3300000>; 66 + }; 67 + 68 + swbst_reg: swbst { 69 + regulator-min-microvolt = <5000000>; 70 + regulator-max-microvolt = <5150000>; 71 + }; 72 + 73 + snvs_reg: vsnvs { 74 + regulator-min-microvolt = <1000000>; 75 + regulator-max-microvolt = <3000000>; 76 + regulator-boot-on; 77 + regulator-always-on; 78 + }; 79 + 80 + vref_reg: vrefddr { 81 + regulator-boot-on; 82 + regulator-always-on; 83 + }; 84 + 85 + vgen1_reg: vgen1 { 86 + regulator-min-microvolt = <800000>; 87 + regulator-max-microvolt = <1550000>; 88 + regulator-always-on; 89 + }; 90 + 91 + vgen2_reg: vgen2 { 92 + regulator-min-microvolt = <800000>; 93 + regulator-max-microvolt = <1550000>; 94 + }; 95 + 96 + vgen3_reg: vgen3 { 97 + regulator-min-microvolt = <1800000>; 98 + regulator-max-microvolt = <3300000>; 99 + regulator-always-on; 100 + }; 101 + 102 + vgen4_reg: vgen4 { 103 + regulator-min-microvolt = <1800000>; 104 + regulator-max-microvolt = <3300000>; 105 + regulator-always-on; 106 + }; 107 + 108 + vgen5_reg: vgen5 { 109 + regulator-min-microvolt = <1800000>; 110 + regulator-max-microvolt = <3300000>; 111 + regulator-always-on; 112 + }; 113 + 114 + vgen6_reg: vgen6 { 115 + regulator-min-microvolt = <1800000>; 116 + regulator-max-microvolt = <3300000>; 117 + regulator-always-on; 118 + }; 119 + }; 120 + }; 121 + }; 122 + 123 + &qspi2 { 124 + pinctrl-names = "default"; 125 + pinctrl-0 = <&pinctrl_qspi2>; 126 + status = "okay"; 127 + 128 + flash0: s25fl128s@0 { 129 + reg = <0>; 130 + #address-cells = <1>; 131 + #size-cells = <1>; 132 + compatible = "spansion,s25fl128s"; 133 + spi-max-frequency = <66000000>; 134 + }; 135 + 136 + flash1: s25fl128s@1 { 137 + reg = <1>; 138 + #address-cells = <1>; 139 + #size-cells = <1>; 140 + compatible = "spansion,s25fl128s"; 141 + spi-max-frequency = <66000000>; 142 + }; 143 + };
+31 -578
arch/arm/boot/dts/imx6sx-sdb.dts
··· 1 1 /* 2 - * Copyright (C) 2014 Freescale Semiconductor, Inc. 2 + * Copyright (C) 2015 Freescale Semiconductor, Inc. 3 3 * 4 4 * This program is free software; you can redistribute it and/or modify 5 5 * it under the terms of the GNU General Public License version 2 as 6 6 * published by the Free Software Foundation. 7 7 */ 8 8 9 - /dts-v1/; 10 - 11 - #include <dt-bindings/gpio/gpio.h> 12 - #include <dt-bindings/input/input.h> 13 - #include "imx6sx.dtsi" 9 + #include "imx6sx-sdb.dtsi" 14 10 15 11 / { 16 - model = "Freescale i.MX6 SoloX SDB Board"; 17 - compatible = "fsl,imx6sx-sdb", "fsl,imx6sx"; 18 - 19 - chosen { 20 - stdout-path = &uart1; 21 - }; 22 - 23 - memory { 24 - reg = <0x80000000 0x40000000>; 25 - }; 26 - 27 - backlight { 28 - compatible = "pwm-backlight"; 29 - pwms = <&pwm3 0 5000000>; 30 - brightness-levels = <0 4 8 16 32 64 128 255>; 31 - default-brightness-level = <6>; 32 - }; 33 - 34 - gpio-keys { 35 - compatible = "gpio-keys"; 36 - pinctrl-names = "default"; 37 - pinctrl-0 = <&pinctrl_gpio_keys>; 38 - 39 - volume-up { 40 - label = "Volume Up"; 41 - gpios = <&gpio1 18 GPIO_ACTIVE_LOW>; 42 - linux,code = <KEY_VOLUMEUP>; 43 - }; 44 - 45 - volume-down { 46 - label = "Volume Down"; 47 - gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; 48 - linux,code = <KEY_VOLUMEDOWN>; 49 - }; 50 - }; 51 - 52 - regulators { 53 - compatible = "simple-bus"; 54 - #address-cells = <1>; 55 - #size-cells = <0>; 56 - 57 - vcc_sd3: regulator@0 { 58 - compatible = "regulator-fixed"; 59 - reg = <0>; 60 - pinctrl-names = "default"; 61 - pinctrl-0 = <&pinctrl_vcc_sd3>; 62 - regulator-name = "VCC_SD3"; 63 - regulator-min-microvolt = <3000000>; 64 - regulator-max-microvolt = <3000000>; 65 - gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>; 66 - enable-active-high; 67 - }; 68 - 69 - reg_usb_otg1_vbus: regulator@1 { 70 - compatible = "regulator-fixed"; 71 - reg = <1>; 72 - pinctrl-names = "default"; 73 - pinctrl-0 = <&pinctrl_usb_otg1>; 74 - regulator-name = "usb_otg1_vbus"; 75 - regulator-min-microvolt = <5000000>; 76 - regulator-max-microvolt = <5000000>; 77 - gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; 78 - enable-active-high; 79 - }; 80 - 81 - reg_usb_otg2_vbus: regulator@2 { 82 - compatible = "regulator-fixed"; 83 - reg = <2>; 84 - pinctrl-names = "default"; 85 - pinctrl-0 = <&pinctrl_usb_otg2>; 86 - regulator-name = "usb_otg2_vbus"; 87 - regulator-min-microvolt = <5000000>; 88 - regulator-max-microvolt = <5000000>; 89 - gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>; 90 - enable-active-high; 91 - }; 92 - 93 - reg_psu_5v: regulator@3 { 94 - compatible = "regulator-fixed"; 95 - reg = <3>; 96 - regulator-name = "PSU-5V0"; 97 - regulator-min-microvolt = <5000000>; 98 - regulator-max-microvolt = <5000000>; 99 - }; 100 - 101 - reg_lcd_3v3: regulator@4 { 102 - compatible = "regulator-fixed"; 103 - reg = <4>; 104 - regulator-name = "lcd-3v3"; 105 - gpio = <&gpio3 27 0>; 106 - enable-active-high; 107 - }; 108 - 109 - reg_peri_3v3: regulator@5 { 110 - compatible = "regulator-fixed"; 111 - reg = <5>; 112 - pinctrl-names = "default"; 113 - pinctrl-0 = <&pinctrl_peri_3v3>; 114 - regulator-name = "peri_3v3"; 115 - regulator-min-microvolt = <3300000>; 116 - regulator-max-microvolt = <3300000>; 117 - gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>; 118 - enable-active-high; 119 - regulator-always-on; 120 - }; 121 - 122 - reg_enet_3v3: regulator@6 { 123 - compatible = "regulator-fixed"; 124 - reg = <6>; 125 - pinctrl-names = "default"; 126 - pinctrl-0 = <&pinctrl_enet_3v3>; 127 - regulator-name = "enet_3v3"; 128 - regulator-min-microvolt = <3300000>; 129 - regulator-max-microvolt = <3300000>; 130 - gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; 131 - }; 132 - }; 133 - 134 - sound { 135 - compatible = "fsl,imx6sx-sdb-wm8962", "fsl,imx-audio-wm8962"; 136 - model = "wm8962-audio"; 137 - ssi-controller = <&ssi2>; 138 - audio-codec = <&codec>; 139 - audio-routing = 140 - "Headphone Jack", "HPOUTL", 141 - "Headphone Jack", "HPOUTR", 142 - "Ext Spk", "SPKOUTL", 143 - "Ext Spk", "SPKOUTR", 144 - "AMIC", "MICBIAS", 145 - "IN3R", "AMIC"; 146 - mux-int-port = <2>; 147 - mux-ext-port = <6>; 148 - }; 12 + model = "Freescale i.MX6 SoloX SDB RevB Board"; 149 13 }; 150 14 151 - &audmux { 152 - pinctrl-names = "default"; 153 - pinctrl-0 = <&pinctrl_audmux>; 154 - status = "okay"; 155 - }; 156 - 157 - &fec1 { 158 - pinctrl-names = "default"; 159 - pinctrl-0 = <&pinctrl_enet1>; 160 - phy-supply = <&reg_enet_3v3>; 161 - phy-mode = "rgmii"; 162 - phy-handle = <&ethphy1>; 163 - status = "okay"; 164 - 165 - mdio { 166 - #address-cells = <1>; 167 - #size-cells = <0>; 168 - 169 - ethphy1: ethernet-phy@1 { 170 - reg = <1>; 171 - }; 172 - 173 - ethphy2: ethernet-phy@2 { 174 - reg = <2>; 175 - }; 176 - }; 177 - }; 178 - 179 - &fec2 { 180 - pinctrl-names = "default"; 181 - pinctrl-0 = <&pinctrl_enet2>; 182 - phy-mode = "rgmii"; 183 - phy-handle = <&ethphy2>; 184 - status = "okay"; 15 + &cpu0 { 16 + operating-points = < 17 + /* kHz uV */ 18 + 996000 1250000 19 + 792000 1175000 20 + 396000 1175000 21 + >; 22 + fsl,soc-operating-points = < 23 + /* ARM kHz SOC uV */ 24 + 996000 1250000 25 + 792000 1175000 26 + 396000 1175000 27 + >; 185 28 }; 186 29 187 30 &i2c1 { 188 - clock-frequency = <100000>; 189 - pinctrl-names = "default"; 190 - pinctrl-0 = <&pinctrl_i2c1>; 191 - status = "okay"; 31 + clock-frequency = <100000>; 32 + pinctrl-names = "default"; 33 + pinctrl-0 = <&pinctrl_i2c1>; 34 + status = "okay"; 192 35 193 36 pmic: pfuze100@08 { 194 - compatible = "fsl,pfuze100"; 37 + compatible = "fsl,pfuze200"; 195 38 reg = <0x08>; 196 39 197 40 regulators { 198 41 sw1a_reg: sw1ab { 199 - regulator-min-microvolt = <300000>; 200 - regulator-max-microvolt = <1875000>; 201 - regulator-boot-on; 202 - regulator-always-on; 203 - regulator-ramp-delay = <6250>; 204 - }; 205 - 206 - sw1c_reg: sw1c { 207 42 regulator-min-microvolt = <300000>; 208 43 regulator-max-microvolt = <1875000>; 209 44 regulator-boot-on; ··· 65 230 regulator-max-microvolt = <1975000>; 66 231 regulator-boot-on; 67 232 regulator-always-on; 68 - }; 69 - 70 - sw4_reg: sw4 { 71 - regulator-min-microvolt = <800000>; 72 - regulator-max-microvolt = <3300000>; 73 233 }; 74 234 75 235 swbst_reg: swbst { ··· 122 292 }; 123 293 }; 124 294 125 - &i2c4 { 126 - clock-frequency = <100000>; 127 - pinctrl-names = "default"; 128 - pinctrl-0 = <&pinctrl_i2c4>; 129 - status = "okay"; 130 - 131 - codec: wm8962@1a { 132 - compatible = "wlf,wm8962"; 133 - reg = <0x1a>; 134 - clocks = <&clks IMX6SX_CLK_AUDIO>; 135 - DCVDD-supply = <&vgen4_reg>; 136 - DBVDD-supply = <&vgen4_reg>; 137 - AVDD-supply = <&vgen4_reg>; 138 - CPVDD-supply = <&vgen4_reg>; 139 - MICVDD-supply = <&vgen3_reg>; 140 - PLLVDD-supply = <&vgen4_reg>; 141 - SPKVDD1-supply = <&reg_psu_5v>; 142 - SPKVDD2-supply = <&reg_psu_5v>; 143 - }; 144 - }; 145 - 146 - &lcdif1 { 147 - pinctrl-names = "default"; 148 - pinctrl-0 = <&pinctrl_lcd>; 149 - lcd-supply = <&reg_lcd_3v3>; 150 - display = <&display0>; 151 - status = "okay"; 152 - 153 - display0: display0 { 154 - bits-per-pixel = <16>; 155 - bus-width = <24>; 156 - 157 - display-timings { 158 - native-mode = <&timing0>; 159 - timing0: timing0 { 160 - clock-frequency = <33500000>; 161 - hactive = <800>; 162 - vactive = <480>; 163 - hback-porch = <89>; 164 - hfront-porch = <164>; 165 - vback-porch = <23>; 166 - vfront-porch = <10>; 167 - hsync-len = <10>; 168 - vsync-len = <10>; 169 - hsync-active = <0>; 170 - vsync-active = <0>; 171 - de-active = <1>; 172 - pixelclk-active = <0>; 173 - }; 174 - }; 175 - }; 176 - }; 177 - 178 - &pwm3 { 179 - pinctrl-names = "default"; 180 - pinctrl-0 = <&pinctrl_pwm3>; 181 - status = "okay"; 182 - }; 183 - 184 - &snvs_poweroff { 185 - status = "okay"; 186 - }; 187 - 188 295 &qspi2 { 189 296 pinctrl-names = "default"; 190 297 pinctrl-0 = <&pinctrl_qspi2>; 191 298 status = "okay"; 192 299 193 - flash0: s25fl128s@0 { 300 + flash0: n25q256a@0 { 301 + #address-cells = <1>; 302 + #size-cells = <1>; 303 + compatible = "micron,n25q256a"; 304 + spi-max-frequency = <29000000>; 194 305 reg = <0>; 195 - #address-cells = <1>; 196 - #size-cells = <1>; 197 - compatible = "spansion,s25fl128s"; 198 - spi-max-frequency = <66000000>; 199 306 }; 200 307 201 - flash1: s25fl128s@1 { 308 + flash1: n25q256a@1 { 309 + #address-cells = <1>; 310 + #size-cells = <1>; 311 + compatible = "micron,n25q256a"; 312 + spi-max-frequency = <29000000>; 202 313 reg = <1>; 203 - #address-cells = <1>; 204 - #size-cells = <1>; 205 - compatible = "spansion,s25fl128s"; 206 - spi-max-frequency = <66000000>; 207 - }; 208 - }; 209 - 210 - &ssi2 { 211 - status = "okay"; 212 - }; 213 - 214 - &uart1 { 215 - pinctrl-names = "default"; 216 - pinctrl-0 = <&pinctrl_uart1>; 217 - status = "okay"; 218 - }; 219 - 220 - &uart5 { /* for bluetooth */ 221 - pinctrl-names = "default"; 222 - pinctrl-0 = <&pinctrl_uart5>; 223 - fsl,uart-has-rtscts; 224 - status = "okay"; 225 - }; 226 - 227 - &usbotg1 { 228 - vbus-supply = <&reg_usb_otg1_vbus>; 229 - pinctrl-names = "default"; 230 - pinctrl-0 = <&pinctrl_usb_otg1_id>; 231 - status = "okay"; 232 - }; 233 - 234 - &usbotg2 { 235 - vbus-supply = <&reg_usb_otg2_vbus>; 236 - dr_mode = "host"; 237 - status = "okay"; 238 - }; 239 - 240 - &usdhc2 { 241 - pinctrl-names = "default"; 242 - pinctrl-0 = <&pinctrl_usdhc2>; 243 - non-removable; 244 - no-1-8-v; 245 - keep-power-in-suspend; 246 - enable-sdio-wakeup; 247 - status = "okay"; 248 - }; 249 - 250 - &usdhc3 { 251 - pinctrl-names = "default", "state_100mhz", "state_200mhz"; 252 - pinctrl-0 = <&pinctrl_usdhc3>; 253 - pinctrl-1 = <&pinctrl_usdhc3_100mhz>; 254 - pinctrl-2 = <&pinctrl_usdhc3_200mhz>; 255 - bus-width = <8>; 256 - cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; 257 - wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>; 258 - keep-power-in-suspend; 259 - enable-sdio-wakeup; 260 - vmmc-supply = <&vcc_sd3>; 261 - status = "okay"; 262 - }; 263 - 264 - &usdhc4 { 265 - pinctrl-names = "default"; 266 - pinctrl-0 = <&pinctrl_usdhc4>; 267 - cd-gpios = <&gpio6 21 GPIO_ACTIVE_HIGH>; 268 - wp-gpios = <&gpio6 20 GPIO_ACTIVE_HIGH>; 269 - status = "okay"; 270 - }; 271 - 272 - &iomuxc { 273 - imx6x-sdb { 274 - pinctrl_audmux: audmuxgrp { 275 - fsl,pins = < 276 - MX6SX_PAD_CSI_DATA00__AUDMUX_AUD6_TXC 0x130b0 277 - MX6SX_PAD_CSI_DATA01__AUDMUX_AUD6_TXFS 0x130b0 278 - MX6SX_PAD_CSI_HSYNC__AUDMUX_AUD6_TXD 0x120b0 279 - MX6SX_PAD_CSI_VSYNC__AUDMUX_AUD6_RXD 0x130b0 280 - MX6SX_PAD_CSI_PIXCLK__AUDMUX_MCLK 0x130b0 281 - >; 282 - }; 283 - 284 - pinctrl_enet1: enet1grp { 285 - fsl,pins = < 286 - MX6SX_PAD_ENET1_MDIO__ENET1_MDIO 0xa0b1 287 - MX6SX_PAD_ENET1_MDC__ENET1_MDC 0xa0b1 288 - MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC 0xa0b1 289 - MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 0xa0b1 290 - MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 0xa0b1 291 - MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 0xa0b1 292 - MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 0xa0b1 293 - MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN 0xa0b1 294 - MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK 0x3081 295 - MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 0x3081 296 - MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081 297 - MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081 298 - MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081 299 - MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081 300 - MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91 301 - >; 302 - }; 303 - 304 - pinctrl_enet_3v3: enet3v3grp { 305 - fsl,pins = < 306 - MX6SX_PAD_ENET2_COL__GPIO2_IO_6 0x80000000 307 - >; 308 - }; 309 - 310 - pinctrl_enet2: enet2grp { 311 - fsl,pins = < 312 - MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC 0xa0b9 313 - MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0 0xa0b1 314 - MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1 0xa0b1 315 - MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2 0xa0b1 316 - MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3 0xa0b1 317 - MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN 0xa0b1 318 - MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK 0x3081 319 - MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0 0x3081 320 - MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1 0x3081 321 - MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2 0x3081 322 - MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3 0x3081 323 - MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN 0x3081 324 - >; 325 - }; 326 - 327 - pinctrl_gpio_keys: gpio_keysgrp { 328 - fsl,pins = < 329 - MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059 330 - MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059 331 - >; 332 - }; 333 - 334 - pinctrl_i2c1: i2c1grp { 335 - fsl,pins = < 336 - MX6SX_PAD_GPIO1_IO01__I2C1_SDA 0x4001b8b1 337 - MX6SX_PAD_GPIO1_IO00__I2C1_SCL 0x4001b8b1 338 - >; 339 - }; 340 - 341 - pinctrl_i2c4: i2c4grp { 342 - fsl,pins = < 343 - MX6SX_PAD_CSI_DATA07__I2C4_SDA 0x4001b8b1 344 - MX6SX_PAD_CSI_DATA06__I2C4_SCL 0x4001b8b1 345 - >; 346 - }; 347 - 348 - pinctrl_lcd: lcdgrp { 349 - fsl,pins = < 350 - MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 0x4001b0b0 351 - MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 0x4001b0b0 352 - MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 0x4001b0b0 353 - MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 0x4001b0b0 354 - MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 0x4001b0b0 355 - MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 0x4001b0b0 356 - MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 0x4001b0b0 357 - MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 0x4001b0b0 358 - MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 0x4001b0b0 359 - MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 0x4001b0b0 360 - MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 0x4001b0b0 361 - MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 0x4001b0b0 362 - MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 0x4001b0b0 363 - MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 0x4001b0b0 364 - MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 0x4001b0b0 365 - MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 0x4001b0b0 366 - MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 0x4001b0b0 367 - MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 0x4001b0b0 368 - MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 0x4001b0b0 369 - MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 0x4001b0b0 370 - MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 0x4001b0b0 371 - MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 0x4001b0b0 372 - MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 0x4001b0b0 373 - MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 0x4001b0b0 374 - MX6SX_PAD_LCD1_CLK__LCDIF1_CLK 0x4001b0b0 375 - MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE 0x4001b0b0 376 - MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC 0x4001b0b0 377 - MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC 0x4001b0b0 378 - MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0 379 - >; 380 - }; 381 - 382 - pinctrl_peri_3v3: peri3v3grp { 383 - fsl,pins = < 384 - MX6SX_PAD_QSPI1A_DATA0__GPIO4_IO_16 0x80000000 385 - >; 386 - }; 387 - 388 - pinctrl_pwm3: pwm3grp-1 { 389 - fsl,pins = < 390 - MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0 391 - >; 392 - }; 393 - 394 - pinctrl_qspi2: qspi2grp { 395 - fsl,pins = < 396 - MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 0x70f1 397 - MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 0x70f1 398 - MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 0x70f1 399 - MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 0x70f1 400 - MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK 0x70f1 401 - MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B 0x70f1 402 - MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 0x70f1 403 - MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 0x70f1 404 - MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 0x70f1 405 - MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 0x70f1 406 - MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK 0x70f1 407 - MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B 0x70f1 408 - >; 409 - }; 410 - 411 - pinctrl_vcc_sd3: vccsd3grp { 412 - fsl,pins = < 413 - MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059 414 - >; 415 - }; 416 - 417 - pinctrl_uart1: uart1grp { 418 - fsl,pins = < 419 - MX6SX_PAD_GPIO1_IO04__UART1_TX 0x1b0b1 420 - MX6SX_PAD_GPIO1_IO05__UART1_RX 0x1b0b1 421 - >; 422 - }; 423 - 424 - pinctrl_uart5: uart5grp { 425 - fsl,pins = < 426 - MX6SX_PAD_KEY_ROW3__UART5_RX 0x1b0b1 427 - MX6SX_PAD_KEY_COL3__UART5_TX 0x1b0b1 428 - MX6SX_PAD_KEY_ROW2__UART5_CTS_B 0x1b0b1 429 - MX6SX_PAD_KEY_COL2__UART5_RTS_B 0x1b0b1 430 - >; 431 - }; 432 - 433 - pinctrl_usb_otg1: usbotg1grp { 434 - fsl,pins = < 435 - MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9 0x10b0 436 - >; 437 - }; 438 - 439 - pinctrl_usb_otg1_id: usbotg1idgrp { 440 - fsl,pins = < 441 - MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID 0x17059 442 - >; 443 - }; 444 - 445 - pinctrl_usb_otg2: usbot2ggrp { 446 - fsl,pins = < 447 - MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 0x10b0 448 - >; 449 - }; 450 - 451 - pinctrl_usdhc2: usdhc2grp { 452 - fsl,pins = < 453 - MX6SX_PAD_SD2_CMD__USDHC2_CMD 0x17059 454 - MX6SX_PAD_SD2_CLK__USDHC2_CLK 0x10059 455 - MX6SX_PAD_SD2_DATA0__USDHC2_DATA0 0x17059 456 - MX6SX_PAD_SD2_DATA1__USDHC2_DATA1 0x17059 457 - MX6SX_PAD_SD2_DATA2__USDHC2_DATA2 0x17059 458 - MX6SX_PAD_SD2_DATA3__USDHC2_DATA3 0x17059 459 - >; 460 - }; 461 - 462 - pinctrl_usdhc3: usdhc3grp { 463 - fsl,pins = < 464 - MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17059 465 - MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10059 466 - MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17059 467 - MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17059 468 - MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17059 469 - MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17059 470 - MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17059 471 - MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17059 472 - MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17059 473 - MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17059 474 - MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /* CD */ 475 - MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /* WP */ 476 - >; 477 - }; 478 - 479 - pinctrl_usdhc3_100mhz: usdhc3grp-100mhz { 480 - fsl,pins = < 481 - MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170b9 482 - MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100b9 483 - MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170b9 484 - MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170b9 485 - MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170b9 486 - MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170b9 487 - MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170b9 488 - MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170b9 489 - MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170b9 490 - MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170b9 491 - >; 492 - }; 493 - 494 - pinctrl_usdhc3_200mhz: usdhc3grp-200mhz { 495 - fsl,pins = < 496 - MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170f9 497 - MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100f9 498 - MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170f9 499 - MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170f9 500 - MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170f9 501 - MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170f9 502 - MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170f9 503 - MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170f9 504 - MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170f9 505 - MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170f9 506 - >; 507 - }; 508 - 509 - pinctrl_usdhc4: usdhc4grp { 510 - fsl,pins = < 511 - MX6SX_PAD_SD4_CMD__USDHC4_CMD 0x17059 512 - MX6SX_PAD_SD4_CLK__USDHC4_CLK 0x10059 513 - MX6SX_PAD_SD4_DATA0__USDHC4_DATA0 0x17059 514 - MX6SX_PAD_SD4_DATA1__USDHC4_DATA1 0x17059 515 - MX6SX_PAD_SD4_DATA2__USDHC4_DATA2 0x17059 516 - MX6SX_PAD_SD4_DATA3__USDHC4_DATA3 0x17059 517 - MX6SX_PAD_SD4_DATA7__GPIO6_IO_21 0x17059 /* CD */ 518 - MX6SX_PAD_SD4_DATA6__GPIO6_IO_20 0x17059 /* WP */ 519 - >; 520 - }; 521 314 }; 522 315 };
+562
arch/arm/boot/dts/imx6sx-sdb.dtsi
··· 1 + /* 2 + * Copyright (C) 2014 Freescale Semiconductor, Inc. 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License version 2 as 6 + * published by the Free Software Foundation. 7 + */ 8 + 9 + /dts-v1/; 10 + 11 + #include <dt-bindings/gpio/gpio.h> 12 + #include <dt-bindings/input/input.h> 13 + #include "imx6sx.dtsi" 14 + 15 + / { 16 + model = "Freescale i.MX6 SoloX SDB Board"; 17 + compatible = "fsl,imx6sx-sdb", "fsl,imx6sx"; 18 + 19 + chosen { 20 + stdout-path = &uart1; 21 + }; 22 + 23 + memory { 24 + reg = <0x80000000 0x40000000>; 25 + }; 26 + 27 + backlight { 28 + compatible = "pwm-backlight"; 29 + pwms = <&pwm3 0 5000000>; 30 + brightness-levels = <0 4 8 16 32 64 128 255>; 31 + default-brightness-level = <6>; 32 + }; 33 + 34 + gpio-keys { 35 + compatible = "gpio-keys"; 36 + pinctrl-names = "default"; 37 + pinctrl-0 = <&pinctrl_gpio_keys>; 38 + 39 + volume-up { 40 + label = "Volume Up"; 41 + gpios = <&gpio1 18 GPIO_ACTIVE_LOW>; 42 + linux,code = <KEY_VOLUMEUP>; 43 + }; 44 + 45 + volume-down { 46 + label = "Volume Down"; 47 + gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; 48 + linux,code = <KEY_VOLUMEDOWN>; 49 + }; 50 + }; 51 + 52 + regulators { 53 + compatible = "simple-bus"; 54 + #address-cells = <1>; 55 + #size-cells = <0>; 56 + 57 + vcc_sd3: regulator@0 { 58 + compatible = "regulator-fixed"; 59 + reg = <0>; 60 + pinctrl-names = "default"; 61 + pinctrl-0 = <&pinctrl_vcc_sd3>; 62 + regulator-name = "VCC_SD3"; 63 + regulator-min-microvolt = <3000000>; 64 + regulator-max-microvolt = <3000000>; 65 + gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>; 66 + enable-active-high; 67 + }; 68 + 69 + reg_usb_otg1_vbus: regulator@1 { 70 + compatible = "regulator-fixed"; 71 + reg = <1>; 72 + pinctrl-names = "default"; 73 + pinctrl-0 = <&pinctrl_usb_otg1>; 74 + regulator-name = "usb_otg1_vbus"; 75 + regulator-min-microvolt = <5000000>; 76 + regulator-max-microvolt = <5000000>; 77 + gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>; 78 + enable-active-high; 79 + }; 80 + 81 + reg_usb_otg2_vbus: regulator@2 { 82 + compatible = "regulator-fixed"; 83 + reg = <2>; 84 + pinctrl-names = "default"; 85 + pinctrl-0 = <&pinctrl_usb_otg2>; 86 + regulator-name = "usb_otg2_vbus"; 87 + regulator-min-microvolt = <5000000>; 88 + regulator-max-microvolt = <5000000>; 89 + gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>; 90 + enable-active-high; 91 + }; 92 + 93 + reg_psu_5v: regulator@3 { 94 + compatible = "regulator-fixed"; 95 + reg = <3>; 96 + regulator-name = "PSU-5V0"; 97 + regulator-min-microvolt = <5000000>; 98 + regulator-max-microvolt = <5000000>; 99 + }; 100 + 101 + reg_lcd_3v3: regulator@4 { 102 + compatible = "regulator-fixed"; 103 + reg = <4>; 104 + regulator-name = "lcd-3v3"; 105 + gpio = <&gpio3 27 0>; 106 + enable-active-high; 107 + }; 108 + 109 + reg_peri_3v3: regulator@5 { 110 + compatible = "regulator-fixed"; 111 + reg = <5>; 112 + pinctrl-names = "default"; 113 + pinctrl-0 = <&pinctrl_peri_3v3>; 114 + regulator-name = "peri_3v3"; 115 + regulator-min-microvolt = <3300000>; 116 + regulator-max-microvolt = <3300000>; 117 + gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>; 118 + enable-active-high; 119 + regulator-always-on; 120 + }; 121 + 122 + reg_enet_3v3: regulator@6 { 123 + compatible = "regulator-fixed"; 124 + reg = <6>; 125 + pinctrl-names = "default"; 126 + pinctrl-0 = <&pinctrl_enet_3v3>; 127 + regulator-name = "enet_3v3"; 128 + regulator-min-microvolt = <3300000>; 129 + regulator-max-microvolt = <3300000>; 130 + gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; 131 + }; 132 + }; 133 + 134 + sound { 135 + compatible = "fsl,imx6sx-sdb-wm8962", "fsl,imx-audio-wm8962"; 136 + model = "wm8962-audio"; 137 + ssi-controller = <&ssi2>; 138 + audio-codec = <&codec>; 139 + audio-routing = 140 + "Headphone Jack", "HPOUTL", 141 + "Headphone Jack", "HPOUTR", 142 + "Ext Spk", "SPKOUTL", 143 + "Ext Spk", "SPKOUTR", 144 + "AMIC", "MICBIAS", 145 + "IN3R", "AMIC"; 146 + mux-int-port = <2>; 147 + mux-ext-port = <6>; 148 + }; 149 + }; 150 + 151 + &audmux { 152 + pinctrl-names = "default"; 153 + pinctrl-0 = <&pinctrl_audmux>; 154 + status = "okay"; 155 + }; 156 + 157 + &fec1 { 158 + pinctrl-names = "default"; 159 + pinctrl-0 = <&pinctrl_enet1>; 160 + phy-supply = <&reg_enet_3v3>; 161 + phy-mode = "rgmii"; 162 + phy-handle = <&ethphy1>; 163 + status = "okay"; 164 + 165 + mdio { 166 + #address-cells = <1>; 167 + #size-cells = <0>; 168 + 169 + ethphy1: ethernet-phy@1 { 170 + reg = <1>; 171 + }; 172 + 173 + ethphy2: ethernet-phy@2 { 174 + reg = <2>; 175 + }; 176 + }; 177 + }; 178 + 179 + &fec2 { 180 + pinctrl-names = "default"; 181 + pinctrl-0 = <&pinctrl_enet2>; 182 + phy-mode = "rgmii"; 183 + phy-handle = <&ethphy2>; 184 + status = "okay"; 185 + }; 186 + 187 + &i2c4 { 188 + clock-frequency = <100000>; 189 + pinctrl-names = "default"; 190 + pinctrl-0 = <&pinctrl_i2c4>; 191 + status = "okay"; 192 + 193 + codec: wm8962@1a { 194 + compatible = "wlf,wm8962"; 195 + reg = <0x1a>; 196 + clocks = <&clks IMX6SX_CLK_AUDIO>; 197 + DCVDD-supply = <&vgen4_reg>; 198 + DBVDD-supply = <&vgen4_reg>; 199 + AVDD-supply = <&vgen4_reg>; 200 + CPVDD-supply = <&vgen4_reg>; 201 + MICVDD-supply = <&vgen3_reg>; 202 + PLLVDD-supply = <&vgen4_reg>; 203 + SPKVDD1-supply = <&reg_psu_5v>; 204 + SPKVDD2-supply = <&reg_psu_5v>; 205 + }; 206 + }; 207 + 208 + &lcdif1 { 209 + pinctrl-names = "default"; 210 + pinctrl-0 = <&pinctrl_lcd>; 211 + lcd-supply = <&reg_lcd_3v3>; 212 + display = <&display0>; 213 + status = "okay"; 214 + 215 + display0: display0 { 216 + bits-per-pixel = <16>; 217 + bus-width = <24>; 218 + 219 + display-timings { 220 + native-mode = <&timing0>; 221 + timing0: timing0 { 222 + clock-frequency = <33500000>; 223 + hactive = <800>; 224 + vactive = <480>; 225 + hback-porch = <89>; 226 + hfront-porch = <164>; 227 + vback-porch = <23>; 228 + vfront-porch = <10>; 229 + hsync-len = <10>; 230 + vsync-len = <10>; 231 + hsync-active = <0>; 232 + vsync-active = <0>; 233 + de-active = <1>; 234 + pixelclk-active = <0>; 235 + }; 236 + }; 237 + }; 238 + }; 239 + 240 + &pwm3 { 241 + pinctrl-names = "default"; 242 + pinctrl-0 = <&pinctrl_pwm3>; 243 + status = "okay"; 244 + }; 245 + 246 + &snvs_poweroff { 247 + status = "okay"; 248 + }; 249 + 250 + &ssi2 { 251 + status = "okay"; 252 + }; 253 + 254 + &uart1 { 255 + pinctrl-names = "default"; 256 + pinctrl-0 = <&pinctrl_uart1>; 257 + status = "okay"; 258 + }; 259 + 260 + &uart5 { /* for bluetooth */ 261 + pinctrl-names = "default"; 262 + pinctrl-0 = <&pinctrl_uart5>; 263 + fsl,uart-has-rtscts; 264 + status = "okay"; 265 + }; 266 + 267 + &usbotg1 { 268 + vbus-supply = <&reg_usb_otg1_vbus>; 269 + pinctrl-names = "default"; 270 + pinctrl-0 = <&pinctrl_usb_otg1_id>; 271 + status = "okay"; 272 + }; 273 + 274 + &usbotg2 { 275 + vbus-supply = <&reg_usb_otg2_vbus>; 276 + dr_mode = "host"; 277 + status = "okay"; 278 + }; 279 + 280 + &usdhc2 { 281 + pinctrl-names = "default"; 282 + pinctrl-0 = <&pinctrl_usdhc2>; 283 + non-removable; 284 + no-1-8-v; 285 + keep-power-in-suspend; 286 + enable-sdio-wakeup; 287 + status = "okay"; 288 + }; 289 + 290 + &usdhc3 { 291 + pinctrl-names = "default", "state_100mhz", "state_200mhz"; 292 + pinctrl-0 = <&pinctrl_usdhc3>; 293 + pinctrl-1 = <&pinctrl_usdhc3_100mhz>; 294 + pinctrl-2 = <&pinctrl_usdhc3_200mhz>; 295 + bus-width = <8>; 296 + cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; 297 + wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>; 298 + keep-power-in-suspend; 299 + enable-sdio-wakeup; 300 + vmmc-supply = <&vcc_sd3>; 301 + status = "okay"; 302 + }; 303 + 304 + &usdhc4 { 305 + pinctrl-names = "default"; 306 + pinctrl-0 = <&pinctrl_usdhc4>; 307 + cd-gpios = <&gpio6 21 GPIO_ACTIVE_HIGH>; 308 + wp-gpios = <&gpio6 20 GPIO_ACTIVE_HIGH>; 309 + status = "okay"; 310 + }; 311 + 312 + &iomuxc { 313 + imx6x-sdb { 314 + pinctrl_audmux: audmuxgrp { 315 + fsl,pins = < 316 + MX6SX_PAD_CSI_DATA00__AUDMUX_AUD6_TXC 0x130b0 317 + MX6SX_PAD_CSI_DATA01__AUDMUX_AUD6_TXFS 0x130b0 318 + MX6SX_PAD_CSI_HSYNC__AUDMUX_AUD6_TXD 0x120b0 319 + MX6SX_PAD_CSI_VSYNC__AUDMUX_AUD6_RXD 0x130b0 320 + MX6SX_PAD_CSI_PIXCLK__AUDMUX_MCLK 0x130b0 321 + >; 322 + }; 323 + 324 + pinctrl_enet1: enet1grp { 325 + fsl,pins = < 326 + MX6SX_PAD_ENET1_MDIO__ENET1_MDIO 0xa0b1 327 + MX6SX_PAD_ENET1_MDC__ENET1_MDC 0xa0b1 328 + MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC 0xa0b1 329 + MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 0xa0b1 330 + MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 0xa0b1 331 + MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 0xa0b1 332 + MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 0xa0b1 333 + MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN 0xa0b1 334 + MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK 0x3081 335 + MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 0x3081 336 + MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081 337 + MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081 338 + MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081 339 + MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081 340 + MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91 341 + >; 342 + }; 343 + 344 + pinctrl_enet_3v3: enet3v3grp { 345 + fsl,pins = < 346 + MX6SX_PAD_ENET2_COL__GPIO2_IO_6 0x80000000 347 + >; 348 + }; 349 + 350 + pinctrl_enet2: enet2grp { 351 + fsl,pins = < 352 + MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC 0xa0b9 353 + MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0 0xa0b1 354 + MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1 0xa0b1 355 + MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2 0xa0b1 356 + MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3 0xa0b1 357 + MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN 0xa0b1 358 + MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK 0x3081 359 + MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0 0x3081 360 + MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1 0x3081 361 + MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2 0x3081 362 + MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3 0x3081 363 + MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN 0x3081 364 + >; 365 + }; 366 + 367 + pinctrl_gpio_keys: gpio_keysgrp { 368 + fsl,pins = < 369 + MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059 370 + MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059 371 + >; 372 + }; 373 + 374 + pinctrl_i2c1: i2c1grp { 375 + fsl,pins = < 376 + MX6SX_PAD_GPIO1_IO01__I2C1_SDA 0x4001b8b1 377 + MX6SX_PAD_GPIO1_IO00__I2C1_SCL 0x4001b8b1 378 + >; 379 + }; 380 + 381 + pinctrl_i2c4: i2c4grp { 382 + fsl,pins = < 383 + MX6SX_PAD_CSI_DATA07__I2C4_SDA 0x4001b8b1 384 + MX6SX_PAD_CSI_DATA06__I2C4_SCL 0x4001b8b1 385 + >; 386 + }; 387 + 388 + pinctrl_lcd: lcdgrp { 389 + fsl,pins = < 390 + MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 0x4001b0b0 391 + MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 0x4001b0b0 392 + MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 0x4001b0b0 393 + MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 0x4001b0b0 394 + MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 0x4001b0b0 395 + MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 0x4001b0b0 396 + MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 0x4001b0b0 397 + MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 0x4001b0b0 398 + MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 0x4001b0b0 399 + MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 0x4001b0b0 400 + MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 0x4001b0b0 401 + MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 0x4001b0b0 402 + MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 0x4001b0b0 403 + MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 0x4001b0b0 404 + MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 0x4001b0b0 405 + MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 0x4001b0b0 406 + MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 0x4001b0b0 407 + MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 0x4001b0b0 408 + MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 0x4001b0b0 409 + MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 0x4001b0b0 410 + MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 0x4001b0b0 411 + MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 0x4001b0b0 412 + MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 0x4001b0b0 413 + MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 0x4001b0b0 414 + MX6SX_PAD_LCD1_CLK__LCDIF1_CLK 0x4001b0b0 415 + MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE 0x4001b0b0 416 + MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC 0x4001b0b0 417 + MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC 0x4001b0b0 418 + MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0 419 + >; 420 + }; 421 + 422 + pinctrl_peri_3v3: peri3v3grp { 423 + fsl,pins = < 424 + MX6SX_PAD_QSPI1A_DATA0__GPIO4_IO_16 0x80000000 425 + >; 426 + }; 427 + 428 + pinctrl_pwm3: pwm3grp-1 { 429 + fsl,pins = < 430 + MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0 431 + >; 432 + }; 433 + 434 + pinctrl_qspi2: qspi2grp { 435 + fsl,pins = < 436 + MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 0x70f1 437 + MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 0x70f1 438 + MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 0x70f1 439 + MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 0x70f1 440 + MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK 0x70f1 441 + MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B 0x70f1 442 + MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 0x70f1 443 + MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 0x70f1 444 + MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 0x70f1 445 + MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 0x70f1 446 + MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK 0x70f1 447 + MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B 0x70f1 448 + >; 449 + }; 450 + 451 + pinctrl_vcc_sd3: vccsd3grp { 452 + fsl,pins = < 453 + MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059 454 + >; 455 + }; 456 + 457 + pinctrl_uart1: uart1grp { 458 + fsl,pins = < 459 + MX6SX_PAD_GPIO1_IO04__UART1_TX 0x1b0b1 460 + MX6SX_PAD_GPIO1_IO05__UART1_RX 0x1b0b1 461 + >; 462 + }; 463 + 464 + pinctrl_uart5: uart5grp { 465 + fsl,pins = < 466 + MX6SX_PAD_KEY_ROW3__UART5_RX 0x1b0b1 467 + MX6SX_PAD_KEY_COL3__UART5_TX 0x1b0b1 468 + MX6SX_PAD_KEY_ROW2__UART5_CTS_B 0x1b0b1 469 + MX6SX_PAD_KEY_COL2__UART5_RTS_B 0x1b0b1 470 + >; 471 + }; 472 + 473 + pinctrl_usb_otg1: usbotg1grp { 474 + fsl,pins = < 475 + MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9 0x10b0 476 + >; 477 + }; 478 + 479 + pinctrl_usb_otg1_id: usbotg1idgrp { 480 + fsl,pins = < 481 + MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID 0x17059 482 + >; 483 + }; 484 + 485 + pinctrl_usb_otg2: usbot2ggrp { 486 + fsl,pins = < 487 + MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 0x10b0 488 + >; 489 + }; 490 + 491 + pinctrl_usdhc2: usdhc2grp { 492 + fsl,pins = < 493 + MX6SX_PAD_SD2_CMD__USDHC2_CMD 0x17059 494 + MX6SX_PAD_SD2_CLK__USDHC2_CLK 0x10059 495 + MX6SX_PAD_SD2_DATA0__USDHC2_DATA0 0x17059 496 + MX6SX_PAD_SD2_DATA1__USDHC2_DATA1 0x17059 497 + MX6SX_PAD_SD2_DATA2__USDHC2_DATA2 0x17059 498 + MX6SX_PAD_SD2_DATA3__USDHC2_DATA3 0x17059 499 + >; 500 + }; 501 + 502 + pinctrl_usdhc3: usdhc3grp { 503 + fsl,pins = < 504 + MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17059 505 + MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10059 506 + MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17059 507 + MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17059 508 + MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17059 509 + MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17059 510 + MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17059 511 + MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17059 512 + MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17059 513 + MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17059 514 + MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /* CD */ 515 + MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /* WP */ 516 + >; 517 + }; 518 + 519 + pinctrl_usdhc3_100mhz: usdhc3grp-100mhz { 520 + fsl,pins = < 521 + MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170b9 522 + MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100b9 523 + MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170b9 524 + MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170b9 525 + MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170b9 526 + MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170b9 527 + MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170b9 528 + MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170b9 529 + MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170b9 530 + MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170b9 531 + >; 532 + }; 533 + 534 + pinctrl_usdhc3_200mhz: usdhc3grp-200mhz { 535 + fsl,pins = < 536 + MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170f9 537 + MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100f9 538 + MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170f9 539 + MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170f9 540 + MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170f9 541 + MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170f9 542 + MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170f9 543 + MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170f9 544 + MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170f9 545 + MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170f9 546 + >; 547 + }; 548 + 549 + pinctrl_usdhc4: usdhc4grp { 550 + fsl,pins = < 551 + MX6SX_PAD_SD4_CMD__USDHC4_CMD 0x17059 552 + MX6SX_PAD_SD4_CLK__USDHC4_CLK 0x10059 553 + MX6SX_PAD_SD4_DATA0__USDHC4_DATA0 0x17059 554 + MX6SX_PAD_SD4_DATA1__USDHC4_DATA1 0x17059 555 + MX6SX_PAD_SD4_DATA2__USDHC4_DATA2 0x17059 556 + MX6SX_PAD_SD4_DATA3__USDHC4_DATA3 0x17059 557 + MX6SX_PAD_SD4_DATA7__GPIO6_IO_21 0x17059 /* CD */ 558 + MX6SX_PAD_SD4_DATA6__GPIO6_IO_20 0x17059 /* WP */ 559 + >; 560 + }; 561 + }; 562 + };
+7 -2
arch/arm/boot/dts/imx6sx.dtsi
··· 88 88 interrupt-controller; 89 89 reg = <0x00a01000 0x1000>, 90 90 <0x00a00100 0x100>; 91 + interrupt-parent = <&intc>; 91 92 }; 92 93 93 94 clocks { ··· 132 131 #address-cells = <1>; 133 132 #size-cells = <1>; 134 133 compatible = "simple-bus"; 135 - interrupt-parent = <&intc>; 134 + interrupt-parent = <&gpc>; 136 135 ranges; 137 136 138 137 pmu { ··· 667 666 #size-cells = <1>; 668 667 ranges = <0 0x020cc000 0x4000>; 669 668 670 - snvs-rtc-lp@34 { 669 + snvs_rtc: snvs-rtc-lp@34 { 671 670 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 672 671 reg = <0x34 0x58>; 673 672 interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; ··· 701 700 gpc: gpc@020dc000 { 702 701 compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc"; 703 702 reg = <0x020dc000 0x4000>; 703 + interrupt-controller; 704 + #interrupt-cells = <3>; 704 705 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; 706 + interrupt-parent = <&intc>; 705 707 }; 706 708 707 709 iomuxc: iomuxc@020e0000 { ··· 767 763 fsl,usbmisc = <&usbmisc 2>; 768 764 phy_type = "hsic"; 769 765 fsl,anatop = <&anatop>; 766 + dr_mode = "host"; 770 767 status = "disabled"; 771 768 }; 772 769
+31
arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
··· 12 12 bootargs = "console=ttyLP0,115200"; 13 13 }; 14 14 15 + clk16m: clk16m { 16 + compatible = "fixed-clock"; 17 + #clock-cells = <0>; 18 + clock-frequency = <16000000>; 19 + }; 20 + 15 21 regulators { 16 22 compatible = "simple-bus"; 17 23 #address-cells = <1>; ··· 51 45 brightness-levels = <0 4 8 16 32 64 128 255>; 52 46 default-brightness-level = <6>; 53 47 status = "okay"; 48 + }; 49 + 50 + &dspi1 { 51 + status = "okay"; 52 + 53 + mcp2515can: can@0 { 54 + compatible = "microchip,mcp2515"; 55 + pinctrl-names = "default"; 56 + pinctrl-0 = <&pinctrl_can_int>; 57 + reg = <0>; 58 + clocks = <&clk16m>; 59 + spi-max-frequency = <10000000>; 60 + interrupt-parent = <&gpio1>; 61 + interrupts = <11 GPIO_ACTIVE_LOW>; 62 + }; 54 63 }; 55 64 56 65 &esdhc1 { ··· 114 93 115 94 &usbh1 { 116 95 vbus-supply = <&usbh_vbus_reg>; 96 + }; 97 + 98 + &iomuxc { 99 + vf610-colibri { 100 + pinctrl_can_int: can_int { 101 + fsl,pins = < 102 + VF610_PAD_PTB21__GPIO_43 0x22ed 103 + >; 104 + }; 105 + }; 117 106 };
+15
arch/arm/boot/dts/vf-colibri.dtsi
··· 23 23 status = "okay"; 24 24 }; 25 25 26 + &dspi1 { 27 + bus-num = <1>; 28 + pinctrl-names = "default"; 29 + pinctrl-0 = <&pinctrl_dspi1>; 30 + }; 31 + 26 32 &edma0 { 27 33 status = "okay"; 28 34 }; ··· 110 104 VF610_PAD_PTD10__GPIO_89 0x22ed /* EXT_IO_0 */ 111 105 VF610_PAD_PTD9__GPIO_88 0x22ed /* EXT_IO_1 */ 112 106 VF610_PAD_PTD26__GPIO_68 0x22ed /* EXT_IO_2 */ 107 + >; 108 + }; 109 + 110 + pinctrl_dspi1: dspi1grp { 111 + fsl,pins = < 112 + VF610_PAD_PTD5__DSPI1_CS0 0x33e2 113 + VF610_PAD_PTD6__DSPI1_SIN 0x33e1 114 + VF610_PAD_PTD7__DSPI1_SOUT 0x33e2 115 + VF610_PAD_PTD8__DSPI1_SCK 0x33e2 113 116 >; 114 117 }; 115 118
+4 -133
arch/arm/boot/dts/vf500.dtsi
··· 24 24 }; 25 25 26 26 soc { 27 - interrupt-parent = <&intc>; 28 - 29 27 aips-bus@40000000 { 30 28 31 29 intc: interrupt-controller@40002000 { 32 30 compatible = "arm,cortex-a9-gic"; 33 31 #interrupt-cells = <3>; 34 32 interrupt-controller; 33 + interrupt-parent = <&intc>; 35 34 reg = <0x40003000 0x1000>, 36 35 <0x40002100 0x100>; 37 36 }; ··· 39 40 compatible = "arm,cortex-a9-global-timer"; 40 41 reg = <0x40002200 0x20>; 41 42 interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>; 43 + interrupt-parent = <&intc>; 42 44 clocks = <&clks VF610_CLK_PLATFORM_BUS>; 43 45 }; 44 46 }; 45 47 }; 46 48 }; 47 49 48 - &adc0 { 49 - interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; 50 - }; 51 - 52 - &adc1 { 53 - interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>; 54 - }; 55 - 56 - &can0 { 57 - interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>; 58 - }; 59 - 60 - &can1 { 61 - interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>; 62 - }; 63 - 64 - &dspi0 { 65 - interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; 66 - }; 67 - 68 - &edma0 { 69 - interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 70 - <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>; 71 - interrupt-names = "edma-tx", "edma-err"; 72 - }; 73 - 74 - &edma1 { 75 - interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 76 - <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 77 - interrupt-names = "edma-tx", "edma-err"; 78 - }; 79 - 80 - &esdhc1 { 81 - interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; 82 - }; 83 - 84 - &fec0 { 85 - interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>; 86 - }; 87 - 88 - &fec1 { 89 - interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>; 90 - }; 91 - 92 - &ftm { 93 - interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; 94 - }; 95 - 96 - &gpio0 { 97 - interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>; 98 - }; 99 - 100 - &gpio1 { 101 - interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>; 102 - }; 103 - 104 - &gpio2 { 105 - interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; 106 - }; 107 - 108 - &gpio3 { 109 - interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 110 - }; 111 - 112 - &gpio4 { 113 - interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 114 - }; 115 - 116 - &i2c0 { 117 - interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; 118 - }; 119 - 120 - &pit { 121 - interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; 122 - }; 123 - 124 - &qspi0 { 125 - interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 126 - }; 127 - 128 - &sai2 { 129 - interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>; 130 - }; 131 - 132 - &snvsrtc { 133 - interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; 134 - }; 135 - 136 - &src { 137 - interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>; 138 - }; 139 - 140 - &uart0 { 141 - interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>; 142 - }; 143 - 144 - &uart1 { 145 - interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>; 146 - }; 147 - 148 - &uart2 { 149 - interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>; 150 - }; 151 - 152 - &uart3 { 153 - interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>; 154 - }; 155 - 156 - &uart4 { 157 - interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 158 - }; 159 - 160 - &uart5 { 161 - interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>; 162 - }; 163 - 164 - &usbdev0 { 165 - interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; 166 - }; 167 - 168 - &usbh1 { 169 - interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; 170 - }; 171 - 172 - &usbphy0 { 173 - interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>; 174 - }; 175 - 176 - &usbphy1 { 177 - interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; 50 + &mscm_ir { 51 + interrupt-parent = <&intc>; 178 52 }; 179 53 180 54 &wdoga5 { 181 - interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; 182 55 status = "okay"; 183 56 };
+63 -1
arch/arm/boot/dts/vfxxx.dtsi
··· 54 54 #address-cells = <1>; 55 55 #size-cells = <1>; 56 56 compatible = "simple-bus"; 57 + interrupt-parent = <&mscm_ir>; 57 58 ranges; 58 59 59 60 aips0: aips-bus@40000000 { ··· 63 62 #size-cells = <1>; 64 63 ranges; 65 64 65 + mscm_cpucfg: cpucfg@40001000 { 66 + compatible = "fsl,vf610-mscm-cpucfg", "syscon"; 67 + reg = <0x40001000 0x800>; 68 + }; 69 + 70 + mscm_ir: interrupt-controller@40001800 { 71 + compatible = "fsl,vf610-mscm-ir"; 72 + reg = <0x40001800 0x400>; 73 + fsl,cpucfg = <&mscm_cpucfg>; 74 + interrupt-controller; 75 + #interrupt-cells = <2>; 76 + }; 77 + 66 78 edma0: dma-controller@40018000 { 67 79 #dma-cells = <2>; 68 80 compatible = "fsl,vf610-edma"; ··· 83 69 <0x40024000 0x1000>, 84 70 <0x40025000 0x1000>; 85 71 dma-channels = <32>; 72 + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>, 73 + <9 IRQ_TYPE_LEVEL_HIGH>; 74 + interrupt-names = "edma-tx", "edma-err"; 86 75 clock-names = "dmamux0", "dmamux1"; 87 76 clocks = <&clks VF610_CLK_DMAMUX0>, 88 77 <&clks VF610_CLK_DMAMUX1>; ··· 95 78 can0: flexcan@40020000 { 96 79 compatible = "fsl,vf610-flexcan"; 97 80 reg = <0x40020000 0x4000>; 81 + interrupts = <58 IRQ_TYPE_LEVEL_HIGH>; 98 82 clocks = <&clks VF610_CLK_FLEXCAN0>, 99 83 <&clks VF610_CLK_FLEXCAN0>; 100 84 clock-names = "ipg", "per"; ··· 105 87 uart0: serial@40027000 { 106 88 compatible = "fsl,vf610-lpuart"; 107 89 reg = <0x40027000 0x1000>; 90 + interrupts = <61 IRQ_TYPE_LEVEL_HIGH>; 108 91 clocks = <&clks VF610_CLK_UART0>; 109 92 clock-names = "ipg"; 110 93 dmas = <&edma0 0 2>, ··· 117 98 uart1: serial@40028000 { 118 99 compatible = "fsl,vf610-lpuart"; 119 100 reg = <0x40028000 0x1000>; 101 + interrupts = <62 IRQ_TYPE_LEVEL_HIGH>; 120 102 clocks = <&clks VF610_CLK_UART1>; 121 103 clock-names = "ipg"; 122 104 dmas = <&edma0 0 4>, ··· 129 109 uart2: serial@40029000 { 130 110 compatible = "fsl,vf610-lpuart"; 131 111 reg = <0x40029000 0x1000>; 112 + interrupts = <63 IRQ_TYPE_LEVEL_HIGH>; 132 113 clocks = <&clks VF610_CLK_UART2>; 133 114 clock-names = "ipg"; 134 115 dmas = <&edma0 0 6>, ··· 141 120 uart3: serial@4002a000 { 142 121 compatible = "fsl,vf610-lpuart"; 143 122 reg = <0x4002a000 0x1000>; 123 + interrupts = <64 IRQ_TYPE_LEVEL_HIGH>; 144 124 clocks = <&clks VF610_CLK_UART3>; 145 125 clock-names = "ipg"; 146 126 dmas = <&edma0 0 8>, ··· 155 133 #size-cells = <0>; 156 134 compatible = "fsl,vf610-dspi"; 157 135 reg = <0x4002c000 0x1000>; 136 + interrupts = <67 IRQ_TYPE_LEVEL_HIGH>; 158 137 clocks = <&clks VF610_CLK_DSPI0>; 138 + clock-names = "dspi"; 139 + spi-num-chipselects = <5>; 140 + status = "disabled"; 141 + }; 142 + 143 + dspi1: dspi1@4002d000 { 144 + #address-cells = <1>; 145 + #size-cells = <0>; 146 + compatible = "fsl,vf610-dspi"; 147 + reg = <0x4002d000 0x1000>; 148 + interrupts = <68 IRQ_TYPE_LEVEL_HIGH>; 149 + clocks = <&clks VF610_CLK_DSPI1>; 159 150 clock-names = "dspi"; 160 151 spi-num-chipselects = <5>; 161 152 status = "disabled"; ··· 177 142 sai2: sai@40031000 { 178 143 compatible = "fsl,vf610-sai"; 179 144 reg = <0x40031000 0x1000>; 145 + interrupts = <86 IRQ_TYPE_LEVEL_HIGH>; 180 146 clocks = <&clks VF610_CLK_SAI2>; 181 147 clock-names = "sai"; 182 148 dma-names = "tx", "rx"; ··· 189 153 pit: pit@40037000 { 190 154 compatible = "fsl,vf610-pit"; 191 155 reg = <0x40037000 0x1000>; 156 + interrupts = <39 IRQ_TYPE_LEVEL_HIGH>; 192 157 clocks = <&clks VF610_CLK_PIT>; 193 158 clock-names = "pit"; 194 159 }; ··· 223 186 adc0: adc@4003b000 { 224 187 compatible = "fsl,vf610-adc"; 225 188 reg = <0x4003b000 0x1000>; 189 + interrupts = <53 IRQ_TYPE_LEVEL_HIGH>; 226 190 clocks = <&clks VF610_CLK_ADC0>; 227 191 clock-names = "adc"; 228 192 status = "disabled"; ··· 232 194 wdoga5: wdog@4003e000 { 233 195 compatible = "fsl,vf610-wdt", "fsl,imx21-wdt"; 234 196 reg = <0x4003e000 0x1000>; 197 + interrupts = <20 IRQ_TYPE_LEVEL_HIGH>; 235 198 clocks = <&clks VF610_CLK_WDT>; 236 199 clock-names = "wdog"; 237 200 status = "disabled"; ··· 243 204 #size-cells = <0>; 244 205 compatible = "fsl,vf610-qspi"; 245 206 reg = <0x40044000 0x1000>; 207 + interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; 246 208 clocks = <&clks VF610_CLK_QSPI0_EN>, 247 209 <&clks VF610_CLK_QSPI0>; 248 210 clock-names = "qspi_en", "qspi"; ··· 253 213 iomuxc: iomuxc@40048000 { 254 214 compatible = "fsl,vf610-iomuxc"; 255 215 reg = <0x40048000 0x1000>; 256 - #gpio-range-cells = <3>; 257 216 }; 258 217 259 218 gpio0: gpio@40049000 { ··· 260 221 reg = <0x40049000 0x1000 0x400ff000 0x40>; 261 222 gpio-controller; 262 223 #gpio-cells = <2>; 224 + interrupts = <107 IRQ_TYPE_LEVEL_HIGH>; 263 225 interrupt-controller; 264 226 #interrupt-cells = <2>; 265 227 gpio-ranges = <&iomuxc 0 0 32>; ··· 271 231 reg = <0x4004a000 0x1000 0x400ff040 0x40>; 272 232 gpio-controller; 273 233 #gpio-cells = <2>; 234 + interrupts = <108 IRQ_TYPE_LEVEL_HIGH>; 274 235 interrupt-controller; 275 236 #interrupt-cells = <2>; 276 237 gpio-ranges = <&iomuxc 0 32 32>; ··· 282 241 reg = <0x4004b000 0x1000 0x400ff080 0x40>; 283 242 gpio-controller; 284 243 #gpio-cells = <2>; 244 + interrupts = <109 IRQ_TYPE_LEVEL_HIGH>; 285 245 interrupt-controller; 286 246 #interrupt-cells = <2>; 287 247 gpio-ranges = <&iomuxc 0 64 32>; ··· 293 251 reg = <0x4004c000 0x1000 0x400ff0c0 0x40>; 294 252 gpio-controller; 295 253 #gpio-cells = <2>; 254 + interrupts = <110 IRQ_TYPE_LEVEL_HIGH>; 296 255 interrupt-controller; 297 256 #interrupt-cells = <2>; 298 257 gpio-ranges = <&iomuxc 0 96 32>; ··· 304 261 reg = <0x4004d000 0x1000 0x400ff100 0x40>; 305 262 gpio-controller; 306 263 #gpio-cells = <2>; 264 + interrupts = <111 IRQ_TYPE_LEVEL_HIGH>; 307 265 interrupt-controller; 308 266 #interrupt-cells = <2>; 309 267 gpio-ranges = <&iomuxc 0 128 7>; ··· 318 274 usbphy0: usbphy@40050800 { 319 275 compatible = "fsl,vf610-usbphy"; 320 276 reg = <0x40050800 0x400>; 277 + interrupts = <50 IRQ_TYPE_LEVEL_HIGH>; 321 278 clocks = <&clks VF610_CLK_USBPHY0>; 322 279 fsl,anatop = <&anatop>; 323 280 status = "disabled"; ··· 327 282 usbphy1: usbphy@40050c00 { 328 283 compatible = "fsl,vf610-usbphy"; 329 284 reg = <0x40050c00 0x400>; 285 + interrupts = <51 IRQ_TYPE_LEVEL_HIGH>; 330 286 clocks = <&clks VF610_CLK_USBPHY1>; 331 287 fsl,anatop = <&anatop>; 332 288 status = "disabled"; ··· 338 292 #size-cells = <0>; 339 293 compatible = "fsl,vf610-i2c"; 340 294 reg = <0x40066000 0x1000>; 295 + interrupts = <71 IRQ_TYPE_LEVEL_HIGH>; 341 296 clocks = <&clks VF610_CLK_I2C0>; 342 297 clock-names = "ipg"; 343 298 dmas = <&edma0 0 50>, ··· 358 311 usbdev0: usb@40034000 { 359 312 compatible = "fsl,vf610-usb", "fsl,imx27-usb"; 360 313 reg = <0x40034000 0x800>; 314 + interrupts = <75 IRQ_TYPE_LEVEL_HIGH>; 361 315 clocks = <&clks VF610_CLK_USBC0>; 362 316 fsl,usbphy = <&usbphy0>; 363 317 fsl,usbmisc = <&usbmisc0 0>; ··· 377 329 src: src@4006e000 { 378 330 compatible = "fsl,vf610-src", "syscon"; 379 331 reg = <0x4006e000 0x1000>; 332 + interrupts = <96 IRQ_TYPE_LEVEL_HIGH>; 380 333 }; 381 334 }; 382 335 ··· 394 345 <0x400a1000 0x1000>, 395 346 <0x400a2000 0x1000>; 396 347 dma-channels = <32>; 348 + interrupts = <10 IRQ_TYPE_LEVEL_HIGH>, 349 + <11 IRQ_TYPE_LEVEL_HIGH>; 350 + interrupt-names = "edma-tx", "edma-err"; 397 351 clock-names = "dmamux0", "dmamux1"; 398 352 clocks = <&clks VF610_CLK_DMAMUX2>, 399 353 <&clks VF610_CLK_DMAMUX3>; ··· 412 360 snvsrtc: snvs-rtc-lp@34 { 413 361 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 414 362 reg = <0x34 0x58>; 363 + interrupts = <100 IRQ_TYPE_LEVEL_HIGH>; 415 364 clocks = <&clks VF610_CLK_SNVS>; 416 365 clock-names = "snvs-rtc"; 417 366 }; ··· 421 368 uart4: serial@400a9000 { 422 369 compatible = "fsl,vf610-lpuart"; 423 370 reg = <0x400a9000 0x1000>; 371 + interrupts = <65 IRQ_TYPE_LEVEL_HIGH>; 424 372 clocks = <&clks VF610_CLK_UART4>; 425 373 clock-names = "ipg"; 426 374 status = "disabled"; ··· 430 376 uart5: serial@400aa000 { 431 377 compatible = "fsl,vf610-lpuart"; 432 378 reg = <0x400aa000 0x1000>; 379 + interrupts = <66 IRQ_TYPE_LEVEL_HIGH>; 433 380 clocks = <&clks VF610_CLK_UART5>; 434 381 clock-names = "ipg"; 435 382 status = "disabled"; ··· 439 384 adc1: adc@400bb000 { 440 385 compatible = "fsl,vf610-adc"; 441 386 reg = <0x400bb000 0x1000>; 387 + interrupts = <54 IRQ_TYPE_LEVEL_HIGH>; 442 388 clocks = <&clks VF610_CLK_ADC1>; 443 389 clock-names = "adc"; 444 390 status = "disabled"; ··· 448 392 esdhc1: esdhc@400b2000 { 449 393 compatible = "fsl,imx53-esdhc"; 450 394 reg = <0x400b2000 0x1000>; 395 + interrupts = <28 IRQ_TYPE_LEVEL_HIGH>; 451 396 clocks = <&clks VF610_CLK_IPG_BUS>, 452 397 <&clks VF610_CLK_PLATFORM_BUS>, 453 398 <&clks VF610_CLK_ESDHC1>; ··· 459 402 usbh1: usb@400b4000 { 460 403 compatible = "fsl,vf610-usb", "fsl,imx27-usb"; 461 404 reg = <0x400b4000 0x800>; 405 + interrupts = <76 IRQ_TYPE_LEVEL_HIGH>; 462 406 clocks = <&clks VF610_CLK_USBC1>; 463 407 fsl,usbphy = <&usbphy1>; 464 408 fsl,usbmisc = <&usbmisc1 0>; ··· 478 420 ftm: ftm@400b8000 { 479 421 compatible = "fsl,ftm-timer"; 480 422 reg = <0x400b8000 0x1000 0x400b9000 0x1000>; 423 + interrupts = <44 IRQ_TYPE_LEVEL_HIGH>; 481 424 clock-names = "ftm-evt", "ftm-src", 482 425 "ftm-evt-counter-en", "ftm-src-counter-en"; 483 426 clocks = <&clks VF610_CLK_FTM2>, ··· 491 432 fec0: ethernet@400d0000 { 492 433 compatible = "fsl,mvf600-fec"; 493 434 reg = <0x400d0000 0x1000>; 435 + interrupts = <78 IRQ_TYPE_LEVEL_HIGH>; 494 436 clocks = <&clks VF610_CLK_ENET0>, 495 437 <&clks VF610_CLK_ENET0>, 496 438 <&clks VF610_CLK_ENET>; ··· 502 442 fec1: ethernet@400d1000 { 503 443 compatible = "fsl,mvf600-fec"; 504 444 reg = <0x400d1000 0x1000>; 445 + interrupts = <79 IRQ_TYPE_LEVEL_HIGH>; 505 446 clocks = <&clks VF610_CLK_ENET1>, 506 447 <&clks VF610_CLK_ENET1>, 507 448 <&clks VF610_CLK_ENET>; ··· 513 452 can1: flexcan@400d4000 { 514 453 compatible = "fsl,vf610-flexcan"; 515 454 reg = <0x400d4000 0x4000>; 455 + interrupts = <59 IRQ_TYPE_LEVEL_HIGH>; 516 456 clocks = <&clks VF610_CLK_FLEXCAN1>, 517 457 <&clks VF610_CLK_FLEXCAN1>; 518 458 clock-names = "ipg", "per";
+1 -2
arch/arm/configs/imx_v4_v5_defconfig
··· 24 24 CONFIG_MACH_SCB9328=y 25 25 CONFIG_MACH_APF9328=y 26 26 CONFIG_MACH_MX21ADS=y 27 - CONFIG_MACH_MX25_3DS=y 28 27 CONFIG_MACH_EUKREA_CPUIMX25SD=y 29 - CONFIG_MACH_IMX25_DT=y 28 + CONFIG_SOC_IMX25=y 30 29 CONFIG_MACH_MX27ADS=y 31 30 CONFIG_MACH_MX27_3DS=y 32 31 CONFIG_MACH_IMX27_VISSTRIM_M10=y
+1 -1
arch/arm/configs/multi_v5_defconfig
··· 13 13 CONFIG_MACH_KIRKWOOD=y 14 14 CONFIG_MACH_NETXBIG=y 15 15 CONFIG_ARCH_MXC=y 16 - CONFIG_MACH_IMX25_DT=y 16 + CONFIG_SOC_IMX25=y 17 17 CONFIG_MACH_IMX27_DT=y 18 18 CONFIG_ARCH_U300=y 19 19 CONFIG_PCI_MVEBU=y
+20 -65
arch/arm/mach-imx/Kconfig
··· 21 21 22 22 config MXC_DEBUG_BOARD 23 23 bool "Enable MXC debug board(for 3-stack)" 24 + depends on MACH_MX27_3DS || MACH_MX31_3DS || MACH_MX35_3DS 24 25 help 25 26 The debug board is an integral part of the MXC 3-stack(PDK) 26 27 platforms, it can be attached or removed from the peripheral ··· 51 50 52 51 config HAVE_IMX_GPC 53 52 bool 53 + select PM_GENERIC_DOMAINS if PM 54 54 55 55 config HAVE_IMX_MMDC 56 56 bool ··· 78 76 select CPU_ARM926T 79 77 select IMX_HAVE_IOMUX_V1 80 78 select MXC_AVIC 81 - 82 - config SOC_IMX25 83 - bool 84 - select ARCH_MXC_IOMUX_V3 85 - select CPU_ARM926T 86 - select MXC_AVIC 87 - select PINCTRL_IMX25 88 79 89 80 config SOC_IMX27 90 81 bool ··· 143 148 help 144 149 Include support for MX21ADS platform. This includes specific 145 150 configurations for the board and its peripherals. 146 - 147 - comment "MX25 platforms:" 148 - 149 - config MACH_MX25_3DS 150 - bool "Support MX25PDK (3DS) Platform" 151 - select IMX_HAVE_PLATFORM_FLEXCAN 152 - select IMX_HAVE_PLATFORM_FSL_USB2_UDC 153 - select IMX_HAVE_PLATFORM_IMX2_WDT 154 - select IMX_HAVE_PLATFORM_IMXDI_RTC 155 - select IMX_HAVE_PLATFORM_IMX_FB 156 - select IMX_HAVE_PLATFORM_IMX_I2C 157 - select IMX_HAVE_PLATFORM_IMX_KEYPAD 158 - select IMX_HAVE_PLATFORM_IMX_UART 159 - select IMX_HAVE_PLATFORM_MXC_EHCI 160 - select IMX_HAVE_PLATFORM_MXC_NAND 161 - select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX 162 - select SOC_IMX25 163 - 164 - config MACH_EUKREA_CPUIMX25SD 165 - bool "Support Eukrea CPUIMX25 Platform" 166 - select IMX_HAVE_PLATFORM_FLEXCAN 167 - select IMX_HAVE_PLATFORM_FSL_USB2_UDC 168 - select IMX_HAVE_PLATFORM_IMX2_WDT 169 - select IMX_HAVE_PLATFORM_IMXDI_RTC 170 - select IMX_HAVE_PLATFORM_IMX_FB 171 - select IMX_HAVE_PLATFORM_IMX_I2C 172 - select IMX_HAVE_PLATFORM_IMX_UART 173 - select IMX_HAVE_PLATFORM_MXC_EHCI 174 - select IMX_HAVE_PLATFORM_MXC_NAND 175 - select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX 176 - select USB_ULPI_VIEWPORT if USB_ULPI 177 - select SOC_IMX25 178 - 179 - choice 180 - prompt "Baseboard" 181 - depends on MACH_EUKREA_CPUIMX25SD 182 - default MACH_EUKREA_MBIMXSD25_BASEBOARD 183 - 184 - config MACH_EUKREA_MBIMXSD25_BASEBOARD 185 - bool "Eukrea MBIMXSD development board" 186 - select IMX_HAVE_PLATFORM_GPIO_KEYS 187 - select IMX_HAVE_PLATFORM_IMX_SSI 188 - select IMX_HAVE_PLATFORM_SPI_IMX 189 - select LEDS_GPIO_REGISTER 190 - help 191 - This adds board specific devices that can be found on Eukrea's 192 - MBIMXSD evaluation board. 193 - 194 - endchoice 195 - 196 - config MACH_IMX25_DT 197 - bool "Support i.MX25 platforms from device tree" 198 - select SOC_IMX25 199 - help 200 - Include support for Freescale i.MX25 based platforms 201 - using the device tree for discovery 202 151 203 152 comment "MX27 platforms:" 204 153 ··· 496 557 497 558 endif 498 559 560 + if ARCH_MULTI_V5 561 + 562 + comment "Device tree only" 563 + 564 + config SOC_IMX25 565 + bool "i.MX25 support" 566 + select ARCH_MXC_IOMUX_V3 567 + select CPU_ARM926T 568 + select MXC_AVIC 569 + select PINCTRL_IMX25 570 + help 571 + This enables support for Freescale i.MX25 processor 572 + endif 573 + 499 574 if ARCH_MULTI_V7 500 575 501 576 comment "Device tree only" ··· 584 631 585 632 config SOC_VF610 586 633 bool "Vybrid Family VF610 support" 634 + select IRQ_DOMAIN_HIERARCHY 587 635 select ARM_GIC 588 636 select PINCTRL_VF610 589 637 select PL310_ERRATA_769419 if CACHE_L2X0 638 + select SMP_ON_UP if SMP 590 639 591 640 help 592 - This enable support for Freescale Vybrid VF610 processor. 641 + This enables support for Freescale Vybrid VF610 processor. 593 642 594 643 choice 595 644 prompt "Clocksource for scheduler clock" ··· 621 666 select ZONE_DMA if ARM_LPAE 622 667 623 668 help 624 - This enable support for Freescale LS1021A processor. 669 + This enables support for Freescale LS1021A processor. 625 670 626 671 endif 627 672
+1 -7
arch/arm/mach-imx/Makefile
··· 3 3 obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o 4 4 obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o 5 5 6 - obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o 6 + obj-$(CONFIG_SOC_IMX25) += clk-imx25.o cpu-imx25.o mach-imx25.o 7 7 8 8 obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o 9 9 obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o ··· 47 47 48 48 # i.MX21 based machines 49 49 obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o 50 - 51 - # i.MX25 based machines 52 - obj-$(CONFIG_MACH_MX25_3DS) += mach-mx25_3ds.o 53 - obj-$(CONFIG_MACH_EUKREA_CPUIMX25SD) += mach-eukrea_cpuimx25.o 54 - obj-$(CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD) += eukrea_mbimxsd25-baseboard.o 55 - obj-$(CONFIG_MACH_IMX25_DT) += imx25-dt.o 56 50 57 51 # i.MX27 based machines 58 52 obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o
-75
arch/arm/mach-imx/clk-imx25.c
··· 30 30 #include "clk.h" 31 31 #include "common.h" 32 32 #include "hardware.h" 33 - #include "mx25.h" 34 33 35 34 #define CCM_MPCTL 0x00 36 35 #define CCM_UPCTL 0x04 ··· 234 235 * is used on some imx25 board designs to clock the audio codec. 235 236 */ 236 237 clk_set_parent(clk[cko_sel], clk[ipg]); 237 - 238 - return 0; 239 - } 240 - 241 - int __init mx25_clocks_init(void) 242 - { 243 - void __iomem *ccm; 244 - 245 - ccm = ioremap(MX25_CRM_BASE_ADDR, SZ_16K); 246 - 247 - __mx25_clocks_init(24000000, ccm); 248 - 249 - clk_register_clkdev(clk[gpt1_ipg], "ipg", "imx-gpt.0"); 250 - clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); 251 - /* i.mx25 has the i.mx21 type uart */ 252 - clk_register_clkdev(clk[uart1_ipg], "ipg", "imx21-uart.0"); 253 - clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.0"); 254 - clk_register_clkdev(clk[uart2_ipg], "ipg", "imx21-uart.1"); 255 - clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.1"); 256 - clk_register_clkdev(clk[uart3_ipg], "ipg", "imx21-uart.2"); 257 - clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.2"); 258 - clk_register_clkdev(clk[uart4_ipg], "ipg", "imx21-uart.3"); 259 - clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.3"); 260 - clk_register_clkdev(clk[uart5_ipg], "ipg", "imx21-uart.4"); 261 - clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.4"); 262 - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0"); 263 - clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.0"); 264 - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0"); 265 - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.1"); 266 - clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.1"); 267 - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.1"); 268 - clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2"); 269 - clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.2"); 270 - clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2"); 271 - clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27"); 272 - clk_register_clkdev(clk[usbotg_ahb], "ahb", "imx-udc-mx27"); 273 - clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27"); 274 - clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0"); 275 - /* i.mx25 has the i.mx35 type cspi */ 276 - clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0"); 277 - clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1"); 278 - clk_register_clkdev(clk[cspi3_ipg], NULL, "imx35-cspi.2"); 279 - clk_register_clkdev(clk[kpp_ipg], NULL, "imx-keypad"); 280 - clk_register_clkdev(clk[tsc_ipg], NULL, "mx25-adc"); 281 - clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.0"); 282 - clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.1"); 283 - clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.2"); 284 - clk_register_clkdev(clk[fec_ipg], "ipg", "imx25-fec.0"); 285 - clk_register_clkdev(clk[fec_ahb], "ahb", "imx25-fec.0"); 286 - clk_register_clkdev(clk[dryice_ipg], NULL, "imxdi_rtc.0"); 287 - clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx21-fb.0"); 288 - clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx21-fb.0"); 289 - clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx21-fb.0"); 290 - clk_register_clkdev(clk[wdt_ipg], NULL, "imx2-wdt.0"); 291 - clk_register_clkdev(clk[ssi1_ipg], NULL, "imx-ssi.0"); 292 - clk_register_clkdev(clk[ssi2_ipg], NULL, "imx-ssi.1"); 293 - clk_register_clkdev(clk[esdhc1_ipg_per], "per", "sdhci-esdhc-imx25.0"); 294 - clk_register_clkdev(clk[esdhc1_ipg], "ipg", "sdhci-esdhc-imx25.0"); 295 - clk_register_clkdev(clk[esdhc1_ahb], "ahb", "sdhci-esdhc-imx25.0"); 296 - clk_register_clkdev(clk[esdhc2_ipg_per], "per", "sdhci-esdhc-imx25.1"); 297 - clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1"); 298 - clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1"); 299 - clk_register_clkdev(clk[csi_ipg_per], "per", "imx25-camera.0"); 300 - clk_register_clkdev(clk[csi_ipg], "ipg", "imx25-camera.0"); 301 - clk_register_clkdev(clk[csi_ahb], "ahb", "imx25-camera.0"); 302 - clk_register_clkdev(clk[dummy], "audmux", NULL); 303 - clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0"); 304 - clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1"); 305 - /* i.mx25 has the i.mx35 type sdma */ 306 - clk_register_clkdev(clk[sdma_ipg], "ipg", "imx35-sdma"); 307 - clk_register_clkdev(clk[sdma_ahb], "ahb", "imx35-sdma"); 308 - clk_register_clkdev(clk[iim_ipg], "iim", NULL); 309 - 310 - mxc_timer_init(MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), MX25_INT_GPT1); 311 238 312 239 return 0; 313 240 }
+6 -2
arch/arm/mach-imx/clk-imx6q.c
··· 119 119 static unsigned int share_count_ssi1; 120 120 static unsigned int share_count_ssi2; 121 121 static unsigned int share_count_ssi3; 122 + static unsigned int share_count_mipi_core_cfg; 122 123 123 124 static void __init imx6q_clocks_init(struct device_node *ccm_node) 124 125 { ··· 247 246 clk[IMX6QDL_CLK_PLL3_60M] = imx_clk_fixed_factor("pll3_60m", "pll3_usb_otg", 1, 8); 248 247 clk[IMX6QDL_CLK_TWD] = imx_clk_fixed_factor("twd", "arm", 1, 2); 249 248 clk[IMX6QDL_CLK_GPT_3M] = imx_clk_fixed_factor("gpt_3m", "osc", 1, 8); 249 + clk[IMX6QDL_CLK_VIDEO_27M] = imx_clk_fixed_factor("video_27m", "pll3_pfd1_540m", 1, 20); 250 250 if (cpu_is_imx6dl()) { 251 251 clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_fixed_factor("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1); 252 252 clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_fixed_factor("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1); ··· 402 400 clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24); 403 401 clk[IMX6QDL_CLK_GPU3D_CORE] = imx_clk_gate2("gpu3d_core", "gpu3d_core_podf", base + 0x6c, 26); 404 402 clk[IMX6QDL_CLK_HDMI_IAHB] = imx_clk_gate2("hdmi_iahb", "ahb", base + 0x70, 0); 405 - clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "pll3_pfd1_540m", base + 0x70, 4); 403 + clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "video_27m", base + 0x70, 4); 406 404 clk[IMX6QDL_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_per", base + 0x70, 6); 407 405 clk[IMX6QDL_CLK_I2C2] = imx_clk_gate2("i2c2", "ipg_per", base + 0x70, 8); 408 406 clk[IMX6QDL_CLK_I2C3] = imx_clk_gate2("i2c3", "ipg_per", base + 0x70, 10); ··· 417 415 clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_podf", base + 0x74, 12); 418 416 clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); 419 417 clk[IMX6QDL_CLK_IPU2_DI1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10); 420 - clk[IMX6QDL_CLK_HSI_TX] = imx_clk_gate2("hsi_tx", "hsi_tx_podf", base + 0x74, 16); 418 + clk[IMX6QDL_CLK_HSI_TX] = imx_clk_gate2_shared("hsi_tx", "hsi_tx_podf", base + 0x74, 16, &share_count_mipi_core_cfg); 419 + clk[IMX6QDL_CLK_MIPI_CORE_CFG] = imx_clk_gate2_shared("mipi_core_cfg", "video_27m", base + 0x74, 16, &share_count_mipi_core_cfg); 420 + clk[IMX6QDL_CLK_MIPI_IPG] = imx_clk_gate2_shared("mipi_ipg", "ipg", base + 0x74, 16, &share_count_mipi_core_cfg); 421 421 if (cpu_is_imx6dl()) 422 422 /* 423 423 * The multiplexer and divider of the imx6q clock gpu2d get
+1 -6
arch/arm/mach-imx/common.h
··· 23 23 24 24 void mx1_map_io(void); 25 25 void mx21_map_io(void); 26 - void mx25_map_io(void); 27 26 void mx27_map_io(void); 28 27 void mx31_map_io(void); 29 28 void mx35_map_io(void); 30 29 void imx1_init_early(void); 31 30 void imx21_init_early(void); 32 - void imx25_init_early(void); 33 31 void imx27_init_early(void); 34 32 void imx31_init_early(void); 35 33 void imx35_init_early(void); ··· 35 37 void tzic_init_irq(void); 36 38 void mx1_init_irq(void); 37 39 void mx21_init_irq(void); 38 - void mx25_init_irq(void); 39 40 void mx27_init_irq(void); 40 41 void mx31_init_irq(void); 41 42 void mx35_init_irq(void); 42 43 void imx1_soc_init(void); 43 44 void imx21_soc_init(void); 44 - void imx25_soc_init(void); 45 45 void imx27_soc_init(void); 46 46 void imx31_soc_init(void); 47 47 void imx35_soc_init(void); ··· 47 51 void mxc_timer_init(void __iomem *, int); 48 52 int mx1_clocks_init(unsigned long fref); 49 53 int mx21_clocks_init(unsigned long lref, unsigned long fref); 50 - int mx25_clocks_init(void); 51 54 int mx27_clocks_init(unsigned long fref); 52 55 int mx31_clocks_init(unsigned long fref); 53 56 int mx35_clocks_init(void); ··· 66 71 void imx_init_revision_from_anatop(void); 67 72 struct device *imx_soc_device_init(void); 68 73 void imx6_enable_rbc(bool enable); 74 + void imx_gpc_check_dt(void); 69 75 void imx_gpc_set_arm_power_in_lpm(bool power_off); 70 76 void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw); 71 77 void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw); ··· 102 106 static inline void imx_smp_prepare(void) {} 103 107 #endif 104 108 void imx_src_init(void); 105 - void imx_gpc_init(void); 106 109 void imx_gpc_pre_suspend(bool arm_power_off); 107 110 void imx_gpc_post_resume(void); 108 111 void imx_gpc_mask_all(void);
+10 -1
arch/arm/mach-imx/cpu-imx25.c
··· 11 11 */ 12 12 #include <linux/module.h> 13 13 #include <linux/io.h> 14 + #include <linux/of.h> 15 + #include <linux/of_address.h> 14 16 15 17 #include "iim.h" 16 18 #include "hardware.h" ··· 22 20 static int mx25_read_cpu_rev(void) 23 21 { 24 22 u32 rev; 23 + void __iomem *iim_base; 24 + struct device_node *np; 25 25 26 - rev = __raw_readl(MX25_IO_ADDRESS(MX25_IIM_BASE_ADDR + MXC_IIMSREV)); 26 + np = of_find_compatible_node(NULL, NULL, "fsl,imx25-iim"); 27 + iim_base = of_iomap(np, 0); 28 + BUG_ON(!iim_base); 29 + rev = readl(iim_base + MXC_IIMSREV); 30 + iounmap(iim_base); 31 + 27 32 switch (rev) { 28 33 case 0x00: 29 34 return IMX_CHIP_REVISION_1_0;
-85
arch/arm/mach-imx/devices-imx25.h
··· 1 - /* 2 - * Copyright (C) 2010 Pengutronix 3 - * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 4 - * 5 - * This program is free software; you can redistribute it and/or modify it under 6 - * the terms of the GNU General Public License version 2 as published by the 7 - * Free Software Foundation. 8 - */ 9 - #include "devices/devices-common.h" 10 - 11 - extern const struct imx_fec_data imx25_fec_data; 12 - #define imx25_add_fec(pdata) \ 13 - imx_add_fec(&imx25_fec_data, pdata) 14 - 15 - extern const struct imx_flexcan_data imx25_flexcan_data[]; 16 - #define imx25_add_flexcan(id) \ 17 - imx_add_flexcan(&imx25_flexcan_data[id]) 18 - #define imx25_add_flexcan0() imx25_add_flexcan(0) 19 - #define imx25_add_flexcan1() imx25_add_flexcan(1) 20 - 21 - extern const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data; 22 - #define imx25_add_fsl_usb2_udc(pdata) \ 23 - imx_add_fsl_usb2_udc(&imx25_fsl_usb2_udc_data, pdata) 24 - 25 - extern struct imx_imxdi_rtc_data imx25_imxdi_rtc_data; 26 - #define imx25_add_imxdi_rtc() \ 27 - imx_add_imxdi_rtc(&imx25_imxdi_rtc_data) 28 - 29 - extern const struct imx_imx2_wdt_data imx25_imx2_wdt_data; 30 - #define imx25_add_imx2_wdt() \ 31 - imx_add_imx2_wdt(&imx25_imx2_wdt_data) 32 - 33 - extern const struct imx_imx_fb_data imx25_imx_fb_data; 34 - #define imx25_add_imx_fb(pdata) \ 35 - imx_add_imx_fb(&imx25_imx_fb_data, pdata) 36 - 37 - extern const struct imx_imx_i2c_data imx25_imx_i2c_data[]; 38 - #define imx25_add_imx_i2c(id, pdata) \ 39 - imx_add_imx_i2c(&imx25_imx_i2c_data[id], pdata) 40 - #define imx25_add_imx_i2c0(pdata) imx25_add_imx_i2c(0, pdata) 41 - #define imx25_add_imx_i2c1(pdata) imx25_add_imx_i2c(1, pdata) 42 - #define imx25_add_imx_i2c2(pdata) imx25_add_imx_i2c(2, pdata) 43 - 44 - extern const struct imx_imx_keypad_data imx25_imx_keypad_data; 45 - #define imx25_add_imx_keypad(pdata) \ 46 - imx_add_imx_keypad(&imx25_imx_keypad_data, pdata) 47 - 48 - extern const struct imx_imx_ssi_data imx25_imx_ssi_data[]; 49 - #define imx25_add_imx_ssi(id, pdata) \ 50 - imx_add_imx_ssi(&imx25_imx_ssi_data[id], pdata) 51 - 52 - extern const struct imx_imx_uart_1irq_data imx25_imx_uart_data[]; 53 - #define imx25_add_imx_uart(id, pdata) \ 54 - imx_add_imx_uart_1irq(&imx25_imx_uart_data[id], pdata) 55 - #define imx25_add_imx_uart0(pdata) imx25_add_imx_uart(0, pdata) 56 - #define imx25_add_imx_uart1(pdata) imx25_add_imx_uart(1, pdata) 57 - #define imx25_add_imx_uart2(pdata) imx25_add_imx_uart(2, pdata) 58 - #define imx25_add_imx_uart3(pdata) imx25_add_imx_uart(3, pdata) 59 - #define imx25_add_imx_uart4(pdata) imx25_add_imx_uart(4, pdata) 60 - 61 - extern const struct imx_mx2_camera_data imx25_mx2_camera_data; 62 - #define imx25_add_mx2_camera(pdata) \ 63 - imx_add_mx2_camera(&imx25_mx2_camera_data, pdata) 64 - 65 - extern const struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data; 66 - #define imx25_add_mxc_ehci_otg(pdata) \ 67 - imx_add_mxc_ehci(&imx25_mxc_ehci_otg_data, pdata) 68 - extern const struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data; 69 - #define imx25_add_mxc_ehci_hs(pdata) \ 70 - imx_add_mxc_ehci(&imx25_mxc_ehci_hs_data, pdata) 71 - 72 - extern const struct imx_mxc_nand_data imx25_mxc_nand_data; 73 - #define imx25_add_mxc_nand(pdata) \ 74 - imx_add_mxc_nand(&imx25_mxc_nand_data, pdata) 75 - 76 - extern const struct imx_sdhci_esdhc_imx_data imx25_sdhci_esdhc_imx_data[]; 77 - #define imx25_add_sdhci_esdhc_imx(id, pdata) \ 78 - imx_add_sdhci_esdhc_imx(&imx25_sdhci_esdhc_imx_data[id], pdata) 79 - 80 - extern const struct imx_spi_imx_data imx25_cspi_data[]; 81 - #define imx25_add_spi_imx(id, pdata) \ 82 - imx_add_spi_imx(&imx25_cspi_data[id], pdata) 83 - #define imx25_add_spi_imx0(pdata) imx25_add_spi_imx(0, pdata) 84 - #define imx25_add_spi_imx1(pdata) imx25_add_spi_imx(1, pdata) 85 - #define imx25_add_spi_imx2(pdata) imx25_add_spi_imx(2, pdata)
-3
arch/arm/mach-imx/devices/Kconfig
··· 21 21 config IMX_HAVE_PLATFORM_IMX2_WDT 22 22 bool 23 23 24 - config IMX_HAVE_PLATFORM_IMXDI_RTC 25 - bool 26 - 27 24 config IMX_HAVE_PLATFORM_IMX_FB 28 25 bool 29 26
-1
arch/arm/mach-imx/devices/Makefile
··· 8 8 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX21_HCD) += platform-imx21-hcd.o 9 9 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX27_CODA) += platform-imx27-coda.o 10 10 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o 11 - obj-$(CONFIG_IMX_HAVE_PLATFORM_IMXDI_RTC) += platform-imxdi_rtc.o 12 11 obj-y += platform-imx-dma.o 13 12 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o 14 13 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
-5
arch/arm/mach-imx/devices/platform-fec.c
··· 19 19 .irq = soc ## _INT_FEC, \ 20 20 } 21 21 22 - #ifdef CONFIG_SOC_IMX25 23 - const struct imx_fec_data imx25_fec_data __initconst = 24 - imx_fec_data_entry_single(MX25, "imx25-fec"); 25 - #endif /* ifdef CONFIG_SOC_IMX25 */ 26 - 27 22 #ifdef CONFIG_SOC_IMX27 28 23 const struct imx_fec_data imx27_fec_data __initconst = 29 24 imx_fec_data_entry_single(MX27, "imx27-fec");
-5
arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c
··· 18 18 .irq = soc ## _INT_USB_OTG, \ 19 19 } 20 20 21 - #ifdef CONFIG_SOC_IMX25 22 - const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst = 23 - imx_fsl_usb2_udc_data_entry_single(MX25, "imx-udc-mx27"); 24 - #endif /* ifdef CONFIG_SOC_IMX25 */ 25 - 26 21 #ifdef CONFIG_SOC_IMX27 27 22 const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst = 28 23 imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27");
-5
arch/arm/mach-imx/devices/platform-imx-fb.c
··· 29 29 imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K); 30 30 #endif /* ifdef CONFIG_SOC_IMX21 */ 31 31 32 - #ifdef CONFIG_SOC_IMX25 33 - const struct imx_imx_fb_data imx25_imx_fb_data __initconst = 34 - imx_imx_fb_data_entry_single(MX25, "imx21-fb", SZ_16K); 35 - #endif /* ifdef CONFIG_SOC_IMX25 */ 36 - 37 32 #ifdef CONFIG_SOC_IMX27 38 33 const struct imx_imx_fb_data imx27_imx_fb_data __initconst = 39 34 imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K);
-10
arch/arm/mach-imx/devices/platform-imx-i2c.c
··· 31 31 imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K); 32 32 #endif /* ifdef CONFIG_SOC_IMX21 */ 33 33 34 - #ifdef CONFIG_SOC_IMX25 35 - const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = { 36 - #define imx25_imx_i2c_data_entry(_id, _hwid) \ 37 - imx_imx_i2c_data_entry(MX25, "imx21-i2c", _id, _hwid, SZ_16K) 38 - imx25_imx_i2c_data_entry(0, 1), 39 - imx25_imx_i2c_data_entry(1, 2), 40 - imx25_imx_i2c_data_entry(2, 3), 41 - }; 42 - #endif /* ifdef CONFIG_SOC_IMX25 */ 43 - 44 34 #ifdef CONFIG_SOC_IMX27 45 35 const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = { 46 36 #define imx27_imx_i2c_data_entry(_id, _hwid) \
-5
arch/arm/mach-imx/devices/platform-imx-keypad.c
··· 21 21 imx_imx_keypad_data_entry_single(MX21, SZ_16); 22 22 #endif /* ifdef CONFIG_SOC_IMX21 */ 23 23 24 - #ifdef CONFIG_SOC_IMX25 25 - const struct imx_imx_keypad_data imx25_imx_keypad_data __initconst = 26 - imx_imx_keypad_data_entry_single(MX25, SZ_16K); 27 - #endif /* ifdef CONFIG_SOC_IMX25 */ 28 - 29 24 #ifdef CONFIG_SOC_IMX27 30 25 const struct imx_imx_keypad_data imx27_imx_keypad_data __initconst = 31 26 imx_imx_keypad_data_entry_single(MX27, SZ_16);
-9
arch/arm/mach-imx/devices/platform-imx-ssi.c
··· 30 30 }; 31 31 #endif /* ifdef CONFIG_SOC_IMX21 */ 32 32 33 - #ifdef CONFIG_SOC_IMX25 34 - const struct imx_imx_ssi_data imx25_imx_ssi_data[] __initconst = { 35 - #define imx25_imx_ssi_data_entry(_id, _hwid) \ 36 - imx_imx_ssi_data_entry(MX25, _id, _hwid, SZ_4K) 37 - imx25_imx_ssi_data_entry(0, 1), 38 - imx25_imx_ssi_data_entry(1, 2), 39 - }; 40 - #endif /* ifdef CONFIG_SOC_IMX25 */ 41 - 42 33 #ifdef CONFIG_SOC_IMX27 43 34 const struct imx_imx_ssi_data imx27_imx_ssi_data[] __initconst = { 44 35 #define imx27_imx_ssi_data_entry(_id, _hwid) \
-12
arch/arm/mach-imx/devices/platform-imx-uart.c
··· 47 47 }; 48 48 #endif 49 49 50 - #ifdef CONFIG_SOC_IMX25 51 - const struct imx_imx_uart_1irq_data imx25_imx_uart_data[] __initconst = { 52 - #define imx25_imx_uart_data_entry(_id, _hwid) \ 53 - imx_imx_uart_1irq_data_entry(MX25, _id, _hwid, SZ_16K) 54 - imx25_imx_uart_data_entry(0, 1), 55 - imx25_imx_uart_data_entry(1, 2), 56 - imx25_imx_uart_data_entry(2, 3), 57 - imx25_imx_uart_data_entry(3, 4), 58 - imx25_imx_uart_data_entry(4, 5), 59 - }; 60 - #endif /* ifdef CONFIG_SOC_IMX25 */ 61 - 62 50 #ifdef CONFIG_SOC_IMX27 63 51 const struct imx_imx_uart_1irq_data imx27_imx_uart_data[] __initconst = { 64 52 #define imx27_imx_uart_data_entry(_id, _hwid) \
-5
arch/arm/mach-imx/devices/platform-imx2-wdt.c
··· 25 25 imx_imx2_wdt_data_entry_single(MX21, 0, , SZ_4K); 26 26 #endif /* ifdef CONFIG_SOC_IMX21 */ 27 27 28 - #ifdef CONFIG_SOC_IMX25 29 - const struct imx_imx2_wdt_data imx25_imx2_wdt_data __initconst = 30 - imx_imx2_wdt_data_entry_single(MX25, 0, , SZ_16K); 31 - #endif /* ifdef CONFIG_SOC_IMX25 */ 32 - 33 28 #ifdef CONFIG_SOC_IMX27 34 29 const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst = 35 30 imx_imx2_wdt_data_entry_single(MX27, 0, , SZ_4K);
-42
arch/arm/mach-imx/devices/platform-imxdi_rtc.c
··· 1 - /* 2 - * Copyright (C) 2010 Pengutronix 3 - * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 4 - * 5 - * This program is free software; you can redistribute it and/or modify it under 6 - * the terms of the GNU General Public License version 2 as published by the 7 - * Free Software Foundation. 8 - */ 9 - #include <asm/sizes.h> 10 - 11 - #include "../hardware.h" 12 - #include "devices-common.h" 13 - 14 - #define imx_imxdi_rtc_data_entry_single(soc) \ 15 - { \ 16 - .iobase = soc ## _DRYICE_BASE_ADDR, \ 17 - .irq = soc ## _INT_DRYICE, \ 18 - } 19 - 20 - #ifdef CONFIG_SOC_IMX25 21 - const struct imx_imxdi_rtc_data imx25_imxdi_rtc_data __initconst = 22 - imx_imxdi_rtc_data_entry_single(MX25); 23 - #endif /* ifdef CONFIG_SOC_IMX25 */ 24 - 25 - struct platform_device *__init imx_add_imxdi_rtc( 26 - const struct imx_imxdi_rtc_data *data) 27 - { 28 - struct resource res[] = { 29 - { 30 - .start = data->iobase, 31 - .end = data->iobase + SZ_16K - 1, 32 - .flags = IORESOURCE_MEM, 33 - }, { 34 - .start = data->irq, 35 - .end = data->irq, 36 - .flags = IORESOURCE_IRQ, 37 - }, 38 - }; 39 - 40 - return imx_add_platform_device("imxdi_rtc", 0, 41 - res, ARRAY_SIZE(res), NULL, 0); 42 - }
-5
arch/arm/mach-imx/devices/platform-mx2-camera.c
··· 27 27 .irqemmaprp = soc ## _INT_EMMAPRP, \ 28 28 } 29 29 30 - #ifdef CONFIG_SOC_IMX25 31 - const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst = 32 - imx_mx2_camera_data_entry_single(MX25, "imx25-camera"); 33 - #endif /* ifdef CONFIG_SOC_IMX25 */ 34 - 35 30 #ifdef CONFIG_SOC_IMX27 36 31 const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = 37 32 imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera");
-7
arch/arm/mach-imx/devices/platform-mxc-ehci.c
··· 18 18 .irq = soc ## _INT_USB_ ## hs, \ 19 19 } 20 20 21 - #ifdef CONFIG_SOC_IMX25 22 - const struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data __initconst = 23 - imx_mxc_ehci_data_entry_single(MX25, 0, OTG); 24 - const struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data __initconst = 25 - imx_mxc_ehci_data_entry_single(MX25, 1, HS); 26 - #endif /* ifdef CONFIG_SOC_IMX25 */ 27 - 28 21 #ifdef CONFIG_SOC_IMX27 29 22 const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst = 30 23 imx_mxc_ehci_data_entry_single(MX27, 0, OTG);
-5
arch/arm/mach-imx/devices/platform-mxc_nand.c
··· 34 34 imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K); 35 35 #endif /* ifdef CONFIG_SOC_IMX21 */ 36 36 37 - #ifdef CONFIG_SOC_IMX25 38 - const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = 39 - imx_mxc_nand_data_entry_single(MX25, "imx25-nand", SZ_8K); 40 - #endif /* ifdef CONFIG_SOC_IMX25 */ 41 - 42 37 #ifdef CONFIG_SOC_IMX27 43 38 const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = 44 39 imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K);
-11
arch/arm/mach-imx/devices/platform-spi_imx.c
··· 39 39 }; 40 40 #endif 41 41 42 - #ifdef CONFIG_SOC_IMX25 43 - /* i.mx25 has the i.mx35 type cspi */ 44 - const struct imx_spi_imx_data imx25_cspi_data[] __initconst = { 45 - #define imx25_cspi_data_entry(_id, _hwid) \ 46 - imx_spi_imx_data_entry(MX25, CSPI, "imx35-cspi", _id, _hwid, SZ_16K) 47 - imx25_cspi_data_entry(0, 1), 48 - imx25_cspi_data_entry(1, 2), 49 - imx25_cspi_data_entry(2, 3), 50 - }; 51 - #endif /* ifdef CONFIG_SOC_IMX25 */ 52 - 53 42 #ifdef CONFIG_SOC_IMX27 54 43 const struct imx_spi_imx_data imx27_cspi_data[] __initconst = { 55 44 #define imx27_cspi_data_entry(_id, _hwid) \
-99
arch/arm/mach-imx/ehci-imx25.c
··· 1 - /* 2 - * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> 3 - * Copyright (C) 2010 Freescale Semiconductor, Inc. 4 - * 5 - * This program is free software; you can redistribute it and/or modify it 6 - * under the terms of the GNU General Public License as published by the 7 - * Free Software Foundation; either version 2 of the License, or (at your 8 - * option) any later version. 9 - * 10 - * This program is distributed in the hope that it will be useful, but 11 - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 - * for more details. 14 - */ 15 - 16 - #include <linux/platform_device.h> 17 - #include <linux/io.h> 18 - #include <linux/platform_data/usb-ehci-mxc.h> 19 - 20 - #include "ehci.h" 21 - #include "hardware.h" 22 - 23 - #define USBCTRL_OTGBASE_OFFSET 0x600 24 - 25 - #define MX25_OTG_SIC_SHIFT 29 26 - #define MX25_OTG_SIC_MASK (0x3 << MX25_OTG_SIC_SHIFT) 27 - #define MX25_OTG_PM_BIT (1 << 24) 28 - #define MX25_OTG_PP_BIT (1 << 11) 29 - #define MX25_OTG_OCPOL_BIT (1 << 3) 30 - 31 - #define MX25_H1_SIC_SHIFT 21 32 - #define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT) 33 - #define MX25_H1_PP_BIT (1 << 18) 34 - #define MX25_H1_PM_BIT (1 << 16) 35 - #define MX25_H1_IPPUE_UP_BIT (1 << 7) 36 - #define MX25_H1_IPPUE_DOWN_BIT (1 << 6) 37 - #define MX25_H1_TLL_BIT (1 << 5) 38 - #define MX25_H1_USBTE_BIT (1 << 4) 39 - #define MX25_H1_OCPOL_BIT (1 << 2) 40 - 41 - int mx25_initialize_usb_hw(int port, unsigned int flags) 42 - { 43 - unsigned int v; 44 - 45 - v = readl(MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); 46 - 47 - switch (port) { 48 - case 0: /* OTG port */ 49 - v &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PM_BIT | MX25_OTG_PP_BIT | 50 - MX25_OTG_OCPOL_BIT); 51 - v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_OTG_SIC_SHIFT; 52 - 53 - if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) 54 - v |= MX25_OTG_PM_BIT; 55 - 56 - if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH) 57 - v |= MX25_OTG_PP_BIT; 58 - 59 - if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW)) 60 - v |= MX25_OTG_OCPOL_BIT; 61 - 62 - break; 63 - case 1: /* H1 port */ 64 - v &= ~(MX25_H1_SIC_MASK | MX25_H1_PM_BIT | MX25_H1_PP_BIT | 65 - MX25_H1_OCPOL_BIT | MX25_H1_TLL_BIT | MX25_H1_USBTE_BIT | 66 - MX25_H1_IPPUE_DOWN_BIT | MX25_H1_IPPUE_UP_BIT); 67 - v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT; 68 - 69 - if (!(flags & MXC_EHCI_POWER_PINS_ENABLED)) 70 - v |= MX25_H1_PM_BIT; 71 - 72 - if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH) 73 - v |= MX25_H1_PP_BIT; 74 - 75 - if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW)) 76 - v |= MX25_H1_OCPOL_BIT; 77 - 78 - if (!(flags & MXC_EHCI_TTL_ENABLED)) 79 - v |= MX25_H1_TLL_BIT; 80 - 81 - if (flags & MXC_EHCI_INTERNAL_PHY) 82 - v |= MX25_H1_USBTE_BIT; 83 - 84 - if (flags & MXC_EHCI_IPPUE_DOWN) 85 - v |= MX25_H1_IPPUE_DOWN_BIT; 86 - 87 - if (flags & MXC_EHCI_IPPUE_UP) 88 - v |= MX25_H1_IPPUE_UP_BIT; 89 - 90 - break; 91 - default: 92 - return -EINVAL; 93 - } 94 - 95 - writel(v, MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET)); 96 - 97 - return 0; 98 - } 99 -
-310
arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c
··· 1 - /* 2 - * Copyright (C) 2010 Eric Benard - eric@eukrea.com 3 - * 4 - * Based on pcm970-baseboard.c which is : 5 - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) 6 - * 7 - * This program is free software; you can redistribute it and/or 8 - * modify it under the terms of the GNU General Public License 9 - * as published by the Free Software Foundation; either version 2 10 - * of the License, or (at your option) any later version. 11 - * This program is distributed in the hope that it will be useful, 12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 - * GNU General Public License for more details. 15 - * 16 - * You should have received a copy of the GNU General Public License 17 - * along with this program; if not, write to the Free Software 18 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 19 - * MA 02110-1301, USA. 20 - */ 21 - 22 - #include <linux/gpio.h> 23 - #include <linux/leds.h> 24 - #include <linux/platform_device.h> 25 - #include <linux/input.h> 26 - #include <linux/spi/spi.h> 27 - #include <video/platform_lcd.h> 28 - 29 - #include <asm/mach-types.h> 30 - #include <asm/mach/arch.h> 31 - 32 - #include "common.h" 33 - #include "devices-imx25.h" 34 - #include "hardware.h" 35 - #include "iomux-mx25.h" 36 - #include "mx25.h" 37 - 38 - static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { 39 - /* LCD */ 40 - MX25_PAD_LD0__LD0, 41 - MX25_PAD_LD1__LD1, 42 - MX25_PAD_LD2__LD2, 43 - MX25_PAD_LD3__LD3, 44 - MX25_PAD_LD4__LD4, 45 - MX25_PAD_LD5__LD5, 46 - MX25_PAD_LD6__LD6, 47 - MX25_PAD_LD7__LD7, 48 - MX25_PAD_LD8__LD8, 49 - MX25_PAD_LD9__LD9, 50 - MX25_PAD_LD10__LD10, 51 - MX25_PAD_LD11__LD11, 52 - MX25_PAD_LD12__LD12, 53 - MX25_PAD_LD13__LD13, 54 - MX25_PAD_LD14__LD14, 55 - MX25_PAD_LD15__LD15, 56 - MX25_PAD_GPIO_E__LD16, 57 - MX25_PAD_GPIO_F__LD17, 58 - MX25_PAD_HSYNC__HSYNC, 59 - MX25_PAD_VSYNC__VSYNC, 60 - MX25_PAD_LSCLK__LSCLK, 61 - MX25_PAD_OE_ACD__OE_ACD, 62 - MX25_PAD_CONTRAST__CONTRAST, 63 - /* LCD_PWR */ 64 - MX25_PAD_PWM__GPIO_1_26, 65 - /* LED */ 66 - MX25_PAD_POWER_FAIL__GPIO_3_19, 67 - /* SWITCH */ 68 - MX25_PAD_VSTBY_ACK__GPIO_3_18, 69 - /* UART2 */ 70 - MX25_PAD_UART2_RTS__UART2_RTS, 71 - MX25_PAD_UART2_CTS__UART2_CTS, 72 - MX25_PAD_UART2_TXD__UART2_TXD, 73 - MX25_PAD_UART2_RXD__UART2_RXD, 74 - /* SD1 */ 75 - MX25_PAD_SD1_CMD__SD1_CMD, 76 - MX25_PAD_SD1_CLK__SD1_CLK, 77 - MX25_PAD_SD1_DATA0__SD1_DATA0, 78 - MX25_PAD_SD1_DATA1__SD1_DATA1, 79 - MX25_PAD_SD1_DATA2__SD1_DATA2, 80 - MX25_PAD_SD1_DATA3__SD1_DATA3, 81 - /* SD1 CD */ 82 - MX25_PAD_DE_B__GPIO_2_20, 83 - /* I2S */ 84 - MX25_PAD_KPP_COL3__AUD5_TXFS, 85 - MX25_PAD_KPP_COL2__AUD5_TXC, 86 - MX25_PAD_KPP_COL1__AUD5_RXD, 87 - MX25_PAD_KPP_COL0__AUD5_TXD, 88 - /* CAN */ 89 - MX25_PAD_GPIO_D__CAN2_RX, 90 - MX25_PAD_GPIO_C__CAN2_TX, 91 - /* SPI1 */ 92 - MX25_PAD_CSPI1_MOSI__CSPI1_MOSI, 93 - MX25_PAD_CSPI1_MISO__CSPI1_MISO, 94 - MX25_PAD_CSPI1_SS0__GPIO_1_16, 95 - MX25_PAD_CSPI1_SS1__GPIO_1_17, 96 - MX25_PAD_CSPI1_SCLK__CSPI1_SCLK, 97 - MX25_PAD_CSPI1_RDY__GPIO_2_22, 98 - }; 99 - 100 - #define GPIO_LED1 IMX_GPIO_NR(3, 19) 101 - #define GPIO_SWITCH1 IMX_GPIO_NR(3, 18) 102 - #define GPIO_SD1CD IMX_GPIO_NR(2, 20) 103 - #define GPIO_LCDPWR IMX_GPIO_NR(1, 26) 104 - #define GPIO_SPI1_SS0 IMX_GPIO_NR(1, 16) 105 - #define GPIO_SPI1_SS1 IMX_GPIO_NR(1, 17) 106 - #define GPIO_SPI1_IRQ IMX_GPIO_NR(2, 22) 107 - 108 - static struct imx_fb_videomode eukrea_mximxsd_modes[] = { 109 - { 110 - .mode = { 111 - .name = "CMO-QVGA", 112 - .refresh = 60, 113 - .xres = 320, 114 - .yres = 240, 115 - .pixclock = KHZ2PICOS(6500), 116 - .left_margin = 30, 117 - .right_margin = 38, 118 - .upper_margin = 20, 119 - .lower_margin = 3, 120 - .hsync_len = 15, 121 - .vsync_len = 4, 122 - }, 123 - .bpp = 16, 124 - .pcr = 0xCAD08B80, 125 - }, { 126 - .mode = { 127 - .name = "DVI-VGA", 128 - .refresh = 60, 129 - .xres = 640, 130 - .yres = 480, 131 - .pixclock = 32000, 132 - .hsync_len = 7, 133 - .left_margin = 100, 134 - .right_margin = 100, 135 - .vsync_len = 7, 136 - .upper_margin = 7, 137 - .lower_margin = 100, 138 - }, 139 - .pcr = 0xFA208B80, 140 - .bpp = 16, 141 - }, { 142 - .mode = { 143 - .name = "DVI-SVGA", 144 - .refresh = 60, 145 - .xres = 800, 146 - .yres = 600, 147 - .pixclock = 25000, 148 - .hsync_len = 7, 149 - .left_margin = 75, 150 - .right_margin = 75, 151 - .vsync_len = 7, 152 - .upper_margin = 7, 153 - .lower_margin = 75, 154 - }, 155 - .pcr = 0xFA208B80, 156 - .bpp = 16, 157 - }, 158 - }; 159 - 160 - static const struct imx_fb_platform_data eukrea_mximxsd_fb_pdata __initconst = { 161 - .mode = eukrea_mximxsd_modes, 162 - .num_modes = ARRAY_SIZE(eukrea_mximxsd_modes), 163 - .pwmr = 0x00A903FF, 164 - .lscr1 = 0x00120300, 165 - .dmacr = 0x00040060, 166 - }; 167 - 168 - static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd, 169 - unsigned int power) 170 - { 171 - if (power) 172 - gpio_direction_output(GPIO_LCDPWR, 1); 173 - else 174 - gpio_direction_output(GPIO_LCDPWR, 0); 175 - } 176 - 177 - static struct plat_lcd_data eukrea_mbimxsd_lcd_power_data = { 178 - .set_power = eukrea_mbimxsd_lcd_power_set, 179 - }; 180 - 181 - static struct platform_device eukrea_mbimxsd_lcd_powerdev = { 182 - .name = "platform-lcd", 183 - .dev.platform_data = &eukrea_mbimxsd_lcd_power_data, 184 - }; 185 - 186 - static const struct gpio_led eukrea_mbimxsd_leds[] __initconst = { 187 - { 188 - .name = "led1", 189 - .default_trigger = "heartbeat", 190 - .active_low = 1, 191 - .gpio = GPIO_LED1, 192 - }, 193 - }; 194 - 195 - static const struct gpio_led_platform_data 196 - eukrea_mbimxsd_led_info __initconst = { 197 - .leds = eukrea_mbimxsd_leds, 198 - .num_leds = ARRAY_SIZE(eukrea_mbimxsd_leds), 199 - }; 200 - 201 - static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = { 202 - { 203 - .gpio = GPIO_SWITCH1, 204 - .code = BTN_0, 205 - .desc = "BP1", 206 - .active_low = 1, 207 - .wakeup = 1, 208 - }, 209 - }; 210 - 211 - static const struct gpio_keys_platform_data 212 - eukrea_mbimxsd_button_data __initconst = { 213 - .buttons = eukrea_mbimxsd_gpio_buttons, 214 - .nbuttons = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons), 215 - }; 216 - 217 - static struct platform_device *platform_devices[] __initdata = { 218 - &eukrea_mbimxsd_lcd_powerdev, 219 - }; 220 - 221 - static const struct imxuart_platform_data uart_pdata __initconst = { 222 - .flags = IMXUART_HAVE_RTSCTS, 223 - }; 224 - 225 - static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = { 226 - { 227 - I2C_BOARD_INFO("tlv320aic23", 0x1a), 228 - }, 229 - }; 230 - 231 - static const 232 - struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = { 233 - .flags = IMX_SSI_SYN | IMX_SSI_NET | IMX_SSI_USE_I2S_SLAVE, 234 - }; 235 - 236 - static struct esdhc_platform_data sd1_pdata = { 237 - .cd_gpio = GPIO_SD1CD, 238 - .cd_type = ESDHC_CD_GPIO, 239 - .wp_type = ESDHC_WP_NONE, 240 - }; 241 - 242 - static struct spi_board_info eukrea_mbimxsd25_spi_board_info[] __initdata = { 243 - { 244 - .modalias = "spidev", 245 - .max_speed_hz = 20000000, 246 - .bus_num = 0, 247 - .chip_select = 0, 248 - .mode = SPI_MODE_0, 249 - }, 250 - { 251 - .modalias = "spidev", 252 - .max_speed_hz = 20000000, 253 - .bus_num = 0, 254 - .chip_select = 1, 255 - .mode = SPI_MODE_0, 256 - }, 257 - }; 258 - 259 - static int eukrea_mbimxsd25_spi_cs[] = {GPIO_SPI1_SS0, GPIO_SPI1_SS1}; 260 - 261 - static const struct spi_imx_master eukrea_mbimxsd25_spi0_data __initconst = { 262 - .chipselect = eukrea_mbimxsd25_spi_cs, 263 - .num_chipselect = ARRAY_SIZE(eukrea_mbimxsd25_spi_cs), 264 - }; 265 - 266 - /* 267 - * system init for baseboard usage. Will be called by cpuimx25 init. 268 - * 269 - * Add platform devices present on this baseboard and init 270 - * them from CPU side as far as required to use them later on 271 - */ 272 - void __init eukrea_mbimxsd25_baseboard_init(void) 273 - { 274 - if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads, 275 - ARRAY_SIZE(eukrea_mbimxsd_pads))) 276 - printk(KERN_ERR "error setting mbimxsd pads !\n"); 277 - 278 - imx25_add_imx_uart1(&uart_pdata); 279 - imx25_add_imx_fb(&eukrea_mximxsd_fb_pdata); 280 - imx25_add_imx_ssi(0, &eukrea_mbimxsd_ssi_pdata); 281 - 282 - imx25_add_flexcan1(); 283 - imx25_add_sdhci_esdhc_imx(0, &sd1_pdata); 284 - 285 - gpio_request(GPIO_LED1, "LED1"); 286 - gpio_direction_output(GPIO_LED1, 1); 287 - gpio_free(GPIO_LED1); 288 - 289 - gpio_request(GPIO_SWITCH1, "SWITCH1"); 290 - gpio_direction_input(GPIO_SWITCH1); 291 - gpio_free(GPIO_SWITCH1); 292 - 293 - gpio_request(GPIO_LCDPWR, "LCDPWR"); 294 - gpio_direction_output(GPIO_LCDPWR, 1); 295 - 296 - i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, 297 - ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); 298 - 299 - gpio_request(GPIO_SPI1_IRQ, "SPI1_IRQ"); 300 - gpio_direction_input(GPIO_SPI1_IRQ); 301 - gpio_free(GPIO_SPI1_IRQ); 302 - imx25_add_spi_imx0(&eukrea_mbimxsd25_spi0_data); 303 - spi_register_board_info(eukrea_mbimxsd25_spi_board_info, 304 - ARRAY_SIZE(eukrea_mbimxsd25_spi_board_info)); 305 - 306 - platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); 307 - gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); 308 - imx_add_gpio_keys(&eukrea_mbimxsd_button_data); 309 - imx_add_platform_device("eukrea_tlv320", 0, NULL, 0, NULL, 0); 310 - }
+1 -1
arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c
··· 100 100 .num_modes = ARRAY_SIZE(fb_modedb), 101 101 }; 102 102 103 - static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { 103 + static const iomux_v3_cfg_t eukrea_mbimxsd_pads[] __initconst = { 104 104 /* LCD */ 105 105 MX35_PAD_LD0__IPU_DISPB_DAT_0, 106 106 MX35_PAD_LD1__IPU_DISPB_DAT_1,
+329 -24
arch/arm/mach-imx/gpc.c
··· 10 10 * http://www.gnu.org/copyleft/gpl.html 11 11 */ 12 12 13 + #include <linux/clk.h> 14 + #include <linux/delay.h> 13 15 #include <linux/io.h> 14 16 #include <linux/irq.h> 15 17 #include <linux/of.h> 16 18 #include <linux/of_address.h> 17 19 #include <linux/of_irq.h> 20 + #include <linux/platform_device.h> 21 + #include <linux/pm_domain.h> 22 + #include <linux/regulator/consumer.h> 18 23 #include <linux/irqchip/arm-gic.h> 19 24 #include "common.h" 25 + #include "hardware.h" 20 26 27 + #define GPC_CNTR 0x000 21 28 #define GPC_IMR1 0x008 29 + #define GPC_PGC_GPU_PDN 0x260 30 + #define GPC_PGC_GPU_PUPSCR 0x264 31 + #define GPC_PGC_GPU_PDNSCR 0x268 22 32 #define GPC_PGC_CPU_PDN 0x2a0 23 33 #define GPC_PGC_CPU_PUPSCR 0x2a4 24 34 #define GPC_PGC_CPU_PDNSCR 0x2a8 ··· 36 26 #define GPC_PGC_SW_SHIFT 0x0 37 27 38 28 #define IMR_NUM 4 29 + #define GPC_MAX_IRQS (IMR_NUM * 32) 30 + 31 + #define GPU_VPU_PUP_REQ BIT(1) 32 + #define GPU_VPU_PDN_REQ BIT(0) 33 + 34 + #define GPC_CLK_MAX 6 35 + 36 + struct pu_domain { 37 + struct generic_pm_domain base; 38 + struct regulator *reg; 39 + struct clk *clk[GPC_CLK_MAX]; 40 + int num_clks; 41 + }; 39 42 40 43 static void __iomem *gpc_base; 41 44 static u32 gpc_wake_irqs[IMR_NUM]; ··· 100 77 101 78 static int imx_gpc_irq_set_wake(struct irq_data *d, unsigned int on) 102 79 { 103 - unsigned int idx = d->hwirq / 32 - 1; 80 + unsigned int idx = d->hwirq / 32; 104 81 u32 mask; 105 - 106 - /* Sanity check for SPI irq */ 107 - if (d->hwirq < 32) 108 - return -EINVAL; 109 82 110 83 mask = 1 << d->hwirq % 32; 111 84 gpc_wake_irqs[idx] = on ? gpc_wake_irqs[idx] | mask : 112 85 gpc_wake_irqs[idx] & ~mask; 113 86 87 + /* 88 + * Do *not* call into the parent, as the GIC doesn't have any 89 + * wake-up facility... 90 + */ 114 91 return 0; 115 92 } 116 93 ··· 140 117 void __iomem *reg; 141 118 u32 val; 142 119 143 - reg = gpc_base + GPC_IMR1 + (hwirq / 32 - 1) * 4; 120 + reg = gpc_base + GPC_IMR1 + hwirq / 32 * 4; 144 121 val = readl_relaxed(reg); 145 122 val &= ~(1 << hwirq % 32); 146 123 writel_relaxed(val, reg); ··· 151 128 void __iomem *reg; 152 129 u32 val; 153 130 154 - reg = gpc_base + GPC_IMR1 + (hwirq / 32 - 1) * 4; 131 + reg = gpc_base + GPC_IMR1 + hwirq / 32 * 4; 155 132 val = readl_relaxed(reg); 156 133 val |= 1 << (hwirq % 32); 157 134 writel_relaxed(val, reg); ··· 159 136 160 137 static void imx_gpc_irq_unmask(struct irq_data *d) 161 138 { 162 - /* Sanity check for SPI irq */ 163 - if (d->hwirq < 32) 164 - return; 165 - 166 139 imx_gpc_hwirq_unmask(d->hwirq); 140 + irq_chip_unmask_parent(d); 167 141 } 168 142 169 143 static void imx_gpc_irq_mask(struct irq_data *d) 170 144 { 171 - /* Sanity check for SPI irq */ 172 - if (d->hwirq < 32) 173 - return; 174 - 175 145 imx_gpc_hwirq_mask(d->hwirq); 146 + irq_chip_mask_parent(d); 176 147 } 177 148 178 - void __init imx_gpc_init(void) 149 + static struct irq_chip imx_gpc_chip = { 150 + .name = "GPC", 151 + .irq_eoi = irq_chip_eoi_parent, 152 + .irq_mask = imx_gpc_irq_mask, 153 + .irq_unmask = imx_gpc_irq_unmask, 154 + .irq_retrigger = irq_chip_retrigger_hierarchy, 155 + .irq_set_wake = imx_gpc_irq_set_wake, 156 + #ifdef CONFIG_SMP 157 + .irq_set_affinity = irq_chip_set_affinity_parent, 158 + #endif 159 + }; 160 + 161 + static int imx_gpc_domain_xlate(struct irq_domain *domain, 162 + struct device_node *controller, 163 + const u32 *intspec, 164 + unsigned int intsize, 165 + unsigned long *out_hwirq, 166 + unsigned int *out_type) 179 167 { 180 - struct device_node *np; 168 + if (domain->of_node != controller) 169 + return -EINVAL; /* Shouldn't happen, really... */ 170 + if (intsize != 3) 171 + return -EINVAL; /* Not GIC compliant */ 172 + if (intspec[0] != 0) 173 + return -EINVAL; /* No PPI should point to this domain */ 174 + 175 + *out_hwirq = intspec[1]; 176 + *out_type = intspec[2]; 177 + return 0; 178 + } 179 + 180 + static int imx_gpc_domain_alloc(struct irq_domain *domain, 181 + unsigned int irq, 182 + unsigned int nr_irqs, void *data) 183 + { 184 + struct of_phandle_args *args = data; 185 + struct of_phandle_args parent_args; 186 + irq_hw_number_t hwirq; 181 187 int i; 182 188 183 - np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc"); 184 - gpc_base = of_iomap(np, 0); 185 - WARN_ON(!gpc_base); 189 + if (args->args_count != 3) 190 + return -EINVAL; /* Not GIC compliant */ 191 + if (args->args[0] != 0) 192 + return -EINVAL; /* No PPI should point to this domain */ 193 + 194 + hwirq = args->args[1]; 195 + if (hwirq >= GPC_MAX_IRQS) 196 + return -EINVAL; /* Can't deal with this */ 197 + 198 + for (i = 0; i < nr_irqs; i++) 199 + irq_domain_set_hwirq_and_chip(domain, irq + i, hwirq + i, 200 + &imx_gpc_chip, NULL); 201 + 202 + parent_args = *args; 203 + parent_args.np = domain->parent->of_node; 204 + return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args); 205 + } 206 + 207 + static struct irq_domain_ops imx_gpc_domain_ops = { 208 + .xlate = imx_gpc_domain_xlate, 209 + .alloc = imx_gpc_domain_alloc, 210 + .free = irq_domain_free_irqs_common, 211 + }; 212 + 213 + static int __init imx_gpc_init(struct device_node *node, 214 + struct device_node *parent) 215 + { 216 + struct irq_domain *parent_domain, *domain; 217 + int i; 218 + 219 + if (!parent) { 220 + pr_err("%s: no parent, giving up\n", node->full_name); 221 + return -ENODEV; 222 + } 223 + 224 + parent_domain = irq_find_host(parent); 225 + if (!parent_domain) { 226 + pr_err("%s: unable to obtain parent domain\n", node->full_name); 227 + return -ENXIO; 228 + } 229 + 230 + gpc_base = of_iomap(node, 0); 231 + if (WARN_ON(!gpc_base)) 232 + return -ENOMEM; 233 + 234 + domain = irq_domain_add_hierarchy(parent_domain, 0, GPC_MAX_IRQS, 235 + node, &imx_gpc_domain_ops, 236 + NULL); 237 + if (!domain) { 238 + iounmap(gpc_base); 239 + return -ENOMEM; 240 + } 186 241 187 242 /* Initially mask all interrupts */ 188 243 for (i = 0; i < IMR_NUM; i++) 189 244 writel_relaxed(~0, gpc_base + GPC_IMR1 + i * 4); 190 245 191 - /* Register GPC as the secondary interrupt controller behind GIC */ 192 - gic_arch_extn.irq_mask = imx_gpc_irq_mask; 193 - gic_arch_extn.irq_unmask = imx_gpc_irq_unmask; 194 - gic_arch_extn.irq_set_wake = imx_gpc_irq_set_wake; 246 + return 0; 195 247 } 248 + 249 + /* 250 + * We cannot use the IRQCHIP_DECLARE macro that lives in 251 + * drivers/irqchip, so we're forced to roll our own. Not very nice. 252 + */ 253 + OF_DECLARE_2(irqchip, imx_gpc, "fsl,imx6q-gpc", imx_gpc_init); 254 + 255 + void __init imx_gpc_check_dt(void) 256 + { 257 + struct device_node *np; 258 + 259 + np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc"); 260 + if (WARN_ON(!np || 261 + !of_find_property(np, "interrupt-controller", NULL))) 262 + pr_warn("Outdated DT detected, system is about to crash!!!\n"); 263 + } 264 + 265 + #ifdef CONFIG_PM_GENERIC_DOMAINS 266 + 267 + static void _imx6q_pm_pu_power_off(struct generic_pm_domain *genpd) 268 + { 269 + int iso, iso2sw; 270 + u32 val; 271 + 272 + /* Read ISO and ISO2SW power down delays */ 273 + val = readl_relaxed(gpc_base + GPC_PGC_GPU_PDNSCR); 274 + iso = val & 0x3f; 275 + iso2sw = (val >> 8) & 0x3f; 276 + 277 + /* Gate off PU domain when GPU/VPU when powered down */ 278 + writel_relaxed(0x1, gpc_base + GPC_PGC_GPU_PDN); 279 + 280 + /* Request GPC to power down GPU/VPU */ 281 + val = readl_relaxed(gpc_base + GPC_CNTR); 282 + val |= GPU_VPU_PDN_REQ; 283 + writel_relaxed(val, gpc_base + GPC_CNTR); 284 + 285 + /* Wait ISO + ISO2SW IPG clock cycles */ 286 + ndelay((iso + iso2sw) * 1000 / 66); 287 + } 288 + 289 + static int imx6q_pm_pu_power_off(struct generic_pm_domain *genpd) 290 + { 291 + struct pu_domain *pu = container_of(genpd, struct pu_domain, base); 292 + 293 + _imx6q_pm_pu_power_off(genpd); 294 + 295 + if (pu->reg) 296 + regulator_disable(pu->reg); 297 + 298 + return 0; 299 + } 300 + 301 + static int imx6q_pm_pu_power_on(struct generic_pm_domain *genpd) 302 + { 303 + struct pu_domain *pu = container_of(genpd, struct pu_domain, base); 304 + int i, ret, sw, sw2iso; 305 + u32 val; 306 + 307 + if (pu->reg) 308 + ret = regulator_enable(pu->reg); 309 + if (pu->reg && ret) { 310 + pr_err("%s: failed to enable regulator: %d\n", __func__, ret); 311 + return ret; 312 + } 313 + 314 + /* Enable reset clocks for all devices in the PU domain */ 315 + for (i = 0; i < pu->num_clks; i++) 316 + clk_prepare_enable(pu->clk[i]); 317 + 318 + /* Gate off PU domain when GPU/VPU when powered down */ 319 + writel_relaxed(0x1, gpc_base + GPC_PGC_GPU_PDN); 320 + 321 + /* Read ISO and ISO2SW power down delays */ 322 + val = readl_relaxed(gpc_base + GPC_PGC_GPU_PUPSCR); 323 + sw = val & 0x3f; 324 + sw2iso = (val >> 8) & 0x3f; 325 + 326 + /* Request GPC to power up GPU/VPU */ 327 + val = readl_relaxed(gpc_base + GPC_CNTR); 328 + val |= GPU_VPU_PUP_REQ; 329 + writel_relaxed(val, gpc_base + GPC_CNTR); 330 + 331 + /* Wait ISO + ISO2SW IPG clock cycles */ 332 + ndelay((sw + sw2iso) * 1000 / 66); 333 + 334 + /* Disable reset clocks for all devices in the PU domain */ 335 + for (i = 0; i < pu->num_clks; i++) 336 + clk_disable_unprepare(pu->clk[i]); 337 + 338 + return 0; 339 + } 340 + 341 + static struct generic_pm_domain imx6q_arm_domain = { 342 + .name = "ARM", 343 + }; 344 + 345 + static struct pu_domain imx6q_pu_domain = { 346 + .base = { 347 + .name = "PU", 348 + .power_off = imx6q_pm_pu_power_off, 349 + .power_on = imx6q_pm_pu_power_on, 350 + .power_off_latency_ns = 25000, 351 + .power_on_latency_ns = 2000000, 352 + }, 353 + }; 354 + 355 + static struct generic_pm_domain imx6sl_display_domain = { 356 + .name = "DISPLAY", 357 + }; 358 + 359 + static struct generic_pm_domain *imx_gpc_domains[] = { 360 + &imx6q_arm_domain, 361 + &imx6q_pu_domain.base, 362 + &imx6sl_display_domain, 363 + }; 364 + 365 + static struct genpd_onecell_data imx_gpc_onecell_data = { 366 + .domains = imx_gpc_domains, 367 + .num_domains = ARRAY_SIZE(imx_gpc_domains), 368 + }; 369 + 370 + static int imx_gpc_genpd_init(struct device *dev, struct regulator *pu_reg) 371 + { 372 + struct clk *clk; 373 + bool is_off; 374 + int i; 375 + 376 + imx6q_pu_domain.reg = pu_reg; 377 + 378 + for (i = 0; ; i++) { 379 + clk = of_clk_get(dev->of_node, i); 380 + if (IS_ERR(clk)) 381 + break; 382 + if (i >= GPC_CLK_MAX) { 383 + dev_err(dev, "more than %d clocks\n", GPC_CLK_MAX); 384 + goto clk_err; 385 + } 386 + imx6q_pu_domain.clk[i] = clk; 387 + } 388 + imx6q_pu_domain.num_clks = i; 389 + 390 + is_off = IS_ENABLED(CONFIG_PM); 391 + if (is_off) { 392 + _imx6q_pm_pu_power_off(&imx6q_pu_domain.base); 393 + } else { 394 + /* 395 + * Enable power if compiled without CONFIG_PM in case the 396 + * bootloader disabled it. 397 + */ 398 + imx6q_pm_pu_power_on(&imx6q_pu_domain.base); 399 + } 400 + 401 + pm_genpd_init(&imx6q_pu_domain.base, NULL, is_off); 402 + return of_genpd_add_provider_onecell(dev->of_node, 403 + &imx_gpc_onecell_data); 404 + 405 + clk_err: 406 + while (i--) 407 + clk_put(imx6q_pu_domain.clk[i]); 408 + return -EINVAL; 409 + } 410 + 411 + #else 412 + static inline int imx_gpc_genpd_init(struct device *dev, struct regulator *reg) 413 + { 414 + return 0; 415 + } 416 + #endif /* CONFIG_PM_GENERIC_DOMAINS */ 417 + 418 + static int imx_gpc_probe(struct platform_device *pdev) 419 + { 420 + struct regulator *pu_reg; 421 + int ret; 422 + 423 + pu_reg = devm_regulator_get_optional(&pdev->dev, "pu"); 424 + if (PTR_ERR(pu_reg) == -ENODEV) 425 + pu_reg = NULL; 426 + if (IS_ERR(pu_reg)) { 427 + ret = PTR_ERR(pu_reg); 428 + dev_err(&pdev->dev, "failed to get pu regulator: %d\n", ret); 429 + return ret; 430 + } 431 + 432 + return imx_gpc_genpd_init(&pdev->dev, pu_reg); 433 + } 434 + 435 + static const struct of_device_id imx_gpc_dt_ids[] = { 436 + { .compatible = "fsl,imx6q-gpc" }, 437 + { .compatible = "fsl,imx6sl-gpc" }, 438 + { } 439 + }; 440 + 441 + static struct platform_driver imx_gpc_driver = { 442 + .driver = { 443 + .name = "imx-gpc", 444 + .owner = THIS_MODULE, 445 + .of_match_table = imx_gpc_dt_ids, 446 + }, 447 + .probe = imx_gpc_probe, 448 + }; 449 + 450 + static int __init imx_pgc_init(void) 451 + { 452 + return platform_driver_register(&imx_gpc_driver); 453 + } 454 + subsys_initcall(imx_pgc_init);
-1
arch/arm/mach-imx/hardware.h
··· 112 112 #include "mx21.h" 113 113 #include "mx27.h" 114 114 #include "mx1.h" 115 - #include "mx25.h" 116 115 117 116 #define imx_map_entry(soc, name, _type) { \ 118 117 .virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR), \
+18 -2
arch/arm/mach-imx/imx25-dt.c arch/arm/mach-imx/mach-imx25.c
··· 10 10 */ 11 11 12 12 #include <linux/irq.h> 13 + #include <linux/of_address.h> 13 14 #include <linux/of_irq.h> 14 15 #include <linux/of_platform.h> 15 16 #include <asm/mach/arch.h> 16 17 #include <asm/mach/time.h> 17 18 #include "common.h" 18 - #include "mx25.h" 19 + #include "hardware.h" 20 + 21 + static void __init imx25_init_early(void) 22 + { 23 + mxc_set_cpu_type(MXC_CPU_MX25); 24 + } 25 + 26 + static void __init mx25_init_irq(void) 27 + { 28 + struct device_node *np; 29 + void __iomem *avic_base; 30 + 31 + np = of_find_compatible_node(NULL, NULL, "fsl,avic"); 32 + avic_base = of_iomap(np, 0); 33 + BUG_ON(!avic_base); 34 + mxc_init_irq(avic_base); 35 + } 19 36 20 37 static const char * const imx25_dt_board_compat[] __initconst = { 21 38 "fsl,imx25", ··· 40 23 }; 41 24 42 25 DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") 43 - .map_io = mx25_map_io, 44 26 .init_early = imx25_init_early, 45 27 .init_irq = mx25_init_irq, 46 28 .dt_compat = imx25_dt_board_compat,
-524
arch/arm/mach-imx/iomux-mx25.h
··· 1 - /* 2 - * arch/arm/plat-mxc/include/mach/iomux-mx25.h 3 - * 4 - * Copyright (C) 2009 by Lothar Wassmann <LW@KARO-electronics.de> 5 - * 6 - * based on arch/arm/mach-mx25/mx25_pins.h 7 - * Copyright 2008 Freescale Semiconductor, Inc. All Rights Reserved. 8 - * and 9 - * arch/arm/plat-mxc/include/mach/iomux-mx35.h 10 - * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH <armlinux@phytec.de> 11 - * 12 - * The code contained herein is licensed under the GNU General Public 13 - * License. You may obtain a copy of the GNU General Public License 14 - * Version 2 or later at the following locations: 15 - * 16 - * http://www.opensource.org/licenses/gpl-license.html 17 - * http://www.gnu.org/copyleft/gpl.html 18 - */ 19 - #ifndef __MACH_IOMUX_MX25_H__ 20 - #define __MACH_IOMUX_MX25_H__ 21 - 22 - #include "iomux-v3.h" 23 - 24 - /* 25 - * IOMUX/PAD Bit field definitions 26 - */ 27 - 28 - #define MX25_PAD_A10__A10 IOMUX_PAD(0x000, 0x008, 0x00, 0, 0, NO_PAD_CTRL) 29 - #define MX25_PAD_A10__GPIO_4_0 IOMUX_PAD(0x000, 0x008, 0x05, 0, 0, NO_PAD_CTRL) 30 - 31 - #define MX25_PAD_A13__A13 IOMUX_PAD(0x22C, 0x00c, 0x00, 0, 0, NO_PAD_CTRL) 32 - #define MX25_PAD_A13__GPIO_4_1 IOMUX_PAD(0x22C, 0x00c, 0x05, 0, 0, NO_PAD_CTRL) 33 - 34 - #define MX25_PAD_A14__A14 IOMUX_PAD(0x230, 0x010, 0x10, 0, 0, NO_PAD_CTRL) 35 - #define MX25_PAD_A14__GPIO_2_0 IOMUX_PAD(0x230, 0x010, 0x15, 0, 0, NO_PAD_CTRL) 36 - 37 - #define MX25_PAD_A15__A15 IOMUX_PAD(0x234, 0x014, 0x10, 0, 0, NO_PAD_CTRL) 38 - #define MX25_PAD_A15__GPIO_2_1 IOMUX_PAD(0x234, 0x014, 0x15, 0, 0, NO_PAD_CTRL) 39 - 40 - #define MX25_PAD_A16__A16 IOMUX_PAD(0x000, 0x018, 0x10, 0, 0, NO_PAD_CTRL) 41 - #define MX25_PAD_A16__GPIO_2_2 IOMUX_PAD(0x000, 0x018, 0x15, 0, 0, NO_PAD_CTRL) 42 - 43 - #define MX25_PAD_A17__A17 IOMUX_PAD(0x238, 0x01c, 0x10, 0, 0, NO_PAD_CTRL) 44 - #define MX25_PAD_A17__GPIO_2_3 IOMUX_PAD(0x238, 0x01c, 0x15, 0, 0, NO_PAD_CTRL) 45 - 46 - #define MX25_PAD_A18__A18 IOMUX_PAD(0x23c, 0x020, 0x10, 0, 0, NO_PAD_CTRL) 47 - #define MX25_PAD_A18__GPIO_2_4 IOMUX_PAD(0x23c, 0x020, 0x15, 0, 0, NO_PAD_CTRL) 48 - #define MX25_PAD_A18__FEC_COL IOMUX_PAD(0x23c, 0x020, 0x17, 0x504, 0, NO_PAD_CTRL) 49 - 50 - #define MX25_PAD_A19__A19 IOMUX_PAD(0x240, 0x024, 0x10, 0, 0, NO_PAD_CTRL) 51 - #define MX25_PAD_A19__FEC_RX_ER IOMUX_PAD(0x240, 0x024, 0x17, 0x518, 0, NO_PAD_CTRL) 52 - #define MX25_PAD_A19__GPIO_2_5 IOMUX_PAD(0x240, 0x024, 0x15, 0, 0, NO_PAD_CTRL) 53 - 54 - #define MX25_PAD_A20__A20 IOMUX_PAD(0x244, 0x028, 0x10, 0, 0, NO_PAD_CTRL) 55 - #define MX25_PAD_A20__GPIO_2_6 IOMUX_PAD(0x244, 0x028, 0x15, 0, 0, NO_PAD_CTRL) 56 - #define MX25_PAD_A20__FEC_RDATA2 IOMUX_PAD(0x244, 0x028, 0x17, 0x50c, 0, NO_PAD_CTRL) 57 - 58 - #define MX25_PAD_A21__A21 IOMUX_PAD(0x248, 0x02c, 0x10, 0, 0, NO_PAD_CTRL) 59 - #define MX25_PAD_A21__GPIO_2_7 IOMUX_PAD(0x248, 0x02c, 0x15, 0, 0, NO_PAD_CTRL) 60 - #define MX25_PAD_A21__FEC_RDATA3 IOMUX_PAD(0x248, 0x02c, 0x17, 0x510, 0, NO_PAD_CTRL) 61 - 62 - #define MX25_PAD_A22__A22 IOMUX_PAD(0x000, 0x030, 0x10, 0, 0, NO_PAD_CTRL) 63 - #define MX25_PAD_A22__GPIO_2_8 IOMUX_PAD(0x000, 0x030, 0x15, 0, 0, NO_PAD_CTRL) 64 - 65 - #define MX25_PAD_A23__A23 IOMUX_PAD(0x24c, 0x034, 0x10, 0, 0, NO_PAD_CTRL) 66 - #define MX25_PAD_A23__GPIO_2_9 IOMUX_PAD(0x24c, 0x034, 0x15, 0, 0, NO_PAD_CTRL) 67 - 68 - #define MX25_PAD_A24__A24 IOMUX_PAD(0x250, 0x038, 0x10, 0, 0, NO_PAD_CTRL) 69 - #define MX25_PAD_A24__GPIO_2_10 IOMUX_PAD(0x250, 0x038, 0x15, 0, 0, NO_PAD_CTRL) 70 - #define MX25_PAD_A24__FEC_RX_CLK IOMUX_PAD(0x250, 0x038, 0x17, 0x514, 0, NO_PAD_CTRL) 71 - 72 - #define MX25_PAD_A25__A25 IOMUX_PAD(0x254, 0x03c, 0x10, 0, 0, NO_PAD_CTRL) 73 - #define MX25_PAD_A25__GPIO_2_11 IOMUX_PAD(0x254, 0x03c, 0x15, 0, 0, NO_PAD_CTRL) 74 - #define MX25_PAD_A25__FEC_CRS IOMUX_PAD(0x254, 0x03c, 0x17, 0x508, 0, NO_PAD_CTRL) 75 - 76 - #define MX25_PAD_EB0__EB0 IOMUX_PAD(0x258, 0x040, 0x10, 0, 0, NO_PAD_CTRL) 77 - #define MX25_PAD_EB0__AUD4_TXD IOMUX_PAD(0x258, 0x040, 0x14, 0x464, 0, NO_PAD_CTRL) 78 - #define MX25_PAD_EB0__GPIO_2_12 IOMUX_PAD(0x258, 0x040, 0x15, 0, 0, NO_PAD_CTRL) 79 - 80 - #define MX25_PAD_EB1__EB1 IOMUX_PAD(0x25c, 0x044, 0x10, 0, 0, NO_PAD_CTRL) 81 - #define MX25_PAD_EB1__AUD4_RXD IOMUX_PAD(0x25c, 0x044, 0x14, 0x460, 0, NO_PAD_CTRL) 82 - #define MX25_PAD_EB1__GPIO_2_13 IOMUX_PAD(0x25c, 0x044, 0x15, 0, 0, NO_PAD_CTRL) 83 - 84 - #define MX25_PAD_OE__OE IOMUX_PAD(0x260, 0x048, 0x10, 0, 0, NO_PAD_CTRL) 85 - #define MX25_PAD_OE__AUD4_TXC IOMUX_PAD(0x260, 0x048, 0x14, 0, 0, NO_PAD_CTRL) 86 - #define MX25_PAD_OE__GPIO_2_14 IOMUX_PAD(0x260, 0x048, 0x15, 0, 0, NO_PAD_CTRL) 87 - 88 - #define MX25_PAD_CS0__CS0 IOMUX_PAD(0x000, 0x04c, 0x00, 0, 0, NO_PAD_CTRL) 89 - #define MX25_PAD_CS0__GPIO_4_2 IOMUX_PAD(0x000, 0x04c, 0x05, 0, 0, NO_PAD_CTRL) 90 - 91 - #define MX25_PAD_CS1__CS1 IOMUX_PAD(0x000, 0x050, 0x00, 0, 0, NO_PAD_CTRL) 92 - #define MX25_PAD_CS1__NF_CE3 IOMUX_PAD(0x000, 0x050, 0x01, 0, 0, NO_PAD_CTRL) 93 - #define MX25_PAD_CS1__GPIO_4_3 IOMUX_PAD(0x000, 0x050, 0x05, 0, 0, NO_PAD_CTRL) 94 - 95 - #define MX25_PAD_CS4__CS4 IOMUX_PAD(0x264, 0x054, 0x10, 0, 0, NO_PAD_CTRL) 96 - #define MX25_PAD_CS4__NF_CE1 IOMUX_PAD(0x264, 0x054, 0x01, 0, 0, NO_PAD_CTRL) 97 - #define MX25_PAD_CS4__UART5_CTS IOMUX_PAD(0x264, 0x054, 0x13, 0, 0, NO_PAD_CTRL) 98 - #define MX25_PAD_CS4__GPIO_3_20 IOMUX_PAD(0x264, 0x054, 0x15, 0, 0, NO_PAD_CTRL) 99 - 100 - #define MX25_PAD_CS5__CS5 IOMUX_PAD(0x268, 0x058, 0x10, 0, 0, NO_PAD_CTRL) 101 - #define MX25_PAD_CS5__NF_CE2 IOMUX_PAD(0x268, 0x058, 0x01, 0, 0, NO_PAD_CTRL) 102 - #define MX25_PAD_CS5__UART5_RTS IOMUX_PAD(0x268, 0x058, 0x13, 0x574, 0, NO_PAD_CTRL) 103 - #define MX25_PAD_CS5__GPIO_3_21 IOMUX_PAD(0x268, 0x058, 0x15, 0, 0, NO_PAD_CTRL) 104 - 105 - #define MX25_PAD_NF_CE0__NF_CE0 IOMUX_PAD(0x26c, 0x05c, 0x10, 0, 0, NO_PAD_CTRL) 106 - #define MX25_PAD_NF_CE0__GPIO_3_22 IOMUX_PAD(0x26c, 0x05c, 0x15, 0, 0, NO_PAD_CTRL) 107 - 108 - #define MX25_PAD_ECB__ECB IOMUX_PAD(0x270, 0x060, 0x10, 0, 0, NO_PAD_CTRL) 109 - #define MX25_PAD_ECB__UART5_TXD_MUX IOMUX_PAD(0x270, 0x060, 0x13, 0, 0, NO_PAD_CTRL) 110 - #define MX25_PAD_ECB__GPIO_3_23 IOMUX_PAD(0x270, 0x060, 0x15, 0, 0, NO_PAD_CTRL) 111 - 112 - #define MX25_PAD_LBA__LBA IOMUX_PAD(0x274, 0x064, 0x10, 0, 0, NO_PAD_CTRL) 113 - #define MX25_PAD_LBA__UART5_RXD_MUX IOMUX_PAD(0x274, 0x064, 0x13, 0x578, 0, NO_PAD_CTRL) 114 - #define MX25_PAD_LBA__GPIO_3_24 IOMUX_PAD(0x274, 0x064, 0x15, 0, 0, NO_PAD_CTRL) 115 - 116 - #define MX25_PAD_BCLK__BCLK IOMUX_PAD(0x000, 0x068, 0x00, 0, 0, NO_PAD_CTRL) 117 - #define MX25_PAD_BCLK__GPIO_4_4 IOMUX_PAD(0x000, 0x068, 0x05, 0, 0, NO_PAD_CTRL) 118 - 119 - #define MX25_PAD_RW__RW IOMUX_PAD(0x278, 0x06c, 0x10, 0, 0, NO_PAD_CTRL) 120 - #define MX25_PAD_RW__AUD4_TXFS IOMUX_PAD(0x278, 0x06c, 0x14, 0x474, 0, NO_PAD_CTRL) 121 - #define MX25_PAD_RW__GPIO_3_25 IOMUX_PAD(0x278, 0x06c, 0x15, 0, 0, NO_PAD_CTRL) 122 - 123 - #define MX25_PAD_NFWE_B__NFWE_B IOMUX_PAD(0x000, 0x070, 0x10, 0, 0, NO_PAD_CTRL) 124 - #define MX25_PAD_NFWE_B__GPIO_3_26 IOMUX_PAD(0x000, 0x070, 0x15, 0, 0, NO_PAD_CTRL) 125 - 126 - #define MX25_PAD_NFRE_B__NFRE_B IOMUX_PAD(0x000, 0x074, 0x10, 0, 0, NO_PAD_CTRL) 127 - #define MX25_PAD_NFRE_B__GPIO_3_27 IOMUX_PAD(0x000, 0x074, 0x15, 0, 0, NO_PAD_CTRL) 128 - 129 - #define MX25_PAD_NFALE__NFALE IOMUX_PAD(0x000, 0x078, 0x10, 0, 0, NO_PAD_CTRL) 130 - #define MX25_PAD_NFALE__GPIO_3_28 IOMUX_PAD(0x000, 0x078, 0x15, 0, 0, NO_PAD_CTRL) 131 - 132 - #define MX25_PAD_NFCLE__NFCLE IOMUX_PAD(0x000, 0x07c, 0x10, 0, 0, NO_PAD_CTRL) 133 - #define MX25_PAD_NFCLE__GPIO_3_29 IOMUX_PAD(0x000, 0x07c, 0x15, 0, 0, NO_PAD_CTRL) 134 - 135 - #define MX25_PAD_NFWP_B__NFWP_B IOMUX_PAD(0x000, 0x080, 0x10, 0, 0, NO_PAD_CTRL) 136 - #define MX25_PAD_NFWP_B__GPIO_3_30 IOMUX_PAD(0x000, 0x080, 0x15, 0, 0, NO_PAD_CTRL) 137 - 138 - #define MX25_PAD_NFRB__NFRB IOMUX_PAD(0x27c, 0x084, 0x10, 0, 0, PAD_CTL_PKE) 139 - #define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL) 140 - 141 - #define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL) 142 - #define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, PAD_CTL_SRE_FAST) 143 - #define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL) 144 - 145 - #define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL) 146 - #define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, PAD_CTL_SRE_FAST) 147 - #define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL) 148 - 149 - #define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL) 150 - #define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, PAD_CTL_SRE_FAST) 151 - #define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL) 152 - 153 - #define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL) 154 - #define MX25_PAD_D12__GPIO_4_8 IOMUX_PAD(0x28c, 0x094, 0x05, 0, 0, NO_PAD_CTRL) 155 - 156 - #define MX25_PAD_D11__D11 IOMUX_PAD(0x290, 0x098, 0x00, 0, 0, NO_PAD_CTRL) 157 - #define MX25_PAD_D11__GPIO_4_9 IOMUX_PAD(0x290, 0x098, 0x05, 0, 0, NO_PAD_CTRL) 158 - 159 - #define MX25_PAD_D10__D10 IOMUX_PAD(0x294, 0x09c, 0x00, 0, 0, NO_PAD_CTRL) 160 - #define MX25_PAD_D10__GPIO_4_10 IOMUX_PAD(0x294, 0x09c, 0x05, 0, 0, NO_PAD_CTRL) 161 - #define MX25_PAD_D10__USBOTG_OC IOMUX_PAD(0x294, 0x09c, 0x06, 0x57c, 0, PAD_CTL_PUS_100K_UP) 162 - 163 - #define MX25_PAD_D9__D9 IOMUX_PAD(0x298, 0x0a0, 0x00, 0, 0, NO_PAD_CTRL) 164 - #define MX25_PAD_D9__GPIO_4_11 IOMUX_PAD(0x298, 0x0a0, 0x05, 0, 0, NO_PAD_CTRL) 165 - #define MX25_PAD_D9__USBH2_PWR IOMUX_PAD(0x298, 0x0a0, 0x06, 0, 0, PAD_CTL_PKE) 166 - 167 - #define MX25_PAD_D8__D8 IOMUX_PAD(0x29c, 0x0a4, 0x00, 0, 0, NO_PAD_CTRL) 168 - #define MX25_PAD_D8__GPIO_4_12 IOMUX_PAD(0x29c, 0x0a4, 0x05, 0, 0, NO_PAD_CTRL) 169 - #define MX25_PAD_D8__USBH2_OC IOMUX_PAD(0x29c, 0x0a4, 0x06, 0x580, 0, PAD_CTL_PUS_100K_UP) 170 - 171 - #define MX25_PAD_D7__D7 IOMUX_PAD(0x2a0, 0x0a8, 0x00, 0, 0, NO_PAD_CTRL) 172 - #define MX25_PAD_D7__GPIO_4_13 IOMUX_PAD(0x2a0, 0x0a8, 0x05, 0, 0, NO_PAD_CTRL) 173 - 174 - #define MX25_PAD_D6__D6 IOMUX_PAD(0x2a4, 0x0ac, 0x00, 0, 0, NO_PAD_CTRL) 175 - #define MX25_PAD_D6__GPIO_4_14 IOMUX_PAD(0x2a4, 0x0ac, 0x05, 0, 0, NO_PAD_CTRL) 176 - 177 - #define MX25_PAD_D5__D5 IOMUX_PAD(0x2a8, 0x0b0, 0x00, 0, 0, NO_PAD_CTRL) 178 - #define MX25_PAD_D5__GPIO_4_15 IOMUX_PAD(0x2a8, 0x0b0, 0x05, 0, 0, NO_PAD_CTRL) 179 - 180 - #define MX25_PAD_D4__D4 IOMUX_PAD(0x2ac, 0x0b4, 0x00, 0, 0, NO_PAD_CTRL) 181 - #define MX25_PAD_D4__GPIO_4_16 IOMUX_PAD(0x2ac, 0x0b4, 0x05, 0, 0, NO_PAD_CTRL) 182 - 183 - #define MX25_PAD_D3__D3 IOMUX_PAD(0x2b0, 0x0b8, 0x00, 0, 0, NO_PAD_CTRL) 184 - #define MX25_PAD_D3__GPIO_4_17 IOMUX_PAD(0x2b0, 0x0b8, 0x05, 0, 0, NO_PAD_CTRL) 185 - 186 - #define MX25_PAD_D2__D2 IOMUX_PAD(0x2b4, 0x0bc, 0x00, 0, 0, NO_PAD_CTRL) 187 - #define MX25_PAD_D2__GPIO_4_18 IOMUX_PAD(0x2b4, 0x0bc, 0x05, 0, 0, NO_PAD_CTRL) 188 - 189 - #define MX25_PAD_D1__D1 IOMUX_PAD(0x2b8, 0x0c0, 0x00, 0, 0, NO_PAD_CTRL) 190 - #define MX25_PAD_D1__GPIO_4_19 IOMUX_PAD(0x2b8, 0x0c0, 0x05, 0, 0, NO_PAD_CTRL) 191 - 192 - #define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL) 193 - #define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL) 194 - 195 - #define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, PAD_CTL_SRE_FAST) 196 - #define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL) 197 - #define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL) 198 - 199 - #define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, PAD_CTL_SRE_FAST) 200 - #define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL) 201 - #define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL) 202 - 203 - #define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, PAD_CTL_SRE_FAST) 204 - #define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL) 205 - 206 - #define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, PAD_CTL_SRE_FAST) 207 - #define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL) 208 - 209 - #define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, PAD_CTL_SRE_FAST) 210 - #define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL) 211 - 212 - #define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, PAD_CTL_SRE_FAST) 213 - #define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL) 214 - 215 - #define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, PAD_CTL_SRE_FAST) 216 - #define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL) 217 - 218 - #define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, PAD_CTL_SRE_FAST) 219 - #define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL) 220 - 221 - #define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, PAD_CTL_SRE_FAST) 222 - #define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL) 223 - 224 - #define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, PAD_CTL_SRE_FAST) 225 - #define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL) 226 - 227 - #define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, PAD_CTL_SRE_FAST) 228 - #define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL) 229 - 230 - #define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, PAD_CTL_SRE_FAST) 231 - #define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL) 232 - 233 - #define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, PAD_CTL_SRE_FAST) 234 - #define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL) 235 - 236 - #define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, PAD_CTL_SRE_FAST) 237 - #define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL) 238 - 239 - #define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, PAD_CTL_SRE_FAST) 240 - #define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL) 241 - 242 - #define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, PAD_CTL_SRE_FAST) 243 - #define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL) 244 - 245 - #define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL) 246 - #define MX25_PAD_HSYNC__GPIO_1_22 IOMUX_PAD(0x300, 0x108, 0x15, 0, 0, NO_PAD_CTRL) 247 - 248 - #define MX25_PAD_VSYNC__VSYNC IOMUX_PAD(0x304, 0x10c, 0x10, 0, 0, NO_PAD_CTRL) 249 - #define MX25_PAD_VSYNC__GPIO_1_23 IOMUX_PAD(0x304, 0x10c, 0x15, 0, 0, NO_PAD_CTRL) 250 - 251 - #define MX25_PAD_LSCLK__LSCLK IOMUX_PAD(0x308, 0x110, 0x10, 0, 0, NO_PAD_CTRL) 252 - #define MX25_PAD_LSCLK__GPIO_1_24 IOMUX_PAD(0x308, 0x110, 0x15, 0, 0, NO_PAD_CTRL) 253 - 254 - #define MX25_PAD_OE_ACD__OE_ACD IOMUX_PAD(0x30c, 0x114, 0x10, 0, 0, NO_PAD_CTRL) 255 - #define MX25_PAD_OE_ACD__GPIO_1_25 IOMUX_PAD(0x30c, 0x114, 0x15, 0, 0, NO_PAD_CTRL) 256 - 257 - #define MX25_PAD_CONTRAST__CONTRAST IOMUX_PAD(0x310, 0x118, 0x10, 0, 0, NO_PAD_CTRL) 258 - #define MX25_PAD_CONTRAST__PWM4_PWMO IOMUX_PAD(0x310, 0x118, 0x14, 0, 0, NO_PAD_CTRL) 259 - #define MX25_PAD_CONTRAST__FEC_CRS IOMUX_PAD(0x310, 0x118, 0x15, 0x508, 1, NO_PAD_CTRL) 260 - 261 - #define MX25_PAD_PWM__PWM IOMUX_PAD(0x314, 0x11c, 0x10, 0, 0, NO_PAD_CTRL) 262 - #define MX25_PAD_PWM__GPIO_1_26 IOMUX_PAD(0x314, 0x11c, 0x15, 0, 0, NO_PAD_CTRL) 263 - #define MX25_PAD_PWM__USBH2_OC IOMUX_PAD(0x314, 0x11c, 0x16, 0x580, 1, PAD_CTL_PUS_100K_UP) 264 - 265 - #define MX25_PAD_CSI_D2__CSI_D2 IOMUX_PAD(0x318, 0x120, 0x10, 0, 0, NO_PAD_CTRL) 266 - #define MX25_PAD_CSI_D2__UART5_RXD_MUX IOMUX_PAD(0x318, 0x120, 0x11, 0x578, 1, NO_PAD_CTRL) 267 - #define MX25_PAD_CSI_D2__GPIO_1_27 IOMUX_PAD(0x318, 0x120, 0x15, 0, 0, NO_PAD_CTRL) 268 - #define MX25_PAD_CSI_D2__CSPI3_MOSI IOMUX_PAD(0x318, 0x120, 0x17, 0, 0, NO_PAD_CTRL) 269 - 270 - #define MX25_PAD_CSI_D3__CSI_D3 IOMUX_PAD(0x31c, 0x124, 0x10, 0, 0, NO_PAD_CTRL) 271 - #define MX25_PAD_CSI_D3__GPIO_1_28 IOMUX_PAD(0x31c, 0x124, 0x15, 0, 0, NO_PAD_CTRL) 272 - #define MX25_PAD_CSI_D3__CSPI3_MISO IOMUX_PAD(0x31c, 0x124, 0x17, 0x4b4, 1, NO_PAD_CTRL) 273 - 274 - #define MX25_PAD_CSI_D4__CSI_D4 IOMUX_PAD(0x320, 0x128, 0x10, 0, 0, NO_PAD_CTRL) 275 - #define MX25_PAD_CSI_D4__UART5_RTS IOMUX_PAD(0x320, 0x128, 0x11, 0x574, 1, NO_PAD_CTRL) 276 - #define MX25_PAD_CSI_D4__GPIO_1_29 IOMUX_PAD(0x320, 0x128, 0x15, 0, 0, NO_PAD_CTRL) 277 - #define MX25_PAD_CSI_D4__CSPI3_SCLK IOMUX_PAD(0x320, 0x128, 0x17, 0, 0, NO_PAD_CTRL) 278 - 279 - #define MX25_PAD_CSI_D5__CSI_D5 IOMUX_PAD(0x324, 0x12c, 0x10, 0, 0, NO_PAD_CTRL) 280 - #define MX25_PAD_CSI_D5__GPIO_1_30 IOMUX_PAD(0x324, 0x12c, 0x15, 0, 0, NO_PAD_CTRL) 281 - #define MX25_PAD_CSI_D5__CSPI3_RDY IOMUX_PAD(0x324, 0x12c, 0x17, 0, 0, NO_PAD_CTRL) 282 - 283 - #define MX25_PAD_CSI_D6__CSI_D6 IOMUX_PAD(0x328, 0x130, 0x10, 0, 0, NO_PAD_CTRL) 284 - #define MX25_PAD_CSI_D6__GPIO_1_31 IOMUX_PAD(0x328, 0x130, 0x15, 0, 0, NO_PAD_CTRL) 285 - 286 - #define MX25_PAD_CSI_D7__CSI_D7 IOMUX_PAD(0x32c, 0x134, 0x10, 0, 0, NO_PAD_CTRL) 287 - #define MX25_PAD_CSI_D7__GPIO_1_6 IOMUX_PAD(0x32c, 0x134, 0x15, 0, 0, NO_PAD_CTRL) 288 - 289 - #define MX25_PAD_CSI_D8__CSI_D8 IOMUX_PAD(0x330, 0x138, 0x10, 0, 0, NO_PAD_CTRL) 290 - #define MX25_PAD_CSI_D8__GPIO_1_7 IOMUX_PAD(0x330, 0x138, 0x15, 0, 0, NO_PAD_CTRL) 291 - 292 - #define MX25_PAD_CSI_D9__CSI_D9 IOMUX_PAD(0x334, 0x13c, 0x10, 0, 0, NO_PAD_CTRL) 293 - #define MX25_PAD_CSI_D9__GPIO_4_21 IOMUX_PAD(0x334, 0x13c, 0x15, 0, 0, NO_PAD_CTRL) 294 - 295 - #define MX25_PAD_CSI_MCLK__CSI_MCLK IOMUX_PAD(0x338, 0x140, 0x10, 0, 0, NO_PAD_CTRL) 296 - #define MX25_PAD_CSI_MCLK__GPIO_1_8 IOMUX_PAD(0x338, 0x140, 0x15, 0, 0, NO_PAD_CTRL) 297 - 298 - #define MX25_PAD_CSI_VSYNC__CSI_VSYNC IOMUX_PAD(0x33c, 0x144, 0x10, 0, 0, NO_PAD_CTRL) 299 - #define MX25_PAD_CSI_VSYNC__GPIO_1_9 IOMUX_PAD(0x33c, 0x144, 0x15, 0, 0, NO_PAD_CTRL) 300 - 301 - #define MX25_PAD_CSI_HSYNC__CSI_HSYNC IOMUX_PAD(0x340, 0x148, 0x10, 0, 0, NO_PAD_CTRL) 302 - #define MX25_PAD_CSI_HSYNC__GPIO_1_10 IOMUX_PAD(0x340, 0x148, 0x15, 0, 0, NO_PAD_CTRL) 303 - 304 - #define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK IOMUX_PAD(0x344, 0x14c, 0x10, 0, 0, NO_PAD_CTRL) 305 - #define MX25_PAD_CSI_PIXCLK__GPIO_1_11 IOMUX_PAD(0x344, 0x14c, 0x15, 0, 0, NO_PAD_CTRL) 306 - 307 - #define MX25_PAD_I2C1_CLK__I2C1_CLK IOMUX_PAD(0x348, 0x150, 0x10, 0, 0, NO_PAD_CTRL) 308 - #define MX25_PAD_I2C1_CLK__GPIO_1_12 IOMUX_PAD(0x348, 0x150, 0x15, 0, 0, NO_PAD_CTRL) 309 - 310 - #define MX25_PAD_I2C1_DAT__I2C1_DAT IOMUX_PAD(0x34c, 0x154, 0x10, 0, 0, NO_PAD_CTRL) 311 - #define MX25_PAD_I2C1_DAT__GPIO_1_13 IOMUX_PAD(0x34c, 0x154, 0x15, 0, 0, NO_PAD_CTRL) 312 - 313 - #define MX25_PAD_CSPI1_MOSI__CSPI1_MOSI IOMUX_PAD(0x350, 0x158, 0x10, 0, 0, NO_PAD_CTRL) 314 - #define MX25_PAD_CSPI1_MOSI__GPIO_1_14 IOMUX_PAD(0x350, 0x158, 0x15, 0, 0, NO_PAD_CTRL) 315 - 316 - #define MX25_PAD_CSPI1_MISO__CSPI1_MISO IOMUX_PAD(0x354, 0x15c, 0x10, 0, 0, NO_PAD_CTRL) 317 - #define MX25_PAD_CSPI1_MISO__GPIO_1_15 IOMUX_PAD(0x354, 0x15c, 0x15, 0, 0, NO_PAD_CTRL) 318 - 319 - #define MX25_PAD_CSPI1_SS0__CSPI1_SS0 IOMUX_PAD(0x358, 0x160, 0x10, 0, 0, NO_PAD_CTRL) 320 - #define MX25_PAD_CSPI1_SS0__GPIO_1_16 IOMUX_PAD(0x358, 0x160, 0x15, 0, 0, NO_PAD_CTRL) 321 - 322 - #define MX25_PAD_CSPI1_SS1__CSPI1_SS1 IOMUX_PAD(0x35c, 0x164, 0x10, 0, 0, NO_PAD_CTRL) 323 - #define MX25_PAD_CSPI1_SS1__GPIO_1_17 IOMUX_PAD(0x35c, 0x164, 0x15, 0, 0, NO_PAD_CTRL) 324 - 325 - #define MX25_PAD_CSPI1_SCLK__CSPI1_SCLK IOMUX_PAD(0x360, 0x168, 0x10, 0, 0, NO_PAD_CTRL) 326 - #define MX25_PAD_CSPI1_SCLK__GPIO_1_18 IOMUX_PAD(0x360, 0x168, 0x15, 0, 0, NO_PAD_CTRL) 327 - 328 - #define MX25_PAD_CSPI1_RDY__CSPI1_RDY IOMUX_PAD(0x364, 0x16c, 0x10, 0, 0, PAD_CTL_PKE) 329 - #define MX25_PAD_CSPI1_RDY__GPIO_2_22 IOMUX_PAD(0x364, 0x16c, 0x15, 0, 0, NO_PAD_CTRL) 330 - 331 - #define MX25_PAD_UART1_RXD__UART1_RXD IOMUX_PAD(0x368, 0x170, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN) 332 - #define MX25_PAD_UART1_RXD__GPIO_4_22 IOMUX_PAD(0x368, 0x170, 0x15, 0, 0, NO_PAD_CTRL) 333 - 334 - #define MX25_PAD_UART1_TXD__UART1_TXD IOMUX_PAD(0x36c, 0x174, 0x10, 0, 0, NO_PAD_CTRL) 335 - #define MX25_PAD_UART1_TXD__GPIO_4_23 IOMUX_PAD(0x36c, 0x174, 0x15, 0, 0, NO_PAD_CTRL) 336 - 337 - #define MX25_PAD_UART1_RTS__UART1_RTS IOMUX_PAD(0x370, 0x178, 0x10, 0, 0, PAD_CTL_PUS_100K_UP) 338 - #define MX25_PAD_UART1_RTS__CSI_D0 IOMUX_PAD(0x370, 0x178, 0x11, 0x488, 1, NO_PAD_CTRL) 339 - #define MX25_PAD_UART1_RTS__GPIO_4_24 IOMUX_PAD(0x370, 0x178, 0x15, 0, 0, NO_PAD_CTRL) 340 - 341 - #define MX25_PAD_UART1_CTS__UART1_CTS IOMUX_PAD(0x374, 0x17c, 0x10, 0, 0, PAD_CTL_PUS_100K_UP) 342 - #define MX25_PAD_UART1_CTS__CSI_D1 IOMUX_PAD(0x374, 0x17c, 0x11, 0x48c, 1, NO_PAD_CTRL) 343 - #define MX25_PAD_UART1_CTS__GPIO_4_25 IOMUX_PAD(0x374, 0x17c, 0x15, 0, 0, NO_PAD_CTRL) 344 - 345 - #define MX25_PAD_UART2_RXD__UART2_RXD IOMUX_PAD(0x378, 0x180, 0x10, 0, 0, NO_PAD_CTRL) 346 - #define MX25_PAD_UART2_RXD__GPIO_4_26 IOMUX_PAD(0x378, 0x180, 0x15, 0, 0, NO_PAD_CTRL) 347 - 348 - #define MX25_PAD_UART2_TXD__UART2_TXD IOMUX_PAD(0x37c, 0x184, 0x10, 0, 0, NO_PAD_CTRL) 349 - #define MX25_PAD_UART2_TXD__GPIO_4_27 IOMUX_PAD(0x37c, 0x184, 0x15, 0, 0, NO_PAD_CTRL) 350 - 351 - #define MX25_PAD_UART2_RTS__UART2_RTS IOMUX_PAD(0x380, 0x188, 0x10, 0, 0, NO_PAD_CTRL) 352 - #define MX25_PAD_UART2_RTS__FEC_COL IOMUX_PAD(0x380, 0x188, 0x12, 0x504, 2, NO_PAD_CTRL) 353 - #define MX25_PAD_UART2_RTS__GPIO_4_28 IOMUX_PAD(0x380, 0x188, 0x15, 0, 0, NO_PAD_CTRL) 354 - 355 - #define MX25_PAD_UART2_CTS__FEC_RX_ER IOMUX_PAD(0x384, 0x18c, 0x12, 0x518, 2, NO_PAD_CTRL) 356 - #define MX25_PAD_UART2_CTS__UART2_CTS IOMUX_PAD(0x384, 0x18c, 0x10, 0, 0, NO_PAD_CTRL) 357 - #define MX25_PAD_UART2_CTS__GPIO_4_29 IOMUX_PAD(0x384, 0x18c, 0x15, 0, 0, NO_PAD_CTRL) 358 - 359 - #define MX25_PAD_SD1_CMD__SD1_CMD IOMUX_PAD(0x388, 0x190, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 360 - #define MX25_PAD_SD1_CMD__FEC_RDATA2 IOMUX_PAD(0x388, 0x190, 0x12, 0x50c, 2, NO_PAD_CTRL) 361 - #define MX25_PAD_SD1_CMD__GPIO_2_23 IOMUX_PAD(0x388, 0x190, 0x15, 0, 0, NO_PAD_CTRL) 362 - 363 - #define MX25_PAD_SD1_CLK__SD1_CLK IOMUX_PAD(0x38c, 0x194, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 364 - #define MX25_PAD_SD1_CLK__FEC_RDATA3 IOMUX_PAD(0x38c, 0x194, 0x12, 0x510, 2, NO_PAD_CTRL) 365 - #define MX25_PAD_SD1_CLK__GPIO_2_24 IOMUX_PAD(0x38c, 0x194, 0x15, 0, 0, NO_PAD_CTRL) 366 - 367 - #define MX25_PAD_SD1_DATA0__SD1_DATA0 IOMUX_PAD(0x390, 0x198, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 368 - #define MX25_PAD_SD1_DATA0__GPIO_2_25 IOMUX_PAD(0x390, 0x198, 0x15, 0, 0, NO_PAD_CTRL) 369 - 370 - #define MX25_PAD_SD1_DATA1__SD1_DATA1 IOMUX_PAD(0x394, 0x19c, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 371 - #define MX25_PAD_SD1_DATA1__AUD7_RXD IOMUX_PAD(0x394, 0x19c, 0x13, 0x478, 0, NO_PAD_CTRL) 372 - #define MX25_PAD_SD1_DATA1__GPIO_2_26 IOMUX_PAD(0x394, 0x19c, 0x15, 0, 0, NO_PAD_CTRL) 373 - 374 - #define MX25_PAD_SD1_DATA2__SD1_DATA2 IOMUX_PAD(0x398, 0x1a0, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 375 - #define MX25_PAD_SD1_DATA2__FEC_RX_CLK IOMUX_PAD(0x398, 0x1a0, 0x15, 0x514, 2, NO_PAD_CTRL) 376 - #define MX25_PAD_SD1_DATA2__GPIO_2_27 IOMUX_PAD(0x398, 0x1a0, 0x15, 0, 0, NO_PAD_CTRL) 377 - 378 - #define MX25_PAD_SD1_DATA3__SD1_DATA3 IOMUX_PAD(0x39c, 0x1a4, 0x10, 0, 0, PAD_CTL_PUS_47K_UP) 379 - #define MX25_PAD_SD1_DATA3__FEC_CRS IOMUX_PAD(0x39c, 0x1a4, 0x10, 0x508, 2, NO_PAD_CTRL) 380 - #define MX25_PAD_SD1_DATA3__GPIO_2_28 IOMUX_PAD(0x39c, 0x1a4, 0x15, 0, 0, NO_PAD_CTRL) 381 - 382 - #define KPP_CTL_ROW (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) 383 - #define KPP_CTL_COL (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP | PAD_CTL_ODE) 384 - 385 - #define MX25_PAD_KPP_ROW0__KPP_ROW0 IOMUX_PAD(0x3a0, 0x1a8, 0x10, 0, 0, KPP_CTL_ROW) 386 - #define MX25_PAD_KPP_ROW0__GPIO_2_29 IOMUX_PAD(0x3a0, 0x1a8, 0x15, 0, 0, NO_PAD_CTRL) 387 - 388 - #define MX25_PAD_KPP_ROW1__KPP_ROW1 IOMUX_PAD(0x3a4, 0x1ac, 0x10, 0, 0, KPP_CTL_ROW) 389 - #define MX25_PAD_KPP_ROW1__GPIO_2_30 IOMUX_PAD(0x3a4, 0x1ac, 0x15, 0, 0, NO_PAD_CTRL) 390 - 391 - #define MX25_PAD_KPP_ROW2__KPP_ROW2 IOMUX_PAD(0x3a8, 0x1b0, 0x10, 0, 0, KPP_CTL_ROW) 392 - #define MX25_PAD_KPP_ROW2__CSI_D0 IOMUX_PAD(0x3a8, 0x1b0, 0x13, 0x488, 2, NO_PAD_CTRL) 393 - #define MX25_PAD_KPP_ROW2__GPIO_2_31 IOMUX_PAD(0x3a8, 0x1b0, 0x15, 0, 0, NO_PAD_CTRL) 394 - 395 - #define MX25_PAD_KPP_ROW3__KPP_ROW3 IOMUX_PAD(0x3ac, 0x1b4, 0x10, 0, 0, KPP_CTL_ROW) 396 - #define MX25_PAD_KPP_ROW3__CSI_LD1 IOMUX_PAD(0x3ac, 0x1b4, 0x13, 0x48c, 2, NO_PAD_CTRL) 397 - #define MX25_PAD_KPP_ROW3__GPIO_3_0 IOMUX_PAD(0x3ac, 0x1b4, 0x15, 0, 0, NO_PAD_CTRL) 398 - 399 - #define MX25_PAD_KPP_COL0__KPP_COL0 IOMUX_PAD(0x3b0, 0x1b8, 0x10, 0, 0, KPP_CTL_COL) 400 - #define MX25_PAD_KPP_COL0__UART4_RXD_MUX IOMUX_PAD(0x3b0, 0x1b8, 0x11, 0x570, 1, NO_PAD_CTRL) 401 - #define MX25_PAD_KPP_COL0__AUD5_TXD IOMUX_PAD(0x3b0, 0x1b8, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP) 402 - #define MX25_PAD_KPP_COL0__GPIO_3_1 IOMUX_PAD(0x3b0, 0x1b8, 0x15, 0, 0, NO_PAD_CTRL) 403 - 404 - #define MX25_PAD_KPP_COL1__KPP_COL1 IOMUX_PAD(0x3b4, 0x1bc, 0x10, 0, 0, KPP_CTL_COL) 405 - #define MX25_PAD_KPP_COL1__UART4_TXD_MUX IOMUX_PAD(0x3b4, 0x1bc, 0x11, 0, 0, NO_PAD_CTRL) 406 - #define MX25_PAD_KPP_COL1__AUD5_RXD IOMUX_PAD(0x3b4, 0x1bc, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP) 407 - #define MX25_PAD_KPP_COL1__GPIO_3_2 IOMUX_PAD(0x3b4, 0x1bc, 0x15, 0, 0, NO_PAD_CTRL) 408 - 409 - #define MX25_PAD_KPP_COL2__KPP_COL2 IOMUX_PAD(0x3b8, 0x1c0, 0x10, 0, 0, KPP_CTL_COL) 410 - #define MX25_PAD_KPP_COL2__UART4_RTS IOMUX_PAD(0x3b8, 0x1c0, 0x11, 0, 0, NO_PAD_CTRL) 411 - #define MX25_PAD_KPP_COL2__AUD5_TXC IOMUX_PAD(0x3b8, 0x1c0, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP) 412 - #define MX25_PAD_KPP_COL2__GPIO_3_3 IOMUX_PAD(0x3b8, 0x1c0, 0x15, 0, 0, NO_PAD_CTRL) 413 - 414 - #define MX25_PAD_KPP_COL3__KPP_COL3 IOMUX_PAD(0x3bc, 0x1c4, 0x10, 0, 0, KPP_CTL_COL) 415 - #define MX25_PAD_KPP_COL3__UART4_CTS IOMUX_PAD(0x3bc, 0x1c4, 0x11, 0, 0, NO_PAD_CTRL) 416 - #define MX25_PAD_KPP_COL3__AUD5_TXFS IOMUX_PAD(0x3bc, 0x1c4, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP) 417 - #define MX25_PAD_KPP_COL3__GPIO_3_4 IOMUX_PAD(0x3bc, 0x1c4, 0x15, 0, 0, NO_PAD_CTRL) 418 - 419 - #define MX25_PAD_FEC_MDC__FEC_MDC IOMUX_PAD(0x3c0, 0x1c8, 0x10, 0, 0, NO_PAD_CTRL) 420 - #define MX25_PAD_FEC_MDC__AUD4_TXD IOMUX_PAD(0x3c0, 0x1c8, 0x12, 0x464, 1, NO_PAD_CTRL) 421 - #define MX25_PAD_FEC_MDC__GPIO_3_5 IOMUX_PAD(0x3c0, 0x1c8, 0x15, 0, 0, NO_PAD_CTRL) 422 - 423 - #define MX25_PAD_FEC_MDIO__FEC_MDIO IOMUX_PAD(0x3c4, 0x1cc, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_22K_UP) 424 - #define MX25_PAD_FEC_MDIO__AUD4_RXD IOMUX_PAD(0x3c4, 0x1cc, 0x12, 0x460, 1, NO_PAD_CTRL) 425 - #define MX25_PAD_FEC_MDIO__GPIO_3_6 IOMUX_PAD(0x3c4, 0x1cc, 0x15, 0, 0, NO_PAD_CTRL) 426 - 427 - #define MX25_PAD_FEC_TDATA0__FEC_TDATA0 IOMUX_PAD(0x3c8, 0x1d0, 0x10, 0, 0, NO_PAD_CTRL) 428 - #define MX25_PAD_FEC_TDATA0__GPIO_3_7 IOMUX_PAD(0x3c8, 0x1d0, 0x15, 0, 0, NO_PAD_CTRL) 429 - 430 - #define MX25_PAD_FEC_TDATA1__FEC_TDATA1 IOMUX_PAD(0x3cc, 0x1d4, 0x10, 0, 0, NO_PAD_CTRL) 431 - #define MX25_PAD_FEC_TDATA1__AUD4_TXFS IOMUX_PAD(0x3cc, 0x1d4, 0x12, 0x474, 1, NO_PAD_CTRL) 432 - #define MX25_PAD_FEC_TDATA1__GPIO_3_8 IOMUX_PAD(0x3cc, 0x1d4, 0x15, 0, 0, NO_PAD_CTRL) 433 - 434 - #define MX25_PAD_FEC_TX_EN__FEC_TX_EN IOMUX_PAD(0x3d0, 0x1d8, 0x10, 0, 0, NO_PAD_CTRL) 435 - #define MX25_PAD_FEC_TX_EN__GPIO_3_9 IOMUX_PAD(0x3d0, 0x1d8, 0x15, 0, 0, NO_PAD_CTRL) 436 - 437 - #define MX25_PAD_FEC_RDATA0__FEC_RDATA0 IOMUX_PAD(0x3d4, 0x1dc, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL) 438 - #define MX25_PAD_FEC_RDATA0__GPIO_3_10 IOMUX_PAD(0x3d4, 0x1dc, 0x15, 0, 0, NO_PAD_CTRL) 439 - 440 - #define MX25_PAD_FEC_RDATA1__FEC_RDATA1 IOMUX_PAD(0x3d8, 0x1e0, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL) 441 - #define MX25_PAD_FEC_RDATA1__GPIO_3_11 IOMUX_PAD(0x3d8, 0x1e0, 0x15, 0, 0, NO_PAD_CTRL) 442 - 443 - #define MX25_PAD_FEC_RX_DV__FEC_RX_DV IOMUX_PAD(0x3dc, 0x1e4, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL) 444 - #define MX25_PAD_FEC_RX_DV__CAN2_RX IOMUX_PAD(0x3dc, 0x1e4, 0x14, 0x484, 0, PAD_CTL_PUS_22K_UP) 445 - #define MX25_PAD_FEC_RX_DV__GPIO_3_12 IOMUX_PAD(0x3dc, 0x1e4, 0x15, 0, 0, NO_PAD_CTRL) 446 - 447 - #define MX25_PAD_FEC_TX_CLK__FEC_TX_CLK IOMUX_PAD(0x3e0, 0x1e8, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN) 448 - #define MX25_PAD_FEC_TX_CLK__GPIO_3_13 IOMUX_PAD(0x3e0, 0x1e8, 0x15, 0, 0, NO_PAD_CTRL) 449 - 450 - #define MX25_PAD_RTCK__RTCK IOMUX_PAD(0x3e4, 0x1ec, 0x10, 0, 0, NO_PAD_CTRL) 451 - #define MX25_PAD_RTCK__OWIRE IOMUX_PAD(0x3e4, 0x1ec, 0x11, 0, 0, NO_PAD_CTRL) 452 - #define MX25_PAD_RTCK__GPIO_3_14 IOMUX_PAD(0x3e4, 0x1ec, 0x15, 0, 0, NO_PAD_CTRL) 453 - 454 - #define MX25_PAD_DE_B__DE_B IOMUX_PAD(0x3ec, 0x1f0, 0x10, 0, 0, NO_PAD_CTRL) 455 - #define MX25_PAD_DE_B__GPIO_2_20 IOMUX_PAD(0x3ec, 0x1f0, 0x15, 0, 0, NO_PAD_CTRL) 456 - 457 - #define MX25_PAD_TDO__TDO IOMUX_PAD(0x3e8, 0x000, 0x00, 0, 0, NO_PAD_CTRL) 458 - 459 - #define MX25_PAD_GPIO_A__GPIO_A IOMUX_PAD(0x3f0, 0x1f4, 0x10, 0, 0, NO_PAD_CTRL) 460 - #define MX25_PAD_GPIO_A__CAN1_TX IOMUX_PAD(0x3f0, 0x1f4, 0x16, 0, 0, PAD_CTL_PUS_22K_UP) 461 - #define MX25_PAD_GPIO_A__USBOTG_PWR IOMUX_PAD(0x3f0, 0x1f4, 0x12, 0, 0, PAD_CTL_PKE) 462 - 463 - #define MX25_PAD_GPIO_B__GPIO_B IOMUX_PAD(0x3f4, 0x1f8, 0x10, 0, 0, NO_PAD_CTRL) 464 - #define MX25_PAD_GPIO_B__CAN1_RX IOMUX_PAD(0x3f4, 0x1f8, 0x16, 0x480, 1, PAD_CTL_PUS_22K_UP) 465 - #define MX25_PAD_GPIO_B__USBOTG_OC IOMUX_PAD(0x3f4, 0x1f8, 0x12, 0x57c, 1, PAD_CTL_PUS_100K_UP) 466 - 467 - #define MX25_PAD_GPIO_C__GPIO_C IOMUX_PAD(0x3f8, 0x1fc, 0x10, 0, 0, NO_PAD_CTRL) 468 - #define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP) 469 - 470 - #define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL) 471 - #define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, PAD_CTL_SRE_FAST) 472 - #define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP) 473 - 474 - #define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL) 475 - #define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, PAD_CTL_SRE_FAST) 476 - #define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL) 477 - 478 - #define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL) 479 - #define MX25_PAD_GPIO_F__AUD7_TXC IOMUX_PAD(0x404, 0x208, 0x14, 0, 0, NO_PAD_CTRL) 480 - 481 - #define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK IOMUX_PAD(0x000, 0x20c, 0x10, 0, 0, NO_PAD_CTRL) 482 - #define MX25_PAD_EXT_ARMCLK__GPIO_3_15 IOMUX_PAD(0x000, 0x20c, 0x15, 0, 0, NO_PAD_CTRL) 483 - 484 - #define MX25_PAD_UPLL_BYPCLK__UPLL_BYPCLK IOMUX_PAD(0x000, 0x210, 0x10, 0, 0, NO_PAD_CTRL) 485 - #define MX25_PAD_UPLL_BYPCLK__GPIO_3_16 IOMUX_PAD(0x000, 0x210, 0x15, 0, 0, NO_PAD_CTRL) 486 - 487 - #define MX25_PAD_VSTBY_REQ__VSTBY_REQ IOMUX_PAD(0x408, 0x214, 0x10, 0, 0, NO_PAD_CTRL) 488 - #define MX25_PAD_VSTBY_REQ__AUD7_TXFS IOMUX_PAD(0x408, 0x214, 0x14, 0, 0, NO_PAD_CTRL) 489 - #define MX25_PAD_VSTBY_REQ__GPIO_3_17 IOMUX_PAD(0x408, 0x214, 0x15, 0, 0, NO_PAD_CTRL) 490 - #define MX25_PAD_VSTBY_ACK__VSTBY_ACK IOMUX_PAD(0x40c, 0x218, 0x10, 0, 0, NO_PAD_CTRL) 491 - #define MX25_PAD_VSTBY_ACK__GPIO_3_18 IOMUX_PAD(0x40c, 0x218, 0x15, 0, 0, NO_PAD_CTRL) 492 - 493 - #define MX25_PAD_POWER_FAIL__POWER_FAIL IOMUX_PAD(0x410, 0x21c, 0x10, 0, 0, NO_PAD_CTRL) 494 - #define MX25_PAD_POWER_FAIL__AUD7_RXD IOMUX_PAD(0x410, 0x21c, 0x14, 0x478, 1, NO_PAD_CTRL) 495 - #define MX25_PAD_POWER_FAIL__GPIO_3_19 IOMUX_PAD(0x410, 0x21c, 0x15, 0, 0, NO_PAD_CTRL) 496 - 497 - #define MX25_PAD_CLKO__CLKO IOMUX_PAD(0x414, 0x220, 0x10, 0, 0, NO_PAD_CTRL) 498 - #define MX25_PAD_CLKO__GPIO_2_21 IOMUX_PAD(0x414, 0x220, 0x15, 0, 0, NO_PAD_CTRL) 499 - 500 - #define MX25_PAD_BOOT_MODE0__BOOT_MODE0 IOMUX_PAD(0x000, 0x224, 0x00, 0, 0, NO_PAD_CTRL) 501 - #define MX25_PAD_BOOT_MODE0__GPIO_4_30 IOMUX_PAD(0x000, 0x224, 0x05, 0, 0, NO_PAD_CTRL) 502 - #define MX25_PAD_BOOT_MODE1__BOOT_MODE1 IOMUX_PAD(0x000, 0x228, 0x00, 0, 0, NO_PAD_CTRL) 503 - #define MX25_PAD_BOOT_MODE1__GPIO_4_31 IOMUX_PAD(0x000, 0x228, 0x05, 0, 0, NO_PAD_CTRL) 504 - 505 - #define MX25_PAD_CTL_GRP_DVS_MISC IOMUX_PAD(0x418, 0x000, 0, 0, 0, NO_PAD_CTRL) 506 - #define MX25_PAD_CTL_GRP_DSE_FEC IOMUX_PAD(0x41c, 0x000, 0, 0, 0, NO_PAD_CTRL) 507 - #define MX25_PAD_CTL_GRP_DVS_JTAG IOMUX_PAD(0x420, 0x000, 0, 0, 0, NO_PAD_CTRL) 508 - #define MX25_PAD_CTL_GRP_DSE_NFC IOMUX_PAD(0x424, 0x000, 0, 0, 0, NO_PAD_CTRL) 509 - #define MX25_PAD_CTL_GRP_DSE_CSI IOMUX_PAD(0x428, 0x000, 0, 0, 0, NO_PAD_CTRL) 510 - #define MX25_PAD_CTL_GRP_DSE_WEIM IOMUX_PAD(0x42c, 0x000, 0, 0, 0, NO_PAD_CTRL) 511 - #define MX25_PAD_CTL_GRP_DSE_DDR IOMUX_PAD(0x430, 0x000, 0, 0, 0, NO_PAD_CTRL) 512 - #define MX25_PAD_CTL_GRP_DVS_CRM IOMUX_PAD(0x434, 0x000, 0, 0, 0, NO_PAD_CTRL) 513 - #define MX25_PAD_CTL_GRP_DSE_KPP IOMUX_PAD(0x438, 0x000, 0, 0, 0, NO_PAD_CTRL) 514 - #define MX25_PAD_CTL_GRP_DSE_SDHC1 IOMUX_PAD(0x43c, 0x000, 0, 0, 0, NO_PAD_CTRL) 515 - #define MX25_PAD_CTL_GRP_DSE_LCD IOMUX_PAD(0x440, 0x000, 0, 0, 0, NO_PAD_CTRL) 516 - #define MX25_PAD_CTL_GRP_DSE_UART IOMUX_PAD(0x444, 0x000, 0, 0, 0, NO_PAD_CTRL) 517 - #define MX25_PAD_CTL_GRP_DVS_NFC IOMUX_PAD(0x448, 0x000, 0, 0, 0, NO_PAD_CTRL) 518 - #define MX25_PAD_CTL_GRP_DVS_CSI IOMUX_PAD(0x44c, 0x000, 0, 0, 0, NO_PAD_CTRL) 519 - #define MX25_PAD_CTL_GRP_DSE_CSPI1 IOMUX_PAD(0x450, 0x000, 0, 0, 0, NO_PAD_CTRL) 520 - #define MX25_PAD_CTL_GRP_DDRTYPE IOMUX_PAD(0x454, 0x000, 0, 0, 0, NO_PAD_CTRL) 521 - #define MX25_PAD_CTL_GRP_DVS_SDHC1 IOMUX_PAD(0x458, 0x000, 0, 0, 0, NO_PAD_CTRL) 522 - #define MX25_PAD_CTL_GRP_DVS_LCD IOMUX_PAD(0x45c, 0x000, 0, 0, 0, NO_PAD_CTRL) 523 - 524 - #endif /* __MACH_IOMUX_MX25_H__ */
+1 -1
arch/arm/mach-imx/iomux-mx3.h
··· 114 114 */ 115 115 int mxc_iomux_alloc_pin(unsigned int pin, const char *label); 116 116 /* 117 - * setups mutliple pins 117 + * setups multiple pins 118 118 * convenient way to call the above function with tables 119 119 */ 120 120 int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
+3 -2
arch/arm/mach-imx/iomux-v3.c
··· 56 56 return 0; 57 57 } 58 58 59 - int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count) 59 + int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list, 60 + unsigned count) 60 61 { 61 - iomux_v3_cfg_t *p = pad_list; 62 + const iomux_v3_cfg_t *p = pad_list; 62 63 int i; 63 64 int ret; 64 65
+3 -2
arch/arm/mach-imx/iomux-v3.h
··· 128 128 int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad); 129 129 130 130 /* 131 - * setups mutliple pads 131 + * setups multiple pads 132 132 * convenient way to call the above function with tables 133 133 */ 134 - int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count); 134 + int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list, 135 + unsigned count); 135 136 136 137 /* 137 138 * Initialise the iomux controller
+1 -1
arch/arm/mach-imx/mach-cpuimx35.c
··· 75 75 }, 76 76 }; 77 77 78 - static iomux_v3_cfg_t eukrea_cpuimx35_pads[] = { 78 + static const iomux_v3_cfg_t eukrea_cpuimx35_pads[] __initconst = { 79 79 /* UART1 */ 80 80 MX35_PAD_CTS1__UART1_CTS, 81 81 MX35_PAD_RTS1__UART1_RTS,
-172
arch/arm/mach-imx/mach-eukrea_cpuimx25.c
··· 1 - /* 2 - * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de> 3 - * Copyright 2010 Eric Bénard - Eukréa Electromatique, <eric@eukrea.com> 4 - * 5 - * This program is free software; you can redistribute it and/or 6 - * modify it under the terms of the GNU General Public License 7 - * as published by the Free Software Foundation; either version 2 8 - * of the License, or (at your option) any later version. 9 - * This program is distributed in the hope that it will be useful, 10 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 - * GNU General Public License for more details. 13 - * 14 - * You should have received a copy of the GNU General Public License 15 - * along with this program; if not, write to the Free Software 16 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 - * Boston, MA 02110-1301, USA. 18 - */ 19 - 20 - #include <linux/types.h> 21 - #include <linux/init.h> 22 - #include <linux/delay.h> 23 - #include <linux/clk.h> 24 - #include <linux/irq.h> 25 - #include <linux/gpio.h> 26 - #include <linux/platform_device.h> 27 - #include <linux/usb/otg.h> 28 - #include <linux/usb/ulpi.h> 29 - 30 - #include <asm/mach-types.h> 31 - #include <asm/mach/arch.h> 32 - #include <asm/mach/time.h> 33 - #include <asm/memory.h> 34 - #include <asm/mach/map.h> 35 - 36 - #include "common.h" 37 - #include "devices-imx25.h" 38 - #include "ehci.h" 39 - #include "eukrea-baseboards.h" 40 - #include "hardware.h" 41 - #include "iomux-mx25.h" 42 - #include "mx25.h" 43 - 44 - static const struct imxuart_platform_data uart_pdata __initconst = { 45 - .flags = IMXUART_HAVE_RTSCTS, 46 - }; 47 - 48 - static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = { 49 - /* FEC - RMII */ 50 - MX25_PAD_FEC_MDC__FEC_MDC, 51 - MX25_PAD_FEC_MDIO__FEC_MDIO, 52 - MX25_PAD_FEC_TDATA0__FEC_TDATA0, 53 - MX25_PAD_FEC_TDATA1__FEC_TDATA1, 54 - MX25_PAD_FEC_TX_EN__FEC_TX_EN, 55 - MX25_PAD_FEC_RDATA0__FEC_RDATA0, 56 - MX25_PAD_FEC_RDATA1__FEC_RDATA1, 57 - MX25_PAD_FEC_RX_DV__FEC_RX_DV, 58 - MX25_PAD_FEC_TX_CLK__FEC_TX_CLK, 59 - /* I2C1 */ 60 - MX25_PAD_I2C1_CLK__I2C1_CLK, 61 - MX25_PAD_I2C1_DAT__I2C1_DAT, 62 - }; 63 - 64 - static const struct fec_platform_data mx25_fec_pdata __initconst = { 65 - .phy = PHY_INTERFACE_MODE_RMII, 66 - }; 67 - 68 - static const struct mxc_nand_platform_data 69 - eukrea_cpuimx25_nand_board_info __initconst = { 70 - .width = 1, 71 - .hw_ecc = 1, 72 - .flash_bbt = 1, 73 - }; 74 - 75 - static const struct imxi2c_platform_data 76 - eukrea_cpuimx25_i2c0_data __initconst = { 77 - .bitrate = 100000, 78 - }; 79 - 80 - static struct i2c_board_info eukrea_cpuimx25_i2c_devices[] = { 81 - { 82 - I2C_BOARD_INFO("pcf8563", 0x51), 83 - }, 84 - }; 85 - 86 - static int eukrea_cpuimx25_otg_init(struct platform_device *pdev) 87 - { 88 - return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI); 89 - } 90 - 91 - static const struct mxc_usbh_platform_data otg_pdata __initconst = { 92 - .init = eukrea_cpuimx25_otg_init, 93 - .portsc = MXC_EHCI_MODE_UTMI, 94 - }; 95 - 96 - static int eukrea_cpuimx25_usbh2_init(struct platform_device *pdev) 97 - { 98 - return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI | 99 - MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN); 100 - } 101 - 102 - static const struct mxc_usbh_platform_data usbh2_pdata __initconst = { 103 - .init = eukrea_cpuimx25_usbh2_init, 104 - .portsc = MXC_EHCI_MODE_SERIAL, 105 - }; 106 - 107 - static const struct fsl_usb2_platform_data otg_device_pdata __initconst = { 108 - .operating_mode = FSL_USB2_DR_DEVICE, 109 - .phy_mode = FSL_USB2_PHY_UTMI, 110 - .workaround = FLS_USB2_WORKAROUND_ENGCM09152, 111 - }; 112 - 113 - static bool otg_mode_host __initdata; 114 - 115 - static int __init eukrea_cpuimx25_otg_mode(char *options) 116 - { 117 - if (!strcmp(options, "host")) 118 - otg_mode_host = true; 119 - else if (!strcmp(options, "device")) 120 - otg_mode_host = false; 121 - else 122 - pr_info("otg_mode neither \"host\" nor \"device\". " 123 - "Defaulting to device\n"); 124 - return 1; 125 - } 126 - __setup("otg_mode=", eukrea_cpuimx25_otg_mode); 127 - 128 - static void __init eukrea_cpuimx25_init(void) 129 - { 130 - imx25_soc_init(); 131 - 132 - if (mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads, 133 - ARRAY_SIZE(eukrea_cpuimx25_pads))) 134 - printk(KERN_ERR "error setting cpuimx25 pads !\n"); 135 - 136 - imx25_add_imx_uart0(&uart_pdata); 137 - imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info); 138 - imx25_add_imxdi_rtc(); 139 - imx25_add_fec(&mx25_fec_pdata); 140 - imx25_add_imx2_wdt(); 141 - 142 - i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices, 143 - ARRAY_SIZE(eukrea_cpuimx25_i2c_devices)); 144 - imx25_add_imx_i2c0(&eukrea_cpuimx25_i2c0_data); 145 - 146 - if (otg_mode_host) 147 - imx25_add_mxc_ehci_otg(&otg_pdata); 148 - else 149 - imx25_add_fsl_usb2_udc(&otg_device_pdata); 150 - 151 - imx25_add_mxc_ehci_hs(&usbh2_pdata); 152 - 153 - #ifdef CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD 154 - eukrea_mbimxsd25_baseboard_init(); 155 - #endif 156 - } 157 - 158 - static void __init eukrea_cpuimx25_timer_init(void) 159 - { 160 - mx25_clocks_init(); 161 - } 162 - 163 - MACHINE_START(EUKREA_CPUIMX25SD, "Eukrea CPUIMX25") 164 - /* Maintainer: Eukrea Electromatique */ 165 - .atag_offset = 0x100, 166 - .map_io = mx25_map_io, 167 - .init_early = imx25_init_early, 168 - .init_irq = mx25_init_irq, 169 - .init_time = eukrea_cpuimx25_timer_init, 170 - .init_machine = eukrea_cpuimx25_init, 171 - .restart = mxc_restart, 172 - MACHINE_END
+1 -1
arch/arm/mach-imx/mach-imx6q.c
··· 387 387 388 388 static void __init imx6q_init_irq(void) 389 389 { 390 + imx_gpc_check_dt(); 390 391 imx_init_revision_from_anatop(); 391 392 imx_init_l2cache(); 392 393 imx_src_init(); 393 - imx_gpc_init(); 394 394 irqchip_init(); 395 395 } 396 396
+1 -1
arch/arm/mach-imx/mach-imx6sl.c
··· 61 61 62 62 static void __init imx6sl_init_irq(void) 63 63 { 64 + imx_gpc_check_dt(); 64 65 imx_init_revision_from_anatop(); 65 66 imx_init_l2cache(); 66 67 imx_src_init(); 67 - imx_gpc_init(); 68 68 irqchip_init(); 69 69 } 70 70
+1 -1
arch/arm/mach-imx/mach-imx6sx.c
··· 81 81 82 82 static void __init imx6sx_init_irq(void) 83 83 { 84 + imx_gpc_check_dt(); 84 85 imx_init_revision_from_anatop(); 85 86 imx_init_l2cache(); 86 87 imx_src_init(); 87 - imx_gpc_init(); 88 88 irqchip_init(); 89 89 } 90 90
-270
arch/arm/mach-imx/mach-mx25_3ds.c
··· 1 - /* 2 - * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de> 3 - * 4 - * This program is free software; you can redistribute it and/or 5 - * modify it under the terms of the GNU General Public License 6 - * as published by the Free Software Foundation; either version 2 7 - * of the License, or (at your option) any later version. 8 - * This program is distributed in the hope that it will be useful, 9 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 - * GNU General Public License for more details. 12 - * 13 - * You should have received a copy of the GNU General Public License 14 - * along with this program; if not, write to the Free Software 15 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 - * Boston, MA 02110-1301, USA. 17 - */ 18 - 19 - /* 20 - * This machine is known as: 21 - * - i.MX25 3-Stack Development System 22 - * - i.MX25 Platform Development Kit (i.MX25 PDK) 23 - */ 24 - 25 - #include <linux/types.h> 26 - #include <linux/init.h> 27 - #include <linux/delay.h> 28 - #include <linux/clk.h> 29 - #include <linux/irq.h> 30 - #include <linux/gpio.h> 31 - #include <linux/platform_device.h> 32 - #include <linux/usb/otg.h> 33 - 34 - #include <asm/mach-types.h> 35 - #include <asm/mach/arch.h> 36 - #include <asm/mach/time.h> 37 - #include <asm/memory.h> 38 - #include <asm/mach/map.h> 39 - 40 - #include "common.h" 41 - #include "devices-imx25.h" 42 - #include "ehci.h" 43 - #include "hardware.h" 44 - #include "iomux-mx25.h" 45 - #include "mx25.h" 46 - 47 - #define MX25PDK_CAN_PWDN IMX_GPIO_NR(4, 6) 48 - 49 - static const struct imxuart_platform_data uart_pdata __initconst = { 50 - .flags = IMXUART_HAVE_RTSCTS, 51 - }; 52 - 53 - static iomux_v3_cfg_t mx25pdk_pads[] = { 54 - MX25_PAD_FEC_MDC__FEC_MDC, 55 - MX25_PAD_FEC_MDIO__FEC_MDIO, 56 - MX25_PAD_FEC_TDATA0__FEC_TDATA0, 57 - MX25_PAD_FEC_TDATA1__FEC_TDATA1, 58 - MX25_PAD_FEC_TX_EN__FEC_TX_EN, 59 - MX25_PAD_FEC_RDATA0__FEC_RDATA0, 60 - MX25_PAD_FEC_RDATA1__FEC_RDATA1, 61 - MX25_PAD_FEC_RX_DV__FEC_RX_DV, 62 - MX25_PAD_FEC_TX_CLK__FEC_TX_CLK, 63 - MX25_PAD_A17__GPIO_2_3, /* FEC_EN, GPIO 35 */ 64 - MX25_PAD_D12__GPIO_4_8, /* FEC_RESET_B, GPIO 104 */ 65 - 66 - /* LCD */ 67 - MX25_PAD_LD0__LD0, 68 - MX25_PAD_LD1__LD1, 69 - MX25_PAD_LD2__LD2, 70 - MX25_PAD_LD3__LD3, 71 - MX25_PAD_LD4__LD4, 72 - MX25_PAD_LD5__LD5, 73 - MX25_PAD_LD6__LD6, 74 - MX25_PAD_LD7__LD7, 75 - MX25_PAD_LD8__LD8, 76 - MX25_PAD_LD9__LD9, 77 - MX25_PAD_LD10__LD10, 78 - MX25_PAD_LD11__LD11, 79 - MX25_PAD_LD12__LD12, 80 - MX25_PAD_LD13__LD13, 81 - MX25_PAD_LD14__LD14, 82 - MX25_PAD_LD15__LD15, 83 - MX25_PAD_GPIO_E__LD16, 84 - MX25_PAD_GPIO_F__LD17, 85 - MX25_PAD_HSYNC__HSYNC, 86 - MX25_PAD_VSYNC__VSYNC, 87 - MX25_PAD_LSCLK__LSCLK, 88 - MX25_PAD_OE_ACD__OE_ACD, 89 - MX25_PAD_CONTRAST__CONTRAST, 90 - 91 - /* Keypad */ 92 - MX25_PAD_KPP_ROW0__KPP_ROW0, 93 - MX25_PAD_KPP_ROW1__KPP_ROW1, 94 - MX25_PAD_KPP_ROW2__KPP_ROW2, 95 - MX25_PAD_KPP_ROW3__KPP_ROW3, 96 - MX25_PAD_KPP_COL0__KPP_COL0, 97 - MX25_PAD_KPP_COL1__KPP_COL1, 98 - MX25_PAD_KPP_COL2__KPP_COL2, 99 - MX25_PAD_KPP_COL3__KPP_COL3, 100 - 101 - /* SD1 */ 102 - MX25_PAD_SD1_CMD__SD1_CMD, 103 - MX25_PAD_SD1_CLK__SD1_CLK, 104 - MX25_PAD_SD1_DATA0__SD1_DATA0, 105 - MX25_PAD_SD1_DATA1__SD1_DATA1, 106 - MX25_PAD_SD1_DATA2__SD1_DATA2, 107 - MX25_PAD_SD1_DATA3__SD1_DATA3, 108 - MX25_PAD_A14__GPIO_2_0, /* WriteProtect */ 109 - MX25_PAD_A15__GPIO_2_1, /* CardDetect */ 110 - 111 - /* I2C1 */ 112 - MX25_PAD_I2C1_CLK__I2C1_CLK, 113 - MX25_PAD_I2C1_DAT__I2C1_DAT, 114 - 115 - /* CAN1 */ 116 - MX25_PAD_GPIO_A__CAN1_TX, 117 - MX25_PAD_GPIO_B__CAN1_RX, 118 - MX25_PAD_D14__GPIO_4_6, /* CAN_PWDN */ 119 - }; 120 - 121 - static const struct fec_platform_data mx25_fec_pdata __initconst = { 122 - .phy = PHY_INTERFACE_MODE_RMII, 123 - }; 124 - 125 - #define FEC_ENABLE_GPIO IMX_GPIO_NR(2, 3) 126 - #define FEC_RESET_B_GPIO IMX_GPIO_NR(4, 8) 127 - 128 - static void __init mx25pdk_fec_reset(void) 129 - { 130 - gpio_request(FEC_ENABLE_GPIO, "FEC PHY enable"); 131 - gpio_request(FEC_RESET_B_GPIO, "FEC PHY reset"); 132 - 133 - gpio_direction_output(FEC_ENABLE_GPIO, 0); /* drop PHY power */ 134 - gpio_direction_output(FEC_RESET_B_GPIO, 0); /* assert reset */ 135 - udelay(2); 136 - 137 - /* turn on PHY power and lift reset */ 138 - gpio_set_value(FEC_ENABLE_GPIO, 1); 139 - gpio_set_value(FEC_RESET_B_GPIO, 1); 140 - } 141 - 142 - static const struct mxc_nand_platform_data 143 - mx25pdk_nand_board_info __initconst = { 144 - .width = 1, 145 - .hw_ecc = 1, 146 - .flash_bbt = 1, 147 - }; 148 - 149 - static struct imx_fb_videomode mx25pdk_modes[] = { 150 - { 151 - .mode = { 152 - .name = "CRT-VGA", 153 - .refresh = 60, 154 - .xres = 640, 155 - .yres = 480, 156 - .pixclock = 39683, 157 - .left_margin = 45, 158 - .right_margin = 114, 159 - .upper_margin = 33, 160 - .lower_margin = 11, 161 - .hsync_len = 1, 162 - .vsync_len = 1, 163 - }, 164 - .bpp = 16, 165 - .pcr = 0xFA208B80, 166 - }, 167 - }; 168 - 169 - static const struct imx_fb_platform_data mx25pdk_fb_pdata __initconst = { 170 - .mode = mx25pdk_modes, 171 - .num_modes = ARRAY_SIZE(mx25pdk_modes), 172 - .pwmr = 0x00A903FF, 173 - .lscr1 = 0x00120300, 174 - .dmacr = 0x00020010, 175 - }; 176 - 177 - static const uint32_t mx25pdk_keymap[] = { 178 - KEY(0, 0, KEY_UP), 179 - KEY(0, 1, KEY_DOWN), 180 - KEY(0, 2, KEY_VOLUMEDOWN), 181 - KEY(0, 3, KEY_HOME), 182 - KEY(1, 0, KEY_RIGHT), 183 - KEY(1, 1, KEY_LEFT), 184 - KEY(1, 2, KEY_ENTER), 185 - KEY(1, 3, KEY_VOLUMEUP), 186 - KEY(2, 0, KEY_F6), 187 - KEY(2, 1, KEY_F8), 188 - KEY(2, 2, KEY_F9), 189 - KEY(2, 3, KEY_F10), 190 - KEY(3, 0, KEY_F1), 191 - KEY(3, 1, KEY_F2), 192 - KEY(3, 2, KEY_F3), 193 - KEY(3, 3, KEY_POWER), 194 - }; 195 - 196 - static const struct matrix_keymap_data mx25pdk_keymap_data __initconst = { 197 - .keymap = mx25pdk_keymap, 198 - .keymap_size = ARRAY_SIZE(mx25pdk_keymap), 199 - }; 200 - 201 - static int mx25pdk_usbh2_init(struct platform_device *pdev) 202 - { 203 - return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY); 204 - } 205 - 206 - static const struct mxc_usbh_platform_data usbh2_pdata __initconst = { 207 - .init = mx25pdk_usbh2_init, 208 - .portsc = MXC_EHCI_MODE_SERIAL, 209 - }; 210 - 211 - static const struct fsl_usb2_platform_data otg_device_pdata __initconst = { 212 - .operating_mode = FSL_USB2_DR_DEVICE, 213 - .phy_mode = FSL_USB2_PHY_UTMI, 214 - }; 215 - 216 - static const struct imxi2c_platform_data mx25_3ds_i2c0_data __initconst = { 217 - .bitrate = 100000, 218 - }; 219 - 220 - #define SD1_GPIO_WP IMX_GPIO_NR(2, 0) 221 - #define SD1_GPIO_CD IMX_GPIO_NR(2, 1) 222 - 223 - static const struct esdhc_platform_data mx25pdk_esdhc_pdata __initconst = { 224 - .wp_gpio = SD1_GPIO_WP, 225 - .cd_gpio = SD1_GPIO_CD, 226 - .wp_type = ESDHC_WP_GPIO, 227 - .cd_type = ESDHC_CD_GPIO, 228 - }; 229 - 230 - static void __init mx25pdk_init(void) 231 - { 232 - imx25_soc_init(); 233 - 234 - mxc_iomux_v3_setup_multiple_pads(mx25pdk_pads, 235 - ARRAY_SIZE(mx25pdk_pads)); 236 - 237 - imx25_add_imx_uart0(&uart_pdata); 238 - imx25_add_fsl_usb2_udc(&otg_device_pdata); 239 - imx25_add_mxc_ehci_hs(&usbh2_pdata); 240 - imx25_add_mxc_nand(&mx25pdk_nand_board_info); 241 - imx25_add_imxdi_rtc(); 242 - imx25_add_imx_fb(&mx25pdk_fb_pdata); 243 - imx25_add_imx2_wdt(); 244 - 245 - mx25pdk_fec_reset(); 246 - imx25_add_fec(&mx25_fec_pdata); 247 - imx25_add_imx_keypad(&mx25pdk_keymap_data); 248 - 249 - imx25_add_sdhci_esdhc_imx(0, &mx25pdk_esdhc_pdata); 250 - imx25_add_imx_i2c0(&mx25_3ds_i2c0_data); 251 - 252 - gpio_request_one(MX25PDK_CAN_PWDN, GPIOF_OUT_INIT_LOW, "can-pwdn"); 253 - imx25_add_flexcan0(); 254 - } 255 - 256 - static void __init mx25pdk_timer_init(void) 257 - { 258 - mx25_clocks_init(); 259 - } 260 - 261 - MACHINE_START(MX25_3DS, "Freescale MX25PDK (3DS)") 262 - /* Maintainer: Freescale Semiconductor, Inc. */ 263 - .atag_offset = 0x100, 264 - .map_io = mx25_map_io, 265 - .init_early = imx25_init_early, 266 - .init_irq = mx25_init_irq, 267 - .init_time = mx25pdk_timer_init, 268 - .init_machine = mx25pdk_init, 269 - .restart = mxc_restart, 270 - MACHINE_END
+1 -1
arch/arm/mach-imx/mach-mx35_3ds.c
··· 166 166 &mx35pdk_flash, 167 167 }; 168 168 169 - static iomux_v3_cfg_t mx35pdk_pads[] = { 169 + static const iomux_v3_cfg_t mx35pdk_pads[] __initconst = { 170 170 /* UART1 */ 171 171 MX35_PAD_CTS1__UART1_CTS, 172 172 MX35_PAD_RTS1__UART1_RTS,
+1 -1
arch/arm/mach-imx/mach-pcm043.c
··· 129 129 &pcm043_flash, 130 130 }; 131 131 132 - static iomux_v3_cfg_t pcm043_pads[] = { 132 + static const iomux_v3_cfg_t pcm043_pads[] __initconst = { 133 133 /* UART1 */ 134 134 MX35_PAD_CTS1__UART1_CTS, 135 135 MX35_PAD_RTS1__UART1_RTS,
+1 -1
arch/arm/mach-imx/mach-vpr200.c
··· 161 161 } 162 162 }; 163 163 164 - static iomux_v3_cfg_t vpr200_pads[] = { 164 + static const iomux_v3_cfg_t vpr200_pads[] __initconst = { 165 165 /* UART1 */ 166 166 MX35_PAD_TXD1__UART1_TXD_MUX, 167 167 MX35_PAD_RXD1__UART1_RXD_MUX,
-89
arch/arm/mach-imx/mm-imx25.c
··· 1 - /* 2 - * Copyright (C) 1999,2000 Arm Limited 3 - * Copyright (C) 2000 Deep Blue Solutions Ltd 4 - * Copyright (C) 2002 Shane Nay (shane@minirl.com) 5 - * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. 6 - * - add MX31 specific definitions 7 - * 8 - * This program is free software; you can redistribute it and/or modify 9 - * it under the terms of the GNU General Public License as published by 10 - * the Free Software Foundation; either version 2 of the License, or 11 - * (at your option) any later version. 12 - * 13 - * This program is distributed in the hope that it will be useful, 14 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 - * GNU General Public License for more details. 17 - */ 18 - 19 - #include <linux/mm.h> 20 - #include <linux/init.h> 21 - #include <linux/err.h> 22 - #include <linux/pinctrl/machine.h> 23 - 24 - #include <asm/pgtable.h> 25 - #include <asm/mach/map.h> 26 - 27 - #include "common.h" 28 - #include "devices/devices-common.h" 29 - #include "hardware.h" 30 - #include "iomux-v3.h" 31 - #include "mx25.h" 32 - 33 - /* 34 - * This table defines static virtual address mappings for I/O regions. 35 - * These are the mappings common across all MX25 boards. 36 - */ 37 - static struct map_desc mx25_io_desc[] __initdata = { 38 - imx_map_entry(MX25, AVIC, MT_DEVICE_NONSHARED), 39 - imx_map_entry(MX25, AIPS1, MT_DEVICE_NONSHARED), 40 - imx_map_entry(MX25, AIPS2, MT_DEVICE_NONSHARED), 41 - }; 42 - 43 - /* 44 - * This function initializes the memory map. It is called during the 45 - * system startup to create static physical to virtual memory mappings 46 - * for the IO modules. 47 - */ 48 - void __init mx25_map_io(void) 49 - { 50 - iotable_init(mx25_io_desc, ARRAY_SIZE(mx25_io_desc)); 51 - } 52 - 53 - void __init imx25_init_early(void) 54 - { 55 - mxc_set_cpu_type(MXC_CPU_MX25); 56 - mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR)); 57 - } 58 - 59 - void __init mx25_init_irq(void) 60 - { 61 - mxc_init_irq(MX25_IO_ADDRESS(MX25_AVIC_BASE_ADDR)); 62 - } 63 - 64 - static struct sdma_platform_data imx25_sdma_pdata __initdata = { 65 - .fw_name = "sdma-imx25.bin", 66 - }; 67 - 68 - static const struct resource imx25_audmux_res[] __initconst = { 69 - DEFINE_RES_MEM(MX25_AUDMUX_BASE_ADDR, SZ_16K), 70 - }; 71 - 72 - void __init imx25_soc_init(void) 73 - { 74 - mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR)); 75 - mxc_device_init(); 76 - 77 - /* i.mx25 has the i.mx35 type gpio */ 78 - mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0); 79 - mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0); 80 - mxc_register_gpio("imx35-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0); 81 - mxc_register_gpio("imx35-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0); 82 - 83 - pinctrl_provide_dummies(); 84 - /* i.mx25 has the i.mx35 type sdma */ 85 - imx_add_imx_sdma("imx35-sdma", MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata); 86 - /* i.mx25 has the i.mx31 type audmux */ 87 - platform_device_register_simple("imx31-audmux", 0, imx25_audmux_res, 88 - ARRAY_SIZE(imx25_audmux_res)); 89 - }
-117
arch/arm/mach-imx/mx25.h
··· 1 - #ifndef __MACH_MX25_H__ 2 - #define __MACH_MX25_H__ 3 - 4 - #define MX25_AIPS1_BASE_ADDR 0x43f00000 5 - #define MX25_AIPS1_SIZE SZ_1M 6 - #define MX25_AIPS2_BASE_ADDR 0x53f00000 7 - #define MX25_AIPS2_SIZE SZ_1M 8 - #define MX25_AVIC_BASE_ADDR 0x68000000 9 - #define MX25_AVIC_SIZE SZ_1M 10 - 11 - #define MX25_I2C1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x80000) 12 - #define MX25_I2C3_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x84000) 13 - #define MX25_CAN1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x88000) 14 - #define MX25_CAN2_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x8c000) 15 - #define MX25_I2C2_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x98000) 16 - #define MX25_CSPI1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0xa4000) 17 - #define MX25_IOMUXC_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0xac000) 18 - 19 - #define MX25_CRM_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x80000) 20 - #define MX25_GPT1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x90000) 21 - #define MX25_GPIO4_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x9c000) 22 - #define MX25_PWM2_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa0000) 23 - #define MX25_GPIO3_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa4000) 24 - #define MX25_PWM3_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa8000) 25 - #define MX25_PWM4_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xc8000) 26 - #define MX25_GPIO1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xcc000) 27 - #define MX25_GPIO2_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xd0000) 28 - #define MX25_WDOG_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xdc000) 29 - #define MX25_PWM1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xe0000) 30 - 31 - #define MX25_UART1_BASE_ADDR 0x43f90000 32 - #define MX25_UART2_BASE_ADDR 0x43f94000 33 - #define MX25_AUDMUX_BASE_ADDR 0x43fb0000 34 - #define MX25_UART3_BASE_ADDR 0x5000c000 35 - #define MX25_UART4_BASE_ADDR 0x50008000 36 - #define MX25_UART5_BASE_ADDR 0x5002c000 37 - 38 - #define MX25_CSPI3_BASE_ADDR 0x50004000 39 - #define MX25_CSPI2_BASE_ADDR 0x50010000 40 - #define MX25_FEC_BASE_ADDR 0x50038000 41 - #define MX25_SSI2_BASE_ADDR 0x50014000 42 - #define MX25_SSI1_BASE_ADDR 0x50034000 43 - #define MX25_NFC_BASE_ADDR 0xbb000000 44 - #define MX25_IIM_BASE_ADDR 0x53ff0000 45 - #define MX25_DRYICE_BASE_ADDR 0x53ffc000 46 - #define MX25_ESDHC1_BASE_ADDR 0x53fb4000 47 - #define MX25_ESDHC2_BASE_ADDR 0x53fb8000 48 - #define MX25_LCDC_BASE_ADDR 0x53fbc000 49 - #define MX25_KPP_BASE_ADDR 0x43fa8000 50 - #define MX25_SDMA_BASE_ADDR 0x53fd4000 51 - #define MX25_USB_BASE_ADDR 0x53ff4000 52 - #define MX25_USB_OTG_BASE_ADDR (MX25_USB_BASE_ADDR + 0x0000) 53 - /* 54 - * The reference manual (IMX25RM, Rev. 1, 06/2009) specifies an offset of 0x200 55 - * for the host controller. Early documentation drafts specified 0x400 and 56 - * Freescale internal sources confirm only the latter value to work. 57 - */ 58 - #define MX25_USB_HS_BASE_ADDR (MX25_USB_BASE_ADDR + 0x0400) 59 - #define MX25_CSI_BASE_ADDR 0x53ff8000 60 - 61 - #define MX25_IO_P2V(x) IMX_IO_P2V(x) 62 - #define MX25_IO_ADDRESS(x) IOMEM(MX25_IO_P2V(x)) 63 - 64 - /* 65 - * Interrupt numbers 66 - */ 67 - #include <asm/irq.h> 68 - #define MX25_INT_CSPI3 (NR_IRQS_LEGACY + 0) 69 - #define MX25_INT_I2C1 (NR_IRQS_LEGACY + 3) 70 - #define MX25_INT_I2C2 (NR_IRQS_LEGACY + 4) 71 - #define MX25_INT_UART4 (NR_IRQS_LEGACY + 5) 72 - #define MX25_INT_ESDHC2 (NR_IRQS_LEGACY + 8) 73 - #define MX25_INT_ESDHC1 (NR_IRQS_LEGACY + 9) 74 - #define MX25_INT_I2C3 (NR_IRQS_LEGACY + 10) 75 - #define MX25_INT_SSI2 (NR_IRQS_LEGACY + 11) 76 - #define MX25_INT_SSI1 (NR_IRQS_LEGACY + 12) 77 - #define MX25_INT_CSPI2 (NR_IRQS_LEGACY + 13) 78 - #define MX25_INT_CSPI1 (NR_IRQS_LEGACY + 14) 79 - #define MX25_INT_GPIO3 (NR_IRQS_LEGACY + 16) 80 - #define MX25_INT_CSI (NR_IRQS_LEGACY + 17) 81 - #define MX25_INT_UART3 (NR_IRQS_LEGACY + 18) 82 - #define MX25_INT_GPIO4 (NR_IRQS_LEGACY + 23) 83 - #define MX25_INT_KPP (NR_IRQS_LEGACY + 24) 84 - #define MX25_INT_DRYICE (NR_IRQS_LEGACY + 25) 85 - #define MX25_INT_PWM1 (NR_IRQS_LEGACY + 26) 86 - #define MX25_INT_UART2 (NR_IRQS_LEGACY + 32) 87 - #define MX25_INT_NFC (NR_IRQS_LEGACY + 33) 88 - #define MX25_INT_SDMA (NR_IRQS_LEGACY + 34) 89 - #define MX25_INT_USB_HS (NR_IRQS_LEGACY + 35) 90 - #define MX25_INT_PWM2 (NR_IRQS_LEGACY + 36) 91 - #define MX25_INT_USB_OTG (NR_IRQS_LEGACY + 37) 92 - #define MX25_INT_LCDC (NR_IRQS_LEGACY + 39) 93 - #define MX25_INT_UART5 (NR_IRQS_LEGACY + 40) 94 - #define MX25_INT_PWM3 (NR_IRQS_LEGACY + 41) 95 - #define MX25_INT_PWM4 (NR_IRQS_LEGACY + 42) 96 - #define MX25_INT_CAN1 (NR_IRQS_LEGACY + 43) 97 - #define MX25_INT_CAN2 (NR_IRQS_LEGACY + 44) 98 - #define MX25_INT_UART1 (NR_IRQS_LEGACY + 45) 99 - #define MX25_INT_GPIO2 (NR_IRQS_LEGACY + 51) 100 - #define MX25_INT_GPIO1 (NR_IRQS_LEGACY + 52) 101 - #define MX25_INT_GPT1 (NR_IRQS_LEGACY + 54) 102 - #define MX25_INT_FEC (NR_IRQS_LEGACY + 57) 103 - 104 - #define MX25_DMA_REQ_SSI2_RX1 22 105 - #define MX25_DMA_REQ_SSI2_TX1 23 106 - #define MX25_DMA_REQ_SSI2_RX0 24 107 - #define MX25_DMA_REQ_SSI2_TX0 25 108 - #define MX25_DMA_REQ_SSI1_RX1 26 109 - #define MX25_DMA_REQ_SSI1_TX1 27 110 - #define MX25_DMA_REQ_SSI1_RX0 28 111 - #define MX25_DMA_REQ_SSI1_TX0 29 112 - 113 - #ifndef __ASSEMBLY__ 114 - extern int mx25_revision(void); 115 - #endif 116 - 117 - #endif /* ifndef __MACH_MX25_H__ */
+4 -2
arch/arm/mach-imx/pm-imx6.c
··· 310 310 * Low-Power mode. 311 311 * 3) Software should mask IRQ #32 right after CCM Low-Power mode 312 312 * is set (set bits 0-1 of CCM_CLPCR). 313 + * 314 + * Note that IRQ #32 is GIC SPI #0. 313 315 */ 314 - imx_gpc_hwirq_unmask(32); 316 + imx_gpc_hwirq_unmask(0); 315 317 writel_relaxed(val, ccm_base + CLPCR); 316 - imx_gpc_hwirq_mask(32); 318 + imx_gpc_hwirq_mask(0); 317 319 318 320 return 0; 319 321 }
+7 -6
drivers/bus/imx-weim.c
··· 142 142 &pdev->dev); 143 143 const struct imx_weim_devtype *devtype = of_id->data; 144 144 struct device_node *child; 145 - int ret; 145 + int ret, have_child = 0; 146 146 147 147 if (devtype == &imx50_weim_devtype) { 148 148 ret = imx_weim_gpr_setup(pdev); ··· 155 155 continue; 156 156 157 157 ret = weim_timing_setup(child, base, devtype); 158 - if (ret) { 159 - dev_err(&pdev->dev, "%s set timing failed.\n", 158 + if (ret) 159 + dev_warn(&pdev->dev, "%s set timing failed.\n", 160 160 child->full_name); 161 - return ret; 162 - } 161 + else 162 + have_child = 1; 163 163 } 164 164 165 - ret = of_platform_populate(pdev->dev.of_node, 165 + if (have_child) 166 + ret = of_platform_populate(pdev->dev.of_node, 166 167 of_default_bus_match_table, 167 168 NULL, &pdev->dev); 168 169 if (ret)
+1
drivers/irqchip/Makefile
··· 37 37 obj-$(CONFIG_XTENSA) += irq-xtensa-pic.o 38 38 obj-$(CONFIG_XTENSA_MX) += irq-xtensa-mx.o 39 39 obj-$(CONFIG_IRQ_CROSSBAR) += irq-crossbar.o 40 + obj-$(CONFIG_SOC_VF610) += irq-vf610-mscm-ir.o 40 41 obj-$(CONFIG_BCM7120_L2_IRQ) += irq-bcm7120-l2.o 41 42 obj-$(CONFIG_BRCMSTB_L2_IRQ) += irq-brcmstb-l2.o 42 43 obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o
+212
drivers/irqchip/irq-vf610-mscm-ir.c
··· 1 + /* 2 + * Copyright (C) 2014-2015 Toradex AG 3 + * Author: Stefan Agner <stefan@agner.ch> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License version 2 as 7 + * published by the Free Software Foundation. 8 + * 9 + * 10 + * IRQ chip driver for MSCM interrupt router available on Vybrid SoC's. 11 + * The interrupt router is between the CPU's interrupt controller and the 12 + * peripheral. The router allows to route the peripheral interrupts to 13 + * one of the two available CPU's on Vybrid VF6xx SoC's (Cortex-A5 or 14 + * Cortex-M4). The router will be configured transparently on a IRQ 15 + * request. 16 + * 17 + * o All peripheral interrupts of the Vybrid SoC can be routed to 18 + * CPU 0, CPU 1 or both. The routing is useful for dual-core 19 + * variants of Vybrid SoC such as VF6xx. This driver routes the 20 + * requested interrupt to the CPU currently running on. 21 + * 22 + * o It is required to setup the interrupt router even on single-core 23 + * variants of Vybrid. 24 + */ 25 + 26 + #include <linux/cpu_pm.h> 27 + #include <linux/io.h> 28 + #include <linux/irq.h> 29 + #include <linux/irqdomain.h> 30 + #include <linux/mfd/syscon.h> 31 + #include <dt-bindings/interrupt-controller/arm-gic.h> 32 + #include <linux/of.h> 33 + #include <linux/of_address.h> 34 + #include <linux/slab.h> 35 + #include <linux/regmap.h> 36 + 37 + #include "irqchip.h" 38 + 39 + #define MSCM_CPxNUM 0x4 40 + 41 + #define MSCM_IRSPRC(n) (0x80 + 2 * (n)) 42 + #define MSCM_IRSPRC_CPEN_MASK 0x3 43 + 44 + #define MSCM_IRSPRC_NUM 112 45 + 46 + struct vf610_mscm_ir_chip_data { 47 + void __iomem *mscm_ir_base; 48 + u16 cpu_mask; 49 + u16 saved_irsprc[MSCM_IRSPRC_NUM]; 50 + }; 51 + 52 + static struct vf610_mscm_ir_chip_data *mscm_ir_data; 53 + 54 + static inline void vf610_mscm_ir_save(struct vf610_mscm_ir_chip_data *data) 55 + { 56 + int i; 57 + 58 + for (i = 0; i < MSCM_IRSPRC_NUM; i++) 59 + data->saved_irsprc[i] = readw_relaxed(data->mscm_ir_base + MSCM_IRSPRC(i)); 60 + } 61 + 62 + static inline void vf610_mscm_ir_restore(struct vf610_mscm_ir_chip_data *data) 63 + { 64 + int i; 65 + 66 + for (i = 0; i < MSCM_IRSPRC_NUM; i++) 67 + writew_relaxed(data->saved_irsprc[i], data->mscm_ir_base + MSCM_IRSPRC(i)); 68 + } 69 + 70 + static int vf610_mscm_ir_notifier(struct notifier_block *self, 71 + unsigned long cmd, void *v) 72 + { 73 + switch (cmd) { 74 + case CPU_CLUSTER_PM_ENTER: 75 + vf610_mscm_ir_save(mscm_ir_data); 76 + break; 77 + case CPU_CLUSTER_PM_ENTER_FAILED: 78 + case CPU_CLUSTER_PM_EXIT: 79 + vf610_mscm_ir_restore(mscm_ir_data); 80 + break; 81 + } 82 + 83 + return NOTIFY_OK; 84 + } 85 + 86 + static struct notifier_block mscm_ir_notifier_block = { 87 + .notifier_call = vf610_mscm_ir_notifier, 88 + }; 89 + 90 + static void vf610_mscm_ir_enable(struct irq_data *data) 91 + { 92 + irq_hw_number_t hwirq = data->hwirq; 93 + struct vf610_mscm_ir_chip_data *chip_data = data->chip_data; 94 + u16 irsprc; 95 + 96 + irsprc = readw_relaxed(chip_data->mscm_ir_base + MSCM_IRSPRC(hwirq)); 97 + irsprc &= MSCM_IRSPRC_CPEN_MASK; 98 + 99 + WARN_ON(irsprc & ~chip_data->cpu_mask); 100 + 101 + writew_relaxed(chip_data->cpu_mask, 102 + chip_data->mscm_ir_base + MSCM_IRSPRC(hwirq)); 103 + 104 + irq_chip_unmask_parent(data); 105 + } 106 + 107 + static void vf610_mscm_ir_disable(struct irq_data *data) 108 + { 109 + irq_hw_number_t hwirq = data->hwirq; 110 + struct vf610_mscm_ir_chip_data *chip_data = data->chip_data; 111 + 112 + writew_relaxed(0x0, chip_data->mscm_ir_base + MSCM_IRSPRC(hwirq)); 113 + 114 + irq_chip_mask_parent(data); 115 + } 116 + 117 + static struct irq_chip vf610_mscm_ir_irq_chip = { 118 + .name = "mscm-ir", 119 + .irq_mask = irq_chip_mask_parent, 120 + .irq_unmask = irq_chip_unmask_parent, 121 + .irq_eoi = irq_chip_eoi_parent, 122 + .irq_enable = vf610_mscm_ir_enable, 123 + .irq_disable = vf610_mscm_ir_disable, 124 + .irq_retrigger = irq_chip_retrigger_hierarchy, 125 + .irq_set_affinity = irq_chip_set_affinity_parent, 126 + }; 127 + 128 + static int vf610_mscm_ir_domain_alloc(struct irq_domain *domain, unsigned int virq, 129 + unsigned int nr_irqs, void *arg) 130 + { 131 + int i; 132 + irq_hw_number_t hwirq; 133 + struct of_phandle_args *irq_data = arg; 134 + struct of_phandle_args gic_data; 135 + 136 + if (irq_data->args_count != 2) 137 + return -EINVAL; 138 + 139 + hwirq = irq_data->args[0]; 140 + for (i = 0; i < nr_irqs; i++) 141 + irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i, 142 + &vf610_mscm_ir_irq_chip, 143 + domain->host_data); 144 + 145 + gic_data.np = domain->parent->of_node; 146 + gic_data.args_count = 3; 147 + gic_data.args[0] = GIC_SPI; 148 + gic_data.args[1] = irq_data->args[0]; 149 + gic_data.args[2] = irq_data->args[1]; 150 + return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &gic_data); 151 + } 152 + 153 + static const struct irq_domain_ops mscm_irq_domain_ops = { 154 + .xlate = irq_domain_xlate_twocell, 155 + .alloc = vf610_mscm_ir_domain_alloc, 156 + .free = irq_domain_free_irqs_common, 157 + }; 158 + 159 + static int __init vf610_mscm_ir_of_init(struct device_node *node, 160 + struct device_node *parent) 161 + { 162 + struct irq_domain *domain, *domain_parent; 163 + struct regmap *mscm_cp_regmap; 164 + int ret, cpuid; 165 + 166 + domain_parent = irq_find_host(parent); 167 + if (!domain_parent) { 168 + pr_err("vf610_mscm_ir: interrupt-parent not found\n"); 169 + return -EINVAL; 170 + } 171 + 172 + mscm_ir_data = kzalloc(sizeof(*mscm_ir_data), GFP_KERNEL); 173 + if (!mscm_ir_data) 174 + return -ENOMEM; 175 + 176 + mscm_ir_data->mscm_ir_base = of_io_request_and_map(node, 0, "mscm-ir"); 177 + 178 + if (!mscm_ir_data->mscm_ir_base) { 179 + pr_err("vf610_mscm_ir: unable to map mscm register\n"); 180 + ret = -ENOMEM; 181 + goto out_free; 182 + } 183 + 184 + mscm_cp_regmap = syscon_regmap_lookup_by_phandle(node, "fsl,cpucfg"); 185 + if (IS_ERR(mscm_cp_regmap)) { 186 + ret = PTR_ERR(mscm_cp_regmap); 187 + pr_err("vf610_mscm_ir: regmap lookup for cpucfg failed\n"); 188 + goto out_unmap; 189 + } 190 + 191 + regmap_read(mscm_cp_regmap, MSCM_CPxNUM, &cpuid); 192 + mscm_ir_data->cpu_mask = 0x1 << cpuid; 193 + 194 + domain = irq_domain_add_hierarchy(domain_parent, 0, 195 + MSCM_IRSPRC_NUM, node, 196 + &mscm_irq_domain_ops, mscm_ir_data); 197 + if (!domain) { 198 + ret = -ENOMEM; 199 + goto out_unmap; 200 + } 201 + 202 + cpu_pm_register_notifier(&mscm_ir_notifier_block); 203 + 204 + return 0; 205 + 206 + out_unmap: 207 + iounmap(mscm_ir_data->mscm_ir_base); 208 + out_free: 209 + kfree(mscm_ir_data); 210 + return ret; 211 + } 212 + IRQCHIP_DECLARE(vf610_mscm_ir, "fsl,vf610-mscm-ir", vf610_mscm_ir_of_init);
+4 -1
include/dt-bindings/clock/imx6qdl-clock.h
··· 248 248 #define IMX6QDL_PLL6_BYPASS 235 249 249 #define IMX6QDL_PLL7_BYPASS 236 250 250 #define IMX6QDL_CLK_GPT_3M 237 251 - #define IMX6QDL_CLK_END 238 251 + #define IMX6QDL_CLK_VIDEO_27M 238 252 + #define IMX6QDL_CLK_MIPI_CORE_CFG 239 253 + #define IMX6QDL_CLK_MIPI_IPG 240 254 + #define IMX6QDL_CLK_END 241 252 255 253 256 #endif /* __DT_BINDINGS_CLOCK_IMX6QDL_H */
+1
include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
··· 207 207 #define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU1_DI1 (0x1 << 6) 208 208 #define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU2_DI0 (0x2 << 6) 209 209 #define IMX6Q_GPR3_LVDS0_MUX_CTL_IPU2_DI1 (0x3 << 6) 210 + #define IMX6Q_GPR3_MIPI_MUX_CTL_SHIFT 4 210 211 #define IMX6Q_GPR3_MIPI_MUX_CTL_MASK (0x3 << 4) 211 212 #define IMX6Q_GPR3_MIPI_MUX_CTL_IPU1_DI0 (0x0 << 4) 212 213 #define IMX6Q_GPR3_MIPI_MUX_CTL_IPU1_DI1 (0x1 << 4)