SpacemiT K1: Musebook: Add to current branch

Update board conf
Drop in k1-musebook.dts
Add needed modules and misc to current defconfig

Signed-off-by: Patrick Yavitz <pyavitz@gmail.com>
This commit is contained in:
Patrick Yavitz
2026-09-07 16:38:42 -04:00
committed by c0rnelius
parent a9ff8fb6d5
commit 652cbc06a0
7 changed files with 1179 additions and 10 deletions
+2 -1
View File
@@ -4,7 +4,7 @@ BOARDFAMILY="spacemit"
BOARD_MAINTAINER="pyavitz"
INTRODUCED="2024"
BOARD_VENDOR="spacemit"
KERNEL_TARGET="legacy"
KERNEL_TARGET="legacy,current"
PACKAGE_LIST_BOARD="rfkill bluetooth bluez bluez-tools"
MODULES_BLACKLIST="rtw89_8852be"
@@ -38,6 +38,7 @@ function post_family_tweaks_bsp__musebook_extras() {
function pre_install_kernel_debs__extra_boot_args() {
display_alert "$BOARD" "Add extra boot arguments" "info"
run_host_command_logged echo "bootlogo=true" >> "${SDCARD}"/boot/armbianEnv.txt
run_host_command_logged echo "extraargs=net.ifnames=0 plymouth.prefer-fbcon clk_ignore_unused" >> "${SDCARD}"/boot/armbianEnv.txt
return 0
}
+54 -9
View File
@@ -114,7 +114,10 @@ CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_CDG=m
CONFIG_IPV6_VTI=m
CONFIG_IPV6_SIT=m
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_GRE=m
CONFIG_NETFILTER=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_NETLINK_HOOK=m
@@ -590,6 +593,7 @@ CONFIG_WIREGUARD=m
CONFIG_MACVLAN=m
CONFIG_IPVLAN=m
CONFIG_VXLAN=m
CONFIG_GENEVE=m
CONFIG_PFCP=m
CONFIG_AMT=m
CONFIG_MACSEC=m
@@ -753,6 +757,7 @@ CONFIG_RTW89_8852BTE=m
CONFIG_RTW89_8852CE=m
CONFIG_RTW89_8922AE=m
CONFIG_RTL8852BS=m
CONFIG_RTL8852BE=m
# CONFIG_WLAN_VENDOR_RSI is not set
# CONFIG_WLAN_VENDOR_SILABS is not set
# CONFIG_WLAN_VENDOR_ST is not set
@@ -948,12 +953,20 @@ CONFIG_REGULATOR_SPACEMIT=y
CONFIG_RC_CORE=y
CONFIG_RC_DEVICES=y
CONFIG_IR_SPACEMIT=y
CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CH7322=m
CONFIG_CEC_GPIO=m
CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_RAINSHADOW_CEC=m
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# CONFIG_DVB_NET is not set
# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_MEDIA_USB_SUPPORT=y
@@ -990,7 +1003,13 @@ CONFIG_DVB_PLATFORM_DRIVERS=y
CONFIG_V4L_MEM2MEM_DRIVERS=y
CONFIG_VIDEO_MEM2MEM_DEINTERLACE=y
CONFIG_VIDEO_MUX=y
CONFIG_VIDEO_LINLON_K1X=m
CONFIG_VIDEO_LINLON_K1X=y
CONFIG_SPACEMIT_K1X_CAMERA_V2=y
CONFIG_SPACEMIT_K1X_VI_V2=m
CONFIG_SPACEMIT_K1X_VI_IOMMU=y
CONFIG_SPACEMIT_K1X_ISP_V2=m
CONFIG_SPACEMIT_K1X_CPP_V2=m
CONFIG_SPACEMIT_K1X_SENSOR_V2=m
CONFIG_DVB_M88DS3103=m
CONFIG_DVB_AF9013=m
CONFIG_DVB_RTL2830=m
@@ -1008,14 +1027,38 @@ CONFIG_DRM=y
CONFIG_DRM_SPACEMIT=y
CONFIG_SPACEMIT_MIPI_PANEL=y
CONFIG_SPACEMIT_HDMI=y
# CONFIG_DRM_LT8911EXB is not set
# CONFIG_DRM_LT9711 is not set
CONFIG_POWERVR_ROGUE=y
CONFIG_FB=y
CONFIG_FB_SIMPLE=m
CONFIG_FB_MODE_HELPERS=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_L4F00242T03=m
CONFIG_LCD_LMS283GF05=m
CONFIG_LCD_LTV350QV=m
CONFIG_LCD_ILI922X=m
CONFIG_LCD_TDO24M=m
CONFIG_LCD_VGG2432A4=m
CONFIG_LCD_PLATFORM=m
CONFIG_LCD_AMS369FG06=m
CONFIG_LCD_LMS501KF03=m
CONFIG_LCD_HX8357=m
CONFIG_LCD_OTM3225A=m
CONFIG_BACKLIGHT_KTD253=m
CONFIG_BACKLIGHT_KTD2801=m
CONFIG_BACKLIGHT_KTZ8866=m
CONFIG_BACKLIGHT_PWM=y
CONFIG_BACKLIGHT_QCOM_WLED=m
CONFIG_BACKLIGHT_ADP8860=m
CONFIG_BACKLIGHT_ADP8870=m
CONFIG_BACKLIGHT_LM3509=m
CONFIG_BACKLIGHT_LM3630A=m
CONFIG_BACKLIGHT_LM3639=m
CONFIG_BACKLIGHT_LP855X=m
CONFIG_BACKLIGHT_MP3309C=m
CONFIG_BACKLIGHT_GPIO=y
CONFIG_BACKLIGHT_LV5207LP=m
CONFIG_BACKLIGHT_BD6107=m
CONFIG_BACKLIGHT_ARCXCNN=m
CONFIG_BACKLIGHT_LED=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
@@ -1146,6 +1189,12 @@ CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_OF_K1X=y
CONFIG_SCSI_UFSHCD=y
CONFIG_SCSI_UFS_BSG=y
CONFIG_SCSI_UFS_HWMON=y
CONFIG_SCSI_UFSHCD_PCI=y
CONFIG_SCSI_UFSHCD_PLATFORM=y
CONFIG_SCSI_UFS_CDNS_PLATFORM=m
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGER_TIMER=y
@@ -1235,8 +1284,6 @@ CONFIG_SPACEMIT_DDRBW=y
CONFIG_CHIP_MEDIA_JPU=y
CONFIG_SPACEMIT_V2D=y
CONFIG_SPACEMIT_RFKILL=y
CONFIG_PM_DEVFREQ=y
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
CONFIG_DEVFREQ_GOV_PERFORMANCE=m
CONFIG_DEVFREQ_GOV_POWERSAVE=m
CONFIG_DEVFREQ_GOV_USERSPACE=m
@@ -1677,7 +1724,7 @@ CONFIG_PWM=y
CONFIG_PWM_CLK=m
CONFIG_PWM_DWC=m
CONFIG_PWM_GPIO=m
CONFIG_PWM_PXA=m
CONFIG_PWM_PXA=y
CONFIG_ACLINT_SSWI=y
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=m
@@ -1776,8 +1823,6 @@ CONFIG_DMA_CMA=y
CONFIG_PRINTK_TIME=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=8
CONFIG_CONSOLE_LOGLEVEL_QUIET=8
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=60
@@ -0,0 +1,36 @@
From ffbdf2edbb2fd998276b01ac447c6775daacd741 Mon Sep 17 00:00:00 2001
From: SuperKali <hello@superkali.me>
Date: Mon, 7 Sep 2026 08:41:12 -0400
Subject: [PATCH] drm: spacemit: lt8911exb: pick up the panel backlight from
the DT
The driver registers a drm_panel but never calls drm_panel_of_backlight(),
so panel->backlight stays NULL and drm_panel_enable() has nothing to
unblank. pwm_bl leaves the backlight at FB_BLANK_POWERDOWN whenever the
node carries a phandle, which dtc -@ always adds, so the panel came up lit
by nothing at duty 0. Bind at enable time: pwm_bl registers after this
bridge, and failing the probe on -EPROBE_DEFER would stall the DSI bind.
Signed-off-by: SuperKali <hello@superkali.me>
---
drivers/gpu/drm/spacemit/lt8911exb.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/spacemit/lt8911exb.c b/drivers/gpu/drm/spacemit/lt8911exb.c
index 3ca4762bf..86e0fb8d5 100644
--- a/drivers/gpu/drm/spacemit/lt8911exb.c
+++ b/drivers/gpu/drm/spacemit/lt8911exb.c
@@ -1124,6 +1124,10 @@ static int lt8911exb_panel_enable(struct drm_panel *panel)
DRM_INFO("%s()\n", __func__);
+ /* pwm_bl registers after this bridge, so bind the backlight here */
+ if (!panel->backlight)
+ drm_panel_of_backlight(panel);
+
schedule_delayed_work(&lt8911exb->init_work,
msecs_to_jiffies(100));
lt8911exb->init_work_pending = true;
--
2.53.0
@@ -0,0 +1,56 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: SuperKali <hello@superkali.me>
Date: Mon, 24 Aug 2026 12:08:25 +0200
Subject: drm/img-rogue: pick the GPU clock from the DT OPP table
The DDK pins the core at a hardcoded 614 MHz while the K1 rates the
BXE-2-32 at 819 MHz. Read the highest OPP the device tree advertises
instead, so the frequency is described by the hardware description and
not by a constant. Boards shipping no table keep the vendor default.
Signed-off-by: SuperKali <hello@superkali.me>
---
drivers/gpu/drm/img-rogue/spacemit/spacemit_init.c | 20 +++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/img-rogue/spacemit/spacemit_init.c b/drivers/gpu/drm/img-rogue/spacemit/spacemit_init.c
index 111111111111..222222222222 100644
--- a/drivers/gpu/drm/img-rogue/spacemit/spacemit_init.c
+++ b/drivers/gpu/drm/img-rogue/spacemit/spacemit_init.c
@@ -26,6 +26,24 @@
static struct st_context *g_platform = NULL;
+/* highest frequency the DT advertises for this GPU, vendor default when it says nothing */
+static unsigned long spacemit_gpu_max_rate(struct device *dev)
+{
+ struct dev_pm_opp *opp;
+ unsigned long rate = ULONG_MAX;
+
+ if (devm_pm_opp_of_add_table(dev))
+ return RGX_ST_CORE_CLOCK_SPEED;
+
+ opp = dev_pm_opp_find_freq_floor(dev, &rate);
+ if (IS_ERR(opp))
+ return RGX_ST_CORE_CLOCK_SPEED;
+
+ dev_pm_opp_put(opp);
+
+ return rate;
+}
+
#if defined(SUPPORT_LINUX_DVFS) && !defined(NO_HARDWARE)
void stSetFrequency(IMG_HANDLE hSysData, IMG_UINT32 ui32Frequency)
{
@@ -342,7 +360,7 @@ struct st_context *RgxStInit(PVRSRV_DEVICE_CONFIG* psDevConfig)
reset_control_deassert(platform->gpu_reset);
clk_prepare_enable(platform->gpu_clk);
- clk_set_rate(platform->gpu_clk, RGX_ST_CORE_CLOCK_SPEED);
+ clk_set_rate(platform->gpu_clk, spacemit_gpu_max_rate(dev));
if (psRGXData && psRGXData->psRGXTimingInfo)
{
--
Armbian
@@ -0,0 +1,98 @@
From 1e130c0596fe0bf55d2a9731cae85af4a6417986 Mon Sep 17 00:00:00 2001
From: Patrick Yavitz <pyavitz@gmail.com>
Date: Fri, 5 Dec 2025 16:31:44 -0500
Subject: [PATCH] Fixup rtl8852be sha256
Signed-off-by: Patrick Yavitz <pyavitz@gmail.com>
---
.../net/wireless/realtek/rtl8852be/core/crypto/sha256-prf.c | 4 ++++
drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.c | 4 ++++
drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.h | 4 ++++
3 files changed, 12 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256-prf.c b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256-prf.c
index 642b38ff618c..df92ab3c27e8 100644
--- a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256-prf.c
+++ b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256-prf.c
@@ -28,12 +28,14 @@
* This function is used to derive new, cryptographically separate keys from a
* given key.
*/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
int sha256_prf(const u8 *key, size_t key_len, const char *label,
const u8 *data, size_t data_len, u8 *buf, size_t buf_len)
{
return sha256_prf_bits(key, key_len, label, data, data_len, buf,
buf_len * 8);
}
+#endif
/**
@@ -52,6 +54,7 @@ int sha256_prf(const u8 *key, size_t key_len, const char *label,
* significant 1-7 bits of the last octet in the output are not part of the
* requested output.
*/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
int sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
const u8 *data, size_t data_len, u8 *buf,
size_t buf_len_bits)
@@ -107,3 +110,4 @@ int sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
return 0;
}
+#endif
\ No newline at end of file
diff --git a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.c b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.c
index ea5d9e3f2dd6..5f1c1441f2a4 100644
--- a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.c
+++ b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.c
@@ -23,6 +23,7 @@
* @mac: Buffer for the hash (32 bytes)
* Returns: 0 on success, -1 on failure
*/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
const u8 *addr[], const size_t *len, u8 *mac)
{
@@ -86,6 +87,7 @@ int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
_len[1] = SHA256_MAC_LEN;
return sha256_vector(2, _addr, _len, mac);
}
+#endif
/**
@@ -97,8 +99,10 @@ int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
* @mac: Buffer for the hash (32 bytes)
* Returns: 0 on success, -1 on failure
*/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
int hmac_sha256(const u8 *key, size_t key_len, const u8 *data,
size_t data_len, u8 *mac)
{
return hmac_sha256_vector(key, key_len, 1, &data, &data_len, mac);
}
+#endif
diff --git a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.h b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.h
index 5219022edd7d..a086c8b4739d 100644
--- a/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.h
+++ b/drivers/net/wireless/realtek/rtl8852be/core/crypto/sha256.h
@@ -11,10 +11,14 @@
#define SHA256_MAC_LEN 32
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0))
int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
const u8 *addr[], const size_t *len, u8 *mac);
+#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 18, 0))
int hmac_sha256(const u8 *key, size_t key_len, const u8 *data,
size_t data_len, u8 *mac);
+#endif
int sha256_prf(const u8 *key, size_t key_len, const char *label,
const u8 *data, size_t data_len, u8 *buf, size_t buf_len);
int sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
--
2.47.3
@@ -12,6 +12,7 @@ dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-x_fpga.dtb k1-x_fpga_1x4.dtb k1-x_fpga_2x2.
obj-$(CONFIG_BUILTIN_DTB) += $(addsuffix .o, $(dtb-y))
dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-bananapi-f3.dtb
dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-musebook.dtb
dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-musepi-pro.dtb
dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-orangepi-r2s.dtb
dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-orangepi-rv2.dtb
@@ -0,0 +1,932 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/* Copyright (c) 2023 Spacemit, Inc */
/dts-v1/;
#include "k1-x.dtsi"
#include "k1-x-efuse.dtsi"
#include "k1-x_pinctrl.dtsi"
#include "lcd/lcd_lt8911_edp_1920x1080.dtsi"
#include "k1-x-lcd.dtsi"
#include "k1-x-hdmi.dtsi"
#include "k1-x_opp_table.dtsi"
#include "k1-x_thermal_cooling.dtsi"
/ {
model = "SpacemiT MUSE Book";
charger: charger@b {
compatible = "sbs,sbs-charger-virtual";
battery-name = "sbs-5-000b";
power-supplies = <&battery>;
};
chosen {
bootargs = "console=ttyS0,115200n8 swiotlb=65536 driver_async_probe=spacemit-hdmi-drv,i2c-spacemit-k1x,ri2c-spacemit-k1x,k1xccic,sdhci-spacemit,k1x-dwc-pcie,pxa2xx-uart rdinit=/init";
stdout-path = "serial0:115200n8";
};
cpus: cpus {
#address-cells = <1>;
#size-cells = <0>;
timebase-frequency = <24000000>;
cpu_0: cpu@0 {
cpu-ai = "true";
};
cpu_1: cpu@1 {
cpu-ai = "true";
};
cpu_2: cpu@2 {
reg = <2>;
cpu-ai = "true";
};
cpu_3: cpu@3 {
reg = <3>;
cpu-ai = "true";
};
cpu-map {
cluster0 {
core0 {
cpu = <&cpu_0>;
};
core1 {
cpu = <&cpu_1>;
};
core2 {
cpu = <&cpu_2>;
};
core3 {
cpu = <&cpu_3>;
};
};
cluster1 {
core0 {
cpu = <&cpu_4>;
};
core1 {
cpu = <&cpu_5>;
};
core2 {
cpu = <&cpu_6>;
};
core3 {
cpu = <&cpu_7>;
};
};
};
};
dc_12v: dc-12v {
compatible = "regulator-fixed";
regulator-name = "dc_12v";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
};
memory@0 {
device_type = "memory";
reg = <0x0 0x00000000 0x0 0x80000000>;
};
memory@100000000 {
device_type = "memory";
reg = <0x1 0x00000000 0x0 0x80000000>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
linux,cma {
compatible = "shared-dma-pool";
/* alloc memory from 0x40000000~0x80000000 */
alloc-ranges = <0 0x40000000 0 0x40000000>;
/* size of cma buffer is 384MByte */
size = <0 0x18000000>;
/* start address is 1Mbyte aligned */
alignment = <0x0 0x100000>;
linux,cma-default;
/* besides hardware, dma for ex. buffer can be used by memory management */
reusable;
};
/* reserved 384K for dpu, including mmu table(256K) and cmdlist(128K) */
dpu_resv: dpu_reserved@2ff40000 {
compatible = "shared-dma-pool";
reg = <0x0 0x2ff40000 0x0 0x000C0000>;
no-map;
};
};
rf_pwrseq: rf-pwrseq {
compatible = "spacemit,rf-pwrseq";
status = "okay";
wlan_pwrseq: wlan-pwrseq {
compatible = "spacemit,wlan-pwrseq";
regon-gpios = <&gpio 76 0>;
};
bt_pwrseq: bt-pwrseq {
compatible = "spacemit,bt-pwrseq";
reset-gpios = <&gpio 78 0>;
};
};
spacemit_lid:spacemit_lid {
compatible = "spacemit,k1x-lid";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hall_wakeup>;
lid-gpios = <&gpio 74 0>;
interrupts-extended = <&gpio 74 1
&pinctrl 300>;
};
vcc4v0_baseboard: vcc4v0-baseboard {
compatible = "regulator-fixed";
regulator-name = "vcc4v0_baseboard";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <4000000>;
regulator-max-microvolt = <4000000>;
vin-supply = <&dc_12v>;
};
};
&pinctrl {
pinctrl_uart3_0: uart3_0_grp {
pinctrl-single,pins =<
K1X_PADCONF(GPIO_81, MUX_MODE2, (EDGE_NONE | PULL_UP | PAD_1V8_DS2)) /* uart3_txd */
K1X_PADCONF(GPIO_82, MUX_MODE2, (EDGE_NONE | PULL_UP | PAD_1V8_DS2)) /* uart3_rxd */
>;
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart0_2>;
status = "okay";
};
&uart3 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart3_0>;
status = "okay";
};
&pwm14 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm14_1>;
status = "okay";
};
&dpu_online2_dsi {
memory-region = <&dpu_resv>;
spacemit-dpu-bitclk = <933000000>;
dsi_1v2-supply = <&ldo_5>;
vin-supply-names = "dsi_1v2";
status = "okay";
};
&dsi2 {
status = "okay";
force-attached = "lcd_lt8911_edp_1920x1080";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
dsi1_output: endpoint@1 {
reg = <1>;
remote-endpoint = <&lt8911exb_in>;
};
};
};
edp_panel: panel@0 {
status = "ok"
compatible = "spacemit,edp-panel";
};
};
&lcds {
status = "okay";
};
&dpu_online2_hdmi {
memory-region = <&dpu_resv>;
status = "okay";
};
&hdmi{
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hdmi_0>;
status = "okay";
};
&i2c2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2_0>;
spacemit,i2c-fast-mode;
status = "okay";
eeprom@50{
compatible = "atmel,24c02";
reg = <0x50>;
#address-cells = <1>;
#size-cells = <1>;
power-domains = <&power K1X_PMU_DUMMY_PWR_DOMAIN>;
status = "okay";
mac_address0: mac_address0@0 {
reg = <0x0 6>;
};
mac_address1: mac_address1@6 {
reg = <0x6 6>;
};
};
es8326: es8326@19{
compatible = "everest,es8326";
reg = <0x19>;
#sound-dai-cells = <0>;
interrupt-parent = <&gpio>;
interrupts = <126 1>;
spk-ctl-gpio = <&gpio 127 0>;
everest,jack-detect-inverted;
everest,mic1-src = [44];
everest,mic2-src = [66];
status = "okay";
};
};
&i2c4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c4_2>;
status = "okay";
touchpad: hid@2d {
compatible = "hid-over-i2c";
reg = <0x2d>;
hid-descr-addr = <0x0020>;
post-power-on-delay-ms = <200>;
interrupt-parent = <&gpio>;
interrupts = <50 2>;
status = "okay";
};
};
&i2c5 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c5_1>;
status = "okay";
battery: battery@b {
compatible = "sbs,sbs-battery";
reg = <0x0b>;
sbs,i2c-retry-count = <2>;
sbs,poll-retry-count = <1>;
};
};
&i2c6 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c6_2>;
clock-frequency = <100000>;
status = "okay";
lt8911exb_i2c@29 {
compatible = "lontium,lt8911exb";
reg = <0x29>;
reset-gpio = <&gpio 114 0>;
bl-gpio = <&gpio 75 0>;
enable-gpio = <&gpio 83 0>;
standby-gpio = <&gpio 92 0>;
status = "okay";
port {
lt8911exb_in: endpoint {
remote-endpoint = <&dsi1_output>;
};
};
};
};
&i2c8 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c8>;
status = "okay";
spm8821@41 {
compatible = "spacemit,spm8821";
reg = <0x41>;
interrupt-parent = <&intc>;
interrupts = <64>;
status = "okay";
vcc_sys-supply = <&vcc4v0_baseboard>;
dcdc5-supply = <&dcdc_5>;
regulators {
compatible = "pmic,regulator,spm8821";
/* buck */
dcdc_1: DCDC_REG1 {
regulator-name = "dcdc1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <650000>;
};
};
dcdc_2: DCDC_REG2 {
regulator-name = "dcdc2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
dcdc_3: DCDC_REG3 {
regulator-name = "dcdc3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <1800000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
dcdc_4: DCDC_REG4 {
regulator-name = "dcdc4";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3300000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
dcdc_5: DCDC_REG5 {
regulator-name = "dcdc5";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
dcdc_6: DCDC_REG6 {
regulator-name = "dcdc6";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3450000>;
regulator-ramp-delay = <5000>;
regulator-always-on;
};
/* aldo */
ldo_1: LDO_REG1 {
regulator-name = "ldo1";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_2: LDO_REG2 {
regulator-name = "ldo2";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_3: LDO_REG3 {
regulator-name = "ldo3";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_4: LDO_REG4 {
regulator-name = "ldo4";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
/* dldo */
ldo_5: LDO_REG5 {
regulator-name = "ldo5";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_6: LDO_REG6 {
regulator-name = "ldo6";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_7: LDO_REG7 {
regulator-name = "ldo7";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <500000>;
};
};
ldo_8: LDO_REG8 {
regulator-name = "ldo8";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-always-on;
};
ldo_9: LDO_REG9 {
regulator-name = "ldo9";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
};
ldo_10: LDO_REG10 {
regulator-name = "ldo10";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
regulator-always-on;
};
ldo_11: LDO_REG11 {
regulator-name = "ldo11";
regulator-min-microvolt = <500000>;
regulator-max-microvolt = <3400000>;
};
sw_1: SWITCH_REG1 {
regulator-name = "switch1";
};
};
pmic_pinctrl: pinctrl {
compatible = "pmic,pinctrl,spm8821";
gpio-controller;
#gpio-cells = <2>;
spacemit,npins = <6>;
/**
* led_pins: led-pins {
* pins = "PIN3";
* function = "sleep";
* bias-disable = <0>;
* drive-open-drain = <0x1>;
* };
*/
};
pwr_key: key {
compatible = "pmic,pwrkey,spm8821";
};
ext_rtc: rtc {
compatible = "pmic,rtc,spm8821";
};
ext_adc: adc {
compatible = "pmic,adc,spm8821";
};
};
};
&pinctrl {
pinctrl-single,gpio-range = <
&range GPIO_49 2 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
&range GPIO_58 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_63 2 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_65 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_66 2 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
&range PRI_TDI 2 (MUX_MODE1 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range PRI_TCK 1 (MUX_MODE1 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range PRI_TDO 1 (MUX_MODE1 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_76 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
&range GPIO_78 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
&range GPIO_80 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_3V_DS4)
&range GPIO_81 3 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_90 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_91 2 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range DVL0 2 (MUX_MODE1 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_110 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_114 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_115 2 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_123 1 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
&range GPIO_124 1 (MUX_MODE0 | EDGE_NONE | PULL_UP | PAD_1V8_DS2)
&range GPIO_125 3 (MUX_MODE0 | EDGE_NONE | PULL_DOWN | PAD_1V8_DS2)
>;
pinctrl_rcpu: pinctrl_rcpu_grp {
pinctrl-single,pins = <
K1X_PADCONF(GPIO_47, MUX_MODE1, (EDGE_NONE | PULL_UP | PAD_3V_DS4)) /* r_uart0_tx */
K1X_PADCONF(GPIO_48, MUX_MODE1, (EDGE_NONE | PULL_UP | PAD_3V_DS4)) /* r_uart0_rx */
>;
};
pinctrl_hall_wakeup: hall_wakeup_grp {
pinctrl-single,pins =<
K1X_PADCONF(GPIO_74, MUX_MODE0, (EDGE_FALL | EDGE_RISE | PULL_DOWN | PAD_3V_DS2)) /* hall edge detect */
>;
};
};
&gpio{
gpio-ranges = <
&pinctrl 49 GPIO_49 2
&pinctrl 58 GPIO_58 1
&pinctrl 63 GPIO_63 5
&pinctrl 70 PRI_TDI 4
&pinctrl 76 GPIO_76 1
&pinctrl 78 GPIO_78 1
&pinctrl 80 GPIO_80 4
&pinctrl 90 GPIO_90 3
&pinctrl 96 DVL0 2
&pinctrl 110 GPIO_110 1
&pinctrl 114 GPIO_114 3
&pinctrl 123 GPIO_123 5
>;
};
/* SD */
&sdhci0 {
pinctrl-names = "default","fast";
pinctrl-0 = <&pinctrl_mmc1>;
pinctrl-1 = <&pinctrl_mmc1_fast>;
bus-width = <4>;
cd-gpios = <&gpio 80 0>;
cd-inverted;
vmmc-supply = <&dcdc_4>;
vqmmc-supply = <&ldo_1>;
no-mmc;
no-sdio;
spacemit,sdh-host-caps-disable = <(
MMC_CAP_UHS_SDR12 |
MMC_CAP_UHS_SDR25
)>;
spacemit,sdh-quirks = <(
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
)>;
spacemit,sdh-quirks2 = <(
SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_BROKEN_PHY_MODULE |
SDHCI_QUIRK2_SET_AIB_MMC
)>;
spacemit,aib_mmc1_io_reg = <0xD401E81C>;
spacemit,apbc_asfar_reg = <0xD4015050>;
spacemit,apbc_assar_reg = <0xD4015054>;
spacemit,rx_dline_reg = <0x0>;
spacemit,tx_dline_reg = <0x0>;
spacemit,tx_delaycode = <0x7f>;
spacemit,rx_tuning_limit = <50>;
spacemit,sdh-freq = <204800000>;
status = "okay";
};
/* SDIO */
&sdhci1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_mmc2>;
bus-width = <4>;
non-removable;
vqmmc-supply = <&dcdc_3>;
no-mmc;
no-sd;
keep-power-in-suspend;
/* bcmdhd use private oob solution rather than dat1/standard wakeup */
/delete-property/ enable-sdio-wakeup;
spacemit,sdh-host-caps-disable = <(
MMC_CAP_UHS_DDR50 |
MMC_CAP_NEEDS_POLL
)>;
spacemit,sdh-quirks = <(
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
)>;
spacemit,sdh-quirks2 = <(
SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_BROKEN_PHY_MODULE
)>;
spacemit,rx_dline_reg = <0x0>;
spacemit,rx_tuning_limit = <50>;
spacemit,sdh-freq = <375000000>;
status = "okay";
};
/* eMMC */
&sdhci2 {
bus-width = <8>;
non-removable;
mmc-hs400-1_8v;
mmc-hs400-enhanced-strobe;
no-sd;
no-sdio;
spacemit,sdh-quirks = <(
SDHCI_QUIRK_BROKEN_CARD_DETECTION |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
)>;
spacemit,sdh-quirks2 = <(
SDHCI_QUIRK2_PRESET_VALUE_BROKEN
)>;
spacemit,sdh-freq = <375000000>;
status = "okay";
};
&usbphy {
status = "okay";
};
&udc {
spacemit,udc-mode = <MV_USB_MODE_OTG>;
status = "okay";
};
&ehci {
spacemit,udc-mode = <MV_USB_MODE_OTG>;
status = "okay";
};
&otg {
usb-role-switch;
role-switch-user-control;
role-switch-default-mode = "host";
status = "okay";
};
&usbphy1 {
status = "okay";
};
&udc1 {
/*spacemit,udc-mode = <MV_USB_MODE_UDC>;*/
spacemit,udc-mode = <MV_USB_MODE_OTG>;
status = "disabled";
};
&ehci1 {
status = "okay";
};
&otg1 {
usb-role-switch;
role-switch-user-control;
spacemit,reset-on-resume;
role-switch-default-mode = "host";
vbus-gpios = <&gpio 123 0>;
status = "disabled";
};
&usb2phy {
status = "okay";
};
&combphy {
status = "okay";
};
&usb3hub {
hub-gpios = <&gpio 123 0>; /* usb3 hub en */
suspend_power_on;
status = "okay";
};
&usbdrd3 {
status = "okay";
dwc3@c0a00000 {
dr_mode = "host";
phy_type = "utmi";
snps,hsphy_interface = "utmi";
snps,dis_enblslpm_quirk;
snps,dis_u2_susphy_quirk;
snps,dis_u3_susphy_quirk;
snps,dis-del-phy-power-chg-quirk;
snps,dis-tx-ipgap-linecheck-quirk;
snps,parkmode-disable-ss-quirk;
};
};
&pcie1_rc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pcie1_3>;
num-lanes = <1>;
status = "okay";
};
&pcie2_rc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pcie2_4>;
status = "okay";
};
&imggpu {
operating-points-v2 = <&gpu_opp_table>;
status = "okay";
/* the mux also reaches pll2_d3 at 1 GHz, past the 819 MHz the K1 is rated for */
gpu_opp_table: opp-table {
compatible = "operating-points-v2";
opp-409600000 {
opp-hz = /bits/ 64 <409600000>;
};
opp-491520000 {
opp-hz = /bits/ 64 <491520000>;
};
opp-614400000 {
opp-hz = /bits/ 64 <614400000>;
};
opp-819200000 {
opp-hz = /bits/ 64 <819200000>;
};
};
};
&qspi {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_qspi>;
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <26500000>;
m25p,fast-read;
broken-flash-reset;
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@00000 {
label = "bootinfo";
reg = <0x00000 0x10000>;
};
partition@10000 {
label = "private";
reg = <0x10000 0x10000>;
};
partition@20000 {
label = "fsbl";
reg = <0x20000 0x40000>;
};
partition@60000 {
label = "env";
reg = <0x60000 0x10000>;
};
partition@70000 {
label = "opensbi";
reg = <0x70000 0x30000>;
};
partition@a0000 {
label = "uboot";
reg = <0xa0000 0xf60000>;
};
};
};
};
/* the JPEG unit hangs its udev worker, which stalls udevadm settle in the
* initramfs for the full timeout on every boot, and nothing here uses it
*/
&{/soc/jpu@c02f8000} {
status = "disabled";
};
/* pwm_bl gets a phandle from dtc -@, so pwm_bl.c starts it blanked; let the
* panel own it so drm_panel_enable() unblanks it
*/
&lcd_lt8911_edp_1920x1080 {
backlight = <&pwm_bl>;
};
&pwm_bl {
pwms = <&pwm14 2000>;
brightness-levels = <
0 64 64 64 64 65 65 65 65 66 66 66 66 67 67 68
68 69 69 70 70 71 71 72 72 73 73 74 74 75 75 76
76 77 78 79 80 80 81 82 83 84 84 85 86 87 88 88
89 90 91 92 92 93 94 95 96 96 97 98 99 100 100 101
102 103 104 104 105 106 107 108 108 109 110 111 112 112 113 114
115 116 116 117 118 119 120 120 121 122 123 124 124 125 126 127
128 128 129 130 131 132 132 133 134 135 136 136 137 138 139 140
140 141 142 143 144 144 145 146 147 148 148 149 150 151 152 152
153 154 155 156 156 157 158 159 160 160 161 162 163 164 164 165
166 167 168 168 169 170 171 172 172 173 174 175 176 176 177 178
179 180 180 181 182 183 184 184 185 186 187 188 188 189 190 191
192 192 193 194 195 196 196 197 198 199 200 200 201 202 203 204
204 205 206 207 208 208 209 210 211 212 212 213 214 215 216 216
217 218 219 220 220 221 222 223 224 224 225 226 227 228 228 229
230 231 232 232 233 234 235 236 236 237 238 239 240 240 241 242
243 244 244 245 246 247 248 248 249 250 251 252 252 253 254 255
>;
default-brightness-level = <128>;
status = "okay";
};
&rcpu {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_rcpu>;
mboxes = <&mailbox 0>, <&mailbox 1>;
mbox-names = "vq0", "vq1";
memory-region = <&rcpu_mem_0>, <&rcpu_mem_heap>, <&vdev0vring0>, <&vdev0vring1>, <&vdev0buffer>, <&rsc_table>, <&rcpu_mem_snapshots>;
status = "okay";
};
&i2s0 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sspa0_0>;
status = "okay";
};
&hdmiaudio {
status = "okay";
};
&sound_hdmi {
status = "okay";
simple-audio-card,cpu {
sound-dai = <&hdmiaudio>;
};
};
&sound_codec {
status = "okay";
simple-audio-card,name = "snd-es8326";
spacemit,mclk-fs = <64>;
simple-audio-card,codec {
sound-dai = <&es8326>;
};
};