summaryrefslogtreecommitdiffstats
path: root/arm64-pine64-pinephone.patch
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2020-02-27 22:51:41 +0000
committerPeter Robinson <pbrobinson@gmail.com>2020-02-27 22:51:41 +0000
commit70c4f19642f3a196b01f22c9cc8e0629df609727 (patch)
tree437bc09cb1202d4a809d766b08d16e9c75708326 /arm64-pine64-pinephone.patch
parent55159bd6fe2fc50fc5c855759a9613a86155d57b (diff)
downloadkernel-70c4f19642f3a196b01f22c9cc8e0629df609727.tar.gz
kernel-70c4f19642f3a196b01f22c9cc8e0629df609727.tar.xz
kernel-70c4f19642f3a196b01f22c9cc8e0629df609727.zip
Fixes and enhancements to some AllWinner Pine64 devices
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
Diffstat (limited to 'arm64-pine64-pinephone.patch')
-rw-r--r--arm64-pine64-pinephone.patch568
1 files changed, 568 insertions, 0 deletions
diff --git a/arm64-pine64-pinephone.patch b/arm64-pine64-pinephone.patch
new file mode 100644
index 000000000..640d53e33
--- /dev/null
+++ b/arm64-pine64-pinephone.patch
@@ -0,0 +1,568 @@
+From 836821a0addbd8589e949801aaa7be244703c7f8 Mon Sep 17 00:00:00 2001
+From: Ondrej Jirman <megous@megous.com>
+Date: Thu, 27 Feb 2020 02:26:48 +0100
+Subject: [PATCH 1/3] arm64: dts: sun50i-a64: Add i2c2 pins
+
+PinePhone needs I2C2 pins description. Add it, and make it default
+for i2c2, since it's the only possiblilty.
+
+Signed-off-by: Ondrej Jirman <megous@megous.com>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+index 862b47dc9dc9..107a48f9c5b3 100644
+--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
++++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+@@ -671,6 +671,11 @@ i2c1_pins: i2c1-pins {
+ 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",
+@@ -958,12 +963,13 @@ i2c2: i2c@1c2b400 {
+ 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>;
+--
+2.24.1
+
+From 5c4e2cd9e8b600cc622c10543f69fcd897557eee Mon Sep 17 00:00:00 2001
+From: Ondrej Jirman <megous@megous.com>
+Date: Thu, 27 Feb 2020 02:26:49 +0100
+Subject: [PATCH 2/3] dt-bindings: arm: sunxi: Add PinePhone 1.0 and 1.1
+ bindings
+
+Document board compatible names for Pine64 PinePhone:
+
+- 1.0 - Developer variant
+- 1.1 - Braveheart variant
+
+Signed-off-by: Ondrej Jirman <megous@megous.com>
+Reviewed-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ Documentation/devicetree/bindings/arm/sunxi.yaml | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/Documentation/devicetree/bindings/arm/sunxi.yaml b/Documentation/devicetree/bindings/arm/sunxi.yaml
+index 159060b65c5d..c632252be48b 100644
+--- a/Documentation/devicetree/bindings/arm/sunxi.yaml
++++ b/Documentation/devicetree/bindings/arm/sunxi.yaml
+@@ -636,6 +636,16 @@ properties:
+ - const: pine64,pinebook
+ - const: allwinner,sun50i-a64
+
++ - description: Pine64 PinePhone Developer Batch (1.0)
++ items:
++ - const: pine64,pinephone-1.0
++ - const: allwinner,sun50i-a64
++
++ - description: Pine64 PinePhone Braveheart (1.1)
++ items:
++ - const: pine64,pinephone-1.1
++ - const: allwinner,sun50i-a64
++
+ - description: Pine64 PineTab
+ items:
+ - const: pine64,pinetab
+--
+2.24.1
+
+From 697f60799172569e8d502a44ad98994f2c48778c Mon Sep 17 00:00:00 2001
+From: Ondrej Jirman <megous@megous.com>
+Date: Thu, 27 Feb 2020 02:26:50 +0100
+Subject: [PATCH 3/3] arm64: dts: allwinner: Add initial support for Pine64
+ PinePhone
+
+At the moment PinePhone comes in two slightly incompatible variants:
+
+- 1.0: Early Developer Batch
+- 1.1: Braveheart Batch
+
+There will be at least one more incompatible variant in the very near
+future, so let's start by sharing the dtsi among multiple variants,
+right away, even though the HW description doesn't yet include the
+different bits.
+
+The differences between 1.0 and 1.1 are: change in pins that control
+the flash LED, differences in modem power status signal routing, and
+maybe some other subtler things, that have not been determined yet.
+
+This is a basic DT that includes only features that are already
+supported by mainline drivers.
+
+Co-developed-by: Samuel Holland <samuel@sholland.org>
+Signed-off-by: Samuel Holland <samuel@sholland.org>
+Co-developed-by: Martijn Braam <martijn@brixit.nl>
+Signed-off-by: Martijn Braam <martijn@brixit.nl>
+Co-developed-by: Luca Weiss <luca@z3ntu.xyz>
+Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
+Signed-off-by: Bhushan Shah <bshah@kde.org>
+Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
+Signed-off-by: Ondrej Jirman <megous@megous.com>
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ arch/arm64/boot/dts/allwinner/Makefile | 2 +
+ .../allwinner/sun50i-a64-pinephone-1.0.dts | 11 +
+ .../allwinner/sun50i-a64-pinephone-1.1.dts | 11 +
+ .../dts/allwinner/sun50i-a64-pinephone.dtsi | 379 ++++++++++++++++++
+ 4 files changed, 403 insertions(+)
+ create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.0.dts
+ create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts
+ create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi
+
+diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile
+index 6dad63881cd3..e4d3cd0ac5bb 100644
+--- a/arch/arm64/boot/dts/allwinner/Makefile
++++ b/arch/arm64/boot/dts/allwinner/Makefile
+@@ -9,6 +9,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-orangepi-win.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-lts.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinebook.dtb
++dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.0.dtb
++dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.1.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinetab.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-sopine-baseboard.dtb
+ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-teres-i.dtb
+diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.0.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.0.dts
+new file mode 100644
+index 000000000000..0c42272106af
+--- /dev/null
++++ b/arch/arm64/boot/dts/allwinner/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/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts
+new file mode 100644
+index 000000000000..06a775c41664
+--- /dev/null
++++ b/arch/arm64/boot/dts/allwinner/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/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi
+new file mode 100644
+index 000000000000..cefda145c3c9
+--- /dev/null
++++ b/arch/arm64/boot/dts/allwinner/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 = <&reg_dcdc1>;
++ };
++};
++
++&codec {
++ status = "okay";
++};
++
++&codec_analog {
++ cpvdd-supply = <&reg_eldo1>;
++ status = "okay";
++};
++
++&cpu0 {
++ cpu-supply = <&reg_dcdc2>;
++};
++
++&cpu1 {
++ cpu-supply = <&reg_dcdc2>;
++};
++
++&cpu2 {
++ cpu-supply = <&reg_dcdc2>;
++};
++
++&cpu3 {
++ cpu-supply = <&reg_dcdc2>;
++};
++
++&dai {
++ status = "okay";
++};
++
++&ehci0 {
++ status = "okay";
++};
++
++&ehci1 {
++ status = "okay";
++};
++
++&i2c1 {
++ status = "okay";
++
++ /* Magnetometer */
++ lis3mdl@1e {
++ compatible = "st,lis3mdl-magn";
++ reg = <0x1e>;
++ vdd-supply = <&reg_dldo1>;
++ vddio-supply = <&reg_dldo1>;
++ };
++
++ /* Accelerometer/gyroscope */
++ mpu6050@68 {
++ compatible = "invensense,mpu6050";
++ reg = <0x68>;
++ interrupt-parent = <&pio>;
++ interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */
++ vdd-supply = <&reg_dldo1>;
++ vddio-supply = <&reg_dldo1>;
++ };
++};
++
++/* Connected to pogo pins (external spring based pinheader for user addons) */
++&i2c2 {
++ status = "okay";
++};
++
++&lradc {
++ vref-supply = <&reg_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 = <&reg_dcdc1>;
++ vqmmc-supply = <&reg_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 = <&reg_dcdc1>;
++ vqmmc-supply = <&reg_dcdc1>;
++ bus-width = <8>;
++ non-removable;
++ cap-mmc-hw-reset;
++ status = "okay";
++};
++
++&ohci0 {
++ status = "okay";
++};
++
++&ohci1 {
++ status = "okay";
++};
++
++&pio {
++ vcc-pb-supply = <&reg_dcdc1>;
++ vcc-pc-supply = <&reg_dcdc1>;
++ vcc-pd-supply = <&reg_dcdc1>;
++ vcc-pe-supply = <&reg_aldo1>;
++ vcc-pf-supply = <&reg_dcdc1>;
++ vcc-pg-supply = <&reg_dldo4>;
++ vcc-ph-supply = <&reg_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 = <&reg_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";
++};
++
++&reg_aldo1 {
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "dovdd-csi";
++};
++
++&reg_aldo2 {
++ regulator-always-on;
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "vcc-pl";
++};
++
++&reg_aldo3 {
++ regulator-always-on;
++ regulator-min-microvolt = <2700000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-name = "vcc-pll-avcc";
++};
++
++&reg_dcdc1 {
++ regulator-always-on;
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-name = "vcc-3v3";
++};
++
++&reg_dcdc2 {
++ regulator-always-on;
++ regulator-min-microvolt = <1000000>;
++ regulator-max-microvolt = <1300000>;
++ regulator-name = "vdd-cpux";
++};
++
++/* DCDC3 is polyphased with DCDC2 */
++
++&reg_dcdc5 {
++ regulator-always-on;
++ regulator-min-microvolt = <1200000>;
++ regulator-max-microvolt = <1200000>;
++ regulator-name = "vcc-dram";
++};
++
++&reg_dcdc6 {
++ regulator-always-on;
++ regulator-min-microvolt = <1100000>;
++ regulator-max-microvolt = <1100000>;
++ regulator-name = "vdd-sys";
++};
++
++&reg_dldo1 {
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-name = "vcc-dsi-sensor";
++};
++
++&reg_dldo2 {
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "vcc-mipi-io";
++};
++
++&reg_dldo3 {
++ regulator-min-microvolt = <2800000>;
++ regulator-max-microvolt = <2800000>;
++ regulator-name = "avdd-csi";
++};
++
++&reg_dldo4 {
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-name = "vcc-wifi-io";
++};
++
++&reg_eldo1 {
++ regulator-always-on;
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "vcc-lpddr";
++};
++
++&reg_eldo3 {
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "dvdd-1v8-csi";
++};
++
++&reg_fldo1 {
++ regulator-min-microvolt = <1200000>;
++ regulator-max-microvolt = <1200000>;
++ regulator-name = "vcc-1v2-hsic";
++};
++
++&reg_fldo2 {
++ regulator-always-on;
++ regulator-min-microvolt = <1100000>;
++ regulator-max-microvolt = <1100000>;
++ regulator-name = "vdd-cpus";
++};
++
++&reg_ldo_io0 {
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-name = "vcc-lcd-ctp-stk";
++ status = "okay";
++};
++
++&reg_ldo_io1 {
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ regulator-name = "vcc-1v8-typec";
++ status = "okay";
++};
++
++&reg_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";
++};
+--
+2.24.1
+