meson64-edge (6.2.y): rebase & update .config to 6.2.16 (EOL); pick chewitt (add t95z+fixes); rework SPI-NOR dtbs

- `meson64`-`edge` (6.2.y): drop old/unused/pre-armbian-next builddeb patch that was leftover
- `meson64`-`edge` (6.2.y): pick & squash from chewitt's tree; new t95z board and its tm1628 driver, fixes for odroidc2, vim3, gxl/gxm SDIO
- `meson64`-`edge` (6.2.y): reword the `-spi` extra DTBs for the N2(+) into more generic for g12; add VIM3/VIM3L which also have same SPI NOR scheme
- `meson64`-`edge` (6.2.y): update .config to 6.2.16; enable `CONFIG_TM1628`
- `meson64`-`edge` (6.2.y): rebase to 6.2.16 after picking chewitt
This commit is contained in:
Ricardo Pardini
2023-05-19 13:07:33 +02:00
committed by igorpecovnik
parent 7fa05a9b69
commit 09e82fe25e
14 changed files with 1364 additions and 138 deletions

View File

@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 6.2.0-rc7 Kernel Configuration
# Linux/arm64 6.2.16 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0"
CONFIG_CC_IS_GCC=y
@@ -163,7 +163,6 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
CONFIG_GCC12_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_ARCH_SUPPORTS_INT128=y
CONFIG_NUMA_BALANCING=y
@@ -1646,7 +1645,6 @@ CONFIG_DEFAULT_NET_SCH="pfifo_fast"
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
@@ -3026,6 +3024,7 @@ CONFIG_MSCC_OCELOT_SWITCH=m
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MYRI=y
# CONFIG_MYRI10GE is not set
# CONFIG_FEALNX is not set
CONFIG_NET_VENDOR_NI=y
# CONFIG_NI_XGE_MANAGEMENT_ENET is not set
CONFIG_NET_VENDOR_NATSEMI=y
@@ -4047,7 +4046,6 @@ CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_SERIAL_RP2=m
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=m
# CONFIG_SERIAL_FSL_LPUART_CONSOLE is not set
CONFIG_SERIAL_FSL_LINFLEXUART=m
CONFIG_SERIAL_CONEXANT_DIGICOLOR=m
CONFIG_SERIAL_SPRD=m
@@ -4552,9 +4550,9 @@ CONFIG_POWER_RESET_ATC260X=m
CONFIG_POWER_RESET_BRCMSTB=y
# CONFIG_POWER_RESET_GPIO is not set
# CONFIG_POWER_RESET_GPIO_RESTART is not set
CONFIG_POWER_RESET_ODROID=y
# CONFIG_POWER_RESET_LTC2952 is not set
# CONFIG_POWER_RESET_MT6323 is not set
CONFIG_POWER_RESET_ODROID=y
# CONFIG_POWER_RESET_REGULATOR is not set
CONFIG_POWER_RESET_RESTART=y
# CONFIG_POWER_RESET_TPS65086 is not set
@@ -6257,7 +6255,6 @@ CONFIG_DRM=y
CONFIG_DRM_MIPI_DBI=m
CONFIG_DRM_MIPI_DSI=y
# CONFIG_DRM_DEBUG_MM is not set
CONFIG_DRM_USE_DYNAMIC_DEBUG=y
CONFIG_DRM_KUNIT_TEST=m
CONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
@@ -6449,9 +6446,6 @@ CONFIG_DRM_DW_HDMI_GP_AUDIO=m
# CONFIG_DRM_HISI_HIBMC is not set
CONFIG_DRM_HISI_KIRIN=m
CONFIG_DRM_LOGICVC=m
CONFIG_DRM_MXS=y
# CONFIG_DRM_MXSFB is not set
CONFIG_DRM_IMX_LCDIF=m
CONFIG_DRM_MESON=y
CONFIG_DRM_MESON_DW_HDMI=y
# CONFIG_DRM_ARCPGU is not set
@@ -8016,7 +8010,6 @@ CONFIG_BCM_SBA_RAID=m
CONFIG_DW_AXI_DMAC=m
# CONFIG_FSL_EDMA is not set
CONFIG_FSL_QDMA=m
CONFIG_HISI_DMA=m
# CONFIG_INTEL_IDMA64 is not set
CONFIG_MV_XOR_V2=y
CONFIG_PL330_DMA=y
@@ -8052,7 +8045,15 @@ CONFIG_SYNC_FILE=y
# CONFIG_DMABUF_SYSFS_STATS is not set
# end of DMABUF options
# CONFIG_AUXDISPLAY is not set
CONFIG_AUXDISPLAY=y
# CONFIG_HD44780 is not set
# CONFIG_IMG_ASCII_LCD is not set
# CONFIG_HT16K33 is not set
# CONFIG_LCD2S is not set
CONFIG_TM1628=m
# CONFIG_CHARLCD_BL_OFF is not set
# CONFIG_CHARLCD_BL_ON is not set
CONFIG_CHARLCD_BL_FLASH=y
CONFIG_UIO=m
# CONFIG_UIO_CIF is not set
# CONFIG_UIO_PDRV_GENIRQ is not set
@@ -8259,6 +8260,7 @@ CONFIG_XIL_AXIS_FIFO=m
# CONFIG_FIELDBUS_DEV is not set
# CONFIG_QLGE is not set
# CONFIG_VME_BUS is not set
# CONFIG_RTL8723CS is not set
# CONFIG_GOLDFISH is not set
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHROMEOS_ACPI=m
@@ -9484,9 +9486,6 @@ CONFIG_TMPFS_XATTR=y
CONFIG_ARCH_SUPPORTS_HUGETLBFS=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set
CONFIG_MEMFD_CREATE=y
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
CONFIG_CONFIGFS_FS=y

View File

