diff --git a/projects/ROCKNIX/config.xml b/projects/ROCKNIX/config.xml index d040ff3f10..96f6627b52 100644 --- a/projects/ROCKNIX/config.xml +++ b/projects/ROCKNIX/config.xml @@ -87,6 +87,7 @@ qcs8550-ayaneo-pocketace qcs8550-ayaneo-pocketdmg qcs8550-ayaneo-pocketevo + qcs8550-ayaneo-pocketds sm8650-ayaneo-ps2 diff --git a/projects/ROCKNIX/devices/SM8550/linux/linux.aarch64.conf b/projects/ROCKNIX/devices/SM8550/linux/linux.aarch64.conf index a1680837d3..e6d69d22db 100644 --- a/projects/ROCKNIX/devices/SM8550/linux/linux.aarch64.conf +++ b/projects/ROCKNIX/devices/SM8550/linux/linux.aarch64.conf @@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400 CONFIG_LD_IS_BFD=y CONFIG_LD_VERSION=24400 CONFIG_LLD_VERSION=0 -CONFIG_RUSTC_VERSION=109200 -CONFIG_RUSTC_LLVM_VERSION=210103 +CONFIG_RUSTC_VERSION=0 +CONFIG_RUSTC_LLVM_VERSION=0 CONFIG_CC_CAN_LINK=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y @@ -21,11 +21,6 @@ CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_ASSUME=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y -CONFIG_RUSTC_HAS_COERCE_POINTEE=y -CONFIG_RUSTC_HAS_SPAN_FILE=y -CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES=y -CONFIG_RUSTC_HAS_FILE_WITH_NUL=y -CONFIG_RUSTC_HAS_FILE_AS_C_STR=y CONFIG_PAHOLE_VERSION=0 CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -2729,7 +2724,7 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set # CONFIG_TOUCHSCREEN_EXC3000 is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GOODIX is not set +CONFIG_TOUCHSCREEN_GOODIX=y # CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C is not set # CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI is not set # CONFIG_TOUCHSCREEN_HIDEEP is not set diff --git a/projects/ROCKNIX/devices/SM8550/patches/linux/0214_arm64--dts--qcom--Add-AYANEO-Pocket-DS.patch b/projects/ROCKNIX/devices/SM8550/patches/linux/0214_arm64--dts--qcom--Add-AYANEO-Pocket-DS.patch index c5120591c6..1a873a11f7 100644 --- a/projects/ROCKNIX/devices/SM8550/patches/linux/0214_arm64--dts--qcom--Add-AYANEO-Pocket-DS.patch +++ b/projects/ROCKNIX/devices/SM8550/patches/linux/0214_arm64--dts--qcom--Add-AYANEO-Pocket-DS.patch @@ -1,7 +1,9 @@ -diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linux/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts ---- linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts 2025-08-29 01:15:03.063872627 +0000 -@@ -0,0 +1,201 @@ +diff --git a/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts b/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts +new file mode 100644 +index 000000000..e8510012e +--- /dev/null ++++ b/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts +@@ -0,0 +1,238 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Copyright (c) 2025, Teguh Sobirin. @@ -28,17 +30,25 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + + gpio = <&tlmm 168 GPIO_ACTIVE_HIGH>; + enable-active-high; -+ -+ //pinctrl-names = "default"; -+ pinctrl-0 = <&tca6424_vcc_pin>; -+ ++ regulator-boot-on; + regulator-state-mem { + regulator-off-in-suspend; + }; + }; ++ ++ vdd_ts: vdd-ts { ++ compatible = "regulator-fixed"; ++ regulator-name = "vdd_ts_en"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ gpio = <&tca6408 1 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; ++ +}; + +&tlmm { ++ gpio-reserved-ranges = <32 4>; + panel_pwr_active: panel-pwr-active-state { + pins = "gpio152", "gpio153"; + function = "gpio"; @@ -62,14 +72,6 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + bias-pull-down; + }; + -+ tca6424_vcc_pin: tca6424-vcc-pin { -+ pins = "gpio168"; -+ function = "gpio"; -+ drive-strength = <8>; -+ bias-pull-up; -+ output-high; -+ }; -+ + ts_rst_default: ts-rst-default-state { + pins = "gpio24"; + function = "gpio"; @@ -97,6 +99,22 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + bias-pull-down; + drive-strength = <2>; + }; ++ ++ ts2_irq: ts2-irq-state { ++ pins = "gpio39"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-disable; ++ input-enable; ++ }; ++ ++ ts2_reset: ts2-reset-state { ++ pins = "gpio38"; ++ function = "gpio"; ++ drive-strength = <8>; ++ input-enable; ++ bias-pull-down; ++ }; +}; + +&i2c0 { @@ -125,13 +143,37 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + tca6408: tca64_20@20 { + gpio-controller; + compatible = "ti,tca6408"; -+ status = "ok"; ++ status = "okay"; + reg = <0x20>; + #gpio-cells = <0x02>; + vcc-supply = <&tca6424_vcc>; + }; +}; + ++&i2c2 { ++ clock-frequency = <400000>; ++ status = "okay"; ++ ++ touchscreen@5d { ++ reg = <0x5d>; ++ compatible = "goodix,gt911"; ++ ++ interrupt-parent = <&tlmm>; ++ interrupts = <39 IRQ_TYPE_EDGE_FALLING>; ++ ++ reset-gpios = <&tlmm 38 GPIO_ACTIVE_HIGH>; ++ irq-gpios = <&tlmm 39 GPIO_ACTIVE_HIGH>; ++ VDDIO-supply = <&vdd_ts>; ++ ++ touchscreen-size-x = <768>; ++ touchscreen-size-y = <1024>; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&ts2_reset>, <&ts2_irq>; ++ ++ }; ++}; ++ +&i2c4 { + clock-frequency = <400000>; + status = "okay"; @@ -163,9 +205,7 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + + vci-supply = <&vreg_l13b_3p0>; + vddio-supply = <&vreg_l12b_1p8>; -+ + reset-gpios = <&tlmm 133 GPIO_ACTIVE_LOW>; -+ + rotation = <270>; +}; + @@ -179,7 +219,6 @@ diff -rupbN linux.orig/arch/arm64/boot/dts/qcom/qcs8550-ayaneo-pocketds.dts linu + pinctrl-0 = <&sde_dsi1_active>; + pinctrl-1 = <&sde_dsi1_suspend>; + pinctrl-names = "default", "sleep"; -+ + avdd-supply = <&sgm3804>; + enable-gpio = <&tca6408 0 GPIO_ACTIVE_HIGH>; + reset-gpios = <&tca6408 2 GPIO_ACTIVE_LOW>; diff --git a/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad deleted file mode 120000 index 701210b44d..0000000000 --- a/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad +++ /dev/null @@ -1 +0,0 @@ -../AYANEO Pocket EVO/020-set-xbox-gamepad \ No newline at end of file diff --git a/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad new file mode 100755 index 0000000000..a942fb84b7 --- /dev/null +++ b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/020-set-xbox-gamepad @@ -0,0 +1,16 @@ +#!/bin/sh + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2025 ROCKNIX + +# Serial device +SERIAL_DEVICE="/dev/ttyHS0" + +# Open serial device +stty -F $SERIAL_DEVICE 115200 -clocal -opost -isig -icanon -echo + +# Send frame to switch gamepad to fake xbox 360 controller +printf "\xe7\x55\x05\x01\x00\x00\x00\x00\x00\x5b\xed" >$SERIAL_DEVICE +sleep 0.1 +printf "\x35\x35\x30\x35\x30\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" >$SERIAL_DEVICE +sleep 0.1 diff --git a/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/battery_led_status b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/battery_led_status new file mode 100644 index 0000000000..bacece4c52 --- /dev/null +++ b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/battery_led_status @@ -0,0 +1,108 @@ +#!/bin/sh + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +# Simple script to watch the battery capacity and +# turn the power LED orange when it reaches 30%, red at 20%, and blinking red at 10% + +# Minimal OS variable loading for performance +. /etc/profile.d/001-functions + +LED_PATH="/sys/class/leds" + +function led_brightness() { + echo ${2} >${LED_PATH}/${1}/brightness +} + +function led_rgb() { + echo ${2} ${3} ${4} >${LED_PATH}/${1}/multi_intensity +} + +function bat_led_off() { + led_brightness power-led 0 + led_rgb power-led 0 0 0 +} + +function bat_led_green() { + led_brightness power-led 255 + led_rgb power-led 0 255 0 +} + +function bat_led_red() { + led_brightness power-led 255 + led_rgb power-led 255 0 0 +} + +function bat_led_orange() { + led_brightness power-led 255 + led_rgb power-led 255 20 0 +} + +function bat_led_yellow() { + led_brightness power-led 255 + led_rgb power-led 255 125 0 +} + +PREV_BATCAP="null" +while true + do + BAT_LED_STATE=$(get_setting led.color) + if [ ! ${BAT_LED_STATE} == "battery" ]; then + break + fi + + CAP=$(cat /sys/class/power_supply/battery/capacity) + STAT=$(cat /sys/class/power_supply/battery/status) + + if [ ${STAT} == "Discharging" ]; then + if (( ${CAP} <= 10 )) + then + for ctr in $(seq 1 1 5) + do + bat_led_red + sleep .5 + bat_led_off + sleep .5 + done + continue + elif (( ${CAP} <= 20 )) + then + BATCAP="D_RED" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_red + fi + elif (( ${CAP} <= 30 )) + then + BATCAP="D_ORANGE" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_orange + fi + elif (( ${CAP} <= 40 )) + then + BATCAP="D_YELLOW" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_yellow + fi + else + BATCAP="D_GREEN" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_green + fi + fi + elif (( ${CAP} <= 94 )) + then + BATCAP="C_ORANGE" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_orange + fi + elif (( ${CAP} >= 95 )) + then + BATCAP="C_GREEN" + if [ ! ${BATCAP} = ${PREV_BATCAP} ]; then + bat_led_green + fi + fi + PREV_BATCAP=${BATCAP} + sleep 15 +done diff --git a/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/ledcontrol b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/ledcontrol new file mode 100644 index 0000000000..0e1a4623a0 --- /dev/null +++ b/projects/ROCKNIX/packages/hardware/quirks/devices/AYANEO Pocket DS/bin/ledcontrol @@ -0,0 +1,110 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +# Minimal OS variable loading for performance +. /etc/profile.d/001-functions + +LED_PATH="/sys/class/leds" + +function led_brightness() { + echo ${2} >${LED_PATH}/${1}/brightness +} + +function led_rgb() { + echo ${2} ${3} ${4} >${LED_PATH}/${1}/multi_intensity +} + +function led_off() { + led_brightness power-led 0 + led_rgb power-led 0 0 0 +} + +function led_red() { + led_brightness power-led 255 + led_rgb power-led 255 0 0 +} + +function led_green() { + led_brightness power-led 255 + led_rgb power-led 0 255 0 +} + +function led_blue() { + led_brightness power-led 255 + led_rgb power-led 0 0 255 +} + +function led_white() { + led_brightness power-led 255 + led_rgb power-led 255 255 255 +} + +function led_orange() { + led_brightness power-led 255 + led_rgb power-led 255 20 0 +} + +function led_yellow() { + led_brightness power-led 255 + led_rgb power-led 255 125 0 +} + +function led_purple() { + led_brightness power-led 255 + led_rgb power-led 255 0 255 +} + +case ${1} in + red) + led_red + set_setting led.color ${1} + ;; + green) + led_green + set_setting led.color ${1} + ;; + blue) + led_blue + set_setting led.color ${1} + ;; + white) + led_white + set_setting led.color ${1} + ;; + orange) + led_orange + set_setting led.color ${1} + ;; + yellow) + led_yellow + set_setting led.color ${1} + ;; + purple) + led_purple + set_setting led.color ${1} + ;; + off) + led_off + set_setting led.color ${1} + ;; + battery) + led_off + set_setting led.color ${1} + systemctl restart batteryledstatus.service + ;; + list) +cat <> $SWAY_HOME/config + echo 'input "1046:967:Goodix_Capacitive_TouchScreen" map_to_output DSI-2' >> $SWAY_HOME/config + echo 'input "0:0:generic_ft5x06_(44)" map_to_output DSI-1' >> $SWAY_HOME/config + echo 'output DSI-2 power off' >> $SWAY_HOME/config + echo 'for_window [shell="xdg_shell"] output DSI-2 power on' >> $SWAY_HOME/config + echo "exec_always swaymsg 'seat touchseat attach 1046:967:Goodix_Capacitive_TouchScreen'" >> $SWAY_HOME/config + echo "exec_always swaymsg 'seat touchseat attach 0:0:generic_ft5x06_(44)'" >> $SWAY_HOME/config +fi + # Move the secondary window to the second output if [ "${DEVICE_HAS_DUAL_SCREEN}" = "true" ]; then second_con=$([[ "${connected_cons[0]}" == "$con" ]] && echo "${connected_cons[1]}" || echo "${connected_cons[0]}")