From fae75743a1115787c2740cbc694443613c0266eb Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Wed, 12 Aug 2026 11:43:51 +0800 Subject: [PATCH 1/8] usbgadget: make MTP file transfer enumerate on SuperSpeed hosts uMTP-Responder is built with CONFIG_USB_SS_SUPPORT commented out in inc/buildconf.h, so the descriptor blob it writes to functionfs only carries FUNCTIONFS_HAS_FS_DESC and FUNCTIONFS_HAS_HS_DESC. On a gadget whose configfs max_speed is left at its default of super-speed-plus, usb_add_function() never sets config->superspeed, and once the link comes up at SuperSpeed config_desc() skips the only configuration and returns -EINVAL. That stalls GET_DESCRIPTOR(CONFIGURATION): the UDC stays at "addressed" forever and Windows reports the device as "Unknown USB Device (Configuration Descriptor Request Failed)". Cap the MTP gadget at high speed so the descriptors it has are the ones the host asks for. The network gadget is untouched and keeps SuperSpeed, since f_ncm supplies real ss_descriptors. Two more things were wrong once enumeration got that far: bDeviceClass was 0x02, copied from the CDC gadget. A non-zero device class makes hosts bind on it rather than falling through to the interface, so Windows looked for a CDC driver instead of matching umtprd's 06/01/01 plus the "MTP" interface string. Set it to 0. The MTP gadget also shared 1d6b:0104 with the network gadget, so both modes landed on one entry in the host's driver cache. Move MTP to 1d6b:0100, which is what /etc/umtprd/umtprd.conf already declares. QUIRK_DEVICE is only exported into a login shell. Anything invoking usbgadget without one wrote an empty product string, which is a zero length iProduct on the wire. With the speed, class and product ID all corrected, the gadget still stopped at "addressed" until the product string was populated. Resolve the model directly instead of trusting the environment. Finally, usb_stop() unmounted /dev/ffs-umtp before killing umtprd, which holds ep0 open, so the umount always failed with EBUSY and left the mount behind for the next start to trip over. Kill first, then unmount. Tested on an AYN Odin 2 (SM8550, USB 3.1 capable dwc3). Against Windows 11, file transfer enumerates at high speed, reaches "configured", shows up as an MTP device and supports browsing, copying, renaming and deleting under /storage/roms. Against Ubuntu 24.04, lsusb reports the expected 06/01/01 interface, mtp-detect opens a session and reports the storage as read/write, and a file sent and read back is byte identical before being deleted again. Cycling file_transfer to network and back leaves no stale functionfs mount, umtprd or udhcpd behind, and network mode still links at SuperSpeed. Co-Authored-By: Claude Opus 5 --- .../rocknix/sources/scripts/usbgadget | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/projects/ROCKNIX/packages/rocknix/sources/scripts/usbgadget b/projects/ROCKNIX/packages/rocknix/sources/scripts/usbgadget index 51767eecc14..1a3da6f934e 100755 --- a/projects/ROCKNIX/packages/rocknix/sources/scripts/usbgadget +++ b/projects/ROCKNIX/packages/rocknix/sources/scripts/usbgadget @@ -15,6 +15,11 @@ MACHINEIDFILE=/storage/.cache/systemd-machine-id SERIAL=$(cat ${MACHINEIDFILE}) +# QUIRK_DEVICE only exists in a login shell, and a zero length iProduct makes +# Windows refuse to start the gadget, so resolve it again rather than trust it. +PRODUCT="${QUIRK_DEVICE:-$(tr -d '\0' < /sys/firmware/devicetree/base/model 2>/dev/null)}" +PRODUCT="${PRODUCT:-${OS_NAME}}" + CACHEDIR=/storage/.cache/usbgadget GADGETCONF=${CACHEDIR}/usbgadget.conf GADGETNETCONF=${CACHEDIR}/network.conf @@ -139,7 +144,7 @@ prepare_usb_network() { echo "${devversion}" > ${g_cdc}/bcdDevice mkdir ${g_cdc}/strings/0x409 echo "${OS_NAME}" > ${g_cdc}/strings/0x409/manufacturer - echo "${QUIRK_DEVICE}" > ${g_cdc}/strings/0x409/product + echo "${PRODUCT}" > ${g_cdc}/strings/0x409/product echo "${SERIAL}" > ${g_cdc}/strings/0x409/serialnumber # config 1 is for CDC @@ -263,19 +268,24 @@ g_mtp="/sys/kernel/config/usb_gadget/mtp" prepare_usb_mtp() { usb_ver="0x0200" # USB 2.0 - dev_class="2" # Communications + dev_class="0" # Per interface, umtprd declares Still Imaging attr="0xC0" # Self powered pwr="0xfe" # mkdir ${g_mtp} + # umtprd is built without CONFIG_USB_SS_SUPPORT, so functionfs only hands the + # kernel full and high speed descriptors. On a SuperSpeed capable UDC the + # composite layer then finds no configuration valid for the negotiated speed + # and stalls GET_DESCRIPTOR(CONFIGURATION), leaving the host stuck at addressed. + [ -w ${g_mtp}/max_speed ] && echo "high-speed" > ${g_mtp}/max_speed echo "${usb_ver}" > ${g_mtp}/bcdUSB echo "${dev_class}" > ${g_mtp}/bDeviceClass echo "0x1d6b" > ${g_mtp}/idVendor - echo "0x0104" > ${g_mtp}/idProduct + echo "0x0100" > ${g_mtp}/idProduct echo "${devversion}" > ${g_mtp}/bcdDevice mkdir ${g_mtp}/strings/0x409 echo "${OS_NAME}" > ${g_mtp}/strings/0x409/manufacturer - echo "${QUIRK_DEVICE}" > ${g_mtp}/strings/0x409/product + echo "${PRODUCT}" > ${g_mtp}/strings/0x409/product echo "${SERIAL}" > ${g_mtp}/strings/0x409/serialnumber # config 1 for MTP @@ -396,8 +406,8 @@ usb_start() { exit 3 fi - mkdir /dev/ffs-umtp - mount mtp -t functionfs /dev/ffs-umtp + mkdir -p /dev/ffs-umtp + mountpoint -q /dev/ffs-umtp || mount mtp -t functionfs /dev/ffs-umtp /usr/sbin/umtprd & sleep 1 @@ -425,6 +435,17 @@ usb_start() { usb_trigger async } +# umtprd keeps ep0 open, so it has to go before the umount can succeed +umtp_teardown() { + killall umtprd 2>/dev/null + for _ in 1 2 3 4 5 6 7 8 9 10; do + mountpoint -q /dev/ffs-umtp 2>/dev/null || break + umount /dev/ffs-umtp 2>/dev/null && break + sleep 0.1 + done + rmdir /dev/ffs-umtp 2>/dev/null +} + usb_stop() { ( @@ -435,10 +456,7 @@ usb_stop() { usb_disable if [ -d /dev/ffs-umtp ] ; then - umount /dev/ffs-umtp - rmdir /dev/ffs-umtp - - killall umtprd + umtp_teardown fi ) >/dev/null 2>&1 } @@ -461,11 +479,7 @@ usb_init_clean_state() { [ -n "$(cat "$udc_link" 2>/dev/null)" ] && echo "" > "$udc_link" 2>/dev/null done - if mountpoint -q /dev/ffs-umtp 2>/dev/null; then - umount /dev/ffs-umtp 2>/dev/null - fi - [ -d /dev/ffs-umtp ] && rmdir /dev/ffs-umtp 2>/dev/null - pkill -x umtprd 2>/dev/null + [ -d /dev/ffs-umtp ] && umtp_teardown if [ -f "${UDHCPPIDFILE}" ]; then cat "${UDHCPPIDFILE}" 2>/dev/null | xargs -r -n 1 kill 2>/dev/null rm -f "${UDHCPPIDFILE}" From b5a7a06dda00d5a22dee66b4c549d9dce0c77e70 Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Sat, 8 Aug 2026 23:28:35 -0700 Subject: [PATCH 2/8] EFI: allow setting device tree from bootloader --- distributions/ROCKNIX/config/functions | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/distributions/ROCKNIX/config/functions b/distributions/ROCKNIX/config/functions index e5c9d7cac50..34440cd3c55 100644 --- a/distributions/ROCKNIX/config/functions +++ b/distributions/ROCKNIX/config/functions @@ -283,6 +283,11 @@ else set timeout=-1 fi +if fdtdump --prop model --set abl_model; then + set default="abl" + set timeout=2 +fi + if [ x"\${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" else @@ -309,6 +314,13 @@ if [ "\${saved_entry}" = "${SHORT}" ]; then set rotation=$(((360 - ROT * 90) % 3 EOF done + xmlstarlet sel -t -m "//rocknix/${DEVICE}/file[@rotation]" \ + -v "concat(@full, '|', @rotation)" -n "${CONFIGXML}" 2>/dev/null | while IFS='|' read -r FULL ROT; do + cat << EOF +if [ "\${abl_model}" = "${FULL}" ]; then set rotation=$(((360 - ROT * 90) % 360)); fi +EOF + done + cat << EOF set gfxmode=auto insmod efi_gop @@ -317,6 +329,13 @@ terminal_output gfxterm set menu_color_normal=cyan/blue set menu_color_highlight=white/blue +if [ -n "\${abl_model}" ]; then +menuentry "ROCKNIX (\${abl_model})" \$menuentry_id_option 'abl' { + search --set -f /KERNEL + linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} +} +fi + EOF xmlstarlet sel -t -m "//rocknix/${DEVICE}/file" \ From 5df8cdb005efc5af446d40e2ccdb868672b2eb7d Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 16 Aug 2026 12:33:08 +0000 Subject: [PATCH 3/8] packages: use archives where possible --- .../AMD64/packages/ayn-platform/package.mk | 2 +- .../AMD64/packages/ryzenadj/package.mk | 9 +-- .../AMD64/packages/ryzensmu/package.mk | 6 +- .../packages/amlogic-boot-fip/package.mk | 2 +- .../packages/apps/commander/package.mk | 10 ++- .../packages/apps/gamecontrollerdb/package.mk | 12 ++-- .../packages/apps/gamepadtester/package.mk | 12 ++-- .../gamepadtester/scripts/Test Gamepad.sh | 0 .../packages/apps/jstest-sdl/package.mk | 4 +- .../packages/apps/oga_controls/package.mk | 5 +- .../packages/apps/rocknix-hotkey/package.mk | 15 ++-- .../packages/apps/sdltouchtest/package.mk | 9 ++- .../sdltouchtest/scripts/Test Touchscreen.sh | 0 .../ROCKNIX/packages/compat/box64/package.mk | 2 +- .../ROCKNIX/packages/compat/box86/package.mk | 6 +- .../packages/devel/libserialport/package.mk | 10 +-- .../packages/graphics/capsimg/package.mk | 17 ++--- .../packages/graphics/fbgrab/package.mk | 2 +- .../packages/graphics/imagemagick/package.mk | 6 +- .../packages/graphics/librga/package.mk | 3 +- .../packages/graphics/lsfg-vk/package.mk | 23 +++---- .../ROCKNIX/packages/lang/luajit/package.mk | 7 +- .../RTL8188FU-firmware/package.mk | 9 ++- .../packages/multimedia/libvpx/package.mk | 68 +++++++++---------- .../ROCKNIX/packages/print/poppler/package.mk | 16 ++--- .../packages/sysutils/drm_tool/package.mk | 5 +- .../packages/sysutils/nvtop/package.mk | 11 ++- .../packages/sysutils/squashfuse/package.mk | 5 +- .../packages/tools/batteryplus/package.mk | 40 ++++++----- .../sources/scripts/batteryplus-init | 0 .../packages/tools/mkbootimg/package.mk | 6 +- .../ROCKNIX/packages/ui/lowerdeck/package.mk | 11 +-- .../packages/wayland/lib/libdecor/package.mk | 4 +- .../weston-kiosk-shell-dpms/package.mk | 5 +- 34 files changed, 159 insertions(+), 183 deletions(-) mode change 100644 => 100755 projects/ROCKNIX/packages/apps/gamepadtester/scripts/Test Gamepad.sh mode change 100644 => 100755 projects/ROCKNIX/packages/apps/sdltouchtest/scripts/Test Touchscreen.sh mode change 100644 => 100755 projects/ROCKNIX/packages/tools/batteryplus/sources/scripts/batteryplus-init diff --git a/projects/ROCKNIX/devices/AMD64/packages/ayn-platform/package.mk b/projects/ROCKNIX/devices/AMD64/packages/ayn-platform/package.mk index 5b0ad35db4a..2d681cd49c2 100644 --- a/projects/ROCKNIX/devices/AMD64/packages/ayn-platform/package.mk +++ b/projects/ROCKNIX/devices/AMD64/packages/ayn-platform/package.mk @@ -5,7 +5,7 @@ PKG_NAME="ayn-platform" PKG_VERSION="7ec810ed2aebe196b68b9cce580d3c9e520e6425" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ShadowBlip/ayn-platform" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_LONGDESC="A hwmon interface for PWM control, as well as RGB control and access to temperature sensors provided by the system EC." PKG_TOOLCHAIN="make" PKG_IS_KERNEL_PKG="yes" diff --git a/projects/ROCKNIX/devices/AMD64/packages/ryzenadj/package.mk b/projects/ROCKNIX/devices/AMD64/packages/ryzenadj/package.mk index 5018f4252fc..5add65d9d45 100644 --- a/projects/ROCKNIX/devices/AMD64/packages/ryzenadj/package.mk +++ b/projects/ROCKNIX/devices/AMD64/packages/ryzenadj/package.mk @@ -5,14 +5,15 @@ PKG_NAME="ryzenadj" PKG_VERSION="ea71739b4a3e1a0a624dfd1c9c268a31cb2a4182" PKG_LICENSE="GPL" PKG_SITE="https://github.com/FlyGoat/RyzenAdj" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain pciutils systemd" PKG_LONGDESC="Adjust power management settings for Ryzen Mobile Processors." PKG_BUILD_FLAGS="+pic" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib - cp libryzenadj.so ${INSTALL}/usr/lib - mkdir -p ${INSTALL}/usr/bin - cp ryzenadj ${INSTALL}/usr/bin + cp -a libryzenadj.so ${INSTALL}/usr/lib + + mkdir -p ${INSTALL}/usr/bin + cp -a ryzenadj ${INSTALL}/usr/bin } diff --git a/projects/ROCKNIX/devices/AMD64/packages/ryzensmu/package.mk b/projects/ROCKNIX/devices/AMD64/packages/ryzensmu/package.mk index 7bc2abc652c..58718a95ff2 100644 --- a/projects/ROCKNIX/devices/AMD64/packages/ryzensmu/package.mk +++ b/projects/ROCKNIX/devices/AMD64/packages/ryzensmu/package.mk @@ -2,10 +2,10 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="ryzensmu" -PKG_VERSION="e61177d0ddaebfaeca52094b20a2289287a0838b" +PKG_VERSION="0.1.5" PKG_LICENSE="GPL" PKG_SITE="https://gitlab.com/leogx9r/ryzen_smu" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/-/archive/v${PKG_VERSION}/${PKG_NAME}-v${PKG_VERSION}.tar.bz2" PKG_LONGDESC="A Linux kernel driver that exposes access to the SMU on certain AMD Ryzen processors." PKG_TOOLCHAIN="make" PKG_IS_KERNEL_PKG="yes" @@ -26,5 +26,5 @@ make_target() { makeinstall_target() { mkdir -p ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} - cp *.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} + cp *.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} } diff --git a/projects/ROCKNIX/devices/S922X/packages/amlogic-boot-fip/package.mk b/projects/ROCKNIX/devices/S922X/packages/amlogic-boot-fip/package.mk index eea652fcc0f..306f11c8be4 100644 --- a/projects/ROCKNIX/devices/S922X/packages/amlogic-boot-fip/package.mk +++ b/projects/ROCKNIX/devices/S922X/packages/amlogic-boot-fip/package.mk @@ -6,7 +6,7 @@ PKG_NAME="amlogic-boot-fip" PKG_VERSION="e96b6a694380ff07d5a9e4be644ffe254bd18512" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/LibreELEC/amlogic-boot-fip" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Firmware Image Pacakge (FIP) sources used to sign Amlogic u-boot binaries" PKG_TOOLCHAIN="manual" diff --git a/projects/ROCKNIX/packages/apps/commander/package.mk b/projects/ROCKNIX/packages/apps/commander/package.mk index 8b3c13f5825..6474a9940f1 100644 --- a/projects/ROCKNIX/packages/apps/commander/package.mk +++ b/projects/ROCKNIX/packages/apps/commander/package.mk @@ -5,7 +5,7 @@ PKG_NAME="commander" PKG_VERSION="b3c008cac3bff9de54a3542cecc53cc271058744" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ROCKNIX/commander" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_image SDL2_gfx SDL2_ttf dejavu" PKG_LONGDESC="A minimal SDL2 file manager for embedded Linux devices." PKG_TOOLCHAIN="cmake" @@ -14,10 +14,8 @@ PKG_CMAKE_OPTS_TARGET+=" -DCMAKE_BUILD_TYPE=Release" makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - mkdir -p ${INSTALL}/usr/share/commander - - cp -rf ${PKG_BUILD}/.${TARGET_NAME}/commander ${INSTALL}/usr/bin/ - cp -rf ${PKG_BUILD}/res ${INSTALL}/usr/share/commander/res + cp -a ${PKG_BUILD}/.${TARGET_NAME}/commander ${INSTALL}/usr/bin - chmod 0755 ${INSTALL}/usr/bin/commander + mkdir -p ${INSTALL}/usr/share/commander + cp -a ${PKG_BUILD}/res ${INSTALL}/usr/share/commander } diff --git a/projects/ROCKNIX/packages/apps/gamecontrollerdb/package.mk b/projects/ROCKNIX/packages/apps/gamecontrollerdb/package.mk index 18793bf68ab..cd4b3f80b5b 100644 --- a/projects/ROCKNIX/packages/apps/gamecontrollerdb/package.mk +++ b/projects/ROCKNIX/packages/apps/gamecontrollerdb/package.mk @@ -2,18 +2,18 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="gamecontrollerdb" -PKG_VERSION="e1efb4bad8730b2c0c6316617cbd06b9def1192e" +PKG_VERSION="42f28e22d20761e7004e8db91c4ad86402fdf600" PKG_LICENSE="GPL" PKG_DEPENDS_TARGET="toolchain SDL2" PKG_SITE="https://github.com/gabomdq/SDL_GameControllerDB" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_LONGDESC="SDL Game Controller DB" PKG_TOOLCHAIN="manual" makeinstall_target() { mkdir -p ${INSTALL}/usr/config/SDL-GameControllerDB - if [ -f "${PKG_DIR}/config/gamecontrollerdb.txt" ]; then - cat ${PKG_DIR}/config/gamecontrollerdb.txt >${INSTALL}/usr/config/SDL-GameControllerDB/gamecontrollerdb.txt - fi - cat ${PKG_BUILD}/gamecontrollerdb.txt >>${INSTALL}/usr/config/SDL-GameControllerDB/gamecontrollerdb.txt + if [ -f "${PKG_DIR}/config/gamecontrollerdb.txt" ]; then + cat ${PKG_DIR}/config/gamecontrollerdb.txt >${INSTALL}/usr/config/SDL-GameControllerDB/gamecontrollerdb.txt + fi + cat ${PKG_BUILD}/gamecontrollerdb.txt >>${INSTALL}/usr/config/SDL-GameControllerDB/gamecontrollerdb.txt } diff --git a/projects/ROCKNIX/packages/apps/gamepadtester/package.mk b/projects/ROCKNIX/packages/apps/gamepadtester/package.mk index b44a63ef4c2..9d0fdf6491b 100644 --- a/projects/ROCKNIX/packages/apps/gamepadtester/package.mk +++ b/projects/ROCKNIX/packages/apps/gamepadtester/package.mk @@ -5,7 +5,7 @@ PKG_NAME="gamepadtester" PKG_VERSION="6ac49e67aa98fe3dd5c27f73306d65d4b7a82daa" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/timre13/GamepadTester" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_gfx gamecontrollerdb" PKG_LONGDESC="A simple SDL GUI Gamepad tester" PKG_TOOLCHAIN="cmake" @@ -14,18 +14,16 @@ PKG_PATCH_DIRS+="${DEVICE}" case ${DEVICE} in SM8650|SM8750|SM8550|SM8250) PKG_PATCH_DIRS+=" xbox" - ;; + ;; *) PKG_PATCH_DIRS+=" legacy" - ;; + ;; esac makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp -rf ${PKG_BUILD}/.${TARGET_NAME}/gamepad_test ${INSTALL}/usr/bin/gamepad-tester - chmod 0755 ${INSTALL}/usr/bin/gamepad-tester + cp -a ${PKG_BUILD}/.${TARGET_NAME}/gamepad_test ${INSTALL}/usr/bin/gamepad-tester mkdir -p ${INSTALL}/usr/config/modules - cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/modules - chmod 0755 ${INSTALL}/usr/config/modules/* + cp -a ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/modules } diff --git a/projects/ROCKNIX/packages/apps/gamepadtester/scripts/Test Gamepad.sh b/projects/ROCKNIX/packages/apps/gamepadtester/scripts/Test Gamepad.sh old mode 100644 new mode 100755 diff --git a/projects/ROCKNIX/packages/apps/jstest-sdl/package.mk b/projects/ROCKNIX/packages/apps/jstest-sdl/package.mk index d6367368ee2..074d3af6e4f 100644 --- a/projects/ROCKNIX/packages/apps/jstest-sdl/package.mk +++ b/projects/ROCKNIX/packages/apps/jstest-sdl/package.mk @@ -6,7 +6,7 @@ PKG_NAME="jstest-sdl" PKG_VERSION="f4fdf6daae687d19b303d8ba8809ff5a68bc33a4" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ROCKNIX/jstest-sdl" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain SDL2 ncurses" PKG_LONGDESC="Simple SDL joystick test application for the console" PKG_TOOLCHAIN="make" @@ -18,5 +18,5 @@ pre_configure_target() { makeinstall_target(){ mkdir -p ${INSTALL}/usr/bin - cp jstest-sdl ${INSTALL}/usr/bin + cp -a jstest-sdl ${INSTALL}/usr/bin } diff --git a/projects/ROCKNIX/packages/apps/oga_controls/package.mk b/projects/ROCKNIX/packages/apps/oga_controls/package.mk index 87b9e0eabe9..3c60946c05f 100644 --- a/projects/ROCKNIX/packages/apps/oga_controls/package.mk +++ b/projects/ROCKNIX/packages/apps/oga_controls/package.mk @@ -5,8 +5,7 @@ PKG_NAME="oga_controls" PKG_VERSION="1604ee24150c1c5bb7c66bc4670919c2ad8f0064" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/christianhaitian/oga_controls" -PKG_URL="${PKG_SITE}.git" -PKG_GIT_CLONE_BRANCH="universal" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libevdev SDL2" PKG_LONGDESC="Emulated keyboard / mouse / joystick for the RGB10/OGA 1.1 (BE), RG351 P/M/V, RK2020/OGA 1.0, OGS, and the Chi" PKG_TOOLCHAIN="make" @@ -21,5 +20,5 @@ pre_make_target() { makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/oga_controls* ${INSTALL}/usr/bin + cp -a ${PKG_BUILD}/oga_controls* ${INSTALL}/usr/bin } diff --git a/projects/ROCKNIX/packages/apps/rocknix-hotkey/package.mk b/projects/ROCKNIX/packages/apps/rocknix-hotkey/package.mk index 391b401c2a5..a9396097852 100644 --- a/projects/ROCKNIX/packages/apps/rocknix-hotkey/package.mk +++ b/projects/ROCKNIX/packages/apps/rocknix-hotkey/package.mk @@ -1,22 +1,21 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2021-present Shanti Gilbert (https://github.com/shantigilbert) +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2026-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-hotkey" PKG_VERSION="cc3a863199a71a350db05e9d0d0e646a8411332c" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/ROCKNIX/rocknix-hotkey" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libevdev SDL2 control-gen" PKG_TOOLCHAIN="make" - makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/gptokeyb ${INSTALL}/usr/bin + cp -a ${PKG_BUILD}/gptokeyb ${INSTALL}/usr/bin mkdir -p ${INSTALL}/usr/lib - cp ${PKG_BUILD}/inputfilter.so ${INSTALL}/usr/lib + cp -a ${PKG_BUILD}/inputfilter.so ${INSTALL}/usr/lib - mkdir -p ${INSTALL}/usr/config/gptokeyb/ - cp ${PKG_BUILD}/configs/default.gptk ${INSTALL}/usr/config/gptokeyb/ + mkdir -p ${INSTALL}/usr/config/gptokeyb + cp -a ${PKG_BUILD}/configs/default.gptk ${INSTALL}/usr/config/gptokeyb } diff --git a/projects/ROCKNIX/packages/apps/sdltouchtest/package.mk b/projects/ROCKNIX/packages/apps/sdltouchtest/package.mk index 352a40431c4..dc7fbed1cd7 100644 --- a/projects/ROCKNIX/packages/apps/sdltouchtest/package.mk +++ b/projects/ROCKNIX/packages/apps/sdltouchtest/package.mk @@ -5,7 +5,7 @@ PKG_NAME="sdltouchtest" PKG_VERSION="b62dae0d6233869a4c70a9472bc1e93dec391f94" PKG_LICENSE="MIT" PKG_SITE="https://github.com/realchonk/sdl2-touch-test" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain SDL2" PKG_LONGDESC="SDL2 touchscreen tester" PKG_TOOLCHAIN="make" @@ -16,14 +16,13 @@ pre_configure_target() { makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/test ${INSTALL}/usr/bin/sdltouchtest - chmod 0755 ${INSTALL}/usr/bin/* + cp -a ${PKG_BUILD}/test ${INSTALL}/usr/bin/sdltouchtest case ${DEVICE} in RK3399|RK35*|SM8250|SM8550) mkdir -p ${INSTALL}/usr/config/modules cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/modules chmod 0755 ${INSTALL}/usr/config/modules/* - ;; -esac + ;; + esac } diff --git a/projects/ROCKNIX/packages/apps/sdltouchtest/scripts/Test Touchscreen.sh b/projects/ROCKNIX/packages/apps/sdltouchtest/scripts/Test Touchscreen.sh old mode 100644 new mode 100755 diff --git a/projects/ROCKNIX/packages/compat/box64/package.mk b/projects/ROCKNIX/packages/compat/box64/package.mk index 88ab8329477..f35950a9275 100644 --- a/projects/ROCKNIX/packages/compat/box64/package.mk +++ b/projects/ROCKNIX/packages/compat/box64/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="2f130fab1d6e1a4ee8a71dc60cfdfcc839ad192a" # v0.4.4 PKG_ARCH="aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box64" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain ncurses SDL2 cabextract libxss libXdmcp libXft gtk2" PKG_LONGDESC="Box64 lets you run x86_64 Linux programs (such as games) on non-x86_64 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" diff --git a/projects/ROCKNIX/packages/compat/box86/package.mk b/projects/ROCKNIX/packages/compat/box86/package.mk index 0fbbb656e6d..f7f7e9b3547 100644 --- a/projects/ROCKNIX/packages/compat/box86/package.mk +++ b/projects/ROCKNIX/packages/compat/box86/package.mk @@ -2,10 +2,10 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box86" -PKG_VERSION="0579f8b9c47d87d700724f4cce559b06cbd2b0f5" +PKG_VERSION="39d3ed203323000c11f47b780f7468fa24a7185d" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain ncurses SDL2 libXdmcp libXft libXcomposite cups libogg" PKG_LONGDESC="Box86 lets you run x86 Linux programs (such as games) on non-x86 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" @@ -62,7 +62,6 @@ makeinstall_target() { mkdir -p ${INSTALL}/etc/binfmt.d cp ${PKG_BUILD}/.${TARGET_NAME}/system/box86.conf ${INSTALL}/etc/binfmt.d - ;; aarch64) mkdir -p ${INSTALL}/usr/share/box86/lib @@ -76,7 +75,6 @@ makeinstall_target() { mkdir -p ${INSTALL}/etc/binfmt.d cp -vP ${ROOT}/build.${DISTRO}-${DEVICE}.arm/install_pkg/${PKG_NAME}-*/etc/binfmt.d/box86.conf ${INSTALL}/etc/binfmt.d - ;; esac diff --git a/projects/ROCKNIX/packages/devel/libserialport/package.mk b/projects/ROCKNIX/packages/devel/libserialport/package.mk index adc4e7d857f..dfae36cad30 100644 --- a/projects/ROCKNIX/packages/devel/libserialport/package.mk +++ b/projects/ROCKNIX/packages/devel/libserialport/package.mk @@ -1,17 +1,17 @@ # SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="libserialport" -PKG_VERSION="fd20b0fc5a34cd7f776e4af6c763f59041de223b" +PKG_VERSION="21b3dfe5f68c205be4086469335fd2fc2ce11ed2" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/sigrokproject/libserialport" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A minimal, cross-platform shared library written in C that is intended to take care of the OS-specific details when writing software that uses serial ports." PKG_TOOLCHAIN="make" make_target() { cd ${PKG_BUILD} - - ./autogen.sh - ./configure --host=${TARGET_NAME} --with-sysroot=${SYSROOT_PREFIX} --prefix=/usr + ./autogen.sh + ./configure --host=${TARGET_NAME} --with-sysroot=${SYSROOT_PREFIX} --prefix=/usr } diff --git a/projects/ROCKNIX/packages/graphics/capsimg/package.mk b/projects/ROCKNIX/packages/graphics/capsimg/package.mk index dadd7e48069..a4556f070d5 100644 --- a/projects/ROCKNIX/packages/graphics/capsimg/package.mk +++ b/projects/ROCKNIX/packages/graphics/capsimg/package.mk @@ -5,25 +5,26 @@ PKG_NAME="capsimg" PKG_VERSION="ed4cb0912fb1a2a0d5203111c6f6abd50d411b56" PKG_LICENSE="GPL" PKG_SITE="https://github.com/FrodeSolheim/capsimg" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="SPS Decoder Library 5.1 (formerly IPF Decoder Lib)" PKG_TOOLCHAIN="make" -PKG_PATCH_DIRS+="${DEVICE}" +PKG_PATCH_DIRS+=" ${DEVICE}" PKG_MAKE_OPTS_TARGET="-C CAPSImg" pre_configure_target() { cd .. - ./bootstrap - ./configure --host=${TARGET_NAME} + ./bootstrap + ./configure --host=${TARGET_NAME} } makeinstall_target() { mkdir -p ${INSTALL}/usr/lib - cp -v CAPSImg/libcapsimage.so.5.1 ${INSTALL}/usr/lib/ - ln -sf libcapsimage.so.5.1 ${INSTALL}/usr/lib/libcapsimage.so.5 - ln -sf libcapsimage.so.5.1 ${INSTALL}/usr/lib/libcapsimage.so + cp -a CAPSImg/libcapsimage.so.5.1 ${INSTALL}/usr/lib + ln -sf libcapsimage.so.5.1 ${INSTALL}/usr/lib/libcapsimage.so.5 + ln -sf libcapsimage.so.5.1 ${INSTALL}/usr/lib/libcapsimage.so + mkdir -p ${INSTALL}/usr/include/caps5 - cp -v LibIPF/* ${INSTALL}/usr/include/caps5 + cp -a LibIPF/* ${INSTALL}/usr/include/caps5 } diff --git a/projects/ROCKNIX/packages/graphics/fbgrab/package.mk b/projects/ROCKNIX/packages/graphics/fbgrab/package.mk index cbf145a3101..e8ae34d2999 100644 --- a/projects/ROCKNIX/packages/graphics/fbgrab/package.mk +++ b/projects/ROCKNIX/packages/graphics/fbgrab/package.mk @@ -5,7 +5,7 @@ PKG_NAME="fbgrab" PKG_VERSION="5c2481d2b67b634e4e611610c33d30ef796afe5d" PKG_LICENSE="GPL2.0" PKG_SITE="https://github.com/GunnarMonell/fbgrab" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A utility to grab/screenshot the framebuffer." diff --git a/projects/ROCKNIX/packages/graphics/imagemagick/package.mk b/projects/ROCKNIX/packages/graphics/imagemagick/package.mk index 861b37cacb1..a21fb122756 100644 --- a/projects/ROCKNIX/packages/graphics/imagemagick/package.mk +++ b/projects/ROCKNIX/packages/graphics/imagemagick/package.mk @@ -3,10 +3,10 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="imagemagick" -PKG_VERSION="f65eba252e3aa387bd99297a750a2ee250664f8c" +PKG_VERSION="7.1.2-29" PKG_LICENSE="http://www.imagemagick.org/script/license.php" PKG_SITE="https://github.com/ImageMagick/ImageMagick" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng libjpeg-turbo fontconfig libraw lcms2 libtool libxml2 libzip libwebp" PKG_LONGDESC="Software suite to create, edit, compose, or convert bitmap images" @@ -33,5 +33,5 @@ pre_configure_target() { makeinstall_target() { make install DESTDIR=${INSTALL} ${PKG_MAKEINSTALL_OPTS_TARGET} - rm ${INSTALL}/usr/bin/*config + rm -f ${INSTALL}/usr/bin/*config } diff --git a/projects/ROCKNIX/packages/graphics/librga/package.mk b/projects/ROCKNIX/packages/graphics/librga/package.mk index d08cdfd2f13..c9f25ddf188 100644 --- a/projects/ROCKNIX/packages/graphics/librga/package.mk +++ b/projects/ROCKNIX/packages/graphics/librga/package.mk @@ -3,10 +3,9 @@ PKG_NAME="librga" PKG_VERSION="ccfec13d6c48e3f0c7f24810b3dac162c40cdda8" -PKG_ARCH="arm aarch64" PKG_LICENSE="Apache-2.0" PKG_DEPENDS_TARGET="toolchain libdrm" PKG_SITE="https://github.com/varphone/rockchip-linux-rga" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_LONGDESC="RGA is an independent 2D hardware acceleration userspace driver" PKG_TOOLCHAIN="meson" diff --git a/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk b/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk index 0b2af7f88e2..a5dc31eb2c2 100644 --- a/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk +++ b/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk @@ -5,19 +5,12 @@ PKG_NAME="lsfg-vk" PKG_VERSION="8b0da2661c6f3473a7fccc8ba643880050e71642" PKG_LICENSE="GPL-3.0" PKG_SITE="https://github.com/PancakeTAS/lsfg-vk" -PKG_URL="${PKG_SITE}.git" -PKG_GIT_CLONE_BRANCH="develop" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_HOST="toolchain:host vulkan-headers:host" PKG_DEPENDS_TARGET="toolchain ${VULKAN} lsfg-vk:host" PKG_LONGDESC="Lossless Scaling Frame Generation Vulkan layer for Linux." - PKG_TOOLCHAIN="cmake" -post_unpack() { - cd ${PKG_BUILD} - git submodule update --init --recursive -} - pre_configure_target() { PKG_CMAKE_OPTS_TARGET+=" -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \ @@ -40,12 +33,14 @@ pre_configure_host() { makeinstall_target() { cd ${PKG_BUILD}/.${TARGET_NAME} - DESTDIR="${INSTALL}" ninja install - mkdir -p "${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d" - cp "${INSTALL}/usr/share/vulkan/implicit_layer.d/VkLayer_LSFGVK_frame_generation.json" \ - "${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d/" - mkdir -p "${INSTALL}/usr/share/fex-emu" - cp "${TOOLCHAIN}/lib/liblsfg-vk-layer.so" "${INSTALL}/usr/share/fex-emu" + DESTDIR="${INSTALL}" ninja install + + mkdir -p ${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d + cp ${INSTALL}/usr/share/vulkan/implicit_layer.d/VkLayer_LSFGVK_frame_generation.json \ + ${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d + + mkdir -p ${INSTALL}/usr/share/fex-emu + cp -a ${TOOLCHAIN}/lib/liblsfg-vk-layer.so ${INSTALL}/usr/share/fex-emu } diff --git a/projects/ROCKNIX/packages/lang/luajit/package.mk b/projects/ROCKNIX/packages/lang/luajit/package.mk index a5cab502aac..a4821efb28e 100644 --- a/projects/ROCKNIX/packages/lang/luajit/package.mk +++ b/projects/ROCKNIX/packages/lang/luajit/package.mk @@ -2,14 +2,13 @@ # Copyright (C) 2019 Trond Haugland (github.com/escalade) PKG_NAME="luajit" -PKG_VERSION="29b0b282f59ac533313199f4f7be79490b7eee51" +PKG_VERSION="1edc3e52b67eaf6ce5f809be8e17d6862594b8bc" PKG_LICENSE="MIT" PKG_SITE="https://github.com/LuaJIT/LuaJIT" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_HOST="toolchain:host" PKG_DEPENDS_TARGET="toolchain luajit:host" PKG_LONGDESC="LuaJIT is a Just-In-Time Compiler (JIT) for the Lua programming language. " - -PKG_GIT_CLONE_BRANCH="v2.1" PKG_TOOLCHAIN="manual" PKG_BUILD_FLAGS="+speed" diff --git a/projects/ROCKNIX/packages/linux-firmware/RTL8188FU-firmware/package.mk b/projects/ROCKNIX/packages/linux-firmware/RTL8188FU-firmware/package.mk index 52c9e933673..1188b4f5888 100644 --- a/projects/ROCKNIX/packages/linux-firmware/RTL8188FU-firmware/package.mk +++ b/projects/ROCKNIX/packages/linux-firmware/RTL8188FU-firmware/package.mk @@ -1,8 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + PKG_NAME="RTL8188FU-firmware" -PKG_VERSION="68ced40d862d13663294496bac2e9a91ffa0e5c7" +PKG_VERSION="c8c95708b3756c67139c456a2a6576c1e6491d82" PKG_LICENSE="GPL" PKG_SITE="https://github.com/kelebek333/rtl8188fu" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Realtek RTL81xxFU Linux firmware" PKG_IS_KERNEL_PKG="yes" @@ -10,5 +13,5 @@ PKG_TOOLCHAIN="manual" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/kernel-overlays/base/lib/firmware/rtlwifi - cp firmware/rtl8188fufw.bin ${INSTALL}/usr/lib/kernel-overlays/base/lib/firmware/rtlwifi + cp firmware/rtl8188fufw.bin ${INSTALL}/usr/lib/kernel-overlays/base/lib/firmware/rtlwifi } diff --git a/projects/ROCKNIX/packages/multimedia/libvpx/package.mk b/projects/ROCKNIX/packages/multimedia/libvpx/package.mk index add3c140ea5..e878e850540 100644 --- a/projects/ROCKNIX/packages/multimedia/libvpx/package.mk +++ b/projects/ROCKNIX/packages/multimedia/libvpx/package.mk @@ -6,13 +6,14 @@ PKG_NAME="libvpx" PKG_VERSION="df655cf4fb6c2a23b964544acd015cc715752830" # 1.13.1 PKG_LICENSE="BSD" PKG_SITE="https://github.com/webmproject/libvpx" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_HOST="toolchain nasm:host" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="WebM VP8/VP9 Codec" configure_host() { HOST_ARCH=$(uname -m) + case ${HOST_ARCH} in aarch64) PKG_HOST_NAME_LIBVPX="arm64-linux-gcc" @@ -24,26 +25,26 @@ configure_host() { PKG_HOST_NAME_LIBVPX="x86_64-linux-gcc" ;; esac + ${PKG_CONFIGURE_SCRIPT} --prefix=${TOOLCHAIN} \ - --extra-cflags="${CFLAGS}" \ - --as=nasm \ - --target=${PKG_HOST_NAME_LIBVPX} \ - --disable-docs \ - --disable-examples \ - --disable-shared \ - --disable-tools \ - --disable-unit-tests \ - --disable-vp8-decoder \ - --disable-vp9-decoder \ - --enable-ccache \ - --enable-pic \ - --enable-static \ - --enable-vp8 \ - --enable-vp9 + --extra-cflags="${CFLAGS}" \ + --as=nasm \ + --target=${PKG_HOST_NAME_LIBVPX} \ + --disable-docs \ + --disable-examples \ + --disable-shared \ + --disable-tools \ + --disable-unit-tests \ + --disable-vp8-decoder \ + --disable-vp9-decoder \ + --enable-ccache \ + --enable-pic \ + --enable-static \ + --enable-vp8 \ + --enable-vp9 } configure_target() { - case ${ARCH} in aarch64) PKG_TARGET_NAME_LIBVPX="arm64-linux-gcc" @@ -57,24 +58,23 @@ configure_target() { esac ${PKG_CONFIGURE_SCRIPT} --prefix=/usr \ - --extra-cflags="${CFLAGS}" \ - --as=nasm \ - --target=${PKG_TARGET_NAME_LIBVPX} \ - --disable-docs \ - --disable-examples \ - --enable-shared \ - --disable-tools \ - --disable-unit-tests \ - --disable-vp8-decoder \ - --disable-vp9-decoder \ - --enable-ccache \ - --enable-pic \ - --enable-static \ - --enable-vp8 \ - --enable-vp9 + --extra-cflags="${CFLAGS}" \ + --as=nasm \ + --target=${PKG_TARGET_NAME_LIBVPX} \ + --disable-docs \ + --disable-examples \ + --enable-shared \ + --disable-tools \ + --disable-unit-tests \ + --disable-vp8-decoder \ + --disable-vp9-decoder \ + --enable-ccache \ + --enable-pic \ + --enable-static \ + --enable-vp8 \ + --enable-vp9 } post_makeinstall_target() { - ln -sfv libvpx.so.8.0.1 ${INSTALL}/usr/lib/libvpx.so.6 + ln -sf libvpx.so.8.0.1 ${INSTALL}/usr/lib/libvpx.so.6 } - diff --git a/projects/ROCKNIX/packages/print/poppler/package.mk b/projects/ROCKNIX/packages/print/poppler/package.mk index b53934eb7e7..84cc35a34aa 100644 --- a/projects/ROCKNIX/packages/print/poppler/package.mk +++ b/projects/ROCKNIX/packages/print/poppler/package.mk @@ -4,21 +4,21 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="poppler" -PKG_VERSION="adf710ee" +PKG_VERSION="23.05.0" PKG_LICENSE="GPL" PKG_SITE="https://gitlab.freedesktop.org/poppler/poppler" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/-/archive/${PKG_NAME}-${PKG_VERSION}/${PKG_NAME}-${PKG_NAME}-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_TARGET="toolchain zlib libpng libjpeg-turbo fontconfig boost" PKG_LONGDESC="This is Poppler, a library for rendering PDF files, and examining or modifying their structure." PKG_TOOLCHAIN="cmake" -pre_configure_target() { +pre_configure_target() { PKG_CMAKE_OPTS_TARGET="-DCMAKE_BUILD_TYPE=release \ - -DENABLE_LIBOPENJPEG=none \ - -DENABLE_GLIB=ON \ - -DENABLE_QT5=off \ - -DENABLE_CPP=off" - + -DENABLE_LIBOPENJPEG=none \ + -DENABLE_GLIB=ON \ + -DENABLE_QT5=off \ + -DENABLE_CPP=off" + # Disable "gobject-introspection" sed -i "s|set(HAVE_INTROSPECTION \${INTROSPECTION_FOUND})|set(HAVE_INTROSPECTION "NO")|g" ${PKG_BUILD}/CMakeLists.txt } diff --git a/projects/ROCKNIX/packages/sysutils/drm_tool/package.mk b/projects/ROCKNIX/packages/sysutils/drm_tool/package.mk index cdaf1f239da..c6b77f7e4d6 100644 --- a/projects/ROCKNIX/packages/sysutils/drm_tool/package.mk +++ b/projects/ROCKNIX/packages/sysutils/drm_tool/package.mk @@ -5,11 +5,10 @@ PKG_NAME="drm_tool" PKG_VERSION="1cb5b10b7d529105e33f27388519671ee7ce46f3" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/NickCis/drm_tool" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libdrm" PKG_LONGDESC="A simple tool for getting drm info and setting properties." - pre_configure_target() { export CFLAGS="${TARGET_CFLAGS} -D_FILE_OFFSET_BITS=64 -ldrm" export LDFLAGS="${TARGET_LDFLAGS} -ldrm" @@ -17,5 +16,5 @@ pre_configure_target() { makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp drm_tool ${INSTALL}/usr/bin + cp -a drm_tool ${INSTALL}/usr/bin } diff --git a/projects/ROCKNIX/packages/sysutils/nvtop/package.mk b/projects/ROCKNIX/packages/sysutils/nvtop/package.mk index bfc427ac537..8b9a4be5108 100644 --- a/projects/ROCKNIX/packages/sysutils/nvtop/package.mk +++ b/projects/ROCKNIX/packages/sysutils/nvtop/package.mk @@ -2,11 +2,10 @@ # Copyright (C) 2024-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="nvtop" -PKG_VERSION="339ee0b10a64ec51f43d27357b0068a40f16e9e4" -PKG_ARCH="arm aarch64" +PKG_VERSION="76890233d759199f50ad3bdb57a0c0988e96fc44" #3.3.2 PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/Syllo/nvtop" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="libdrm mesa" PKG_LONGDESC="NVTOP stands for Neat Videocard TOP, a (h)top like task monitor for AMD, Intel and NVIDIA GPUs." PKG_TOOLCHAIN="cmake" @@ -14,8 +13,8 @@ PKG_TOOLCHAIN="cmake" case ${TARGET_ARCH} in x86_64) PKG_CMAKE_OPTS_TARGET+=" -DNVIDIA_SUPPORT=ON -DAMDGPU_SUPPORT=ON -DINTEL_SUPPORT=ON -DPANFROST_SUPPORT=OFF -DPANTHOR_SUPPORT=OFF -DMSM_SUPPORT=OFF" - ;; + ;; aarch64) - PKG_CMAKE_OPTS_TARGET+=" -DPANFROST_SUPPORT=ON -DPANTHOR_SUPPORT=ON -DMSM_SUPPORT=ON -DNVIDIA_SUPPORT=OFF -DAMDGPU_SUPPORT=OFF -DINTEL_SUPPORT=OFF" - ;; + PKG_CMAKE_OPTS_TARGET+=" -DPANFROST_SUPPORT=ON -DPANTHOR_SUPPORT=ON -DMSM_SUPPORT=ON -DNVIDIA_SUPPORT=OFF -DAMDGPU_SUPPORT=OFF -DINTEL_SUPPORT=OFF" + ;; esac diff --git a/projects/ROCKNIX/packages/sysutils/squashfuse/package.mk b/projects/ROCKNIX/packages/sysutils/squashfuse/package.mk index 43c88f2ae46..44132eab722 100644 --- a/projects/ROCKNIX/packages/sysutils/squashfuse/package.mk +++ b/projects/ROCKNIX/packages/sysutils/squashfuse/package.mk @@ -2,11 +2,10 @@ # Copyright (C) 2026 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="squashfuse" -PKG_VERSION="e1e237a7ee9f0646d05aa85d20939c49555279db" -PKG_ARCH="aarch64" +PKG_VERSION="df85c4ddf1a079b10cfe39a2caf7d0cfdc504a6b" PKG_LICENSE="BSD-2-Clause" PKG_SITE="https://github.com/vasi/squashfuse" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain fuse" PKG_LONGDESC=" squashfuse - Mount SquashFS archives using FUSE" PKG_TOOLCHAIN="autotools" diff --git a/projects/ROCKNIX/packages/tools/batteryplus/package.mk b/projects/ROCKNIX/packages/tools/batteryplus/package.mk index b21a7cf4914..d29972bb747 100644 --- a/projects/ROCKNIX/packages/tools/batteryplus/package.mk +++ b/projects/ROCKNIX/packages/tools/batteryplus/package.mk @@ -3,37 +3,35 @@ PKG_NAME="batteryplus" PKG_VERSION="1c31e89ec1828d51710ad35a607bdfad7e18464e" -PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/Mikhailzrick/knubat.components" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain systemd" -PKG_LONGDESC="BatteryPlus — battery percentage daemon for handheld Linux systems" - +PKG_LONGDESC="BatteryPlus is a battery percentage daemon for handheld Linux systems" PKG_TOOLCHAIN="make" pre_make_target() { - cp ${PKG_DIR}/Makefile ${PKG_BUILD} + cp ${PKG_DIR}/Makefile ${PKG_BUILD} } makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/batteryplus ${INSTALL}/usr/bin - cp ${PKG_DIR}/sources/scripts/* ${INSTALL}/usr/bin - chmod 0755 ${INSTALL}/usr/bin/* - - mkdir -p ${INSTALL}/etc/batteryplus - cp -f ${PKG_DIR}/config/batteryplus.conf ${INSTALL}/etc/batteryplus - - # Empty hook dirs - mkdir -p ${INSTALL}/etc/batteryplus/charging.d - touch ${INSTALL}/etc/batteryplus/charging.d/.keep - mkdir -p ${INSTALL}/etc/batteryplus/discharging.d - touch ${INSTALL}/etc/batteryplus/discharging.d/.keep - mkdir -p ${INSTALL}/etc/batteryplus/state.d - touch ${INSTALL}/etc/batteryplus/state.d/.keep + mkdir -p ${INSTALL}/usr/bin + cp -a ${PKG_BUILD}/batteryplus ${INSTALL}/usr/bin + cp -a ${PKG_DIR}/sources/scripts/* ${INSTALL}/usr/bin + + mkdir -p ${INSTALL}/etc/batteryplus + cp -a ${PKG_DIR}/config/batteryplus.conf ${INSTALL}/etc/batteryplus + + mkdir -p ${INSTALL}/etc/batteryplus/charging.d + touch ${INSTALL}/etc/batteryplus/charging.d/.keep + + mkdir -p ${INSTALL}/etc/batteryplus/discharging.d + touch ${INSTALL}/etc/batteryplus/discharging.d/.keep + + mkdir -p ${INSTALL}/etc/batteryplus/state.d + touch ${INSTALL}/etc/batteryplus/state.d/.keep } post_install() { - enable_service batteryplus.service + enable_service batteryplus.service } diff --git a/projects/ROCKNIX/packages/tools/batteryplus/sources/scripts/batteryplus-init b/projects/ROCKNIX/packages/tools/batteryplus/sources/scripts/batteryplus-init old mode 100644 new mode 100755 diff --git a/projects/ROCKNIX/packages/tools/mkbootimg/package.mk b/projects/ROCKNIX/packages/tools/mkbootimg/package.mk index 26e5643a1dc..9e9a49f37c8 100644 --- a/projects/ROCKNIX/packages/tools/mkbootimg/package.mk +++ b/projects/ROCKNIX/packages/tools/mkbootimg/package.mk @@ -1,17 +1,17 @@ # SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2025 ROCKNIX (https://github.com/ROCKNIX) +# Copyright (C) 2025-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="mkbootimg" PKG_VERSION="d2bb0af5ba6d3198a3e99529c97eda1be0b5a093" PKG_LICENSE="GPL" PKG_SITE="https://android.googlesource.com/platform/system/tools/mkbootimg" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/+archive/${PKG_VERSION}.tar.gz" PKG_LONGDESC="mkbootimg: Creates kernel boot images for Android" PKG_TOOLCHAIN="manual" PKG_DEPENDS_HOST="toolchain Python3:host" makeinstall_host() { mkdir -p ${TOOLCHAIN}/mkbootimg - cp -r gki/ mkbootimg.py $TOOLCHAIN/mkbootimg/ + cp -a gki/ mkbootimg.py $TOOLCHAIN/mkbootimg } diff --git a/projects/ROCKNIX/packages/ui/lowerdeck/package.mk b/projects/ROCKNIX/packages/ui/lowerdeck/package.mk index 76c45df4d87..1ad7ae5dff2 100644 --- a/projects/ROCKNIX/packages/ui/lowerdeck/package.mk +++ b/projects/ROCKNIX/packages/ui/lowerdeck/package.mk @@ -3,21 +3,14 @@ PKG_NAME="lowerdeck" PKG_VERSION="ab735114ab318a84e4d28c9c5f1b154e450a579a" -PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL-2.0-or-later" PKG_SITE="https://github.com/bulzipke/lowerdeck" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain Python3 SDL2 SDL2_image SDL2_ttf" PKG_LONGDESC="Touch UI for the second screen of dual-screen handhelds." PKG_TOOLCHAIN="manual" - makeinstall_target() { mkdir -p ${INSTALL}/usr/share/lowerdeck - cp -a ${PKG_BUILD}/. ${INSTALL}/usr/share/lowerdeck/ - - rm -rf ${INSTALL}/usr/share/lowerdeck/devices - if [ -d "${PKG_BUILD}/devices/${DEVICE}" ]; then - cp -rf ${PKG_BUILD}/devices/${DEVICE}/. ${INSTALL}/usr/share/lowerdeck/ - fi + cp -a ${PKG_BUILD}/* ${INSTALL}/usr/share/lowerdeck } diff --git a/projects/ROCKNIX/packages/wayland/lib/libdecor/package.mk b/projects/ROCKNIX/packages/wayland/lib/libdecor/package.mk index dd05f1809e0..78f6d769f68 100644 --- a/projects/ROCKNIX/packages/wayland/lib/libdecor/package.mk +++ b/projects/ROCKNIX/packages/wayland/lib/libdecor/package.mk @@ -2,10 +2,10 @@ # Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="libdecor" -PKG_VERSION="c2bd8ad6fa42c0cb17553ce77ad8a87d1f543b1f" +PKG_VERSION="0.2.5" PKG_LICENSE="MIT" PKG_SITE="https://gitlab.freedesktop.org/libdecor/libdecor" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_TARGET="toolchain gtk3" PKG_LONGDESC="libdecor - A client-side decorations library for Wayland clients" PKG_TOOLCHAIN="meson" diff --git a/projects/ROCKNIX/packages/wayland/weston-kiosk-shell-dpms/package.mk b/projects/ROCKNIX/packages/wayland/weston-kiosk-shell-dpms/package.mk index fa117b35fd3..f245520b751 100644 --- a/projects/ROCKNIX/packages/wayland/weston-kiosk-shell-dpms/package.mk +++ b/projects/ROCKNIX/packages/wayland/weston-kiosk-shell-dpms/package.mk @@ -5,12 +5,11 @@ PKG_NAME="weston-kiosk-shell-dpms" PKG_VERSION="1273a6ed6a3fdd7af9e3d5d70b4ef40ecb929309" PKG_LICENSE="MIT" PKG_SITE="https://github.com/akhilharihar/Weston-kiosk-shell-DPMS" -PKG_URL="${PKG_SITE}.git" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain ${WINDOWMANAGER}" PKG_LONGDESC="A dpms module for Weston's kiosk shell." post_makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/.${TARGET_NAME}/weston-dpms ${INSTALL}/usr/bin - chmod 0755 ${INSTALL}/usr/bin/weston-dpms + cp -a ${PKG_BUILD}/.${TARGET_NAME}/weston-dpms ${INSTALL}/usr/bin } From 5dbde0ad98da2733711c48e9bd02c885dac5191a Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Sun, 16 Aug 2026 09:51:39 -0700 Subject: [PATCH 4/8] libmali: cosmetic cleanup --- projects/ROCKNIX/packages/graphics/libmali/package.mk | 3 --- 1 file changed, 3 deletions(-) diff --git a/projects/ROCKNIX/packages/graphics/libmali/package.mk b/projects/ROCKNIX/packages/graphics/libmali/package.mk index 688c6a3cab0..765e2fe4e99 100644 --- a/projects/ROCKNIX/packages/graphics/libmali/package.mk +++ b/projects/ROCKNIX/packages/graphics/libmali/package.mk @@ -25,9 +25,6 @@ case "${DEVICE}" in RK3588) DRIVER_VERSION="g13p0" ;; - RK3326) # RK3326 and RK3566 - DRIVER_VERSION="g24p0" - ;; esac case "${DISPLAYSERVER}" in From e931a6942eb39e3f5ae97c0071c1b2811e331652 Mon Sep 17 00:00:00 2001 From: tiopex Date: Sun, 16 Aug 2026 22:41:01 +0200 Subject: [PATCH 5/8] lsfg-vk: add enable environment setting --- projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk b/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk index a5dc31eb2c2..d62e33836f1 100644 --- a/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk +++ b/projects/ROCKNIX/packages/graphics/lsfg-vk/package.mk @@ -35,6 +35,11 @@ makeinstall_target() { cd ${PKG_BUILD}/.${TARGET_NAME} DESTDIR="${INSTALL}" ninja install + if ! grep -q '"enable_environment"' ${INSTALL}/usr/share/vulkan/implicit_layer.d/VkLayer_LSFGVK_frame_generation.json; then + sed -i '/"disable_environment"/i\ "enable_environment": { "LSFGVK_ENV": "1" },' \ + ${INSTALL}/usr/share/vulkan/implicit_layer.d/VkLayer_LSFGVK_frame_generation.json + fi + mkdir -p ${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d cp ${INSTALL}/usr/share/vulkan/implicit_layer.d/VkLayer_LSFGVK_frame_generation.json \ ${INSTALL}/usr/lib/pressure-vessel/overrides/share/vulkan/implicit_layer.d From cf26a7059fd4019973463bcbc6a914a2b66c5dfa Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 17 Aug 2026 00:07:08 +0000 Subject: [PATCH 6/8] mkbootimg: fix package --- projects/ROCKNIX/packages/tools/mkbootimg/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ROCKNIX/packages/tools/mkbootimg/package.mk b/projects/ROCKNIX/packages/tools/mkbootimg/package.mk index 9e9a49f37c8..b61f46be2b4 100644 --- a/projects/ROCKNIX/packages/tools/mkbootimg/package.mk +++ b/projects/ROCKNIX/packages/tools/mkbootimg/package.mk @@ -5,7 +5,7 @@ PKG_NAME="mkbootimg" PKG_VERSION="d2bb0af5ba6d3198a3e99529c97eda1be0b5a093" PKG_LICENSE="GPL" PKG_SITE="https://android.googlesource.com/platform/system/tools/mkbootimg" -PKG_URL="${PKG_SITE}/+archive/${PKG_VERSION}.tar.gz" +PKG_URL="https://github.com/jbeich/platform_system_tools_mkbootimg/archive/${PKG_VERSION}.tar.gz" PKG_LONGDESC="mkbootimg: Creates kernel boot images for Android" PKG_TOOLCHAIN="manual" PKG_DEPENDS_HOST="toolchain Python3:host" From 1e3cf973a8924b75802ffe58afebad890ae41975 Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Sun, 16 Aug 2026 22:17:37 -0700 Subject: [PATCH 7/8] SM8750: port sm8550 patch + silence spam --- ...00-input-misc-qcom-hv-haptics-sm8750.patch | 2 +- ...iver-support-periodic-sine-and-fixes.patch | 2 +- ...om-hv-haptics-defer-rsinput-playback.patch | 186 ++++++++++++++++++ 3 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 projects/ROCKNIX/devices/SM8750/patches/linux/1004-input-qcom-hv-haptics-defer-rsinput-playback.patch diff --git a/projects/ROCKNIX/devices/SM8750/patches/linux/1000-input-misc-qcom-hv-haptics-sm8750.patch b/projects/ROCKNIX/devices/SM8750/patches/linux/1000-input-misc-qcom-hv-haptics-sm8750.patch index 076326d8c53..45c05959d2b 100644 --- a/projects/ROCKNIX/devices/SM8750/patches/linux/1000-input-misc-qcom-hv-haptics-sm8750.patch +++ b/projects/ROCKNIX/devices/SM8750/patches/linux/1000-input-misc-qcom-hv-haptics-sm8750.patch @@ -2123,7 +2123,7 @@ diff -Naur a/drivers/input/misc/qcom-hv-haptics.c b/drivers/input/misc/qcom-hv-h + } + + haptics_read(chip, chip->hbst_addr_base, 0x09, &val, 1); -+ dev_err(chip->dev, "haptics_enable_play, 0xf209=0x%x\n", val); ++ dev_dbg(chip->dev, "haptics_enable_play, 0xf209=0x%x\n", val); + + if (!en) + haptics_wait_brake_complete(chip); diff --git a/projects/ROCKNIX/devices/SM8750/patches/linux/1001-haptics-driver-support-periodic-sine-and-fixes.patch b/projects/ROCKNIX/devices/SM8750/patches/linux/1001-haptics-driver-support-periodic-sine-and-fixes.patch index 779a8edd625..400a503029c 100644 --- a/projects/ROCKNIX/devices/SM8750/patches/linux/1001-haptics-driver-support-periodic-sine-and-fixes.patch +++ b/projects/ROCKNIX/devices/SM8750/patches/linux/1001-haptics-driver-support-periodic-sine-and-fixes.patch @@ -20,7 +20,7 @@ goto restore; @@ -2121,9 +2125,12 @@ haptics_read(chip, chip->hbst_addr_base, 0x09, &val, 1); - dev_err(chip->dev, "haptics_enable_play, 0xf209=0x%x\n", val); + dev_dbg(chip->dev, "haptics_enable_play, 0xf209=0x%x\n", val); - if (!en) + if (!en) { diff --git a/projects/ROCKNIX/devices/SM8750/patches/linux/1004-input-qcom-hv-haptics-defer-rsinput-playback.patch b/projects/ROCKNIX/devices/SM8750/patches/linux/1004-input-qcom-hv-haptics-defer-rsinput-playback.patch new file mode 100644 index 00000000000..10bd9a50a87 --- /dev/null +++ b/projects/ROCKNIX/devices/SM8750/patches/linux/1004-input-qcom-hv-haptics-defer-rsinput-playback.patch @@ -0,0 +1,186 @@ +From: gh123man +Subject: [PATCH] input: qcom-hv-haptics: defer rsinput playback bridge + +The rsinput force-feedback playback callback runs below input_event(), with +the input device event spinlock held and interrupts disabled. The global +Qualcomm haptics bridge calls haptics_erase() directly from that callback. +haptics_erase() takes a mutex and synchronously cancels delayed work, which +can sleep and produces "BUG: scheduling while atomic" during game rumble. + +Keep playback submission atomic by recording the latest request and applying +it from a workqueue. Serialize uploads, playback, and gain changes with a +mutex in process context, and drain both playback work and delayed stop work +before suspending the haptics device. + +--- +--- a/drivers/input/misc/qcom-hv-haptics.c ++++ b/drivers/input/misc/qcom-hv-haptics.c +@@ -792,6 +792,12 @@ + struct notifier_block lpass_ssr_nb; + struct mutex vmax_lock; + struct work_struct set_gain_work; ++ struct mutex global_ff_lock; ++ struct work_struct global_playback_work; ++ spinlock_t global_playback_lock; ++ u32 global_playback_seq; ++ int global_effect_id; ++ int global_playback_val; + volatile bool chip_effect_loaded; + volatile bool chip_is_playing; + struct list_head mmap_effect_list; +@@ -858,6 +864,7 @@ + }; + + static struct haptics_chip *phapchip; ++static void haptics_global_playback_work(struct work_struct *work); + + bool qcom_haptics_vi_sense_is_enabled(void) + { +@@ -6438,6 +6445,9 @@ + hrtimer_setup(&chip->hbst_off_timer, haptics_disable_hbst_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + INIT_DELAYED_WORK(&chip->stop_work, haptics_stop_constant_effect_play); + INIT_WORK(&chip->set_gain_work, haptics_set_gain_work); ++ mutex_init(&chip->global_ff_lock); ++ spin_lock_init(&chip->global_playback_lock); ++ INIT_WORK(&chip->global_playback_work, haptics_global_playback_work); + + atomic_set(&chip->play.fifo_status.is_busy, 0); + atomic_set(&chip->play.fifo_status.written_done, 0); +@@ -6545,6 +6555,7 @@ + struct haptics_chip *chip = dev_get_drvdata(&pdev->dev); + + phapchip = NULL; ++ cancel_work_sync(&chip->global_playback_work); + if (chip->pbs_node) + of_node_put(chip->pbs_node); + +@@ -6602,6 +6613,9 @@ + struct haptics_play_info *play = &chip->play; + int rc; + ++ cancel_work_sync(&chip->global_playback_work); ++ cancel_delayed_work_sync(&chip->stop_work); ++ + mutex_lock(&play->lock); + if ((play->pattern_src == FIFO) && + atomic_read(&play->fifo_status.is_busy)) { +@@ -6730,54 +6744,91 @@ + haptics_ds_suspend_config(chip->dev); + } + +-int qcom_spmi_haptics_global_upload(struct ff_effect *effect) { +- int ret; +- +- if (!phapchip) +- return -ENODEV; +- +- spin_lock_irq(&phapchip->input_dev->event_lock); ++static void haptics_global_playback_work(struct work_struct *work) ++{ ++ struct haptics_chip *chip = container_of(work, struct haptics_chip, ++ global_playback_work); ++ unsigned long flags; ++ u32 sequence; ++ int effect_id, val, ret; + +- ret = phapchip->input_dev->ff->upload(phapchip->input_dev, effect, NULL); ++ /* ++ * Force-feedback playback is called with the input device event lock held, ++ * so it cannot invoke the haptics callbacks directly: erase waits for the ++ * delayed stop work and takes a mutex. Apply the latest requested state ++ * here instead, in sleepable workqueue context. Loop if another event was ++ * delivered while the hardware operation was in progress. ++ */ ++ do { ++ spin_lock_irqsave(&chip->global_playback_lock, flags); ++ sequence = chip->global_playback_seq; ++ effect_id = chip->global_effect_id; ++ val = chip->global_playback_val; ++ spin_unlock_irqrestore(&chip->global_playback_lock, flags); ++ ++ mutex_lock(&chip->global_ff_lock); ++ if (val) ++ ret = haptics_playback(chip->input_dev, effect_id, val); ++ else ++ ret = haptics_erase(chip->input_dev, effect_id); ++ mutex_unlock(&chip->global_ff_lock); + +- spin_unlock_irq(&phapchip->input_dev->event_lock); ++ if (ret) ++ dev_warn(chip->dev, "global %s failed: %d\n", ++ val ? "playback" : "erase", ret); + +- return ret; ++ spin_lock_irqsave(&chip->global_playback_lock, flags); ++ ret = sequence != chip->global_playback_seq; ++ spin_unlock_irqrestore(&chip->global_playback_lock, flags); ++ } while (ret); + } + +-int qcom_spmi_haptics_global_playback(int effect_id, int val) { ++int qcom_spmi_haptics_global_upload(struct ff_effect *effect) ++{ ++ struct haptics_chip *chip = READ_ONCE(phapchip); + int ret; + +- if (!phapchip) ++ if (!chip) + return -ENODEV; + +- spin_lock_irq(&phapchip->input_dev->event_lock); ++ mutex_lock(&chip->global_ff_lock); ++ ret = haptics_upload_effect(chip->input_dev, effect, NULL); ++ mutex_unlock(&chip->global_ff_lock); + +- if (val != 0) +- ret = phapchip->input_dev->ff->playback(phapchip->input_dev, effect_id, val); +- else +- ret = phapchip->input_dev->ff->erase(phapchip->input_dev, effect_id); ++ return ret; ++} ++ ++int qcom_spmi_haptics_global_playback(int effect_id, int val) ++{ ++ struct haptics_chip *chip = READ_ONCE(phapchip); ++ unsigned long flags; + +- if (ret) +- pr_warn("%s called for %s, error in return (%d)\n", __func__, (val!=0 ? "Playback" : "Erase"), ret); ++ if (!chip) ++ return -ENODEV; + +- spin_unlock_irq(&phapchip->input_dev->event_lock); ++ spin_lock_irqsave(&chip->global_playback_lock, flags); ++ chip->global_effect_id = effect_id; ++ chip->global_playback_val = val; ++ chip->global_playback_seq++; ++ spin_unlock_irqrestore(&chip->global_playback_lock, flags); + +- return ret; ++ schedule_work(&chip->global_playback_work); ++ return 0; + } + +-int qcom_spmi_haptics_global_set_gain(u16 gain) { +- if (!phapchip) +- return -ENODEV; ++int qcom_spmi_haptics_global_set_gain(u16 gain) ++{ ++ struct haptics_chip *chip = READ_ONCE(phapchip); + +- spin_lock_irq(&phapchip->input_dev->event_lock); ++ if (!chip) ++ return -ENODEV; + + //max is 0x7fff, and minimum is 0x4000 the same values android uses + gain = clamp(gain, 0x4000, 0x7fff); + +- phapchip->input_dev->ff->set_gain(phapchip->input_dev, gain); +- +- spin_unlock_irq(&phapchip->input_dev->event_lock); ++ mutex_lock(&chip->global_ff_lock); ++ haptics_set_gain(chip->input_dev, gain); ++ mutex_unlock(&chip->global_ff_lock); + + return 0; + } From 260b1217da57963cce82ae4c79f813330067163d Mon Sep 17 00:00:00 2001 From: aleksei74 Date: Mon, 17 Aug 2026 16:30:20 +0900 Subject: [PATCH 8/8] ci: limit changelog to first-parent history --- .github/workflows/build-nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-nightly.yml b/.github/workflows/build-nightly.yml index fc55e495b67..6375fb83704 100644 --- a/.github/workflows/build-nightly.yml +++ b/.github/workflows/build-nightly.yml @@ -234,9 +234,9 @@ jobs: PREV_TAG=$(git tag --sort=-creatordate | grep -vx "${CURRENT_TAG}" | head -n 1 || true) if [ -z "$PREV_TAG" ]; then - COMMITS=$(git log --pretty=format:"%h %s (%an)" | grep -v "Merge branch" || true) + COMMITS=$(git log --first-parent --pretty=format:"%h %s (%an)" | grep -v "Merge branch" || true) else - COMMITS=$(git log "${PREV_TAG}..HEAD" --pretty=format:"%h %s (%an)" | grep -v "Merge branch" || true) + COMMITS=$(git log "${PREV_TAG}..HEAD" --first-parent --pretty=format:"%h %s (%an)" | grep -v "Merge branch" || true) fi {