@@ -0,0 +1,392 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Christian Hewitt <christianshewitt@gmail.com>
Date: Mon, 13 Feb 2023 11:38:16 +0000
Subject: WIP: arm64: dts: meson: add support for Sunvell T95Z Plus + VFD
WIP: arm64: dts: meson: add SPI VFD to Sunvell T95Z Plus
making guesses at the config..
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: arm64: dts: meson: add support for Sunvell T95Z Plus
Sunvell T95Z Pluz is based on the Amlogic Q200 reference design with
an S912 chip and the following specifications:
- 2GB DDR3 RAM
- 16GB eMMC
- 10/100/1000 Base-T Ethernet
- AP6255 Wireless (802.11 b/g/n/ac, BT 4.1)
- HDMI 2.0a video
- FTD628 VFD for clock/status
- 2x USB 2.0 ports
- IR receiver
- 1x Power LED (white)
- 1x Update/Reset button (underside)
- 1x micro SD card slot
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: dt-bindings: arm: amlogic: add support for Sunvell T95Z Plus
Sunvell T95Z Plus is an Android STB based on the Amlogic Q200 reference
board with S912 chip.
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: media: rc: add keymap for Sunvell T95Z Plus
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: dt-bindings: media: rc: add rc-sunvell-t95z-plus
Add a binding for the rc-sunvell-t95z-plus remote keymap
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: dt-bindings: add sunvell vendor prefix
Add vendor prefix for Shenzhen Sunvell Electronics Co., Ltd
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
---
Documentation/devicetree/bindings/arm/amlogic.yaml | 1 +
Documentation/devicetree/bindings/media/rc.yaml | 1 +
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 +
arch/arm64/boot/dts/amlogic/Makefile | 1 +
arch/arm64/boot/dts/amlogic/meson-gxm-t95z-plus.dts | 166 ++++++++++
drivers/media/rc/keymaps/Makefile | 1 +
drivers/media/rc/keymaps/rc-sunvell-t95z-plus.c | 75 +++++
include/media/rc-map.h | 1 +
8 files changed, 248 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documentation/devicetree/bindings/arm/amlogic.yaml
index 81be728c83e7..07073e022b51 100644
--- a/Documentation/devicetree/bindings/arm/amlogic.yaml
+++ b/Documentation/devicetree/bindings/arm/amlogic.yaml
@@ -126,6 +126,7 @@ properties:
- libretech,aml-s912-pc
- minix,neo-u9h
- nexbox,a1
+ - sunvell,t95z-plus
- tronsmart,vega-s96
- videostrong,gxm-kiii-pro
- wetek,core2
diff --git a/Documentation/devicetree/bindings/media/rc.yaml b/Documentation/devicetree/bindings/media/rc.yaml
index e732b7f3a635..1f9359c214ee 100644
--- a/Documentation/devicetree/bindings/media/rc.yaml
+++ b/Documentation/devicetree/bindings/media/rc.yaml
@@ -125,6 +125,7 @@ properties:
- rc-reddo
- rc-snapstream-firefly
- rc-streamzap
+ - rc-sunvell-t95z-plus
- rc-su3000
- rc-tanix-tx3mini
- rc-tanix-tx5max
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 70ffb3780621..3482651d510c 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -1268,6 +1268,8 @@ patternProperties:
description: Sundance DSP Inc.
"^sunplus,.*":
description: Sunplus Technology Co., Ltd.
+ "^sunvell,.*":
+ description: Shenzhen Sunvell Electronics Co., Ltd
"^SUNW,.*":
description: Sun Microsystems, Inc
"^supermicro,.*":
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index d94e3f3530d9..5b524ccd0ea9 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -58,6 +58,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxm-q200.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-q201.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-rbox-pro.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-s912-libretech-pc.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-gxm-t95z-plus.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-vega-s96.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-wetek-core2.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-s4-s805x2-aq222.dtb
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxm-t95z-plus.dts b/arch/arm64/boot/dts/amlogic/meson-gxm-t95z-plus.dts
new file mode 100644
index 000000000000..5f4bd19d5d77
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-gxm-t95z-plus.dts
@@ -0,0 +1,166 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) Christian Hewitt <christianshewitt@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "meson-gxm.dtsi"
+#include "meson-gx-p23x-q20x.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ compatible = "sunvell,t95z-plus", "amlogic,s912", "amlogic,meson-gxm";
+ model = "Sunvell T95Z Plus";
+
+ leds {
+ compatible = "gpio-leds";
+
+ led-green {
+ color = <LED_COLOR_ID_GREEN>;
+ function = LED_FUNCTION_POWER;
+ gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+
+ led-blue {
+ color = <LED_COLOR_ID_BLUE>;
+ function = LED_FUNCTION_POWER;
+ gpios = <&gpio GPIODV_25 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ panic-indicator;
+ };
+ };
+
+ adc-keys {
+ compatible = "adc-keys";
+ io-channels = <&saradc 0>;
+ io-channel-names = "buttons";
+ keyup-threshold-microvolt = <1710000>;
+
+ button-function {
+ label = "update";
+ linux,code = <KEY_VENDOR>;
+ press-threshold-microvolt = <10000>;
+ };
+ };
+
+ spi {
+ compatible = "spi-gpio";
+
+ /* T95Z v1 (enabled) */
+ sck-gpios = <&gpio GPIODV_22 GPIO_ACTIVE_HIGH>;
+ mosi-gpios = <&gpio GPIODV_23 GPIO_ACTIVE_HIGH>;
+ cs-gpios = <&gpio GPIODV_21 GPIO_ACTIVE_LOW>;
+
+ /* T95Z v2 (disabled)
+ sck-gpios = <&gpio GPIODV_19 GPIO_ACTIVE_HIGH>;
+ mosi-gpios = <&gpio GPIODV_18 GPIO_ACTIVE_HIGH>;
+ cs-gpios = <&gpio GPIODV_20 GPIO_ACTIVE_LOW>;
+ */
+
+ num-chipselects = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ tm1628: led-controller@0 {
+ compatible = "titanmec,tm1628";
+ reg = <0>;
+ spi-3wire;
+ spi-lsb-first;
+ spi-rx-delay-us = <1>;
+ spi-max-frequency = <500000>;
+ #address-cells = <2>;
+ #size-cells = <0>;
+
+ titanmec,segment-mapping = /bits/ 8 <4 5 6 1 2 3 7>;
+ titanmec,grid = /bits/ 8 <2 3 4 5 1>;
+
+ alarm@1,1 {
+ reg = <1 1>;
+ function = LED_FUNCTION_ALARM;
+ };
+
+ usb@1,2 {
+ reg = <1 2>;
+ function = LED_FUNCTION_USB;
+ };
+
+ play@1,3 {
+ reg = <1 3>;
+ function = "play";
+ };
+
+ pause@1,4 {
+ reg = <1 4>;
+ function = "pause";
+ };
+
+ colon@1,5 {
+ reg = <1 5>;
+ function = "colon";
+ };
+
+ lan@1,6 {
+ reg = <1 6>;
+ function = LED_FUNCTION_LAN;
+ };
+
+ wlan@1,7 {
+ reg = <1 7>;
+ function = LED_FUNCTION_WLAN;
+ };
+ };
+ };
+};
+
+&ethmac {
+ pinctrl-0 = <&eth_pins>;
+ pinctrl-names = "default";
+
+ phy-handle = <&external_phy>;
+ phy-mode = "rgmii";
+
+ amlogic,tx-delay-ns = <2>;
+};
+
+&external_mdio {
+ external_phy: ethernet-phy@1 {
+ /* ZTE ZX2AA500 */
+ compatible = "ethernet-phy-id0381.5c11",
+ "ethernet-phy-ieee802.3-c22";
+ reg = <1>;
+ max-speed = <1000>;
+
+ reset-assert-us = <10000>;
+ reset-deassert-us = <80000>;
+ reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
+
+ interrupt-parent = <&gpio_intc>;
+ /* MAC_INTR on GPIOZ_15 */
+ interrupts = <25 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
+
+&sd_emmc_a {
+ brcmf: wifi@1 {
+ reg = <1>;
+ compatible = "brcm,bcm4329-fmac";
+ };
+};
+
+&uart_A {
+ status = "okay";
+ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+
+ bluetooth {
+ compatible = "brcm,bcm43438-bt";
+ shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
+ max-speed = <2000000>;
+ clocks = <&wifi32k>;
+ clock-names = "lpo";
+ };
+};
diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile
index f513ff5caf4e..d286beafb389 100644
--- a/drivers/media/rc/keymaps/Makefile
+++ b/drivers/media/rc/keymaps/Makefile
@@ -105,6 +105,7 @@ obj-$(CONFIG_RC_MAP) += \
rc-reddo.o \
rc-snapstream-firefly.o \
rc-streamzap.o \
+ rc-sunvell-t95z-plus.o \
rc-su3000.o \
rc-tanix-tx3mini.o \
rc-tanix-tx5max.o \
diff --git a/drivers/media/rc/keymaps/rc-sunvell-t95z-plus.c b/drivers/media/rc/keymaps/rc-sunvell-t95z-plus.c
new file mode 100644
index 000000000000..aaaf6b1c0045
--- /dev/null
+++ b/drivers/media/rc/keymaps/rc-sunvell-t95z-plus.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2023 Christian Hewitt <christianshewitt@gmail.com
+ */
+
+#include <media/rc-map.h>
+#include <linux/module.h>
+
+/*
+ * Keytable for Sunvell T95Z Plus remote control
+ *
+ */
+
+static struct rc_map_table sunvell_t95z_plus[] = {
+ { 0xdf1c, KEY_POWER },
+ // TV CONTROLS
+
+ { 0xdf4b, KEY_PREVIOUS },
+ { 0xdf01, KEY_SCREEN }, // TV
+ { 0xdf5d, KEY_VOLUMEUP },
+
+ { 0xdf4f, KEY_NEXT },
+ { 0xdf5f, KEY_FAVORITES }, // KODI
+ { 0xdf5c, KEY_VOLUMEDOWN },
+
+ { 0xdf42, KEY_HOME },
+ { 0xdf0a, KEY_BACK },
+
+ { 0xdf1a, KEY_UP },
+ { 0xdf47, KEY_LEFT },
+ { 0xdf06, KEY_ENTER },
+ { 0xdf07, KEY_RIGHT },
+ { 0xdf48, KEY_DOWN },
+
+ { 0xdf03, KEY_INFO }, // MOUSE
+ { 0xdf18, KEY_MENU },
+
+ { 0xdf54, KEY_1 },
+ { 0xdf16, KEY_2 },
+ { 0xdf15, KEY_3 },
+ { 0xdf50, KEY_4 },
+ { 0xdf12, KEY_5 },
+ { 0xdf11, KEY_6 },
+ { 0xdf4c, KEY_7 },
+ { 0xdf0e, KEY_8 },
+ { 0xdf0d, KEY_9 },
+ { 0xdf41, KEY_WWW }, // WORLD
+ { 0xdf0c, KEY_0 },
+ { 0xdf10, KEY_DELETE },
+};
+
+static struct rc_map_list sunvell_t95z_plus_map = {
+ .map = {
+ .scan = sunvell_t95z_plus,
+ .size = ARRAY_SIZE(sunvell_t95z_plus),
+ .rc_proto = RC_PROTO_NEC,
+ .name = RC_MAP_SUNVELL_T95Z_PLUS,
+ }
+};
+
+static int __init init_rc_map_sunvell_t95z_plus(void)
+{
+ return rc_map_register(&sunvell_t95z_plus_map);
+}
+
+static void __exit exit_rc_map_sunvell_t95z_plus(void)
+{
+ rc_map_unregister(&sunvell_t95z_plus_map);
+}
+
+module_init(init_rc_map_sunvell_t95z_plus)
+module_exit(exit_rc_map_sunvell_t95z_plus)
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Christian Hewitt <christianshewitt@gmail.com>");
diff --git a/include/media/rc-map.h b/include/media/rc-map.h
index 793b54342dff..10f07975e7d8 100644
--- a/include/media/rc-map.h
+++ b/include/media/rc-map.h
@@ -312,6 +312,7 @@ struct rc_map *rc_map_get(const char *name);
#define RC_MAP_REDDO "rc-reddo"
#define RC_MAP_SNAPSTREAM_FIREFLY "rc-snapstream-firefly"
#define RC_MAP_STREAMZAP "rc-streamzap"
+#define RC_MAP_SUNVELL_T95Z_PLUS "rc-sunvell-t95z-plus"
#define RC_MAP_SU3000 "rc-su3000"
#define RC_MAP_TANIX_TX3MINI "rc-tanix-tx3mini"
#define RC_MAP_TANIX_TX5MAX "rc-tanix-tx5max"
--
Armbian

View File

@@ -0,0 +1,33 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Christian Hewitt <christianshewitt@gmail.com>
Date: Mon, 3 Jan 2022 10:44:17 +0000
Subject: LOCAL: usb: hub: disable autosuspend for Genesys Logic Hubs
Disable autosuspend in Genesys Logic hubs to allow USB devices on the
Odroid C2 board to be used. The alternative to this patch is setting
usbcore.autosuspend=-1 in boot params.
This patch only impacts GXBB devices as GXL/GXM onwards use the newer
dwc3 core which does not have the problem.
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
---
drivers/usb/core/hub.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 97a0f8faea6e..5991cf2a63a3 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5855,7 +5855,7 @@ static const struct usb_device_id hub_id_table[] = {
| USB_DEVICE_ID_MATCH_INT_CLASS,
.idVendor = USB_VENDOR_GENESYS_LOGIC,
.bInterfaceClass = USB_CLASS_HUB,
- .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND},
+ .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND},
{ .match_flags = USB_DEVICE_ID_MATCH_VENDOR
| USB_DEVICE_ID_MATCH_PRODUCT,
.idVendor = USB_VENDOR_TEXAS_INSTRUMENTS,
--
Armbian

View File

@@ -1,85 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ricardo Pardini <ricardo@pardini.net>
Date: Thu, 2 Sep 2021 20:44:19 +0200
Subject: ODROID N2(+): SPI-NOR enable via extra DTBs
Kernel DTS patch to add SPI-flash-enabled DTBs (slower eMMC), produces -spi .dtbs for n2 and n2-plus
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
---
arch/arm64/boot/dts/amlogic/Makefile | 2 ++
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-enable-spi.dtsi | 13 ++++++++++
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spi.dts | 11 ++++++++
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spi.dts | 11 ++++++++
4 files changed, 37 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index d94e3f3530d9..1431d6a8be04 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -16,7 +16,9 @@ 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-n2-plus.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-plus-spi.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-spi.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-radxa-zero2.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-s922x-khadas-vim3.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-ugoos-am6.dtb
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-enable-spi.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-enable-spi.dtsi
new file mode 100644
index 000000000000..a6f11e8cdfbe
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-enable-spi.dtsi
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/*
+ * Replace emmc_data_8b_pins to emmc_data_4b_pins from sd_emmc_c pinctrl-0, and change bus-width to 4 then spifc can be enabled.
+ */
+&sd_emmc_c {
+ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_4b_pins>, <&emmc_ds_pins>;
+ bus-width = <4>;
+};
+
+&spifc {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spi.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spi.dts
new file mode 100644
index 000000000000..f50f6f39a941
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spi.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-g12b-odroid-n2-plus.dts"
+
+/ {
+ model = "Hardkernel ODROID-N2Plus with SPI";
+};
+
+#include "meson-g12b-odroid-n2-enable-spi.dtsi"
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spi.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spi.dts
new file mode 100644
index 000000000000..3d85c25d5fc4
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spi.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-g12b-odroid-n2.dts"
+
+/ {
+ model = "Hardkernel ODROID-N2 with SPI";
+};
+
+#include "meson-g12b-odroid-n2-enable-spi.dtsi"
--
Armbian

View File

@@ -0,0 +1,140 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ricardo Pardini <ricardo@pardini.net>
Date: Thu, 2 Sep 2021 20:44:19 +0200
Subject: G12: SPI-NOR flash enable via extra DTBs (ODROID N2(+), Khadas
VIM3/VIM3L)
Kernel DTS patch to add SPI-flash-enabled DTBs (slower eMMC), produces -spi .dtbs
@TODO: this should be an overlay. I refuse to do overlays until the "great rework plan" for
overlays is done.
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
---
arch/arm64/boot/dts/amlogic/Makefile | 4 +++
arch/arm64/boot/dts/amlogic/meson-g12-enable-spinor.dtsi | 13 ++++++++++
arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3-spinor.dts | 11 ++++++++
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spinor.dts | 11 ++++++++
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spinor.dts | 11 ++++++++
arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l-spinor.dts | 11 ++++++++
6 files changed, 61 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index 5b524ccd0ea9..e5f75145b460 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -9,6 +9,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-g12a-sei510.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12a-u200.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12a-x96-max.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-a311d-khadas-vim3.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-a311d-khadas-vim3-spinor.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-a311d-bananapi-m2s.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-bananapi-cm4-cm4io.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-gsking-x.dtb
@@ -16,7 +17,9 @@ 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-n2-plus.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-plus-spinor.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-spinor.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-radxa-zero2.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-s922x-khadas-vim3.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-ugoos-am6.dtb
@@ -67,6 +70,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-bananapi-m5.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-h96-max.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-khadas-vim3l.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-sm1-khadas-vim3l-spinor.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-odroid-c4.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-odroid-hc4.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-sei610.dtb
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-enable-spinor.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-enable-spinor.dtsi
new file mode 100644
index 000000000000..a6f11e8cdfbe
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-enable-spinor.dtsi
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/*
+ * Replace emmc_data_8b_pins to emmc_data_4b_pins from sd_emmc_c pinctrl-0, and change bus-width to 4 then spifc can be enabled.
+ */
+&sd_emmc_c {
+ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_4b_pins>, <&emmc_ds_pins>;
+ bus-width = <4>;
+};
+
+&spifc {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3-spinor.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3-spinor.dts
new file mode 100644
index 000000000000..e21dd8fd3e00
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3-spinor.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-g12b-a311d-khadas-vim3.dts"
+
+/ {
+ model = "Khadas VIM3 with SPI NOR flash";
+};
+
+#include "meson-g12-enable-spinor.dtsi"
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spinor.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spinor.dts
new file mode 100644
index 000000000000..0677d7725b01
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus-spinor.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-g12b-odroid-n2-plus.dts"
+
+/ {
+ model = "Hardkernel ODROID-N2Plus with SPI NOR flash";
+};
+
+#include "meson-g12-enable-spinor.dtsi"
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spinor.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spinor.dts
new file mode 100644
index 000000000000..521498d9f6fa
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-spinor.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-g12b-odroid-n2.dts"
+
+/ {
+ model = "Hardkernel ODROID-N2 with SPI NOR flash";
+};
+
+#include "meson-g12-enable-spinor.dtsi"
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l-spinor.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l-spinor.dts
new file mode 100644
index 000000000000..f0d547e0c9a6
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l-spinor.dts
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+/dts-v1/;
+
+#include "meson-sm1-khadas-vim3l.dts"
+
+/ {
+ model = "Khadas VIM3L with SPI NOR flash";
+};
+
+#include "meson-g12-enable-spinor.dtsi"
--
Armbian

View File

@@ -0,0 +1,604 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Sun, 20 Feb 2022 08:24:47 +0000
Subject: FROMLIST(v5): auxdisplay: add support for Titanmec TM1628 7 segment
display controller + etc
FROMLIST(v5): MAINTAINERS: Add entry for tm1628 auxdisplay driver
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
FROMLIST(v5): auxdisplay: add support for Titanmec TM1628 7 segment display controller
This patch adds support for the Titanmec TM1628 7 segment display
controller. It's based on previous RFC work from Andreas Farber.
The RFC version placed the driver in the LED subsystem, but this was
NAK'ed by the LED maintainer. Therefore I moved the driver to
/drivers/auxdisplay what seems most reasonable to me.
Further changes to the RFC version:
- Driver can be built also w/o LED class support, for displays that
don't have any symbols to be exposed as LED's.
- Simplified the code and rewrote a lot of it.
- Driver is now kind of a MVP, but functionality should be sufficient
for most use cases.
- Use the existing 7 segment support in uapi/linux/map_to_7segment.h
as suggested by Geert Uytterhoeven.
Note: There's a number of chips from other manufacturers that are
almost identical, e.g. FD628, SM1628. Only difference I saw so
far is that they partially support other display modes.
TM1628: 6x12, 7x11
SM1628C: 4x13, 5x12, 6x11, 7x10
For typical displays on devices using these chips this
difference shouldn't matter.
Successfully tested on a TX3 Mini TV box that has an SM1628C and a
display with 4 digits and 7 symbols.
Co-developed-by: Andreas Farber <afaerber@suse.de>
Signed-off-by: Andreas Farber <afaerber@suse.de>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
FROMLIST(v5): docs: ABI: document tm1628 attribute display-text
Document the attribute for reading / writing the text to be displayed on
the 7 segment display.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
FROMLIST(v5): dt-bindings: auxdisplay: Add Titan Micro Electronics TM1628
Add a YAML schema binding for TM1628 auxdisplay
(7/11-segment LED) controller.
This patch is partially based on previous RFC work from
Andreas Farber <afaerber@suse.de>.
Co-developed-by: Andreas Farber <afaerber@suse.de>
Signed-off-by: Andreas Farber <afaerber@suse.de>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
Documentation/ABI/testing/sysfs-devices-auxdisplay-tm1628 | 7 +
Documentation/devicetree/bindings/auxdisplay/titanmec,tm1628.yaml | 82 ++
MAINTAINERS | 7 +
drivers/auxdisplay/Kconfig | 11 +
drivers/auxdisplay/Makefile | 1 +
drivers/auxdisplay/tm1628.c | 376 ++++++++++
6 files changed, 484 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-devices-auxdisplay-tm1628 b/Documentation/ABI/testing/sysfs-devices-auxdisplay-tm1628
new file mode 100644
index 000000000000..382757e721af
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-auxdisplay-tm1628
@@ -0,0 +1,7 @@
+What: /sys/devices/.../display-text
+Date: February 2022
+Contact: Heiner Kallweit <hkallweit1@gmail.com>
+Description:
+ The text to be displayed on the 7 segment display.
+ Any printable character is allowed as input, but some
+ can not be displayed in a readable way with 7 segments.
diff --git a/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1628.yaml b/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1628.yaml
new file mode 100644
index 000000000000..d9cbbc950aab
--- /dev/null
+++ b/Documentation/devicetree/bindings/auxdisplay/titanmec,tm1628.yaml
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/leds/titanmec,tm1628.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Titan Micro Electronics TM1628 LED controller
+
+properties:
+ compatible:
+ enum:
+ - titanmec,tm1628
+
+ reg:
+ maxItems: 1
+
+ grid:
+ description:
+ Mapping of display digit position to grid number.
+ This implicitly defines the display size.
+ $ref: /schemas/types.yaml#/definitions/uint8-array
+ minItems: 1
+ maxItems: 7
+
+ segment-mapping:
+ description:
+ Mapping of 7 segment display segments A-G to bit numbers 1-12.
+ $ref: /schemas/types.yaml#/definitions/uint8-array
+ minItems: 7
+ maxItems: 7
+
+ "#address-cells":
+ const: 2
+
+ "#size-cells":
+ const: 0
+
+required:
+ - compatible
+ - reg
+
+patternProperties:
+ "^.*@[1-7],([1-9]|1[0-6])$":
+ type: object
+ description: |
+ Properties for a single LED.
+
+ properties:
+ reg:
+ description: |
+ 1-based grid number, followed by 1-based segment bit number.
+ maxItems: 1
+
+ required:
+ - reg
+
+examples:
+ - |
+ #include <dt-bindings/leds/common.h>
+
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ led-controller@0 {
+ compatible = "titanmec,tm1628";
+ reg = <0>;
+ spi-3-wire;
+ spi-lsb-first;
+ spi-max-frequency = <500000>;
+ grid = /bits/ 8 <4 3 2 1>;
+ segment-mapping = /bits/ 8 <4 5 6 1 2 3 7>;
+ #address-cells = <2>;
+ #size-cells = <0>;
+
+ alarmn@5,4 {
+ reg = <5 4>;
+ function = LED_FUNCTION_ALARM;
+ };
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index f77188f30210..56c4534764f9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -21012,6 +21012,13 @@ W: http://sourceforge.net/projects/tlan/
F: Documentation/networking/device_drivers/ethernet/ti/tlan.rst
F: drivers/net/ethernet/ti/tlan.*
+TM1628 LED CONTROLLER DRIVER
+M: Heiner Kallweit <hkallweit1@gmail.com>
+S: Maintained
+F: Documentation/devicetree/bindings/auxdisplay/titanmec,tm1628.yaml
+F: Documentation/ABI/testing/sysfs-devices-auxdisplay-tm1628
+F: drivers/auxdisplay/tm1628.c
+
TM6000 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org
diff --git a/drivers/auxdisplay/Kconfig b/drivers/auxdisplay/Kconfig
index 64012cda4d12..2764afc5c5d9 100644
--- a/drivers/auxdisplay/Kconfig
+++ b/drivers/auxdisplay/Kconfig
@@ -203,6 +203,17 @@ config ARM_CHARLCD
line and the Linux version on the second line, but that's
still useful.
+config TM1628
+ tristate "TM1628 driver for LED 7/11 segment displays"
+ depends on SPI
+ depends on OF || COMPILE_TEST
+ help
+ Say Y to enable support for Titan Micro Electronics TM1628
+ LED controller.
+
+ It's a 3-wire SPI device controlling a two-dimensional grid of
+ LEDs. Dimming is applied to all outputs through an internal PWM.
+
menuconfig PARPORT_PANEL
tristate "Parallel port LCD/Keypad Panel support"
depends on PARPORT
diff --git a/drivers/auxdisplay/Makefile b/drivers/auxdisplay/Makefile
index 6968ed4d3f0a..7728e17e1c5a 100644
--- a/drivers/auxdisplay/Makefile
+++ b/drivers/auxdisplay/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_HT16K33) += ht16k33.o
obj-$(CONFIG_PARPORT_PANEL) += panel.o
obj-$(CONFIG_LCD2S) += lcd2s.o
obj-$(CONFIG_LINEDISP) += line-display.o
+obj-$(CONFIG_TM1628) += tm1628.o
diff --git a/drivers/auxdisplay/tm1628.c b/drivers/auxdisplay/tm1628.c
new file mode 100644
index 000000000000..4d99a7aa077b
--- /dev/null
+++ b/drivers/auxdisplay/tm1628.c
@@ -0,0 +1,376 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Titan Micro Electronics TM1628 LED controller
+ *
+ * Copyright (c) 2019 Andreas Färber
+ * Copyright (c) 2022 Heiner Kallweit
+ */
+
+#include <linux/ctype.h>
+#include <linux/delay.h>
+#include <linux/leds.h>
+#include <linux/module.h>
+#include <linux/property.h>
+#include <linux/spi/spi.h>
+#include <uapi/linux/map_to_7segment.h>
+
+#define TM1628_CMD_DISPLAY_MODE (0 << 6)
+#define TM1628_DISPLAY_MODE_6_12 0x02
+#define TM1628_DISPLAY_MODE_7_11 0x03
+
+#define TM1628_CMD_DATA (1 << 6)
+#define TM1628_DATA_TEST_MODE BIT(3)
+#define TM1628_DATA_FIXED_ADDR BIT(2)
+#define TM1628_DATA_WRITE_DATA 0x00
+#define TM1628_DATA_READ_DATA 0x02
+
+#define TM1628_CMD_DISPLAY_CTRL (2 << 6)
+#define TM1628_DISPLAY_CTRL_DISPLAY_ON BIT(3)
+
+#define TM1628_CMD_SET_ADDRESS (3 << 6)
+
+#define TM1628_BRIGHTNESS_MAX 7
+#define NUM_LED_SEGS 7
+
+/* Physical limits, depending on the mode the chip may support less */
+#define MAX_GRID_SIZE 7
+#define MAX_SEGMENT_NUM 16
+
+struct tm1628_led {
+ struct led_classdev leddev;
+ struct tm1628 *ctrl;
+ u32 grid;
+ u32 seg;
+};
+
+struct tm1628 {
+ struct spi_device *spi;
+ __le16 data[MAX_GRID_SIZE];
+ struct mutex disp_lock;
+ char text[MAX_GRID_SIZE + 1];
+ u8 segment_mapping[NUM_LED_SEGS];
+ u8 grid[MAX_GRID_SIZE];
+ int grid_size;
+ struct tm1628_led leds[];
+};
+
+/* Command 1: Display Mode Setting */
+static int tm1628_set_display_mode(struct spi_device *spi, u8 grid_mode)
+{
+ const u8 cmd = TM1628_CMD_DISPLAY_MODE | grid_mode;
+
+ return spi_write(spi, &cmd, 1);
+}
+
+/* Command 3: Address Setting */
+static int tm1628_set_address(struct spi_device *spi, u8 offset)
+{
+ const u8 cmd = TM1628_CMD_SET_ADDRESS | (offset * sizeof(__le16));
+
+ return spi_write(spi, &cmd, 1);
+}
+
+/* Command 2: Data Setting */
+static int tm1628_write_data(struct spi_device *spi, unsigned int offset,
+ unsigned int len)
+{
+ struct tm1628 *s = spi_get_drvdata(spi);
+ const u8 cmd = TM1628_CMD_DATA | TM1628_DATA_WRITE_DATA;
+ struct spi_transfer xfers[] = {
+ {
+ .tx_buf = &cmd,
+ .len = 1,
+ },
+ {
+ .tx_buf = (__force void *)(s->data + offset),
+ .len = len * sizeof(__le16),
+ },
+ };
+
+ if (offset + len > MAX_GRID_SIZE) {
+ dev_err(&spi->dev, "Invalid data address offset %u len %u\n",
+ offset, len);
+ return -EINVAL;
+ }
+
+ tm1628_set_address(spi, offset);
+
+ return spi_sync_transfer(spi, xfers, ARRAY_SIZE(xfers));
+}
+
+/* Command 4: Display Control */
+static int tm1628_set_display_ctrl(struct spi_device *spi, bool on)
+{
+ u8 cmd = TM1628_CMD_DISPLAY_CTRL | TM1628_BRIGHTNESS_MAX;
+
+ if (on)
+ cmd |= TM1628_DISPLAY_CTRL_DISPLAY_ON;
+
+ return spi_write(spi, &cmd, 1);
+}
+
+static int tm1628_show_text(struct tm1628 *s)
+{
+ static SEG7_CONVERSION_MAP(map_seg7, MAP_ASCII7SEG_ALPHANUM);
+ int msg_len, i, ret;
+
+ msg_len = strlen(s->text);
+
+ mutex_lock(&s->disp_lock);
+
+ for (i = 0; i < s->grid_size; i++) {
+ int pos = s->grid[i] - 1;
+ int j, char7_raw, char7;
+
+ if (i >= msg_len) {
+ s->data[pos] = 0;
+ continue;
+ }
+
+ char7_raw = map_to_seg7(&map_seg7, s->text[i]);
+
+ for (j = 0, char7 = 0; j < NUM_LED_SEGS; j++) {
+ if (char7_raw & BIT(j))
+ char7 |= BIT(s->segment_mapping[j] - 1);
+ }
+
+ s->data[pos] = cpu_to_le16(char7);
+ }
+
+ ret = tm1628_write_data(s->spi, 0, s->grid_size);
+
+ mutex_unlock(&s->disp_lock);
+
+ return ret;
+}
+
+static int tm1628_led_set_brightness(struct led_classdev *led_cdev,
+ enum led_brightness brightness)
+{
+ struct tm1628_led *led = container_of(led_cdev, struct tm1628_led, leddev);
+ struct tm1628 *s = led->ctrl;
+ int ret, offset = led->grid - 1;
+ __le16 bit = cpu_to_le16(BIT(led->seg - 1));
+
+ mutex_lock(&s->disp_lock);
+
+ if (brightness == LED_OFF)
+ s->data[offset] &= ~bit;
+ else
+ s->data[offset] |= bit;
+
+ ret = tm1628_write_data(s->spi, offset, 1);
+
+ mutex_unlock(&s->disp_lock);
+
+ return ret;
+}
+
+static enum led_brightness tm1628_led_get_brightness(struct led_classdev *led_cdev)
+{
+ struct tm1628_led *led = container_of(led_cdev, struct tm1628_led, leddev);
+ struct tm1628 *s = led->ctrl;
+ int offset = led->grid - 1;
+ __le16 bit = cpu_to_le16(BIT(led->seg - 1));
+ bool on;
+
+ mutex_lock(&s->disp_lock);
+ on = s->data[offset] & bit;
+ mutex_unlock(&s->disp_lock);
+
+ return on ? LED_ON : LED_OFF;
+}
+
+static int tm1628_register_led(struct tm1628 *s, struct fwnode_handle *node,
+ u32 grid, u32 seg, struct tm1628_led *led)
+{
+ struct device *dev = &s->spi->dev;
+ struct led_init_data init_data = { .fwnode = node };
+
+ led->ctrl = s;
+ led->grid = grid;
+ led->seg = seg;
+ led->leddev.max_brightness = LED_ON;
+ led->leddev.brightness_set_blocking = tm1628_led_set_brightness;
+ led->leddev.brightness_get = tm1628_led_get_brightness;
+
+ return devm_led_classdev_register_ext(dev, &led->leddev, &init_data);
+}
+
+static ssize_t display_text_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct tm1628 *s = dev_get_drvdata(dev);
+
+ return sysfs_emit(buf, "%s\n", s->text);
+}
+
+static ssize_t display_text_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct tm1628 *s = dev_get_drvdata(dev);
+ int ret, i;
+
+ for (i = 0; i < count && i < s->grid_size && isprint(buf[i]); i++)
+ s->text[i] = buf[i];
+
+ s->text[i] = '\0';
+
+ ret = tm1628_show_text(s);
+ if (ret < 0)
+ return ret;
+
+ return count;
+}
+
+static const DEVICE_ATTR_RW(display_text);
+
+static int tm1628_spi_probe(struct spi_device *spi)
+{
+ struct fwnode_handle *child;
+ unsigned int num_leds;
+ struct tm1628 *s;
+ int ret, i;
+
+ num_leds = device_get_child_node_count(&spi->dev);
+
+ s = devm_kzalloc(&spi->dev, struct_size(s, leds, num_leds), GFP_KERNEL);
+ if (!s)
+ return -ENOMEM;
+
+ s->spi = spi;
+ spi_set_drvdata(spi, s);
+
+ mutex_init(&s->disp_lock);
+
+ /* According to TM1628 datasheet */
+ msleep(200);
+
+ /* Clear screen */
+ ret = tm1628_write_data(spi, 0, MAX_GRID_SIZE);
+ if (ret)
+ return ret;
+
+ /* For now we support 6x12 mode only. This should be sufficient for most use cases */
+ ret = tm1628_set_display_mode(spi, TM1628_DISPLAY_MODE_6_12);
+ if (ret)
+ return ret;
+
+ ret = tm1628_set_display_ctrl(spi, true);
+ if (ret)
+ return ret;
+
+ num_leds = 0;
+
+ if (!IS_REACHABLE(CONFIG_LEDS_CLASS))
+ goto no_leds;
+
+ device_for_each_child_node(&spi->dev, child) {
+ u32 reg[2];
+
+ ret = fwnode_property_read_u32_array(child, "reg", reg, 2);
+ if (ret) {
+ dev_err(&spi->dev, "Reading %s reg property failed (%d)\n",
+ fwnode_get_name(child), ret);
+ continue;
+ }
+
+ if (reg[0] == 0 || reg[0] > MAX_GRID_SIZE) {
+ dev_err(&spi->dev, "Invalid grid %u at %s\n",
+ reg[0], fwnode_get_name(child));
+ continue;
+ }
+
+ if (reg[1] == 0 || reg[1] > MAX_SEGMENT_NUM) {
+ dev_err(&spi->dev, "Invalid segment %u at %s\n",
+ reg[1], fwnode_get_name(child));
+ continue;
+ }
+
+ ret = tm1628_register_led(s, child, reg[0], reg[1], s->leds + num_leds);
+ if (ret) {
+ dev_err(&spi->dev, "Failed to register LED %s (%d)\n",
+ fwnode_get_name(child), ret);
+ continue;
+ }
+ num_leds++;
+ }
+
+no_leds:
+ ret = device_property_count_u8(&spi->dev, "titanmec,grid");
+ if (ret < 1 || ret > MAX_GRID_SIZE) {
+ dev_err(&spi->dev, "Invalid display length (%d)\n", ret);
+ return -EINVAL;
+ }
+
+ s->grid_size = ret;
+
+ ret = device_property_read_u8_array(&spi->dev, "titanmec,grid", s->grid, s->grid_size);
+ if (ret < 0)
+ return ret;
+
+ for (i = 0; i < s->grid_size; i++) {
+ if (s->grid[i] < 1 || s->grid[i] > s->grid_size)
+ return -EINVAL;
+ }
+
+ ret = device_property_read_u8_array(&spi->dev, "titanmec,segment-mapping",
+ s->segment_mapping, NUM_LED_SEGS);
+ if (ret < 0)
+ return ret;
+
+ for (i = 0; i < NUM_LED_SEGS; i++) {
+ if (s->segment_mapping[i] < 1 || s->segment_mapping[i] > MAX_SEGMENT_NUM)
+ return -EINVAL;
+ }
+
+ ret = device_create_file(&spi->dev, &dev_attr_display_text);
+ if (ret)
+ return ret;
+
+ dev_info(&spi->dev, "Configured display with %u digits and %u symbols\n",
+ s->grid_size, num_leds);
+
+ return 0;
+}
+
+static void tm1628_spi_remove(struct spi_device *spi)
+{
+ device_remove_file(&spi->dev, &dev_attr_display_text);
+ tm1628_set_display_ctrl(spi, false);
+}
+
+static void tm1628_spi_shutdown(struct spi_device *spi)
+{
+ tm1628_set_display_ctrl(spi, false);
+}
+
+static const struct of_device_id tm1628_spi_of_matches[] = {
+ { .compatible = "titanmec,tm1628" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, tm1628_spi_of_matches);
+
+static const struct spi_device_id tm1628_spi_id_table[] = {
+ { "tm1628" },
+ {},
+};
+MODULE_DEVICE_TABLE(spi, tm1628_spi_id_table);
+
+static struct spi_driver tm1628_spi_driver = {
+ .probe = tm1628_spi_probe,
+ .remove = tm1628_spi_remove,
+ .shutdown = tm1628_spi_shutdown,
+ .id_table = tm1628_spi_id_table,
+
+ .driver = {
+ .name = "tm1628",
+ .of_match_table = tm1628_spi_of_matches,
+ },
+};
+module_spi_driver(tm1628_spi_driver);
+
+MODULE_DESCRIPTION("TM1628 LED controller driver");
+MODULE_AUTHOR("Andreas Färber <afaerber@suse.de>");
+MODULE_AUTHOR("Heiner Kallweit <hkallweit1@gmail.com>");
+MODULE_LICENSE("GPL");
--
Armbian

View File

@@ -24,7 +24,7 @@ Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
1 file changed, 77 insertions(+), 63 deletions(-)
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
index 74cbbe16f9ae..51dd5915e506 100644
index a22f2ec95901..25f443a05b75 100644
--- a/sound/soc/codecs/hdmi-codec.c
+++ b/sound/soc/codecs/hdmi-codec.c
@@ -184,84 +184,97 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {

View File

@@ -1,30 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Igor Pecovnik <igorpecovnik@users.noreply.github.com>
Date: Tue, 19 Nov 2019 23:25:39 +0100
Subject: hack builddeb for meson64
Unknown patch. Archeology:
- ff4c1488dab1e07d35923b6f8e33c992d9ca439f: Igor Pecovnik <igorpecovnik@users.noreply.github.com>: 'Move to 5.4.y (#1686)'
---
scripts/package/builddeb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 67cd420dcf89..e445d84b6cbc 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -218,6 +218,11 @@ if [ "$ARCH" != "um" ]; then
create_package linux-libc-dev debian/linux-libc-dev
fi
+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst
+cat >> $tmpdir/DEBIAN/postinst <<EOT
+mkimage -A arm64 -O linux -T kernel -C none -a 0x1080000 -e 0x1080000 -n "Linux" -d /$installed_image_path /boot/uImage > /dev/null 2>&1
+exit 0
+EOT
create_package "$packagename" "$tmpdir"
if [ -n "$BUILD_DEBUG" ] ; then
--
Armbian

View File

@@ -20,10 +20,10 @@ Signed-off-by: Zhang Ning <832666+zhangn1985@users.noreply.github.com>
12 files changed, 176 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index 1431d6a8be04..d06419191e88 100644
index e5f75145b460..3360812a6070 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -73,3 +73,5 @@ dtb-$(CONFIG_ARCH_MESON) += meson-sm1-odroid-hc4.dtb
@@ -76,3 +76,5 @@ dtb-$(CONFIG_ARCH_MESON) += meson-sm1-odroid-hc4.dtb
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

View File

@@ -0,0 +1,48 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Lucas Tanure <tanure@linux.com>
Date: Wed, 12 Apr 2023 18:46:20 -0400
Subject: FROMLIST(v4): of: fdt: Scan /memreserve/ last
Change the scanning /memreserve/ and /reserved-memory node order to fix
Kernel panic on Khadas Vim3 Board.
If /memreserve/ goes first, the memory is reserved, but nomap can't be
applied to the region. So the memory won't be used by Linux, but it is
still present in the linear map as normal memory, which allows
speculation. Legitimate access to adjacent pages will cause the CPU
to end up prefetching into them leading to Kernel panic.
So /reserved-memory node should go first, as it has a more updated
description of the memory regions and can apply flags, like nomap.
Signed-off-by: Lucas Tanure <tanure@linux.com>
---
drivers/of/fdt.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 81508e8b34d2..0252a7189d99 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -626,6 +626,9 @@ void __init early_init_fdt_scan_reserved_mem(void)
if (!initial_boot_params)
return;
+ fdt_scan_reserved_mem();
+ fdt_reserve_elfcorehdr();
+
/* Process header /memreserve/ fields */
for (n = 0; ; n++) {
fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
@@ -634,8 +637,6 @@ void __init early_init_fdt_scan_reserved_mem(void)
memblock_reserve(base, size);
}
- fdt_scan_reserved_mem();
- fdt_reserve_elfcorehdr();
fdt_init_reserved_mem();
}
--
Armbian

View File

@@ -41,7 +41,7 @@ index e347b435a038..8992c592a896 100644
obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o
diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
index 2ef2660f5818..699624ea6835 100644
index d75db5076793..0efab0b56697 100644
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
@@ -1633,6 +1633,7 @@ static const struct spi_nor_manufacturer *manufacturers[] = {
@@ -53,10 +53,10 @@ index 2ef2660f5818..699624ea6835 100644
static const struct flash_info spi_nor_generic_flash = {
diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h
index 958cd143c934..21c195a72793 100644
index 75ec2e560424..8e2c23349003 100644
--- a/drivers/mtd/spi-nor/core.h
+++ b/drivers/mtd/spi-nor/core.h
@@ -629,6 +629,7 @@ extern const struct spi_nor_manufacturer spi_nor_sst;
@@ -633,6 +633,7 @@ extern const struct spi_nor_manufacturer spi_nor_sst;
extern const struct spi_nor_manufacturer spi_nor_winbond;
extern const struct spi_nor_manufacturer spi_nor_xilinx;
extern const struct spi_nor_manufacturer spi_nor_xmc;

View File

@@ -33,7 +33,7 @@ Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 97a0f8faea6e..d5f256e7a144 100644
index 5991cf2a63a3..d38deb95fb36 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1427,9 +1427,8 @@ static int hub_configure(struct usb_hub *hub,

View File

@@ -12,7 +12,7 @@ Signed-off-by: Yuntian Zhang <yt@radxa.com>
2 files changed, 25 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
index c063a144e0e7..50d6065fdb6e 100644
index 42027c78c8de..cc549f52219d 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
@@ -562,6 +562,14 @@ mux {
@@ -30,7 +30,7 @@ index c063a144e0e7..50d6065fdb6e 100644
mclk0_a_pins: mclk0-a {
mux {
groups = "mclk0_a";
@@ -2006,6 +2014,14 @@ mux {
@@ -2005,6 +2013,14 @@ mux {
bias-disable;
};
};

View File

@@ -0,0 +1,125 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Christian Hewitt <christianshewitt@gmail.com>
Date: Tue, 18 Jan 2022 15:09:12 +0000
Subject: WIP: arm64: dts: meson: set p212/p23x/q20x SDIO to 100MHz + add UHS
SDIO capabilities
WIP: arm64: dts: meson: add UHS SDIO capabilities to p212/p23x/q20x
Add UHS capabilities to the SDIO node to enable 100MHz speeds.
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
WIP: arm64: dts: meson: set p212/p23x/q20x SDIO to 100MHz
Amlogic datasheets describe 50MHz max-frequency for SDIO on GXL/GXM but
real-world tests on an assortment of GXL and GXM boards show noteable
increases in throughput when max-frequency is 100MHz, so let's use it.
Before results from a p231 device:
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[ 5] local 192.168.0.41 port 42550 connected to 192.168.0.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 8.84 MBytes 74.2 Mbits/sec
[ 5] 1.00-2.00 sec 9.60 MBytes 80.5 Mbits/sec
[ 5] 2.00-3.00 sec 9.07 MBytes 76.1 Mbits/sec
[ 5] 3.00-4.00 sec 9.14 MBytes 76.6 Mbits/sec
[ 5] 4.00-5.00 sec 9.26 MBytes 77.7 Mbits/sec
[ 5] 5.00-6.00 sec 9.08 MBytes 76.2 Mbits/sec
[ 5] 6.00-7.00 sec 9.11 MBytes 76.4 Mbits/sec
[ 5] 7.00-8.00 sec 8.65 MBytes 72.5 Mbits/sec
[ 5] 8.00-9.00 sec 9.24 MBytes 77.5 Mbits/sec
[ 5] 9.00-10.00 sec 8.57 MBytes 71.9 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.27 sec 94.1 MBytes 76.8 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 90.6 MBytes 76.0 Mbits/sec receiver
clock: 50000000 Hz
actual clock: 50000000 Hz
vdd: 21 (3.3 ~ 3.4 V)
bus mode: 2 (push-pull)
chip select: 0 (don't care)
power mode: 2 (on)
bus width: 2 (4 bits)
timing spec: 2 (sd high-speed)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)
After results from a p231 device:
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[ 5] local 192.168.0.41 port 58534 connected to 192.168.0.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 12.6 MBytes 106 Mbits/sec
[ 5] 1.00-2.00 sec 13.0 MBytes 109 Mbits/sec
[ 5] 2.00-3.00 sec 12.8 MBytes 107 Mbits/sec
[ 5] 3.00-4.00 sec 13.2 MBytes 111 Mbits/sec
[ 5] 4.00-5.00 sec 12.4 MBytes 104 Mbits/sec
[ 5] 5.00-6.00 sec 11.2 MBytes 93.9 Mbits/sec
[ 5] 6.00-7.00 sec 12.3 MBytes 103 Mbits/sec
[ 5] 7.00-8.00 sec 12.3 MBytes 103 Mbits/sec
[ 5] 8.00-9.00 sec 12.5 MBytes 105 Mbits/sec
[ 5] 9.00-10.00 sec 12.3 MBytes 103 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.22 sec 127 MBytes 104 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 125 MBytes 105 Mbits/sec receiver
clock: 100000000 Hz
actual clock: 100000000 Hz
vdd: 21 (3.3 ~ 3.4 V)
bus mode: 2 (push-pull)
chip select: 0 (don't care)
power mode: 2 (on)
bus width: 2 (4 bits)
timing spec: 6 (sd uhs SDR104)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
---
arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi | 6 +++++-
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi
index dafc841f7c16..b0d008fc5f7a 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi
@@ -259,7 +259,11 @@ &sd_emmc_a {
bus-width = <4>;
cap-sd-highspeed;
- max-frequency = <50000000>;
+ sd-uhs-sdr12;
+ sd-uhs-sdr25;
+ sd-uhs-sdr50;
+ sd-uhs-sdr104;
+ max-frequency = <100000000>;
non-removable;
disable-wp;
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi
index 05cb2f5e5c36..ea5ee3e7b084 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dtsi
@@ -113,7 +113,11 @@ &sd_emmc_a {
bus-width = <4>;
cap-sd-highspeed;
- max-frequency = <50000000>;
+ sd-uhs-sdr12;
+ sd-uhs-sdr25;
+ sd-uhs-sdr50;
+ sd-uhs-sdr104;
+ max-frequency = <100000000>;
non-removable;
disable-wp;
--
Armbian