forked from luck/tmp_suning_uos_patched
ARM: SoC: late DT updates for v4.9
These updates have been kept in a separate branch mostly because they rely on updates to the respective clk drivers to keep the shared header files in sync. - The Renesas r8a7796 (R-Car M3-W) platform gets added, this is an automotive SoC similar to the ⅹ8a7795 chip we already support, but the dts changes rely on a clock driver change that has been merged for v4.9 through the clk tree. - The Amlogic meson-gxbb (S905) platform gains support for a few drivers merged through our tree, in particular the network and usb driver changes are required and included here, and also the clk tree changes. - The Allwinner platforms have seen a large-scale change to their clk drivers and the dts file updates must come after that. This includes the newly added Nextthing GR8 platform, which is derived from sun5i/A13. - Some integrator (arm32) changes rely on clk driver changes. - A single patch for lpc32xx has no such dependency but wasn't added until just before the merge window -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIVAwUAV/gzeGCrR//JCVInAQKVhw/5AS5R2S7m7VTlWMvGjvH9ITudYhiAGJP1 z5nP5SwJsfmSjfvw0kSxGUmsNS3rHutsPMz65EesKqFuC3LPZiqMUqrzxt9iqqJx I+XdAxDTnOE1RBZFtB9dL+qLzHQ87pMo6R9dfs32sxb3QuCQBYhcFyLmQDuZuHH0 yeDi3ARFvgxx/qoRUA7cnSlY5RLNzM44y+Ik/ZcVr4ReqYBC2g5mGi5htoiNSLWR nwWR+5hNLAp44OZgkZfNsf6kB9brWDQh3PbnBjy6sKXSBoSVIfxTweh2DMJXbZ7l 1Ck+S7WyLMhGJp448TcuBykr/l9i3uqNh061XavjwP8CAjAdZ787XlnNSztc2pyh dvbI/E76pLGb5ZoFdqlY2Syl63ZFN4K8mjZMSPYfYKf85EDIxe4MYwpbo7/pwzh3 8OlBwH6r4aUMw+QgE1nx8nsjaCoGDMFdgJeJJaWdriZ6Nst2n5gREk/mzbrAWkNG ujChn/6hES9LuE21aCp1ipB7qnnyeRinfqz2acEFxMQxuPdjwKrdJqNsBaTWsapE Z+b/BFP+LTdPfHCmMSVwfMrNbwsoY7+L4EXXL36lUgOwcDp0vCXA+PiiahYASewA 1LDQ3CURCEapdBhVU+06Kb4y5eWU7M7EqpOwpHgRJ92dVxgNxuCfcurvxzqPP1UP 3O4R7bfUTTg= =OmAu -----END PGP SIGNATURE----- Merge tag 'armsoc-late' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC late DT updates from Arnd Bergmann: "These updates have been kept in a separate branch mostly because they rely on updates to the respective clk drivers to keep the shared header files in sync. - The Renesas r8a7796 (R-Car M3-W) platform gets added, this is an automotive SoC similar to the ⅹ8a7795 chip we already support, but the dts changes rely on a clock driver change that has been merged for v4.9 through the clk tree. - The Amlogic meson-gxbb (S905) platform gains support for a few drivers merged through our tree, in particular the network and usb driver changes are required and included here, and also the clk tree changes. - The Allwinner platforms have seen a large-scale change to their clk drivers and the dts file updates must come after that. This includes the newly added Nextthing GR8 platform, which is derived from sun5i/A13. - Some integrator (arm32) changes rely on clk driver changes. - A single patch for lpc32xx has no such dependency but wasn't added until just before the merge window" * tag 'armsoc-late' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (99 commits) ARM: dts: lpc32xx: add device node for IRAM on-chip memory ARM: dts: sun8i: Add accelerometer to polaroid-mid2407pxe03 ARM: dts: sun8i: enable UART1 for iNet D978 Rev2 board ARM: dts: sun8i: add pinmux for UART1 at PG dts: sun8i-h3: add I2C0-2 peripherals to H3 SOC dts: sun8i-h3: add pinmux definitions for I2C0-2 dts: sun8i-h3: associate exposed UARTs on Orange Pi Boards dts: sun8i-h3: split off RTS/CTS for UART1 in seperate pinmux dts: sun8i-h3: add pinmux definitions for UART2-3 ARM: dts: sun9i: a80-optimus: Disable EHCI1 ARM: dts: sun9i: cubieboard4: Add AXP806 PMIC device node and regulators ARM: dts: sun9i: a80-optimus: Add AXP806 PMIC device node and regulators ARM: dts: sun9i: cubieboard4: Declare AXP809 SW regulator as unused ARM: dts: sun9i: a80-optimus: Declare AXP809 SW regulator as unused ARM: dts: sun8i: Add touchscreen node for sun8i-a33-ga10h ARM: dts: sun8i: Add touchscreen node for sun8i-a23-polaroid-mid2809pxe04 ARM: dts: sun8i: Add touchscreen node for sun8i-a23-polaroid-mid2407pxe03 ARM: dts: sun8i: Add touchscreen node for sun8i-a23-inet86dz ARM: dts: sun8i: Add touchscreen node for sun8i-a23-gt90h ARM64: dts: meson-gxbb-vega-s95: Enable USB Nodes ...
This commit is contained in:
commit
c913fc4146
|
@ -49,6 +49,8 @@ Boards:
|
|||
compatible = "renesas,genmai", "renesas,r7s72100"
|
||||
- Gose
|
||||
compatible = "renesas,gose", "renesas,r8a7793"
|
||||
- H3ULCB (RTP0RC7795SKB00010S)
|
||||
compatible = "renesas,h3ulcb", "renesas,r8a7795";
|
||||
- Henninger
|
||||
compatible = "renesas,henninger", "renesas,r8a7791"
|
||||
- Koelsch (RTP0RC7791SEB00010S)
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
* Amlogic Secure Monitor
|
||||
|
||||
In the Amlogic SoCs the Secure Monitor code is used to provide access to the
|
||||
NVMEM, enable JTAG, set USB boot, etc...
|
||||
|
||||
Required properties for the secure monitor node:
|
||||
- compatible: Should be "amlogic,meson-gxbb-sm"
|
||||
|
||||
Example:
|
||||
|
||||
firmware {
|
||||
sm: secure-monitor {
|
||||
compatible = "amlogic,meson-gxbb-sm";
|
||||
};
|
||||
};
|
|
@ -1,7 +1,10 @@
|
|||
* Amlogic Meson IR remote control receiver
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "amlogic,meson6-ir"
|
||||
- compatible : depending on the platform this should be one of:
|
||||
- "amlogic,meson6-ir"
|
||||
- "amlogic,meson8b-ir"
|
||||
- "amlogic,meson-gxbb-ir"
|
||||
- reg : physical base address and length of the device registers
|
||||
- interrupts : a single specifier for the interrupt from the device
|
||||
|
||||
|
|
|
@ -1,18 +1,32 @@
|
|||
* Amlogic Meson DWMAC Ethernet controller
|
||||
|
||||
The device inherits all the properties of the dwmac/stmmac devices
|
||||
described in the file net/stmmac.txt with the following changes.
|
||||
described in the file stmmac.txt in the current directory with the
|
||||
following changes.
|
||||
|
||||
Required properties:
|
||||
Required properties on all platforms:
|
||||
|
||||
- compatible: should be "amlogic,meson6-dwmac" along with "snps,dwmac"
|
||||
and any applicable more detailed version number
|
||||
described in net/stmmac.txt
|
||||
- compatible: Depending on the platform this should be one of:
|
||||
- "amlogic,meson6-dwmac"
|
||||
- "amlogic,meson8b-dwmac"
|
||||
- "amlogic,meson-gxbb-dwmac"
|
||||
Additionally "snps,dwmac" and any applicable more
|
||||
detailed version number described in net/stmmac.txt
|
||||
should be used.
|
||||
|
||||
- reg: should contain a register range for the dwmac controller and
|
||||
another one for the Amlogic specific configuration
|
||||
- reg: The first register range should be the one of the DWMAC
|
||||
controller. The second range is is for the Amlogic specific
|
||||
configuration (for example the PRG_ETHERNET register range
|
||||
on Meson8b and newer)
|
||||
|
||||
Example:
|
||||
Required properties on Meson8b and newer:
|
||||
- clock-names: Should contain the following:
|
||||
- "stmmaceth" - see stmmac.txt
|
||||
- "clkin0" - first parent clock of the internal mux
|
||||
- "clkin1" - second parent clock of the internal mux
|
||||
|
||||
|
||||
Example for Meson6:
|
||||
|
||||
ethmac: ethernet@c9410000 {
|
||||
compatible = "amlogic,meson6-dwmac", "snps,dwmac";
|
||||
|
@ -23,3 +37,18 @@ Example:
|
|||
clocks = <&clk81>;
|
||||
clock-names = "stmmaceth";
|
||||
}
|
||||
|
||||
Example for GXBB:
|
||||
ethmac: ethernet@c9410000 {
|
||||
compatible = "amlogic,meson-gxbb-dwmac", "snps,dwmac";
|
||||
reg = <0x0 0xc9410000 0x0 0x10000>,
|
||||
<0x0 0xc8834540 0x0 0x8>;
|
||||
interrupts = <0 8 1>;
|
||||
interrupt-names = "macirq";
|
||||
clocks = <&clkc CLKID_ETH>,
|
||||
<&clkc CLKID_FCLK_DIV2>,
|
||||
<&clkc CLKID_MPLL2>;
|
||||
clock-names = "stmmaceth", "clkin0", "clkin1";
|
||||
phy-mode = "rgmii";
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
39
Documentation/devicetree/bindings/nvmem/amlogic-efuse.txt
Normal file
39
Documentation/devicetree/bindings/nvmem/amlogic-efuse.txt
Normal file
|
@ -0,0 +1,39 @@
|
|||
= Amlogic eFuse device tree bindings =
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "amlogic,meson-gxbb-efuse"
|
||||
|
||||
= Data cells =
|
||||
Are child nodes of eFuse, bindings of which as described in
|
||||
bindings/nvmem/nvmem.txt
|
||||
|
||||
Example:
|
||||
|
||||
efuse: efuse {
|
||||
compatible = "amlogic,meson-gxbb-efuse";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
sn: sn@14 {
|
||||
reg = <0x14 0x10>;
|
||||
};
|
||||
|
||||
eth_mac: eth_mac@34 {
|
||||
reg = <0x34 0x10>;
|
||||
};
|
||||
|
||||
bid: bid@46 {
|
||||
reg = <0x46 0x30>;
|
||||
};
|
||||
};
|
||||
|
||||
= Data consumers =
|
||||
Are device nodes which consume nvmem data cells.
|
||||
|
||||
For example:
|
||||
|
||||
eth_mac {
|
||||
...
|
||||
nvmem-cells = <ð_mac>;
|
||||
nvmem-cell-names = "eth_mac";
|
||||
};
|
27
Documentation/devicetree/bindings/phy/meson-usb2-phy.txt
Normal file
27
Documentation/devicetree/bindings/phy/meson-usb2-phy.txt
Normal file
|
@ -0,0 +1,27 @@
|
|||
* Amlogic USB2 PHY
|
||||
|
||||
Required properties:
|
||||
- compatible: Depending on the platform this should be one of:
|
||||
"amlogic,meson8b-usb2-phy"
|
||||
"amlogic,meson-gxbb-usb2-phy"
|
||||
- reg: The base address and length of the registers
|
||||
- #phys-cells: should be 0 (see phy-bindings.txt in this directory)
|
||||
- clocks: phandle and clock identifier for the phy clocks
|
||||
- clock-names: "usb_general" and "usb"
|
||||
|
||||
Optional properties:
|
||||
- resets: reference to the reset controller
|
||||
- phy-supply: see phy-bindings.txt in this directory
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
usb0_phy: usb_phy@0 {
|
||||
compatible = "amlogic,meson-gxbb-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0x0 0x0 0x20>;
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB0>;
|
||||
clock-names = "usb_general", "usb";
|
||||
phy-supply = <&usb_vbus>;
|
||||
};
|
|
@ -10,6 +10,8 @@ Required properties:
|
|||
- "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc;
|
||||
- "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs;
|
||||
- "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs;
|
||||
- "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs;
|
||||
- "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs;
|
||||
- snps,dwc2: A generic DWC2 USB controller with default parameters.
|
||||
- reg : Should contain 1 register range (address and length)
|
||||
- interrupts : Should contain 1 interrupt
|
||||
|
|
|
@ -745,6 +745,7 @@ dtb-$(CONFIG_MACH_SUN4I) += \
|
|||
sun4i-a10-pcduino2.dtb \
|
||||
sun4i-a10-pov-protab2-ips9.dtb
|
||||
dtb-$(CONFIG_MACH_SUN5I) += \
|
||||
ntc-gr8-evb.dtb \
|
||||
sun5i-a10s-auxtek-t003.dtb \
|
||||
sun5i-a10s-auxtek-t004.dtb \
|
||||
sun5i-a10s-mk802.dtb \
|
||||
|
|
|
@ -19,7 +19,7 @@ chosen {
|
|||
bootargs = "root=/dev/ram0 console=ttyAM0,38400n8 earlyprintk";
|
||||
};
|
||||
|
||||
/* 24 MHz chrystal on the core module */
|
||||
/* 24 MHz chrystal on the Integrator/AP development board */
|
||||
xtal24mhz: xtal24mhz@24M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
|
@ -39,6 +39,34 @@ uartclk: uartclk@14.74M {
|
|||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <14745600>;
|
||||
clocks = <&xtal24mhz>;
|
||||
};
|
||||
|
||||
core-module@10000000 {
|
||||
/* 24 MHz chrystal on the core module */
|
||||
cm24mhz: cm24mhz@24M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
/* Oscillator on the core module, clocks the CPU core */
|
||||
cmosc: cmosc@24M {
|
||||
compatible = "arm,syscon-icst525-integratorap-cm";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x14>;
|
||||
vco-offset = <0x08>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
|
||||
/* Auxilary oscillator on the core module, 32.369MHz at boot */
|
||||
auxosc: auxosc@24M {
|
||||
compatible = "arm,syscon-icst525";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x14>;
|
||||
vco-offset = <0x1c>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
};
|
||||
|
||||
syscon {
|
||||
|
@ -47,6 +75,27 @@ syscon {
|
|||
interrupt-parent = <&pic>;
|
||||
/* These are the logical module IRQs */
|
||||
interrupts = <9>, <10>, <11>, <12>;
|
||||
|
||||
/*
|
||||
* SYSCLK clocks PCIv3 bridge, system controller and the
|
||||
* logic modules.
|
||||
*/
|
||||
sysclk: apsys@24M {
|
||||
compatible = "arm,syscon-icst525-integratorap-sys";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x1c>;
|
||||
vco-offset = <0x04>;
|
||||
clocks = <&xtal24mhz>;
|
||||
};
|
||||
|
||||
/* One-bit control for the PCI bus clock (33 or 25 MHz) */
|
||||
pciclk: pciclk@24M {
|
||||
compatible = "arm,syscon-icst525-integratorap-pci";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x1c>;
|
||||
vco-offset = <0x04>;
|
||||
clocks = <&xtal24mhz>;
|
||||
};
|
||||
};
|
||||
|
||||
timer0: timer@13000000 {
|
||||
|
|
|
@ -58,20 +58,37 @@ pclk: pclk@0 {
|
|||
|
||||
core-module@10000000 {
|
||||
/* 24 MHz chrystal on the core module */
|
||||
xtal24mhz: xtal24mhz@24M {
|
||||
cm24mhz: cm24mhz@24M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* External oscillator on the core module, usually used
|
||||
* to drive video circuitry. Driven from the 24MHz clock.
|
||||
*/
|
||||
auxosc: cm_aux_osc@25M {
|
||||
/* Oscillator on the core module, clocks the CPU core */
|
||||
cmcore: cmosc@24M {
|
||||
compatible = "arm,syscon-icst525-integratorcp-cm-core";
|
||||
#clock-cells = <0>;
|
||||
compatible = "arm,integrator-cm-auxosc";
|
||||
clocks = <&xtal24mhz>;
|
||||
lock-offset = <0x14>;
|
||||
vco-offset = <0x08>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
|
||||
/* Oscillator on the core module, clocks the memory bus */
|
||||
cmmem: cmosc@24M {
|
||||
compatible = "arm,syscon-icst525-integratorcp-cm-mem";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x14>;
|
||||
vco-offset = <0x08>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
|
||||
/* Auxilary oscillator on the core module, clocks the CLCD */
|
||||
auxosc: auxosc@24M {
|
||||
compatible = "arm,syscon-icst525";
|
||||
#clock-cells = <0>;
|
||||
lock-offset = <0x14>;
|
||||
vco-offset = <0x1c>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
|
||||
/* The KMI clock is the 24 MHz oscillator divided to 8MHz */
|
||||
|
@ -80,7 +97,7 @@ kmiclk: kmiclk@1M {
|
|||
compatible = "fixed-factor-clock";
|
||||
clock-div = <3>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&xtal24mhz>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
|
||||
/* The timer clock is the 24 MHz oscillator divided to 1MHz */
|
||||
|
@ -89,7 +106,7 @@ timclk: timclk@1M {
|
|||
compatible = "fixed-factor-clock";
|
||||
clock-div = <24>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&xtal24mhz>;
|
||||
clocks = <&cm24mhz>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -209,7 +226,42 @@ clcd@c0000000 {
|
|||
reg = <0xC0000000 0x1000>;
|
||||
interrupts = <22>;
|
||||
clocks = <&auxosc>, <&pclk>;
|
||||
clock-names = "clcd", "apb_pclk";
|
||||
clock-names = "clcdclk", "apb_pclk";
|
||||
|
||||
port {
|
||||
/*
|
||||
* The VGA connected is implemented with a
|
||||
* THS8134A triple DAC that can be run in 24bit
|
||||
* or 16bit RGB mode.
|
||||
*/
|
||||
clcd_pads: endpoint {
|
||||
remote-endpoint = <&clcd_panel>;
|
||||
arm,pl11x,tft-r0g0b0-pads = <1 7 13>;
|
||||
};
|
||||
};
|
||||
|
||||
panel {
|
||||
compatible = "panel-dpi";
|
||||
|
||||
port {
|
||||
clcd_panel: endpoint {
|
||||
remote-endpoint = <&clcd_pads>;
|
||||
};
|
||||
};
|
||||
|
||||
/* Standard 640x480 VGA timings */
|
||||
panel-timing {
|
||||
clock-frequency = <25175000>;
|
||||
hactive = <640>;
|
||||
hback-porch = <48>;
|
||||
hfront-porch = <16>;
|
||||
hsync-len = <96>;
|
||||
vactive = <480>;
|
||||
vback-porch = <33>;
|
||||
vfront-porch = <10>;
|
||||
vsync-len = <2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -51,9 +51,19 @@ ahb {
|
|||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x20000000 0x20000000 0x30000000>,
|
||||
ranges = <0x00000000 0x00000000 0x10000000>,
|
||||
<0x20000000 0x20000000 0x30000000>,
|
||||
<0xe0000000 0xe0000000 0x04000000>;
|
||||
|
||||
iram: sram@08000000 {
|
||||
compatible = "mmio-sram";
|
||||
reg = <0x08000000 0x20000>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0x00000000 0x08000000 0x20000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Enable either SLC or MLC
|
||||
*/
|
||||
|
|
342
arch/arm/boot/dts/ntc-gr8-evb.dts
Normal file
342
arch/arm/boot/dts/ntc-gr8-evb.dts
Normal file
|
@ -0,0 +1,342 @@
|
|||
/*
|
||||
* Copyright 2016 Free Electrons
|
||||
* Copyright 2016 NextThing Co
|
||||
*
|
||||
* Mylène Josserand <mylene.josserand@free-electrons.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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 "ntc-gr8.dtsi"
|
||||
#include "sunxi-common-regulators.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
/ {
|
||||
model = "NextThing GR8-EVB";
|
||||
compatible = "nextthing,gr8-evb", "nextthing,gr8";
|
||||
|
||||
aliases {
|
||||
i2c0 = &i2c0;
|
||||
i2c1 = &i2c1;
|
||||
i2c2 = &i2c2;
|
||||
serial0 = &uart1;
|
||||
serial1 = &uart2;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
backlight: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm 0 10000 0>;
|
||||
enable-gpios = <&axp_gpio 1 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
|
||||
default-brightness-level = <8>;
|
||||
};
|
||||
};
|
||||
|
||||
&be0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&codec {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ehci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
axp209: pmic@34 {
|
||||
reg = <0x34>;
|
||||
|
||||
/*
|
||||
* The interrupt is routed through the "External Fast
|
||||
* Interrupt Request" pin (ball G13 of the module)
|
||||
* directly to the main interrupt controller, without
|
||||
* any other controller interfering.
|
||||
*/
|
||||
interrupts = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include "axp209.dtsi"
|
||||
|
||||
&i2c1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins_a>;
|
||||
status = "okay";
|
||||
|
||||
wm8978: codec@1a {
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "wlf,wm8978";
|
||||
reg = <0x1a>;
|
||||
};
|
||||
|
||||
pcf8563: rtc@51 {
|
||||
compatible = "phg,pcf8563";
|
||||
reg = <0x51>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c2_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2s0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2s0_mclk_pins_a>, <&i2s0_data_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ir0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&ir0_rx_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lradc {
|
||||
vref-supply = <®_ldo2>;
|
||||
status = "okay";
|
||||
|
||||
button@190 {
|
||||
label = "Volume Up";
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
channel = <0>;
|
||||
voltage = <190000>;
|
||||
};
|
||||
|
||||
button@390 {
|
||||
label = "Volume Down";
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
channel = <0>;
|
||||
voltage = <390000>;
|
||||
};
|
||||
|
||||
button@600 {
|
||||
label = "Menu";
|
||||
linux,code = <KEY_MENU>;
|
||||
channel = <0>;
|
||||
voltage = <600000>;
|
||||
};
|
||||
|
||||
button@800 {
|
||||
label = "Search";
|
||||
linux,code = <KEY_SEARCH>;
|
||||
channel = <0>;
|
||||
voltage = <800000>;
|
||||
};
|
||||
|
||||
button@980 {
|
||||
label = "Home";
|
||||
linux,code = <KEY_HOMEPAGE>;
|
||||
channel = <0>;
|
||||
voltage = <980000>;
|
||||
};
|
||||
|
||||
button@1180 {
|
||||
label = "Esc";
|
||||
linux,code = <KEY_ESC>;
|
||||
channel = <0>;
|
||||
voltage = <1180000>;
|
||||
};
|
||||
|
||||
button@1400 {
|
||||
label = "Enter";
|
||||
linux,code = <KEY_ENTER>;
|
||||
channel = <0>;
|
||||
voltage = <1400000>;
|
||||
};
|
||||
};
|
||||
|
||||
&mmc0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_gr8_evb>;
|
||||
vmmc-supply = <®_vcc3v3>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&pio 6 0 GPIO_ACTIVE_HIGH>; /* PG0 */
|
||||
cd-inverted;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&nfc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&nand_pins_a &nand_cs0_pins_a &nand_rb0_pins_a>;
|
||||
|
||||
/* MLC Support sucks for now */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&ohci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&otg_sram {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pio {
|
||||
mmc0_cd_pin_gr8_evb: mmc0-cd-pin@0 {
|
||||
allwinner,pins = "PG0";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
usb0_id_pin_gr8_evb: usb0-id-pin@0 {
|
||||
allwinner,pins = "PG2";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
usb0_vbus_det_pin_gr8_evb: usb0-vbus-det-pin@0 {
|
||||
allwinner,pins = "PG1";
|
||||
allwinner,function = "gpio_in";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
usb1_vbus_pin_gr8_evb: usb1-vbus-pin@0 {
|
||||
allwinner,pins = "PG13";
|
||||
allwinner,function = "gpio_out";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
&pwm {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm0_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
®_dcdc2 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
regulator-name = "vdd-cpu";
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
®_dcdc3 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-name = "vdd-sys";
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
®_ldo1 {
|
||||
regulator-name = "vdd-rtc";
|
||||
};
|
||||
|
||||
®_ldo2 {
|
||||
regulator-min-microvolt = <2700000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "avcc";
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
®_usb1_vbus {
|
||||
pinctrl-0 = <&usb1_vbus_pin_gr8_evb>;
|
||||
gpio = <&pio 6 13 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtp {
|
||||
allwinner,ts-attached;
|
||||
};
|
||||
|
||||
&spdif {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spdif_tx_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&tve0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins_a>, <&uart1_cts_rts_pins_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_otg {
|
||||
/*
|
||||
* The GR8-EVB has a somewhat interesting design. There's a
|
||||
* pin supposed to control VBUS, an ID pin, a VBUS detect pin,
|
||||
* so everything should work just fine.
|
||||
*
|
||||
* Except that the pin supposed to control VBUS is not
|
||||
* connected to any controllable output, neither to the SoC
|
||||
* through a GPIO or to the PMIC, and it is pulled down,
|
||||
* meaning that we will never be able to enable VBUS on this
|
||||
* board.
|
||||
*/
|
||||
dr_mode = "otg";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_power_supply {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb0_id_pin_gr8_evb>, <&usb0_vbus_det_pin_gr8_evb>;
|
||||
usb0_id_det-gpio = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
|
||||
usb0_vbus_det-gpio = <&pio 6 1 GPIO_ACTIVE_HIGH>; /* PG1 */
|
||||
usb0_vbus_power-supply = <&usb_power_supply>;
|
||||
usb1_vbus-supply = <®_usb1_vbus>;
|
||||
status = "okay";
|
||||
};
|
1087
arch/arm/boot/dts/ntc-gr8.dtsi
Normal file
1087
arch/arm/boot/dts/ntc-gr8.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -47,7 +47,9 @@
|
|||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/thermal/thermal.h>
|
||||
|
||||
#include <dt-bindings/clock/sun6i-a31-ccu.h>
|
||||
#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
#include <dt-bindings/reset/sun6i-a31-ccu.h>
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
|
@ -65,7 +67,10 @@ simplefb_hdmi: framebuffer@0 {
|
|||
compatible = "allwinner,simple-framebuffer",
|
||||
"simple-framebuffer";
|
||||
allwinner,pipeline = "de_be0-lcd0-hdmi";
|
||||
clocks = <&pll6 0>;
|
||||
clocks = <&ccu CLK_AHB1_BE0>, <&ccu CLK_AHB1_LCD0>,
|
||||
<&ccu CLK_AHB1_HDMI>, <&ccu CLK_DRAM_BE0>,
|
||||
<&ccu CLK_IEP_DRC0>, <&ccu CLK_BE0>,
|
||||
<&ccu CLK_LCD0_CH1>, <&ccu CLK_HDMI>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -73,7 +78,9 @@ simplefb_lcd: framebuffer@1 {
|
|||
compatible = "allwinner,simple-framebuffer",
|
||||
"simple-framebuffer";
|
||||
allwinner,pipeline = "de_be0-lcd0";
|
||||
clocks = <&pll6 0>;
|
||||
clocks = <&ccu CLK_AHB1_BE0>, <&ccu CLK_AHB1_LCD0>,
|
||||
<&ccu CLK_DRAM_BE0>, <&ccu CLK_IEP_DRC0>,
|
||||
<&ccu CLK_BE0>, <&ccu CLK_LCD0_CH0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
@ -97,7 +104,7 @@ cpu0: cpu@0 {
|
|||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
clocks = <&cpu>;
|
||||
clocks = <&ccu CLK_CPU>;
|
||||
clock-latency = <244144>; /* 8 32k periods */
|
||||
operating-points = <
|
||||
/* kHz uV */
|
||||
|
@ -192,235 +199,6 @@ osc32k: clk@0 {
|
|||
clock-output-names = "osc32k";
|
||||
};
|
||||
|
||||
pll1: clk@01c20000 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun6i-a31-pll1-clk";
|
||||
reg = <0x01c20000 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-output-names = "pll1";
|
||||
};
|
||||
|
||||
pll6: clk@01c20028 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-pll6-clk";
|
||||
reg = <0x01c20028 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-output-names = "pll6", "pll6x2";
|
||||
};
|
||||
|
||||
cpu: cpu@01c20050 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-cpu-clk";
|
||||
reg = <0x01c20050 0x4>;
|
||||
|
||||
/*
|
||||
* PLL1 is listed twice here.
|
||||
* While it looks suspicious, it's actually documented
|
||||
* that way both in the datasheet and in the code from
|
||||
* Allwinner.
|
||||
*/
|
||||
clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
|
||||
clock-output-names = "cpu";
|
||||
};
|
||||
|
||||
axi: axi@01c20050 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-axi-clk";
|
||||
reg = <0x01c20050 0x4>;
|
||||
clocks = <&cpu>;
|
||||
clock-output-names = "axi";
|
||||
};
|
||||
|
||||
ahb1: ahb1@01c20054 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun6i-a31-ahb1-clk";
|
||||
reg = <0x01c20054 0x4>;
|
||||
clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>;
|
||||
clock-output-names = "ahb1";
|
||||
|
||||
/*
|
||||
* Clock AHB1 from PLL6, instead of CPU/AXI which
|
||||
* has rate changes due to cpufreq. Also the DMA
|
||||
* controller requires AHB1 clocked from PLL6.
|
||||
*/
|
||||
assigned-clocks = <&ahb1>;
|
||||
assigned-clock-parents = <&pll6 0>;
|
||||
};
|
||||
|
||||
ahb1_gates: clk@01c20060 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-ahb1-gates-clk";
|
||||
reg = <0x01c20060 0x8>;
|
||||
clocks = <&ahb1>;
|
||||
clock-indices = <1>, <5>,
|
||||
<6>, <8>, <9>,
|
||||
<10>, <11>, <12>,
|
||||
<13>, <14>,
|
||||
<17>, <18>, <19>,
|
||||
<20>, <21>, <22>,
|
||||
<23>, <24>, <26>,
|
||||
<27>, <29>,
|
||||
<30>, <31>, <32>,
|
||||
<36>, <37>, <40>,
|
||||
<43>, <44>, <45>,
|
||||
<46>, <47>, <50>,
|
||||
<52>, <55>, <56>,
|
||||
<57>, <58>;
|
||||
clock-output-names = "ahb1_mipidsi", "ahb1_ss",
|
||||
"ahb1_dma", "ahb1_mmc0", "ahb1_mmc1",
|
||||
"ahb1_mmc2", "ahb1_mmc3", "ahb1_nand1",
|
||||
"ahb1_nand0", "ahb1_sdram",
|
||||
"ahb1_gmac", "ahb1_ts", "ahb1_hstimer",
|
||||
"ahb1_spi0", "ahb1_spi1", "ahb1_spi2",
|
||||
"ahb1_spi3", "ahb1_otg", "ahb1_ehci0",
|
||||
"ahb1_ehci1", "ahb1_ohci0",
|
||||
"ahb1_ohci1", "ahb1_ohci2", "ahb1_ve",
|
||||
"ahb1_lcd0", "ahb1_lcd1", "ahb1_csi",
|
||||
"ahb1_hdmi", "ahb1_de0", "ahb1_de1",
|
||||
"ahb1_fe0", "ahb1_fe1", "ahb1_mp",
|
||||
"ahb1_gpu", "ahb1_deu0", "ahb1_deu1",
|
||||
"ahb1_drc0", "ahb1_drc1";
|
||||
};
|
||||
|
||||
apb1: apb1@01c20054 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-apb0-clk";
|
||||
reg = <0x01c20054 0x4>;
|
||||
clocks = <&ahb1>;
|
||||
clock-output-names = "apb1";
|
||||
};
|
||||
|
||||
apb1_gates: clk@01c20068 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-apb1-gates-clk";
|
||||
reg = <0x01c20068 0x4>;
|
||||
clocks = <&apb1>;
|
||||
clock-indices = <0>, <4>,
|
||||
<5>, <12>,
|
||||
<13>;
|
||||
clock-output-names = "apb1_codec", "apb1_digital_mic",
|
||||
"apb1_pio", "apb1_daudio0",
|
||||
"apb1_daudio1";
|
||||
};
|
||||
|
||||
apb2: clk@01c20058 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-apb1-clk";
|
||||
reg = <0x01c20058 0x4>;
|
||||
clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
|
||||
clock-output-names = "apb2";
|
||||
};
|
||||
|
||||
apb2_gates: clk@01c2006c {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-apb2-gates-clk";
|
||||
reg = <0x01c2006c 0x4>;
|
||||
clocks = <&apb2>;
|
||||
clock-indices = <0>, <1>,
|
||||
<2>, <3>, <16>,
|
||||
<17>, <18>, <19>,
|
||||
<20>, <21>;
|
||||
clock-output-names = "apb2_i2c0", "apb2_i2c1",
|
||||
"apb2_i2c2", "apb2_i2c3",
|
||||
"apb2_uart0", "apb2_uart1",
|
||||
"apb2_uart2", "apb2_uart3",
|
||||
"apb2_uart4", "apb2_uart5";
|
||||
};
|
||||
|
||||
mmc0_clk: clk@01c20088 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c20088 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc0",
|
||||
"mmc0_output",
|
||||
"mmc0_sample";
|
||||
};
|
||||
|
||||
mmc1_clk: clk@01c2008c {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c2008c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc1",
|
||||
"mmc1_output",
|
||||
"mmc1_sample";
|
||||
};
|
||||
|
||||
mmc2_clk: clk@01c20090 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c20090 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc2",
|
||||
"mmc2_output",
|
||||
"mmc2_sample";
|
||||
};
|
||||
|
||||
mmc3_clk: clk@01c20094 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c20094 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc3",
|
||||
"mmc3_output",
|
||||
"mmc3_sample";
|
||||
};
|
||||
|
||||
ss_clk: clk@01c2009c {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c2009c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "ss";
|
||||
};
|
||||
|
||||
spi0_clk: clk@01c200a0 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c200a0 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "spi0";
|
||||
};
|
||||
|
||||
spi1_clk: clk@01c200a4 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c200a4 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "spi1";
|
||||
};
|
||||
|
||||
spi2_clk: clk@01c200a8 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c200a8 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "spi2";
|
||||
};
|
||||
|
||||
spi3_clk: clk@01c200ac {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c200ac 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "spi3";
|
||||
};
|
||||
|
||||
usb_clk: clk@01c200cc {
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-usb-clk";
|
||||
reg = <0x01c200cc 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-indices = <8>, <9>, <10>,
|
||||
<16>, <17>,
|
||||
<18>;
|
||||
clock-output-names = "usb_phy0", "usb_phy1", "usb_phy2",
|
||||
"usb_ohci0", "usb_ohci1",
|
||||
"usb_ohci2";
|
||||
};
|
||||
|
||||
/*
|
||||
* The following two are dummy clocks, placeholders
|
||||
* used in the gmac_tx clock. The gmac driver will
|
||||
|
@ -463,23 +241,23 @@ dma: dma-controller@01c02000 {
|
|||
compatible = "allwinner,sun6i-a31-dma";
|
||||
reg = <0x01c02000 0x1000>;
|
||||
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 6>;
|
||||
resets = <&ahb1_rst 6>;
|
||||
clocks = <&ccu CLK_AHB1_DMA>;
|
||||
resets = <&ccu RST_AHB1_DMA>;
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
mmc0: mmc@01c0f000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c0f000 0x1000>;
|
||||
clocks = <&ahb1_gates 8>,
|
||||
<&mmc0_clk 0>,
|
||||
<&mmc0_clk 1>,
|
||||
<&mmc0_clk 2>;
|
||||
clocks = <&ccu CLK_AHB1_MMC0>,
|
||||
<&ccu CLK_MMC0>,
|
||||
<&ccu CLK_MMC0_OUTPUT>,
|
||||
<&ccu CLK_MMC0_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 8>;
|
||||
resets = <&ccu RST_AHB1_MMC0>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -490,15 +268,15 @@ mmc0: mmc@01c0f000 {
|
|||
mmc1: mmc@01c10000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c10000 0x1000>;
|
||||
clocks = <&ahb1_gates 9>,
|
||||
<&mmc1_clk 0>,
|
||||
<&mmc1_clk 1>,
|
||||
<&mmc1_clk 2>;
|
||||
clocks = <&ccu CLK_AHB1_MMC1>,
|
||||
<&ccu CLK_MMC1>,
|
||||
<&ccu CLK_MMC1_OUTPUT>,
|
||||
<&ccu CLK_MMC1_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 9>;
|
||||
resets = <&ccu RST_AHB1_MMC1>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -509,15 +287,15 @@ mmc1: mmc@01c10000 {
|
|||
mmc2: mmc@01c11000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c11000 0x1000>;
|
||||
clocks = <&ahb1_gates 10>,
|
||||
<&mmc2_clk 0>,
|
||||
<&mmc2_clk 1>,
|
||||
<&mmc2_clk 2>;
|
||||
clocks = <&ccu CLK_AHB1_MMC2>,
|
||||
<&ccu CLK_MMC2>,
|
||||
<&ccu CLK_MMC2_OUTPUT>,
|
||||
<&ccu CLK_MMC2_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 10>;
|
||||
resets = <&ccu RST_AHB1_MMC2>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -528,15 +306,15 @@ mmc2: mmc@01c11000 {
|
|||
mmc3: mmc@01c12000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c12000 0x1000>;
|
||||
clocks = <&ahb1_gates 11>,
|
||||
<&mmc3_clk 0>,
|
||||
<&mmc3_clk 1>,
|
||||
<&mmc3_clk 2>;
|
||||
clocks = <&ccu CLK_AHB1_MMC3>,
|
||||
<&ccu CLK_MMC3>,
|
||||
<&ccu CLK_MMC3_OUTPUT>,
|
||||
<&ccu CLK_MMC3_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 11>;
|
||||
resets = <&ccu RST_AHB1_MMC3>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -547,8 +325,8 @@ mmc3: mmc@01c12000 {
|
|||
usb_otg: usb@01c19000 {
|
||||
compatible = "allwinner,sun6i-a31-musb";
|
||||
reg = <0x01c19000 0x0400>;
|
||||
clocks = <&ahb1_gates 24>;
|
||||
resets = <&ahb1_rst 24>;
|
||||
clocks = <&ccu CLK_AHB1_OTG>;
|
||||
resets = <&ccu RST_AHB1_OTG>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mc";
|
||||
phys = <&usbphy 0>;
|
||||
|
@ -565,15 +343,15 @@ usbphy: phy@01c19400 {
|
|||
reg-names = "phy_ctrl",
|
||||
"pmu1",
|
||||
"pmu2";
|
||||
clocks = <&usb_clk 8>,
|
||||
<&usb_clk 9>,
|
||||
<&usb_clk 10>;
|
||||
clocks = <&ccu CLK_USB_PHY0>,
|
||||
<&ccu CLK_USB_PHY1>,
|
||||
<&ccu CLK_USB_PHY2>;
|
||||
clock-names = "usb0_phy",
|
||||
"usb1_phy",
|
||||
"usb2_phy";
|
||||
resets = <&usb_clk 0>,
|
||||
<&usb_clk 1>,
|
||||
<&usb_clk 2>;
|
||||
resets = <&ccu RST_USB_PHY0>,
|
||||
<&ccu RST_USB_PHY1>,
|
||||
<&ccu RST_USB_PHY2>;
|
||||
reset-names = "usb0_reset",
|
||||
"usb1_reset",
|
||||
"usb2_reset";
|
||||
|
@ -585,8 +363,8 @@ ehci0: usb@01c1a000 {
|
|||
compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
|
||||
reg = <0x01c1a000 0x100>;
|
||||
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 26>;
|
||||
resets = <&ahb1_rst 26>;
|
||||
clocks = <&ccu CLK_AHB1_EHCI0>;
|
||||
resets = <&ccu RST_AHB1_EHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
|
@ -596,8 +374,8 @@ ohci0: usb@01c1a400 {
|
|||
compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
|
||||
reg = <0x01c1a400 0x100>;
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 29>, <&usb_clk 16>;
|
||||
resets = <&ahb1_rst 29>;
|
||||
clocks = <&ccu CLK_AHB1_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
||||
resets = <&ccu RST_AHB1_OHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
|
@ -607,8 +385,8 @@ ehci1: usb@01c1b000 {
|
|||
compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
|
||||
reg = <0x01c1b000 0x100>;
|
||||
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 27>;
|
||||
resets = <&ahb1_rst 27>;
|
||||
clocks = <&ccu CLK_AHB1_EHCI1>;
|
||||
resets = <&ccu RST_AHB1_EHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
|
@ -618,8 +396,8 @@ ohci1: usb@01c1b400 {
|
|||
compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
|
||||
reg = <0x01c1b400 0x100>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 30>, <&usb_clk 17>;
|
||||
resets = <&ahb1_rst 30>;
|
||||
clocks = <&ccu CLK_AHB1_OHCI1>, <&ccu CLK_USB_OHCI1>;
|
||||
resets = <&ccu RST_AHB1_OHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
|
@ -629,11 +407,20 @@ ohci2: usb@01c1c400 {
|
|||
compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
|
||||
reg = <0x01c1c400 0x100>;
|
||||
interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 31>, <&usb_clk 18>;
|
||||
resets = <&ahb1_rst 31>;
|
||||
clocks = <&ccu CLK_AHB1_OHCI2>, <&ccu CLK_USB_OHCI2>;
|
||||
resets = <&ccu RST_AHB1_OHCI2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ccu: clock@01c20000 {
|
||||
compatible = "allwinner,sun6i-a31-ccu";
|
||||
reg = <0x01c20000 0x400>;
|
||||
clocks = <&osc24M>, <&osc32k>;
|
||||
clock-names = "hosc", "losc";
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
pio: pinctrl@01c20800 {
|
||||
compatible = "allwinner,sun6i-a31-pinctrl";
|
||||
reg = <0x01c20800 0x400>;
|
||||
|
@ -641,7 +428,7 @@ pio: pinctrl@01c20800 {
|
|||
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb1_gates 5>;
|
||||
clocks = <&ccu CLK_APB1_PIO>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
|
@ -762,24 +549,6 @@ gmac_pins_rgmii_a: gmac_rgmii@0 {
|
|||
};
|
||||
};
|
||||
|
||||
ahb1_rst: reset@01c202c0 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-ahb1-reset";
|
||||
reg = <0x01c202c0 0xc>;
|
||||
};
|
||||
|
||||
apb1_rst: reset@01c202d0 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-clock-reset";
|
||||
reg = <0x01c202d0 0x4>;
|
||||
};
|
||||
|
||||
apb2_rst: reset@01c202d8 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-clock-reset";
|
||||
reg = <0x01c202d8 0x4>;
|
||||
};
|
||||
|
||||
timer@01c20c00 {
|
||||
compatible = "allwinner,sun4i-a10-timer";
|
||||
reg = <0x01c20c00 0xa0>;
|
||||
|
@ -816,8 +585,8 @@ uart0: serial@01c28000 {
|
|||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 16>;
|
||||
resets = <&apb2_rst 16>;
|
||||
clocks = <&ccu CLK_APB2_UART0>;
|
||||
resets = <&ccu RST_APB2_UART0>;
|
||||
dmas = <&dma 6>, <&dma 6>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -829,8 +598,8 @@ uart1: serial@01c28400 {
|
|||
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 17>;
|
||||
resets = <&apb2_rst 17>;
|
||||
clocks = <&ccu CLK_APB2_UART1>;
|
||||
resets = <&ccu RST_APB2_UART1>;
|
||||
dmas = <&dma 7>, <&dma 7>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -842,8 +611,8 @@ uart2: serial@01c28800 {
|
|||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 18>;
|
||||
resets = <&apb2_rst 18>;
|
||||
clocks = <&ccu CLK_APB2_UART2>;
|
||||
resets = <&ccu RST_APB2_UART2>;
|
||||
dmas = <&dma 8>, <&dma 8>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -855,8 +624,8 @@ uart3: serial@01c28c00 {
|
|||
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 19>;
|
||||
resets = <&apb2_rst 19>;
|
||||
clocks = <&ccu CLK_APB2_UART3>;
|
||||
resets = <&ccu RST_APB2_UART3>;
|
||||
dmas = <&dma 9>, <&dma 9>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -868,8 +637,8 @@ uart4: serial@01c29000 {
|
|||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 20>;
|
||||
resets = <&apb2_rst 20>;
|
||||
clocks = <&ccu CLK_APB2_UART4>;
|
||||
resets = <&ccu RST_APB2_UART4>;
|
||||
dmas = <&dma 10>, <&dma 10>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -881,8 +650,8 @@ uart5: serial@01c29400 {
|
|||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 21>;
|
||||
resets = <&apb2_rst 21>;
|
||||
clocks = <&ccu CLK_APB2_UART5>;
|
||||
resets = <&ccu RST_APB2_UART5>;
|
||||
dmas = <&dma 22>, <&dma 22>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -892,8 +661,8 @@ i2c0: i2c@01c2ac00 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2ac00 0x400>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 0>;
|
||||
resets = <&apb2_rst 0>;
|
||||
clocks = <&ccu CLK_APB2_I2C0>;
|
||||
resets = <&ccu RST_APB2_I2C0>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -903,8 +672,8 @@ i2c1: i2c@01c2b000 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b000 0x400>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 1>;
|
||||
resets = <&apb2_rst 1>;
|
||||
clocks = <&ccu CLK_APB2_I2C1>;
|
||||
resets = <&ccu RST_APB2_I2C1>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -914,8 +683,8 @@ i2c2: i2c@01c2b400 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b400 0x400>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 2>;
|
||||
resets = <&apb2_rst 2>;
|
||||
clocks = <&ccu CLK_APB2_I2C2>;
|
||||
resets = <&ccu RST_APB2_I2C2>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -925,8 +694,8 @@ i2c3: i2c@01c2b800 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b800 0x400>;
|
||||
interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 3>;
|
||||
resets = <&apb2_rst 3>;
|
||||
clocks = <&ccu CLK_APB2_I2C3>;
|
||||
resets = <&ccu RST_APB2_I2C3>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -937,9 +706,9 @@ gmac: ethernet@01c30000 {
|
|||
reg = <0x01c30000 0x1054>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "macirq";
|
||||
clocks = <&ahb1_gates 17>, <&gmac_tx_clk>;
|
||||
clocks = <&ccu CLK_AHB1_EMAC>, <&gmac_tx_clk>;
|
||||
clock-names = "stmmaceth", "allwinner_gmac_tx";
|
||||
resets = <&ahb1_rst 17>;
|
||||
resets = <&ccu RST_AHB1_EMAC>;
|
||||
reset-names = "stmmaceth";
|
||||
snps,pbl = <2>;
|
||||
snps,fixed-burst;
|
||||
|
@ -953,9 +722,9 @@ crypto: crypto-engine@01c15000 {
|
|||
compatible = "allwinner,sun4i-a10-crypto";
|
||||
reg = <0x01c15000 0x1000>;
|
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 5>, <&ss_clk>;
|
||||
clocks = <&ccu CLK_AHB1_SS>, <&ccu CLK_SS>;
|
||||
clock-names = "ahb", "mod";
|
||||
resets = <&ahb1_rst 5>;
|
||||
resets = <&ccu RST_AHB1_SS>;
|
||||
reset-names = "ahb";
|
||||
};
|
||||
|
||||
|
@ -967,19 +736,19 @@ timer@01c60000 {
|
|||
<GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 19>;
|
||||
resets = <&ahb1_rst 19>;
|
||||
clocks = <&ccu CLK_AHB1_HSTIMER>;
|
||||
resets = <&ccu RST_AHB1_HSTIMER>;
|
||||
};
|
||||
|
||||
spi0: spi@01c68000 {
|
||||
compatible = "allwinner,sun6i-a31-spi";
|
||||
reg = <0x01c68000 0x1000>;
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 20>, <&spi0_clk>;
|
||||
clocks = <&ccu CLK_AHB1_SPI0>, <&ccu CLK_SPI0>;
|
||||
clock-names = "ahb", "mod";
|
||||
dmas = <&dma 23>, <&dma 23>;
|
||||
dma-names = "rx", "tx";
|
||||
resets = <&ahb1_rst 20>;
|
||||
resets = <&ccu RST_AHB1_SPI0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -987,11 +756,11 @@ spi1: spi@01c69000 {
|
|||
compatible = "allwinner,sun6i-a31-spi";
|
||||
reg = <0x01c69000 0x1000>;
|
||||
interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 21>, <&spi1_clk>;
|
||||
clocks = <&ccu CLK_AHB1_SPI1>, <&ccu CLK_SPI1>;
|
||||
clock-names = "ahb", "mod";
|
||||
dmas = <&dma 24>, <&dma 24>;
|
||||
dma-names = "rx", "tx";
|
||||
resets = <&ahb1_rst 21>;
|
||||
resets = <&ccu RST_AHB1_SPI1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -999,11 +768,11 @@ spi2: spi@01c6a000 {
|
|||
compatible = "allwinner,sun6i-a31-spi";
|
||||
reg = <0x01c6a000 0x1000>;
|
||||
interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 22>, <&spi2_clk>;
|
||||
clocks = <&ccu CLK_AHB1_SPI2>, <&ccu CLK_SPI2>;
|
||||
clock-names = "ahb", "mod";
|
||||
dmas = <&dma 25>, <&dma 25>;
|
||||
dma-names = "rx", "tx";
|
||||
resets = <&ahb1_rst 22>;
|
||||
resets = <&ccu RST_AHB1_SPI2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1011,11 +780,11 @@ spi3: spi@01c6b000 {
|
|||
compatible = "allwinner,sun6i-a31-spi";
|
||||
reg = <0x01c6b000 0x1000>;
|
||||
interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 23>, <&spi3_clk>;
|
||||
clocks = <&ccu CLK_AHB1_SPI3>, <&ccu CLK_SPI3>;
|
||||
clock-names = "ahb", "mod";
|
||||
dmas = <&dma 26>, <&dma 26>;
|
||||
dma-names = "rx", "tx";
|
||||
resets = <&ahb1_rst 23>;
|
||||
resets = <&ccu RST_AHB1_SPI3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1052,8 +821,9 @@ prcm@01f01400 {
|
|||
ar100: ar100_clk {
|
||||
compatible = "allwinner,sun6i-a31-ar100-clk";
|
||||
#clock-cells = <0>;
|
||||
clocks = <&osc32k>, <&osc24M>, <&pll6 0>,
|
||||
<&pll6 0>;
|
||||
clocks = <&osc32k>, <&osc24M>,
|
||||
<&ccu CLK_PLL_PERIPH>,
|
||||
<&ccu CLK_PLL_PERIPH>;
|
||||
clock-output-names = "ar100";
|
||||
};
|
||||
|
||||
|
|
|
@ -46,7 +46,9 @@
|
|||
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
#include <dt-bindings/clock/sun8i-a23-a33-ccu.h>
|
||||
#include <dt-bindings/pinctrl/sun4i-a10.h>
|
||||
#include <dt-bindings/reset/sun8i-a23-a33-ccu.h>
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
|
@ -60,7 +62,9 @@ simplefb_lcd: framebuffer@0 {
|
|||
compatible = "allwinner,simple-framebuffer",
|
||||
"simple-framebuffer";
|
||||
allwinner,pipeline = "de_be0-lcd0";
|
||||
clocks = <&pll6 0>;
|
||||
clocks = <&ccu CLK_BUS_LCD>, <&ccu CLK_BUS_DE_BE>,
|
||||
<&ccu CLK_LCD_CH0>, <&ccu CLK_DE_BE>,
|
||||
<&ccu CLK_DRAM_DE_BE>, <&ccu CLK_DRC>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
@ -111,151 +115,6 @@ osc32k: osc32k_clk {
|
|||
clock-frequency = <32768>;
|
||||
clock-output-names = "osc32k";
|
||||
};
|
||||
|
||||
pll1: clk@01c20000 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun8i-a23-pll1-clk";
|
||||
reg = <0x01c20000 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-output-names = "pll1";
|
||||
};
|
||||
|
||||
/* dummy clock until actually implemented */
|
||||
pll5: pll5_clk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <0>;
|
||||
clock-output-names = "pll5";
|
||||
};
|
||||
|
||||
pll6: clk@01c20028 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-pll6-clk";
|
||||
reg = <0x01c20028 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-output-names = "pll6", "pll6x2";
|
||||
};
|
||||
|
||||
cpu: cpu_clk@01c20050 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-cpu-clk";
|
||||
reg = <0x01c20050 0x4>;
|
||||
|
||||
/*
|
||||
* PLL1 is listed twice here.
|
||||
* While it looks suspicious, it's actually documented
|
||||
* that way both in the datasheet and in the code from
|
||||
* Allwinner.
|
||||
*/
|
||||
clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
|
||||
clock-output-names = "cpu";
|
||||
};
|
||||
|
||||
axi: axi_clk@01c20050 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun8i-a23-axi-clk";
|
||||
reg = <0x01c20050 0x4>;
|
||||
clocks = <&cpu>;
|
||||
clock-output-names = "axi";
|
||||
};
|
||||
|
||||
ahb1: ahb1_clk@01c20054 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun6i-a31-ahb1-clk";
|
||||
reg = <0x01c20054 0x4>;
|
||||
clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>;
|
||||
clock-output-names = "ahb1";
|
||||
};
|
||||
|
||||
apb1: apb1_clk@01c20054 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-apb0-clk";
|
||||
reg = <0x01c20054 0x4>;
|
||||
clocks = <&ahb1>;
|
||||
clock-output-names = "apb1";
|
||||
};
|
||||
|
||||
apb1_gates: clk@01c20068 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun8i-a23-apb1-gates-clk";
|
||||
reg = <0x01c20068 0x4>;
|
||||
clocks = <&apb1>;
|
||||
clock-indices = <0>, <5>,
|
||||
<12>, <13>;
|
||||
clock-output-names = "apb1_codec", "apb1_pio",
|
||||
"apb1_daudio0", "apb1_daudio1";
|
||||
};
|
||||
|
||||
apb2: clk@01c20058 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-apb1-clk";
|
||||
reg = <0x01c20058 0x4>;
|
||||
clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
|
||||
clock-output-names = "apb2";
|
||||
};
|
||||
|
||||
apb2_gates: clk@01c2006c {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun8i-a23-apb2-gates-clk";
|
||||
reg = <0x01c2006c 0x4>;
|
||||
clocks = <&apb2>;
|
||||
clock-indices = <0>, <1>,
|
||||
<2>, <16>,
|
||||
<17>, <18>,
|
||||
<19>, <20>;
|
||||
clock-output-names = "apb2_i2c0", "apb2_i2c1",
|
||||
"apb2_i2c2", "apb2_uart0",
|
||||
"apb2_uart1", "apb2_uart2",
|
||||
"apb2_uart3", "apb2_uart4";
|
||||
};
|
||||
|
||||
mmc0_clk: clk@01c20088 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c20088 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc0",
|
||||
"mmc0_output",
|
||||
"mmc0_sample";
|
||||
};
|
||||
|
||||
mmc1_clk: clk@01c2008c {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c2008c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc1",
|
||||
"mmc1_output",
|
||||
"mmc1_sample";
|
||||
};
|
||||
|
||||
mmc2_clk: clk@01c20090 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun4i-a10-mmc-clk";
|
||||
reg = <0x01c20090 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "mmc2",
|
||||
"mmc2_output",
|
||||
"mmc2_sample";
|
||||
};
|
||||
|
||||
nand_clk: clk@01c20080 {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c20080 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 1>;
|
||||
clock-output-names = "nand";
|
||||
};
|
||||
|
||||
usb_clk: clk@01c200cc {
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun8i-a23-usb-clk";
|
||||
reg = <0x01c200cc 0x4>;
|
||||
clocks = <&osc24M>;
|
||||
clock-output-names = "usb_phy0", "usb_phy1", "usb_hsic",
|
||||
"usb_hsic_12M", "usb_ohci0";
|
||||
};
|
||||
};
|
||||
|
||||
soc@01c00000 {
|
||||
|
@ -268,23 +127,23 @@ dma: dma-controller@01c02000 {
|
|||
compatible = "allwinner,sun8i-a23-dma";
|
||||
reg = <0x01c02000 0x1000>;
|
||||
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 6>;
|
||||
resets = <&ahb1_rst 6>;
|
||||
clocks = <&ccu CLK_BUS_DMA>;
|
||||
resets = <&ccu RST_BUS_DMA>;
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
mmc0: mmc@01c0f000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c0f000 0x1000>;
|
||||
clocks = <&ahb1_gates 8>,
|
||||
<&mmc0_clk 0>,
|
||||
<&mmc0_clk 1>,
|
||||
<&mmc0_clk 2>;
|
||||
clocks = <&ccu CLK_BUS_MMC0>,
|
||||
<&ccu CLK_MMC0>,
|
||||
<&ccu CLK_MMC0_OUTPUT>,
|
||||
<&ccu CLK_MMC0_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 8>;
|
||||
resets = <&ccu RST_BUS_MMC0>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -295,15 +154,15 @@ mmc0: mmc@01c0f000 {
|
|||
mmc1: mmc@01c10000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c10000 0x1000>;
|
||||
clocks = <&ahb1_gates 9>,
|
||||
<&mmc1_clk 0>,
|
||||
<&mmc1_clk 1>,
|
||||
<&mmc1_clk 2>;
|
||||
clocks = <&ccu CLK_BUS_MMC1>,
|
||||
<&ccu CLK_MMC1>,
|
||||
<&ccu CLK_MMC1_OUTPUT>,
|
||||
<&ccu CLK_MMC1_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 9>;
|
||||
resets = <&ccu RST_BUS_MMC1>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -314,15 +173,15 @@ mmc1: mmc@01c10000 {
|
|||
mmc2: mmc@01c11000 {
|
||||
compatible = "allwinner,sun7i-a20-mmc";
|
||||
reg = <0x01c11000 0x1000>;
|
||||
clocks = <&ahb1_gates 10>,
|
||||
<&mmc2_clk 0>,
|
||||
<&mmc2_clk 1>,
|
||||
<&mmc2_clk 2>;
|
||||
clocks = <&ccu CLK_BUS_MMC2>,
|
||||
<&ccu CLK_MMC2>,
|
||||
<&ccu CLK_MMC2_OUTPUT>,
|
||||
<&ccu CLK_MMC2_SAMPLE>;
|
||||
clock-names = "ahb",
|
||||
"mmc",
|
||||
"output",
|
||||
"sample";
|
||||
resets = <&ahb1_rst 10>;
|
||||
resets = <&ccu RST_BUS_MMC2>;
|
||||
reset-names = "ahb";
|
||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -334,21 +193,51 @@ nfc: nand@01c03000 {
|
|||
compatible = "allwinner,sun4i-a10-nand";
|
||||
reg = <0x01c03000 0x1000>;
|
||||
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 13>, <&nand_clk>;
|
||||
clocks = <&ccu CLK_BUS_NAND>, <&ccu CLK_NAND>;
|
||||
clock-names = "ahb", "mod";
|
||||
resets = <&ahb1_rst 13>;
|
||||
resets = <&ccu RST_BUS_NAND>;
|
||||
reset-names = "ahb";
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
usb_otg: usb@01c19000 {
|
||||
/* compatible gets set in SoC specific dtsi file */
|
||||
reg = <0x01c19000 0x0400>;
|
||||
clocks = <&ccu CLK_BUS_OTG>;
|
||||
resets = <&ccu RST_BUS_OTG>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mc";
|
||||
phys = <&usbphy 0>;
|
||||
phy-names = "usb";
|
||||
extcon = <&usbphy 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbphy: phy@01c19400 {
|
||||
/*
|
||||
* compatible and address regions get set in
|
||||
* SoC specific dtsi file
|
||||
*/
|
||||
clocks = <&ccu CLK_USB_PHY0>,
|
||||
<&ccu CLK_USB_PHY1>;
|
||||
clock-names = "usb0_phy",
|
||||
"usb1_phy";
|
||||
resets = <&ccu RST_USB_PHY0>,
|
||||
<&ccu RST_USB_PHY1>;
|
||||
reset-names = "usb0_reset",
|
||||
"usb1_reset";
|
||||
status = "disabled";
|
||||
#phy-cells = <1>;
|
||||
};
|
||||
|
||||
ehci0: usb@01c1a000 {
|
||||
compatible = "allwinner,sun8i-a23-ehci", "generic-ehci";
|
||||
reg = <0x01c1a000 0x100>;
|
||||
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 26>;
|
||||
resets = <&ahb1_rst 26>;
|
||||
clocks = <&ccu CLK_BUS_EHCI>;
|
||||
resets = <&ccu RST_BUS_EHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
|
@ -358,18 +247,26 @@ ohci0: usb@01c1a400 {
|
|||
compatible = "allwinner,sun8i-a23-ohci", "generic-ohci";
|
||||
reg = <0x01c1a400 0x100>;
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 29>, <&usb_clk 16>;
|
||||
resets = <&ahb1_rst 29>;
|
||||
clocks = <&ccu CLK_BUS_OHCI>, <&ccu CLK_USB_OHCI>;
|
||||
resets = <&ccu RST_BUS_OHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ccu: clock@01c20000 {
|
||||
reg = <0x01c20000 0x400>;
|
||||
clocks = <&osc24M>, <&osc32k>;
|
||||
clock-names = "hosc", "losc";
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
pio: pinctrl@01c20800 {
|
||||
/* compatible gets set in SoC specific dtsi file */
|
||||
reg = <0x01c20800 0x400>;
|
||||
/* interrupts get set in SoC specific dtsi file */
|
||||
clocks = <&apb1_gates 5>;
|
||||
clocks = <&ccu CLK_BUS_PIO>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
|
@ -382,6 +279,16 @@ uart0_pins_a: uart0@0 {
|
|||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
uart1_pins_a: uart1@0 {
|
||||
allwinner,pins = "PG6", "PG7";
|
||||
allwinner,function = "uart1";
|
||||
};
|
||||
|
||||
uart1_pins_cts_rts_a: uart1-cts-rts@0 {
|
||||
allwinner,pins = "PG8", "PG9";
|
||||
allwinner,function = "uart1";
|
||||
};
|
||||
|
||||
mmc0_pins_a: mmc0@0 {
|
||||
allwinner,pins = "PF0", "PF1", "PF2",
|
||||
"PF3", "PF4", "PF5";
|
||||
|
@ -435,24 +342,16 @@ i2c2_pins_a: i2c2@0 {
|
|||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb1_rst: reset@01c202c0 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-clock-reset";
|
||||
reg = <0x01c202c0 0xc>;
|
||||
};
|
||||
|
||||
apb1_rst: reset@01c202d0 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-clock-reset";
|
||||
reg = <0x01c202d0 0x4>;
|
||||
};
|
||||
|
||||
apb2_rst: reset@01c202d8 {
|
||||
#reset-cells = <1>;
|
||||
compatible = "allwinner,sun6i-a31-clock-reset";
|
||||
reg = <0x01c202d8 0x4>;
|
||||
lcd_rgb666_pins: lcd-rgb666@0 {
|
||||
allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
|
||||
"PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
|
||||
"PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
|
||||
"PD24", "PD25", "PD26", "PD27";
|
||||
allwinner,function = "lcd0";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
timer@01c20c00 {
|
||||
|
@ -490,8 +389,8 @@ uart0: serial@01c28000 {
|
|||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 16>;
|
||||
resets = <&apb2_rst 16>;
|
||||
clocks = <&ccu CLK_BUS_UART0>;
|
||||
resets = <&ccu RST_BUS_UART0>;
|
||||
dmas = <&dma 6>, <&dma 6>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -503,8 +402,8 @@ uart1: serial@01c28400 {
|
|||
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 17>;
|
||||
resets = <&apb2_rst 17>;
|
||||
clocks = <&ccu CLK_BUS_UART1>;
|
||||
resets = <&ccu RST_BUS_UART1>;
|
||||
dmas = <&dma 7>, <&dma 7>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -516,8 +415,8 @@ uart2: serial@01c28800 {
|
|||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 18>;
|
||||
resets = <&apb2_rst 18>;
|
||||
clocks = <&ccu CLK_BUS_UART2>;
|
||||
resets = <&ccu RST_BUS_UART2>;
|
||||
dmas = <&dma 8>, <&dma 8>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -529,8 +428,8 @@ uart3: serial@01c28c00 {
|
|||
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 19>;
|
||||
resets = <&apb2_rst 19>;
|
||||
clocks = <&ccu CLK_BUS_UART3>;
|
||||
resets = <&ccu RST_BUS_UART3>;
|
||||
dmas = <&dma 9>, <&dma 9>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -542,8 +441,8 @@ uart4: serial@01c29000 {
|
|||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&apb2_gates 20>;
|
||||
resets = <&apb2_rst 20>;
|
||||
clocks = <&ccu CLK_BUS_UART4>;
|
||||
resets = <&ccu RST_BUS_UART4>;
|
||||
dmas = <&dma 10>, <&dma 10>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
|
@ -553,8 +452,8 @@ i2c0: i2c@01c2ac00 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2ac00 0x400>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 0>;
|
||||
resets = <&apb2_rst 0>;
|
||||
clocks = <&ccu CLK_BUS_I2C0>;
|
||||
resets = <&ccu RST_BUS_I2C0>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -564,8 +463,8 @@ i2c1: i2c@01c2b000 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b000 0x400>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 1>;
|
||||
resets = <&apb2_rst 1>;
|
||||
clocks = <&ccu CLK_BUS_I2C1>;
|
||||
resets = <&ccu RST_BUS_I2C1>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -575,8 +474,8 @@ i2c2: i2c@01c2b400 {
|
|||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b400 0x400>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&apb2_gates 2>;
|
||||
resets = <&apb2_rst 2>;
|
||||
clocks = <&ccu CLK_BUS_I2C2>;
|
||||
resets = <&ccu RST_BUS_I2C2>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -53,6 +53,15 @@ &ehci0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&touchscreen {
|
||||
reg = <0x40>;
|
||||
compatible = "silead,gsl3675";
|
||||
firmware-name = "gsl3675-gt90h.fw";
|
||||
touchscreen-size-x = <1792>;
|
||||
touchscreen-size-y = <1024>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lradc {
|
||||
button@600 {
|
||||
label = "Back";
|
||||
|
|
|
@ -53,6 +53,15 @@ &ehci0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&touchscreen {
|
||||
reg = <0x40>;
|
||||
compatible = "silead,gsl1680";
|
||||
firmware-name = "gsl1680-inet86dz.fw";
|
||||
touchscreen-size-x = <960>;
|
||||
touchscreen-size-y = <640>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
usb1_vbus-supply = <®_dldo1>;
|
||||
};
|
||||
|
|
|
@ -62,6 +62,13 @@ wifi_pwrseq: wifi_pwrseq {
|
|||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
mma7660: accelerometer@4c {
|
||||
reg = <0x4c>;
|
||||
compatible = "fsl,mma7660";
|
||||
};
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mmc1_pins_a>;
|
||||
|
@ -90,3 +97,22 @@ wifi_pwrseq_pin_mid2407: wifi_pwrseq_pin@0 {
|
|||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
®_ldo_io1 {
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-touchscreen";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&touchscreen {
|
||||
reg = <0x40>;
|
||||
compatible = "silead,gsl1680";
|
||||
firmware-name = "gsl1680-polaroid-mid2407pxe03.fw";
|
||||
touchscreen-size-x = <960>;
|
||||
touchscreen-size-y = <640>;
|
||||
touchscreen-inverted-x;
|
||||
touchscreen-inverted-y;
|
||||
vddio-supply = <®_ldo_io1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -90,3 +90,12 @@ wifi_pwrseq_pin_mid2809: wifi_pwrseq_pin@0 {
|
|||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
&touchscreen {
|
||||
reg = <0x40>;
|
||||
compatible = "silead,gsl3670";
|
||||
firmware-name = "gsl3670-polaroid-mid2809pxe04.fw";
|
||||
touchscreen-size-x = <1660>;
|
||||
touchscreen-size-y = <890>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -48,74 +48,10 @@ / {
|
|||
memory {
|
||||
reg = <0x40000000 0x40000000>;
|
||||
};
|
||||
};
|
||||
|
||||
clocks {
|
||||
ahb1_gates: clk@01c20060 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun8i-a23-ahb1-gates-clk";
|
||||
reg = <0x01c20060 0x8>;
|
||||
clocks = <&ahb1>;
|
||||
clock-indices = <1>, <6>,
|
||||
<8>, <9>, <10>,
|
||||
<13>, <14>,
|
||||
<19>, <20>,
|
||||
<21>, <24>, <26>,
|
||||
<29>, <32>, <36>,
|
||||
<40>, <44>, <46>,
|
||||
<52>, <53>,
|
||||
<54>, <57>;
|
||||
clock-output-names = "ahb1_mipidsi", "ahb1_dma",
|
||||
"ahb1_mmc0", "ahb1_mmc1", "ahb1_mmc2",
|
||||
"ahb1_nand", "ahb1_sdram",
|
||||
"ahb1_hstimer", "ahb1_spi0",
|
||||
"ahb1_spi1", "ahb1_otg", "ahb1_ehci",
|
||||
"ahb1_ohci", "ahb1_ve", "ahb1_lcd",
|
||||
"ahb1_csi", "ahb1_be", "ahb1_fe",
|
||||
"ahb1_gpu", "ahb1_msgbox",
|
||||
"ahb1_spinlock", "ahb1_drc";
|
||||
};
|
||||
|
||||
mbus_clk: clk@01c2015c {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun8i-a23-mbus-clk";
|
||||
reg = <0x01c2015c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 1>, <&pll5>;
|
||||
clock-output-names = "mbus";
|
||||
};
|
||||
};
|
||||
|
||||
soc@01c00000 {
|
||||
usb_otg: usb@01c19000 {
|
||||
compatible = "allwinner,sun6i-a31-musb";
|
||||
reg = <0x01c19000 0x0400>;
|
||||
clocks = <&ahb1_gates 24>;
|
||||
resets = <&ahb1_rst 24>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mc";
|
||||
phys = <&usbphy 0>;
|
||||
phy-names = "usb";
|
||||
extcon = <&usbphy 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbphy: phy@01c19400 {
|
||||
compatible = "allwinner,sun8i-a23-usb-phy";
|
||||
reg = <0x01c19400 0x10>,
|
||||
<0x01c1a800 0x4>;
|
||||
reg-names = "phy_ctrl",
|
||||
"pmu1";
|
||||
clocks = <&usb_clk 8>,
|
||||
<&usb_clk 9>;
|
||||
clock-names = "usb0_phy",
|
||||
"usb1_phy";
|
||||
resets = <&usb_clk 0>,
|
||||
<&usb_clk 1>;
|
||||
reset-names = "usb0_reset",
|
||||
"usb1_reset";
|
||||
status = "disabled";
|
||||
#phy-cells = <1>;
|
||||
};
|
||||
};
|
||||
&ccu {
|
||||
compatible = "allwinner,sun8i-a23-ccu";
|
||||
};
|
||||
|
||||
&pio {
|
||||
|
@ -124,3 +60,13 @@ &pio {
|
|||
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&usb_otg {
|
||||
compatible = "allwinner,sun6i-a31-musb";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
compatible = "allwinner,sun8i-a23-usb-phy";
|
||||
reg = <0x01c19400 0x10>, <0x01c1a800 0x4>;
|
||||
reg-names = "phy_ctrl", "pmu1";
|
||||
};
|
||||
|
|
|
@ -58,6 +58,16 @@ &ehci0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&touchscreen {
|
||||
reg = <0x40>;
|
||||
compatible = "silead,gsl3675";
|
||||
firmware-name = "gsl3675-ga10h.fw";
|
||||
touchscreen-size-x = <1630>;
|
||||
touchscreen-size-y = <990>;
|
||||
touchscreen-inverted-y;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lradc {
|
||||
button@600 {
|
||||
label = "Back";
|
||||
|
|
|
@ -49,6 +49,15 @@ / {
|
|||
model = "INet-D978 Rev 02";
|
||||
compatible = "primux,inet-d978-rev2", "allwinner,sun8i-a33";
|
||||
|
||||
aliases {
|
||||
serial0 = &uart1;
|
||||
};
|
||||
|
||||
chosen {
|
||||
/* Delete debug UART as serial0 is the UART for bluetooth */
|
||||
/delete-property/stdout-path;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
|
@ -86,3 +95,14 @@ led_pin_d978: led_pin_d978@0 {
|
|||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
&r_uart {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins_a>,
|
||||
<&uart1_pins_cts_rts_a>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -59,107 +59,179 @@ cpu@3 {
|
|||
};
|
||||
};
|
||||
|
||||
de: display-engine {
|
||||
compatible = "allwinner,sun8i-a33-display-engine";
|
||||
allwinner,pipelines = <&fe0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x40000000 0x80000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
/* Dummy clock for pll11 (DDR1) until actually implemented */
|
||||
pll11: pll11_clk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <0>;
|
||||
clock-output-names = "pll11";
|
||||
};
|
||||
|
||||
ahb1_gates: clk@01c20060 {
|
||||
#clock-cells = <1>;
|
||||
compatible = "allwinner,sun8i-a33-ahb1-gates-clk";
|
||||
reg = <0x01c20060 0x8>;
|
||||
clocks = <&ahb1>;
|
||||
clock-indices = <1>, <5>,
|
||||
<6>, <8>, <9>,
|
||||
<10>, <13>, <14>,
|
||||
<19>, <20>,
|
||||
<21>, <24>, <26>,
|
||||
<29>, <32>, <36>,
|
||||
<40>, <44>, <46>,
|
||||
<52>, <53>,
|
||||
<54>, <57>,
|
||||
<58>;
|
||||
clock-output-names = "ahb1_mipidsi", "ahb1_ss",
|
||||
"ahb1_dma","ahb1_mmc0", "ahb1_mmc1",
|
||||
"ahb1_mmc2", "ahb1_nand", "ahb1_sdram",
|
||||
"ahb1_hstimer", "ahb1_spi0",
|
||||
"ahb1_spi1", "ahb1_otg", "ahb1_ehci",
|
||||
"ahb1_ohci", "ahb1_ve", "ahb1_lcd",
|
||||
"ahb1_csi", "ahb1_be", "ahb1_fe",
|
||||
"ahb1_gpu", "ahb1_msgbox",
|
||||
"ahb1_spinlock", "ahb1_drc",
|
||||
"ahb1_sat";
|
||||
};
|
||||
|
||||
ss_clk: clk@01c2009c {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun4i-a10-mod0-clk";
|
||||
reg = <0x01c2009c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 0>;
|
||||
clock-output-names = "ss";
|
||||
};
|
||||
|
||||
mbus_clk: clk@01c2015c {
|
||||
#clock-cells = <0>;
|
||||
compatible = "allwinner,sun8i-a23-mbus-clk";
|
||||
reg = <0x01c2015c 0x4>;
|
||||
clocks = <&osc24M>, <&pll6 1>, <&pll5>, <&pll11>;
|
||||
clock-output-names = "mbus";
|
||||
};
|
||||
};
|
||||
|
||||
soc@01c00000 {
|
||||
tcon0: lcd-controller@01c0c000 {
|
||||
compatible = "allwinner,sun8i-a33-tcon";
|
||||
reg = <0x01c0c000 0x1000>;
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_LCD>,
|
||||
<&ccu CLK_LCD_CH0>;
|
||||
clock-names = "ahb",
|
||||
"tcon-ch0";
|
||||
clock-output-names = "tcon-pixel-clock";
|
||||
resets = <&ccu RST_BUS_LCD>;
|
||||
reset-names = "lcd";
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
tcon0_in: port@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0>;
|
||||
|
||||
tcon0_in_drc0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&drc0_out_tcon0>;
|
||||
};
|
||||
};
|
||||
|
||||
tcon0_out: port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
crypto: crypto-engine@01c15000 {
|
||||
compatible = "allwinner,sun4i-a10-crypto";
|
||||
reg = <0x01c15000 0x1000>;
|
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ahb1_gates 5>, <&ss_clk>;
|
||||
clocks = <&ccu CLK_BUS_SS>, <&ccu CLK_SS>;
|
||||
clock-names = "ahb", "mod";
|
||||
resets = <&ahb1_rst 5>;
|
||||
resets = <&ccu RST_BUS_SS>;
|
||||
reset-names = "ahb";
|
||||
};
|
||||
|
||||
usb_otg: usb@01c19000 {
|
||||
compatible = "allwinner,sun8i-a33-musb";
|
||||
reg = <0x01c19000 0x0400>;
|
||||
clocks = <&ahb1_gates 24>;
|
||||
resets = <&ahb1_rst 24>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mc";
|
||||
phys = <&usbphy 0>;
|
||||
phy-names = "usb";
|
||||
extcon = <&usbphy 0>;
|
||||
fe0: display-frontend@01e00000 {
|
||||
compatible = "allwinner,sun8i-a33-display-frontend";
|
||||
reg = <0x01e00000 0x20000>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_DE_FE>, <&ccu CLK_DE_FE>,
|
||||
<&ccu CLK_DRAM_DE_FE>;
|
||||
clock-names = "ahb", "mod",
|
||||
"ram";
|
||||
resets = <&ccu RST_BUS_DE_FE>;
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
fe0_out: port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <1>;
|
||||
|
||||
fe0_out_be0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&be0_in_fe0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
usbphy: phy@01c19400 {
|
||||
compatible = "allwinner,sun8i-a33-usb-phy";
|
||||
reg = <0x01c19400 0x14>,
|
||||
<0x01c1a800 0x4>;
|
||||
reg-names = "phy_ctrl",
|
||||
"pmu1";
|
||||
clocks = <&usb_clk 8>,
|
||||
<&usb_clk 9>;
|
||||
clock-names = "usb0_phy",
|
||||
"usb1_phy";
|
||||
resets = <&usb_clk 0>,
|
||||
<&usb_clk 1>;
|
||||
reset-names = "usb0_reset",
|
||||
"usb1_reset";
|
||||
status = "disabled";
|
||||
#phy-cells = <1>;
|
||||
be0: display-backend@01e60000 {
|
||||
compatible = "allwinner,sun8i-a33-display-backend";
|
||||
reg = <0x01e60000 0x10000>, <0x01e80000 0x1000>;
|
||||
reg-names = "be", "sat";
|
||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_DE_BE>, <&ccu CLK_DE_BE>,
|
||||
<&ccu CLK_DRAM_DE_BE>, <&ccu CLK_BUS_SAT>;
|
||||
clock-names = "ahb", "mod",
|
||||
"ram", "sat";
|
||||
resets = <&ccu RST_BUS_DE_BE>, <&ccu RST_BUS_SAT>;
|
||||
reset-names = "be", "sat";
|
||||
assigned-clocks = <&ccu CLK_DE_BE>;
|
||||
assigned-clock-rates = <300000000>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
be0_in: port@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0>;
|
||||
|
||||
be0_in_fe0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&fe0_out_be0>;
|
||||
};
|
||||
};
|
||||
|
||||
be0_out: port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <1>;
|
||||
|
||||
be0_out_drc0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&drc0_in_be0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
drc0: drc@01e70000 {
|
||||
compatible = "allwinner,sun8i-a33-drc";
|
||||
reg = <0x01e70000 0x10000>;
|
||||
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_DRC>, <&ccu CLK_DRC>,
|
||||
<&ccu CLK_DRAM_DRC>;
|
||||
clock-names = "ahb", "mod", "ram";
|
||||
resets = <&ccu RST_BUS_DRC>;
|
||||
|
||||
assigned-clocks = <&ccu CLK_DRC>;
|
||||
assigned-clock-rates = <300000000>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
drc0_in: port@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0>;
|
||||
|
||||
drc0_in_be0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&be0_out_drc0>;
|
||||
};
|
||||
};
|
||||
|
||||
drc0_out: port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <1>;
|
||||
|
||||
drc0_out_tcon0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&tcon0_in_drc0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ccu {
|
||||
compatible = "allwinner,sun8i-a33-ccu";
|
||||
};
|
||||
|
||||
&pio {
|
||||
compatible = "allwinner,sun8i-a33-pinctrl";
|
||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
@ -173,3 +245,13 @@ uart0_pins_b: uart0@1 {
|
|||
};
|
||||
|
||||
};
|
||||
|
||||
&usb_otg {
|
||||
compatible = "allwinner,sun8i-a33-musb";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
compatible = "allwinner,sun8i-a33-usb-phy";
|
||||
reg = <0x01c19400 0x14>, <0x01c1a800 0x4>;
|
||||
reg-names = "phy_ctrl", "pmu1";
|
||||
};
|
||||
|
|
|
@ -185,7 +185,7 @@ &uart0 {
|
|||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins_a>;
|
||||
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
|
|
@ -186,6 +186,24 @@ &uart0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart3_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usb1_vbus_pin_a {
|
||||
allwinner,pins = "PG13";
|
||||
};
|
||||
|
|
|
@ -139,6 +139,24 @@ &uart0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart3_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
/* USB VBUS is always on */
|
||||
status = "okay";
|
||||
|
|
|
@ -161,6 +161,24 @@ &uart0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart1_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart2_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&uart3_pins>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbphy {
|
||||
/* USB VBUS is always on */
|
||||
status = "okay";
|
||||
|
|
|
@ -327,6 +327,27 @@ pio: pinctrl@01c20800 {
|
|||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
|
||||
i2c0_pins: i2c0 {
|
||||
allwinner,pins = "PA11", "PA12";
|
||||
allwinner,function = "i2c0";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
i2c1_pins: i2c1 {
|
||||
allwinner,pins = "PA18", "PA19";
|
||||
allwinner,function = "i2c1";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
i2c2_pins: i2c2 {
|
||||
allwinner,pins = "PE12", "PE13";
|
||||
allwinner,function = "i2c2";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
mmc0_pins_a: mmc0@0 {
|
||||
allwinner,pins = "PF0", "PF1", "PF2", "PF3",
|
||||
"PF4", "PF5";
|
||||
|
@ -367,12 +388,33 @@ uart0_pins_a: uart0@0 {
|
|||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
uart1_pins_a: uart1@0 {
|
||||
allwinner,pins = "PG6", "PG7", "PG8", "PG9";
|
||||
uart1_pins: uart1 {
|
||||
allwinner,pins = "PG6", "PG7";
|
||||
allwinner,function = "uart1";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
uart1_rts_cts_pins: uart1_rts_cts {
|
||||
allwinner,pins = "PG8", "PG9";
|
||||
allwinner,function = "uart1";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
uart2_pins: uart2 {
|
||||
allwinner,pins = "PA0", "PA1";
|
||||
allwinner,function = "uart2";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
|
||||
uart3_pins: uart3 {
|
||||
allwinner,pins = "PG13", "PG14";
|
||||
allwinner,function = "uart3";
|
||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||
};
|
||||
};
|
||||
|
||||
timer@01c20c00 {
|
||||
|
@ -449,6 +491,45 @@ uart3: serial@01c28c00 {
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@01c2ac00 {
|
||||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2ac00 0x400>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_I2C0>;
|
||||
resets = <&ccu RST_BUS_I2C0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
i2c1: i2c@01c2b000 {
|
||||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b000 0x400>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_I2C1>;
|
||||
resets = <&ccu RST_BUS_I2C1>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
i2c2: i2c@01c2b400 {
|
||||
compatible = "allwinner,sun6i-a31-i2c";
|
||||
reg = <0x01c2b000 0x400>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_BUS_I2C2>;
|
||||
resets = <&ccu RST_BUS_I2C2>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c2_pins>;
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
gic: interrupt-controller@01c81000 {
|
||||
compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
|
||||
reg = <0x01c81000 0x1000>,
|
||||
|
|
|
@ -253,6 +253,122 @@ reg_ldo_io1: ldo_io1 {
|
|||
reg_rtc_ldo: rtc_ldo {
|
||||
regulator-name = "vcc-rtc-vdd1v8-io";
|
||||
};
|
||||
|
||||
sw {
|
||||
/* unused */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
axp806: pmic@745 {
|
||||
compatible = "x-powers,axp806";
|
||||
reg = <0x745>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
bldoin-supply = <®_dcdce>;
|
||||
|
||||
regulators {
|
||||
reg_s_aldo1: aldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "avcc";
|
||||
};
|
||||
|
||||
aldo2 {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's aldo's
|
||||
*/
|
||||
regulator-name = "s_aldo2";
|
||||
};
|
||||
|
||||
aldo3 {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's aldo's
|
||||
*/
|
||||
regulator-name = "s_aldo3";
|
||||
};
|
||||
|
||||
reg_bldo1: bldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-name = "vcc18-efuse-adc-display-csi";
|
||||
};
|
||||
|
||||
reg_bldo2: bldo2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-name =
|
||||
"vdd18-drampll-vcc18-pll-cpvdd";
|
||||
};
|
||||
|
||||
bldo3 {
|
||||
/* unused */
|
||||
};
|
||||
|
||||
reg_bldo4: bldo4 {
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-name = "vcc12-hsic";
|
||||
};
|
||||
|
||||
reg_cldo1: cldo1 {
|
||||
/*
|
||||
* This was 3V in the original design, but
|
||||
* 3.3V is the recommended supply voltage
|
||||
* for the Ethernet PHY.
|
||||
*/
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-gmac-phy";
|
||||
};
|
||||
|
||||
reg_cldo2: cldo2 {
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-name = "afvcc-cam";
|
||||
};
|
||||
|
||||
reg_cldo3: cldo3 {
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-io-wifi-codec-io2";
|
||||
};
|
||||
|
||||
reg_dcdca: dcdca {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
};
|
||||
|
||||
reg_dcdcd: dcdcd {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-name = "vdd-vpu";
|
||||
};
|
||||
|
||||
reg_dcdce: dcdce {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2100000>;
|
||||
regulator-max-microvolt = <2100000>;
|
||||
regulator-name = "vcc-bldo-codec-ldoin";
|
||||
};
|
||||
|
||||
sw {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's sw
|
||||
*/
|
||||
regulator-name = "s_sw";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -112,7 +112,8 @@ &ehci0 {
|
|||
};
|
||||
|
||||
&ehci1 {
|
||||
status = "okay";
|
||||
/* Enable if HSIC peripheral is connected */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&ehci2 {
|
||||
|
@ -325,6 +326,122 @@ reg_ldo_io1: ldo_io1 {
|
|||
reg_rtc_ldo: rtc_ldo {
|
||||
regulator-name = "vcc-rtc-vdd1v8-io";
|
||||
};
|
||||
|
||||
sw {
|
||||
/* unused */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
axp806: pmic@745 {
|
||||
compatible = "x-powers,axp806";
|
||||
reg = <0x745>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
bldoin-supply = <®_dcdce>;
|
||||
|
||||
regulators {
|
||||
reg_s_aldo1: aldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "avcc";
|
||||
};
|
||||
|
||||
aldo2 {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's aldo's
|
||||
*/
|
||||
regulator-name = "s_aldo2";
|
||||
};
|
||||
|
||||
aldo3 {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's aldo's
|
||||
*/
|
||||
regulator-name = "s_aldo3";
|
||||
};
|
||||
|
||||
reg_bldo1: bldo1 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-name = "vcc18-efuse-adc-display-csi";
|
||||
};
|
||||
|
||||
reg_bldo2: bldo2 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-name =
|
||||
"vdd18-drampll-vcc18-pll-cpvdd";
|
||||
};
|
||||
|
||||
bldo3 {
|
||||
/* unused */
|
||||
};
|
||||
|
||||
reg_bldo4: bldo4 {
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-name = "vcc12-hsic";
|
||||
};
|
||||
|
||||
reg_cldo1: cldo1 {
|
||||
/*
|
||||
* This was 3V in the original design, but
|
||||
* 3.3V is the recommended supply voltage
|
||||
* for the Ethernet PHY.
|
||||
*/
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "vcc-gmac-phy";
|
||||
};
|
||||
|
||||
reg_cldo2: cldo2 {
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-name = "afvcc-cam";
|
||||
};
|
||||
|
||||
reg_cldo3: cldo3 {
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-name = "vcc-io-wifi-codec-io2";
|
||||
};
|
||||
|
||||
reg_dcdca: dcdca {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-name = "vdd-cpub";
|
||||
};
|
||||
|
||||
reg_dcdcd: dcdcd {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-name = "vdd-vpu";
|
||||
};
|
||||
|
||||
reg_dcdce: dcdce {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <2100000>;
|
||||
regulator-max-microvolt = <2100000>;
|
||||
regulator-name = "vcc-bldo-codec-ldoin";
|
||||
};
|
||||
|
||||
sw {
|
||||
/*
|
||||
* unused, but use a different name to
|
||||
* avoid name clash with axp809's sw
|
||||
*/
|
||||
regulator-name = "s_sw";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -367,7 +484,9 @@ &usbphy1 {
|
|||
};
|
||||
|
||||
&usbphy2 {
|
||||
status = "okay";
|
||||
phy-supply = <®_bldo4>;
|
||||
/* Enable if HSIC peripheral is connected */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbphy3 {
|
||||
|
|
|
@ -17,33 +17,19 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/kmi.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/platform_data/clk-integrator.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/termios.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/param.h> /* HZ */
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "hardware.h"
|
||||
#include "cm.h"
|
||||
|
@ -68,14 +54,8 @@ static void __iomem *ebi_base;
|
|||
|
||||
/*
|
||||
* Logical Physical
|
||||
* ef000000 Cache flush
|
||||
* f1100000 11000000 System controller registers
|
||||
* f1300000 13000000 Counter/Timer
|
||||
* f1400000 14000000 Interrupt controller
|
||||
* f1600000 16000000 UART 0
|
||||
* f1700000 17000000 UART 1
|
||||
* f1a00000 1a000000 Debug LEDs
|
||||
* f1b00000 1b000000 GPIO
|
||||
*/
|
||||
|
||||
static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
|
||||
|
@ -89,16 +69,6 @@ static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
|
|||
.pfn = __phys_to_pfn(INTEGRATOR_UART0_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_DBG_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_DBG_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_AP_GPIO_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_AP_GPIO_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -196,16 +166,10 @@ static void __init ap_init_irq_of(void)
|
|||
|
||||
/* For the Device Tree, add in the UART callbacks as AUXDATA */
|
||||
static struct of_dev_auxdata ap_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,
|
||||
"rtc", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE,
|
||||
"uart0", &ap_uart_data),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE,
|
||||
"uart1", &ap_uart_data),
|
||||
OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,
|
||||
"kmi0", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", KMI1_BASE,
|
||||
"kmi1", NULL),
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
|
|
|
@ -7,67 +7,40 @@
|
|||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License.
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/kmi.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
#include <linux/amba/mmci.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/sched_clock.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "hardware.h"
|
||||
#include "cm.h"
|
||||
#include "common.h"
|
||||
|
||||
/* Base address to the core module header */
|
||||
static struct regmap *cm_map;
|
||||
/* Base address to the CP controller */
|
||||
static void __iomem *intcp_con_base;
|
||||
|
||||
#define INTCP_PA_CLCD_BASE 0xc0000000
|
||||
#define CM_COUNTER_OFFSET 0x28
|
||||
|
||||
/*
|
||||
* Logical Physical
|
||||
* f1000000 10000000 Core module registers
|
||||
* f1300000 13000000 Counter/Timer
|
||||
* f1400000 14000000 Interrupt controller
|
||||
* f1600000 16000000 UART 0
|
||||
* f1700000 17000000 UART 1
|
||||
* f1a00000 1a000000 Debug LEDs
|
||||
* fc900000 c9000000 GPIO
|
||||
* fca00000 ca000000 SIC
|
||||
*/
|
||||
|
||||
static struct map_desc intcp_io_desc[] __initdata __maybe_unused = {
|
||||
{
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_CT_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_CT_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_IC_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_IC_BASE),
|
||||
.length = SZ_4K,
|
||||
|
@ -77,16 +50,6 @@ static struct map_desc intcp_io_desc[] __initdata __maybe_unused = {
|
|||
.pfn = __phys_to_pfn(INTEGRATOR_UART0_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_DBG_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_DBG_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_CP_GPIO_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_CP_GPIO_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = IO_ADDRESS(INTEGRATOR_CP_SIC_BASE),
|
||||
.pfn = __phys_to_pfn(INTEGRATOR_CP_SIC_BASE),
|
||||
|
@ -121,66 +84,20 @@ static struct mmci_platform_data mmc_data = {
|
|||
.gpio_cd = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* CLCD support
|
||||
*/
|
||||
/*
|
||||
* Ensure VGA is selected.
|
||||
*/
|
||||
static void cp_clcd_enable(struct clcd_fb *fb)
|
||||
{
|
||||
struct fb_var_screeninfo *var = &fb->fb.var;
|
||||
u32 val = CM_CTRL_STATIC1 | CM_CTRL_STATIC2
|
||||
| CM_CTRL_LCDEN0 | CM_CTRL_LCDEN1;
|
||||
|
||||
if (var->bits_per_pixel <= 8 ||
|
||||
(var->bits_per_pixel == 16 && var->green.length == 5))
|
||||
/* Pseudocolor, RGB555, BGR555 */
|
||||
val |= CM_CTRL_LCDMUXSEL_VGA555_TFT555;
|
||||
else if (fb->fb.var.bits_per_pixel <= 16)
|
||||
/* truecolor RGB565 */
|
||||
val |= CM_CTRL_LCDMUXSEL_VGA565_TFT555;
|
||||
else
|
||||
val = 0; /* no idea for this, don't trust the docs */
|
||||
|
||||
cm_control(CM_CTRL_LCDMUXSEL_MASK|
|
||||
CM_CTRL_LCDEN0|
|
||||
CM_CTRL_LCDEN1|
|
||||
CM_CTRL_STATIC1|
|
||||
CM_CTRL_STATIC2|
|
||||
CM_CTRL_STATIC|
|
||||
CM_CTRL_n24BITEN, val);
|
||||
}
|
||||
|
||||
static int cp_clcd_setup(struct clcd_fb *fb)
|
||||
{
|
||||
fb->panel = versatile_clcd_get_panel("VGA");
|
||||
if (!fb->panel)
|
||||
return -EINVAL;
|
||||
|
||||
return versatile_clcd_setup_dma(fb, SZ_1M);
|
||||
}
|
||||
|
||||
static struct clcd_board clcd_data = {
|
||||
.name = "Integrator/CP",
|
||||
.caps = CLCD_CAP_5551 | CLCD_CAP_RGB565 | CLCD_CAP_888,
|
||||
.check = clcdfb_check,
|
||||
.decode = clcdfb_decode,
|
||||
.enable = cp_clcd_enable,
|
||||
.setup = cp_clcd_setup,
|
||||
.mmap = versatile_clcd_mmap_dma,
|
||||
.remove = versatile_clcd_remove_dma,
|
||||
};
|
||||
|
||||
#define REFCOUNTER (__io_address(INTEGRATOR_HDR_BASE) + 0x28)
|
||||
|
||||
static u64 notrace intcp_read_sched_clock(void)
|
||||
{
|
||||
return readl(REFCOUNTER);
|
||||
unsigned int val;
|
||||
|
||||
/* MMIO so discard return code */
|
||||
regmap_read(cm_map, CM_COUNTER_OFFSET, &val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static void __init intcp_init_early(void)
|
||||
{
|
||||
cm_map = syscon_regmap_lookup_by_compatible("arm,core-module-integrator");
|
||||
if (IS_ERR(cm_map))
|
||||
return;
|
||||
sched_clock_register(intcp_read_sched_clock, 32, 24000000);
|
||||
}
|
||||
|
||||
|
@ -195,22 +112,8 @@ static void __init intcp_init_irq_of(void)
|
|||
* and enforce the bus names since these are used for clock lookups.
|
||||
*/
|
||||
static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,
|
||||
"rtc", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE,
|
||||
"uart0", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE,
|
||||
"uart1", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,
|
||||
"kmi0", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", KMI1_BASE,
|
||||
"kmi1", NULL),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_CP_MMC_BASE,
|
||||
"mmci", &mmc_data),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_CP_AACI_BASE,
|
||||
"aaci", &mmc_data),
|
||||
OF_DEV_AUXDATA("arm,primecell", INTCP_PA_CLCD_BASE,
|
||||
"clcd", &clcd_data),
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
|
|
|
@ -87,3 +87,14 @@ ðmac {
|
|||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&ir {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&remote_input_ao_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&i2c_A {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&i2c_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
|
|
@ -50,3 +50,9 @@ / {
|
|||
compatible = "amlogic,p200", "amlogic,meson-gxbb";
|
||||
model = "Amlogic Meson GXBB P200 Development Board";
|
||||
};
|
||||
|
||||
&i2c_B {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&i2c_b_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
|
|
@ -57,6 +57,19 @@ memory@0 {
|
|||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
usb_pwr: regulator-usb-pwrs {
|
||||
compatible = "regulator-fixed";
|
||||
|
||||
regulator-name = "USB_PWR";
|
||||
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
|
||||
/* signal name in schematic: USB_PWR_EN */
|
||||
gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
};
|
||||
|
||||
/* This UART is brought out to the DB9 connector */
|
||||
|
@ -72,3 +85,25 @@ ðmac {
|
|||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&ir {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&remote_input_ao_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0_phy {
|
||||
status = "okay";
|
||||
phy-supply = <&usb_pwr>;
|
||||
};
|
||||
|
||||
&usb1_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -52,6 +52,19 @@ aliases {
|
|||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
usb_vbus: regulator-usb0-vbus {
|
||||
compatible = "regulator-fixed";
|
||||
|
||||
regulator-name = "USB0_VBUS";
|
||||
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
|
||||
gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&uart_AO {
|
||||
|
@ -60,3 +73,32 @@ &uart_AO {
|
|||
pinctrl-names = "default";
|
||||
|
||||
};
|
||||
|
||||
&ir {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&remote_input_ao_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
ðmac {
|
||||
status = "okay";
|
||||
pinctrl-0 = <ð_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0_phy {
|
||||
status = "okay";
|
||||
phy-supply = <&usb_vbus>;
|
||||
};
|
||||
|
||||
&usb1_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -45,6 +45,9 @@
|
|||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/gpio/meson-gxbb-gpio.h>
|
||||
#include <dt-bindings/reset/amlogic,meson-gxbb-reset.h>
|
||||
#include <dt-bindings/clock/gxbb-clkc.h>
|
||||
#include <dt-bindings/clock/gxbb-aoclkc.h>
|
||||
#include <dt-bindings/reset/gxbb-aoclkc.h>
|
||||
|
||||
/ {
|
||||
compatible = "amlogic,meson-gxbb";
|
||||
|
@ -99,6 +102,30 @@ psci {
|
|||
method = "smc";
|
||||
};
|
||||
|
||||
firmware {
|
||||
sm: secure-monitor {
|
||||
compatible = "amlogic,meson-gxbb-sm";
|
||||
};
|
||||
};
|
||||
|
||||
efuse: efuse {
|
||||
compatible = "amlogic,meson-gxbb-efuse";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
sn: sn@14 {
|
||||
reg = <0x14 0x10>;
|
||||
};
|
||||
|
||||
eth_mac: eth_mac@34 {
|
||||
reg = <0x34 0x10>;
|
||||
};
|
||||
|
||||
bid: bid@46 {
|
||||
reg = <0x46 0x30>;
|
||||
};
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv8-timer";
|
||||
interrupts = <GIC_PPI 13
|
||||
|
@ -124,6 +151,25 @@ soc {
|
|||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
usb0_phy: phy@c0000000 {
|
||||
compatible = "amlogic,meson-gxbb-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0xc0000000 0x0 0x20>;
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB0>;
|
||||
clock-names = "usb_general", "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1_phy: phy@c0000020 {
|
||||
compatible = "amlogic,meson-gxbb-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0xc0000020 0x0 0x20>;
|
||||
clocks = <&clkc CLKID_USB>, <&clkc CLKID_USB1>;
|
||||
clock-names = "usb_general", "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
cbus: cbus@c1100000 {
|
||||
compatible = "simple-bus";
|
||||
reg = <0x0 0xc1100000 0x0 0x100000>;
|
||||
|
@ -153,6 +199,27 @@ uart_B: serial@84dc {
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm_ab: pwm@8550 {
|
||||
compatible = "amlogic,meson-gxbb-pwm";
|
||||
reg = <0x0 0x08550 0x0 0x10>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm_cd: pwm@8650 {
|
||||
compatible = "amlogic,meson-gxbb-pwm";
|
||||
reg = <0x0 0x08650 0x0 0x10>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm_ef: pwm@86c0 {
|
||||
compatible = "amlogic,meson-gxbb-pwm";
|
||||
reg = <0x0 0x086c0 0x0 0x10>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart_C: serial@8700 {
|
||||
compatible = "amlogic,meson-uart";
|
||||
reg = <0x0 0x8700 0x0 0x14>;
|
||||
|
@ -160,6 +227,51 @@ uart_C: serial@8700 {
|
|||
clocks = <&xtal>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
watchdog@98d0 {
|
||||
compatible = "amlogic,meson-gxbb-wdt";
|
||||
reg = <0x0 0x098d0 0x0 0x10>;
|
||||
clocks = <&xtal>;
|
||||
};
|
||||
|
||||
spifc: spi@8c80 {
|
||||
compatible = "amlogic,meson-gxbb-spifc";
|
||||
reg = <0x0 0x08c80 0x0 0x80>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&clkc CLKID_SPI>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c_A: i2c@8500 {
|
||||
compatible = "amlogic,meson-gxbb-i2c";
|
||||
reg = <0x0 0x08500 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&clkc CLKID_I2C>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c_B: i2c@87c0 {
|
||||
compatible = "amlogic,meson-gxbb-i2c";
|
||||
reg = <0x0 0x087c0 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 214 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&clkc CLKID_I2C>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c_C: i2c@87e0 {
|
||||
compatible = "amlogic,meson-gxbb-i2c";
|
||||
reg = <0x0 0x087e0 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 215 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&clkc CLKID_I2C>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller@c4301000 {
|
||||
|
@ -203,6 +315,56 @@ mux {
|
|||
function = "uart_ao";
|
||||
};
|
||||
};
|
||||
|
||||
remote_input_ao_pins: remote_input_ao {
|
||||
mux {
|
||||
groups = "remote_input_ao";
|
||||
function = "remote_input_ao";
|
||||
};
|
||||
};
|
||||
|
||||
i2c_ao_pins: i2c_ao {
|
||||
mux {
|
||||
groups = "i2c_sck_ao",
|
||||
"i2c_sda_ao";
|
||||
function = "i2c_ao";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_ao_a_3_pins: pwm_ao_a_3 {
|
||||
mux {
|
||||
groups = "pwm_ao_a_3";
|
||||
function = "pwm_ao_a_3";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_ao_a_6_pins: pwm_ao_a_6 {
|
||||
mux {
|
||||
groups = "pwm_ao_a_6";
|
||||
function = "pwm_ao_a_6";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_ao_a_12_pins: pwm_ao_a_12 {
|
||||
mux {
|
||||
groups = "pwm_ao_a_12";
|
||||
function = "pwm_ao_a_12";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_ao_b_pins: pwm_ao_b {
|
||||
mux {
|
||||
groups = "pwm_ao_b";
|
||||
function = "pwm_ao_b";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
clkc_AO: clock-controller@040 {
|
||||
compatible = "amlogic,gxbb-aoclkc";
|
||||
reg = <0x0 0x00040 0x0 0x4>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
uart_AO: serial@4c0 {
|
||||
|
@ -212,6 +374,30 @@ uart_AO: serial@4c0 {
|
|||
clocks = <&xtal>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ir: ir@580 {
|
||||
compatible = "amlogic,meson-gxbb-ir";
|
||||
reg = <0x0 0x00580 0x0 0x40>;
|
||||
interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm_ab_AO: pwm@550 {
|
||||
compatible = "amlogic,meson-gxbb-pwm";
|
||||
reg = <0x0 0x0550 0x0 0x10>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c_AO: i2c@500 {
|
||||
compatible = "amlogic,meson-gxbb-i2c";
|
||||
reg = <0x0 0x500 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 195 IRQ_TYPE_EDGE_RISING>;
|
||||
clocks = <&clkc CLKID_AO_I2C>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
periphs: periphs@c8834000 {
|
||||
|
@ -251,6 +437,16 @@ mux {
|
|||
};
|
||||
};
|
||||
|
||||
nor_pins: nor {
|
||||
mux {
|
||||
groups = "nor_d",
|
||||
"nor_q",
|
||||
"nor_c",
|
||||
"nor_cs";
|
||||
function = "nor";
|
||||
};
|
||||
};
|
||||
|
||||
sdcard_pins: sdcard {
|
||||
mux {
|
||||
groups = "sdcard_d0",
|
||||
|
@ -263,6 +459,25 @@ mux {
|
|||
};
|
||||
};
|
||||
|
||||
sdio_pins: sdio {
|
||||
mux {
|
||||
groups = "sdio_d0",
|
||||
"sdio_d1",
|
||||
"sdio_d2",
|
||||
"sdio_d3",
|
||||
"sdio_cmd",
|
||||
"sdio_clk";
|
||||
function = "sdio";
|
||||
};
|
||||
};
|
||||
|
||||
sdio_irq_pins: sdio_irq {
|
||||
mux {
|
||||
groups = "sdio_irq";
|
||||
function = "sdio";
|
||||
};
|
||||
};
|
||||
|
||||
uart_a_pins: uart_a {
|
||||
mux {
|
||||
groups = "uart_tx_a",
|
||||
|
@ -287,6 +502,30 @@ mux {
|
|||
};
|
||||
};
|
||||
|
||||
i2c_a_pins: i2c_a {
|
||||
mux {
|
||||
groups = "i2c_sck_a",
|
||||
"i2c_sda_a";
|
||||
function = "i2c_a";
|
||||
};
|
||||
};
|
||||
|
||||
i2c_b_pins: i2c_b {
|
||||
mux {
|
||||
groups = "i2c_sck_b",
|
||||
"i2c_sda_b";
|
||||
function = "i2c_b";
|
||||
};
|
||||
};
|
||||
|
||||
i2c_c_pins: i2c_c {
|
||||
mux {
|
||||
groups = "i2c_sck_c",
|
||||
"i2c_sda_c";
|
||||
function = "i2c_c";
|
||||
};
|
||||
};
|
||||
|
||||
eth_pins: eth_c {
|
||||
mux {
|
||||
groups = "eth_mdio",
|
||||
|
@ -306,6 +545,55 @@ mux {
|
|||
function = "eth";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_a_x_pins: pwm_a_x {
|
||||
mux {
|
||||
groups = "pwm_a_x";
|
||||
function = "pwm_a_x";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_a_y_pins: pwm_a_y {
|
||||
mux {
|
||||
groups = "pwm_a_y";
|
||||
function = "pwm_a_y";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_b_pins: pwm_b {
|
||||
mux {
|
||||
groups = "pwm_b";
|
||||
function = "pwm_b";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_d_pins: pwm_d {
|
||||
mux {
|
||||
groups = "pwm_d";
|
||||
function = "pwm_d";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_e_pins: pwm_e {
|
||||
mux {
|
||||
groups = "pwm_e";
|
||||
function = "pwm_e";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_f_x_pins: pwm_f_x {
|
||||
mux {
|
||||
groups = "pwm_f_x";
|
||||
function = "pwm_f_x";
|
||||
};
|
||||
};
|
||||
|
||||
pwm_f_y_pins: pwm_f_y {
|
||||
mux {
|
||||
groups = "pwm_f_y";
|
||||
function = "pwm_f_y";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -321,6 +609,15 @@ clkc: clock-controller@0 {
|
|||
#clock-cells = <1>;
|
||||
reg = <0x0 0x0 0x0 0x3db>;
|
||||
};
|
||||
|
||||
mailbox: mailbox@404 {
|
||||
compatible = "amlogic,meson-gxbb-mhu";
|
||||
reg = <0 0x404 0 0x4c>;
|
||||
interrupts = <0 208 IRQ_TYPE_EDGE_RISING>,
|
||||
<0 209 IRQ_TYPE_EDGE_RISING>,
|
||||
<0 210 IRQ_TYPE_EDGE_RISING>;
|
||||
#mbox-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
apb: apb@d0000000 {
|
||||
|
@ -331,14 +628,40 @@ apb: apb@d0000000 {
|
|||
ranges = <0x0 0x0 0x0 0xd0000000 0x0 0x200000>;
|
||||
};
|
||||
|
||||
usb0: usb@c9000000 {
|
||||
compatible = "amlogic,meson-gxbb-usb", "snps,dwc2";
|
||||
reg = <0x0 0xc9000000 0x0 0x40000>;
|
||||
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clkc CLKID_USB0_DDR_BRIDGE>;
|
||||
clock-names = "otg";
|
||||
phys = <&usb0_phy>;
|
||||
phy-names = "usb2-phy";
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1: usb@c9100000 {
|
||||
compatible = "amlogic,meson-gxbb-usb", "snps,dwc2";
|
||||
reg = <0x0 0xc9100000 0x0 0x40000>;
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clkc CLKID_USB1_DDR_BRIDGE>;
|
||||
clock-names = "otg";
|
||||
phys = <&usb1_phy>;
|
||||
phy-names = "usb2-phy";
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ethmac: ethernet@c9410000 {
|
||||
compatible = "amlogic,meson6-dwmac", "snps,dwmac";
|
||||
compatible = "amlogic,meson-gxbb-dwmac", "snps,dwmac";
|
||||
reg = <0x0 0xc9410000 0x0 0x10000
|
||||
0x0 0xc8834540 0x0 0x4>;
|
||||
interrupts = <0 8 1>;
|
||||
interrupt-names = "macirq";
|
||||
clocks = <&xtal>;
|
||||
clock-names = "stmmaceth";
|
||||
clocks = <&clkc CLKID_ETH>,
|
||||
<&clkc CLKID_FCLK_DIV2>,
|
||||
<&clkc CLKID_MPLL2>;
|
||||
clock-names = "stmmaceth", "clkin0", "clkin1";
|
||||
phy-mode = "rgmii";
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
dtb-$(CONFIG_ARCH_R8A7795) += r8a7795-salvator-x.dtb
|
||||
dtb-$(CONFIG_ARCH_R8A7795) += r8a7795-salvator-x.dtb r8a7795-h3ulcb.dtb
|
||||
dtb-$(CONFIG_ARCH_R8A7796) += r8a7796-salvator-x.dtb
|
||||
|
||||
always := $(dtb-y)
|
||||
|
|
328
arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts
Normal file
328
arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts
Normal file
|
@ -0,0 +1,328 @@
|
|||
/*
|
||||
* Device Tree Source for the H3ULCB board
|
||||
*
|
||||
* Copyright (C) 2016 Renesas Electronics Corp.
|
||||
* Copyright (C) 2016 Cogent Embedded, Inc.
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public License
|
||||
* version 2. This program is licensed "as is" without any warranty of any
|
||||
* kind, whether express or implied.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "r8a7795.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
/ {
|
||||
model = "Renesas H3ULCB board based on r8a7795";
|
||||
compatible = "renesas,h3ulcb", "renesas,r8a7795";
|
||||
|
||||
aliases {
|
||||
serial0 = &scif2;
|
||||
ethernet0 = &avb;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory@48000000 {
|
||||
device_type = "memory";
|
||||
/* first 128MB is reserved for secure area. */
|
||||
reg = <0x0 0x48000000 0x0 0x38000000>;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led5 {
|
||||
gpios = <&gpio6 12 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
led6 {
|
||||
gpios = <&gpio6 13 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
keyboard {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
key-1 {
|
||||
linux,code = <KEY_1>;
|
||||
label = "SW3";
|
||||
wakeup-source;
|
||||
debounce-interval = <20>;
|
||||
gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
x12_clk: x12 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <24576000>;
|
||||
};
|
||||
|
||||
vcc_sdhi0: regulator-vcc-sdhi0 {
|
||||
compatible = "regulator-fixed";
|
||||
|
||||
regulator-name = "SDHI0 Vcc";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
|
||||
gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
vccq_sdhi0: regulator-vccq-sdhi0 {
|
||||
compatible = "regulator-gpio";
|
||||
|
||||
regulator-name = "SDHI0 VccQ";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
|
||||
gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
|
||||
gpios-states = <1>;
|
||||
states = <3300000 1
|
||||
1800000 0>;
|
||||
};
|
||||
|
||||
audio_clkout: audio-clkout {
|
||||
/*
|
||||
* This is same as <&rcar_sound 0>
|
||||
* but needed to avoid cs2000/rcar_sound probe dead-lock
|
||||
*/
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <11289600>;
|
||||
};
|
||||
|
||||
rsnd_ak4613: sound {
|
||||
compatible = "simple-audio-card";
|
||||
|
||||
simple-audio-card,format = "left_j";
|
||||
simple-audio-card,bitclock-master = <&sndcpu>;
|
||||
simple-audio-card,frame-master = <&sndcpu>;
|
||||
|
||||
sndcpu: simple-audio-card,cpu {
|
||||
sound-dai = <&rcar_sound>;
|
||||
};
|
||||
|
||||
sndcodec: simple-audio-card,codec {
|
||||
sound-dai = <&ak4613>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&extal_clk {
|
||||
clock-frequency = <16666666>;
|
||||
};
|
||||
|
||||
&extalr_clk {
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
&pfc {
|
||||
pinctrl-0 = <&scif_clk_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
scif2_pins: scif2 {
|
||||
groups = "scif2_data_a";
|
||||
function = "scif2";
|
||||
};
|
||||
|
||||
scif_clk_pins: scif_clk {
|
||||
groups = "scif_clk_a";
|
||||
function = "scif_clk";
|
||||
};
|
||||
|
||||
i2c2_pins: i2c2 {
|
||||
groups = "i2c2_a";
|
||||
function = "i2c2";
|
||||
};
|
||||
|
||||
avb_pins: avb {
|
||||
groups = "avb_mdc";
|
||||
function = "avb";
|
||||
};
|
||||
|
||||
sdhi0_pins_3v3: sd0_3v3 {
|
||||
groups = "sdhi0_data4", "sdhi0_ctrl";
|
||||
function = "sdhi0";
|
||||
power-source = <3300>;
|
||||
};
|
||||
|
||||
sdhi0_pins_1v8: sd0_1v8 {
|
||||
groups = "sdhi0_data4", "sdhi0_ctrl";
|
||||
function = "sdhi0";
|
||||
power-source = <1800>;
|
||||
};
|
||||
|
||||
sound_pins: sound {
|
||||
groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data_a";
|
||||
function = "ssi";
|
||||
};
|
||||
|
||||
sound_clk_pins: sound-clk {
|
||||
groups = "audio_clk_a_a", "audio_clk_b_a", "audio_clk_c_a",
|
||||
"audio_clkout_a", "audio_clkout3_a";
|
||||
function = "audio_clk";
|
||||
};
|
||||
|
||||
usb1_pins: usb1 {
|
||||
groups = "usb1";
|
||||
function = "usb1";
|
||||
};
|
||||
};
|
||||
|
||||
&scif2 {
|
||||
pinctrl-0 = <&scif2_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&scif_clk {
|
||||
clock-frequency = <14745600>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pinctrl-0 = <&i2c2_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
status = "okay";
|
||||
|
||||
clock-frequency = <100000>;
|
||||
|
||||
ak4613: codec@10 {
|
||||
compatible = "asahi-kasei,ak4613";
|
||||
#sound-dai-cells = <0>;
|
||||
reg = <0x10>;
|
||||
clocks = <&rcar_sound 3>;
|
||||
|
||||
asahi-kasei,in1-single-end;
|
||||
asahi-kasei,in2-single-end;
|
||||
asahi-kasei,out1-single-end;
|
||||
asahi-kasei,out2-single-end;
|
||||
asahi-kasei,out3-single-end;
|
||||
asahi-kasei,out4-single-end;
|
||||
asahi-kasei,out5-single-end;
|
||||
asahi-kasei,out6-single-end;
|
||||
};
|
||||
|
||||
cs2000: clk-multiplier@4f {
|
||||
#clock-cells = <0>;
|
||||
compatible = "cirrus,cs2000-cp";
|
||||
reg = <0x4f>;
|
||||
clocks = <&audio_clkout>, <&x12_clk>;
|
||||
clock-names = "clk_in", "ref_clk";
|
||||
|
||||
assigned-clocks = <&cs2000>;
|
||||
assigned-clock-rates = <24576000>; /* 1/1 divide */
|
||||
};
|
||||
};
|
||||
|
||||
&rcar_sound {
|
||||
pinctrl-0 = <&sound_pins &sound_clk_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
/* Single DAI */
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
/* audio_clkout0/1/2/3 */
|
||||
#clock-cells = <1>;
|
||||
clock-frequency = <11289600>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
/* update <audio_clk_b> to <cs2000> */
|
||||
clocks = <&cpg CPG_MOD 1005>,
|
||||
<&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>,
|
||||
<&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>,
|
||||
<&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>,
|
||||
<&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>,
|
||||
<&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>,
|
||||
<&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>,
|
||||
<&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>,
|
||||
<&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>,
|
||||
<&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>,
|
||||
<&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>,
|
||||
<&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
|
||||
<&audio_clk_a>, <&cs2000>,
|
||||
<&audio_clk_c>,
|
||||
<&cpg CPG_CORE R8A7795_CLK_S0D4>;
|
||||
|
||||
rcar_sound,dai {
|
||||
dai0 {
|
||||
playback = <&ssi0 &src0 &dvc0>;
|
||||
capture = <&ssi1 &src1 &dvc1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sdhi0 {
|
||||
pinctrl-0 = <&sdhi0_pins_3v3>;
|
||||
pinctrl-1 = <&sdhi0_pins_1v8>;
|
||||
pinctrl-names = "default", "state_uhs";
|
||||
|
||||
vmmc-supply = <&vcc_sdhi0>;
|
||||
vqmmc-supply = <&vccq_sdhi0>;
|
||||
cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
|
||||
bus-width = <4>;
|
||||
sd-uhs-sdr50;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ssi1 {
|
||||
shared-pin;
|
||||
};
|
||||
|
||||
&wdt0 {
|
||||
timeout-sec = <60>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&audio_clk_a {
|
||||
clock-frequency = <22579200>;
|
||||
};
|
||||
|
||||
&avb {
|
||||
pinctrl-0 = <&avb_pins>;
|
||||
pinctrl-names = "default";
|
||||
renesas,no-ether-link;
|
||||
phy-handle = <&phy0>;
|
||||
status = "okay";
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
rxc-skew-ps = <900>;
|
||||
rxdv-skew-ps = <0>;
|
||||
rxd0-skew-ps = <0>;
|
||||
rxd1-skew-ps = <0>;
|
||||
rxd2-skew-ps = <0>;
|
||||
rxd3-skew-ps = <0>;
|
||||
txc-skew-ps = <900>;
|
||||
txen-skew-ps = <0>;
|
||||
txd0-skew-ps = <0>;
|
||||
txd1-skew-ps = <0>;
|
||||
txd2-skew-ps = <0>;
|
||||
txd3-skew-ps = <0>;
|
||||
reg = <0>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&usb2_phy1 {
|
||||
pinctrl-0 = <&usb1_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ehci1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ohci1 {
|
||||
status = "okay";
|
||||
};
|
|
@ -110,6 +110,17 @@ vccq_sdhi3: regulator-vccq-sdhi3 {
|
|||
1800000 0>;
|
||||
};
|
||||
|
||||
vbus0_usb2: regulator-vbus0-usb2 {
|
||||
compatible = "regulator-fixed";
|
||||
|
||||
regulator-name = "USB20_VBUS0";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
|
||||
gpio = <&gpio6 16 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
audio_clkout: audio_clkout {
|
||||
/*
|
||||
* This is same as <&rcar_sound 0>
|
||||
|
@ -135,6 +146,52 @@ sndcodec: simple-audio-card,codec {
|
|||
sound-dai = <&ak4613>;
|
||||
};
|
||||
};
|
||||
|
||||
vga-encoder {
|
||||
compatible = "adi,adv7123";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
adv7123_in: endpoint {
|
||||
remote-endpoint = <&du_out_rgb>;
|
||||
};
|
||||
};
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
adv7123_out: endpoint {
|
||||
remote-endpoint = <&vga_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
vga {
|
||||
compatible = "vga-connector";
|
||||
|
||||
port {
|
||||
vga_in: endpoint {
|
||||
remote-endpoint = <&adv7123_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&du {
|
||||
pinctrl-0 = <&du_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
port@0 {
|
||||
endpoint {
|
||||
remote-endpoint = <&adv7123_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&extal_clk {
|
||||
|
@ -172,6 +229,11 @@ avb_pins: avb {
|
|||
function = "avb";
|
||||
};
|
||||
|
||||
du_pins: du {
|
||||
groups = "du_rgb888", "du_sync", "du_oddf", "du_clk_out_0";
|
||||
function = "du";
|
||||
};
|
||||
|
||||
sdhi0_pins: sd0 {
|
||||
groups = "sdhi0_data4", "sdhi0_ctrl";
|
||||
function = "sdhi0";
|
||||
|
@ -193,6 +255,11 @@ sound_clk_pins: sound_clk {
|
|||
function = "audio_clk";
|
||||
};
|
||||
|
||||
usb0_pins: usb0 {
|
||||
groups = "usb0";
|
||||
function = "usb0";
|
||||
};
|
||||
|
||||
usb1_pins: usb1 {
|
||||
groups = "usb1";
|
||||
function = "usb1";
|
||||
|
@ -369,6 +436,14 @@ &xhci0 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2_phy0 {
|
||||
pinctrl-0 = <&usb0_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
vbus-supply = <&vbus0_usb2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2_phy1 {
|
||||
pinctrl-0 = <&usb1_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
@ -383,6 +458,10 @@ &usb2_phy2 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&ehci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ehci1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -391,6 +470,10 @@ &ehci2 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&ohci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ohci1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -399,6 +482,10 @@ &ohci2 {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&hsusb {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie_bus_clk {
|
||||
clock-frequency = <100000000>;
|
||||
status = "okay";
|
||||
|
|
|
@ -328,7 +328,8 @@ sysc: system-controller@e6180000 {
|
|||
};
|
||||
|
||||
audma0: dma-controller@ec700000 {
|
||||
compatible = "renesas,rcar-dmac";
|
||||
compatible = "renesas,dmac-r8a7795",
|
||||
"renesas,rcar-dmac";
|
||||
reg = <0 0xec700000 0 0x10000>;
|
||||
interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
|
||||
GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
|
||||
|
@ -360,7 +361,8 @@ GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
|
|||
};
|
||||
|
||||
audma1: dma-controller@ec720000 {
|
||||
compatible = "renesas,rcar-dmac";
|
||||
compatible = "renesas,dmac-r8a7795",
|
||||
"renesas,rcar-dmac";
|
||||
reg = <0 0xec720000 0 0x10000>;
|
||||
interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
|
||||
GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
|
||||
|
@ -1098,6 +1100,7 @@ sdhi0: sd@ee100000 {
|
|||
reg = <0 0xee100000 0 0x2000>;
|
||||
interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 314>;
|
||||
max-frequency = <200000000>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -1107,6 +1110,7 @@ sdhi1: sd@ee120000 {
|
|||
reg = <0 0xee120000 0 0x2000>;
|
||||
interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 313>;
|
||||
max-frequency = <200000000>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -1116,8 +1120,8 @@ sdhi2: sd@ee140000 {
|
|||
reg = <0 0xee140000 0 0x2000>;
|
||||
interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 312>;
|
||||
max-frequency = <200000000>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
cap-mmc-highspeed;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1126,8 +1130,8 @@ sdhi3: sd@ee160000 {
|
|||
reg = <0 0xee160000 0 0x2000>;
|
||||
interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 311>;
|
||||
max-frequency = <200000000>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
cap-mmc-highspeed;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1224,6 +1228,23 @@ ohci2: usb@ee0c0000 {
|
|||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
hsusb: usb@e6590000 {
|
||||
compatible = "renesas,usbhs-r8a7795",
|
||||
"renesas,rcar-gen3-usbhs";
|
||||
reg = <0 0xe6590000 0 0x100>;
|
||||
interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 704>;
|
||||
dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
|
||||
<&usb_dmac1 0>, <&usb_dmac1 1>;
|
||||
dma-names = "ch0", "ch1", "ch2", "ch3";
|
||||
renesas,buswait = <11>;
|
||||
phys = <&usb2_phy0>;
|
||||
phy-names = "usb";
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pciec0: pcie@fe000000 {
|
||||
compatible = "renesas,pcie-r8a7795";
|
||||
reg = <0 0xfe000000 0 0x80000>;
|
||||
|
@ -1273,5 +1294,252 @@ pciec1: pcie@ee800000 {
|
|||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
vspbc: vsp@fe920000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfe920000 0 0x8000>;
|
||||
interrupts = <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 624>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
|
||||
renesas,fcp = <&fcpvb1>;
|
||||
};
|
||||
|
||||
fcpvb1: fcp@fe92f000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfe92f000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 606>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
fcpf0: fcp@fe950000 {
|
||||
compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
|
||||
reg = <0 0xfe950000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 615>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
fcpf1: fcp@fe951000 {
|
||||
compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
|
||||
reg = <0 0xfe951000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 614>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
fcpf2: fcp@fe952000 {
|
||||
compatible = "renesas,r8a7795-fcpf", "renesas,fcpf";
|
||||
reg = <0 0xfe952000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 613>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
vspbd: vsp@fe960000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfe960000 0 0x8000>;
|
||||
interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 626>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
|
||||
renesas,fcp = <&fcpvb0>;
|
||||
};
|
||||
|
||||
fcpvb0: fcp@fe96f000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfe96f000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 607>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
vspi0: vsp@fe9a0000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfe9a0000 0 0x8000>;
|
||||
interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 631>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
|
||||
renesas,fcp = <&fcpvi0>;
|
||||
};
|
||||
|
||||
fcpvi0: fcp@fe9af000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfe9af000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 611>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
vspi1: vsp@fe9b0000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfe9b0000 0 0x8000>;
|
||||
interrupts = <GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 630>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
|
||||
renesas,fcp = <&fcpvi1>;
|
||||
};
|
||||
|
||||
fcpvi1: fcp@fe9bf000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfe9bf000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 610>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
vspi2: vsp@fe9c0000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfe9c0000 0 0x8000>;
|
||||
interrupts = <GIC_SPI 446 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 629>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
|
||||
renesas,fcp = <&fcpvi2>;
|
||||
};
|
||||
|
||||
fcpvi2: fcp@fe9cf000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfe9cf000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 609>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
};
|
||||
|
||||
vspd0: vsp@fea20000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfea20000 0 0x4000>;
|
||||
interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 623>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
|
||||
renesas,fcp = <&fcpvd0>;
|
||||
};
|
||||
|
||||
fcpvd0: fcp@fea27000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfea27000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 603>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
vspd1: vsp@fea28000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfea28000 0 0x4000>;
|
||||
interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 622>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
|
||||
renesas,fcp = <&fcpvd1>;
|
||||
};
|
||||
|
||||
fcpvd1: fcp@fea2f000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfea2f000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 602>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
vspd2: vsp@fea30000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfea30000 0 0x4000>;
|
||||
interrupts = <GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 621>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
|
||||
renesas,fcp = <&fcpvd2>;
|
||||
};
|
||||
|
||||
fcpvd2: fcp@fea37000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfea37000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 601>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
vspd3: vsp@fea38000 {
|
||||
compatible = "renesas,vsp2";
|
||||
reg = <0 0xfea38000 0 0x4000>;
|
||||
interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 620>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
|
||||
renesas,fcp = <&fcpvd3>;
|
||||
};
|
||||
|
||||
fcpvd3: fcp@fea3f000 {
|
||||
compatible = "renesas,r8a7795-fcpv", "renesas,fcpv";
|
||||
reg = <0 0xfea3f000 0 0x200>;
|
||||
clocks = <&cpg CPG_MOD 600>;
|
||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
fdp1@fe940000 {
|
||||
compatible = "renesas,fdp1";
|
||||
reg = <0 0xfe940000 0 0x2400>;
|
||||
interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 119>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
renesas,fcp = <&fcpf0>;
|
||||
};
|
||||
|
||||
fdp1@fe944000 {
|
||||
compatible = "renesas,fdp1";
|
||||
reg = <0 0xfe944000 0 0x2400>;
|
||||
interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 118>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
renesas,fcp = <&fcpf1>;
|
||||
};
|
||||
|
||||
fdp1@fe948000 {
|
||||
compatible = "renesas,fdp1";
|
||||
reg = <0 0xfe948000 0 0x2400>;
|
||||
interrupts = <GIC_SPI 264 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 117>;
|
||||
power-domains = <&sysc R8A7795_PD_A3VP>;
|
||||
renesas,fcp = <&fcpf2>;
|
||||
};
|
||||
|
||||
du: display@feb00000 {
|
||||
compatible = "renesas,du-r8a7795";
|
||||
reg = <0 0xfeb00000 0 0x80000>,
|
||||
<0 0xfeb90000 0 0x14>;
|
||||
reg-names = "du", "lvds.0";
|
||||
interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 724>,
|
||||
<&cpg CPG_MOD 723>,
|
||||
<&cpg CPG_MOD 722>,
|
||||
<&cpg CPG_MOD 721>,
|
||||
<&cpg CPG_MOD 727>;
|
||||
clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
|
||||
status = "disabled";
|
||||
|
||||
vsps = <&vspd0 &vspd1 &vspd2 &vspd3>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
du_out_rgb: endpoint {
|
||||
};
|
||||
};
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
du_out_hdmi0: endpoint {
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
du_out_hdmi1: endpoint {
|
||||
};
|
||||
};
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
du_out_lvds0: endpoint {
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -31,11 +31,27 @@ memory@48000000 {
|
|||
};
|
||||
};
|
||||
|
||||
&pfc {
|
||||
pinctrl-0 = <&scif_clk_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
scif2_pins: scif2 {
|
||||
groups = "scif2_data_a";
|
||||
function = "scif2";
|
||||
};
|
||||
scif_clk_pins: scif_clk {
|
||||
groups = "scif_clk_a";
|
||||
function = "scif_clk";
|
||||
};
|
||||
};
|
||||
|
||||
&extal_clk {
|
||||
clock-frequency = <16666666>;
|
||||
};
|
||||
|
||||
&scif2 {
|
||||
pinctrl-0 = <&scif2_pins>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
|
|
@ -107,6 +107,123 @@ wdt0: watchdog@e6020000 {
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
gpio0: gpio@e6050000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6050000 0 0x50>;
|
||||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 0 16>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 912>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio1: gpio@e6051000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6051000 0 0x50>;
|
||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 32 29>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 911>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio2: gpio@e6052000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6052000 0 0x50>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 64 15>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 910>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio3: gpio@e6053000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6053000 0 0x50>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 96 16>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 909>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio4: gpio@e6054000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6054000 0 0x50>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 128 18>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 908>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio5: gpio@e6055000 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6055000 0 0x50>;
|
||||
interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 160 26>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 907>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio6: gpio@e6055400 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6055400 0 0x50>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 192 32>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 906>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
gpio7: gpio@e6055800 {
|
||||
compatible = "renesas,gpio-r8a7796",
|
||||
"renesas,gpio-rcar";
|
||||
reg = <0 0xe6055800 0 0x50>;
|
||||
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 224 4>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 905>;
|
||||
power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
|
||||
};
|
||||
|
||||
pfc: pin-controller@e6060000 {
|
||||
compatible = "renesas,pfc-r8a7796";
|
||||
reg = <0 0xe6060000 0 0x50c>;
|
||||
};
|
||||
|
||||
cpg: clock-controller@e6150000 {
|
||||
compatible = "renesas,r8a7796-cpg-mssr";
|
||||
reg = <0 0xe6150000 0 0x1000>;
|
||||
|
|
|
@ -183,14 +183,14 @@
|
|||
/* CLKID_CLK81 */
|
||||
#define CLKID_MPLL0 13
|
||||
#define CLKID_MPLL1 14
|
||||
#define CLKID_MPLL2 15
|
||||
/* CLKID_MPLL2 */
|
||||
#define CLKID_DDR 16
|
||||
#define CLKID_DOS 17
|
||||
#define CLKID_ISA 18
|
||||
#define CLKID_PL301 19
|
||||
#define CLKID_PERIPHS 20
|
||||
#define CLKID_SPICC 21
|
||||
#define CLKID_I2C 22
|
||||
/* CLKID_I2C */
|
||||
#define CLKID_SAR_ADC 23
|
||||
#define CLKID_SMART_CARD 24
|
||||
#define CLKID_RNG0 25
|
||||
|
@ -202,7 +202,7 @@
|
|||
#define CLKID_ABUF 31
|
||||
#define CLKID_HIU_IFACE 32
|
||||
#define CLKID_ASSIST_MISC 33
|
||||
#define CLKID_SPI 34
|
||||
/* CLKID_SPI */
|
||||
#define CLKID_I2S_SPDIF 35
|
||||
#define CLKID_ETH 36
|
||||
#define CLKID_DEMUX 37
|
||||
|
@ -218,12 +218,12 @@
|
|||
#define CLKID_AIU 47
|
||||
#define CLKID_UART1 48
|
||||
#define CLKID_G2D 49
|
||||
#define CLKID_USB0 50
|
||||
#define CLKID_USB1 51
|
||||
/* CLKID_USB0 */
|
||||
/* CLKID_USB1 */
|
||||
#define CLKID_RESET 52
|
||||
#define CLKID_NAND 53
|
||||
#define CLKID_DOS_PARSER 54
|
||||
#define CLKID_USB 55
|
||||
/* CLKID_USB */
|
||||
#define CLKID_VDIN1 56
|
||||
#define CLKID_AHB_ARB0 57
|
||||
#define CLKID_EFUSE 58
|
||||
|
@ -232,8 +232,8 @@
|
|||
#define CLKID_AHB_CTRL_BUS 61
|
||||
#define CLKID_HDMI_INTR_SYNC 62
|
||||
#define CLKID_HDMI_PCLK 63
|
||||
#define CLKID_USB1_DDR_BRIDGE 64
|
||||
#define CLKID_USB0_DDR_BRIDGE 65
|
||||
/* CLKID_USB1_DDR_BRIDGE */
|
||||
/* CLKID_USB0_DDR_BRIDGE */
|
||||
#define CLKID_MMC_PCLK 66
|
||||
#define CLKID_DVIN 67
|
||||
#define CLKID_UART2 68
|
||||
|
@ -261,7 +261,7 @@
|
|||
#define CLKID_AO_AHB_SRAM 90
|
||||
#define CLKID_AO_AHB_BUS 91
|
||||
#define CLKID_AO_IFACE 92
|
||||
#define CLKID_AO_I2C 93
|
||||
/* CLKID_AO_I2C */
|
||||
/* CLKID_SD_EMMC_A */
|
||||
/* CLKID_SD_EMMC_B */
|
||||
/* CLKID_SD_EMMC_C */
|
||||
|
|
|
@ -61,13 +61,13 @@ config DWMAC_LPC18XX
|
|||
config DWMAC_MESON
|
||||
tristate "Amlogic Meson dwmac support"
|
||||
default ARCH_MESON
|
||||
depends on OF && (ARCH_MESON || COMPILE_TEST)
|
||||
depends on OF && COMMON_CLK && (ARCH_MESON || COMPILE_TEST)
|
||||
help
|
||||
Support for Ethernet controller on Amlogic Meson SoCs.
|
||||
|
||||
This selects the Amlogic Meson SoC glue layer support for
|
||||
the stmmac device driver. This driver is used for Meson6 and
|
||||
Meson8 SoCs.
|
||||
the stmmac device driver. This driver is used for Meson6,
|
||||
Meson8, Meson8b and GXBB SoCs.
|
||||
|
||||
config DWMAC_ROCKCHIP
|
||||
tristate "Rockchip dwmac support"
|
||||
|
|
|
@ -9,7 +9,7 @@ stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o \
|
|||
obj-$(CONFIG_STMMAC_PLATFORM) += stmmac-platform.o
|
||||
obj-$(CONFIG_DWMAC_IPQ806X) += dwmac-ipq806x.o
|
||||
obj-$(CONFIG_DWMAC_LPC18XX) += dwmac-lpc18xx.o
|
||||
obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o
|
||||
obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o
|
||||
obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o
|
||||
obj-$(CONFIG_DWMAC_SOCFPGA) += dwmac-altr-socfpga.o
|
||||
obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Amlogic Meson DWMAC glue layer
|
||||
* Amlogic Meson6 and Meson8 DWMAC glue layer
|
||||
*
|
||||
* Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
|
||||
*
|
||||
|
@ -96,5 +96,5 @@ static struct platform_driver meson6_dwmac_driver = {
|
|||
module_platform_driver(meson6_dwmac_driver);
|
||||
|
||||
MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
|
||||
MODULE_DESCRIPTION("Amlogic Meson DWMAC glue layer");
|
||||
MODULE_DESCRIPTION("Amlogic Meson6 and Meson8 DWMAC glue layer");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
|
324
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
Normal file
324
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
Normal file
|
@ -0,0 +1,324 @@
|
|||
/*
|
||||
* Amlogic Meson8b and GXBB DWMAC glue layer
|
||||
*
|
||||
* Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_net.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/stmmac.h>
|
||||
|
||||
#include "stmmac_platform.h"
|
||||
|
||||
#define PRG_ETH0 0x0
|
||||
|
||||
#define PRG_ETH0_RGMII_MODE BIT(0)
|
||||
|
||||
/* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */
|
||||
#define PRG_ETH0_CLK_M250_SEL_SHIFT 4
|
||||
#define PRG_ETH0_CLK_M250_SEL_MASK GENMASK(4, 4)
|
||||
|
||||
#define PRG_ETH0_TXDLY_SHIFT 5
|
||||
#define PRG_ETH0_TXDLY_MASK GENMASK(6, 5)
|
||||
#define PRG_ETH0_TXDLY_OFF (0x0 << PRG_ETH0_TXDLY_SHIFT)
|
||||
#define PRG_ETH0_TXDLY_QUARTER (0x1 << PRG_ETH0_TXDLY_SHIFT)
|
||||
#define PRG_ETH0_TXDLY_HALF (0x2 << PRG_ETH0_TXDLY_SHIFT)
|
||||
#define PRG_ETH0_TXDLY_THREE_QUARTERS (0x3 << PRG_ETH0_TXDLY_SHIFT)
|
||||
|
||||
/* divider for the result of m250_sel */
|
||||
#define PRG_ETH0_CLK_M250_DIV_SHIFT 7
|
||||
#define PRG_ETH0_CLK_M250_DIV_WIDTH 3
|
||||
|
||||
/* divides the result of m25_sel by either 5 (bit unset) or 10 (bit set) */
|
||||
#define PRG_ETH0_CLK_M25_DIV_SHIFT 10
|
||||
#define PRG_ETH0_CLK_M25_DIV_WIDTH 1
|
||||
|
||||
#define PRG_ETH0_INVERTED_RMII_CLK BIT(11)
|
||||
#define PRG_ETH0_TX_AND_PHY_REF_CLK BIT(12)
|
||||
|
||||
#define MUX_CLK_NUM_PARENTS 2
|
||||
|
||||
struct meson8b_dwmac {
|
||||
struct platform_device *pdev;
|
||||
|
||||
void __iomem *regs;
|
||||
|
||||
phy_interface_t phy_mode;
|
||||
|
||||
struct clk_mux m250_mux;
|
||||
struct clk *m250_mux_clk;
|
||||
struct clk *m250_mux_parent[MUX_CLK_NUM_PARENTS];
|
||||
|
||||
struct clk_divider m250_div;
|
||||
struct clk *m250_div_clk;
|
||||
|
||||
struct clk_divider m25_div;
|
||||
struct clk *m25_div_clk;
|
||||
};
|
||||
|
||||
static void meson8b_dwmac_mask_bits(struct meson8b_dwmac *dwmac, u32 reg,
|
||||
u32 mask, u32 value)
|
||||
{
|
||||
u32 data;
|
||||
|
||||
data = readl(dwmac->regs + reg);
|
||||
data &= ~mask;
|
||||
data |= (value & mask);
|
||||
|
||||
writel(data, dwmac->regs + reg);
|
||||
}
|
||||
|
||||
static int meson8b_init_clk(struct meson8b_dwmac *dwmac)
|
||||
{
|
||||
struct clk_init_data init;
|
||||
int i, ret;
|
||||
struct device *dev = &dwmac->pdev->dev;
|
||||
char clk_name[32];
|
||||
const char *clk_div_parents[1];
|
||||
const char *mux_parent_names[MUX_CLK_NUM_PARENTS];
|
||||
static struct clk_div_table clk_25m_div_table[] = {
|
||||
{ .val = 0, .div = 5 },
|
||||
{ .val = 1, .div = 10 },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
/* get the mux parents from DT */
|
||||
for (i = 0; i < MUX_CLK_NUM_PARENTS; i++) {
|
||||
char name[16];
|
||||
|
||||
snprintf(name, sizeof(name), "clkin%d", i);
|
||||
dwmac->m250_mux_parent[i] = devm_clk_get(dev, name);
|
||||
if (IS_ERR(dwmac->m250_mux_parent[i])) {
|
||||
ret = PTR_ERR(dwmac->m250_mux_parent[i]);
|
||||
if (ret != -EPROBE_DEFER)
|
||||
dev_err(dev, "Missing clock %s\n", name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
mux_parent_names[i] =
|
||||
__clk_get_name(dwmac->m250_mux_parent[i]);
|
||||
}
|
||||
|
||||
/* create the m250_mux */
|
||||
snprintf(clk_name, sizeof(clk_name), "%s#m250_sel", dev_name(dev));
|
||||
init.name = clk_name;
|
||||
init.ops = &clk_mux_ops;
|
||||
init.flags = 0;
|
||||
init.parent_names = mux_parent_names;
|
||||
init.num_parents = MUX_CLK_NUM_PARENTS;
|
||||
|
||||
dwmac->m250_mux.reg = dwmac->regs + PRG_ETH0;
|
||||
dwmac->m250_mux.shift = PRG_ETH0_CLK_M250_SEL_SHIFT;
|
||||
dwmac->m250_mux.mask = PRG_ETH0_CLK_M250_SEL_MASK;
|
||||
dwmac->m250_mux.flags = 0;
|
||||
dwmac->m250_mux.table = NULL;
|
||||
dwmac->m250_mux.hw.init = &init;
|
||||
|
||||
dwmac->m250_mux_clk = devm_clk_register(dev, &dwmac->m250_mux.hw);
|
||||
if (WARN_ON(IS_ERR(dwmac->m250_mux_clk)))
|
||||
return PTR_ERR(dwmac->m250_mux_clk);
|
||||
|
||||
/* create the m250_div */
|
||||
snprintf(clk_name, sizeof(clk_name), "%s#m250_div", dev_name(dev));
|
||||
init.name = devm_kstrdup(dev, clk_name, GFP_KERNEL);
|
||||
init.ops = &clk_divider_ops;
|
||||
init.flags = CLK_SET_RATE_PARENT;
|
||||
clk_div_parents[0] = __clk_get_name(dwmac->m250_mux_clk);
|
||||
init.parent_names = clk_div_parents;
|
||||
init.num_parents = ARRAY_SIZE(clk_div_parents);
|
||||
|
||||
dwmac->m250_div.reg = dwmac->regs + PRG_ETH0;
|
||||
dwmac->m250_div.shift = PRG_ETH0_CLK_M250_DIV_SHIFT;
|
||||
dwmac->m250_div.width = PRG_ETH0_CLK_M250_DIV_WIDTH;
|
||||
dwmac->m250_div.hw.init = &init;
|
||||
dwmac->m250_div.flags = CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO;
|
||||
|
||||
dwmac->m250_div_clk = devm_clk_register(dev, &dwmac->m250_div.hw);
|
||||
if (WARN_ON(IS_ERR(dwmac->m250_div_clk)))
|
||||
return PTR_ERR(dwmac->m250_div_clk);
|
||||
|
||||
/* create the m25_div */
|
||||
snprintf(clk_name, sizeof(clk_name), "%s#m25_div", dev_name(dev));
|
||||
init.name = devm_kstrdup(dev, clk_name, GFP_KERNEL);
|
||||
init.ops = &clk_divider_ops;
|
||||
init.flags = CLK_IS_BASIC | CLK_SET_RATE_PARENT;
|
||||
clk_div_parents[0] = __clk_get_name(dwmac->m250_div_clk);
|
||||
init.parent_names = clk_div_parents;
|
||||
init.num_parents = ARRAY_SIZE(clk_div_parents);
|
||||
|
||||
dwmac->m25_div.reg = dwmac->regs + PRG_ETH0;
|
||||
dwmac->m25_div.shift = PRG_ETH0_CLK_M25_DIV_SHIFT;
|
||||
dwmac->m25_div.width = PRG_ETH0_CLK_M25_DIV_WIDTH;
|
||||
dwmac->m25_div.table = clk_25m_div_table;
|
||||
dwmac->m25_div.hw.init = &init;
|
||||
dwmac->m25_div.flags = CLK_DIVIDER_ALLOW_ZERO;
|
||||
|
||||
dwmac->m25_div_clk = devm_clk_register(dev, &dwmac->m25_div.hw);
|
||||
if (WARN_ON(IS_ERR(dwmac->m25_div_clk)))
|
||||
return PTR_ERR(dwmac->m25_div_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int meson8b_init_prg_eth(struct meson8b_dwmac *dwmac)
|
||||
{
|
||||
int ret;
|
||||
unsigned long clk_rate;
|
||||
|
||||
switch (dwmac->phy_mode) {
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||
case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||
case PHY_INTERFACE_MODE_RGMII_TXID:
|
||||
/* Generate a 25MHz clock for the PHY */
|
||||
clk_rate = 25 * 1000 * 1000;
|
||||
|
||||
/* enable RGMII mode */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_RGMII_MODE,
|
||||
PRG_ETH0_RGMII_MODE);
|
||||
|
||||
/* only relevant for RMII mode -> disable in RGMII mode */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0,
|
||||
PRG_ETH0_INVERTED_RMII_CLK, 0);
|
||||
|
||||
/* TX clock delay - all known boards use a 1/4 cycle delay */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TXDLY_MASK,
|
||||
PRG_ETH0_TXDLY_QUARTER);
|
||||
break;
|
||||
|
||||
case PHY_INTERFACE_MODE_RMII:
|
||||
/* Use the rate of the mux clock for the internal RMII PHY */
|
||||
clk_rate = clk_get_rate(dwmac->m250_mux_clk);
|
||||
|
||||
/* disable RGMII mode -> enables RMII mode */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_RGMII_MODE,
|
||||
0);
|
||||
|
||||
/* invert internal clk_rmii_i to generate 25/2.5 tx_rx_clk */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0,
|
||||
PRG_ETH0_INVERTED_RMII_CLK,
|
||||
PRG_ETH0_INVERTED_RMII_CLK);
|
||||
|
||||
/* TX clock delay cannot be configured in RMII mode */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TXDLY_MASK,
|
||||
0);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(&dwmac->pdev->dev, "unsupported phy-mode %s\n",
|
||||
phy_modes(dwmac->phy_mode));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(dwmac->m25_div_clk);
|
||||
if (ret) {
|
||||
dev_err(&dwmac->pdev->dev, "failed to enable the PHY clock\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_set_rate(dwmac->m25_div_clk, clk_rate);
|
||||
if (ret) {
|
||||
clk_disable_unprepare(dwmac->m25_div_clk);
|
||||
|
||||
dev_err(&dwmac->pdev->dev, "failed to set PHY clock\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* enable TX_CLK and PHY_REF_CLK generator */
|
||||
meson8b_dwmac_mask_bits(dwmac, PRG_ETH0, PRG_ETH0_TX_AND_PHY_REF_CLK,
|
||||
PRG_ETH0_TX_AND_PHY_REF_CLK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int meson8b_dwmac_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct plat_stmmacenet_data *plat_dat;
|
||||
struct stmmac_resources stmmac_res;
|
||||
struct resource *res;
|
||||
struct meson8b_dwmac *dwmac;
|
||||
int ret;
|
||||
|
||||
ret = stmmac_get_platform_resources(pdev, &stmmac_res);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
|
||||
if (IS_ERR(plat_dat))
|
||||
return PTR_ERR(plat_dat);
|
||||
|
||||
dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL);
|
||||
if (!dwmac)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
dwmac->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(dwmac->regs))
|
||||
return PTR_ERR(dwmac->regs);
|
||||
|
||||
dwmac->pdev = pdev;
|
||||
dwmac->phy_mode = of_get_phy_mode(pdev->dev.of_node);
|
||||
if (dwmac->phy_mode < 0) {
|
||||
dev_err(&pdev->dev, "missing phy-mode property\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = meson8b_init_clk(dwmac);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = meson8b_init_prg_eth(dwmac);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
plat_dat->bsp_priv = dwmac;
|
||||
|
||||
return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
|
||||
}
|
||||
|
||||
static int meson8b_dwmac_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct meson8b_dwmac *dwmac = get_stmmac_bsp_priv(&pdev->dev);
|
||||
|
||||
clk_disable_unprepare(dwmac->m25_div_clk);
|
||||
|
||||
return stmmac_pltfr_remove(pdev);
|
||||
}
|
||||
|
||||
static const struct of_device_id meson8b_dwmac_match[] = {
|
||||
{ .compatible = "amlogic,meson8b-dwmac" },
|
||||
{ .compatible = "amlogic,meson-gxbb-dwmac" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, meson8b_dwmac_match);
|
||||
|
||||
static struct platform_driver meson8b_dwmac_driver = {
|
||||
.probe = meson8b_dwmac_probe,
|
||||
.remove = meson8b_dwmac_remove,
|
||||
.driver = {
|
||||
.name = "meson8b-dwmac",
|
||||
.pm = &stmmac_pltfr_pm_ops,
|
||||
.of_match_table = meson8b_dwmac_match,
|
||||
},
|
||||
};
|
||||
module_platform_driver(meson8b_dwmac_driver);
|
||||
|
||||
MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
|
||||
MODULE_DESCRIPTION("Amlogic Meson8b and GXBB DWMAC glue layer");
|
||||
MODULE_LICENSE("GPL v2");
|
|
@ -30,4 +30,12 @@ int stmmac_get_platform_resources(struct platform_device *pdev,
|
|||
int stmmac_pltfr_remove(struct platform_device *pdev);
|
||||
extern const struct dev_pm_ops stmmac_pltfr_pm_ops;
|
||||
|
||||
static inline void *get_stmmac_bsp_priv(struct device *dev)
|
||||
{
|
||||
struct net_device *ndev = dev_get_drvdata(dev);
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
return priv->plat->bsp_priv;
|
||||
}
|
||||
|
||||
#endif /* __STMMAC_PLATFORM_H__ */
|
||||
|
|
|
@ -182,6 +182,38 @@ static const struct dwc2_core_params params_ltq = {
|
|||
.hibernation = -1,
|
||||
};
|
||||
|
||||
static const struct dwc2_core_params params_amlogic = {
|
||||
.otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE,
|
||||
.otg_ver = -1,
|
||||
.dma_enable = 1,
|
||||
.dma_desc_enable = 0,
|
||||
.dma_desc_fs_enable = 0,
|
||||
.speed = DWC2_SPEED_PARAM_HIGH,
|
||||
.enable_dynamic_fifo = 1,
|
||||
.en_multiple_tx_fifo = -1,
|
||||
.host_rx_fifo_size = 512,
|
||||
.host_nperio_tx_fifo_size = 500,
|
||||
.host_perio_tx_fifo_size = 500,
|
||||
.max_transfer_size = -1,
|
||||
.max_packet_count = -1,
|
||||
.host_channels = 16,
|
||||
.phy_type = DWC2_PHY_TYPE_PARAM_UTMI,
|
||||
.phy_utmi_width = -1,
|
||||
.phy_ulpi_ddr = -1,
|
||||
.phy_ulpi_ext_vbus = -1,
|
||||
.i2c_enable = -1,
|
||||
.ulpi_fs_ls = -1,
|
||||
.host_support_fs_ls_low_power = -1,
|
||||
.host_ls_low_power_phy_clk = -1,
|
||||
.ts_dline = -1,
|
||||
.reload_ctl = 1,
|
||||
.ahbcfg = GAHBCFG_HBSTLEN_INCR8 <<
|
||||
GAHBCFG_HBSTLEN_SHIFT,
|
||||
.uframe_sched = 0,
|
||||
.external_id_pin_ctl = -1,
|
||||
.hibernation = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Check the dr_mode against the module configuration and hardware
|
||||
* capabilities.
|
||||
|
@ -486,6 +518,8 @@ static const struct of_device_id dwc2_of_match_table[] = {
|
|||
{ .compatible = "lantiq,xrx200-usb", .data = ¶ms_ltq },
|
||||
{ .compatible = "snps,dwc2", .data = NULL },
|
||||
{ .compatible = "samsung,s3c6400-hsotg", .data = NULL},
|
||||
{ .compatible = "amlogic,meson8b-usb", .data = ¶ms_amlogic },
|
||||
{ .compatible = "amlogic,meson-gxbb-usb", .data = ¶ms_amlogic },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, dwc2_of_match_table);
|
||||
|
|
|
@ -11,7 +11,16 @@
|
|||
#define CLKID_FCLK_DIV3 5
|
||||
#define CLKID_FCLK_DIV4 6
|
||||
#define CLKID_CLK81 12
|
||||
#define CLKID_MPLL2 15
|
||||
#define CLKID_SPI 34
|
||||
#define CLKID_I2C 22
|
||||
#define CLKID_ETH 36
|
||||
#define CLKID_USB0 50
|
||||
#define CLKID_USB1 51
|
||||
#define CLKID_USB 55
|
||||
#define CLKID_USB1_DDR_BRIDGE 64
|
||||
#define CLKID_USB0_DDR_BRIDGE 65
|
||||
#define CLKID_AO_I2C 93
|
||||
#define CLKID_SD_EMMC_A 94
|
||||
#define CLKID_SD_EMMC_B 95
|
||||
#define CLKID_SD_EMMC_C 96
|
||||
|
|
Loading…
Reference in New Issue
Block a user