Merge branch 'JustEnoughLinuxOS:dev' into dev
This commit is contained in:
commit
cf31d175a8
18 changed files with 4179 additions and 3997 deletions
|
@ -1,6 +1,7 @@
|
|||
--- a/arch/arm64/boot/dts/amlogic/Makefile
|
||||
+++ b/arch/arm64/boot/dts/amlogic/Makefile
|
||||
@@ -1,71 +1,5 @@
|
||||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/Makefile linux/arch/arm64/boot/dts/amlogic/Makefile
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/Makefile 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/Makefile 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -1,69 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-a1-ad401.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-axg-jethome-jethub-j100.dtb
|
||||
|
@ -15,10 +16,9 @@
|
|||
-dtb-$(CONFIG_ARCH_MESON) += meson-g12b-gsking-x.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-g12b-gtking-pro.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-g12b-gtking.dtb
|
||||
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-go-ultra.dtb
|
||||
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-go-ultra.dtb
|
||||
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-plus.dtb
|
||||
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2.dtb
|
||||
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-powkiddy-rgb10-max-3.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-g12b-s922x-khadas-vim3.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-g12b-ugoos-am6.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-kii-pro.dtb
|
||||
|
@ -72,3 +72,4 @@
|
|||
-dtb-$(CONFIG_ARCH_MESON) += meson-sm1-sei610.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-sm1-x96-air-gbit.dtb
|
||||
-dtb-$(CONFIG_ARCH_MESON) += meson-sm1-x96-air.dtb
|
||||
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-powkiddy-rgb10-max-3.dtb
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,999 @@
|
|||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-powkiddy-rgb10-max-3.dts linux/arch/arm64/boot/dts/amlogic/meson-g12b-powkiddy-rgb10-max-3.dts
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-powkiddy-rgb10-max-3.dts 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12b-powkiddy-rgb10-max-3.dts 2023-09-12 12:04:13.567330573 +0000
|
||||
@@ -0,0 +1,995 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Copyright (c) 2022 Neil Armstrong <narmstrong@kernel.org>
|
||||
+ * Copyright (C) 2022-present - The JELOS Project (https://github.com/JustEnoughLinuxOS)
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "meson-g12b-a311d.dtsi"
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/gpio/meson-g12a-gpio.h>
|
||||
+#include <dt-bindings/sound/meson-g12a-toacodec.h>
|
||||
+#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "powkiddy,rgb10-max-3", "amlogic,s922x", "amlogic,g12b";
|
||||
+ model = "Powkiddy RGB10 MAX 3";
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart_AO;
|
||||
+ rtc0 = &vrtc;
|
||||
+ mmc0 = &sd_emmc_c;
|
||||
+ mmc1 = &sd_emmc_b;
|
||||
+ };
|
||||
+
|
||||
+ panel_backlight: backlight {
|
||||
+ compatible = "pwm-backlight";
|
||||
+ pwms = <&pwm_ef 1 40000 0>;
|
||||
+ brightness-levels = <0 255>;
|
||||
+ num-interpolated-steps = <255>;
|
||||
+ default-brightness-level = <255>;
|
||||
+ };
|
||||
+
|
||||
+ bat: battery {
|
||||
+ compatible = "simple-battery";
|
||||
+ voltage-max-design-microvolt = <4200000>;
|
||||
+ voltage-min-design-microvolt = <3500000>;
|
||||
+ charge-full-design-microamp-hours = <4000000>;
|
||||
+ charge-term-current-microamp = <200000>;
|
||||
+ constant-charge-current-max-microamp = <1500000>;
|
||||
+ constant-charge-voltage-max-microvolt = <4200000>;
|
||||
+ factory-internal-resistance-micro-ohms = <180000>;
|
||||
+
|
||||
+
|
||||
+ ocv-capacity-celsius = <20>;
|
||||
+ ocv-capacity-table-0 = <4146950 100>, <4001920 95>, <3967900 90>, <3919950 85>,
|
||||
+ <3888450 80>, <3861850 75>, <3831540 70>, <3799130 65>,
|
||||
+ <3768190 60>, <3745650 55>, <3726610 50>, <3711630 45>,
|
||||
+ <3696720 40>, <3685660 35>, <3674950 30>, <3663050 25>,
|
||||
+ <3649470 20>, <3635260 15>, <3616920 10>, <3592440 5>,
|
||||
+ <3574170 0>;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ codec_clk: codec-clk {
|
||||
+ compatible = "fixed-clock";
|
||||
+ clock-frequency = <12288000>;
|
||||
+ clock-output-names = "codec_clk";
|
||||
+ #clock-cells = <0>;
|
||||
+ };
|
||||
+
|
||||
+ gpio_keys: volume-keys {
|
||||
+ compatible = "gpio-keys-polled";
|
||||
+ poll-interval = <5>;
|
||||
+ autorepeat;
|
||||
+
|
||||
+ volume-up-button {
|
||||
+ label = "VOLUME-UP";
|
||||
+ linux,code = <KEY_VOLUMEUP>;
|
||||
+ gpios = <&gpio GPIOX_8 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ volume-down-button {
|
||||
+ label = "VOLUME-DOWN";
|
||||
+ linux,code = <KEY_VOLUMEDOWN>;
|
||||
+ gpios = <&gpio GPIOX_9 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ joypad: gou_joypad {
|
||||
+ compatible = "odroidgou-joypad";
|
||||
+ poll-interval = <10>;
|
||||
+ pinctrl-0 = <&keypad_gpio_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ joypad-name = "GO-Ultra Gamepad";
|
||||
+ //joypad-vendor = <0x045e>;
|
||||
+ joypad-product = <0x1000>;
|
||||
+ joypad-revision = <0x0100>;
|
||||
+
|
||||
+ /* Analog sticks */
|
||||
+
|
||||
+ io-channels = <&saradc 0>, <&saradc 1>, <&saradc 2>, <&saradc 3>;
|
||||
+ io-channel-names = "key-RY", "key-RX", "key-LY", "key-LX";
|
||||
+ button-adc-scale = <4>;
|
||||
+ button-adc-deadzone = <400>;
|
||||
+ button-adc-fuzz = <64>;
|
||||
+ button-adc-flat = <32>;
|
||||
+ abs_x-p-tuning = <350>;
|
||||
+ abs_x-n-tuning = <350>;
|
||||
+ abs_y-p-tuning = <350>;
|
||||
+ abs_y-n-tuning = <350>;
|
||||
+ abs_rx-p-tuning = <350>;
|
||||
+ abs_rx-n-tuning = <350>;
|
||||
+ abs_ry-p-tuning = <350>;
|
||||
+ abs_ry-n-tuning = <350>;
|
||||
+
|
||||
+ /* Buttons */
|
||||
+ sw1 {
|
||||
+ gpios = <&gpio GPIOX_0 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO DPAD-UP";
|
||||
+ linux,code = <BTN_DPAD_UP>; // 0x220
|
||||
+ };
|
||||
+ sw2 {
|
||||
+ gpios = <&gpio GPIOX_1 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO DPAD-DOWN";
|
||||
+ linux,code = <BTN_DPAD_DOWN>; // 0x221
|
||||
+ };
|
||||
+ sw3 {
|
||||
+ gpios = <&gpio GPIOX_2 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO DPAD-LEFT";
|
||||
+ linux,code = <BTN_DPAD_LEFT>; // 0x222
|
||||
+ };
|
||||
+ sw4 {
|
||||
+ gpios = <&gpio GPIOX_3 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO DPAD-RIGHT";
|
||||
+ linux,code = <BTN_DPAD_RIGHT>; // 0x223
|
||||
+ };
|
||||
+ sw5 {
|
||||
+ gpios = <&gpio GPIOX_4 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO BTN-A";
|
||||
+ linux,code = <BTN_EAST>; // 0x131
|
||||
+ };
|
||||
+ sw6 {
|
||||
+ gpios = <&gpio GPIOX_5 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO BTN-B";
|
||||
+ linux,code = <BTN_SOUTH>; // 0x130
|
||||
+ };
|
||||
+ sw7 {
|
||||
+ gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO BTN-Y";
|
||||
+ linux,code = <BTN_WEST>; // 0x134
|
||||
+ };
|
||||
+ sw8 {
|
||||
+ gpios = <&gpio GPIOX_7 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO BTN-X";
|
||||
+ linux,code = <BTN_NORTH>; // 0x133
|
||||
+ };
|
||||
+ sw11 {
|
||||
+ gpios = <&gpio GPIOX_10 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F2";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY2>; // 0x2c2
|
||||
+ };
|
||||
+ sw12 {
|
||||
+ gpios = <&gpio GPIOX_17 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F3";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY3>; // 0x2c3
|
||||
+ };
|
||||
+ sw13 {
|
||||
+ gpios = <&gpio GPIOX_16 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F4";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY4>; // 0x2c4
|
||||
+ };
|
||||
+ sw14 {
|
||||
+ gpios = <&gpio GPIOX_11 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F5";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY5>; // 0x13c
|
||||
+ };
|
||||
+ sw15 {
|
||||
+ gpios = <&gpio GPIOX_14 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO TOP-LEFT";
|
||||
+ linux,code = <BTN_TL>; // 0x02
|
||||
+ };
|
||||
+ sw16 {
|
||||
+ gpios = <&gpio GPIOX_15 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO TOP-RIGHT";
|
||||
+ linux,code = <BTN_TR>; // 0x05
|
||||
+ };
|
||||
+ sw17 {
|
||||
+ gpios = <&gpio GPIOX_13 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F6";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY6>;
|
||||
+ };
|
||||
+ sw18 {
|
||||
+ gpios = <&gpio GPIOX_12 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO F1";
|
||||
+ linux,code = <BTN_TRIGGER_HAPPY1>;
|
||||
+ };
|
||||
+ sw19 {
|
||||
+ gpios = <&gpio GPIOX_18 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO TOP-RIGHT2";
|
||||
+ linux,code = <BTN_TR2>;
|
||||
+ };
|
||||
+ sw20 {
|
||||
+ gpios = <&gpio GPIOX_19 GPIO_ACTIVE_LOW>;
|
||||
+ label = "GPIO TOP-LEFT2";
|
||||
+ linux,code = <BTN_TL2>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ memory@0 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x0 0x0 0x0 0x40000000>;
|
||||
+ };
|
||||
+
|
||||
+ emmc_pwrseq: emmc-pwrseq {
|
||||
+ compatible = "mmc-pwrseq-emmc";
|
||||
+ reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ led-blue {
|
||||
+ color = <LED_COLOR_ID_BLUE>;
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>;
|
||||
+ linux,default-trigger = "none";
|
||||
+ };
|
||||
+
|
||||
+ led-red {
|
||||
+ color = <LED_COLOR_ID_RED>;
|
||||
+ function = LED_FUNCTION_STATUS;
|
||||
+ gpios = <&gpio_ao GPIOAO_6 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ poweroff {
|
||||
+ compatible = "hardkernel,odroid-go-ultra-poweroff";
|
||||
+ hardkernel,rk817-pmic = <&rk817>;
|
||||
+ hardkernel,rk818-pmic = <&rk818>;
|
||||
+ };
|
||||
+
|
||||
+ vdd_sys: regulator-vdd_sys {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "VDD_SYS";
|
||||
+ regulator-min-microvolt = <3800000>;
|
||||
+ regulator-max-microvolt = <3800000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ sound {
|
||||
+ compatible = "amlogic,axg-sound-card";
|
||||
+ model = "RGB10-MAX3";
|
||||
+ audio-aux-devs = <&tdmout_b>;
|
||||
+ audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
|
||||
+ "TDM_B Playback", "TDMOUT_B OUT";
|
||||
+
|
||||
+ assigned-clocks = <&clkc CLKID_MPLL2>,
|
||||
+ <&clkc CLKID_MPLL0>,
|
||||
+ <&clkc CLKID_MPLL1>;
|
||||
+ assigned-clock-parents = <0>, <0>, <0>;
|
||||
+ assigned-clock-rates = <294912000>,
|
||||
+ <270950400>,
|
||||
+ <393216000>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ dai-link-0 {
|
||||
+ sound-dai = <&frddr_a>;
|
||||
+ };
|
||||
+
|
||||
+ dai-link-1 {
|
||||
+ sound-dai = <&frddr_b>;
|
||||
+ };
|
||||
+
|
||||
+ dai-link-2 {
|
||||
+ sound-dai = <&frddr_c>;
|
||||
+ };
|
||||
+
|
||||
+ dai-link-3 {
|
||||
+ sound-dai = <&toddr_a>;
|
||||
+ };
|
||||
+
|
||||
+ dai-link-4 {
|
||||
+ sound-dai = <&toddr_b>;
|
||||
+ };
|
||||
+
|
||||
+ dai-link-5 {
|
||||
+ sound-dai = <&toddr_c>;
|
||||
+ };
|
||||
+
|
||||
+ /* 8ch hdmi interface */
|
||||
+ dai-link-6 {
|
||||
+ sound-dai = <&tdmif_b>;
|
||||
+ dai-format = "i2s";
|
||||
+ dai-tdm-slot-tx-mask-0 = <1 1>;
|
||||
+ dai-tdm-slot-tx-mask-1 = <1 1>;
|
||||
+ mclk-fs = <256>;
|
||||
+
|
||||
+ codec-0 {
|
||||
+ sound-dai = <&rk817>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&arb {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <&vddcpu_b>;
|
||||
+ operating-points-v2 = <&cpu_opp_table_0>;
|
||||
+ clocks = <&clkc CLKID_CPU_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+&cpu1 {
|
||||
+ cpu-supply = <&vddcpu_b>;
|
||||
+ operating-points-v2 = <&cpu_opp_table_0>;
|
||||
+ clocks = <&clkc CLKID_CPU_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+&cpu100 {
|
||||
+ cpu-supply = <&vddcpu_a>;
|
||||
+ operating-points-v2 = <&cpub_opp_table_1>;
|
||||
+ clocks = <&clkc CLKID_CPUB_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+&cpu101 {
|
||||
+ cpu-supply = <&vddcpu_a>;
|
||||
+ operating-points-v2 = <&cpub_opp_table_1>;
|
||||
+ clocks = <&clkc CLKID_CPUB_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+&cpu102 {
|
||||
+ cpu-supply = <&vddcpu_a>;
|
||||
+ operating-points-v2 = <&cpub_opp_table_1>;
|
||||
+ clocks = <&clkc CLKID_CPUB_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+&cpu103 {
|
||||
+ cpu-supply = <&vddcpu_a>;
|
||||
+ operating-points-v2 = <&cpub_opp_table_1>;
|
||||
+ clocks = <&clkc CLKID_CPUB_CLK>;
|
||||
+ clock-latency = <50000>;
|
||||
+};
|
||||
+
|
||||
+/* RK817 only supports 12.5mV steps, round up the values */
|
||||
+&cpu_opp_table_0 {
|
||||
+ opp-667000000 {
|
||||
+ opp-microvolt = <731250>;
|
||||
+ };
|
||||
+ opp-1000000000 {
|
||||
+ opp-microvolt = <760000>;
|
||||
+ };
|
||||
+ opp-1200000000 {
|
||||
+ opp-microvolt = <780000>;
|
||||
+ };
|
||||
+ opp-1398000000 {
|
||||
+ opp-microvolt = <800000>;
|
||||
+ };
|
||||
+ opp-1512000000 {
|
||||
+ opp-microvolt = <860000>;
|
||||
+ };
|
||||
+ opp-1608000000 {
|
||||
+ opp-microvolt = <900000>;
|
||||
+ };
|
||||
+ opp-1704000000 {
|
||||
+ opp-microvolt = <950000>;
|
||||
+ };
|
||||
+ opp-1800000000 {
|
||||
+ opp-microvolt = <1000000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+/* RK818 only supports 12.5mV steps, round up the values */
|
||||
+&cpub_opp_table_1 {
|
||||
+ opp-667000000 {
|
||||
+ opp-microvolt = <750000>;
|
||||
+ };
|
||||
+ opp-1000000000 {
|
||||
+ opp-microvolt = <775000>;
|
||||
+ };
|
||||
+ opp-1200000000 {
|
||||
+ opp-microvolt = <775000>;
|
||||
+ };
|
||||
+ opp-1398000000 {
|
||||
+ opp-microvolt = <800000>;
|
||||
+ };
|
||||
+ opp-1512000000 {
|
||||
+ opp-microvolt = <825000>;
|
||||
+ };
|
||||
+ opp-1608000000 {
|
||||
+ opp-microvolt = <862500>;
|
||||
+ };
|
||||
+ opp-1704000000 {
|
||||
+ opp-microvolt = <900000>;
|
||||
+ };
|
||||
+ opp-1800000000 {
|
||||
+ opp-microvolt = <987500>;
|
||||
+ };
|
||||
+ opp-1908000000 {
|
||||
+ opp-microvolt = <1025000>;
|
||||
+ };
|
||||
+ opp-2016000000 {
|
||||
+ opp-hz = /bits/ 64 <2016000000>;
|
||||
+ opp-microvolt = <1025000>;
|
||||
+ };
|
||||
+ opp-2100000000 {
|
||||
+ opp-hz = /bits/ 64 <2100000000>;
|
||||
+ opp-microvolt = <1025000>;
|
||||
+ };
|
||||
+ opp-2208000000 {
|
||||
+ opp-hz = /bits/ 64 <2208000000>;
|
||||
+ opp-microvolt = <1050000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c_AO {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+
|
||||
+ rk818: pmic@1c {
|
||||
+ compatible = "rockchip,rk818";
|
||||
+ reg = <0x1c>;
|
||||
+ interrupt-parent = <&gpio_intc>;
|
||||
+ interrupts = <7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */
|
||||
+ rockchip,system-power-controller;
|
||||
+ clock-output-names = "rk808-clkout1", "rk808-clkout2";
|
||||
+
|
||||
+ vcc1-supply = <&vdd_sys>;
|
||||
+ vcc2-supply = <&vdd_sys>;
|
||||
+ vcc3-supply = <&vdd_sys>;
|
||||
+ vcc4-supply = <&vdd_sys>;
|
||||
+ vcc6-supply = <&vdd_sys>;
|
||||
+ vcc7-supply = <&vcc_2v3>;
|
||||
+ vcc8-supply = <&vcc_2v3>;
|
||||
+ vcc9-supply = <&vddao_3v3>;
|
||||
+ boost-supply = <&vdd_sys>;
|
||||
+ switch-supply = <&vdd_sys>;
|
||||
+
|
||||
+ regulators {
|
||||
+ vddcpu_a: DCDC_REG1 {
|
||||
+ regulator-name = "vddcpu_a";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <750000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <750000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vdd_ee: DCDC_REG2 {
|
||||
+ regulator-name = "vdd_ee";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <875000>;
|
||||
+ regulator-max-microvolt = <900000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <875000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddq_1v1: DCDC_REG3 {
|
||||
+ regulator-name = "vddq_1v1";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddao_3v3: DCDC_REG4 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "vddao_3v3";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3000000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ hp_5v: DCDC_BOOST {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-name = "hp_5v";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG1 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO1";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG2 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO2";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG3 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO3";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG4 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO4";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddio_ao1v8: LDO_REG5 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-name = "vddio_ao1v8";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG6 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO6";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddq_1v8: LDO_REG7 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-name = "vddq_1v8";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1800000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG8 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk818_LDO8";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddio_c: LDO_REG9 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vddio_c";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <3300000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_sd: SWITCH_REG {
|
||||
+ regulator-name = "vcc_sd";
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rk818_otg_switch: OTG_SWITCH {
|
||||
+ regulator-name = "otg_switch";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ battery {
|
||||
+ compatible = "rockchip,rk818-battery";
|
||||
+
|
||||
+ ocv_table = <
|
||||
+ 3470 3599 3671 3701 3728 3746 3762
|
||||
+ 3772 3781 3792 3816 3836 3866 3910
|
||||
+ 3942 3971 4002 4050 4088 4132 4200>;
|
||||
+ design_capacity = <4000>;
|
||||
+ design_qmax = <4100>;
|
||||
+ bat_res = <180>;
|
||||
+ max_input_current = <2000>;
|
||||
+ max_chrg_current = <1500>;
|
||||
+ max_chrg_voltage = <4250>;
|
||||
+ sleep_enter_current = <300>;
|
||||
+ sleep_exit_current = <300>;
|
||||
+ power_off_thresd = <3450>;
|
||||
+ zero_algorithm_vol = <3700>;
|
||||
+ fb_temperature = <105>;
|
||||
+ sample_res = <10>;
|
||||
+ max_soc_offset = <60>;
|
||||
+ energy_mode = <0>;
|
||||
+ monitor_sec = <5>;
|
||||
+ virtual_power = <0>;
|
||||
+ power_dc2otg = <0>;
|
||||
+ otg5v_suspend_enable = <0>;
|
||||
+ };
|
||||
+
|
||||
+ charger {
|
||||
+ compatible = "rockchip,rk818-charger";
|
||||
+ monitored-battery = <&bat>;
|
||||
+ };
|
||||
+
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c3 {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+
|
||||
+ rk817: pmic@20 {
|
||||
+ compatible = "rockchip,rk817";
|
||||
+ reg = <0x20>;
|
||||
+ status = "okay";
|
||||
+ interrupt-parent = <&gpio_intc>;
|
||||
+ interrupts = <5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */
|
||||
+ wakeup-source;
|
||||
+
|
||||
+ vcc1-supply = <&vdd_sys>;
|
||||
+ vcc2-supply = <&vdd_sys>;
|
||||
+ vcc3-supply = <&vdd_sys>;
|
||||
+ vcc4-supply = <&vdd_sys>;
|
||||
+ vcc5-supply = <&vdd_sys>;
|
||||
+ vcc6-supply = <&vdd_sys>;
|
||||
+ vcc7-supply = <&vdd_sys>;
|
||||
+ vcc8-supply = <&vdd_sys>;
|
||||
+ vcc9-supply = <&rk817_boost>;
|
||||
+
|
||||
+ #sound-dai-cells = <0>;
|
||||
+ clocks = <&codec_clk>;
|
||||
+ clock-names = "mclk";
|
||||
+
|
||||
+ regulators {
|
||||
+ DCDC_REG1 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_BUCK1";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vddcpu_b: DCDC_REG2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <725000>;
|
||||
+ regulator-max-microvolt = <1050000>;
|
||||
+ regulator-ramp-delay = <6001>;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-name = "vddcpu_b";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ regulator-suspend-microvolt = <1000000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_2v3: DCDC_REG3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <2300000>;
|
||||
+ regulator-max-microvolt = <2400000>;
|
||||
+ regulator-initial-mode = <0x2>;
|
||||
+ regulator-name = "vcc_2v3";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-on-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ DCDC_REG4 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_BUCK4";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG1 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO1";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG2 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO2";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG3 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO3";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG4 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vdd_codec";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG5 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO5";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG6 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO6";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG7 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO7";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ vcc_lcd: LDO_REG8 {
|
||||
+ regulator-boot-on;
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "vcc_lcd";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ LDO_REG9 {
|
||||
+ regulator-boot-off;
|
||||
+ regulator-name = "rk817_LDO9";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rk817_boost: BOOST {
|
||||
+ regulator-always-on;
|
||||
+ regulator-boot-on;
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5400000>;
|
||||
+ regulator-name = "rk817_boost";
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ usb_host: OTG_SWITCH {
|
||||
+ regulator-name = "usb_host";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-state-mem {
|
||||
+ regulator-off-in-suspend;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ rk817_codec: codec {
|
||||
+ rockchip,mic-in-differential;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&clkc_audio {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+ð_phy {
|
||||
+ status = "disabled";
|
||||
+};
|
||||
+
|
||||
+&frddr_a {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&frddr_b {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&frddr_c {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&toddr_a {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&toddr_b {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&toddr_c {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mipi_dsi {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ assigned-clocks = <&clkc CLKID_GP0_PLL>,
|
||||
+ <&clkc CLKID_MIPI_DSI_PXCLK_SEL>,
|
||||
+ <&clkc CLKID_MIPI_DSI_PXCLK>,
|
||||
+ <&clkc CLKID_CTS_ENCL_SEL>,
|
||||
+ <&clkc CLKID_VCLK2_SEL>;
|
||||
+ assigned-clock-parents = <0>,
|
||||
+ <&clkc CLKID_GP0_PLL>,
|
||||
+ <0>,
|
||||
+ <&clkc CLKID_VCLK2_DIV1>,
|
||||
+ <&clkc CLKID_GP0_PLL>;
|
||||
+ assigned-clock-rates = <344976000>,
|
||||
+ <0>,
|
||||
+ <344976000>,
|
||||
+ <0>,
|
||||
+ <0>;
|
||||
+
|
||||
+ panel@0 {
|
||||
+ compatible = "elida,kd50t048a", "sitronix,st7701";
|
||||
+ reset-gpios = <&gpio GPIOH_4 GPIO_ACTIVE_HIGH>;
|
||||
+ IOVCC-supply = <&vcc_lcd>;
|
||||
+ VCC-supply = <&vcc_lcd>;
|
||||
+ backlight = <&panel_backlight>;
|
||||
+ rotation = <270>;
|
||||
+ reg = <0>;
|
||||
+
|
||||
+ port {
|
||||
+ mipi_in_panel: endpoint {
|
||||
+ remote-endpoint = <&mipi_out_panel>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mipi_analog_dphy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mipi_dphy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mipi_dsi_panel_port {
|
||||
+ mipi_out_panel: endpoint {
|
||||
+ remote-endpoint = <&mipi_in_panel>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&periphs_pinctrl {
|
||||
+ keypad_gpio_pins: keypad-gpio {
|
||||
+ mux {
|
||||
+ groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3",
|
||||
+ "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7",
|
||||
+ "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11",
|
||||
+ "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15",
|
||||
+ "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19";
|
||||
+ function = "gpio_periphs";
|
||||
+ bias-pull-up;
|
||||
+ output-disable;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&pwm_ef {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&pwm_f_h_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+};
|
||||
+
|
||||
+&saradc {
|
||||
+ status = "okay";
|
||||
+ vref-supply = <&vddio_ao1v8>;
|
||||
+};
|
||||
+
|
||||
+/* SD card */
|
||||
+&sd_emmc_b {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&sdcard_c_pins>;
|
||||
+ pinctrl-1 = <&sdcard_clk_gate_c_pins>;
|
||||
+ pinctrl-names = "default", "clk-gate";
|
||||
+
|
||||
+ bus-width = <4>;
|
||||
+ cap-sd-highspeed;
|
||||
+ max-frequency = <50000000>;
|
||||
+ disable-wp;
|
||||
+
|
||||
+ cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
|
||||
+ vmmc-supply = <&vcc_sd>;
|
||||
+ vqmmc-supply = <&vddio_c>;
|
||||
+
|
||||
+};
|
||||
+
|
||||
+/* eMMC */
|
||||
+&sd_emmc_c {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
|
||||
+ pinctrl-1 = <&emmc_clk_gate_pins>;
|
||||
+ pinctrl-names = "default", "clk-gate";
|
||||
+
|
||||
+ bus-width = <8>;
|
||||
+ cap-mmc-highspeed;
|
||||
+ mmc-ddr-1_8v;
|
||||
+ mmc-hs200-1_8v;
|
||||
+ max-frequency = <200000000>;
|
||||
+ disable-wp;
|
||||
+
|
||||
+ mmc-pwrseq = <&emmc_pwrseq>;
|
||||
+ vmmc-supply = <&vcc_sd>;
|
||||
+ vqmmc-supply = <&vddio_ao1v8>;
|
||||
+};
|
||||
+
|
||||
+
|
||||
+&tdmif_b {
|
||||
+ pinctrl-0 = <&mclk0_a_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>,
|
||||
+ <&tdm_b_dout0_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ assigned-clocks = <&clkc_audio AUD_CLKID_TDM_MCLK_PAD0>,
|
||||
+ <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>,
|
||||
+ <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>;
|
||||
+ assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_MCLK>,
|
||||
+ <&clkc_audio AUD_CLKID_MST_B_SCLK>,
|
||||
+ <&clkc_audio AUD_CLKID_MST_B_LRCLK>;
|
||||
+ assigned-clock-rates = <0>, <0>, <0>;
|
||||
+};
|
||||
+
|
||||
+&tdmout_b {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart_AO {
|
||||
+ status = "okay";
|
||||
+ pinctrl-0 = <&uart_ao_a_pins>;
|
||||
+ pinctrl-names = "default";
|
||||
+};
|
||||
+
|
||||
+&usb {
|
||||
+ status = "okay";
|
||||
+ dr_mode = "peripheral";
|
||||
+};
|
||||
+
|
||||
+&usb2_phy0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2_phy1 {
|
||||
+ status = "okay";
|
||||
+ phy-supply = <&usb_host>;
|
||||
+};
|
|
@ -0,0 +1,40 @@
|
|||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -2394,14 +2391,20 @@
|
||||
};
|
||||
|
||||
mali: gpu@ffe40000 {
|
||||
- compatible = "amlogic,meson-g12a-mali", "arm,mali-bifrost";
|
||||
- reg = <0x0 0xffe40000 0x0 0x40000>;
|
||||
+ compatible = "arm,mali-midgard";
|
||||
+ reg = <0x0 0xffe40000 0x0 0x40000>,
|
||||
+ <0 0xFFD01000 0 0x01000>,
|
||||
+ <0 0xFF800000 0 0x01000>,
|
||||
+ <0 0xFF63c000 0 0x01000>,
|
||||
+ <0 0xFFD01000 0 0x01000>;
|
||||
+
|
||||
interrupt-parent = <&gic>;
|
||||
- interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>,
|
||||
+ interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,
|
||||
- <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>;
|
||||
- interrupt-names = "job", "mmu", "gpu";
|
||||
+ <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ interrupt-names = "GPU", "MMU", "JOB";
|
||||
clocks = <&clkc CLKID_MALI>;
|
||||
+ clock-names = "clk_mali";
|
||||
resets = <&reset RESET_DVALIN_CAPB3>, <&reset RESET_DVALIN>;
|
||||
operating-points-v2 = <&gpu_opp_table>;
|
||||
#cooling-cells = <2>;
|
||||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -137,5 +139,6 @@
|
||||
};
|
||||
|
||||
&mali {
|
||||
- dma-coherent;
|
||||
+ system-coherency = <0>;
|
||||
+ power_policy = "always_on";
|
||||
};
|
|
@ -0,0 +1,11 @@
|
|||
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||
@@ -45,7 +45,7 @@
|
||||
led-blue {
|
||||
label = "n2:blue";
|
||||
gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>;
|
||||
- linux,default-trigger = "heartbeat";
|
||||
+ linux,default-trigger = "none";
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
diff -rupN linux.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux/drivers/gpu/drm/drm_panel_orientation_quirks.c
|
||||
--- linux.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c 2023-09-12 12:02:57.953624819 +0000
|
||||
+++ linux/drivers/gpu/drm/drm_panel_orientation_quirks.c 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -477,7 +477,7 @@ EXPORT_SYMBOL(drm_get_panel_orientation_
|
||||
/* There are no quirks for non x86 devices yet */
|
||||
int drm_get_panel_orientation_quirk(int width, int height)
|
||||
{
|
||||
- return DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
|
||||
+ return DRM_MODE_PANEL_ORIENTATION_LEFT_UP;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_get_panel_orientation_quirk);
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,210 @@
|
|||
diff -rupN linux.orig/drivers/power/reset/Kconfig linux/drivers/power/reset/Kconfig
|
||||
--- linux.orig/drivers/power/reset/Kconfig 2023-09-12 12:02:58.741642619 +0000
|
||||
+++ linux/drivers/power/reset/Kconfig 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -141,6 +141,13 @@ config POWER_RESET_OCELOT_RESET
|
||||
help
|
||||
This driver supports restart for Microsemi Ocelot SoC and similar.
|
||||
|
||||
+config POWER_RESET_ODROID_GO_ULTRA_POWEROFF
|
||||
+ bool "Odroid Go Ultra power-off driver"
|
||||
+ depends on ARCH_MESON || COMPILE_TEST
|
||||
+ depends on I2C=y && OF
|
||||
+ help
|
||||
+ This driver supports Power off for Odroid Go Ultra device.
|
||||
+
|
||||
config POWER_RESET_OXNAS
|
||||
bool "OXNAS SoC restart driver"
|
||||
depends on ARCH_OXNAS
|
||||
diff -rupN linux.orig/drivers/power/reset/Makefile linux/drivers/power/reset/Makefile
|
||||
--- linux.orig/drivers/power/reset/Makefile 2023-09-12 12:02:58.741642619 +0000
|
||||
+++ linux/drivers/power/reset/Makefile 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -17,6 +17,7 @@ obj-$(CONFIG_POWER_RESET_MT6323) += mt63
|
||||
obj-$(CONFIG_POWER_RESET_OXNAS) += oxnas-restart.o
|
||||
obj-$(CONFIG_POWER_RESET_QCOM_PON) += qcom-pon.o
|
||||
obj-$(CONFIG_POWER_RESET_OCELOT_RESET) += ocelot-reset.o
|
||||
+obj-$(CONFIG_POWER_RESET_ODROID_GO_ULTRA_POWEROFF) += odroid-go-ultra-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_PIIX4_POWEROFF) += piix4-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_LTC2952) += ltc2952-poweroff.o
|
||||
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o
|
||||
diff -rupN linux.orig/drivers/power/reset/odroid-go-ultra-poweroff.c linux/drivers/power/reset/odroid-go-ultra-poweroff.c
|
||||
--- linux.orig/drivers/power/reset/odroid-go-ultra-poweroff.c 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ linux/drivers/power/reset/odroid-go-ultra-poweroff.c 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -0,0 +1,177 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0+
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Neil Armstrong <neil.armstrong@linaro.org>
|
||||
+ */
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/of_platform.h>
|
||||
+#include <linux/mfd/rk808.h>
|
||||
+#include <linux/regmap.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/reboot.h>
|
||||
+#include <linux/i2c.h>
|
||||
+
|
||||
+/*
|
||||
+ * The Odroid Go Ultra has 2 PMICs:
|
||||
+ * - RK818 (manages the battery and USB-C power supply)
|
||||
+ * - RK817
|
||||
+ * Both PMICs feeds power to the S922X SoC, so they must be powered-off in sequence.
|
||||
+ * Vendor does power-off the RK817 first, then the RK818 so here we follow this sequence.
|
||||
+ */
|
||||
+
|
||||
+struct odroid_go_ultra_poweroff_data {
|
||||
+ struct device *dev;
|
||||
+ struct device *rk817;
|
||||
+ struct device *rk818;
|
||||
+};
|
||||
+
|
||||
+static int odroid_go_ultra_poweroff_prepare(struct sys_off_data *data)
|
||||
+{
|
||||
+ struct odroid_go_ultra_poweroff_data *poweroff_data = data->cb_data;
|
||||
+ struct regmap *rk817, *rk818;
|
||||
+ int ret;
|
||||
+
|
||||
+ /* RK817 Regmap */
|
||||
+ rk817 = dev_get_regmap(poweroff_data->rk817, NULL);
|
||||
+ if (!rk817) {
|
||||
+ dev_err(poweroff_data->dev, "failed to get rk817 regmap\n");
|
||||
+ return notifier_from_errno(-EINVAL);
|
||||
+ }
|
||||
+
|
||||
+ /* RK818 Regmap */
|
||||
+ rk818 = dev_get_regmap(poweroff_data->rk818, NULL);
|
||||
+ if (!rk818) {
|
||||
+ dev_err(poweroff_data->dev, "failed to get rk818 regmap\n");
|
||||
+ return notifier_from_errno(-EINVAL);
|
||||
+ }
|
||||
+
|
||||
+ dev_info(poweroff_data->dev, "Setting PMICs for power off");
|
||||
+
|
||||
+ /* RK817 */
|
||||
+ ret = regmap_update_bits(rk817, RK817_SYS_CFG(3), DEV_OFF, DEV_OFF);
|
||||
+ if (ret) {
|
||||
+ dev_err(poweroff_data->dev, "failed to poweroff rk817\n");
|
||||
+ return notifier_from_errno(ret);
|
||||
+ }
|
||||
+
|
||||
+ /* RK818 */
|
||||
+ ret = regmap_update_bits(rk818, RK818_DEVCTRL_REG, DEV_OFF, DEV_OFF);
|
||||
+ if (ret) {
|
||||
+ dev_err(poweroff_data->dev, "failed to poweroff rk818\n");
|
||||
+ return notifier_from_errno(ret);
|
||||
+ }
|
||||
+
|
||||
+ return NOTIFY_OK;
|
||||
+}
|
||||
+
|
||||
+static void odroid_go_ultra_poweroff_put_pmic_device(void *data)
|
||||
+{
|
||||
+ struct device *dev = data;
|
||||
+
|
||||
+ put_device(dev);
|
||||
+}
|
||||
+
|
||||
+static int odroid_go_ultra_poweroff_get_pmic_device(struct device *dev, const char *compatible,
|
||||
+ struct device **pmic)
|
||||
+{
|
||||
+ struct device_node *pmic_node;
|
||||
+ struct i2c_client *pmic_client;
|
||||
+
|
||||
+ pmic_node = of_find_compatible_node(NULL, NULL, compatible);
|
||||
+ if (!pmic_node)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ pmic_client = of_find_i2c_device_by_node(pmic_node);
|
||||
+ of_node_put(pmic_node);
|
||||
+ if (!pmic_client)
|
||||
+ return -EPROBE_DEFER;
|
||||
+
|
||||
+ *pmic = &pmic_client->dev;
|
||||
+
|
||||
+ return devm_add_action_or_reset(dev, odroid_go_ultra_poweroff_put_pmic_device, *pmic);
|
||||
+}
|
||||
+
|
||||
+static int odroid_go_ultra_poweroff_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct odroid_go_ultra_poweroff_data *poweroff_data;
|
||||
+ int ret;
|
||||
+
|
||||
+ poweroff_data = devm_kzalloc(&pdev->dev, sizeof(*poweroff_data), GFP_KERNEL);
|
||||
+ if (!poweroff_data)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ dev_set_drvdata(&pdev->dev, poweroff_data);
|
||||
+
|
||||
+ /* RK818 PMIC Device */
|
||||
+ ret = odroid_go_ultra_poweroff_get_pmic_device(&pdev->dev, "rockchip,rk818",
|
||||
+ &poweroff_data->rk818);
|
||||
+ if (ret)
|
||||
+ return dev_err_probe(&pdev->dev, ret, "failed to get rk818 mfd data\n");
|
||||
+
|
||||
+ /* RK817 PMIC Device */
|
||||
+ ret = odroid_go_ultra_poweroff_get_pmic_device(&pdev->dev, "rockchip,rk817",
|
||||
+ &poweroff_data->rk817);
|
||||
+ if (ret)
|
||||
+ return dev_err_probe(&pdev->dev, ret, "failed to get rk817 mfd data\n");
|
||||
+
|
||||
+ /* Register as SYS_OFF_MODE_POWER_OFF_PREPARE because regmap_update_bits may sleep */
|
||||
+ ret = devm_register_sys_off_handler(&pdev->dev,
|
||||
+ SYS_OFF_MODE_POWER_OFF_PREPARE,
|
||||
+ SYS_OFF_PRIO_DEFAULT,
|
||||
+ odroid_go_ultra_poweroff_prepare,
|
||||
+ poweroff_data);
|
||||
+ if (ret)
|
||||
+ return dev_err_probe(&pdev->dev, ret, "failed to register sys-off handler\n");
|
||||
+
|
||||
+ dev_info(&pdev->dev, "Registered Power-Off handler\n");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+static struct platform_device *pdev;
|
||||
+
|
||||
+static struct platform_driver odroid_go_ultra_poweroff_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "odroid-go-ultra-poweroff",
|
||||
+ },
|
||||
+ .probe = odroid_go_ultra_poweroff_probe,
|
||||
+};
|
||||
+
|
||||
+static int __init odroid_go_ultra_poweroff_init(void)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* Only create when running on the Odroid Go Ultra device */
|
||||
+ if (!of_device_is_compatible(of_root, "hardkernel,odroid-go-ultra"))
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ ret = platform_driver_register(&odroid_go_ultra_poweroff_driver);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pdev = platform_device_register_resndata(NULL, "odroid-go-ultra-poweroff", -1,
|
||||
+ NULL, 0, NULL, 0);
|
||||
+
|
||||
+ if (IS_ERR(pdev)) {
|
||||
+ platform_driver_unregister(&odroid_go_ultra_poweroff_driver);
|
||||
+ return PTR_ERR(pdev);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void __exit odroid_go_ultra_poweroff_exit(void)
|
||||
+{
|
||||
+ /* Only delete when running on the Odroid Go Ultra device */
|
||||
+ if (!of_device_is_compatible(of_root, "hardkernel,odroid-go-ultra"))
|
||||
+ return;
|
||||
+
|
||||
+ platform_device_unregister(pdev);
|
||||
+ platform_driver_unregister(&odroid_go_ultra_poweroff_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(odroid_go_ultra_poweroff_init);
|
||||
+module_exit(odroid_go_ultra_poweroff_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Neil Armstrong <neil.armstrong@linaro.org>");
|
||||
+MODULE_DESCRIPTION("Odroid Go Ultra poweroff driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
|
|
@ -0,0 +1,402 @@
|
|||
diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig
|
||||
--- linux.orig/drivers/input/Kconfig 2023-09-12 12:02:58.173629790 +0000
|
||||
+++ linux/drivers/input/Kconfig 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ff-memless.
|
||||
|
||||
+config INPUT_POLLDEV
|
||||
+ tristate "Polled input device skeleton"
|
||||
+ help
|
||||
+ Say Y here if you are using a driver for an input
|
||||
+ device that periodically polls hardware state. This
|
||||
+ option is only useful for out-of-tree drivers since
|
||||
+ in-tree drivers select it automatically.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here: the
|
||||
+ module will be called input-polldev.
|
||||
+
|
||||
config INPUT_SPARSEKMAP
|
||||
tristate "Sparse keymap support library"
|
||||
help
|
||||
|
||||
diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile
|
||||
--- linux.orig/drivers/input/Makefile 2023-09-12 12:02:58.173629790 +0000
|
||||
+++ linux/drivers/input/Makefile 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i
|
||||
input-core-y += touchscreen.o
|
||||
|
||||
obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o
|
||||
+obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o
|
||||
obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o
|
||||
obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o
|
||||
obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o
|
||||
diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-polldev.c
|
||||
--- linux.orig/drivers/input/input-polldev.c 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ linux/drivers/input/input-polldev.c 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -0,0 +1,362 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * Generic implementation of a polled input device
|
||||
+
|
||||
+ * Copyright (c) 2007 Dmitry Torokhov
|
||||
+ */
|
||||
+
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/jiffies.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/workqueue.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/input-polldev.h>
|
||||
+
|
||||
+MODULE_AUTHOR("Dmitry Torokhov <dtor@mail.ru>");
|
||||
+MODULE_DESCRIPTION("Generic implementation of a polled input device");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+
|
||||
+static void input_polldev_queue_work(struct input_polled_dev *dev)
|
||||
+{
|
||||
+ unsigned long delay;
|
||||
+
|
||||
+ delay = msecs_to_jiffies(dev->poll_interval);
|
||||
+ if (delay >= HZ)
|
||||
+ delay = round_jiffies_relative(delay);
|
||||
+
|
||||
+ queue_delayed_work(system_freezable_wq, &dev->work, delay);
|
||||
+}
|
||||
+
|
||||
+static void input_polled_device_work(struct work_struct *work)
|
||||
+{
|
||||
+ struct input_polled_dev *dev =
|
||||
+ container_of(work, struct input_polled_dev, work.work);
|
||||
+
|
||||
+ dev->poll(dev);
|
||||
+ input_polldev_queue_work(dev);
|
||||
+}
|
||||
+
|
||||
+static int input_open_polled_device(struct input_dev *input)
|
||||
+{
|
||||
+ struct input_polled_dev *dev = input_get_drvdata(input);
|
||||
+
|
||||
+ if (dev->open)
|
||||
+ dev->open(dev);
|
||||
+
|
||||
+ /* Only start polling if polling is enabled */
|
||||
+ if (dev->poll_interval > 0) {
|
||||
+ dev->poll(dev);
|
||||
+ input_polldev_queue_work(dev);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void input_close_polled_device(struct input_dev *input)
|
||||
+{
|
||||
+ struct input_polled_dev *dev = input_get_drvdata(input);
|
||||
+
|
||||
+ cancel_delayed_work_sync(&dev->work);
|
||||
+
|
||||
+ if (dev->close)
|
||||
+ dev->close(dev);
|
||||
+}
|
||||
+
|
||||
+/* SYSFS interface */
|
||||
+
|
||||
+static ssize_t input_polldev_get_poll(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct input_polled_dev *polldev = dev_get_drvdata(dev);
|
||||
+
|
||||
+ return sprintf(buf, "%d\n", polldev->poll_interval);
|
||||
+}
|
||||
+
|
||||
+static ssize_t input_polldev_set_poll(struct device *dev,
|
||||
+ struct device_attribute *attr, const char *buf,
|
||||
+ size_t count)
|
||||
+{
|
||||
+ struct input_polled_dev *polldev = dev_get_drvdata(dev);
|
||||
+ struct input_dev *input = polldev->input;
|
||||
+ unsigned int interval;
|
||||
+ int err;
|
||||
+
|
||||
+ err = kstrtouint(buf, 0, &interval);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ if (interval < polldev->poll_interval_min)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (interval > polldev->poll_interval_max)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ mutex_lock(&input->mutex);
|
||||
+
|
||||
+ polldev->poll_interval = interval;
|
||||
+
|
||||
+ if (input->users) {
|
||||
+ cancel_delayed_work_sync(&polldev->work);
|
||||
+ if (polldev->poll_interval > 0)
|
||||
+ input_polldev_queue_work(polldev);
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&input->mutex);
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll,
|
||||
+ input_polldev_set_poll);
|
||||
+
|
||||
+
|
||||
+static ssize_t input_polldev_get_max(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct input_polled_dev *polldev = dev_get_drvdata(dev);
|
||||
+
|
||||
+ return sprintf(buf, "%d\n", polldev->poll_interval_max);
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL);
|
||||
+
|
||||
+static ssize_t input_polldev_get_min(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct input_polled_dev *polldev = dev_get_drvdata(dev);
|
||||
+
|
||||
+ return sprintf(buf, "%d\n", polldev->poll_interval_min);
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL);
|
||||
+
|
||||
+static struct attribute *sysfs_attrs[] = {
|
||||
+ &dev_attr_poll.attr,
|
||||
+ &dev_attr_max.attr,
|
||||
+ &dev_attr_min.attr,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+static struct attribute_group input_polldev_attribute_group = {
|
||||
+ .attrs = sysfs_attrs
|
||||
+};
|
||||
+
|
||||
+static const struct attribute_group *input_polldev_attribute_groups[] = {
|
||||
+ &input_polldev_attribute_group,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * input_allocate_polled_device - allocate memory for polled device
|
||||
+ *
|
||||
+ * The function allocates memory for a polled device and also
|
||||
+ * for an input device associated with this polled device.
|
||||
+ */
|
||||
+struct input_polled_dev *input_allocate_polled_device(void)
|
||||
+{
|
||||
+ struct input_polled_dev *dev;
|
||||
+
|
||||
+ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL);
|
||||
+ if (!dev)
|
||||
+ return NULL;
|
||||
+
|
||||
+ dev->input = input_allocate_device();
|
||||
+ if (!dev->input) {
|
||||
+ kfree(dev);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return dev;
|
||||
+}
|
||||
+EXPORT_SYMBOL(input_allocate_polled_device);
|
||||
+
|
||||
+struct input_polled_devres {
|
||||
+ struct input_polled_dev *polldev;
|
||||
+};
|
||||
+
|
||||
+static int devm_input_polldev_match(struct device *dev, void *res, void *data)
|
||||
+{
|
||||
+ struct input_polled_devres *devres = res;
|
||||
+
|
||||
+ return devres->polldev == data;
|
||||
+}
|
||||
+
|
||||
+static void devm_input_polldev_release(struct device *dev, void *res)
|
||||
+{
|
||||
+ struct input_polled_devres *devres = res;
|
||||
+ struct input_polled_dev *polldev = devres->polldev;
|
||||
+
|
||||
+ dev_dbg(dev, "%s: dropping reference/freeing %s\n",
|
||||
+ __func__, dev_name(&polldev->input->dev));
|
||||
+
|
||||
+ input_put_device(polldev->input);
|
||||
+ kfree(polldev);
|
||||
+}
|
||||
+
|
||||
+static void devm_input_polldev_unregister(struct device *dev, void *res)
|
||||
+{
|
||||
+ struct input_polled_devres *devres = res;
|
||||
+ struct input_polled_dev *polldev = devres->polldev;
|
||||
+
|
||||
+ dev_dbg(dev, "%s: unregistering device %s\n",
|
||||
+ __func__, dev_name(&polldev->input->dev));
|
||||
+ input_unregister_device(polldev->input);
|
||||
+
|
||||
+ /*
|
||||
+ * Note that we are still holding extra reference to the input
|
||||
+ * device so it will stick around until devm_input_polldev_release()
|
||||
+ * is called.
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * devm_input_allocate_polled_device - allocate managed polled device
|
||||
+ * @dev: device owning the polled device being created
|
||||
+ *
|
||||
+ * Returns prepared &struct input_polled_dev or %NULL.
|
||||
+ *
|
||||
+ * Managed polled input devices do not need to be explicitly unregistered
|
||||
+ * or freed as it will be done automatically when owner device unbinds
|
||||
+ * from * its driver (or binding fails). Once such managed polled device
|
||||
+ * is allocated, it is ready to be set up and registered in the same
|
||||
+ * fashion as regular polled input devices (using
|
||||
+ * input_register_polled_device() function).
|
||||
+ *
|
||||
+ * If you want to manually unregister and free such managed polled devices,
|
||||
+ * it can be still done by calling input_unregister_polled_device() and
|
||||
+ * input_free_polled_device(), although it is rarely needed.
|
||||
+ *
|
||||
+ * NOTE: the owner device is set up as parent of input device and users
|
||||
+ * should not override it.
|
||||
+ */
|
||||
+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev)
|
||||
+{
|
||||
+ struct input_polled_dev *polldev;
|
||||
+ struct input_polled_devres *devres;
|
||||
+
|
||||
+ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!devres)
|
||||
+ return NULL;
|
||||
+
|
||||
+ polldev = input_allocate_polled_device();
|
||||
+ if (!polldev) {
|
||||
+ devres_free(devres);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ polldev->input->dev.parent = dev;
|
||||
+ polldev->devres_managed = true;
|
||||
+
|
||||
+ devres->polldev = polldev;
|
||||
+ devres_add(dev, devres);
|
||||
+
|
||||
+ return polldev;
|
||||
+}
|
||||
+EXPORT_SYMBOL(devm_input_allocate_polled_device);
|
||||
+
|
||||
+/**
|
||||
+ * input_free_polled_device - free memory allocated for polled device
|
||||
+ * @dev: device to free
|
||||
+ *
|
||||
+ * The function frees memory allocated for polling device and drops
|
||||
+ * reference to the associated input device.
|
||||
+ */
|
||||
+void input_free_polled_device(struct input_polled_dev *dev)
|
||||
+{
|
||||
+ if (dev) {
|
||||
+ if (dev->devres_managed)
|
||||
+ WARN_ON(devres_destroy(dev->input->dev.parent,
|
||||
+ devm_input_polldev_release,
|
||||
+ devm_input_polldev_match,
|
||||
+ dev));
|
||||
+ input_put_device(dev->input);
|
||||
+ kfree(dev);
|
||||
+ }
|
||||
+}
|
||||
+EXPORT_SYMBOL(input_free_polled_device);
|
||||
+
|
||||
+/**
|
||||
+ * input_register_polled_device - register polled device
|
||||
+ * @dev: device to register
|
||||
+ *
|
||||
+ * The function registers previously initialized polled input device
|
||||
+ * with input layer. The device should be allocated with call to
|
||||
+ * input_allocate_polled_device(). Callers should also set up poll()
|
||||
+ * method and set up capabilities (id, name, phys, bits) of the
|
||||
+ * corresponding input_dev structure.
|
||||
+ */
|
||||
+int input_register_polled_device(struct input_polled_dev *dev)
|
||||
+{
|
||||
+ struct input_polled_devres *devres = NULL;
|
||||
+ struct input_dev *input = dev->input;
|
||||
+ int error;
|
||||
+
|
||||
+ if (dev->devres_managed) {
|
||||
+ devres = devres_alloc(devm_input_polldev_unregister,
|
||||
+ sizeof(*devres), GFP_KERNEL);
|
||||
+ if (!devres)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ devres->polldev = dev;
|
||||
+ }
|
||||
+
|
||||
+ input_set_drvdata(input, dev);
|
||||
+ INIT_DELAYED_WORK(&dev->work, input_polled_device_work);
|
||||
+
|
||||
+ if (!dev->poll_interval)
|
||||
+ dev->poll_interval = 500;
|
||||
+ if (!dev->poll_interval_max)
|
||||
+ dev->poll_interval_max = dev->poll_interval;
|
||||
+
|
||||
+ input->open = input_open_polled_device;
|
||||
+ input->close = input_close_polled_device;
|
||||
+
|
||||
+ input->dev.groups = input_polldev_attribute_groups;
|
||||
+
|
||||
+ error = input_register_device(input);
|
||||
+ if (error) {
|
||||
+ devres_free(devres);
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * Take extra reference to the underlying input device so
|
||||
+ * that it survives call to input_unregister_polled_device()
|
||||
+ * and is deleted only after input_free_polled_device()
|
||||
+ * has been invoked. This is needed to ease task of freeing
|
||||
+ * sparse keymaps.
|
||||
+ */
|
||||
+ input_get_device(input);
|
||||
+
|
||||
+ if (dev->devres_managed) {
|
||||
+ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n",
|
||||
+ __func__, dev_name(&input->dev));
|
||||
+ devres_add(input->dev.parent, devres);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+EXPORT_SYMBOL(input_register_polled_device);
|
||||
+
|
||||
+/**
|
||||
+ * input_unregister_polled_device - unregister polled device
|
||||
+ * @dev: device to unregister
|
||||
+ *
|
||||
+ * The function unregisters previously registered polled input
|
||||
+ * device from input layer. Polling is stopped and device is
|
||||
+ * ready to be freed with call to input_free_polled_device().
|
||||
+ */
|
||||
+void input_unregister_polled_device(struct input_polled_dev *dev)
|
||||
+{
|
||||
+ if (dev->devres_managed)
|
||||
+ WARN_ON(devres_destroy(dev->input->dev.parent,
|
||||
+ devm_input_polldev_unregister,
|
||||
+ devm_input_polldev_match,
|
||||
+ dev));
|
||||
+
|
||||
+ input_unregister_device(dev->input);
|
||||
+}
|
||||
+EXPORT_SYMBOL(input_unregister_polled_device);
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-08-22 23:19:15.430576261 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-08-22 23:08:18.677044634 +0000
|
||||
@@ -1644,9 +1644,28 @@
|
||||
@@ -1656,9 +1656,28 @@
|
||||
<250000000>,
|
||||
<0>; /* Do Nothing */
|
||||
};
|
||||
|
@ -30,7 +30,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/ar
|
|||
usb3_pcie_phy: phy@46000 {
|
||||
compatible = "amlogic,g12a-usb3-pcie-phy";
|
||||
reg = <0x0 0x46000 0x0 0x2000>;
|
||||
@@ -2140,6 +2159,15 @@
|
||||
@@ -2143,6 +2162,15 @@
|
||||
remote-endpoint = <&hdmi_tx_in>;
|
||||
};
|
||||
};
|
||||
|
@ -46,7 +46,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/ar
|
|||
};
|
||||
|
||||
gic: interrupt-controller@ffc01000 {
|
||||
@@ -2177,6 +2205,48 @@
|
||||
@@ -2180,6 +2208,48 @@
|
||||
amlogic,channel-interrupts = <64 65 66 67 68 69 70 71>;
|
||||
};
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
diff -rupN linux.orig/sound/soc/meson/axg-card.c linux/sound/soc/meson/axg-card.c
|
||||
--- linux.orig/sound/soc/meson/axg-card.c 2023-09-12 12:02:59.597661952 +0000
|
||||
+++ linux/sound/soc/meson/axg-card.c 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -59,6 +59,13 @@ static int axg_card_tdm_dai_init(struct
|
||||
(struct axg_dai_link_tdm_data *)priv->link_data[rtd->num];
|
||||
struct snd_soc_dai *codec_dai;
|
||||
int ret, i;
|
||||
+ struct snd_soc_card *card = rtd->card;
|
||||
+
|
||||
+ /* Go-Ultra : Digital volume is limited to -2dB */
|
||||
+ ret = snd_soc_limit_volume(card, "Master Playback Volume", 252);
|
||||
+ if (ret < 0)
|
||||
+ dev_dbg(codec_dai->dev,
|
||||
+ "Not found mixer : 'Master Playback Volume'\n");
|
||||
|
||||
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
||||
ret = snd_soc_dai_set_tdm_slot(codec_dai,
|
|
@ -0,0 +1,19 @@
|
|||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -1903,6 +1891,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ uart_ao_b_pins: uart-b-ao {
|
||||
+ mux {
|
||||
+ groups = "uart_ao_b_tx_8",
|
||||
+ "uart_ao_b_rx_9";
|
||||
+ function = "uart_ao_b";
|
||||
+ bias-disable;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
uart_ao_a_pins: uart-a-ao {
|
||||
mux {
|
||||
groups = "uart_ao_a_tx",
|
|
@ -0,0 +1,76 @@
|
|||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -61,18 +61,6 @@
|
||||
gpu_opp_table: opp-table-gpu {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
- opp-124999998 {
|
||||
- opp-hz = /bits/ 64 <124999998>;
|
||||
- opp-microvolt = <800000>;
|
||||
- };
|
||||
- opp-249999996 {
|
||||
- opp-hz = /bits/ 64 <249999996>;
|
||||
- opp-microvolt = <800000>;
|
||||
- };
|
||||
- opp-285714281 {
|
||||
- opp-hz = /bits/ 64 <285714281>;
|
||||
- opp-microvolt = <800000>;
|
||||
- };
|
||||
opp-399999994 {
|
||||
opp-hz = /bits/ 64 <399999994>;
|
||||
opp-microvolt = <800000>;
|
||||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -11,6 +11,11 @@
|
||||
compatible = "operating-points-v2";
|
||||
opp-shared;
|
||||
|
||||
+ opp-667000000 {
|
||||
+ opp-hz = /bits/ 64 <667000000>;
|
||||
+ opp-microvolt = <731000>;
|
||||
+ };
|
||||
+
|
||||
opp-1000000000 {
|
||||
opp-hz = /bits/ 64 <1000000000>;
|
||||
opp-microvolt = <761000>;
|
||||
@@ -51,6 +56,11 @@
|
||||
compatible = "operating-points-v2";
|
||||
opp-shared;
|
||||
|
||||
+ opp-667000000 {
|
||||
+ opp-hz = /bits/ 64 <667000000>;
|
||||
+ opp-microvolt = <731000>;
|
||||
+ };
|
||||
+
|
||||
opp-1000000000 {
|
||||
opp-hz = /bits/ 64 <1000000000>;
|
||||
opp-microvolt = <731000>;
|
||||
diff -rupN linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi linux/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi
|
||||
--- linux.orig/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi 2023-09-12 12:02:56.937601871 +0000
|
||||
+++ linux/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi 2023-09-12 12:03:27.490291628 +0000
|
||||
@@ -11,6 +11,11 @@
|
||||
compatible = "operating-points-v2";
|
||||
opp-shared;
|
||||
|
||||
+ opp-667000000 {
|
||||
+ opp-hz = /bits/ 64 <667000000>;
|
||||
+ opp-microvolt = <731000>;
|
||||
+ };
|
||||
+
|
||||
opp-1000000000 {
|
||||
opp-hz = /bits/ 64 <1000000000>;
|
||||
opp-microvolt = <731000>;
|
||||
@@ -56,6 +61,11 @@
|
||||
compatible = "operating-points-v2";
|
||||
opp-shared;
|
||||
|
||||
+ opp-667000000 {
|
||||
+ opp-hz = /bits/ 64 <667000000>;
|
||||
+ opp-microvolt = <751000>;
|
||||
+ };
|
||||
+
|
||||
opp-1000000000 {
|
||||
opp-hz = /bits/ 64 <1000000000>;
|
||||
opp-microvolt = <771000>;
|
|
@ -0,0 +1,99 @@
|
|||
From 49f65e2eaaf96de1282bb82039386c2d2d04ee53 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Gondois <pierre.gondois@arm.com>
|
||||
Date: Mon, 7 Nov 2022 16:56:56 +0100
|
||||
Subject: [PATCH] arm64: dts: Update cache properties for amlogic
|
||||
|
||||
The DeviceTree Specification v0.3 specifies that the cache node
|
||||
'compatible' and 'cache-level' properties are 'required'. Cf.
|
||||
s3.8 Multi-level and Shared Cache Nodes
|
||||
The 'cache-unified' property should be present if one of the
|
||||
properties for unified cache is present ('cache-size', ...).
|
||||
|
||||
Update the Device Trees accordingly.
|
||||
|
||||
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
|
||||
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
Link: https://lore.kernel.org/r/20221107155825.1644604-4-pierre.gondois@arm.com
|
||||
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
|
||||
---
|
||||
arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-axg.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-g12a.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-g12b.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 1 +
|
||||
6 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
index b4000cf65a9a0a..d2f7cb4e5375f0 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
index 04f797b5a012c8..1648e67afbb6bc 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
@@ -105,6 +105,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
index fb0ab27d1f642d..af23d7968181d0 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
index ee8fcae9f9f00a..9978e619acccda 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
@@ -105,6 +105,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
index 023a520054947e..e3c12e0be99d74 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
@@ -132,6 +132,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
index 80737731af3fe2..d845eb19d93dce 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
@@ -88,6 +88,7 @@
|
||||
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
+ cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
From c2258a94fae556797085b58c0b6839c41826bd3d Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Date: Sat, 22 Apr 2023 00:32:10 +0200
|
||||
Subject: [PATCH] arm64: dts: amlogic: add missing cache properties
|
||||
|
||||
As all level 2 and level 3 caches are unified, add required
|
||||
cache-unified properties to fix warnings like:
|
||||
|
||||
meson-a1-ad401.dtb: l2-cache0: 'cache-unified' is a required property
|
||||
|
||||
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||
Link: https://lore.kernel.org/r/20230421223211.115612-1-krzysztof.kozlowski@linaro.org
|
||||
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
|
||||
---
|
||||
arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-axg.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-g12a.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-g12b.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 1 +
|
||||
arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 1 +
|
||||
6 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
index eed96f26284415..c8f344596285ec 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
|
||||
@@ -37,6 +37,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
index b984950591e2f6..768d0ed78dbe63 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
|
||||
@@ -106,6 +106,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
index f58fd2a6fe61cb..543e70669df54a 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
|
||||
@@ -51,6 +51,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
index 431572b384db92..86e6ceb31d5e26 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b.dtsi
|
||||
@@ -106,6 +106,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
};
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
index 11f89bfecb56a8..2673f0dbafe764 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
|
||||
@@ -133,6 +133,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
index 617d322af0df8d..643f94d9d08e10 100644
|
||||
--- a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
|
||||
@@ -89,6 +89,7 @@
|
||||
l2: l2-cache0 {
|
||||
compatible = "cache";
|
||||
cache-level = <2>;
|
||||
+ cache-unified;
|
||||
};
|
||||
};
|
||||
|
|
@ -28,7 +28,7 @@ diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
|
|||
index 8b6aeb8a78f7d3..eee05d447dece7 100644
|
||||
--- a/sound/core/pcm_lib.c
|
||||
+++ b/sound/core/pcm_lib.c
|
||||
@@ -2514,7 +2514,10 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream,
|
||||
@@ -2516,7 +2516,10 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream,
|
||||
knew.name = "Playback Channel Map";
|
||||
else
|
||||
knew.name = "Capture Channel Map";
|
Loading…
Reference in a new issue