mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-21 15:01:36 +03:00
64cb6ec46f
This way we're building with a limited change set, compared to using a full-blown fork. In theory the chosen change set gives us the ability to use the Crust alternative firmware. * https://github.com/crust-firmware/
5794 lines
151 KiB
Diff
5794 lines
151 KiB
Diff
From 09e32c7ff82f7b45a8dc9c77e2fc60d73ff8acd2 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sat, 30 May 2020 03:00:42 -0500
|
|
Subject: [PATCH 01/17] clk: sunxi: Add a dummy clock driver for the RTC
|
|
|
|
The 32kHz clock ("LOSC") on sunxi SoCs is provided by the RTC. It is
|
|
used, among other things, by the XHCI controller in the H6. To be able
|
|
to call clk_get_bulk() on the XHCI controller, some device needs to
|
|
provide all referenced clocks.
|
|
|
|
Since LOSC is a fixed-rate always-on clock, implementation is trivial.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
drivers/clk/sunxi/Makefile | 1 +
|
|
drivers/clk/sunxi/clk_rtc.c | 35 +++++++++++++++++++++++++++++++++++
|
|
2 files changed, 36 insertions(+)
|
|
create mode 100644 drivers/clk/sunxi/clk_rtc.c
|
|
|
|
diff --git a/drivers/clk/sunxi/Makefile b/drivers/clk/sunxi/Makefile
|
|
index 36fb2aeb56..3394aa6de8 100644
|
|
--- a/drivers/clk/sunxi/Makefile
|
|
+++ b/drivers/clk/sunxi/Makefile
|
|
@@ -5,6 +5,7 @@
|
|
#
|
|
|
|
obj-$(CONFIG_CLK_SUNXI) += clk_sunxi.o
|
|
+obj-$(CONFIG_CLK_SUNXI) += clk_rtc.o
|
|
|
|
obj-$(CONFIG_CLK_SUN4I_A10) += clk_a10.o
|
|
obj-$(CONFIG_CLK_SUN5I_A10S) += clk_a10s.o
|
|
diff --git a/drivers/clk/sunxi/clk_rtc.c b/drivers/clk/sunxi/clk_rtc.c
|
|
new file mode 100644
|
|
index 0000000000..bbbfe8793f
|
|
--- /dev/null
|
|
+++ b/drivers/clk/sunxi/clk_rtc.c
|
|
@@ -0,0 +1,35 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+/*
|
|
+ * Copyright (C) 2018 Amarula Solutions.
|
|
+ * Author: Jagan Teki <jagan@amarulasolutions.com>
|
|
+ */
|
|
+
|
|
+#include <clk-uclass.h>
|
|
+#include <dm.h>
|
|
+
|
|
+static int clk_sun6i_rtc_enable(struct clk *clk)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static const struct clk_ops clk_sun6i_rtc_ops = {
|
|
+ .enable = clk_sun6i_rtc_enable,
|
|
+};
|
|
+
|
|
+static const struct udevice_id sun6i_rtc_ids[] = {
|
|
+ { .compatible = "allwinner,sun6i-a31-rtc" },
|
|
+ { .compatible = "allwinner,sun8i-a23-rtc" },
|
|
+ { .compatible = "allwinner,sun8i-h3-rtc" },
|
|
+ { .compatible = "allwinner,sun8i-r40-rtc" },
|
|
+ { .compatible = "allwinner,sun8i-v3-rtc" },
|
|
+ { .compatible = "allwinner,sun50i-h5-rtc" },
|
|
+ { .compatible = "allwinner,sun50i-h6-rtc" },
|
|
+ { }
|
|
+};
|
|
+
|
|
+U_BOOT_DRIVER(clk_sun6i_rtc) = {
|
|
+ .name = "clk_sun6i_rtc",
|
|
+ .id = UCLASS_CLK,
|
|
+ .of_match = sun6i_rtc_ids,
|
|
+ .ops = &clk_sun6i_rtc_ops,
|
|
+};
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 3148980d49864d686206f8f2921eb5954e378dd5 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sat, 30 May 2020 02:57:04 -0500
|
|
Subject: [PATCH 02/17] usb: xhci-dwc3: Add support for clocks/resets
|
|
|
|
Some platforms, like the Allwinner H6, do not have a separate glue layer
|
|
around the dwc3. Instead, they rely on the clocks/resets/phys referenced
|
|
from the dwc3 DT node itself. Add support for enabling the clocks/resets
|
|
referenced from the dwc3 DT node.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
drivers/usb/host/xhci-dwc3.c | 56 ++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 56 insertions(+)
|
|
|
|
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
|
|
index 27f84102db..80302b8223 100644
|
|
--- a/drivers/usb/host/xhci-dwc3.c
|
|
+++ b/drivers/usb/host/xhci-dwc3.c
|
|
@@ -7,10 +7,12 @@
|
|
* Author: Ramneek Mehresh<ramneek.mehresh@freescale.com>
|
|
*/
|
|
|
|
+#include <clk.h>
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
#include <generic-phy.h>
|
|
#include <log.h>
|
|
+#include <reset.h>
|
|
#include <usb.h>
|
|
#include <dwc3-uboot.h>
|
|
#include <linux/delay.h>
|
|
@@ -21,7 +23,9 @@
|
|
#include <linux/usb/otg.h>
|
|
|
|
struct xhci_dwc3_platdata {
|
|
+ struct clk_bulk clks;
|
|
struct phy_bulk phys;
|
|
+ struct reset_ctl_bulk resets;
|
|
};
|
|
|
|
void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
|
|
@@ -111,6 +115,46 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
|
|
}
|
|
|
|
#if CONFIG_IS_ENABLED(DM_USB)
|
|
+static int xhci_dwc3_reset_init(struct udevice *dev,
|
|
+ struct xhci_dwc3_platdata *plat)
|
|
+{
|
|
+ int ret;
|
|
+
|
|
+ ret = reset_get_bulk(dev, &plat->resets);
|
|
+ if (ret == -ENOTSUPP || ret == -ENOENT)
|
|
+ return 0;
|
|
+ else if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = reset_deassert_bulk(&plat->resets);
|
|
+ if (ret) {
|
|
+ reset_release_bulk(&plat->resets);
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int xhci_dwc3_clk_init(struct udevice *dev,
|
|
+ struct xhci_dwc3_platdata *plat)
|
|
+{
|
|
+ int ret;
|
|
+
|
|
+ ret = clk_get_bulk(dev, &plat->clks);
|
|
+ if (ret == -ENOSYS || ret == -ENOENT)
|
|
+ return 0;
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = clk_enable_bulk(&plat->clks);
|
|
+ if (ret) {
|
|
+ clk_release_bulk(&plat->clks);
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int xhci_dwc3_probe(struct udevice *dev)
|
|
{
|
|
struct xhci_hcor *hcor;
|
|
@@ -122,6 +166,14 @@ static int xhci_dwc3_probe(struct udevice *dev)
|
|
u32 reg;
|
|
int ret;
|
|
|
|
+ ret = xhci_dwc3_clk_init(dev, plat);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = xhci_dwc3_reset_init(dev, plat);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
hccr = (struct xhci_hccr *)((uintptr_t)dev_read_addr(dev));
|
|
hcor = (struct xhci_hcor *)((uintptr_t)hccr +
|
|
HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
|
|
@@ -171,6 +223,10 @@ static int xhci_dwc3_remove(struct udevice *dev)
|
|
|
|
dwc3_shutdown_phy(dev, &plat->phys);
|
|
|
|
+ reset_release_bulk(&plat->resets);
|
|
+
|
|
+ clk_release_bulk(&plat->clks);
|
|
+
|
|
return xhci_deregister(dev);
|
|
}
|
|
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 45f8ac02615d6f0ee041a60bb09ca7eb658a32b0 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sat, 30 May 2020 03:07:12 -0500
|
|
Subject: [PATCH 03/17] configs: Add a config for the Orange Pi 3
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
configs/orangepi_3_defconfig | 16 ++++++++++++++++
|
|
1 file changed, 16 insertions(+)
|
|
create mode 100644 configs/orangepi_3_defconfig
|
|
|
|
diff --git a/configs/orangepi_3_defconfig b/configs/orangepi_3_defconfig
|
|
new file mode 100644
|
|
index 0000000000..c9b9725960
|
|
--- /dev/null
|
|
+++ b/configs/orangepi_3_defconfig
|
|
@@ -0,0 +1,16 @@
|
|
+CONFIG_ARM=y
|
|
+CONFIG_ARCH_SUNXI=y
|
|
+CONFIG_SPL=y
|
|
+CONFIG_MACH_SUN50I_H6=y
|
|
+CONFIG_SUNXI_DRAM_H6_LPDDR3=y
|
|
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
|
+CONFIG_SPL_SPI_SUNXI=y
|
|
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
|
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-orangepi-3"
|
|
+CONFIG_PHY_SUN50I_USB3=y
|
|
+CONFIG_USB_XHCI_HCD=y
|
|
+CONFIG_USB_XHCI_DWC3=y
|
|
+CONFIG_USB_EHCI_HCD=y
|
|
+CONFIG_USB_OHCI_HCD=y
|
|
+CONFIG_USB_DWC3=y
|
|
+# CONFIG_USB_DWC3_GADGET is not set
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 4fe434775ae20658b1611e4a2d5c0c87388ea7ad Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Wed, 6 May 2020 18:14:44 -0500
|
|
Subject: [PATCH 04/17] spl: fit: Minimally parse OS properties with
|
|
FIT_IMAGE_TINY
|
|
|
|
Some boards, specifically 64-bit Allwinner boards (sun50i), are
|
|
extremely limited on SPL size. One strategy that was used to make space
|
|
was to remove the FIT "os" property parsing code, because it uses a
|
|
rather large lookup table.
|
|
|
|
However, this forces the legacy FIT parsing code path, which requires
|
|
the "firmware" entry in the FIT to reference the U-Boot binary, even if
|
|
U-Boot is not the next binary in the boot sequence (for example, on
|
|
sun50i boards, ATF is run first).
|
|
|
|
This prevents the same FIT image from being used with a SPL with
|
|
CONFIG_SPL_FIT_IMAGE_TINY=n and CONFIG_SPL_ATF=y, because the boot
|
|
method selection code looks at `spl_image.os`, which is only set from
|
|
the "firmware" entry's "os" property.
|
|
|
|
To be able to use CONFIG_SPL_ATF=y, the "firmware" entry in the FIT
|
|
must be ATF, and U-Boot must be a loadable. For this to work, we need to
|
|
parse the "os" property just enough to tell U-Boot from other images, so
|
|
we can find it in the loadables list to append the FDT, and so we don't
|
|
try to append the FDT to ATF (which could clobber adjacent firmware).
|
|
|
|
So add the minimal code necessary to distinguish U-Boot/non-U-Boot
|
|
loadables with CONFIG_SPL_FIT_IMAGE_TINY=y. This adds about 300 bytes,
|
|
much less than the 7400 bytes added by CONFIG_SPL_FIT_IMAGE_TINY=n.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
common/spl/Kconfig | 4 +---
|
|
common/spl/spl_fit.c | 17 ++++++++++++++++-
|
|
2 files changed, 17 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
|
|
index 8ece9057b1..7f40ddb7a5 100644
|
|
--- a/common/spl/Kconfig
|
|
+++ b/common/spl/Kconfig
|
|
@@ -449,9 +449,7 @@ config SPL_FIT_IMAGE_TINY
|
|
Enable this to reduce the size of the FIT image loading code
|
|
in SPL, if space for the SPL binary is very tight.
|
|
|
|
- This removes the detection of image types (which forces the
|
|
- first image to be treated as having a U-Boot style calling
|
|
- convention) and skips the recording of each loaded payload
|
|
+ This skips the recording of each loaded payload
|
|
(i.e. loadable) into the FDT (modifying the loaded FDT to
|
|
ensure this information is available to the next image
|
|
invoked).
|
|
diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
|
|
index f581a22421..10cc11e128 100644
|
|
--- a/common/spl/spl_fit.c
|
|
+++ b/common/spl/spl_fit.c
|
|
@@ -466,7 +466,22 @@ static int spl_fit_record_loadable(const void *fit, int images, int index,
|
|
static int spl_fit_image_get_os(const void *fit, int noffset, uint8_t *os)
|
|
{
|
|
#if CONFIG_IS_ENABLED(FIT_IMAGE_TINY) && !defined(CONFIG_SPL_OS_BOOT)
|
|
- return -ENOTSUPP;
|
|
+ const char *name = fdt_getprop(fit, noffset, FIT_OS_PROP, NULL);
|
|
+
|
|
+ if (!name)
|
|
+ return -ENOENT;
|
|
+
|
|
+ /*
|
|
+ * We don't care what the type of the image actually is,
|
|
+ * only whether or not it is U-Boot. This saves some
|
|
+ * space by omitting the large table of OS types.
|
|
+ */
|
|
+ if (!strcmp(name, "u-boot"))
|
|
+ *os = IH_OS_U_BOOT;
|
|
+ else
|
|
+ *os = IH_OS_INVALID;
|
|
+
|
|
+ return 0;
|
|
#else
|
|
return fit_image_get_os(fit, noffset, os);
|
|
#endif
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 1b4e87017adbd411652c8284cfea460f36135774 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Fri, 15 Dec 2017 07:37:40 -0600
|
|
Subject: [PATCH 05/17] mksunxi_fit_atf.sh: Update FIT component descriptions
|
|
|
|
Since commit d879616e9e64 ("spl: fit: simplify logic for FDT loading for
|
|
non-OS boots"), the SPL looks at the "os" properties of FIT images to
|
|
determine where to append the FDT.
|
|
|
|
The "os" property of the "firmware" image also determines how to execute
|
|
the next stage of the boot process, as in 1d3790905d9c ("spl: atf:
|
|
introduce spl_invoke_atf and make bl31_entry private").
|
|
|
|
To support this additional functionality, and to properly model the boot
|
|
process, where ATF runs before U-Boot, add the "os" properties and swap
|
|
the firmware/loadable images in the FIT image.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/mksunxi_fit_atf.sh | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/board/sunxi/mksunxi_fit_atf.sh b/board/sunxi/mksunxi_fit_atf.sh
|
|
index 88ad719747..4dfd22db78 100755
|
|
--- a/board/sunxi/mksunxi_fit_atf.sh
|
|
+++ b/board/sunxi/mksunxi_fit_atf.sh
|
|
@@ -31,6 +31,7 @@ cat << __HEADER_EOF
|
|
description = "U-Boot (64-bit)";
|
|
data = /incbin/("u-boot-nodtb.bin");
|
|
type = "standalone";
|
|
+ os = "u-boot";
|
|
arch = "arm64";
|
|
compression = "none";
|
|
load = <0x4a000000>;
|
|
@@ -39,6 +40,7 @@ cat << __HEADER_EOF
|
|
description = "ARM Trusted Firmware";
|
|
data = /incbin/("$BL31");
|
|
type = "firmware";
|
|
+ os = "arm-trusted-firmware";
|
|
arch = "arm64";
|
|
compression = "none";
|
|
load = <$BL31_ADDR>;
|
|
@@ -73,8 +75,8 @@ do
|
|
cat << __CONF_SECTION_EOF
|
|
config_$cnt {
|
|
description = "$(basename $dtname .dtb)";
|
|
- firmware = "uboot";
|
|
- loadables = "atf";
|
|
+ firmware = "atf";
|
|
+ loadables = "uboot";
|
|
fdt = "fdt_$cnt";
|
|
};
|
|
__CONF_SECTION_EOF
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From ba379404b6fb6dc47e4490d2b9426ce7d8753cca Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Fri, 15 Dec 2017 09:21:16 -0600
|
|
Subject: [PATCH 06/17] sunxi: Add support for including SCP firmware
|
|
|
|
Allwinner sun50i SoCs contain an OpenRISC 1000 CPU that functions as a
|
|
System Control Processor, or SCP. ARM Trusted Firmware (ATF)
|
|
communicates with the SCP over SCPI to implement the PSCI system suspend
|
|
and shutdown functionality. Currently, SCP firmware is optional; the
|
|
system will boot and run without it, but system suspend will be
|
|
unavailable.
|
|
|
|
Since all communication with the SCP is mediated by ATF, the only thing
|
|
U-Boot needs to do is load the firmware into SRAM. The SCP firmware
|
|
occupies the last 16KiB of SRAM A2, immediately following ATF.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/README.sunxi64 | 43 ++++++++++++++++++++++++++++------
|
|
board/sunxi/mksunxi_fit_atf.sh | 23 +++++++++++++++---
|
|
2 files changed, 56 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/board/sunxi/README.sunxi64 b/board/sunxi/README.sunxi64
|
|
index 258921af22..9a67e5301e 100644
|
|
--- a/board/sunxi/README.sunxi64
|
|
+++ b/board/sunxi/README.sunxi64
|
|
@@ -14,8 +14,12 @@ Quick Start / Overview
|
|
- Build the ARM Trusted Firmware binary (see "ARM Trusted Firmware (ATF)" below)
|
|
$ cd /src/arm-trusted-firmware
|
|
$ make PLAT=sun50i_a64 DEBUG=1 bl31
|
|
+- Build the SCP firmware binary (see "SCP firmware (Crust)" below)
|
|
+ $ cd /src/crust
|
|
+ $ make pine64_plus_defconfig && make -j5 scp
|
|
- Build U-Boot (see "SPL/U-Boot" below)
|
|
$ export BL31=/path/to/bl31.bin
|
|
+ $ export SCP=/src/crust/build/scp/scp.bin
|
|
$ make pine64_plus_defconfig && make -j5
|
|
- Transfer to an uSD card (see "microSD card" below)
|
|
$ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdx bs=8k seek=1
|
|
@@ -24,13 +28,17 @@ Quick Start / Overview
|
|
Building the firmware
|
|
=====================
|
|
|
|
-The Allwinner A64/H5 firmware consists of three parts: U-Boot's SPL, an
|
|
-ARM Trusted Firmware (ATF) build and the U-Boot proper.
|
|
-The SPL will load both ATF and U-Boot proper along with the right device
|
|
-tree blob (.dtb) and will pass execution to ATF (in EL3), which in turn will
|
|
-drop into the U-Boot proper (in EL2).
|
|
-As the ATF binary will become part of the U-Boot image file, you will need
|
|
-to build it first.
|
|
+The Allwinner A64/H5/H6 firmware consists of several parts: U-Boot's SPL,
|
|
+ARM Trusted Firmware (ATF), optional System Control Processor (SCP) firmware
|
|
+(e.g. Crust), and the U-Boot proper.
|
|
+
|
|
+The SPL will load all of the other firmware binaries into RAM, along with the
|
|
+right device tree blob (.dtb), and will pass execution to ATF (in EL3). If SCP
|
|
+firmware was loaded, ATF will power on the SCP and wait for it to boot.
|
|
+ATF will then drop into U-Boot proper (in EL2).
|
|
+
|
|
+As the ATF binary and SCP firmware will become part of the U-Boot image file,
|
|
+you will need to build them first.
|
|
|
|
ARM Trusted Firmware (ATF)
|
|
----------------------------
|
|
@@ -53,6 +61,27 @@ As sometimes the ATF build process is a bit picky about the toolchain used,
|
|
or if you can't be bothered with building ATF, there are known working
|
|
binaries in the firmware repository[3], purely for convenience reasons.
|
|
|
|
+ SCP firmware (Crust)
|
|
+----------------------
|
|
+SCP firmware is responsible for implementing system suspend/resume, and (on
|
|
+boards without a PMIC) soft poweroff/on. ATF contains fallback code for CPU
|
|
+power control, so SCP firmware is optional if you don't need either of these
|
|
+features. It runs on the AR100, with is an or1k CPU, not ARM, so it needs a
|
|
+different cross toolchain.
|
|
+
|
|
+There is one SCP firmware implementation currently available, Crust:
|
|
+$ git clone https://github.com/crust-firmware/crust
|
|
+$ cd crust
|
|
+$ export CROSS_COMPILE=or1k-linux-musl-
|
|
+$ make pine64_plus_defconfig
|
|
+$ make scp
|
|
+
|
|
+The same configuration generally works on any board with the same SoC (A64, H5,
|
|
+or H6), so if there is no config for your board, use one for a similar board.
|
|
+
|
|
+Like for ATF, U-Boot finds the SCP firmware binary via an environment variable:
|
|
+$ export SCP=/src/crust/build/scp/scp.bin
|
|
+
|
|
SPL/U-Boot
|
|
------------
|
|
Both U-Boot proper and the SPL are using the 64-bit mode. As the boot ROM
|
|
diff --git a/board/sunxi/mksunxi_fit_atf.sh b/board/sunxi/mksunxi_fit_atf.sh
|
|
index 4dfd22db78..07a2e619ee 100755
|
|
--- a/board/sunxi/mksunxi_fit_atf.sh
|
|
+++ b/board/sunxi/mksunxi_fit_atf.sh
|
|
@@ -1,11 +1,12 @@
|
|
#!/bin/sh
|
|
#
|
|
-# script to generate FIT image source for 64-bit sunxi boards with
|
|
-# ARM Trusted Firmware and multiple device trees (given on the command line)
|
|
+# script to generate FIT image source for 64-bit sunxi boards with ARM Trusted
|
|
+# Firmware, SCP firmware, and multiple device trees (given on the command line)
|
|
#
|
|
# usage: $0 <dt_name> [<dt_name> [<dt_name] ...]
|
|
|
|
[ -z "$BL31" ] && BL31="bl31.bin"
|
|
+[ -z "$SCP" ] && SCP="scp.bin"
|
|
|
|
if [ ! -f $BL31 ]; then
|
|
echo "WARNING: BL31 file $BL31 NOT found, resulting binary is non-functional" >&2
|
|
@@ -13,10 +14,18 @@ if [ ! -f $BL31 ]; then
|
|
BL31=/dev/null
|
|
fi
|
|
|
|
+if [ ! -f $SCP ]; then
|
|
+ echo "WARNING: SCP firmware file $SCP NOT found, system suspend will be unavailable" >&2
|
|
+ echo "Please read the section on SCP firmware in board/sunxi/README.sunxi64" >&2
|
|
+ SCP=/dev/null
|
|
+fi
|
|
+
|
|
if grep -q "^CONFIG_MACH_SUN50I_H6=y" .config; then
|
|
BL31_ADDR=0x104000
|
|
+ SCP_ADDR=0x114000
|
|
else
|
|
BL31_ADDR=0x44000
|
|
+ SCP_ADDR=0x50000
|
|
fi
|
|
|
|
cat << __HEADER_EOF
|
|
@@ -46,6 +55,14 @@ cat << __HEADER_EOF
|
|
load = <$BL31_ADDR>;
|
|
entry = <$BL31_ADDR>;
|
|
};
|
|
+ scp {
|
|
+ description = "SCP firmware";
|
|
+ data = /incbin/("$SCP");
|
|
+ type = "firmware";
|
|
+ arch = "or1k";
|
|
+ compression = "none";
|
|
+ load = <$SCP_ADDR>;
|
|
+ };
|
|
__HEADER_EOF
|
|
|
|
cnt=1
|
|
@@ -76,7 +93,7 @@ do
|
|
config_$cnt {
|
|
description = "$(basename $dtname .dtb)";
|
|
firmware = "atf";
|
|
- loadables = "uboot";
|
|
+ loadables = "scp", "uboot";
|
|
fdt = "fdt_$cnt";
|
|
};
|
|
__CONF_SECTION_EOF
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From bf506720ccf3773f2c323c5c141cce61ad6ebb4d Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Thu, 7 May 2020 18:46:04 -0500
|
|
Subject: [PATCH 07/17] sunxi: DT: A64: update device tree files
|
|
|
|
Import updated device trees from Linux v5.7-rc4. This picks up new
|
|
hardware (PinePhone, PineTab); and it drops the U-Boot specific DTSI
|
|
files for the Pinebook and the Teres-I, since the ANX6345 bridge is
|
|
now supported upstream.
|
|
|
|
A couple of headers needed updates for recently-added hardware support.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
arch/arm/dts/Makefile | 3 +
|
|
arch/arm/dts/axp803.dtsi | 82 +--
|
|
arch/arm/dts/sun50i-a64-amarula-relic.dts | 109 +++-
|
|
arch/arm/dts/sun50i-a64-bananapi-m64.dts | 118 ++--
|
|
arch/arm/dts/sun50i-a64-cpu-opp.dtsi | 75 +++
|
|
arch/arm/dts/sun50i-a64-nanopi-a64.dts | 70 +--
|
|
.../dts/sun50i-a64-oceanic-5205-5inmfd.dts | 31 +-
|
|
arch/arm/dts/sun50i-a64-olinuxino-emmc.dts | 12 +-
|
|
arch/arm/dts/sun50i-a64-olinuxino.dts | 104 ++--
|
|
arch/arm/dts/sun50i-a64-orangepi-win.dts | 127 +++--
|
|
arch/arm/dts/sun50i-a64-pine64-lts.dts | 7 +-
|
|
arch/arm/dts/sun50i-a64-pine64-plus.dts | 52 +-
|
|
arch/arm/dts/sun50i-a64-pine64.dts | 97 ++--
|
|
arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi | 17 -
|
|
arch/arm/dts/sun50i-a64-pinebook.dts | 237 ++++++--
|
|
arch/arm/dts/sun50i-a64-pinephone-1.0.dts | 11 +
|
|
arch/arm/dts/sun50i-a64-pinephone-1.1.dts | 11 +
|
|
arch/arm/dts/sun50i-a64-pinephone.dtsi | 379 +++++++++++++
|
|
arch/arm/dts/sun50i-a64-pinetab.dts | 460 ++++++++++++++++
|
|
arch/arm/dts/sun50i-a64-sopine-baseboard.dts | 113 ++--
|
|
arch/arm/dts/sun50i-a64-sopine.dtsi | 69 +--
|
|
arch/arm/dts/sun50i-a64-teres-i-u-boot.dtsi | 41 --
|
|
arch/arm/dts/sun50i-a64-teres-i.dts | 138 ++++-
|
|
arch/arm/dts/sun50i-a64.dtsi | 516 +++++++++++++++---
|
|
include/dt-bindings/clock/sun50i-a64-ccu.h | 4 +-
|
|
include/dt-bindings/clock/sun8i-de2.h | 3 +
|
|
include/dt-bindings/reset/sun8i-de2.h | 1 +
|
|
27 files changed, 2266 insertions(+), 621 deletions(-)
|
|
create mode 100644 arch/arm/dts/sun50i-a64-cpu-opp.dtsi
|
|
delete mode 100644 arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi
|
|
create mode 100644 arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
create mode 100644 arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
create mode 100644 arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
create mode 100644 arch/arm/dts/sun50i-a64-pinetab.dts
|
|
delete mode 100644 arch/arm/dts/sun50i-a64-teres-i-u-boot.dtsi
|
|
|
|
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
|
|
index 9900b44274..38a31589ba 100644
|
|
--- a/arch/arm/dts/Makefile
|
|
+++ b/arch/arm/dts/Makefile
|
|
@@ -593,6 +593,9 @@ dtb-$(CONFIG_MACH_SUN50I) += \
|
|
sun50i-a64-pine64-plus.dtb \
|
|
sun50i-a64-pine64.dtb \
|
|
sun50i-a64-pinebook.dtb \
|
|
+ sun50i-a64-pinephone-1.0.dtb \
|
|
+ sun50i-a64-pinephone-1.1.dtb \
|
|
+ sun50i-a64-pinetab.dtb \
|
|
sun50i-a64-sopine-baseboard.dtb \
|
|
sun50i-a64-teres-i.dtb
|
|
dtb-$(CONFIG_MACH_SUN9I) += \
|
|
diff --git a/arch/arm/dts/axp803.dtsi b/arch/arm/dts/axp803.dtsi
|
|
index e5eae8bafc..10e9186a76 100644
|
|
--- a/arch/arm/dts/axp803.dtsi
|
|
+++ b/arch/arm/dts/axp803.dtsi
|
|
@@ -1,44 +1,5 @@
|
|
-/*
|
|
- * Copyright 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
- *
|
|
- * 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
|
|
/*
|
|
* AXP803 Integrated Power Management Chip
|
|
@@ -49,6 +10,39 @@
|
|
interrupt-controller;
|
|
#interrupt-cells = <1>;
|
|
|
|
+ ac_power_supply: ac-power-supply {
|
|
+ compatible = "x-powers,axp803-ac-power-supply",
|
|
+ "x-powers,axp813-ac-power-supply";
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
+ axp_adc: adc {
|
|
+ compatible = "x-powers,axp803-adc", "x-powers,axp813-adc";
|
|
+ #io-channel-cells = <1>;
|
|
+ };
|
|
+
|
|
+ axp_gpio: gpio {
|
|
+ compatible = "x-powers,axp803-gpio", "x-powers,axp813-gpio";
|
|
+ gpio-controller;
|
|
+ #gpio-cells = <2>;
|
|
+
|
|
+ gpio0_ldo: gpio0-ldo {
|
|
+ pins = "GPIO0";
|
|
+ function = "ldo";
|
|
+ };
|
|
+
|
|
+ gpio1_ldo: gpio1-ldo {
|
|
+ pins = "GPIO1";
|
|
+ function = "ldo";
|
|
+ };
|
|
+ };
|
|
+
|
|
+ battery_power_supply: battery-power-supply {
|
|
+ compatible = "x-powers,axp803-battery-power-supply",
|
|
+ "x-powers,axp813-battery-power-supply";
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
regulators {
|
|
/* Default work frequency for buck regulators */
|
|
x-powers,dcdc-freq = <3000>;
|
|
@@ -152,4 +146,10 @@
|
|
status = "disabled";
|
|
};
|
|
};
|
|
+
|
|
+ usb_power_supply: usb-power-supply {
|
|
+ compatible = "x-powers,axp803-usb-power-supply",
|
|
+ "x-powers,axp813-usb-power-supply";
|
|
+ status = "disabled";
|
|
+ };
|
|
};
|
|
diff --git a/arch/arm/dts/sun50i-a64-amarula-relic.dts b/arch/arm/dts/sun50i-a64-amarula-relic.dts
|
|
index 6cb2b7f0c8..c7bd73f35e 100644
|
|
--- a/arch/arm/dts/sun50i-a64-amarula-relic.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-amarula-relic.dts
|
|
@@ -1,12 +1,11 @@
|
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2018 Amarula Solutions B.V.
|
|
- * Author: Jagan Teki <jagan@amarulasolutions.com>
|
|
- */
|
|
+// Copyright (C) 2018 Amarula Solutions B.V.
|
|
+// Author: Jagan Teki <jagan@amarulasolutions.com>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -22,6 +21,41 @@
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
+ i2c {
|
|
+ compatible = "i2c-gpio";
|
|
+ sda-gpios = <&pio 4 13 GPIO_ACTIVE_HIGH>;
|
|
+ scl-gpios = <&pio 4 12 GPIO_ACTIVE_HIGH>;
|
|
+ i2c-gpio,delay-us = <5>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ ov5640: camera@3c {
|
|
+ compatible = "ovti,ov5640";
|
|
+ reg = <0x3c>;
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&csi_mclk_pin>;
|
|
+ clocks = <&ccu CLK_CSI_MCLK>;
|
|
+ clock-names = "xclk";
|
|
+
|
|
+ AVDD-supply = <®_aldo1>;
|
|
+ DOVDD-supply = <®_dldo3>;
|
|
+ DVDD-supply = <®_eldo3>;
|
|
+ reset-gpios = <&pio 4 14 GPIO_ACTIVE_LOW>; /* CSI-RST-R: PE14 */
|
|
+ powerdown-gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* CSI-STBY-R: PE15 */
|
|
+
|
|
+ port {
|
|
+ ov5640_ep: endpoint {
|
|
+ remote-endpoint = <&csi_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
wifi_pwrseq: wifi-pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
clocks = <&rtc 1>;
|
|
@@ -30,10 +64,70 @@
|
|
};
|
|
};
|
|
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&csi {
|
|
+ status = "okay";
|
|
+
|
|
+ port {
|
|
+ csi_ep: endpoint {
|
|
+ remote-endpoint = <&ov5640_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
&ehci0 {
|
|
status = "okay";
|
|
};
|
|
|
|
+&i2c0 {
|
|
+ status = "okay";
|
|
+
|
|
+ sensor@48 {
|
|
+ compatible = "st,stlm75";
|
|
+ reg = <0x48>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&i2c0_pins {
|
|
+ bias-pull-up;
|
|
+};
|
|
+
|
|
+&i2c1 {
|
|
+ status = "okay";
|
|
+
|
|
+ touchscreen@5d {
|
|
+ compatible = "goodix,gt5663";
|
|
+ reg = <0x5d>;
|
|
+ AVDD28-supply = <®_ldo_io0>; /* VCC-CTP: GPIO0-LDO */
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <7 4 IRQ_TYPE_EDGE_FALLING>;
|
|
+ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* CTP-INT: PH4 */
|
|
+ reset-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* CTP-RST: PH8 */
|
|
+ touchscreen-inverted-x;
|
|
+ touchscreen-inverted-y;
|
|
+ };
|
|
+};
|
|
+
|
|
&mmc1 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc1_pins>;
|
|
@@ -197,6 +291,13 @@
|
|
regulator-name = "vdd-cpus";
|
|
};
|
|
|
|
+®_ldo_io0 {
|
|
+ regulator-min-microvolt = <2800000>;
|
|
+ regulator-max-microvolt = <2800000>;
|
|
+ regulator-name = "vcc-ctp";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_rtc_ldo {
|
|
regulator-name = "vcc-rtc";
|
|
};
|
|
diff --git a/arch/arm/dts/sun50i-a64-bananapi-m64.dts b/arch/arm/dts/sun50i-a64-bananapi-m64.dts
|
|
index ef1c90401b..883f217efb 100644
|
|
--- a/arch/arm/dts/sun50i-a64-bananapi-m64.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-bananapi-m64.dts
|
|
@@ -1,48 +1,10 @@
|
|
-/*
|
|
- * Copyright (c) 2016 ARM Ltd.
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2016 ARM Ltd.
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -94,9 +56,40 @@
|
|
wifi_pwrseq: wifi_pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
|
|
+ clocks = <&rtc 1>;
|
|
+ clock-names = "ext_clock";
|
|
};
|
|
};
|
|
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -130,8 +123,6 @@
|
|
};
|
|
|
|
&i2c1 {
|
|
- pinctrl-names = "default";
|
|
- pinctrl-0 = <&i2c1_pins>;
|
|
status = "okay";
|
|
};
|
|
|
|
@@ -207,6 +198,14 @@
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo1 {
|
|
/*
|
|
* This regulator also drives the PE pingroup GPIOs,
|
|
@@ -326,6 +325,22 @@
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ status = "okay";
|
|
+ simple-audio-card,widgets = "Headphone", "Headphone Jack",
|
|
+ "Microphone", "Microphone Jack",
|
|
+ "Microphone", "Onboard Microphone";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Headphone Jack", "HP",
|
|
+ "MIC2", "Microphone Jack",
|
|
+ "Onboard Microphone", "MBIAS",
|
|
+ "MIC1", "Onboard Microphone";
|
|
+};
|
|
+
|
|
&uart0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart0_pb_pins>;
|
|
@@ -335,7 +350,19 @@
|
|
&uart1 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
|
+ uart-has-rtscts;
|
|
status = "okay";
|
|
+
|
|
+ bluetooth {
|
|
+ compatible = "brcm,bcm43438-bt";
|
|
+ clocks = <&rtc 1>;
|
|
+ clock-names = "lpo";
|
|
+ vbat-supply = <®_dldo2>;
|
|
+ vddio-supply = <®_dldo4>;
|
|
+ device-wakeup-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
|
|
+ host-wakeup-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
|
|
+ shutdown-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
|
|
+ };
|
|
};
|
|
|
|
&usb_otg {
|
|
@@ -343,8 +370,13 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&usb_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&usbphy {
|
|
usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
|
|
+ usb0_vbus_power-supply = <&usb_power_supply>;
|
|
usb0_vbus-supply = <®_drivevbus>;
|
|
status = "okay";
|
|
};
|
|
diff --git a/arch/arm/dts/sun50i-a64-cpu-opp.dtsi b/arch/arm/dts/sun50i-a64-cpu-opp.dtsi
|
|
new file mode 100644
|
|
index 0000000000..578c37490d
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-cpu-opp.dtsi
|
|
@@ -0,0 +1,75 @@
|
|
+// SPDX-License-Identifier: GPL-2.0
|
|
+/*
|
|
+ * Copyright (C) 2020 Vasily khoruzhick <anarsoul@gmail.com>
|
|
+ */
|
|
+
|
|
+/ {
|
|
+ cpu0_opp_table: opp_table0 {
|
|
+ compatible = "operating-points-v2";
|
|
+ opp-shared;
|
|
+
|
|
+ opp-648000000 {
|
|
+ opp-hz = /bits/ 64 <648000000>;
|
|
+ opp-microvolt = <1040000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-816000000 {
|
|
+ opp-hz = /bits/ 64 <816000000>;
|
|
+ opp-microvolt = <1100000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-912000000 {
|
|
+ opp-hz = /bits/ 64 <912000000>;
|
|
+ opp-microvolt = <1120000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-960000000 {
|
|
+ opp-hz = /bits/ 64 <960000000>;
|
|
+ opp-microvolt = <1160000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-1008000000 {
|
|
+ opp-hz = /bits/ 64 <1008000000>;
|
|
+ opp-microvolt = <1200000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-1056000000 {
|
|
+ opp-hz = /bits/ 64 <1056000000>;
|
|
+ opp-microvolt = <1240000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-1104000000 {
|
|
+ opp-hz = /bits/ 64 <1104000000>;
|
|
+ opp-microvolt = <1260000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+
|
|
+ opp-1152000000 {
|
|
+ opp-hz = /bits/ 64 <1152000000>;
|
|
+ opp-microvolt = <1300000>;
|
|
+ clock-latency-ns = <244144>; /* 8 32k periods */
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ operating-points-v2 = <&cpu0_opp_table>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ operating-points-v2 = <&cpu0_opp_table>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ operating-points-v2 = <&cpu0_opp_table>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ operating-points-v2 = <&cpu0_opp_table>;
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-nanopi-a64.dts b/arch/arm/dts/sun50i-a64-nanopi-a64.dts
|
|
index 31884dbc88..e58db8a6ca 100644
|
|
--- a/arch/arm/dts/sun50i-a64-nanopi-a64.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-nanopi-a64.dts
|
|
@@ -1,48 +1,10 @@
|
|
-/*
|
|
- * Copyright (C) 2017 Jagan Teki <jteki@openedev.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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -87,6 +49,22 @@
|
|
};
|
|
};
|
|
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -120,12 +98,6 @@
|
|
};
|
|
|
|
/* i2c1 connected with gpio headers like pine64, bananapi */
|
|
-&i2c1 {
|
|
- pinctrl-names = "default";
|
|
- pinctrl-0 = <&i2c1_pins>;
|
|
- status = "disabled";
|
|
-};
|
|
-
|
|
&i2c1_pins {
|
|
bias-pull-up;
|
|
};
|
|
@@ -186,6 +158,10 @@
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo2 {
|
|
regulator-always-on;
|
|
regulator-min-microvolt = <1800000>;
|
|
diff --git a/arch/arm/dts/sun50i-a64-oceanic-5205-5inmfd.dts b/arch/arm/dts/sun50i-a64-oceanic-5205-5inmfd.dts
|
|
index 6a2154525d..577f9e1d08 100644
|
|
--- a/arch/arm/dts/sun50i-a64-oceanic-5205-5inmfd.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-oceanic-5205-5inmfd.dts
|
|
@@ -1,9 +1,7 @@
|
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2019 Oceanic Systems (UK) Ltd.
|
|
- * Copyright (C) 2019 Amarula Solutions B.V.
|
|
- * Author: Jagan Teki <jagan@amarulasolutions.com>
|
|
- */
|
|
+// Copyright (C) 2019 Oceanic Systems (UK) Ltd.
|
|
+// Copyright (C) 2019 Amarula Solutions B.V.
|
|
+// Author: Jagan Teki <jagan@amarulasolutions.com>
|
|
|
|
/dts-v1/;
|
|
|
|
@@ -37,6 +35,22 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&i2c0 {
|
|
+ status = "okay";
|
|
+
|
|
+ touchscreen@5d {
|
|
+ compatible = "goodix,gt911";
|
|
+ reg = <0x5d>;
|
|
+ AVDD28-supply = <®_ldo_io0>; /* VDD_CTP: GPIO0-LDO */
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <7 4 IRQ_TYPE_EDGE_FALLING>;
|
|
+ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* CTP-INT: PH4 */
|
|
+ reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* CTP-RST: PH11 */
|
|
+ touchscreen-inverted-x;
|
|
+ touchscreen-inverted-y;
|
|
+ };
|
|
+};
|
|
+
|
|
&mdio {
|
|
ext_rgmii_phy: ethernet-phy@1 {
|
|
compatible = "ethernet-phy-ieee802.3-c22";
|
|
@@ -52,6 +66,13 @@
|
|
regulator-name = "vcc-phy";
|
|
};
|
|
|
|
+®_ldo_io0 {
|
|
+ regulator-min-microvolt = <2800000>;
|
|
+ regulator-max-microvolt = <2800000>;
|
|
+ regulator-name = "vdd-ctp";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&uart0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart0_pb_pins>;
|
|
diff --git a/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts b/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts
|
|
index 96ab0227e8..efb20846de 100644
|
|
--- a/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts
|
|
@@ -1,8 +1,6 @@
|
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2018 Martin Ayotte <martinayotte@gmail.com>
|
|
- * Copyright (C) 2019 Sunil Mohan Adapa <sunil@medhas.org>
|
|
- */
|
|
+// Copyright (C) 2018 Martin Ayotte <martinayotte@gmail.com>
|
|
+// Copyright (C) 2019 Sunil Mohan Adapa <sunil@medhas.org>
|
|
|
|
#include "sun50i-a64-olinuxino.dts"
|
|
|
|
@@ -15,9 +13,13 @@
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc2_pins>;
|
|
vmmc-supply = <®_dcdc1>;
|
|
- vqmmc-supply = <®_dcdc1>;
|
|
+ vqmmc-supply = <®_eldo1>;
|
|
bus-width = <8>;
|
|
non-removable;
|
|
cap-mmc-hw-reset;
|
|
status = "okay";
|
|
};
|
|
+
|
|
+&pio {
|
|
+ vcc-pc-supply = <®_eldo1>;
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-olinuxino.dts b/arch/arm/dts/sun50i-a64-olinuxino.dts
|
|
index f7a4bccaa5..5fa9ca0191 100644
|
|
--- a/arch/arm/dts/sun50i-a64-olinuxino.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-olinuxino.dts
|
|
@@ -1,48 +1,10 @@
|
|
-/*
|
|
- * Copyright (C) 2017 Jagan Teki <jteki@openedev.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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -87,6 +49,22 @@
|
|
};
|
|
};
|
|
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -140,7 +118,7 @@
|
|
&mmc1 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc1_pins>;
|
|
- vmmc-supply = <®_aldo2>;
|
|
+ vmmc-supply = <®_dcdc1>;
|
|
vqmmc-supply = <®_dldo4>;
|
|
mmc-pwrseq = <&wifi_pwrseq>;
|
|
bus-width = <4>;
|
|
@@ -163,6 +141,34 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&pio {
|
|
+ vcc-pc-supply = <®_dcdc1>;
|
|
+ vcc-pd-supply = <®_dcdc1>;
|
|
+ vcc-pe-supply = <®_aldo1>;
|
|
+ vcc-pg-supply = <®_dldo4>;
|
|
+};
|
|
+
|
|
+&r_pio {
|
|
+ /*
|
|
+ * FIXME: We can't add that supply for now since it would
|
|
+ * create a circular dependency between pinctrl, the regulator
|
|
+ * and the RSB Bus.
|
|
+ *
|
|
+ * vcc-pl-supply = <®_aldo2>;
|
|
+ */
|
|
+};
|
|
+
|
|
+&pio {
|
|
+ vcc-pa-supply = <®_dcdc1>;
|
|
+ vcc-pb-supply = <®_dcdc1>;
|
|
+ vcc-pc-supply = <®_dcdc1>;
|
|
+ vcc-pd-supply = <®_dcdc1>;
|
|
+ vcc-pe-supply = <®_aldo1>;
|
|
+ vcc-pf-supply = <®_dcdc1>;
|
|
+ vcc-pg-supply = <®_dldo4>;
|
|
+ vcc-ph-supply = <®_dcdc1>;
|
|
+};
|
|
+
|
|
&r_rsb {
|
|
status = "okay";
|
|
|
|
@@ -175,8 +181,22 @@
|
|
};
|
|
};
|
|
|
|
+/* VCC-PL is powered by aldo2 but we cannot add it as the RSB */
|
|
+/* interface used to talk to the PMIC in on the PL pins */
|
|
+/* &r_pio { */
|
|
+/* vcc-pl-supply = <®_aldo2>; */
|
|
+/* }; */
|
|
+
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo1 {
|
|
regulator-always-on;
|
|
regulator-min-microvolt = <2800000>;
|
|
diff --git a/arch/arm/dts/sun50i-a64-orangepi-win.dts b/arch/arm/dts/sun50i-a64-orangepi-win.dts
|
|
index b0c64f7579..fde9c7a99b 100644
|
|
--- a/arch/arm/dts/sun50i-a64-orangepi-win.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-orangepi-win.dts
|
|
@@ -1,49 +1,11 @@
|
|
-/*
|
|
- * Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
|
|
- * Copyright (C) 2017-2018 Samuel Holland <samuel@sholland.org>
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
|
|
+// Copyright (C) 2017-2018 Samuel Holland <samuel@sholland.org>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -109,9 +71,40 @@
|
|
wifi_pwrseq: wifi_pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&r_pio 0 8 GPIO_ACTIVE_LOW>; /* PL8 */
|
|
+ clocks = <&rtc 1>;
|
|
+ clock-names = "ext_clock";
|
|
};
|
|
};
|
|
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -170,6 +163,14 @@
|
|
bus-width = <4>;
|
|
non-removable;
|
|
status = "okay";
|
|
+
|
|
+ brcmf: wifi@1 {
|
|
+ reg = <1>;
|
|
+ compatible = "brcm,bcm4329-fmac";
|
|
+ interrupt-parent = <&r_pio>;
|
|
+ interrupts = <0 7 IRQ_TYPE_LEVEL_LOW>; /* PL7 */
|
|
+ interrupt-names = "host-wake";
|
|
+ };
|
|
};
|
|
|
|
&ohci0 {
|
|
@@ -180,6 +181,10 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&r_ir {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&r_rsb {
|
|
status = "okay";
|
|
|
|
@@ -188,11 +193,20 @@
|
|
reg = <0x3a3>;
|
|
interrupt-parent = <&r_intc>;
|
|
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
|
+ x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */
|
|
};
|
|
};
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo1 {
|
|
regulator-min-microvolt = <2800000>;
|
|
regulator-max-microvolt = <2800000>;
|
|
@@ -310,6 +324,22 @@
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ status = "okay";
|
|
+ simple-audio-card,widgets = "Headphone", "Headphone Jack",
|
|
+ "Microphone", "Microphone Jack",
|
|
+ "Microphone", "Onboard Microphone";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Headphone Jack", "HP",
|
|
+ "MIC2", "Microphone Jack",
|
|
+ "Onboard Microphone", "MBIAS",
|
|
+ "MIC1", "Onboard Microphone";
|
|
+};
|
|
+
|
|
&spi0 {
|
|
status = "okay";
|
|
|
|
@@ -333,7 +363,20 @@
|
|
&uart1 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
|
+ uart-has-rtscts;
|
|
status = "okay";
|
|
+
|
|
+ bluetooth {
|
|
+ compatible = "brcm,bcm43438-bt";
|
|
+ max-speed = <1500000>;
|
|
+ clocks = <&rtc 1>;
|
|
+ clock-names = "lpo";
|
|
+ vbat-supply = <®_dldo2>;
|
|
+ vddio-supply = <®_dldo4>;
|
|
+ device-wakeup-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
|
|
+ host-wakeup-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
|
|
+ shutdown-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
|
|
+ };
|
|
};
|
|
|
|
/* On Pi-2 connector, RTS/CTS optional */
|
|
diff --git a/arch/arm/dts/sun50i-a64-pine64-lts.dts b/arch/arm/dts/sun50i-a64-pine64-lts.dts
|
|
index 72d6961dc3..302e24be0a 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pine64-lts.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pine64-lts.dts
|
|
@@ -1,8 +1,5 @@
|
|
-/*
|
|
- * SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
- *
|
|
- * Copyright (c) 2018 ARM Ltd.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2018 ARM Ltd.
|
|
|
|
#include "sun50i-a64-sopine-baseboard.dts"
|
|
|
|
diff --git a/arch/arm/dts/sun50i-a64-pine64-plus.dts b/arch/arm/dts/sun50i-a64-pine64-plus.dts
|
|
index 24f1aac366..b26181cf90 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pine64-plus.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pine64-plus.dts
|
|
@@ -1,44 +1,5 @@
|
|
-/*
|
|
- * Copyright (c) 2016 ARM Ltd.
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2016 ARM Ltd.
|
|
|
|
#include "sun50i-a64-pine64.dts"
|
|
|
|
@@ -63,3 +24,12 @@
|
|
reg = <1>;
|
|
};
|
|
};
|
|
+
|
|
+®_dc1sw {
|
|
+ /*
|
|
+ * Ethernet PHY needs 30ms to properly power up and some more
|
|
+ * to initialize. 100ms should be plenty of time to finish
|
|
+ * whole process.
|
|
+ */
|
|
+ regulator-enable-ramp-delay = <100000>;
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pine64.dts b/arch/arm/dts/sun50i-a64-pine64.dts
|
|
index c077b6c1f4..2165f238af 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pine64.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pine64.dts
|
|
@@ -1,48 +1,10 @@
|
|
-/*
|
|
- * Copyright (c) 2016 ARM Ltd.
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2016 ARM Ltd.
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
@@ -75,6 +37,35 @@
|
|
};
|
|
};
|
|
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -109,8 +100,6 @@
|
|
};
|
|
|
|
&i2c1 {
|
|
- pinctrl-names = "default";
|
|
- pinctrl-0 = <&i2c1_pins>;
|
|
status = "okay";
|
|
};
|
|
|
|
@@ -156,6 +145,14 @@
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo2 {
|
|
regulator-always-on;
|
|
regulator-min-microvolt = <1800000>;
|
|
@@ -259,6 +256,20 @@
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ simple-audio-card,aux-devs = <&codec_analog>;
|
|
+ simple-audio-card,widgets = "Microphone", "Microphone Jack",
|
|
+ "Headphone", "Headphone Jack";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "Headphone Jack", "HP",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "MIC2", "Microphone Jack";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
/* On Euler connector */
|
|
&spdif {
|
|
status = "disabled";
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi b/arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi
|
|
deleted file mode 100644
|
|
index 650ab97ec9..0000000000
|
|
--- a/arch/arm/dts/sun50i-a64-pinebook-u-boot.dtsi
|
|
+++ /dev/null
|
|
@@ -1,17 +0,0 @@
|
|
-// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2018 Vasily Khoruzhick <anarsoul@gmail.com>
|
|
- *
|
|
- */
|
|
-
|
|
-#include "sunxi-u-boot.dtsi"
|
|
-
|
|
-/* The ANX6345 eDP-bridge is on r_i2c */
|
|
-&r_i2c {
|
|
- anx6345: edp-bridge@38 {
|
|
- compatible = "analogix,anx6345";
|
|
- reg = <0x38>;
|
|
- reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
|
|
- status = "okay";
|
|
- };
|
|
-};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinebook.dts b/arch/arm/dts/sun50i-a64-pinebook.dts
|
|
index ec537c5297..64b1c54f87 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pinebook.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pinebook.dts
|
|
@@ -1,15 +1,14 @@
|
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
- * Copyright (C) 2018 Vasily Khoruzhick <anarsoul@gmail.com>
|
|
- *
|
|
- */
|
|
+// Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
+// Copyright (C) 2018 Vasily Khoruzhick <anarsoul@gmail.com>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
+#include <dt-bindings/input/gpio-keys.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/pwm/pwm.h>
|
|
|
|
@@ -22,32 +21,17 @@
|
|
ethernet0 = &rtl8723cs;
|
|
};
|
|
|
|
- vdd_bl: regulator@0 {
|
|
- compatible = "regulator-fixed";
|
|
- regulator-name = "bl-3v3";
|
|
- regulator-min-microvolt = <3300000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
- gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
|
- enable-active-high;
|
|
- };
|
|
-
|
|
backlight: backlight {
|
|
compatible = "pwm-backlight";
|
|
pwms = <&pwm 0 50000 0>;
|
|
brightness-levels = <0 5 10 15 20 30 40 55 70 85 100>;
|
|
default-brightness-level = <2>;
|
|
enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
|
|
- power-supply = <&vdd_bl>;
|
|
+ power-supply = <®_vbklt>;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
-
|
|
- framebuffer-lcd {
|
|
- panel-supply = <®_dc1sw>;
|
|
- dvdd25-supply = <®_dldo2>;
|
|
- dvdd12-supply = <®_fldo1>;
|
|
- };
|
|
};
|
|
|
|
gpio_keys {
|
|
@@ -60,20 +44,85 @@
|
|
linux,code = <SW_LID>;
|
|
linux,can-disable;
|
|
wakeup-source;
|
|
+ wakeup-event-action = <EV_ACT_DEASSERTED>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ panel_edp: panel-edp {
|
|
+ compatible = "neweast,wjfh116008a";
|
|
+ backlight = <&backlight>;
|
|
+ power-supply = <®_dc1sw>;
|
|
+
|
|
+ port {
|
|
+ panel_edp_in: endpoint {
|
|
+ remote-endpoint = <&anx6345_out_edp>;
|
|
+ };
|
|
};
|
|
};
|
|
|
|
- reg_vcc3v3: vcc3v3 {
|
|
+ reg_vbklt: vbklt {
|
|
compatible = "regulator-fixed";
|
|
- regulator-name = "vcc3v3";
|
|
- regulator-min-microvolt = <3300000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vbklt";
|
|
+ regulator-min-microvolt = <18000000>;
|
|
+ regulator-max-microvolt = <18000000>;
|
|
+ gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
|
+ enable-active-high;
|
|
+ };
|
|
+
|
|
+ reg_vcc5v0: vcc5v0 {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "vcc5v0";
|
|
+ regulator-min-microvolt = <5000000>;
|
|
+ regulator-max-microvolt = <5000000>;
|
|
+ gpio = <&axp_gpio 0 GPIO_ACTIVE_HIGH>;
|
|
+ enable-active-high;
|
|
};
|
|
|
|
wifi_pwrseq: wifi_pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
|
|
};
|
|
+
|
|
+ speaker_amp: audio-amplifier {
|
|
+ compatible = "simple-audio-amplifier";
|
|
+ VCC-supply = <®_vcc5v0>;
|
|
+ enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
|
|
+ sound-name-prefix = "Speaker Amp";
|
|
+ };
|
|
+
|
|
+};
|
|
+
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&de {
|
|
+ status = "okay";
|
|
};
|
|
|
|
&ehci0 {
|
|
@@ -86,11 +135,15 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&mixer0 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&mmc0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc0_pins>;
|
|
vmmc-supply = <®_dcdc1>;
|
|
- cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
|
|
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
|
disable-wp;
|
|
bus-width = <4>;
|
|
status = "okay";
|
|
@@ -133,10 +186,61 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&pio {
|
|
+ vcc-pc-supply = <®_eldo1>;
|
|
+ vcc-pd-supply = <®_dcdc1>;
|
|
+ vcc-pe-supply = <®_aldo1>;
|
|
+ vcc-pg-supply = <®_eldo1>;
|
|
+};
|
|
+
|
|
&pwm {
|
|
status = "okay";
|
|
};
|
|
|
|
+&r_i2c {
|
|
+ clock-frequency = <100000>;
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&r_i2c_pl89_pins>;
|
|
+ status = "okay";
|
|
+
|
|
+ anx6345: anx6345@38 {
|
|
+ compatible = "analogix,anx6345";
|
|
+ reg = <0x38>;
|
|
+ reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
|
|
+ dvdd25-supply = <®_dldo2>;
|
|
+ dvdd12-supply = <®_fldo1>;
|
|
+
|
|
+ ports {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ anx6345_in: port@0 {
|
|
+ reg = <0>;
|
|
+ anx6345_in_tcon0: endpoint {
|
|
+ remote-endpoint = <&tcon0_out_anx6345>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ anx6345_out: port@1 {
|
|
+ reg = <1>;
|
|
+ anx6345_out_edp: endpoint {
|
|
+ remote-endpoint = <&panel_edp_in>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
+&r_pio {
|
|
+ /*
|
|
+ * FIXME: We can't add that supply for now since it would
|
|
+ * create a circular dependency between pinctrl, the regulator
|
|
+ * and the RSB Bus.
|
|
+ *
|
|
+ * vcc-pl-supply = <®_aldo2>;
|
|
+ */
|
|
+};
|
|
+
|
|
&r_rsb {
|
|
status = "okay";
|
|
|
|
@@ -148,20 +252,18 @@
|
|
};
|
|
};
|
|
|
|
-/* The ANX6345 eDP-bridge is on r_i2c */
|
|
-&r_i2c {
|
|
- clock-frequency = <100000>;
|
|
- pinctrl-names = "default";
|
|
- pinctrl-0 = <&r_i2c_pl89_pins>;
|
|
+#include "axp803.dtsi"
|
|
+
|
|
+&ac_power_supply {
|
|
status = "okay";
|
|
};
|
|
|
|
-#include "axp803.dtsi"
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
|
|
®_aldo1 {
|
|
- regulator-min-microvolt = <2800000>;
|
|
- regulator-max-microvolt = <2800000>;
|
|
- regulator-name = "vcc-csi";
|
|
+ regulator-name = "vcc-pe";
|
|
};
|
|
|
|
®_aldo2 {
|
|
@@ -224,12 +326,6 @@
|
|
regulator-name = "vcc-edp";
|
|
};
|
|
|
|
-®_dldo3 {
|
|
- regulator-min-microvolt = <3300000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
- regulator-name = "avdd-csi";
|
|
-};
|
|
-
|
|
®_dldo4 {
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
@@ -243,12 +339,6 @@
|
|
regulator-name = "cpvdd";
|
|
};
|
|
|
|
-®_eldo3 {
|
|
- regulator-min-microvolt = <1800000>;
|
|
- regulator-max-microvolt = <1800000>;
|
|
- regulator-name = "vdd-1v8-csi";
|
|
-};
|
|
-
|
|
®_fldo1 {
|
|
regulator-min-microvolt = <1200000>;
|
|
regulator-max-microvolt = <1200000>;
|
|
@@ -262,21 +352,56 @@
|
|
regulator-name = "vdd-cpus";
|
|
};
|
|
|
|
-®_ldo_io0 {
|
|
- regulator-min-microvolt = <3300000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
- regulator-name = "vcc-usb";
|
|
- status = "okay";
|
|
-};
|
|
-
|
|
®_rtc_ldo {
|
|
regulator-name = "vcc-rtc";
|
|
};
|
|
|
|
+&simplefb_lcd {
|
|
+ panel-supply = <®_dc1sw>;
|
|
+ dvdd25-supply = <®_dldo2>;
|
|
+ dvdd12-supply = <®_fldo1>;
|
|
+};
|
|
+
|
|
&simplefb_hdmi {
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ status = "okay";
|
|
+ simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
|
|
+ simple-audio-card,widgets = "Microphone", "Internal Microphone Left",
|
|
+ "Microphone", "Internal Microphone Right",
|
|
+ "Headphone", "Headphone Jack",
|
|
+ "Speaker", "Internal Speaker";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "Speaker Amp INL", "LINEOUT",
|
|
+ "Speaker Amp INR", "LINEOUT",
|
|
+ "Internal Speaker", "Speaker Amp OUTL",
|
|
+ "Internal Speaker", "Speaker Amp OUTR",
|
|
+ "Headphone Jack", "HP",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Internal Microphone Left", "MBIAS",
|
|
+ "MIC1", "Internal Microphone Left",
|
|
+ "Internal Microphone Right", "HBIAS",
|
|
+ "MIC2", "Internal Microphone Right";
|
|
+};
|
|
+
|
|
+&tcon0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&lcd_rgb666_pins>;
|
|
+
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&tcon0_out {
|
|
+ tcon0_out_anx6345: endpoint {
|
|
+ remote-endpoint = <&anx6345_in_tcon0>;
|
|
+ };
|
|
+};
|
|
+
|
|
&uart0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart0_pb_pins>;
|
|
@@ -288,7 +413,7 @@
|
|
};
|
|
|
|
&usbphy {
|
|
- usb0_vbus-supply = <®_ldo_io0>;
|
|
- usb1_vbus-supply = <®_ldo_io0>;
|
|
+ usb0_vbus-supply = <®_vcc5v0>;
|
|
+ usb1_vbus-supply = <®_vcc5v0>;
|
|
status = "okay";
|
|
};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.0.dts b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
new file mode 100644
|
|
index 0000000000..0c42272106
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
@@ -0,0 +1,11 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
|
|
+
|
|
+/dts-v1/;
|
|
+
|
|
+#include "sun50i-a64-pinephone.dtsi"
|
|
+
|
|
+/ {
|
|
+ model = "Pine64 PinePhone Developer Batch (1.0)";
|
|
+ compatible = "pine64,pinephone-1.0", "allwinner,sun50i-a64";
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.1.dts b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
new file mode 100644
|
|
index 0000000000..06a775c416
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
@@ -0,0 +1,11 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
|
|
+
|
|
+/dts-v1/;
|
|
+
|
|
+#include "sun50i-a64-pinephone.dtsi"
|
|
+
|
|
+/ {
|
|
+ model = "Pine64 PinePhone Braveheart (1.1)";
|
|
+ compatible = "pine64,pinephone-1.1", "allwinner,sun50i-a64";
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone.dtsi b/arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
new file mode 100644
|
|
index 0000000000..cefda145c3
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
@@ -0,0 +1,379 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz>
|
|
+// Copyright (C) 2020 Martijn Braam <martijn@brixit.nl>
|
|
+// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
|
|
+
|
|
+#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
+
|
|
+#include <dt-bindings/gpio/gpio.h>
|
|
+#include <dt-bindings/input/input.h>
|
|
+#include <dt-bindings/leds/common.h>
|
|
+#include <dt-bindings/pwm/pwm.h>
|
|
+
|
|
+/ {
|
|
+ aliases {
|
|
+ serial0 = &uart0;
|
|
+ };
|
|
+
|
|
+ chosen {
|
|
+ stdout-path = "serial0:115200n8";
|
|
+ };
|
|
+
|
|
+ leds {
|
|
+ compatible = "gpio-leds";
|
|
+
|
|
+ blue {
|
|
+ function = LED_FUNCTION_INDICATOR;
|
|
+ color = <LED_COLOR_ID_BLUE>;
|
|
+ gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
|
|
+ };
|
|
+
|
|
+ green {
|
|
+ function = LED_FUNCTION_INDICATOR;
|
|
+ color = <LED_COLOR_ID_GREEN>;
|
|
+ gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
|
|
+ };
|
|
+
|
|
+ red {
|
|
+ function = LED_FUNCTION_INDICATOR;
|
|
+ color = <LED_COLOR_ID_RED>;
|
|
+ gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
|
|
+ };
|
|
+ };
|
|
+
|
|
+ speaker_amp: audio-amplifier {
|
|
+ compatible = "simple-audio-amplifier";
|
|
+ enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
|
|
+ sound-name-prefix = "Speaker Amp";
|
|
+ };
|
|
+
|
|
+ vibrator {
|
|
+ compatible = "gpio-vibrator";
|
|
+ enable-gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */
|
|
+ vcc-supply = <®_dcdc1>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ehci0 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ehci1 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&i2c1 {
|
|
+ status = "okay";
|
|
+
|
|
+ /* Magnetometer */
|
|
+ lis3mdl@1e {
|
|
+ compatible = "st,lis3mdl-magn";
|
|
+ reg = <0x1e>;
|
|
+ vdd-supply = <®_dldo1>;
|
|
+ vddio-supply = <®_dldo1>;
|
|
+ };
|
|
+
|
|
+ /* Accelerometer/gyroscope */
|
|
+ mpu6050@68 {
|
|
+ compatible = "invensense,mpu6050";
|
|
+ reg = <0x68>;
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */
|
|
+ vdd-supply = <®_dldo1>;
|
|
+ vddio-supply = <®_dldo1>;
|
|
+ };
|
|
+};
|
|
+
|
|
+/* Connected to pogo pins (external spring based pinheader for user addons) */
|
|
+&i2c2 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&lradc {
|
|
+ vref-supply = <®_aldo3>;
|
|
+ status = "okay";
|
|
+
|
|
+ button-200 {
|
|
+ label = "Volume Up";
|
|
+ linux,code = <KEY_VOLUMEUP>;
|
|
+ channel = <0>;
|
|
+ voltage = <200000>;
|
|
+ };
|
|
+
|
|
+ button-400 {
|
|
+ label = "Volume Down";
|
|
+ linux,code = <KEY_VOLUMEDOWN>;
|
|
+ channel = <0>;
|
|
+ voltage = <400000>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&mmc0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc0_pins>;
|
|
+ vmmc-supply = <®_dcdc1>;
|
|
+ vqmmc-supply = <®_dcdc1>;
|
|
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
|
+ disable-wp;
|
|
+ bus-width = <4>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&mmc2 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc2_pins>;
|
|
+ vmmc-supply = <®_dcdc1>;
|
|
+ vqmmc-supply = <®_dcdc1>;
|
|
+ bus-width = <8>;
|
|
+ non-removable;
|
|
+ cap-mmc-hw-reset;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ohci0 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ohci1 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&pio {
|
|
+ vcc-pb-supply = <®_dcdc1>;
|
|
+ vcc-pc-supply = <®_dcdc1>;
|
|
+ vcc-pd-supply = <®_dcdc1>;
|
|
+ vcc-pe-supply = <®_aldo1>;
|
|
+ vcc-pf-supply = <®_dcdc1>;
|
|
+ vcc-pg-supply = <®_dldo4>;
|
|
+ vcc-ph-supply = <®_dcdc1>;
|
|
+};
|
|
+
|
|
+&r_pio {
|
|
+ /*
|
|
+ * FIXME: We can't add that supply for now since it would
|
|
+ * create a circular dependency between pinctrl, the regulator
|
|
+ * and the RSB Bus.
|
|
+ *
|
|
+ * vcc-pl-supply = <®_aldo2>;
|
|
+ */
|
|
+};
|
|
+
|
|
+&r_rsb {
|
|
+ status = "okay";
|
|
+
|
|
+ axp803: pmic@3a3 {
|
|
+ compatible = "x-powers,axp803";
|
|
+ reg = <0x3a3>;
|
|
+ interrupt-parent = <&r_intc>;
|
|
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
|
+ };
|
|
+};
|
|
+
|
|
+#include "axp803.dtsi"
|
|
+
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_aldo1 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "dovdd-csi";
|
|
+};
|
|
+
|
|
+®_aldo2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "vcc-pl";
|
|
+};
|
|
+
|
|
+®_aldo3 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <2700000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-pll-avcc";
|
|
+};
|
|
+
|
|
+®_dcdc1 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-3v3";
|
|
+};
|
|
+
|
|
+®_dcdc2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1000000>;
|
|
+ regulator-max-microvolt = <1300000>;
|
|
+ regulator-name = "vdd-cpux";
|
|
+};
|
|
+
|
|
+/* DCDC3 is polyphased with DCDC2 */
|
|
+
|
|
+®_dcdc5 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1200000>;
|
|
+ regulator-max-microvolt = <1200000>;
|
|
+ regulator-name = "vcc-dram";
|
|
+};
|
|
+
|
|
+®_dcdc6 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1100000>;
|
|
+ regulator-max-microvolt = <1100000>;
|
|
+ regulator-name = "vdd-sys";
|
|
+};
|
|
+
|
|
+®_dldo1 {
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-dsi-sensor";
|
|
+};
|
|
+
|
|
+®_dldo2 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "vcc-mipi-io";
|
|
+};
|
|
+
|
|
+®_dldo3 {
|
|
+ regulator-min-microvolt = <2800000>;
|
|
+ regulator-max-microvolt = <2800000>;
|
|
+ regulator-name = "avdd-csi";
|
|
+};
|
|
+
|
|
+®_dldo4 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-wifi-io";
|
|
+};
|
|
+
|
|
+®_eldo1 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "vcc-lpddr";
|
|
+};
|
|
+
|
|
+®_eldo3 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "dvdd-1v8-csi";
|
|
+};
|
|
+
|
|
+®_fldo1 {
|
|
+ regulator-min-microvolt = <1200000>;
|
|
+ regulator-max-microvolt = <1200000>;
|
|
+ regulator-name = "vcc-1v2-hsic";
|
|
+};
|
|
+
|
|
+®_fldo2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1100000>;
|
|
+ regulator-max-microvolt = <1100000>;
|
|
+ regulator-name = "vdd-cpus";
|
|
+};
|
|
+
|
|
+®_ldo_io0 {
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-lcd-ctp-stk";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_ldo_io1 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "vcc-1v8-typec";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_rtc_ldo {
|
|
+ regulator-name = "vcc-rtc";
|
|
+};
|
|
+
|
|
+&sound {
|
|
+ status = "okay";
|
|
+ simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
|
|
+ simple-audio-card,widgets = "Microphone", "Headset Microphone",
|
|
+ "Microphone", "Internal Microphone",
|
|
+ "Headphone", "Headphone Jack",
|
|
+ "Speaker", "Internal Earpiece",
|
|
+ "Speaker", "Internal Speaker";
|
|
+ simple-audio-card,routing =
|
|
+ "Headphone Jack", "HP",
|
|
+ "Internal Earpiece", "EARPIECE",
|
|
+ "Internal Speaker", "Speaker Amp OUTL",
|
|
+ "Internal Speaker", "Speaker Amp OUTR",
|
|
+ "Speaker Amp INL", "LINEOUT",
|
|
+ "Speaker Amp INR", "LINEOUT",
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Internal Microphone", "MBIAS",
|
|
+ "MIC1", "Internal Microphone",
|
|
+ "Headset Microphone", "HBIAS",
|
|
+ "MIC2", "Headset Microphone";
|
|
+};
|
|
+
|
|
+&uart0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart0_pb_pins>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+/* Connected to the modem (hardware flow control can't be used) */
|
|
+&uart3 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart3_pins>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usb_otg {
|
|
+ dr_mode = "peripheral";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usb_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usbphy {
|
|
+ status = "okay";
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinetab.dts b/arch/arm/dts/sun50i-a64-pinetab.dts
|
|
new file mode 100644
|
|
index 0000000000..316e8a4439
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-pinetab.dts
|
|
@@ -0,0 +1,460 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+/*
|
|
+ * Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz>
|
|
+ *
|
|
+ */
|
|
+
|
|
+/dts-v1/;
|
|
+
|
|
+#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
+
|
|
+#include <dt-bindings/gpio/gpio.h>
|
|
+#include <dt-bindings/input/input.h>
|
|
+#include <dt-bindings/pwm/pwm.h>
|
|
+
|
|
+/ {
|
|
+ model = "PineTab";
|
|
+ compatible = "pine64,pinetab", "allwinner,sun50i-a64";
|
|
+
|
|
+ aliases {
|
|
+ serial0 = &uart0;
|
|
+ ethernet0 = &rtl8723cs;
|
|
+ };
|
|
+
|
|
+ backlight: backlight {
|
|
+ compatible = "pwm-backlight";
|
|
+ pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>;
|
|
+ brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>;
|
|
+ default-brightness-level = <15>;
|
|
+ enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
|
|
+ power-supply = <&vdd_bl>;
|
|
+ };
|
|
+
|
|
+ chosen {
|
|
+ stdout-path = "serial0:115200n8";
|
|
+ };
|
|
+
|
|
+ i2c-csi {
|
|
+ compatible = "i2c-gpio";
|
|
+ sda-gpios = <&pio 4 13 GPIO_ACTIVE_HIGH>; /* PE13 */
|
|
+ scl-gpios = <&pio 4 12 GPIO_ACTIVE_HIGH>; /* PE12 */
|
|
+ i2c-gpio,delay-us = <5>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ /* Rear camera */
|
|
+ ov5640: camera@3c {
|
|
+ compatible = "ovti,ov5640";
|
|
+ reg = <0x3c>;
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&csi_mclk_pin>;
|
|
+ clocks = <&ccu CLK_CSI_MCLK>;
|
|
+ clock-names = "xclk";
|
|
+
|
|
+ AVDD-supply = <®_dldo3>;
|
|
+ DOVDD-supply = <®_aldo1>;
|
|
+ DVDD-supply = <®_eldo3>;
|
|
+ reset-gpios = <&pio 4 14 GPIO_ACTIVE_LOW>; /* PE14 */
|
|
+ powerdown-gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* PE15 */
|
|
+
|
|
+ port {
|
|
+ ov5640_ep: endpoint {
|
|
+ remote-endpoint = <&csi_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ speaker_amp: audio-amplifier {
|
|
+ compatible = "simple-audio-amplifier";
|
|
+ enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
|
|
+ sound-name-prefix = "Speaker Amp";
|
|
+ };
|
|
+
|
|
+ vdd_bl: regulator@0 {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "bl-3v3";
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
|
+ enable-active-high;
|
|
+ };
|
|
+
|
|
+ wifi_pwrseq: wifi_pwrseq {
|
|
+ compatible = "mmc-pwrseq-simple";
|
|
+ reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
|
|
+ post-power-on-delay-ms = <200>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ hpvcc-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&csi {
|
|
+ status = "okay";
|
|
+
|
|
+ port {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ csi_ep: endpoint {
|
|
+ remote-endpoint = <&ov5640_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&de {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dphy {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dsi {
|
|
+ vcc-dsi-supply = <®_dldo1>;
|
|
+ status = "okay";
|
|
+
|
|
+ panel@0 {
|
|
+ compatible = "feixin,k101-im2ba02";
|
|
+ reg = <0>;
|
|
+ avdd-supply = <®_dc1sw>;
|
|
+ dvdd-supply = <®_dc1sw>;
|
|
+ cvdd-supply = <®_ldo_io1>;
|
|
+ reset-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
|
|
+ backlight = <&backlight>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&ehci0 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ehci1 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&i2c0 {
|
|
+ status = "okay";
|
|
+
|
|
+ touchscreen@5d {
|
|
+ compatible = "goodix,gt9271";
|
|
+ reg = <0x5d>;
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */
|
|
+ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
|
|
+ reset-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
|
|
+ AVDD28-supply = <®_ldo_io1>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&i2c0_pins {
|
|
+ bias-pull-up;
|
|
+};
|
|
+
|
|
+&i2c1 {
|
|
+ status = "okay";
|
|
+
|
|
+ /* TODO: add Bochs BMA223 accelerometer here */
|
|
+};
|
|
+
|
|
+&lradc {
|
|
+ vref-supply = <®_aldo3>;
|
|
+ status = "okay";
|
|
+
|
|
+ button-200 {
|
|
+ label = "Volume Up";
|
|
+ linux,code = <KEY_VOLUMEUP>;
|
|
+ channel = <0>;
|
|
+ voltage = <200000>;
|
|
+ };
|
|
+
|
|
+ button-400 {
|
|
+ label = "Volume Down";
|
|
+ linux,code = <KEY_VOLUMEDOWN>;
|
|
+ channel = <0>;
|
|
+ voltage = <400000>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&mixer1 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&mmc0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc0_pins>;
|
|
+ vmmc-supply = <®_dcdc1>;
|
|
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
|
|
+ disable-wp;
|
|
+ bus-width = <4>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&mmc1 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc1_pins>;
|
|
+ vmmc-supply = <®_dldo4>;
|
|
+ vqmmc-supply = <®_eldo1>;
|
|
+ mmc-pwrseq = <&wifi_pwrseq>;
|
|
+ bus-width = <4>;
|
|
+ non-removable;
|
|
+ status = "okay";
|
|
+
|
|
+ rtl8723cs: wifi@1 {
|
|
+ reg = <1>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&mmc2 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc2_pins>;
|
|
+ vmmc-supply = <®_dcdc1>;
|
|
+ vqmmc-supply = <®_dcdc1>;
|
|
+ bus-width = <8>;
|
|
+ non-removable;
|
|
+ cap-mmc-hw-reset;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&ohci0 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&pwm {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&r_rsb {
|
|
+ status = "okay";
|
|
+
|
|
+ axp803: pmic@3a3 {
|
|
+ compatible = "x-powers,axp803";
|
|
+ reg = <0x3a3>;
|
|
+ interrupt-parent = <&r_intc>;
|
|
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
|
+ x-powers,drive-vbus-en;
|
|
+ };
|
|
+};
|
|
+
|
|
+#include "axp803.dtsi"
|
|
+
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_aldo1 {
|
|
+ regulator-min-microvolt = <2800000>;
|
|
+ regulator-max-microvolt = <2800000>;
|
|
+ regulator-name = "dovdd-csi";
|
|
+};
|
|
+
|
|
+®_aldo2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-pl";
|
|
+};
|
|
+
|
|
+®_aldo3 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <2700000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-pll-avcc";
|
|
+};
|
|
+
|
|
+®_dc1sw {
|
|
+ regulator-name = "vcc-lcd";
|
|
+};
|
|
+
|
|
+®_dcdc1 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-3v3";
|
|
+};
|
|
+
|
|
+®_dcdc2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1000000>;
|
|
+ regulator-max-microvolt = <1300000>;
|
|
+ regulator-name = "vdd-cpux";
|
|
+};
|
|
+
|
|
+/* DCDC3 is polyphased with DCDC2 */
|
|
+
|
|
+®_dcdc5 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1200000>;
|
|
+ regulator-max-microvolt = <1200000>;
|
|
+ regulator-name = "vcc-dram";
|
|
+};
|
|
+
|
|
+®_dcdc6 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1100000>;
|
|
+ regulator-max-microvolt = <1100000>;
|
|
+ regulator-name = "vdd-sys";
|
|
+};
|
|
+
|
|
+®_dldo1 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-hdmi-dsi-sensor";
|
|
+};
|
|
+
|
|
+®_dldo3 {
|
|
+ regulator-min-microvolt = <2800000>;
|
|
+ regulator-max-microvolt = <2800000>;
|
|
+ regulator-name = "avdd-csi";
|
|
+};
|
|
+
|
|
+®_dldo4 {
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-wifi";
|
|
+};
|
|
+
|
|
+®_drivevbus {
|
|
+ regulator-name = "usb0-vbus";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_eldo1 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "cpvdd";
|
|
+};
|
|
+
|
|
+®_eldo2 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "vcca-1v8";
|
|
+};
|
|
+
|
|
+®_eldo3 {
|
|
+ regulator-min-microvolt = <1800000>;
|
|
+ regulator-max-microvolt = <1800000>;
|
|
+ regulator-name = "dvdd-1v8-csi";
|
|
+};
|
|
+
|
|
+®_fldo1 {
|
|
+ regulator-min-microvolt = <1200000>;
|
|
+ regulator-max-microvolt = <1200000>;
|
|
+ regulator-name = "vcc-1v2-hsic";
|
|
+};
|
|
+
|
|
+®_fldo2 {
|
|
+ regulator-always-on;
|
|
+ regulator-min-microvolt = <1100000>;
|
|
+ regulator-max-microvolt = <1100000>;
|
|
+ regulator-name = "vdd-cpus";
|
|
+};
|
|
+
|
|
+®_ldo_io0 {
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vcc-usb";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_ldo_io1 {
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-enable-ramp-delay = <3500000>;
|
|
+ regulator-name = "vcc-touchscreen";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_rtc_ldo {
|
|
+ regulator-name = "vcc-rtc";
|
|
+};
|
|
+
|
|
+&sound {
|
|
+ status = "okay";
|
|
+ simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
|
|
+ simple-audio-card,widgets = "Microphone", "Internal Microphone Left",
|
|
+ "Microphone", "Internal Microphone Right",
|
|
+ "Headphone", "Headphone Jack",
|
|
+ "Speaker", "Internal Speaker";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "Speaker Amp INL", "LINEOUT",
|
|
+ "Speaker Amp INR", "LINEOUT",
|
|
+ "Internal Speaker", "Speaker Amp OUTL",
|
|
+ "Internal Speaker", "Speaker Amp OUTR",
|
|
+ "Headphone Jack", "HP",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Internal Microphone Left", "MBIAS",
|
|
+ "MIC1", "Internal Microphone Left",
|
|
+ "Internal Microphone Right", "HBIAS",
|
|
+ "MIC2", "Internal Microphone Right";
|
|
+};
|
|
+
|
|
+&uart0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart0_pb_pins>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usb_otg {
|
|
+ dr_mode = "otg";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usb_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&usbphy {
|
|
+ usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
|
|
+ usb0_vbus_power-supply = <&usb_power_supply>;
|
|
+ usb0_vbus-supply = <®_drivevbus>;
|
|
+ usb1_vbus-supply = <®_ldo_io0>;
|
|
+ status = "okay";
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts b/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
|
|
index 53fcc9098d..2f6ea9f3f6 100644
|
|
--- a/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-sopine-baseboard.dts
|
|
@@ -1,47 +1,7 @@
|
|
-/*
|
|
- * Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
- *
|
|
- * Based on sun50i-a64-pine64.dts, which is:
|
|
- * Copyright (c) 2016 ARM Ltd.
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
+// Based on sun50i-a64-pine64.dts, which is:
|
|
+// Copyright (c) 2016 ARM Ltd.
|
|
|
|
/dts-v1/;
|
|
|
|
@@ -55,6 +15,10 @@
|
|
aliases {
|
|
ethernet0 = &emac;
|
|
serial0 = &uart0;
|
|
+ serial1 = &uart1;
|
|
+ serial2 = &uart2;
|
|
+ serial3 = &uart3;
|
|
+ serial4 = &uart4;
|
|
};
|
|
|
|
chosen {
|
|
@@ -80,6 +44,26 @@
|
|
};
|
|
};
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&de {
|
|
status = "okay";
|
|
};
|
|
@@ -139,6 +123,12 @@
|
|
};
|
|
|
|
®_dc1sw {
|
|
+ /*
|
|
+ * Ethernet PHY needs 30ms to properly power up and some more
|
|
+ * to initialize. 100ms should be plenty of time to finish
|
|
+ * whole process.
|
|
+ */
|
|
+ regulator-enable-ramp-delay = <100000>;
|
|
regulator-name = "vcc-phy";
|
|
};
|
|
|
|
@@ -164,12 +154,47 @@
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ simple-audio-card,aux-devs = <&codec_analog>;
|
|
+ simple-audio-card,widgets = "Microphone", "Microphone Jack",
|
|
+ "Headphone", "Headphone Jack";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "Headphone Jack", "HP",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "MIC2", "Microphone Jack";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&uart0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart0_pb_pins>;
|
|
status = "okay";
|
|
};
|
|
|
|
+/* On Pi-2 connector */
|
|
+&uart2 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart2_pins>;
|
|
+ status = "disabled";
|
|
+};
|
|
+
|
|
+/* On Euler connector */
|
|
+&uart3 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart3_pins>;
|
|
+ status = "disabled";
|
|
+};
|
|
+
|
|
+/* On Euler connector, RTS/CTS optional */
|
|
+&uart4 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart4_pins>;
|
|
+ status = "disabled";
|
|
+};
|
|
+
|
|
&usb_otg {
|
|
dr_mode = "host";
|
|
status = "okay";
|
|
diff --git a/arch/arm/dts/sun50i-a64-sopine.dtsi b/arch/arm/dts/sun50i-a64-sopine.dtsi
|
|
index 6723b8695e..c48692b06e 100644
|
|
--- a/arch/arm/dts/sun50i-a64-sopine.dtsi
|
|
+++ b/arch/arm/dts/sun50i-a64-sopine.dtsi
|
|
@@ -1,52 +1,33 @@
|
|
-/*
|
|
- * Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
- *
|
|
- * Based on sun50i-a64-pine64.dts, which is:
|
|
- * Copyright (c) 2016 ARM Ltd.
|
|
- *
|
|
- * 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 library 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 library 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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.xyz>
|
|
+// Based on sun50i-a64-pine64.dts, which is:
|
|
+// Copyright (c) 2016 ARM Ltd.
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
&mmc0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc0_pins>;
|
|
diff --git a/arch/arm/dts/sun50i-a64-teres-i-u-boot.dtsi b/arch/arm/dts/sun50i-a64-teres-i-u-boot.dtsi
|
|
deleted file mode 100644
|
|
index 1a64b7d09c..0000000000
|
|
--- a/arch/arm/dts/sun50i-a64-teres-i-u-boot.dtsi
|
|
+++ /dev/null
|
|
@@ -1,41 +0,0 @@
|
|
-// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
-/*
|
|
- * Copyright (C) 2019 Vasily Khoruzhick <anarsoul@gmail.com>
|
|
- *
|
|
- */
|
|
-
|
|
-#include "sunxi-u-boot.dtsi"
|
|
-
|
|
-/ {
|
|
- vdd_bl: regulator@0 {
|
|
- compatible = "regulator-fixed";
|
|
- regulator-name = "bl-3v3";
|
|
- regulator-min-microvolt = <3300000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
- gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
|
|
- enable-active-high;
|
|
- };
|
|
-
|
|
- backlight: backlight {
|
|
- compatible = "pwm-backlight";
|
|
- pwms = <&pwm 0 50000 0>;
|
|
- brightness-levels = <0 5 10 15 20 30 40 55 70 85 100>;
|
|
- default-brightness-level = <2>;
|
|
- enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
|
|
- power-supply = <&vdd_bl>;
|
|
- };
|
|
-};
|
|
-
|
|
-/* The ANX6345 eDP-bridge is on i2c */
|
|
-&i2c0 {
|
|
- anx6345: edp-bridge@38 {
|
|
- compatible = "analogix,anx6345";
|
|
- reg = <0x38>;
|
|
- reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
|
|
- status = "okay";
|
|
- };
|
|
-};
|
|
-
|
|
-&pwm {
|
|
- status = "okay";
|
|
-};
|
|
diff --git a/arch/arm/dts/sun50i-a64-teres-i.dts b/arch/arm/dts/sun50i-a64-teres-i.dts
|
|
index c455b24dd0..f5df5f705b 100644
|
|
--- a/arch/arm/dts/sun50i-a64-teres-i.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-teres-i.dts
|
|
@@ -1,13 +1,11 @@
|
|
-/*
|
|
- * Copyright (C) Harald Geyer <harald@ccbib.org>
|
|
- * based on sun50i-a64-olinuxino.dts by Jagan Teki <jteki@openedev.com>
|
|
- *
|
|
- * SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
|
+// Copyright (C) Harald Geyer <harald@ccbib.org>
|
|
+// based on sun50i-a64-olinuxino.dts by Jagan Teki <jteki@openedev.com>
|
|
|
|
/dts-v1/;
|
|
|
|
#include "sun50i-a64.dtsi"
|
|
+#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/input/input.h>
|
|
@@ -21,6 +19,15 @@
|
|
serial0 = &uart0;
|
|
};
|
|
|
|
+ backlight: backlight {
|
|
+ compatible = "pwm-backlight";
|
|
+ pwms = <&pwm 0 50000 0>;
|
|
+ power-supply = <®_dcdc1>;
|
|
+ brightness-levels = <0 5 7 10 14 20 28 40 56 80 112>;
|
|
+ default-brightness-level = <5>;
|
|
+ enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
|
|
+ };
|
|
+
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
|
|
@@ -70,6 +77,45 @@
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
|
|
};
|
|
+
|
|
+ speaker_amp: audio-amplifier {
|
|
+ compatible = "simple-audio-amplifier";
|
|
+ enable-gpios = <&r_pio 0 12 GPIO_ACTIVE_HIGH>; /* PL12 */
|
|
+ sound-name-prefix = "Speaker Amp";
|
|
+ };
|
|
+};
|
|
+
|
|
+&codec {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&codec_analog {
|
|
+ cpvdd-supply = <®_eldo1>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dai {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&de {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&cpu0 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu1 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu2 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
+};
|
|
+
|
|
+&cpu3 {
|
|
+ cpu-supply = <®_dcdc2>;
|
|
};
|
|
|
|
&ehci1 {
|
|
@@ -77,14 +123,31 @@
|
|
};
|
|
|
|
|
|
-/* The ANX6345 eDP-bridge is on i2c0. There is no linux (mainline)
|
|
- * driver for this chip at the moment, the bootloader initializes it.
|
|
- * However it can be accessed with the i2c-dev driver from user space.
|
|
- */
|
|
&i2c0 {
|
|
clock-frequency = <100000>;
|
|
- pinctrl-names = "default";
|
|
- pinctrl-0 = <&i2c0_pins>;
|
|
+ status = "okay";
|
|
+
|
|
+ anx6345: anx6345@38 {
|
|
+ compatible = "analogix,anx6345";
|
|
+ reg = <0x38>;
|
|
+ reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
|
|
+ dvdd25-supply = <®_dldo2>;
|
|
+ dvdd12-supply = <®_dldo3>;
|
|
+
|
|
+ ports {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ port@0 {
|
|
+ anx6345_in: endpoint {
|
|
+ remote-endpoint = <&tcon0_out_anx6345>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
+&mixer0 {
|
|
status = "okay";
|
|
};
|
|
|
|
@@ -131,6 +194,10 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&pwm {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&r_rsb {
|
|
status = "okay";
|
|
|
|
@@ -145,6 +212,14 @@
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
+&ac_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&battery_power_supply {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
®_aldo1 {
|
|
regulator-always-on;
|
|
regulator-min-microvolt = <2800000>;
|
|
@@ -239,7 +314,7 @@
|
|
};
|
|
|
|
/*
|
|
- * The A64 chip cannot work without this regulator off, although
|
|
+ * The A64 chip cannot work with this regulator off, although
|
|
* it seems to be only driving the AR100 core.
|
|
* Maybe we don't still know well about CPUs domain.
|
|
*/
|
|
@@ -258,6 +333,43 @@
|
|
vcc-hdmi-supply = <®_dldo1>;
|
|
};
|
|
|
|
+&sound {
|
|
+ simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
|
|
+ simple-audio-card,widgets = "Headphone", "Headphone Jack",
|
|
+ "Microphone", "Headset Microphone",
|
|
+ "Microphone", "Internal Microphone",
|
|
+ "Speaker", "Internal Speaker";
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Headphone Jack", "HP",
|
|
+ "Speaker Amp INL", "LINEOUT",
|
|
+ "Speaker Amp INR", "LINEOUT",
|
|
+ "Internal Speaker", "Speaker Amp OUTL",
|
|
+ "Internal Speaker", "Speaker Amp OUTR",
|
|
+ "Internal Microphone", "MBIAS",
|
|
+ "MIC1", "Internal Microphone",
|
|
+ "Headset Microphone", "HBIAS",
|
|
+ "MIC2", "Headset Microphone";
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&tcon0 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&lcd_rgb666_pins>;
|
|
+
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&tcon0_out {
|
|
+ tcon0_out_anx6345: endpoint@0 {
|
|
+ reg = <0>;
|
|
+ remote-endpoint = <&anx6345_in>;
|
|
+ };
|
|
+};
|
|
+
|
|
&uart0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart0_pb_pins>;
|
|
diff --git a/arch/arm/dts/sun50i-a64.dtsi b/arch/arm/dts/sun50i-a64.dtsi
|
|
index ff41abc96a..31143fe64d 100644
|
|
--- a/arch/arm/dts/sun50i-a64.dtsi
|
|
+++ b/arch/arm/dts/sun50i-a64.dtsi
|
|
@@ -1,46 +1,7 @@
|
|
-/*
|
|
- * Copyright (C) 2016 ARM Ltd.
|
|
- * based on the Allwinner H3 dtsi:
|
|
- * Copyright (C) 2015 Jens Kuske <jenskuske@gmail.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.
|
|
- */
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2016 ARM Ltd.
|
|
+// based on the Allwinner H3 dtsi:
|
|
+// Copyright (C) 2015 Jens Kuske <jenskuske@gmail.com>
|
|
|
|
#include <dt-bindings/clock/sun50i-a64-ccu.h>
|
|
#include <dt-bindings/clock/sun8i-de2.h>
|
|
@@ -49,6 +10,7 @@
|
|
#include <dt-bindings/reset/sun50i-a64-ccu.h>
|
|
#include <dt-bindings/reset/sun8i-de2.h>
|
|
#include <dt-bindings/reset/sun8i-r-ccu.h>
|
|
+#include <dt-bindings/thermal/thermal.h>
|
|
|
|
/ {
|
|
interrupt-parent = <&gic>;
|
|
@@ -84,35 +46,47 @@
|
|
#size-cells = <0>;
|
|
|
|
cpu0: cpu@0 {
|
|
- compatible = "arm,cortex-a53", "arm,armv8";
|
|
+ compatible = "arm,cortex-a53";
|
|
device_type = "cpu";
|
|
reg = <0>;
|
|
enable-method = "psci";
|
|
next-level-cache = <&L2>;
|
|
+ clocks = <&ccu 21>;
|
|
+ clock-names = "cpu";
|
|
+ #cooling-cells = <2>;
|
|
};
|
|
|
|
cpu1: cpu@1 {
|
|
- compatible = "arm,cortex-a53", "arm,armv8";
|
|
+ compatible = "arm,cortex-a53";
|
|
device_type = "cpu";
|
|
reg = <1>;
|
|
enable-method = "psci";
|
|
next-level-cache = <&L2>;
|
|
+ clocks = <&ccu 21>;
|
|
+ clock-names = "cpu";
|
|
+ #cooling-cells = <2>;
|
|
};
|
|
|
|
cpu2: cpu@2 {
|
|
- compatible = "arm,cortex-a53", "arm,armv8";
|
|
+ compatible = "arm,cortex-a53";
|
|
device_type = "cpu";
|
|
reg = <2>;
|
|
enable-method = "psci";
|
|
next-level-cache = <&L2>;
|
|
+ clocks = <&ccu 21>;
|
|
+ clock-names = "cpu";
|
|
+ #cooling-cells = <2>;
|
|
};
|
|
|
|
cpu3: cpu@3 {
|
|
- compatible = "arm,cortex-a53", "arm,armv8";
|
|
+ compatible = "arm,cortex-a53";
|
|
device_type = "cpu";
|
|
reg = <3>;
|
|
enable-method = "psci";
|
|
next-level-cache = <&L2>;
|
|
+ clocks = <&ccu 21>;
|
|
+ clock-names = "cpu";
|
|
+ #cooling-cells = <2>;
|
|
};
|
|
|
|
L2: l2-cache {
|
|
@@ -139,15 +113,16 @@
|
|
#clock-cells = <0>;
|
|
compatible = "fixed-clock";
|
|
clock-frequency = <32768>;
|
|
- clock-output-names = "osc32k";
|
|
+ clock-output-names = "ext-osc32k";
|
|
};
|
|
|
|
- iosc: internal-osc-clk {
|
|
- #clock-cells = <0>;
|
|
- compatible = "fixed-clock";
|
|
- clock-frequency = <16000000>;
|
|
- clock-accuracy = <300000000>;
|
|
- clock-output-names = "iosc";
|
|
+ pmu {
|
|
+ compatible = "arm,cortex-a53-pmu";
|
|
+ interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
|
|
};
|
|
|
|
psci {
|
|
@@ -155,6 +130,30 @@
|
|
method = "smc";
|
|
};
|
|
|
|
+ sound: sound {
|
|
+ compatible = "simple-audio-card";
|
|
+ simple-audio-card,name = "sun50i-a64-audio";
|
|
+ simple-audio-card,format = "i2s";
|
|
+ simple-audio-card,frame-master = <&cpudai>;
|
|
+ simple-audio-card,bitclock-master = <&cpudai>;
|
|
+ simple-audio-card,mclk-fs = <128>;
|
|
+ simple-audio-card,aux-devs = <&codec_analog>;
|
|
+ simple-audio-card,routing =
|
|
+ "Left DAC", "AIF1 Slot 0 Left",
|
|
+ "Right DAC", "AIF1 Slot 0 Right",
|
|
+ "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
+ "AIF1 Slot 0 Right ADC", "Right ADC";
|
|
+ status = "disabled";
|
|
+
|
|
+ cpudai: simple-audio-card,cpu {
|
|
+ sound-dai = <&dai>;
|
|
+ };
|
|
+
|
|
+ link_codec: simple-audio-card,codec {
|
|
+ sound-dai = <&codec>;
|
|
+ };
|
|
+ };
|
|
+
|
|
sound_spdif {
|
|
compatible = "simple-audio-card";
|
|
simple-audio-card,name = "On-board SPDIF";
|
|
@@ -175,6 +174,7 @@
|
|
|
|
timer {
|
|
compatible = "arm,armv8-timer";
|
|
+ allwinner,erratum-unknown1;
|
|
interrupts = <GIC_PPI 13
|
|
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
|
|
<GIC_PPI 14
|
|
@@ -185,13 +185,76 @@
|
|
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
|
|
};
|
|
|
|
+ thermal-zones {
|
|
+ cpu_thermal: cpu0-thermal {
|
|
+ /* milliseconds */
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&ths 0>;
|
|
+
|
|
+ cooling-maps {
|
|
+ map0 {
|
|
+ trip = <&cpu_alert0>;
|
|
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ map1 {
|
|
+ trip = <&cpu_alert1>;
|
|
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
|
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ trips {
|
|
+ cpu_alert0: cpu_alert0 {
|
|
+ /* milliCelsius */
|
|
+ temperature = <75000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "passive";
|
|
+ };
|
|
+
|
|
+ cpu_alert1: cpu_alert1 {
|
|
+ /* milliCelsius */
|
|
+ temperature = <90000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "hot";
|
|
+ };
|
|
+
|
|
+ cpu_crit: cpu_crit {
|
|
+ /* milliCelsius */
|
|
+ temperature = <110000>;
|
|
+ hysteresis = <2000>;
|
|
+ type = "critical";
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ gpu0_thermal: gpu0-thermal {
|
|
+ /* milliseconds */
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&ths 1>;
|
|
+ };
|
|
+
|
|
+ gpu1_thermal: gpu1-thermal {
|
|
+ /* milliseconds */
|
|
+ polling-delay-passive = <0>;
|
|
+ polling-delay = <0>;
|
|
+ thermal-sensors = <&ths 2>;
|
|
+ };
|
|
+ };
|
|
+
|
|
soc {
|
|
compatible = "simple-bus";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
ranges;
|
|
|
|
- de2@1000000 {
|
|
+ bus@1000000 {
|
|
compatible = "allwinner,sun50i-a64-de2";
|
|
reg = <0x1000000 0x400000>;
|
|
allwinner,sram = <&de2_sram 1>;
|
|
@@ -201,16 +264,28 @@
|
|
|
|
display_clocks: clock@0 {
|
|
compatible = "allwinner,sun50i-a64-de2-clk";
|
|
- reg = <0x0 0x100000>;
|
|
- clocks = <&ccu CLK_DE>,
|
|
- <&ccu CLK_BUS_DE>;
|
|
- clock-names = "mod",
|
|
- "bus";
|
|
+ reg = <0x0 0x10000>;
|
|
+ clocks = <&ccu CLK_BUS_DE>,
|
|
+ <&ccu CLK_DE>;
|
|
+ clock-names = "bus",
|
|
+ "mod";
|
|
resets = <&ccu RST_BUS_DE>;
|
|
#clock-cells = <1>;
|
|
#reset-cells = <1>;
|
|
};
|
|
|
|
+ rotate: rotate@20000 {
|
|
+ compatible = "allwinner,sun50i-a64-de2-rotate",
|
|
+ "allwinner,sun8i-a83t-de2-rotate";
|
|
+ reg = <0x20000 0x10000>;
|
|
+ interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&display_clocks CLK_BUS_ROT>,
|
|
+ <&display_clocks CLK_ROT>;
|
|
+ clock-names = "bus",
|
|
+ "mod";
|
|
+ resets = <&display_clocks RST_ROT>;
|
|
+ };
|
|
+
|
|
mixer0: mixer@100000 {
|
|
compatible = "allwinner,sun50i-a64-de2-mixer-0";
|
|
reg = <0x100000 0x100000>;
|
|
@@ -225,11 +300,19 @@
|
|
#size-cells = <0>;
|
|
|
|
mixer0_out: port@1 {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
reg = <1>;
|
|
|
|
- mixer0_out_tcon0: endpoint {
|
|
+ mixer0_out_tcon0: endpoint@0 {
|
|
+ reg = <0>;
|
|
remote-endpoint = <&tcon0_in_mixer0>;
|
|
};
|
|
+
|
|
+ mixer0_out_tcon1: endpoint@1 {
|
|
+ reg = <1>;
|
|
+ remote-endpoint = <&tcon1_in_mixer0>;
|
|
+ };
|
|
};
|
|
};
|
|
};
|
|
@@ -248,9 +331,17 @@
|
|
#size-cells = <0>;
|
|
|
|
mixer1_out: port@1 {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
reg = <1>;
|
|
|
|
- mixer1_out_tcon1: endpoint {
|
|
+ mixer1_out_tcon0: endpoint@0 {
|
|
+ reg = <0>;
|
|
+ remote-endpoint = <&tcon0_in_mixer1>;
|
|
+ };
|
|
+
|
|
+ mixer1_out_tcon1: endpoint@1 {
|
|
+ reg = <1>;
|
|
remote-endpoint = <&tcon1_in_mixer1>;
|
|
};
|
|
};
|
|
@@ -259,8 +350,7 @@
|
|
};
|
|
|
|
syscon: syscon@1c00000 {
|
|
- compatible = "allwinner,sun50i-a64-system-control",
|
|
- "syscon";
|
|
+ compatible = "allwinner,sun50i-a64-system-control";
|
|
reg = <0x01c00000 0x1000>;
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
@@ -278,6 +368,20 @@
|
|
reg = <0x0000 0x28000>;
|
|
};
|
|
};
|
|
+
|
|
+ sram_c1: sram@1d00000 {
|
|
+ compatible = "mmio-sram";
|
|
+ reg = <0x01d00000 0x40000>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <1>;
|
|
+ ranges = <0 0x01d00000 0x40000>;
|
|
+
|
|
+ ve_sram: sram-section@0 {
|
|
+ compatible = "allwinner,sun50i-a64-sram-c1",
|
|
+ "allwinner,sun4i-a10-sram-c1";
|
|
+ reg = <0x000000 0x40000>;
|
|
+ };
|
|
+ };
|
|
};
|
|
|
|
dma: dma-controller@1c02000 {
|
|
@@ -299,6 +403,7 @@
|
|
clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
|
|
clock-names = "ahb", "tcon-ch0";
|
|
clock-output-names = "tcon-pixel-clock";
|
|
+ #clock-cells = <0>;
|
|
resets = <&ccu RST_BUS_TCON0>, <&ccu RST_BUS_LVDS>;
|
|
reset-names = "lcd", "lvds";
|
|
|
|
@@ -315,12 +420,23 @@
|
|
reg = <0>;
|
|
remote-endpoint = <&mixer0_out_tcon0>;
|
|
};
|
|
+
|
|
+ tcon0_in_mixer1: endpoint@1 {
|
|
+ reg = <1>;
|
|
+ remote-endpoint = <&mixer1_out_tcon0>;
|
|
+ };
|
|
};
|
|
|
|
tcon0_out: port@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
+
|
|
+ tcon0_out_dsi: endpoint@1 {
|
|
+ reg = <1>;
|
|
+ remote-endpoint = <&dsi_in_tcon0>;
|
|
+ allwinner,tcon-channel = <1>;
|
|
+ };
|
|
};
|
|
};
|
|
};
|
|
@@ -340,9 +456,17 @@
|
|
#size-cells = <0>;
|
|
|
|
tcon1_in: port@0 {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
reg = <0>;
|
|
|
|
- tcon1_in_mixer1: endpoint {
|
|
+ tcon1_in_mixer0: endpoint@0 {
|
|
+ reg = <0>;
|
|
+ remote-endpoint = <&mixer0_out_tcon1>;
|
|
+ };
|
|
+
|
|
+ tcon1_in_mixer1: endpoint@1 {
|
|
+ reg = <1>;
|
|
remote-endpoint = <&mixer1_out_tcon1>;
|
|
};
|
|
};
|
|
@@ -360,6 +484,17 @@
|
|
};
|
|
};
|
|
|
|
+ video-codec@1c0e000 {
|
|
+ compatible = "allwinner,sun50i-a64-video-engine";
|
|
+ reg = <0x01c0e000 0x1000>;
|
|
+ clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
|
|
+ <&ccu CLK_DRAM_VE>;
|
|
+ clock-names = "ahb", "mod", "ram";
|
|
+ resets = <&ccu RST_BUS_VE>;
|
|
+ interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ allwinner,sram = <&ve_sram 1>;
|
|
+ };
|
|
+
|
|
mmc0: mmc@1c0f000 {
|
|
compatible = "allwinner,sun50i-a64-mmc";
|
|
reg = <0x01c0f000 0x1000>;
|
|
@@ -405,6 +540,21 @@
|
|
sid: eeprom@1c14000 {
|
|
compatible = "allwinner,sun50i-a64-sid";
|
|
reg = <0x1c14000 0x400>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <1>;
|
|
+
|
|
+ ths_calibration: thermal-sensor-calibration@34 {
|
|
+ reg = <0x34 0x8>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ crypto: crypto@1c15000 {
|
|
+ compatible = "allwinner,sun50i-a64-crypto";
|
|
+ reg = <0x01c15000 0x1000>;
|
|
+ interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&ccu CLK_BUS_CE>, <&ccu CLK_CE>;
|
|
+ clock-names = "bus", "mod";
|
|
+ resets = <&ccu RST_BUS_CE>;
|
|
};
|
|
|
|
usb_otg: usb@1c19000 {
|
|
@@ -417,6 +567,7 @@
|
|
phys = <&usbphy 0>;
|
|
phy-names = "usb";
|
|
extcon = <&usbphy 0>;
|
|
+ dr_mode = "otg";
|
|
status = "disabled";
|
|
};
|
|
|
|
@@ -491,7 +642,7 @@
|
|
ccu: clock@1c20000 {
|
|
compatible = "allwinner,sun50i-a64-ccu";
|
|
reg = <0x01c20000 0x400>;
|
|
- clocks = <&osc24M>, <&osc32k>;
|
|
+ clocks = <&osc24M>, <&rtc 0>;
|
|
clock-names = "hosc", "losc";
|
|
#clock-cells = <1>;
|
|
#reset-cells = <1>;
|
|
@@ -503,22 +654,50 @@
|
|
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
|
|
<GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
|
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
|
- clocks = <&ccu 58>;
|
|
+ clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&rtc 0>;
|
|
+ clock-names = "apb", "hosc", "losc";
|
|
gpio-controller;
|
|
#gpio-cells = <3>;
|
|
interrupt-controller;
|
|
#interrupt-cells = <3>;
|
|
|
|
- i2c0_pins: i2c0_pins {
|
|
+ csi_pins: csi-pins {
|
|
+ pins = "PE0", "PE2", "PE3", "PE4", "PE5", "PE6",
|
|
+ "PE7", "PE8", "PE9", "PE10", "PE11";
|
|
+ function = "csi";
|
|
+ };
|
|
+
|
|
+ /omit-if-no-ref/
|
|
+ csi_mclk_pin: csi-mclk-pin {
|
|
+ pins = "PE1";
|
|
+ function = "csi";
|
|
+ };
|
|
+
|
|
+ i2c0_pins: i2c0-pins {
|
|
pins = "PH0", "PH1";
|
|
function = "i2c0";
|
|
};
|
|
|
|
- i2c1_pins: i2c1_pins {
|
|
+ i2c1_pins: i2c1-pins {
|
|
pins = "PH2", "PH3";
|
|
function = "i2c1";
|
|
};
|
|
|
|
+ i2c2_pins: i2c2-pins {
|
|
+ pins = "PE14", "PE15";
|
|
+ function = "i2c2";
|
|
+ };
|
|
+
|
|
+ /omit-if-no-ref/
|
|
+ lcd_rgb666_pins: lcd-rgb666-pins {
|
|
+ pins = "PD0", "PD1", "PD2", "PD3", "PD4",
|
|
+ "PD5", "PD6", "PD7", "PD8", "PD9",
|
|
+ "PD10", "PD11", "PD12", "PD13",
|
|
+ "PD14", "PD15", "PD16", "PD17",
|
|
+ "PD18", "PD19", "PD20", "PD21";
|
|
+ function = "lcd0";
|
|
+ };
|
|
+
|
|
mmc0_pins: mmc0-pins {
|
|
pins = "PF0", "PF1", "PF2", "PF3",
|
|
"PF4", "PF5";
|
|
@@ -551,19 +730,19 @@
|
|
bias-pull-up;
|
|
};
|
|
|
|
- pwm_pin: pwm_pin {
|
|
+ pwm_pin: pwm-pin {
|
|
pins = "PD22";
|
|
function = "pwm";
|
|
};
|
|
|
|
- rmii_pins: rmii_pins {
|
|
+ rmii_pins: rmii-pins {
|
|
pins = "PD10", "PD11", "PD13", "PD14", "PD17",
|
|
"PD18", "PD19", "PD20", "PD22", "PD23";
|
|
function = "emac";
|
|
drive-strength = <40>;
|
|
};
|
|
|
|
- rgmii_pins: rgmii_pins {
|
|
+ rgmii_pins: rgmii-pins {
|
|
pins = "PD8", "PD9", "PD10", "PD11", "PD12",
|
|
"PD13", "PD15", "PD16", "PD17", "PD18",
|
|
"PD19", "PD20", "PD21", "PD22", "PD23";
|
|
@@ -571,17 +750,17 @@
|
|
drive-strength = <40>;
|
|
};
|
|
|
|
- spdif_tx_pin: spdif {
|
|
+ spdif_tx_pin: spdif-tx-pin {
|
|
pins = "PH8";
|
|
function = "spdif";
|
|
};
|
|
|
|
- spi0_pins: spi0 {
|
|
+ spi0_pins: spi0-pins {
|
|
pins = "PC0", "PC1", "PC2", "PC3";
|
|
function = "spi0";
|
|
};
|
|
|
|
- spi1_pins: spi1 {
|
|
+ spi1_pins: spi1-pins {
|
|
pins = "PD0", "PD1", "PD2", "PD3";
|
|
function = "spi1";
|
|
};
|
|
@@ -591,12 +770,12 @@
|
|
function = "uart0";
|
|
};
|
|
|
|
- uart1_pins: uart1_pins {
|
|
+ uart1_pins: uart1-pins {
|
|
pins = "PG6", "PG7";
|
|
function = "uart1";
|
|
};
|
|
|
|
- uart1_rts_cts_pins: uart1_rts_cts_pins {
|
|
+ uart1_rts_cts_pins: uart1-rts-cts-pins {
|
|
pins = "PG8", "PG9";
|
|
function = "uart1";
|
|
};
|
|
@@ -638,6 +817,14 @@
|
|
status = "disabled";
|
|
};
|
|
|
|
+ lradc: lradc@1c21800 {
|
|
+ compatible = "allwinner,sun50i-a64-lradc",
|
|
+ "allwinner,sun8i-a83t-r-lradc";
|
|
+ reg = <0x01c21800 0x400>;
|
|
+ interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
i2s0: i2s@1c22000 {
|
|
#sound-dai-cells = <0>;
|
|
compatible = "allwinner,sun50i-a64-i2s",
|
|
@@ -666,6 +853,41 @@
|
|
status = "disabled";
|
|
};
|
|
|
|
+ dai: dai@1c22c00 {
|
|
+ #sound-dai-cells = <0>;
|
|
+ compatible = "allwinner,sun50i-a64-codec-i2s";
|
|
+ reg = <0x01c22c00 0x200>;
|
|
+ interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
|
|
+ clock-names = "apb", "mod";
|
|
+ resets = <&ccu RST_BUS_CODEC>;
|
|
+ dmas = <&dma 15>, <&dma 15>;
|
|
+ dma-names = "rx", "tx";
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
+ codec: codec@1c22e00 {
|
|
+ #sound-dai-cells = <0>;
|
|
+ compatible = "allwinner,sun8i-a33-codec";
|
|
+ reg = <0x01c22e00 0x600>;
|
|
+ interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
|
|
+ clock-names = "bus", "mod";
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
+ ths: thermal-sensor@1c25000 {
|
|
+ compatible = "allwinner,sun50i-a64-ths";
|
|
+ reg = <0x01c25000 0x100>;
|
|
+ clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>;
|
|
+ clock-names = "bus", "mod";
|
|
+ interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ resets = <&ccu RST_BUS_THS>;
|
|
+ nvmem-cells = <&ths_calibration>;
|
|
+ nvmem-cell-names = "calibration";
|
|
+ #thermal-sensor-cells = <1>;
|
|
+ };
|
|
+
|
|
uart0: serial@1c28000 {
|
|
compatible = "snps,dw-apb-uart";
|
|
reg = <0x01c28000 0x400>;
|
|
@@ -727,6 +949,8 @@
|
|
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>;
|
|
@@ -738,6 +962,8 @@
|
|
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>;
|
|
@@ -749,12 +975,13 @@
|
|
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>;
|
|
};
|
|
|
|
-
|
|
spi0: spi@1c68000 {
|
|
compatible = "allwinner,sun8i-h3-spi";
|
|
reg = <0x01c68000 0x1000>;
|
|
@@ -808,6 +1035,28 @@
|
|
};
|
|
};
|
|
|
|
+ mali: gpu@1c40000 {
|
|
+ compatible = "allwinner,sun50i-a64-mali", "arm,mali-400";
|
|
+ reg = <0x01c40000 0x10000>;
|
|
+ interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ interrupt-names = "gp",
|
|
+ "gpmmu",
|
|
+ "pp0",
|
|
+ "ppmmu0",
|
|
+ "pp1",
|
|
+ "ppmmu1",
|
|
+ "pmu";
|
|
+ clocks = <&ccu CLK_BUS_GPU>, <&ccu CLK_GPU>;
|
|
+ clock-names = "bus", "core";
|
|
+ resets = <&ccu RST_BUS_GPU>;
|
|
+ };
|
|
+
|
|
gic: interrupt-controller@1c81000 {
|
|
compatible = "arm,gic-400";
|
|
reg = <0x01c81000 0x1000>,
|
|
@@ -830,6 +1079,73 @@
|
|
status = "disabled";
|
|
};
|
|
|
|
+ mbus: dram-controller@1c62000 {
|
|
+ compatible = "allwinner,sun50i-a64-mbus";
|
|
+ reg = <0x01c62000 0x1000>;
|
|
+ clocks = <&ccu 112>;
|
|
+ dma-ranges = <0x00000000 0x40000000 0xc0000000>;
|
|
+ #interconnect-cells = <1>;
|
|
+ };
|
|
+
|
|
+ csi: csi@1cb0000 {
|
|
+ compatible = "allwinner,sun50i-a64-csi";
|
|
+ reg = <0x01cb0000 0x1000>;
|
|
+ interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&ccu CLK_BUS_CSI>,
|
|
+ <&ccu CLK_CSI_SCLK>,
|
|
+ <&ccu CLK_DRAM_CSI>;
|
|
+ clock-names = "bus", "mod", "ram";
|
|
+ resets = <&ccu RST_BUS_CSI>;
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&csi_pins>;
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
+ dsi: dsi@1ca0000 {
|
|
+ compatible = "allwinner,sun50i-a64-mipi-dsi";
|
|
+ reg = <0x01ca0000 0x1000>;
|
|
+ interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&ccu CLK_BUS_MIPI_DSI>;
|
|
+ resets = <&ccu RST_BUS_MIPI_DSI>;
|
|
+ phys = <&dphy>;
|
|
+ phy-names = "dphy";
|
|
+ status = "disabled";
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ port {
|
|
+ dsi_in_tcon0: endpoint {
|
|
+ remote-endpoint = <&tcon0_out_dsi>;
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+
|
|
+ dphy: d-phy@1ca1000 {
|
|
+ compatible = "allwinner,sun50i-a64-mipi-dphy",
|
|
+ "allwinner,sun6i-a31-mipi-dphy";
|
|
+ reg = <0x01ca1000 0x1000>;
|
|
+ clocks = <&ccu CLK_BUS_MIPI_DSI>,
|
|
+ <&ccu CLK_DSI_DPHY>;
|
|
+ clock-names = "bus", "mod";
|
|
+ resets = <&ccu RST_BUS_MIPI_DSI>;
|
|
+ status = "disabled";
|
|
+ #phy-cells = <0>;
|
|
+ };
|
|
+
|
|
+ deinterlace: deinterlace@1e00000 {
|
|
+ compatible = "allwinner,sun50i-a64-deinterlace",
|
|
+ "allwinner,sun8i-h3-deinterlace";
|
|
+ reg = <0x01e00000 0x20000>;
|
|
+ clocks = <&ccu CLK_BUS_DEINTERLACE>,
|
|
+ <&ccu CLK_DEINTERLACE>,
|
|
+ <&ccu CLK_DRAM_DEINTERLACE>;
|
|
+ clock-names = "bus", "mod", "ram";
|
|
+ resets = <&ccu RST_BUS_DEINTERLACE>;
|
|
+ interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ interconnects = <&mbus 9>;
|
|
+ interconnect-names = "dma-mem";
|
|
+ };
|
|
+
|
|
hdmi: hdmi@1ee0000 {
|
|
compatible = "allwinner,sun50i-a64-dw-hdmi",
|
|
"allwinner,sun8i-a83t-dw-hdmi";
|
|
@@ -842,7 +1158,7 @@
|
|
resets = <&ccu RST_BUS_HDMI1>;
|
|
reset-names = "ctrl";
|
|
phys = <&hdmi_phy>;
|
|
- phy-names = "hdmi-phy";
|
|
+ phy-names = "phy";
|
|
status = "disabled";
|
|
|
|
ports {
|
|
@@ -867,7 +1183,7 @@
|
|
compatible = "allwinner,sun50i-a64-hdmi-phy";
|
|
reg = <0x01ef0000 0x10000>;
|
|
clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_DDC>,
|
|
- <&ccu 7>;
|
|
+ <&ccu CLK_PLL_VIDEO0>;
|
|
clock-names = "bus", "mod", "pll-0";
|
|
resets = <&ccu RST_BUS_HDMI0>;
|
|
reset-names = "phy";
|
|
@@ -875,11 +1191,12 @@
|
|
};
|
|
|
|
rtc: rtc@1f00000 {
|
|
- compatible = "allwinner,sun6i-a31-rtc";
|
|
- reg = <0x01f00000 0x54>;
|
|
+ compatible = "allwinner,sun50i-a64-rtc",
|
|
+ "allwinner,sun8i-h3-rtc";
|
|
+ reg = <0x01f00000 0x400>;
|
|
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
|
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
|
|
- clock-output-names = "rtc-osc32k", "rtc-osc32k-out";
|
|
+ clock-output-names = "osc32k", "osc32k-out", "iosc";
|
|
clocks = <&osc32k>;
|
|
#clock-cells = <1>;
|
|
};
|
|
@@ -896,13 +1213,19 @@
|
|
r_ccu: clock@1f01400 {
|
|
compatible = "allwinner,sun50i-a64-r-ccu";
|
|
reg = <0x01f01400 0x100>;
|
|
- clocks = <&osc24M>, <&osc32k>, <&iosc>,
|
|
- <&ccu 11>;
|
|
+ clocks = <&osc24M>, <&rtc 0>, <&rtc 2>,
|
|
+ <&ccu CLK_PLL_PERIPH0>;
|
|
clock-names = "hosc", "losc", "iosc", "pll-periph";
|
|
#clock-cells = <1>;
|
|
#reset-cells = <1>;
|
|
};
|
|
|
|
+ codec_analog: codec-analog@1f015c0 {
|
|
+ compatible = "allwinner,sun50i-a64-codec-analog";
|
|
+ reg = <0x01f015c0 0x4>;
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
r_i2c: i2c@1f02400 {
|
|
compatible = "allwinner,sun50i-a64-i2c",
|
|
"allwinner,sun6i-a31-i2c";
|
|
@@ -915,6 +1238,19 @@
|
|
#size-cells = <0>;
|
|
};
|
|
|
|
+ r_ir: ir@1f02000 {
|
|
+ compatible = "allwinner,sun50i-a64-ir",
|
|
+ "allwinner,sun6i-a31-ir";
|
|
+ reg = <0x01f02000 0x400>;
|
|
+ clocks = <&r_ccu CLK_APB0_IR>, <&r_ccu CLK_IR>;
|
|
+ clock-names = "apb", "ir";
|
|
+ resets = <&r_ccu RST_APB0_IR>;
|
|
+ interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&r_ir_rx_pin>;
|
|
+ status = "disabled";
|
|
+ };
|
|
+
|
|
r_pwm: pwm@1f03800 {
|
|
compatible = "allwinner,sun50i-a64-pwm",
|
|
"allwinner,sun5i-a13-pwm";
|
|
@@ -942,12 +1278,17 @@
|
|
function = "s_i2c";
|
|
};
|
|
|
|
- r_pwm_pin: pwm {
|
|
+ r_ir_rx_pin: r-ir-rx-pin {
|
|
+ pins = "PL11";
|
|
+ function = "s_cir_rx";
|
|
+ };
|
|
+
|
|
+ r_pwm_pin: r-pwm-pin {
|
|
pins = "PL10";
|
|
function = "s_pwm";
|
|
};
|
|
|
|
- r_rsb_pins: rsb {
|
|
+ r_rsb_pins: r-rsb-pins {
|
|
pins = "PL0", "PL1";
|
|
function = "s_rsb";
|
|
};
|
|
@@ -972,6 +1313,7 @@
|
|
"allwinner,sun6i-a31-wdt";
|
|
reg = <0x01c20ca0 0x20>;
|
|
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ clocks = <&osc24M>;
|
|
};
|
|
};
|
|
};
|
|
diff --git a/include/dt-bindings/clock/sun50i-a64-ccu.h b/include/dt-bindings/clock/sun50i-a64-ccu.h
|
|
index d66432c6e6..318eb15c41 100644
|
|
--- a/include/dt-bindings/clock/sun50i-a64-ccu.h
|
|
+++ b/include/dt-bindings/clock/sun50i-a64-ccu.h
|
|
@@ -43,8 +43,10 @@
|
|
#ifndef _DT_BINDINGS_CLK_SUN50I_A64_H_
|
|
#define _DT_BINDINGS_CLK_SUN50I_A64_H_
|
|
|
|
+#define CLK_PLL_VIDEO0 7
|
|
#define CLK_PLL_PERIPH0 11
|
|
|
|
+#define CLK_CPUX 21
|
|
#define CLK_BUS_MIPI_DSI 28
|
|
#define CLK_BUS_CE 29
|
|
#define CLK_BUS_DMA 30
|
|
@@ -129,7 +131,7 @@
|
|
#define CLK_AVS 109
|
|
#define CLK_HDMI 110
|
|
#define CLK_HDMI_DDC 111
|
|
-
|
|
+#define CLK_MBUS 112
|
|
#define CLK_DSI_DPHY 113
|
|
#define CLK_GPU 114
|
|
|
|
diff --git a/include/dt-bindings/clock/sun8i-de2.h b/include/dt-bindings/clock/sun8i-de2.h
|
|
index 3bed63b524..7768f73b05 100644
|
|
--- a/include/dt-bindings/clock/sun8i-de2.h
|
|
+++ b/include/dt-bindings/clock/sun8i-de2.h
|
|
@@ -15,4 +15,7 @@
|
|
#define CLK_MIXER1 7
|
|
#define CLK_WB 8
|
|
|
|
+#define CLK_BUS_ROT 9
|
|
+#define CLK_ROT 10
|
|
+
|
|
#endif /* _DT_BINDINGS_CLOCK_SUN8I_DE2_H_ */
|
|
diff --git a/include/dt-bindings/reset/sun8i-de2.h b/include/dt-bindings/reset/sun8i-de2.h
|
|
index 9526017432..1c36a6ac86 100644
|
|
--- a/include/dt-bindings/reset/sun8i-de2.h
|
|
+++ b/include/dt-bindings/reset/sun8i-de2.h
|
|
@@ -10,5 +10,6 @@
|
|
#define RST_MIXER0 0
|
|
#define RST_MIXER1 1
|
|
#define RST_WB 2
|
|
+#define RST_ROT 3
|
|
|
|
#endif /* _DT_BINDINGS_RESET_SUN8I_DE2_H_ */
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 7c56200f8043d039b1204e709593495640128edb Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 20:56:48 -0500
|
|
Subject: [PATCH 08/17] sunxi: board: Use a more descriptive variable name
|
|
|
|
The variable "cmp_str" always leaves me wondering if it is the DT name
|
|
of the current board (yes) or DT name in the FIT config entry (no).
|
|
|
|
In preparation for expanding the functionality here, rename it to
|
|
something that obviously means "this is the DT name we are looking for".
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/board.c | 12 ++++++------
|
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index f32e8f582f..385d7280a8 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -892,14 +892,14 @@ int ft_board_setup(void *blob, bd_t *bd)
|
|
int board_fit_config_name_match(const char *name)
|
|
{
|
|
struct boot_file_head *spl = get_spl_header(SPL_DT_HEADER_VERSION);
|
|
- const char *cmp_str = (const char *)spl;
|
|
+ const char *best_dt_name = (const char *)spl;
|
|
|
|
/* Check if there is a DT name stored in the SPL header and use that. */
|
|
if (spl != INVALID_SPL_HEADER && spl->dt_name_offset) {
|
|
- cmp_str += spl->dt_name_offset;
|
|
+ best_dt_name += spl->dt_name_offset;
|
|
} else {
|
|
#ifdef CONFIG_DEFAULT_DEVICE_TREE
|
|
- cmp_str = CONFIG_DEFAULT_DEVICE_TREE;
|
|
+ best_dt_name = CONFIG_DEFAULT_DEVICE_TREE;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
@@ -907,15 +907,15 @@ int board_fit_config_name_match(const char *name)
|
|
|
|
#ifdef CONFIG_PINE64_DT_SELECTION
|
|
/* Differentiate the two Pine64 board DTs by their DRAM size. */
|
|
- if (strstr(name, "-pine64") && strstr(cmp_str, "-pine64")) {
|
|
+ if (strstr(name, "-pine64") && strstr(best_dt_name, "-pine64")) {
|
|
if ((gd->ram_size > 512 * 1024 * 1024))
|
|
return !strstr(name, "plus");
|
|
else
|
|
return !!strstr(name, "plus");
|
|
} else {
|
|
- return strcmp(name, cmp_str);
|
|
+ return strcmp(name, best_dt_name);
|
|
}
|
|
#endif
|
|
- return strcmp(name, cmp_str);
|
|
+ return strcmp(name, best_dt_name);
|
|
}
|
|
#endif
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 29991797378cc57430f75319ebd203b8bea401bb Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 21:10:29 -0500
|
|
Subject: [PATCH 09/17] sunxi: board: Add a helper to get the SPL DT name
|
|
|
|
This moves the validity checking and typecasts all to one place away
|
|
from the string comparison logic, and it detangles the compile-time
|
|
and runtime control flow.
|
|
|
|
The new helper will also be used by U-Boot proper in a future commit.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/board.c | 26 +++++++++++++++++---------
|
|
1 file changed, 17 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 385d7280a8..5271c86d00 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -319,6 +319,17 @@ static struct boot_file_head * get_spl_header(uint8_t req_version)
|
|
return spl;
|
|
}
|
|
|
|
+static const char *get_spl_dt_name(void)
|
|
+{
|
|
+ struct boot_file_head *spl = get_spl_header(SPL_DT_HEADER_VERSION);
|
|
+
|
|
+ /* Check if there is a DT name stored in the SPL header. */
|
|
+ if (spl != INVALID_SPL_HEADER && spl->dt_name_offset)
|
|
+ return (char *)spl + spl->dt_name_offset;
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
int dram_init(void)
|
|
{
|
|
struct boot_file_head *spl = get_spl_header(SPL_DRAM_HEADER_VERSION);
|
|
@@ -891,20 +902,17 @@ int ft_board_setup(void *blob, bd_t *bd)
|
|
#ifdef CONFIG_SPL_LOAD_FIT
|
|
int board_fit_config_name_match(const char *name)
|
|
{
|
|
- struct boot_file_head *spl = get_spl_header(SPL_DT_HEADER_VERSION);
|
|
- const char *best_dt_name = (const char *)spl;
|
|
+ const char *best_dt_name = get_spl_dt_name();
|
|
|
|
- /* Check if there is a DT name stored in the SPL header and use that. */
|
|
- if (spl != INVALID_SPL_HEADER && spl->dt_name_offset) {
|
|
- best_dt_name += spl->dt_name_offset;
|
|
- } else {
|
|
#ifdef CONFIG_DEFAULT_DEVICE_TREE
|
|
+ if (best_dt_name == NULL)
|
|
best_dt_name = CONFIG_DEFAULT_DEVICE_TREE;
|
|
-#else
|
|
- return 0;
|
|
#endif
|
|
- };
|
|
|
|
+ if (best_dt_name == NULL) {
|
|
+ /* No DT name was provided, so accept the first config. */
|
|
+ return 0;
|
|
+ }
|
|
#ifdef CONFIG_PINE64_DT_SELECTION
|
|
/* Differentiate the two Pine64 board DTs by their DRAM size. */
|
|
if (strstr(name, "-pine64") && strstr(best_dt_name, "-pine64")) {
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From fb8f12364dec292df7451c71c4e0747ff0bad12b Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 21:18:17 -0500
|
|
Subject: [PATCH 10/17] sunxi: board: Simplify Pine A64 DT selection logic
|
|
|
|
Instead of using an entirely separate matching algorithm, simply update
|
|
the name of the DT we want to match. Enabling this logic does not depend
|
|
on the FIT config name, only on the initial guess of the board name.
|
|
|
|
Importantly, the initial guess must be "sun50i-a64-pine64-plus", because
|
|
otherwise the logic would trigger when "sun50i-a64-pine64-lts" was
|
|
written to the SPL header.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/board.c | 12 ++++--------
|
|
1 file changed, 4 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 5271c86d00..2b20153303 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -914,14 +914,10 @@ int board_fit_config_name_match(const char *name)
|
|
return 0;
|
|
}
|
|
#ifdef CONFIG_PINE64_DT_SELECTION
|
|
-/* Differentiate the two Pine64 board DTs by their DRAM size. */
|
|
- if (strstr(name, "-pine64") && strstr(best_dt_name, "-pine64")) {
|
|
- if ((gd->ram_size > 512 * 1024 * 1024))
|
|
- return !strstr(name, "plus");
|
|
- else
|
|
- return !!strstr(name, "plus");
|
|
- } else {
|
|
- return strcmp(name, best_dt_name);
|
|
+ else if (strstr(best_dt_name, "-pine64-plus")) {
|
|
+ /* Differentiate the Pine A64 boards by their DRAM size. */
|
|
+ if ((gd->ram_size == 512 * 1024 * 1024))
|
|
+ best_dt_name = "sun50i-a64-pine64";
|
|
}
|
|
#endif
|
|
return strcmp(name, best_dt_name);
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From dcb373558e12c022defb0a19b1932fc821e1b061 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 21:29:27 -0500
|
|
Subject: [PATCH 11/17] sunxi: board: Add PinePhone DT selection logic
|
|
|
|
There are two different publicly-released revisions of the PinePhone
|
|
hardware, versions 1.1 and 1.2; and they need different device trees.
|
|
Since some GPIO pins were rerouted, we can use that to distinguish
|
|
between them.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
arch/arm/mach-sunxi/Kconfig | 7 +++++++
|
|
board/sunxi/board.c | 21 +++++++++++++++++++++
|
|
2 files changed, 28 insertions(+)
|
|
|
|
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
|
|
index be0822bfb7..8421f3b685 100644
|
|
--- a/arch/arm/mach-sunxi/Kconfig
|
|
+++ b/arch/arm/mach-sunxi/Kconfig
|
|
@@ -1010,4 +1010,11 @@ config PINE64_DT_SELECTION
|
|
option, the device tree selection code specific to Pine64 which
|
|
utilizes the DRAM size will be enabled.
|
|
|
|
+config PINEPHONE_DT_SELECTION
|
|
+ bool "Enable PinePhone device tree selection code"
|
|
+ depends on MACH_SUN50I
|
|
+ help
|
|
+ Enable this option to automatically select the device tree for the
|
|
+ correct PinePhone hardware revision during boot.
|
|
+
|
|
endif
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 2b20153303..5e7983f848 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -27,6 +27,7 @@
|
|
#include <asm/arch/dram.h>
|
|
#include <asm/arch/gpio.h>
|
|
#include <asm/arch/mmc.h>
|
|
+#include <asm/arch/prcm.h>
|
|
#include <asm/arch/spl.h>
|
|
#include <linux/delay.h>
|
|
#include <u-boot/crc.h>
|
|
@@ -920,6 +921,26 @@ int board_fit_config_name_match(const char *name)
|
|
best_dt_name = "sun50i-a64-pine64";
|
|
}
|
|
#endif
|
|
+#ifdef CONFIG_PINEPHONE_DT_SELECTION
|
|
+ else if (strstr(best_dt_name, "-pinephone")) {
|
|
+ /* Differentiate the PinePhone revisions by GPIO inputs. */
|
|
+ prcm_apb0_enable(PRCM_APB0_GATE_PIO);
|
|
+ sunxi_gpio_set_pull(SUNXI_GPL(6), SUNXI_GPIO_PULL_UP);
|
|
+ sunxi_gpio_set_cfgpin(SUNXI_GPL(6), SUNXI_GPIO_INPUT);
|
|
+ udelay(100);
|
|
+
|
|
+ /* PL6 is pulled low by the modem on v1.2. */
|
|
+ if (gpio_get_value(SUNXI_GPL(6)) == 0)
|
|
+ best_dt_name = "sun50i-a64-pinephone-1.2";
|
|
+ else
|
|
+ best_dt_name = "sun50i-a64-pinephone-1.1";
|
|
+
|
|
+ sunxi_gpio_set_cfgpin(SUNXI_GPL(6), SUNXI_GPIO_DISABLE);
|
|
+ sunxi_gpio_set_pull(SUNXI_GPL(6), SUNXI_GPIO_PULL_DISABLE);
|
|
+ prcm_apb0_disable(PRCM_APB0_GATE_PIO);
|
|
+ }
|
|
+#endif
|
|
+
|
|
return strcmp(name, best_dt_name);
|
|
}
|
|
#endif
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From c68536f42fa916ae7f96715a553f8d1931712607 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 21:40:51 -0500
|
|
Subject: [PATCH 12/17] sunxi: board: Save the chosen DT name in the SPL header
|
|
|
|
This overwrites the name loaded from the SPL image. It will be different
|
|
if there was previously no name provided, or if a more accurate name was
|
|
determined by the board variant selection logic. This means that the DT
|
|
name in the SPL header now always matches the DT appended to U-Boot.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/board.c | 27 ++++++++++++++++++++++++++-
|
|
1 file changed, 26 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 5e7983f848..b57082c02f 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -331,6 +331,21 @@ static const char *get_spl_dt_name(void)
|
|
return NULL;
|
|
}
|
|
|
|
+static void set_spl_dt_name(const char *name)
|
|
+{
|
|
+ struct boot_file_head *spl = get_spl_header(SPL_ENV_HEADER_VERSION);
|
|
+
|
|
+ if (spl == INVALID_SPL_HEADER)
|
|
+ return;
|
|
+
|
|
+ /* Promote the header version for U-Boot proper, if needed. */
|
|
+ if (spl->spl_signature[3] < SPL_DT_HEADER_VERSION)
|
|
+ spl->spl_signature[3] = SPL_DT_HEADER_VERSION;
|
|
+
|
|
+ strcpy((char *)&spl->string_pool, name);
|
|
+ spl->dt_name_offset = offsetof(struct boot_file_head, string_pool);
|
|
+}
|
|
+
|
|
int dram_init(void)
|
|
{
|
|
struct boot_file_head *spl = get_spl_header(SPL_DRAM_HEADER_VERSION);
|
|
@@ -904,6 +919,7 @@ int ft_board_setup(void *blob, bd_t *bd)
|
|
int board_fit_config_name_match(const char *name)
|
|
{
|
|
const char *best_dt_name = get_spl_dt_name();
|
|
+ int ret;
|
|
|
|
#ifdef CONFIG_DEFAULT_DEVICE_TREE
|
|
if (best_dt_name == NULL)
|
|
@@ -941,6 +957,15 @@ int board_fit_config_name_match(const char *name)
|
|
}
|
|
#endif
|
|
|
|
- return strcmp(name, best_dt_name);
|
|
+ ret = strcmp(name, best_dt_name);
|
|
+
|
|
+ /*
|
|
+ * If one of the FIT configurations matches the most accurate DT name,
|
|
+ * update the SPL header to provide that DT name to U-Boot proper.
|
|
+ */
|
|
+ if (ret == 0)
|
|
+ set_spl_dt_name(best_dt_name);
|
|
+
|
|
+ return ret;
|
|
}
|
|
#endif
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From f331c332f89e75b2093898e9294619088bd5e732 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 17 May 2020 21:47:09 -0500
|
|
Subject: [PATCH 13/17] sunxi: board: Set fdtfile to match the DT chosen by SPL
|
|
|
|
Previously, fdtfile was always the value in CONFIG_DEFAULT_DEVICE_TREE.
|
|
This meant that, regardless of the DT chosen by SPL (either by changing
|
|
the header in the image or by the selection code at runtime), Linux
|
|
always used the default DT.
|
|
|
|
By using the name from the SPL header (which, because of the previous
|
|
commit, always matches the DT used by U-Boot proper), Linux also sees
|
|
the same board as U-Boot/SPL, even if the boot script later loads a DT
|
|
from disk.
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
board/sunxi/board.c | 11 +++++++++++
|
|
1 file changed, 11 insertions(+)
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index b57082c02f..6a59507030 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -870,6 +870,7 @@ static void setup_environment(const void *fdt)
|
|
|
|
int misc_init_r(void)
|
|
{
|
|
+ const char *spl_dt_name;
|
|
uint boot;
|
|
|
|
env_set("fel_booted", NULL);
|
|
@@ -888,6 +889,16 @@ int misc_init_r(void)
|
|
env_set("mmc_bootdev", "1");
|
|
}
|
|
|
|
+ /* Set fdtfile to match the FIT configuration chosen in SPL. */
|
|
+ spl_dt_name = get_spl_dt_name();
|
|
+ if (spl_dt_name) {
|
|
+ char *prefix = IS_ENABLED(CONFIG_ARM64) ? "allwinner/" : "";
|
|
+ char str[64];
|
|
+
|
|
+ snprintf(str, sizeof(str), "%s%s.dtb", prefix, spl_dt_name);
|
|
+ env_set("fdtfile", str);
|
|
+ }
|
|
+
|
|
setup_environment(gd->fdt_blob);
|
|
|
|
#ifdef CONFIG_USB_ETHER
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From c26789f2a6d15490e66277f26d6c6c1e6026aae2 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Holland <samuel@sholland.org>
|
|
Date: Sun, 15 Dec 2019 13:34:43 -0600
|
|
Subject: [PATCH 14/17] sun50i: a64: Add PinePhone DTS and defconfig
|
|
|
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
|
---
|
|
arch/arm/dts/Makefile | 1 +
|
|
arch/arm/dts/sun50i-a64-pinephone-1.0.dts | 25 ++
|
|
arch/arm/dts/sun50i-a64-pinephone-1.1.dts | 44 ++++
|
|
arch/arm/dts/sun50i-a64-pinephone-1.2.dts | 70 ++++++
|
|
arch/arm/dts/sun50i-a64-pinephone.dtsi | 266 +++++++++++++++++++++-
|
|
configs/pinephone_defconfig | 15 ++
|
|
6 files changed, 409 insertions(+), 12 deletions(-)
|
|
create mode 100644 arch/arm/dts/sun50i-a64-pinephone-1.2.dts
|
|
create mode 100644 configs/pinephone_defconfig
|
|
|
|
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
|
|
index 38a31589ba..8161997740 100644
|
|
--- a/arch/arm/dts/Makefile
|
|
+++ b/arch/arm/dts/Makefile
|
|
@@ -595,6 +595,7 @@ dtb-$(CONFIG_MACH_SUN50I) += \
|
|
sun50i-a64-pinebook.dtb \
|
|
sun50i-a64-pinephone-1.0.dtb \
|
|
sun50i-a64-pinephone-1.1.dtb \
|
|
+ sun50i-a64-pinephone-1.2.dtb \
|
|
sun50i-a64-pinetab.dtb \
|
|
sun50i-a64-sopine-baseboard.dtb \
|
|
sun50i-a64-teres-i.dtb
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.0.dts b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
index 0c42272106..5ac8d19d4c 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.0.dts
|
|
@@ -9,3 +9,28 @@
|
|
model = "Pine64 PinePhone Developer Batch (1.0)";
|
|
compatible = "pine64,pinephone-1.0", "allwinner,sun50i-a64";
|
|
};
|
|
+
|
|
+/*
|
|
+ * The N_VBUSEN pin is disconnected, but we need to inform the PMIC about
|
|
+ * the VBUS status anyway. To avoid the pin from floating and to inform
|
|
+ * the PMIC, about VBUS status, we couple reg_drivevbus with reg_vbus.
|
|
+ */
|
|
+®_drivevbus {
|
|
+ vin-supply = <®_vcc5v0>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_usb0_vbus {
|
|
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */
|
|
+ enable-active-high;
|
|
+ vin-supply = <®_drivevbus>;
|
|
+};
|
|
+
|
|
+&ring_indicator {
|
|
+ gpios = <&pio 1 2 GPIO_ACTIVE_LOW>; /* PB2 */
|
|
+};
|
|
+
|
|
+&sgm3140 {
|
|
+ flash-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
|
|
+ enable-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.1.dts b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
index 06a775c416..7ebac3ab9b 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.1.dts
|
|
@@ -9,3 +9,47 @@
|
|
model = "Pine64 PinePhone Braveheart (1.1)";
|
|
compatible = "pine64,pinephone-1.1", "allwinner,sun50i-a64";
|
|
};
|
|
+
|
|
+&backlight {
|
|
+ power-supply = <®_ldo_io0>;
|
|
+ /*
|
|
+ * PWM backlight circuit on this PinePhone revision was changed since
|
|
+ * 1.0, and the lowest PWM duty cycle that doesn't lead to backlight
|
|
+ * being off is around 20%. Duty cycle for the lowest brightness level
|
|
+ * also varries quite a bit between individual boards, so the lowest
|
|
+ * value here was chosen as a safe default.
|
|
+ */
|
|
+ brightness-levels = <
|
|
+ 774 793 814 842
|
|
+ 882 935 1003 1088
|
|
+ 1192 1316 1462 1633
|
|
+ 1830 2054 2309 2596
|
|
+ 2916 3271 3664 4096>;
|
|
+ num-interpolated-steps = <50>;
|
|
+ default-brightness-level = <400>;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * The N_VBUSEN pin is disconnected, but we need to inform the PMIC about
|
|
+ * the VBUS status anyway. To avoid the pin from floating and to inform
|
|
+ * the PMIC, about VBUS status, we couple reg_drivevbus with reg_vbus.
|
|
+ */
|
|
+®_drivevbus {
|
|
+ vin-supply = <®_vcc5v0>;
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+®_usb0_vbus {
|
|
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */
|
|
+ enable-active-high;
|
|
+ vin-supply = <®_drivevbus>;
|
|
+};
|
|
+
|
|
+&ring_indicator {
|
|
+ gpios = <&pio 1 2 GPIO_ACTIVE_LOW>; /* PB2 */
|
|
+};
|
|
+
|
|
+&sgm3140 {
|
|
+ flash-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
|
|
+ enable-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone-1.2.dts b/arch/arm/dts/sun50i-a64-pinephone-1.2.dts
|
|
new file mode 100644
|
|
index 0000000000..cb5184df1b
|
|
--- /dev/null
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone-1.2.dts
|
|
@@ -0,0 +1,70 @@
|
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
+// Copyright (C) 2020 Samuel Holland <samuel@sholland.org>
|
|
+
|
|
+/dts-v1/;
|
|
+
|
|
+#include "sun50i-a64-pinephone.dtsi"
|
|
+
|
|
+/ {
|
|
+ model = "Pine64 PinePhone (1.2)";
|
|
+ compatible = "pine64,pinephone-1.2", "allwinner,sun50i-a64";
|
|
+
|
|
+ wifi_pwrseq: wifi_pwrseq {
|
|
+ compatible = "mmc-pwrseq-simple";
|
|
+ reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
|
|
+ };
|
|
+};
|
|
+
|
|
+&backlight {
|
|
+ power-supply = <®_ldo_io0>;
|
|
+ /*
|
|
+ * PWM backlight circuit on this PinePhone revision was changed since
|
|
+ * 1.0, and the lowest PWM duty cycle that doesn't lead to backlight
|
|
+ * being off is around 20%. Duty cycle for the lowest brightness level
|
|
+ * also varries quite a bit between individual boards, so the lowest
|
|
+ * value here was chosen as a safe default.
|
|
+ */
|
|
+ brightness-levels = <
|
|
+ 774 793 814 842
|
|
+ 882 935 1003 1088
|
|
+ 1192 1316 1462 1633
|
|
+ 1830 2054 2309 2596
|
|
+ 2916 3271 3664 4096>;
|
|
+ num-interpolated-steps = <50>;
|
|
+ default-brightness-level = <400>;
|
|
+};
|
|
+
|
|
+&lis3mdl {
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <1 1 IRQ_TYPE_EDGE_RISING>; /* PB1 */
|
|
+};
|
|
+
|
|
+&mmc1 {
|
|
+ mmc-pwrseq = <&wifi_pwrseq>;
|
|
+};
|
|
+
|
|
+®_anx_vdd1v0 {
|
|
+ gpio = <&pio 3 11 GPIO_ACTIVE_HIGH>; /* PD11 */
|
|
+ enable-active-high;
|
|
+};
|
|
+
|
|
+®_usb0_vbus {
|
|
+ /*
|
|
+ * ANX7688 will enable/disable USB-5V <-> DCIN switch by itself
|
|
+ * via VBUS_CTRL pin, so no GPIO is needed here.
|
|
+ */
|
|
+ vin-supply = <®_vcc5v0>;
|
|
+};
|
|
+
|
|
+&ring_indicator {
|
|
+ gpios = <&r_pio 0 6 GPIO_ACTIVE_LOW>; /* PL6 */
|
|
+};
|
|
+
|
|
+&sgm3140 {
|
|
+ flash-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>; /* PC3 */
|
|
+ enable-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
|
|
+};
|
|
+
|
|
+&usbphy {
|
|
+ usb0_vbus_det-gpios = <&r_pio 0 9 GPIO_ACTIVE_HIGH>; /* PL9 */
|
|
+};
|
|
diff --git a/arch/arm/dts/sun50i-a64-pinephone.dtsi b/arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
index cefda145c3..fc2dca4101 100644
|
|
--- a/arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
+++ b/arch/arm/dts/sun50i-a64-pinephone.dtsi
|
|
@@ -7,6 +7,7 @@
|
|
#include "sun50i-a64-cpu-opp.dtsi"
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
+#include <dt-bindings/input/gpio-keys.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/leds/common.h>
|
|
#include <dt-bindings/pwm/pwm.h>
|
|
@@ -14,12 +15,41 @@
|
|
/ {
|
|
aliases {
|
|
serial0 = &uart0;
|
|
+ ethernet0 = &rtl8723cs;
|
|
+ };
|
|
+
|
|
+ backlight: backlight {
|
|
+ compatible = "pwm-backlight";
|
|
+ pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>;
|
|
+ enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
|
|
+ /* Backlight configuration differs per PinePhone revision. */
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
+ gpio-keys {
|
|
+ compatible = "gpio-keys";
|
|
+
|
|
+ ring_indicator: ring-indicator {
|
|
+ label = "Ring Indicator";
|
|
+ linux,can-disable;
|
|
+ linux,code = <KEY_WAKEUP>;
|
|
+ wakeup-event-action = <EV_ACT_ASSERTED>;
|
|
+ wakeup-source;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ i2c_csi: i2c-csi {
|
|
+ compatible = "i2c-gpio";
|
|
+ sda-gpios = <&pio 4 13 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* PE13 */
|
|
+ scl-gpios = <&pio 4 12 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* PE12 */
|
|
+ i2c-gpio,delay-us = <3>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+ };
|
|
+
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
|
|
@@ -27,18 +57,79 @@
|
|
function = LED_FUNCTION_INDICATOR;
|
|
color = <LED_COLOR_ID_BLUE>;
|
|
gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
|
|
+ retain-state-suspended;
|
|
};
|
|
|
|
green {
|
|
function = LED_FUNCTION_INDICATOR;
|
|
color = <LED_COLOR_ID_GREEN>;
|
|
gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
|
|
+ retain-state-suspended;
|
|
};
|
|
|
|
red {
|
|
function = LED_FUNCTION_INDICATOR;
|
|
color = <LED_COLOR_ID_RED>;
|
|
gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
|
|
+ retain-state-suspended;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ reg_anx_vdd1v0: anx-vdd1v0 {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "anx-vdd1v0";
|
|
+ regulator-min-microvolt = <1000000>;
|
|
+ regulator-max-microvolt = <1000000>;
|
|
+ };
|
|
+
|
|
+ reg_usb0_vbus: usb0-vbus {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "usb0-vbus";
|
|
+ regulator-min-microvolt = <5000000>;
|
|
+ regulator-max-microvolt = <5000000>;
|
|
+ };
|
|
+
|
|
+ reg_vbat_bb: vbat-bb {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-always-on;
|
|
+ regulator-name = "vbat-bb";
|
|
+ regulator-min-microvolt = <3500000>;
|
|
+ regulator-max-microvolt = <3500000>;
|
|
+ gpio = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
|
|
+ enable-active-high;
|
|
+ };
|
|
+
|
|
+ reg_vbat_wifi: vbat-wifi {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-min-microvolt = <3300000>;
|
|
+ regulator-max-microvolt = <3300000>;
|
|
+ regulator-name = "vbat-wifi";
|
|
+ };
|
|
+
|
|
+ reg_vcc5v0: vcc5v0 {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "vcc5v0";
|
|
+ regulator-min-microvolt = <5000000>;
|
|
+ regulator-max-microvolt = <5000000>;
|
|
+ gpio = <&pio 3 8 GPIO_ACTIVE_HIGH>; /* PD8 */
|
|
+ enable-active-high;
|
|
+ };
|
|
+
|
|
+ reg_vconn5v0: vconn5v0 {
|
|
+ compatible = "regulator-fixed";
|
|
+ regulator-name = "vconn5v0";
|
|
+ regulator-min-microvolt = <5000000>;
|
|
+ regulator-max-microvolt = <5000000>;
|
|
+ gpio = <&pio 3 9 GPIO_ACTIVE_HIGH>; /* PD9 */
|
|
+ enable-active-high;
|
|
+ };
|
|
+
|
|
+ sgm3140: led-controller {
|
|
+ compatible = "sgmicro,sgm3140";
|
|
+
|
|
+ sgm3140_flash: led {
|
|
+ function = LED_FUNCTION_FLASH;
|
|
+ color = <LED_COLOR_ID_WHITE>;
|
|
};
|
|
};
|
|
|
|
@@ -80,10 +171,54 @@
|
|
cpu-supply = <®_dcdc2>;
|
|
};
|
|
|
|
+&csi {
|
|
+ pinctrl-0 = <&csi_pins>, <&csi_mclk_pin>;
|
|
+ status = "okay";
|
|
+
|
|
+ port {
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+
|
|
+ csi_ov5640_ep: endpoint@0 {
|
|
+ reg = <0>;
|
|
+ remote-endpoint = <&ov5640_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
&dai {
|
|
status = "okay";
|
|
};
|
|
|
|
+&de {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dphy {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
+&dsi {
|
|
+ vcc-dsi-supply = <®_dldo1>;
|
|
+ #address-cells = <1>;
|
|
+ #size-cells = <0>;
|
|
+ status = "okay";
|
|
+
|
|
+ panel@0 {
|
|
+ compatible = "xingbangda,xbd599", "sitronix,st7703";
|
|
+ reg = <0>;
|
|
+ reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */
|
|
+ iovcc-supply = <®_dldo2>;
|
|
+ vcc-supply = <®_ldo_io0>;
|
|
+ backlight = <&backlight>;
|
|
+ };
|
|
+};
|
|
+
|
|
&ehci0 {
|
|
status = "okay";
|
|
};
|
|
@@ -92,17 +227,44 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&i2c0 {
|
|
+ status = "okay";
|
|
+
|
|
+ touchscreen@5d {
|
|
+ compatible = "goodix,gt917s", "goodix,gt911";
|
|
+ reg = <0x5d>;
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */
|
|
+ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
|
|
+ reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
|
|
+ AVDD28-supply = <®_ldo_io0>;
|
|
+ VDDIO-supply = <®_ldo_io0>;
|
|
+ touchscreen-size-x = <720>;
|
|
+ touchscreen-size-y = <1440>;
|
|
+ };
|
|
+};
|
|
+
|
|
&i2c1 {
|
|
status = "okay";
|
|
|
|
/* Magnetometer */
|
|
- lis3mdl@1e {
|
|
+ lis3mdl: lis3mdl@1e {
|
|
compatible = "st,lis3mdl-magn";
|
|
reg = <0x1e>;
|
|
vdd-supply = <®_dldo1>;
|
|
vddio-supply = <®_dldo1>;
|
|
};
|
|
|
|
+ /* Light/proximity sensor */
|
|
+ stk3311@48 {
|
|
+ compatible = "sensortek,stk3311";
|
|
+ reg = <0x48>;
|
|
+ interrupt-parent = <&pio>;
|
|
+ interrupts = <1 0 IRQ_TYPE_EDGE_FALLING>; /* PB0 */
|
|
+ vdd-supply = <®_ldo_io0>;
|
|
+ leda-supply = <®_dldo1>;
|
|
+ };
|
|
+
|
|
/* Accelerometer/gyroscope */
|
|
mpu6050@68 {
|
|
compatible = "invensense,mpu6050";
|
|
@@ -111,6 +273,9 @@
|
|
interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */
|
|
vdd-supply = <®_dldo1>;
|
|
vddio-supply = <®_dldo1>;
|
|
+ mount-matrix = "0", "1", "0",
|
|
+ "-1", "0", "0",
|
|
+ "0", "0", "-1";
|
|
};
|
|
};
|
|
|
|
@@ -119,6 +284,47 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&i2c_csi {
|
|
+ gc2145: front-camera@3c {
|
|
+ compatible = "galaxycore,gc2145";
|
|
+ reg = <0x3c>;
|
|
+ clocks = <&ccu CLK_CSI_MCLK>;
|
|
+ clock-names = "xclk";
|
|
+
|
|
+ AVDD-supply = <®_dldo3>;
|
|
+ DVDD-supply = <®_aldo1>;
|
|
+ IOVDD-supply = <®_eldo3>;
|
|
+ reset-gpios = <&pio 4 16 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; /* PE16 */
|
|
+ enable-gpios = <&pio 4 17 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; /* PE17 */
|
|
+ };
|
|
+
|
|
+ ov5640: rear-camera@4c {
|
|
+ compatible = "ovti,ov5640";
|
|
+ reg = <0x4c>;
|
|
+ clocks = <&ccu CLK_CSI_MCLK>;
|
|
+ clock-names = "xclk";
|
|
+
|
|
+ AVDD-supply = <®_dldo3>;
|
|
+ DOVDD-supply = <®_aldo1>; /* shared with AFVCC */
|
|
+ DVDD-supply = <®_eldo3>;
|
|
+ reset-gpios = <&pio 3 3 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; /* PD3 */
|
|
+ powerdown-gpios = <&pio 2 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* PC0 */
|
|
+
|
|
+ flash-leds = <&sgm3140_flash>;
|
|
+
|
|
+ port {
|
|
+ ov5640_ep: endpoint {
|
|
+ remote-endpoint = <&csi_ov5640_ep>;
|
|
+ bus-width = <8>;
|
|
+ hsync-active = <1>; /* Active high */
|
|
+ vsync-active = <0>; /* Active low */
|
|
+ data-active = <1>; /* Active high */
|
|
+ pclk-sample = <1>; /* Rising */
|
|
+ };
|
|
+ };
|
|
+ };
|
|
+};
|
|
+
|
|
&lradc {
|
|
vref-supply = <®_aldo3>;
|
|
status = "okay";
|
|
@@ -138,6 +344,10 @@
|
|
};
|
|
};
|
|
|
|
+&mixer1 {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&mmc0 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc0_pins>;
|
|
@@ -149,6 +359,20 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&mmc1 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&mmc1_pins>;
|
|
+ vmmc-supply = <®_vbat_wifi>;
|
|
+ vqmmc-supply = <®_dldo4>;
|
|
+ bus-width = <4>;
|
|
+ non-removable;
|
|
+ status = "okay";
|
|
+
|
|
+ rtl8723cs: wifi@1 {
|
|
+ reg = <1>;
|
|
+ };
|
|
+};
|
|
+
|
|
&mmc2 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&mmc2_pins>;
|
|
@@ -188,6 +412,10 @@
|
|
*/
|
|
};
|
|
|
|
+&r_pwm {
|
|
+ status = "okay";
|
|
+};
|
|
+
|
|
&r_rsb {
|
|
status = "okay";
|
|
|
|
@@ -201,8 +429,8 @@
|
|
|
|
#include "axp803.dtsi"
|
|
|
|
-&ac_power_supply {
|
|
- status = "okay";
|
|
+&axp_adc {
|
|
+ x-powers,ts-as-gpadc;
|
|
};
|
|
|
|
&battery_power_supply {
|
|
@@ -224,8 +452,8 @@
|
|
|
|
®_aldo3 {
|
|
regulator-always-on;
|
|
- regulator-min-microvolt = <2700000>;
|
|
- regulator-max-microvolt = <3300000>;
|
|
+ regulator-min-microvolt = <3000000>;
|
|
+ regulator-max-microvolt = <3000000>;
|
|
regulator-name = "vcc-pll-avcc";
|
|
};
|
|
|
|
@@ -268,7 +496,7 @@
|
|
®_dldo2 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
- regulator-name = "vcc-mipi-io";
|
|
+ regulator-name = "vcc-dsi-io";
|
|
};
|
|
|
|
®_dldo3 {
|
|
@@ -293,7 +521,7 @@
|
|
®_eldo3 {
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
- regulator-name = "dvdd-1v8-csi";
|
|
+ regulator-name = "dvdd-csi";
|
|
};
|
|
|
|
®_fldo1 {
|
|
@@ -342,10 +570,10 @@
|
|
"Internal Speaker", "Speaker Amp OUTR",
|
|
"Speaker Amp INL", "LINEOUT",
|
|
"Speaker Amp INR", "LINEOUT",
|
|
- "Left DAC", "AIF1 Slot 0 Left",
|
|
- "Right DAC", "AIF1 Slot 0 Right",
|
|
- "AIF1 Slot 0 Left ADC", "Left ADC",
|
|
- "AIF1 Slot 0 Right ADC", "Right ADC",
|
|
+ "Left DAC", "DAC Left",
|
|
+ "Right DAC", "DAC Right",
|
|
+ "ADC Left", "Left ADC",
|
|
+ "ADC Right", "Right ADC",
|
|
"Internal Microphone", "MBIAS",
|
|
"MIC1", "Internal Microphone",
|
|
"Headset Microphone", "HBIAS",
|
|
@@ -358,6 +586,20 @@
|
|
status = "okay";
|
|
};
|
|
|
|
+&uart1 {
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
|
+ status = "okay";
|
|
+
|
|
+ bluetooth {
|
|
+ compatible = "realtek,rtl8723cs-bt";
|
|
+ reset-gpios = <&r_pio 0 4 GPIO_ACTIVE_LOW>; /* PL4 */
|
|
+ device-wake-gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /* PH6 */
|
|
+ host-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
|
|
+ firmware-postfix = "pinebook";
|
|
+ };
|
|
+};
|
|
+
|
|
/* Connected to the modem (hardware flow control can't be used) */
|
|
&uart3 {
|
|
pinctrl-names = "default";
|
|
@@ -366,7 +608,7 @@
|
|
};
|
|
|
|
&usb_otg {
|
|
- dr_mode = "peripheral";
|
|
+ dr_mode = "otg";
|
|
status = "okay";
|
|
};
|
|
|
|
diff --git a/configs/pinephone_defconfig b/configs/pinephone_defconfig
|
|
new file mode 100644
|
|
index 0000000000..96a87617f3
|
|
--- /dev/null
|
|
+++ b/configs/pinephone_defconfig
|
|
@@ -0,0 +1,15 @@
|
|
+CONFIG_ARM=y
|
|
+CONFIG_ARCH_SUNXI=y
|
|
+CONFIG_SPL=y
|
|
+CONFIG_MACH_SUN50I=y
|
|
+CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
|
|
+CONFIG_DRAM_CLK=552
|
|
+CONFIG_DRAM_ZQ=3881949
|
|
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
|
+# CONFIG_VIDEO_DE2 is not set
|
|
+CONFIG_PINEPHONE_DT_SELECTION=y
|
|
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
|
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pinephone-1.2"
|
|
+CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2"
|
|
+# CONFIG_NET is not set
|
|
+# CONFIG_EFI_LOADER is not set
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 08156f7f7dfe8de2209d3bb1d90d41519aedb903 Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megous@megous.com>
|
|
Date: Tue, 11 Feb 2020 14:10:05 +0100
|
|
Subject: [PATCH 15/17] pinephone: Add volume_key environment variable
|
|
|
|
When the user has a volume key pressed volume_key variable will
|
|
contain either value 'down' or 'up', otherwise it will be empty.
|
|
|
|
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
|
---
|
|
board/sunxi/Makefile | 1 +
|
|
board/sunxi/board.c | 18 ++++++++++
|
|
board/sunxi/lradc.c | 81 ++++++++++++++++++++++++++++++++++++++++++++
|
|
board/sunxi/lradc.h | 11 ++++++
|
|
4 files changed, 111 insertions(+)
|
|
create mode 100644 board/sunxi/lradc.c
|
|
create mode 100644 board/sunxi/lradc.h
|
|
|
|
diff --git a/board/sunxi/Makefile b/board/sunxi/Makefile
|
|
index c4e13f8c38..6a8a2f5b42 100644
|
|
--- a/board/sunxi/Makefile
|
|
+++ b/board/sunxi/Makefile
|
|
@@ -11,3 +11,4 @@ obj-$(CONFIG_SUN7I_GMAC) += gmac.o
|
|
obj-$(CONFIG_MACH_SUN4I) += dram_sun4i_auto.o
|
|
obj-$(CONFIG_MACH_SUN5I) += dram_sun5i_auto.o
|
|
obj-$(CONFIG_MACH_SUN7I) += dram_sun5i_auto.o
|
|
+obj-$(CONFIG_MACH_SUN50I) += lradc.o
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 6a59507030..83ee2d18d4 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -44,6 +44,7 @@
|
|
#include <spl.h>
|
|
#include <sy8106a.h>
|
|
#include <asm/setup.h>
|
|
+#include "lradc.h"
|
|
|
|
#if defined CONFIG_VIDEO_LCD_PANEL_I2C && !(defined CONFIG_SPL_BUILD)
|
|
/* So that we can use pin names in Kconfig and sunxi_name_to_gpio() */
|
|
@@ -640,6 +641,12 @@ void sunxi_board_init(void)
|
|
{
|
|
int power_failed = 0;
|
|
|
|
+#ifdef CONFIG_MACH_SUN50I
|
|
+ // we init the lradc in SPL to get the ADC started early to have
|
|
+ // a valid sample when U-Boot main binary gets executed.
|
|
+ lradc_enable();
|
|
+#endif
|
|
+
|
|
#ifdef CONFIG_SY8106A_POWER
|
|
power_failed = sy8106a_set_vout1(CONFIG_SY8106A_VOUT1_VOLT);
|
|
#endif
|
|
@@ -899,6 +906,17 @@ int misc_init_r(void)
|
|
env_set("fdtfile", str);
|
|
}
|
|
|
|
+#ifdef CONFIG_MACH_SUN50I
|
|
+ int key = lradc_get_pressed_key();
|
|
+ if (key == KEY_VOLUMEDOWN)
|
|
+ env_set("volume_key", "down");
|
|
+ else if (key == KEY_VOLUMEUP)
|
|
+ env_set("volume_key", "up");
|
|
+
|
|
+ // no longer needed
|
|
+ lradc_disable();
|
|
+#endif
|
|
+
|
|
setup_environment(gd->fdt_blob);
|
|
|
|
#ifdef CONFIG_USB_ETHER
|
|
diff --git a/board/sunxi/lradc.c b/board/sunxi/lradc.c
|
|
new file mode 100644
|
|
index 0000000000..693b198e25
|
|
--- /dev/null
|
|
+++ b/board/sunxi/lradc.c
|
|
@@ -0,0 +1,81 @@
|
|
+#include <common.h>
|
|
+#include <asm/io.h>
|
|
+#include "lradc.h"
|
|
+
|
|
+#define LRADC_BASE 0x1c21800
|
|
+
|
|
+#define LRADC_CTRL (LRADC_BASE + 0x00)
|
|
+#define LRADC_INTC (LRADC_BASE + 0x04)
|
|
+#define LRADC_INTS (LRADC_BASE + 0x08)
|
|
+#define LRADC_DATA0 (LRADC_BASE + 0x0c)
|
|
+#define LRADC_DATA1 (LRADC_BASE + 0x10)
|
|
+
|
|
+/* LRADC_CTRL bits */
|
|
+#define FIRST_CONVERT_DLY(x) ((x) << 24) /* 8 bits */
|
|
+#define CHAN_SELECT(x) ((x) << 22) /* 2 bits */
|
|
+#define CONTINUE_TIME_SEL(x) ((x) << 16) /* 4 bits */
|
|
+#define KEY_MODE_SEL(x) ((x) << 12) /* 2 bits */
|
|
+#define LEVELA_B_CNT(x) ((x) << 8) /* 4 bits */
|
|
+#define HOLD_KEY_EN(x) ((x) << 7)
|
|
+#define HOLD_EN(x) ((x) << 6)
|
|
+#define LEVELB_VOL(x) ((x) << 4) /* 2 bits */
|
|
+#define SAMPLE_RATE(x) ((x) << 2) /* 2 bits */
|
|
+#define ENABLE(x) ((x) << 0)
|
|
+
|
|
+/* LRADC_INTC and LRADC_INTS bits */
|
|
+#define CHAN1_KEYUP_IRQ BIT(12)
|
|
+#define CHAN1_ALRDY_HOLD_IRQ BIT(11)
|
|
+#define CHAN1_HOLD_IRQ BIT(10)
|
|
+#define CHAN1_KEYDOWN_IRQ BIT(9)
|
|
+#define CHAN1_DATA_IRQ BIT(8)
|
|
+#define CHAN0_KEYUP_IRQ BIT(4)
|
|
+#define CHAN0_ALRDY_HOLD_IRQ BIT(3)
|
|
+#define CHAN0_HOLD_IRQ BIT(2)
|
|
+#define CHAN0_KEYDOWN_IRQ BIT(1)
|
|
+#define CHAN0_DATA_IRQ BIT(0)
|
|
+
|
|
+// this is for PinePhone only
|
|
+
|
|
+int lradc_get_pressed_key(void)
|
|
+{
|
|
+ uint32_t val;
|
|
+ uint32_t vref = 3000000 * 2 / 3;
|
|
+
|
|
+ val = readl(LRADC_DATA0) & 0x3f;
|
|
+ val = val * vref / 63;
|
|
+
|
|
+// printf("lradc=%u\n", val);
|
|
+
|
|
+ if (val < 200000) // 158730
|
|
+ return KEY_VOLUMEUP;
|
|
+ else if (val < 400000) // 349206
|
|
+ return KEY_VOLUMEDOWN;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+void lradc_enable(void)
|
|
+{
|
|
+ // aldo3 is always on and defaults to 3V
|
|
+
|
|
+ writel(0xffffffff, LRADC_INTS);
|
|
+ writel(0, LRADC_INTC);
|
|
+
|
|
+ /*
|
|
+ * Set sample time to 4 ms / 250 Hz. Wait 2 * 4 ms for key to
|
|
+ * stabilize on press, wait (1 + 1) * 4 ms for key release
|
|
+ */
|
|
+ writel(FIRST_CONVERT_DLY(0) | LEVELA_B_CNT(0) | HOLD_EN(0) |
|
|
+ SAMPLE_RATE(0) | ENABLE(1), LRADC_CTRL);
|
|
+
|
|
+}
|
|
+
|
|
+void lradc_disable(void)
|
|
+{
|
|
+ writel(0xffffffff, LRADC_INTS);
|
|
+ writel(0, LRADC_INTC);
|
|
+
|
|
+ /* Disable lradc, leave other settings unchanged */
|
|
+ writel(FIRST_CONVERT_DLY(2) | LEVELA_B_CNT(1) | HOLD_EN(1) |
|
|
+ SAMPLE_RATE(2), LRADC_CTRL);
|
|
+}
|
|
diff --git a/board/sunxi/lradc.h b/board/sunxi/lradc.h
|
|
new file mode 100644
|
|
index 0000000000..c908401b5b
|
|
--- /dev/null
|
|
+++ b/board/sunxi/lradc.h
|
|
@@ -0,0 +1,11 @@
|
|
+#pragma once
|
|
+
|
|
+enum {
|
|
+ KEY_NONE = 0,
|
|
+ KEY_VOLUMEDOWN = 1,
|
|
+ KEY_VOLUMEUP = 2,
|
|
+};
|
|
+
|
|
+int lradc_get_pressed_key(void);
|
|
+void lradc_enable(void);
|
|
+void lradc_disable(void);
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 62eaa32723812732529bf75fd04fafd5117fbe9d Mon Sep 17 00:00:00 2001
|
|
From: Marius Gripsgard <marius@ubports.com>
|
|
Date: Mon, 4 May 2020 22:28:42 +0200
|
|
Subject: [PATCH 16/17] Set ram clock to 624 and no bootdelay
|
|
|
|
---
|
|
configs/pinephone_defconfig | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/configs/pinephone_defconfig b/configs/pinephone_defconfig
|
|
index 96a87617f3..9dfac8ffd9 100644
|
|
--- a/configs/pinephone_defconfig
|
|
+++ b/configs/pinephone_defconfig
|
|
@@ -3,7 +3,7 @@ CONFIG_ARCH_SUNXI=y
|
|
CONFIG_SPL=y
|
|
CONFIG_MACH_SUN50I=y
|
|
CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
|
|
-CONFIG_DRAM_CLK=552
|
|
+CONFIG_DRAM_CLK=624
|
|
CONFIG_DRAM_ZQ=3881949
|
|
CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
|
# CONFIG_VIDEO_DE2 is not set
|
|
@@ -13,3 +13,4 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pinephone-1.2"
|
|
CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2"
|
|
# CONFIG_NET is not set
|
|
# CONFIG_EFI_LOADER is not set
|
|
+CONFIG_BOOTDELAY=0
|
|
--
|
|
2.25.4
|
|
|
|
|
|
From 3279f327429d55993172a60496b33114db1c1718 Mon Sep 17 00:00:00 2001
|
|
From: Marius Gripsgard <marius@ubports.com>
|
|
Date: Tue, 5 May 2020 16:51:13 +0200
|
|
Subject: [PATCH 17/17] Enable led on boot to notify user of boot status
|
|
|
|
---
|
|
arch/arm/mach-sunxi/Kconfig | 5 +++++
|
|
board/sunxi/board.c | 6 ++++++
|
|
configs/pinephone_defconfig | 1 +
|
|
3 files changed, 12 insertions(+)
|
|
|
|
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
|
|
index 8421f3b685..2bfdf7738b 100644
|
|
--- a/arch/arm/mach-sunxi/Kconfig
|
|
+++ b/arch/arm/mach-sunxi/Kconfig
|
|
@@ -1,5 +1,10 @@
|
|
if ARCH_SUNXI
|
|
|
|
+config PINEPHONE_LEDS
|
|
+ bool "Notify boot status via LEDs on PinePhone"
|
|
+ ---help---
|
|
+ LED boot notification.
|
|
+
|
|
config SPL_LDSCRIPT
|
|
default "arch/arm/cpu/armv7/sunxi/u-boot-spl.lds" if !ARM64
|
|
|
|
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 83ee2d18d4..91a58f6c0e 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -647,6 +647,12 @@ void sunxi_board_init(void)
|
|
lradc_enable();
|
|
#endif
|
|
|
|
+#ifdef CONFIG_PINEPHONE_LEDS
|
|
+ /* PD18:G PD19:R PD20:B */
|
|
+ gpio_request(SUNXI_GPD(19), "led:red");
|
|
+ gpio_direction_output(SUNXI_GPD(19), 1);
|
|
+#endif
|
|
+
|
|
#ifdef CONFIG_SY8106A_POWER
|
|
power_failed = sy8106a_set_vout1(CONFIG_SY8106A_VOUT1_VOLT);
|
|
#endif
|
|
diff --git a/configs/pinephone_defconfig b/configs/pinephone_defconfig
|
|
index 9dfac8ffd9..1ffd495d79 100644
|
|
--- a/configs/pinephone_defconfig
|
|
+++ b/configs/pinephone_defconfig
|
|
@@ -14,3 +14,4 @@ CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2"
|
|
# CONFIG_NET is not set
|
|
# CONFIG_EFI_LOADER is not set
|
|
CONFIG_BOOTDELAY=0
|
|
+CONFIG_PINEPHONE_LEDS=y
|
|
--
|
|
2.25.4
|
|
|