mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
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:
committed by
igorpecovnik
parent
7fa05a9b69
commit
09e82fe25e
@@ -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
|
||||
|
||||
392
patch/kernel/archive/meson64-6.2/add-board-t95z.patch
Normal file
392
patch/kernel/archive/meson64-6.2/add-board-t95z.patch
Normal 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;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+ðmac {
|
||||
+ pinctrl-0 = <ð_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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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[] = {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user