mirror of https://gitee.com/openkylin/linux.git
The i.MX device tree changes for 3.19:
- Device additions for board vf610-colibri, pwm, backlight, I2C, RTC, ADC etc. - Update i.MX6 phyFLEX board to include PCIe, CAN and audio support - Improve SSI clocks description for i.MX5 platforms - Add ENET2 support for imx6sx-sdb board - Add device tree source for LS1021A SoC, board QDS and TWR - Enable cpufreq support for i.MX53 - Enable VPU device support for i.MX6QDL - Enable poweroff support for i.MX6 SoCs - Add support for TBS2910 Matrix ARM mini PC which is built on i.MX6Q - Create generic base device trees for Vybrid and add support for Colibri VF50 Note: the change set is built on top of imx-soc-3.19 to resolve the dependency that "ARM: dts: imx53: add cpufreq-dt support" uses the clock define IMX5_CLK_ARM that is added by "ARM: imx53: clk: add ARM clock". -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJUcZicAAoJEFBXWFqHsHzO0ooH/ie5r7JDjklD6IlAxD9UyDyp RQSF/8VYTc1EhECI5D/xmHARnUM5AxfMBQzFyavz/0hkGp22xJtBgp5ZlYtWwyAF qpLI031/5hn+37NyMxdcd6nU55e7GJw4loBXTZ5pNSRdP+ubsUVccfUdQ1K5hPA6 KeS5vqaX26c5P2R+tkx2pfRLmCrSWNKNIpIbZzenlu2dS7U77ex1AO2W+ToDTgQ3 asVIMD/7oQ4soEGZfSQdzHCftQ2OdVGlybFoMCkW5xrzRVfucbSN2BbLpEM5Z117 /DZpfAmHlT4NrGz/BBzpK6l3AWFmXLmCP/dFvvfzKM3uWgr/zlVF8ChW/xgCc+g= =FnNq -----END PGP SIGNATURE----- Merge tag 'imx-dt-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/dt Pull "The i.MX device tree changes for 3.19" from Shawn Guo: - Device additions for board vf610-colibri, pwm, backlight, I2C, RTC, ADC etc. - Update i.MX6 phyFLEX board to include PCIe, CAN and audio support - Improve SSI clocks description for i.MX5 platforms - Add ENET2 support for imx6sx-sdb board - Add device tree source for LS1021A SoC, board QDS and TWR - Enable cpufreq support for i.MX53 - Enable VPU device support for i.MX6QDL - Enable poweroff support for i.MX6 SoCs - Add support for TBS2910 Matrix ARM mini PC which is built on i.MX6Q - Create generic base device trees for Vybrid and add support for Colibri VF50 Note: the change set is built on top of imx-soc-3.19 to resolve the dependency that "ARM: dts: imx53: add cpufreq-dt support" uses the clock define IMX5_CLK_ARM that is added by "ARM: imx53: clk: add ARM clock". * tag 'imx-dt-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: (51 commits) ARM: dts: imx6q-tbs2910: Enable snvs-poweroff ARM: dts: imx6: add pm_power_off support for i.mx6 chips ARM: dts: vf-colibri: add USB regulators ARM: dts: imx6: phyFLEX: Add CAN support ARM: dts: imx6: phyFLEX: Add PCIe ARM: dts: imx6: phyFLEX: Set correct interrupt for pmic ARM: dts: imx6: phyFLEX: Enable gpmi in module file ARM: dts: imx6: phyFLEX: set nodes in alphabetical order ARM: dts: vf-colibri-eval-v3.dts: Enable ST-M41T0M6 RTC ARM: dts: vf-colibri: Add I2C support ARM: dts: imx6qdl: Enable CODA960 VPU ARM: dts: imx6q-tbs2910: Remove unneeded 'fsl,mode' property ARM: dts: vf610: enable USB misc/phy nodes where necessary ARM: dts: vf610: use new GPIO support ARM: dts: pbab01: enable I2S audio on phyFLEX-i.MX6 boards ARM: dts: pbab01: move i2c pins and frequency configuration into pfla02 ARM: dts: vf500-colibri: add Colibri VF50 support ARM: dts: vf610: create generic base device trees ARM: dts: vf610: assign oscillator to clock module dt-bindings: arm: add Freescale LS1021A SoC device tree binding ... Signed-off-by; Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
6b7f0570b1
|
@ -74,3 +74,41 @@ Required root node properties:
|
|||
i.MX6q generic board
|
||||
Required root node properties:
|
||||
- compatible = "fsl,imx6q";
|
||||
|
||||
|
||||
Freescale LS1021A Platform Device Tree Bindings
|
||||
------------------------------------------------
|
||||
|
||||
Required root node compatible properties:
|
||||
- compatible = "fsl,ls1021a";
|
||||
|
||||
Freescale LS1021A SoC-specific Device Tree Bindings
|
||||
-------------------------------------------
|
||||
|
||||
Freescale SCFG
|
||||
SCFG is the supplemental configuration unit, that provides SoC specific
|
||||
configuration and status registers for the chip. Such as getting PEX port
|
||||
status.
|
||||
Required properties:
|
||||
- compatible: should be "fsl,ls1021a-scfg"
|
||||
- reg: should contain base address and length of SCFG memory-mapped registers
|
||||
|
||||
Example:
|
||||
scfg: scfg@1570000 {
|
||||
compatible = "fsl,ls1021a-scfg";
|
||||
reg = <0x0 0x1570000 0x0 0x10000>;
|
||||
};
|
||||
|
||||
Freescale DCFG
|
||||
DCFG is the device configuration unit, that provides general purpose
|
||||
configuration and status for the device. Such as setting the secondary
|
||||
core start address and release the secondary core from holdoff and startup.
|
||||
Required properties:
|
||||
- compatible: should be "fsl,ls1021a-dcfg"
|
||||
- reg : should contain base address and length of DCFG memory-mapped registers
|
||||
|
||||
Example:
|
||||
dcfg: dcfg@1ee0000 {
|
||||
compatible = "fsl,ls1021a-dcfg";
|
||||
reg = <0x0 0x1ee0000 0x0 0x10000>;
|
||||
};
|
||||
|
|
|
@ -5,6 +5,19 @@ Required properties:
|
|||
- reg: Address and length of the register set
|
||||
- #clock-cells: Should be <1>
|
||||
|
||||
Optional properties:
|
||||
- clocks: list of clock identifiers which are external input clocks to the
|
||||
given clock controller. Please refer the next section to find
|
||||
the input clocks for a given controller.
|
||||
- clock-names: list of names of clocks which are exteral input clocks to the
|
||||
given clock controller.
|
||||
|
||||
Input clocks for top clock controller:
|
||||
- sxosc (external crystal oscillator 32KHz, recommended)
|
||||
- fxosc (external crystal oscillator 24MHz, recommended)
|
||||
- audio_ext
|
||||
- enet_ext
|
||||
|
||||
The clock consumer should specify the desired clock by having the clock
|
||||
ID in its "clocks" phandle cell. See include/dt-bindings/clock/vf610-clock.h
|
||||
for the full list of VF610 clock IDs.
|
||||
|
@ -15,6 +28,8 @@ clks: ccm@4006b000 {
|
|||
compatible = "fsl,vf610-ccm";
|
||||
reg = <0x4006b000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&sxosc>, <&fxosc>;
|
||||
clock-names = "sxosc", "fxosc";
|
||||
};
|
||||
|
||||
uart1: serial@40028000 {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
i.mx6 Poweroff Driver
|
||||
|
||||
SNVS_LPCR in SNVS module can power off the whole system by pull
|
||||
PMIC_ON_REQ low if PMIC_ON_REQ is connected with external PMIC.
|
||||
If you don't want to use PMIC_ON_REQ as power on/off control,
|
||||
please set status='disabled' to disable this driver.
|
||||
|
||||
Required Properties:
|
||||
-compatible: "fsl,sec-v4.0-poweroff"
|
||||
-reg: Specifies the physical address of the SNVS_LPCR register
|
||||
|
||||
Example:
|
||||
snvs@020cc000 {
|
||||
compatible = "fsl,sec-v4.0-mon", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x020cc000 0x4000>;
|
||||
.....
|
||||
snvs_poweroff: snvs-poweroff@38 {
|
||||
compatible = "fsl,sec-v4.0-poweroff";
|
||||
reg = <0x38 0x4>;
|
||||
};
|
||||
}
|
|
@ -147,6 +147,7 @@ st STMicroelectronics
|
|||
ste ST-Ericsson
|
||||
stericsson ST-Ericsson
|
||||
synology Synology, Inc.
|
||||
tbs TBS Technologies
|
||||
thine THine Electronics, Inc.
|
||||
ti Texas Instruments
|
||||
tlm Trusted Logic Mobility
|
||||
|
|
|
@ -248,6 +248,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
|||
imx6q-sabrelite.dtb \
|
||||
imx6q-sabresd.dtb \
|
||||
imx6q-sbc6x.dtb \
|
||||
imx6q-tbs2910.dtb \
|
||||
imx6q-udoo.dtb \
|
||||
imx6q-wandboard.dtb \
|
||||
imx6q-wandboard-revb1.dtb \
|
||||
|
@ -258,6 +259,9 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
|||
imx6q-tx6q-1110.dtb \
|
||||
imx6sl-evk.dtb \
|
||||
imx6sx-sdb.dtb \
|
||||
ls1021a-qds.dtb \
|
||||
ls1021a-twr.dtb \
|
||||
vf500-colibri-eval-v3.dtb \
|
||||
vf610-colibri-eval-v3.dtb \
|
||||
vf610-cosmic.dtb \
|
||||
vf610-twr.dtb
|
||||
|
|
|
@ -214,7 +214,9 @@ ssi2: ssi@70014000 {
|
|||
compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
|
||||
reg = <0x70014000 0x4000>;
|
||||
interrupts = <30>;
|
||||
clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI2_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 24 1 0>,
|
||||
<&sdma 25 1 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
@ -504,7 +506,9 @@ ssi1: ssi@83fcc000 {
|
|||
compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
|
||||
reg = <0x83fcc000 0x4000>;
|
||||
interrupts = <29>;
|
||||
clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI1_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 28 0 0>,
|
||||
<&sdma 29 0 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
@ -560,7 +564,9 @@ ssi3: ssi@83fe8000 {
|
|||
compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";
|
||||
reg = <0x83fe8000 0x4000>;
|
||||
interrupts = <96>;
|
||||
clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI3_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 46 0 0>,
|
||||
<&sdma 47 0 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
|
|
@ -46,10 +46,21 @@ aliases {
|
|||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
cpu@0 {
|
||||
cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a8";
|
||||
reg = <0x0>;
|
||||
clocks = <&clks IMX5_CLK_ARM>;
|
||||
clock-latency = <61036>;
|
||||
voltage-tolerance = <5>;
|
||||
operating-points = <
|
||||
/* kHz */
|
||||
166666 850000
|
||||
400000 900000
|
||||
800000 1050000
|
||||
1000000 1200000
|
||||
1200000 1300000
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -227,7 +238,9 @@ ssi2: ssi@50014000 {
|
|||
"fsl,imx21-ssi";
|
||||
reg = <0x50014000 0x4000>;
|
||||
interrupts = <30>;
|
||||
clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI2_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI2_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 24 1 0>,
|
||||
<&sdma 25 1 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
@ -675,7 +688,9 @@ ssi1: ssi@63fcc000 {
|
|||
"fsl,imx21-ssi";
|
||||
reg = <0x63fcc000 0x4000>;
|
||||
interrupts = <29>;
|
||||
clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI1_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI1_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 28 0 0>,
|
||||
<&sdma 29 0 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
@ -703,7 +718,9 @@ ssi3: ssi@63fe8000 {
|
|||
"fsl,imx21-ssi";
|
||||
reg = <0x63fe8000 0x4000>;
|
||||
interrupts = <96>;
|
||||
clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>;
|
||||
clocks = <&clks IMX5_CLK_SSI3_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SSI3_ROOT_GATE>;
|
||||
clock-names = "ipg", "baud";
|
||||
dmas = <&sdma 46 0 0>,
|
||||
<&sdma 47 0 0>;
|
||||
dma-names = "rx", "tx";
|
||||
|
|
|
@ -13,6 +13,10 @@
|
|||
#include "imx6qdl.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
i2c3 = &i2c4;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -114,3 +118,7 @@ &ldb {
|
|||
"di0_sel", "di1_sel",
|
||||
"di0", "di1";
|
||||
};
|
||||
|
||||
&vpu {
|
||||
compatible = "fsl,imx6dl-vpu", "cnm,coda960";
|
||||
};
|
||||
|
|
|
@ -0,0 +1,432 @@
|
|||
/*
|
||||
* Copyright 2014 Soeren Moch <smoch@web.de>
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this file; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "imx6q.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
model = "TBS2910 Matrix ARM mini PC";
|
||||
compatible = "tbs,imx6q-tbs2910", "fsl,imx6q";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x10000000 0x80000000>;
|
||||
};
|
||||
|
||||
fan {
|
||||
compatible = "gpio-fan";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gpio_fan>;
|
||||
gpios = <&gpio3 28 GPIO_ACTIVE_HIGH>;
|
||||
gpio-fan,speed-map = <0 0
|
||||
3000 1>;
|
||||
};
|
||||
|
||||
ir_recv {
|
||||
compatible = "gpio-ir-receiver";
|
||||
gpios = <&gpio3 18 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ir>;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gpio_leds>;
|
||||
|
||||
blue {
|
||||
label = "blue_status_led";
|
||||
gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "keep";
|
||||
};
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_2p5v: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "2P5V";
|
||||
regulator-min-microvolt = <2500000>;
|
||||
regulator-max-microvolt = <2500000>;
|
||||
};
|
||||
|
||||
reg_3p3v: regulator@1 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <1>;
|
||||
regulator-name = "3P3V";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
reg_5p0v: regulator@2 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <2>;
|
||||
regulator-name = "5P0V";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
};
|
||||
|
||||
sound-sgtl5000 {
|
||||
audio-codec = <&sgtl5000>;
|
||||
audio-routing =
|
||||
"MIC_IN", "Mic Jack",
|
||||
"Mic Jack", "Mic Bias",
|
||||
"Headphone Jack", "HP_OUT";
|
||||
compatible = "fsl,imx-audio-sgtl5000";
|
||||
model = "On-board Codec";
|
||||
mux-ext-port = <3>;
|
||||
mux-int-port = <1>;
|
||||
ssi-controller = <&ssi1>;
|
||||
};
|
||||
|
||||
sound-spdif {
|
||||
compatible = "fsl,imx-audio-spdif";
|
||||
model = "On-board SPDIF";
|
||||
spdif-controller = <&spdif>;
|
||||
spdif-out;
|
||||
};
|
||||
};
|
||||
|
||||
&audmux {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hdmi>;
|
||||
ddc-i2c-bus = <&i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
sgtl5000: sgtl5000@0a {
|
||||
clocks = <&clks 201>;
|
||||
compatible = "fsl,sgtl5000";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_sgtl5000>;
|
||||
reg = <0x0a>;
|
||||
VDDA-supply = <®_2p5v>;
|
||||
VDDIO-supply = <®_3p3v>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
status = "okay";
|
||||
|
||||
rtc: ds1307@68 {
|
||||
compatible = "dallas,ds1307";
|
||||
reg = <0x68>;
|
||||
};
|
||||
};
|
||||
|
||||
&pcie {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pcie>;
|
||||
reset-gpio = <&gpio7 12 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&snvs_poweroff {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spdif {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spdif>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
vbus-supply = <®_5p0v>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbotg {
|
||||
vbus-supply = <®_5p0v>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usbotg>;
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc2>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
|
||||
vmmc-supply = <®_3p3v>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>;
|
||||
wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
|
||||
vmmc-supply = <®_3p3v>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc4 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc4>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
no-1-8-v;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
imx6q-tbs2910 {
|
||||
pinctrl_enet: enetgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
|
||||
MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x1b059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_hdmi: hdmigrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c3: i2c3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ir: irgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D18__GPIO3_IO18 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pcie: pciegrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_sgtl5000: sgtl5000grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
|
||||
MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
|
||||
MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
|
||||
MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
|
||||
MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_spdif: spdifgrp {
|
||||
fsl,pins = <MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x13091
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usbotg: usbotggrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
|
||||
MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
|
||||
MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
|
||||
MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
|
||||
MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
|
||||
MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
|
||||
MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x17059
|
||||
MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x17059
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc4: usdhc4grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD4_CMD__SD4_CMD 0x17059
|
||||
MX6QDL_PAD_SD4_CLK__SD4_CLK 0x10059
|
||||
MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
|
||||
MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
|
||||
MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
|
||||
MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
|
||||
MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
|
||||
MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
|
||||
MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
|
||||
MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio_fan {
|
||||
pinctrl_gpio_fan: gpiofangrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D28__GPIO3_IO28 0x130b1
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio_leds {
|
||||
pinctrl_gpio_leds: gpioledsgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x130b1
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -308,3 +308,7 @@ mipi_mux_3: endpoint {
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
&vpu {
|
||||
compatible = "fsl,imx6q-vpu", "cnm,coda960";
|
||||
};
|
||||
|
|
|
@ -9,17 +9,103 @@
|
|||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
#include <dt-bindings/sound/fsl-imx-audmux.h>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
linux,stdout-path = &uart4;
|
||||
};
|
||||
|
||||
regulators {
|
||||
sound_1v8: regulator@2 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <2>;
|
||||
regulator-name = "i2s-audio-1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
sound_3v3: regulator@3 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <3>;
|
||||
regulator-name = "i2s-audio-3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
};
|
||||
|
||||
tlv320_mclk: oscillator {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <19200000>;
|
||||
clock-output-names = "tlv320-mclk";
|
||||
};
|
||||
|
||||
sound {
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "OnboardTLV320AIC3007";
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,bitclock-master = <&dailink_master>;
|
||||
simple-audio-card,frame-master = <&dailink_master>;
|
||||
simple-audio-card,widgets =
|
||||
"Microphone", "Mic Jack",
|
||||
"Line", "Line In",
|
||||
"Line", "Line Out",
|
||||
"Speaker", "Speaker",
|
||||
"Headphone", "Headphone Jack";
|
||||
simple-audio-card,routing =
|
||||
"Line Out", "LLOUT",
|
||||
"Line Out", "RLOUT",
|
||||
"Speaker", "SPOP",
|
||||
"Speaker", "SPOM",
|
||||
"Headphone Jack", "HPLOUT",
|
||||
"Headphone Jack", "HPROUT",
|
||||
"MIC3L", "Mic Jack",
|
||||
"MIC3R", "Mic Jack",
|
||||
"Mic Jack", "Mic Bias",
|
||||
"LINE1L", "Line In",
|
||||
"LINE1R", "Line In";
|
||||
|
||||
simple-audio-card,cpu {
|
||||
sound-dai = <&ssi2>;
|
||||
};
|
||||
|
||||
dailink_master: simple-audio-card,codec {
|
||||
sound-dai = <&codec>;
|
||||
clocks = <&tlv320_mclk>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&fec {
|
||||
&audmux {
|
||||
status = "okay";
|
||||
|
||||
ssi2 {
|
||||
fsl,audmux-port = <1>;
|
||||
fsl,port-config = <
|
||||
(IMX_AUDMUX_V2_PTCR_TFSDIR |
|
||||
IMX_AUDMUX_V2_PTCR_TFSEL(4) |
|
||||
IMX_AUDMUX_V2_PTCR_TCLKDIR |
|
||||
IMX_AUDMUX_V2_PTCR_TCSEL(4))
|
||||
IMX_AUDMUX_V2_PDCR_RXDSEL(4)
|
||||
>;
|
||||
};
|
||||
|
||||
pins5 {
|
||||
fsl,audmux-port = <4>;
|
||||
fsl,port-config = <
|
||||
0x00000000
|
||||
IMX_AUDMUX_V2_PDCR_RXDSEL(1)
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&can1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpmi {
|
||||
&fec {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -28,14 +114,18 @@ &hdmi {
|
|||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
clock-frequency = <100000>;
|
||||
status = "okay";
|
||||
|
||||
tlv320@18 {
|
||||
compatible = "ti,tlv320aic3x";
|
||||
codec: tlv320@18 {
|
||||
compatible = "ti,tlv320aic3007";
|
||||
#sound-dai-cells = <0>;
|
||||
reg = <0x18>;
|
||||
ai3x-micbias-vg = <2>;
|
||||
|
||||
AVDD-supply = <&sound_3v3>;
|
||||
IOVDD-supply = <&sound_3v3>;
|
||||
DRVDD-supply = <&sound_3v3>;
|
||||
DVDD-supply = <&sound_1v8>;
|
||||
};
|
||||
|
||||
stmpe@41 {
|
||||
|
@ -55,9 +145,14 @@ adc@64 {
|
|||
};
|
||||
|
||||
&i2c3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
clock-frequency = <100000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -84,19 +179,3 @@ &usdhc2 {
|
|||
&usdhc3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c3: i2c3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -58,6 +58,18 @@ red {
|
|||
};
|
||||
};
|
||||
|
||||
&audmux {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_audmux>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&can1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&ecspi3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_ecspi3>;
|
||||
|
@ -72,6 +84,22 @@ flash@0 {
|
|||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
phy-reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>;
|
||||
phy-supply = <&vdd_eth_io_reg>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gpmi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gpmi_nand>;
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
|
@ -85,8 +113,8 @@ eeprom@50 {
|
|||
pmic@58 {
|
||||
compatible = "dlg,da9063";
|
||||
reg = <0x58>;
|
||||
interrupt-parent = <&gpio4>;
|
||||
interrupts = <17 0x8>; /* active-low GPIO4_17 */
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <9 0x8>; /* active-low GPIO2_9 */
|
||||
|
||||
regulators {
|
||||
vddcore_reg: bcore1 {
|
||||
|
@ -162,6 +190,18 @@ vdd_mx6_high_reg: ldo11 {
|
|||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog>;
|
||||
|
@ -171,7 +211,7 @@ pinctrl_hog: hoggrp {
|
|||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000
|
||||
MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x80000000 /* SPI NOR chipselect */
|
||||
MX6QDL_PAD_DI0_PIN15__GPIO4_IO17 0x80000000 /* PMIC interrupt */
|
||||
MX6QDL_PAD_SD4_DAT1__GPIO2_IO09 0x80000000 /* PMIC interrupt */
|
||||
MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* Green LED */
|
||||
MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000 /* Red LED */
|
||||
>;
|
||||
|
@ -206,6 +246,13 @@ MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan1: flexcan1grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x1b0b0
|
||||
MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x1b0b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_gpmi_nand: gpminandgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1
|
||||
|
@ -235,6 +282,24 @@ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c3: i2c3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pcie: pciegrp {
|
||||
fsl,pins = <MX6QDL_PAD_DI0_PIN15__GPIO4_IO17 0x80000000>;
|
||||
};
|
||||
|
||||
pinctrl_uart3: uart3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
|
||||
|
@ -293,22 +358,22 @@ MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000
|
|||
MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_audmux: audmuxgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_DISP0_DAT16__AUD5_TXC 0x130b0
|
||||
MX6QDL_PAD_DISP0_DAT17__AUD5_TXD 0x110b0
|
||||
MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x130b0
|
||||
MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
phy-reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>;
|
||||
phy-supply = <&vdd_eth_io_reg>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gpmi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gpmi_nand>;
|
||||
nand-on-flash-bbt;
|
||||
&pcie {
|
||||
pinctrl-name = "default";
|
||||
pinctrl-0 = <&pinctrl_pcie>;
|
||||
reset-gpio = <&gpio4 17 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
|
|
@ -531,6 +531,10 @@ &pwm1 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&snvs_poweroff {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -333,9 +333,17 @@ spba@0203c000 {
|
|||
};
|
||||
|
||||
vpu: vpu@02040000 {
|
||||
compatible = "cnm,coda960";
|
||||
reg = <0x02040000 0x3c000>;
|
||||
interrupts = <0 3 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<0 12 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "bit", "jpeg";
|
||||
clocks = <&clks IMX6QDL_CLK_VPU_AXI>,
|
||||
<&clks IMX6QDL_CLK_MMDC_CH0_AXI>,
|
||||
<&clks IMX6QDL_CLK_OCRAM>;
|
||||
clock-names = "per", "ahb", "ocram";
|
||||
resets = <&src 1>;
|
||||
iram = <&ocram>;
|
||||
};
|
||||
|
||||
aipstz@0207c000 { /* AIPSTZ1 */
|
||||
|
@ -657,6 +665,12 @@ snvs-rtc-lp@34 {
|
|||
interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<0 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
snvs_poweroff: snvs-poweroff@38 {
|
||||
compatible = "fsl,sec-v4.0-poweroff";
|
||||
reg = <0x38 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
epit1: epit@020d0000 { /* EPIT1 */
|
||||
|
|
|
@ -580,6 +580,10 @@ &pwm1 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&snvs_poweroff {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -574,6 +574,12 @@ snvs-rtc-lp@34 {
|
|||
interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<0 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
snvs_poweroff: snvs-poweroff@38 {
|
||||
compatible = "fsl,sec-v4.0-poweroff";
|
||||
reg = <0x38 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
epit1: epit@020d0000 {
|
||||
|
|
|
@ -105,6 +105,30 @@ reg_lcd_3v3: regulator@4 {
|
|||
gpio = <&gpio3 27 0>;
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
reg_peri_3v3: regulator@5 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <5>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_peri_3v3>;
|
||||
regulator-name = "peri_3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
reg_enet_3v3: regulator@6 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <6>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet_3v3>;
|
||||
regulator-name = "enet_3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
sound {
|
||||
|
@ -133,6 +157,14 @@ &audmux {
|
|||
&fec1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet1>;
|
||||
phy-supply = <®_enet_3v3>;
|
||||
phy-mode = "rgmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet2>;
|
||||
phy-mode = "rgmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -304,6 +336,10 @@ &pwm3 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&snvs_poweroff {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -394,6 +430,30 @@ MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081
|
|||
MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081
|
||||
MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081
|
||||
MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081
|
||||
MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_enet_3v3: enet3v3grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_ENET2_COL__GPIO2_IO_6 0x80000000
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_enet2: enet2grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC 0xa0b9
|
||||
MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0 0xa0b1
|
||||
MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1 0xa0b1
|
||||
MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2 0xa0b1
|
||||
MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3 0xa0b1
|
||||
MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN 0xa0b1
|
||||
MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK 0x3081
|
||||
MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0 0x3081
|
||||
MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1 0x3081
|
||||
MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2 0x3081
|
||||
MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3 0x3081
|
||||
MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN 0x3081
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -452,6 +512,12 @@ MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_peri_3v3: peri3v3grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_QSPI1A_DATA0__GPIO4_IO_16 0x80000000
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pwm3: pwm3grp-1 {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0
|
||||
|
|
|
@ -671,6 +671,12 @@ snvs-rtc-lp@34 {
|
|||
reg = <0x34 0x58>;
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
snvs_poweroff: snvs-poweroff@38 {
|
||||
compatible = "fsl,sec-v4.0-poweroff";
|
||||
reg = <0x38 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
epit1: epit@020d0000 {
|
||||
|
@ -877,7 +883,7 @@ mmdc: mmdc@021b0000 {
|
|||
};
|
||||
|
||||
fec2: ethernet@021b4000 {
|
||||
compatible = "fsl,imx6sx-fec";
|
||||
compatible = "fsl,imx6sx-fec", "fsl,imx6q-fec";
|
||||
reg = <0x021b4000 0x4000>;
|
||||
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
|
|
@ -0,0 +1,240 @@
|
|||
/*
|
||||
* Copyright 2013-2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this file; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "ls1021a.dtsi"
|
||||
|
||||
/ {
|
||||
model = "LS1021A QDS Board";
|
||||
|
||||
aliases {
|
||||
enet0_rgmii_phy = &rgmii_phy1;
|
||||
enet1_rgmii_phy = &rgmii_phy2;
|
||||
enet2_rgmii_phy = &rgmii_phy3;
|
||||
enet0_sgmii_phy = &sgmii_phy1c;
|
||||
enet1_sgmii_phy = &sgmii_phy1d;
|
||||
};
|
||||
};
|
||||
|
||||
&dspi0 {
|
||||
bus-num = <0>;
|
||||
status = "okay";
|
||||
|
||||
dspiflash: at45db021d@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "atmel,at45db021d", "atmel,at45", "atmel,dataflash";
|
||||
spi-max-frequency = <16000000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
|
||||
pca9547: mux@77 {
|
||||
reg = <0x77>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
i2c@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0>;
|
||||
|
||||
ds3232: rtc@68 {
|
||||
compatible = "dallas,ds3232";
|
||||
reg = <0x68>;
|
||||
interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@2 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x2>;
|
||||
|
||||
ina220@40 {
|
||||
compatible = "ti,ina220";
|
||||
reg = <0x40>;
|
||||
shunt-resistor = <1000>;
|
||||
};
|
||||
|
||||
ina220@41 {
|
||||
compatible = "ti,ina220";
|
||||
reg = <0x41>;
|
||||
shunt-resistor = <1000>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@3 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x3>;
|
||||
|
||||
eeprom@56 {
|
||||
compatible = "atmel,24c512";
|
||||
reg = <0x56>;
|
||||
};
|
||||
|
||||
eeprom@57 {
|
||||
compatible = "atmel,24c512";
|
||||
reg = <0x57>;
|
||||
};
|
||||
|
||||
adt7461a@4c {
|
||||
compatible = "adi,adt7461a";
|
||||
reg = <0x4c>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ifc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
/* NOR, NAND Flashes and FPGA on board */
|
||||
ranges = <0x0 0x0 0x0 0x60000000 0x08000000
|
||||
0x2 0x0 0x0 0x7e800000 0x00010000
|
||||
0x3 0x0 0x0 0x7fb00000 0x00000100>;
|
||||
status = "okay";
|
||||
|
||||
nor@0,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "cfi-flash";
|
||||
reg = <0x0 0x0 0x8000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <1>;
|
||||
};
|
||||
|
||||
fpga: board-control@3,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
reg = <0x3 0x0 0x0000100>;
|
||||
bank-width = <1>;
|
||||
device-width = <1>;
|
||||
ranges = <0 3 0 0x100>;
|
||||
|
||||
mdio-mux-emi1 {
|
||||
compatible = "mdio-mux-mmioreg";
|
||||
mdio-parent-bus = <&mdio0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x54 1>; /* BRDCFG4 */
|
||||
mux-mask = <0xe0>; /* EMI1[2:0] */
|
||||
|
||||
/* Onboard PHYs */
|
||||
ls1021amdio0: mdio@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
rgmii_phy1: ethernet-phy@1 {
|
||||
reg = <0x1>;
|
||||
};
|
||||
};
|
||||
|
||||
ls1021amdio1: mdio@20 {
|
||||
reg = <0x20>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
rgmii_phy2: ethernet-phy@2 {
|
||||
reg = <0x2>;
|
||||
};
|
||||
};
|
||||
|
||||
ls1021amdio2: mdio@40 {
|
||||
reg = <0x40>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
rgmii_phy3: ethernet-phy@3 {
|
||||
reg = <0x3>;
|
||||
};
|
||||
};
|
||||
|
||||
ls1021amdio3: mdio@60 {
|
||||
reg = <0x60>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
sgmii_phy1c: ethernet-phy@1c {
|
||||
reg = <0x1c>;
|
||||
};
|
||||
};
|
||||
|
||||
ls1021amdio4: mdio@80 {
|
||||
reg = <0x80>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
sgmii_phy1d: ethernet-phy@1d {
|
||||
reg = <0x1d>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&lpuart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mdio0 {
|
||||
tbi0: tbi-phy@8 {
|
||||
reg = <0x8>;
|
||||
device_type = "tbi-phy";
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* Copyright 2013-2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this file; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "ls1021a.dtsi"
|
||||
|
||||
/ {
|
||||
model = "LS1021A TWR Board";
|
||||
|
||||
aliases {
|
||||
enet2_rgmii_phy = &rgmii_phy1;
|
||||
enet0_sgmii_phy = &sgmii_phy2;
|
||||
enet1_sgmii_phy = &sgmii_phy0;
|
||||
};
|
||||
};
|
||||
|
||||
&dspi1 {
|
||||
bus-num = <0>;
|
||||
status = "okay";
|
||||
|
||||
dspiflash: s25fl064k@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spansion,s25fl064k";
|
||||
spi-max-frequency = <16000000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ifc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
/* NOR Flash on board */
|
||||
ranges = <0x0 0x0 0x0 0x60000000 0x08000000>;
|
||||
status = "okay";
|
||||
|
||||
nor@0,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "cfi-flash";
|
||||
reg = <0x0 0x0 0x8000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&lpuart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mdio0 {
|
||||
sgmii_phy0: ethernet-phy@0 {
|
||||
reg = <0x0>;
|
||||
};
|
||||
rgmii_phy1: ethernet-phy@1 {
|
||||
reg = <0x1>;
|
||||
};
|
||||
sgmii_phy2: ethernet-phy@2 {
|
||||
reg = <0x2>;
|
||||
};
|
||||
tbi1: tbi-phy@1f {
|
||||
reg = <0x1f>;
|
||||
device_type = "tbi-phy";
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
|
@ -0,0 +1,408 @@
|
|||
/*
|
||||
* Copyright 2013-2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This file is dual-licensed: you can use it either under the terms
|
||||
* of the GPL or the X11 license, at your option. Note that this dual
|
||||
* licensing only applies to this file, and not this project as a
|
||||
* whole.
|
||||
*
|
||||
* a) This file is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this file; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*
|
||||
* Or, alternatively,
|
||||
*
|
||||
* b) Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "skeleton64.dtsi"
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
/ {
|
||||
compatible = "fsl,ls1021a";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &lpuart0;
|
||||
serial1 = &lpuart1;
|
||||
serial2 = &lpuart2;
|
||||
serial3 = &lpuart3;
|
||||
serial4 = &lpuart4;
|
||||
serial5 = &lpuart5;
|
||||
sysclk = &sysclk;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@f00 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <0xf00>;
|
||||
clocks = <&cluster1_clk>;
|
||||
};
|
||||
|
||||
cpu@f01 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <0xf01>;
|
||||
clocks = <&cluster1_clk>;
|
||||
};
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv7-timer";
|
||||
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a7-pmu";
|
||||
interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
soc {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
device_type = "soc";
|
||||
interrupt-parent = <&gic>;
|
||||
ranges;
|
||||
|
||||
gic: interrupt-controller@1400000 {
|
||||
compatible = "arm,cortex-a7-gic";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
reg = <0x0 0x1401000 0x0 0x1000>,
|
||||
<0x0 0x1402000 0x0 0x1000>,
|
||||
<0x0 0x1404000 0x0 0x2000>,
|
||||
<0x0 0x1406000 0x0 0x2000>;
|
||||
interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
|
||||
|
||||
};
|
||||
|
||||
ifc: ifc@1530000 {
|
||||
compatible = "fsl,ifc", "simple-bus";
|
||||
reg = <0x0 0x1530000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
dcfg: dcfg@1ee0000 {
|
||||
compatible = "fsl,ls1021a-dcfg", "syscon";
|
||||
reg = <0x0 0x1ee0000 0x0 0x10000>;
|
||||
big-endian;
|
||||
};
|
||||
|
||||
esdhc: esdhc@1560000 {
|
||||
compatible = "fsl,esdhc";
|
||||
reg = <0x0 0x1560000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <0>;
|
||||
voltage-ranges = <1800 1800 3300 3300>;
|
||||
sdhci,auto-cmd12;
|
||||
big-endian;
|
||||
bus-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
scfg: scfg@1570000 {
|
||||
compatible = "fsl,ls1021a-scfg", "syscon";
|
||||
reg = <0x0 0x1570000 0x0 0x10000>;
|
||||
};
|
||||
|
||||
clockgen: clocking@1ee1000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0x0 0x0 0x1ee1000 0x10000>;
|
||||
|
||||
sysclk: sysclk {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-output-names = "sysclk";
|
||||
};
|
||||
|
||||
cga_pll1: pll@800 {
|
||||
compatible = "fsl,qoriq-core-pll-2.0";
|
||||
#clock-cells = <1>;
|
||||
reg = <0x800 0x10>;
|
||||
clocks = <&sysclk>;
|
||||
clock-output-names = "cga-pll1", "cga-pll1-div2",
|
||||
"cga-pll1-div4";
|
||||
};
|
||||
|
||||
platform_clk: pll@c00 {
|
||||
compatible = "fsl,qoriq-core-pll-2.0";
|
||||
#clock-cells = <1>;
|
||||
reg = <0xc00 0x10>;
|
||||
clocks = <&sysclk>;
|
||||
clock-output-names = "platform-clk", "platform-clk-div2";
|
||||
};
|
||||
|
||||
cluster1_clk: clk0c0@0 {
|
||||
compatible = "fsl,qoriq-core-mux-2.0";
|
||||
#clock-cells = <0>;
|
||||
reg = <0x0 0x10>;
|
||||
clock-names = "pll1cga", "pll1cga-div2", "pll1cga-div4";
|
||||
clocks = <&cga_pll1 0>, <&cga_pll1 1>, <&cga_pll1 2>;
|
||||
clock-output-names = "cluster1-clk";
|
||||
};
|
||||
};
|
||||
|
||||
dspi0: dspi@2100000 {
|
||||
compatible = "fsl,vf610-dspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2100000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "dspi";
|
||||
clocks = <&platform_clk 1>;
|
||||
spi-num-chipselects = <5>;
|
||||
big-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi1: dspi@2110000 {
|
||||
compatible = "fsl,vf610-dspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2110000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "dspi";
|
||||
clocks = <&platform_clk 1>;
|
||||
spi-num-chipselects = <5>;
|
||||
big-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@2180000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2180000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&platform_clk 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c1: i2c@2190000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2190000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&platform_clk 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c2: i2c@21a0000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x21a0000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&platform_clk 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart0: serial@21c0500 {
|
||||
compatible = "fsl,16550-FIFO64", "ns16550a";
|
||||
reg = <0x0 0x21c0500 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <0>;
|
||||
fifo-size = <15>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: serial@21c0600 {
|
||||
compatible = "fsl,16550-FIFO64", "ns16550a";
|
||||
reg = <0x0 0x21c0600 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <0>;
|
||||
fifo-size = <15>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: serial@21d0500 {
|
||||
compatible = "fsl,16550-FIFO64", "ns16550a";
|
||||
reg = <0x0 0x21d0500 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <0>;
|
||||
fifo-size = <15>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: serial@21d0600 {
|
||||
compatible = "fsl,16550-FIFO64", "ns16550a";
|
||||
reg = <0x0 0x21d0600 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <0>;
|
||||
fifo-size = <15>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart0: serial@2950000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2950000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&sysclk>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart1: serial@2960000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2960000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart2: serial@2970000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2970000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart3: serial@2980000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2980000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart4: serial@2990000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x2990000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart5: serial@29a0000 {
|
||||
compatible = "fsl,ls1021a-lpuart";
|
||||
reg = <0x0 0x29a0000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
wdog0: watchdog@2ad0000 {
|
||||
compatible = "fsl,imx21-wdt";
|
||||
reg = <0x0 0x2ad0000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "wdog-en";
|
||||
big-endian;
|
||||
};
|
||||
|
||||
sai1: sai@2b50000 {
|
||||
compatible = "fsl,vf610-sai";
|
||||
reg = <0x0 0x2b50000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "sai";
|
||||
dma-names = "tx", "rx";
|
||||
dmas = <&edma0 1 47>,
|
||||
<&edma0 1 46>;
|
||||
big-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sai2: sai@2b60000 {
|
||||
compatible = "fsl,vf610-sai";
|
||||
reg = <0x0 0x2b60000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&platform_clk 1>;
|
||||
clock-names = "sai";
|
||||
dma-names = "tx", "rx";
|
||||
dmas = <&edma0 1 45>,
|
||||
<&edma0 1 44>;
|
||||
big-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
edma0: edma@2c00000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,vf610-edma";
|
||||
reg = <0x0 0x2c00000 0x0 0x10000>,
|
||||
<0x0 0x2c10000 0x0 0x10000>,
|
||||
<0x0 0x2c20000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "edma-tx", "edma-err";
|
||||
dma-channels = <32>;
|
||||
big-endian;
|
||||
clock-names = "dmamux0", "dmamux1";
|
||||
clocks = <&platform_clk 1>,
|
||||
<&platform_clk 1>;
|
||||
};
|
||||
|
||||
mdio0: mdio@2d24000 {
|
||||
compatible = "gianfar";
|
||||
device_type = "mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2d24000 0x0 0x4000>;
|
||||
};
|
||||
|
||||
usb@8600000 {
|
||||
compatible = "fsl-usb2-dr-v2.5", "fsl-usb2-dr";
|
||||
reg = <0x0 0x8600000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
|
||||
dr_mode = "host";
|
||||
phy_type = "ulpi";
|
||||
};
|
||||
|
||||
usb3@3100000 {
|
||||
compatible = "snps,dwc3";
|
||||
reg = <0x0 0x3100000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||
dr_mode = "host";
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Copyright 2014 Toradex AG
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
bootargs = "console=ttyLP0,115200";
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
sys_5v0_reg: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "5v0";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* USBH_PEN */
|
||||
usbh_vbus_reg: regulator@1 {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usbh1_reg>;
|
||||
reg = <1>;
|
||||
regulator-name = "usbh_vbus";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
gpio = <&gpio3 19 GPIO_ACTIVE_LOW>;
|
||||
vin-supply = <&sys_5v0_reg>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&bl {
|
||||
brightness-levels = <0 4 8 16 32 64 128 255>;
|
||||
default-brightness-level = <6>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-mode = "rmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
|
||||
/* M41T0M6 real time clock on carrier board */
|
||||
rtc: m41t0m6@68 {
|
||||
compatible = "st,m41t00";
|
||||
reg = <0x68>;
|
||||
};
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
vbus-supply = <&usbh_vbus_reg>;
|
||||
};
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* Copyright 2014 Toradex AG
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
/ {
|
||||
bl: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm0 0 5000000 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
&adc0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&adc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&edma0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-mode = "rmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec1>;
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c0>;
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pwm0>;
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pwm1>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart0>;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
};
|
||||
|
||||
&usbdev0 {
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbmisc0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbmisc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
vf610-colibri {
|
||||
pinctrl_gpio_ext: gpio_ext {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTD10__GPIO_89 0x22ed /* EXT_IO_0 */
|
||||
VF610_PAD_PTD9__GPIO_88 0x22ed /* EXT_IO_1 */
|
||||
VF610_PAD_PTD26__GPIO_68 0x22ed /* EXT_IO_2 */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_esdhc1: esdhc1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTA24__ESDHC1_CLK 0x31ef
|
||||
VF610_PAD_PTA25__ESDHC1_CMD 0x31ef
|
||||
VF610_PAD_PTA26__ESDHC1_DAT0 0x31ef
|
||||
VF610_PAD_PTA27__ESDHC1_DAT1 0x31ef
|
||||
VF610_PAD_PTA28__ESDHC1_DATA2 0x31ef
|
||||
VF610_PAD_PTA29__ESDHC1_DAT3 0x31ef
|
||||
VF610_PAD_PTB20__GPIO_42 0x219d
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_fec1: fec1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
|
||||
VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
|
||||
VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
|
||||
VF610_PAD_PTC12__ENET_RMII_RXD1 0x30d1
|
||||
VF610_PAD_PTC13__ENET_RMII1_RXD0 0x30d1
|
||||
VF610_PAD_PTC14__ENET_RMII1_RXER 0x30d1
|
||||
VF610_PAD_PTC15__ENET_RMII1_TXD1 0x30d2
|
||||
VF610_PAD_PTC16__ENET_RMII1_TXD0 0x30d2
|
||||
VF610_PAD_PTC17__ENET_RMII1_TXEN 0x30d2
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c0: i2c0grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB14__I2C0_SCL 0x37ff
|
||||
VF610_PAD_PTB15__I2C0_SDA 0x37ff
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pwm0: pwm0grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB0__FTM0_CH0 0x1182
|
||||
VF610_PAD_PTB1__FTM0_CH1 0x1182
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pwm1: pwm1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB8__FTM1_CH0 0x1182
|
||||
VF610_PAD_PTB9__FTM1_CH1 0x1182
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart0: uart0grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB10__UART0_TX 0x21a2
|
||||
VF610_PAD_PTB11__UART0_RX 0x21a1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB4__UART1_TX 0x21a2
|
||||
VF610_PAD_PTB5__UART1_RX 0x21a1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTD0__UART2_TX 0x21a2
|
||||
VF610_PAD_PTD1__UART2_RX 0x21a1
|
||||
VF610_PAD_PTD2__UART2_RTS 0x21a2
|
||||
VF610_PAD_PTD3__UART2_CTS 0x21a1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usbh1_reg: gpio_usb_vbus {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTD4__GPIO_83 0x22ed
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright 2014 Toradex AG
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "vf500-colibri.dtsi"
|
||||
#include "vf-colibri-eval-v3.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Colibri VF50 on Colibri Evaluation Board";
|
||||
compatible = "toradex,vf500-colibri_vf50-on-eval", "toradex,vf500-colibri_vf50", "fsl,vf500";
|
||||
};
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Copyright 2014 Toradex AG
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "vf500.dtsi"
|
||||
#include "vf-colibri.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Colibri VF50 COM";
|
||||
compatible = "toradex,vf610-colibri_vf50", "fsl,vf500";
|
||||
|
||||
memory {
|
||||
reg = <0x80000000 0x8000000>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
#include "vfxxx.dtsi"
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
/ {
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
a5_cpu: cpu@0 {
|
||||
compatible = "arm,cortex-a5";
|
||||
device_type = "cpu";
|
||||
reg = <0x0>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
aips-bus@40000000 {
|
||||
|
||||
intc: interrupt-controller@40002000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
reg = <0x40003000 0x1000>,
|
||||
<0x40002100 0x100>;
|
||||
};
|
||||
|
||||
global_timer: timer@40002200 {
|
||||
compatible = "arm,cortex-a9-global-timer";
|
||||
reg = <0x40002200 0x20>;
|
||||
interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_PLATFORM_BUS>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&adc0 {
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&adc1 {
|
||||
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&can0 {
|
||||
interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&can1 {
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&dspi0 {
|
||||
interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&edma0 {
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "edma-tx", "edma-err";
|
||||
};
|
||||
|
||||
&edma1 {
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "edma-tx", "edma-err";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&fec0 {
|
||||
interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&ftm {
|
||||
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&pit {
|
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&qspi0 {
|
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&sai2 {
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart3 {
|
||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart5 {
|
||||
interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&usbdev0 {
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&usbphy0 {
|
||||
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
|
@ -9,38 +9,9 @@
|
|||
|
||||
/dts-v1/;
|
||||
#include "vf610-colibri.dtsi"
|
||||
#include "vf-colibri-eval-v3.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Colibri VF61 on Colibri Evaluation Board";
|
||||
compatible = "toradex,vf610-colibri_vf61-on-eval", "toradex,vf610-colibri_vf61", "fsl,vf610";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyLP0,115200";
|
||||
};
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-mode = "rmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
|
||||
#include "vf610.dtsi"
|
||||
#include "vf-colibri.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Colibri VF61 COM";
|
||||
|
@ -16,108 +17,9 @@ / {
|
|||
memory {
|
||||
reg = <0x80000000 0x10000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
enet_ext {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-mode = "rmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec1>;
|
||||
};
|
||||
|
||||
&L2 {
|
||||
arm,data-latency = <2 1 2>;
|
||||
arm,tag-latency = <3 2 3>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart0>;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
};
|
||||
|
||||
&usbdev0 {
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
vf610-colibri {
|
||||
pinctrl_esdhc1: esdhc1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTA24__ESDHC1_CLK 0x31ef
|
||||
VF610_PAD_PTA25__ESDHC1_CMD 0x31ef
|
||||
VF610_PAD_PTA26__ESDHC1_DAT0 0x31ef
|
||||
VF610_PAD_PTA27__ESDHC1_DAT1 0x31ef
|
||||
VF610_PAD_PTA28__ESDHC1_DATA2 0x31ef
|
||||
VF610_PAD_PTA29__ESDHC1_DAT3 0x31ef
|
||||
VF610_PAD_PTB20__GPIO_42 0x219d
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_fec1: fec1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
|
||||
VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
|
||||
VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
|
||||
VF610_PAD_PTC12__ENET_RMII_RXD1 0x30d1
|
||||
VF610_PAD_PTC13__ENET_RMII1_RXD0 0x30d1
|
||||
VF610_PAD_PTC14__ENET_RMII1_RXER 0x30d1
|
||||
VF610_PAD_PTC15__ENET_RMII1_TXD1 0x30d2
|
||||
VF610_PAD_PTC16__ENET_RMII1_TXD0 0x30d2
|
||||
VF610_PAD_PTC17__ENET_RMII1_TXEN 0x30d2
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart0: uart0grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB10__UART0_TX 0x21a2
|
||||
VF610_PAD_PTB11__UART0_RX 0x21a1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTB4__UART1_TX 0x21a2
|
||||
VF610_PAD_PTB5__UART1_RX 0x21a1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTD0__UART2_TX 0x21a2
|
||||
VF610_PAD_PTD1__UART2_RX 0x21a1
|
||||
VF610_PAD_PTD2__UART2_RTS 0x21a2
|
||||
VF610_PAD_PTD3__UART2_CTS 0x21a1
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -23,14 +23,16 @@ memory {
|
|||
reg = <0x80000000 0x10000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
enet_ext {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
};
|
||||
enet_ext: enet_ext {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&clks {
|
||||
clocks = <&sxosc>, <&fxosc>, <&enet_ext>;
|
||||
clock-names = "sxosc", "fxosc", "enet_ext";
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
|
|
|
@ -22,18 +22,16 @@ memory {
|
|||
reg = <0x80000000 0x8000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
audio_ext {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <24576000>;
|
||||
};
|
||||
audio_ext: mclk_osc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <24576000>;
|
||||
};
|
||||
|
||||
enet_ext {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
};
|
||||
enet_ext: eth_osc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
};
|
||||
|
||||
regulators {
|
||||
|
@ -95,6 +93,11 @@ &adc0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&clks {
|
||||
clocks = <&sxosc>, <&fxosc>, <&enet_ext>, <&audio_ext>;
|
||||
clock-names = "sxosc", "fxosc", "enet_ext", "audio_ext";
|
||||
};
|
||||
|
||||
&dspi0 {
|
||||
bus-num = <0>;
|
||||
pinctrl-names = "default";
|
||||
|
@ -112,10 +115,15 @@ sflash: at26df081a@0 {
|
|||
};
|
||||
};
|
||||
|
||||
&edma0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -285,3 +293,19 @@ &usbh1 {
|
|||
disable-over-current;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbmisc0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbmisc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -7,481 +7,19 @@
|
|||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
#include "vf610-pinfunc.h"
|
||||
#include <dt-bindings/clock/vf610-clock.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include "vf500.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
can0 = &can0;
|
||||
can1 = &can1;
|
||||
serial0 = &uart0;
|
||||
serial1 = &uart1;
|
||||
serial2 = &uart2;
|
||||
serial3 = &uart3;
|
||||
serial4 = &uart4;
|
||||
serial5 = &uart5;
|
||||
gpio0 = &gpio1;
|
||||
gpio1 = &gpio2;
|
||||
gpio2 = &gpio3;
|
||||
gpio3 = &gpio4;
|
||||
gpio4 = &gpio5;
|
||||
usbphy0 = &usbphy0;
|
||||
usbphy1 = &usbphy1;
|
||||
};
|
||||
&a5_cpu {
|
||||
next-level-cache = <&L2>;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
compatible = "arm,cortex-a5";
|
||||
device_type = "cpu";
|
||||
reg = <0x0>;
|
||||
next-level-cache = <&L2>;
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
sxosc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
fxosc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
interrupt-parent = <&intc>;
|
||||
ranges;
|
||||
|
||||
aips0: aips-bus@40000000 {
|
||||
compatible = "fsl,aips-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
interrupt-parent = <&intc>;
|
||||
reg = <0x40000000 0x70000>;
|
||||
ranges;
|
||||
|
||||
intc: interrupt-controller@40002000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
reg = <0x40003000 0x1000>,
|
||||
<0x40002100 0x100>;
|
||||
};
|
||||
|
||||
L2: l2-cache@40006000 {
|
||||
compatible = "arm,pl310-cache";
|
||||
reg = <0x40006000 0x1000>;
|
||||
cache-unified;
|
||||
cache-level = <2>;
|
||||
arm,data-latency = <1 1 1>;
|
||||
arm,tag-latency = <2 2 2>;
|
||||
};
|
||||
|
||||
edma0: dma-controller@40018000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,vf610-edma";
|
||||
reg = <0x40018000 0x2000>,
|
||||
<0x40024000 0x1000>,
|
||||
<0x40025000 0x1000>;
|
||||
interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<0 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "edma-tx", "edma-err";
|
||||
dma-channels = <32>;
|
||||
clock-names = "dmamux0", "dmamux1";
|
||||
clocks = <&clks VF610_CLK_DMAMUX0>,
|
||||
<&clks VF610_CLK_DMAMUX1>;
|
||||
};
|
||||
|
||||
can0: flexcan@40020000 {
|
||||
compatible = "fsl,vf610-flexcan";
|
||||
reg = <0x40020000 0x4000>;
|
||||
interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_FLEXCAN0>,
|
||||
<&clks VF610_CLK_FLEXCAN0>;
|
||||
clock-names = "ipg", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart0: serial@40027000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40027000 0x1000>;
|
||||
interrupts = <0 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART0>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 2>,
|
||||
<&edma0 0 3>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: serial@40028000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40028000 0x1000>;
|
||||
interrupts = <0 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART1>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 4>,
|
||||
<&edma0 0 5>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: serial@40029000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40029000 0x1000>;
|
||||
interrupts = <0 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART2>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 6>,
|
||||
<&edma0 0 7>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: serial@4002a000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x4002a000 0x1000>;
|
||||
interrupts = <0 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART3>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 8>,
|
||||
<&edma0 0 9>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi0: dspi0@4002c000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-dspi";
|
||||
reg = <0x4002c000 0x1000>;
|
||||
interrupts = <0 67 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_DSPI0>;
|
||||
clock-names = "dspi";
|
||||
spi-num-chipselects = <5>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sai2: sai@40031000 {
|
||||
compatible = "fsl,vf610-sai";
|
||||
reg = <0x40031000 0x1000>;
|
||||
interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_SAI2>;
|
||||
clock-names = "sai";
|
||||
dma-names = "tx", "rx";
|
||||
dmas = <&edma0 0 21>,
|
||||
<&edma0 0 20>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pit: pit@40037000 {
|
||||
compatible = "fsl,vf610-pit";
|
||||
reg = <0x40037000 0x1000>;
|
||||
interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_PIT>;
|
||||
clock-names = "pit";
|
||||
};
|
||||
|
||||
pwm0: pwm@40038000 {
|
||||
compatible = "fsl,vf610-ftm-pwm";
|
||||
#pwm-cells = <3>;
|
||||
reg = <0x40038000 0x1000>;
|
||||
clock-names = "ftm_sys", "ftm_ext",
|
||||
"ftm_fix", "ftm_cnt_clk_en";
|
||||
clocks = <&clks VF610_CLK_FTM0>,
|
||||
<&clks VF610_CLK_FTM0_EXT_SEL>,
|
||||
<&clks VF610_CLK_FTM0_FIX_SEL>,
|
||||
<&clks VF610_CLK_FTM0_EXT_FIX_EN>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc0: adc@4003b000 {
|
||||
compatible = "fsl,vf610-adc";
|
||||
reg = <0x4003b000 0x1000>;
|
||||
interrupts = <0 53 0x04>;
|
||||
clocks = <&clks VF610_CLK_ADC0>;
|
||||
clock-names = "adc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
wdog@4003e000 {
|
||||
compatible = "fsl,vf610-wdt", "fsl,imx21-wdt";
|
||||
reg = <0x4003e000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_WDT>;
|
||||
clock-names = "wdog";
|
||||
};
|
||||
|
||||
qspi0: quadspi@40044000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-qspi";
|
||||
reg = <0x40044000 0x1000>;
|
||||
interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_QSPI0_EN>,
|
||||
<&clks VF610_CLK_QSPI0>;
|
||||
clock-names = "qspi_en", "qspi";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
iomuxc: iomuxc@40048000 {
|
||||
compatible = "fsl,vf610-iomuxc";
|
||||
reg = <0x40048000 0x1000>;
|
||||
#gpio-range-cells = <3>;
|
||||
};
|
||||
|
||||
gpio1: gpio@40049000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x40049000 0x1000 0x400ff000 0x40>;
|
||||
interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 0 32>;
|
||||
};
|
||||
|
||||
gpio2: gpio@4004a000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004a000 0x1000 0x400ff040 0x40>;
|
||||
interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 32 32>;
|
||||
};
|
||||
|
||||
gpio3: gpio@4004b000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004b000 0x1000 0x400ff080 0x40>;
|
||||
interrupts = <0 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 64 32>;
|
||||
};
|
||||
|
||||
gpio4: gpio@4004c000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004c000 0x1000 0x400ff0c0 0x40>;
|
||||
interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 96 32>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4004d000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004d000 0x1000 0x400ff100 0x40>;
|
||||
interrupts = <0 111 IRQ_TYPE_LEVEL_HIGH>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 128 7>;
|
||||
};
|
||||
|
||||
anatop: anatop@40050000 {
|
||||
compatible = "fsl,vf610-anatop", "syscon";
|
||||
reg = <0x40050000 0x400>;
|
||||
};
|
||||
|
||||
usbphy0: usbphy@40050800 {
|
||||
compatible = "fsl,vf610-usbphy";
|
||||
reg = <0x40050800 0x400>;
|
||||
interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_USBPHY0>;
|
||||
fsl,anatop = <&anatop>;
|
||||
};
|
||||
|
||||
usbphy1: usbphy@40050c00 {
|
||||
compatible = "fsl,vf610-usbphy";
|
||||
reg = <0x40050c00 0x400>;
|
||||
interrupts = <0 51 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_USBPHY1>;
|
||||
fsl,anatop = <&anatop>;
|
||||
};
|
||||
|
||||
i2c0: i2c@40066000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-i2c";
|
||||
reg = <0x40066000 0x1000>;
|
||||
interrupts =<0 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_I2C0>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 50>,
|
||||
<&edma0 0 51>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
clks: ccm@4006b000 {
|
||||
compatible = "fsl,vf610-ccm";
|
||||
reg = <0x4006b000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
usbdev0: usb@40034000 {
|
||||
compatible = "fsl,vf610-usb", "fsl,imx27-usb";
|
||||
reg = <0x40034000 0x800>;
|
||||
interrupts = <0 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_USBC0>;
|
||||
fsl,usbphy = <&usbphy0>;
|
||||
fsl,usbmisc = <&usbmisc0 0>;
|
||||
dr_mode = "peripheral";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc0: usb@40034800 {
|
||||
#index-cells = <1>;
|
||||
compatible = "fsl,vf610-usbmisc";
|
||||
reg = <0x40034800 0x200>;
|
||||
clocks = <&clks VF610_CLK_USBC0>;
|
||||
};
|
||||
};
|
||||
|
||||
aips1: aips-bus@40080000 {
|
||||
compatible = "fsl,aips-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x40080000 0x80000>;
|
||||
ranges;
|
||||
|
||||
edma1: dma-controller@40098000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,vf610-edma";
|
||||
reg = <0x40098000 0x2000>,
|
||||
<0x400a1000 0x1000>,
|
||||
<0x400a2000 0x1000>;
|
||||
interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<0 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "edma-tx", "edma-err";
|
||||
dma-channels = <32>;
|
||||
clock-names = "dmamux0", "dmamux1";
|
||||
clocks = <&clks VF610_CLK_DMAMUX2>,
|
||||
<&clks VF610_CLK_DMAMUX3>;
|
||||
};
|
||||
|
||||
uart4: serial@400a9000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x400a9000 0x1000>;
|
||||
interrupts = <0 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART4>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart5: serial@400aa000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x400aa000 0x1000>;
|
||||
interrupts = <0 66 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_UART5>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc1: adc@400bb000 {
|
||||
compatible = "fsl,vf610-adc";
|
||||
reg = <0x400bb000 0x1000>;
|
||||
interrupts = <0 54 0x04>;
|
||||
clocks = <&clks VF610_CLK_ADC1>;
|
||||
clock-names = "adc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
esdhc1: esdhc@400b2000 {
|
||||
compatible = "fsl,imx53-esdhc";
|
||||
reg = <0x400b2000 0x1000>;
|
||||
interrupts = <0 28 0x04>;
|
||||
clocks = <&clks VF610_CLK_IPG_BUS>,
|
||||
<&clks VF610_CLK_PLATFORM_BUS>,
|
||||
<&clks VF610_CLK_ESDHC1>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbh1: usb@400b4000 {
|
||||
compatible = "fsl,vf610-usb", "fsl,imx27-usb";
|
||||
reg = <0x400b4000 0x800>;
|
||||
interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_USBC1>;
|
||||
fsl,usbphy = <&usbphy1>;
|
||||
fsl,usbmisc = <&usbmisc1 0>;
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc1: usb@400b4800 {
|
||||
#index-cells = <1>;
|
||||
compatible = "fsl,vf610-usbmisc";
|
||||
reg = <0x400b4800 0x200>;
|
||||
clocks = <&clks VF610_CLK_USBC1>;
|
||||
};
|
||||
|
||||
ftm: ftm@400b8000 {
|
||||
compatible = "fsl,ftm-timer";
|
||||
reg = <0x400b8000 0x1000 0x400b9000 0x1000>;
|
||||
interrupts = <0 44 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-names = "ftm-evt", "ftm-src",
|
||||
"ftm-evt-counter-en", "ftm-src-counter-en";
|
||||
clocks = <&clks VF610_CLK_FTM2>,
|
||||
<&clks VF610_CLK_FTM3>,
|
||||
<&clks VF610_CLK_FTM2_EXT_FIX_EN>,
|
||||
<&clks VF610_CLK_FTM3_EXT_FIX_EN>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fec0: ethernet@400d0000 {
|
||||
compatible = "fsl,mvf600-fec";
|
||||
reg = <0x400d0000 0x1000>;
|
||||
interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_ENET0>,
|
||||
<&clks VF610_CLK_ENET0>,
|
||||
<&clks VF610_CLK_ENET>;
|
||||
clock-names = "ipg", "ahb", "ptp";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fec1: ethernet@400d1000 {
|
||||
compatible = "fsl,mvf600-fec";
|
||||
reg = <0x400d1000 0x1000>;
|
||||
interrupts = <0 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_ENET1>,
|
||||
<&clks VF610_CLK_ENET1>,
|
||||
<&clks VF610_CLK_ENET>;
|
||||
clock-names = "ipg", "ahb", "ptp";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
can1: flexcan@400d4000 {
|
||||
compatible = "fsl,vf610-flexcan";
|
||||
reg = <0x400d4000 0x4000>;
|
||||
interrupts = <0 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clks VF610_CLK_FLEXCAN1>,
|
||||
<&clks VF610_CLK_FLEXCAN1>;
|
||||
clock-names = "ipg", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
};
|
||||
&aips0 {
|
||||
L2: l2-cache@40006000 {
|
||||
compatible = "arm,pl310-cache";
|
||||
reg = <0x40006000 0x1000>;
|
||||
cache-unified;
|
||||
cache-level = <2>;
|
||||
arm,data-latency = <1 1 1>;
|
||||
arm,tag-latency = <2 2 2>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,437 @@
|
|||
/*
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "vf610-pinfunc.h"
|
||||
#include <dt-bindings/clock/vf610-clock.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
can0 = &can0;
|
||||
can1 = &can1;
|
||||
serial0 = &uart0;
|
||||
serial1 = &uart1;
|
||||
serial2 = &uart2;
|
||||
serial3 = &uart3;
|
||||
serial4 = &uart4;
|
||||
serial5 = &uart5;
|
||||
gpio0 = &gpio1;
|
||||
gpio1 = &gpio2;
|
||||
gpio2 = &gpio3;
|
||||
gpio3 = &gpio4;
|
||||
gpio4 = &gpio5;
|
||||
usbphy0 = &usbphy0;
|
||||
usbphy1 = &usbphy1;
|
||||
};
|
||||
|
||||
fxosc: fxosc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
sxosc: sxosc {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges;
|
||||
|
||||
aips0: aips-bus@40000000 {
|
||||
compatible = "fsl,aips-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
edma0: dma-controller@40018000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,vf610-edma";
|
||||
reg = <0x40018000 0x2000>,
|
||||
<0x40024000 0x1000>,
|
||||
<0x40025000 0x1000>;
|
||||
dma-channels = <32>;
|
||||
clock-names = "dmamux0", "dmamux1";
|
||||
clocks = <&clks VF610_CLK_DMAMUX0>,
|
||||
<&clks VF610_CLK_DMAMUX1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
can0: flexcan@40020000 {
|
||||
compatible = "fsl,vf610-flexcan";
|
||||
reg = <0x40020000 0x4000>;
|
||||
clocks = <&clks VF610_CLK_FLEXCAN0>,
|
||||
<&clks VF610_CLK_FLEXCAN0>;
|
||||
clock-names = "ipg", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart0: serial@40027000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40027000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART0>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 2>,
|
||||
<&edma0 0 3>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: serial@40028000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40028000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART1>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 4>,
|
||||
<&edma0 0 5>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: serial@40029000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x40029000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART2>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 6>,
|
||||
<&edma0 0 7>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: serial@4002a000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x4002a000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART3>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 8>,
|
||||
<&edma0 0 9>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi0: dspi0@4002c000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-dspi";
|
||||
reg = <0x4002c000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_DSPI0>;
|
||||
clock-names = "dspi";
|
||||
spi-num-chipselects = <5>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sai2: sai@40031000 {
|
||||
compatible = "fsl,vf610-sai";
|
||||
reg = <0x40031000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_SAI2>;
|
||||
clock-names = "sai";
|
||||
dma-names = "tx", "rx";
|
||||
dmas = <&edma0 0 21>,
|
||||
<&edma0 0 20>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pit: pit@40037000 {
|
||||
compatible = "fsl,vf610-pit";
|
||||
reg = <0x40037000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_PIT>;
|
||||
clock-names = "pit";
|
||||
};
|
||||
|
||||
pwm0: pwm@40038000 {
|
||||
compatible = "fsl,vf610-ftm-pwm";
|
||||
#pwm-cells = <3>;
|
||||
reg = <0x40038000 0x1000>;
|
||||
clock-names = "ftm_sys", "ftm_ext",
|
||||
"ftm_fix", "ftm_cnt_clk_en";
|
||||
clocks = <&clks VF610_CLK_FTM0>,
|
||||
<&clks VF610_CLK_FTM0_EXT_SEL>,
|
||||
<&clks VF610_CLK_FTM0_FIX_SEL>,
|
||||
<&clks VF610_CLK_FTM0_EXT_FIX_EN>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm1: pwm@40039000 {
|
||||
compatible = "fsl,vf610-ftm-pwm";
|
||||
#pwm-cells = <3>;
|
||||
reg = <0x40039000 0x1000>;
|
||||
clock-names = "ftm_sys", "ftm_ext",
|
||||
"ftm_fix", "ftm_cnt_clk_en";
|
||||
clocks = <&clks VF610_CLK_FTM1>,
|
||||
<&clks VF610_CLK_FTM1_EXT_SEL>,
|
||||
<&clks VF610_CLK_FTM1_FIX_SEL>,
|
||||
<&clks VF610_CLK_FTM1_EXT_FIX_EN>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc0: adc@4003b000 {
|
||||
compatible = "fsl,vf610-adc";
|
||||
reg = <0x4003b000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_ADC0>;
|
||||
clock-names = "adc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
wdog@4003e000 {
|
||||
compatible = "fsl,vf610-wdt", "fsl,imx21-wdt";
|
||||
reg = <0x4003e000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_WDT>;
|
||||
clock-names = "wdog";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
qspi0: quadspi@40044000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-qspi";
|
||||
reg = <0x40044000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_QSPI0_EN>,
|
||||
<&clks VF610_CLK_QSPI0>;
|
||||
clock-names = "qspi_en", "qspi";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
iomuxc: iomuxc@40048000 {
|
||||
compatible = "fsl,vf610-iomuxc";
|
||||
reg = <0x40048000 0x1000>;
|
||||
#gpio-range-cells = <3>;
|
||||
};
|
||||
|
||||
gpio1: gpio@40049000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x40049000 0x1000 0x400ff000 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 0 32>;
|
||||
};
|
||||
|
||||
gpio2: gpio@4004a000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004a000 0x1000 0x400ff040 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 32 32>;
|
||||
};
|
||||
|
||||
gpio3: gpio@4004b000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004b000 0x1000 0x400ff080 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 64 32>;
|
||||
};
|
||||
|
||||
gpio4: gpio@4004c000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004c000 0x1000 0x400ff0c0 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 96 32>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4004d000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004d000 0x1000 0x400ff100 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 128 7>;
|
||||
};
|
||||
|
||||
anatop: anatop@40050000 {
|
||||
compatible = "fsl,vf610-anatop", "syscon";
|
||||
reg = <0x40050000 0x400>;
|
||||
};
|
||||
|
||||
usbphy0: usbphy@40050800 {
|
||||
compatible = "fsl,vf610-usbphy";
|
||||
reg = <0x40050800 0x400>;
|
||||
clocks = <&clks VF610_CLK_USBPHY0>;
|
||||
fsl,anatop = <&anatop>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbphy1: usbphy@40050c00 {
|
||||
compatible = "fsl,vf610-usbphy";
|
||||
reg = <0x40050c00 0x400>;
|
||||
clocks = <&clks VF610_CLK_USBPHY1>;
|
||||
fsl,anatop = <&anatop>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@40066000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,vf610-i2c";
|
||||
reg = <0x40066000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_I2C0>;
|
||||
clock-names = "ipg";
|
||||
dmas = <&edma0 0 50>,
|
||||
<&edma0 0 51>;
|
||||
dma-names = "rx","tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
clks: ccm@4006b000 {
|
||||
compatible = "fsl,vf610-ccm";
|
||||
reg = <0x4006b000 0x1000>;
|
||||
clocks = <&sxosc>, <&fxosc>;
|
||||
clock-names = "sxosc", "fxosc";
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
usbdev0: usb@40034000 {
|
||||
compatible = "fsl,vf610-usb", "fsl,imx27-usb";
|
||||
reg = <0x40034000 0x800>;
|
||||
clocks = <&clks VF610_CLK_USBC0>;
|
||||
fsl,usbphy = <&usbphy0>;
|
||||
fsl,usbmisc = <&usbmisc0 0>;
|
||||
dr_mode = "peripheral";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc0: usb@40034800 {
|
||||
#index-cells = <1>;
|
||||
compatible = "fsl,vf610-usbmisc";
|
||||
reg = <0x40034800 0x200>;
|
||||
clocks = <&clks VF610_CLK_USBC0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
aips1: aips-bus@40080000 {
|
||||
compatible = "fsl,aips-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
edma1: dma-controller@40098000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,vf610-edma";
|
||||
reg = <0x40098000 0x2000>,
|
||||
<0x400a1000 0x1000>,
|
||||
<0x400a2000 0x1000>;
|
||||
dma-channels = <32>;
|
||||
clock-names = "dmamux0", "dmamux1";
|
||||
clocks = <&clks VF610_CLK_DMAMUX2>,
|
||||
<&clks VF610_CLK_DMAMUX3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart4: serial@400a9000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x400a9000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART4>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart5: serial@400aa000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x400aa000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_UART5>;
|
||||
clock-names = "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc1: adc@400bb000 {
|
||||
compatible = "fsl,vf610-adc";
|
||||
reg = <0x400bb000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_ADC1>;
|
||||
clock-names = "adc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
esdhc1: esdhc@400b2000 {
|
||||
compatible = "fsl,imx53-esdhc";
|
||||
reg = <0x400b2000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_IPG_BUS>,
|
||||
<&clks VF610_CLK_PLATFORM_BUS>,
|
||||
<&clks VF610_CLK_ESDHC1>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbh1: usb@400b4000 {
|
||||
compatible = "fsl,vf610-usb", "fsl,imx27-usb";
|
||||
reg = <0x400b4000 0x800>;
|
||||
clocks = <&clks VF610_CLK_USBC1>;
|
||||
fsl,usbphy = <&usbphy1>;
|
||||
fsl,usbmisc = <&usbmisc1 0>;
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc1: usb@400b4800 {
|
||||
#index-cells = <1>;
|
||||
compatible = "fsl,vf610-usbmisc";
|
||||
reg = <0x400b4800 0x200>;
|
||||
clocks = <&clks VF610_CLK_USBC1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ftm: ftm@400b8000 {
|
||||
compatible = "fsl,ftm-timer";
|
||||
reg = <0x400b8000 0x1000 0x400b9000 0x1000>;
|
||||
clock-names = "ftm-evt", "ftm-src",
|
||||
"ftm-evt-counter-en", "ftm-src-counter-en";
|
||||
clocks = <&clks VF610_CLK_FTM2>,
|
||||
<&clks VF610_CLK_FTM3>,
|
||||
<&clks VF610_CLK_FTM2_EXT_FIX_EN>,
|
||||
<&clks VF610_CLK_FTM3_EXT_FIX_EN>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fec0: ethernet@400d0000 {
|
||||
compatible = "fsl,mvf600-fec";
|
||||
reg = <0x400d0000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_ENET0>,
|
||||
<&clks VF610_CLK_ENET0>,
|
||||
<&clks VF610_CLK_ENET>;
|
||||
clock-names = "ipg", "ahb", "ptp";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fec1: ethernet@400d1000 {
|
||||
compatible = "fsl,mvf600-fec";
|
||||
reg = <0x400d1000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_ENET1>,
|
||||
<&clks VF610_CLK_ENET1>,
|
||||
<&clks VF610_CLK_ENET>;
|
||||
clock-names = "ipg", "ahb", "ptp";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
can1: flexcan@400d4000 {
|
||||
compatible = "fsl,vf610-flexcan";
|
||||
reg = <0x400d4000 0x4000>;
|
||||
clocks = <&clks VF610_CLK_FLEXCAN1>,
|
||||
<&clks VF610_CLK_FLEXCAN1>;
|
||||
clock-names = "ipg", "per";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
|
@ -97,6 +97,7 @@ CONFIG_SERIAL_IMX_CONSOLE=y
|
|||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_IMX=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_IMX=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
|
|
|
@ -158,6 +158,7 @@ CONFIG_I2C_CHARDEV=y
|
|||
CONFIG_I2C_ALGOPCF=m
|
||||
CONFIG_I2C_ALGOPCA=m
|
||||
CONFIG_I2C_IMX=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_IMX=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_MC9S08DZ60=y
|
||||
|
|
|
@ -633,12 +633,41 @@ config SOC_VF610
|
|||
bool "Vybrid Family VF610 support"
|
||||
select ARM_GIC
|
||||
select PINCTRL_VF610
|
||||
select VF_PIT_TIMER
|
||||
select PL310_ERRATA_769419 if CACHE_L2X0
|
||||
|
||||
help
|
||||
This enable support for Freescale Vybrid VF610 processor.
|
||||
|
||||
choice
|
||||
prompt "Clocksource for scheduler clock"
|
||||
depends on SOC_VF610
|
||||
default VF_USE_ARM_GLOBAL_TIMER
|
||||
|
||||
config VF_USE_ARM_GLOBAL_TIMER
|
||||
bool "Use ARM Global Timer"
|
||||
select ARM_GLOBAL_TIMER
|
||||
select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
|
||||
help
|
||||
Use the ARM Global Timer as clocksource
|
||||
|
||||
config VF_USE_PIT_TIMER
|
||||
bool "Use PIT timer"
|
||||
select VF_PIT_TIMER
|
||||
help
|
||||
Use SoC Periodic Interrupt Timer (PIT) as clocksource
|
||||
|
||||
endchoice
|
||||
|
||||
config SOC_LS1021A
|
||||
bool "Freescale LS1021A support"
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select PCI_DOMAINS if PCI
|
||||
select ZONE_DMA if ARM_LPAE
|
||||
|
||||
help
|
||||
This enable support for Freescale LS1021A processor.
|
||||
|
||||
endif
|
||||
|
||||
source "arch/arm/mach-imx/devices/Kconfig"
|
||||
|
|
|
@ -12,7 +12,7 @@ obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o clk-imx31.o iomux-imx31.o ehci-
|
|||
obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clk-imx35.o ehci-imx35.o pm-imx3.o
|
||||
|
||||
imx5-pm-$(CONFIG_PM) += pm-imx5.o
|
||||
obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o clk-imx51-imx53.o $(imx5-pm-y)
|
||||
obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o clk-imx51-imx53.o clk-cpu.o $(imx5-pm-y)
|
||||
|
||||
obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \
|
||||
clk-pfd.o clk-busy.o clk.o \
|
||||
|
@ -89,7 +89,7 @@ obj-$(CONFIG_HAVE_IMX_ANATOP) += anatop.o
|
|||
obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o
|
||||
obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o
|
||||
obj-$(CONFIG_HAVE_IMX_SRC) += src.o
|
||||
ifdef CONFIG_SOC_IMX6
|
||||
ifneq ($(CONFIG_SOC_IMX6)$(CONFIG_SOC_LS1021A),)
|
||||
AFLAGS_headsmp.o :=-Wa,-march=armv7-a
|
||||
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||
|
@ -110,4 +110,6 @@ obj-$(CONFIG_SOC_IMX53) += mach-imx53.o
|
|||
|
||||
obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o
|
||||
|
||||
obj-$(CONFIG_SOC_LS1021A) += mach-ls1021a.o
|
||||
|
||||
obj-y += devices/
|
||||
|
|
|
@ -30,8 +30,11 @@
|
|||
#define ANADIG_DIGPROG_IMX6SL 0x280
|
||||
|
||||
#define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG 0x40000
|
||||
#define BM_ANADIG_REG_2P5_ENABLE_PULLDOWN 0x8
|
||||
#define BM_ANADIG_REG_CORE_FET_ODRIVE 0x20000000
|
||||
#define BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG 0x1000
|
||||
/* Below MISC0_DISCON_HIGH_SNVS is only for i.MX6SL */
|
||||
#define BM_ANADIG_ANA_MISC0_DISCON_HIGH_SNVS 0x2000
|
||||
#define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B 0x80000
|
||||
#define BM_ANADIG_USB_CHRG_DETECT_EN_B 0x100000
|
||||
|
||||
|
@ -56,16 +59,43 @@ static void imx_anatop_enable_fet_odrive(bool enable)
|
|||
BM_ANADIG_REG_CORE_FET_ODRIVE);
|
||||
}
|
||||
|
||||
static inline void imx_anatop_enable_2p5_pulldown(bool enable)
|
||||
{
|
||||
regmap_write(anatop, ANADIG_REG_2P5 + (enable ? REG_SET : REG_CLR),
|
||||
BM_ANADIG_REG_2P5_ENABLE_PULLDOWN);
|
||||
}
|
||||
|
||||
static inline void imx_anatop_disconnect_high_snvs(bool enable)
|
||||
{
|
||||
regmap_write(anatop, ANADIG_ANA_MISC0 + (enable ? REG_SET : REG_CLR),
|
||||
BM_ANADIG_ANA_MISC0_DISCON_HIGH_SNVS);
|
||||
}
|
||||
|
||||
void imx_anatop_pre_suspend(void)
|
||||
{
|
||||
imx_anatop_enable_weak2p5(true);
|
||||
if (imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2)
|
||||
imx_anatop_enable_2p5_pulldown(true);
|
||||
else
|
||||
imx_anatop_enable_weak2p5(true);
|
||||
|
||||
imx_anatop_enable_fet_odrive(true);
|
||||
|
||||
if (cpu_is_imx6sl())
|
||||
imx_anatop_disconnect_high_snvs(true);
|
||||
}
|
||||
|
||||
void imx_anatop_post_resume(void)
|
||||
{
|
||||
if (imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2)
|
||||
imx_anatop_enable_2p5_pulldown(false);
|
||||
else
|
||||
imx_anatop_enable_weak2p5(false);
|
||||
|
||||
imx_anatop_enable_fet_odrive(false);
|
||||
imx_anatop_enable_weak2p5(false);
|
||||
|
||||
if (cpu_is_imx6sl())
|
||||
imx_anatop_disconnect_high_snvs(false);
|
||||
|
||||
}
|
||||
|
||||
static void imx_anatop_usb_chrg_detect_disable(void)
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Copyright (c) 2014 Lucas Stach <l.stach@pengutronix.de>, Pengutronix
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
struct clk_cpu {
|
||||
struct clk_hw hw;
|
||||
struct clk *div;
|
||||
struct clk *mux;
|
||||
struct clk *pll;
|
||||
struct clk *step;
|
||||
};
|
||||
|
||||
static inline struct clk_cpu *to_clk_cpu(struct clk_hw *hw)
|
||||
{
|
||||
return container_of(hw, struct clk_cpu, hw);
|
||||
}
|
||||
|
||||
static unsigned long clk_cpu_recalc_rate(struct clk_hw *hw,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
struct clk_cpu *cpu = to_clk_cpu(hw);
|
||||
|
||||
return clk_get_rate(cpu->div);
|
||||
}
|
||||
|
||||
static long clk_cpu_round_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long *prate)
|
||||
{
|
||||
struct clk_cpu *cpu = to_clk_cpu(hw);
|
||||
|
||||
return clk_round_rate(cpu->pll, rate);
|
||||
}
|
||||
|
||||
static int clk_cpu_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
struct clk_cpu *cpu = to_clk_cpu(hw);
|
||||
int ret;
|
||||
|
||||
/* switch to PLL bypass clock */
|
||||
ret = clk_set_parent(cpu->mux, cpu->step);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* reprogram PLL */
|
||||
ret = clk_set_rate(cpu->pll, rate);
|
||||
if (ret) {
|
||||
clk_set_parent(cpu->mux, cpu->pll);
|
||||
return ret;
|
||||
}
|
||||
/* switch back to PLL clock */
|
||||
clk_set_parent(cpu->mux, cpu->pll);
|
||||
|
||||
/* Ensure the divider is what we expect */
|
||||
clk_set_rate(cpu->div, rate);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct clk_ops clk_cpu_ops = {
|
||||
.recalc_rate = clk_cpu_recalc_rate,
|
||||
.round_rate = clk_cpu_round_rate,
|
||||
.set_rate = clk_cpu_set_rate,
|
||||
};
|
||||
|
||||
struct clk *imx_clk_cpu(const char *name, const char *parent_name,
|
||||
struct clk *div, struct clk *mux, struct clk *pll,
|
||||
struct clk *step)
|
||||
{
|
||||
struct clk_cpu *cpu;
|
||||
struct clk *clk;
|
||||
struct clk_init_data init;
|
||||
|
||||
cpu = kzalloc(sizeof(*cpu), GFP_KERNEL);
|
||||
if (!cpu)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
cpu->div = div;
|
||||
cpu->mux = mux;
|
||||
cpu->pll = pll;
|
||||
cpu->step = step;
|
||||
|
||||
init.name = name;
|
||||
init.ops = &clk_cpu_ops;
|
||||
init.flags = 0;
|
||||
init.parent_names = &parent_name;
|
||||
init.num_parents = 1;
|
||||
|
||||
cpu->hw.init = &init;
|
||||
|
||||
clk = clk_register(NULL, &cpu->hw);
|
||||
if (IS_ERR(clk))
|
||||
kfree(cpu);
|
||||
|
||||
return clk;
|
||||
}
|
|
@ -125,6 +125,8 @@ static const char *mx53_spdif_xtal_sel[] = { "osc", "ckih", "ckih2", "pll4_sw",
|
|||
static const char *spdif_sel[] = { "pll1_sw", "pll2_sw", "pll3_sw", "spdif_xtal_sel", };
|
||||
static const char *spdif0_com_sel[] = { "spdif0_podf", "ssi1_root_gate", };
|
||||
static const char *mx51_spdif1_com_sel[] = { "spdif1_podf", "ssi2_root_gate", };
|
||||
static const char *step_sels[] = { "lp_apm", };
|
||||
static const char *cpu_podf_sels[] = { "pll1_sw", "step_sel" };
|
||||
|
||||
static struct clk *clk[IMX5_CLK_END];
|
||||
static struct clk_onecell_data clk_data;
|
||||
|
@ -193,7 +195,9 @@ static void __init mx5_clocks_common_init(void __iomem *ccm_base)
|
|||
clk[IMX5_CLK_USB_PHY_PODF] = imx_clk_divider("usb_phy_podf", "usb_phy_pred", MXC_CCM_CDCDR, 0, 3);
|
||||
clk[IMX5_CLK_USB_PHY_SEL] = imx_clk_mux("usb_phy_sel", MXC_CCM_CSCMR1, 26, 1,
|
||||
usb_phy_sel_str, ARRAY_SIZE(usb_phy_sel_str));
|
||||
clk[IMX5_CLK_CPU_PODF] = imx_clk_divider("cpu_podf", "pll1_sw", MXC_CCM_CACRR, 0, 3);
|
||||
clk[IMX5_CLK_STEP_SEL] = imx_clk_mux("step_sel", MXC_CCM_CCSR, 7, 2, step_sels, ARRAY_SIZE(step_sels));
|
||||
clk[IMX5_CLK_CPU_PODF_SEL] = imx_clk_mux("cpu_podf_sel", MXC_CCM_CCSR, 2, 1, cpu_podf_sels, ARRAY_SIZE(cpu_podf_sels));
|
||||
clk[IMX5_CLK_CPU_PODF] = imx_clk_divider("cpu_podf", "cpu_podf_sel", MXC_CCM_CACRR, 0, 3);
|
||||
clk[IMX5_CLK_DI_PRED] = imx_clk_divider("di_pred", "pll3_sw", MXC_CCM_CDCDR, 6, 3);
|
||||
clk[IMX5_CLK_IIM_GATE] = imx_clk_gate2("iim_gate", "ipg", MXC_CCM_CCGR0, 30);
|
||||
clk[IMX5_CLK_UART1_IPG_GATE] = imx_clk_gate2("uart1_ipg_gate", "ipg", MXC_CCM_CCGR1, 6);
|
||||
|
@ -537,6 +541,11 @@ static void __init mx53_clocks_init(struct device_node *np)
|
|||
clk[IMX5_CLK_CKO2] = imx_clk_gate2("cko2", "cko2_podf", MXC_CCM_CCOSR, 24);
|
||||
clk[IMX5_CLK_SPDIF_XTAL_SEL] = imx_clk_mux("spdif_xtal_sel", MXC_CCM_CSCMR1, 2, 2,
|
||||
mx53_spdif_xtal_sel, ARRAY_SIZE(mx53_spdif_xtal_sel));
|
||||
clk[IMX5_CLK_ARM] = imx_clk_cpu("arm", "cpu_podf",
|
||||
clk[IMX5_CLK_CPU_PODF],
|
||||
clk[IMX5_CLK_CPU_PODF_SEL],
|
||||
clk[IMX5_CLK_PLL1_SW],
|
||||
clk[IMX5_CLK_STEP_SEL]);
|
||||
|
||||
imx_check_clocks(clk, ARRAY_SIZE(clk));
|
||||
|
||||
|
@ -551,6 +560,9 @@ static void __init mx53_clocks_init(struct device_node *np)
|
|||
/* move can bus clk to 24MHz */
|
||||
clk_set_parent(clk[IMX5_CLK_CAN_SEL], clk[IMX5_CLK_LP_APM]);
|
||||
|
||||
/* make sure step clock is running from 24MHz */
|
||||
clk_set_parent(clk[IMX5_CLK_STEP_SEL], clk[IMX5_CLK_LP_APM]);
|
||||
|
||||
clk_prepare_enable(clk[IMX5_CLK_IIM_GATE]);
|
||||
imx_print_silicon_rev("i.MX53", mx53_revision());
|
||||
clk_disable_unprepare(clk[IMX5_CLK_IIM_GATE]);
|
||||
|
|
|
@ -58,8 +58,14 @@
|
|||
#define PFD_PLL1_BASE (anatop_base + 0x2b0)
|
||||
#define PFD_PLL2_BASE (anatop_base + 0x100)
|
||||
#define PFD_PLL3_BASE (anatop_base + 0xf0)
|
||||
#define PLL1_CTRL (anatop_base + 0x270)
|
||||
#define PLL2_CTRL (anatop_base + 0x30)
|
||||
#define PLL3_CTRL (anatop_base + 0x10)
|
||||
#define PLL4_CTRL (anatop_base + 0x70)
|
||||
#define PLL5_CTRL (anatop_base + 0xe0)
|
||||
#define PLL6_CTRL (anatop_base + 0xa0)
|
||||
#define PLL7_CTRL (anatop_base + 0x20)
|
||||
#define ANA_MISC1 (anatop_base + 0x160)
|
||||
|
||||
static void __iomem *anatop_base;
|
||||
static void __iomem *ccm_base;
|
||||
|
@ -67,25 +73,34 @@ static void __iomem *ccm_base;
|
|||
/* sources for multiplexer clocks, this is used multiple times */
|
||||
static const char *fast_sels[] = { "firc", "fxosc", };
|
||||
static const char *slow_sels[] = { "sirc_32k", "sxosc", };
|
||||
static const char *pll1_sels[] = { "pll1_main", "pll1_pfd1", "pll1_pfd2", "pll1_pfd3", "pll1_pfd4", };
|
||||
static const char *pll2_sels[] = { "pll2_main", "pll2_pfd1", "pll2_pfd2", "pll2_pfd3", "pll2_pfd4", };
|
||||
static const char *sys_sels[] = { "fast_clk_sel", "slow_clk_sel", "pll2_pfd_sel", "pll2_main", "pll1_pfd_sel", "pll3_main", };
|
||||
static const char *pll1_sels[] = { "pll1_sys", "pll1_pfd1", "pll1_pfd2", "pll1_pfd3", "pll1_pfd4", };
|
||||
static const char *pll2_sels[] = { "pll2_bus", "pll2_pfd1", "pll2_pfd2", "pll2_pfd3", "pll2_pfd4", };
|
||||
static const char *pll_bypass_src_sels[] = { "fast_clk_sel", "lvds1_in", };
|
||||
static const char *pll1_bypass_sels[] = { "pll1", "pll1_bypass_src", };
|
||||
static const char *pll2_bypass_sels[] = { "pll2", "pll2_bypass_src", };
|
||||
static const char *pll3_bypass_sels[] = { "pll3", "pll3_bypass_src", };
|
||||
static const char *pll4_bypass_sels[] = { "pll4", "pll4_bypass_src", };
|
||||
static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", };
|
||||
static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", };
|
||||
static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", };
|
||||
static const char *sys_sels[] = { "fast_clk_sel", "slow_clk_sel", "pll2_pfd_sel", "pll2_bus", "pll1_pfd_sel", "pll3_usb_otg", };
|
||||
static const char *ddr_sels[] = { "pll2_pfd2", "sys_sel", };
|
||||
static const char *rmii_sels[] = { "enet_ext", "audio_ext", "enet_50m", "enet_25m", };
|
||||
static const char *enet_ts_sels[] = { "enet_ext", "fxosc", "audio_ext", "usb", "enet_ts", "enet_25m", "enet_50m", };
|
||||
static const char *esai_sels[] = { "audio_ext", "mlb", "spdif_rx", "pll4_main_div", };
|
||||
static const char *sai_sels[] = { "audio_ext", "mlb", "spdif_rx", "pll4_main_div", };
|
||||
static const char *esai_sels[] = { "audio_ext", "mlb", "spdif_rx", "pll4_audio_div", };
|
||||
static const char *sai_sels[] = { "audio_ext", "mlb", "spdif_rx", "pll4_audio_div", };
|
||||
static const char *nfc_sels[] = { "platform_bus", "pll1_pfd1", "pll3_pfd1", "pll3_pfd3", };
|
||||
static const char *qspi_sels[] = { "pll3_main", "pll3_pfd4", "pll2_pfd4", "pll1_pfd4", };
|
||||
static const char *esdhc_sels[] = { "pll3_main", "pll3_pfd3", "pll1_pfd3", "platform_bus", };
|
||||
static const char *dcu_sels[] = { "pll1_pfd2", "pll3_main", };
|
||||
static const char *qspi_sels[] = { "pll3_usb_otg", "pll3_pfd4", "pll2_pfd4", "pll1_pfd4", };
|
||||
static const char *esdhc_sels[] = { "pll3_usb_otg", "pll3_pfd3", "pll1_pfd3", "platform_bus", };
|
||||
static const char *dcu_sels[] = { "pll1_pfd2", "pll3_usb_otg", };
|
||||
static const char *gpu_sels[] = { "pll2_pfd2", "pll3_pfd2", };
|
||||
static const char *vadc_sels[] = { "pll6_main_div", "pll3_main_div", "pll3_main", };
|
||||
static const char *vadc_sels[] = { "pll6_video_div", "pll3_usb_otg_div", "pll3_usb_otg", };
|
||||
/* FTM counter clock source, not module clock */
|
||||
static const char *ftm_ext_sels[] = {"sirc_128k", "sxosc", "fxosc_half", "audio_ext", };
|
||||
static const char *ftm_fix_sels[] = { "sxosc", "ipg_bus", };
|
||||
|
||||
static struct clk_div_table pll4_main_div_table[] = {
|
||||
|
||||
static struct clk_div_table pll4_audio_div_table[] = {
|
||||
{ .val = 0, .div = 1 },
|
||||
{ .val = 1, .div = 2 },
|
||||
{ .val = 2, .div = 6 },
|
||||
|
@ -105,6 +120,17 @@ static unsigned int const clks_init_on[] __initconst = {
|
|||
VF610_CLK_DDR_SEL,
|
||||
};
|
||||
|
||||
static struct clk * __init vf610_get_fixed_clock(
|
||||
struct device_node *ccm_node, const char *name)
|
||||
{
|
||||
struct clk *clk = of_clk_get_by_name(ccm_node, name);
|
||||
|
||||
/* Backward compatibility if device tree is missing clks assignments */
|
||||
if (IS_ERR(clk))
|
||||
clk = imx_obtain_fixed_clock(name, 0);
|
||||
return clk;
|
||||
};
|
||||
|
||||
static void __init vf610_clocks_init(struct device_node *ccm_node)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
@ -115,10 +141,13 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_SIRC_32K] = imx_clk_fixed("sirc_32k", 32000);
|
||||
clk[VF610_CLK_FIRC] = imx_clk_fixed("firc", 24000000);
|
||||
|
||||
clk[VF610_CLK_SXOSC] = imx_obtain_fixed_clock("sxosc", 0);
|
||||
clk[VF610_CLK_FXOSC] = imx_obtain_fixed_clock("fxosc", 0);
|
||||
clk[VF610_CLK_AUDIO_EXT] = imx_obtain_fixed_clock("audio_ext", 0);
|
||||
clk[VF610_CLK_ENET_EXT] = imx_obtain_fixed_clock("enet_ext", 0);
|
||||
clk[VF610_CLK_SXOSC] = vf610_get_fixed_clock(ccm_node, "sxosc");
|
||||
clk[VF610_CLK_FXOSC] = vf610_get_fixed_clock(ccm_node, "fxosc");
|
||||
clk[VF610_CLK_AUDIO_EXT] = vf610_get_fixed_clock(ccm_node, "audio_ext");
|
||||
clk[VF610_CLK_ENET_EXT] = vf610_get_fixed_clock(ccm_node, "enet_ext");
|
||||
|
||||
/* Clock source from external clock via LVDs PAD */
|
||||
clk[VF610_CLK_ANACLK1] = vf610_get_fixed_clock(ccm_node, "anaclk1");
|
||||
|
||||
clk[VF610_CLK_FXOSC_HALF] = imx_clk_fixed_factor("fxosc_half", "fxosc", 1, 2);
|
||||
|
||||
|
@ -133,31 +162,63 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_SLOW_CLK_SEL] = imx_clk_mux("slow_clk_sel", CCM_CCSR, 4, 1, slow_sels, ARRAY_SIZE(slow_sels));
|
||||
clk[VF610_CLK_FASK_CLK_SEL] = imx_clk_mux("fast_clk_sel", CCM_CCSR, 5, 1, fast_sels, ARRAY_SIZE(fast_sels));
|
||||
|
||||
clk[VF610_CLK_PLL1_MAIN] = imx_clk_fixed_factor("pll1_main", "fast_clk_sel", 22, 1);
|
||||
clk[VF610_CLK_PLL1_PFD1] = imx_clk_pfd("pll1_pfd1", "pll1_main", PFD_PLL1_BASE, 0);
|
||||
clk[VF610_CLK_PLL1_PFD2] = imx_clk_pfd("pll1_pfd2", "pll1_main", PFD_PLL1_BASE, 1);
|
||||
clk[VF610_CLK_PLL1_PFD3] = imx_clk_pfd("pll1_pfd3", "pll1_main", PFD_PLL1_BASE, 2);
|
||||
clk[VF610_CLK_PLL1_PFD4] = imx_clk_pfd("pll1_pfd4", "pll1_main", PFD_PLL1_BASE, 3);
|
||||
clk[VF610_CLK_PLL1_BYPASS_SRC] = imx_clk_mux("pll1_bypass_src", PLL1_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL2_BYPASS_SRC] = imx_clk_mux("pll2_bypass_src", PLL2_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL3_BYPASS_SRC] = imx_clk_mux("pll3_bypass_src", PLL3_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL4_BYPASS_SRC] = imx_clk_mux("pll4_bypass_src", PLL4_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL5_BYPASS_SRC] = imx_clk_mux("pll5_bypass_src", PLL5_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL6_BYPASS_SRC] = imx_clk_mux("pll6_bypass_src", PLL6_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
clk[VF610_CLK_PLL7_BYPASS_SRC] = imx_clk_mux("pll7_bypass_src", PLL7_CTRL, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels));
|
||||
|
||||
clk[VF610_CLK_PLL2_MAIN] = imx_clk_fixed_factor("pll2_main", "fast_clk_sel", 22, 1);
|
||||
clk[VF610_CLK_PLL2_PFD1] = imx_clk_pfd("pll2_pfd1", "pll2_main", PFD_PLL2_BASE, 0);
|
||||
clk[VF610_CLK_PLL2_PFD2] = imx_clk_pfd("pll2_pfd2", "pll2_main", PFD_PLL2_BASE, 1);
|
||||
clk[VF610_CLK_PLL2_PFD3] = imx_clk_pfd("pll2_pfd3", "pll2_main", PFD_PLL2_BASE, 2);
|
||||
clk[VF610_CLK_PLL2_PFD4] = imx_clk_pfd("pll2_pfd4", "pll2_main", PFD_PLL2_BASE, 3);
|
||||
clk[VF610_CLK_PLL1] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll1", "pll1_bypass_src", PLL1_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL2] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2", "pll2_bypass_src", PLL2_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB, "pll3", "pll3_bypass_src", PLL3_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL4] = imx_clk_pllv3(IMX_PLLV3_AV, "pll4", "pll4_bypass_src", PLL4_CTRL, 0x7f);
|
||||
clk[VF610_CLK_PLL5] = imx_clk_pllv3(IMX_PLLV3_ENET, "pll5", "pll5_bypass_src", PLL5_CTRL, 0x3);
|
||||
clk[VF610_CLK_PLL6] = imx_clk_pllv3(IMX_PLLV3_AV, "pll6", "pll6_bypass_src", PLL6_CTRL, 0x7f);
|
||||
clk[VF610_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7", "pll7_bypass_src", PLL7_CTRL, 0x1);
|
||||
|
||||
clk[VF610_CLK_PLL3_MAIN] = imx_clk_fixed_factor("pll3_main", "fast_clk_sel", 20, 1);
|
||||
clk[VF610_CLK_PLL3_PFD1] = imx_clk_pfd("pll3_pfd1", "pll3_main", PFD_PLL3_BASE, 0);
|
||||
clk[VF610_CLK_PLL3_PFD2] = imx_clk_pfd("pll3_pfd2", "pll3_main", PFD_PLL3_BASE, 1);
|
||||
clk[VF610_CLK_PLL3_PFD3] = imx_clk_pfd("pll3_pfd3", "pll3_main", PFD_PLL3_BASE, 2);
|
||||
clk[VF610_CLK_PLL3_PFD4] = imx_clk_pfd("pll3_pfd4", "pll3_main", PFD_PLL3_BASE, 3);
|
||||
clk[VF610_PLL1_BYPASS] = imx_clk_mux_flags("pll1_bypass", PLL1_CTRL, 16, 1, pll1_bypass_sels, ARRAY_SIZE(pll1_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL2_BYPASS] = imx_clk_mux_flags("pll2_bypass", PLL2_CTRL, 16, 1, pll2_bypass_sels, ARRAY_SIZE(pll2_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL3_BYPASS] = imx_clk_mux_flags("pll3_bypass", PLL3_CTRL, 16, 1, pll3_bypass_sels, ARRAY_SIZE(pll3_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL4_BYPASS] = imx_clk_mux_flags("pll4_bypass", PLL4_CTRL, 16, 1, pll4_bypass_sels, ARRAY_SIZE(pll4_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL5_BYPASS] = imx_clk_mux_flags("pll5_bypass", PLL5_CTRL, 16, 1, pll5_bypass_sels, ARRAY_SIZE(pll5_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL6_BYPASS] = imx_clk_mux_flags("pll6_bypass", PLL6_CTRL, 16, 1, pll6_bypass_sels, ARRAY_SIZE(pll6_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", PLL7_CTRL, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
|
||||
clk[VF610_CLK_PLL4_MAIN] = imx_clk_fixed_factor("pll4_main", "fast_clk_sel", 25, 1);
|
||||
/* Enet pll: fixed 50Mhz */
|
||||
clk[VF610_CLK_PLL5_MAIN] = imx_clk_fixed_factor("pll5_main", "fast_clk_sel", 125, 6);
|
||||
/* pll6: default 960Mhz */
|
||||
clk[VF610_CLK_PLL6_MAIN] = imx_clk_fixed_factor("pll6_main", "fast_clk_sel", 40, 1);
|
||||
/* pll7: USB1 PLL at 480MHz */
|
||||
clk[VF610_CLK_PLL7_MAIN] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7_main", "fast_clk_sel", PLL7_CTRL, 0x2);
|
||||
/* Do not bypass PLLs initially */
|
||||
clk_set_parent(clk[VF610_PLL1_BYPASS], clk[VF610_CLK_PLL1]);
|
||||
clk_set_parent(clk[VF610_PLL2_BYPASS], clk[VF610_CLK_PLL2]);
|
||||
clk_set_parent(clk[VF610_PLL3_BYPASS], clk[VF610_CLK_PLL3]);
|
||||
clk_set_parent(clk[VF610_PLL4_BYPASS], clk[VF610_CLK_PLL4]);
|
||||
clk_set_parent(clk[VF610_PLL5_BYPASS], clk[VF610_CLK_PLL5]);
|
||||
clk_set_parent(clk[VF610_PLL6_BYPASS], clk[VF610_CLK_PLL6]);
|
||||
clk_set_parent(clk[VF610_PLL7_BYPASS], clk[VF610_CLK_PLL7]);
|
||||
|
||||
clk[VF610_CLK_PLL1_SYS] = imx_clk_gate("pll1_sys", "pll1_bypass", PLL1_CTRL, 13);
|
||||
clk[VF610_CLK_PLL2_BUS] = imx_clk_gate("pll2_bus", "pll2_bypass", PLL2_CTRL, 13);
|
||||
clk[VF610_CLK_PLL3_USB_OTG] = imx_clk_gate("pll3_usb_otg", "pll3_bypass", PLL3_CTRL, 13);
|
||||
clk[VF610_CLK_PLL4_AUDIO] = imx_clk_gate("pll4_audio", "pll4_bypass", PLL4_CTRL, 13);
|
||||
clk[VF610_CLK_PLL5_ENET] = imx_clk_gate("pll5_enet", "pll5_bypass", PLL5_CTRL, 13);
|
||||
clk[VF610_CLK_PLL6_VIDEO] = imx_clk_gate("pll6_video", "pll6_bypass", PLL6_CTRL, 13);
|
||||
clk[VF610_CLK_PLL7_USB_HOST] = imx_clk_gate("pll7_usb_host", "pll7_bypass", PLL7_CTRL, 13);
|
||||
|
||||
clk[VF610_CLK_LVDS1_IN] = imx_clk_gate_exclusive("lvds1_in", "anaclk1", ANA_MISC1, 12, BIT(10));
|
||||
|
||||
clk[VF610_CLK_PLL1_PFD1] = imx_clk_pfd("pll1_pfd1", "pll1_sys", PFD_PLL1_BASE, 0);
|
||||
clk[VF610_CLK_PLL1_PFD2] = imx_clk_pfd("pll1_pfd2", "pll1_sys", PFD_PLL1_BASE, 1);
|
||||
clk[VF610_CLK_PLL1_PFD3] = imx_clk_pfd("pll1_pfd3", "pll1_sys", PFD_PLL1_BASE, 2);
|
||||
clk[VF610_CLK_PLL1_PFD4] = imx_clk_pfd("pll1_pfd4", "pll1_sys", PFD_PLL1_BASE, 3);
|
||||
|
||||
clk[VF610_CLK_PLL2_PFD1] = imx_clk_pfd("pll2_pfd1", "pll2_bus", PFD_PLL2_BASE, 0);
|
||||
clk[VF610_CLK_PLL2_PFD2] = imx_clk_pfd("pll2_pfd2", "pll2_bus", PFD_PLL2_BASE, 1);
|
||||
clk[VF610_CLK_PLL2_PFD3] = imx_clk_pfd("pll2_pfd3", "pll2_bus", PFD_PLL2_BASE, 2);
|
||||
clk[VF610_CLK_PLL2_PFD4] = imx_clk_pfd("pll2_pfd4", "pll2_bus", PFD_PLL2_BASE, 3);
|
||||
|
||||
clk[VF610_CLK_PLL3_PFD1] = imx_clk_pfd("pll3_pfd1", "pll3_usb_otg", PFD_PLL3_BASE, 0);
|
||||
clk[VF610_CLK_PLL3_PFD2] = imx_clk_pfd("pll3_pfd2", "pll3_usb_otg", PFD_PLL3_BASE, 1);
|
||||
clk[VF610_CLK_PLL3_PFD3] = imx_clk_pfd("pll3_pfd3", "pll3_usb_otg", PFD_PLL3_BASE, 2);
|
||||
clk[VF610_CLK_PLL3_PFD4] = imx_clk_pfd("pll3_pfd4", "pll3_usb_otg", PFD_PLL3_BASE, 3);
|
||||
|
||||
clk[VF610_CLK_PLL1_PFD_SEL] = imx_clk_mux("pll1_pfd_sel", CCM_CCSR, 16, 3, pll1_sels, 5);
|
||||
clk[VF610_CLK_PLL2_PFD_SEL] = imx_clk_mux("pll2_pfd_sel", CCM_CCSR, 19, 3, pll2_sels, 5);
|
||||
|
@ -167,12 +228,12 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_PLATFORM_BUS] = imx_clk_divider("platform_bus", "sys_bus", CCM_CACRR, 3, 3);
|
||||
clk[VF610_CLK_IPG_BUS] = imx_clk_divider("ipg_bus", "platform_bus", CCM_CACRR, 11, 2);
|
||||
|
||||
clk[VF610_CLK_PLL3_MAIN_DIV] = imx_clk_divider("pll3_main_div", "pll3_main", CCM_CACRR, 20, 1);
|
||||
clk[VF610_CLK_PLL4_MAIN_DIV] = clk_register_divider_table(NULL, "pll4_main_div", "pll4_main", 0, CCM_CACRR, 6, 3, 0, pll4_main_div_table, &imx_ccm_lock);
|
||||
clk[VF610_CLK_PLL6_MAIN_DIV] = imx_clk_divider("pll6_main_div", "pll6_main", CCM_CACRR, 21, 1);
|
||||
clk[VF610_CLK_PLL3_MAIN_DIV] = imx_clk_divider("pll3_usb_otg_div", "pll3_usb_otg", CCM_CACRR, 20, 1);
|
||||
clk[VF610_CLK_PLL4_MAIN_DIV] = clk_register_divider_table(NULL, "pll4_audio_div", "pll4_audio", 0, CCM_CACRR, 6, 3, 0, pll4_audio_div_table, &imx_ccm_lock);
|
||||
clk[VF610_CLK_PLL6_MAIN_DIV] = imx_clk_divider("pll6_video_div", "pll6_video", CCM_CACRR, 21, 1);
|
||||
|
||||
clk[VF610_CLK_USBPHY0] = imx_clk_gate("usbphy0", "pll3_main", PLL3_CTRL, 6);
|
||||
clk[VF610_CLK_USBPHY1] = imx_clk_gate("usbphy1", "pll7_main", PLL7_CTRL, 6);
|
||||
clk[VF610_CLK_USBPHY0] = imx_clk_gate("usbphy0", "pll3_usb_otg", PLL3_CTRL, 6);
|
||||
clk[VF610_CLK_USBPHY1] = imx_clk_gate("usbphy1", "pll7_usb_host", PLL7_CTRL, 6);
|
||||
|
||||
clk[VF610_CLK_USBC0] = imx_clk_gate2("usbc0", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(4));
|
||||
clk[VF610_CLK_USBC1] = imx_clk_gate2("usbc1", "ipg_bus", CCM_CCGR7, CCM_CCGRx_CGn(4));
|
||||
|
@ -191,8 +252,8 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_QSPI1_X1_DIV] = imx_clk_divider("qspi1_x1", "qspi1_x2", CCM_CSCDR3, 11, 1);
|
||||
clk[VF610_CLK_QSPI1] = imx_clk_gate2("qspi1", "qspi1_x1", CCM_CCGR8, CCM_CCGRx_CGn(4));
|
||||
|
||||
clk[VF610_CLK_ENET_50M] = imx_clk_fixed_factor("enet_50m", "pll5_main", 1, 10);
|
||||
clk[VF610_CLK_ENET_25M] = imx_clk_fixed_factor("enet_25m", "pll5_main", 1, 20);
|
||||
clk[VF610_CLK_ENET_50M] = imx_clk_fixed_factor("enet_50m", "pll5_enet", 1, 10);
|
||||
clk[VF610_CLK_ENET_25M] = imx_clk_fixed_factor("enet_25m", "pll5_enet", 1, 20);
|
||||
clk[VF610_CLK_ENET_SEL] = imx_clk_mux("enet_sel", CCM_CSCMR2, 4, 2, rmii_sels, 4);
|
||||
clk[VF610_CLK_ENET_TS_SEL] = imx_clk_mux("enet_ts_sel", CCM_CSCMR2, 0, 3, enet_ts_sels, 7);
|
||||
clk[VF610_CLK_ENET] = imx_clk_gate("enet", "enet_sel", CCM_CSCDR1, 24);
|
||||
|
|
|
@ -131,4 +131,8 @@ static inline struct clk *imx_clk_fixed_factor(const char *name,
|
|||
CLK_SET_RATE_PARENT, mult, div);
|
||||
}
|
||||
|
||||
struct clk *imx_clk_cpu(const char *name, const char *parent_name,
|
||||
struct clk *div, struct clk *mux, struct clk *pll,
|
||||
struct clk *step);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -116,6 +116,7 @@ void imx_anatop_post_resume(void);
|
|||
int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode);
|
||||
void imx6q_set_int_mem_clk_lpm(bool enable);
|
||||
void imx6sl_set_wait_clk(bool enter);
|
||||
int imx_mmdc_get_ddr_type(void);
|
||||
|
||||
void imx_cpu_die(unsigned int cpu);
|
||||
int imx_cpu_kill(unsigned int cpu);
|
||||
|
@ -157,5 +158,6 @@ static inline void imx_init_l2cache(void) {}
|
|||
#endif
|
||||
|
||||
extern struct smp_operations imx_smp_ops;
|
||||
extern struct smp_operations ls1021a_smp_ops;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -41,6 +41,8 @@ static void __init imx53_dt_init(void)
|
|||
static void __init imx53_init_late(void)
|
||||
{
|
||||
imx53_pm_init();
|
||||
|
||||
platform_device_register_simple("cpufreq-dt", -1, NULL, 0);
|
||||
}
|
||||
|
||||
static const char * const imx53_dt_board_compat[] __initconst = {
|
||||
|
|
|
@ -8,12 +8,62 @@
|
|||
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "cpuidle.h"
|
||||
|
||||
static int ar8031_phy_fixup(struct phy_device *dev)
|
||||
{
|
||||
u16 val;
|
||||
|
||||
/* Set RGMII IO voltage to 1.8V */
|
||||
phy_write(dev, 0x1d, 0x1f);
|
||||
phy_write(dev, 0x1e, 0x8);
|
||||
|
||||
/* introduce tx clock delay */
|
||||
phy_write(dev, 0x1d, 0x5);
|
||||
val = phy_read(dev, 0x1e);
|
||||
val |= 0x0100;
|
||||
phy_write(dev, 0x1e, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define PHY_ID_AR8031 0x004dd074
|
||||
static void __init imx6sx_enet_phy_init(void)
|
||||
{
|
||||
if (IS_BUILTIN(CONFIG_PHYLIB))
|
||||
phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffff,
|
||||
ar8031_phy_fixup);
|
||||
}
|
||||
|
||||
static void __init imx6sx_enet_clk_sel(void)
|
||||
{
|
||||
struct regmap *gpr;
|
||||
|
||||
gpr = syscon_regmap_lookup_by_compatible("fsl,imx6sx-iomuxc-gpr");
|
||||
if (!IS_ERR(gpr)) {
|
||||
regmap_update_bits(gpr, IOMUXC_GPR1,
|
||||
IMX6SX_GPR1_FEC_CLOCK_MUX_SEL_MASK, 0);
|
||||
regmap_update_bits(gpr, IOMUXC_GPR1,
|
||||
IMX6SX_GPR1_FEC_CLOCK_PAD_DIR_MASK, 0);
|
||||
} else {
|
||||
pr_err("failed to find fsl,imx6sx-iomux-gpr regmap\n");
|
||||
}
|
||||
}
|
||||
|
||||
static inline void imx6sx_enet_init(void)
|
||||
{
|
||||
imx6sx_enet_phy_init();
|
||||
imx6sx_enet_clk_sel();
|
||||
}
|
||||
|
||||
static void __init imx6sx_init_machine(void)
|
||||
{
|
||||
struct device *parent;
|
||||
|
@ -26,6 +76,7 @@ static void __init imx6sx_init_machine(void)
|
|||
|
||||
of_platform_populate(NULL, of_default_bus_match_table, NULL, parent);
|
||||
|
||||
imx6sx_enet_init();
|
||||
imx_anatop_init();
|
||||
imx6sx_pm_init();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright 2013-2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static const char * const ls1021a_dt_compat[] __initconst = {
|
||||
"fsl,ls1021a",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(LS1021A, "Freescale LS1021A")
|
||||
.smp = smp_ops(ls1021a_smp_ops),
|
||||
.dt_compat = ls1021a_dt_compat,
|
||||
MACHINE_END
|
|
@ -21,6 +21,12 @@
|
|||
#define BP_MMDC_MAPSR_PSD 0
|
||||
#define BP_MMDC_MAPSR_PSS 4
|
||||
|
||||
#define MMDC_MDMISC 0x18
|
||||
#define BM_MMDC_MDMISC_DDR_TYPE 0x18
|
||||
#define BP_MMDC_MDMISC_DDR_TYPE 0x3
|
||||
|
||||
static int ddr_type;
|
||||
|
||||
static int imx_mmdc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
|
@ -31,6 +37,12 @@ static int imx_mmdc_probe(struct platform_device *pdev)
|
|||
mmdc_base = of_iomap(np, 0);
|
||||
WARN_ON(!mmdc_base);
|
||||
|
||||
reg = mmdc_base + MMDC_MDMISC;
|
||||
/* Get ddr type */
|
||||
val = readl_relaxed(reg);
|
||||
ddr_type = (val & BM_MMDC_MDMISC_DDR_TYPE) >>
|
||||
BP_MMDC_MDMISC_DDR_TYPE;
|
||||
|
||||
reg = mmdc_base + MMDC_MAPSR;
|
||||
|
||||
/* Enable automatic power saving */
|
||||
|
@ -51,6 +63,11 @@ static int imx_mmdc_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int imx_mmdc_get_ddr_type(void)
|
||||
{
|
||||
return ddr_type;
|
||||
}
|
||||
|
||||
static struct of_device_id imx_mmdc_dt_ids[] = {
|
||||
{ .compatible = "fsl,imx6q-mmdc", },
|
||||
{ /* sentinel */ }
|
||||
|
|
|
@ -55,6 +55,8 @@
|
|||
#define IMX_CHIP_REVISION_3_3 0x33
|
||||
#define IMX_CHIP_REVISION_UNKNOWN 0xff
|
||||
|
||||
#define IMX_DDR_TYPE_LPDDR2 1
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern unsigned int __mxc_cpu_type;
|
||||
#endif
|
||||
|
|
|
@ -11,7 +11,10 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/smp_scu.h>
|
||||
|
@ -94,3 +97,33 @@ struct smp_operations imx_smp_ops __initdata = {
|
|||
.cpu_kill = imx_cpu_kill,
|
||||
#endif
|
||||
};
|
||||
|
||||
#define DCFG_CCSR_SCRATCHRW1 0x200
|
||||
|
||||
static int ls1021a_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
{
|
||||
arch_send_wakeup_ipi_mask(cpumask_of(cpu));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init ls1021a_smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
struct device_node *np;
|
||||
void __iomem *dcfg_base;
|
||||
unsigned long paddr;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,ls1021a-dcfg");
|
||||
dcfg_base = of_iomap(np, 0);
|
||||
BUG_ON(!dcfg_base);
|
||||
|
||||
paddr = virt_to_phys(secondary_startup);
|
||||
writel_relaxed(cpu_to_be32(paddr), dcfg_base + DCFG_CCSR_SCRATCHRW1);
|
||||
|
||||
iounmap(dcfg_base);
|
||||
}
|
||||
|
||||
struct smp_operations ls1021a_smp_ops __initdata = {
|
||||
.smp_prepare_cpus = ls1021a_smp_prepare_cpus,
|
||||
.smp_boot_secondary = ls1021a_boot_secondary,
|
||||
};
|
||||
|
|
|
@ -88,7 +88,7 @@ struct imx6_pm_base {
|
|||
};
|
||||
|
||||
struct imx6_pm_socdata {
|
||||
u32 cpu_type;
|
||||
u32 ddr_type;
|
||||
const char *mmdc_compat;
|
||||
const char *src_compat;
|
||||
const char *iomuxc_compat;
|
||||
|
@ -138,7 +138,6 @@ static const u32 imx6sx_mmdc_io_offset[] __initconst = {
|
|||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6q_pm_data __initconst = {
|
||||
.cpu_type = MXC_CPU_IMX6Q,
|
||||
.mmdc_compat = "fsl,imx6q-mmdc",
|
||||
.src_compat = "fsl,imx6q-src",
|
||||
.iomuxc_compat = "fsl,imx6q-iomuxc",
|
||||
|
@ -148,7 +147,6 @@ static const struct imx6_pm_socdata imx6q_pm_data __initconst = {
|
|||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6dl_pm_data __initconst = {
|
||||
.cpu_type = MXC_CPU_IMX6DL,
|
||||
.mmdc_compat = "fsl,imx6q-mmdc",
|
||||
.src_compat = "fsl,imx6q-src",
|
||||
.iomuxc_compat = "fsl,imx6dl-iomuxc",
|
||||
|
@ -158,7 +156,6 @@ static const struct imx6_pm_socdata imx6dl_pm_data __initconst = {
|
|||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6sl_pm_data __initconst = {
|
||||
.cpu_type = MXC_CPU_IMX6SL,
|
||||
.mmdc_compat = "fsl,imx6sl-mmdc",
|
||||
.src_compat = "fsl,imx6sl-src",
|
||||
.iomuxc_compat = "fsl,imx6sl-iomuxc",
|
||||
|
@ -168,7 +165,6 @@ static const struct imx6_pm_socdata imx6sl_pm_data __initconst = {
|
|||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6sx_pm_data __initconst = {
|
||||
.cpu_type = MXC_CPU_IMX6SX,
|
||||
.mmdc_compat = "fsl,imx6sx-mmdc",
|
||||
.src_compat = "fsl,imx6sx-src",
|
||||
.iomuxc_compat = "fsl,imx6sx-iomuxc",
|
||||
|
@ -187,7 +183,7 @@ static const struct imx6_pm_socdata imx6sx_pm_data __initconst = {
|
|||
struct imx6_cpu_pm_info {
|
||||
phys_addr_t pbase; /* The physical address of pm_info. */
|
||||
phys_addr_t resume_addr; /* The physical resume address for asm code */
|
||||
u32 cpu_type;
|
||||
u32 ddr_type;
|
||||
u32 pm_info_size; /* Size of pm_info. */
|
||||
struct imx6_pm_base mmdc_base;
|
||||
struct imx6_pm_base src_base;
|
||||
|
@ -522,7 +518,7 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
|
|||
goto pl310_cache_map_failed;
|
||||
}
|
||||
|
||||
pm_info->cpu_type = socdata->cpu_type;
|
||||
pm_info->ddr_type = imx_mmdc_get_ddr_type();
|
||||
pm_info->mmdc_io_num = socdata->mmdc_io_num;
|
||||
mmdc_offset_array = socdata->mmdc_io_offset;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
*/
|
||||
#define PM_INFO_PBASE_OFFSET 0x0
|
||||
#define PM_INFO_RESUME_ADDR_OFFSET 0x4
|
||||
#define PM_INFO_CPU_TYPE_OFFSET 0x8
|
||||
#define PM_INFO_DDR_TYPE_OFFSET 0x8
|
||||
#define PM_INFO_PM_INFO_SIZE_OFFSET 0xC
|
||||
#define PM_INFO_MX6Q_MMDC_P_OFFSET 0x10
|
||||
#define PM_INFO_MX6Q_MMDC_V_OFFSET 0x14
|
||||
|
@ -110,7 +110,7 @@
|
|||
ldreq r11, [r0, #PM_INFO_MX6Q_MMDC_V_OFFSET]
|
||||
ldrne r11, [r0, #PM_INFO_MX6Q_MMDC_P_OFFSET]
|
||||
|
||||
cmp r3, #MXC_CPU_IMX6SL
|
||||
cmp r3, #IMX_DDR_TYPE_LPDDR2
|
||||
bne 4f
|
||||
|
||||
/* reset read FIFO, RST_RD_FIFO */
|
||||
|
@ -151,7 +151,7 @@
|
|||
ENTRY(imx6_suspend)
|
||||
ldr r1, [r0, #PM_INFO_PBASE_OFFSET]
|
||||
ldr r2, [r0, #PM_INFO_RESUME_ADDR_OFFSET]
|
||||
ldr r3, [r0, #PM_INFO_CPU_TYPE_OFFSET]
|
||||
ldr r3, [r0, #PM_INFO_DDR_TYPE_OFFSET]
|
||||
ldr r4, [r0, #PM_INFO_PM_INFO_SIZE_OFFSET]
|
||||
|
||||
/*
|
||||
|
@ -209,8 +209,8 @@ poll_dvfs_set:
|
|||
ldr r7, [r0, #PM_INFO_MMDC_IO_NUM_OFFSET]
|
||||
ldr r8, =PM_INFO_MMDC_IO_VAL_OFFSET
|
||||
add r8, r8, r0
|
||||
/* i.MX6SL's last 3 IOs need special setting */
|
||||
cmp r3, #MXC_CPU_IMX6SL
|
||||
/* LPDDR2's last 3 IOs need special setting */
|
||||
cmp r3, #IMX_DDR_TYPE_LPDDR2
|
||||
subeq r7, r7, #0x3
|
||||
set_mmdc_io_lpm:
|
||||
ldr r9, [r8], #0x8
|
||||
|
@ -218,7 +218,7 @@ set_mmdc_io_lpm:
|
|||
subs r7, r7, #0x1
|
||||
bne set_mmdc_io_lpm
|
||||
|
||||
cmp r3, #MXC_CPU_IMX6SL
|
||||
cmp r3, #IMX_DDR_TYPE_LPDDR2
|
||||
bne set_mmdc_io_lpm_done
|
||||
ldr r6, =0x1000
|
||||
ldr r9, [r8], #0x8
|
||||
|
@ -324,7 +324,7 @@ resume:
|
|||
str r7, [r11, #MX6Q_SRC_GPR1]
|
||||
str r7, [r11, #MX6Q_SRC_GPR2]
|
||||
|
||||
ldr r3, [r0, #PM_INFO_CPU_TYPE_OFFSET]
|
||||
ldr r3, [r0, #PM_INFO_DDR_TYPE_OFFSET]
|
||||
mov r5, #0x1
|
||||
resume_mmdc
|
||||
|
||||
|
|
|
@ -71,6 +71,15 @@ config POWER_RESET_HISI
|
|||
help
|
||||
Reboot support for Hisilicon boards.
|
||||
|
||||
config POWER_RESET_IMX
|
||||
bool "IMX6 power-off driver"
|
||||
depends on POWER_RESET && SOC_IMX6
|
||||
help
|
||||
This driver support power off external PMIC by PMIC_ON_REQ on i.mx6
|
||||
boards.If you want to use other pin to control external power,please
|
||||
say N here or disable in dts to make sure pm_power_off never be
|
||||
overwrote wrongly by this driver.
|
||||
|
||||
config POWER_RESET_MSM
|
||||
bool "Qualcomm MSM power-off driver"
|
||||
depends on ARCH_QCOM
|
||||
|
|
|
@ -6,6 +6,7 @@ obj-$(CONFIG_POWER_RESET_BRCMSTB) += brcmstb-reboot.o
|
|||
obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_GPIO_RESTART) += gpio-restart.o
|
||||
obj-$(CONFIG_POWER_RESET_HISI) += hisi-reboot.o
|
||||
obj-$(CONFIG_POWER_RESET_IMX) += imx-snvs-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_LTC2952) += ltc2952-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
/* Power off driver for i.mx6
|
||||
* Copyright (c) 2014, FREESCALE CORPORATION. All rights reserved.
|
||||
*
|
||||
* based on msm-poweroff.c
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
static void __iomem *snvs_base;
|
||||
|
||||
static void do_imx_poweroff(void)
|
||||
{
|
||||
u32 value = readl(snvs_base);
|
||||
|
||||
/* set TOP and DP_EN bit */
|
||||
writel(value | 0x60, snvs_base);
|
||||
}
|
||||
|
||||
static int imx_poweroff_probe(struct platform_device *pdev)
|
||||
{
|
||||
snvs_base = of_iomap(pdev->dev.of_node, 0);
|
||||
if (!snvs_base) {
|
||||
dev_err(&pdev->dev, "failed to get memory\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
pm_power_off = do_imx_poweroff;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_imx_poweroff_match[] = {
|
||||
{ .compatible = "fsl,sec-v4.0-poweroff", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, of_imx_poweroff_match);
|
||||
|
||||
static struct platform_driver imx_poweroff_driver = {
|
||||
.probe = imx_poweroff_probe,
|
||||
.driver = {
|
||||
.name = "imx-snvs-poweroff",
|
||||
.of_match_table = of_match_ptr(of_imx_poweroff_match),
|
||||
},
|
||||
};
|
||||
|
||||
static int __init imx_poweroff_init(void)
|
||||
{
|
||||
return platform_driver_register(&imx_poweroff_driver);
|
||||
}
|
||||
device_initcall(imx_poweroff_init);
|
|
@ -198,6 +198,9 @@
|
|||
#define IMX5_CLK_OCRAM 186
|
||||
#define IMX5_CLK_SAHARA_IPG_GATE 187
|
||||
#define IMX5_CLK_SATA_REF 188
|
||||
#define IMX5_CLK_END 189
|
||||
#define IMX5_CLK_STEP_SEL 189
|
||||
#define IMX5_CLK_CPU_PODF_SEL 190
|
||||
#define IMX5_CLK_ARM 191
|
||||
#define IMX5_CLK_END 192
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_IMX5_H */
|
||||
|
|
|
@ -21,24 +21,24 @@
|
|||
#define VF610_CLK_FASK_CLK_SEL 8
|
||||
#define VF610_CLK_AUDIO_EXT 9
|
||||
#define VF610_CLK_ENET_EXT 10
|
||||
#define VF610_CLK_PLL1_MAIN 11
|
||||
#define VF610_CLK_PLL1_SYS 11
|
||||
#define VF610_CLK_PLL1_PFD1 12
|
||||
#define VF610_CLK_PLL1_PFD2 13
|
||||
#define VF610_CLK_PLL1_PFD3 14
|
||||
#define VF610_CLK_PLL1_PFD4 15
|
||||
#define VF610_CLK_PLL2_MAIN 16
|
||||
#define VF610_CLK_PLL2_BUS 16
|
||||
#define VF610_CLK_PLL2_PFD1 17
|
||||
#define VF610_CLK_PLL2_PFD2 18
|
||||
#define VF610_CLK_PLL2_PFD3 19
|
||||
#define VF610_CLK_PLL2_PFD4 20
|
||||
#define VF610_CLK_PLL3_MAIN 21
|
||||
#define VF610_CLK_PLL3_USB_OTG 21
|
||||
#define VF610_CLK_PLL3_PFD1 22
|
||||
#define VF610_CLK_PLL3_PFD2 23
|
||||
#define VF610_CLK_PLL3_PFD3 24
|
||||
#define VF610_CLK_PLL3_PFD4 25
|
||||
#define VF610_CLK_PLL4_MAIN 26
|
||||
#define VF610_CLK_PLL5_MAIN 27
|
||||
#define VF610_CLK_PLL6_MAIN 28
|
||||
#define VF610_CLK_PLL4_AUDIO 26
|
||||
#define VF610_CLK_PLL5_ENET 27
|
||||
#define VF610_CLK_PLL6_VIDEO 28
|
||||
#define VF610_CLK_PLL3_MAIN_DIV 29
|
||||
#define VF610_CLK_PLL4_MAIN_DIV 30
|
||||
#define VF610_CLK_PLL6_MAIN_DIV 31
|
||||
|
@ -166,9 +166,32 @@
|
|||
#define VF610_CLK_DMAMUX3 153
|
||||
#define VF610_CLK_FLEXCAN0_EN 154
|
||||
#define VF610_CLK_FLEXCAN1_EN 155
|
||||
#define VF610_CLK_PLL7_MAIN 156
|
||||
#define VF610_CLK_PLL7_USB_HOST 156
|
||||
#define VF610_CLK_USBPHY0 157
|
||||
#define VF610_CLK_USBPHY1 158
|
||||
#define VF610_CLK_END 159
|
||||
#define VF610_CLK_LVDS1_IN 159
|
||||
#define VF610_CLK_ANACLK1 160
|
||||
#define VF610_CLK_PLL1_BYPASS_SRC 161
|
||||
#define VF610_CLK_PLL2_BYPASS_SRC 162
|
||||
#define VF610_CLK_PLL3_BYPASS_SRC 163
|
||||
#define VF610_CLK_PLL4_BYPASS_SRC 164
|
||||
#define VF610_CLK_PLL5_BYPASS_SRC 165
|
||||
#define VF610_CLK_PLL6_BYPASS_SRC 166
|
||||
#define VF610_CLK_PLL7_BYPASS_SRC 167
|
||||
#define VF610_CLK_PLL1 168
|
||||
#define VF610_CLK_PLL2 169
|
||||
#define VF610_CLK_PLL3 170
|
||||
#define VF610_CLK_PLL4 171
|
||||
#define VF610_CLK_PLL5 172
|
||||
#define VF610_CLK_PLL6 173
|
||||
#define VF610_CLK_PLL7 174
|
||||
#define VF610_PLL1_BYPASS 175
|
||||
#define VF610_PLL2_BYPASS 176
|
||||
#define VF610_PLL3_BYPASS 177
|
||||
#define VF610_PLL4_BYPASS 178
|
||||
#define VF610_PLL5_BYPASS 179
|
||||
#define VF610_PLL6_BYPASS 180
|
||||
#define VF610_PLL7_BYPASS 181
|
||||
#define VF610_CLK_END 182
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_VF610_H */
|
||||
|
|
|
@ -395,4 +395,43 @@
|
|||
#define IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK (0x3 << 17)
|
||||
#define IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK (0x1 << 14)
|
||||
|
||||
/* For imx6sx iomux gpr register field define */
|
||||
#define IMX6SX_GPR1_VDEC_SW_RST_MASK (0x1 << 20)
|
||||
#define IMX6SX_GPR1_VDEC_SW_RST_RESET (0x1 << 20)
|
||||
#define IMX6SX_GPR1_VDEC_SW_RST_RELEASE (0x0 << 20)
|
||||
#define IMX6SX_GPR1_VADC_SW_RST_MASK (0x1 << 19)
|
||||
#define IMX6SX_GPR1_VADC_SW_RST_RESET (0x1 << 19)
|
||||
#define IMX6SX_GPR1_VADC_SW_RST_RELEASE (0x0 << 19)
|
||||
#define IMX6SX_GPR1_FEC_CLOCK_MUX_SEL_MASK (0x3 << 13)
|
||||
#define IMX6SX_GPR1_FEC_CLOCK_PAD_DIR_MASK (0x3 << 17)
|
||||
#define IMX6SX_GPR1_FEC_CLOCK_MUX_SEL_EXT (0x3 << 13)
|
||||
|
||||
#define IMX6SX_GPR4_FEC_ENET1_STOP_REQ (0x1 << 3)
|
||||
#define IMX6SX_GPR4_FEC_ENET2_STOP_REQ (0x1 << 4)
|
||||
|
||||
#define IMX6SX_GPR5_DISP_MUX_LDB_CTRL_MASK (0x1 << 3)
|
||||
#define IMX6SX_GPR5_DISP_MUX_LDB_CTRL_LCDIF1 (0x0 << 3)
|
||||
#define IMX6SX_GPR5_DISP_MUX_LDB_CTRL_LCDIF2 (0x1 << 3)
|
||||
|
||||
#define IMX6SX_GPR5_CSI2_MUX_CTRL_MASK (0x3 << 27)
|
||||
#define IMX6SX_GPR5_CSI2_MUX_CTRL_EXT_PIN (0x0 << 27)
|
||||
#define IMX6SX_GPR5_CSI2_MUX_CTRL_CVD (0x1 << 27)
|
||||
#define IMX6SX_GPR5_CSI2_MUX_CTRL_VDAC_TO_CSI (0x2 << 27)
|
||||
#define IMX6SX_GPR5_CSI2_MUX_CTRL_GND (0x3 << 27)
|
||||
#define IMX6SX_GPR5_VADC_TO_CSI_CAPTURE_EN_MASK (0x1 << 26)
|
||||
#define IMX6SX_GPR5_VADC_TO_CSI_CAPTURE_EN_ENABLE (0x1 << 26)
|
||||
#define IMX6SX_GPR5_VADC_TO_CSI_CAPTURE_EN_DISABLE (0x0 << 26)
|
||||
#define IMX6SX_GPR5_CSI1_MUX_CTRL_MASK (0x3 << 4)
|
||||
#define IMX6SX_GPR5_CSI1_MUX_CTRL_EXT_PIN (0x0 << 4)
|
||||
#define IMX6SX_GPR5_CSI1_MUX_CTRL_CVD (0x1 << 4)
|
||||
#define IMX6SX_GPR5_CSI1_MUX_CTRL_VDAC_TO_CSI (0x2 << 4)
|
||||
#define IMX6SX_GPR5_CSI1_MUX_CTRL_GND (0x3 << 4)
|
||||
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC2_LCDIF2 (0x0 << 2)
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC2_LVDS (0x1 << 2)
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC2_MASK (0x1 << 2)
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC1_LCDIF1 (0x0 << 1)
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC1_LVDS (0x1 << 1)
|
||||
#define IMX6SX_GPR5_DISP_MUX_DCIC1_MASK (0x1 << 1)
|
||||
|
||||
#endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
|
||||
|
|
Loading…
Reference in New Issue