From 7e560e1809a11bc42a0b03f94418ca82d191f3a0 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 10 Apr 2024 23:59:28 +0200 Subject: [PATCH 001/184] Correct R36S controls in device tree --- Makefile | 2 +- packages/virtual/emulators/package.mk | 2 +- projects/Rockchip/devices/RK3566/options | 2 +- .../patches/linux/RK3326/000-rk3326-dts.patch | 23 ++++++++----------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 1f0467404..0fe59ba12 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ package-clean: # For example: make docker-AMD64 will use docker to call: make AMD64 # All variables are scoped to docker-* commands to prevent weird collisions/behavior with non-docker commands -docker-%: DOCKER_IMAGE := "rocknix/rocknix-build:latest" +docker-%: DOCKER_IMAGE := "rocknix-build" # DOCKER_WORK_DIR is the directory in the Docker image - it is set to /work by default # Anytime this directory changes, you must run `make clean` similarly to moving the distribution directory diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index 01685be70..dad9c6503 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -46,7 +46,7 @@ case "${DEVICE}" in PKG_RETROARCH+=" retropie-shaders" ;; RK356*) - [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr" + [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr wine" PKG_DEPENDS_TARGET+=" common-shaders glsl-shaders" PKG_EMUS+=" box64 drastic-sa mednafen portmaster scummvmsa yabasanshiro-sa" LIBRETRO_CORES+=" flycast-lr uae4arm" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index ac7de0e9b..ebdf073f7 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -76,7 +76,7 @@ EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" # additional packages to install - # ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="stress-ng" # additional Firmware to use ( ) # Space separated list is supported, diff --git a/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch b/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch index 9a61c7da5..fe57c7651 100644 --- a/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch +++ b/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch @@ -450,7 +450,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts l diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts 1970-01-01 00:00:00.000000000 +0000 +++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts 2024-03-24 22:06:51.761765381 +0000 -@@ -0,0 +1,207 @@ +@@ -0,0 +1,202 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * # Copyright (C) 2024-present JELOS (https://github.com/JustEnoughLinuxOS) @@ -581,24 +581,19 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts l + }; + sw11 { + gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO F3"; -+ linux,code = ; // 0x2c2 ++ label = "GPIO BTN_THUMBL"; ++ linux,code = ; // 0x2c2 + }; + sw12 { + gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO F4"; -+ linux,code = ; // 0x2c3 ++ label = "GPIO BTN_THUMBR"; ++ linux,code = ; // 0x2c3 + }; + sw13 { + gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO F5"; -+ linux,code = ; // 0x2c4 ++ label = "GPIO BTN_FN"; ++ linux,code = ; // 0x2c4 + }; -+ /*sw14 { -+ gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO F6"; -+ linux,code = ; // 0x13c -+ };*/ + sw15 { + gpios = <&gpio2 RK_PA6 GPIO_ACTIVE_LOW>; + label = "GPIO TOP-LEFT"; @@ -611,7 +606,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts l + }; + sw19 { + gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO F1"; ++ label = "GPIO BTN_SELECT"; + linux,code = ; + }; + sw20 { @@ -626,7 +621,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts l + }; + sw22 { + gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO F2"; ++ label = "GPIO BTN_START"; + linux,code = ; + }; + }; From 102367267025300d9aa52b26b138c5259582c44b Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 11 Apr 2024 00:00:02 +0200 Subject: [PATCH 002/184] R36S retroarch controls Probably needs and update when i get feedback --- .../Game Console R36S/110-retroarch-joypad | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad diff --git a/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad b/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad new file mode 100755 index 000000000..e7d323e02 --- /dev/null +++ b/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad @@ -0,0 +1,45 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/JustEnoughLinuxOS) + +# Retroarch joypad config for R36S + +cat </storage/joypads/odroidgo3_joypad.cfg +input_driver = "udev" +input_device = "odroidgo3_joypad" +input_device_display_name = "R36S" +input_b_btn = "0" +input_y_btn = "3" +input_select_btn = "8" +input_start_btn = "9" +input_a_btn = "1" +input_x_btn = "2" +input_l_btn = "4" +input_r_btn = "5" +input_l2_btn = "6" +input_r2_btn = "7" +input_l3_btn = "16" +input_r3_btn = "10" +input_up_btn = "12" +input_down_btn = "13" +input_left_btn = "14" +input_right_btn = "15" +input_l_x_plus_axis = "+0" +input_l_x_minus_axis = "-0" +input_l_y_plus_axis = "+1" +input_l_y_minus_axis = "-1" +input_r_x_plus_axis = "+2" +input_r_x_minus_axis = "-2" +input_r_y_plus_axis = "+3" +input_r_y_minus_axis = "-3" +input_enable_hotkey_btn = "12" +input_exit_emulator_btn = "13" +input_menu_toggle_btn = "2" +input_fps_toggle_btn = "3" +input_load_state_btn = "4" +input_save_state_btn = "5" +input_rewind_btn = "6" +input_toggle_fast_forward_btn = "7" +input_vendor_id = "1" +input_product_id = "1" +EOF From 5743c11a2d31e64405d789fe0595a72d476c57bd Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 11 Apr 2024 16:01:26 +0200 Subject: [PATCH 003/184] Update R36S RA controls thanks to TSS_Killer --- .../devices/Game Console R36S/110-retroarch-joypad | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad b/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad index e7d323e02..2ee2be90a 100755 --- a/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad +++ b/packages/hardware/quirks/devices/Game Console R36S/110-retroarch-joypad @@ -18,12 +18,12 @@ input_l_btn = "4" input_r_btn = "5" input_l2_btn = "6" input_r2_btn = "7" -input_l3_btn = "16" -input_r3_btn = "10" -input_up_btn = "12" -input_down_btn = "13" -input_left_btn = "14" -input_right_btn = "15" +input_l3_btn = "11" +input_r3_btn = "12" +input_up_btn = "13" +input_down_btn = "14" +input_left_btn = "15" +input_right_btn = "16" input_l_x_plus_axis = "+0" input_l_x_minus_axis = "-0" input_l_y_plus_axis = "+1" From 03f7908d91ea4d386cea3ab1f8864b0e3556ba65 Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 11 Apr 2024 18:45:13 +0200 Subject: [PATCH 004/184] rk3566: update to linux 6.9-rc3 --- .../Anbernic RG ARC-D/001-device_config | 11 + .../devices/Anbernic RG ARC-D/020-gpios | 15 + .../devices/Anbernic RG ARC-D/040-display | 16 + .../Anbernic RG ARC-S/001-device_config | 11 + .../devices/Anbernic RG ARC-S/020-gpios | 17 + .../devices/Anbernic RG ARC-S/040-display | 16 + packages/kernel/linux/package.mk | 4 + projects/Rockchip/devices/RK3566/options | 2 +- .../linux/RK3566/005-anbernic-input.patch | 960 ++++++++++++++++++ .../patches/linux/RK3566/009-invert-abs.patch | 105 -- .../010-rgb10-max3-panel-dtbindings.patch | 29 - .../linux/RK3566/011-rgb10-max3-panel.patch | 125 --- .../linux/RK3566/012-st7703-rotation.patch | 57 -- .../013-rk2023-dtsi-rgb10-max3-update.patch | 106 -- .../RK3566/014-rgb10-max3-dtbindings.patch | 26 - .../RK3566/015-rgb10-max3-dts-makefile.patch | 12 - .../linux/RK3566/016-rgb10-max3-dts.patch | 110 -- .../linux/RK3566/020-rg353vs-input.patch | 171 ---- .../linux/RK3566/021-rg503-input.patch | 211 ---- .../linux/RK3566/022-rg353v-input.patch | 173 ---- .../linux/RK3566/023-rg353p-input.patch | 171 ---- .../linux/RK3566/024-rg353ps-input.patch | 170 ---- .../patches/linux/RK3566/025-rgxx-input.patch | 188 ---- 23 files changed, 1051 insertions(+), 1655 deletions(-) create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/001-device_config create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-D/020-gpios create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-D/040-display create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-S/001-device_config create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-S/020-gpios create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-S/040-display create mode 100644 projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/009-invert-abs.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/010-rgb10-max3-panel-dtbindings.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/011-rgb10-max3-panel.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/012-st7703-rotation.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/013-rk2023-dtsi-rgb10-max3-update.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/014-rgb10-max3-dtbindings.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/015-rgb10-max3-dts-makefile.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/016-rgb10-max3-dts.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/020-rg353vs-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/021-rg503-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/022-rg353v-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/023-rg353p-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/024-rg353ps-input.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/025-rgxx-input.patch diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/001-device_config b/packages/hardware/quirks/devices/Anbernic RG ARC-D/001-device_config new file mode 100644 index 000000000..54c030c92 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/001-device_config @@ -0,0 +1,11 @@ +#!/bin/bash +# SPDX-License-Identifier: Apache-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +cat </storage/.config/profile.d/001-device_config +DEVICE_FAKE_JACKSENSE="false" +DEVICE_POWER_LED="false" +DEVICE_BRIGHTNESS="128" +DEVICE_BATTERY_LED_STATUS="true" +DEVICE_HAS_TOUCHSCREEN="true" +EOF diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/020-gpios b/packages/hardware/quirks/devices/Anbernic RG ARC-D/020-gpios new file mode 100755 index 000000000..357fcb108 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/020-gpios @@ -0,0 +1,15 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +cat </storage/.config/profile.d/020-gpios +DEVICE_WIFI="0" +DEVICE_PWM_MOTOR="pwmchip1" +EOF + +. /storage/.config/profile.d/020-gpios +# Enable PWM for rumble and turn rumble off during startup. +echo 0 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/export +echo 1000000 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/period +echo 1 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/enable +echo 1000000 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/duty_cycle diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/040-display b/packages/hardware/quirks/devices/Anbernic RG ARC-D/040-display new file mode 100755 index 000000000..107ddab32 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/040-display @@ -0,0 +1,16 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +. /etc/profile + +# Configure default contrast saturation and hue values +for PROPERTY in brightness contrast saturation hue +do + MYVAL=$(get_setting display.${PROPERTY}) + if [ -z "${MYVAL}" ] + then + MYVAL=$(drm_tool list | sed -n '/Connector: 133/,$p' | awk '/'${PROPERTY}'/ {print $5}') + fi + paneladj ${PROPERTY} ${MYVAL} +done diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-S/001-device_config b/packages/hardware/quirks/devices/Anbernic RG ARC-S/001-device_config new file mode 100755 index 000000000..b57d9e7bf --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-S/001-device_config @@ -0,0 +1,11 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +cat </storage/.config/profile.d/001-device_config +DEVICE_FAKE_JACKSENSE="true" +DEVICE_POWER_LED="true" +DEVICE_HEADPHONE_DEV="/dev/input/by-path/platform-rk817-sound-event" +DEVICE_BRIGHTNESS="70" + +EOF diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-S/020-gpios b/packages/hardware/quirks/devices/Anbernic RG ARC-S/020-gpios new file mode 100755 index 000000000..608532312 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-S/020-gpios @@ -0,0 +1,17 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +cat </storage/.config/profile.d/020-gpios +DEVICE_WIFI="5" +DEVICE_LED="77" +DEVICE_PWM_MOTOR="pwmchip1" +DEVICE_JACK="86" +EOF + +. /storage/.config/profile.d/020-gpios +# Enable PWM for rumble and turn rumble off during startup. +echo 0 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/export +echo 1000000 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/period +echo 1 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/enable +echo 1000000 > /sys/class/pwm/${DEVICE_PWM_MOTOR}/pwm0/duty_cycle diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-S/040-display b/packages/hardware/quirks/devices/Anbernic RG ARC-S/040-display new file mode 100755 index 000000000..107ddab32 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-S/040-display @@ -0,0 +1,16 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +. /etc/profile + +# Configure default contrast saturation and hue values +for PROPERTY in brightness contrast saturation hue +do + MYVAL=$(get_setting display.${PROPERTY}) + if [ -z "${MYVAL}" ] + then + MYVAL=$(drm_tool list | sed -n '/Connector: 133/,$p' | awk '/'${PROPERTY}'/ {print $5}') + fi + paneladj ${PROPERTY} ${MYVAL} +done diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 80b445a09..9e88554da 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -24,6 +24,10 @@ case ${DEVICE} in PKG_URL="https://github.com/armbian/linux-rockchip/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" ;; + RK3566*) + PKG_VERSION="6.9-rc3" + PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" + ;; *) PKG_VERSION="6.8.5" PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index ebdf073f7..1e8ebd4ee 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -32,7 +32,7 @@ PARTITION_TABLE="gpt" UBOOT_LABEL="uboot" TRUST_LABEL="trust" - DEVICE_DTB=("rk3566-anbernic-rg353ps" "rk3566-anbernic-rg353vs" "rk3566-anbernic-rg503" "rk3566-anbernic-rg353p" "rk3566-anbernic-rg353v" "rk3566-powkiddy-rk2023" "rk3566-powkiddy-rgb30" "rk3566-powkiddy-rgb10max3" "rk3566-powkiddy-rgb30r2") + DEVICE_DTB=("rk3566-anbernic-rg353ps" "rk3566-anbernic-rg353vs" "rk3566-anbernic-rg503" "rk3566-anbernic-rg353p" "rk3566-anbernic-rg353v" "rk3566-powkiddy-rk2023" "rk3566-powkiddy-rgb30" "rk3566-powkiddy-rgb10max3" "rk3566-powkiddy-rgb30r2" "rk3566-anbernic-rg-arc-d" "rk3566-anbernic-rg-arc-s") UBOOT_DTB="rk3566" UBOOT_CONFIG="anbernic-rgxx3-rk3566_defconfig" PKG_SOC="rk3568" diff --git a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch new file mode 100644 index 000000000..0f0bb6dc3 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch @@ -0,0 +1,960 @@ +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi +index a4a60e4a53d4..8b6ab9ac5c1f 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi +@@ -8,6 +8,113 @@ + #include "rk3566-anbernic-rgxx3.dtsi" + + / { ++/* ++ * Device uses a non-standard six button layout for a gamepad with X, ++ * Y, and Z on the top row of buttons and A, B, and C under the bottom ++ * row. ++ */ ++ gpio_keys_control: gpio-keys-control { ++ compatible = "gpio-keys"; ++ pinctrl-0 = <&btn_pins_ctrl>; ++ pinctrl-names = "default"; ++ ++ button-down { ++ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; ++ label = "DPAD-DOWN"; ++ linux,code = ; ++ }; ++ ++ button-l1 { ++ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; ++ label = "TL"; ++ linux,code = ; ++ }; ++ ++ button-l2 { ++ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; ++ label = "TL2"; ++ linux,code = ; ++ }; ++ ++ button-select { ++ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; ++ label = "SELECT"; ++ linux,code = ; ++ }; ++ ++ button-start { ++ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; ++ label = "START"; ++ linux,code = ; ++ }; ++ ++ button-up { ++ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "DPAD-UP"; ++ linux,code = ; ++ }; ++ ++ button-a { ++ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; ++ label = "A"; ++ linux,code = ; ++ }; ++ ++ button-b { ++ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; ++ label = "B"; ++ linux,code = ; ++ }; ++ ++ button-c { ++ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; ++ label = "C"; ++ linux,code = ; ++ }; ++ ++ button-left { ++ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; ++ label = "DPAD-LEFT"; ++ linux,code = ; ++ }; ++ ++ button-r1 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "TR"; ++ linux,code = ; ++ }; ++ ++ button-r2 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "TR2"; ++ linux,code = ; ++ }; ++ ++ button-right { ++ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "DPAD-RIGHT"; ++ linux,code = ; ++ }; ++ ++ button-x { ++ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; ++ label = "X"; ++ linux,code = ; ++ }; ++ ++ button-y { ++ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; ++ label = "Y"; ++ linux,code = ; ++ }; ++ ++ button-z { ++ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; ++ label = "Z"; ++ linux,code = ; ++ }; ++ }; ++ + backlight: backlight { + compatible = "pwm-backlight"; + power-supply = <&vcc_sys>; +@@ -126,73 +233,6 @@ mipi_in_panel: endpoint { + }; + }; + +-/* +- * Device uses a non-standard six button layout for a gamepad with X, +- * Y, and Z on the top row of buttons and A, B, and C under the bottom +- * row. +- */ +-&gpio_keys_control { +- button-a { +- gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; +- label = "A"; +- linux,code = ; +- }; +- +- button-b { +- gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; +- label = "B"; +- linux,code = ; +- }; +- +- button-c { +- gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; +- label = "C"; +- linux,code = ; +- }; +- +- button-left { +- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; +- label = "DPAD-LEFT"; +- linux,code = ; +- }; +- +- button-r1 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +- +- button-right { +- gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; +- label = "DPAD-RIGHT"; +- linux,code = ; +- }; +- +- button-x { +- gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; +- label = "X"; +- linux,code = ; +- }; +- +- button-y { +- gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; +- label = "Y"; +- linux,code = ; +- }; +- +- button-z { +- gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; +- label = "Z"; +- linux,code = ; +- }; +-}; +- + &pinctrl { + audio-amplifier { + spk_amp_enable_h: spk-amp-enable-h { +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts +index 8aa93c646bec..6fa0fa45429b 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts +@@ -77,20 +77,6 @@ spk_amp: audio-amplifier { + }; + }; + +-&gpio_keys_control { +- button-r1 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +-}; +- + &i2c2 { + pintctrl-names = "default"; + pinctrl-0 = <&i2c2m1_xfer>; +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts +index b211973e36c2..17c30e0e6672 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts +@@ -76,20 +76,6 @@ spk_amp: audio-amplifier { + }; + }; + +-&gpio_keys_control { +- button-r1 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +-}; +- + &panel { + compatible = "anbernic,rg353v-panel-v2"; + iovcc-supply = <&vcc3v3_lcd0_n>; +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts +index f49ce29ba597..9fb8d3d6caf5 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts +@@ -64,20 +64,6 @@ simple-audio-card,cpu { + }; + }; + +-&gpio_keys_control { +- button-r1 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +-}; +- + &i2c2 { + pintctrl-names = "default"; + pinctrl-0 = <&i2c2m1_xfer>; +@@ -124,3 +110,17 @@ &sdhci { + vqmmc-supply = <&vcc_1v8>; + status = "okay"; + }; ++ ++&joypad { ++ hw_info = <0x02>; ++ sw13 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts +index a7dc462fe21f..396fcfe265f7 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts +@@ -63,20 +63,6 @@ simple-audio-card,cpu { + }; + }; + +-&gpio_keys_control { +- button-r1 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +-}; +- + &rk817 { + rk817_charger: charger { + monitored-battery = <&battery>; +@@ -85,3 +71,17 @@ rk817_charger: charger { + rockchip,sleep-filter-current-microamp = <100000>; + }; + }; ++ ++&joypad { ++ hw_info = <0x02>; ++ sw13 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +index 63a18ff36cea..b97d9c99204f 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +@@ -8,73 +8,161 @@ + #include "rk3566-anbernic-rgxx3.dtsi" + + / { +- adc-joystick { +- compatible = "adc-joystick"; +- io-channels = <&adc_mux 0>, +- <&adc_mux 1>, +- <&adc_mux 2>, +- <&adc_mux 3>; +- pinctrl-0 = <&joy_mux_en>; ++ joypad: singleadc-joypad { ++ compatible = "singleadc-joypad"; ++ hw_info = <0x01>; ++ ++ joypad-name = "retrogame_joypad"; ++ joypad-product = <0x1101>; ++ joypad-revision = <0x0100>; ++ ++ status = "okay"; ++ ++ /* gpio pincontrol setup */ + pinctrl-names = "default"; +- poll-interval = <60>; +- #address-cells = <1>; +- #size-cells = <0>; ++ pinctrl-0 = <&btn_pins_ctrl>; + +- axis@0 { +- reg = <0>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <1023 15>; +- linux,code = ; +- }; ++ /* Analog mux define */ ++ io-channel-names = "amux_adc"; ++ io-channels = <&saradc 3>; + +- axis@1 { +- reg = <1>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <15 1023>; +- linux,code = ; ++ /* adc mux channel count */ ++ amux-count = <4>; ++ /* adc mux select(a,b) gpio */ ++ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; ++ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; ++ /* adc mux enable gpio */ ++ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; ++ ++ /* adc calculate scale */ ++ button-adc-scale = <2>; ++ ++ /* adc deadzone range */ ++ button-adc-deadzone = <64>; ++ ++ /* ++ specifies fuzz value that is used to filter noise from ++ the event stream. ++ */ ++ button-adc-fuzz = <32>; ++ button-adc-flat = <32>; ++ ++ /* ++ Analog Stick data tuning value(precent) ++ p = positive direction, n = negative direction ++ report value = (real_adc_data * tuning_value) / 100 ++ */ ++ abs_x-p-tuning = <245>; ++ abs_x-n-tuning = <245>; ++ ++ abs_y-p-tuning = <245>; ++ abs_y-n-tuning = <245>; ++ ++ abs_rx-p-tuning = <245>; ++ abs_rx-n-tuning = <245>; ++ ++ abs_ry-p-tuning = <245>; ++ abs_ry-n-tuning = <245>; ++ ++ /* poll device interval (ms), adc read interval */ ++ poll-interval = <10>; ++ ++ /* gpio button auto repeat set value : default disable */ ++ /* ++ autorepeat; ++ */ ++ sw1 { ++ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-UP"; ++ linux,code = ; + }; +- +- axis@2 { +- reg = <2>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <15 1023>; +- linux,code = ; ++ sw2 { ++ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-DOWN"; ++ linux,code = ; + }; +- +- axis@3 { +- reg = <3>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <1023 15>; +- linux,code = ; ++ sw3 { ++ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-LEFT"; ++ linux,code = ; + }; +- }; +- +- adc_mux: adc-mux { +- compatible = "io-channel-mux"; +- channels = "left_x", "right_x", "left_y", "right_y"; +- #io-channel-cells = <1>; +- io-channels = <&saradc 3>; +- io-channel-names = "parent"; +- mux-controls = <&gpio_mux>; +- settle-time-us = <100>; +- }; ++ sw4 { ++ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-RIGHT"; ++ linux,code = ; ++ }; ++ sw5 { ++ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; ++ label = "GPIO KEY BTN-A"; ++ linux,code = ; ++ }; ++ sw6 { ++ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-B"; ++ linux,code = ; ++ }; ++ sw7 { ++ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-X"; ++ linux,code = ; ++ }; ++ sw8 { ++ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-Y"; ++ linux,code = ; ++ }; ++ sw9 { ++ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_SELECT"; ++ linux,code = ; ++ }; ++ sw10 { ++ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_START"; ++ linux,code = ; ++ }; ++ sw11 { ++ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_F"; ++ linux,code = ; ++ }; ++ sw12 { ++ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL"; ++ linux,code = ; ++ }; ++ sw13 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw14 { ++ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL2"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++ sw16 { ++ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBL"; ++ linux,code = ; ++ }; ++ sw17 { ++ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBR"; ++ linux,code = ; ++ }; ++ }; + +- backlight: backlight { ++ backlight: backlight { + compatible = "pwm-backlight"; + power-supply = <&vcc_sys>; + pwms = <&pwm4 0 25000 0>; + }; +- +- gpio_mux: mux-controller { +- compatible = "gpio-mux"; +- mux-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>, +- <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; +- #mux-control-cells = <0>; +- }; + }; + + &cru { +@@ -126,44 +214,6 @@ mipi_in_panel: endpoint { + }; + }; + +-&gpio_keys_control { +- button-a { +- gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; +- label = "EAST"; +- linux,code = ; +- }; +- +- button-left { +- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; +- label = "DPAD-LEFT"; +- linux,code = ; +- }; +- +- button-right { +- gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; +- label = "DPAD-RIGHT"; +- linux,code = ; +- }; +- +- button-thumbl { +- gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; +- label = "THUMBL"; +- linux,code = ; +- }; +- +- button-thumbr { +- gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; +- label = "THUMBR"; +- linux,code = ; +- }; +- +- button-y { +- gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; +- label = "WEST"; +- linux,code = ; +- }; +-}; +- + &i2c0 { + /* This hardware is physically present but unused. */ + power-monitor@62 { +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +index 94e6dd61a2db..ce8a800a1465 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +@@ -16,62 +16,6 @@ aliases { + mmc1 = &sdmmc1; + mmc2 = &sdmmc2; + }; +- +- adc-joystick { +- compatible = "adc-joystick"; +- io-channels = <&adc_mux 0>, +- <&adc_mux 1>, +- <&adc_mux 2>, +- <&adc_mux 3>; +- pinctrl-0 = <&joy_mux_en>; +- pinctrl-names = "default"; +- poll-interval = <60>; +- #address-cells = <1>; +- #size-cells = <0>; +- +- axis@0 { +- reg = <0>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <1023 15>; +- linux,code = ; +- }; +- +- axis@1 { +- reg = <1>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <15 1023>; +- linux,code = ; +- }; +- +- axis@2 { +- reg = <2>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <15 1023>; +- linux,code = ; +- }; +- +- axis@3 { +- reg = <3>; +- abs-flat = <32>; +- abs-fuzz = <32>; +- abs-range = <1023 15>; +- linux,code = ; +- }; +- }; +- +- adc_mux: adc-mux { +- compatible = "io-channel-mux"; +- channels = "left_x", "right_x", "left_y", "right_y"; +- #io-channel-cells = <1>; +- io-channels = <&saradc 3>; +- io-channel-names = "parent"; +- mux-controls = <&gpio_mux>; +- settle-time-us = <100>; +- }; +- + battery: battery { + compatible = "simple-battery"; + charge-full-design-microamp-hours = <3472000>; +@@ -91,13 +35,6 @@ battery: battery { + <3400000 0>; + }; + +- gpio_mux: mux-controller { +- compatible = "gpio-mux"; +- mux-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>, +- <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; +- #mux-control-cells = <0>; +- }; +- + gpio_spi: spi { + compatible = "spi-gpio"; + pinctrl-names = "default"; +@@ -164,6 +101,155 @@ spk_amp: audio-amplifier { + pinctrl-names = "default"; + sound-name-prefix = "Speaker Amp"; + }; ++ ++ joypad: singleadc-joypad { ++ compatible = "singleadc-joypad"; ++ ++ joypad-name = "retrogame_joypad"; ++ joypad-product = <0x1101>; ++ joypad-revision = <0x0100>; ++ ++ status = "okay"; ++ ++ /* gpio pincontrol setup */ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&btn_pins_ctrl>; ++ ++ /* Analog mux define */ ++ io-channel-names = "amux_adc"; ++ io-channels = <&saradc 3>; ++ ++ /* adc mux channel count */ ++ amux-count = <4>; ++ /* adc mux select(a,b) gpio */ ++ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; ++ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; ++ /* adc mux enable gpio */ ++ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; ++ ++ /* adc calculate scale */ ++ button-adc-scale = <2>; ++ ++ /* adc deadzone range */ ++ button-adc-deadzone = <64>; ++ ++ /* ++ specifies fuzz value that is used to filter noise from ++ the event stream. ++ */ ++ button-adc-fuzz = <32>; ++ button-adc-flat = <32>; ++ ++ /* ++ Analog Stick data tuning value(precent) ++ p = positive direction, n = negative direction ++ report value = (real_adc_data * tuning_value) / 100 ++ */ ++ abs_x-p-tuning = <450>; ++ abs_x-n-tuning = <450>; ++ ++ abs_y-p-tuning = <450>; ++ abs_y-n-tuning = <450>; ++ ++ abs_rx-p-tuning = <450>; ++ abs_rx-n-tuning = <450>; ++ ++ abs_ry-p-tuning = <450>; ++ abs_ry-n-tuning = <450>; ++ ++ /* poll device interval (ms), adc read interval */ ++ poll-interval = <10>; ++ ++ /* gpio button auto repeat set value : default disable */ ++ /* ++ autorepeat; ++ */ ++ sw1 { ++ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-UP"; ++ linux,code = ; ++ }; ++ sw2 { ++ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-DOWN"; ++ linux,code = ; ++ }; ++ sw3 { ++ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-LEFT"; ++ linux,code = ; ++ }; ++ sw4 { ++ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-RIGHT"; ++ linux,code = ; ++ }; ++ sw5 { ++ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; ++ label = "GPIO KEY BTN-A"; ++ linux,code = ; ++ }; ++ sw6 { ++ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-B"; ++ linux,code = ; ++ }; ++ sw7 { ++ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-X"; ++ linux,code = ; ++ }; ++ sw8 { ++ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-Y"; ++ linux,code = ; ++ }; ++ sw9 { ++ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_SELECT"; ++ linux,code = ; ++ }; ++ sw10 { ++ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_START"; ++ linux,code = ; ++ }; ++ sw11 { ++ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_F"; ++ linux,code = ; ++ }; ++ sw12 { ++ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL"; ++ linux,code = ; ++ }; ++ sw13 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw14 { ++ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL2"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++ sw16 { ++ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBL"; ++ linux,code = ; ++ }; ++ sw17 { ++ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBR"; ++ linux,code = ; ++ }; ++ }; + }; + + &cru { +@@ -199,62 +285,6 @@ mipi_out_panel: endpoint { + }; + }; + +-&gpio_keys_control { +- button-a { +- gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; +- label = "EAST"; +- linux,code = ; +- }; +- +- button-left { +- gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; +- label = "DPAD-LEFT"; +- linux,code = ; +- }; +- +- button-right { +- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; +- label = "DPAD-RIGHT"; +- linux,code = ; +- }; +- +- button-r1 { +- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; +- label = "TR"; +- linux,code = ; +- }; +- +- button-r2 { +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- label = "TR2"; +- linux,code = ; +- }; +- +- button-right { +- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; +- label = "DPAD-RIGHT"; +- linux,code = ; +- }; +- +- button-thumbl { +- gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; +- label = "THUMBL"; +- linux,code = ; +- }; +- +- button-thumbr { +- gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; +- label = "THUMBR"; +- linux,code = ; +- }; +- +- button-y { +- gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; +- label = "WEST"; +- linux,code = ; +- }; +-}; +- + &pinctrl { + audio-amplifier { + spk_amp_enable_h: spk-amp-enable-h { +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +index 18b8c2e7befa..4ca29e80de00 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +@@ -32,60 +32,6 @@ button-mode { + }; + }; + +- gpio_keys_control: gpio-keys-control { +- compatible = "gpio-keys"; +- pinctrl-0 = <&btn_pins_ctrl>; +- pinctrl-names = "default"; +- +- button-b { +- gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; +- label = "SOUTH"; +- linux,code = ; +- }; +- +- button-down { +- gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; +- label = "DPAD-DOWN"; +- linux,code = ; +- }; +- +- button-l1 { +- gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; +- label = "TL"; +- linux,code = ; +- }; +- +- button-l2 { +- gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; +- label = "TL2"; +- linux,code = ; +- }; +- +- button-select { +- gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; +- label = "SELECT"; +- linux,code = ; +- }; +- +- button-start { +- gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; +- label = "START"; +- linux,code = ; +- }; +- +- button-up { +- gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; +- label = "DPAD-UP"; +- linux,code = ; +- }; +- +- button-x { +- gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; +- label = "NORTH"; +- linux,code = ; +- }; +- }; +- + gpio_keys_vol: gpio-keys-vol { + compatible = "gpio-keys"; + autorepeat; diff --git a/projects/Rockchip/patches/linux/RK3566/009-invert-abs.patch b/projects/Rockchip/patches/linux/RK3566/009-invert-abs.patch deleted file mode 100644 index 254560266..000000000 --- a/projects/Rockchip/patches/linux/RK3566/009-invert-abs.patch +++ /dev/null @@ -1,105 +0,0 @@ -iiFrom: Chris Morgan -To: linux-input@vger.kernel.org -Cc: contact@artur-rojek.eu, hdegoede@redhat.com, - paul@crapouillou.net, peter.hutterer@who-t.net, svv@google.com, - biswarupp@google.com, Chris Morgan -Subject: [PATCH V4] Input: adc-joystick: Handle inverted axes -Date: Wed, 24 Jan 2024 14:47:54 -0600 [thread overview] -Message-ID: <20240124204754.43982-1-macroalpha82@gmail.com> (raw) - -From: Chris Morgan - -When one or more axes are inverted, (where min > max), normalize the -data so that min < max and invert the values reported to the input -stack. - -This ensures we can continue defining the device correctly in the -device tree while not breaking downstream assumptions that min is -always less than max. - -Signed-off-by: Chris Morgan ---- -Changes since V3: - - Add include for minmax.h. - - Use swap() instead of min_array()/max_array(). - - Dropped Ack due to change. -Changes since V2: - - Explicitly set bool value to "true" instead of "1". - - Split adc_joystick_invert() function definition to 2 lines. - - Corrected changes message location. -Changes since V1: - - Moved proposed helper for inversion from input stack to adc-joystick - driver. - - drivers/input/joystick/adc-joystick.c | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/drivers/input/joystick/adc-joystick.c b/drivers/input/joystick/adc-joystick.c -index c0deff5d4282..3b05b2e413d0 100644 ---- a/drivers/input/joystick/adc-joystick.c -+++ b/drivers/input/joystick/adc-joystick.c -@@ -7,6 +7,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -18,6 +19,7 @@ struct adc_joystick_axis { - s32 range[2]; - s32 fuzz; - s32 flat; -+ bool inverted; - }; - - struct adc_joystick { -@@ -29,6 +31,15 @@ struct adc_joystick { - bool polled; - }; - -+static int adc_joystick_invert(struct input_dev *dev, -+ unsigned int axis, int val) -+{ -+ int min = dev->absinfo[axis].minimum; -+ int max = dev->absinfo[axis].maximum; -+ -+ return (max + min) - val; -+} -+ - static void adc_joystick_poll(struct input_dev *input) - { - struct adc_joystick *joy = input_get_drvdata(input); -@@ -38,6 +49,8 @@ static void adc_joystick_poll(struct input_dev *input) - ret = iio_read_channel_raw(&joy->chans[i], &val); - if (ret < 0) - return; -+ if (joy->axes[i].inverted) -+ val = adc_joystick_invert(input, i, val); - input_report_abs(input, joy->axes[i].code, val); - } - input_sync(input); -@@ -86,6 +99,8 @@ static int adc_joystick_handle(const void *data, void *private) - val = sign_extend32(val, msb); - else - val &= GENMASK(msb, 0); -+ if (joy->axes[i].inverted) -+ val = adc_joystick_invert(joy->input, i, val); - input_report_abs(joy->input, joy->axes[i].code, val); - } - -@@ -168,6 +183,12 @@ static int adc_joystick_set_axes(struct device *dev, struct adc_joystick *joy) - goto err_fwnode_put; - } - -+ if (axes[i].range[0] > axes[i].range[1]) { -+ dev_dbg(dev, "abs-axis %d inverted\n", i); -+ axes[i].inverted = true; -+ swap(axes[i].range[0], axes[i].range[1]); -+ } -+ - fwnode_property_read_u32(child, "abs-fuzz", &axes[i].fuzz); - fwnode_property_read_u32(child, "abs-flat", &axes[i].flat); - --- -2.34.1 diff --git a/projects/Rockchip/patches/linux/RK3566/010-rgb10-max3-panel-dtbindings.patch b/projects/Rockchip/patches/linux/RK3566/010-rgb10-max3-panel-dtbindings.patch deleted file mode 100644 index e369a9cfc..000000000 --- a/projects/Rockchip/patches/linux/RK3566/010-rgb10-max3-panel-dtbindings.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit 9913a60f318b6c88ea8385048952e3557464bb84 -Author: Chris Morgan -Date: Mon Feb 12 12:49:44 2024 -0600 - - dt-bindings: display: Add Powkiddy RGB10MAX3 panel - - The RGB10MAX3 panel is a panel specific to the Powkiddy RGB10MAX3 - handheld device that measures 5 inches diagonally with a resolution - of 720x1280. - - Signed-off-by: Chris Morgan - Acked-by: Krzysztof Kozlowski - Reviewed-by: Guido Günther - Signed-off-by: Heiko Stuebner - Link: https://patchwork.freedesktop.org/patch/msgid/20240212184950.52210-2-macroalpha82@gmail.com - -diff --git a/Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml b/Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml -index 97cccd8a8479..8dfe8951bf5b 100644 ---- a/Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml -+++ b/Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml -@@ -22,6 +22,8 @@ properties: - enum: - # Anberic RG353V-V2 5.0" 640x480 TFT LCD panel - - anbernic,rg353v-panel-v2 -+ # Powkiddy RGB10MAX3 5.0" 720x1280 TFT LCD panel -+ - powkiddy,rgb10max3-panel - # Powkiddy RGB30 3.0" 720x720 TFT LCD panel - - powkiddy,rgb30-panel - # Rocktech JH057N00900 5.5" 720x1440 TFT LCD panel diff --git a/projects/Rockchip/patches/linux/RK3566/011-rgb10-max3-panel.patch b/projects/Rockchip/patches/linux/RK3566/011-rgb10-max3-panel.patch deleted file mode 100644 index fed4ae5f3..000000000 --- a/projects/Rockchip/patches/linux/RK3566/011-rgb10-max3-panel.patch +++ /dev/null @@ -1,125 +0,0 @@ -commit e0c732291250e205fb834881ad7ecf9ee3ffef45 -Author: Chris Morgan -Date: Mon Feb 12 12:49:45 2024 -0600 - - drm/panel: st7703: Add Powkiddy RGB10MAX3 Panel Support - - The Powkiddy RGB10MAX3 is a handheld device with a 5 inch 720x1280 - display panel with a Sitronix ST7703 display controller. The panel - is installed rotated 270 degrees. - - Signed-off-by: Chris Morgan - Reviewed-by: Guido Günther - Reviewed-by: Jessica Zhang - Signed-off-by: Heiko Stuebner - Link: https://patchwork.freedesktop.org/patch/msgid/20240212184950.52210-3-macroalpha82@gmail.com - -diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c -index b55bafd1a8be..939ba05c9b58 100644 ---- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c -+++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c -@@ -521,6 +521,96 @@ static const struct st7703_panel_desc rgb30panel_desc = { - .init_sequence = rgb30panel_init_sequence, - }; - -+static int rgb10max3_panel_init_sequence(struct st7703 *ctx) -+{ -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ -+ /* Init sequence extracted from Powkiddy RGB10MAX3 BSP kernel. */ -+ -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, 0xf1, 0x12, 0x83); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETAPID, 0x00, 0x00, 0x00, 0xda, -+ 0x80); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xc8, 0x02, 0x30); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, 0x10, 0x10, 0x28, -+ 0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x04, 0x04); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x78, 0x78); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, 0xf0, -+ 0x63); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, 0xf9, -+ 0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x44, 0x25, 0x00, 0x90, 0x0a, 0x00, -+ 0x00, 0x01, 0x4f, 0x01, 0x00, 0x00, 0x37); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x47); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_BF, 0x02, 0x11, 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, 0x73, 0x73, 0x50, 0x50, -+ 0x00, 0x00, 0x12, 0x70, 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, 0x25, 0x00, 0x32, -+ 0x32, 0x77, 0xe1, 0xff, 0xff, 0xcc, 0xcc, 0x77, -+ 0x77); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETECO, 0x82, 0x00, 0xbf, 0xff, -+ 0x00, 0xff); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETIO, 0xb8, 0x00, 0x0a, 0x00, -+ 0x00, 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCABC, 0x10, 0x40, 0x1e, -+ 0x02); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0b); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, 0x00, 0x04, 0x07, -+ 0x2a, 0x39, 0x3f, 0x36, 0x31, 0x06, 0x0b, 0x0e, -+ 0x12, 0x14, 0x12, 0x13, 0x0f, 0x17, 0x00, 0x04, -+ 0x07, 0x2a, 0x39, 0x3f, 0x36, 0x31, 0x06, 0x0b, -+ 0x0e, 0x12, 0x14, 0x12, 0x13, 0x0f, 0x17); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, 0x03, 0x03, 0x03, 0x03, -+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, -+ 0xc0, 0x10); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, 0xc8, 0x10, 0x08, 0x00, -+ 0x00, 0x41, 0xf8, 0x12, 0x31, 0x23, 0x37, 0x86, -+ 0x11, 0xc8, 0x37, 0x2a, 0x00, 0x00, 0x0c, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, -+ 0x88, 0x20, 0x46, 0x02, 0x88, 0x88, 0x88, 0x88, -+ 0x88, 0x88, 0xff, 0x88, 0x31, 0x57, 0x13, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0xff, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, 0x00, 0x1a, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x8f, 0x13, 0x31, 0x75, 0x88, 0x88, 0x88, 0x88, -+ 0x88, 0x88, 0xf8, 0x8f, 0x02, 0x20, 0x64, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00); -+ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_EF, 0xff, 0xff, 0x01); -+ -+ return 0; -+} -+ -+static const struct drm_display_mode rgb10max3_panel_mode = { -+ .hdisplay = 720, -+ .hsync_start = 720 + 40, -+ .hsync_end = 720 + 40 + 10, -+ .htotal = 720 + 40 + 10 + 40, -+ .vdisplay = 1280, -+ .vsync_start = 1280 + 16, -+ .vsync_end = 1280 + 16 + 4, -+ .vtotal = 1280 + 16 + 4 + 14, -+ .clock = 63800, -+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, -+ .width_mm = 62, -+ .height_mm = 109, -+}; -+ -+static const struct st7703_panel_desc rgb10max3_panel_desc = { -+ .mode = &rgb10max3_panel_mode, -+ .lanes = 4, -+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | -+ MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, -+ .format = MIPI_DSI_FMT_RGB888, -+ .init_sequence = rgb10max3_panel_init_sequence, -+}; -+ - static int st7703_enable(struct drm_panel *panel) - { - struct st7703 *ctx = panel_to_st7703(panel); -@@ -784,6 +874,7 @@ static void st7703_remove(struct mipi_dsi_device *dsi) - - static const struct of_device_id st7703_of_match[] = { - { .compatible = "anbernic,rg353v-panel-v2", .data = &rg353v2_desc }, -+ { .compatible = "powkiddy,rgb10max3-panel", .data = &rgb10max3_panel_desc }, - { .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc }, - { .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc }, - { .compatible = "xingbangda,xbd599", .data = &xbd599_desc }, diff --git a/projects/Rockchip/patches/linux/RK3566/012-st7703-rotation.patch b/projects/Rockchip/patches/linux/RK3566/012-st7703-rotation.patch deleted file mode 100644 index a92a8ca64..000000000 --- a/projects/Rockchip/patches/linux/RK3566/012-st7703-rotation.patch +++ /dev/null @@ -1,57 +0,0 @@ -commit 762195e5c26936b891fb54ba0183aa3ef366b41e -Author: Chris Morgan -Date: Mon Feb 12 12:49:47 2024 -0600 - - drm/panel: st7703: Add Panel Rotation Support - - Add support for panel rotation to ST7703 based devices. - - Signed-off-by: Chris Morgan - Reviewed-by: Guido Günther - Signed-off-by: Heiko Stuebner - Link: https://patchwork.freedesktop.org/patch/msgid/20240212184950.52210-5-macroalpha82@gmail.com - -diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c -index 939ba05c9b58..a3e142f156d5 100644 ---- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c -+++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c -@@ -62,6 +62,7 @@ struct st7703 { - - struct dentry *debugfs; - const struct st7703_panel_desc *desc; -+ enum drm_panel_orientation orientation; - }; - - struct st7703_panel_desc { -@@ -743,12 +744,20 @@ static int st7703_get_modes(struct drm_panel *panel, - return 1; - } - -+static enum drm_panel_orientation st7703_get_orientation(struct drm_panel *panel) -+{ -+ struct st7703 *st7703 = panel_to_st7703(panel); -+ -+ return st7703->orientation; -+} -+ - static const struct drm_panel_funcs st7703_drm_funcs = { - .disable = st7703_disable, - .unprepare = st7703_unprepare, - .prepare = st7703_prepare, - .enable = st7703_enable, - .get_modes = st7703_get_modes, -+ .get_orientation = st7703_get_orientation, - }; - - static int allpixelson_set(void *data, u64 val) -@@ -817,6 +826,10 @@ static int st7703_probe(struct mipi_dsi_device *dsi) - return dev_err_probe(dev, PTR_ERR(ctx->iovcc), - "Failed to request iovcc regulator\n"); - -+ ret = of_drm_get_panel_orientation(dsi->dev.of_node, &ctx->orientation); -+ if (ret < 0) -+ return dev_err_probe(&dsi->dev, ret, "Failed to get orientation\n"); -+ - drm_panel_init(&ctx->panel, dev, &st7703_drm_funcs, - DRM_MODE_CONNECTOR_DSI); - diff --git a/projects/Rockchip/patches/linux/RK3566/013-rk2023-dtsi-rgb10-max3-update.patch b/projects/Rockchip/patches/linux/RK3566/013-rk2023-dtsi-rgb10-max3-update.patch deleted file mode 100644 index 16eb49718..000000000 --- a/projects/Rockchip/patches/linux/RK3566/013-rk2023-dtsi-rgb10-max3-update.patch +++ /dev/null @@ -1,106 +0,0 @@ -commit 039a03c377d64ec832a8fb1b8f8b5badd404989f -Author: Chris Morgan -Date: Mon Feb 12 12:49:48 2024 -0600 - - arm64: dts: rockchip: Update powkiddy rk2023 dtsi for RGB10MAX3 - - Move the vdd_cpu regulator to the device specific dts. This is in - preparation of adding the Powkiddy RGB10MAX3 device, which uses - a different vendor for the CPU regulator at a different i2c address. - - Also add a phandle to the bluetooth device so that we can change the - compatible string for the RGB10MAX3. This device uses the same pinouts - but a different bluetooth device. - - Signed-off-by: Chris Morgan - Link: https://lore.kernel.org/r/20240212184950.52210-6-macroalpha82@gmail.com - Signed-off-by: Heiko Stuebner - -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts -index 0ac64f043b80..1f567a14ac84 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts -@@ -37,3 +37,21 @@ mipi_in_panel: endpoint { - }; - }; - }; -+ -+&i2c0 { -+ vdd_cpu: regulator@1c { -+ compatible = "tcs,tcs4525"; -+ reg = <0x1c>; -+ fcs,suspend-voltage-selector = <1>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1390000>; -+ regulator-name = "vdd_cpu"; -+ regulator-ramp-delay = <2300>; -+ vin-supply = <&vcc_sys>; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+}; -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dts -index ba32d0793dca..bc9933d9e262 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dts -@@ -36,3 +36,21 @@ mipi_in_panel: endpoint { - }; - }; - }; -+ -+&i2c0 { -+ vdd_cpu: regulator@1c { -+ compatible = "tcs,tcs4525"; -+ reg = <0x1c>; -+ fcs,suspend-voltage-selector = <1>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1390000>; -+ regulator-name = "vdd_cpu"; -+ regulator-ramp-delay = <2300>; -+ vin-supply = <&vcc_sys>; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+}; -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi -index 0fa8f06f94cd..3ab751a01cb2 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi -@@ -614,22 +614,6 @@ rk817_charger: charger { - rockchip,sleep-filter-current-microamp = <100000>; - }; - }; -- -- vdd_cpu: regulator@1c { -- compatible = "tcs,tcs4525"; -- reg = <0x1c>; -- fcs,suspend-voltage-selector = <1>; -- regulator-always-on; -- regulator-boot-on; -- regulator-min-microvolt = <712500>; -- regulator-max-microvolt = <1390000>; -- regulator-name = "vdd_cpu"; -- regulator-ramp-delay = <2300>; -- vin-supply = <&vcc_sys>; -- regulator-state-mem { -- regulator-off-in-suspend; -- }; -- }; - }; - - &i2c5 { -@@ -805,7 +789,7 @@ &uart1 { - uart-has-rtscts; - status = "okay"; - -- bluetooth { -+ bluetooth: bluetooth { - compatible = "realtek,rtl8821cs-bt", "realtek,rtl8723bs-bt"; - device-wake-gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>; - enable-gpios = <&gpio4 3 GPIO_ACTIVE_HIGH>; diff --git a/projects/Rockchip/patches/linux/RK3566/014-rgb10-max3-dtbindings.patch b/projects/Rockchip/patches/linux/RK3566/014-rgb10-max3-dtbindings.patch deleted file mode 100644 index 002dfc753..000000000 --- a/projects/Rockchip/patches/linux/RK3566/014-rgb10-max3-dtbindings.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit fbe7823623a8c02759afdfb521709f4fa216849a -Author: Chris Morgan -Date: Mon Feb 12 12:49:49 2024 -0600 - - dt-bindings: arm: rockchip: Add Powkiddy RGB10MAX3 - - The Powkiddy RGB10MAX3 is a handheld gaming device made by Powkiddy and - powered by the Rockchip RK3566 SoC. - - Signed-off-by: Chris Morgan - Acked-by: Krzysztof Kozlowski - Link: https://lore.kernel.org/r/20240212184950.52210-7-macroalpha82@gmail.com - Signed-off-by: Heiko Stuebner - -diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml -index 433a25f4e744..ca2432e803b3 100644 ---- a/Documentation/devicetree/bindings/arm/rockchip.yaml -+++ b/Documentation/devicetree/bindings/arm/rockchip.yaml -@@ -694,6 +694,7 @@ properties: - - description: Powkiddy RK3566 Handheld Gaming Console - items: - - enum: -+ - powkiddy,rgb10max3 - - powkiddy,rgb30 - - powkiddy,rk2023 - - powkiddy,x55 diff --git a/projects/Rockchip/patches/linux/RK3566/015-rgb10-max3-dts-makefile.patch b/projects/Rockchip/patches/linux/RK3566/015-rgb10-max3-dts-makefile.patch deleted file mode 100644 index 77ba89546..000000000 --- a/projects/Rockchip/patches/linux/RK3566/015-rgb10-max3-dts-makefile.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile -index a7b30e1..3c4f87e 100644 ---- a/arch/arm64/boot/dts/rockchip/Makefile -+++ b/arch/arm64/boot/dts/rockchip/Makefile -@@ -78,6 +78,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg353vs.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg503.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinenote-v1.1.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinenote-v1.2.dtb -+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb10max3.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb30.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rk2023.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-x55.dtb diff --git a/projects/Rockchip/patches/linux/RK3566/016-rgb10-max3-dts.patch b/projects/Rockchip/patches/linux/RK3566/016-rgb10-max3-dts.patch deleted file mode 100644 index 31cf1d149..000000000 --- a/projects/Rockchip/patches/linux/RK3566/016-rgb10-max3-dts.patch +++ /dev/null @@ -1,110 +0,0 @@ -commit 4b325c0d4f539b553a4529f16476f08757779293 -Author: Chris Morgan -Date: Mon Feb 12 12:49:50 2024 -0600 - - arm64: dts: rockchip: Add Powkiddy RGB10MAX3 - - Add support for the Powkiddy RGB10MAX3. The Powkiddy RGB10MAX3 is a - handheld gaming device with a 720p 5.0 inch screen powered by the - Rockchip RK3566 SoC. It includes a Realtek 8723ds WiFi/BT module, 2 ADC - joysticks powered by a 4-way muxed ADC channel, and several GPIO - face buttons. There are 2 SDMMC slots (sdmmc1 and sdmmc3), 3 pwm - controlled LEDs, and the device includes 1GB of RAM. - - Signed-off-by: Chris Morgan - Link: https://lore.kernel.org/r/20240212184950.52210-8-macroalpha82@gmail.com - Signed-off-by: Heiko Stuebner - -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts -new file mode 100644 -index 000000000000..e5a474e681dd ---- /dev/null -+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts -@@ -0,0 +1,87 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+/dts-v1/; -+ -+#include -+#include -+#include -+#include "rk3566-powkiddy-rk2023.dtsi" -+ -+/ { -+ model = "Powkiddy RGB10MAX3"; -+ compatible = "powkiddy,rgb10max3", "rockchip,rk3566"; -+}; -+ -+&bluetooth { -+ compatible = "realtek,rtl8723ds-bt"; -+}; -+ -+&cru { -+ assigned-clocks = <&pmucru CLK_RTC_32K>, <&cru PLL_GPLL>, -+ <&pmucru PLL_PPLL>, <&cru PLL_VPLL>; -+ assigned-clock-rates = <32768>, <1200000000>, -+ <200000000>, <126400000>; -+}; -+ -+&dsi0 { -+ panel: panel@0 { -+ compatible = "powkiddy,rgb10max3-panel"; -+ reg = <0>; -+ backlight = <&backlight>; -+ iovcc-supply = <&vcc3v3_lcd0_n>; -+ pinctrl-0 = <&lcd_rst>; -+ pinctrl-names = "default"; -+ reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>; -+ rotation = <270>; -+ vcc-supply = <&vcc3v3_lcd0_n>; -+ -+ port { -+ mipi_in_panel: endpoint { -+ remote-endpoint = <&mipi_out_panel>; -+ }; -+ }; -+ }; -+}; -+ -+&green_led { -+ default-state = "on"; -+ function = LED_FUNCTION_POWER; -+}; -+ -+&i2c0 { -+ vdd_cpu: regulator@40 { -+ compatible = "fcs,fan53555"; -+ reg = <0x40>; -+ fcs,suspend-voltage-selector = <1>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1390000>; -+ regulator-name = "vdd_cpu"; -+ regulator-ramp-delay = <2300>; -+ vin-supply = <&vcc_sys>; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+}; -+ -+&leds { -+ amber_led: led-2 { -+ color = ; -+ function = LED_FUNCTION_CHARGING; -+ max-brightness = <255>; -+ pwms = <&pwm0 0 25000 0>; -+ }; -+}; -+ -+&pwm0 { -+ pinctrl-0 = <&pwm0m1_pins>; -+ pinctrl-names = "default"; -+ status = "okay"; -+}; -+ -+&red_led { -+ default-state = "off"; -+ function = LED_FUNCTION_STATUS; -+}; diff --git a/projects/Rockchip/patches/linux/RK3566/020-rg353vs-input.patch b/projects/Rockchip/patches/linux/RK3566/020-rg353vs-input.patch deleted file mode 100644 index 173b26072..000000000 --- a/projects/Rockchip/patches/linux/RK3566/020-rg353vs-input.patch +++ /dev/null @@ -1,171 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts 2024-03-26 04:25:37.989710946 +0000 -@@ -61,19 +61,156 @@ - sound-dai = <&i2s1_8ch>; - }; - }; --}; - --&gpio_keys_control { -- button-r1 { -- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -- label = "TR"; -- linux,code = ; -- }; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ hw_info = <0x02>; -+ -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* Analog mux define */ -+ io-channel-names = "amux_adc"; -+ io-channels = <&saradc 3>; -+ -+ /* adc mux channel count */ -+ amux-count = <4>; -+ /* adc mux select(a,b) gpio */ -+ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; -+ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -+ /* adc mux enable gpio */ -+ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; -+ -+ /* adc calculate scale */ -+ button-adc-scale = <2>; - -- button-r2 { -- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -- label = "TR2"; -- linux,code = ; -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; -+ -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <32>; -+ button-adc-flat = <32>; -+ -+ /* -+ Analog Stick data tuning value(precent) -+ p = positive direction, n = negative direction -+ report value = (real_adc_data * tuning_value) / 100 -+ */ -+ abs_x-p-tuning = <245>; -+ abs_x-n-tuning = <245>; -+ -+ abs_y-p-tuning = <245>; -+ abs_y-n-tuning = <245>; -+ -+ abs_rx-p-tuning = <245>; -+ abs_rx-n-tuning = <245>; -+ -+ abs_ry-p-tuning = <245>; -+ abs_ry-n-tuning = <245>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <10>; -+ -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; -+ }; -+ - }; - }; - diff --git a/projects/Rockchip/patches/linux/RK3566/021-rg503-input.patch b/projects/Rockchip/patches/linux/RK3566/021-rg503-input.patch deleted file mode 100644 index 044b96ebc..000000000 --- a/projects/Rockchip/patches/linux/RK3566/021-rg503-input.patch +++ /dev/null @@ -1,211 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts 2024-03-26 04:51:03.363007171 +0000 -@@ -102,6 +102,156 @@ - pinctrl-names = "default"; - sound-name-prefix = "Speaker Amp"; - }; -+ -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* Analog mux define */ -+ io-channel-names = "amux_adc"; -+ io-channels = <&saradc 3>; -+ -+ /* adc mux channel count */ -+ amux-count = <4>; -+ /* adc mux select(a,b) gpio */ -+ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; -+ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -+ /* adc mux enable gpio */ -+ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; -+ -+ /* adc calculate scale */ -+ button-adc-scale = <2>; -+ -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; -+ -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <32>; -+ button-adc-flat = <32>; -+ -+ /* -+ Analog Stick data tuning value(precent) -+ p = positive direction, n = negative direction -+ report value = (real_adc_data * tuning_value) / 100 -+ */ -+ abs_x-p-tuning = <450>; -+ abs_x-n-tuning = <450>; -+ -+ abs_y-p-tuning = <450>; -+ abs_y-n-tuning = <450>; -+ -+ abs_rx-p-tuning = <450>; -+ abs_rx-n-tuning = <450>; -+ -+ abs_ry-p-tuning = <450>; -+ abs_ry-n-tuning = <450>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <10>; -+ -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; -+ }; -+ -+ }; - }; - - &cru { -@@ -137,50 +287,6 @@ - }; - }; - --&gpio_keys_control { -- button-a { -- gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -- label = "EAST"; -- linux,code = ; -- }; -- -- button-left { -- gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -- label = "DPAD-LEFT"; -- linux,code = ; -- }; -- -- button-right { -- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -- label = "DPAD-RIGHT"; -- linux,code = ; -- }; -- -- button-r1 { -- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -- label = "TR"; -- linux,code = ; -- }; -- -- button-r2 { -- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -- label = "TR2"; -- linux,code = ; -- }; -- -- button-right { -- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -- label = "DPAD-RIGHT"; -- linux,code = ; -- }; -- -- button-y { -- gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -- label = "WEST"; -- linux,code = ; -- }; --}; -- - &pinctrl { - audio-amplifier { - spk_amp_enable_h: spk-amp-enable-h { diff --git a/projects/Rockchip/patches/linux/RK3566/022-rg353v-input.patch b/projects/Rockchip/patches/linux/RK3566/022-rg353v-input.patch deleted file mode 100644 index ae5142e18..000000000 --- a/projects/Rockchip/patches/linux/RK3566/022-rg353v-input.patch +++ /dev/null @@ -1,173 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts 2024-03-26 05:25:52.199838520 +0000 -@@ -62,20 +62,158 @@ - sound-dai = <&i2s1_8ch>; - }; - }; --}; - --&gpio_keys_control { -- button-r1 { -- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -- label = "TR"; -- linux,code = ; -- }; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ hw_info = <0x02>; -+ -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* Analog mux define */ -+ io-channel-names = "amux_adc"; -+ io-channels = <&saradc 3>; -+ -+ /* adc mux channel count */ -+ amux-count = <4>; -+ /* adc mux select(a,b) gpio */ -+ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; -+ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -+ /* adc mux enable gpio */ -+ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; -+ -+ /* adc calculate scale */ -+ button-adc-scale = <2>; -+ -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; - -- button-r2 { -- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -- label = "TR2"; -- linux,code = ; -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <32>; -+ button-adc-flat = <32>; -+ -+ /* -+ Analog Stick data tuning value(precent) -+ p = positive direction, n = negative direction -+ report value = (real_adc_data * tuning_value) / 100 -+ */ -+ abs_x-p-tuning = <245>; -+ abs_x-n-tuning = <245>; -+ -+ abs_y-p-tuning = <245>; -+ abs_y-n-tuning = <245>; -+ -+ abs_rx-p-tuning = <245>; -+ abs_rx-n-tuning = <245>; -+ -+ abs_ry-p-tuning = <245>; -+ abs_ry-n-tuning = <245>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <10>; -+ -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; -+ }; -+ - }; -+ - }; - - &i2c2 { diff --git a/projects/Rockchip/patches/linux/RK3566/023-rg353p-input.patch b/projects/Rockchip/patches/linux/RK3566/023-rg353p-input.patch deleted file mode 100644 index dec66b093..000000000 --- a/projects/Rockchip/patches/linux/RK3566/023-rg353p-input.patch +++ /dev/null @@ -1,171 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts 2024-03-26 05:29:29.179313507 +0000 -@@ -75,19 +75,156 @@ - pinctrl-names = "default"; - sound-name-prefix = "Speaker Amp"; - }; --}; - --&gpio_keys_control { -- button-r1 { -- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -- label = "TR"; -- linux,code = ; -- }; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ hw_info = <0x01>; -+ -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* Analog mux define */ -+ io-channel-names = "amux_adc"; -+ io-channels = <&saradc 3>; -+ -+ /* adc mux channel count */ -+ amux-count = <4>; -+ /* adc mux select(a,b) gpio */ -+ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; -+ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -+ /* adc mux enable gpio */ -+ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; -+ -+ /* adc calculate scale */ -+ button-adc-scale = <2>; -+ -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; -+ -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <32>; -+ button-adc-flat = <32>; -+ -+ /* -+ Analog Stick data tuning value(precent) -+ p = positive direction, n = negative direction -+ report value = (real_adc_data * tuning_value) / 100 -+ */ -+ abs_x-p-tuning = <245>; -+ abs_x-n-tuning = <245>; -+ -+ abs_y-p-tuning = <245>; -+ abs_y-n-tuning = <245>; -+ -+ abs_rx-p-tuning = <245>; -+ abs_rx-n-tuning = <245>; -+ -+ abs_ry-p-tuning = <245>; -+ abs_ry-n-tuning = <245>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <10>; - -- button-r2 { -- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -- label = "TR2"; -- linux,code = ; -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; -+ }; -+ - }; - }; - diff --git a/projects/Rockchip/patches/linux/RK3566/024-rg353ps-input.patch b/projects/Rockchip/patches/linux/RK3566/024-rg353ps-input.patch deleted file mode 100644 index 3023573d0..000000000 --- a/projects/Rockchip/patches/linux/RK3566/024-rg353ps-input.patch +++ /dev/null @@ -1,170 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts 2024-03-26 05:31:21.679144829 +0000 -@@ -74,19 +74,155 @@ - pinctrl-names = "default"; - sound-name-prefix = "Speaker Amp"; - }; --}; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ hw_info = <0x01>; - --&gpio_keys_control { -- button-r1 { -- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -- label = "TR"; -- linux,code = ; -- }; -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* Analog mux define */ -+ io-channel-names = "amux_adc"; -+ io-channels = <&saradc 3>; -+ -+ /* adc mux channel count */ -+ amux-count = <4>; -+ /* adc mux select(a,b) gpio */ -+ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; -+ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -+ /* adc mux enable gpio */ -+ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; -+ -+ /* adc calculate scale */ -+ button-adc-scale = <2>; -+ -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; -+ -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <32>; -+ button-adc-flat = <32>; -+ -+ /* -+ Analog Stick data tuning value(precent) -+ p = positive direction, n = negative direction -+ report value = (real_adc_data * tuning_value) / 100 -+ */ -+ abs_x-p-tuning = <245>; -+ abs_x-n-tuning = <245>; -+ -+ abs_y-p-tuning = <245>; -+ abs_y-n-tuning = <245>; -+ -+ abs_rx-p-tuning = <245>; -+ abs_rx-n-tuning = <245>; -+ -+ abs_ry-p-tuning = <245>; -+ abs_ry-n-tuning = <245>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <10>; - -- button-r2 { -- gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -- label = "TR2"; -- linux,code = ; -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; -+ }; -+ - }; - }; - diff --git a/projects/Rockchip/patches/linux/RK3566/025-rgxx-input.patch b/projects/Rockchip/patches/linux/RK3566/025-rgxx-input.patch deleted file mode 100644 index b4d5325f9..000000000 --- a/projects/Rockchip/patches/linux/RK3566/025-rgxx-input.patch +++ /dev/null @@ -1,188 +0,0 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi 2024-03-26 13:38:09.738327441 +0000 -@@ -64,32 +64,6 @@ - }; - }; - --&gpio_keys_control { -- button-a { -- gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; -- label = "EAST"; -- linux,code = ; -- }; -- -- button-left { -- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; -- label = "DPAD-LEFT"; -- linux,code = ; -- }; -- -- button-right { -- gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; -- label = "DPAD-RIGHT"; -- linux,code = ; -- }; -- -- button-y { -- gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; -- label = "WEST"; -- linux,code = ; -- }; --}; -- - &i2c0 { - /* This hardware is physically present but unused. */ - power-monitor@62 { -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi 2024-03-26 04:17:51.534641800 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi 2024-03-26 13:30:24.751964829 +0000 -@@ -14,51 +14,6 @@ - stdout-path = "serial2:1500000n8"; - }; - -- adc-joystick { -- compatible = "adc-joystick"; -- io-channels = <&adc_mux 0>, -- <&adc_mux 1>, -- <&adc_mux 2>, -- <&adc_mux 3>; -- pinctrl-0 = <&joy_mux_en>; -- pinctrl-names = "default"; -- poll-interval = <60>; -- #address-cells = <1>; -- #size-cells = <0>; -- -- axis@0 { -- reg = <0>; -- abs-flat = <32>; -- abs-fuzz = <32>; -- abs-range = <1023 15>; -- linux,code = ; -- }; -- -- axis@1 { -- reg = <1>; -- abs-flat = <32>; -- abs-fuzz = <32>; -- abs-range = <15 1023>; -- linux,code = ; -- }; -- -- axis@2 { -- reg = <2>; -- abs-flat = <32>; -- abs-fuzz = <32>; -- abs-range = <15 1023>; -- linux,code = ; -- }; -- -- axis@3 { -- reg = <3>; -- abs-flat = <32>; -- abs-fuzz = <32>; -- abs-range = <1023 15>; -- linux,code = ; -- }; -- }; -- - adc_keys: adc-keys { - compatible = "adc-keys"; - io-channels = <&saradc 0>; -@@ -77,82 +32,6 @@ - }; - }; - -- adc_mux: adc-mux { -- compatible = "io-channel-mux"; -- channels = "left_x", "right_x", "left_y", "right_y"; -- #io-channel-cells = <1>; -- io-channels = <&saradc 3>; -- io-channel-names = "parent"; -- mux-controls = <&gpio_mux>; -- settle-time-us = <100>; -- }; -- -- gpio_keys_control: gpio-keys-control { -- compatible = "gpio-keys"; -- pinctrl-0 = <&btn_pins_ctrl>; -- pinctrl-names = "default"; -- -- button-b { -- gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; -- label = "SOUTH"; -- linux,code = ; -- }; -- -- button-down { -- gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; -- label = "DPAD-DOWN"; -- linux,code = ; -- }; -- -- button-l1 { -- gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; -- label = "TL"; -- linux,code = ; -- }; -- -- button-l2 { -- gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; -- label = "TL2"; -- linux,code = ; -- }; -- -- button-select { -- gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; -- label = "SELECT"; -- linux,code = ; -- }; -- -- button-start { -- gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; -- label = "START"; -- linux,code = ; -- }; -- -- button-thumbl { -- gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; -- label = "THUMBL"; -- linux,code = ; -- }; -- -- button-thumbr { -- gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; -- label = "THUMBR"; -- linux,code = ; -- }; -- -- button-up { -- gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; -- label = "DPAD-UP"; -- linux,code = ; -- }; -- -- button-x { -- gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; -- label = "NORTH"; -- linux,code = ; -- }; -- }; -- - gpio_keys_vol: gpio-keys-vol { - compatible = "gpio-keys"; - autorepeat; -@@ -172,13 +51,6 @@ - }; - }; - -- gpio_mux: mux-controller { -- compatible = "gpio-mux"; -- mux-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>, -- <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; -- #mux-control-cells = <0>; -- }; -- - hdmi-con { - compatible = "hdmi-connector"; - ddc-i2c-bus = <&i2c5>; From 7e66b64e64fe3e2553a2600a4c86e6a5fc05d96a Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 11 Apr 2024 20:13:08 +0000 Subject: [PATCH 005/184] Purge unused packages --- .../audio/bluez-alsa/daemons/006-bluealsa | 3 - .../audio/bluez-alsa/default.d/bluealsa.conf | 1 - packages/audio/bluez-alsa/package.mk | 44 - .../system.d/bluealsa-defaults.service | 11 - .../bluez-alsa/system.d/bluealsa.service | 53 - packages/audio/libcdio/package.mk | 36 - packages/audio/libopenmpt/package.mk | 25 - ...enmpt-add-libvorbisfile-to-pkgconfig.patch | 11 - packages/audio/sidplay-libs/package.mk | 22 - .../patches/sidplay-libs-01-m4-tests.patch | 26 - .../patches/sidplay-libs-02-inherited.patch | 26 - .../patches/sidplay-libs-03-operator.patch | 11 - .../patches/sidplay-libs-04-includes.patch | 30 - packages/audio/wavpack/package.mk | 17 - .../databases/mariadb-connector-c/package.mk | 24 - packages/debug/vadumpcaps/package.mk | 15 - .../debug/xorg-intel-gpu-tools/package.mk | 26 - packages/devel/flatbuffers/package.mk | 38 - packages/devel/gperftools/package.mk | 13 - packages/devel/libbpf/package.mk | 23 - .../libbpf-fix-crosscompile-and-sysroot.patch | 43 - packages/devel/libevent/package.mk | 26 - packages/devel/libfstrcmp/package.mk | 23 - packages/devel/libftdi1/package.mk | 30 - packages/devel/libirman/package.mk | 25 - .../libirman-0001-fix-poll-include.patch | 35 - packages/devel/libplist/package.mk | 26 - packages/devel/spdlog/package.mk | 17 - packages/devel/xxd/package.mk | 26 - packages/devel/yajl/package.mk | 19 - packages/graphics/kmscube/package.mk | 18 - packages/graphics/vulkan/vkmark/package.mk | 26 - ...e-vkCreateDmaBufImageINTEL-extension.patch | 542 ---- packages/lang/lua52/config/lua52.pc | 10 - packages/lang/lua52/package.mk | 29 - packages/multimedia/bento4/package.mk | 14 - .../multimedia/intel-vaapi-driver/package.mk | 26 - ...i-driver-2.4.1-Handle-odd-resolution.patch | 288 --- packages/multimedia/libbluray/package.mk | 44 - ...-with-autoconf-archive-2016-or-later.patch | 25 - ...ray-01-bump_to_Nevcairiel_vL20170904.patch | 2247 ----------------- ...bbluray-02-install-extra-MVC-headers.patch | 42 - .../libbluray-03-set-headless-false.patch | 23 - packages/multimedia/libdvdnav/package.mk | 13 - packages/multimedia/libhdhomerun/package.mk | 28 - packages/network/libnfs/package.mk | 18 - packages/network/libshairplay/package.mk | 22 - ...ibshairplay-read_airportkey_from_etc.patch | 19 - packages/network/sixpair/package.mk | 28 - packages/python/graphics/Pillow/package.mk | 31 - .../patches/Pillow-0001-crosscompiling.patch | 13 - .../python/security/pycryptodome/package.mk | 38 - packages/python/system/dbussy/package.mk | 23 - packages/python/system/simplejson/package.mk | 30 - packages/rust/cargo-c/package.mk | 20 - packages/sysutils/autossh/package.mk | 23 - packages/sysutils/bkeymaps/package.mk | 20 - packages/sysutils/dstat/package.mk | 22 - packages/sysutils/efibootmgr/package.mk | 24 - packages/sysutils/encfs/package.mk | 19 - packages/sysutils/fdupes/package.mk | 14 - packages/sysutils/fuse-exfat/package.mk | 12 - packages/sysutils/getscancodes/package.mk | 19 - packages/sysutils/hddtemp/db/hddtemp.db | 523 ---- packages/sysutils/hddtemp/package.mk | 21 - packages/sysutils/hid_mapper/package.mk | 15 - .../patches/hid_mapper-01_crosscompile.patch | 21 - .../hid_mapper-02_include-sys-time.patch | 12 - .../patches/hid_mapper-03_fix-parser.patch | 14 - packages/sysutils/inotify-tools/package.mk | 21 - packages/sysutils/interception/package.mk | 14 - packages/sysutils/mrxvt/package.mk | 53 - .../mrxvt/patches/mrxvt-01_xterm.patch | 11 - packages/sysutils/mtpfs/package.mk | 23 - packages/sysutils/nmon/package.mk | 26 - packages/sysutils/stress-ng/package.mk | 13 - packages/textproc/rapidxml/package.mk | 17 - packages/textproc/tinyxml/package.mk | 19 - packages/tools/fbterm/package.mk | 29 - ...roxy.cpp-fbterm.cpp-fix-musl-compile.patch | 70 - .../fbterm/patches/gcc-6-build-fixes.patch | 104 - packages/tools/fbterm/terminfo/E/Eterm | Bin 2267 -> 0 bytes packages/tools/fbterm/terminfo/E/Eterm-color | 1 - packages/tools/fbterm/terminfo/a/ansi | Bin 1481 -> 0 bytes packages/tools/fbterm/terminfo/c/cons25 | Bin 1502 -> 0 bytes .../tools/fbterm/terminfo/c/cons25-debian | Bin 1519 -> 0 bytes packages/tools/fbterm/terminfo/c/cygwin | Bin 1518 -> 0 bytes packages/tools/fbterm/terminfo/d/dumb | Bin 308 -> 0 bytes packages/tools/fbterm/terminfo/h/hurd | Bin 1570 -> 0 bytes packages/tools/fbterm/terminfo/l/linux | Bin 1788 -> 0 bytes packages/tools/fbterm/terminfo/m/mach | Bin 617 -> 0 bytes packages/tools/fbterm/terminfo/m/mach-bold | Bin 652 -> 0 bytes packages/tools/fbterm/terminfo/m/mach-color | Bin 1095 -> 0 bytes packages/tools/fbterm/terminfo/m/mach-gnu | Bin 1056 -> 0 bytes .../tools/fbterm/terminfo/m/mach-gnu-color | Bin 1318 -> 0 bytes packages/tools/fbterm/terminfo/p/pcansi | Bin 1198 -> 0 bytes packages/tools/fbterm/terminfo/r/rxvt | Bin 2078 -> 0 bytes packages/tools/fbterm/terminfo/r/rxvt-basic | Bin 2034 -> 0 bytes packages/tools/fbterm/terminfo/r/rxvt-m | 1 - packages/tools/fbterm/terminfo/r/rxvt-unicode | Bin 2508 -> 0 bytes packages/tools/fbterm/terminfo/s/screen | Bin 1594 -> 0 bytes .../tools/fbterm/terminfo/s/screen-256color | Bin 1912 -> 0 bytes .../fbterm/terminfo/s/screen-256color-bce | Bin 1924 -> 0 bytes packages/tools/fbterm/terminfo/s/screen-bce | Bin 1590 -> 0 bytes packages/tools/fbterm/terminfo/s/screen-s | Bin 1612 -> 0 bytes packages/tools/fbterm/terminfo/s/screen-w | Bin 1594 -> 0 bytes packages/tools/fbterm/terminfo/s/sun | Bin 1004 -> 0 bytes packages/tools/fbterm/terminfo/v/vt100 | Bin 1194 -> 0 bytes packages/tools/fbterm/terminfo/v/vt102 | Bin 1188 -> 0 bytes packages/tools/fbterm/terminfo/v/vt220 | Bin 1377 -> 0 bytes packages/tools/fbterm/terminfo/v/vt52 | Bin 470 -> 0 bytes packages/tools/fbterm/terminfo/w/wsvt25 | Bin 1597 -> 0 bytes packages/tools/fbterm/terminfo/w/wsvt25m | Bin 1607 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm | Bin 3360 -> 0 bytes .../tools/fbterm/terminfo/x/xterm-256color | Bin 3430 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm-color | Bin 1569 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm-debian | 1 - packages/tools/fbterm/terminfo/x/xterm-mono | Bin 1515 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm-r5 | Bin 1301 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm-r6 | Bin 1491 -> 0 bytes packages/tools/fbterm/terminfo/x/xterm-vt220 | Bin 2316 -> 0 bytes .../tools/fbterm/terminfo/x/xterm-xfree86 | Bin 2265 -> 0 bytes packages/tools/flashrom/package.mk | 21 - packages/tools/freeimagelite/package.mk | 10 - packages/tools/led_tools/package.mk | 24 - packages/tools/mkbootimg/package.mk | 17 - packages/tools/python-evdev/package.mk | 38 - packages/tools/pyyaml/package.mk | 37 - .../scrapers/Skyscraper/config/artwork.xml | 16 - .../scrapers/Skyscraper/config/config.ini | 23 - packages/tools/scrapers/Skyscraper/package.mk | 42 - .../scrapers/Skyscraper/scripts/skyscraper | 20 - packages/tools/scrapers/scraper/package.mk | 56 - packages/tools/sound/libmad/package.mk | 35 - .../libmad-0.15.1b-automake_1.13.patch | 12 - .../patches/libmad-0.15.1b-cflags-O2.patch | 12 - .../patches/libmad-0.15.1b-cflags.patch | 146 -- packages/web/libmicrohttpd/package.mk | 20 - 138 files changed, 6033 deletions(-) delete mode 100755 packages/audio/bluez-alsa/daemons/006-bluealsa delete mode 100644 packages/audio/bluez-alsa/default.d/bluealsa.conf delete mode 100644 packages/audio/bluez-alsa/package.mk delete mode 100644 packages/audio/bluez-alsa/system.d/bluealsa-defaults.service delete mode 100644 packages/audio/bluez-alsa/system.d/bluealsa.service delete mode 100644 packages/audio/libcdio/package.mk delete mode 100644 packages/audio/libopenmpt/package.mk delete mode 100644 packages/audio/libopenmpt/patches/libopenmpt-add-libvorbisfile-to-pkgconfig.patch delete mode 100644 packages/audio/sidplay-libs/package.mk delete mode 100644 packages/audio/sidplay-libs/patches/sidplay-libs-01-m4-tests.patch delete mode 100644 packages/audio/sidplay-libs/patches/sidplay-libs-02-inherited.patch delete mode 100644 packages/audio/sidplay-libs/patches/sidplay-libs-03-operator.patch delete mode 100644 packages/audio/sidplay-libs/patches/sidplay-libs-04-includes.patch delete mode 100644 packages/audio/wavpack/package.mk delete mode 100644 packages/databases/mariadb-connector-c/package.mk delete mode 100644 packages/debug/vadumpcaps/package.mk delete mode 100644 packages/debug/xorg-intel-gpu-tools/package.mk delete mode 100644 packages/devel/flatbuffers/package.mk delete mode 100644 packages/devel/gperftools/package.mk delete mode 100644 packages/devel/libbpf/package.mk delete mode 100644 packages/devel/libbpf/patches/libbpf-fix-crosscompile-and-sysroot.patch delete mode 100644 packages/devel/libevent/package.mk delete mode 100644 packages/devel/libfstrcmp/package.mk delete mode 100644 packages/devel/libftdi1/package.mk delete mode 100644 packages/devel/libirman/package.mk delete mode 100644 packages/devel/libirman/patches/libirman-0001-fix-poll-include.patch delete mode 100644 packages/devel/libplist/package.mk delete mode 100644 packages/devel/spdlog/package.mk delete mode 100644 packages/devel/xxd/package.mk delete mode 100644 packages/devel/yajl/package.mk delete mode 100644 packages/graphics/kmscube/package.mk delete mode 100755 packages/graphics/vulkan/vkmark/package.mk delete mode 100755 packages/graphics/vulkan/vkmark/patches/vkmark-999.01-PR47-drop-the-vkCreateDmaBufImageINTEL-extension.patch delete mode 100644 packages/lang/lua52/config/lua52.pc delete mode 100644 packages/lang/lua52/package.mk delete mode 100644 packages/multimedia/bento4/package.mk delete mode 100644 packages/multimedia/intel-vaapi-driver/package.mk delete mode 100644 packages/multimedia/intel-vaapi-driver/patches/0001-intel-vaapi-driver-2.4.1-Handle-odd-resolution.patch delete mode 100644 packages/multimedia/libbluray/package.mk delete mode 100644 packages/multimedia/libbluray/patches/libbluray-00-fix-build-with-autoconf-archive-2016-or-later.patch delete mode 100644 packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairiel_vL20170904.patch delete mode 100644 packages/multimedia/libbluray/patches/libbluray-02-install-extra-MVC-headers.patch delete mode 100644 packages/multimedia/libbluray/patches/libbluray-03-set-headless-false.patch delete mode 100644 packages/multimedia/libdvdnav/package.mk delete mode 100644 packages/multimedia/libhdhomerun/package.mk delete mode 100644 packages/network/libnfs/package.mk delete mode 100644 packages/network/libshairplay/package.mk delete mode 100644 packages/network/libshairplay/patches/libshairplay-read_airportkey_from_etc.patch delete mode 100644 packages/network/sixpair/package.mk delete mode 100644 packages/python/graphics/Pillow/package.mk delete mode 100644 packages/python/graphics/Pillow/patches/Pillow-0001-crosscompiling.patch delete mode 100644 packages/python/security/pycryptodome/package.mk delete mode 100644 packages/python/system/dbussy/package.mk delete mode 100644 packages/python/system/simplejson/package.mk delete mode 100644 packages/rust/cargo-c/package.mk delete mode 100644 packages/sysutils/autossh/package.mk delete mode 100644 packages/sysutils/bkeymaps/package.mk delete mode 100644 packages/sysutils/dstat/package.mk delete mode 100644 packages/sysutils/efibootmgr/package.mk delete mode 100644 packages/sysutils/encfs/package.mk delete mode 100644 packages/sysutils/fdupes/package.mk delete mode 100644 packages/sysutils/fuse-exfat/package.mk delete mode 100644 packages/sysutils/getscancodes/package.mk delete mode 100644 packages/sysutils/hddtemp/db/hddtemp.db delete mode 100644 packages/sysutils/hddtemp/package.mk delete mode 100644 packages/sysutils/hid_mapper/package.mk delete mode 100644 packages/sysutils/hid_mapper/patches/hid_mapper-01_crosscompile.patch delete mode 100644 packages/sysutils/hid_mapper/patches/hid_mapper-02_include-sys-time.patch delete mode 100644 packages/sysutils/hid_mapper/patches/hid_mapper-03_fix-parser.patch delete mode 100644 packages/sysutils/inotify-tools/package.mk delete mode 100644 packages/sysutils/interception/package.mk delete mode 100644 packages/sysutils/mrxvt/package.mk delete mode 100644 packages/sysutils/mrxvt/patches/mrxvt-01_xterm.patch delete mode 100644 packages/sysutils/mtpfs/package.mk delete mode 100644 packages/sysutils/nmon/package.mk delete mode 100644 packages/sysutils/stress-ng/package.mk delete mode 100644 packages/textproc/rapidxml/package.mk delete mode 100644 packages/textproc/tinyxml/package.mk delete mode 100644 packages/tools/fbterm/package.mk delete mode 100644 packages/tools/fbterm/patches/0001-fbio.cpp-improxy.cpp-fbterm.cpp-fix-musl-compile.patch delete mode 100644 packages/tools/fbterm/patches/gcc-6-build-fixes.patch delete mode 100644 packages/tools/fbterm/terminfo/E/Eterm delete mode 120000 packages/tools/fbterm/terminfo/E/Eterm-color delete mode 100644 packages/tools/fbterm/terminfo/a/ansi delete mode 100644 packages/tools/fbterm/terminfo/c/cons25 delete mode 100644 packages/tools/fbterm/terminfo/c/cons25-debian delete mode 100644 packages/tools/fbterm/terminfo/c/cygwin delete mode 100644 packages/tools/fbterm/terminfo/d/dumb delete mode 100644 packages/tools/fbterm/terminfo/h/hurd delete mode 100644 packages/tools/fbterm/terminfo/l/linux delete mode 100644 packages/tools/fbterm/terminfo/m/mach delete mode 100644 packages/tools/fbterm/terminfo/m/mach-bold delete mode 100644 packages/tools/fbterm/terminfo/m/mach-color delete mode 100644 packages/tools/fbterm/terminfo/m/mach-gnu delete mode 100644 packages/tools/fbterm/terminfo/m/mach-gnu-color delete mode 100644 packages/tools/fbterm/terminfo/p/pcansi delete mode 100644 packages/tools/fbterm/terminfo/r/rxvt delete mode 100644 packages/tools/fbterm/terminfo/r/rxvt-basic delete mode 120000 packages/tools/fbterm/terminfo/r/rxvt-m delete mode 100644 packages/tools/fbterm/terminfo/r/rxvt-unicode delete mode 100644 packages/tools/fbterm/terminfo/s/screen delete mode 100644 packages/tools/fbterm/terminfo/s/screen-256color delete mode 100644 packages/tools/fbterm/terminfo/s/screen-256color-bce delete mode 100644 packages/tools/fbterm/terminfo/s/screen-bce delete mode 100644 packages/tools/fbterm/terminfo/s/screen-s delete mode 100644 packages/tools/fbterm/terminfo/s/screen-w delete mode 100644 packages/tools/fbterm/terminfo/s/sun delete mode 100644 packages/tools/fbterm/terminfo/v/vt100 delete mode 100644 packages/tools/fbterm/terminfo/v/vt102 delete mode 100644 packages/tools/fbterm/terminfo/v/vt220 delete mode 100644 packages/tools/fbterm/terminfo/v/vt52 delete mode 100644 packages/tools/fbterm/terminfo/w/wsvt25 delete mode 100644 packages/tools/fbterm/terminfo/w/wsvt25m delete mode 100644 packages/tools/fbterm/terminfo/x/xterm delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-256color delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-color delete mode 120000 packages/tools/fbterm/terminfo/x/xterm-debian delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-mono delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-r5 delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-r6 delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-vt220 delete mode 100644 packages/tools/fbterm/terminfo/x/xterm-xfree86 delete mode 100644 packages/tools/flashrom/package.mk delete mode 100644 packages/tools/freeimagelite/package.mk delete mode 100644 packages/tools/led_tools/package.mk delete mode 100644 packages/tools/mkbootimg/package.mk delete mode 100644 packages/tools/python-evdev/package.mk delete mode 100644 packages/tools/pyyaml/package.mk delete mode 100644 packages/tools/scrapers/Skyscraper/config/artwork.xml delete mode 100644 packages/tools/scrapers/Skyscraper/config/config.ini delete mode 100644 packages/tools/scrapers/Skyscraper/package.mk delete mode 100755 packages/tools/scrapers/Skyscraper/scripts/skyscraper delete mode 100644 packages/tools/scrapers/scraper/package.mk delete mode 100644 packages/tools/sound/libmad/package.mk delete mode 100644 packages/tools/sound/libmad/patches/libmad-0.15.1b-automake_1.13.patch delete mode 100644 packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags-O2.patch delete mode 100644 packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags.patch delete mode 100644 packages/web/libmicrohttpd/package.mk diff --git a/packages/audio/bluez-alsa/daemons/006-bluealsa b/packages/audio/bluez-alsa/daemons/006-bluealsa deleted file mode 100755 index 3f39c69d2..000000000 --- a/packages/audio/bluez-alsa/daemons/006-bluealsa +++ /dev/null @@ -1,3 +0,0 @@ -STATE=$(get_setting bluetooth.enabled) -SVC="bluealsa" -DAEMONS=("bluealsa") diff --git a/packages/audio/bluez-alsa/default.d/bluealsa.conf b/packages/audio/bluez-alsa/default.d/bluealsa.conf deleted file mode 100644 index fe0fb07f9..000000000 --- a/packages/audio/bluez-alsa/default.d/bluealsa.conf +++ /dev/null @@ -1 +0,0 @@ -BLUEALSA_ARGS="-p a2dp-source -p a2dp-sink -c aptx -c aac -c ldac --ldac-quality=standard --ldac-abr" diff --git a/packages/audio/bluez-alsa/package.mk b/packages/audio/bluez-alsa/package.mk deleted file mode 100644 index 451b27e21..000000000 --- a/packages/audio/bluez-alsa/package.mk +++ /dev/null @@ -1,44 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2022-present Marek Moeckel (wansti@discarded-ideas.org) -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="bluez-alsa" -PKG_VERSION="b65a40f" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/Arkq/bluez-alsa" -PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain alsa-lib bluez sbc dbus libopenaptx fdk-aac libldac" -PKG_LONGDESC="Bluetooth audio ALSA backend" -PKG_TOOLCHAIN="autotools" - -if build_with_debug; then - PKG_BLUEALSA_DEBUG=--with-debug -fi - -PKG_CONFIGURE_OPTS_TARGET="${PKG_BLUEALSA_DEBUG} \ - --enable-aptx \ - --with-libopenaptx \ - --enable-aac \ - --enable-ldac \ - --enable-upower \ - --enable-a2dpconf \ - --enable-cli \ - --enable-systemd" - -post_makeinstall_target() { - mkdir -p ${INSTALL}/usr/share/services - mkdir -p ${INSTALL}/usr/lib/systemd/system - cp -P ${PKG_DIR}/default.d/*.conf ${INSTALL}/usr/share/services/ - cp -P ${PKG_DIR}/system.d/*.service ${INSTALL}/usr/lib/systemd/system/ - - # workaround until I figure out how to query this directory - mkdir -p ${INSTALL}/usr/lib/alsa-lib - cp -P ${PKG_BUILD}/.*/src/asound/.libs/*.so ${INSTALL}/usr/lib/alsa-lib/ - sed -i ${INSTALL}/etc/dbus-1/system.d/bluealsa.conf -e "s|audio|root|g" - rm -rf ${INSTALL}/home -} - -post_install() { - #enable_service bluealsa.service - #enable_service bluealsa-defaults.service -} diff --git a/packages/audio/bluez-alsa/system.d/bluealsa-defaults.service b/packages/audio/bluez-alsa/system.d/bluealsa-defaults.service deleted file mode 100644 index e8eb69174..000000000 --- a/packages/audio/bluez-alsa/system.d/bluealsa-defaults.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Bluealsa defaults -After=local-fs.target - -ConditionPathExists=!/storage/.cache/services/bluealsa.conf -ConditionPathExists=!/storage/.cache/services/bluealsa.disabled - -[Service] -Type=oneshot -ExecStart=/bin/sh -c 'cp /usr/share/services/bluealsa.conf /storage/.cache/services/' -RemainAfterExit=yes diff --git a/packages/audio/bluez-alsa/system.d/bluealsa.service b/packages/audio/bluez-alsa/system.d/bluealsa.service deleted file mode 100644 index 66ad2a966..000000000 --- a/packages/audio/bluez-alsa/system.d/bluealsa.service +++ /dev/null @@ -1,53 +0,0 @@ -[Unit] -Description=BlueALSA service -Documentation=man:bluealsa(8) -Requisite=dbus.service -After=bluetooth.service bluealsa-defaults.service -Requires=bluealsa-defaults.service -ConditionPathExists=/storage/.cache/services/bluealsa.conf - -# In order to customize BlueALSA D-Bus service one should create an override -# for this systemd unit file. Please note, that in the override file one will -# have to explicitly clear the ExecStart before setting it again. See the -# bluez-alsa wiki for more options. -# -# $ sudo systemctl edit bluealsa -# [Service] -# ExecStart= -# ExecStart=/usr/bin/bluealsa -p a2dp-source -p a2dp-sink -c aptx -c aac -c ldac - -[Service] -Type=dbus -BusName=org.bluealsa -EnvironmentFile=/storage/.cache/services/bluealsa.conf -ExecStart=/usr/bin/bluealsa $BLUEALSA_ARGS -Restart=on-failure - -# Sandboxing -CapabilityBoundingSet= -IPAddressDeny=any -LockPersonality=true -MemoryDenyWriteExecute=true -NoNewPrivileges=true -PrivateDevices=true -PrivateTmp=true -PrivateUsers=true -ProtectControlGroups=true -ProtectHome=true -ProtectHostname=true -ProtectKernelLogs=true -ProtectKernelModules=true -ProtectKernelTunables=true -ProtectSystem=strict -RestrictAddressFamilies=AF_UNIX AF_BLUETOOTH -RestrictNamespaces=true -RestrictRealtime=true -RestrictSUIDSGID=true -SystemCallArchitectures=native -SystemCallErrorNumber=EPERM -SystemCallFilter=@system-service -SystemCallFilter=~@resources @privileged -UMask=0077 - -[Install] -WantedBy=bluetooth.target diff --git a/packages/audio/libcdio/package.mk b/packages/audio/libcdio/package.mk deleted file mode 100644 index 4a7072429..000000000 --- a/packages/audio/libcdio/package.mk +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libcdio" -PKG_VERSION="2.1.0" -PKG_SHA256="8550e9589dbd594bfac93b81ecf129b1dc9d0d51e90f9696f1b2f9b2af32712b" -PKG_LICENSE="GPLv3" -PKG_SITE="https://www.gnu.org/software/libcdio/" -PKG_URL="http://ftp.gnu.org/gnu/libcdio/${PKG_NAME}-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A CD-ROM reading and control library." -PKG_BUILD_FLAGS="+pic" - -# package specific configure options -PKG_CONFIGURE_OPTS_TARGET="--enable-cxx \ - --disable-cpp-progs \ - --disable-shared \ - --enable-static \ - --enable-joliet \ - --disable-rpath \ - --enable-rock \ - --disable-cddb \ - --disable-vcd-info \ - --without-cd-drive \ - --without-cd-info \ - --without-cdda-player \ - --without-cd-read \ - --without-iso-info \ - --without-iso-read \ - --without-libiconv-prefix \ - --with-gnu-ld" - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr/bin -} diff --git a/packages/audio/libopenmpt/package.mk b/packages/audio/libopenmpt/package.mk deleted file mode 100644 index 466cafc50..000000000 --- a/packages/audio/libopenmpt/package.mk +++ /dev/null @@ -1,25 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libopenmpt" -PKG_VERSION="0.7.3" -PKG_LICENSE="BSD" -PKG_SITE="https://lib.openmpt.org/libopenmpt/" -PKG_URL="https://lib.openmpt.org/files/libopenmpt/src/${PKG_NAME}-${PKG_VERSION}+release.autotools.tar.gz" -PKG_DEPENDS_TARGET="toolchain libogg libvorbis zlib" -PKG_LONGDESC="libopenmpt renders mod music files as raw audio data, for playing or conversion." -PKG_BUILD_FLAGS="+pic" - -PKG_CONFIGURE_OPTS_TARGET="--enable-static \ - --disable-shared \ - --without-mpg123 \ - --with-vorbis \ - --with-vorbisfile \ - --without-pulseaudio \ - --without-portaudio \ - --without-portaudiocpp \ - --without-sdl \ - --without-sdl2 \ - --without-sndfile \ - --without-flac" diff --git a/packages/audio/libopenmpt/patches/libopenmpt-add-libvorbisfile-to-pkgconfig.patch b/packages/audio/libopenmpt/patches/libopenmpt-add-libvorbisfile-to-pkgconfig.patch deleted file mode 100644 index 7aa4ad928..000000000 --- a/packages/audio/libopenmpt/patches/libopenmpt-add-libvorbisfile-to-pkgconfig.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/libopenmpt/libopenmpt.pc.in 2016-07-09 18:17:00.000000000 +0000 -+++ b/libopenmpt/libopenmpt.pc.in 2021-12-25 00:53:54.189008995 +0000 -@@ -8,7 +8,7 @@ - Description: Tracker module player based on OpenMPT - Version: @VERSION@ - Requires.private: @LIBOPENMPT_REQUIRES_PRIVATE@ --Libs: -L${libdir} -lopenmpt -+Libs: -L${libdir} -lopenmpt -lvorbisfile - Libs.private: @LIBOPENMPT_LIBS_PRIVATE@ - Cflags: -I${includedir} - diff --git a/packages/audio/sidplay-libs/package.mk b/packages/audio/sidplay-libs/package.mk deleted file mode 100644 index 7f98382ec..000000000 --- a/packages/audio/sidplay-libs/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="sidplay-libs" -PKG_VERSION="2.1.1" -PKG_SHA256="e9a24ada48215a46d2c232a70c5601bc9505e997f120e8f2ba3713e09e28d1f9" -PKG_LICENSE="GPL" -PKG_SITE="http://sidplay2.sourceforge.net/" -PKG_URL="http://mirrors.xbmc.org/build-deps/sources/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="sidplay-libs" -PKG_BUILD_FLAGS="+pic" - -PKG_CONFIGURE_OPTS_TARGET="--disable-shared --enable-static" - -pre_configure_target() { - # fails to build in subdirs - cd ${PKG_BUILD} - rm -rf .${TARGET_NAME} - - export CXXFLAGS="${CXXFLAGS} -Wno-narrowing" -} diff --git a/packages/audio/sidplay-libs/patches/sidplay-libs-01-m4-tests.patch b/packages/audio/sidplay-libs/patches/sidplay-libs-01-m4-tests.patch deleted file mode 100644 index 88592b0b7..000000000 --- a/packages/audio/sidplay-libs/patches/sidplay-libs-01-m4-tests.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- sidplay-libs-2.1.1/libsidplay/unix/my_macros.m4.orig 2004-06-14 22:08:04.000000000 +0200 -+++ sidplay-libs-2.1.1/libsidplay/unix/my_macros.m4 2013-11-18 01:23:32.195297135 +0100 -@@ -80,8 +80,8 @@ - AC_CACHE_VAL(test_cv_have_ios_binary, - [ - AC_TRY_COMPILE( -- [#include ], -- [ifstream myTest(ios::in|ios::binary);], -+ [#include ], -+ [std::ifstream myTest(std::ios::in|std::ios::binary);], - [test_cv_have_ios_binary=yes], - [test_cv_have_ios_binary=no] - ) -@@ -105,9 +105,9 @@ - AC_CACHE_VAL(test_cv_have_ios_openmode, - [ - AC_TRY_COMPILE( -- [#include -- #include ], -- [ios::openmode myTest = ios::in;], -+ [#include -+ #include ], -+ [std::ios_base::openmode myTest = std::ios::in;], - [test_cv_have_ios_openmode=yes], - [test_cv_have_ios_openmode=no] - ) diff --git a/packages/audio/sidplay-libs/patches/sidplay-libs-02-inherited.patch b/packages/audio/sidplay-libs/patches/sidplay-libs-02-inherited.patch deleted file mode 100644 index 0e86eedf8..000000000 --- a/packages/audio/sidplay-libs/patches/sidplay-libs-02-inherited.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- sidplay-libs-2.1.1/libsidplay/include/sidplay/SmartPtr.h.old 2013-11-18 00:40:16.679173012 +0100 -+++ sidplay-libs-2.1.1/libsidplay/include/sidplay/SmartPtr.h 2013-11-18 00:41:22.451176157 +0100 -@@ -211,16 +211,16 @@ - { - if ( bufferLen >= 1 ) - { -- pBufCurrent = ( bufBegin = buffer ); -- bufEnd = bufBegin + bufferLen; -- bufLen = bufferLen; -- status = true; -+ this->pBufCurrent = ( this->bufBegin = buffer ); -+ this->bufEnd = this->bufBegin + bufferLen; -+ this->bufLen = bufferLen; -+ this->status = true; - } - else - { -- pBufCurrent = bufBegin = bufEnd = 0; -- bufLen = 0; -- status = false; -+ this->pBufCurrent = this->bufBegin = this->bufEnd = 0; -+ this->bufLen = 0; -+ this->status = false; - } - } - }; diff --git a/packages/audio/sidplay-libs/patches/sidplay-libs-03-operator.patch b/packages/audio/sidplay-libs/patches/sidplay-libs-03-operator.patch deleted file mode 100644 index 88af8ccd3..000000000 --- a/packages/audio/sidplay-libs/patches/sidplay-libs-03-operator.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- sidplay-libs-2.1.1/libsidutils/include/sidplay/utils/SidUsage.h.orig 2013-11-18 00:58:06.111224154 +0100 -+++ sidplay-libs-2.1.1/libsidutils/include/sidplay/utils/SidUsage.h 2013-11-18 00:58:28.219225212 +0100 -@@ -33,7 +33,7 @@ - uint_least16_t length; // usage scan length - - // Copy common parts of basic usage to extended usage. -- sid2_usage_t &sid2_usage_t::operator= (const sid_usage_t &usage) -+ sid2_usage_t &operator= (const sid_usage_t &usage) - { - *((sid_usage_t *) this) = usage; - return *this; diff --git a/packages/audio/sidplay-libs/patches/sidplay-libs-04-includes.patch b/packages/audio/sidplay-libs/patches/sidplay-libs-04-includes.patch deleted file mode 100644 index ef9cf0601..000000000 --- a/packages/audio/sidplay-libs/patches/sidplay-libs-04-includes.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- sidplay-libs-2.1.1/builders/hardsid-builder/src/hardsid-builder.cpp.orig 2004-06-14 22:07:57.000000000 +0200 -+++ sidplay-libs-2.1.1/builders/hardsid-builder/src/hardsid-builder.cpp 2013-11-18 01:01:50.399234880 +0100 -@@ -55,6 +55,7 @@ - - #include "hardsid.h" - #include "hardsid-emu.h" -+#include - - - #ifdef HAVE_MSWINDOWS ---- sidplay-libs-2.1.1/builders/resid-builder/src/resid.cpp.orig 2013-11-18 01:00:07.827229975 +0100 -+++ sidplay-libs-2.1.1/builders/resid-builder/src/resid.cpp 2013-11-18 01:00:21.563230632 +0100 -@@ -24,6 +24,7 @@ - - #include "resid.h" - #include "resid-emu.h" -+#include - - - char ReSID::m_credit[]; ---- sidplay-libs-2.1.1/builders/resid-builder/src/resid-builder.cpp.orig 2013-11-18 01:00:39.727231501 +0100 -+++ sidplay-libs-2.1.1/builders/resid-builder/src/resid-builder.cpp 2013-11-18 01:00:57.415232346 +0100 -@@ -45,6 +45,7 @@ - - #include "resid.h" - #include "resid-emu.h" -+#include - - // Error String(s) - const char *ReSIDBuilder::ERR_FILTER_DEFINITION = "RESID ERROR: Filter definition is not valid (see docs)."; diff --git a/packages/audio/wavpack/package.mk b/packages/audio/wavpack/package.mk deleted file mode 100644 index 20b72e386..000000000 --- a/packages/audio/wavpack/package.mk +++ /dev/null @@ -1,17 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="wavpack" -PKG_VERSION="5.6.0" -PKG_LICENSE="BSD" -PKG_SITE="http://www.wavpack.com" -PKG_URL="http://www.wavpack.com/wavpack-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain libiconv" -PKG_LONGDESC="Audio compression format providing lossless, high-quality lossy and hybrid compression mode." - -PKG_CMAKE_OPTS_TARGET="-DBUILD_TESTING=OFF \ - -DCMAKE_INSTALL_INCLUDEDIR=include/wavpack \ - -DWAVPACK_BUILD_PROGRAMS=OFF \ - -DWAVPACK_BUILD_DOCS=OFF \ - -DWAVPACK_ENABLE_ASM=OFF \ - -DWAVPACK_INSTALL_DOCS=OFF" diff --git a/packages/databases/mariadb-connector-c/package.mk b/packages/databases/mariadb-connector-c/package.mk deleted file mode 100644 index 52cf218c6..000000000 --- a/packages/databases/mariadb-connector-c/package.mk +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="mariadb-connector-c" -PKG_VERSION="3.1.1" -PKG_SHA256="63a0ecfa3c87ba0361aef3b2c849abe280f7371030e84f41ce0dc4466db85637" -PKG_LICENSE="LGPL" -PKG_SITE="https://mariadb.org/" -PKG_URL="https://github.com/MariaDB/mariadb-connector-c/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain zlib openssl" -PKG_LONGDESC="mariadb-connector: library to conntect to mariadb/mysql database server" -PKG_BUILD_FLAGS="-gold" - -PKG_CMAKE_OPTS_TARGET="-DWITH_EXTERNAL_ZLIB=ON - -DAUTH_CLEARTEXT=STATIC - -DAUTH_DIALOG=STATIC - -DAUTH_OLDPASSWORD=STATIC - -DREMOTEIO=OFF - " - -post_makeinstall_target() { - # drop all unneeded - rm -rf ${INSTALL}/usr -} diff --git a/packages/debug/vadumpcaps/package.mk b/packages/debug/vadumpcaps/package.mk deleted file mode 100644 index 3300590f4..000000000 --- a/packages/debug/vadumpcaps/package.mk +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="vadumpcaps" -PKG_VERSION="792c27f" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/fhvwy/vadumpcaps" -PKG_URL="https://github.com/fhvwy/vadumpcaps/archive/${PKG_VERSION}.tar.gz" -PKG_LONGDESC="This is a utility to show all capabilities of a VAAPI device/driver." -PKG_DEPENDS_TARGET="toolchain libva" - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp vadumpcaps ${INSTALL}/usr/bin -} diff --git a/packages/debug/xorg-intel-gpu-tools/package.mk b/packages/debug/xorg-intel-gpu-tools/package.mk deleted file mode 100644 index cbb39c22e..000000000 --- a/packages/debug/xorg-intel-gpu-tools/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="xorg-intel-gpu-tools" -PKG_VERSION="1.27.1" -PKG_SHA256="93b9a4816ed22b5145bb61024314c8a65caeea991ce93027643f1d40723bf417" -PKG_LICENSE="GPL" -PKG_DEPENDS_TARGET="toolchain cairo procps-ng" -PKG_SITE="https://gitlab.freedesktop.org/drm/igt-gpu-tools" -PKG_URL="https://www.x.org/releases/individual/app/igt-gpu-tools-${PKG_VERSION}.tar.xz" -PKG_LONGDESC="Test suite and tools for DRM/KMS drivers" - -PKG_MESON_OPTS_TARGET="-Dchamelium=disabled \ - -Ddocs=disabled \ - -Dlibdrm_drivers=auto \ - -Dlibunwind=disabled \ - -Dman=disabled \ - -Doverlay=disabled \ - -Drunner=disabled \ - -Dtests=enabled \ - -Dvalgrind=disabled" - -pre_configure_target() { - # xorg-intel-gpu-tools does not build with NDEBUG (requires assert for tests) - export TARGET_CFLAGS=$(echo ${TARGET_CFLAGS} | sed -e "s|-DNDEBUG||g") -} diff --git a/packages/devel/flatbuffers/package.mk b/packages/devel/flatbuffers/package.mk deleted file mode 100644 index 665323eac..000000000 --- a/packages/devel/flatbuffers/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="flatbuffers" -PKG_VERSION="23.5.26" -PKG_LICENSE="Apache-2.0" -PKG_SITE="https://github.com/google/flatbuffers" -PKG_URL="https://github.com/google/flatbuffers/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain:host" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="An efficient cross platform serialization library for games and other memory constrained apps." - -PKG_CMAKE_OPTS_HOST="-DFLATBUFFERS_CODE_COVERAGE=OFF \ - -DFLATBUFFERS_BUILD_TESTS=OFF \ - -DFLATBUFFERS_INSTALL=ON \ - -DFLATBUFFERS_BUILD_FLATLIB=OFF \ - -DFLATBUFFERS_BUILD_FLATC=ON \ - -DFLATBUFFERS_BUILD_FLATHASH=OFF \ - -DFLATBUFFERS_BUILD_GRPCTEST=OFF \ - -DFLATBUFFERS_BUILD_SHAREDLIB=OFF" - -PKG_CMAKE_OPTS_TARGET="-DFLATBUFFERS_CODE_COVERAGE=OFF \ - -DFLATBUFFERS_BUILD_TESTS=OFF \ - -DFLATBUFFERS_INSTALL=ON \ - -DFLATBUFFERS_BUILD_FLATLIB=ON \ - -DFLATBUFFERS_BUILD_FLATC=OFF \ - -DFLATBUFFERS_BUILD_FLATHASH=OFF \ - -DFLATBUFFERS_BUILD_GRPCTEST=OFF \ - -DFLATBUFFERS_BUILD_SHAREDLIB=OFF" - -pre_configure_host() { - export CXXFLAGS="${CXXFLAGS} -std=c++11" -} - -post_makeinstall_host() { - mkdir -p ${TOOLCHAIN}/bin - cp -PR ${PKG_BUILD}/.${HOST_NAME}/flatc ${TOOLCHAIN}/bin -} diff --git a/packages/devel/gperftools/package.mk b/packages/devel/gperftools/package.mk deleted file mode 100644 index e8ee9f476..000000000 --- a/packages/devel/gperftools/package.mk +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2021-present Team CoreELEC (https://coreelec.org) - -PKG_NAME="gperftools" -PKG_VERSION="2.13" -PKG_LICENSE="BSD" -PKG_SITE="https://github.com/gperftools/gperftools" -PKG_URL="https://github.com/gperftools/gperftools/archive/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Google Performance Tools" -PKG_TOOLCHAIN="autotools" - -PKG_CONFIGURE_OPTS_TARGET="--enable-minimal --disable-debugalloc --disable-static" diff --git a/packages/devel/libbpf/package.mk b/packages/devel/libbpf/package.mk deleted file mode 100644 index c4024e7f8..000000000 --- a/packages/devel/libbpf/package.mk +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libbpf" -PKG_VERSION="1.2.2" -PKG_LICENSE="LGPL-2.1" -PKG_SITE="https://github.com/libbpf/libbpf" -PKG_URL="https://github.com/libbpf/libbpf/archive/refs/tags/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain elfutils" -PKG_LONGDESC="libbpf supports building BPF CO-RE-enabled applications" -PKG_TOOLCHAIN="make" - -make_target() { - make BUILD_STATIC_ONLY=1 \ - PREFIX=${SYSROOT_PREFIX}/usr \ - -C src -} - -makeinstall_target() { - make BUILD_STATIC_ONLY=1 \ - PREFIX=${SYSROOT_PREFIX}/usr \ - -C src install -} diff --git a/packages/devel/libbpf/patches/libbpf-fix-crosscompile-and-sysroot.patch b/packages/devel/libbpf/patches/libbpf-fix-crosscompile-and-sysroot.patch deleted file mode 100644 index 35ad6db5a..000000000 --- a/packages/devel/libbpf/patches/libbpf-fix-crosscompile-and-sysroot.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/src/Makefile b/src/Makefile -index 81ea6b8..7ab5f13 100644 ---- a/src/Makefile -+++ b/src/Makefile -@@ -67,15 +67,12 @@ INSTALL = install - DESTDIR ?= - - HOSTARCH = $(firstword $(subst -, ,$(shell $(CC) -dumpmachine))) --ifeq ($(filter-out %64 %64be %64eb %64le %64el s390x, $(HOSTARCH)),) -- LIBSUBDIR := lib64 --else -- LIBSUBDIR := lib --endif -+LIBSUBDIR := lib - - # By default let the pc file itself use ${prefix} in includedir/libdir so that - # the prefix can be overridden at runtime (eg: --define-prefix) - ifndef LIBDIR -+ PREFIX_PC := /usr - LIBDIR_PC := $$\{prefix\}/$(LIBSUBDIR) - else - LIBDIR_PC := $(LIBDIR) -@@ -106,7 +103,7 @@ $(OBJDIR)/libbpf.so.$(LIBBPF_VERSION): $(SHARED_OBJS) - $^ $(ALL_LDFLAGS) -o $@ - - $(OBJDIR)/libbpf.pc: force -- $(Q)sed -e "s|@PREFIX@|$(PREFIX)|" \ -+ $(Q)sed -e "s|@PREFIX@|$(PREFIX_PC)|" \ - -e "s|@LIBDIR@|$(LIBDIR_PC)|" \ - -e "s|@VERSION@|$(LIBBPF_VERSION)|" \ - < libbpf.pc.template > $@ -diff --git a/src/libbpf.pc.template b/src/libbpf.pc.template -index b45ed53..fe6ddde 100644 ---- a/src/libbpf.pc.template -+++ b/src/libbpf.pc.template -@@ -7,6 +7,6 @@ includedir=${prefix}/include - Name: libbpf - Description: BPF library - Version: @VERSION@ --Libs: -L${libdir} -lbpf -+Libs: -L${libdir} -lbpf -lz - Requires.private: libelf zlib - Cflags: -I${includedir} diff --git a/packages/devel/libevent/package.mk b/packages/devel/libevent/package.mk deleted file mode 100644 index f9cfdc6fa..000000000 --- a/packages/devel/libevent/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2018-present Team CoreELEC (https://coreelec.org) - -PKG_NAME="libevent" -PKG_VERSION="2.1.12-stable" -PKG_LICENSE="BSD" -PKG_SITE="https://libevent.org" -PKG_URL="https://github.com/libevent/libevent/releases/download/release-${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain openssl" -PKG_LONGDESC="The libevent API provides a mechanism to execute a callback function when a specific event occurs." -PKG_TOOLCHAIN="configure" - -PKG_CONFIGURE_OPTS_TARGET="--disable-static \ - --disable-libevent-regress \ - --disable-samples \ - --enable-openssl" - -post_unpack() { - # https://github.com/libevent/libevent/issues/863 - # Uninstall.cmake.in is missing from 2.1.11 release - touch ${PKG_BUILD}/cmake/Uninstall.cmake.in -} - -post_makeinstall_target() { - rm -f ${INSTALL}/usr/bin/event_rpcgen.py -} diff --git a/packages/devel/libfstrcmp/package.mk b/packages/devel/libfstrcmp/package.mk deleted file mode 100644 index 7347ce692..000000000 --- a/packages/devel/libfstrcmp/package.mk +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libfstrcmp" -PKG_VERSION="0.7.D001" -PKG_SHA256="e4018e850f80700acee8da296e56e15b1eef711ab15157e542e7d7e1237c3476" -PKG_LICENSE="GPL" -PKG_SITE="http://fstrcmp.sourceforge.net/" -PKG_URL="https://downloads.sourceforge.net/project/fstrcmp/fstrcmp/$(get_pkg_version_maj_min)/fstrcmp-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="The fstrcmp project provides a library that is used to make fuzzy comparisons of strings and byte arrays, including multi-byte character strings." - -pre_configure_target() { - cd "${PKG_BUILD}" -} - -make_target() { - make all-bin -} - -makeinstall_target() { - make DESTDIR="${SYSROOT_PREFIX}" install-include install-libdir -} diff --git a/packages/devel/libftdi1/package.mk b/packages/devel/libftdi1/package.mk deleted file mode 100644 index 52da3f1c8..000000000 --- a/packages/devel/libftdi1/package.mk +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libftdi1" -PKG_VERSION="1.5" -PKG_SHA256="7c7091e9c86196148bd41177b4590dccb1510bfe6cea5bf7407ff194482eb049" -PKG_LICENSE="LGPL" -PKG_SITE="http://www.intra2net.com/en/developer/libftdi/" -PKG_URL="http://www.intra2net.com/en/developer/libftdi/download/${PKG_NAME}-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain libusb libconfuse" -PKG_LONGDESC="libFTDI is an open source library to talk to FTDI chips" -PKG_BUILD_FLAGS="+pic" - -PKG_CMAKE_OPTS_TARGET="-DSTATICLIBS=ON \ - -DDOCUMENTATION=FALSE \ - -DEXAMPLES=FALSE \ - -DFTDIPP=FALSE \ - -DPYTHON_BINDINGS=FALSE" - -makeinstall_target() { - mkdir -p ${SYSROOT_PREFIX}/usr/include/libftdi1 - cp ../src/ftdi.h ${SYSROOT_PREFIX}/usr/include/libftdi1 - - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp src/libftdi1.a ${SYSROOT_PREFIX}/usr/lib - - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cp libftdi1.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig -} diff --git a/packages/devel/libirman/package.mk b/packages/devel/libirman/package.mk deleted file mode 100644 index 316e55350..000000000 --- a/packages/devel/libirman/package.mk +++ /dev/null @@ -1,25 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libirman" -PKG_VERSION="0.5.2" -PKG_SHA256="43e58d7cd22b3a4c4dc8dcf8542a269ebcb4d8f6ceea0577b9fc882898f09a47" -PKG_LICENSE="GPL" -PKG_SITE="https://sourceforge.net/projects/libirman" -PKG_URL="http://downloads.sourceforge.net/project/libirman/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain systemd lirc" -PKG_NEED_UNPACK="$(get_pkg_directory lirc)" -PKG_LONGDESC="libirman library for lircd" -PKG_TOOLCHAIN="autotools" -PKG_BUILD_FLAGS="+pic -parallel" - -PKG_CONFIGURE_OPTS_TARGET="--disable-swtest" - -post_configure_target() { - libtool_remove_rpath libtool -} - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr/bin -} diff --git a/packages/devel/libirman/patches/libirman-0001-fix-poll-include.patch b/packages/devel/libirman/patches/libirman-0001-fix-poll-include.patch deleted file mode 100644 index 500572434..000000000 --- a/packages/devel/libirman/patches/libirman-0001-fix-poll-include.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff -Naur a/config.h.in b/config.h.in ---- a/config.h.in 2016-05-18 18:19:56.000000000 +0200 -+++ b/config.h.in 2016-12-26 22:49:43.514203152 +0100 -@@ -21,6 +21,9 @@ - /* Define to 1 if you have the `mkfifo' function. */ - #undef HAVE_MKFIFO - -+/* defined if poll.h is available */ -+#undef HAVE_POLL_H -+ - /* Define to 1 if you have the `select' function. */ - #undef HAVE_SELECT - -@@ -48,6 +51,9 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_FILE_H - -+/* defined if sys/poll.h is available */ -+#undef HAVE_SYS_POLL_H -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_SYS_STAT_H - -diff -Naur a/configure.ac b/configure.ac ---- a/configure.ac 2016-05-18 18:19:41.000000000 +0200 -+++ b/configure.ac 2016-12-26 22:48:40.190031280 +0100 -@@ -20,7 +20,7 @@ - - dnl Checks for header files. - AC_HEADER_STDC --AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h termios.h memory.hi sys/file.h) -+AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h termios.h memory.hi sys/file.h poll.h sys/poll.h) - - dnl Checks for typedefs, structures, and compiler characteristics. - AC_TYPE_PID_T diff --git a/packages/devel/libplist/package.mk b/packages/devel/libplist/package.mk deleted file mode 100644 index efdaa3f7b..000000000 --- a/packages/devel/libplist/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="libplist" -PKG_VERSION="2.3.0" -PKG_LICENSE="GPL" -PKG_SITE="http://www.libimobiledevice.org/" -PKG_URL="https://github.com/libimobiledevice/libplist/releases/download/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain glib" -PKG_LONGDESC="libplist is a library for manipulating Apple Binary and XML Property Lists" -PKG_TOOLCHAIN="autotools" - -PKG_CONFIGURE_OPTS_TARGET="--without-cython" - -pre_configure_target() { - # work around bashism in configure script - export CONFIG_SHELL="/bin/bash" -} - -post_configure_target() { - libtool_remove_rpath libtool -} - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr/bin -} diff --git a/packages/devel/spdlog/package.mk b/packages/devel/spdlog/package.mk deleted file mode 100644 index ed068655e..000000000 --- a/packages/devel/spdlog/package.mk +++ /dev/null @@ -1,17 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="spdlog" -PKG_VERSION="1.12.0" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/gabime/spdlog" -PKG_URL="https://github.com/gabime/spdlog/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libfmt" -PKG_LONGDESC="Very fast, header only, C++ logging library." - -PKG_CMAKE_OPTS_TARGET="-DCMAKE_CXX_STANDARD=14 \ - -DCMAKE_CXX_EXTENSIONS:BOOL=OFF \ - -DSPDLOG_BUILD_SHARED=ON \ - -DSPDLOG_FMT_EXTERNAL=ON \ - -DSPDLOG_BUILD_EXAMPLE=OFF \ - -DSPDLOG_BUILD_TESTS=OFF" diff --git a/packages/devel/xxd/package.mk b/packages/devel/xxd/package.mk deleted file mode 100644 index 8e00bdd50..000000000 --- a/packages/devel/xxd/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# Copyright (C) 2022-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="xxd" -PKG_VERSION="$(get_pkg_version vim)" -PKG_LICENSE="VIM" -PKG_URL="" -PKG_DEPENDS_HOST="toolchain:host" -PKG_DEPENDS_UNPACK+=" vim" -PKG_LONGDESC="make a hexdump or do the reverse" -PKG_BUILD_FLAGS="-sysroot" -PKG_TOOLCHAIN="manual" - -unpack() { - mkdir -p ${PKG_BUILD} - tar --strip-components=1 -xf ${SOURCES}/vim/vim-${PKG_VERSION}.tar.gz -C ${PKG_BUILD} -} - -make_host() { - ${HOST_CXX} -x c -std=c11 -O3 -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion ../src/xxd/xxd.c -o xxd -} - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/bin - cp -p xxd ${TOOLCHAIN}/bin -} diff --git a/packages/devel/yajl/package.mk b/packages/devel/yajl/package.mk deleted file mode 100644 index 3de3c00de..000000000 --- a/packages/devel/yajl/package.mk +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="yajl" -PKG_VERSION="2.1.0" -PKG_SHA256="020f55a2dfc979ad63dc99b629b3fea7e7e4b9f20d8b10b856cfcb8850f03c61" -PKG_LICENSE="ISC" -PKG_SITE="http://lloyd.github.com/yajl/" -PKG_URL="${DISTRO_SRC}/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A small event-driven (SAX-style) JSON parser." - -post_makeinstall_target() { - mv ${SYSROOT_PREFIX}/usr/lib/libyajl_s.a ${SYSROOT_PREFIX}/usr/lib/libyajl.a - rm ${SYSROOT_PREFIX}/usr/lib/libyajl.so* - - rm -rf ${INSTALL}/usr/bin - rm -rf ${INSTALL}/usr/lib -} diff --git a/packages/graphics/kmscube/package.mk b/packages/graphics/kmscube/package.mk deleted file mode 100644 index 90ee34c89..000000000 --- a/packages/graphics/kmscube/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="kmscube" -PKG_VERSION="96d63eb59e34c647cda1cbb489265f8c536ae055" -PKG_LICENSE="GPL" -PKG_SITE="https://cgit.freedesktop.org/mesa/kmscube" -PKG_URL="https://cgit.freedesktop.org/mesa/kmscube/snapshot/${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Example KMS/GBM/EGL application" -PKG_TOOLCHAIN="autotools" - -if [ "${OPENGLES_SUPPORT}" = "yes" ]; then - PKG_DEPENDS_TARGET+=" ${OPENGLES}" -elif [ "${OPENGL_SUPPORT}" = "yes" ]; then - echo "kmscube only supports OpenGLESv2" - exit 0 -fi diff --git a/packages/graphics/vulkan/vkmark/package.mk b/packages/graphics/vulkan/vkmark/package.mk deleted file mode 100755 index e71ec9fdb..000000000 --- a/packages/graphics/vulkan/vkmark/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="vkmark" -PKG_VERSION="ab6e6f3" -PKG_LICENSE="LGPL-2.1-or-later" -PKG_SITE="https://github.com/vkmark/vkmark" -PKG_URL="https://github.com/vkmark/vkmark/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain glm assimp vulkan-loader" -PKG_LONGDESC="Vulkan benchmark" -PKG_BUILD_FLAGS="-parallel +speed" - -case ${DISPLAYSERVER} in - wl) - PKG_DEPENDS_TARGET+=" wayland wayland-protocols" - PKG_MESON_OPTS_TARGET="-Dwayland=true" - ;; - x11) - PKG_DEPENDS_TARGET+=" libxcb xcb-util-wm" - PKG_MESON_OPTS_TARGET="-Dxcb=true" - ;; - *) - PKG_DEPENDS_TARGET+=" systemd libdrm mesa" - PKG_MESON_OPTS_TARGET="-Dkms=true" - ;; -esac diff --git a/packages/graphics/vulkan/vkmark/patches/vkmark-999.01-PR47-drop-the-vkCreateDmaBufImageINTEL-extension.patch b/packages/graphics/vulkan/vkmark/patches/vkmark-999.01-PR47-drop-the-vkCreateDmaBufImageINTEL-extension.patch deleted file mode 100755 index ab1f78906..000000000 --- a/packages/graphics/vulkan/vkmark/patches/vkmark-999.01-PR47-drop-the-vkCreateDmaBufImageINTEL-extension.patch +++ /dev/null @@ -1,542 +0,0 @@ -From 51c7eb0c8c1cd4872eec176775276cca3565a0a6 Mon Sep 17 00:00:00 2001 -From: Alexandros Frantzis -Date: Fri, 9 Sep 2022 18:32:03 +0300 -Subject: [PATCH 1/4] github: Build with both ubuntu-20.04 and ubuntu-22.04 in - CI - ---- - .github/workflows/build.yml | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml -index fbb5682..b60ad80 100644 ---- a/.github/workflows/build.yml -+++ b/.github/workflows/build.yml -@@ -10,7 +10,10 @@ on: - - jobs: - build: -- runs-on: ubuntu-latest -+ strategy: -+ matrix: -+ os: [ubuntu-20.04, ubuntu-22.04] -+ runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v1 - - name: Install dependencies - -From 7bbe275e49045237f2cdbc2f441a394b562b0aa5 Mon Sep 17 00:00:00 2001 -From: Alexandros Frantzis -Date: Fri, 9 Sep 2022 18:08:12 +0300 -Subject: [PATCH 2/4] core: Improve log message consistency - ---- - src/vulkan_state.cpp | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/vulkan_state.cpp b/src/vulkan_state.cpp -index 6f50673..fbd789c 100644 ---- a/src/vulkan_state.cpp -+++ b/src/vulkan_state.cpp -@@ -44,7 +44,7 @@ std::vector VulkanState::available_devices(VulkanWSI& vulkan - { - if (!vulkan_wsi.is_physical_device_supported(*it_device)) - { -- Log::debug("device with uuid %s is not supported by window system integration layer", -+ Log::debug("Device with uuid %s is not supported by window system integration layer\n", - static_cast(it_device->getProperties().pipelineCacheUUID).representation().data()); - it_device = available_devices.erase(it_device); - } -@@ -193,17 +193,17 @@ void VulkanState::create_command_pool() - - vk::PhysicalDevice ChooseFirstSupportedStrategy::operator()(const std::vector& available_devices) - { -- Log::debug("Trying to use first supported device.\n"); -+ Log::debug("Trying to use first supported device\n"); - - for (auto const& physical_device : available_devices) - { - if (find_queue_family_index(physical_device, vk::QueueFlagBits::eGraphics).second) - { -- Log::debug("First supported device choosen!\n"); -+ Log::debug("First supported device chosen\n"); - return physical_device; - } - -- Log::debug("device with uuid %s skipped!\n", -+ Log::debug("Device with uuid %s skipped\n", - static_cast(physical_device.getProperties().pipelineCacheUUID).representation().data() - ); - } -@@ -213,7 +213,7 @@ vk::PhysicalDevice ChooseFirstSupportedStrategy::operator()(const std::vector& available_devices) - { -- Log::debug("Trying to use device with specified UUID %s.\n", -+ Log::debug("Trying to use device with specified UUID %s\n", - m_selected_device_uuid.representation().data()); - - for (auto const& physical_device: available_devices) -@@ -227,5 +227,5 @@ vk::PhysicalDevice ChooseByUUIDStrategy::operator()(const std::vector -Date: Fri, 9 Sep 2022 17:48:44 +0300 -Subject: [PATCH 3/4] core,ws: Allow WSI backends to request device extensions - -The backends were able to request instance extensions, support -requesting device extensions, too. ---- - src/vulkan_state.cpp | 5 ++--- - src/vulkan_wsi.h | 8 +++++++- - src/ws/kms_window_system.cpp | 2 +- - src/ws/kms_window_system.h | 2 +- - src/ws/native_system.h | 2 +- - src/ws/swapchain_window_system.cpp | 4 ++-- - src/ws/swapchain_window_system.h | 2 +- - src/ws/wayland_native_system.cpp | 2 +- - src/ws/wayland_native_system.h | 2 +- - src/ws/xcb_native_system.cpp | 2 +- - src/ws/xcb_native_system.h | 2 +- - tests/null_window_system.h | 2 +- - tests/test_window_system_plugin.cpp | 2 +- - tests/window_system_loader_test.cpp | 2 +- - 14 files changed, 22 insertions(+), 17 deletions(-) - -diff --git a/src/vulkan_state.cpp b/src/vulkan_state.cpp -index fbd789c..b1973ed 100644 ---- a/src/vulkan_state.cpp -+++ b/src/vulkan_state.cpp -@@ -87,7 +87,7 @@ void VulkanState::create_instance(VulkanWSI& vulkan_wsi) - auto const app_info = vk::ApplicationInfo{} - .setPApplicationName("vkmark"); - -- std::vector enabled_extensions{vulkan_wsi.vulkan_extensions()}; -+ std::vector enabled_extensions{vulkan_wsi.required_extensions().instance}; - enabled_extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); - - auto const create_info = vk::InstanceCreateInfo{} -@@ -159,8 +159,7 @@ void VulkanState::create_logical_device(VulkanWSI& vulkan_wsi) - Log::debug("VulkanState: Using queue family index %d for rendering\n", - graphics_queue_family_index()); - -- std::array enabled_extensions{ -- {VK_KHR_SWAPCHAIN_EXTENSION_NAME}}; -+ std::vector enabled_extensions{vulkan_wsi.required_extensions().device}; - - auto const device_features = vk::PhysicalDeviceFeatures{} - .setSamplerAnisotropy(true); -diff --git a/src/vulkan_wsi.h b/src/vulkan_wsi.h -index f8c50eb..22e87f1 100644 ---- a/src/vulkan_wsi.h -+++ b/src/vulkan_wsi.h -@@ -32,7 +32,13 @@ class VulkanWSI - public: - virtual ~VulkanWSI() = default; - -- virtual std::vector vulkan_extensions() = 0; -+ struct Extensions -+ { -+ std::vector instance; -+ std::vector device; -+ }; -+ -+ virtual Extensions required_extensions() = 0; - virtual bool is_physical_device_supported(vk::PhysicalDevice const& pd) = 0; - virtual std::vector physical_device_queue_family_indices( - vk::PhysicalDevice const& pd) = 0; -diff --git a/src/ws/kms_window_system.cpp b/src/ws/kms_window_system.cpp -index ca8220f..6132e64 100644 ---- a/src/ws/kms_window_system.cpp -+++ b/src/ws/kms_window_system.cpp -@@ -533,7 +533,7 @@ void KMSWindowSystem::wait_for_drm_page_flip_event() - } - } - --std::vector KMSWindowSystem::vulkan_extensions() -+VulkanWSI::Extensions KMSWindowSystem::required_extensions() - { - return {}; - } -diff --git a/src/ws/kms_window_system.h b/src/ws/kms_window_system.h -index 4389ef7..20a067f 100644 ---- a/src/ws/kms_window_system.h -+++ b/src/ws/kms_window_system.h -@@ -61,7 +61,7 @@ class KMSWindowSystem : public WindowSystem, public VulkanWSI - bool should_quit() override; - - // VulkanWSI -- std::vector vulkan_extensions() override; -+ Extensions required_extensions() override; - bool is_physical_device_supported(vk::PhysicalDevice const& pd) override; - std::vector physical_device_queue_family_indices( - vk::PhysicalDevice const& pd) override; -diff --git a/src/ws/native_system.h b/src/ws/native_system.h -index 076948e..cbe073a 100644 ---- a/src/ws/native_system.h -+++ b/src/ws/native_system.h -@@ -34,7 +34,7 @@ class NativeSystem - public: - virtual ~NativeSystem() = default; - -- virtual std::vector vulkan_extensions() = 0; -+ virtual std::vector instance_extensions() = 0; - virtual uint32_t get_presentation_queue_family_index(vk::PhysicalDevice const& pd) = 0; - virtual bool should_quit() = 0; - virtual vk::Extent2D get_vk_extent() = 0; -diff --git a/src/ws/swapchain_window_system.cpp b/src/ws/swapchain_window_system.cpp -index d38fa6b..9f9fba3 100644 ---- a/src/ws/swapchain_window_system.cpp -+++ b/src/ws/swapchain_window_system.cpp -@@ -251,9 +251,9 @@ ManagedResource SwapchainWindowSystem::create_vk_swapchain() - [this] (auto& s) { vulkan->device().destroySwapchainKHR(s); }}; - } - --std::vector SwapchainWindowSystem::vulkan_extensions() -+VulkanWSI::Extensions SwapchainWindowSystem::required_extensions() - { -- return native->vulkan_extensions(); -+ return {native->instance_extensions(), {VK_KHR_SWAPCHAIN_EXTENSION_NAME}}; - } - - bool SwapchainWindowSystem::is_physical_device_supported(vk::PhysicalDevice const& pd) -diff --git a/src/ws/swapchain_window_system.h b/src/ws/swapchain_window_system.h -index c3b2780..412b924 100644 ---- a/src/ws/swapchain_window_system.h -+++ b/src/ws/swapchain_window_system.h -@@ -51,7 +51,7 @@ class SwapchainWindowSystem : public WindowSystem, public VulkanWSI - bool should_quit() override; - - // VulkanWSI -- std::vector vulkan_extensions() override; -+ Extensions required_extensions() override; - bool is_physical_device_supported(vk::PhysicalDevice const& pd) override; - std::vector physical_device_queue_family_indices( - vk::PhysicalDevice const& pd) override; -diff --git a/src/ws/wayland_native_system.cpp b/src/ws/wayland_native_system.cpp -index 642d8fe..816a7b9 100644 ---- a/src/ws/wayland_native_system.cpp -+++ b/src/ws/wayland_native_system.cpp -@@ -145,7 +145,7 @@ WaylandNativeSystem::WaylandNativeSystem(int width, int height) - create_native_window(); - } - --std::vector WaylandNativeSystem::vulkan_extensions() -+std::vector WaylandNativeSystem::instance_extensions() - { - return {VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME}; - } -diff --git a/src/ws/wayland_native_system.h b/src/ws/wayland_native_system.h -index 400c358..01cdbaa 100644 ---- a/src/ws/wayland_native_system.h -+++ b/src/ws/wayland_native_system.h -@@ -35,7 +35,7 @@ class WaylandNativeSystem : public NativeSystem - public: - WaylandNativeSystem(int width, int height); - -- std::vector vulkan_extensions() override; -+ std::vector instance_extensions() override; - uint32_t get_presentation_queue_family_index(vk::PhysicalDevice const& pd) override; - bool should_quit() override; - vk::Extent2D get_vk_extent() override; -diff --git a/src/ws/xcb_native_system.cpp b/src/ws/xcb_native_system.cpp -index 59c84f0..b683772 100644 ---- a/src/ws/xcb_native_system.cpp -+++ b/src/ws/xcb_native_system.cpp -@@ -47,7 +47,7 @@ XcbNativeSystem::~XcbNativeSystem() - xcb_disconnect(connection); - } - --std::vector XcbNativeSystem::vulkan_extensions() -+std::vector XcbNativeSystem::instance_extensions() - { - return {VK_KHR_XCB_SURFACE_EXTENSION_NAME}; - } -diff --git a/src/ws/xcb_native_system.h b/src/ws/xcb_native_system.h -index 7fcc44a..dadc32f 100644 ---- a/src/ws/xcb_native_system.h -+++ b/src/ws/xcb_native_system.h -@@ -35,7 +35,7 @@ class XcbNativeSystem : public NativeSystem - XcbNativeSystem(int width, int height, xcb_visualid_t visual_id); - ~XcbNativeSystem(); - -- std::vector vulkan_extensions() override; -+ std::vector instance_extensions() override; - uint32_t get_presentation_queue_family_index(vk::PhysicalDevice const& pd) override; - bool should_quit() override; - vk::Extent2D get_vk_extent() override; -diff --git a/tests/null_window_system.h b/tests/null_window_system.h -index bc01276..b7cc9ba 100644 ---- a/tests/null_window_system.h -+++ b/tests/null_window_system.h -@@ -39,7 +39,7 @@ class NullWindowSystem : public WindowSystem, public VulkanWSI - - bool should_quit() override { return false; } - -- std::vector vulkan_extensions() override { return {}; } -+ Extensions required_extensions() override { return {}; } - bool is_physical_device_supported(vk::PhysicalDevice const&) override { return true; } - std::vector physical_device_queue_family_indices( - vk::PhysicalDevice const&) override -diff --git a/tests/test_window_system_plugin.cpp b/tests/test_window_system_plugin.cpp -index 7877c8e..a562958 100644 ---- a/tests/test_window_system_plugin.cpp -+++ b/tests/test_window_system_plugin.cpp -@@ -32,7 +32,7 @@ class TestWindowSystem : public NullWindowSystem - { - public: - TestWindowSystem(std::string const& id) : id{id} {} -- std::vector vulkan_extensions() override { return {id.c_str()}; } -+ Extensions required_extensions() override { return {{id.c_str()}, {}}; } - - private: - std::string const id; -diff --git a/tests/window_system_loader_test.cpp b/tests/window_system_loader_test.cpp -index 8aed335..c458e61 100644 ---- a/tests/window_system_loader_test.cpp -+++ b/tests/window_system_loader_test.cpp -@@ -84,7 +84,7 @@ class TestWindowSystems - - int window_system_id(WindowSystem& ws) - { -- return std::stoi(ws.vulkan_wsi().vulkan_extensions()[0]); -+ return std::stoi(ws.vulkan_wsi().required_extensions().instance[0]); - } - - } - -From dd75130a7ddf747eb7fd755946e84baf98a6e05f Mon Sep 17 00:00:00 2001 -From: Alexandros Frantzis -Date: Fri, 9 Sep 2022 16:23:40 +0300 -Subject: [PATCH 4/4] kms: Use VK_EXT_external_memory_dmabuf to create - dmabuf-backed Vulkan images - -Drop the vkCreateDmaBufImageINTEL extension function and use the -functionality provided by the official VK_EXT_external_memory_dmabuf -extension to create dmabuf-backed Vulkan images. - -Fixes #33 - -Co-authored-by: Jeffy Chen ---- - meson.build | 7 +- - src/ws/kms_window_system.cpp | 132 +++++++++++++++++++++++------------ - 2 files changed, 89 insertions(+), 50 deletions(-) - -diff --git a/meson.build b/meson.build -index 7d305dc..0d83918 100644 ---- a/meson.build -+++ b/meson.build -@@ -32,16 +32,11 @@ wayland_protocols_dep = dependency('wayland-protocols', version : '>= 1.12', - wayland_scanner_dep = dependency('wayland-scanner', required : get_option('wayland') == 'true') - libdrm_dep = dependency('libdrm', required : get_option('kms') == 'true') - gbm_dep = dependency('gbm', required : get_option('kms') == 'true') --has_vulkan_intel_header = cpp.has_header('vulkan/vulkan_intel.h', dependencies: vulkan_dep) -- --if get_option('kms') == 'true' and not has_vulkan_intel_header -- error('KMS plugin needs the vulkan_intel.h header, but it couldn\'t be found') --endif - - build_xcb_ws = xcb_dep.found() and xcb_icccm_dep.found() and get_option('xcb') != 'false' - build_wayland_ws = (wayland_client_dep.found() and wayland_protocols_dep.found() and - wayland_scanner_dep.found() and get_option('wayland') != 'false') --build_kms_ws = libdrm_dep.found() and gbm_dep.found() and has_vulkan_intel_header and get_option('kms') != 'false' -+build_kms_ws = libdrm_dep.found() and gbm_dep.found() and get_option('kms') != 'false' - - if not build_xcb_ws and not build_wayland_ws and not build_kms_ws - error('vkmark needs at least one winsys to work - xcb, wayland or kms') -diff --git a/src/ws/kms_window_system.cpp b/src/ws/kms_window_system.cpp -index 6132e64..fc02eae 100644 ---- a/src/ws/kms_window_system.cpp -+++ b/src/ws/kms_window_system.cpp -@@ -29,8 +29,8 @@ - - #include - #include --#include - -+#include - #include - #include - #include -@@ -270,6 +270,24 @@ void restore_vt(int) - global_vt_state->restore(); - } - -+uint32_t find_memory_type_index(vk::PhysicalDevice const& physical_device, -+ vk::MemoryRequirements const& requirements, -+ vk::MemoryPropertyFlags flags) -+{ -+ auto const properties = physical_device.getMemoryProperties(); -+ -+ for (uint32_t i = 0; i < properties.memoryTypeCount; i++) -+ { -+ if ((requirements.memoryTypeBits & (1 << i)) && -+ (properties.memoryTypes[i].propertyFlags & flags) == flags) -+ { -+ return i; -+ } -+ } -+ -+ throw std::runtime_error{"Coudn't find matching memory type"}; -+} -+ - } - - VTState::VTState() -@@ -433,14 +451,20 @@ void KMSWindowSystem::create_drm_fbs() - for (auto const& gbm_bo : gbm_bos) - { - uint32_t fb = 0; -+ uint32_t handles[4] = {0}; -+ uint32_t strides[4] = {0}; -+ uint32_t offsets[4] = {0}; - -- uint32_t handles[4] = {gbm_bo_get_handle(gbm_bo).u32, 0, 0, 0}; -- uint32_t strides[4] = {gbm_bo_get_stride(gbm_bo), 0, 0, 0}; -- uint32_t offsets[4] = {0, 0, 0, 0}; -+ for (auto i = 0; i < gbm_bo_get_plane_count(gbm_bo); i++) -+ { -+ handles[i] = gbm_bo_get_handle_for_plane(gbm_bo, i).u32; -+ offsets[i] = gbm_bo_get_offset(gbm_bo, i); -+ strides[i] = gbm_bo_get_stride_for_plane(gbm_bo, i); -+ } - - auto const ret = drmModeAddFB2( - drm_fd, vk_extent.width, vk_extent.height, -- DRM_FORMAT_XRGB8888, -+ gbm_bo_get_format(gbm_bo), - handles, strides, offsets, &fb, 0); - - if (ret < 0) -@@ -453,52 +477,65 @@ void KMSWindowSystem::create_drm_fbs() - } - } - --// TODO: Use an official extension to create the VkImages when it becomes --// available (e.g. VK_MESAX_external_image_dma_buf) - void KMSWindowSystem::create_vk_images() - { -- auto const create_dma_buf_image = -- reinterpret_cast( -- vulkan->device().getProcAddr("vkCreateDmaBufImageINTEL")); -- -- if (!create_dma_buf_image) -- throw std::runtime_error{"Failed to get vkCreateDmaBufImageINTEL function pointer"}; -- - for (auto const& gbm_bo : gbm_bos) - { - auto const fd = ManagedResource{gbm_bo_get_fd(gbm_bo), close}; -- auto const stride = gbm_bo_get_stride(gbm_bo); -- -- VkDmaBufImageCreateInfo create_info{}; -- create_info.sType = static_cast(VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL); -- create_info.fd = fd; -- create_info.format = static_cast(vk_image_format); -- create_info.extent = {vk_extent.width, vk_extent.height, 1}; -- create_info.strideInBytes = stride; -- -- VkImage image; -- VkDeviceMemory device_memory; -- -- VkResult result = create_dma_buf_image( -- vulkan->device(), -- &create_info, -- nullptr, -- &device_memory, -- &image); -- -- if (result != VK_SUCCESS) -- { -- vk::throwResultException(static_cast(result), -- "vkCreateDmbBufImageINTEL"); -- } -+ uint64_t modifier = gbm_bo_get_modifier(gbm_bo); -+ -+ auto const modifier_info = vk::ImageDrmFormatModifierListCreateInfoEXT{} -+ .setDrmFormatModifierCount(1) -+ .setPDrmFormatModifiers(&modifier); -+ auto const external_memory_create_info = vk::ExternalMemoryImageCreateInfoKHR{} -+ .setHandleTypes(vk::ExternalMemoryHandleTypeFlagBitsKHR::eDmaBufEXT) -+ .setPNext(&modifier_info); -+ auto const image_create_info = vk::ImageCreateInfo{} -+ .setPNext(&external_memory_create_info) -+ .setImageType(vk::ImageType::e2D) -+ .setFormat(vk_image_format) -+ .setExtent({vk_extent.width, vk_extent.height, 1}) -+ .setMipLevels(1) -+ .setArrayLayers(1) -+ .setSamples(vk::SampleCountFlagBits::e1) -+ .setTiling(vk::ImageTiling::eDrmFormatModifierEXT) -+ .setUsage(vk::ImageUsageFlagBits::eColorAttachment) -+ .setSharingMode(vk::SharingMode::eExclusive) -+ .setInitialLayout(vk::ImageLayout::eUndefined); -+ -+ auto vk_image = ManagedResource{ -+ vulkan->device().createImage(image_create_info), -+ [vptr=vulkan] (auto const& i) { vptr->device().destroyImage(i); }}; -+ -+ auto const requirements = vulkan->device().getImageMemoryRequirements(vk_image); -+ uint32_t index = find_memory_type_index(vulkan->physical_device(), -+ requirements, -+ vk::MemoryPropertyFlagBits::eDeviceLocal); -+ -+ auto const import_memory_fd_info = vk::ImportMemoryFdInfoKHR{} -+ .setHandleType(vk::ExternalMemoryHandleTypeFlagBitsKHR::eDmaBufEXT) -+ .setFd(fd); -+ auto const dedicated_allocate_info = vk::MemoryDedicatedAllocateInfoKHR{} -+ .setPNext(&import_memory_fd_info) -+ .setImage(vk_image); -+ auto const memory_allocate_info = vk::MemoryAllocateInfo{} -+ .setPNext(&dedicated_allocate_info) -+ .setAllocationSize(requirements.size) -+ .setMemoryTypeIndex((uint32_t)index); -+ -+ auto device_memory = ManagedResource{ -+ vulkan->device().allocateMemory(memory_allocate_info), -+ [vptr=vulkan] (auto const& m) { vptr->device().freeMemory(m); }}; -+ -+ vulkan->device().bindImageMemory(vk_image, device_memory, 0); - - vk_images.push_back( - ManagedResource{ -- vk::Image{image}, -- [vptr=vulkan, device_memory] (auto& image) -+ vk_image.steal(), -+ [vptr=vulkan, mem=device_memory.steal()] (auto const& image) - { - vptr->device().destroyImage(image); -- vptr->device().freeMemory(device_memory); -+ vptr->device().freeMemory(mem); - }}); - } - } -@@ -535,12 +572,19 @@ void KMSWindowSystem::wait_for_drm_page_flip_event() - - VulkanWSI::Extensions KMSWindowSystem::required_extensions() - { -- return {}; -+ return {{}, {VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME}}; - } - --bool KMSWindowSystem::is_physical_device_supported(vk::PhysicalDevice const&) -+bool KMSWindowSystem::is_physical_device_supported(vk::PhysicalDevice const& physdev) - { -- return true; -+ auto const props = physdev.enumerateDeviceExtensionProperties(); -+ auto const iter = std::find_if( -+ props.begin(), props.end(), -+ [](vk::ExtensionProperties prop) -+ { -+ return std::string{VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME} == prop.extensionName; -+ }); -+ return iter != props.end(); - } - - std::vector KMSWindowSystem::physical_device_queue_family_indices( diff --git a/packages/lang/lua52/config/lua52.pc b/packages/lang/lua52/config/lua52.pc deleted file mode 100644 index 6645003e6..000000000 --- a/packages/lang/lua52/config/lua52.pc +++ /dev/null @@ -1,10 +0,0 @@ -prefix=/usr -libdir=${prefix}/lib -includedir=${prefix}/include/lua@@VERSION_MM@@ - -Name: Lua -Description: An Extensible Extension Language -Version: @@VERSION@@ -Requires: -Libs: -L${libdir} -llua@@VERSION_MM@@ -lm -Cflags: -I${includedir} diff --git a/packages/lang/lua52/package.mk b/packages/lang/lua52/package.mk deleted file mode 100644 index 6d3c6ac66..000000000 --- a/packages/lang/lua52/package.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="lua52" -PKG_VERSION="5.2.4" -PKG_SHA256="b9e2e4aad6789b3b63a056d442f7b39f0ecfca3ae0f1fc0ae4e9614401b69f4b" -PKG_LICENSE="MIT" -PKG_SITE="https://www.lua.org" -PKG_URL="http://www.lua.org/ftp/lua-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Lua is a powerful, efficient, lightweight, embeddable scripting language." - -make_target() { - make CC=${CC} AR="${AR} rcu" posix -} - -makeinstall_target() { - mkdir -p ${SYSROOT_PREFIX}/usr/include/lua$(get_pkg_version_maj_min) - cp src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h ${SYSROOT_PREFIX}/usr/include/lua$(get_pkg_version_maj_min) - - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp src/liblua.a ${SYSROOT_PREFIX}/usr/lib/liblua$(get_pkg_version_maj_min).a - - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cp ${PKG_DIR}/config/lua52.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig - sed -e "s/@@VERSION@@/${PKG_VERSION}/g" \ - -e "s/@@VERSION_MM@@/$(get_pkg_version_maj_min)/g" \ - -i ${SYSROOT_PREFIX}/usr/lib/pkgconfig/lua52.pc -} diff --git a/packages/multimedia/bento4/package.mk b/packages/multimedia/bento4/package.mk deleted file mode 100644 index 1cf85f599..000000000 --- a/packages/multimedia/bento4/package.mk +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="bento4" -PKG_VERSION="1.6.0-639-8-Omega" -PKG_LICENSE="GPL" -PKG_SITE="https://www.bento4.com" -PKG_URL="https://github.com/xbmc/Bento4/archive/refs/tags/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_DEPENDS_UNPACK="inputstream.adaptive" -PKG_LONGDESC="C++ class library and tools designed to read and write ISO-MP4 files" -PKG_BUILD_FLAGS="+pic" - -PKG_CMAKE_OPTS_TARGET="-DBUILD_APPS=OFF" diff --git a/packages/multimedia/intel-vaapi-driver/package.mk b/packages/multimedia/intel-vaapi-driver/package.mk deleted file mode 100644 index 290bc07dd..000000000 --- a/packages/multimedia/intel-vaapi-driver/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="intel-vaapi-driver" -PKG_VERSION="2.4.1" -PKG_SHA256="03cd7e16acc94f828b6e7f3087863d8ca06e99ffa3385588005b1984bdd56157" -PKG_ARCH="x86_64" -PKG_LICENSE="GPL" -PKG_SITE="https://01.org/linuxmedia" -PKG_URL="https://github.com/intel/intel-vaapi-driver/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libva libdrm" -PKG_LONGDESC="intel-vaapi-driver: VA-API user mode driver for Intel GEN Graphics family" - -if [ "${DISPLAYSERVER}" = "x11" ]; then - DISPLAYSERVER_LIBVA="-Dwith_x11=yes -Dwith_wayland=no" -elif [ "${DISPLAYSERVER}" = "wl" ]; then - DISPLAYSERVER_LIBVA="-Dwith_x11=no -Dwith_wayland=yes" -else - DISPLAYSERVER_LIBVA="-Dwith_x11=no -Dwith_wayland=no" -fi - -PKG_MESON_OPTS_TARGET="-Denable_hybrid_codec=false \ - -Denable_tests=false \ - ${DISPLAYSERVER_LIBVA}" - diff --git a/packages/multimedia/intel-vaapi-driver/patches/0001-intel-vaapi-driver-2.4.1-Handle-odd-resolution.patch b/packages/multimedia/intel-vaapi-driver/patches/0001-intel-vaapi-driver-2.4.1-Handle-odd-resolution.patch deleted file mode 100644 index 09ab007bb..000000000 --- a/packages/multimedia/intel-vaapi-driver/patches/0001-intel-vaapi-driver-2.4.1-Handle-odd-resolution.patch +++ /dev/null @@ -1,288 +0,0 @@ -From d87db2111a33b157d1913415f15d201cc5182850 Mon Sep 17 00:00:00 2001 -From: Haihao Xiang -Date: Wed, 12 Aug 2020 14:24:55 +0800 -Subject: [PATCH] Handle odd resolution - -This fixes https://github.com/intel/intel-vaapi-driver/issues/516 - -Signed-off-by: Haihao Xiang ---- - src/gen8_post_processing.c | 24 +++++++++---------- - src/gen9_post_processing.c | 24 +++++++++---------- - src/i965_drv_video.c | 48 +++++++++++++++++++------------------- - 3 files changed, 48 insertions(+), 48 deletions(-) - -diff --git a/src/gen8_post_processing.c b/src/gen8_post_processing.c -index abddcd078..2163300ac 100644 ---- a/src/gen8_post_processing.c -+++ b/src/gen8_post_processing.c -@@ -1909,17 +1909,17 @@ gen8_pp_context_get_surface_conf(VADriverContextP ctx, - fourcc == VA_FOURCC_BGRA) { - /* nothing to do here */ - } else if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_surface->cb_cr_pitch; - bo_offset[1] = obj_surface->width * obj_surface->y_cb_offset; - } else { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_surface->cb_cr_pitch; - bo_offset[1] = obj_surface->width * obj_surface->y_cb_offset; -- width[2] = width[0] / 2; -- height[2] = height[0] / 2; -+ width[2] = ALIGN(width[0], 2) / 2; -+ height[2] = ALIGN(height[0], 2) / 2; - pitch[2] = obj_surface->cb_cr_pitch; - bo_offset[2] = obj_surface->width * obj_surface->y_cr_offset; - } -@@ -1940,8 +1940,8 @@ gen8_pp_context_get_surface_conf(VADriverContextP ctx, - fourcc == VA_FOURCC_BGRA) { - /* nothing to do here */ - } else if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_image->image.pitches[1]; - bo_offset[1] = obj_image->image.offsets[1]; - } else { -@@ -1950,12 +1950,12 @@ gen8_pp_context_get_surface_conf(VADriverContextP ctx, - if (fourcc == VA_FOURCC_YV12 || fourcc == VA_FOURCC_IMC1) - u = 2, v = 1; - -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_image->image.pitches[u]; - bo_offset[1] = obj_image->image.offsets[u]; -- width[2] = width[0] / 2; -- height[2] = height[0] / 2; -+ width[2] = ALIGN(width[0], 2) / 2; -+ height[2] = ALIGN(height[0], 2) / 2; - pitch[2] = obj_image->image.pitches[v]; - bo_offset[2] = obj_image->image.offsets[v]; - } -diff --git a/src/gen9_post_processing.c b/src/gen9_post_processing.c -index eede36f7f..da36f2abc 100644 ---- a/src/gen9_post_processing.c -+++ b/src/gen9_post_processing.c -@@ -731,19 +731,19 @@ gen9_pp_context_get_surface_conf(VADriverContextP ctx, - fourcc == VA_FOURCC_BGRA) { - /* nothing to do here */ - } else if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_surface->cb_cr_pitch; - bo_offset[1] = obj_surface->width * obj_surface->y_cb_offset; - } else if (fourcc == VA_FOURCC_YUY2 || fourcc == VA_FOURCC_UYVY) { - /* nothing to do here */ - } else { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_surface->cb_cr_pitch; - bo_offset[1] = obj_surface->width * obj_surface->y_cb_offset; -- width[2] = width[0] / 2; -- height[2] = height[0] / 2; -+ width[2] = ALIGN(width[0], 2) / 2; -+ height[2] = ALIGN(height[0], 2) / 2; - pitch[2] = obj_surface->cb_cr_pitch; - bo_offset[2] = obj_surface->width * obj_surface->y_cr_offset; - } -@@ -764,8 +764,8 @@ gen9_pp_context_get_surface_conf(VADriverContextP ctx, - fourcc == VA_FOURCC_BGRA) { - /* nothing to do here */ - } else if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) { -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_image->image.pitches[1]; - bo_offset[1] = obj_image->image.offsets[1]; - } else if (fourcc == VA_FOURCC_YUY2 || fourcc == VA_FOURCC_UYVY) { -@@ -776,12 +776,12 @@ gen9_pp_context_get_surface_conf(VADriverContextP ctx, - if (fourcc == VA_FOURCC_YV12 || fourcc == VA_FOURCC_IMC1) - u = 2, v = 1; - -- width[1] = width[0] / 2; -- height[1] = height[0] / 2; -+ width[1] = ALIGN(width[0], 2) / 2; -+ height[1] = ALIGN(height[0], 2) / 2; - pitch[1] = obj_image->image.pitches[u]; - bo_offset[1] = obj_image->image.offsets[u]; -- width[2] = width[0] / 2; -- height[2] = height[0] / 2; -+ width[2] = ALIGN(width[0], 2) / 2; -+ height[2] = ALIGN(height[0], 2) / 2; - pitch[2] = obj_image->image.pitches[v]; - bo_offset[2] = obj_image->image.offsets[v]; - } -diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c -index ff163887e..80278bb70 100644 ---- a/src/i965_drv_video.c -+++ b/src/i965_drv_video.c -@@ -1725,8 +1725,8 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->subsampling = SUBSAMPLE_YUV420; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->height; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - if (tiling) - ASSERT_RET(IS_ALIGNED(obj_surface->cb_cr_pitch, 128), VA_STATUS_ERROR_INVALID_PARAMETER); -@@ -1743,8 +1743,8 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->subsampling = SUBSAMPLE_YUV420; - obj_surface->y_cr_offset = obj_surface->height; - obj_surface->y_cb_offset = memory_attibute->offsets[2] / obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - - if (tiling) -@@ -1764,8 +1764,8 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->subsampling = SUBSAMPLE_YUV420; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - if (tiling) - ASSERT_RET(IS_ALIGNED(obj_surface->cb_cr_pitch, 128), VA_STATUS_ERROR_INVALID_PARAMETER); -@@ -1837,7 +1837,7 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->subsampling = SUBSAMPLE_YUV422H; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->cb_cr_height = obj_surface->orig_height; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - if (tiling) -@@ -1854,7 +1854,7 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->subsampling = SUBSAMPLE_YUV422H; - obj_surface->y_cr_offset = memory_attibute->offsets[1] / obj_surface->width; - obj_surface->y_cb_offset = memory_attibute->offsets[2] / obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->cb_cr_height = obj_surface->orig_height; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - ASSERT_RET(IS_ALIGNED(obj_surface->cb_cr_pitch, i965->codec_info->min_linear_wpitch), VA_STATUS_ERROR_INVALID_PARAMETER); -@@ -1869,7 +1869,7 @@ i965_suface_external_memory(VADriverContextP ctx, - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = memory_attibute->offsets[2] / obj_surface->width; - obj_surface->cb_cr_width = obj_surface->orig_width; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = memory_attibute->pitches[1]; - if (tiling) - ASSERT_RET(IS_ALIGNED(obj_surface->cb_cr_pitch, 128), VA_STATUS_ERROR_INVALID_PARAMETER); -@@ -4526,8 +4526,8 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_P010: - assert(subsampling == SUBSAMPLE_YUV420); - obj_surface->cb_cr_pitch = obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->height; - region_width = obj_surface->width; -@@ -4538,8 +4538,8 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_IMC1: - assert(subsampling == SUBSAMPLE_YUV420); - obj_surface->cb_cr_pitch = obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->y_cr_offset = obj_surface->height; - obj_surface->y_cb_offset = obj_surface->y_cr_offset + ALIGN(obj_surface->cb_cr_height, 32); - region_width = obj_surface->width; -@@ -4550,8 +4550,8 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_IMC3: - assert(subsampling == SUBSAMPLE_YUV420); - obj_surface->cb_cr_pitch = obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); - region_width = obj_surface->width; -@@ -4562,7 +4562,7 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_422H: - assert(subsampling == SUBSAMPLE_YUV422H); - obj_surface->cb_cr_pitch = obj_surface->width; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->cb_cr_height = obj_surface->orig_height; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); -@@ -4575,7 +4575,7 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - assert(subsampling == SUBSAMPLE_YUV422V); - obj_surface->cb_cr_pitch = obj_surface->width; - obj_surface->cb_cr_width = obj_surface->orig_width; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->y_cb_offset + ALIGN(obj_surface->cb_cr_height, 32); - region_width = obj_surface->width; -@@ -4663,17 +4663,17 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_P010: - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->height; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->width = ALIGN(obj_surface->cb_cr_width * 2, i965->codec_info->min_linear_wpitch) * - bpp_1stplane; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = obj_surface->width; - region_width = obj_surface->width; - region_height = obj_surface->height + obj_surface->height / 2; - break; - - case VA_FOURCC_YV16: -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->width = ALIGN(obj_surface->cb_cr_width, i965->codec_info->min_linear_wpitch) * 2; - obj_surface->cb_cr_height = obj_surface->orig_height; - obj_surface->y_cr_offset = obj_surface->height; -@@ -4694,9 +4694,9 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - obj_surface->y_cr_offset = obj_surface->height + obj_surface->height / 4; - } - -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->width = ALIGN(obj_surface->cb_cr_width, i965->codec_info->min_linear_wpitch) * 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_height = ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = obj_surface->width / 2; - region_width = obj_surface->width; - region_height = obj_surface->height + obj_surface->height / 2; -@@ -4705,9 +4705,9 @@ i965_check_alloc_surface_bo(VADriverContextP ctx, - case VA_FOURCC_I010: - obj_surface->y_cb_offset = obj_surface->height; - obj_surface->y_cr_offset = obj_surface->height + obj_surface->height / 4; -- obj_surface->cb_cr_width = obj_surface->orig_width / 2; -+ obj_surface->cb_cr_width = ALIGN(obj_surface->orig_width, 2) / 2; - obj_surface->width = ALIGN(obj_surface->cb_cr_width * 2, i965->codec_info->min_linear_wpitch) * 2; -- obj_surface->cb_cr_height = obj_surface->orig_height / 2; -+ obj_surface->cb_cr_height =ALIGN(obj_surface->orig_height, 2) / 2; - obj_surface->cb_cr_pitch = obj_surface->width / 2; - region_width = obj_surface->width; - region_height = obj_surface->height + obj_surface->height / 2; diff --git a/packages/multimedia/libbluray/package.mk b/packages/multimedia/libbluray/package.mk deleted file mode 100644 index 3ca48d4c7..000000000 --- a/packages/multimedia/libbluray/package.mk +++ /dev/null @@ -1,44 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libbluray" -PKG_VERSION="1.3.4" -PKG_LICENSE="LGPL" -PKG_SITE="https://www.videolan.org/developers/libbluray.html" -PKG_URL="http://download.videolan.org/pub/videolan/libbluray/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain fontconfig freetype libxml2 libudfread" -PKG_LONGDESC="libbluray is an open-source library designed for Blu-Ray Discs playback for media players." -PKG_TOOLCHAIN="autotools" - -if [ "${BLURAY_AACS_SUPPORT}" = "yes" ]; then - PKG_DEPENDS_TARGET+=" libaacs" -fi - -if [ "${BLURAY_BDPLUS_SUPPORT}" = "yes" ]; then - PKG_DEPENDS_TARGET+=" libbdplus" -fi - -PKG_CONFIGURE_OPTS_TARGET="--disable-werror \ - --disable-extra-warnings \ - --disable-optimizations \ - --disable-examples \ - --disable-bdjava-jar \ - --disable-doxygen-doc \ - --disable-doxygen-dot \ - --disable-doxygen-man \ - --disable-doxygen-rtf \ - --disable-doxygen-xml \ - --disable-doxygen-chm \ - --disable-doxygen-chi \ - --disable-doxygen-html \ - --disable-doxygen-ps \ - --disable-doxygen-pdf \ - --with-freetype \ - --with-fontconfig \ - --with-libxml2 \ - --with-gnu-ld" - -post_configure_target() { - libtool_remove_rpath libtool -} diff --git a/packages/multimedia/libbluray/patches/libbluray-00-fix-build-with-autoconf-archive-2016-or-later.patch b/packages/multimedia/libbluray/patches/libbluray-00-fix-build-with-autoconf-archive-2016-or-later.patch deleted file mode 100644 index 6bed54d3d..000000000 --- a/packages/multimedia/libbluray/patches/libbluray-00-fix-build-with-autoconf-archive-2016-or-later.patch +++ /dev/null @@ -1,25 +0,0 @@ -From bc746413e07c504535873cf860a8f2c38862896e Mon Sep 17 00:00:00 2001 -From: MilhouseVH -Date: Thu, 1 Feb 2018 08:15:27 +0000 -Subject: [PATCH] Fix build failure with recent ax_prog_doxygen.m4 - -Recent autotool-archives doxygen macros breaks the current build, -so this patch updates to the method of the latest autoconf-archive version. - -The required autoconf-archive macro has been committed to their repository -in November 2015, so anything later should work. - -Ref: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837020 ---- - Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,4 +1,5 @@ --include $(top_srcdir)/doxygen-include.am -+# include Doxygen rules (requires autoconf-archive >2016-03-20) -+@DX_RULES@ - - ACLOCAL_AMFLAGS = -I m4 - diff --git a/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairiel_vL20170904.patch b/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairiel_vL20170904.patch deleted file mode 100644 index 2111faef5..000000000 --- a/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairiel_vL20170904.patch +++ /dev/null @@ -1,2247 +0,0 @@ -diff --git a/Makefile.am b/Makefile.am -index 04365fd..ff15527 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,10 +1,15 @@ - include $(top_srcdir)/doxygen-include.am - - ACLOCAL_AMFLAGS = -I m4 -+DISTCHECK_CONFIGURE_FLAGS = --enable-bdjava --enable-udf - - MOSTLYCLEANFILES = $(DX_CLEANFILES) - -+if ENABLE_UDF - POSIX_C_SOURCE=200809L -+else -+POSIX_C_SOURCE=200112L -+endif - - EXTRA_DIST = \ - bootstrap \ -@@ -35,7 +40,7 @@ libbluray_la_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - -I$(top_builddir)/src/libbluray \ - $(BDJAVA_CFLAGS) \ -- -I${top_srcdir}/contrib/libudfread/src/ \ -+ $(UDF_CFLAGS) \ - $(LIBXML2_CFLAGS) \ - $(FT2_CFLAGS) \ - $(FONTCONFIG_CFLAGS) -@@ -166,6 +171,7 @@ libbluray_la_SOURCES += \ - src/libbluray/bdj/native/util.c - - # libudfread -+if ENABLE_UDF - libbluray_la_SOURCES += \ - src/libbluray/disc/udf_fs.h \ - src/libbluray/disc/udf_fs.c\ -@@ -177,6 +183,7 @@ libbluray_la_SOURCES += \ - contrib/libudfread/src/ecma167.c \ - contrib/libudfread/src/udfread.h \ - contrib/libudfread/src/udfread.c -+endif - - if HAVE_DARWIN - libbluray_la_SOURCES+= \ -@@ -223,7 +230,7 @@ pkginclude_HEADERS = \ - src/libbluray/decoders/overlay.h \ - src/util/log_control.h - -- -+if USING_BDJAVA - if USING_BDJAVA_BUILD_JAR - jardir=$(datadir)/java/ - jar_DATA=$(top_builddir)/.libs/libbluray-$(BDJ_TYPE)-$(VERSION).jar -@@ -245,6 +252,7 @@ clean-local: - -Dversion='$(BDJ_TYPE)-$(VERSION)' \ - clean - endif -+endif - - pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = src/libbluray.pc -@@ -257,7 +265,6 @@ pkgconfig_DATA = src/libbluray.pc - if USING_EXAMPLES - - noinst_PROGRAMS = \ -- bdj_test \ - bdjo_dump \ - bdsplice \ - clpi_dump \ -@@ -269,6 +276,11 @@ noinst_PROGRAMS = \ - mpls_dump \ - sound_dump - -+if USING_BDJAVA -+noinst_PROGRAMS += \ -+ bdj_test -+endif -+ - bin_PROGRAMS = \ - bd_info - -diff --git a/configure.ac b/configure.ac -index 5fd3c8d..15f53ca 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -81,6 +81,16 @@ AC_ARG_ENABLE([examples], - [use_examples=$enableval], - [use_examples=yes]) - -+AC_ARG_ENABLE([bdjava], -+ [AS_HELP_STRING([--disable-bdjava], [disable BD-Java support @<:@default=enabled@:>@])], -+ [use_bdjava=$enableval], -+ [use_bdjava=yes]) -+ -+AC_ARG_ENABLE([udf], -+ [AS_HELP_STRING([--disable-udf], [disable UDF support @<:@default=enabled@:>@])], -+ [enable_udf=$enableval], -+ [enable_udf=yes]) -+ - AC_ARG_ENABLE([bdjava-jar], - [AS_HELP_STRING([--disable-bdjava-jar], - [disable building of BD-Java JAR file @<:@default=enabled@:>@])], -@@ -196,23 +206,24 @@ dnl use examples - AM_CONDITIONAL([USING_EXAMPLES], [ test $use_examples = "yes" ]) - - dnl use bdjava --case $host_cpu in -- x86_64) java_arch=amd64 ;; -- i?86) java_arch=i386 ;; -- arm*) java_arch=arm ;; -- *) java_arch=$host_cpu ;; --esac --case $host_os in -- linux*) java_os=linux ;; -- win*) java_os=win32 ;; -- mingw*) java_os=win32 ;; -- freebsd*) java_os=freebsd ;; -- solaris*) java_os=solaris ;; -- darwin*) java_os=darwin ;; -- *) java_os=$host_os ;; --esac -- --AS_IF([test "x${JDK_HOME}" != "x"], [ -+if [[ $use_bdjava = "yes" ]]; then -+ case $host_cpu in -+ x86_64) java_arch=amd64 ;; -+ i?86) java_arch=i386 ;; -+ arm*) java_arch=arm ;; -+ *) java_arch=$host_cpu ;; -+ esac -+ case $host_os in -+ linux*) java_os=linux ;; -+ win*) java_os=win32 ;; -+ mingw*) java_os=win32 ;; -+ freebsd*) java_os=freebsd ;; -+ solaris*) java_os=solaris ;; -+ darwin*) java_os=darwin ;; -+ *) java_os=$host_os ;; -+ esac -+ -+ AS_IF([test "x${JDK_HOME}" != "x"], [ - BDJAVA_CFLAGS="-I${JDK_HOME}/include -I${JDK_HOME}/include/$java_os" - - temp_CPPFLAGS="$CPPFLAGS" -@@ -223,13 +234,16 @@ AS_IF([test "x${JDK_HOME}" != "x"], [ - BDJAVA_CFLAGS='-I${abs_top_srcdir}/jni -I${abs_top_srcdir}/jni/'"${java_os}" - ]) - --AC_CHECK_PROG(HAVE_ANT, [ant], yes, no) --if test "x$use_bdjava_jar" = "xyes" && test "x$HAVE_ANT" = "xno"; then -- AC_MSG_ERROR([BD-J requires ANT, but ant was not found. Please install it.]) --fi -+ AC_CHECK_PROG(HAVE_ANT, [ant], yes, no) -+ if test "x$use_bdjava_jar" = "xyes" && test "x$HAVE_ANT" = "xno"; then -+ AC_MSG_ERROR([BD-J requires ANT, but ant was not found. Please install it.]) -+ fi - --AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$java_arch"], ["Defines the architecture of the java vm."]) --AC_DEFINE_UNQUOTED([JDK_HOME], ["$JDK_HOME"], [""]) -+ AC_DEFINE([USING_BDJAVA], [1], ["Define to 1 if using BD-Java"]) -+ AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$java_arch"], ["Defines the architecture of the java vm."]) -+ AC_DEFINE_UNQUOTED([JDK_HOME], ["$JDK_HOME"], [""]) -+fi -+AM_CONDITIONAL([USING_BDJAVA], [ test $use_bdjava = "yes" ]) - AM_CONDITIONAL([USING_BDJAVA_BUILD_JAR], [ test $use_bdjava_jar = "yes" ]) - - dnl BD-J type -@@ -243,13 +257,22 @@ dnl bootclasspath - AC_SUBST(BDJ_BOOTCLASSPATH) - - dnl udf support (using git submodule) --if test ! -f "${srcdir}/contrib/libudfread/src/udfread.h"; then -- AC_MSG_ERROR("libudfread source tree not found") --fi --AC_CHECK_HEADERS([unistd.h fcntl.h]) --AS_IF([test "${SYS}" != "mingw32"], [ -- AC_CHECK_FUNC([pread],, [AC_DEFINE([NEED_PREAD_IMPL], [1], [Define to 1 to use inefficient pread() replacement])]) --]) -+AS_IF([test "x$enable_udf" = "xyes"], [ -+ if test ! -f "${srcdir}/contrib/libudfread/src/udfread.h"; then -+ AC_MSG_ERROR("libudfread source tree not found") -+ fi -+ AC_CHECK_HEADERS([unistd.h fcntl.h]) -+ AS_IF([test "${SYS}" != "mingw32"], [ -+ AC_CHECK_FUNC([pread],, [AC_MSG_ERROR("Function pread not found. Try with --disable-udf.")]) -+ ]) -+ -+ AC_DEFINE([ENABLE_UDF], [1], [Define to 1 if libudfread is to be used for disc image access]) -+ UDF_CFLAGS='-I${srcdir}/contrib/libudfread/src/' -+ AC_SUBST(UDF_CFLAGS) -+ ], -+ [enable_udf=no]) -+ -+AM_CONDITIONAL([ENABLE_UDF], [test $enable_udf = "yes" ]) - - dnl generate documentation - DX_INIT_DOXYGEN(libbluray, doc/doxygen-config, [doc/doxygen]) -@@ -279,19 +302,25 @@ dnl --------------------------------------------- - - echo " Summary:" - echo " --------" -+echo " BD-J support: $use_bdjava" -+if [[ $use_bdjava = "yes" ]]; then - echo " BD-J type: $BDJ_TYPE" - echo " build JAR: $use_bdjava_jar" - if test x"$BDJ_BOOTCLASSPATH" != x""; then - echo " BD-J bootclasspath: $BDJ_BOOTCLASSPATH" - fi -+fi - echo " Font support (freetype2): $with_freetype" - if [[ $with_freetype = "yes" ]]; then -+if [[ $use_bdjava = "yes" ]]; then - if test "${SYS}" != "mingw32"; then - echo " Use system fonts (fontconfig): $with_fontconfig" - else - echo " Use system fonts: yes" - fi - fi -+fi - echo " Metadata support (libxml2): $with_libxml2" -+echo " UDF filesystem support: $enable_udf" - echo " Build examples: $use_examples" - -diff --git a/includes/inttypes.h b/includes/inttypes.h -new file mode 100644 -index 0000000..ead903f ---- /dev/null -+++ b/includes/inttypes.h -@@ -0,0 +1,305 @@ -+// ISO C9x compliant inttypes.h for Microsoft Visual Studio -+// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -+// -+// Copyright (c) 2006 Alexander Chemeris -+// -+// Redistribution and use in source and binary forms, with or without -+// modification, are permitted provided that the following conditions are met: -+// -+// 1. Redistributions of source code must retain the above copyright notice, -+// this list of conditions and the following disclaimer. -+// -+// 2. Redistributions in binary form must reproduce the above copyright -+// notice, this list of conditions and the following disclaimer in the -+// documentation and/or other materials provided with the distribution. -+// -+// 3. The name of the author may be used to endorse or promote products -+// derived from this software without specific prior written permission. -+// -+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+// -+/////////////////////////////////////////////////////////////////////////////// -+ -+#ifndef _MSC_VER // [ -+#error "Use this header only with Microsoft Visual C++ compilers!" -+#endif // _MSC_VER ] -+ -+#ifndef _MSC_INTTYPES_H_ // [ -+#define _MSC_INTTYPES_H_ -+ -+#if _MSC_VER > 1000 -+#pragma once -+#endif -+ -+#include "stdint.h" -+ -+// 7.8 Format conversion of integer types -+ -+typedef struct { -+ intmax_t quot; -+ intmax_t rem; -+} imaxdiv_t; -+ -+// 7.8.1 Macros for format specifiers -+ -+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 -+ -+// The fprintf macros for signed integers are: -+#define PRId8 "d" -+#define PRIi8 "i" -+#define PRIdLEAST8 "d" -+#define PRIiLEAST8 "i" -+#define PRIdFAST8 "d" -+#define PRIiFAST8 "i" -+ -+#define PRId16 "hd" -+#define PRIi16 "hi" -+#define PRIdLEAST16 "hd" -+#define PRIiLEAST16 "hi" -+#define PRIdFAST16 "hd" -+#define PRIiFAST16 "hi" -+ -+#define PRId32 "I32d" -+#define PRIi32 "I32i" -+#define PRIdLEAST32 "I32d" -+#define PRIiLEAST32 "I32i" -+#define PRIdFAST32 "I32d" -+#define PRIiFAST32 "I32i" -+ -+#define PRId64 "I64d" -+#define PRIi64 "I64i" -+#define PRIdLEAST64 "I64d" -+#define PRIiLEAST64 "I64i" -+#define PRIdFAST64 "I64d" -+#define PRIiFAST64 "I64i" -+ -+#define PRIdMAX "I64d" -+#define PRIiMAX "I64i" -+ -+#define PRIdPTR "Id" -+#define PRIiPTR "Ii" -+ -+// The fprintf macros for unsigned integers are: -+#define PRIo8 "o" -+#define PRIu8 "u" -+#define PRIx8 "x" -+#define PRIX8 "X" -+#define PRIoLEAST8 "o" -+#define PRIuLEAST8 "u" -+#define PRIxLEAST8 "x" -+#define PRIXLEAST8 "X" -+#define PRIoFAST8 "o" -+#define PRIuFAST8 "u" -+#define PRIxFAST8 "x" -+#define PRIXFAST8 "X" -+ -+#define PRIo16 "ho" -+#define PRIu16 "hu" -+#define PRIx16 "hx" -+#define PRIX16 "hX" -+#define PRIoLEAST16 "ho" -+#define PRIuLEAST16 "hu" -+#define PRIxLEAST16 "hx" -+#define PRIXLEAST16 "hX" -+#define PRIoFAST16 "ho" -+#define PRIuFAST16 "hu" -+#define PRIxFAST16 "hx" -+#define PRIXFAST16 "hX" -+ -+#define PRIo32 "I32o" -+#define PRIu32 "I32u" -+#define PRIx32 "I32x" -+#define PRIX32 "I32X" -+#define PRIoLEAST32 "I32o" -+#define PRIuLEAST32 "I32u" -+#define PRIxLEAST32 "I32x" -+#define PRIXLEAST32 "I32X" -+#define PRIoFAST32 "I32o" -+#define PRIuFAST32 "I32u" -+#define PRIxFAST32 "I32x" -+#define PRIXFAST32 "I32X" -+ -+#define PRIo64 "I64o" -+#define PRIu64 "I64u" -+#define PRIx64 "I64x" -+#define PRIX64 "I64X" -+#define PRIoLEAST64 "I64o" -+#define PRIuLEAST64 "I64u" -+#define PRIxLEAST64 "I64x" -+#define PRIXLEAST64 "I64X" -+#define PRIoFAST64 "I64o" -+#define PRIuFAST64 "I64u" -+#define PRIxFAST64 "I64x" -+#define PRIXFAST64 "I64X" -+ -+#define PRIoMAX "I64o" -+#define PRIuMAX "I64u" -+#define PRIxMAX "I64x" -+#define PRIXMAX "I64X" -+ -+#define PRIoPTR "Io" -+#define PRIuPTR "Iu" -+#define PRIxPTR "Ix" -+#define PRIXPTR "IX" -+ -+// The fscanf macros for signed integers are: -+#define SCNd8 "d" -+#define SCNi8 "i" -+#define SCNdLEAST8 "d" -+#define SCNiLEAST8 "i" -+#define SCNdFAST8 "d" -+#define SCNiFAST8 "i" -+ -+#define SCNd16 "hd" -+#define SCNi16 "hi" -+#define SCNdLEAST16 "hd" -+#define SCNiLEAST16 "hi" -+#define SCNdFAST16 "hd" -+#define SCNiFAST16 "hi" -+ -+#define SCNd32 "ld" -+#define SCNi32 "li" -+#define SCNdLEAST32 "ld" -+#define SCNiLEAST32 "li" -+#define SCNdFAST32 "ld" -+#define SCNiFAST32 "li" -+ -+#define SCNd64 "I64d" -+#define SCNi64 "I64i" -+#define SCNdLEAST64 "I64d" -+#define SCNiLEAST64 "I64i" -+#define SCNdFAST64 "I64d" -+#define SCNiFAST64 "I64i" -+ -+#define SCNdMAX "I64d" -+#define SCNiMAX "I64i" -+ -+#ifdef _WIN64 // [ -+# define SCNdPTR "I64d" -+# define SCNiPTR "I64i" -+#else // _WIN64 ][ -+# define SCNdPTR "ld" -+# define SCNiPTR "li" -+#endif // _WIN64 ] -+ -+// The fscanf macros for unsigned integers are: -+#define SCNo8 "o" -+#define SCNu8 "u" -+#define SCNx8 "x" -+#define SCNX8 "X" -+#define SCNoLEAST8 "o" -+#define SCNuLEAST8 "u" -+#define SCNxLEAST8 "x" -+#define SCNXLEAST8 "X" -+#define SCNoFAST8 "o" -+#define SCNuFAST8 "u" -+#define SCNxFAST8 "x" -+#define SCNXFAST8 "X" -+ -+#define SCNo16 "ho" -+#define SCNu16 "hu" -+#define SCNx16 "hx" -+#define SCNX16 "hX" -+#define SCNoLEAST16 "ho" -+#define SCNuLEAST16 "hu" -+#define SCNxLEAST16 "hx" -+#define SCNXLEAST16 "hX" -+#define SCNoFAST16 "ho" -+#define SCNuFAST16 "hu" -+#define SCNxFAST16 "hx" -+#define SCNXFAST16 "hX" -+ -+#define SCNo32 "lo" -+#define SCNu32 "lu" -+#define SCNx32 "lx" -+#define SCNX32 "lX" -+#define SCNoLEAST32 "lo" -+#define SCNuLEAST32 "lu" -+#define SCNxLEAST32 "lx" -+#define SCNXLEAST32 "lX" -+#define SCNoFAST32 "lo" -+#define SCNuFAST32 "lu" -+#define SCNxFAST32 "lx" -+#define SCNXFAST32 "lX" -+ -+#define SCNo64 "I64o" -+#define SCNu64 "I64u" -+#define SCNx64 "I64x" -+#define SCNX64 "I64X" -+#define SCNoLEAST64 "I64o" -+#define SCNuLEAST64 "I64u" -+#define SCNxLEAST64 "I64x" -+#define SCNXLEAST64 "I64X" -+#define SCNoFAST64 "I64o" -+#define SCNuFAST64 "I64u" -+#define SCNxFAST64 "I64x" -+#define SCNXFAST64 "I64X" -+ -+#define SCNoMAX "I64o" -+#define SCNuMAX "I64u" -+#define SCNxMAX "I64x" -+#define SCNXMAX "I64X" -+ -+#ifdef _WIN64 // [ -+# define SCNoPTR "I64o" -+# define SCNuPTR "I64u" -+# define SCNxPTR "I64x" -+# define SCNXPTR "I64X" -+#else // _WIN64 ][ -+# define SCNoPTR "lo" -+# define SCNuPTR "lu" -+# define SCNxPTR "lx" -+# define SCNXPTR "lX" -+#endif // _WIN64 ] -+ -+#endif // __STDC_FORMAT_MACROS ] -+ -+// 7.8.2 Functions for greatest-width integer types -+ -+// 7.8.2.1 The imaxabs function -+#define imaxabs _abs64 -+ -+// 7.8.2.2 The imaxdiv function -+ -+// This is modified version of div() function from Microsoft's div.c found -+// in %MSVC.NET%\crt\src\div.c -+#ifdef STATIC_IMAXDIV // [ -+static -+#else // STATIC_IMAXDIV ][ -+_inline -+#endif // STATIC_IMAXDIV ] -+imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -+{ -+ imaxdiv_t result; -+ -+ result.quot = numer / denom; -+ result.rem = numer % denom; -+ -+ if (numer < 0 && result.rem > 0) { -+ // did division wrong; must fix up -+ ++result.quot; -+ result.rem -= denom; -+ } -+ -+ return result; -+} -+ -+// 7.8.2.3 The strtoimax and strtoumax functions -+#define strtoimax _strtoi64 -+#define strtoumax _strtoui64 -+ -+// 7.8.2.4 The wcstoimax and wcstoumax functions -+#define wcstoimax _wcstoi64 -+#define wcstoumax _wcstoui64 -+ -+ -+#endif // _MSC_INTTYPES_H_ ] -diff --git a/libbluray.def b/libbluray.def -new file mode 100644 -index 0000000..d4c93cb ---- /dev/null -+++ b/libbluray.def -@@ -0,0 +1,63 @@ -+; libbluray.def ; declares the exports -+ -+LIBRARY "libbluray.dll" -+ -+EXPORTS -+ ; bluray.h -+ bd_get_version -+ bd_get_titles -+ bd_get_title_info -+ bd_get_playlist_info -+ bd_free_title_info -+ bd_open -+ bd_close -+ bd_seek -+ bd_seek_time -+ bd_find_seek_point -+ bd_read -+ bd_read_skip_still -+ bd_seek_chapter -+ bd_chapter_pos -+ bd_get_current_chapter -+ bd_seek_mark -+ bd_seek_playitem -+ bd_select_playlist -+ bd_select_title -+ bd_select_angle -+ bd_seamless_angle_change -+ bd_get_title_size -+ bd_get_current_title -+ bd_get_current_angle -+ bd_tell -+ bd_tell_time -+ bd_get_disc_info -+ bd_set_player_setting -+ bd_set_player_setting_str -+ bd_start_bdj -+ bd_stop_bdj -+ bd_get_event -+ bd_play -+ bd_read_ext -+ bd_play_title -+ bd_menu_call -+ bd_register_overlay_proc -+ bd_register_argb_overlay_proc -+ bd_set_scr -+ bd_user_input -+ bd_mouse_select -+ bd_get_sound_effect -+ bd_get_meta -+ bd_get_clpi -+ bd_read_clpi -+ bd_free_clpi -+ bd_read_mpls -+ bd_free_mpls -+ bd_read_mobj -+ bd_free_mobj -+ bd_get_clip_infos -+ bd_get_title_mpls -+ -+ ; additional functions -+ bd_set_debug_handler -+ bd_set_debug_mask -+ bd_get_debug_mask -diff --git a/libbluray.vcxproj b/libbluray.vcxproj -new file mode 100644 -index 0000000..6de7ad2 ---- /dev/null -+++ b/libbluray.vcxproj -@@ -0,0 +1,241 @@ -+ -+ -+ -+ -+ DebugRelease -+ Win32 -+ -+ -+ DebugRelease -+ x64 -+ -+ -+ Debug -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release -+ Win32 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ {E1DA1B95-71F1-4C21-A271-121176925062} -+ Win32Proj -+ libbluray -+ -+ -+ -+ v120 -+ -+ -+ v140 -+ 8.1 -+ -+ -+ v141 -+ 8.1 -+ -+ -+ DynamicLibrary -+ true -+ Unicode -+ -+ -+ DynamicLibrary -+ false -+ true -+ Unicode -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ true -+ $(SolutionDir)bin_$(PlatformName)d\ -+ $(SolutionDir)bin_$(PlatformName)d\$(ProjectName)\ -+ -+ -+ false -+ $(SolutionDir)bin_$(PlatformName)\$(ProjectName)\ -+ $(SolutionDir)bin_$(PlatformName)\$(ProjectName)\ -+ -+ -+ -+ -+ -+ Level3 -+ Disabled -+ HAVE_CONFIG_H;WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBBLURAY_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) -+ __STDC_FORMAT_MACROS;%(PreprocessorDefinitions) -+ $(ProjectDir);$(ProjectDir)includes;$(ProjectDir)src;$(ProjectDir)src\libbluray;%(AdditionalIncludeDirectories) -+ MultiThreadedDebugDLL -+ CompileAsCpp -+ -+ -+ Windows -+ true -+ libbluray.def -+ -+ -+ xcopy /I /Y "$(OutDir)$(TargetName).lib" "$(OutDir)lib\" -+ Copy .lib into library path -+ -+ -+ -+ -+ MultiThreadedDebug -+ -+ -+ -+ -+ Level3 -+ MaxSpeed -+ true -+ true -+ HAVE_CONFIG_H;WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBBLURAY_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) -+ __STDC_FORMAT_MACROS;%(PreprocessorDefinitions) -+ $(ProjectDir);$(ProjectDir)includes;$(ProjectDir)src;$(ProjectDir)src\libbluray;%(AdditionalIncludeDirectories) -+ MultiThreaded -+ StreamingSIMDExtensions -+ CompileAsCpp -+ -+ -+ Windows -+ true -+ true -+ true -+ libbluray.def -+ true -+ -+ -+ xcopy /I /Y "$(TargetDir)$(TargetName)$(TargetExt)" "$(OutDir)..\" -+xcopy /I /Y "$(TargetDir)$(TargetName).lib" "$(OutDir)..\lib\" -+ Copy .dll/.lib into library path -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/libbluray.vcxproj.filters b/libbluray.vcxproj.filters -new file mode 100644 -index 0000000..02a4161 ---- /dev/null -+++ b/libbluray.vcxproj.filters -@@ -0,0 +1,377 @@ -+ -+ -+ -+ -+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} -+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx -+ -+ -+ {93995380-89BD-4b04-88EB-625FBE52EBFB} -+ h;hpp;hxx;hm;inl;inc;xsd -+ -+ -+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} -+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms -+ -+ -+ {1ab0e905-7c04-4090-b385-6363dd1c961c} -+ -+ -+ {b8fa3348-a089-461f-9ef5-3d9df997b8e5} -+ -+ -+ {125333e9-0b5e-45f9-a444-f0aaaf547d9b} -+ -+ -+ {a743058f-f07a-4d0f-bab6-02dc57defda9} -+ -+ -+ {7dacc7c4-ef59-452b-9e5b-392c9df07c98} -+ -+ -+ {c7895c81-c186-4d5e-a8ff-645c6d55a731} -+ -+ -+ {c8619466-211b-4c85-9d30-d1b1a822d32e} -+ -+ -+ {8afb6919-994f-4d1f-9638-ce4a06d0b473} -+ -+ -+ {0e9086a7-eebf-4b8e-a4fe-b1724d148877} -+ -+ -+ {fc5e776b-0f32-493a-b823-240288288502} -+ -+ -+ {96d2d786-cd45-4856-937d-9e6f85ced241} -+ -+ -+ {9f4ea4ae-217a-4d97-a5f3-e561ce1e49cd} -+ -+ -+ {09e1b1b8-3aa3-4918-b157-3dfc0554ccbb} -+ -+ -+ {1e02e503-752e-4765-9dfb-8cc67a7b79f8} -+ -+ -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\file -+ -+ -+ Header Files\file -+ -+ -+ Header Files\file -+ -+ -+ Header Files\libbluray -+ -+ -+ Header Files\libbluray -+ -+ -+ Header Files\libbluray -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\hdmv -+ -+ -+ Header Files\libbluray\hdmv -+ -+ -+ Header Files\libbluray\hdmv -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\util -+ -+ -+ Header Files\util -+ -+ -+ Header Files\libbluray -+ -+ -+ Header Files\libbluray\decoders -+ -+ -+ Header Files\file -+ -+ -+ Header Files\libbluray -+ -+ -+ Header Files\util -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ Header Files\file -+ -+ -+ Header Files\util -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\bdnav -+ -+ -+ Header Files\libbluray\disc -+ -+ -+ -+ -+ Source Files\util -+ -+ -+ Source Files\util -+ -+ -+ Source Files\file -+ -+ -+ Source Files\libbluray -+ -+ -+ Source Files\libbluray -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\hdmv -+ -+ -+ Source Files\libbluray\hdmv -+ -+ -+ Source Files\libbluray\hdmv -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\util -+ -+ -+ Source Files\file -+ -+ -+ Source Files\file -+ -+ -+ Source Files\file -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\util -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\libbluray\decoders -+ -+ -+ Source Files\file -+ -+ -+ Source Files\file -+ -+ -+ Source Files\util -+ -+ -+ Source Files\util -+ -+ -+ Source Files\libbluray\disc -+ -+ -+ Source Files\libbluray\disc -+ -+ -+ Source Files\libbluray\disc -+ -+ -+ Source Files\libbluray\disc -+ -+ -+ Source Files\util -+ -+ -+ Source Files\file -+ -+ -+ Source Files\util -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\bdnav -+ -+ -+ Source Files\libbluray\disc -+ -+ -+ -+ -+ Source Files -+ -+ -+ -\ No newline at end of file -diff --git a/src/file/dir_win32.c b/src/file/dir_win32.c -index 5cbc3c8..4030896 100644 ---- a/src/file/dir_win32.c -+++ b/src/file/dir_win32.c -@@ -76,7 +76,7 @@ static dir_data_t *_open_impl(const char *dirname) - { - dir_data_t *priv; - char *filespec; -- wchar_t wfilespec[MAX_PATH]; -+ wchar_t wfilespec[4096 + 1]; - int result; - - filespec = str_printf("%s" DIR_SEP "*", dirname); -@@ -84,7 +84,7 @@ static dir_data_t *_open_impl(const char *dirname) - return NULL; - } - -- result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, MAX_PATH); -+ result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, 4096); - X_FREE(filespec); - if (!result) { - return NULL; -diff --git a/src/file/dirs_win32.c b/src/file/dirs_win32.c -index e165fea..3d07251 100644 ---- a/src/file/dirs_win32.c -+++ b/src/file/dirs_win32.c -@@ -36,7 +36,7 @@ - - char *win32_get_font_dir(const char *font_file) - { -- wchar_t wdir[MAX_PATH]; -+ wchar_t wdir[MAX_PATH+1] = {0}; - if (S_OK != SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, wdir)) { - int lenght = GetWindowsDirectoryW(wdir, MAX_PATH); - if (lenght == 0 || lenght > (MAX_PATH - 8)) { -@@ -67,7 +67,7 @@ char *file_get_config_home(void) - - char *file_get_data_home(void) - { -- wchar_t wdir[MAX_PATH]; -+ wchar_t wdir[MAX_PATH+1] = {0}; - - /* Get the "Application Data" folder for the user */ - if (S_OK == SHGetFolderPathW(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, -@@ -92,7 +92,7 @@ char *file_get_cache_home(void) - const char *file_get_config_system(const char *dir) - { - static char *appdir = NULL; -- wchar_t wdir[MAX_PATH]; -+ wchar_t wdir[MAX_PATH+1] = {0}; - - if (!dir) { - // first call -diff --git a/src/file/dl_win32.c b/src/file/dl_win32.c -index 6155ad6..c7e3eee 100644 ---- a/src/file/dl_win32.c -+++ b/src/file/dl_win32.c -@@ -57,7 +57,7 @@ void *dl_dlopen(const char *path, const char *version) - { - (void)version; - -- wchar_t wname[MAX_PATH]; -+ wchar_t wname[MAX_PATH+1] = {0}; - char *name; - void *result; - int iresult; -@@ -125,7 +125,7 @@ const char *dl_get_path(void) - if (!initialized) { - initialized = 1; - -- static char path[MAX_PATH]; -+ static char path[MAX_PATH + 1]; - HMODULE hModule; - wchar_t wpath[MAX_PATH]; - -diff --git a/src/file/file_win32.c b/src/file/file_win32.c -index 11aaf82..f551863 100644 ---- a/src/file/file_win32.c -+++ b/src/file/file_win32.c -@@ -107,9 +107,9 @@ static BD_FILE_H *_file_open(const char* filename, const char *mode) - { - BD_FILE_H *file; - FILE *fp; -- wchar_t wfilename[MAX_PATH], wmode[8]; -+ wchar_t wfilename[4096 + 1] = {0}, wmode[8] = {0}; - -- if (!MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filename, -1, wfilename, MAX_PATH) || -+ if (!MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filename, -1, wfilename, 4096) || - !MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, mode, -1, wmode, 8)) { - - BD_DEBUG(DBG_FILE, "Error opening file %s\n", filename); -@@ -122,6 +122,9 @@ static BD_FILE_H *_file_open(const char* filename, const char *mode) - return NULL; - } - -+ // Set file buffer -+ setvbuf(fp, NULL, _IOFBF, 6144 * 10); -+ - file = calloc(1, sizeof(BD_FILE_H)); - if (!file) { - BD_DEBUG(DBG_FILE | DBG_CRIT, "Error opening file %s (out of memory)\n", filename); -diff --git a/src/libbluray/bdnav/bdmv_parse.c b/src/libbluray/bdnav/bdmv_parse.c -index e298ca3..2c310aa 100644 ---- a/src/libbluray/bdnav/bdmv_parse.c -+++ b/src/libbluray/bdnav/bdmv_parse.c -@@ -59,6 +59,7 @@ int bdmv_parse_header(BITSTREAM *bs, uint32_t type, uint32_t *version) - switch (ver) { - case BDMV_VERSION_0100: - case BDMV_VERSION_0200: -+ case BDMV_VERSION_0240: - case BDMV_VERSION_0300: - break; - default: -diff --git a/src/libbluray/bdnav/bdmv_parse.h b/src/libbluray/bdnav/bdmv_parse.h -index 8f953a3..9dbbed5 100644 ---- a/src/libbluray/bdnav/bdmv_parse.h -+++ b/src/libbluray/bdnav/bdmv_parse.h -@@ -27,6 +27,7 @@ - - #define BDMV_VERSION_0100 ('0' << 24 | '1' << 16 | '0' << 8 | '0') - #define BDMV_VERSION_0200 ('0' << 24 | '2' << 16 | '0' << 8 | '0') -+#define BDMV_VERSION_0240 ('0' << 24 | '2' << 16 | '4' << 8 | '0') - #define BDMV_VERSION_0300 ('0' << 24 | '3' << 16 | '0' << 8 | '0') - - BD_PRIVATE int bdmv_parse_header(BITSTREAM *bs, uint32_t type, uint32_t *version); -diff --git a/src/libbluray/bdnav/index_parse.c b/src/libbluray/bdnav/index_parse.c -index 0deb617..300a1bf 100644 ---- a/src/libbluray/bdnav/index_parse.c -+++ b/src/libbluray/bdnav/index_parse.c -@@ -105,12 +105,11 @@ static int _parse_index(BITSTREAM *bs, INDX_ROOT *index) - - index->num_titles = bs_read(bs, 16); - if (!index->num_titles) { -- BD_DEBUG(DBG_CRIT, "empty index\n"); -- return 0; -+ BD_DEBUG(DBG_NAV, "empty index\n"); - } - - index->titles = calloc(index->num_titles, sizeof(INDX_TITLE)); -- if (!index->titles) { -+ if (index->num_titles && !index->titles) { - BD_DEBUG(DBG_CRIT, "out of memory\n"); - return 0; - } -diff --git a/src/libbluray/bdnav/mpls_data.h b/src/libbluray/bdnav/mpls_data.h -index 2ceac92..d23d40e 100644 ---- a/src/libbluray/bdnav/mpls_data.h -+++ b/src/libbluray/bdnav/mpls_data.h -@@ -47,6 +47,7 @@ typedef struct - uint8_t sv_num_pip_pg_ref; - uint8_t *sv_secondary_audio_ref; - uint8_t *sv_pip_pg_ref; -+ uint8_t ss_offset_sequence_id; - } MPLS_STREAM; - - typedef struct -@@ -107,6 +108,7 @@ typedef struct - uint8_t random_access_flag; - uint8_t audio_mix_flag; - uint8_t lossless_bypass_flag; -+ uint8_t mvc_base_view_r_flag; - } MPLS_AI; - - typedef struct -diff --git a/src/libbluray/bdnav/mpls_parse.c b/src/libbluray/bdnav/mpls_parse.c -index 358b634..569c015 100644 ---- a/src/libbluray/bdnav/mpls_parse.c -+++ b/src/libbluray/bdnav/mpls_parse.c -@@ -77,9 +77,10 @@ _parse_appinfo(BITSTREAM *bits, MPLS_AI *ai) - ai->random_access_flag = bs_read(bits, 1); - ai->audio_mix_flag = bs_read(bits, 1); - ai->lossless_bypass_flag = bs_read(bits, 1); -+ ai->mvc_base_view_r_flag = bs_read(bits, 1); - #if 0 - // Reserved -- bs_skip(bits, 13); -+ bs_skip(bits, 12); - bs_seek_byte(bits, pos + len); - #endif - return 1; -@@ -194,6 +195,7 @@ _parse_stream(BITSTREAM *bits, MPLS_STREAM *s) - break; - }; - s->lang[3] = '\0'; -+ s->ss_offset_sequence_id = 0xFF; - - if (bs_seek_byte(bits, pos + len) < 0) { - return 0; -@@ -958,6 +960,99 @@ _parse_subpath_extension(BITSTREAM *bits, MPLS_PL *pl) - return 0; - } - -+static int -+_parse_stn_ss_extension(BITSTREAM *bits, MPLS_PL *pl) -+{ -+ int ii, s; -+ int64_t pos; -+ -+ for (ii = 0; ii < pl->list_count; ii++) { -+ uint32_t len = bs_read(bits, 16); -+ pos = bs_pos(bits) >> 3; -+ int Fixed_offset_during_PopUp_flag = bs_read(bits, 1); -+ bs_skip(bits, 15); // reserved -+ -+ for (s = 0; s < pl->play_item[ii].stn.num_video; s++) { -+ // stream_entry -+ uint32_t slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ // stream_attributes_ss -+ slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ bs_skip(bits, 10); // reserved -+ bs_skip(bits, 6); // number_of_offset_sequences -+ } -+ -+ for (s = 0; s < pl->play_item[ii].stn.num_pg; s++) { -+ pl->play_item[ii].stn.pg[s].ss_offset_sequence_id = bs_read(bits, 8); -+ -+ bs_skip(bits, 4); // reserved -+ bs_skip(bits, 1); // dialog_region_offset_valid_flag -+ int is_SS_PG = bs_read(bits, 1); -+ int is_top_AS_PG_textST = bs_read(bits, 1); -+ int is_bottom_AS_PG_textST = bs_read(bits, 1); -+ if (is_SS_PG) { -+ // stream_entry left eye -+ uint32_t slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ // stream_entry right eye -+ slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ bs_skip(bits, 8); // reserved -+ bs_skip(bits, 8); // PG offset -+ } -+ if (is_top_AS_PG_textST) { -+ // stream_entry -+ uint32_t slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ bs_skip(bits, 8); // reserved -+ bs_skip(bits, 8); // PG offset -+ } -+ if (is_bottom_AS_PG_textST) { -+ // stream_entry -+ uint32_t slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ bs_skip(bits, 8); // reserved -+ bs_skip(bits, 8); // PG offset -+ } -+ } -+ -+ for (s = 0; s < pl->play_item[ii].stn.num_ig; s++) { -+ if (Fixed_offset_during_PopUp_flag) -+ bs_skip(bits, 8); -+ else -+ pl->play_item[ii].stn.ig[s].ss_offset_sequence_id = bs_read(bits, 8); -+ -+ bs_skip(bits, 16); // IG_Plane_offset_during_BB_video -+ bs_skip(bits, 7); // reserved -+ int is_SS_IG = bs_read(bits, 1); -+ if (is_SS_IG) { -+ // stream_entry left eye -+ uint32_t slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ // stream_entry right eye -+ slen = bs_read(bits, 8); -+ bs_skip(bits, slen * 8); -+ -+ bs_skip(bits, 8); // reserved -+ bs_skip(bits, 8); // PG offset -+ } -+ } -+ -+ // Skip to next play item -+ bs_seek_byte(bits, pos + len); -+ } -+ -+ return 0; -+} -+ - static int - _parse_mpls_extension(BITSTREAM *bits, int id1, int id2, void *handle) - { -@@ -972,7 +1067,7 @@ _parse_mpls_extension(BITSTREAM *bits, int id1, int id2, void *handle) - - if (id1 == 2) { - if (id2 == 1) { -- return 0; -+ return _parse_stn_ss_extension(bits, pl); - } - if (id2 == 2) { - // SubPath entries extension -diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c -index 883b35c..8220787 100644 ---- a/src/libbluray/bluray.c -+++ b/src/libbluray/bluray.c -@@ -51,8 +51,10 @@ - #include "disc/disc.h" - #include "disc/enc_info.h" - #include "file/file.h" -+#ifdef USING_BDJAVA - #include "bdj/bdj.h" - #include "bdj/bdjo_parse.h" -+#endif - - #include // SEEK_ - #include -@@ -150,9 +152,11 @@ struct bluray { - uint8_t hdmv_suspended; - - /* BD-J */ -+#ifdef USING_BDJAVA - BDJAVA *bdjava; - BDJ_STORAGE bdjstorage; - uint8_t bdj_wait_start; /* BD-J has selected playlist (prefetch) but not yet started playback */ -+#endif - - /* HDMV graphics */ - GRAPHICS_CONTROLLER *graphics_controller; -@@ -166,10 +170,12 @@ struct bluray { - uint64_t gc_wakeup_pos; /* stream position of gc_wakeup_time */ - - /* ARGB overlay output */ -+#ifdef USING_BDJAVA - void *argb_overlay_proc_handle; - bd_argb_overlay_proc_f argb_overlay_proc; - BD_ARGB_BUFFER *argb_buffer; - BD_MUTEX argb_buffer_mutex; -+#endif - }; - - /* Stream Packet Number = byte offset / 192. Avoid 64-bit division. */ -@@ -532,6 +538,16 @@ static void _update_uo_mask(BLURAY *bd) - bd->uo_mask = new_mask; - } - -+#ifdef USING_BDJAVA -+void bd_set_bdj_uo_mask(BLURAY *bd, unsigned mask) -+{ -+ bd->title_uo_mask.title_search = !!(mask & BDJ_TITLE_SEARCH_MASK); -+ bd->title_uo_mask.menu_call = !!(mask & BDJ_MENU_CALL_MASK); -+ -+ _update_uo_mask(bd); -+} -+#endif -+ - static void _update_hdmv_uo_mask(BLURAY *bd) - { - uint32_t mask = hdmv_vm_get_uo_mask(bd->hdmv_vm); -@@ -899,6 +915,7 @@ static int _run_gc(BLURAY *bd, gc_ctrl_e msg, uint32_t param) - - static void _check_bdj(BLURAY *bd) - { -+#ifdef USING_BDJAVA - if (!bd->disc_info.bdj_handled) { - if (!bd->disc || bd->disc_info.bdj_detected) { - -@@ -911,6 +928,7 @@ static void _check_bdj(BLURAY *bd) - } - } - } -+#endif /* USING_BDJAVA */ - } - - static void _fill_disc_info(BLURAY *bd, BD_ENC_INFO *enc_info) -@@ -940,7 +958,7 @@ static void _fill_disc_info(BLURAY *bd, BD_ENC_INFO *enc_info) - bd->disc_info.num_unsupported_titles = 0; - - bd->disc_info.bdj_detected = 0; -- bd->disc_info.bdj_supported = 1; -+ bd->disc_info.bdj_supported = 0; - - bd->disc_info.num_titles = 0; - bd->disc_info.titles = NULL; -@@ -1104,22 +1122,17 @@ const BLURAY_DISC_INFO *bd_get_disc_info(BLURAY *bd) - } - - /* -- * bdj callbacks -+ * bdj - */ - --void bd_set_bdj_uo_mask(BLURAY *bd, unsigned mask) --{ -- bd->title_uo_mask.title_search = !!(mask & BDJ_TITLE_SEARCH_MASK); -- bd->title_uo_mask.menu_call = !!(mask & BDJ_MENU_CALL_MASK); -- -- _update_uo_mask(bd); --} -- -+#ifdef USING_BDJAVA - const uint8_t *bd_get_aacs_data(BLURAY *bd, int type) - { - return disc_get_data(bd->disc, type); - } -+#endif - -+#ifdef USING_BDJAVA - uint64_t bd_get_uo_mask(BLURAY *bd) - { - /* internal function. Used by BD-J. */ -@@ -1134,25 +1147,16 @@ uint64_t bd_get_uo_mask(BLURAY *bd) - - return mask.u64; - } -+#endif - -+#ifdef USING_BDJAVA - void bd_set_bdj_kit(BLURAY *bd, int mask) - { - _queue_event(bd, BD_EVENT_KEY_INTEREST_TABLE, mask); - } -+#endif - --int bd_bdj_sound_effect(BLURAY *bd, int id) --{ -- if (bd->sound_effects && id >= bd->sound_effects->num_sounds) { -- return -1; -- } -- if (id < 0 || id > 0xff) { -- return -1; -- } -- -- _queue_event(bd, BD_EVENT_SOUND_EFFECT, id); -- return 0; --} -- -+#ifdef USING_BDJAVA - void bd_select_rate(BLURAY *bd, float rate, int reason) - { - if (reason == BDJ_PLAYBACK_STOP) { -@@ -1171,26 +1175,9 @@ void bd_select_rate(BLURAY *bd, float rate, int reason) - _queue_event(bd, BD_EVENT_STILL, 0); - } - } -+#endif - --int bd_bdj_seek(BLURAY *bd, int playitem, int playmark, int64_t time) --{ -- bd_mutex_lock(&bd->mutex); -- -- if (playitem > 0) { -- bd_seek_playitem(bd, playitem); -- } -- if (playmark >= 0) { -- bd_seek_mark(bd, playmark); -- } -- if (time >= 0) { -- bd_seek_time(bd, time); -- } -- -- bd_mutex_unlock(&bd->mutex); -- -- return 1; --} -- -+#ifdef USING_BDJAVA - int bd_set_virtual_package(BLURAY *bd, const char *vp_path, int psr_init_backup) - { - bd_mutex_lock(&bd->mutex); -@@ -1216,12 +1203,16 @@ int bd_set_virtual_package(BLURAY *bd, const char *vp_path, int psr_init_backup) - - return 0; - } -+#endif - -+#ifdef USING_BDJAVA - BD_DISC *bd_get_disc(BLURAY *bd) - { - return bd ? bd->disc : NULL; - } -+#endif - -+#ifdef USING_BDJAVA - uint32_t bd_reg_read(BLURAY *bd, int psr, int reg) - { - if (psr) { -@@ -1230,7 +1221,9 @@ uint32_t bd_reg_read(BLURAY *bd, int psr, int reg) - return bd_gpr_read(bd->regs, reg); - } - } -+#endif - -+#ifdef USING_BDJAVA - int bd_reg_write(BLURAY *bd, int psr, int reg, uint32_t value, uint32_t psr_value_mask) - { - if (psr) { -@@ -1247,7 +1240,9 @@ int bd_reg_write(BLURAY *bd, int psr, int reg, uint32_t value, uint32_t psr_valu - return bd_gpr_write(bd->regs, reg, value); - } - } -+#endif - -+#ifdef USING_BDJAVA - BD_ARGB_BUFFER *bd_lock_osd_buffer(BLURAY *bd) - { - bd_mutex_lock(&bd->argb_buffer_mutex); -@@ -1333,13 +1328,11 @@ void bd_bdj_osd_cb(BLURAY *bd, const unsigned *img, int w, int h, - bd->argb_buffer->dirty[BD_OVERLAY_IG].y1 = 0; - } - } -- --/* -- * BD-J -- */ -+#endif - - static int _start_bdj(BLURAY *bd, unsigned title) - { -+#ifdef USING_BDJAVA - if (bd->bdjava == NULL) { - const char *root = disc_root(bd->disc); - bd->bdjava = bdj_open(root, bd, bd->disc_info.bdj_disc_id, &bd->bdjstorage); -@@ -1349,8 +1342,14 @@ static int _start_bdj(BLURAY *bd, unsigned title) - } - - return !bdj_process_event(bd->bdjava, BDJ_EVENT_START, title); -+#else -+ (void)bd; -+ BD_DEBUG(DBG_BLURAY | DBG_CRIT, "Title %d: BD-J not compiled in\n", title); -+ return 0; -+#endif - } - -+#ifdef USING_BDJAVA - static int _bdj_event(BLURAY *bd, unsigned ev, unsigned param) - { - if (bd->bdjava != NULL) { -@@ -1358,7 +1357,11 @@ static int _bdj_event(BLURAY *bd, unsigned ev, unsigned param) - } - return -1; - } -+#else -+#define _bdj_event(bd, ev, param) do{}while(0) -+#endif - -+#ifdef USING_BDJAVA - static void _stop_bdj(BLURAY *bd) - { - if (bd->bdjava != NULL) { -@@ -1367,7 +1370,11 @@ static void _stop_bdj(BLURAY *bd) - _queue_event(bd, BD_EVENT_KEY_INTEREST_TABLE, 0); - } - } -+#else -+#define _stop_bdj(bd) do{}while(0) -+#endif - -+#ifdef USING_BDJAVA - static void _close_bdj(BLURAY *bd) - { - if (bd->bdjava != NULL) { -@@ -1375,6 +1382,20 @@ static void _close_bdj(BLURAY *bd) - bd->bdjava = NULL; - } - } -+#else -+#define _close_bdj(bd) do{}while(0) -+#endif -+ -+#ifdef USING_BDJAVA -+static void _storage_free(BLURAY *bd) -+{ -+ X_FREE(bd->bdjstorage.cache_root); -+ X_FREE(bd->bdjstorage.persistent_root); -+ X_FREE(bd->bdjstorage.classpath); -+} -+#else -+#define _storage_free(bd) do{}while(0) -+#endif - - /* - * open / close -@@ -1401,6 +1422,7 @@ BLURAY *bd_init(void) - } - - bd_mutex_init(&bd->mutex); -+#ifdef USING_BDJAVA - bd_mutex_init(&bd->argb_buffer_mutex); - - env = getenv("LIBBLURAY_PERSISTENT_STORAGE"); -@@ -1408,6 +1430,7 @@ BLURAY *bd_init(void) - int v = (!strcmp(env, "yes")) ? 1 : (!strcmp(env, "no")) ? 0 : atoi(env); - bd->bdjstorage.no_persistent_storage = !v; - } -+#endif - - BD_DEBUG(DBG_BLURAY, "BLURAY initialized!\n"); - -@@ -1522,7 +1545,9 @@ void bd_close(BLURAY *bd) - disc_close(&bd->disc); - - bd_mutex_destroy(&bd->mutex); -+#ifdef USING_BDJAVA - bd_mutex_destroy(&bd->argb_buffer_mutex); -+#endif - - BD_DEBUG(DBG_BLURAY, "BLURAY destroyed!\n"); - -@@ -1654,6 +1679,25 @@ int64_t bd_seek_time(BLURAY *bd, uint64_t tick) - return bd->s_pos; - } - -+int64_t bd_find_seek_point(BLURAY *bd, uint64_t tick) -+{ -+ uint32_t clip_pkt, out_pkt; -+ NAV_CLIP *clip; -+ -+ tick /= 2; -+ -+ if (bd->title && -+ tick < bd->title->duration) { -+ -+ // Find the closest access unit to the requested position -+ clip = nav_time_search(bd->title, (uint32_t)tick, &clip_pkt, &out_pkt); -+ -+ return (int64_t)out_pkt * 192; -+ } -+ -+ return bd->s_pos; -+} -+ - uint64_t bd_tell_time(BLURAY *bd) - { - uint32_t clip_pkt = 0, out_pkt = 0, out_time = 0; -@@ -2394,7 +2438,26 @@ int bd_select_playlist(BLURAY *bd, uint32_t playlist) - return result; - } - --/* BD-J callback */ -+#ifdef USING_BDJAVA -+int bd_bdj_seek(BLURAY *bd, int playitem, int playmark, int64_t time) -+{ -+ bd_mutex_lock(&bd->mutex); -+ -+ if (playitem > 0) { -+ bd_seek_playitem(bd, playitem); -+ } -+ if (playmark >= 0) { -+ bd_seek_mark(bd, playmark); -+ } -+ if (time >= 0) { -+ bd_seek_time(bd, time); -+ } -+ -+ bd_mutex_unlock(&bd->mutex); -+ -+ return 1; -+} -+ - static int _play_playlist_at(BLURAY *bd, int playlist, int playitem, int playmark, int64_t time) - { - if (playlist < 0) { -@@ -2406,14 +2469,15 @@ static int _play_playlist_at(BLURAY *bd, int playlist, int playitem, int playmar - return 0; - } - -+#ifdef USING_BDJAVA - bd->bdj_wait_start = 1; /* playback is triggered by bd_select_rate() */ -+#endif - - bd_bdj_seek(bd, playitem, playmark, time); - - return 1; - } - --/* BD-J callback */ - int bd_play_playlist_at(BLURAY *bd, int playlist, int playitem, int playmark, int64_t time) - { - int result; -@@ -2426,6 +2490,21 @@ int bd_play_playlist_at(BLURAY *bd, int playlist, int playitem, int playmark, in - return result; - } - -+int bd_bdj_sound_effect(BLURAY *bd, int id) -+{ -+ if (bd->sound_effects && id >= bd->sound_effects->num_sounds) { -+ return -1; -+ } -+ if (id < 0 || id > 0xff) { -+ return -1; -+ } -+ -+ _queue_event(bd, BD_EVENT_SOUND_EFFECT, id); -+ return 0; -+} -+ -+#endif /* USING_BDJAVA */ -+ - // Select a title for playback - // The title index is an index into the list - // established by bd_get_titles() -@@ -2651,6 +2730,7 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, - NAV_CLIP *nc = &title->clip_list.clip[ii]; - - memcpy(ci->clip_id, pi->clip->clip_id, sizeof(ci->clip_id)); -+ ci->idx = nc->clip_id; - ci->pkt_count = nc->end_pkt - nc->start_pkt; - ci->start_time = (uint64_t)nc->title_time * 2; - ci->in_time = (uint64_t)pi->in_time * 2; -@@ -2675,6 +2755,8 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, - } - } - -+ title_info->mvc_base_view_r_flag = title->pl->app_info.mvc_base_view_r_flag; -+ - return title_info; - - error: -@@ -2802,7 +2884,7 @@ int bd_set_player_setting(BLURAY *bd, uint32_t idx, uint32_t value) - bd_mutex_unlock(&bd->mutex); - return result; - } -- -+#ifdef USING_BDJAVA - if (idx == BLURAY_PLAYER_SETTING_PERSISTENT_STORAGE) { - if (bd->title_type != title_undef) { - BD_DEBUG(DBG_BLURAY | DBG_CRIT, "Can't disable persistent storage during playback\n"); -@@ -2811,6 +2893,7 @@ int bd_set_player_setting(BLURAY *bd, uint32_t idx, uint32_t value) - bd->bdjstorage.no_persistent_storage = !value; - return 1; - } -+#endif - - for (i = 0; i < sizeof(map) / sizeof(map[0]); i++) { - if (idx == map[i].idx) { -@@ -2835,6 +2918,7 @@ int bd_set_player_setting_str(BLURAY *bd, uint32_t idx, const char *s) - case BLURAY_PLAYER_SETTING_COUNTRY_CODE: - return bd_set_player_setting(bd, idx, str_to_uint32(s, 2)); - -+#ifdef USING_BDJAVA - case BLURAY_PLAYER_CACHE_ROOT: - bd_mutex_lock(&bd->mutex); - X_FREE(bd->bdjstorage.cache_root); -@@ -2850,6 +2934,7 @@ int bd_set_player_setting_str(BLURAY *bd, uint32_t idx, const char *s) - bd_mutex_unlock(&bd->mutex); - BD_DEBUG(DBG_BDJ, "Persistent root dir set to %s\n", bd->bdjstorage.persistent_root); - return 1; -+#endif /* USING_BDJAVA */ - - default: - return 0; -@@ -3265,7 +3350,7 @@ static int _play_title(BLURAY *bd, unsigned title) - return 0; - } - --/* BD-J callback */ -+#ifdef USING_BDJAVA - int bd_play_title_internal(BLURAY *bd, unsigned title) - { - /* used by BD-J. Like bd_play_title() but bypasses UO mask checks. */ -@@ -3275,6 +3360,7 @@ int bd_play_title_internal(BLURAY *bd, unsigned title) - bd_mutex_unlock(&bd->mutex); - return ret; - } -+#endif - - int bd_play(BLURAY *bd) - { -@@ -3505,6 +3591,7 @@ static int _read_ext(BLURAY *bd, unsigned char *buf, int len, BD_EVENT *event) - return 0; - } - -+#ifdef USING_BDJAVA - if (bd->title_type == title_bdj) { - if (bd->end_of_playlist == 1) { - _bdj_event(bd, BDJ_EVENT_END_OF_PLAYLIST, bd_psr_read(bd->regs, PSR_PLAYLIST)); -@@ -3523,6 +3610,7 @@ static int _read_ext(BLURAY *bd, unsigned char *buf, int len, BD_EVENT *event) - return 0; - } - } -+#endif - - int bytes = _bd_read(bd, buf, len); - -@@ -3584,9 +3672,11 @@ static int _set_rate(BLURAY *bd, uint32_t rate) - return -1; - } - -+#ifdef USING_BDJAVA - if (bd->title_type == title_bdj) { - return _bdj_event(bd, BDJ_EVENT_RATE, rate); - } -+#endif - - return 0; - } -@@ -3613,8 +3703,10 @@ int bd_mouse_select(BLURAY *bd, int64_t pts, uint16_t x, uint16_t y) - - if (bd->title_type == title_hdmv) { - result = _run_gc(bd, GC_CTRL_MOUSE_MOVE, param); -+#ifdef USING_BDJAVA - } else if (bd->title_type == title_bdj) { - result = _bdj_event(bd, BDJ_EVENT_MOUSE, param); -+#endif - } - - bd_mutex_unlock(&bd->mutex); -@@ -3636,8 +3728,10 @@ int bd_user_input(BLURAY *bd, int64_t pts, uint32_t key) - - if (bd->title_type == title_hdmv) { - result = _run_gc(bd, GC_CTRL_VK_KEY, key); -+#ifdef USING_BDJAVA - } else if (bd->title_type == title_bdj) { - result = _bdj_event(bd, BDJ_EVENT_VK_KEY, key); -+#endif - } - - bd_mutex_unlock(&bd->mutex); -@@ -3664,6 +3758,7 @@ void bd_register_overlay_proc(BLURAY *bd, void *handle, bd_overlay_proc_f func) - - void bd_register_argb_overlay_proc(BLURAY *bd, void *handle, bd_argb_overlay_proc_f func, BD_ARGB_BUFFER *buf) - { -+#ifdef USING_BDJAVA - if (!bd) { - return; - } -@@ -3675,6 +3770,12 @@ void bd_register_argb_overlay_proc(BLURAY *bd, void *handle, bd_argb_overlay_pro - bd->argb_buffer = buf; - - bd_mutex_unlock(&bd->argb_buffer_mutex); -+#else -+ (void)bd; -+ (void)handle; -+ (void)func; -+ (void)buf; -+#endif - } - - int bd_get_sound_effect(BLURAY *bd, unsigned sound_id, BLURAY_SOUND_EFFECT *effect) -@@ -3825,10 +3926,44 @@ void bd_free_mobj(struct mobj_objects *obj) - - struct bdjo_data *bd_read_bdjo(const char *bdjo_file) - { -+#ifdef USING_BDJAVA - return bdjo_parse(bdjo_file); -+#else -+ (void)bdjo_file; -+ return NULL; -+#endif - } - - void bd_free_bdjo(struct bdjo_data *obj) - { -+#ifdef USING_BDJAVA - bdjo_free(&obj); -+#else -+ (void)obj; -+#endif -+} -+ -+int bd_get_clip_infos(BLURAY *bd, unsigned clip, uint64_t *clip_start_time, uint64_t *stream_start_time, uint64_t *pos, uint64_t *duration) -+{ -+ if (bd && bd->title && bd->title->clip_list.count > clip) { -+ if (clip_start_time) -+ *clip_start_time = (uint64_t)bd->title->clip_list.clip[clip].title_time << 1; -+ if (stream_start_time) -+ *stream_start_time = (uint64_t)bd->title->clip_list.clip[clip].in_time << 1; -+ if (pos) -+ *pos = (uint64_t)bd->title->clip_list.clip[clip].title_pkt * 192; -+ if (duration) -+ *duration = (uint64_t)bd->title->clip_list.clip[clip].duration << 1; -+ -+ return 1; -+ } -+ return 0; -+} -+ -+struct mpls_pl* bd_get_title_mpls(BLURAY * bd) -+{ -+ if (bd && bd->title) { -+ return bd->title->pl; -+ } -+ return NULL; - } -diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h -index 70e6a84..0cd6047 100644 ---- a/src/libbluray/bluray.h -+++ b/src/libbluray/bluray.h -@@ -32,6 +32,7 @@ extern "C" { - */ - - #include -+#include "bdnav/clpi_data.h" - - #define TITLES_ALL 0 /**< all titles. */ - #define TITLES_FILTER_DUP_TITLE 0x01 /**< remove duplicate titles. */ -@@ -90,7 +91,7 @@ typedef struct { - - /* BD-J info (valid only if disc uses BD-J) */ - uint8_t bdj_detected; /* 1 if disc uses BD-J */ -- uint8_t bdj_supported; /* (deprecated) */ -+ uint8_t bdj_supported; /* 1 if BD-J support was compiled in */ - uint8_t libjvm_detected; /* 1 if usable Java VM was found */ - uint8_t bdj_handled; /* 1 if usable Java VM + libbluray.jar was found */ - -@@ -224,6 +225,7 @@ typedef struct bd_stream_info { - } BLURAY_STREAM_INFO; - - typedef struct bd_clip { -+ uint32_t idx; - uint32_t pkt_count; - uint8_t still_mode; - uint16_t still_time; /* seconds */ -@@ -274,6 +276,8 @@ typedef struct bd_title_info { - BLURAY_CLIP_INFO *clips; - BLURAY_TITLE_CHAPTER *chapters; - BLURAY_TITLE_MARK *marks; -+ -+ uint8_t mvc_base_view_r_flag; - } BLURAY_TITLE_INFO; - - /* -@@ -480,6 +484,16 @@ int bd_select_playlist(BLURAY *bd, uint32_t playlist); - */ - uint32_t bd_get_current_title(BLURAY *bd); - -+/** -+ * -+ * Find the byte position to specific time in 90Khz ticks -+ * -+ * @param bd BLURAY ojbect -+ * @param tick tick count -+ * @return byte position -+ */ -+int64_t bd_find_seek_point(BLURAY *bd, uint64_t tick); -+ - /** - * - * Read from currently selected title file, decrypt if possible -@@ -1039,7 +1053,6 @@ int bd_mouse_select(BLURAY *bd, int64_t pts, uint16_t x, uint16_t y); - - /* access to internal information */ - --struct clpi_cl; - /** - * - * Get copy of clip information for requested playitem. -@@ -1092,6 +1105,28 @@ void bd_stop_bdj(BLURAY *bd); // shutdown BD-J and clean up resources - */ - int bd_read_file(BLURAY *, const char *path, void **data, int64_t *size); - -+/** -+ * -+ * Get information about the clip -+ * -+ * @param bd BLURAY object -+ * @param clip clip index -+ * @param clip_start_time start of the clip (in the total title) (in 90khz) -+ * @param stream_start_time first pts in the clip (in 90khz) -+ * @param byte position of the clip (absolute) -+ * @param duration duration of the clip (in 90khz) -+ */ -+int bd_get_clip_infos(BLURAY *bd, unsigned clip, uint64_t *clip_start_time, uint64_t *stream_start_time, uint64_t *pos, uint64_t *duration); -+ -+/** -+ * Get the MPLS struct of the current title -+ * -+ * @param bd BLURAY object -+ * @return the MPLS struct -+ * -+ * Lifetime of the MPLS pointer is limited to the lifetime of the BD title -+ */ -+struct mpls_pl* bd_get_title_mpls(BLURAY * bd); - - #ifdef __cplusplus - } -diff --git a/src/libbluray/disc/disc.c b/src/libbluray/disc/disc.c -index be6a279..e96539a 100644 ---- a/src/libbluray/disc/disc.c -+++ b/src/libbluray/disc/disc.c -@@ -38,7 +38,9 @@ - #include - #include - -+#ifdef ENABLE_UDF - #include "udf_fs.h" -+#endif - - struct bd_disc { - BD_MUTEX ovl_mutex; /* protect access to overlay root */ -@@ -75,7 +77,7 @@ static BD_FILE_H *_bdrom_open_path(void *p, const char *rel_path) - return NULL; - } - -- fp = file_open(abs_path, "rb"); -+ fp = file_open(abs_path, "rbS"); - X_FREE(abs_path); - - return fp; -@@ -316,6 +318,7 @@ BD_DISC *disc_open(const char *device_path, - _set_paths(p, device_path); - - /* check if disc root directory can be opened. If not, treat it as device/image file. */ -+#ifdef ENABLE_UDF - BD_DIR_H *dp_img = device_path ? dir_open(device_path) : NULL; - if (!dp_img) { - void *udf = udf_image_open(device_path, p_fs ? p_fs->fs_handle : NULL, p_fs ? p_fs->read_blocks : NULL); -@@ -336,6 +339,7 @@ BD_DISC *disc_open(const char *device_path, - dir_close(dp_img); - BD_DEBUG(DBG_FILE, "%s does not seem to be image file or device node\n", device_path); - } -+#endif - - struct dec_dev dev = { p->fs_handle, p->pf_file_open_bdrom, p, (file_openFp)disc_open_path, p->disc_root, device_path }; - p->dec = dec_init(&dev, enc_info, keyfile_path, regs, psr_read, psr_write); diff --git a/packages/multimedia/libbluray/patches/libbluray-02-install-extra-MVC-headers.patch b/packages/multimedia/libbluray/patches/libbluray-02-install-extra-MVC-headers.patch deleted file mode 100644 index ca961f1cd..000000000 --- a/packages/multimedia/libbluray/patches/libbluray-02-install-extra-MVC-headers.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 316310d889d0bcffa299ef6a7fb5726847f2dd3a Mon Sep 17 00:00:00 2001 -From: MilhouseVH -Date: Wed, 20 Jun 2018 15:01:32 +0100 -Subject: [PATCH] add missing 3D MVC headers - ---- - Makefile.am | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/Makefile.am b/Makefile.am -index ff15527..00db9af 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -219,6 +219,14 @@ noinst_HEADERS = \ - jni/win32/jni_md.h \ - jni/darwin/jni_md.h - -+bdnavdir=$(pkgincludedir)/bdnav -+bdnav_HEADERS = \ -+ src/libbluray/bdnav/clpi_data.h -+ -+utildir=$(pkgincludedir)/util -+util_HEADERS = \ -+ src/util/attributes.h -+ - pkginclude_HEADERS = \ - src/file/filesystem.h \ - src/libbluray/bluray.h \ -@@ -226,6 +234,10 @@ pkginclude_HEADERS = \ - src/libbluray/keys.h \ - src/libbluray/player_settings.h \ - src/libbluray/bdnav/clpi_data.h \ -+ src/libbluray/bdnav/clpi_parse.h \ -+ src/libbluray/bdnav/mpls_parse.h \ -+ src/libbluray/bdnav/mpls_data.h \ -+ src/libbluray/bdnav/uo_mask_table.h \ - src/libbluray/bdnav/meta_data.h \ - src/libbluray/decoders/overlay.h \ - src/util/log_control.h --- -2.14.1 - diff --git a/packages/multimedia/libbluray/patches/libbluray-03-set-headless-false.patch b/packages/multimedia/libbluray/patches/libbluray-03-set-headless-false.patch deleted file mode 100644 index 8f465f701..000000000 --- a/packages/multimedia/libbluray/patches/libbluray-03-set-headless-false.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 29be28f8062baca2856742a8f7ad2594981cf128 Mon Sep 17 00:00:00 2001 -From: Peter Vicman -Date: Mon, 27 Sep 2021 19:59:20 +0200 -Subject: [PATCH] disable X11 check because it will not run in headless mode - -https://github.com/fandangos/libbluray/commit/47726b99922899bb9c4ea688356199f2068d156a -https://github.com/PojavLauncherTeam/PojavLauncher/issues/713#issuecomment-769816262 - ---- - src/libbluray/bdj/bdj.c | 2 ++ - 1 file changed, 2 insertions(+) - ---- a/src/libbluray/bdj/bdj.c -+++ b/src/libbluray/bdj/bdj.c -@@ -903,6 +903,8 @@ static int _create_jvm(void *jvm_lib, co - option[n++].optionString = str_dup ("-Xms256M"); - option[n++].optionString = str_dup ("-Xmx256M"); - option[n++].optionString = str_dup ("-Xss2048k"); -+ option[n++].optionString = str_dup ("-Djava.awt.headless=false"); -+ BD_DEBUG(DBG_CRIT | DBG_BDJ, "Disable X11 check\n"); - #ifdef HAVE_BDJ_J2ME - option[n++].optionString = str_printf("-Djava.home=%s", java_home); - option[n++].optionString = str_printf("-Xbootclasspath/a:%s/lib/xmlparser.jar", java_home); diff --git a/packages/multimedia/libdvdnav/package.mk b/packages/multimedia/libdvdnav/package.mk deleted file mode 100644 index 298fd5113..000000000 --- a/packages/multimedia/libdvdnav/package.mk +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libdvdnav" -PKG_VERSION="6.1.1-Next-Nexus-Alpha2-2" -PKG_SHA256="584f62a3896794408d46368e2ecf2c6217ab9c676ce85921b2d68b8961f49dfc" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/xbmc/libdvdnav" -PKG_URL="https://github.com/xbmc/${PKG_NAME}/archive/refs/tags/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libdvdread" -PKG_LONGDESC="libdvdnav is a library that allows easy use of sophisticated DVD navigation features such as DVD menus, multiangle playback and even interactive DVD games." -PKG_TOOLCHAIN="manual" diff --git a/packages/multimedia/libhdhomerun/package.mk b/packages/multimedia/libhdhomerun/package.mk deleted file mode 100644 index ad13a4659..000000000 --- a/packages/multimedia/libhdhomerun/package.mk +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="libhdhomerun" -PKG_VERSION="e8f29fd" # 20231109 -PKG_LICENSE="LGPL" -PKG_SITE="http://www.silicondust.com" -PKG_URL="https://github.com/Silicondust/libhdhomerun/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="The library provides functionality to setup the HDHomeRun." - -PKG_MAKE_OPTS_TARGET="CROSS_COMPILE=${TARGET_PREFIX}" - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp -PR hdhomerun_config ${INSTALL}/usr/bin - - mkdir -p ${INSTALL}/usr/lib/ - cp -PR libhdhomerun.so ${INSTALL}/usr/lib/ - - mkdir -p ${SYSROOT_PREFIX}/usr/include/hdhomerun - cp *.h ${SYSROOT_PREFIX}/usr/include/hdhomerun - - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp libhdhomerun.so ${SYSROOT_PREFIX}/usr/lib -} diff --git a/packages/network/libnfs/package.mk b/packages/network/libnfs/package.mk deleted file mode 100644 index 072b90166..000000000 --- a/packages/network/libnfs/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libnfs" -PKG_VERSION="5.0.2" -PKG_LICENSE="LGPL2.1+" -PKG_SITE="https://github.com/sahlberg/libnfs" -PKG_URL="https://github.com/sahlberg/libnfs/archive/libnfs-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A client library for accessing NFS shares over a network." -PKG_TOOLCHAIN="autotools" - -PKG_CONFIGURE_OPTS_TARGET="--disable-examples" - -pre_configure_target() { - export CFLAGS="${CFLAGS} -D_FILE_OFFSET_BITS=64" -} diff --git a/packages/network/libshairplay/package.mk b/packages/network/libshairplay/package.mk deleted file mode 100644 index 18aada23e..000000000 --- a/packages/network/libshairplay/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libshairplay" -PKG_VERSION="096b61ad14c90169f438e690d096e3fcf87e504e" -PKG_SHA256="7e2b013ffe75ea2f13fb12b1aa38b8e2e8b1899ac292d57f05d7b352a3a181cf" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/juhovh/shairplay" -PKG_URL="https://github.com/juhovh/shairplay/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain avahi" -PKG_LONGDESC="Apple airplay and raop protocol server" -PKG_TOOLCHAIN="autotools" - -pre_configure_target() { - CFLAGS="${CFLAGS} -I$(get_build_dir avahi)/avahi-compat-libdns_sd" -} - -post_makeinstall_target() { - mkdir -p ${INSTALL}/etc/shairplay - cp -P ../airport.key ${INSTALL}/etc/shairplay -} diff --git a/packages/network/libshairplay/patches/libshairplay-read_airportkey_from_etc.patch b/packages/network/libshairplay/patches/libshairplay-read_airportkey_from_etc.patch deleted file mode 100644 index d7ecbd0b7..000000000 --- a/packages/network/libshairplay/patches/libshairplay-read_airportkey_from_etc.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- shairplay-0.9.0.orig/src/shairplay.c -+++ shairplay-0.9.0/src/shairplay.c -@@ -313,9 +313,12 @@ main(int argc, char *argv[]) - - raop = raop_init_from_keyfile(10, &raop_cbs, "airport.key", NULL); - if (raop == NULL) { -- fprintf(stderr, "Could not initialize the RAOP service\n"); -- fprintf(stderr, "Please make sure the airport.key file is in the current directory.\n"); -- return -1; -+ raop = raop_init_from_keyfile(10, &raop_cbs, "/etc/shairplay/airport.key", NULL); -+ if (raop == NULL) { -+ fprintf(stderr, "Could not initialize the RAOP service\n"); -+ fprintf(stderr, "Please make sure the airport.key file is in the current directory.\n"); -+ return -1; -+ } - } - - if (strlen(options.password)) { - diff --git a/packages/network/sixpair/package.mk b/packages/network/sixpair/package.mk deleted file mode 100644 index 81aed2124..000000000 --- a/packages/network/sixpair/package.mk +++ /dev/null @@ -1,28 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert) -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="sixpair" -PKG_VERSION="23e6e087fe7f013128ce2e0e19a8f4b04fa7a6e8" -PKG_SHA256="9fc491060a85a01789a88e4dcb5271806ff6c7fbe62b58f828ac83ed1b4de1fe" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="http://www.pabr.org/sixlinux/" -PKG_URL="https://github.com/lakkatv/sixpair/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libusb libusb-compat" -PKG_SECTION="network" -PKG_SHORTDESC="Associate PS3 Sixaxis controller to system bluetoothd via USB" -PKG_LONGDESC="Associate PS3 Sixaxis controller to system bluetoothd via USB" -PKG_TOOLCHAIN="make" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" - -make_target() { - make sixpair LDLIBS=-lusb -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp sixpair ${INSTALL}/usr/bin -} - diff --git a/packages/python/graphics/Pillow/package.mk b/packages/python/graphics/Pillow/package.mk deleted file mode 100644 index 49470d7a7..000000000 --- a/packages/python/graphics/Pillow/package.mk +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="Pillow" -PKG_VERSION="10.1.0" -PKG_LICENSE="BSD" -PKG_SITE="https://python-pillow.org/" -PKG_URL="https://github.com/python-pillow/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain Python3 distutilscross:host zlib freetype libjpeg-turbo tiff" -PKG_LONGDESC="The Python Imaging Library adds image processing capabilities to your Python interpreter." -PKG_TOOLCHAIN="manual" - -pre_make_target() { - export PYTHONXCPREFIX="${SYSROOT_PREFIX}/usr" - export LDSHARED="${CC} -shared" -} - -make_target() { - python3 setup.py build --cross-compile -} - -makeinstall_target() { - python3 setup.py install --root=${INSTALL} --prefix=/usr -} - -post_makeinstall_target() { - python_remove_source - - rm -rf ${INSTALL}/usr/bin -} diff --git a/packages/python/graphics/Pillow/patches/Pillow-0001-crosscompiling.patch b/packages/python/graphics/Pillow/patches/Pillow-0001-crosscompiling.patch deleted file mode 100644 index ab662d7b2..000000000 --- a/packages/python/graphics/Pillow/patches/Pillow-0001-crosscompiling.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/setup.py b/setup.py -index 8eb0b3c..277e44a 100755 ---- a/setup.py -+++ b/setup.py -@@ -253,7 +253,7 @@ class pil_build_ext(build_ext): - ] + [('add-imaging-libs=', None, 'Add libs to _imaging build')] - - def initialize_options(self): -- self.disable_platform_guessing = None -+ self.disable_platform_guessing = True - self.add_imaging_libs = "" - build_ext.initialize_options(self) - for x in self.feature: diff --git a/packages/python/security/pycryptodome/package.mk b/packages/python/security/pycryptodome/package.mk deleted file mode 100644 index 0b3a91508..000000000 --- a/packages/python/security/pycryptodome/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="pycryptodome" -PKG_VERSION="3.19.0" -PKG_LICENSE="BSD" -PKG_SITE="https://pypi.org/project/pycryptodome" -PKG_URL="https://github.com/Legrandin/${PKG_NAME}/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain Python3 distutilscross:host" -PKG_LONGDESC="PyCryptodome is a self-contained Python package of low-level cryptographic primitives." -PKG_TOOLCHAIN="manual" - -pre_configure_target() { - cd ${PKG_BUILD} - rm -rf .${TARGET_NAME} - - export PYTHONXCPREFIX="${SYSROOT_PREFIX}/usr" - export LDSHARED="${CC} -shared" -} - -make_target() { - python3 setup.py build --cross-compile -} - -makeinstall_target() { - python3 setup.py install --root=${INSTALL} --prefix=/usr - - # Remove SelfTest bloat - find ${INSTALL} -type d -name SelfTest -exec rm -fr "{}" \; 2>/dev/null || true - find ${INSTALL} -name SOURCES.txt -exec sed -i "/\/SelfTest\//d;" "{}" \; - - # Create Cryptodome as an alternative namespace to Crypto (Kodi addons may use either) - ln -sf /usr/lib/${PKG_PYTHON_VERSION}/site-packages/Crypto ${INSTALL}/usr/lib/${PKG_PYTHON_VERSION}/site-packages/Cryptodome -} - -post_makeinstall_target() { - python_remove_source -} diff --git a/packages/python/system/dbussy/package.mk b/packages/python/system/dbussy/package.mk deleted file mode 100644 index bfacb9642..000000000 --- a/packages/python/system/dbussy/package.mk +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="dbussy" -PKG_VERSION="83462e58ebae6afb7d284415b53f1010d093de47" -PKG_LICENSE="LGPLv2.1+" -PKG_SITE="https://gitlab.com/ldo/dbussy" -PKG_URL="https://github.com/ldo/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain Python3 dbus" -PKG_LONGDESC="DBussy is a wrapper around libdbus, written in pure Python" -PKG_TOOLCHAIN="manual" - -make_target() { - python3 setup.py build -} - -makeinstall_target() { - python3 setup.py install --root=${INSTALL} --prefix=/usr -} - -post_makeinstall_target() { - python_remove_source -} diff --git a/packages/python/system/simplejson/package.mk b/packages/python/system/simplejson/package.mk deleted file mode 100644 index 63395b558..000000000 --- a/packages/python/system/simplejson/package.mk +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2017 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="simplejson" -PKG_VERSION="3.19.2" -PKG_LICENSE="OSS" -PKG_SITE="http://pypi.org/project/simplejson" -PKG_URL="https://files.pythonhosted.org/packages/source/${PKG_NAME:0:1}/${PKG_NAME}/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain Python3 distutilscross:host" -PKG_LONGDESC="A simple, fast, complete, correct and extensible JSON encoder and decoder for Python 2.5+." -PKG_TOOLCHAIN="manual" - -pre_make_target() { - export PYTHONXCPREFIX="${SYSROOT_PREFIX}/usr" -} - -make_target() { - python3 setup.py build --cross-compile -} - -makeinstall_target() { - python3 setup.py install --root=${INSTALL} --prefix=/usr -} - -post_makeinstall_target() { - python_remove_source - - rm -rf ${INSTALL}/usr/lib/python*/site-packages/*/tests -} diff --git a/packages/rust/cargo-c/package.mk b/packages/rust/cargo-c/package.mk deleted file mode 100644 index 739058e31..000000000 --- a/packages/rust/cargo-c/package.mk +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2023-present Team CoreELEC (https://coreelec.org) - -PKG_NAME="cargo-c" -PKG_VERSION="v0.9.17" -PKG_SHA256="95fcf50505516dfa6a941e666d1388810da9d7a9e1c623c09068faef5d50b3b9" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/lu-zero/cargo-c" -PKG_URL="https://github.com/lu-zero/cargo-c/archive/refs/tags/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="cargo:host" -PKG_LONGDESC="Use Cargo-c to build and install C-compatible libraries" -PKG_TOOLCHAIN="manual" - -make_host() { - cargo build --release --manifest-path ${PKG_BUILD}/Cargo.toml -} - -makeinstall_host() { - cargo install --profile release --path ${PKG_BUILD} -} diff --git a/packages/sysutils/autossh/package.mk b/packages/sysutils/autossh/package.mk deleted file mode 100644 index 7d1a46135..000000000 --- a/packages/sysutils/autossh/package.mk +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="autossh" -PKG_VERSION="1.4g" -PKG_SHA256="5fc3cee3361ca1615af862364c480593171d0c54ec156de79fc421e31ae21277" -PKG_LICENSE="GPL" -PKG_SITE="http://www.harding.motd.ca/" -PKG_URL="http://www.harding.motd.ca/autossh/autossh-${PKG_VERSION}.tgz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Automatically restart SSH sessions and tunnels." -PKG_TOOLCHAIN="autotools" - -PKG_CONFIGURE_OPTS_TARGET="ac_cv_func_malloc_0_nonnull=yes \ - ac_cv_func_realloc_0_nonnull=yes" - -pre_configure_target() { - export CFLAGS="${CFLAGS} -I." -} - -makeinstall_target() { - : -} diff --git a/packages/sysutils/bkeymaps/package.mk b/packages/sysutils/bkeymaps/package.mk deleted file mode 100644 index 1ba5ceb97..000000000 --- a/packages/sysutils/bkeymaps/package.mk +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="bkeymaps" -PKG_VERSION="1.13" -PKG_SHA256="59d41ddb0c7a92d8ac155a82ed2875b7880c8957ea4308afa633c8b81e5b8887" -PKG_LICENSE="GPL" -PKG_SITE="http://www.alpinelinux.org" -PKG_URL="http://dev.alpinelinux.org/archive/bkeymaps/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain busybox" -PKG_LONGDESC="bkeymaps: binary keyboard maps for busybox" - -make_target() { - : # nothing todo, we install manually -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/lib/keymaps - cp -PR bkeymaps/* ${INSTALL}/usr/lib/keymaps -} diff --git a/packages/sysutils/dstat/package.mk b/packages/sysutils/dstat/package.mk deleted file mode 100644 index 9c65e0fed..000000000 --- a/packages/sysutils/dstat/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="dstat" -PKG_VERSION="e428c7dc7137f81f8ca6bef8854b37a4ddd4f337" # 19 Jun 2020 -PKG_SHA256="3315f5cefc7cd4e968430baa19247fc32af36dd42c9ad3edf5962ae4f597013f" -PKG_LICENSE="GPL" -PKG_SITE="http://dag.wiee.rs/home-made/dstat" -PKG_URL="https://github.com/dstat-real/dstat/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain Python3" -PKG_LONGDESC="Versatile resource statistics tool." -PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-sysroot" - -post_unpack() { - rm ${PKG_BUILD}/Makefile -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp -p dstat ${INSTALL}/usr/bin -} diff --git a/packages/sysutils/efibootmgr/package.mk b/packages/sysutils/efibootmgr/package.mk deleted file mode 100644 index 43dcfce05..000000000 --- a/packages/sysutils/efibootmgr/package.mk +++ /dev/null @@ -1,24 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="efibootmgr" -PKG_VERSION="4a8d9c6" -PKG_ARCH="x86_64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/rhboot/efibootmgr" -PKG_URL="https://github.com/rhboot/efibootmgr/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain efivar pciutils zlib" -PKG_LONGDESC="Tool to modify UEFI Firmware Boot Manager Variables." - -make_target() { - export CFLAGS="${CFLAGS} -I${SYSROOT_PREFIX}/usr/include -I${SYSROOT_PREFIX}/usr/include/efivar -fgnu89-inline" - export LDFLAGS="${LDFLAGS} -L${SYSROOT_PREFIX}/usr/lib -ludev -ldl" - - make EFIDIR=BOOT EFI_LOADER=bootx64.efi PKG_CONFIG=true \ - LDLIBS="-lefiboot -lefivar" \ - efibootmgr -} - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/encfs/package.mk b/packages/sysutils/encfs/package.mk deleted file mode 100644 index cf730a7e1..000000000 --- a/packages/sysutils/encfs/package.mk +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="encfs" -PKG_VERSION="1.9.5" -PKG_SHA256="4709f05395ccbad6c0a5b40a4619d60aafe3473b1a79bafb3aa700b1f756fd63" -PKG_LICENSE="LGPL" -PKG_SITE="https://vgough.github.io/encfs/" -PKG_URL="https://github.com/vgough/encfs/releases/download/v${PKG_VERSION}/encfs-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain fuse openssl" -PKG_LONGDESC="A Encrypted Filesystem for FUSE." - -PKG_CMAKE_OPTS_TARGET="-DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES=${SYSROOT_PREFIX}/usr/include \ - -DBUILD_UNIT_TESTS=OFF" - -makeinstall_target() { - : -} diff --git a/packages/sysutils/fdupes/package.mk b/packages/sysutils/fdupes/package.mk deleted file mode 100644 index f97737f5e..000000000 --- a/packages/sysutils/fdupes/package.mk +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="fdupes" -PKG_VERSION="2.2.1" -PKG_LICENSE="GPL" -PKG_SITE="http://premium.caribe.net/~adrian2/fdupes.html" -PKG_URL="https://github.com/adrianlopezroche/fdupes/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A program for identifying or deleting duplicate files residing within specified directories." - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/fuse-exfat/package.mk b/packages/sysutils/fuse-exfat/package.mk deleted file mode 100644 index dcd1938d4..000000000 --- a/packages/sysutils/fuse-exfat/package.mk +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="fuse-exfat" -PKG_VERSION="0b41c6d" -PKG_LICENSE="GPLv2+" -PKG_SITE="https://github.com/relan/exfat" -PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain fuse" -PKG_LONGDESC="This project aims to provide a full-featured exFAT file system implementation for GNU/Linux other Unix-like systems as a FUSE module." -PKG_TOOLCHAIN="autotools" diff --git a/packages/sysutils/getscancodes/package.mk b/packages/sysutils/getscancodes/package.mk deleted file mode 100644 index 2a32d049a..000000000 --- a/packages/sysutils/getscancodes/package.mk +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="getscancodes" -PKG_VERSION="1.0" -PKG_SHA256="5f4e2ab22dc3890392ab8870fb79bbebdfd39b34dcd5bafcb51edee554855d34" -PKG_LICENSE="GPL" -PKG_SITE="http://keytouch.sourceforge.net" -PKG_URL="$SOURCEFORGE_SRC/keytouch/getscancodes-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Shows the scancode of the pressed or released key." - -pre_configure_target() { - PKG_MAKE_OPTS_TARGET="CC=${CC}" -} - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/hddtemp/db/hddtemp.db b/packages/sysutils/hddtemp/db/hddtemp.db deleted file mode 100644 index 4a061cfcb..000000000 --- a/packages/sysutils/hddtemp/db/hddtemp.db +++ /dev/null @@ -1,523 +0,0 @@ -# -# Insert a regular expression for support of the model or the serie of your hard drive. -# If you don't know what to put in the second field, put the number -# that appears most often for your brand :o) -# A value of zero meens that we know that the drive doesn't have -# a temperature sensor (you can set the unit to C or F). -# -############################################################################ -# The following list was found at (http://www.almico.com/forumharddisks.php) -# If your drive is in the list send me a mail. -# -# Manufacturer Model Size Notes -# FUJITSU FUJITSU MPF3102AH 10.0GB -# FUJITSU FUJITSU MPG3204AH E 20.0GB -# FUJITSU FUJITSU MPG3307AT 30.0GB -# FUJITSU FUJITSU MPG3409AH 40.0GB -# FUJITSU FUJITSU MPG3409AH EF 40.0GB -# HITACHI HITACHI_DK23CA-10 9.8GB -# HITACHI HITACHI_DK23CA-15 14.7GB -# SAMSUNG SAMSUNG SV3012H 29.4GB -# SEAGATE ST310210A 10.0GB -# SEAGATE ST310211A 9.8GB -# SEAGATE ST310215A 10.0GB -# SEAGATE ST315320A 14.9GB -# SEAGATE ST320410A 19.6GB -# SEAGATE ST320413A 19.6GB -# SEAGATE ST320420A 19.9GB -# SEAGATE ST330610A 29.3GB -# SEAGATE ST330620A 29.3GB -# SEAGATE ST330621A 29.3GB -# SEAGATE ST330630A 29.9GB -# SEAGATE ST340016A 39.1GB -# SEAGATE ST340810ACE 39.1GB -# SEAGATE ST380020ACE 78.2GB -# WESTERN DIGITAL WDC AC210200D 10.0GB -# WESTERN DIGITAL WDC AC29100D 8.9GB -# WESTERN DIGITAL WDC AC420400D 19.9GB -# WESTERN DIGITAL WDC WD102AA 10.0GB -# -################################################# - -######################################## -############# ExcelStor drives -######################################## -# "ExcelStor Technology CT215" ??? ? "ExcelStor CT215" -"ExcelStor Technology J3.0" 194 C "ExcelStor Technology 3xy (xy GB)" -"ExcelStor Technology J6.0" 194 C "ExcelStor Technology 6xy (xy GB)" -"ExcelStor Technology J680" 194 C "ExcelStor Technology J680 (80 GB)" -"ExcelStor Technology J860" 194 C "ExcelStor Technology J860 (60 GB)" -"ExcelStor Technology J880" 194 C "ExcelStor Technology J880 (80 GB)" - - - -######################################## -############# Fujitsu drives -######################################## -"FUJITSU MHM2100AT" 0 C "Fujitsu MHM2100AT" - -"FUJITSU MHN2150AT" 194 C "Fujitsu MHN2150AT" -"FUJITSU MHN2200AT" 194 C "Fujitsu MHN2200AT" -"FUJITSU MHN2300AT" 194 C "Fujitsu MHN2300AT" - -"FUJITSU MHR2020AT" 194 C "Fujitsu MHR2020AT" -"FUJITSU MHR2030AT" 194 C "Fujitsu MHR2030AT" - -"FUJITSU MHS2030AT" 194 C "Fujitsu MHS2030AT" -"FUJITSU MHS2040AT" 194 C "Fujitsu MHS2040AT" -"FUJITSU MHS2060AT" 194 C "Fujitsu MHS2060AT (Apple PowerBook G4)" - -"FUJITSU MHT2030AC" 194 C "Fujitsu Mobile 30GB, 2MB, 4200RPM (automotive)" - -"FUJITSU MHT2030AT" 194 C "Fujitsu MHT2030AT" -"FUJITSU MHT2040AH" 194 C "Fujitsu MHT2040AH" -"FUJITSU MHT2040AT" 194 C "Fujitsu MHT2040AT" -"FUJITSU MHT2060AH" 194 C "Fujitsu MHT2060AH" -"FUJITSU MHT2060AT" 194 C "Fujitsu MHT2060AT" -"FUJITSU MHT2080AH" 194 C "Fujitsu MHT2080AH" - -"FUJITSU MHU2100AT" 194 C "Fujitsu MHU2100AT 100GB, 8MB (4200RPM)" - -"FUJITSU MHV2100AH" 194 C "FUJITSU MHV2100AH" -"FUJITSU MHV2100AT" 194 C "FUJITSU MHV2100AT" -"FUJITSU MHV2080[AB]H" 194 C "FUJITSU MHV2080AH" - -"FUJITSU MPF3204AH" 194 C "Fujitsu MPF3204AH" - -"FUJITSU MPG3204AT.*" 194 C "Fujitsu MPG3204AT" -"FUJITSU MPG3307AT" 194 C "Fujitsu MPG3307AT" -"FUJITSU MPG3409AT.*" 194 C "Fujitsu MPG3409AT E" -"FUJITSU MPG3409AH.*" 194 C "Fujitsu MPG3409AH E" -"FUJITSU MPG3204AH" 194 C "Fujitsu MPG3204AH" -"FUJITSU MPG3102AT E" 194 C "FUJITSU MPG3102AT E" - - - -######################################## -############# Hitachi drives -######################################## -"HITACHI_DK13FA-40B" 194 C "Hitachi DK13FA-40B" -"HITACHI_DK228A-65" 0 C "Hitachi DK228A-65" -"HITACHI_DK23CA-(15|20|30|30B|75)" 194 C "Hitachi DK23CA series" -"HITACHI_DK23DA-[234]0" 194 C "Hitachi DK23DA series" -"HITACHI_DK23EA-[2346]0" 194 C "Hitachi DK23EA series" -"HITACHI_DK23EB-40" 194 C "Hitachi DK23EB series" -"HITACHI_DK23FA-[468]0" 194 C "Hitachi DK23FA series" -"HITACHI_DK23FB-[46]0" 194 C "Hitachi DK23FB series" - -"HDS722516VLAT[28]0" 194 C "Hitachi Deskstar 7K250 160GB 2/8MB cache" -"HDS722525VLAT80" 194 C "Hitachi Deskstar 7K250 200/250GB, 7200RPM, 8MB, Parallel-ATA" -"HDS722512VLAT80" 194 C "Hitachi Deskstar 7K250 80GB" -"HDS722540VLAT20" 194 C "Hitachi Deskstar 7K250, 40GB, 7200RPM, 2MB cache" -"HDS722580VLAT20" 194 C "Deskstar 7K250 60GB" -"HDS724040KLSA80" 194 C "Hitachi Deskstar 7K250 400GB, 7200RPM, 8MB, Serial-ATA" -"HDS728080PLAT20" 194 C "Hitachi Deskstar 7K80 80GB" - -"HDS722525VLSA80" 194 C "Hitachi Deskstar 7K250 250GB, 7200RPM, 8MB, SATA" -"HDS722516VLSA80" 194 C "Hitachi Deskstar 7K250 160GB 8Mo cache SATA" -"HDS722580VLSA80" 194 C "Hitachi Deskstar 7K250 80GB SATA" -"HDS728040PLAT20" 194 C "Hitachi Deskstar 7K80 40GB" - -"HDS724040KLAT80" 194 C "Hitachi Deskstar 7K400 400GB 8Mo cache PATA" - -"HDT7225(16|25)DLAT80" 194 C "Hitachi Deskstar T7K250 series, 7200RPM, 8MB, PATA" -"HDT722516DLA380 V43O" 194 C "Hitachi T7K250 SATA" -"HDT722525DLA380" 194 C "Hitachi Deskstar T7K250 250GB 8Mo cache SATAII" -"HDT725050VLA360" 194 C "Hitachi Deskstar T7K500 500GB, 7200RPM, 16MB, SATA II" - -"HTE721010G9AT00" 194 C "Hitachi Travelstar 100GB (7200RPM)" -"HTE726060M9AT00" 194 C "Hitachi Travelstar 60GB (7200RPM)" -"HTS424030M9AT00" 194 C "Hitachi Travelstar 30GB (4200RPM)" -"HTS424040M9AT00" 194 C "Hitachi Travelstar 4K40 40GB 2MB cache (4200RPM)" -"HTS541010G9SA00" 194 C "Hitachi Travelstar 100GB SATA" -"HTS541040G9AT00" 194 C "Hitachi Travelstar 40GB (5400RPM)" -"HTS541080G9AT00" 194 C "Hitachi Travelstar 80GB (5400RPM)" -"HTS548020M9AT00" 194 C "Hitachi Travelstar 20GB (5400RPM)" -"HTS548030M9AT00" 194 C "Hitachi Travelstar 30GB (5400RPM)" -"HTS548040M9AT00" 194 C "Hitachi Travelstar 40GB (5400RPM)" -"HTS548060M9AT00" 194 C "Hitachi Travelstar 60GB (5400RPM)" -"HTS548080M9AT00" 194 C "Hitachi Travelstar 80GB (5400RPM)" -"HTS721080G9AT00" 194 C "Hitachi Travelstar 7K100 80GB (7200RPM)" -"HTS726060M9AT00" 194 C "Hitachi Travelstar 60GB" - - -######################################## -############# IBM drives -######################################## - -# DJSA serie is using F0h command to report temperature and also have -# SMART capabilties but it was reported not to work. -# "DJSA-2(30|32|10|20|05)" 0 C "IBM Travelstar 20GN, 32GH, 30GT series" - -"IBM-DARA-212000" 0 C "IBM Travelstar 12GN" -"IBM-DTTA-35*" 0 C "IBM Deskstar 16GP serie" - -# according to specifications they do not seems to have sensor -# but I prefer waiting for a report -#"IBM-DTTA-37*" 0 C "IBM Deskstar 14GXP serie" - -"IBM-DJNA-35.*" 231 C "IBM Deskstar 25 GP serie" -"IBM-DJNA-37.*" 231 C "IBM Deskstar 22 GXP serie" -"IBM-DHEA-(34330|36480)" 0 C "IBM Deskstar 5 serie" -"IBM-DHEA-(34331|36481|38451)" 0 C "IBM Deskstar 8 serie" -"IBM-DPTA-37.*" 231 C "IBM Deskstar 34GXP serie" -"IBM-DPTA-35.*" 231 C "IBM Deskstar 37GP serie" -"IBM-DTLA-30[57]0[123467][05]" 194 C "IBM Deskstar 40GV & 75GXP series" -"IC25N0[1234]0ATCS04-0" 194 C "IBM Travelstar 40GN serie" -"IC25N0[24]0ATC[SX]05-0" 194 C "IBM Travelstar 40GNX serie" -"IC25N0(10|15|20|30)ATDA04-0" 194 C "IBM Travelstar 30GN serie" -"IC25N0[23468]0ATMR04*" 194 C "Hitachi Travelstar 80GN" -"IC25T048ATDA05-0" 194 C "IBM Travelstar 48GH serie" -"IC25T060ATC[SX]05-0" 194 C "IBM Travelstar 60GH serie" -"IC35L0[12346]0AVER07" 194 C "IBM Deskstar 60GXP serie" -"IC35L[01][02468]0AVV[AN]07*" 194 C "IBM Deskstar 120GXP serie" -"IC35L[01][23689]0AVV207*" 194 C "IBM Deskstar 180GXP serie" - -######################################## -############# Maxtor drives -######################################## -#"Maxtor 2B0[012][04568]H1" ??? C "Maxtor Fireball 541DX" -"Maxtor 2F0[234]0[LJ]0" 194 C "Maxtor Fireball 3" -# which one must I trust ? -#"Maxtor 4D040H2" 9 C "Maxtor DiamondMax D540X-4D" -#"Maxtor 4D040H2" 0 C "Maxtor 4D040H2" -#"Maxtor 4D080H4" 12 C "Maxtor DiamondMax D540X-4D" -#"Maxtor 4D060H3" 12 C "Maxtor DiamondMax D540X-4D" -#"Maxtor 4D080H4" 9 C "Maxtor DiamondMax D540X-4D" -"MAXTOR 4K0[468]0H[234]" 194 C "Maxtor DiamondMax D540X serie" -"MAXTOR 4K020H1" 194 C "Maxtor 4K020H1" -"Maxtor 4A300J0" 194 C "Maxtor MaxLine II 300GB 5400RPM" -"Maxtor 4[RA](25|16|12|08|06)0[LJ]0" 194 C "Maxtor DiamondMax 16" -"Maxtor 5(1024|1369|2049|2732|3073|4098)U(2|3|4|6|8)" 0 C "Maxtor DiamondMax Plus 40" -"Maxtor 5A250J0" 194 C "Maxtor MaXline II 250GB 5400RPM" -"Maxtor 5A300J0" 194 C "Maxtor 5A300J0" -"Maxtor 5T0[24]0H[24]" 0 C "Maxtor DiamondMax Plus 60" -"Maxtor 6E0[234]0L0" 194 C "Maxtor DiamondMax Plus 8" -"MAXTOR 6L0[2468]0[LJ][1234]" 194 C "Maxtor DiamondMax Plus D740X family" -"Maxtor 6V320F0" 194 C "Maxtor Diamond Max 10 SATA II 320 GB" -"Maxtor 6Y(06|08|12|16|20|25)0[LPM]0" 194 C "Maxtor DiamondMax Plus 9" -"Maxtor 7L300[RS]0" 194 C "Maxtor 7L300R0 MaxLine+III 300GB 7200rpm" -"Maxtor 7Y250[PM]0" 194 C "Maxtor MaXLine Plus II 250GB 7200RPM" -"Maxtor 94098U8" 11 C "Maxtor DiamondMax 40 94098U8" - -#"Maxtor 6(B|L)(08|12|16|20|25|30)0[RSPM]0" 194 C "Maxtor DiamondMax Plus 10" -"Maxtor 6B080M0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATA" -"Maxtor 6B120M0" 194 C "Maxtor DiamondMax 10 120GB 8MB SATA" -"Maxtor 6B160M0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATA" -"Maxtor 6B160P0" 194 C "Maxtor DiamondMax 10 160GB 8MB ATA/133" -"Maxtor 6B200M0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATA" -"Maxtor 6B200P0" 194 C "Maxtor DiamondMax 10 200GB 8MB ATA/133" -"Maxtor 6B250R0" 194 C "Maxtor DiamondMax 10 250GB 16MB ATA/133" -"Maxtor 6B250S0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATA" -"Maxtor 6B300R0" 194 C "Maxtor DiamondMax 10 300GB 16MB ATA/133" -"Maxtor 6B300S0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATA" -"Maxtor 6L080L0" 194 C "Maxtor DiamondMax 10 80GB 2MB ATA/133 RoHS" -"Maxtor 6L080M0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATA RoHS" -"Maxtor 6L080P0" 194 C "Maxtor DiamondMax 10 80GB 8MB ATA/133 RoHS" -"Maxtor 6L120M0" 194 C "Maxtor DiamondMax 10 120GB 8MB SATA RoHS" -"Maxtor 6L120P0" 194 C "Maxtor DiamondMax 10 120GB 8MB ATA/133 RoHS" -"Maxtor 6L160M0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATA RoHS" -"Maxtor 6L160P0" 194 C "Maxtor DiamondMax 10 160GB 8MB ATA/133 RoHS" -"Maxtor 6L200M0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATA RoHS" -"Maxtor 6L200P0" 194 C "Maxtor DiamondMax 10 200GB 8MB ATA/133 RoHS" -"Maxtor 6L250R0" 194 C "Maxtor DiamondMax 10 250GB 16MB ATA/133 RoHS" -"Maxtor 6L250S0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATA RoHS" -"Maxtor 6L300R0" 194 C "Maxtor DiamondMax 10 300GB 16MB ATA/133 RoHS" -"Maxtor 6L300S0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATA RoHS" -"Maxtor 6V080E0" 194 C "Maxtor DiamondMax 10 80GB 8MB SATAII RoHS" -"Maxtor 6V160E0" 194 C "Maxtor DiamondMax 10 160GB 8MB SATAII RoHS" -"Maxtor 6V200E0" 194 C "Maxtor DiamondMax 10 200GB 8MB SATAII RoHS" -"Maxtor 6V250F0" 194 C "Maxtor DiamondMax 10 250GB 16MB SATAII RoHS" -"Maxtor 6V300F0" 194 C "Maxtor DiamondMax 10 300GB 16MB SATAII RoHS" - - - -######################################## -############# Quantum drives -######################################## -"QUANTUM FIREBALLP AS40.0" 0 C "Quantum Fireball AS40" -"QUANTUM FIREBALL CX10.2A" 0 C "Quantum Fireball CX10.2A" -#"QUANTUM FIREBALLlct10 20" 4 C "Quantum Fireball CT10 20GB" -# I suspect the QUANTUM FIREBALL_TM2110A to have a sensor in field 9... -# "QUANTUM FIREBALL_TM2110A" 9 C "Quantum Fireball TM2110A" - - - -######################################## -############# Samsung drives -######################################## -# somenone reported a problem with the SP8004H which reports a temperature -# 10C below the ambient temperature -"SAMSUNG HA(200|250)JC" 194 C "Samsung SpinPoint V120CE series" -"SAMSUNG HD160JJ" 194 C "Samsung 160GB, 7200RPM, 8MB cache, SATA" -"SAMSUNG HD160JJ/P" 194 C "Samsung SpinPoint P80 SD 160GB (7200RPM, 8MB cache)" -"SAMSUNG HD[30|32|40][01]L[DJ]" 194 C "Samsung SpinPoint T133 series (300-400MB)" -"SAMSUNG HD250KD" 194 C "Samsung SpinPoint T133 series (250 MB PATA)" -"SAMSUNG HD321KJ" 194 C "Samsung Spinpoint T166 (7200RPM, 16MB cache) - SATA" -"SAMSUNG HD501LJ" 194 C "Samsung HD501LJ" -"SAMSUNG MP0(302|402|603|804)H" 194 C "Samsung SpinPoint M40 2.5inch" -"SAMSUNG SW0434A" 0 C "Samsung SW0434A" -"SAMSUNG SP(2001|4002|6003|8004|40A2)H" 194 C "Samsung SpinPoint P40 serie" -"SAMSUNG SP(0612|0802|1203|1604|0812|1213|1614)N" 194 C "Samsung SpinPoint P80 serie" -"SAMSUNG SP(0612|0802|1203|1604|0812|1213|1614)C" 194 C "Samsung SpinPoint P80 series - SATA" -"SAMSUNG SP0411N" 194 C "Samsung SpinPoint PL40 serie" -"SAMSUNG SP0822N" 194 C "Samsung SP0822N" -"SAMSUNG SP(0812|1213|1614)C" 194 C "Samsung Spinpoint 160G SATA" -"SAMSUNG SP2[05]14N" 194 C "Samsung SpinPoint P120 series (7200RPM, 8MB cache)" -"SAMSUNG SP2[05]04C" 194 C "Samsung SpinPoint P120 series - SATA" -"SAMSUNG SV0432A" 0 C "Samsung SV0432A" -"SAMSUNG SV3002H" 0 C "Samsung SpinPoint V30 serie" -"SAMSUNG SV(2001|4002|4012|6003|8004)H" 194 C "Samsung SpinPoint V40 serie" -#"SAMSUNG SV(0221|0602|0813|1204)H" 9 C "Samsung SpinPoint V60 serie" -#"SAMSUNG SV1204H" 194 C "Samsung 120G" -"SAMSUNG SV(0401|0802|1203|1604)N" 194 C "Samsung SpinPoint V80 serie" -"SAMSUNG SV4012H" 194 C "Samsung 40GB, 5400RPM, 2MB cache" - -######################################## -############# Seagate drives -######################################## -"Seagate Technology 1275MB - ST31276A" 0 C "Seagate ST31276A" -"ST3412A" 0 C "Seagate ST3412A" -"ST38641A" 0 C "Seagate ST38641A" -"ST310014A" 194 C "Seagate ST310014A" -"ST310210A" 0 C "Seagate ST310210A" -"ST310211A" 194 C "Seagate ST310211A" -"ST310220A" 0 C "Seagate ST310220A" -# SEAGATE ST313021A 13.0GB -"ST313021A" 0 C "Seagate U8 ST313021A" -"ST310240A" 0 C "Seagate Medalist 10240 Ultra ATA-3" -"ST315320A" 194 C "Seagate ST315320A" -"ST320423A" 0 C "Seagate U10 20423, Ultra ATA/66" -"ST320011A" 194 C "Seagate ST320011A" -"ST320014A" 194 C "Seagate ST320014A (5400 rpm, 20Gb)" -"ST320410A" 194 C "Seagate ST320410A" -"ST320413A" 194 C "Seagate ST320413A" -"ST320414A" 194 C "Seagate ST320414A" -"ST320420A" 194 C "Seagate Barracuda II ST320420A" -"ST330013A" 194 C "Seagate ST330013A Barracuda ATA V 30GB, 7200 rpm" -"ST330620A" 194 C "Seagate ST330620A" -"ST330621A" 194 C "Seagate ST330621A" -"ST330630A" 194 C "Seagate Barracuda ST330630A" -"ST340014A" 194 C "Seagate Barracuda 7200.7 40Gb" -"ST340015A" 194 C "Seagate Barracuda 5400.1 40GB" -"ST340016A" 194 C "Seagate ST340016A" -"ST340810A" 194 C "Seagate U Series 40810 (40Gb, Ultra ATA/100, 5400 rpm)" -"ST340823A" 194 C "Seagate U Series 5 40823" -"ST340824A" 194 C "Seagate Barracuda III" -"ST360015A" 194 C "Seagate Barracuda V ST360015A" -"ST360020A" 194 C "Seagate U Series 60020" -"ST360021A" 194 C "Seagate Barracuda IV ST360021A" -"ST380011A" 194 C "Seagate Barracuda 7200.7 80GB" -"ST380012A" 194 C "Seagate ST380012A 80GB" -"ST380013A" 194 C "Seagate Barracuda 7200.7 80GB" -"ST380013AS" 194 C "Seagate Barracuda 7200.7 80GB (Serial ATA)" -"ST380020A" 194 C "Seagate U Series 80020 (80Gb, Ultra ATA/100, 5400 rpm)" -"ST380021A" 194 C "Seagate Barracuda IV ST380021A" -"ST380022A" 194 C "Seagate Barracuda U7 80022, Ultra ATA/100" -"ST380023A" 194 C "Seagate Barracuda V ST380023A" -"ST380817AS" 194 C "Seagate Barracuda 7200.7 80GB - SATA" -"ST39111A" 194 C "Seagate ST39111A (from Sun Ultra)" -"ST3120020A" 194 C "Seagate ST3120020A" -"ST3120022A" 194 C "Seagate Baraccuda 7200.7 120GB" -"ST3120023A" 194 C "Seagate Barracuda V ST3120023A" -"ST3120024A" 194 C "Seagate Barracuda V ST3120024A" -"ST3120025ACE" 194 C "Seagate Barracuda V ST3120025ACE" -"ST3120026A" 194 C "Seagate Barracuda V ST3120026A" -"ST3160021A" 194 C "Seagate Barracuda 7200.7 - ST3160021A" -"ST3160023(A|AS)" 194 C "Seagate Barracuda V ST3160023A and AS (160Gb, ATA100 or Serial ATA)" -"ST3160827AS" 194 C "Seagate Barracuda 7200.7 160GB (Serial ATA)" -"ST3200021A" 194 C "Seagate Barracuda 7200.7 Plus 200GB" -"ST3200822(A|AS)" 194 C "Seagate Barracuda 7200.7 Plus 200GB (PATA or SATA)" -"ST3200826A" 194 C "Seagate Barracuda 7200.8 200Gb" -"ST3250623A" 194 C "Seagate Barracuda 7200.16 250GB" -"ST3250823A" 194 C "Seagate Barracuda 7200.8 250GB" -"ST3250823A" 194 C "Seagate Barracuda 7200.7 Plus 250GB" -"ST3250823NS" 194 C "Seagate NL35 SATA (RAID-Edition) 7200 250GB" -"ST3300831A" 194 C "Seagate 300GB ST3300831A" -"ST3400832A" 194 C "Seagate Barracuda 7200.8 Plus 400GB" -"ST3400633(A|AS)" 194 C "Seagate Barracuda 7200.7 400 GB" -"ST3500630NS" 194 C "Seagate" -"ST3400632NS" 194 C "Seagate" -"ST3320620AS" 194 C "Seagate Barracuda 7200.7 320 GB" -"ST3500630AS" 194 C "Seagate Barracuda 7200.7 500 GB" -"ST3802110A" 194 C "Seagate Barracuda 7200.9 80 GB" -"ST910021A" 194 C "Seagate Momentus 7200.1 100GB" -"ST910082[35]A" 194 C "Seagate Momentus 5400.2 100GB" -"ST9120821A" 194 C "Seagate Momentus 5400.2 120GB" -"ST94019A" 194 C "Seagate ST94019A" -"ST94813A" 194 C "Seagate Momentus 5400.2 40GB" -"ST94[08]11A" 194 C "Seagate ST94011A" -"ST960821A" 194 C "Seagate ST960821A" -"ST960822A" 194 C "Seagate Momentus 5400.2 60GB" -"ST96812AS" 194 C "Seagate Momentus 5400.2 60GB SATA" -"ST9808211A" 194 C "Seagate Momentus 5400.2 80GB" - -######################################## -############# TOSHIBA Laptops -######################################## -"MK4313MAT" 220 C "Toshiba MK4313MAT" -"TOSHIBA MK1032GAX" 194 C "Toshiba MK1032GAX" -"TOSHIBA MK1517GAP" 0 C "Toshiba MK1517GAP" -"TOSHIBA MK2018GAS" 226 F "Toshiba MK2018GAS" -"TOSHIBA MK2023GAS" 194 C "Toshiba MK2023GAS" - -"TOSHIBA MK3017GAP" 0 C "Toshiba MK3017GAP" -"TOSHIBA MK3021GAS" 194 C "Toshiba MK3021GAS" -"TOSHIBA MK3025GAS" 194 C "Toshiba MK3025GAS" - -#"TOSHIBA MK4019GAX" 222 C "Toshiba MK4019GAX" -"TOSHIBA MK4021GAS" 194 C "Toshiba MK4021GAS" -"TOSHIBA MK4025GAS" 194 C "Toshiba MK4025GAS 40 Go" -"TOSHIBA MK4026GAS" 194 C "Toshiba MK4026GAS 40 Go" -"TOSHIBA MK4032GAX" 194 C "Toshiba MK4032GAX" - -"TOSHIBA MK6021GAS" 194 C "Toshiba MK6021GAS" -"TOSHIBA MK6022GAX" 194 C "Toshiba MK6022GAX" -"TOSHIBA MK6025GAS" 194 C "Toshiba MK6025GAS" -"TOSHIBA MK6026GAX" 194 C "Toshiba MK6026GAX" -"TOSHIBA MK8025GAS" 194 C "Toshiba MK8025GAS" -"TOSHIBA MK8026GAX" 194 C "Toshiba MK8026GAX" - -"MK4025GAS" 194 C "Toshiba MK4025GAS" - - -######################################## -############# Western Digital drives -######################################## -# WDC AC310100B and WDC AC2850F are reported not working -# no more informations were given -"WDC AC22000L" 0 C "Western Digital Caviar AC22000" -"WDC AC420400D" 231 C "Western Digital Caviar AC420400D" -"WDC AC418000D" 231 C "Western Digital AC418000D" -"WDC WD135BA" 231 C "Western Digital WD135BA" - -"WDC WD100EB-00BHF0" 0 C "Western Digital 100EB-00BHF0" -"WDC WD200BB-00AUA1" 0 C "Western Digital Caviar WD200BB" -#"WDC WD200BB-60DGA0" 0 C "Western Digital Caviar WD200BB" -"WDC WD300BB-00CAA0" 0 C "Western Digital WD300BB" -"WDC WD360GD-00FNA0" 194 C "Western Digital SATA Raptor 36.7GB" -"WDC WD400BB-00CAA0" 0 C "Western Digital 400BB-00CAA0" -"WDC WD400BB-00J[KH]A0" 194 C "Western Digital Caviar WD400BB" -"WDC WD400BB-23JHC0" 194 C "Western Digital 23JHC0" -#"WDC WD400BB-00GFA0" 0 C "" -"WDC WD400BB-55HEA0" 194 C "Western Digital Caviar WD400BB" -"WDC WD400BB-(18CA|00DE)A0" 0 C "Western Digital Caviar WD400BB" -"WDC WD400BB-75FJA1" 194 C "Western Digital Caviar WD400BB" -"WDC WD400EB-00CPF0" 0 C "Western Digital 400EB-00CPF0" -"WDC WD400JB-00(JJ|FM|FS)A0" 194 C "Western Digital Caviar 40GB Special Edition 8MB" -"WDC WD400JB-00ETA0" 194 C "Western Digital 400JB-00ETA0" -"WDC WD400JB-00JJC0" 194 C "Western Digital 400JB-00JJC0 40GB" -"WDC WD400LB-00DNA0" 194 C "Western Digital 400LB-00DNA0" -"WDC WD400UE-22HCT0" 194 C "Western Digital 40GB Notebook HDD" -"WDC WD400VE-75HDT1" 194 C "Western Digital Scorpio 40GB" -"WDC WD600BB-32BSA0" 0 C "Western Digital 600BB-32BSA0" -"WDC WD600JB-00ETA0" 194 C "Western Digital 600JB-00ETA0" -"WDC WD600LB-00DNA0" 194 C "Western Digital 60GB" -"WDC WD600VE-75HDT0" 194 C "Western Digital 600VE-75HDT0" -"WDC WD600VE-00HDT0" 194 C "Western Digital 600VE-00HDT0" -"WDC WD740GD-00FL21.0" 194 C "Western Digital SATA Raptor" -"WDC WD740GD-([05]0FL[AC]0|75FLA1)" 194 C "Western Digital SATA Raptor 74GB 8MB" -"WDC WD800BB-00CAA1" 0 C "Western Digital WD800BB-00CAA1" -"WDC WD800BB-(00|22)DKA0" 194 C "Western Digital WD800BB 80 Go" -"WDC WD800BB-32CCB0" 194 C "Western Digital 800BB-32CCB0" -"WDC WD800BB-55HEA0" 194 C "Western Digital 800BB-55HEA0" -"WDC WD800BB-00JHA0" 194 C "Western Digital 800BB-00JHA0" -"WDC WD800BB-00JKA0" 194 C "Western Digital 800BB-00JKA0" -"WDC WD800BB-55JKA0" 194 C "Western Digital 800BB-55JKA0" -"WDC WD800BB-75FRA0" 194 C "Western Digital Caviar WD800BB" -"WDC WD800JB-00CRA1" 0 C "Western Digital Caviar WD800JB" -"WDC WD800JB-00(ET|FM|FS)A0" 194 C "Western Digital Caviar 80GB Special Edition 8MB" -"WDC WD800JB-00JJ[AC]0" 194 C "Western Digital WD800JB" -"WDC WD800JD-(00|55)(HK|JR)A0" 194 C "Western Digital SATA 80GB, 8MB Cache" -"WDC WD800JD-00(HK|JN)A0" 194 C "Western Digital SATA 80GB, 8MB Cache" -"WDC WD800LB-(00|55)DNA0" 194 C "Western Digital Caviar WD800LB 80 Go ATA-100" -"WDC WD800VE-07HDT0" 194 C "Western Digital 800VE-07HDT0" -"WDC WD1200BB-00(FTA|GUA)0" 194 C "Western Digital Caviar EIDE 2MB Cache" -"WDC WD1200JB-00(EV|FU|GV)A0" 194 C "Western Digital Caviar 120GB Special Edition 8MB" -"WDC WD1200JB-22GVA0" 194 C "Western Digital Caviar 120GB" -"WDC WD1200JD-00(GBB|HBC)0" 194 C "Western Digital WD1200JD" -"WDC WD1200LB-55EDA0" 194 C "Western Digital WD1220LB" -"WDC WD1200SB-01KB[AC]0" 194 C "Western Digital Caviar RE (Raid Edition) 120 GB" -"WDC WD1600BB-00DWA0" 194 C "Western Digital Caviar WD1600BB" -"WDC WD1600JB-(00EV|00FU|00GV|22GV|75GV)A0" 194 C "Western Digital Caviar 160GB Special Edition 8MB" -"WDC WD2000BB-00FTA0" 194 C "Western Digital WD2000BB" -"WDC WD2000JB-(00EV|32EV|34EV|00FU|00GV|55GV|98GV|00KF)A0" 194 C "Western Digital Caviar 200GB Special Edition 8MB" -"WDC WD2000JB-00GVC0" 194 C "Western Digital WD2000JB" -"WDC WD2000JS-00MHB1" 194 C "Western Digital SATA 200GB" -"WDC WD2500JB-(00RE|00EV|00FU|32FU|00GV|55GV)A0" 194 C "Western Digital Caviar 250GB Special Edition 8MB" -"WDC WD2500JB-00GVC0" 194 C "Western Digital 250GB" -"WDC WD2500JD-(00G|32H)BB0" 194 C "Western Digital SATA Caviar 250GB Special Edition 8MB" -"WDC WD2500JD-40HBC0" 194 C "Western Digital WD2500JD-40HBC0" -"WDC WD2500PB-98FBA0" 194 C "Western Digital Caviar 250GB Special Edition 8MB" -"WDC WD2500PD-00FZB1" 194 C "Western Digital WD2500PD-00FZB1" -"WDC WD2500SD-01KCB0" 194 C "Western Digital Caviar RE 250GB 8MB" -"WDC WD3000JB-00KFA0" 194 C "Western Digital WD3000JB" -"WDC WD3200JB-00KFA0" 194 C "Western Digital Caviar 320GB 8MB" -"WDC WD4000KD-00NAB0" 194 C "Western Digital Caviar SE16 400GB 16MB" -"WDC WD4000YR-01PLB0" 194 C "Western Digital Caviar RE2 400GB 16MB" -"WD4000YS-01MPB0" 194 C "Western Digital RE2 7200 SATA II 400 GB" - -# not sure for next -# "WDC WD1200JB-00CRA1" 9 C "Western Digital 1200JB-00CRA1" -# "WDC WD273BA" 9 C "Western Digital WD273BA" - - - - -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## - -"ST3750640AS" 194 C "Seagate Barracuda 7200.10 SATA 750GB" -"ST3750840AS" 194 C "Seagate Barracuda 7200.10 SATA 750GB" -"ST3500630AS" 194 C "Seagate Barracuda 7200.10 SATA 500GB" -"ST3500830AS" 194 C "Seagate Barracuda 7200.10 SATA 500GB" -"ST3400620AS" 194 C "Seagate Barracuda 7200.10 SATA 400GB" -"ST3400620A" 194 C "Seagate Barracuda 7200.10 400GB" -"ST3400820AS" 194 C "Seagate Barracuda 7200.10 SATA 400GB" -"ST3320620AS" 194 C "Seagate Barracuda 7200.10 SATA 320GB" -"ST3320820AS" 194 C "Seagate Barracuda 7200.10 SATA 320GB" -"ST3300620AS" 194 C "Seagate Barracuda 7200.10 SATA 300GB" -"ST3300820AS" 194 C "Seagate Barracuda 7200.10 SATA 300GB" -"ST3250620AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB" -"ST3250820AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB" -"ST3250410AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB" -"ST3250310AS" 194 C "Seagate Barracuda 7200.10 SATA 250GB" -"ST3200820AS" 194 C "Seagate Barracuda 7200.10 SATA 200GB" -"ST3160815AS" 194 C "Seagate Barracuda 7200.10 SATA 160GB" -"ST3160215AS" 194 C "Seagate Barracuda 7200.10 SATA 160GB" -"ST3120815AS" 194 C "Seagate Barracuda 7200.10 SATA 120GB" -"ST3120215AS" 194 C "Seagate Barracuda 7200.10 SATA 120GB" -"ST380815AS" 194 C "Seagate Barracuda 7200.10 SATA 80GB" -"ST380215AS" 194 C "Seagate Barracuda 7200.10 SATA 80GB" -"ST340815AS" 194 C "Seagate Barracuda 7200.10 SATA 40GB" -"ST340215AS" 194 C "Seagate Barracuda 7200.10 SATA 40GB" -"ST3300622AS" 194 C "Seagate Barracuda 7200.9 SATA2.5 300GB" -"ST3300831A" 194 C "Seagate Barracuda 7200.8 PATA 300GB" - -"Maxtor 7(L|V)250(F|R|S)0" 194 C "Maxtor MaXLine III 250GB 7200rpm" -"Maxtor 7(L|V)300(F|R|S)0" 194 C "Maxtor MaXLine III 300GB 7200rpm" -"MAXTOR STM3320620AS" 194 C "" - -"WDC WD1500ADFD-00NLR1" 194 C "Western Digital Raptor 150GB" -"WDC WD1600JS-00NCB1" 194 C "Western Digital Caviar 1600JS 160GB Sata" -"WDC WD1600SD-01KCC0" 194 C "Western Digital Caviar RE Serial ATA series" -"WDC WD2500JD-57HBC0" 194 C "Western Digital Caviar SE (Serial ATA) 250 GB" -"WDC WD2500JS" 194 C "Western Digital WD2500JS" -"WDC WD2500JS-41MVB1" 194 C "Western Digital SATAII Caviar 250GB Special Edition 8MB" -"WDC WD2500JD-00HBB0" 194 C "Western Digital SATA 250GB" -"WDC WD2500KS-00MJB0" 194 C "Western Digital SATA-II Caviar 250GB Special Edition 16MB" -"WDC WD3000JS-00PDB0" 194 C "Western Digital WD3000JS" -"WDC WD3200KS-00PFB0" 194 C "" -"WDC WD3200JD-22KLB0" 194 C "Western Digital Caviar SE 320GB 8MB" diff --git a/packages/sysutils/hddtemp/package.mk b/packages/sysutils/hddtemp/package.mk deleted file mode 100644 index 34df6ffd7..000000000 --- a/packages/sysutils/hddtemp/package.mk +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="hddtemp" -PKG_VERSION="e16aed6" -PKG_SHA256="5d5af74ba7449b6e56a8f872a0e10d654a512ed65d62beaef1575b0c1826d9f3" -PKG_LICENSE="GPL" -PKG_SITE="https://savannah.nongnu.org/projects/hddtemp" -PKG_URL="https://github.com/guzu/hddtemp/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A utility that gives you the temperature of your hard drive by reading S.M.A.R.T.." - -PKG_CONFIGURE_OPTS_TARGET="--with-db-path=/storage/.kodi/addons/virtual.system-tools/data/hddtemp.db" - -post_unpack() { - cp ${PKG_DIR}/db/* ${PKG_BUILD} -} - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/hid_mapper/package.mk b/packages/sysutils/hid_mapper/package.mk deleted file mode 100644 index 3e3ae4642..000000000 --- a/packages/sysutils/hid_mapper/package.mk +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="hid_mapper" -PKG_VERSION="2.1.0" -PKG_SHA256="e740c1f3a99f260f015ea7d415f0419e27171356e2eddff1781fc5d936cc86cd" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/s-leroux/hid_mapper" -PKG_URL="https://github.com/s-leroux/hid_mapper/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A Generic HID mapper." - -makeinstall_target() { - : # nope -} diff --git a/packages/sysutils/hid_mapper/patches/hid_mapper-01_crosscompile.patch b/packages/sysutils/hid_mapper/patches/hid_mapper-01_crosscompile.patch deleted file mode 100644 index 9843d7b94..000000000 --- a/packages/sysutils/hid_mapper/patches/hid_mapper-01_crosscompile.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/Makefile b/Makefile -index f98abbd..9d1d524 100755 ---- a/Makefile -+++ b/Makefile -@@ -9,13 +9,13 @@ EXEC=hid_mapper - VERSION=1.0 - - all: $(OBJS) -- g++ $(LDFLAGS) $(OBJS) -o $(EXEC) -+ ${CXX} $(LDFLAGS) $(OBJS) -o $(EXEC) - - %.o: %.cpp -- g++ -c $(CPPFLAGS) $< -+ ${CXX} -c $(CPPFLAGS) $< - - %.o: %.c -- gcc -c $(CFLAGS) $< -+ ${CC} -c $(CFLAGS) $< - - deb: - cp $(EXEC) package/usr/bin diff --git a/packages/sysutils/hid_mapper/patches/hid_mapper-02_include-sys-time.patch b/packages/sysutils/hid_mapper/patches/hid_mapper-02_include-sys-time.patch deleted file mode 100644 index 2dba3d84a..000000000 --- a/packages/sysutils/hid_mapper/patches/hid_mapper-02_include-sys-time.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/hid.c b/hid.c -index 2830b58..a652222 100644 ---- a/hid.c -+++ b/hid.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #define SYSFS_HIDRAW_CLASS_PATH "/sys/class/hidraw" - diff --git a/packages/sysutils/hid_mapper/patches/hid_mapper-03_fix-parser.patch b/packages/sysutils/hid_mapper/patches/hid_mapper-03_fix-parser.patch deleted file mode 100644 index c2bb51c12..000000000 --- a/packages/sysutils/hid_mapper/patches/hid_mapper-03_fix-parser.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/MapReader.cpp -+++ b/MapReader.cpp -@@ -106,7 +106,10 @@ - i = 0; - - while(i -Date: Thu, 8 Oct 2015 19:53:47 +0200 -Subject: [PATCH] fbio.cpp, improxy.cpp, fbterm.cpp: fix musl compile -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -- add missing include, fixes: - - fbio.cpp:33:8: error: ‘fd_set’ does not name a type - static fd_set fds; - - improxy.cpp:439:3: error: ‘fd_set’ was not declared in this scope - -- add missing WAIT_ANY define, fixes: - - fbterm.cpp: In member function ‘void FbTerm::processSignal(u32)’: - fbterm.cpp:212:22: error: ‘WAIT_ANY’ was not declared in this scope - s32 pid = waitpid(WAIT_ANY, 0, WNOHANG); - -Signed-off-by: Peter Seiderer ---- - src/fbio.cpp | 1 + - src/fbterm.cpp | 4 ++++ - src/improxy.cpp | 1 + - 3 files changed, 6 insertions(+) - -diff --git a/src/fbio.cpp b/src/fbio.cpp -index e5afc44..88c632c 100644 ---- a/src/fbio.cpp -+++ b/src/fbio.cpp -@@ -30,6 +30,7 @@ - #define NR_EPOLL_FDS 10 - s32 epollFd; - #else -+#include - static fd_set fds; - static u32 maxfd = 0; - #endif -diff --git a/src/fbterm.cpp b/src/fbterm.cpp -index 38d4014..60288e4 100644 ---- a/src/fbterm.cpp -+++ b/src/fbterm.cpp -@@ -37,6 +37,10 @@ - #include "input_key.h" - #include "mouse.h" - -+#ifndef WAIT_ANY -+#define WAIT_ANY (-1) -+#endif -+ - #ifdef HAVE_SIGNALFD - // offered by some systems has bug with g++ - #include "signalfd.h" -diff --git a/src/improxy.cpp b/src/improxy.cpp -index 3d03e66..4e046d2 100644 ---- a/src/improxy.cpp -+++ b/src/improxy.cpp -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include "improxy.h" - #include "immessage.h" --- -2.1.4 - diff --git a/packages/tools/fbterm/patches/gcc-6-build-fixes.patch b/packages/tools/fbterm/patches/gcc-6-build-fixes.patch deleted file mode 100644 index ad5dd65c4..000000000 --- a/packages/tools/fbterm/patches/gcc-6-build-fixes.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 69917d25c6f718572433262d86691bf24e72e4c8 Mon Sep 17 00:00:00 2001 -From: Nobuhiro Iwamatsu -Date: Wed, 13 Jul 2016 12:02:10 +0900 -Subject: [PATCH] Fix build with gcc-6 - -Signed-off-by: Nobuhiro Iwamatsu ---- - src/lib/vterm.cpp | 4 ++-- - src/lib/vterm_states.cpp | 18 +++++++++--------- - 2 files changed, 11 insertions(+), 11 deletions(-) - -diff --git a/src/lib/vterm.cpp b/src/lib/vterm.cpp -index 3a5dcc7..f79f44c 100644 ---- a/src/lib/vterm.cpp -+++ b/src/lib/vterm.cpp -@@ -68,13 +68,13 @@ u8 VTerm::control_map[MAX_CONTROL_CODE], VTerm::escape_map[NR_STATES][MAX_ESCAPE - - void VTerm::init_state() - { -- for (u8 i = 1; control_sequences[i].code != (u16)-1; i++) { -+ for (u8 i = 1; control_sequences[i].code != (u16)0xFFFF; i++) { - control_map[control_sequences[i].code] = i; - } - - u8 state = ESnormal; - for (u8 i = 1; ; i++) { -- if (escape_sequences[i].code == (u16)-1) { -+ if (escape_sequences[i].code == (u16)0xFFFF) { - state++; - if (state == NR_STATES) break; - } else { -diff --git a/src/lib/vterm_states.cpp b/src/lib/vterm_states.cpp -index 49e7588..6aaa8b3 100644 ---- a/src/lib/vterm_states.cpp -+++ b/src/lib/vterm_states.cpp -@@ -39,14 +39,14 @@ const VTerm::Sequence VTerm::control_sequences[] = { - { 0x1B, 0, ESesc }, - { 0x7F, 0, ESkeep }, - { 0x9B, 0, ESsquare }, -- { -1} -+ { 0xFFFF} - }; - - const VTerm::Sequence VTerm::escape_sequences[] = { - { 0, 0, ESnormal }, - - // ESnormal -- { -1 }, -+ { 0xFFFF }, - - // ESesc - { '[', &VTerm::clear_param, ESsquare }, -@@ -65,7 +65,7 @@ const VTerm::Sequence VTerm::escape_sequences[] = { - { '8', &VTerm::restore_cursor, ESnormal }, - { '>', &VTerm::keypad_numeric, ESnormal }, - { '=', &VTerm::keypad_application, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // ESsquare - { '[', 0, ESfunckey }, -@@ -104,7 +104,7 @@ const VTerm::Sequence VTerm::escape_sequences[] = { - { '`', &VTerm::cursor_position_col, ESnormal }, - { ']', &VTerm::linux_specific, ESnormal }, - { '}', &VTerm::fbterm_specific, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // ESnonstd - { '0' | ADDSAME(9), &VTerm::set_palette, ESkeep }, -@@ -112,25 +112,25 @@ const VTerm::Sequence VTerm::escape_sequences[] = { - { 'a' | ADDSAME(5), &VTerm::set_palette, ESkeep }, - { 'P', &VTerm::begin_set_palette, ESkeep }, - { 'R', &VTerm::reset_palette, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // ESpercent - { '@', &VTerm::clear_utf8, ESnormal }, - { 'G', &VTerm::set_utf8, ESnormal }, - { '8', &VTerm::set_utf8, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // EScharset - { '0', &VTerm::set_charset, ESnormal }, - { 'B', &VTerm::set_charset, ESnormal }, - { 'U', &VTerm::set_charset, ESnormal }, - { 'K', &VTerm::set_charset, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // EShash - { '8', &VTerm::screen_align, ESnormal }, -- { -1 }, -+ { 0xFFFF }, - - // ESfunckey -- { -1 }, -+ { 0xFFFF }, - }; --- -2.8.1 - diff --git a/packages/tools/fbterm/terminfo/E/Eterm b/packages/tools/fbterm/terminfo/E/Eterm deleted file mode 100644 index f4f767886fb631906868fedf1bbb1e3fc243f8df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2267 zcmbtVU1%It6h3$E#->UWFcfRo(rs~SV@TP#GrOB*v1v?FlQhY$=}!W!q51D7yV=d| z=0B~96!oEfun)zj7C}UOQUnnZ1*sqi1w|k9K|v5f5J7|r*6}-Mc4MFw6(^kUe)rt( zoW1v)xtZOnm-f(J%Bnq~?#fgtzaiKa zC30{iGMt^CEG$Qkua+xQ`DRjz#E2iB@PI!VGgMEz!2CO&dOAXX+~M8os6!NyMIqWr zyJMp)RV+P+e8m)$17F+KhNleF%O-eJ`F}R@gdVHCrv#A#2I<{Z&}- ztXt1m7p)hq%i_7R>HpaJRQP9tUvBz+|10Yo%)YaJ*y5{Y`}^@HsDH6;ZN}WTEWJ&$ zp8Hno-F@N-vNYeN%t2C0mg5?)de;)YYQD)j#T=^)3DTe~hce|DUlg6hv=Ms#;#$g@!*Hb+kS40juP$Rqx@$l}1^w$Vy6b~m8!bSD6fEWNL4-OcU zBg&Cc0n~xZ)&tc)lq9HKG#W*L&_eWs%Uo^vBzi^nQkXXywcGjUi*b9yuB040#d8Dd z1r$rJEG2@uhozXE%CjtKR~qc8Mmt5}9@>s%QZcSkdJ!`zD9U#B?AX}!^vulc?A%-~ zm(S177YfDV!a}K3E>|jxi%Uz(%PT9Zt7~iP>l+*A&tKq5XsYCQ zAI4mo*~TovU>GK06FiZA8<804pOID?2{+PjR}#9?YghDcpqK2%<9v=Y%4h^#K~FFy zm=Fx!xg>KF6_h9=dLw!xdJ~sb(HqgbqI4y{D|$E3yZrVTkI~_qizeb?PY!{`=K;71 zh7Zc-CR1LLZyQ(1mG_EgUX|fnNAv(i=_bCT{Ozm5YtTUV!}k#F!}qTRYaS)(Fm+N7 z^;4$y#e!DTJ!oPjvMjazGa)P>Dn(OL}F~k9bY?yTqb_ED$PkI0x r2;R%mUY7PBJpnp6Qbl+&L#N;Yf)Dkw|73;@WX#aqxC6tlO&IzUv8ZpM diff --git a/packages/tools/fbterm/terminfo/E/Eterm-color b/packages/tools/fbterm/terminfo/E/Eterm-color deleted file mode 120000 index 74aebd749..000000000 --- a/packages/tools/fbterm/terminfo/E/Eterm-color +++ /dev/null @@ -1 +0,0 @@ -Eterm \ No newline at end of file diff --git a/packages/tools/fbterm/terminfo/a/ansi b/packages/tools/fbterm/terminfo/a/ansi deleted file mode 100644 index 6de79787ad2d3fd89a05b113e11d98c012f4314a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmds%J!n%=6vxkf78@*u3LRP_rOVT3Tg^*enuMn&)qqh`2-=}ENKNx<`!ruB(N^0O zoE#lQ6s&`TgM(mE7Z*QTH&>xr&_Th`&p{XC|GbYRgB6?vANQ)MJ@rwo<^%7ABH}9S^`?w7gZ(1nYwP5i>;5l(`PNl$wv!)G_lhqmIr?XVlTcphZNB zh!!o1f?Bj_5xr>9qK7>eEg~YKETTnFix&1+CCYDRfR%Qz~WAuX$D~6;cL{q|g$*pGvD}HLZbOPgb(SJ3#>z!Xlvz_Ov3GBb8Pc%u>#A>-pSJ`T#+N$Q(h<4~qkt$JDs#Z0qW*wjVqwah% zx(M|=8U5WW9>4s@{`{vFpM9;~sSoO-`mDaFN%ccbsh^5Cg;RM2r*S%G@;Wy12F~Hl zZ03A+@OCcb5_WL~S92XVatpVyhkMx1i=V!b6XE~VcOkQ*JjMohGcBc+WN^C-?mckj zK)lIk3g?+TZL`v83R_Gb7ZN*x3x5@ZyTDuwD-=nTC#o7$0$TtkPmI;<)ZQ+EHoA8s zBFPAapaLzAz)Sl|&;a&=Dj-d3KrPq@>Oeh^>r{XePzH8`nd_87>p^l@3+bwbjL<^n zY9URvkZxK?OD&|I7BW-|`LHou+|Wq|ha}^V?EDdlEv$uhrfOKHE>HP!vK=ejSW_f6kD|3u(^@Nxg6=)=KV zLl1_>V>d^>kA54Q#*t>Q3+xB-!c9PO?VtnT%5GfL?FC(+8}tAl=mmYi59C`3f)EIU relP$cAPNS-5EuqAFakz_yr>(rfCHcv90c-9Is~NFs$Wqi)S# diff --git a/packages/tools/fbterm/terminfo/c/cons25-debian b/packages/tools/fbterm/terminfo/c/cons25-debian deleted file mode 100644 index b379983e204e0ec7183590f63f58afe2b77d3703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1519 zcmcJOOGuPa6vxlKSsGCWB4!`aPz)tujWbRYe2A9XOsVEm}lGm_$U2pcYXsDhlj>?u?^FkS@CLJNJLiJ&!wgX4VTA zZJ@Oj5ND(}5{_Bzg+9M0;0_<_8u0r)F`tQ}kv_jE5s3Ggl4mB5+Z&8U-CnAo zVZX^8js;Aih|ga@LJ$$7R$8c-pgPK;e472s%AzvLMNI~+Q0G~cO*xbYy@_n(z^;Q5 zDu;Da71dJ{6t5O)SIV36gA|1t1Y@bl$<&_AXM2iHBX%|wKZpH%I_Cmiq$_lduG0+~ zr#p0)?$HEI;`|ACO3&y;Dt9VfGv9fkdX4k9^nqsRCoLCiM4m8-0$~*kb6D#tQX!n8 zK{SaL(Wd-MzvW#{dsm^Jr@cRWCH2p2$xOLQ zX3HFzCpEcIZkAi*Hn~IEq(kbmRF+Gptdg~|Q8r6Mc1W-6mO&YjOP{`&ir9bZyO`Mt zc|vMND`nDZ(hQeo?8jCGcsB>k(IT_2b6)D^sMYLqA+QIy@K@1{5=%KOvzxslR&}5T z*h4TyY-|=??GAR7QN0ht;|Nm*s_8haZ48Dd)PO_a0H_7rw;nWrMsN@`0lrZ+r~po| z56s=D5?amTVkNk%5qGogOifQkoIKM4#}^S^mf974ADxos-(ho+w(2cof+<%UEjJt_lyT} zd#8f;`(A|}geUtS#~%&e9-2rz9KJO&Gx}xhJ4#x?UeFBqky`-A+`t2HWdj#A{GbbT zgB}n7y&wqs0Dm!I5CKup4+cOC#K9mK0tqk-M!+cG7d5~U&<5H;2jCymQNX!2^@=>9 HIHi68B~0x4 diff --git a/packages/tools/fbterm/terminfo/c/cygwin b/packages/tools/fbterm/terminfo/c/cygwin deleted file mode 100644 index 56560d23a7a88dcb4341677b9a93cf270a57b5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmbtSOGuPa6h8MN`3TL3qMQgT27=7ye>jhZQZv&`$)Zh6VxyDeV#HJCA$Lf6jj^)OOlP>u5q< z)7@jy(O7akoE(Z(o=ptL!|7Omva+Xtu(ClSM2eilS~-SVSSX@}Kb|70Lxf06ynxoC z&j#>qw3jSspZEj7{g8TU6#EG97@ZW}L0!;Miqin}2#wPv=&N*{CMAADkelD6Ti~~| z_8sV{eCz=|q#1fnFX7SLDIn zwVav``rJXLCaCRDYtickH5{)G)bG#$d*Mz{F}XT|DA+{1%d6J!*<8KF^Zrah_+HO^ z^lR_kb8q_|#or~SlTZ6Iso8HDeeFO diff --git a/packages/tools/fbterm/terminfo/d/dumb b/packages/tools/fbterm/terminfo/d/dumb deleted file mode 100644 index fd4091a9946019db595d9b4ac2a6b935fe42dd20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmb1Qlwe?DU}R`w;9y88%}uJYFwjlT&neB#Qvh)lN=hmj7#IT>{{LqHs{4-ySTID; R6bvIS8v{E7F9R140szw?1nB?( diff --git a/packages/tools/fbterm/terminfo/h/hurd b/packages/tools/fbterm/terminfo/h/hurd deleted file mode 100644 index 75bd67ca56093acae3ec7d7c787521da7f4036af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1570 zcmbu9O=uHQ5Xa{&rLAHS4}vy|5nTlPVfO8&Nr?1ATUxbkTCG}|9?~{xHf_GTNx$1D zC@P`{1yQ7+mmb86AfCj7;6c22@ZiaV2M?Y+c@m5>v)P8$qD2>G<~RR0JNq(kv$f(N z?1!C@5U&(-+KMg>m@#)}?|F9@ChoCJI+sbt+_{)F6SF`Funq8{gaUhv#bPxSH@&K% z6^kmM5~yM?>;pF(MmmOiJ9I$^xgQ464?_gTVFIaGOhX>#nF??PZXn%;yKo;?U=^OS z{tRBgOL)y(e()R2-zw+Hu}`_63@f9Gsic*>vY=d6uKj1njZbj$TmRVi&L8f3xXIe1O*Cf@ zTaBxw9#53#iYq(>RZs)2u$oY_ni>tNS*b=XaE+mM2JLitt+R}FSr-Z?&?vS@Zxa6+ z3?_z?Xl-b^kwo8z)`O;LDfC`)Op?f;dOwkG%^5_zqd^4CLn%9MC%I5kQ5+Y#;Szei z0Im>jCqxgE8fE=xXVK1~qIppXYd-dV_5t$J!_0^-)Q(ycWmF%+pAl+rrou4b0L}I4Kq|^9*oOT(p{}mJzM-M9(c?)ZB9W1i@$q=vG$$q|CzHuk zDxJ<`ve~IA%gW{Q`RVDInc3O7x%v5pg~i3CrRC)UjcN$ZC_pU+NyiYDn4#y9OP;3W zkxL%APKOiLC3~*dxn83eP7ef)03EkZPO_(A>pVBoj1uujTfuMg9;8Y(SGZZD_pMno NA#ROkQV`FP{{?6H2-^Sv diff --git a/packages/tools/fbterm/terminfo/l/linux b/packages/tools/fbterm/terminfo/l/linux deleted file mode 100644 index c959c318be3f0b3085fcf97e34abd9226c7d9a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmbtVOK6l=6h8Nk#2DYAlsX6oz2Gb6{`dd?nG7S2uQ5Rl)oL;A5R!57n8`d6lZoav zQ4yt!>Ourvh@jY(b|Zx%lrD<6aMOib7hRNYy6C2>ZVKaf?mv?unihkXobP<+anHT~ zxp#86ip{i*Hc&+*Lxo&va%#@v_RMH$Vze+wB=85Zqef~btZKCxveam%L$nDoB1tP~ z3vH!VQnVW$kCN0$C+R%+=QIe+QIV#p0#>bFqwDmgWw+>#)%WNDJ)&>uDg9vWXY?~Y zru!T!DG`vdyVh4^3eH~mBZ;wzfOYOzs#B({kiVwb2^+aQjJh&VKlL`?_Q zyLc4w)u~rUk17tlL^=gjJy~Ym@8pm2C;5wf zA%B&xmN|Fv%FDM}L%|#sYOk^XuMrC+LMv%4g;Of0#vC;eS7SyEjKkp$1G>Vg6Hq51 ztZPY~4I1QkQ43sMkc9CIKqo`Zft7`&GvG%dha0{Q_ML`w(>kDE1UL+a!OH@o%q)1! z?EZRaJ!p}^D*%j*8=H{uc`?7R^MKL1{UD-;AgAaG(47Yyf!IA5ht0s|eWi{uBmqv8 zBTk3K7^BgaTgt$x5hgxE@KtO1^X>lli!AA`6JFGMcr%uqsuM0{JzT{SG$<49{glET z>&|x!d7TBKg zx^(&S)YSC!%*^cU+*~Cy&mH*!l8Ey8C89W?-5SiB$A49{(w>5W1#a7CY$uIvx3TSZ z?a{b~b6lJ6+I)xaAUc8@I)MJ9A|*f~!ncUUjm5nfZVC6U_cS+Xid!>le7~ahs98sA zT~X~y8~EM-@Ow-8QJq`w+5^H8DQ|%}_QpE8NEE{Jvl8#f9)5-({GK#^dmL{ rZo(V$Fzq#3Y?=5>fYz-oTPTb-PjcT}aw7K-S>5R?Kss7iIA8-3yiki-bxsO-k5DWVr77lQTW1Qd=XE?_NE?K|AHEwW+`?&YP%;*!_tw%gb-!oqDO855f z)VryE7}xIP_W37YuOD^@J6I$O#MyP4X{R>jG&4@kLoXwbZ*B)J$rGPUG$?5;lSZ=I zrHo``U*O}|L5|GAUMi9bStcd2LRQHdStn((!CsHdkU26>SPxh?SCAX}48-u{A5-`> RdQM9E&SLWXkpwptd;|L>F=+q* diff --git a/packages/tools/fbterm/terminfo/m/mach-bold b/packages/tools/fbterm/terminfo/m/mach-bold deleted file mode 100644 index 1b72fcc0a3fcb61ebe24ca13379a65248d56c42d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmaKoyGz4R7{yOj&?@4rS%MI8P-w*mMG$L6f;L#|qn0|@Hjzf!q_kB*M8Uzq!NI}7 z!9mc$!NJwl)z#Hi#KHd{o_mcEhkD`n<$ULRaC7@Y;|QY_H~2&)Un~t5+_HIKP^k&m zsk>!M-Lo4dRoJTS)EidbRNXCg$1$y1*>)@-1bIS8p##0}JfMZq^V-mkE~$E;qMvF& zW`m4FQblC+yivq_CFVSD3JK`aF?>Ib%%2X?wLxdocMJS(1s&UPP{S_vafoA_;1p*# z#|7(`xWYAVap(8m2Qy-0v-5yQ+4qEJyimRVJM|V+-viZbb94WLuh$Kw2qm{b=80x& z)u?7pYSj_V)X_;x=bJ0J1c?)aj8zz-B1{B9rV)|;h9r)d$H)wn#T3bsC6Xq~WQDAf tHIgCg?A6IMnI&_C^&IQL4dew48d7lcw@Cg7F(*sn%2LGnA7Lh0d;yFWK7s%M diff --git a/packages/tools/fbterm/terminfo/m/mach-color b/packages/tools/fbterm/terminfo/m/mach-color deleted file mode 100644 index 0e63d81081fa72c13e5f8112a14756ccee099d8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1095 zcmdUuKP&@r9L3)WX-lMYb-74RI*|0Alr)i6MT(YcQBn)7q)qxSB_tvw27|$1Fc=I5 zgTY`h7_3&S)oK+nNY1;jx(*c`4C0c{>$~@Uzu$fDlJ+Pr*kDINaVVvgY<1QxmF`fC9M`Bw&RD`Zt#qA?84vwC%8d|sRt?JcsQFJnj@;~9sL`ay#$zX}%F~n=gkRbt6{DyNI;+4=V zK@59LhRGdx_8Io(G%{?Qff%0rX<}c-*e8`S azL+rI$;KN#J>v@m{W7ReDr01S-F*O7b=5Th diff --git a/packages/tools/fbterm/terminfo/m/mach-gnu b/packages/tools/fbterm/terminfo/m/mach-gnu deleted file mode 100644 index c7174da0978008f3606307e113fec46cbd75df5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1056 zcmd6mJxmi}9LAqlO)45SVUt@-`&tK_<@UeXlJI35lbZJkS09AMgKt?{Zfnicy4v zI4-`4c&xkM)0Y^Tti95DD$D>7P?taihj9|N4IH4`_93`%6eq|faKpp9q4H()0A-<4 z#kO68kfJcXnQB8jV(29es=RHdFp(uWSzgnaVdgvA3@S|g`6-k_SOX6h={LbX!Ys5VMY3Q=

@fM;-^TD=OdUMbTlE1+8v zO`^}ivfZqY=y$SyqUm5c(Qq(84C+>#|Fir2nRA|wv!mW0UGCUI?{?ot|LcL%H&<_c yxV;wtm{=a1N~VX>!|6Mnsm~*CN0-JvjlY@Ly1RMr*W~y6FQ#^QKEAi8QIEfog)~I~ diff --git a/packages/tools/fbterm/terminfo/m/mach-gnu-color b/packages/tools/fbterm/terminfo/m/mach-gnu-color deleted file mode 100644 index ffa47e14bd7b842fb90f672c7fc1bead84b732c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmd6nJxo(k7>3_tOhAlraFRMSF?T8@?QQFYTqD%_Q|J5?%Ls2CLo|5fezGS zE$lx$wPc$}?&_}XV-nI)E zEm3*fb2!h;g;Mq+$19bJtGI^ixQSc1jXSuD2Y8GpcuIc)ukadEm@d`6sjMmYtsZCS zf52ya#T6=a z6kkLQR>75oE53``Noi><@7H>_&!eg3b*(pwI;NuhdAQ;cDok}yF)Ea0@XMgf&?JLV z2|-D!=>dXI&UEGK%4y}i4QCmfsm*Y;vu*o9Y7f;(by0h%ebj!co06@flw7@q+D6fj z(=Q)yD^YDLkEtM52JYfy22kxPj<*&>%KxW|n_ko=puKy@wlzeX~8D#Qnax{%@&!>Gj9nAAgpa$v)3b zTI2cRiQ+(U@JQk1(4*lOBNHbdp87HR{q(1?cV}*l|Kj<0Z*jl;mI1>Is=E%Tv&&l# GmgqM-!wb&< diff --git a/packages/tools/fbterm/terminfo/p/pcansi b/packages/tools/fbterm/terminfo/p/pcansi deleted file mode 100644 index b24fba9358f5bbe4e55b1916dce62baae9c63cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1198 zcmb1QG+|I<5Man;3}Y-vPRuLLtjSEu)h$R?C`m2K&CE;8Q79i5 zkwiO@*f2E+x)&@v5vpb?l%9!K4?;I7thqol=QDf-l0R^m{tJgVDYlFpwU&$n=T|32 zA4ciuCRP6rYm($QW(${UD5v}&emfuU-OwQ7NpYKjL?zzK*!v5kLR{ diff --git a/packages/tools/fbterm/terminfo/r/rxvt b/packages/tools/fbterm/terminfo/r/rxvt deleted file mode 100644 index 12d9e9b4390b5941d7a67288bc7637dfeacfb9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2078 zcmbVNOKcoP5UrjL;E-UOPXJ{=S|Af_#Al{wW?y8>ct?EhIPVF?SzSH&P#l|W_qEW0@re_P~M6t3^E;Oq3M8`QZ88 zWxi3YbP_52*a#03c7j(usX=O?`zgA?(?YxG55$Qq+CW=qD?N;rJO*t@dnrf#Gz30O zF9FA7h6%wbnxQH+gs%y{N^j6xVDHeobPE1MIzyk(dFlI{E{gw|eucj*Jc@pUCly5- zU{SPDwW%%2Ru8F1)f38B8P%oss6O=NVMA&}y)3#YDyX8GYVsRwsTnG%hFXK_b#+pm zf(lyUee?BP+jI6`>aHEb{M`Q> zcl|v7rG26K&QJB1O?F9tqi>@-$R2g3oto!NWSyFECh7?IlYpE(YWm=xgRyU_dau%W zK#p!lC{P%tH!7R)djmr=qprU$JgheY2@z)rGvAS6j1SSS2qiSUAi^sf`1L?S$1 z2(q{n3zD6LvKQGKwu%jNs&Y{N!`|a0xvq;$pi)RZr?y$u36zEF$jft`E~l1s8d=ZD zGBuz}SfOzA=;Y+g zOsP~ZS1Pl!)oQIaH&?IE&o>$i3yX_OOUuhEE60uw-ZAJ+mr8%}I~8P>jyOD&~SoO+sT*LSFLn`{pGt zFE4*>5={_=QnX?9{mWJN-vK3S{G&KJW3rX~}~p~U&w`O?B_ zqJMpe&|8E03HLP zs3bf?bF@Hp(VN0=(`9-O>I3?at|DHi8}vDC%iJBhEAbcl4e_4nDEb{ysVI6Hh@xF; zkJ_&eslzI%UQvO1Rh?2@>I~-kfC2TU8Wmp@jjJg&+t9r7pRZ6Yt1Y-Lt1Id%;-qtojD(u8h6|f8WUe(1^UxkJeAt&(^QjJ&W`X-K6*G1NueXqK|1;r}c5& zq4T;|59nb%rl)kMYkEy@>38(I`ilNYf2^;2;ZK9|_K4|5JOglSxK2Nm@q#?AeRms+nj={hu#AFTc8dgI|}kV9vWfKu=d2@1)@{J8R4vOE3MzXQsuMv1>aaQ{6Hdl?hD>TGQ3^{%6JkFBqvG9S>$XuDh|x0 z%ES3DXOD~Ix-Ke#R-yJ>+D2PT=nFTJAJ28#oNC&s=R7CJ(m)2W^qi{iY+#&;#{p!@ z$yM0a>eP2Tlg&^wb7c3~A*2bO_FV2Q@Yip8m^>FK$-aybkumHGLFg=%$iu~u7J zs@Ip7S5{V6*Vfk8FJ8QKX=7t^bBilEOm?!vKI%ep;S2nT(j~tIO1hI}m0`j;M$#-& zOcQ{SE*kL}>57pC8R?>tF8c9)(m`MRe(aZ9n1J{4yisN&>l_$9|t*5EC$a{A0xVlX!WOF5xSvXb-i}`||OM|F;mn zRXeE(`F;3$9ijy0lk^g~6u_lv2YS z6;RVcCxB`e_>C+gGVoFs)_^*&0@SE|h)%mSG(dw{dfladm&%>Jj1*Iv$~|2JkYMO@ aZ?FbK5B4!I9PGoWXsA5y0X~%{4E+gKyCb>) diff --git a/packages/tools/fbterm/terminfo/r/rxvt-m b/packages/tools/fbterm/terminfo/r/rxvt-m deleted file mode 120000 index f61abac26..000000000 --- a/packages/tools/fbterm/terminfo/r/rxvt-m +++ /dev/null @@ -1 +0,0 @@ -rxvt-basic \ No newline at end of file diff --git a/packages/tools/fbterm/terminfo/r/rxvt-unicode b/packages/tools/fbterm/terminfo/r/rxvt-unicode deleted file mode 100644 index 9b54df424c3844df356949076b84e8bcbb2db8a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2508 zcmb_eO>9(E6h8O8j;I8qqCptJqFm&kdH*v!XelkFVE@trjueoVDg9w)I!vd3v_-=L z5@kV5Ow>dc8WT2{5TjAz!oP(J+?bfSV(ZSIn3%9I&+nW!g#sl8 z=T6=V<9+$D$RaYRhMuMs^gOMl4NyF4rWR_YZtw%t z2RuQ;RG~?l0Y6LU=uNr^7Dew0UZM}_GF_q1=o)ztJD`m&9yQwu&Mj z#!njU4p@Wu&8k&(sjNDxa%xzW)VP{aXVrQ1U4UIwZ>#qtE{ZOx57b9h9*=Y{URGDt zHTA8!u6|NC)Gz9Hb+ejb7!MhXjVOBDSPG1yJ;pxcfRQy08Aptdpc}%JZ-*io-;3)Z_Vpnc$WXBzVm?NzHeSOub7{jUm))r$z5CXM$Mgb z|9Y3ty?-vC-I?|8-p%S5f7dKd#L>$WD-){|I5`>$p)T1vSBBsW09ukg z_CB;P!MLqP?YT|kgcf=fQVXo!_VT!HAeNmMcMwh^tRWUd+he5@)<(%AcDRU=>r(K% z0>EOZw^D9~gItDyB>|V2EHjIoU2qC3bUmv} z03;Ro^&khlC>|qpLO1k6Kg@)_A6ltYiopW78N7{*y%V{u^cv7P1K?$(j{+=B1=vaJf9_rukKqNC3irQSLclr(l$qU1)}iEgmll5);Yq% zN*9kPWd9uDa~XoU3?AS(+IVvwXk*eytJX)3k^xtQEU{jfd|e4G9coY;)Qzd7OOBp_ zAH=>3>cunwP3y4085vzcf#`l5wGJuSLXSwvr#p1|FsdVa8xjZ^rsf>+{k55cYPEJjoK0Q4>Gc!AT=FH}XExR^0ZfZ*H9&8@s zx;_M}54iB^gFK<(!|LESk&|`SfXRubnOO`0gUyhG`Aj?p-bh<&z?KYK&eWFUwWS7Z zsR1V*SldH@toMp@ll6&&*9!Vhx@EzZm{&+JGCj zaTh)y@H|E9=sMa2>iaQzl9ti4v>IOp8!1H|ZKFDB#Fs%EbgP3l5gw-)GFl}Q7Ay~hW9#3y{l7ktGge$b&xM7hZ2 z4vbnlJ1aUwuNWe_A*Mu%{PK<&w`Ar%=>zddJQf?`8}a6j zI(zl+ly7!y-|1XI#3LO$GTZC_9d|qW{?kr_yWHp6F6aGCkH+$QPC8N!B{+f-?1K_i zqiRZ5$GvLGP{-4hFsDemmEa|EJ!I?)in_6vE699?D^7n4nqx&|6d~?_;+Ls7X+N1C z6{M~NiO%BFHOs@521gc?o5_@60+qxG7Fo!vSS*GdH!P~6Z&;&Isuwp&&2=b&b~4_~ z&^fwHc7<$!GP;X0LESC2S*nNC&?HMF33O7fi6gEL&?y3K6!`SG(jt9CIS-|aQ1*-W zlHlJ0`UZBUbqjj8fR~oVw5koXbXXox)8ga}7j>Z-ikn-@D{87wO*N?*udaF-bwbld zgV3_kBy`(o5xQ)25gMvD!Sg(7rb3;lRJ~BTQHI*uy1M%Mh6YU=9SwyhC#R+&k!W;! zIu?t^6NzMUW+s)IolU3b<}#W2`GtkW#iga?gWDf8 zB#d?;h&PvVaj83WaX)dZsbxNf+a6yzJU3iF8+Pb0Y!AzmZ6;9gM+A|d-*7w oILW(`@giZg4da4_;Xw>Fqf0}V3I7}hG{iy%Vq-d)iCEacFLbXL5&!@I diff --git a/packages/tools/fbterm/terminfo/s/screen-256color b/packages/tools/fbterm/terminfo/s/screen-256color deleted file mode 100644 index 6a9d9696abb51af8fa79a9ef83579028fbe64323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 zcmcgtOKcle6g|&WZ9%0KNC@bl5`-SKO5M)aA6%NYPN-?)acB~$jRi{TII&|paUG}m zrxLJ0NJt0}P*GJ#h#d=9u|i_O0+2pUIBT^uKI3WGS$D343TS22kh%o%kaO)O!J{0+Qi zGVkC$d_;BwH}M($7x)Ta;~S%OI^TBvcl6(P`49BBy1di*5kKK){DRx~6~EyQ{^T9) zQTtS<^9b!Rbx=J`FW0l`d3C(Yqf9R*slA}GYFLevy{2YWlYVu_h}TW#ed34ey81-j zRKJto*-;nG{s;4^*xf6g=!rzh?#SF-|KIUkEc~BV8oSSRF5Tz2f77GO-8E-opU14? z1oq%zSVdjcO-D~>bko(-EhfBKLe46lqdQL%-&2&sLsCH-aDzHu3y$$CCaREUVdYJ# zP8^}-v7Z<;2#&yjWBX~TbS3hIC53q=Z16p|iVXo%D6{wiuF+keRovkbo2g-3BYIn~ z3TJ4tnCnRN3he@Ilo=;rrsyOMrVOS9UE6R&357xC5)w&$fp<|j&0xT(TPKaLSTDjF zA~pSzwG7E`6Ye0&oZ2SC+eD@|#hf)FoVsLg(6;OJZon?2U?rusGNY{rbTgsb8AoS? zI;37iT~a@y9%(Y7K4}oqfYjBQhKx(=_I_PHpfj*?co6;lM~}wi$BxuvY;JBzcP3yRJ`=Uy zm)Mo|7hS_0d0xD9#!t&%X*y%}zMk6DCv@90JrTSt(k7rD*VDS}r7}S#s>;X| z(XDrf`}Y{`*gfO@p7D5qNB<$7(qEd>Urzd6f1juS^i2Y1+szj4-I72G8-U zbR0g?{1#-9Lx?d0eW znDqpFfj}T3kR*g+B8DP{B8DP{6oFY Ssg94JHszvr*`cwn2R#bM70bs+Ddih>`EP=iYPQ zXRc@798oC@;4rG{Mr66vE|;4zH<2tY)tB0_*;0AyTre3OH~HvlwNr^wj2d-0I@6qs z4rNCGWq#sF3<@*Xttb@7a4#N3_YN0S_bRXt`&scAjzZ&@sf*z>&R`hl8Rc<__zI>m zk42+4(ZUKg$X~~sCi6Dl#fN0qa2=n~e}S*?HNG)gxBG3+e@Fj)kN-gbV~=;cKjCNm zf?sh1zu|Y>#9zFl1L~mab|0iYtd6KB=;eA!J)=(cc$n$O6t(A6R*kAjvRBoDYSFLn z8S$FQyhr>%eXKrF*VP~7H}}+qv;WC_I&%9;r}`pMvU@VO*Z+4s7YY8Sl_u_TolAE) z?%(uiwzuYd*+V>VNxxJr!gz$y&UWHHx~=w;dk+Bh>#f|;U|GMF})5p-?C4J8zYnM+C}^#$HV z;Vgqer*54#zG6KOYlPJFOV%*x20M z+S=aUk?u^vdUhymzbCOP?Jv59JMz55GrpIRztVKZ?0qx6txxGr-1I<~#ceuClgpTZ zdQ8vhay;!P{IJTGDZ*Rt4fpOa+_C${dwt_^50Cz%Jf*)hr@x%^`)-}5|MX1)XWP#f z9^~`+5FWwfcoI+Z3w076GW-@~kwbt9Oqs7h9c`>(2XEjlyo2}g5w77==^RaVT*BFl zIA`PH1SZoMu`zC=Hk^$McmfH5q(F)gh=~}87>F2%7*HGuh8gDydE)2`6RaY#j2LEE fNY2U&FN#W}N~B7pN~AhDhT4pa+N?ukUCG7YH|dMy diff --git a/packages/tools/fbterm/terminfo/s/screen-bce b/packages/tools/fbterm/terminfo/s/screen-bce deleted file mode 100644 index 3956c55cb889fe0bdc9ca40fbdc78bdf266c915a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1590 zcmchXJxo(k7>3_dh@wIKNi@n$w28S>rO?tJYbhXzn&{%< zqKU?6SX^D4oJ<@XjEjSVlY@hUlZgp&FtNVhxy49uLgP)p_j|sdb576c?Wt8^)MF!3 zYA!GtFC-GVhLLz;{_H@|wydVMll{kogKlH97o1KNic`axU@=k1rgDUtR52N3FQD{C z96_s)ett!Mu@6<)j?y2VDjep3N~~eW4(x=9I^EZRL#!M@7o#4Wqh7!e#xS9)Ipi^g zIr1&s)|orFiwF2odW;1;Vdg2G;W=LDTB-E1>|fEpF7q4uw`DGs-r+qy;3GcaGrnLE z-?^i;s#=vwn`v8Bt=dH|&u+CxHI>=VEY~n=`&EbPR%b{T)ws&j&#oA8Q)li`@2iLE zky=n+$%`xc{Mo-T-xBzJr31?%sdTK!{NDfXxHE9_Kdm&d%5~1Ia@^mX(MWmCu|Pgx z#LiK3WfIsG%&y7HPFDFCv|eM4nJs$kkz%|9K;p7150{iznjfy5q5n->}YNsv9?` z?sXWw?KD};u_Zc1J5B3n#ttzPv%^|jv_?c7OS48w?-AyjC6fML?xMGiL93lH4r!k> z4#GG})aNB@Y3Nx3egi*qcnP|fK&IBsoYeq=WGXc=kxpka*=#O%=~6y_`EsE!Iaw@DO-)bF%v`xLJ3BXb_3HfmwQJYqbk4)r z+wLE~C$S^PA9FO@^1ir{s27o+Qug8MZA;{pse;$>8f-$NzLDkjt^9Sz0TryRLp9%l oE!c)y-nU$hCWGT>8^kdSg9A9zf}OV diff --git a/packages/tools/fbterm/terminfo/s/screen-s b/packages/tools/fbterm/terminfo/s/screen-s deleted file mode 100644 index f0be9b1a387431faca9eab48d8bed0087b7f7a13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 zcmchXO=uHA6vzJ)rGB7RL_}SbAS^2VaCft58iK}F#cHipTctLNjcwYb`DmJK+S*pd zgCK$zFCG*@1o7&{lP5v&;6c22@ZiaV2M?YELDv79O)aIKR2=gD@Auxknc1D$%y!j* zCNv_aZicGEl}x78Qk_57AGR%PU&qP5W8r~FYnvOM%2m8tx)AmQl>;{{%lUeR9Dq`jekTjzK5@9XUQ zAMg>M@EKq572og!E7Tg*s5UF#-$vV^cB$R;(wfvh6{~ZQS*l6)b*gUFuP%~C)r6X% zzp-q@ZJoJKeW)I($LfjtPX3|%WtB32DCGNxXp8OWl1TC=mt_{K|0VT>&i|*CF8$#; zBY!yVZ+59zUvn}v7cx?VScUa4QfAI9+vZ5ZEIZ~%g^9=*rOQYir|YJPUsBYCwNgP# zI?)3E798Vdb(AF^g3+T>1?njpqf5pGY#>I96k8-|TW(y+9f@3_m{3HAMP30$swkoh zWhz(1(fy9gDn8}~7<(;dPw=0{q1RyacG6@~$Cl_c?F_At89T~M%8qGm*BTdfEX^7z zy@#1=lSt}&`8K^B43c)iIG}yj*bn0fQSY0qrJ-j5_yj@b-~yaj0GV1BbJhSj^{{?N z%PP=2QEo&#jF@b(%xIZOv)pES3ENBv+QdkJ4$%!TLW~9I5~Be|iH?~l%DA}cZ7?&9 zW&%bR*6={k)YRPE($d;$SwlnV^yui=ST>u>jgRN^g+j4dDosq3%afCpO10{Fwc6Cw z^z_Wkl`FHeb93|aSFc`^4H|^8r!zPKS7Jv_AmwPb<b-&`WMPFTUK zxd9u|s&8kxiC6x*@4(&$KI%Gt3Y)M6+j;kLIhu?fM#lh-S{UfZ*>)VU&}Si^c96ep K(;~9^ z`Xi2@RcQX>7jXm2unG0wJj>9*5sR^e9h`gD zW2lj@u4KPliErz&o;GP?QXE2nXeJn_NXq^qfV19s9{y2pIR{Dn$Fyz-c|S2 z1NBIKA%9)a=gZNu_H+=GXpz$K8SB|7oTEKV0YRACCK*GrHJVb0|;> z7>RROid8TYX4Wj(=B1cfa?DF*Cfs34w~;tXcZ?=}UQ;(#NC&Om3FrB@;21BXqYSwV zMz2ogsV8W?SWOKVD7HwuZFy1YbR_bGB0{bX3;f?3iGql3lvz9xN7o&XUHpbSEv9;K zmFixB5kEka#T;9rleAN`K4$DNGYLDQwM}bO)Uh;cq{I(0*D8_p$GMAmCxdo7Z|v7T zW9)-*h^Ws?*3!^B2mA(preh9z=0K*_&79Q-PMy*lw5&Y66Xq$j!HCGw%8ZuTZkAfj zYRoocf;Q3h(II+1y2OZ&9x?1=nCO_Xf{crr)zxNtjTwW{jpb-=-nFZxB^0u(!NFv5 zXlQsilgVaBMsm4)zECI@M@LJg%a_aLN~KyI8yg>=n3$ZLnyS^Nr)OqnXRpZVoP)9B zfPeg+#Eu+)!qIHY`{G7pUQ~Wc*@vsQEs@utMZAxfU@b!WN|x()@y|OBSj5_LtmHee o9vjib`?xIa|kxM!F0fG?}-~a#s diff --git a/packages/tools/fbterm/terminfo/s/sun b/packages/tools/fbterm/terminfo/s/sun deleted file mode 100644 index 52a27310747325b14902b2874b80ab99b933e2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcmb_aJ1+!L7(Ey9ek3{+2DuTD;Lc!oZNxkA+90B$kzK`NXO5tI&gZvDu$66xfj=b!q) zPR6$u+~k0D>>cj;!FG`LTr26hzPG;v2=Fl^u!?-Xn*dZ$%;&36je5?S(aGG!v4>(W zp&x@>Yi;py5Dh2eAy55M&S8OiiLk#yy!Nfxz!s9&#Q{!mjtgAk3fH)y`7PlN_jm}k zkKcES9TZkicqY{g;kB&#tzhy_`3Kh(qHs@DQB^o8l{b`7xBlq0ac%wRmfBXn*DD78 zbie%O|Co%3F;RmiG@@g3iLgkJX_-|r6_;6CrsnAvtEJ`)VT!OyNDv~Kub>l+Ny0K| z&xxlAwmp2N$#IzM5ksSfB8H-dVoc7EA!W#BQfA9AUzp{+;ea=N`C`l394Fc#C)yMz y%ar)^mX6IKIiWjQN9JS@kH~lib=0<1=!H$F7=Kp9*u07v^G^68u2ev`6va=T6j7=G diff --git a/packages/tools/fbterm/terminfo/v/vt100 b/packages/tools/fbterm/terminfo/v/vt100 deleted file mode 100644 index 1a7176ddb41bc387d498c54de47c3b3a02f6c95c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1194 zcmdT?O=}ZT6umDN8by;;Ksz8o^0Wm%W|A3GO-yL(BB-^sx{F9dCZEm6B$<4*X~C^q zaqH5hxDZhk6ciK`bm78<3l}b2xO6GR^WIF_1pNa(a?U;XynFAPd6OA-l8)0f`PeZ} z$JSJJAo*0LIxutDpiF|Z-7^`plc{BMX0TH-bM-kQCV%8CBv?$C9^ z9-5*6&EU+_(vQ*=x(c->vm4->QaL>)<*7cF4~IRvO?TkjrF*V_pB_w9IGw}c!!h@f zs~^)-dO@$~4ZWie^oc&x7y9b%eRJb?H~yfX^b7hoKx~S6*=X`)Jm~rXb`msw*vq0_ICe2b;L7G zhe%2D61OyN#<&&cW)nuF07@z8OQE=-CZI2e;t>&djfs{N$`W)y^x&VTq?bbRu&7>; z(FbKzT}vB@=wCv296!pdez$y7 zt0>~Rl3G!@KvrG@!axMj;mcdV0ggbYBhc;$F+(kZbU_9vfnkvfNEc)XiWWihMN;NT ziHb{EmbZgWo)iaIXZe8JF^$JW9){E%iLHp-iaNQDErZ9ZqU;>EeLUyqG3Q=Vv>&h3 z09pXP*op$4&a(QE;QmIyJwR+vM8jWVN)w1n&yVL1*d%b>tb8~BJFxcMS Y*};3@i6!I4W*3z?6_b`>XwEnP1GPOry8r+H diff --git a/packages/tools/fbterm/terminfo/v/vt102 b/packages/tools/fbterm/terminfo/v/vt102 deleted file mode 100644 index b9a393c517681ca17195bd40dafd638daad2ec0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1188 zcmdT?&ubGw6n?V`wFMIql#+!ak`bk#+0Dj8k|wkj3AQn@>M0&tOp~~>K!ISw+#4)MM`)b-G7cdVX>^!QPyln!OFv5UbPZ}jRyV=7 zfdZ9fZBv!nQuX^gGT)_pbRX&gJ(Tq$dQ4B$3hx}jPvJb<<33mV1-+uT^qxM_XZlLt z=?DF!U#j<8|_(A8)sN@YDrugpQJ)=PTSXcp=UmlNahR z!X;2z&tDBDBB3PoTrd$9d1(B%C5>fC8WVf)<>~p^V8Rrur&Z2DXUGSRRFq{5gjI$e z9aKYMd5#~=ieK%qY*DFVkmtpT*%_b<;G}E^xDG4;HvkuC0xbX&vTfipFbhm$V#=^} z@w6$UtWS|sGyoF_0~UOFH#oo(*y#yu_k@@cS^-&tBA_IOg>8@}C?Y6Y2F38MG18;r zsxtD060nSC<<8IvGaZ#I)mM75)%U0B@Ewmy$UJ=VKao5L}{XFj7Nt#CSN;RMX z;D5|IK$R93mzIjfQfYN{ZOyhTm1=c;-EnHQdcDzb-Db1ZYPUO`Zg*p2bFN>4R$OeFY6yaWO)p_6|uF-nK1fdXC!;E5#F(Ftm#)1)}xLKmqWtc#-_ zU_We-u5mm@x9ASDAV{&#(L5Dtg|_Gc$B*e5y`Yy>%{%x{u+OkB)!bM3Z&e-y-{}Ya zq+cXO5F8Xo#c|O9b_#X|c1~On7Q9~Js*l2Vh;GqWjVsk4xPo{{+!VLPG?*t=#Xb0k zRn=4RTx^5yRO46huf-ejR=gJhxRkqnYJJ^aJ|a7q_wHqCm6zqvUzM@HGPQfg|5LA3 zPsk~mlMB43B-iDZyuYvgwcY*|J=$mACvscv$Pcofj**d2IptX@6;qzAQUxTOX~2My z7=*hD)4oPDKu5F!uhU5M!n$FjuwgRJo6YTZCwMpyur#T7Q1l8FG9cGoO%+#OtMX%( zifL+tx)thzhAY%ko}e|}+dbzx@v8ktkJ7C18wdg79i6(5GpUv}gIl*JM yE1aii^B^6TJGRz1tZ`Ul>BokLhNqaq)g)Ty0dbXxnU?Li;nql7bYcprDf$iDv1{i5 diff --git a/packages/tools/fbterm/terminfo/v/vt52 b/packages/tools/fbterm/terminfo/v/vt52 deleted file mode 100644 index 8137caf32e744fd9382e7727743b6c73b9bf6e99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcma)&%L@Tf6vn?nVe;6@+1Omv)PzVW$@^7OvapoL2r(X6`7ivz*S%wIO={vUzVkch zeBWK1w3a{?LA%ac?eO&97-Y&Ly+loMWJPfq>J;a zhd&dgHQ$YL)IE-dht>YOwp>rwt%Dz#@sIuY|FWN8>ZWEs={drPg9bDLjUjcx>>|r$ za?D^WW|tI#TEYhEfZCuYs0ZqcGt04>#dYYQp*Xg&GY^I3c57MZqkX#A*X!+uH$-?8 AfB*mh diff --git a/packages/tools/fbterm/terminfo/w/wsvt25 b/packages/tools/fbterm/terminfo/w/wsvt25 deleted file mode 100644 index 0ce5b567450ea46294a8c46ba8477043c64761f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1597 zcmb7DO=uHQ5T5r`{6kQohz&wSpV(7&-|i-@sixKztF~Hf(P9)^o3u@vq}ybZRGSK3 z>Pb9!P%nyz2Yb+i2%;bq1TT8<;Mt1@_2R*kr*&p_Qz%NMkIa1E%zSTlciv00h`|Ba z4mt5%*2+~+JN469uXCU)S}TuE7t7IHF{+(tK3B{}ySk4>&kbsAL<`fIEP&u2@Ddo{ z5|m_QphQ1xg5BWrS{GsvZGsMvm;vDz#(YI>T!%tUq#OTpfl9 zC@}N=5@QYOa03?LHr(a-0X&AM@I2HkA$~yniuNtc{XqN~a^L?2zrlwMVyoC8c8NV= zpJ)*=VGG}HLpv-w#c@Phr$Rh~I3Ui8bQlL!-@lCU6)`0|F^_CP+!pr`ABCz#@l3ox z{wj>$Aifn#;+=Rec1quGLi^X+wVXdG`L z+Dx7s_bwf0$lksDzfMA9m!TvKI| z%GD}U!h|)Bt|yW{iEs*yaD}J`wvYlXrJX$fZJ10T978*b){oW)k%Pwmc6|i7Q$S~u zvq_d9#?B_j&mTg0=l*t^Oq;pGKEb|~eH(dgkmoe->B1;Z zDb@#{?T(q?j%hRt&4x%f*7@6L98CHegx-WR9SzdkAk>;m)RhTMG>2xBbI^@Kq!l6w zh@h5Q8Y-pSxbl*wN)pvb?SR@yoq(FkwNxGBgi01j)}}l>B9+Byt7LFeJ+K*uhet-n z#>U4dC#R@MGu3n#?zfN;VCFo#N2|Sb* zntCuh9vxH7W8@iYp0^G-&rkCxEj|;A=WDUX3eJQsAznbdqM5Tu<3)OsN+%6dTecHV Uw606d8UO8@`> diff --git a/packages/tools/fbterm/terminfo/w/wsvt25m b/packages/tools/fbterm/terminfo/w/wsvt25m deleted file mode 100644 index b016cd09fcbb106507e0702a98731f3e3b52ef9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1607 zcmb7DO=uHQ5T5r`{6kPdM1!zmpV(7&-|jX|Q;qfq>rb_)Xfa9~P12-I(rvPB)TV-$ zdJ+#F)QckG!5;J=f+z@r;6)D}JbUq=UOag6w9d?Kgi=wuWWMj4neV;bowwO8x?neK zgp&9s8}%7qyOrj#yx()O&uG*yPFCwiscLA~D3_{vqp!c$IDJZM)2K}5@{2t>A#@DF!9r;J3gWxCpf&f;D z^ye6;nnj7+#yesc7YyINg{*^si=DrK^xqK-<$dAih_pfJIZts))ELXz@ zh-Fksd6vqhl&4j$h6Q^JVIY<{jC2Hpc#&xU){z4vt=%&IZCDhMdNB@Q3}FmHY>(O2 zt@ojJD+m^WL$(Ad28R^ie;DmOZQTypD=3kiGJ z%er)x3LIAwOYOI`_t1iGmXZjOP4QSxiUN3Y|hPHr8%S% zbg=0J9!fh+J)9knj-}=?@{BdlTZfwGr+Jh%pNY-$wb^5bXF?w#et`Ii=1!pOsM4KO bCS_XMcHE9cXYxEwBtt=;lg&dTseApNhq%MUD-qAj%Baw!y65~^LGbX!UOqxv3sNtHCq0&I_sKMD?rQ5nY`$juFZw5!Z`#Q@rO1;D7&Y>*>M9O@b zU>Ia$?8{NM+vt3{j4EgOoKFjp;m~==xSX!U3~rzsk(r|<)Qo*-k-n|Hh!wAS1L7nqP|F9rl;$fdbW=Ae7#t= z=yttMmvpZl(mVCt`hNY0-lw0}2lT7@kbYku)t~Aw^>_N1{!Jg(Cv}Z8$(ib0;keE$ zCvfIE^-hzs%vs}fI^E7zXS;KkbD#5&^SCp9uIKWea`rn1o!6WwP5C}E`8q-C8 z33w?Qv(38Yv?(1L=>mir(ei#&#-j+s^UKEF1ZNRiy#y0K;z%1>3#G5C14q38k0I~X zg*lde_CmI@Y-OqtvSp^)f!;T9OBXq2x|U&t48G~%o9ukF>6&?7UEQ1o$inQ>#jE;Z z1xbhrqAftAneGGzyD8m@nyoxL-(znX+H$lNhd|`>o^v>Ly6}mY(_ABF@2b! zn4a4oxTEkh;)gIJF*7i;Zi3xvqzPDv#k78XXXl0u8#i`$Z{FO~Q!e-R_VsPq(%-*z z>%hR^;Ly?N_(j-_@iwPRb`97r#d2xl$lgi+hXQCm2$ z9143$AhiRj9Z2oK);6n$+QM1OIbqb6)kP7zCc>f3OG2p~O6}0p<`)jmB;H3|?8kk8 zJXVztFt;F=ggJif13rnKyVKj{&Uc4Gw`9D)c(L_D<9XJLjTea5WsYMp{9mdBJR#qp zIgRFF0;b%ZlF4vOZC)9t+a~PQ5W^l0Bxr|v={f3 z$8bw|kzS%#=`A`;N9bevg1(_2>1X9`$TuWnQUZb$RfLd-C|&hz|Q0{IEA&>-w$fd83wkqsd1OW2>W6{1;3V+C@0@Dk@k zWuFCmY=cBz(PMAjKwiF~P$U!!WrPBGVT3}FP%M-Y3ixH>C81Cx6bogTe0#uUO1^zO z?UOV%rGQ^Ts3H^z#X=dTSgOQQC6+3&REecZBq@=kM3NFoN>m+)Uu+miC=!Z=GD7@s zgp@!i6pDmmp-es1cTmSlS~Nh525E6XErYb8L@NfVr(sdR5HdszF+&DW;KpKs#R7{3 z77Gv;7aE`dApxNQAp)T`wzfb8LIpwvLIpx?;t`v8#3mlGiAQYW5u0yb2?YoV2n`4k z2({3`DiA6VDiA6VYTNQvP=Qc^P=Qc^P?tAxUm#QV!Z diff --git a/packages/tools/fbterm/terminfo/x/xterm-256color b/packages/tools/fbterm/terminfo/x/xterm-256color deleted file mode 100644 index dbef19eab8be3a579a13f5bd03b5550370563fe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3430 zcmb_eduW_h7C(3Hm#wuH(c*K^jjP|PwYKv;XQp56w3}3uwwcK`jg1|Htx1}uc{Y=p zv`O0TZn5egx(h3=;41Edva8?;lj)!8P~F5>&*lT%s#h1Ni_{Y3tDIV?8r51=gx-d>NnNeBsvb1}yQ0R`zFM5*`Z*p{e^s}uf2sS_ zL+VL&SRGNX+lY77hw2m9pR4bT=fu>))S0Pt>YP-4YC2V|?nj&b{JGY<9@gWgcPRC2 z%{x1itrt>9j-$*SH@Ek)iFvaY`EKf?)aR!64e$r+cl2!30)2`;L!YZ%y+j8((G7Z? zZqsGmrTcY7@6mtKH|SgRZTc>KuYN#3q7Uik^b!54ep`Q_Khoz?v$Osh>u%?M=RxN&=Sk43*X{m4Wc%g0SbePSiMn)oGtHxglrFn{?uh4hC+>*vc8|gl^a7gF zWq&Pr9U8M8b;YbH0ZnuwTuo>NKN`SS5r*dvnC^CT8qijYGw~z#w4$|8`l1Xt8U%O@ z1uqlkS@yXXvXx^iTZ51-v(yem|AAY&%svx303&4ZO@wbo7ozPKtnf0KWh*fXt4o*9 z8-W!hAr^?X5}x(64;bvFbO||2ygJ|G-XGC6ptZr{MevlptihbYJfoihmYUdNqY*~T zejZ-pf89%bWM#r8lw>1h-h#J1eHkS4AMvclXqhoM%6L}I7`zVSSwCa&bjHIo8Dry& z!87%tg$xm(E8U45o`>F1Tabg(9&b0LvwWZ}lY$bg)&xV;$B#c~UT>PFpnVWW3xMP8t*zGYcFE+mXjDD%x?e+vXNm-t${kh@c zF~YsfocM5VJPLl0D22z;O4>`GrTDcpj~3yTw3srqoK{m4mFP<9q;Be`QQA%W=^$P_ zx8l9?Z~8AiNRQGXI!rIpEA$qL2Q^+AD@g;{`UKPQu&oR5}f-IEQ{m7t#{)D8gzA)JV-#q>Z$h zw%|23fE7((-3RCt%X_-k}faQ~DAs`+>BYuTEB{ zskHhn-dPu`r7FNXYlT{c6`}$>AJ4ZX&P%M-c3iv|ul29lTiiNUFzWtKO zl6?CWx8KH@B?WwuA&XEX6bogUV#yLqmRPdHk|mZbkqn7sNF+ld84}ed;>!^e2}MG& zP*#Y4*Dxdy3WXw}SSY)iR(DXxMrs(Ph6=3-sHH+}J=9jA{>FxYA!LXcVumcB$c@D! zi$xZTEEXZIDKDz!ibLIpwvLIpx?<{6uL#%7+enP+U~8P{LF5eg6z z5E>975Nff5RUlL#R3KC!)Yc7GLIpwvLIpwvLfz2Ju|TLms6ePdsO_!XFrd8^dV4G6 V_ExCvtq`~R)PJpq2EEItp8&5QjFtcZ diff --git a/packages/tools/fbterm/terminfo/x/xterm-color b/packages/tools/fbterm/terminfo/x/xterm-color deleted file mode 100644 index dd7395c9999d29c81856e19a258ee7acc851772f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1569 zcmc&zOKTHR6h3!UtZ%#UK?WrhQd*(Xd9>3IY8xxqrztJP;%r)yG)bFD(rMZ>eYtm` zh@uGU?{Fb*T)1-8g$RPU5Es&gxDXc_zjKmON)&Nphn(+x=euXlz31FXK!vH9PSO+Q zYRko>@3qDA*}T7&O6HP&CLU~xUK<~13W^w%gkZ~L@Ombf$d`iS<%MF>Yb8?hV+SJ0 zZ1XX`1U)6V2Q3tdmTBCMG+o`pe?3~u3wP_t%cn{9gUE4FN4gHth zC$vfJARQy!4P`eI9u_K+;>|wfz zG;4$O*kusI0CP=2!(?vonrqmC9fFQvmtdIDY!?K?t|08>h*M)|DaI}J7}#HYTJMIJ zIdPvtMz#r`K$PKa!sSHa;RxY!f9nckaCopN+)sySYHE6VW+s)&WM*gQ=CWDO%jNR< zLScU1_ZJq5#l^*?rBZ2mxm;dZSzTRQTVLP6;al6WlMF(7H)RfHmCGDV>C==sm@)@T q(k+>rCHa=*B*sv%GY7yGm~nVEz9k-jCEamkZ!=t^N525v9AyIl diff --git a/packages/tools/fbterm/terminfo/x/xterm-debian b/packages/tools/fbterm/terminfo/x/xterm-debian deleted file mode 120000 index 18632c408..000000000 --- a/packages/tools/fbterm/terminfo/x/xterm-debian +++ /dev/null @@ -1 +0,0 @@ -xterm \ No newline at end of file diff --git a/packages/tools/fbterm/terminfo/x/xterm-mono b/packages/tools/fbterm/terminfo/x/xterm-mono deleted file mode 100644 index d911dfcbc021c640887fe4801fc022b8ea3fcf4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmc&z&ubG=5T3Ux*5CHv53(vEq^MBo?xxw65ZfBT*dL@+yttQ^rcKgjlXROlNt@KW z2SpS`Q2!1O;>Cj}Pd$hrhzIc?9>jxquuI}kx;TZbB_4mwKyPsWDNKi?G7@kK+olsp(9w_a2PT6WuaxSY0<$$Hz zo^VCE3B0ZDs(Wg~e*pflEib74xJ_SgQ-aJ_ztG!vxv9MQqi5c!59*WpqP{6#?a=mU zo!Sv?v)2D)$FkYlGTO+DEz*&V@@xI2{X@%y8O+ zU}XSF-7$yZM_}x?WF=`gr{KfXodj$MHVzx3{XoMd-PWCfh@C|gVXz?u5OL`MILGF& zB<1x!1d)7G1bE6d!58!205|dK_N*#OD+;)*`$EQAS&Y%Zb9x5yItu zcPg~O=EkCMl6KMLIo^u&1PVqA09=7N M4bO%>;=)||0o6WU=Kufz diff --git a/packages/tools/fbterm/terminfo/x/xterm-r5 b/packages/tools/fbterm/terminfo/x/xterm-r5 deleted file mode 100644 index f63aa2f576ceabe5771cb354a8ea2cc4bfb67ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1301 zcmc(eKWG$D5XQezK_ggL2y)wm$XbYk`|mcg>EL{q-W z_2t=o;aDEsG#H+VhOf=$OY@f(0kNMtK0P)3RiuGEIEZc+*nwR*fD%S{c9+i)Bp4%& z+iHS3Nt;4yYt1-Y&^hxLa1nDxZPN~};zp67+4|hV9Y$7*=o;?h0r?^A5gy|Sp5hsv z;{{&g4c4)NO}xWx-W0g9sTjQe^J|i+Th5#Z2Y5}2KVsiolW^5Tk`3@boWJeV;`K%op(E)+f3Y! z?>2J=f;mdf$^0|)Q#AFzW!11(Q}{7B*#vEz)}YmC-U20TQDP;NP|4!$0(5bbHjNc( za9hQrrl&}w3Rei8hBDvO^OZeI^+MywG&a?m%sZj#A2&8s33Q#FCY5!mRVlkpwd<m==(s@5(iv75L=pBVNq_!$j}Q7>91dTzow)-c4IZ6dx+$2aB+<2!B6aId^b MVL$#QdbK)!0JyTvfB*mh diff --git a/packages/tools/fbterm/terminfo/x/xterm-r6 b/packages/tools/fbterm/terminfo/x/xterm-r6 deleted file mode 100644 index 91c4f5d390954c164ed09ad04f86b470d1e7acda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1491 zcmc&z&1(}u6o0c-tl#wD2U#jbNKv8Eo!w?zLTqaUV?RiV6vVx>G;NYLo1~jGA8k_a z9u!d&LH#>Ch!+o@JoO-gARfencn}ZbLDt{Aq?EFVc(Fs?@BQ9y-n^N4vk8e_>ZdMx zD&ktbvgo-3UZlyS?}lNdB7N0Gube9uhy?$X17TEb_YgEg-E^9KpGc#9bb>;37WI9M z3lyao*f>XV;8oZpB{{whoTZ!07Z|hTk_T3!2DRXC(_OmHGpgF74toy&qQhUpzv^(` ze@$;_i{8-(`b1yo8~vbPnClY0-wit=dc;Y1HA3Qy=N_*AYKj^`lJIeciTJuqS7GK48@l*I>zjj#b(N1YQ zwf2(rYUi{8ZD>zUGxDEzjcH@r0Xj;$6V8Q8MmQY}mt;8YK`=9bgzm@*_(_=ZyRs5= zNTuNKr#o@jIBW(sO~-(SOS-K)qn4dTWGS#AwZU@fIJk=C1SjS7VFXsbqpBGf6LwaK z`XyD$Lu^FNs1=R0v#015(#%cLlb1mZ1I&?(hE&{8bBiU x?vnc;+noC#`JR&dAh{1Fr<>e2lk-i^$CKl$NT*ORQUKry>SD diff --git a/packages/tools/fbterm/terminfo/x/xterm-vt220 b/packages/tools/fbterm/terminfo/x/xterm-vt220 deleted file mode 100644 index 7e44160cd17d991ed3a2e805f988f821183fd91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 zcmb_dUuaup6hGg+&UTY1P7qy~)VeEW=*<1@P0|?GY_`*+wo9!=<1Wg&rhn4>X_}^O z+NPUOUj)&o;e$Hx#XX2H5K&PS>dQnF9K!ZsUmOYp!KWeUL;Rg{lZe_r=oWH*-|w8? z`TpEU{ya?qXQ@Ors>>=b(aZD-y$1dU zy+!X}e3#y%3-lpuv<&tI#Bt7=1(SJhc{PMrt8pgvKX7{6}L_+DL6 zTi`#cpCs~|`d#fZI*mO>z?d}}jUvqd%oz*Dvax2Ik;n${V_}~eo9&!du0LKhzS%+f zd)|$D-x-&UE#sb%EHTRp{=0WpNdtTIBZ*zZ-FaP0l z^x`(L?N79G^xNhdm&_k-!fHG3(^7smubDyb1a(k=f}WML%C?n_TV-u!D+oB#fMn3q zgBYKJ@z~6I@-OO7NYWmJlCXph7w}UAv2{V*894p0qkb^1!yFlb4O6fugfUzM*bE6f z+GLxfbF#B<~pvN(pS^#kww9L?woe0kyc+3uk9_d3CP8amc~fX-f zMX=e+ECr+7y(GzPDWwqi#FT}BkRgK$LoM{+T`&5IvKDDi~W7XkDecuHQ z`!ovLYsJx^B<)5amSHQfMc6!Sfli(rAD^0-tComL*SXYOGR;l&v@0kL)6xqq4b##vhg<78 zT2S&G$+!7EM_uqU$fD_9qy$LVam__!b7FBf#&4U$)v&EKd)+#0Rb6XRJV(4p({shM zn_fgb$M>>Q63@LUt2lfhEyx9M$Ti#g7x+KpF0?X0cVayg z_wH`Go$kWzyq~(M2Y0VakK#^#0=MrdW#~nkpcyJsg_dcZHgM~{PG{*&+_~rJefoet zqEG1yJ~jSc(luBWwgjut(F|qA=$J$Kfqns(S(qWh5T*RF;{#BDkbuyD5P?vW>0ziq zs6ePds6ePGUNqGYEyatbc+nIudOR}*1qcZU4G0kkb!7Bes6ePds6ePdsNpBMP+tZR<(ag;tb+GZ2i;7~D||X=7ZO5rEiyLJ?U>nJv<;a_ zIzYYDM@PUPq7nFUs!)R#RF#wTI6Xm6EB*q#1bl^-=?!{|-lq@fW5i$33VluAs*Gmy zqQ+GqiC`KAaE<28=JldWY!Dm8ZDNzSQ*0HENQ#u$gZ4D6R~!-#>fAx`h!|=2yTXzn zRm7|~DV`F~iFwGVV6Dw?I;WO zjEbH!PAOb!x3%(@jn^;JT5VUyGpf%!?Ve|i&x~^_`V#)U)_-WXH=7rXi^ea;Z^j=+ z(+J76@lqFj=vv3KUz5Tz8csBG=D4ZLl zHMEYxIkRY1Ei><%Rol$hAULCN>2S_I0K6Z@sI%_9M1u}#x(-qrma@GP9z_t#E~#(~ z!5-M|K=f^ol|I-(S`Y7);VgD3E9xe>(PfulDc*K2Gd0I7UOwSmnVsrU0&&^dD%)0> zDQ|4^b}JgaXD6~SrEqRj70mHn%nG&>N-sSI@0_4;rU%ATvMr7d!4AXvp;#W2oE29- zp?s3P9fi-NnK9W55@VgyGgxmXSZ^>=${GvrK%<&JkE6)J7QyI&va3aSWR=s~B0PXn zcrO(hXb~Q%2y@waa7TfcEjIyCpI@HBaXvAgK-5f`)tFiLEz@UegSr8=%&KE9AdUyI z3+e?l4w^9iGWSTD_4Q_<%k(LnrcSJU9}Nu+508wDjuwmK;}a95Qn_5IOios-$Bxx% zQ&aW&^z_Wk>};bkH+TH_{QSbg;^GP3yFpkg&WE3h93=lPyZd)21jjqB>jBCcYW{hjbbWL@|thgUwLSr&O)KofZ z2Iy#X1GM-t#udO*o=4GKtOA$9qWHeBIZ5A5@^j|!xmxDDwP@}z>#kW)k)xuRj$9R4 zI*O^t38Fl12CBIKN)>hT>cR&#`85TG`%xwXzx~(HTI$AM2mCVQe?SK!B8mS4op`U^ hKpU`m4OksE1FO;QEM*61pF - - - - - - - - - - - - - - - diff --git a/packages/tools/scrapers/Skyscraper/config/config.ini b/packages/tools/scrapers/Skyscraper/config/config.ini deleted file mode 100644 index 7b6201eec..000000000 --- a/packages/tools/scrapers/Skyscraper/config/config.ini +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2018-present 5schatten (https://github.com/5schatten) -[main] -inputFolder="/storage/roms" -gamelistFolder="/storage/roms" -videos="true" -symlink="false" -brackets="true" -maxLength="10000" -unattend="true" -verbosity="0" -hints="false" - -# List of supported languages https://github.com/muldjord/skyscraper/blob/master/docs/LANGUAGES.md -# List of supported regions https://github.com/muldjord/skyscraper/blob/master/docs/REGIONS.md -lang="en" -langPrios="en,es,ja,de,fr,it" -region="us" -regionPrios="us,es,jp,eu,de,fr,it,wor" - -[screenscraper] -userCreds="Username:Pass" - diff --git a/packages/tools/scrapers/Skyscraper/package.mk b/packages/tools/scrapers/Skyscraper/package.mk deleted file mode 100644 index 6e164cde7..000000000 --- a/packages/tools/scrapers/Skyscraper/package.mk +++ /dev/null @@ -1,42 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2018-present CoreELEC (https://coreelec.org) - -PKG_NAME="Skyscraper" -PKG_VERSION="03d8d657d1ea3dfc5d3b1047922b76971bdf5ff5" -PKG_REV="1" -PKG_ARCH="any" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/muldjord/skyscraper" -PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain qt-everywhere p7zip:host" -PKG_PRIORITY="optional" -PKG_SECTION="emuelec" -PKG_SHORTDESC="Powerful and versatile game scraper written in c++ " -PKG_TOOLCHAIN="make" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" -GET_HANDLER_SUPPORT="git" -PKG_TOOLCHAIN="make" - -configure_target() { - # Fix install paths / 5schatten - sed -e "s#target.path=/usr/local/bin#target.path=${INSTALL}/usr/bin#" -i ${PKG_BUILD}/skyscraper.pro - sed -e "s#examples.path=/usr/local/etc/skyscraper#examples.path=${INSTALL}/usr/share/skyscraper#" -i ${PKG_BUILD}/skyscraper.pro - sed -e "s#cacheexamples.path=/usr/local/etc/skyscraper/cache#cacheexamples.path=${INSTALL}/usr/share/skyscraper/cache#" -i ${PKG_BUILD}/skyscraper.pro - sed -e "s#impexamples.path=/usr/local/etc/skyscraper/import#impexamples.path=${INSTALL}/usr/share/skyscraper/import#" -i ${PKG_BUILD}/skyscraper.pro - sed -e "s#resexamples.path=/usr/local/etc/skyscraper/resources#resexamples.path=${INSTALL}/usr/share/skyscraper/resources#" -i ${PKG_BUILD}/skyscraper.pro - - rm -rf .qmake.stash - QMAKEPATH=$(find $BUILD/qt-everywhere*/qtbase/bin -maxdepth 1 -name qmake) - $QMAKEPATH ${PKG_BUILD}/skyscraper.pro -} - -post_makeinstall_target() { - # Install scripts - cp ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin/ - - # Install config - mkdir -p ${INSTALL}/usr/config/skyscraper - cp ${PKG_DIR}/config/* ${INSTALL}/usr/config/skyscraper/ -} - diff --git a/packages/tools/scrapers/Skyscraper/scripts/skyscraper b/packages/tools/scrapers/Skyscraper/scripts/skyscraper deleted file mode 100755 index 919dada37..000000000 --- a/packages/tools/scrapers/Skyscraper/scripts/skyscraper +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2018-present 5schatten (https://github.com/5schatten) - -. /etc/profile - -# Set common paths -SKYSCRAPER_HOME_CONFIG=/storage/.config/skyscraper -SKYSCRAPER_HOME=/storage/.skyscraper - -# create link to config directory -if [ ! -L ${SKYSCRAPER_HOME} ]; then - cp -r ${SKYSCRAPER_HOME}/* ${SKYSCRAPER_HOME_CONFIG}/ - rm -rf ${SKYSCRAPER_HOME} - ln -s ${SKYSCRAPER_HOME_CONFIG} ${SKYSCRAPER_HOME} -fi - -Skyscraper "$@" - - diff --git a/packages/tools/scrapers/scraper/package.mk b/packages/tools/scrapers/scraper/package.mk deleted file mode 100644 index 413f502ea..000000000 --- a/packages/tools/scrapers/scraper/package.mk +++ /dev/null @@ -1,56 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert) - -PKG_NAME="scraper" -PKG_VERSION="509443bf66d9fccb1d6aa2417902124bd48f2141" -PKG_SHA256="5784ac4aa35919233774c3c0210d5cae4aa296ec30165b6b7a7cb41a7d98cb6d" -PKG_REV="2" -PKG_ARCH="any" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/sselph/scraper" -PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain go:host" -PKG_PRIORITY="optional" -PKG_SECTION="emuelec" -PKG_LONGDESC="A scraper for EmulationStation written in Go using hashing" -PKG_TOOLCHAIN="manual" - -configure_target() { - - case ${TARGET_ARCH} in - x86_64) - export GOARCH=amd64 - ;; - arm) - export GOARCH=arm - - case ${TARGET_CPU} in - arm1176jzf-s) - export GOARM=6 - ;; - *) - export GOARM=7 - ;; - esac - ;; - aarch64) - export GOARCH=arm64 - ;; - esac - - export GOOS=linux - export GOLANG=${TOOLCHAIN}/lib/golang/bin/go - export LDFLAGS="-w -extldflags -static -X main.gitCommit=${PKG_VERSION} -X main.versionStr=${PKG_VERSION:0:7} -extld ${CC}" -} - -make_target() { - mkdir -p bin - cd ${PKG_BUILD} - ${GOLANG} get github.com/sselph/scraper - ${GOLANG} build -ldflags "${LDFLAGS}" github.com/sselph/scraper -} - -makeinstall_target() { -mkdir -p ${INSTALL}/usr/bin/ - cp ${PKG_BUILD}/scraper ${INSTALL}/usr/bin/ -} diff --git a/packages/tools/sound/libmad/package.mk b/packages/tools/sound/libmad/package.mk deleted file mode 100644 index 94b25541d..000000000 --- a/packages/tools/sound/libmad/package.mk +++ /dev/null @@ -1,35 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="libmad" -PKG_VERSION="0.15.1b" -PKG_SHA256="bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690" -PKG_LICENSE="GPL" -PKG_SITE="http://www.mars.org/home/rob/proj/mpeg/" -PKG_URL="${SOURCEFORGE_SRC}/mad/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A high-quality MPEG audio decoder." -PKG_TOOLCHAIN="autotools" - -# package specific configure options -PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" -if [ "${TARGET_ARCH}" = "x86_64" ] ; then - PKG_CONFIGURE_OPTS_TARGET="${PKG_CONFIGURE_OPTS_TARGET} --enable-accuracy --enable-fpm=64bit" -fi - -post_makeinstall_target() { - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cat > ${SYSROOT_PREFIX}/usr/lib/pkgconfig/mad.pc << "EOF" -prefix=/usr -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: mad -Description: MPEG audio decoder -Requires: -Version: 0.15.1b -Libs: -L${libdir} -lmad -Cflags: -I${includedir} -EOF -} diff --git a/packages/tools/sound/libmad/patches/libmad-0.15.1b-automake_1.13.patch b/packages/tools/sound/libmad/patches/libmad-0.15.1b-automake_1.13.patch deleted file mode 100644 index 270ff8156..000000000 --- a/packages/tools/sound/libmad/patches/libmad-0.15.1b-automake_1.13.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur libmad-0.15.1b-old/configure.ac libmad-0.15.1b-new/configure.ac ---- libmad-0.15.1b-old/configure.ac 2004-01-23 01:41:32.000000000 -0800 -+++ libmad-0.15.1b-new/configure.ac 2012-12-30 15:14:37.000000000 -0800 -@@ -28,7 +28,7 @@ - - AM_INIT_AUTOMAKE - --AM_CONFIG_HEADER([config.h]) -+AC_CONFIG_HEADERS([config.h]) - - dnl System type. - diff --git a/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags-O2.patch b/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags-O2.patch deleted file mode 100644 index 61b4b13bd..000000000 --- a/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags-O2.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur libmad-0.15.1b-orig/configure.ac libmad-0.15.1b/configure.ac ---- libmad-0.15.1b-orig/configure.ac 2007-07-01 12:58:13.000000000 -0600 -+++ libmad-0.15.1b/configure.ac 2007-07-01 12:59:13.000000000 -0600 -@@ -105,7 +105,7 @@ - shift - ;; - -O2) -- optimize="-O" -+ optimize="-O2" - shift - ;; - -fomit-frame-pointer) diff --git a/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags.patch b/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags.patch deleted file mode 100644 index 2ec44e344..000000000 --- a/packages/tools/sound/libmad/patches/libmad-0.15.1b-cflags.patch +++ /dev/null @@ -1,146 +0,0 @@ -diff -Naur libmad-0.15.1b-orig/configure.ac libmad-0.15.1b/configure.ac ---- libmad-0.15.1b-orig/configure.ac 2007-06-30 20:22:31.000000000 -0600 -+++ libmad-0.15.1b/configure.ac 2007-06-30 20:25:31.000000000 -0600 -@@ -122,74 +122,74 @@ - esac - done - --if test "$GCC" = yes --then -- if test -z "$arch" -- then -- case "$host" in -- i386-*) ;; -- i?86-*) arch="-march=i486" ;; -- arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;; -- armv4*-*) arch="-march=armv4 -mtune=strongarm" ;; -- powerpc-*) ;; -- mips*-agenda-*) arch="-mcpu=vr4100" ;; -- mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;; -- esac -- fi -- -- case "$optimize" in -- -O|"-O "*) -- optimize="-O" -- optimize="$optimize -fforce-mem" -- optimize="$optimize -fforce-addr" -- : #x optimize="$optimize -finline-functions" -- : #- optimize="$optimize -fstrength-reduce" -- optimize="$optimize -fthread-jumps" -- optimize="$optimize -fcse-follow-jumps" -- optimize="$optimize -fcse-skip-blocks" -- : #x optimize="$optimize -frerun-cse-after-loop" -- : #x optimize="$optimize -frerun-loop-opt" -- : #x optimize="$optimize -fgcse" -- optimize="$optimize -fexpensive-optimizations" -- optimize="$optimize -fregmove" -- : #* optimize="$optimize -fdelayed-branch" -- : #x optimize="$optimize -fschedule-insns" -- optimize="$optimize -fschedule-insns2" -- : #? optimize="$optimize -ffunction-sections" -- : #? optimize="$optimize -fcaller-saves" -- : #> optimize="$optimize -funroll-loops" -- : #> optimize="$optimize -funroll-all-loops" -- : #x optimize="$optimize -fmove-all-movables" -- : #x optimize="$optimize -freduce-all-givs" -- : #? optimize="$optimize -fstrict-aliasing" -- : #* optimize="$optimize -fstructure-noalias" -- -- case "$host" in -- arm*-*) -- optimize="$optimize -fstrength-reduce" -- ;; -- mips*-*) -- optimize="$optimize -fstrength-reduce" -- optimize="$optimize -finline-functions" -- ;; -- i?86-*) -- optimize="$optimize -fstrength-reduce" -- ;; -- powerpc-apple-*) -- # this triggers an internal compiler error with gcc2 -- : #optimize="$optimize -fstrength-reduce" -- -- # this is really only beneficial with gcc3 -- : #optimize="$optimize -finline-functions" -- ;; -- *) -- # this sometimes provokes bugs in gcc 2.95.2 -- : #optimize="$optimize -fstrength-reduce" -- ;; -- esac -- ;; -- esac --fi -+#if test "$GCC" = yes -+#then -+# if test -z "$arch" -+# then -+# case "$host" in -+# i386-*) ;; -+# i?86-*) arch="-march=i486" ;; -+# arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;; -+# armv4*-*) arch="-march=armv4 -mtune=strongarm" ;; -+# powerpc-*) ;; -+# mips*-agenda-*) arch="-mcpu=vr4100" ;; -+# mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;; -+# esac -+# fi -+# -+# case "$optimize" in -+# -O|"-O "*) -+# optimize="-O" -+# optimize="$optimize -fforce-mem" -+# optimize="$optimize -fforce-addr" -+# : #x optimize="$optimize -finline-functions" -+# : #- optimize="$optimize -fstrength-reduce" -+# optimize="$optimize -fthread-jumps" -+# optimize="$optimize -fcse-follow-jumps" -+# optimize="$optimize -fcse-skip-blocks" -+# : #x optimize="$optimize -frerun-cse-after-loop" -+# : #x optimize="$optimize -frerun-loop-opt" -+# : #x optimize="$optimize -fgcse" -+# optimize="$optimize -fexpensive-optimizations" -+# optimize="$optimize -fregmove" -+# : #* optimize="$optimize -fdelayed-branch" -+# : #x optimize="$optimize -fschedule-insns" -+# optimize="$optimize -fschedule-insns2" -+# : #? optimize="$optimize -ffunction-sections" -+# : #? optimize="$optimize -fcaller-saves" -+# : #> optimize="$optimize -funroll-loops" -+# : #> optimize="$optimize -funroll-all-loops" -+# : #x optimize="$optimize -fmove-all-movables" -+# : #x optimize="$optimize -freduce-all-givs" -+# : #? optimize="$optimize -fstrict-aliasing" -+# : #* optimize="$optimize -fstructure-noalias" -+# -+# case "$host" in -+# arm*-*) -+# optimize="$optimize -fstrength-reduce" -+# ;; -+# mips*-*) -+# optimize="$optimize -fstrength-reduce" -+# optimize="$optimize -finline-functions" -+# ;; -+# i?86-*) -+# optimize="$optimize -fstrength-reduce" -+# ;; -+# powerpc-apple-*) -+# # this triggers an internal compiler error with gcc2 -+# : #optimize="$optimize -fstrength-reduce" -+# -+# # this is really only beneficial with gcc3 -+# : #optimize="$optimize -finline-functions" -+# ;; -+# *) -+# # this sometimes provokes bugs in gcc 2.95.2 -+# : #optimize="$optimize -fstrength-reduce" -+# ;; -+# esac -+# ;; -+# esac -+#fi - - case "$host" in - mips*-agenda-*) diff --git a/packages/web/libmicrohttpd/package.mk b/packages/web/libmicrohttpd/package.mk deleted file mode 100644 index 98926b121..000000000 --- a/packages/web/libmicrohttpd/package.mk +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libmicrohttpd" -PKG_VERSION="0.9.77" -PKG_LICENSE="LGPLv2.1" -PKG_SITE="http://www.gnu.org/software/libmicrohttpd/" -PKG_URL="http://ftp.gnu.org/gnu/libmicrohttpd/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain gnutls" -PKG_LONGDESC="A small C library that is supposed to make it easy to run an HTTP server as part of another application." - -PKG_CONFIGURE_OPTS_TARGET="--disable-shared \ - --enable-static \ - --disable-curl \ - --enable-https" - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr/bin -} From df0cdbf9615f69d9c60e5b11a8c00187f350b632 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 12 Apr 2024 15:19:42 +0200 Subject: [PATCH 006/184] Add back stress-ng --- packages/sysutils/stress-ng/package.mk | 13 +++++++++++++ packages/virtual/debug/package.mk | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 packages/sysutils/stress-ng/package.mk diff --git a/packages/sysutils/stress-ng/package.mk b/packages/sysutils/stress-ng/package.mk new file mode 100644 index 000000000..2a3e2b9d4 --- /dev/null +++ b/packages/sysutils/stress-ng/package.mk @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2024 JELOS (https://github.com/JustEnoughLinuxOS) + +PKG_NAME="stress-ng" +PKG_VERSION="2f22ad595f067aa940cfe4f64107e10872c2f7b5" # V0.17.04 +PKG_LICENSE="GPLv2" +PKG_SITE="https://github.com/ColinIanKing/stress-ng" +PKG_URL="${PKG_SITE}.git" +GET_HANDLER_SUPPORT="git" +PKG_DEPENDS_TARGET="toolchain attr keyutils libaio libcap zlib libjpeg-turbo" +PKG_LONGDESC="stress-ng will stress test a computer system in various selectable ways" +PKG_TOOLCHAIN="make" diff --git a/packages/virtual/debug/package.mk b/packages/virtual/debug/package.mk index a05ec2353..b85b04f20 100644 --- a/packages/virtual/debug/package.mk +++ b/packages/virtual/debug/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" -PKG_DEPENDS_TARGET="toolchain gdb apitrace valgrind strace edid-decode memtester smartmontools" +PKG_DEPENDS_TARGET="toolchain gdb apitrace valgrind strace edid-decode memtester smartmontools stress-ng" PKG_SECTION="virtual" PKG_LONGDESC="debug is a Metapackage for installing debugging tools" From bfe6778caa817466334ffafb69c6f786a3459489 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 13:27:55 +0000 Subject: [PATCH 007/184] Bump SDL2 to 2.30.2 --- packages/graphics/SDL2/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index ff417003c..fa9a5a141 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="SDL2" -PKG_VERSION="2.28.5" +PKG_VERSION="2.30.2" PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://www.libsdl.org/release/SDL2-${PKG_VERSION}.tar.gz" From b8dd405a229fee812ac9eecd05c6865f53537748 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:23:36 +0000 Subject: [PATCH 008/184] Clean up unused package variables --- packages/apps/control-gen/package.mk | 1 - packages/apps/fileman/package.mk | 2 -- packages/apps/gamecontrollerdb/package.mk | 1 - packages/compat/lib32/package.mk | 1 - packages/devel/gobject-introspection/package.mk | 1 - packages/devel/xa/package.mk | 2 -- packages/emulators/libretro/2048-lr/package.mk | 3 --- packages/emulators/libretro/81-lr/package.mk | 3 --- packages/emulators/libretro/a5200-lr/package.mk | 3 --- packages/emulators/libretro/atari800-lr/package.mk | 3 --- packages/emulators/libretro/beetle-gba-lr/package.mk | 3 --- packages/emulators/libretro/beetle-lynx-lr/package.mk | 3 --- packages/emulators/libretro/beetle-ngp-lr/package.mk | 3 --- packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 3 --- packages/emulators/libretro/beetle-pce-lr/package.mk | 3 --- packages/emulators/libretro/beetle-pcfx-lr/package.mk | 3 --- packages/emulators/libretro/beetle-saturn-lr/package.mk | 1 - packages/emulators/libretro/beetle-supafaust-lr/package.mk | 1 - packages/emulators/libretro/beetle-supergrafx-lr/package.mk | 3 --- packages/emulators/libretro/beetle-vb-lr/package.mk | 3 --- packages/emulators/libretro/beetle-wswan-lr/package.mk | 3 --- packages/emulators/libretro/bluemsx-lr/package.mk | 3 --- packages/emulators/libretro/bsnes-hd-lr/package.mk | 1 - packages/emulators/libretro/bsnes-lr/package.mk | 1 - .../emulators/libretro/bsnes-mercury-performance-lr/package.mk | 1 - packages/emulators/libretro/cap32-lr/package.mk | 3 --- packages/emulators/libretro/common-shaders/package.mk | 3 --- packages/emulators/libretro/crocods-lr/package.mk | 3 --- packages/emulators/libretro/daphne-lr/package.mk | 1 - packages/emulators/libretro/dolphin-lr/package.mk | 1 - packages/emulators/libretro/dosbox-lr/package.mk | 3 --- packages/emulators/libretro/dosbox-pure-lr/package.mk | 3 --- packages/emulators/libretro/dosbox-svn-lr/package.mk | 3 --- packages/emulators/libretro/duckstation-lr/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk | 2 -- packages/emulators/libretro/fbalpha2012-lr/package.mk | 2 -- packages/emulators/libretro/fbalpha2019-lr/package.mk | 2 -- packages/emulators/libretro/fbneo-lr/package.mk | 2 -- packages/emulators/libretro/fceumm-lr/package.mk | 3 --- packages/emulators/libretro/fmsx-lr/package.mk | 3 --- packages/emulators/libretro/freechaf-lr/package.mk | 3 --- packages/emulators/libretro/freeintv-lr/package.mk | 3 --- packages/emulators/libretro/freej2me-lr/package.mk | 3 --- packages/emulators/libretro/fuse-lr/package.mk | 3 --- packages/emulators/libretro/gambatte-lr/package.mk | 3 --- packages/emulators/libretro/gearboy-lr/package.mk | 3 --- packages/emulators/libretro/gearcoleco-lr/package.mk | 3 --- packages/emulators/libretro/gearsystem-lr/package.mk | 3 --- packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 3 --- packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk | 3 --- packages/emulators/libretro/glsl-shaders/package.mk | 3 --- packages/emulators/libretro/gw-lr/package.mk | 3 --- packages/emulators/libretro/handy-lr/package.mk | 3 --- packages/emulators/libretro/hatari-lr/package.mk | 3 --- packages/emulators/libretro/libretro-database/package.mk | 3 --- packages/emulators/libretro/lrps2-lr/package.mk | 1 - packages/emulators/libretro/mame-lr/package.mk | 1 - packages/emulators/libretro/mame2003-lr/package.mk | 3 --- packages/emulators/libretro/mame2003-midway-lr/package.mk | 3 --- packages/emulators/libretro/mame2003-plus-lr/package.mk | 3 --- packages/emulators/libretro/mame2003-xtreme-lr/package.mk | 1 - packages/emulators/libretro/mame2010-lr/package.mk | 3 --- packages/emulators/libretro/mame2015-lr/package.mk | 2 -- packages/emulators/libretro/mame2016-lr/package.mk | 1 - packages/emulators/libretro/melonds-lr/package.mk | 3 --- packages/emulators/libretro/mesen-lr/package.mk | 2 -- packages/emulators/libretro/mgba-lr/package.mk | 3 --- packages/emulators/libretro/minivmac-lr/package.mk | 1 - packages/emulators/libretro/mu-lr/package.mk | 3 --- packages/emulators/libretro/mupen64plus-lr/package.mk | 3 --- packages/emulators/libretro/mupen64plus-nx-lr/package.mk | 1 - packages/emulators/libretro/neocd_lr/package.mk | 3 --- packages/emulators/libretro/nestopia-lr/package.mk | 3 --- packages/emulators/libretro/np2kai-lr/package.mk | 3 --- packages/emulators/libretro/o2em-lr/package.mk | 3 --- packages/emulators/libretro/opera-lr/package.mk | 3 --- packages/emulators/libretro/parallel-n64-lr/package.mk | 1 - packages/emulators/libretro/picodrive-lr/package.mk | 2 -- packages/emulators/libretro/pokemini-lr/package.mk | 3 --- packages/emulators/libretro/potator-lr/package.mk | 3 --- packages/emulators/libretro/prosystem-lr/package.mk | 3 --- packages/emulators/libretro/puae-lr/package.mk | 3 --- packages/emulators/libretro/puae2021-lr/package.mk | 3 --- packages/emulators/libretro/px68k-lr/package.mk | 3 --- packages/emulators/libretro/quasi88-lr/package.mk | 3 --- packages/emulators/libretro/quicknes-lr/package.mk | 3 --- packages/emulators/libretro/race-lr/package.mk | 3 --- packages/emulators/libretro/retropie-shaders/package.mk | 3 --- packages/emulators/libretro/sameboy-lr/package.mk | 3 --- packages/emulators/libretro/sameduck-lr/package.mk | 3 --- packages/emulators/libretro/scummvm-lr/package.mk | 3 --- packages/emulators/libretro/slang-shaders/package.mk | 3 --- packages/emulators/libretro/smsplus-gx-lr/package.mk | 3 --- packages/emulators/libretro/snes9x-lr/package.mk | 3 --- packages/emulators/libretro/snes9x2002-lr/package.mk | 3 --- packages/emulators/libretro/snes9x2005_plus-lr/package.mk | 3 --- packages/emulators/libretro/snes9x2010-lr/package.mk | 3 --- packages/emulators/libretro/stella-lr/package.mk | 3 --- packages/emulators/libretro/swanstation-lr/package.mk | 1 - packages/emulators/libretro/tgbdual-lr/package.mk | 3 --- packages/emulators/libretro/tyrquake-lr/package.mk | 3 --- packages/emulators/libretro/uae4arm/package.mk | 3 --- packages/emulators/libretro/uzem-lr/package.mk | 3 --- packages/emulators/libretro/vba-next-lr/package.mk | 3 --- packages/emulators/libretro/vbam-lr/package.mk | 3 --- packages/emulators/libretro/vecx-lr/package.mk | 3 --- packages/emulators/libretro/vice-lr/package.mk | 3 --- packages/emulators/libretro/virtualjaguar-lr/package.mk | 3 --- packages/emulators/libretro/xmil-lr/package.mk | 3 --- packages/emulators/libretro/yabasanshiro-lr/package.mk | 3 --- packages/emulators/standalone/hypseus-singe/package.mk | 1 - packages/emulators/standalone/hypseus/package.mk | 1 - packages/emulators/standalone/minivmacsa/package.mk | 2 -- packages/emulators/standalone/pico-8/package.mk | 1 - packages/emulators/standalone/ppsspp-sa/package.mk | 1 - packages/emulators/standalone/scummvmsa/package.mk | 1 - packages/emulators/standalone/vice-sa/package.mk | 3 --- packages/graphics/SDL/SDL_net/package.mk | 1 - packages/graphics/SDL/package.mk | 1 - packages/graphics/SDL/yasm/package.mk | 1 - packages/multimedia/libdvbpsi/package.mk | 2 -- packages/multimedia/opusfile/package.mk | 2 -- packages/network/fping/package.mk | 1 - packages/network/rclone/package.mk | 1 - packages/network/sixaxis/package.mk | 1 - packages/tools/empty/package.mk | 1 - packages/tools/entware/package.mk | 1 - packages/tools/git/package.mk | 1 - packages/tools/joyutils/package.mk | 3 --- packages/ui/emulationstation/package.mk | 1 - 133 files changed, 314 deletions(-) diff --git a/packages/apps/control-gen/package.mk b/packages/apps/control-gen/package.mk index 9e54a2a24..0e602cc21 100644 --- a/packages/apps/control-gen/package.mk +++ b/packages/apps/control-gen/package.mk @@ -6,7 +6,6 @@ PKG_VERSION="ea44ab254d09d2d86eeb70289673418df2beee75" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="tools" PKG_SHORTDESC="Generates control.txt for gptokeyb" PKG_TOOLCHAIN="make" diff --git a/packages/apps/fileman/package.mk b/packages/apps/fileman/package.mk index 8a727ffef..0c781bbe6 100644 --- a/packages/apps/fileman/package.mk +++ b/packages/apps/fileman/package.mk @@ -9,8 +9,6 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/fileman" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_image SDL2_gfx SDL2_ttf" -PKG_PRIORITY="optional" -PKG_SECTION="tools" PKG_SHORTDESC="A Single panel file Manager." PKG_PATCH_DIRS="${DEVICE}" [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ] && PKG_PATCH_DIRS+=" S922X-MALI" diff --git a/packages/apps/gamecontrollerdb/package.mk b/packages/apps/gamecontrollerdb/package.mk index 1dc8e6dcf..a428272d4 100644 --- a/packages/apps/gamecontrollerdb/package.mk +++ b/packages/apps/gamecontrollerdb/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPL" PKG_DEPENDS_TARGET="toolchain SDL2" PKG_SITE="https://github.com/gabomdq/SDL_GameControllerDB" PKG_URL="${PKG_SITE}.git" -PKG_SECTION="tools" PKG_SHORTDESC="SDL Game Controller DB" PKG_TOOLCHAIN="manual" diff --git a/packages/compat/lib32/package.mk b/packages/compat/lib32/package.mk index ad4d3a08d..4e9c9b2c2 100644 --- a/packages/compat/lib32/package.mk +++ b/packages/compat/lib32/package.mk @@ -7,7 +7,6 @@ PKG_ARCH="aarch64 x86_64" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain retroarch SDL2 libsndfile libmodplug" PKG_SHORTDESC="ARM 32bit bundle for aarch64" -PKG_PRIORITY="optional" PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/devel/gobject-introspection/package.mk b/packages/devel/gobject-introspection/package.mk index 52f523210..16ed1409c 100644 --- a/packages/devel/gobject-introspection/package.mk +++ b/packages/devel/gobject-introspection/package.mk @@ -11,7 +11,6 @@ PKG_SITE="http://www.gtk.org/" PKG_URL="https://github.com/GNOME/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libffi glib Python3 qemu:host gobject-introspection:host" PKG_DEPENDS_HOST="libffi:host glib:host" -PKG_SECTION="devel" PKG_SHORTDESC="glib: C support library" PKG_LONGDESC="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." PKG_TOOLCHAIN="meson" diff --git a/packages/devel/xa/package.mk b/packages/devel/xa/package.mk index 85c08b72f..1fe62aca3 100644 --- a/packages/devel/xa/package.mk +++ b/packages/devel/xa/package.mk @@ -9,8 +9,6 @@ PKG_SITE="https://www.floodgap.com/retrotech/xa/" PKG_URL="${PKG_SITE}/dists/xa-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_HOST="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="tools" PKG_SHORTDESC="xa is a high-speed, two-pass portable cross-assembler." makeinstall_host() { diff --git a/packages/emulators/libretro/2048-lr/package.mk b/packages/emulators/libretro/2048-lr/package.mk index 9ac2f03f2..17f470b97 100644 --- a/packages/emulators/libretro/2048-lr/package.mk +++ b/packages/emulators/libretro/2048-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="2048-lr" PKG_VERSION="331c1de588ed8f8c370dcbc488e5434a3c09f0f2" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/libretro-2048" PKG_URL="https://github.com/libretro/libretro-2048/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of 2048 puzzle game to the libretro API." PKG_LONGDESC="Port of 2048 puzzle game to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/81-lr/package.mk b/packages/emulators/libretro/81-lr/package.mk index eb5609a84..ae7117480 100644 --- a/packages/emulators/libretro/81-lr/package.mk +++ b/packages/emulators/libretro/81-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="81-lr" PKG_VERSION="525d5c18f1ff3fc54c37e083a475225d9179d59d" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/81-libretro" PKG_URL="https://github.com/libretro/81-libretro/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A port of the EightyOne ZX81 Emulator to libretro" PKG_LONGDESC="A port of the EightyOne ZX81 Emulator to libretro" diff --git a/packages/emulators/libretro/a5200-lr/package.mk b/packages/emulators/libretro/a5200-lr/package.mk index e3681f5bc..ce4638023 100644 --- a/packages/emulators/libretro/a5200-lr/package.mk +++ b/packages/emulators/libretro/a5200-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="a5200-lr" PKG_VERSION="0942c88d64cad6853b539f51b39060a9de0cbcab" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/a5200" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Atari 5200 libretro core" PKG_TOOLCHAIN="auto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/atari800-lr/package.mk b/packages/emulators/libretro/atari800-lr/package.mk index 35bcd6c56..941990736 100644 --- a/packages/emulators/libretro/atari800-lr/package.mk +++ b/packages/emulators/libretro/atari800-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="atari800-lr" PKG_VERSION="410d7bf0c215f3444793a9cec51c129e7b67c400" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-atari800" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="atari800 3.1.0 for libretro/libco WIP" PKG_LONGDESC="atari800 3.1.0 for libretro/libco WIP" PKG_TOOLCHAIN="auto" diff --git a/packages/emulators/libretro/beetle-gba-lr/package.mk b/packages/emulators/libretro/beetle-gba-lr/package.mk index 20576324e..b7e55b061 100644 --- a/packages/emulators/libretro/beetle-gba-lr/package.mk +++ b/packages/emulators/libretro/beetle-gba-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-gba-lr" PKG_VERSION="38182572571a48cb58057cde64b915237c4e2d58" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-gba-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" PKG_LONGDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" diff --git a/packages/emulators/libretro/beetle-lynx-lr/package.mk b/packages/emulators/libretro/beetle-lynx-lr/package.mk index df0108bd1..5d6d89710 100644 --- a/packages/emulators/libretro/beetle-lynx-lr/package.mk +++ b/packages/emulators/libretro/beetle-lynx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-lynx-lr" PKG_VERSION="48909ddd1aba4de034d9c1da70c460b1724daa3b" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-lynx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen Lynx" PKG_LONGDESC="libretro implementation of Mednafen Lynx" diff --git a/packages/emulators/libretro/beetle-ngp-lr/package.mk b/packages/emulators/libretro/beetle-ngp-lr/package.mk index 645d66453..49490b27d 100644 --- a/packages/emulators/libretro/beetle-ngp-lr/package.mk +++ b/packages/emulators/libretro/beetle-ngp-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-ngp-lr" PKG_VERSION="673c3d924ff33d71c6a342b170eff5359244df1f" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-ngp-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen Neo Geo Pocket." PKG_LONGDESC="libretro implementation of Mednafen Neo Geo Pocket." diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index 61642682e..d197a7c6e 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-pce-fast-lr" PKG_VERSION="6210d0f8c262dcdaa5b76c28057cca6077f488fe" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index 877fd23a1..422ceed5b 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-pce-lr" PKG_VERSION="20b86372b5f490394099ee0ad06e0eb3a4fd5c2e" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Standalone port of Mednafen PCE to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE to libretro." diff --git a/packages/emulators/libretro/beetle-pcfx-lr/package.mk b/packages/emulators/libretro/beetle-pcfx-lr/package.mk index 1facce17b..4f75fc387 100644 --- a/packages/emulators/libretro/beetle-pcfx-lr/package.mk +++ b/packages/emulators/libretro/beetle-pcfx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-pcfx-lr" PKG_VERSION="47c355b6a515aef6dc57f57df1535570108a0e21" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pcfx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen PC-FX." PKG_LONGDESC="libretro implementation of Mednafen PC-FX." diff --git a/packages/emulators/libretro/beetle-saturn-lr/package.mk b/packages/emulators/libretro/beetle-saturn-lr/package.mk index fbf77fa76..efdec4915 100644 --- a/packages/emulators/libretro/beetle-saturn-lr/package.mk +++ b/packages/emulators/libretro/beetle-saturn-lr/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-saturn-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Beetle Saturn libretro, a fork from mednafen" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-supafaust-lr/package.mk b/packages/emulators/libretro/beetle-supafaust-lr/package.mk index d1753e8c3..7482c7496 100644 --- a/packages/emulators/libretro/beetle-supafaust-lr/package.mk +++ b/packages/emulators/libretro/beetle-supafaust-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-supafaust-lr" PKG_VERSION="6b639c98372d1c9bac885c55d772c812d2a9d525" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/supafaust" diff --git a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk index 45dc200b6..bce1b3189 100644 --- a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk +++ b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-supergrafx-lr" PKG_VERSION="e41f864c0abb36aef20f8e37cd9d9a92c00a9221" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-supergrafx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." diff --git a/packages/emulators/libretro/beetle-vb-lr/package.mk b/packages/emulators/libretro/beetle-vb-lr/package.mk index 101743254..9f0a6cd93 100644 --- a/packages/emulators/libretro/beetle-vb-lr/package.mk +++ b/packages/emulators/libretro/beetle-vb-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-vb-lr" PKG_VERSION="9d1bd03f21dac7897f65269e1095496331efce8b" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-vb-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen VB. (VirtualBoy)" PKG_LONGDESC="libretro implementation of Mednafen VB. (VirtualBoy)" diff --git a/packages/emulators/libretro/beetle-wswan-lr/package.mk b/packages/emulators/libretro/beetle-wswan-lr/package.mk index d082ba0ba..23213cf6e 100644 --- a/packages/emulators/libretro/beetle-wswan-lr/package.mk +++ b/packages/emulators/libretro/beetle-wswan-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="beetle-wswan-lr" PKG_VERSION="32bf70a3032a138baa969c22445f4b7821632c30" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-wswan-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of Mednafen wswan" PKG_LONGDESC="libretro implementation of Mednafen wswan" diff --git a/packages/emulators/libretro/bluemsx-lr/package.mk b/packages/emulators/libretro/bluemsx-lr/package.mk index a922d7bfc..bdc22cce7 100644 --- a/packages/emulators/libretro/bluemsx-lr/package.mk +++ b/packages/emulators/libretro/bluemsx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="bluemsx-lr" PKG_VERSION="e8a4280bcbd149d1e020adcd9469ad9d8bd67412" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/blueMSX-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of blueMSX to the libretro API." PKG_LONGDESC="Port of blueMSX to the libretro API." diff --git a/packages/emulators/libretro/bsnes-hd-lr/package.mk b/packages/emulators/libretro/bsnes-hd-lr/package.mk index 77359af67..fef5730e2 100644 --- a/packages/emulators/libretro/bsnes-hd-lr/package.mk +++ b/packages/emulators/libretro/bsnes-hd-lr/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/DerKoun/bsnes-hd" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="bsnes-hd is a fork of bsnes that adds HD video features such as widescreen, HD Mode 7 and true color" PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/bsnes-lr/package.mk b/packages/emulators/libretro/bsnes-lr/package.mk index 988e66aa4..75a8735f3 100644 --- a/packages/emulators/libretro/bsnes-lr/package.mk +++ b/packages/emulators/libretro/bsnes-lr/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/bsnes-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk index 25a9ae206..b80b7fda9 100644 --- a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk +++ b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/bsnes-mercury" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/cap32-lr/package.mk b/packages/emulators/libretro/cap32-lr/package.mk index b4a548e5d..3245c0887 100644 --- a/packages/emulators/libretro/cap32-lr/package.mk +++ b/packages/emulators/libretro/cap32-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="cap32-lr" PKG_VERSION="1569dac2674512fa503dbb95eb32bccbe2908063" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-cap32" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="caprice32 4.2.0 libretro" PKG_LONGDESC="caprice32 4.2.0 libretro" diff --git a/packages/emulators/libretro/common-shaders/package.mk b/packages/emulators/libretro/common-shaders/package.mk index ab5f84eb4..2e7b6d45b 100644 --- a/packages/emulators/libretro/common-shaders/package.mk +++ b/packages/emulators/libretro/common-shaders/package.mk @@ -22,14 +22,11 @@ PKG_NAME="common-shaders" PKG_VERSION="86cfa146a8dfddf6377ddb5dbcff552feae2e5bf" -PKG_REV="1" PKG_ARCH="aarch64" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/common-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro common shaders" PKG_LONGDESC="Libretro common shaders" diff --git a/packages/emulators/libretro/crocods-lr/package.mk b/packages/emulators/libretro/crocods-lr/package.mk index 28b89be2f..41833e348 100644 --- a/packages/emulators/libretro/crocods-lr/package.mk +++ b/packages/emulators/libretro/crocods-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="crocods-lr" PKG_VERSION="f1b4b91291ba1e8e7c0be02269cd0d75c7fa71b9" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/libretro/libretro-crocods" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Amstrad CPC emulator" PKG_LONGDESC="Amstrad CPC emulator" diff --git a/packages/emulators/libretro/daphne-lr/package.mk b/packages/emulators/libretro/daphne-lr/package.mk index 41a49f260..bccccc6dd 100644 --- a/packages/emulators/libretro/daphne-lr/package.mk +++ b/packages/emulators/libretro/daphne-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="daphne-lr" PKG_VERSION="b5481bab34a51369b6749cd95f5f889e43aaa23f" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2+" PKG_SITE="https://github.com/libretro/daphne" diff --git a/packages/emulators/libretro/dolphin-lr/package.mk b/packages/emulators/libretro/dolphin-lr/package.mk index c3902682c..a6fc2490e 100644 --- a/packages/emulators/libretro/dolphin-lr/package.mk +++ b/packages/emulators/libretro/dolphin-lr/package.mk @@ -9,7 +9,6 @@ PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb" PKG_SITE="https://github.com/libretro/dolphin" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Dolphin Libretro, a Gamecube & Wii emulator core for Retroarch" PKG_TOOLCHAIN="cmake" diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk index 0517ff2f1..65cf25532 100644 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ b/packages/emulators/libretro/dosbox-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="dosbox-lr" PKG_VERSION="b7b24262c282c0caef2368c87323ff8c381b3102" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/dosbox-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro wrapper for the DOSBox emulator" PKG_LONGDESC="An open source DOS emulator for BeOS, Linux, Mac OS X, OS/2, and Windows. Primarily focuses on running DOS Games." PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/dosbox-pure-lr/package.mk b/packages/emulators/libretro/dosbox-pure-lr/package.mk index e1661a1e3..fa0a62d7b 100644 --- a/packages/emulators/libretro/dosbox-pure-lr/package.mk +++ b/packages/emulators/libretro/dosbox-pure-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="dosbox-pure-lr" PKG_VERSION="87bf6365158325b76ff238c1ad8daf16a859bbe8" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/schellingb/dosbox-pure" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A port of DOSBox to libretro" PKG_LONGDESC="A port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/dosbox-svn-lr/package.mk b/packages/emulators/libretro/dosbox-svn-lr/package.mk index 77bd4bc69..14a91ed90 100644 --- a/packages/emulators/libretro/dosbox-svn-lr/package.mk +++ b/packages/emulators/libretro/dosbox-svn-lr/package.mk @@ -21,15 +21,12 @@ PKG_NAME="dosbox-svn-lr" PKG_VERSION="53ca2f6303a652d129321cfc521f000cd7ec5531" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/dosbox-svn" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="libretro" PKG_DEPENDS_TARGET="toolchain SDL SDL_net retroarch" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Upstream port of DOSBox to libretro" PKG_LONGDESC="Upstream port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/duckstation-lr/package.mk b/packages/emulators/libretro/duckstation-lr/package.mk index 3e121c508..5ccec2937 100644 --- a/packages/emulators/libretro/duckstation-lr/package.mk +++ b/packages/emulators/libretro/duckstation-lr/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/stenzek/duckstation" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 nasm:host pulseaudio openssl libidn2 nghttp2 zlib curl libevdev" -PKG_SECTION="libretro" PKG_SHORTDESC="DuckStation - PlayStation 1, aka. PSX Emulator" PKG_TOOLCHAIN="cmake" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk index 1ffef84ae..be9627ad2 100644 --- a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk @@ -20,12 +20,10 @@ PKG_NAME="libspeexdsp" PKG_VERSION="738e17905e1ca2a1fa932ddd9c2a85d089f4e845" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="https://github.com/xiph/speexdsp" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" PKG_SHORTDESC="Speex audio processing library" GET_HANDLER_SUPPORT="git" PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk index d424ddc9b..959e1cbdc 100644 --- a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk @@ -20,12 +20,10 @@ PKG_NAME="libxmp-lite" PKG_VERSION="4.5.0" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="http://sourceforge.net/projects/xmp" PKG_URL="${PKG_SITE}/files/libxmp/${PKG_VERSION}/libxmp-lite-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" PKG_SHORTDESC="Libxmp is a library that renders module files to PCM data." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/easyrpg-lr/package.mk b/packages/emulators/libretro/easyrpg-lr/package.mk index ebf2e642a..b42d59a56 100644 --- a/packages/emulators/libretro/easyrpg-lr/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/package.mk @@ -27,8 +27,6 @@ PKG_SITE="https://github.com/easyrpg/player" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="0-8-0-stable" PKG_DEPENDS_TARGET="toolchain zlib libfmt liblcf icu pixman libspeexdsp mpg123 libsndfile libvorbis opusfile wildmidi libxmp-lite fluidsynth harfbuzz libpng retroarch" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="An unofficial libretro port of the EasyRPG/Player." PKG_LONGDESC="An unofficial libretro port of the EasyRPG/Player." GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk index 2e40e71a2..6e8d24dd0 100644 --- a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk @@ -20,12 +20,10 @@ PKG_NAME="wildmidi" PKG_VERSION="405ca73" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="https://github.com/Mindwerks/wildmidi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" PKG_SHORTDESC="WildMIDI is a simple software midi player which has a core softsynth library that can be used with other applications." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/fbalpha2012-lr/package.mk b/packages/emulators/libretro/fbalpha2012-lr/package.mk index ccd91858f..4fb9b8a7f 100644 --- a/packages/emulators/libretro/fbalpha2012-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2012-lr/package.mk @@ -26,8 +26,6 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha2012" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of Final Burn Alpha 2012 to Libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fbalpha2019-lr/package.mk b/packages/emulators/libretro/fbalpha2019-lr/package.mk index 5acdcd264..09de52943 100644 --- a/packages/emulators/libretro/fbalpha2019-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2019-lr/package.mk @@ -26,8 +26,6 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of Final Burn Alpha to Libretro (v0.2.97.44)." PKG_LONGDESC="Currently, FB Alpha supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/fbneo-lr/package.mk b/packages/emulators/libretro/fbneo-lr/package.mk index ba2a6c5ca..a9eb5c32e 100644 --- a/packages/emulators/libretro/fbneo-lr/package.mk +++ b/packages/emulators/libretro/fbneo-lr/package.mk @@ -5,13 +5,11 @@ PKG_NAME="fbneo-lr" PKG_VERSION="a5c3e943d432b467110d06bf9c4cfc4143e7274e" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/FBNeo" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of Final Burn Neo to Libretro (v0.2.97.38)." PKG_LONGDESC="Currently, FB neo supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware. " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index 8629eb5b8..de25fcf10 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="fceumm-lr" PKG_VERSION="40969671ce9e4b1a49165d836476cd71bb960131" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-fceumm" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of FCEUmm / FCEUX to Libretro." PKG_LONGDESC="FCEUX is a Nintendo Entertainment System (NES), Famicom, and Famicom Disk System (FDS) emulator." diff --git a/packages/emulators/libretro/fmsx-lr/package.mk b/packages/emulators/libretro/fmsx-lr/package.mk index aebff3bc2..55ad9e299 100644 --- a/packages/emulators/libretro/fmsx-lr/package.mk +++ b/packages/emulators/libretro/fmsx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="fmsx-lr" PKG_VERSION="9b5cf868825a629cc4c7086768338165d3bbf706" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/fmsx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of fMSX 4.9 to the libretro API." PKG_LONGDESC="Port of fMSX 4.9 to the libretro API." diff --git a/packages/emulators/libretro/freechaf-lr/package.mk b/packages/emulators/libretro/freechaf-lr/package.mk index 92fe36013..c2e2e790b 100644 --- a/packages/emulators/libretro/freechaf-lr/package.mk +++ b/packages/emulators/libretro/freechaf-lr/package.mk @@ -1,13 +1,10 @@ PKG_NAME="freechaf-lr" PKG_VERSION="782739dd6988b0148f9c26ddc6ff414e76e54d7b" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/FreeChaF" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." PKG_LONGDESC="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/freeintv-lr/package.mk b/packages/emulators/libretro/freeintv-lr/package.mk index c3bfceb2d..4930bff18 100644 --- a/packages/emulators/libretro/freeintv-lr/package.mk +++ b/packages/emulators/libretro/freeintv-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="freeintv-lr" PKG_VERSION="85bf25a39a34bbc39fe36677175d87c2b597dbe7" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/FreeIntv" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." PKG_LONGDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." diff --git a/packages/emulators/libretro/freej2me-lr/package.mk b/packages/emulators/libretro/freej2me-lr/package.mk index 1aaee5de7..827c517c9 100644 --- a/packages/emulators/libretro/freej2me-lr/package.mk +++ b/packages/emulators/libretro/freej2me-lr/package.mk @@ -4,13 +4,10 @@ PKG_NAME="freej2me-lr" PKG_VERSION="8b9bc8a19baf26e3d92f88934a64a32f1cbc2795" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="https://github.com/hex007/freej2me" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain apache-ant:host" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A free J2ME emulator with libretro, awt and sdl2 frontends." PKG_LONGDESC="A free J2ME emulator with libretro, awt and sdl2 frontends." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fuse-lr/package.mk b/packages/emulators/libretro/fuse-lr/package.mk index 90c1c939c..10bd6056f 100644 --- a/packages/emulators/libretro/fuse-lr/package.mk +++ b/packages/emulators/libretro/fuse-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="fuse-lr" PKG_VERSION="847dbbd6f787823ac9a5dfacdd68ab181063374e" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/fuse-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A port of the Fuse Unix Spectrum Emulator to libretro " PKG_LONGDESC="A port of the Fuse Unix Spectrum Emulator to libretro " diff --git a/packages/emulators/libretro/gambatte-lr/package.mk b/packages/emulators/libretro/gambatte-lr/package.mk index 50e371856..11fc043d5 100644 --- a/packages/emulators/libretro/gambatte-lr/package.mk +++ b/packages/emulators/libretro/gambatte-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="gambatte-lr" PKG_VERSION="cbda5ea9fd81d1be0220dfc690d05240655602e4" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/gambatte-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro implementation of libgambatte" PKG_LONGDESC="Gambatte is an open-source Game Boy Color emulator written for fun and made available in the hope that it will be useful." diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 0104624cd..1c54a7e25 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -16,14 +16,11 @@ PKG_NAME="gearboy-lr" PKG_VERSION="3b94ce2c425833f0bdf10f933e9e7c9db1621963" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearboy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" PKG_LONGDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" diff --git a/packages/emulators/libretro/gearcoleco-lr/package.mk b/packages/emulators/libretro/gearcoleco-lr/package.mk index 2f5f6fe8b..cd82e1cba 100644 --- a/packages/emulators/libretro/gearcoleco-lr/package.mk +++ b/packages/emulators/libretro/gearcoleco-lr/package.mk @@ -16,14 +16,11 @@ PKG_NAME="gearcoleco-lr" PKG_VERSION="6cf0df47d9dcbbaf0110c3864f6cbaf603df41f7" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearcoleco" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." PKG_LONGDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." diff --git a/packages/emulators/libretro/gearsystem-lr/package.mk b/packages/emulators/libretro/gearsystem-lr/package.mk index cfb196761..8509615d9 100644 --- a/packages/emulators/libretro/gearsystem-lr/package.mk +++ b/packages/emulators/libretro/gearsystem-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="gearsystem-lr" PKG_VERSION="3639641ac7ad76ac45339a44792b68838a2bafc4" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/drhelius/Gearsystem" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" PKG_LONGDESC="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index 7825b84e0..a1c2088b3 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="genesis-plus-gx-lr" PKG_VERSION="667158b034ce860e345b13e1ed927fea9d155b96" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." diff --git a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk index cfcf8fa2c..323ad74a4 100644 --- a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="genesis-plus-gx-wide-lr" PKG_VERSION="3c4dccdc2a60db50bb8c37090e3d3d2134a51295" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX-Wide" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." diff --git a/packages/emulators/libretro/glsl-shaders/package.mk b/packages/emulators/libretro/glsl-shaders/package.mk index ed22b88f6..45375b825 100644 --- a/packages/emulators/libretro/glsl-shaders/package.mk +++ b/packages/emulators/libretro/glsl-shaders/package.mk @@ -22,14 +22,11 @@ PKG_NAME="glsl-shaders" PKG_VERSION="7e1617b722f85466ad7dd4ddb4ac241fd02dc8d0" -PKG_REV="1" PKG_ARCH="aarch64" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/glsl-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Common GSLS shaders for RetroArch" PKG_LONGDESC="Common GSLS shaders for RetroArch" diff --git a/packages/emulators/libretro/gw-lr/package.mk b/packages/emulators/libretro/gw-lr/package.mk index 75feb93af..0923ab6dc 100644 --- a/packages/emulators/libretro/gw-lr/package.mk +++ b/packages/emulators/libretro/gw-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="gw-lr" PKG_VERSION="0ecff52b11c327af52b22ea94b268c90472b6732" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/gw-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A libretro core for Game & Watch simulators " PKG_LONGDESC="A libretro core for Game & Watch simulators " diff --git a/packages/emulators/libretro/handy-lr/package.mk b/packages/emulators/libretro/handy-lr/package.mk index 8a644b85f..6fb5d1254 100644 --- a/packages/emulators/libretro/handy-lr/package.mk +++ b/packages/emulators/libretro/handy-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="handy-lr" PKG_VERSION="65d6b865544cd441ef2bd18cde7bd834c23d0e48" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Zlib" PKG_SITE="https://github.com/libretro/libretro-handy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="K. Wilkins' Atari Lynx emulator Handy for libretro" PKG_LONGDESC="Handy is an Atari Lynx Emulator for Windows 95/98/NT/2000. Handy was the original name of the Lynx project that was started at Epyx and then finished by Atari." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/hatari-lr/package.mk b/packages/emulators/libretro/hatari-lr/package.mk index 9c9dcb176..9d71c8fcb 100644 --- a/packages/emulators/libretro/hatari-lr/package.mk +++ b/packages/emulators/libretro/hatari-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="hatari-lr" PKG_VERSION="a4c9eb0bb79e47a2870c12b04566c1f8d25e4bf3" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/hatari" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain capsimg" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." PKG_LONGDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index 7e9b01cb8..b27d5c175 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -21,14 +21,11 @@ PKG_NAME="libretro-database" PKG_VERSION="588356595a142fb7bc642060413c123bc9ebd7dd" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-database" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Repository containing cheatcode files, content data files, etc." PKG_LONGDESC="Repository containing cheatcode files, content data files, etc." diff --git a/packages/emulators/libretro/lrps2-lr/package.mk b/packages/emulators/libretro/lrps2-lr/package.mk index ff6875ce6..f253c367f 100644 --- a/packages/emulators/libretro/lrps2-lr/package.mk +++ b/packages/emulators/libretro/lrps2-lr/package.mk @@ -9,7 +9,6 @@ PKG_DEPENDS_TARGET="toolchain alsa-lib freetype zlib libpng libaio libsamplerate PKG_SITE="https://github.com/libretro/LRPS2" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Hard fork / port of PCSX2. Will target only Libretro specifically." if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/mame-lr/package.mk b/packages/emulators/libretro/mame-lr/package.mk index e319ee0c3..2b60f1241 100644 --- a/packages/emulators/libretro/mame-lr/package.mk +++ b/packages/emulators/libretro/mame-lr/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame" PKG_URL="https://github.com/libretro/mame/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain zlib flac sqlite expat" -PKG_SECTION="libretro" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto +pic" diff --git a/packages/emulators/libretro/mame2003-lr/package.mk b/packages/emulators/libretro/mame2003-lr/package.mk index 2f33cd51e..4c3f6abe8 100644 --- a/packages/emulators/libretro/mame2003-lr/package.mk +++ b/packages/emulators/libretro/mame2003-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="mame2003" PKG_VERSION="c079e586e5ef54e084622863816f4f0439fdb870" PKG_SHA256="a23579c5df4cadcf57740a4d64e10eff0e26805e304261902a4d891fd2a2662a" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk index 93232fe81..ea0a8b0f6 100644 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ b/packages/emulators/libretro/mame2003-midway-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="mame2003-midway-lr" PKG_VERSION="2204233a66a78ebbb0ef1e86bb9d36e4405a2a92" PKG_SHA256="8ed1addf56c9ed1999bac813e132c630f67096c9eaf4ab16495030c3e9045d43" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003_midway" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index 4ee69c6b9..d88026559 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="mame2003-plus-lr" PKG_VERSION="0d7dfa721f6362e4ea152bf710046a47710ea691" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" diff --git a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk b/packages/emulators/libretro/mame2003-xtreme-lr/package.mk index 506a026b0..44e22e251 100644 --- a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk +++ b/packages/emulators/libretro/mame2003-xtreme-lr/package.mk @@ -4,7 +4,6 @@ PKG_NAME="mame2003-xtreme-lr" PKG_VERSION="47deb07f49224ec5b0bbc56392b639d728183629" PKG_SHA256="185b7e857e836b3987737ff9077d0709444491a0f138cfbbe1f50a6ad5d719b7" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/KMFDManic/mame2003-xtreme" diff --git a/packages/emulators/libretro/mame2010-lr/package.mk b/packages/emulators/libretro/mame2010-lr/package.mk index 8fa102cb9..254febc41 100644 --- a/packages/emulators/libretro/mame2010-lr/package.mk +++ b/packages/emulators/libretro/mame2010-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="mame2010-lr" PKG_VERSION="5f524dd5fca63ec1dcf5cca63885286109937587" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2010-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." PKG_LONGDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." diff --git a/packages/emulators/libretro/mame2015-lr/package.mk b/packages/emulators/libretro/mame2015-lr/package.mk index ffd5c722e..795c2cea3 100644 --- a/packages/emulators/libretro/mame2015-lr/package.mk +++ b/packages/emulators/libretro/mame2015-lr/package.mk @@ -19,13 +19,11 @@ PKG_NAME="mame2015-lr" PKG_VERSION="316cd06349f2b34b4719f04f7c0d07569a74c764" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2015-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Late 2014/Early 2015 version of MAME (0.160-ish) for libretro. Compatible with MAME 0.160 romsets." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/mame2016-lr/package.mk b/packages/emulators/libretro/mame2016-lr/package.mk index 6543487c2..06a7fc042 100644 --- a/packages/emulators/libretro/mame2016-lr/package.mk +++ b/packages/emulators/libretro/mame2016-lr/package.mk @@ -9,7 +9,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2016-libretro" PKG_URL="https://github.com/libretro/mame2016-libretro/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="escalade" PKG_SHORTDESC="MAME (0.174-ish) for libretro" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/melonds-lr/package.mk b/packages/emulators/libretro/melonds-lr/package.mk index 2b01a5bdd..97f4aa782 100644 --- a/packages/emulators/libretro/melonds-lr/package.mk +++ b/packages/emulators/libretro/melonds-lr/package.mk @@ -3,13 +3,10 @@ PKG_NAME="melonds-lr" PKG_VERSION="c6488c88cb4c7583dbcd61609e0eef441572fae8" -PKG_REV="1" PKG_LICENSE="GPLv3" PKG_SITE="https://git.libretro.com/libretro/melonDS" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="MelonDS - Nintendo DS emulator for libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mesen-lr/package.mk b/packages/emulators/libretro/mesen-lr/package.mk index ea64af508..8d4d18614 100644 --- a/packages/emulators/libretro/mesen-lr/package.mk +++ b/packages/emulators/libretro/mesen-lr/package.mk @@ -8,8 +8,6 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/Mesen" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Mesen is a cross-platform NES/Famicom emulator for Windows & Linux built in C++ and C#." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mgba-lr/package.mk b/packages/emulators/libretro/mgba-lr/package.mk index 142ea09ca..05ff04d11 100644 --- a/packages/emulators/libretro/mgba-lr/package.mk +++ b/packages/emulators/libretro/mgba-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="mgba-lr" PKG_VERSION="b2564482c86378581a7a43ef4e254b2a75167bc7" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MPLv2.0" PKG_SITE="https://github.com/libretro/mgba" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="mGBA Game Boy Advance Emulator" PKG_LONGDESC="mGBA is a new emulator for running Game Boy Advance games. It aims to be faster and more accurate than many existing Game Boy Advance emulators, as well as adding features that other emulators lack." PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/minivmac-lr/package.mk b/packages/emulators/libretro/minivmac-lr/package.mk index c02277254..2791a5e7e 100644 --- a/packages/emulators/libretro/minivmac-lr/package.mk +++ b/packages/emulators/libretro/minivmac-lr/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-minivmac" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="libretro" PKG_SHORTDESC="Virtual Macintosh" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mu-lr/package.mk b/packages/emulators/libretro/mu-lr/package.mk index c792ce55b..ebd3de999 100644 --- a/packages/emulators/libretro/mu-lr/package.mk +++ b/packages/emulators/libretro/mu-lr/package.mk @@ -3,15 +3,12 @@ PKG_NAME="mu-lr" PKG_VERSION="865acf3a2889dfe02863bbfb9c5b3cfee8620c22" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="CC BY-NC 3.0 US" PKG_SITE="https://git.libretro.com/libretro/Mu" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/Mu-${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="buildbot" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="An emulator for the Palm m515 OS ported to libretro." PKG_LONGDESC="An emulator for the Palm m515 OS ported to libretro. It is intended to avoid hacks like those used by the POSE emulator, where API calls are intercepted and replaced with those that don't use the actual hardware." diff --git a/packages/emulators/libretro/mupen64plus-lr/package.mk b/packages/emulators/libretro/mupen64plus-lr/package.mk index a9b0cc8bf..019769f57 100644 --- a/packages/emulators/libretro/mupen64plus-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-lr/package.mk @@ -21,13 +21,10 @@ PKG_NAME="mupen64plus-lr" PKG_VERSION="ab8134ac90a567581df6de4fc427dd67bfad1b17" -PKG_REV="1" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mupen64plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="mupen64plus + RSP-HLE + GLideN64 + libretro" PKG_LONGDESC="mupen64plus + RSP-HLE + GLideN64 + libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk index 876500572..8affabfcf 100755 --- a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mupen64plus-libretro-nx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_SECTION="libretro" PKG_SHORTDESC="mupen64plus NX" PKG_LONGDESC="mupen64plus NX" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/neocd_lr/package.mk b/packages/emulators/libretro/neocd_lr/package.mk index d6e187602..7616c15bf 100644 --- a/packages/emulators/libretro/neocd_lr/package.mk +++ b/packages/emulators/libretro/neocd_lr/package.mk @@ -3,14 +3,11 @@ PKG_NAME="neocd_lr" PKG_VERSION="71ebe5044639b825e5bd1bd590fef3e918133b80" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPLv3.0" PKG_SITE="https://github.com/libretro/neocd_libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain flac libogg libvorbis" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Neo Geo CD emulator for libretro " PKG_LONGDESC="NeoCD-Libretro is a complete rewrite of NeoCD from scratch in modern C++11. It is designed with accuracy and portability in mind rather than being all about speed like the the older versions. The goal is also to document all I know about the platform in the source code so other emulator authors can make their own implementations." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index d27f6cfa2..ec26f461d 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="nestopia-lr" PKG_VERSION="efe3a052c75ad47d6e98eeffd1f3d2d4893279c2" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/nestopia" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro implementation of NEStopia. (Nintendo Entertainment System)" PKG_LONGDESC="This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to enhance the original, and ensure it continues to work on modern operating systems." diff --git a/packages/emulators/libretro/np2kai-lr/package.mk b/packages/emulators/libretro/np2kai-lr/package.mk index f98da5d55..dae64261b 100644 --- a/packages/emulators/libretro/np2kai-lr/package.mk +++ b/packages/emulators/libretro/np2kai-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="np2kai-lr" PKG_VERSION="c2ca4046860264cb307e768f529f180caee5e224" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/AZO234/NP2kai" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Neko Project II kai" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/o2em-lr/package.mk b/packages/emulators/libretro/o2em-lr/package.mk index a62e2ff44..e322c3f35 100644 --- a/packages/emulators/libretro/o2em-lr/package.mk +++ b/packages/emulators/libretro/o2em-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="o2em-lr" PKG_VERSION="44fe5f306033242f7d74144105e19a7d4939477e" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Artistic License" PKG_SITE="https://github.com/libretro/libretro-o2em" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." PKG_LONGDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." diff --git a/packages/emulators/libretro/opera-lr/package.mk b/packages/emulators/libretro/opera-lr/package.mk index f0baeafda..f4a033bcf 100644 --- a/packages/emulators/libretro/opera-lr/package.mk +++ b/packages/emulators/libretro/opera-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="opera-lr" PKG_VERSION="35e16483be900ea8aa20e87d2710b677437f73ce" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL with additional notes" PKG_SITE="https://github.com/libretro/opera-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of 4DO/libfreedo to libretro." PKG_LONGDESC="Port of 4DO/libfreedo to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/parallel-n64-lr/package.mk b/packages/emulators/libretro/parallel-n64-lr/package.mk index 599238c70..cfc809b98 100644 --- a/packages/emulators/libretro/parallel-n64-lr/package.mk +++ b/packages/emulators/libretro/parallel-n64-lr/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/parallel-n64" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain core-info" -PKG_SECTION="libretro" PKG_SHORTDESC="Optimized/rewritten Nintendo 64 emulator made specifically for Libretro. Originally based on Mupen64 Plus." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/picodrive-lr/package.mk b/packages/emulators/libretro/picodrive-lr/package.mk index 50906ffbb..1250a3864 100644 --- a/packages/emulators/libretro/picodrive-lr/package.mk +++ b/packages/emulators/libretro/picodrive-lr/package.mk @@ -4,8 +4,6 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/picodrive" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro implementation of PicoDrive. (Sega Megadrive/Genesis/Sega Master System/Sega GameGear/Sega CD/32X)" PKG_LONGDESC="This is yet another Megadrive / Genesis / Sega CD / Mega CD / 32X / SMS emulator, which was written having ARM-based AMD64 devices in mind (such as smartphones and AMD64 consoles like GP2X and Pandora), but also runs on non-ARM little-endian hardware too." GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/pokemini-lr/package.mk b/packages/emulators/libretro/pokemini-lr/package.mk index ba0582c51..e09f1bd09 100644 --- a/packages/emulators/libretro/pokemini-lr/package.mk +++ b/packages/emulators/libretro/pokemini-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="pokemini-lr" PKG_VERSION="9bf450887026d9b92d4f9432b5d2a5ed749a35e2" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/pokemini" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" PKG_LONGDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" diff --git a/packages/emulators/libretro/potator-lr/package.mk b/packages/emulators/libretro/potator-lr/package.mk index 3a865404a..86958923b 100644 --- a/packages/emulators/libretro/potator-lr/package.mk +++ b/packages/emulators/libretro/potator-lr/package.mk @@ -1,13 +1,10 @@ PKG_NAME="potator-lr" PKG_VERSION="aed31f9254cada9826c65ff4528cc8bdda338275" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/potator" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A Watara Supervision Emulator based on Normmatt version." PKG_LONGDESC="A Watara Supervision Emulator based on Normmatt version." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/prosystem-lr/package.mk b/packages/emulators/libretro/prosystem-lr/package.mk index 30a331e11..d0f1ae6f0 100644 --- a/packages/emulators/libretro/prosystem-lr/package.mk +++ b/packages/emulators/libretro/prosystem-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="prosystem-lr" PKG_VERSION="4202ac5bdb2ce1a21f84efc0e26d75bb5aa7e248" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/prosystem-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of ProSystem to libretro." PKG_LONGDESC="Port of ProSystem to libretro." diff --git a/packages/emulators/libretro/puae-lr/package.mk b/packages/emulators/libretro/puae-lr/package.mk index d59db7168..423a3f4eb 100644 --- a/packages/emulators/libretro/puae-lr/package.mk +++ b/packages/emulators/libretro/puae-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="puae-lr" PKG_VERSION="5f683ae67b998fcadd69fa8f65f2440fa8ef135f" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="WIP libretro port of UAE (P-UAE and libco) Expect bugs" PKG_LONGDESC="WIP libretro port of UAE (P-UAE and libco) Expect bugs" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/puae2021-lr/package.mk b/packages/emulators/libretro/puae2021-lr/package.mk index af7841e2a..9fd2e29ac 100644 --- a/packages/emulators/libretro/puae2021-lr/package.mk +++ b/packages/emulators/libretro/puae2021-lr/package.mk @@ -22,15 +22,12 @@ PKG_NAME="puae2021-lr" PKG_VERSION="218b539d28ca3370df340f1b98fe12eab7b8fc09" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="2.6.1" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="PUAE 2021 libretro port of UAE" PKG_LONGDESC="PUAE 2021 libretro port of UAE" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/px68k-lr/package.mk b/packages/emulators/libretro/px68k-lr/package.mk index 1c51a5b90..617a69f41 100644 --- a/packages/emulators/libretro/px68k-lr/package.mk +++ b/packages/emulators/libretro/px68k-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="px68k-lr" PKG_VERSION="4c7542e34df71e3ebab77b5867901747d58dbb38" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Unknown" PKG_SITE="https://github.com/libretro/px68k-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_LONGDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/quasi88-lr/package.mk b/packages/emulators/libretro/quasi88-lr/package.mk index d31deb87a..1755df89b 100644 --- a/packages/emulators/libretro/quasi88-lr/package.mk +++ b/packages/emulators/libretro/quasi88-lr/package.mk @@ -3,14 +3,11 @@ PKG_NAME="quasi88-lr" PKG_VERSION="e3d06c4f34c3643d3ea9248a47cdc6cf60c1e0b1" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD3" PKG_SITE="https://github.com/libretro/quasi88-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" PKG_LONGDESC="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/quicknes-lr/package.mk b/packages/emulators/libretro/quicknes-lr/package.mk index c2104f926..61d120191 100644 --- a/packages/emulators/libretro/quicknes-lr/package.mk +++ b/packages/emulators/libretro/quicknes-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="quicknes-lr" PKG_VERSION="cd73f021be7dd5b1a21b71155a320364c02de4ac" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPLv2.1+" PKG_SITE="https://github.com/libretro/QuickNES_Core" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="The QuickNES core library, originally by Shay Green, heavily modified" PKG_LONGDESC="The QuickNES core library, originally by Shay Green, heavily modified" PKG_BUILD_FLAGS="-gold" diff --git a/packages/emulators/libretro/race-lr/package.mk b/packages/emulators/libretro/race-lr/package.mk index 6de29a357..fcd6d365d 100644 --- a/packages/emulators/libretro/race-lr/package.mk +++ b/packages/emulators/libretro/race-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="race-lr" PKG_VERSION="f65011e6639ccbbbb44b6ffa63ca50c070475df4" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/RACE" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_LONGDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_IS_ADDON="no" diff --git a/packages/emulators/libretro/retropie-shaders/package.mk b/packages/emulators/libretro/retropie-shaders/package.mk index b4b413ee7..3605d9427 100644 --- a/packages/emulators/libretro/retropie-shaders/package.mk +++ b/packages/emulators/libretro/retropie-shaders/package.mk @@ -22,15 +22,12 @@ PKG_NAME="retropie-shaders" PKG_VERSION="015fe2aaad5f4a219c8fd85b9a4fd71bc4f1f731" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/RetroPie/common-shaders" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="rpi" PKG_DEPENDS_TARGET="toolchain glsl-shaders" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro common shaders from retropie" PKG_LONGDESC="Libretro common shaders from retropie" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/libretro/sameboy-lr/package.mk b/packages/emulators/libretro/sameboy-lr/package.mk index c241900b6..005622d8c 100644 --- a/packages/emulators/libretro/sameboy-lr/package.mk +++ b/packages/emulators/libretro/sameboy-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="sameboy-lr" PKG_VERSION="2d29ece3b8e7ec44347c9daad0fabb84912ed44f" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://git.libretro.com/libretro/sameboy-upstream" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/sameboy-upstream-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain util-linux:host" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Gameboy and Gameboy Color emulator written in C" PKG_LONGDESC="Gameboy and Gameboy Color emulator written in C" diff --git a/packages/emulators/libretro/sameduck-lr/package.mk b/packages/emulators/libretro/sameduck-lr/package.mk index e006a2b1f..39bf3546a 100644 --- a/packages/emulators/libretro/sameduck-lr/package.mk +++ b/packages/emulators/libretro/sameduck-lr/package.mk @@ -21,15 +21,12 @@ PKG_NAME="sameduck-lr" PKG_VERSION="5619abdb01cee6bedb47599cdb5532c318443b52" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/LIJI32/SameBoy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="SameDuck" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Mega Duck/Cougar Boy emulator written in C" PKG_LONGDESC="Mega Duck/Cougar Boy emulator written in C" diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index fbbcc732d..7a3d0cd0a 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="scummvm-lr" PKG_VERSION="8ed85326fa6215a267beb953271c4c4a30fa6d57" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/scummvm" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="ScummVM with libretro backend." PKG_LONGDESC="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 9ea51944e..3800683b9 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -21,14 +21,11 @@ PKG_NAME="slang-shaders" PKG_VERSION="93c954798592323c8f7bd05a19c273be22e856cc" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/slang-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Common SLANG shaders for RetroArch" PKG_LONGDESC="Common SLANG shaders for RetroArch" diff --git a/packages/emulators/libretro/smsplus-gx-lr/package.mk b/packages/emulators/libretro/smsplus-gx-lr/package.mk index 5c4e89bad..eda6ec1de 100644 --- a/packages/emulators/libretro/smsplus-gx-lr/package.mk +++ b/packages/emulators/libretro/smsplus-gx-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="smsplus-gx-lr" PKG_VERSION="96fa9bc65aa27a5ab2779f9f2ff0439fec7cf513" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/smsplus-gx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="SMS Plus GX is an enhanced version" PKG_LONGDESC="SMS Plus is an open-source Sega Master System and Game Gear emulator written by Charles MacDonald." diff --git a/packages/emulators/libretro/snes9x-lr/package.mk b/packages/emulators/libretro/snes9x-lr/package.mk index c727f7a33..ada9d00fc 100644 --- a/packages/emulators/libretro/snes9x-lr/package.mk +++ b/packages/emulators/libretro/snes9x-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="snes9x-lr" PKG_VERSION="ec4ebfc8f3819a9522fcb8e53eed985090017b1b" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" PKG_LONGDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" diff --git a/packages/emulators/libretro/snes9x2002-lr/package.mk b/packages/emulators/libretro/snes9x2002-lr/package.mk index b4babf1c6..a52e035ed 100644 --- a/packages/emulators/libretro/snes9x2002-lr/package.mk +++ b/packages/emulators/libretro/snes9x2002-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="snes9x2002-lr" PKG_VERSION="540baad622d9833bba7e0696193cb06f5f02f564" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2002" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Snes9x 2002." PKG_LONGDESC="Snes9x 2002. Port of SNES9x 1.39 for libretro (was previously called PocketSNES). Heavily optimized for ARM." diff --git a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk index 9c056a10b..b01468462 100644 --- a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk +++ b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="snes9x2005_plus-lr" PKG_VERSION="fd45b0e055bce6cff3acde77414558784e93e7d0" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2005" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Snes9x 2005 Plus." PKG_LONGDESC="Snes9x 2005 Plus. Port of SNES9x 1.43 for libretro (was previously called CAT SFC) with enabled BLARRG APU." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x2010-lr/package.mk b/packages/emulators/libretro/snes9x2010-lr/package.mk index 73b8d1324..6e8e0a50a 100644 --- a/packages/emulators/libretro/snes9x2010-lr/package.mk +++ b/packages/emulators/libretro/snes9x2010-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="snes9x2010-lr" PKG_VERSION="d8b10c4cd7606ed58f9c562864c986bc960faaaf" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2010" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Snes9x 2010." PKG_LONGDESC="Snes9x 2010. Port of Snes9x 1.52+ to Libretro (previously called SNES9x Next). Rewritten in C and several optimizations and speedhacks." diff --git a/packages/emulators/libretro/stella-lr/package.mk b/packages/emulators/libretro/stella-lr/package.mk index 5f16ac47e..f4d6b873c 100644 --- a/packages/emulators/libretro/stella-lr/package.mk +++ b/packages/emulators/libretro/stella-lr/package.mk @@ -21,13 +21,10 @@ PKG_NAME="stella-lr" PKG_VERSION="8e8549c1c441e62c2bac0ae5a6489ba3e15412c6" -PKG_REV="1" PKG_LICENSE="GPL2" PKG_SITE="https://github.com/stella-emu/stella" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of Stella to libretro." PKG_LONGDESC="Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL)." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/swanstation-lr/package.mk b/packages/emulators/libretro/swanstation-lr/package.mk index 3191e74e0..1b4ec9b93 100644 --- a/packages/emulators/libretro/swanstation-lr/package.mk +++ b/packages/emulators/libretro/swanstation-lr/package.mk @@ -9,7 +9,6 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/swanstation" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_SECTION="libretro" PKG_SHORTDESC="SwanStation - PlayStation 1, aka. PSX Emulator" PKG_TOOLCHAIN="cmake" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/tgbdual-lr/package.mk b/packages/emulators/libretro/tgbdual-lr/package.mk index 4883b26da..11277cade 100644 --- a/packages/emulators/libretro/tgbdual-lr/package.mk +++ b/packages/emulators/libretro/tgbdual-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="tgbdual-lr" PKG_VERSION="a6f3018e6a23030afc1873845ee54d4b2d8ec9d3" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tgbdual-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro port of TGB Dual" PKG_LONGDESC="TGB Dual is an open source (GPLv2) GB/GBC emulator with game link cable support." diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index 08e234135..fb09a6c8d 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="tyrquake-lr" PKG_VERSION="77217664a09afe893a06be8e3e8f9611184636f8" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tyrquake" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro port of Tyrquake (Quake 1 engine)" PKG_LONGDESC="Libretro port of Tyrquake (Quake 1 engine)" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/uae4arm/package.mk b/packages/emulators/libretro/uae4arm/package.mk index 083907708..106d222a4 100644 --- a/packages/emulators/libretro/uae4arm/package.mk +++ b/packages/emulators/libretro/uae4arm/package.mk @@ -20,14 +20,11 @@ PKG_NAME="uae4arm" PKG_VERSION="177c2f0e892adf2603ada9b150e31beffe0f76c3" -PKG_REV="1" PKG_ARCH="arm aarch64" PKG_LICENSE="GPL" PKG_SITE="https://github.com/Chips-fr/uae4arm-rpi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain flac mpg123" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of uae4arm for libretro (rpi/android)" PKG_LONGDESC="Port of uae4arm for libretro (rpi/android) " diff --git a/packages/emulators/libretro/uzem-lr/package.mk b/packages/emulators/libretro/uzem-lr/package.mk index 80d755337..29ac7db57 100644 --- a/packages/emulators/libretro/uzem-lr/package.mk +++ b/packages/emulators/libretro/uzem-lr/package.mk @@ -20,15 +20,12 @@ PKG_NAME="uzem-lr" PKG_VERSION="08e39e19167727c89fb995e3fa70dde252e6aab0" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/libretro/libretro-uzem" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_PATCH_DIRS="libretro" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A retro-minimalist game console engine for the ATMega644" PKG_LONGDESC="A retro-minimalist game console engine for the ATMega644" diff --git a/packages/emulators/libretro/vba-next-lr/package.mk b/packages/emulators/libretro/vba-next-lr/package.mk index 0a3ee387f..b56163ec9 100644 --- a/packages/emulators/libretro/vba-next-lr/package.mk +++ b/packages/emulators/libretro/vba-next-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="vba-next-lr" PKG_VERSION="ee92625d2f1666496be4f5662508a2430e846b00" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/vba-next" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Optimized port of VBA-M to Libretro." PKG_LONGDESC="Optimized port of VBA-M to Libretro. " diff --git a/packages/emulators/libretro/vbam-lr/package.mk b/packages/emulators/libretro/vbam-lr/package.mk index d0623aa43..f6c0a33aa 100644 --- a/packages/emulators/libretro/vbam-lr/package.mk +++ b/packages/emulators/libretro/vbam-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="vbam-lr" PKG_VERSION="a2378f05f600a5a9cf450c60a87976b80d6a895a" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vbam-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="A fork of VBA-M with libretro integration" PKG_LONGDESC="VBA-M is a [Super] Game Boy [Color / Advance] emulator for Windows, Linux & Mac." diff --git a/packages/emulators/libretro/vecx-lr/package.mk b/packages/emulators/libretro/vecx-lr/package.mk index 3964c6385..9ee8b324b 100644 --- a/packages/emulators/libretro/vecx-lr/package.mk +++ b/packages/emulators/libretro/vecx-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="vecx-lr" PKG_VERSION="3a5655ff67e161ef33f66b0f6c26aaf2e59ceda8" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2|LGPLv2.1" PKG_SITE="https://github.com/libretro/libretro-vecx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="libretro adaptation of vecx" PKG_LONGDESC="libretro adaptation of vecx" diff --git a/packages/emulators/libretro/vice-lr/package.mk b/packages/emulators/libretro/vice-lr/package.mk index 1474c9358..4f5a1b093 100644 --- a/packages/emulators/libretro/vice-lr/package.mk +++ b/packages/emulators/libretro/vice-lr/package.mk @@ -22,14 +22,11 @@ PKG_NAME="vice-lr" PKG_VERSION="91d0d4d884acd44b5240dfcdbd8bdc2f0f757dfd" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vice-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Versatile Commodore 8-bit Emulator version 3.0" PKG_LONGDESC="Versatile Commodore 8-bit Emulator version 3.0" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/virtualjaguar-lr/package.mk b/packages/emulators/libretro/virtualjaguar-lr/package.mk index b83f294ef..0fbf5e6a3 100644 --- a/packages/emulators/libretro/virtualjaguar-lr/package.mk +++ b/packages/emulators/libretro/virtualjaguar-lr/package.mk @@ -20,14 +20,11 @@ PKG_NAME="virtualjaguar-lr" PKG_VERSION="8126e5c504ac7217a638f38e4cd9190822c8abdd" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/virtualjaguar-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of Virtual Jaguar to Libretro" PKG_LONGDESC="Port of Virtual Jaguar to Libretro" diff --git a/packages/emulators/libretro/xmil-lr/package.mk b/packages/emulators/libretro/xmil-lr/package.mk index c0866ac8f..152bc4c83 100644 --- a/packages/emulators/libretro/xmil-lr/package.mk +++ b/packages/emulators/libretro/xmil-lr/package.mk @@ -3,14 +3,11 @@ PKG_NAME="xmil-lr" PKG_VERSION="b07506c0cae31d260db28cb079148857d6ca2e93" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Unknown" PKG_SITE="https://github.com/r-type/xmil-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Libretro port of X Millennium Sharp X1 emulator" PKG_LONGDESC="Libretro port of X Millennium Sharp X1 emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/yabasanshiro-lr/package.mk b/packages/emulators/libretro/yabasanshiro-lr/package.mk index 3fc671cc7..cef219bf1 100644 --- a/packages/emulators/libretro/yabasanshiro-lr/package.mk +++ b/packages/emulators/libretro/yabasanshiro-lr/package.mk @@ -21,14 +21,11 @@ PKG_NAME="yabasanshiro-lr" PKG_VERSION="4e65871ec0a2582fa2dbe055fccb6573dbd68d4f" PKG_GIT_CLONE_BRANCH="yabasanshiro" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/yabause" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="libretro" PKG_SHORTDESC="Port of YabaSanshiro to libretro." PKG_LONGDESC="Port of YabaSanshiro to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/standalone/hypseus-singe/package.mk b/packages/emulators/standalone/hypseus-singe/package.mk index 02a415009..809859234 100644 --- a/packages/emulators/standalone/hypseus-singe/package.mk +++ b/packages/emulators/standalone/hypseus-singe/package.mk @@ -4,7 +4,6 @@ PKG_NAME="hypseus-singe" PKG_VERSION="e2ad79d9d3a6102efe9e5fad2cc45294c9a0303c" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL3" PKG_SITE="https://github.com/DirtBagXon/hypseus-singe" diff --git a/packages/emulators/standalone/hypseus/package.mk b/packages/emulators/standalone/hypseus/package.mk index 595efdcfd..7b4137315 100644 --- a/packages/emulators/standalone/hypseus/package.mk +++ b/packages/emulators/standalone/hypseus/package.mk @@ -3,7 +3,6 @@ PKG_NAME="hypseus" PKG_VERSION="3f7c4cbad8e36c3babf230321de9e67dee100767" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL3" PKG_SITE="https://github.com/btolab/hypseus" diff --git a/packages/emulators/standalone/minivmacsa/package.mk b/packages/emulators/standalone/minivmacsa/package.mk index 5977dd4f3..fc2903fe0 100644 --- a/packages/emulators/standalone/minivmacsa/package.mk +++ b/packages/emulators/standalone/minivmacsa/package.mk @@ -8,8 +8,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://www.gryphel.com/c/minivmac/" PKG_URL="https://www.gryphel.com/d/minivmac/minivmac-${PKG_VERSION}/minivmac-${PKG_VERSION}.src.tgz" PKG_DEPENDS_TARGET="toolchain libX11" -PKG_PRIORITY="optional" -PKG_SECTION="emulators" PKG_SHORTDESC="Virtual Macintosh Plus" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/standalone/pico-8/package.mk b/packages/emulators/standalone/pico-8/package.mk index 31d68f5cd..792434444 100644 --- a/packages/emulators/standalone/pico-8/package.mk +++ b/packages/emulators/standalone/pico-8/package.mk @@ -8,7 +8,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain SDL2" -PKG_SECTION="emulators" PKG_SHORTDESC="PICO-8 Fantasy Console" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index a8c9e057b..39df6006a 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -3,7 +3,6 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="ppsspp-sa" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="https://github.com/hrydgard/ppsspp" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/scummvmsa/package.mk b/packages/emulators/standalone/scummvmsa/package.mk index 34e2a3078..d57706b10 100644 --- a/packages/emulators/standalone/scummvmsa/package.mk +++ b/packages/emulators/standalone/scummvmsa/package.mk @@ -4,7 +4,6 @@ PKG_NAME="scummvmsa" PKG_VERSION="b347be081cb35889bebc191165fa88f5261932ba" -PKG_REV="1" PKG_LICENSE="GPL2" PKG_SITE="https://github.com/scummvm/scummvm" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/vice-sa/package.mk b/packages/emulators/standalone/vice-sa/package.mk index af4eec57d..e9902d228 100644 --- a/packages/emulators/standalone/vice-sa/package.mk +++ b/packages/emulators/standalone/vice-sa/package.mk @@ -3,14 +3,11 @@ PKG_NAME="vice-sa" PKG_VERSION="3.8" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://sourceforge.net/projects/vice-emu" PKG_URL="${PKG_SITE}/files/releases/vice-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain xa:host SDL2 SDL2_image ncurses readline dos2unix:host" -PKG_PRIORITY="optional" -PKG_SECTION="emulators" PKG_SHORTDESC="Commodore 8-bit Emulator" PKG_LONGDESC="Commodore 8-bit Emulator" PKG_CONFIGURE_OPTS_TARGET+=" --disable-pdf-docs --enable-gtk3ui=no --without-alsa --with-pulse --enable-sdl2ui" diff --git a/packages/graphics/SDL/SDL_net/package.mk b/packages/graphics/SDL/SDL_net/package.mk index 35172e95d..b7d902b1e 100644 --- a/packages/graphics/SDL/SDL_net/package.mk +++ b/packages/graphics/SDL/SDL_net/package.mk @@ -24,7 +24,6 @@ PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/${PKG_NAME}/archive/refs/tags/release-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL SDL_net:host" PKG_DEPENDS_HOST="SDL:host" -PKG_SECTION="multimedia" PKG_SHORTDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." PKG_LONGDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." diff --git a/packages/graphics/SDL/package.mk b/packages/graphics/SDL/package.mk index 7d7fd9478..3537ac07a 100644 --- a/packages/graphics/SDL/package.mk +++ b/packages/graphics/SDL/package.mk @@ -23,7 +23,6 @@ PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/SDL-1.2/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL:host" -PKG_SECTION="multimedia" PKG_SHORTDESC="SDL: A cross-platform Graphic API" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." diff --git a/packages/graphics/SDL/yasm/package.mk b/packages/graphics/SDL/yasm/package.mk index 2136c12d3..98633516e 100644 --- a/packages/graphics/SDL/yasm/package.mk +++ b/packages/graphics/SDL/yasm/package.mk @@ -24,7 +24,6 @@ PKG_LICENSE="BSD" PKG_SITE="http://www.tortall.net/projects/yasm/" PKG_URL="http://www.tortall.net/projects/yasm/releases/${PKG_NAME}-${PKG_VERSION}.tar.gz" PKG_DEPENDS_HOST="" -PKG_SECTION="toolchain/lang" PKG_SHORTDESC="yasm: A complete rewrite of the NASM assembler" PKG_LONGDESC="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." diff --git a/packages/multimedia/libdvbpsi/package.mk b/packages/multimedia/libdvbpsi/package.mk index 5d1e53187..b899ee98d 100644 --- a/packages/multimedia/libdvbpsi/package.mk +++ b/packages/multimedia/libdvbpsi/package.mk @@ -3,13 +3,11 @@ PKG_NAME="libdvbpsi" PKG_VERSION="1.3.3" -PKG_REV="2" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.videolan.org/developers/libdvbpsi.html" PKG_URL="http://download.videolan.org/pub/libdvbpsi/${PKG_VERSION}/libdvbpsi-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="tools" PKG_SHORTDESC="library for MPEG TS and DVB PSI tables decoding and generating" PKG_LONGDESC="libdvbpsi is a simple library designed for MPEG TS and DVB PSI tables decoding and generating." PKG_IS_ADDON="no" diff --git a/packages/multimedia/opusfile/package.mk b/packages/multimedia/opusfile/package.mk index e6615a87d..589546612 100644 --- a/packages/multimedia/opusfile/package.mk +++ b/packages/multimedia/opusfile/package.mk @@ -20,12 +20,10 @@ PKG_NAME="opusfile" PKG_VERSION="a55c164" -PKG_REV="1" PKG_ARCH="any" PKG_SITE="https://github.com/xiph/opusfile" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain opus openssl" -PKG_PRIORITY="optional" PKG_SHORTDESC="Stand-alone decoder library for .opus streams" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="configure" diff --git a/packages/network/fping/package.mk b/packages/network/fping/package.mk index b8584d7d0..dfbc355ea 100644 --- a/packages/network/fping/package.mk +++ b/packages/network/fping/package.mk @@ -3,7 +3,6 @@ PKG_NAME="fping" PKG_VERSION="5.1" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://fping.org/" diff --git a/packages/network/rclone/package.mk b/packages/network/rclone/package.mk index b2535c52d..2bfcca733 100644 --- a/packages/network/rclone/package.mk +++ b/packages/network/rclone/package.mk @@ -5,7 +5,6 @@ PKG_NAME="rclone" PKG_VERSION="1.65.0" PKG_DEPENDS_TARGET="toolchain fuse rsync" -PKG_SECTION="tools" PKG_SHORTDESC="rsync for cloud storage" PKG_TOOLCHAIN="manual" diff --git a/packages/network/sixaxis/package.mk b/packages/network/sixaxis/package.mk index 4aa663388..f0a9de222 100644 --- a/packages/network/sixaxis/package.mk +++ b/packages/network/sixaxis/package.mk @@ -9,7 +9,6 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/RetroPie/sixaxis" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="emuelec/tools" PKG_LONGDESC="sixaxis helper service " PKG_TOOLCHAIN="make" PKG_IS_ADDON="no" diff --git a/packages/tools/empty/package.mk b/packages/tools/empty/package.mk index 22eea6f38..5e9e9447c 100644 --- a/packages/tools/empty/package.mk +++ b/packages/tools/empty/package.mk @@ -9,7 +9,6 @@ PKG_LICENSE="GPL" PKG_SITE="http://empty.sourceforge.net/" PKG_DEPENDS_TARGET="toolchain linux" PKG_URL="http://downloads.sourceforge.net/sourceforge/${PKG_NAME}/${PKG_NAME}-${PKG_VERSION}.tgz" -PKG_SECTION="sysutils" PKG_SHORTDESC="Run applications under pseudo-terminal sessions" PKG_LONGDESC="Run applications under pseudo-terminal sessions" diff --git a/packages/tools/entware/package.mk b/packages/tools/entware/package.mk index fd9c1b4fd..9c4dbc1ef 100644 --- a/packages/tools/entware/package.mk +++ b/packages/tools/entware/package.mk @@ -7,7 +7,6 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/Entware/Entware" PKG_URL="" PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="tools" PKG_LONGDESC="entware: A software repository that offers various software programs that can be installed on your device" PKG_TOOLCHAIN="manual" diff --git a/packages/tools/git/package.mk b/packages/tools/git/package.mk index fdc24aed6..b114143ab 100644 --- a/packages/tools/git/package.mk +++ b/packages/tools/git/package.mk @@ -9,7 +9,6 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://git-scm.com/" PKG_URL="https://mirrors.edge.kernel.org/pub/software/scm/git/git-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain openssl pcre curl libiconv zlib" -PKG_SECTION="emuelec" PKG_SHORTDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_LONGDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_IS_ADDON="no" diff --git a/packages/tools/joyutils/package.mk b/packages/tools/joyutils/package.mk index 44c8fd76e..efc6b73f8 100644 --- a/packages/tools/joyutils/package.mk +++ b/packages/tools/joyutils/package.mk @@ -4,14 +4,11 @@ PKG_NAME="joyutils" PKG_VERSION="b6703ebf04c839fc47f9e490b68c4d5d885f32f9" PKG_SHA256="73914d760d44542fa5b88ab42f914713e07e184c299415fdbe8abd83e68dc200" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/datrh/joyutils" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_PRIORITY="optional" -PKG_SECTION="tools" PKG_SHORTDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" PKG_LONGDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index 6145da15a..65bead254 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -5,7 +5,6 @@ PKG_NAME="emulationstation" PKG_VERSION="be669d916e9a3f393cf63c57929daf796ddec80d" PKG_GIT_CLONE_BRANCH="main" -PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From c2784abe5c8957e662b994ae819daeb7ab38d735 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Fri, 12 Apr 2024 18:37:55 +0400 Subject: [PATCH 009/184] RK3566: Flycast-sa: map face buttons and enable frame skip * Normal Frame skip * Half Res by default * Map : Y X B A --- .../flycast-sa/config/RK3566/emu.cfg | 14 ++++++-- .../RK3566/mappings/SDL_retrogame_joypad.cfg | 34 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 packages/emulators/standalone/flycast-sa/config/RK3566/mappings/SDL_retrogame_joypad.cfg diff --git a/packages/emulators/standalone/flycast-sa/config/RK3566/emu.cfg b/packages/emulators/standalone/flycast-sa/config/RK3566/emu.cfg index ce42e9795..1718e69fd 100644 --- a/packages/emulators/standalone/flycast-sa/config/RK3566/emu.cfg +++ b/packages/emulators/standalone/flycast-sa/config/RK3566/emu.cfg @@ -2,12 +2,20 @@ backend = pulse [input] -maple_sdl_joystick_0 = 0 -maple_sdl_joystick_1 = 1 - device1 = 0 device1.1 = 1 device1.2 = 1 device2 = 0 device2.1 = 1 device2.2 = 1 +maple_sdl_joystick_0 = 0 +maple_sdl_joystick_1 = 1 + +[config] +pvr.AutoSkipFrame = 1 +pvr.rend = 0 +rend.Resolution = 240 +rend.vsync = no +ta.skip = 1 + + diff --git a/packages/emulators/standalone/flycast-sa/config/RK3566/mappings/SDL_retrogame_joypad.cfg b/packages/emulators/standalone/flycast-sa/config/RK3566/mappings/SDL_retrogame_joypad.cfg new file mode 100644 index 000000000..3e61e80e1 --- /dev/null +++ b/packages/emulators/standalone/flycast-sa/config/RK3566/mappings/SDL_retrogame_joypad.cfg @@ -0,0 +1,34 @@ +[analog] +bind0 = 0-:btn_analog_left +bind1 = 0+:btn_analog_right +bind2 = 1-:btn_analog_up +bind3 = 1+:btn_analog_down +bind4 = 2-:axis2_left +bind5 = 2+:axis2_right +bind6 = 3-:axis2_up +bind7 = 3+:axis2_down + +[digital] +bind0 = 0:btn_a +bind1 = 1:btn_b +bind10 = 13:btn_dpad1_up +bind11 = 14:btn_dpad1_down +bind12 = 15:btn_dpad1_left +bind13 = 16:btn_dpad1_right +bind2 = 2:btn_y +bind3 = 3:btn_x +bind4 = 4:btn_trigger_left +bind5 = 5:btn_trigger_right +bind6 = 6:btn_trigger2_left +bind7 = 7:btn_trigger2_right +bind8 = 8:btn_menu +bind9 = 9:btn_start + +[emulator] +dead_zone = 10 +mapping_name = RetroGame Joypad +rumble_power = 100 +saturation = 100 +version = 3 + + From 52c35d452476cdab6135eda3b45d01977a6644ee Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 15:34:19 +0000 Subject: [PATCH 010/184] Clean up unused package variables --- packages/emulators/libretro/81-lr/package.mk | 2 -- packages/emulators/libretro/beetle-gba-lr/package.mk | 2 -- packages/emulators/libretro/beetle-lynx-lr/package.mk | 2 -- packages/emulators/libretro/beetle-ngp-lr/package.mk | 2 -- packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 2 -- packages/emulators/libretro/beetle-pce-lr/package.mk | 2 -- packages/emulators/libretro/beetle-pcfx-lr/package.mk | 2 -- packages/emulators/libretro/beetle-supafaust-lr/package.mk | 2 -- packages/emulators/libretro/beetle-supergrafx-lr/package.mk | 2 -- packages/emulators/libretro/beetle-vb-lr/package.mk | 2 -- packages/emulators/libretro/beetle-wswan-lr/package.mk | 2 -- packages/emulators/libretro/bluemsx-lr/package.mk | 2 -- packages/emulators/libretro/bsnes-hd-lr/package.mk | 2 -- packages/emulators/libretro/bsnes-lr/package.mk | 2 -- .../emulators/libretro/bsnes-mercury-performance-lr/package.mk | 2 -- packages/emulators/libretro/cap32-lr/package.mk | 2 -- packages/emulators/libretro/crocods-lr/package.mk | 2 -- packages/emulators/libretro/dosbox-lr/package.mk | 2 -- packages/emulators/libretro/dosbox-pure-lr/package.mk | 2 -- packages/emulators/libretro/dosbox-svn-lr/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/package.mk | 2 -- packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk | 2 -- packages/emulators/libretro/fbalpha2019-lr/package.mk | 2 -- packages/emulators/libretro/fceumm-lr/package.mk | 2 -- packages/emulators/libretro/fmsx-lr/package.mk | 2 -- packages/emulators/libretro/freeintv-lr/package.mk | 2 -- packages/emulators/libretro/fuse-lr/package.mk | 2 -- packages/emulators/libretro/gambatte-lr/package.mk | 2 -- packages/emulators/libretro/gearboy-lr/package.mk | 2 -- packages/emulators/libretro/gearcoleco-lr/package.mk | 2 -- packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 2 -- packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk | 2 -- packages/emulators/libretro/glsl-shaders/package.mk | 2 -- packages/emulators/libretro/gw-lr/package.mk | 2 -- packages/emulators/libretro/handy-lr/package.mk | 2 -- packages/emulators/libretro/hatari-lr/package.mk | 2 -- packages/emulators/libretro/libretro-database/package.mk | 2 -- packages/emulators/libretro/mame2003-lr/package.mk | 2 -- packages/emulators/libretro/mame2003-midway-lr/package.mk | 2 -- packages/emulators/libretro/mame2003-plus-lr/package.mk | 2 -- packages/emulators/libretro/mame2010-lr/package.mk | 2 -- packages/emulators/libretro/mgba-lr/package.mk | 2 -- packages/emulators/libretro/mu-lr/package.mk | 2 -- packages/emulators/libretro/neocd_lr/package.mk | 2 -- packages/emulators/libretro/nestopia-lr/package.mk | 2 -- packages/emulators/libretro/o2em-lr/package.mk | 2 -- packages/emulators/libretro/picodrive-lr/package.mk | 2 -- packages/emulators/libretro/pokemini-lr/package.mk | 2 -- packages/emulators/libretro/prosystem-lr/package.mk | 2 -- packages/emulators/libretro/px68k-lr/package.mk | 2 -- packages/emulators/libretro/quicknes-lr/package.mk | 2 -- packages/emulators/libretro/race-lr/package.mk | 2 -- packages/emulators/libretro/sameboy-lr/package.mk | 2 -- packages/emulators/libretro/sameduck-lr/package.mk | 2 -- packages/emulators/libretro/scummvm-lr/package.mk | 2 -- packages/emulators/libretro/slang-shaders/package.mk | 2 -- packages/emulators/libretro/smsplus-gx-lr/package.mk | 2 -- packages/emulators/libretro/snes9x-lr/package.mk | 2 -- packages/emulators/libretro/snes9x2002-lr/package.mk | 2 -- packages/emulators/libretro/snes9x2010-lr/package.mk | 2 -- packages/emulators/libretro/tgbdual-lr/package.mk | 2 -- packages/emulators/libretro/tyrquake-lr/package.mk | 2 -- packages/emulators/libretro/uae4arm/package.mk | 1 - packages/emulators/libretro/uzem-lr/package.mk | 2 -- packages/emulators/libretro/vba-next-lr/package.mk | 2 -- packages/emulators/libretro/vbam-lr/package.mk | 2 -- packages/emulators/libretro/vecx-lr/package.mk | 2 -- packages/emulators/libretro/virtualjaguar-lr/package.mk | 2 -- packages/graphics/SDL/SDL_net/package.mk | 2 -- packages/graphics/SDL/package.mk | 2 -- packages/graphics/SDL/yasm/package.mk | 2 -- packages/hardware/quirks/package.mk | 2 -- packages/misc/modules/package.mk | 2 -- packages/multimedia/libdvbpsi/package.mk | 2 -- packages/network/fping/package.mk | 2 -- packages/network/sixaxis/package.mk | 2 -- packages/rocknix/package.mk | 2 -- packages/sysutils/autostart/package.mk | 2 -- packages/tools/empty/package.mk | 2 -- packages/tools/git/package.mk | 2 -- packages/tools/joyutils/package.mk | 2 -- 83 files changed, 165 deletions(-) diff --git a/packages/emulators/libretro/81-lr/package.mk b/packages/emulators/libretro/81-lr/package.mk index ae7117480..50675bfd0 100644 --- a/packages/emulators/libretro/81-lr/package.mk +++ b/packages/emulators/libretro/81-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A port of the EightyOne ZX81 Emulator to libretro" PKG_LONGDESC="A port of the EightyOne ZX81 Emulator to libretro" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/beetle-gba-lr/package.mk b/packages/emulators/libretro/beetle-gba-lr/package.mk index b7e55b061..aa53b24ea 100644 --- a/packages/emulators/libretro/beetle-gba-lr/package.mk +++ b/packages/emulators/libretro/beetle-gba-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" PKG_LONGDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-lynx-lr/package.mk b/packages/emulators/libretro/beetle-lynx-lr/package.mk index 5d6d89710..7fe40e8ab 100644 --- a/packages/emulators/libretro/beetle-lynx-lr/package.mk +++ b/packages/emulators/libretro/beetle-lynx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen Lynx" PKG_LONGDESC="libretro implementation of Mednafen Lynx" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-ngp-lr/package.mk b/packages/emulators/libretro/beetle-ngp-lr/package.mk index 49490b27d..9eb5f9a75 100644 --- a/packages/emulators/libretro/beetle-ngp-lr/package.mk +++ b/packages/emulators/libretro/beetle-ngp-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen Neo Geo Pocket." PKG_LONGDESC="libretro implementation of Mednafen Neo Geo Pocket." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index d197a7c6e..76e981cff 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index 422ceed5b..cb9b17117 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Standalone port of Mednafen PCE to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE to libretro." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-pcfx-lr/package.mk b/packages/emulators/libretro/beetle-pcfx-lr/package.mk index 4f75fc387..7420c7eed 100644 --- a/packages/emulators/libretro/beetle-pcfx-lr/package.mk +++ b/packages/emulators/libretro/beetle-pcfx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen PC-FX." PKG_LONGDESC="libretro implementation of Mednafen PC-FX." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "i386" -o "${ARCH}" == "x86_64" ]; then diff --git a/packages/emulators/libretro/beetle-supafaust-lr/package.mk b/packages/emulators/libretro/beetle-supafaust-lr/package.mk index 7482c7496..5d95d500e 100644 --- a/packages/emulators/libretro/beetle-supafaust-lr/package.mk +++ b/packages/emulators/libretro/beetle-supafaust-lr/package.mk @@ -31,8 +31,6 @@ PKG_SHORTDESC="Super Nintendo (Super Famicom) emulator" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="make" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk index bce1b3189..038b89b46 100644 --- a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk +++ b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-vb-lr/package.mk b/packages/emulators/libretro/beetle-vb-lr/package.mk index 9f0a6cd93..e40e28f37 100644 --- a/packages/emulators/libretro/beetle-vb-lr/package.mk +++ b/packages/emulators/libretro/beetle-vb-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen VB. (VirtualBoy)" PKG_LONGDESC="libretro implementation of Mednafen VB. (VirtualBoy)" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/beetle-wswan-lr/package.mk b/packages/emulators/libretro/beetle-wswan-lr/package.mk index 23213cf6e..e30d07f94 100644 --- a/packages/emulators/libretro/beetle-wswan-lr/package.mk +++ b/packages/emulators/libretro/beetle-wswan-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of Mednafen wswan" PKG_LONGDESC="libretro implementation of Mednafen wswan" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/bluemsx-lr/package.mk b/packages/emulators/libretro/bluemsx-lr/package.mk index bdc22cce7..ecd0de3b4 100644 --- a/packages/emulators/libretro/bluemsx-lr/package.mk +++ b/packages/emulators/libretro/bluemsx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of blueMSX to the libretro API." PKG_LONGDESC="Port of blueMSX to the libretro API." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/bsnes-hd-lr/package.mk b/packages/emulators/libretro/bsnes-hd-lr/package.mk index fef5730e2..06cd1b253 100644 --- a/packages/emulators/libretro/bsnes-hd-lr/package.mk +++ b/packages/emulators/libretro/bsnes-hd-lr/package.mk @@ -9,9 +9,7 @@ PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="bsnes-hd is a fork of bsnes that adds HD video features such as widescreen, HD Mode 7 and true color" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_MAKE_OPTS_TARGET+=" -C bsnes target=libretro compiler=${TARGET_NAME}-g++" diff --git a/packages/emulators/libretro/bsnes-lr/package.mk b/packages/emulators/libretro/bsnes-lr/package.mk index 75a8735f3..44d9f5231 100644 --- a/packages/emulators/libretro/bsnes-lr/package.mk +++ b/packages/emulators/libretro/bsnes-lr/package.mk @@ -8,9 +8,7 @@ PKG_SITE="https://github.com/libretro/bsnes-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" if [ ! "${OPENGL}" = "no" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" diff --git a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk index b80b7fda9..37ef1e3a2 100644 --- a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk +++ b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk @@ -8,9 +8,7 @@ PKG_SITE="https://github.com/libretro/bsnes-mercury" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" pre_configure_target() { sed -i 's/\-O[23]/-Ofast/' ${PKG_BUILD}/Makefile diff --git a/packages/emulators/libretro/cap32-lr/package.mk b/packages/emulators/libretro/cap32-lr/package.mk index 3245c0887..5482b0ee3 100644 --- a/packages/emulators/libretro/cap32-lr/package.mk +++ b/packages/emulators/libretro/cap32-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="caprice32 4.2.0 libretro" PKG_LONGDESC="caprice32 4.2.0 libretro" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/crocods-lr/package.mk b/packages/emulators/libretro/crocods-lr/package.mk index 41833e348..da5749b14 100644 --- a/packages/emulators/libretro/crocods-lr/package.mk +++ b/packages/emulators/libretro/crocods-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Amstrad CPC emulator" PKG_LONGDESC="Amstrad CPC emulator" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk index 65cf25532..fc511d278 100644 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ b/packages/emulators/libretro/dosbox-lr/package.mk @@ -31,8 +31,6 @@ PKG_LONGDESC="An open source DOS emulator for BeOS, Linux, Mac OS X, OS/2, and W PKG_BUILD_FLAGS="-lto" GET_HANDLER_SUPPORT="git" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/dosbox-pure-lr/package.mk b/packages/emulators/libretro/dosbox-pure-lr/package.mk index fa0a62d7b..024adbaf4 100644 --- a/packages/emulators/libretro/dosbox-pure-lr/package.mk +++ b/packages/emulators/libretro/dosbox-pure-lr/package.mk @@ -28,8 +28,6 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A port of DOSBox to libretro" PKG_LONGDESC="A port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/dosbox-svn-lr/package.mk b/packages/emulators/libretro/dosbox-svn-lr/package.mk index 14a91ed90..38ab5d3bd 100644 --- a/packages/emulators/libretro/dosbox-svn-lr/package.mk +++ b/packages/emulators/libretro/dosbox-svn-lr/package.mk @@ -30,8 +30,6 @@ PKG_DEPENDS_TARGET="toolchain SDL SDL_net retroarch" PKG_SHORTDESC="Upstream port of DOSBox to libretro" PKG_LONGDESC="Upstream port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_BUILD_FLAGS="-lto" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk index be9627ad2..9247c7d5a 100644 --- a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk @@ -26,6 +26,4 @@ PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Speex audio processing library" GET_HANDLER_SUPPORT="git" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="autotools" diff --git a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk index 959e1cbdc..5b35613f1 100644 --- a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk @@ -26,8 +26,6 @@ PKG_URL="${PKG_SITE}/files/libxmp/${PKG_VERSION}/libxmp-lite-${PKG_VERSION}.tar. PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Libxmp is a library that renders module files to PCM data." -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="configure" diff --git a/packages/emulators/libretro/easyrpg-lr/package.mk b/packages/emulators/libretro/easyrpg-lr/package.mk index b42d59a56..6cab964de 100644 --- a/packages/emulators/libretro/easyrpg-lr/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/package.mk @@ -32,8 +32,6 @@ PKG_LONGDESC="An unofficial libretro port of the EasyRPG/Player." GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="+pic" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_CMAKE_OPTS_TARGET="-DPLAYER_TARGET_PLATFORM=libretro \ -DBUILD_SHARED_LIBS=ON \ diff --git a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk index 6e8d24dd0..58bca1344 100644 --- a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk @@ -26,8 +26,6 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="WildMIDI is a simple software midi player which has a core softsynth library that can be used with other applications." -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="cmake" PKG_CMAKE_OPTS_TARGET="WANT_PLAYER=OFF -DWANT_ALSA=ON" diff --git a/packages/emulators/libretro/fbalpha2019-lr/package.mk b/packages/emulators/libretro/fbalpha2019-lr/package.mk index 09de52943..b8911e7c4 100644 --- a/packages/emulators/libretro/fbalpha2019-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2019-lr/package.mk @@ -28,9 +28,7 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of Final Burn Alpha to Libretro (v0.2.97.44)." PKG_LONGDESC="Currently, FB Alpha supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f makefile.libretro diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index de25fcf10..ef0500fc9 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of FCEUmm / FCEUX to Libretro." PKG_LONGDESC="FCEUX is a Nintendo Entertainment System (NES), Famicom, and Famicom Disk System (FDS) emulator." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/fmsx-lr/package.mk b/packages/emulators/libretro/fmsx-lr/package.mk index 55ad9e299..c2a9930a6 100644 --- a/packages/emulators/libretro/fmsx-lr/package.mk +++ b/packages/emulators/libretro/fmsx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of fMSX 4.9 to the libretro API." PKG_LONGDESC="Port of fMSX 4.9 to the libretro API." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make diff --git a/packages/emulators/libretro/freeintv-lr/package.mk b/packages/emulators/libretro/freeintv-lr/package.mk index 4930bff18..c18dcdbf3 100644 --- a/packages/emulators/libretro/freeintv-lr/package.mk +++ b/packages/emulators/libretro/freeintv-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." PKG_LONGDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/fuse-lr/package.mk b/packages/emulators/libretro/fuse-lr/package.mk index 10bd6056f..f9ec7ee07 100644 --- a/packages/emulators/libretro/fuse-lr/package.mk +++ b/packages/emulators/libretro/fuse-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A port of the Fuse Unix Spectrum Emulator to libretro " PKG_LONGDESC="A port of the Fuse Unix Spectrum Emulator to libretro " -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/gambatte-lr/package.mk b/packages/emulators/libretro/gambatte-lr/package.mk index 11fc043d5..f7bea9b04 100644 --- a/packages/emulators/libretro/gambatte-lr/package.mk +++ b/packages/emulators/libretro/gambatte-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro implementation of libgambatte" PKG_LONGDESC="Gambatte is an open-source Game Boy Color emulator written for fun and made available in the hope that it will be useful." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_PATCH_DIRS+="${DEVICE}" make_target() { diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 1c54a7e25..4760c4dcc 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -24,9 +24,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" PKG_LONGDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -C platforms/libretro/ diff --git a/packages/emulators/libretro/gearcoleco-lr/package.mk b/packages/emulators/libretro/gearcoleco-lr/package.mk index cd82e1cba..5a0b318fa 100644 --- a/packages/emulators/libretro/gearcoleco-lr/package.mk +++ b/packages/emulators/libretro/gearcoleco-lr/package.mk @@ -24,9 +24,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." PKG_LONGDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -C platforms/libretro/ diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index a1c2088b3..af69c91c1 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk index 323ad74a4..7b14f5e95 100644 --- a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/glsl-shaders/package.mk b/packages/emulators/libretro/glsl-shaders/package.mk index 45375b825..65f87145b 100644 --- a/packages/emulators/libretro/glsl-shaders/package.mk +++ b/packages/emulators/libretro/glsl-shaders/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Common GSLS shaders for RetroArch" PKG_LONGDESC="Common GSLS shaders for RetroArch" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" configure_target() { cd ${PKG_BUILD} diff --git a/packages/emulators/libretro/gw-lr/package.mk b/packages/emulators/libretro/gw-lr/package.mk index 0923ab6dc..5485f7b6b 100644 --- a/packages/emulators/libretro/gw-lr/package.mk +++ b/packages/emulators/libretro/gw-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A libretro core for Game & Watch simulators " PKG_LONGDESC="A libretro core for Game & Watch simulators " -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/handy-lr/package.mk b/packages/emulators/libretro/handy-lr/package.mk index 6fb5d1254..7f37c16ce 100644 --- a/packages/emulators/libretro/handy-lr/package.mk +++ b/packages/emulators/libretro/handy-lr/package.mk @@ -27,9 +27,7 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="K. Wilkins' Atari Lynx emulator Handy for libretro" PKG_LONGDESC="Handy is an Atari Lynx Emulator for Windows 95/98/NT/2000. Handy was the original name of the Lynx project that was started at Epyx and then finished by Atari." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" case ${ARCH} in aarch64) diff --git a/packages/emulators/libretro/hatari-lr/package.mk b/packages/emulators/libretro/hatari-lr/package.mk index 9d71c8fcb..57d7e9327 100644 --- a/packages/emulators/libretro/hatari-lr/package.mk +++ b/packages/emulators/libretro/hatari-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain capsimg" PKG_SHORTDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." PKG_LONGDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_USE_CMAKE="no" configure_target() { diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index b27d5c175..0e11b5c3d 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Repository containing cheatcode files, content data files, etc." PKG_LONGDESC="Repository containing cheatcode files, content data files, etc." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" configure_target() { cd ${PKG_BUILD} diff --git a/packages/emulators/libretro/mame2003-lr/package.mk b/packages/emulators/libretro/mame2003-lr/package.mk index 4c3f6abe8..389c2b4d3 100644 --- a/packages/emulators/libretro/mame2003-lr/package.mk +++ b/packages/emulators/libretro/mame2003-lr/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make ARCH="" CC="${CC}" NATIVE_CC="${CC}" LD="${CC}" diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk index ea0a8b0f6..a5c8cfe83 100644 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ b/packages/emulators/libretro/mame2003-midway-lr/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_BUILD_FLAGS="-lto" make_target() { diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index d88026559..5f0c3c28e 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make ARCH="" CC="${CC}" NATIVE_CC="${CC}" LD="${CC}" diff --git a/packages/emulators/libretro/mame2010-lr/package.mk b/packages/emulators/libretro/mame2010-lr/package.mk index 254febc41..ba56903d4 100644 --- a/packages/emulators/libretro/mame2010-lr/package.mk +++ b/packages/emulators/libretro/mame2010-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." PKG_LONGDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/mgba-lr/package.mk b/packages/emulators/libretro/mgba-lr/package.mk index 05ff04d11..28ccf8e4f 100644 --- a/packages/emulators/libretro/mgba-lr/package.mk +++ b/packages/emulators/libretro/mgba-lr/package.mk @@ -29,9 +29,7 @@ PKG_SHORTDESC="mGBA Game Boy Advance Emulator" PKG_LONGDESC="mGBA is a new emulator for running Game Boy Advance games. It aims to be faster and more accurate than many existing Game Boy Advance emulators, as well as adding features that other emulators lack." PKG_PATCH_DIRS+="${DEVICE}" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_USE_CMAKE="no" make_target() { diff --git a/packages/emulators/libretro/mu-lr/package.mk b/packages/emulators/libretro/mu-lr/package.mk index ebd3de999..714ea585a 100644 --- a/packages/emulators/libretro/mu-lr/package.mk +++ b/packages/emulators/libretro/mu-lr/package.mk @@ -12,9 +12,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="An emulator for the Palm m515 OS ported to libretro." PKG_LONGDESC="An emulator for the Palm m515 OS ported to libretro. It is intended to avoid hacks like those used by the POSE emulator, where API calls are intercepted and replaced with those that don't use the actual hardware." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -C ${PKG_BUILD}/libretroBuildSystem/ diff --git a/packages/emulators/libretro/neocd_lr/package.mk b/packages/emulators/libretro/neocd_lr/package.mk index 7616c15bf..47d1307cf 100644 --- a/packages/emulators/libretro/neocd_lr/package.mk +++ b/packages/emulators/libretro/neocd_lr/package.mk @@ -10,9 +10,7 @@ PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain flac libogg libvorbis" PKG_SHORTDESC="Neo Geo CD emulator for libretro " PKG_LONGDESC="NeoCD-Libretro is a complete rewrite of NeoCD from scratch in modern C++11. It is designed with accuracy and portability in mind rather than being all about speed like the the older versions. The goal is also to document all I know about the platform in the source code so other emulator authors can make their own implementations." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" GET_HANDLER_SUPPORT="git" make_target() { diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index ec26f461d..ef86a1736 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Libretro implementation of NEStopia. (Nintendo Entertainment System)" PKG_LONGDESC="This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to enhance the original, and ensure it continues to work on modern operating systems." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_USE_CMAKE="no" make_target() { diff --git a/packages/emulators/libretro/o2em-lr/package.mk b/packages/emulators/libretro/o2em-lr/package.mk index e322c3f35..f99968736 100644 --- a/packages/emulators/libretro/o2em-lr/package.mk +++ b/packages/emulators/libretro/o2em-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." PKG_LONGDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/picodrive-lr/package.mk b/packages/emulators/libretro/picodrive-lr/package.mk index 1250a3864..482d014e7 100644 --- a/packages/emulators/libretro/picodrive-lr/package.mk +++ b/packages/emulators/libretro/picodrive-lr/package.mk @@ -10,8 +10,6 @@ GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="-gold" PKG_TOOLCHAIN="make" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_PATCH_DIRS="${PROJECT}" diff --git a/packages/emulators/libretro/pokemini-lr/package.mk b/packages/emulators/libretro/pokemini-lr/package.mk index e09f1bd09..605d6e4df 100644 --- a/packages/emulators/libretro/pokemini-lr/package.mk +++ b/packages/emulators/libretro/pokemini-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" PKG_LONGDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_PATCH_DIRS+="${DEVICE}" makeinstall_target() { diff --git a/packages/emulators/libretro/prosystem-lr/package.mk b/packages/emulators/libretro/prosystem-lr/package.mk index d0f1ae6f0..1b49afeb0 100644 --- a/packages/emulators/libretro/prosystem-lr/package.mk +++ b/packages/emulators/libretro/prosystem-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of ProSystem to libretro." PKG_LONGDESC="Port of ProSystem to libretro." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/px68k-lr/package.mk b/packages/emulators/libretro/px68k-lr/package.mk index 617a69f41..772788f31 100644 --- a/packages/emulators/libretro/px68k-lr/package.mk +++ b/packages/emulators/libretro/px68k-lr/package.mk @@ -29,9 +29,7 @@ PKG_SHORTDESC="Portable SHARP X68000 Emulator for PSP, Android and other platfor PKG_LONGDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_PATCH_DIRS+="${DEVICE}" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/quicknes-lr/package.mk b/packages/emulators/libretro/quicknes-lr/package.mk index 61d120191..eb6a58849 100644 --- a/packages/emulators/libretro/quicknes-lr/package.mk +++ b/packages/emulators/libretro/quicknes-lr/package.mk @@ -29,9 +29,7 @@ PKG_SHORTDESC="The QuickNES core library, originally by Shay Green, heavily modi PKG_LONGDESC="The QuickNES core library, originally by Shay Green, heavily modified" PKG_BUILD_FLAGS="-gold" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { VERSION='GIT_VERSION ?= ' diff --git a/packages/emulators/libretro/race-lr/package.mk b/packages/emulators/libretro/race-lr/package.mk index fcd6d365d..0d74585d1 100644 --- a/packages/emulators/libretro/race-lr/package.mk +++ b/packages/emulators/libretro/race-lr/package.mk @@ -28,9 +28,7 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_LONGDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/sameboy-lr/package.mk b/packages/emulators/libretro/sameboy-lr/package.mk index 005622d8c..e7f8747df 100644 --- a/packages/emulators/libretro/sameboy-lr/package.mk +++ b/packages/emulators/libretro/sameboy-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain util-linux:host" PKG_SHORTDESC="Gameboy and Gameboy Color emulator written in C" PKG_LONGDESC="Gameboy and Gameboy Color emulator written in C" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -C libretro BOOTROMS_DIR=${PKG_BUILD}/BootROMs/prebuilt diff --git a/packages/emulators/libretro/sameduck-lr/package.mk b/packages/emulators/libretro/sameduck-lr/package.mk index 39bf3546a..b33cf2a78 100644 --- a/packages/emulators/libretro/sameduck-lr/package.mk +++ b/packages/emulators/libretro/sameduck-lr/package.mk @@ -30,9 +30,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Mega Duck/Cougar Boy emulator written in C" PKG_LONGDESC="Mega Duck/Cougar Boy emulator written in C" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -C libretro diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index 7a3d0cd0a..fc570341d 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="ScummVM with libretro backend." PKG_LONGDESC="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_BUILD_FLAGS="-lto" pre_make_target() { diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 3800683b9..97939befb 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Common SLANG shaders for RetroArch" PKG_LONGDESC="Common SLANG shaders for RetroArch" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" configure_target() { cd ${PKG_BUILD} diff --git a/packages/emulators/libretro/smsplus-gx-lr/package.mk b/packages/emulators/libretro/smsplus-gx-lr/package.mk index eda6ec1de..b17d17349 100644 --- a/packages/emulators/libretro/smsplus-gx-lr/package.mk +++ b/packages/emulators/libretro/smsplus-gx-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="SMS Plus GX is an enhanced version" PKG_LONGDESC="SMS Plus is an open-source Sega Master System and Game Gear emulator written by Charles MacDonald." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/snes9x-lr/package.mk b/packages/emulators/libretro/snes9x-lr/package.mk index ada9d00fc..b6ba8451d 100644 --- a/packages/emulators/libretro/snes9x-lr/package.mk +++ b/packages/emulators/libretro/snes9x-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" PKG_LONGDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/snes9x2002-lr/package.mk b/packages/emulators/libretro/snes9x2002-lr/package.mk index a52e035ed..2c916b62b 100644 --- a/packages/emulators/libretro/snes9x2002-lr/package.mk +++ b/packages/emulators/libretro/snes9x2002-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Snes9x 2002." PKG_LONGDESC="Snes9x 2002. Port of SNES9x 1.39 for libretro (was previously called PocketSNES). Heavily optimized for ARM." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/snes9x2010-lr/package.mk b/packages/emulators/libretro/snes9x2010-lr/package.mk index 6e8e0a50a..bf36f8557 100644 --- a/packages/emulators/libretro/snes9x2010-lr/package.mk +++ b/packages/emulators/libretro/snes9x2010-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Snes9x 2010." PKG_LONGDESC="Snes9x 2010. Port of Snes9x 1.52+ to Libretro (previously called SNES9x Next). Rewritten in C and several optimizations and speedhacks." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/tgbdual-lr/package.mk b/packages/emulators/libretro/tgbdual-lr/package.mk index 11277cade..22c182098 100644 --- a/packages/emulators/libretro/tgbdual-lr/package.mk +++ b/packages/emulators/libretro/tgbdual-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro port of TGB Dual" PKG_LONGDESC="TGB Dual is an open source (GPLv2) GB/GBC emulator with game link cable support." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index fb09a6c8d..52439fa87 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -29,9 +29,7 @@ PKG_SHORTDESC="Libretro port of Tyrquake (Quake 1 engine)" PKG_LONGDESC="Libretro port of Tyrquake (Quake 1 engine)" PKG_PATCH_DIRS+="${DEVICE}" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" pre_configure_target() { if [ "${ARCH}" == "arm" ]; then diff --git a/packages/emulators/libretro/uae4arm/package.mk b/packages/emulators/libretro/uae4arm/package.mk index 106d222a4..6ac897a3a 100644 --- a/packages/emulators/libretro/uae4arm/package.mk +++ b/packages/emulators/libretro/uae4arm/package.mk @@ -29,7 +29,6 @@ PKG_SHORTDESC="Port of uae4arm for libretro (rpi/android)" PKG_LONGDESC="Port of uae4arm for libretro (rpi/android) " PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro platform=unix_aarch64 "CPU_FLAGS=-mcpu=${TARGET_CPU}" diff --git a/packages/emulators/libretro/uzem-lr/package.mk b/packages/emulators/libretro/uzem-lr/package.mk index 29ac7db57..285917e03 100644 --- a/packages/emulators/libretro/uzem-lr/package.mk +++ b/packages/emulators/libretro/uzem-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A retro-minimalist game console engine for the ATMega644" PKG_LONGDESC="A retro-minimalist game console engine for the ATMega644" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/vba-next-lr/package.mk b/packages/emulators/libretro/vba-next-lr/package.mk index b56163ec9..dea9cf121 100644 --- a/packages/emulators/libretro/vba-next-lr/package.mk +++ b/packages/emulators/libretro/vba-next-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Optimized port of VBA-M to Libretro." PKG_LONGDESC="Optimized port of VBA-M to Libretro. " -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro diff --git a/packages/emulators/libretro/vbam-lr/package.mk b/packages/emulators/libretro/vbam-lr/package.mk index f6c0a33aa..be8401757 100644 --- a/packages/emulators/libretro/vbam-lr/package.mk +++ b/packages/emulators/libretro/vbam-lr/package.mk @@ -29,9 +29,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="A fork of VBA-M with libretro integration" PKG_LONGDESC="VBA-M is a [Super] Game Boy [Color / Advance] emulator for Windows, Linux & Mac." -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" PKG_USE_CMAKE="no" make_target() { diff --git a/packages/emulators/libretro/vecx-lr/package.mk b/packages/emulators/libretro/vecx-lr/package.mk index 9ee8b324b..7f631d5e2 100644 --- a/packages/emulators/libretro/vecx-lr/package.mk +++ b/packages/emulators/libretro/vecx-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="libretro adaptation of vecx" PKG_LONGDESC="libretro adaptation of vecx" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" make_target() { make -f Makefile.libretro HAS_GPU=1 HAS_GLES=1 diff --git a/packages/emulators/libretro/virtualjaguar-lr/package.mk b/packages/emulators/libretro/virtualjaguar-lr/package.mk index 0fbf5e6a3..820aa7e69 100644 --- a/packages/emulators/libretro/virtualjaguar-lr/package.mk +++ b/packages/emulators/libretro/virtualjaguar-lr/package.mk @@ -28,9 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Port of Virtual Jaguar to Libretro" PKG_LONGDESC="Port of Virtual Jaguar to Libretro" -PKG_IS_ADDON="no" PKG_TOOLCHAIN="make" -PKG_AUTORECONF="no" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/graphics/SDL/SDL_net/package.mk b/packages/graphics/SDL/SDL_net/package.mk index b7d902b1e..319f7621b 100644 --- a/packages/graphics/SDL/SDL_net/package.mk +++ b/packages/graphics/SDL/SDL_net/package.mk @@ -27,6 +27,4 @@ PKG_DEPENDS_HOST="SDL:host" PKG_SHORTDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." PKG_LONGDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." -PKG_IS_ADDON="no" PKG_USE_CMAKE="no" -PKG_AUTORECONF="no" diff --git a/packages/graphics/SDL/package.mk b/packages/graphics/SDL/package.mk index 3537ac07a..b5117b170 100644 --- a/packages/graphics/SDL/package.mk +++ b/packages/graphics/SDL/package.mk @@ -26,9 +26,7 @@ PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL:host" PKG_SHORTDESC="SDL: A cross-platform Graphic API" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." -PKG_IS_ADDON="no" PKG_USE_CMAKE="no" -PKG_AUTORECONF="no" PKG_CONFIGURE_OPTS_TARGET="--enable-shared \ --enable-libc \ diff --git a/packages/graphics/SDL/yasm/package.mk b/packages/graphics/SDL/yasm/package.mk index 98633516e..b293f7a47 100644 --- a/packages/graphics/SDL/yasm/package.mk +++ b/packages/graphics/SDL/yasm/package.mk @@ -27,9 +27,7 @@ PKG_DEPENDS_HOST="" PKG_SHORTDESC="yasm: A complete rewrite of the NASM assembler" PKG_LONGDESC="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." -PKG_IS_ADDON="no" PKG_USE_CMAKE="no" -PKG_AUTORECONF="no" PKG_CONFIGURE_OPTS_HOST="--disable-debug \ --disable-warnerror \ diff --git a/packages/hardware/quirks/package.mk b/packages/hardware/quirks/package.mk index 91053eba9..22547c350 100644 --- a/packages/hardware/quirks/package.mk +++ b/packages/hardware/quirks/package.mk @@ -9,8 +9,6 @@ PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain autostart ioport ectool" PKG_SHORTDESC="Quirks is a simple package that provides device quirks." -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/misc/modules/package.mk b/packages/misc/modules/package.mk index 53fa59d0a..301d0fafb 100644 --- a/packages/misc/modules/package.mk +++ b/packages/misc/modules/package.mk @@ -10,8 +10,6 @@ PKG_URL="" PKG_DEPENDS_TARGET="toolchain rclone" PKG_SHORTDESC="OS Modules Package" PKG_LONGDESC="OS Modules Package" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="manual" ### diff --git a/packages/multimedia/libdvbpsi/package.mk b/packages/multimedia/libdvbpsi/package.mk index b899ee98d..ff751b763 100644 --- a/packages/multimedia/libdvbpsi/package.mk +++ b/packages/multimedia/libdvbpsi/package.mk @@ -10,7 +10,5 @@ PKG_URL="http://download.videolan.org/pub/libdvbpsi/${PKG_VERSION}/libdvbpsi-${P PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="library for MPEG TS and DVB PSI tables decoding and generating" PKG_LONGDESC="libdvbpsi is a simple library designed for MPEG TS and DVB PSI tables decoding and generating." -PKG_IS_ADDON="no" -PKG_AUTORECONF="yes" PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" diff --git a/packages/network/fping/package.mk b/packages/network/fping/package.mk index dfbc355ea..3c7f0ab3a 100644 --- a/packages/network/fping/package.mk +++ b/packages/network/fping/package.mk @@ -8,8 +8,6 @@ PKG_LICENSE="GPL" PKG_SITE="http://fping.org/" PKG_URL="http://fping.org/dist/fping-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="auto" PKG_CONFIGURE_OPTS_TARGET="--sbindir=/usr/bin" diff --git a/packages/network/sixaxis/package.mk b/packages/network/sixaxis/package.mk index f0a9de222..324165668 100644 --- a/packages/network/sixaxis/package.mk +++ b/packages/network/sixaxis/package.mk @@ -11,8 +11,6 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="sixaxis helper service " PKG_TOOLCHAIN="make" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" makeinstall_target() { diff --git a/packages/rocknix/package.mk b/packages/rocknix/package.mk index b62c3ec2a..c33da70b2 100644 --- a/packages/rocknix/package.mk +++ b/packages/rocknix/package.mk @@ -10,8 +10,6 @@ PKG_URL="" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="ROCKNIX Meta Package" PKG_LONGDESC="ROCKNIX Meta Package" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/sysutils/autostart/package.mk b/packages/sysutils/autostart/package.mk index 7e8bca8fd..a02db97c0 100755 --- a/packages/sysutils/autostart/package.mk +++ b/packages/sysutils/autostart/package.mk @@ -9,8 +9,6 @@ PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain systemd" PKG_SHORTDESC="Autostart is a systemd helper that starts/configures device specific services and parameters." -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/tools/empty/package.mk b/packages/tools/empty/package.mk index 5e9e9447c..45201fd5f 100644 --- a/packages/tools/empty/package.mk +++ b/packages/tools/empty/package.mk @@ -12,8 +12,6 @@ PKG_URL="http://downloads.sourceforge.net/sourceforge/${PKG_NAME}/${PKG_NAME}-${ PKG_SHORTDESC="Run applications under pseudo-terminal sessions" PKG_LONGDESC="Run applications under pseudo-terminal sessions" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" make_target() { make CC=${CC} diff --git a/packages/tools/git/package.mk b/packages/tools/git/package.mk index b114143ab..030c53846 100644 --- a/packages/tools/git/package.mk +++ b/packages/tools/git/package.mk @@ -11,8 +11,6 @@ PKG_URL="https://mirrors.edge.kernel.org/pub/software/scm/git/git-${PKG_VERSION} PKG_DEPENDS_TARGET="toolchain openssl pcre curl libiconv zlib" PKG_SHORTDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_LONGDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" PKG_CONFIGURE_OPTS_TARGET="ac_cv_fread_reads_directories=yes \ ac_cv_snprintf_returns_bogus=yes \ diff --git a/packages/tools/joyutils/package.mk b/packages/tools/joyutils/package.mk index efc6b73f8..ce52da0df 100644 --- a/packages/tools/joyutils/package.mk +++ b/packages/tools/joyutils/package.mk @@ -12,8 +12,6 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" PKG_LONGDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" -PKG_IS_ADDON="no" -PKG_AUTORECONF="no" # post_unpack() { # mv $BUILD/joystick-${PKG_VERSION} $BUILD/${PKG_NAME}-${PKG_VERSION} From 34d1d25e6c27b6ccf569028c1a1871291ada4616 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:11:56 +0000 Subject: [PATCH 011/184] Clean up unused package variables --- packages/apps/control-gen/package.mk | 1 - packages/apps/device-switch/package.mk | 1 - packages/apps/fileman/package.mk | 1 - packages/apps/gamecontrollerdb/package.mk | 1 - packages/apps/moonlight/package.mk | 1 - packages/apps/rocknix-hotkey/package.mk | 1 - packages/devel/ecm/package.mk | 1 - packages/devel/gobject-introspection/package.mk | 1 - packages/devel/xa/package.mk | 1 - packages/emulators/libretro/2048-lr/package.mk | 1 - packages/emulators/libretro/81-lr/package.mk | 1 - packages/emulators/libretro/a5200-lr/package.mk | 1 - packages/emulators/libretro/atari800-lr/package.mk | 1 - packages/emulators/libretro/beetle-gba-lr/package.mk | 1 - packages/emulators/libretro/beetle-lynx-lr/package.mk | 1 - packages/emulators/libretro/beetle-ngp-lr/package.mk | 1 - packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 1 - packages/emulators/libretro/beetle-pce-lr/package.mk | 1 - packages/emulators/libretro/beetle-pcfx-lr/package.mk | 1 - packages/emulators/libretro/beetle-supafaust-lr/package.mk | 1 - packages/emulators/libretro/beetle-supergrafx-lr/package.mk | 1 - packages/emulators/libretro/beetle-vb-lr/package.mk | 1 - packages/emulators/libretro/beetle-wswan-lr/package.mk | 1 - packages/emulators/libretro/bluemsx-lr/package.mk | 1 - packages/emulators/libretro/cap32-lr/package.mk | 1 - packages/emulators/libretro/crocods-lr/package.mk | 1 - packages/emulators/libretro/daphne-lr/package.mk | 1 - packages/emulators/libretro/dolphin-lr/package.mk | 1 - packages/emulators/libretro/dosbox-lr/package.mk | 1 - packages/emulators/libretro/dosbox-pure-lr/package.mk | 1 - packages/emulators/libretro/dosbox-svn-lr/package.mk | 1 - packages/emulators/libretro/duckstation-lr/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/liblcf/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk | 1 - packages/emulators/libretro/fbalpha2012-lr/package.mk | 1 - packages/emulators/libretro/fbalpha2019-lr/package.mk | 1 - packages/emulators/libretro/fbneo-lr/package.mk | 1 - packages/emulators/libretro/fceumm-lr/package.mk | 1 - packages/emulators/libretro/fmsx-lr/package.mk | 1 - packages/emulators/libretro/freechaf-lr/package.mk | 1 - packages/emulators/libretro/freeintv-lr/package.mk | 1 - packages/emulators/libretro/freej2me-lr/package.mk | 1 - packages/emulators/libretro/fuse-lr/package.mk | 1 - packages/emulators/libretro/gambatte-lr/package.mk | 1 - packages/emulators/libretro/gearboy-lr/package.mk | 1 - packages/emulators/libretro/gearcoleco-lr/package.mk | 1 - packages/emulators/libretro/gearsystem-lr/package.mk | 1 - packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 1 - packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk | 1 - packages/emulators/libretro/gw-lr/package.mk | 1 - packages/emulators/libretro/handy-lr/package.mk | 1 - packages/emulators/libretro/hatari-lr/package.mk | 1 - packages/emulators/libretro/libretro-database/package.mk | 1 - packages/emulators/libretro/lrps2-lr/package.mk | 1 - packages/emulators/libretro/mame-lr/package.mk | 1 - packages/emulators/libretro/mame2003-lr/package.mk | 1 - packages/emulators/libretro/mame2003-midway-lr/package.mk | 1 - packages/emulators/libretro/mame2003-plus-lr/package.mk | 1 - packages/emulators/libretro/mame2003-xtreme-lr/package.mk | 1 - packages/emulators/libretro/mame2010-lr/package.mk | 1 - packages/emulators/libretro/mame2015-lr/package.mk | 1 - packages/emulators/libretro/mame2016-lr/package.mk | 1 - packages/emulators/libretro/mesen-lr/package.mk | 1 - packages/emulators/libretro/mgba-lr/package.mk | 1 - packages/emulators/libretro/minivmac-lr/package.mk | 1 - packages/emulators/libretro/mu-lr/package.mk | 1 - packages/emulators/libretro/neocd_lr/package.mk | 1 - packages/emulators/libretro/nestopia-lr/package.mk | 1 - packages/emulators/libretro/np2kai-lr/package.mk | 1 - packages/emulators/libretro/o2em-lr/package.mk | 1 - packages/emulators/libretro/opera-lr/package.mk | 1 - packages/emulators/libretro/parallel-n64-lr/package.mk | 1 - packages/emulators/libretro/pokemini-lr/package.mk | 1 - packages/emulators/libretro/potator-lr/package.mk | 1 - packages/emulators/libretro/prosystem-lr/package.mk | 1 - packages/emulators/libretro/puae-lr/package.mk | 1 - packages/emulators/libretro/puae2021-lr/package.mk | 1 - packages/emulators/libretro/px68k-lr/package.mk | 1 - packages/emulators/libretro/quasi88-lr/package.mk | 1 - packages/emulators/libretro/quicknes-lr/package.mk | 1 - packages/emulators/libretro/race-lr/package.mk | 1 - packages/emulators/libretro/retropie-shaders/package.mk | 1 - packages/emulators/libretro/sameboy-lr/package.mk | 1 - packages/emulators/libretro/sameduck-lr/package.mk | 1 - packages/emulators/libretro/scummvm-lr/package.mk | 1 - packages/emulators/libretro/slang-shaders/package.mk | 1 - packages/emulators/libretro/smsplus-gx-lr/package.mk | 1 - packages/emulators/libretro/snes9x-lr/package.mk | 1 - packages/emulators/libretro/snes9x2002-lr/package.mk | 1 - packages/emulators/libretro/snes9x2005_plus-lr/package.mk | 1 - packages/emulators/libretro/snes9x2010-lr/package.mk | 1 - packages/emulators/libretro/swanstation-lr/package.mk | 1 - packages/emulators/libretro/tgbdual-lr/package.mk | 1 - packages/emulators/libretro/tyrquake-lr/package.mk | 1 - packages/emulators/libretro/uzem-lr/package.mk | 1 - packages/emulators/libretro/vba-next-lr/package.mk | 1 - packages/emulators/libretro/vbam-lr/package.mk | 1 - packages/emulators/libretro/vecx-lr/package.mk | 1 - packages/emulators/libretro/vice-lr/package.mk | 1 - packages/emulators/libretro/virtualjaguar-lr/package.mk | 1 - packages/emulators/libretro/xmil-lr/package.mk | 1 - packages/emulators/libretro/yabasanshiro-lr/package.mk | 1 - packages/emulators/standalone/hypseus-singe/package.mk | 1 - packages/emulators/standalone/hypseus/package.mk | 1 - packages/emulators/standalone/minivmacsa/package.mk | 1 - packages/emulators/standalone/openbor/package.mk | 1 - packages/emulators/standalone/pico-8/package.mk | 1 - packages/emulators/standalone/ppsspp-sa/package.mk | 1 - packages/emulators/standalone/supermodel-sa/package.mk | 1 - packages/emulators/standalone/vice-sa/package.mk | 1 - packages/graphics/SDL/SDL_net/package.mk | 1 - packages/graphics/SDL/package.mk | 1 - packages/graphics/SDL/yasm/package.mk | 1 - packages/graphics/glfw/package.mk | 1 - packages/graphics/mesa-demos/package.mk | 1 - packages/hardware/quirks/package.mk | 1 - packages/lang/luajit/package.mk | 1 - packages/misc/modules/package.mk | 1 - packages/multimedia/libdvbpsi/package.mk | 1 - packages/multimedia/opusfile/package.mk | 1 - packages/multimedia/vlc/package.mk | 1 - packages/network/fping/package.mk | 1 - packages/network/sixaxis/package.mk | 1 - packages/network/syncthing/package.mk | 1 - packages/python/devel/pgi/package.mk | 1 - packages/python/devel/pygobject/package.mk | 1 - packages/rocknix/package.mk | 1 - packages/sysutils/autostart/package.mk | 1 - packages/sysutils/pciutils/package.mk | 1 - packages/sysutils/powerstate/package.mk | 1 - packages/sysutils/sleep/package.mk | 1 - packages/sysutils/system-utils/package.mk | 1 - packages/tools/empty/package.mk | 1 - packages/tools/git/package.mk | 1 - packages/tools/joyutils/package.mk | 1 - packages/tools/sound/timidity/package.mk | 1 - packages/ui/emulationstation/package.mk | 1 - packages/ui/themes/es-theme-art-book-next/package.mk | 1 - 141 files changed, 141 deletions(-) diff --git a/packages/apps/control-gen/package.mk b/packages/apps/control-gen/package.mk index 0e602cc21..9c8957601 100644 --- a/packages/apps/control-gen/package.mk +++ b/packages/apps/control-gen/package.mk @@ -3,7 +3,6 @@ PKG_NAME="control-gen" PKG_VERSION="ea44ab254d09d2d86eeb70289673418df2beee75" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain" PKG_SHORTDESC="Generates control.txt for gptokeyb" diff --git a/packages/apps/device-switch/package.mk b/packages/apps/device-switch/package.mk index fd8bc3f21..a51c4678c 100644 --- a/packages/apps/device-switch/package.mk +++ b/packages/apps/device-switch/package.mk @@ -3,7 +3,6 @@ PKG_NAME="device-switch" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="mix" PKG_DEPENDS_TARGET="toolchain" PKG_SITE="" diff --git a/packages/apps/fileman/package.mk b/packages/apps/fileman/package.mk index 0c781bbe6..763801c34 100644 --- a/packages/apps/fileman/package.mk +++ b/packages/apps/fileman/package.mk @@ -4,7 +4,6 @@ PKG_NAME="fileman" PKG_VERSION="3ccadd7fef427b4da22ff39de13dd25bb40e9e6a" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/fileman" PKG_URL="${PKG_SITE}.git" diff --git a/packages/apps/gamecontrollerdb/package.mk b/packages/apps/gamecontrollerdb/package.mk index a428272d4..4429f6ea6 100644 --- a/packages/apps/gamecontrollerdb/package.mk +++ b/packages/apps/gamecontrollerdb/package.mk @@ -3,7 +3,6 @@ PKG_NAME="gamecontrollerdb" PKG_VERSION="b7933e43ca2f8d26d8b668ea8ea52b736221af1e" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_DEPENDS_TARGET="toolchain SDL2" PKG_SITE="https://github.com/gabomdq/SDL_GameControllerDB" diff --git a/packages/apps/moonlight/package.mk b/packages/apps/moonlight/package.mk index ecddbda4b..ea9a7a558 100644 --- a/packages/apps/moonlight/package.mk +++ b/packages/apps/moonlight/package.mk @@ -2,7 +2,6 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="moonlight" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/moonlight-stream/moonlight-" PKG_DEPENDS_TARGET="toolchain opus SDL2 libevdev alsa curl enet avahi libvdpau libcec ffmpeg" diff --git a/packages/apps/rocknix-hotkey/package.mk b/packages/apps/rocknix-hotkey/package.mk index 529e5feb3..dcf8a73e9 100644 --- a/packages/apps/rocknix-hotkey/package.mk +++ b/packages/apps/rocknix-hotkey/package.mk @@ -3,7 +3,6 @@ PKG_NAME="rocknix-hotkey" PKG_VERSION="14255daccc61dd8f366b3c88292d54cfef1c087a" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/ROCKNIX/rocknix-hotkey" PKG_URL="${PKG_SITE}.git" diff --git a/packages/devel/ecm/package.mk b/packages/devel/ecm/package.mk index 81193f7c5..f56418796 100644 --- a/packages/devel/ecm/package.mk +++ b/packages/devel/ecm/package.mk @@ -3,7 +3,6 @@ PKG_NAME="ecm" PKG_VERSION="v5.112.0" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/KDE/extra-cmake-modules" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/devel/gobject-introspection/package.mk b/packages/devel/gobject-introspection/package.mk index 16ed1409c..da06d7e50 100644 --- a/packages/devel/gobject-introspection/package.mk +++ b/packages/devel/gobject-introspection/package.mk @@ -5,7 +5,6 @@ PKG_NAME="gobject-introspection" PKG_VERSION="1.78.1" -PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="https://github.com/GNOME/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/devel/xa/package.mk b/packages/devel/xa/package.mk index 1fe62aca3..d24164ad3 100644 --- a/packages/devel/xa/package.mk +++ b/packages/devel/xa/package.mk @@ -3,7 +3,6 @@ PKG_NAME="xa" PKG_VERSION="2.4.1" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://www.floodgap.com/retrotech/xa/" PKG_URL="${PKG_SITE}/dists/xa-${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/2048-lr/package.mk b/packages/emulators/libretro/2048-lr/package.mk index 17f470b97..c5a9c35d1 100644 --- a/packages/emulators/libretro/2048-lr/package.mk +++ b/packages/emulators/libretro/2048-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="2048-lr" PKG_VERSION="331c1de588ed8f8c370dcbc488e5434a3c09f0f2" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/libretro-2048" PKG_URL="https://github.com/libretro/libretro-2048/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/81-lr/package.mk b/packages/emulators/libretro/81-lr/package.mk index 50675bfd0..ae03e822c 100644 --- a/packages/emulators/libretro/81-lr/package.mk +++ b/packages/emulators/libretro/81-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="81-lr" PKG_VERSION="525d5c18f1ff3fc54c37e083a475225d9179d59d" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/81-libretro" PKG_URL="https://github.com/libretro/81-libretro/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/a5200-lr/package.mk b/packages/emulators/libretro/a5200-lr/package.mk index ce4638023..b34dca6ff 100644 --- a/packages/emulators/libretro/a5200-lr/package.mk +++ b/packages/emulators/libretro/a5200-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="a5200-lr" PKG_VERSION="0942c88d64cad6853b539f51b39060a9de0cbcab" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/a5200" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/atari800-lr/package.mk b/packages/emulators/libretro/atari800-lr/package.mk index 941990736..f8c9ebc82 100644 --- a/packages/emulators/libretro/atari800-lr/package.mk +++ b/packages/emulators/libretro/atari800-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="atari800-lr" PKG_VERSION="410d7bf0c215f3444793a9cec51c129e7b67c400" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-atari800" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/beetle-gba-lr/package.mk b/packages/emulators/libretro/beetle-gba-lr/package.mk index aa53b24ea..ea5944d19 100644 --- a/packages/emulators/libretro/beetle-gba-lr/package.mk +++ b/packages/emulators/libretro/beetle-gba-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-gba-lr" PKG_VERSION="38182572571a48cb58057cde64b915237c4e2d58" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-gba-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-lynx-lr/package.mk b/packages/emulators/libretro/beetle-lynx-lr/package.mk index 7fe40e8ab..93966770b 100644 --- a/packages/emulators/libretro/beetle-lynx-lr/package.mk +++ b/packages/emulators/libretro/beetle-lynx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-lynx-lr" PKG_VERSION="48909ddd1aba4de034d9c1da70c460b1724daa3b" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-lynx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-ngp-lr/package.mk b/packages/emulators/libretro/beetle-ngp-lr/package.mk index 9eb5f9a75..3aef1e735 100644 --- a/packages/emulators/libretro/beetle-ngp-lr/package.mk +++ b/packages/emulators/libretro/beetle-ngp-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-ngp-lr" PKG_VERSION="673c3d924ff33d71c6a342b170eff5359244df1f" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-ngp-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index 76e981cff..d3c07ad36 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-pce-fast-lr" PKG_VERSION="6210d0f8c262dcdaa5b76c28057cca6077f488fe" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index cb9b17117..373d8fd9e 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-pce-lr" PKG_VERSION="20b86372b5f490394099ee0ad06e0eb3a4fd5c2e" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-pcfx-lr/package.mk b/packages/emulators/libretro/beetle-pcfx-lr/package.mk index 7420c7eed..0a9d3b4c1 100644 --- a/packages/emulators/libretro/beetle-pcfx-lr/package.mk +++ b/packages/emulators/libretro/beetle-pcfx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-pcfx-lr" PKG_VERSION="47c355b6a515aef6dc57f57df1535570108a0e21" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pcfx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-supafaust-lr/package.mk b/packages/emulators/libretro/beetle-supafaust-lr/package.mk index 5d95d500e..b8518a726 100644 --- a/packages/emulators/libretro/beetle-supafaust-lr/package.mk +++ b/packages/emulators/libretro/beetle-supafaust-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-supafaust-lr" PKG_VERSION="6b639c98372d1c9bac885c55d772c812d2a9d525" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/supafaust" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk index 038b89b46..3b4c49f4b 100644 --- a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk +++ b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-supergrafx-lr" PKG_VERSION="e41f864c0abb36aef20f8e37cd9d9a92c00a9221" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-supergrafx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-vb-lr/package.mk b/packages/emulators/libretro/beetle-vb-lr/package.mk index e40e28f37..d7a50d810 100644 --- a/packages/emulators/libretro/beetle-vb-lr/package.mk +++ b/packages/emulators/libretro/beetle-vb-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-vb-lr" PKG_VERSION="9d1bd03f21dac7897f65269e1095496331efce8b" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-vb-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-wswan-lr/package.mk b/packages/emulators/libretro/beetle-wswan-lr/package.mk index e30d07f94..2e3a4e40f 100644 --- a/packages/emulators/libretro/beetle-wswan-lr/package.mk +++ b/packages/emulators/libretro/beetle-wswan-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="beetle-wswan-lr" PKG_VERSION="32bf70a3032a138baa969c22445f4b7821632c30" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-wswan-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/bluemsx-lr/package.mk b/packages/emulators/libretro/bluemsx-lr/package.mk index ecd0de3b4..9afcb51ce 100644 --- a/packages/emulators/libretro/bluemsx-lr/package.mk +++ b/packages/emulators/libretro/bluemsx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="bluemsx-lr" PKG_VERSION="e8a4280bcbd149d1e020adcd9469ad9d8bd67412" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/blueMSX-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/cap32-lr/package.mk b/packages/emulators/libretro/cap32-lr/package.mk index 5482b0ee3..2b893fa4c 100644 --- a/packages/emulators/libretro/cap32-lr/package.mk +++ b/packages/emulators/libretro/cap32-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="cap32-lr" PKG_VERSION="1569dac2674512fa503dbb95eb32bccbe2908063" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-cap32" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/crocods-lr/package.mk b/packages/emulators/libretro/crocods-lr/package.mk index da5749b14..8a28a7c12 100644 --- a/packages/emulators/libretro/crocods-lr/package.mk +++ b/packages/emulators/libretro/crocods-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="crocods-lr" PKG_VERSION="f1b4b91291ba1e8e7c0be02269cd0d75c7fa71b9" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/libretro/libretro-crocods" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/daphne-lr/package.mk b/packages/emulators/libretro/daphne-lr/package.mk index bccccc6dd..94431ae5a 100644 --- a/packages/emulators/libretro/daphne-lr/package.mk +++ b/packages/emulators/libretro/daphne-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="daphne-lr" PKG_VERSION="b5481bab34a51369b6749cd95f5f889e43aaa23f" -PKG_ARCH="any" PKG_LICENSE="GPLv2+" PKG_SITE="https://github.com/libretro/daphne" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/dolphin-lr/package.mk b/packages/emulators/libretro/dolphin-lr/package.mk index a6fc2490e..144143813 100644 --- a/packages/emulators/libretro/dolphin-lr/package.mk +++ b/packages/emulators/libretro/dolphin-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="dolphin-lr" PKG_VERSION="2f4b0f7902257d40a054f60b2c670d6e314f2a04" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb" PKG_SITE="https://github.com/libretro/dolphin" diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk index fc511d278..d68ac96ad 100644 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ b/packages/emulators/libretro/dosbox-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="dosbox-lr" PKG_VERSION="b7b24262c282c0caef2368c87323ff8c381b3102" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/dosbox-libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/dosbox-pure-lr/package.mk b/packages/emulators/libretro/dosbox-pure-lr/package.mk index 024adbaf4..b5a697163 100644 --- a/packages/emulators/libretro/dosbox-pure-lr/package.mk +++ b/packages/emulators/libretro/dosbox-pure-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="dosbox-pure-lr" PKG_VERSION="87bf6365158325b76ff238c1ad8daf16a859bbe8" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/schellingb/dosbox-pure" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/dosbox-svn-lr/package.mk b/packages/emulators/libretro/dosbox-svn-lr/package.mk index 38ab5d3bd..0ef2fee53 100644 --- a/packages/emulators/libretro/dosbox-svn-lr/package.mk +++ b/packages/emulators/libretro/dosbox-svn-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="dosbox-svn-lr" PKG_VERSION="53ca2f6303a652d129321cfc521f000cd7ec5531" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/dosbox-svn" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/duckstation-lr/package.mk b/packages/emulators/libretro/duckstation-lr/package.mk index 5ccec2937..3e84d2021 100644 --- a/packages/emulators/libretro/duckstation-lr/package.mk +++ b/packages/emulators/libretro/duckstation-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="duckstation-lr" PKG_VERSION="24c373245ebdab946f11627520edea76e1f23b8e" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/stenzek/duckstation" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk b/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk index 7de40d73f..a59268300 100644 --- a/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk @@ -19,7 +19,6 @@ PKG_NAME="liblcf" PKG_VERSION="606288281fe3527353c76065b56e1ebdc0c9baae" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/EasyRPG/liblcf" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk index 9247c7d5a..a22d563ba 100644 --- a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk @@ -20,7 +20,6 @@ PKG_NAME="libspeexdsp" PKG_VERSION="738e17905e1ca2a1fa932ddd9c2a85d089f4e845" -PKG_ARCH="any" PKG_SITE="https://github.com/xiph/speexdsp" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" diff --git a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk index 5b35613f1..a0651c832 100644 --- a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk @@ -20,7 +20,6 @@ PKG_NAME="libxmp-lite" PKG_VERSION="4.5.0" -PKG_ARCH="any" PKG_SITE="http://sourceforge.net/projects/xmp" PKG_URL="${PKG_SITE}/files/libxmp/${PKG_VERSION}/libxmp-lite-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" diff --git a/packages/emulators/libretro/easyrpg-lr/package.mk b/packages/emulators/libretro/easyrpg-lr/package.mk index 6cab964de..22785f7bb 100644 --- a/packages/emulators/libretro/easyrpg-lr/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="easyrpg-lr" PKG_VERSION="6ba2f54ed4e2c12b5bd73fc326600a67cf595dde" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/easyrpg/player" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk index 58bca1344..c9a4e71bf 100644 --- a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk @@ -20,7 +20,6 @@ PKG_NAME="wildmidi" PKG_VERSION="405ca73" -PKG_ARCH="any" PKG_SITE="https://github.com/Mindwerks/wildmidi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" diff --git a/packages/emulators/libretro/fbalpha2012-lr/package.mk b/packages/emulators/libretro/fbalpha2012-lr/package.mk index 4fb9b8a7f..b70280e2f 100644 --- a/packages/emulators/libretro/fbalpha2012-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2012-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="fbalpha2012-lr" PKG_VERSION="b7ac554c53561d41640372f23dab15cd6fc4f0c4" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha2012" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/fbalpha2019-lr/package.mk b/packages/emulators/libretro/fbalpha2019-lr/package.mk index b8911e7c4..7a2b89559 100644 --- a/packages/emulators/libretro/fbalpha2019-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2019-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="fbalpha2019-lr" PKG_VERSION="0581797db6fdffd826086b053ced4b6b29bb6678" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/fbneo-lr/package.mk b/packages/emulators/libretro/fbneo-lr/package.mk index a9eb5c32e..8f71c6707 100644 --- a/packages/emulators/libretro/fbneo-lr/package.mk +++ b/packages/emulators/libretro/fbneo-lr/package.mk @@ -5,7 +5,6 @@ PKG_NAME="fbneo-lr" PKG_VERSION="a5c3e943d432b467110d06bf9c4cfc4143e7274e" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/FBNeo" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index ef0500fc9..ccf1ae02f 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="fceumm-lr" PKG_VERSION="40969671ce9e4b1a49165d836476cd71bb960131" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-fceumm" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/fmsx-lr/package.mk b/packages/emulators/libretro/fmsx-lr/package.mk index c2a9930a6..ac87fc106 100644 --- a/packages/emulators/libretro/fmsx-lr/package.mk +++ b/packages/emulators/libretro/fmsx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="fmsx-lr" PKG_VERSION="9b5cf868825a629cc4c7086768338165d3bbf706" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/fmsx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/freechaf-lr/package.mk b/packages/emulators/libretro/freechaf-lr/package.mk index c2e2e790b..9ec03ce06 100644 --- a/packages/emulators/libretro/freechaf-lr/package.mk +++ b/packages/emulators/libretro/freechaf-lr/package.mk @@ -1,6 +1,5 @@ PKG_NAME="freechaf-lr" PKG_VERSION="782739dd6988b0148f9c26ddc6ff414e76e54d7b" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/FreeChaF" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/freeintv-lr/package.mk b/packages/emulators/libretro/freeintv-lr/package.mk index c18dcdbf3..dc7016c50 100644 --- a/packages/emulators/libretro/freeintv-lr/package.mk +++ b/packages/emulators/libretro/freeintv-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="freeintv-lr" PKG_VERSION="85bf25a39a34bbc39fe36677175d87c2b597dbe7" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/FreeIntv" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/freej2me-lr/package.mk b/packages/emulators/libretro/freej2me-lr/package.mk index 827c517c9..339795efa 100644 --- a/packages/emulators/libretro/freej2me-lr/package.mk +++ b/packages/emulators/libretro/freej2me-lr/package.mk @@ -4,7 +4,6 @@ PKG_NAME="freej2me-lr" PKG_VERSION="8b9bc8a19baf26e3d92f88934a64a32f1cbc2795" -PKG_ARCH="any" PKG_SITE="https://github.com/hex007/freej2me" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain apache-ant:host" diff --git a/packages/emulators/libretro/fuse-lr/package.mk b/packages/emulators/libretro/fuse-lr/package.mk index f9ec7ee07..d77dcd465 100644 --- a/packages/emulators/libretro/fuse-lr/package.mk +++ b/packages/emulators/libretro/fuse-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="fuse-lr" PKG_VERSION="847dbbd6f787823ac9a5dfacdd68ab181063374e" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/fuse-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gambatte-lr/package.mk b/packages/emulators/libretro/gambatte-lr/package.mk index f7bea9b04..1c0998aae 100644 --- a/packages/emulators/libretro/gambatte-lr/package.mk +++ b/packages/emulators/libretro/gambatte-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="gambatte-lr" PKG_VERSION="cbda5ea9fd81d1be0220dfc690d05240655602e4" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/gambatte-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 4760c4dcc..972b81277 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -16,7 +16,6 @@ PKG_NAME="gearboy-lr" PKG_VERSION="3b94ce2c425833f0bdf10f933e9e7c9db1621963" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearboy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gearcoleco-lr/package.mk b/packages/emulators/libretro/gearcoleco-lr/package.mk index 5a0b318fa..770ad601f 100644 --- a/packages/emulators/libretro/gearcoleco-lr/package.mk +++ b/packages/emulators/libretro/gearcoleco-lr/package.mk @@ -16,7 +16,6 @@ PKG_NAME="gearcoleco-lr" PKG_VERSION="6cf0df47d9dcbbaf0110c3864f6cbaf603df41f7" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearcoleco" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gearsystem-lr/package.mk b/packages/emulators/libretro/gearsystem-lr/package.mk index 8509615d9..3ff81a42b 100644 --- a/packages/emulators/libretro/gearsystem-lr/package.mk +++ b/packages/emulators/libretro/gearsystem-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="gearsystem-lr" PKG_VERSION="3639641ac7ad76ac45339a44792b68838a2bafc4" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/drhelius/Gearsystem" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index af69c91c1..2ba13e3e0 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="genesis-plus-gx-lr" PKG_VERSION="667158b034ce860e345b13e1ed927fea9d155b96" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk index 7b14f5e95..7eef80d3c 100644 --- a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="genesis-plus-gx-wide-lr" PKG_VERSION="3c4dccdc2a60db50bb8c37090e3d3d2134a51295" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX-Wide" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gw-lr/package.mk b/packages/emulators/libretro/gw-lr/package.mk index 5485f7b6b..72241e3dc 100644 --- a/packages/emulators/libretro/gw-lr/package.mk +++ b/packages/emulators/libretro/gw-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="gw-lr" PKG_VERSION="0ecff52b11c327af52b22ea94b268c90472b6732" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/gw-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/handy-lr/package.mk b/packages/emulators/libretro/handy-lr/package.mk index 7f37c16ce..e849ca3dc 100644 --- a/packages/emulators/libretro/handy-lr/package.mk +++ b/packages/emulators/libretro/handy-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="handy-lr" PKG_VERSION="65d6b865544cd441ef2bd18cde7bd834c23d0e48" -PKG_ARCH="any" PKG_LICENSE="Zlib" PKG_SITE="https://github.com/libretro/libretro-handy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/hatari-lr/package.mk b/packages/emulators/libretro/hatari-lr/package.mk index 57d7e9327..5dda7d076 100644 --- a/packages/emulators/libretro/hatari-lr/package.mk +++ b/packages/emulators/libretro/hatari-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="hatari-lr" PKG_VERSION="a4c9eb0bb79e47a2870c12b04566c1f8d25e4bf3" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/hatari" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index 0e11b5c3d..b61c78df5 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -21,7 +21,6 @@ PKG_NAME="libretro-database" PKG_VERSION="588356595a142fb7bc642060413c123bc9ebd7dd" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-database" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/lrps2-lr/package.mk b/packages/emulators/libretro/lrps2-lr/package.mk index f253c367f..29d8a3dce 100644 --- a/packages/emulators/libretro/lrps2-lr/package.mk +++ b/packages/emulators/libretro/lrps2-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="lrps2-lr" PKG_VERSION="f3c8743d6a42fe429f703b476fecfdb5655a98a9" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain alsa-lib freetype zlib libpng libaio libsamplerate libfmt libpcap soundtouch yamlcpp wxwidgets" PKG_SITE="https://github.com/libretro/LRPS2" diff --git a/packages/emulators/libretro/mame-lr/package.mk b/packages/emulators/libretro/mame-lr/package.mk index 2b60f1241..b72b10bd0 100644 --- a/packages/emulators/libretro/mame-lr/package.mk +++ b/packages/emulators/libretro/mame-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="mame-lr" PKG_VERSION="ac9d0347f5d331eb49017cd599a5e63a668b4f22" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame" PKG_URL="https://github.com/libretro/mame/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2003-lr/package.mk b/packages/emulators/libretro/mame2003-lr/package.mk index 389c2b4d3..2de89fea0 100644 --- a/packages/emulators/libretro/mame2003-lr/package.mk +++ b/packages/emulators/libretro/mame2003-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="mame2003" PKG_VERSION="c079e586e5ef54e084622863816f4f0439fdb870" PKG_SHA256="a23579c5df4cadcf57740a4d64e10eff0e26805e304261902a4d891fd2a2662a" -PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk index a5c8cfe83..a471ef42a 100644 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ b/packages/emulators/libretro/mame2003-midway-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="mame2003-midway-lr" PKG_VERSION="2204233a66a78ebbb0ef1e86bb9d36e4405a2a92" PKG_SHA256="8ed1addf56c9ed1999bac813e132c630f67096c9eaf4ab16495030c3e9045d43" -PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003_midway" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index 5f0c3c28e..f5b47c608 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="mame2003-plus-lr" PKG_VERSION="0d7dfa721f6362e4ea152bf710046a47710ea691" -PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk b/packages/emulators/libretro/mame2003-xtreme-lr/package.mk index 44e22e251..0690de5d0 100644 --- a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk +++ b/packages/emulators/libretro/mame2003-xtreme-lr/package.mk @@ -4,7 +4,6 @@ PKG_NAME="mame2003-xtreme-lr" PKG_VERSION="47deb07f49224ec5b0bbc56392b639d728183629" PKG_SHA256="185b7e857e836b3987737ff9077d0709444491a0f138cfbbe1f50a6ad5d719b7" -PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/KMFDManic/mame2003-xtreme" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2010-lr/package.mk b/packages/emulators/libretro/mame2010-lr/package.mk index ba56903d4..2feb49438 100644 --- a/packages/emulators/libretro/mame2010-lr/package.mk +++ b/packages/emulators/libretro/mame2010-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="mame2010-lr" PKG_VERSION="5f524dd5fca63ec1dcf5cca63885286109937587" -PKG_ARCH="any" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2010-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2015-lr/package.mk b/packages/emulators/libretro/mame2015-lr/package.mk index 795c2cea3..d1da9472b 100644 --- a/packages/emulators/libretro/mame2015-lr/package.mk +++ b/packages/emulators/libretro/mame2015-lr/package.mk @@ -19,7 +19,6 @@ PKG_NAME="mame2015-lr" PKG_VERSION="316cd06349f2b34b4719f04f7c0d07569a74c764" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2015-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2016-lr/package.mk b/packages/emulators/libretro/mame2016-lr/package.mk index 06a7fc042..51a2dde8b 100644 --- a/packages/emulators/libretro/mame2016-lr/package.mk +++ b/packages/emulators/libretro/mame2016-lr/package.mk @@ -4,7 +4,6 @@ PKG_NAME="mame2016-lr" PKG_VERSION="d53c379892b0bd91b4a52fc2de491e1199f03e32" PKG_SHA256="bafcac133ff37fb3adeafd9960427e3314e682caf22d455395855d64553d46fe" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2016-libretro" PKG_URL="https://github.com/libretro/mame2016-libretro/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mesen-lr/package.mk b/packages/emulators/libretro/mesen-lr/package.mk index 8d4d18614..bc23113ee 100644 --- a/packages/emulators/libretro/mesen-lr/package.mk +++ b/packages/emulators/libretro/mesen-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="mesen-lr" PKG_VERSION="d6f2f1797694f87e698c737b068f621889e96fa9" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/Mesen" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mgba-lr/package.mk b/packages/emulators/libretro/mgba-lr/package.mk index 28ccf8e4f..f6ea11718 100644 --- a/packages/emulators/libretro/mgba-lr/package.mk +++ b/packages/emulators/libretro/mgba-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="mgba-lr" PKG_VERSION="b2564482c86378581a7a43ef4e254b2a75167bc7" -PKG_ARCH="any" PKG_LICENSE="MPLv2.0" PKG_SITE="https://github.com/libretro/mgba" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/minivmac-lr/package.mk b/packages/emulators/libretro/minivmac-lr/package.mk index 2791a5e7e..c124208ae 100644 --- a/packages/emulators/libretro/minivmac-lr/package.mk +++ b/packages/emulators/libretro/minivmac-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="minivmac-lr" PKG_VERSION="45edc82baae906b90b67cce66761557923a6ba75" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-minivmac" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/mu-lr/package.mk b/packages/emulators/libretro/mu-lr/package.mk index 714ea585a..b137ecfc9 100644 --- a/packages/emulators/libretro/mu-lr/package.mk +++ b/packages/emulators/libretro/mu-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="mu-lr" PKG_VERSION="865acf3a2889dfe02863bbfb9c5b3cfee8620c22" -PKG_ARCH="any" PKG_LICENSE="CC BY-NC 3.0 US" PKG_SITE="https://git.libretro.com/libretro/Mu" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/Mu-${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/neocd_lr/package.mk b/packages/emulators/libretro/neocd_lr/package.mk index 47d1307cf..4c0f4d817 100644 --- a/packages/emulators/libretro/neocd_lr/package.mk +++ b/packages/emulators/libretro/neocd_lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="neocd_lr" PKG_VERSION="71ebe5044639b825e5bd1bd590fef3e918133b80" -PKG_ARCH="any" PKG_LICENSE="LGPLv3.0" PKG_SITE="https://github.com/libretro/neocd_libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index ef86a1736..61a69286a 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="nestopia-lr" PKG_VERSION="efe3a052c75ad47d6e98eeffd1f3d2d4893279c2" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/nestopia" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/np2kai-lr/package.mk b/packages/emulators/libretro/np2kai-lr/package.mk index dae64261b..93395e908 100644 --- a/packages/emulators/libretro/np2kai-lr/package.mk +++ b/packages/emulators/libretro/np2kai-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="np2kai-lr" PKG_VERSION="c2ca4046860264cb307e768f529f180caee5e224" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/AZO234/NP2kai" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/o2em-lr/package.mk b/packages/emulators/libretro/o2em-lr/package.mk index f99968736..2ca23e78d 100644 --- a/packages/emulators/libretro/o2em-lr/package.mk +++ b/packages/emulators/libretro/o2em-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="o2em-lr" PKG_VERSION="44fe5f306033242f7d74144105e19a7d4939477e" -PKG_ARCH="any" PKG_LICENSE="Artistic License" PKG_SITE="https://github.com/libretro/libretro-o2em" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/opera-lr/package.mk b/packages/emulators/libretro/opera-lr/package.mk index f4a033bcf..a545b2b83 100644 --- a/packages/emulators/libretro/opera-lr/package.mk +++ b/packages/emulators/libretro/opera-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="opera-lr" PKG_VERSION="35e16483be900ea8aa20e87d2710b677437f73ce" -PKG_ARCH="any" PKG_LICENSE="LGPL with additional notes" PKG_SITE="https://github.com/libretro/opera-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/parallel-n64-lr/package.mk b/packages/emulators/libretro/parallel-n64-lr/package.mk index cfc809b98..5346e2e4b 100644 --- a/packages/emulators/libretro/parallel-n64-lr/package.mk +++ b/packages/emulators/libretro/parallel-n64-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="parallel-n64-lr" PKG_VERSION="1b57f9199b1f8a4510f7f89f14afa9cabf9b3bdd" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/parallel-n64" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/pokemini-lr/package.mk b/packages/emulators/libretro/pokemini-lr/package.mk index 605d6e4df..5fe90ed38 100644 --- a/packages/emulators/libretro/pokemini-lr/package.mk +++ b/packages/emulators/libretro/pokemini-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="pokemini-lr" PKG_VERSION="9bf450887026d9b92d4f9432b5d2a5ed749a35e2" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/pokemini" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/potator-lr/package.mk b/packages/emulators/libretro/potator-lr/package.mk index 86958923b..e25602cb6 100644 --- a/packages/emulators/libretro/potator-lr/package.mk +++ b/packages/emulators/libretro/potator-lr/package.mk @@ -1,6 +1,5 @@ PKG_NAME="potator-lr" PKG_VERSION="aed31f9254cada9826c65ff4528cc8bdda338275" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/potator" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/prosystem-lr/package.mk b/packages/emulators/libretro/prosystem-lr/package.mk index 1b49afeb0..99a7408b9 100644 --- a/packages/emulators/libretro/prosystem-lr/package.mk +++ b/packages/emulators/libretro/prosystem-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="prosystem-lr" PKG_VERSION="4202ac5bdb2ce1a21f84efc0e26d75bb5aa7e248" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/prosystem-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/puae-lr/package.mk b/packages/emulators/libretro/puae-lr/package.mk index 423a3f4eb..7ea2d57f2 100644 --- a/packages/emulators/libretro/puae-lr/package.mk +++ b/packages/emulators/libretro/puae-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="puae-lr" PKG_VERSION="5f683ae67b998fcadd69fa8f65f2440fa8ef135f" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/puae2021-lr/package.mk b/packages/emulators/libretro/puae2021-lr/package.mk index 9fd2e29ac..bdea01e64 100644 --- a/packages/emulators/libretro/puae2021-lr/package.mk +++ b/packages/emulators/libretro/puae2021-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="puae2021-lr" PKG_VERSION="218b539d28ca3370df340f1b98fe12eab7b8fc09" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/px68k-lr/package.mk b/packages/emulators/libretro/px68k-lr/package.mk index 772788f31..ecc43409b 100644 --- a/packages/emulators/libretro/px68k-lr/package.mk +++ b/packages/emulators/libretro/px68k-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="px68k-lr" PKG_VERSION="4c7542e34df71e3ebab77b5867901747d58dbb38" -PKG_ARCH="any" PKG_LICENSE="Unknown" PKG_SITE="https://github.com/libretro/px68k-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/quasi88-lr/package.mk b/packages/emulators/libretro/quasi88-lr/package.mk index 1755df89b..f15572feb 100644 --- a/packages/emulators/libretro/quasi88-lr/package.mk +++ b/packages/emulators/libretro/quasi88-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="quasi88-lr" PKG_VERSION="e3d06c4f34c3643d3ea9248a47cdc6cf60c1e0b1" -PKG_ARCH="any" PKG_LICENSE="BSD3" PKG_SITE="https://github.com/libretro/quasi88-libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/quicknes-lr/package.mk b/packages/emulators/libretro/quicknes-lr/package.mk index eb6a58849..46b605a5f 100644 --- a/packages/emulators/libretro/quicknes-lr/package.mk +++ b/packages/emulators/libretro/quicknes-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="quicknes-lr" PKG_VERSION="cd73f021be7dd5b1a21b71155a320364c02de4ac" -PKG_ARCH="any" PKG_LICENSE="LGPLv2.1+" PKG_SITE="https://github.com/libretro/QuickNES_Core" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/race-lr/package.mk b/packages/emulators/libretro/race-lr/package.mk index 0d74585d1..ea621e446 100644 --- a/packages/emulators/libretro/race-lr/package.mk +++ b/packages/emulators/libretro/race-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="race-lr" PKG_VERSION="f65011e6639ccbbbb44b6ffa63ca50c070475df4" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/RACE" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/retropie-shaders/package.mk b/packages/emulators/libretro/retropie-shaders/package.mk index 3605d9427..d51428a75 100644 --- a/packages/emulators/libretro/retropie-shaders/package.mk +++ b/packages/emulators/libretro/retropie-shaders/package.mk @@ -22,7 +22,6 @@ PKG_NAME="retropie-shaders" PKG_VERSION="015fe2aaad5f4a219c8fd85b9a4fd71bc4f1f731" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/RetroPie/common-shaders" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/sameboy-lr/package.mk b/packages/emulators/libretro/sameboy-lr/package.mk index e7f8747df..b235db539 100644 --- a/packages/emulators/libretro/sameboy-lr/package.mk +++ b/packages/emulators/libretro/sameboy-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="sameboy-lr" PKG_VERSION="2d29ece3b8e7ec44347c9daad0fabb84912ed44f" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://git.libretro.com/libretro/sameboy-upstream" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/sameboy-upstream-${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/sameduck-lr/package.mk b/packages/emulators/libretro/sameduck-lr/package.mk index b33cf2a78..5fa64ab35 100644 --- a/packages/emulators/libretro/sameduck-lr/package.mk +++ b/packages/emulators/libretro/sameduck-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="sameduck-lr" PKG_VERSION="5619abdb01cee6bedb47599cdb5532c318443b52" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/LIJI32/SameBoy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index fc570341d..693c59a5f 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="scummvm-lr" PKG_VERSION="8ed85326fa6215a267beb953271c4c4a30fa6d57" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/scummvm" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 97939befb..6ded7cc31 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -21,7 +21,6 @@ PKG_NAME="slang-shaders" PKG_VERSION="93c954798592323c8f7bd05a19c273be22e856cc" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/slang-shaders" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/smsplus-gx-lr/package.mk b/packages/emulators/libretro/smsplus-gx-lr/package.mk index b17d17349..bcef5dfcd 100644 --- a/packages/emulators/libretro/smsplus-gx-lr/package.mk +++ b/packages/emulators/libretro/smsplus-gx-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="smsplus-gx-lr" PKG_VERSION="96fa9bc65aa27a5ab2779f9f2ff0439fec7cf513" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/smsplus-gx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/snes9x-lr/package.mk b/packages/emulators/libretro/snes9x-lr/package.mk index b6ba8451d..286c6517f 100644 --- a/packages/emulators/libretro/snes9x-lr/package.mk +++ b/packages/emulators/libretro/snes9x-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="snes9x-lr" PKG_VERSION="ec4ebfc8f3819a9522fcb8e53eed985090017b1b" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/snes9x2002-lr/package.mk b/packages/emulators/libretro/snes9x2002-lr/package.mk index 2c916b62b..fca2ee360 100644 --- a/packages/emulators/libretro/snes9x2002-lr/package.mk +++ b/packages/emulators/libretro/snes9x2002-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="snes9x2002-lr" PKG_VERSION="540baad622d9833bba7e0696193cb06f5f02f564" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2002" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk index b01468462..1bd5a817a 100644 --- a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk +++ b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="snes9x2005_plus-lr" PKG_VERSION="fd45b0e055bce6cff3acde77414558784e93e7d0" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2005" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/snes9x2010-lr/package.mk b/packages/emulators/libretro/snes9x2010-lr/package.mk index bf36f8557..5bea6f677 100644 --- a/packages/emulators/libretro/snes9x2010-lr/package.mk +++ b/packages/emulators/libretro/snes9x2010-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="snes9x2010-lr" PKG_VERSION="d8b10c4cd7606ed58f9c562864c986bc960faaaf" -PKG_ARCH="any" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2010" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/swanstation-lr/package.mk b/packages/emulators/libretro/swanstation-lr/package.mk index 1b4ec9b93..f66b1d339 100644 --- a/packages/emulators/libretro/swanstation-lr/package.mk +++ b/packages/emulators/libretro/swanstation-lr/package.mk @@ -4,7 +4,6 @@ PKG_NAME="swanstation-lr" PKG_VERSION="77aeeea58a45cccae7a8be37645f8f5a27ff101b" -PKG_ARCH="" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/swanstation" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/tgbdual-lr/package.mk b/packages/emulators/libretro/tgbdual-lr/package.mk index 22c182098..54792b185 100644 --- a/packages/emulators/libretro/tgbdual-lr/package.mk +++ b/packages/emulators/libretro/tgbdual-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="tgbdual-lr" PKG_VERSION="a6f3018e6a23030afc1873845ee54d4b2d8ec9d3" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tgbdual-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index 52439fa87..1355d1281 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="tyrquake-lr" PKG_VERSION="77217664a09afe893a06be8e3e8f9611184636f8" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tyrquake" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/uzem-lr/package.mk b/packages/emulators/libretro/uzem-lr/package.mk index 285917e03..801bd324d 100644 --- a/packages/emulators/libretro/uzem-lr/package.mk +++ b/packages/emulators/libretro/uzem-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="uzem-lr" PKG_VERSION="08e39e19167727c89fb995e3fa70dde252e6aab0" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/libretro/libretro-uzem" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/vba-next-lr/package.mk b/packages/emulators/libretro/vba-next-lr/package.mk index dea9cf121..f46dca171 100644 --- a/packages/emulators/libretro/vba-next-lr/package.mk +++ b/packages/emulators/libretro/vba-next-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="vba-next-lr" PKG_VERSION="ee92625d2f1666496be4f5662508a2430e846b00" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/vba-next" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/vbam-lr/package.mk b/packages/emulators/libretro/vbam-lr/package.mk index be8401757..f67325717 100644 --- a/packages/emulators/libretro/vbam-lr/package.mk +++ b/packages/emulators/libretro/vbam-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="vbam-lr" PKG_VERSION="a2378f05f600a5a9cf450c60a87976b80d6a895a" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vbam-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/vecx-lr/package.mk b/packages/emulators/libretro/vecx-lr/package.mk index 7f631d5e2..90eabfe97 100644 --- a/packages/emulators/libretro/vecx-lr/package.mk +++ b/packages/emulators/libretro/vecx-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="vecx-lr" PKG_VERSION="3a5655ff67e161ef33f66b0f6c26aaf2e59ceda8" -PKG_ARCH="any" PKG_LICENSE="GPLv2|LGPLv2.1" PKG_SITE="https://github.com/libretro/libretro-vecx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/vice-lr/package.mk b/packages/emulators/libretro/vice-lr/package.mk index 4f5a1b093..5ad9deee6 100644 --- a/packages/emulators/libretro/vice-lr/package.mk +++ b/packages/emulators/libretro/vice-lr/package.mk @@ -22,7 +22,6 @@ PKG_NAME="vice-lr" PKG_VERSION="91d0d4d884acd44b5240dfcdbd8bdc2f0f757dfd" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vice-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/virtualjaguar-lr/package.mk b/packages/emulators/libretro/virtualjaguar-lr/package.mk index 820aa7e69..238310cdb 100644 --- a/packages/emulators/libretro/virtualjaguar-lr/package.mk +++ b/packages/emulators/libretro/virtualjaguar-lr/package.mk @@ -20,7 +20,6 @@ PKG_NAME="virtualjaguar-lr" PKG_VERSION="8126e5c504ac7217a638f38e4cd9190822c8abdd" -PKG_ARCH="any" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/virtualjaguar-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/xmil-lr/package.mk b/packages/emulators/libretro/xmil-lr/package.mk index 152bc4c83..49b33e381 100644 --- a/packages/emulators/libretro/xmil-lr/package.mk +++ b/packages/emulators/libretro/xmil-lr/package.mk @@ -3,7 +3,6 @@ PKG_NAME="xmil-lr" PKG_VERSION="b07506c0cae31d260db28cb079148857d6ca2e93" -PKG_ARCH="any" PKG_LICENSE="Unknown" PKG_SITE="https://github.com/r-type/xmil-libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/yabasanshiro-lr/package.mk b/packages/emulators/libretro/yabasanshiro-lr/package.mk index cef219bf1..a5971e59b 100644 --- a/packages/emulators/libretro/yabasanshiro-lr/package.mk +++ b/packages/emulators/libretro/yabasanshiro-lr/package.mk @@ -21,7 +21,6 @@ PKG_NAME="yabasanshiro-lr" PKG_VERSION="4e65871ec0a2582fa2dbe055fccb6573dbd68d4f" PKG_GIT_CLONE_BRANCH="yabasanshiro" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/yabause" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/hypseus-singe/package.mk b/packages/emulators/standalone/hypseus-singe/package.mk index 809859234..63bc37dd0 100644 --- a/packages/emulators/standalone/hypseus-singe/package.mk +++ b/packages/emulators/standalone/hypseus-singe/package.mk @@ -4,7 +4,6 @@ PKG_NAME="hypseus-singe" PKG_VERSION="e2ad79d9d3a6102efe9e5fad2cc45294c9a0303c" -PKG_ARCH="any" PKG_LICENSE="GPL3" PKG_SITE="https://github.com/DirtBagXon/hypseus-singe" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/hypseus/package.mk b/packages/emulators/standalone/hypseus/package.mk index 7b4137315..16812d45e 100644 --- a/packages/emulators/standalone/hypseus/package.mk +++ b/packages/emulators/standalone/hypseus/package.mk @@ -3,7 +3,6 @@ PKG_NAME="hypseus" PKG_VERSION="3f7c4cbad8e36c3babf230321de9e67dee100767" -PKG_ARCH="any" PKG_LICENSE="GPL3" PKG_SITE="https://github.com/btolab/hypseus" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/minivmacsa/package.mk b/packages/emulators/standalone/minivmacsa/package.mk index fc2903fe0..291a52245 100644 --- a/packages/emulators/standalone/minivmacsa/package.mk +++ b/packages/emulators/standalone/minivmacsa/package.mk @@ -3,7 +3,6 @@ PKG_NAME="minivmacsa" PKG_VERSION="37.03" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://www.gryphel.com/c/minivmac/" PKG_URL="https://www.gryphel.com/d/minivmac/minivmac-${PKG_VERSION}/minivmac-${PKG_VERSION}.src.tgz" diff --git a/packages/emulators/standalone/openbor/package.mk b/packages/emulators/standalone/openbor/package.mk index 34527afff..a0255de85 100644 --- a/packages/emulators/standalone/openbor/package.mk +++ b/packages/emulators/standalone/openbor/package.mk @@ -5,7 +5,6 @@ PKG_NAME="openbor" PKG_VERSION="b8303cce992a0db93c3a465df3c943942fe322f8" -PKG_ARCH="any" PKG_SITE="https://github.com/DCurrent/openbor" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 libogg libvorbisidec libvpx libpng" diff --git a/packages/emulators/standalone/pico-8/package.mk b/packages/emulators/standalone/pico-8/package.mk index 792434444..bd0856056 100644 --- a/packages/emulators/standalone/pico-8/package.mk +++ b/packages/emulators/standalone/pico-8/package.mk @@ -3,7 +3,6 @@ PKG_NAME="pico-8" PKG_VERSION="95cb4d4f28e1743c6a7f3c0266049f68b2134b60" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index 39df6006a..a94213da7 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -3,7 +3,6 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="ppsspp-sa" -PKG_ARCH="any" PKG_SITE="https://github.com/hrydgard/ppsspp" PKG_URL="${PKG_SITE}.git" PKG_VERSION="d479b74ed9c3e321bc3735da29bc125a2ac3b9b2" # 1.17.1 diff --git a/packages/emulators/standalone/supermodel-sa/package.mk b/packages/emulators/standalone/supermodel-sa/package.mk index b8d9d4ed4..56e595ed7 100644 --- a/packages/emulators/standalone/supermodel-sa/package.mk +++ b/packages/emulators/standalone/supermodel-sa/package.mk @@ -4,7 +4,6 @@ PKG_NAME="supermodel-sa" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/DirtBagXon/model3emu-code-sinden" -PKG_ARCH="any" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="${OPENGL} ${OPENGLES} glu toolchain SDL2 SDL2_net zlib" PKG_LONGDESC="Supermodel is a Sega Model 3 arcade emulator" diff --git a/packages/emulators/standalone/vice-sa/package.mk b/packages/emulators/standalone/vice-sa/package.mk index e9902d228..bdd8da024 100644 --- a/packages/emulators/standalone/vice-sa/package.mk +++ b/packages/emulators/standalone/vice-sa/package.mk @@ -3,7 +3,6 @@ PKG_NAME="vice-sa" PKG_VERSION="3.8" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://sourceforge.net/projects/vice-emu" PKG_URL="${PKG_SITE}/files/releases/vice-${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/SDL/SDL_net/package.mk b/packages/graphics/SDL/SDL_net/package.mk index 319f7621b..978d5ef6e 100644 --- a/packages/graphics/SDL/SDL_net/package.mk +++ b/packages/graphics/SDL/SDL_net/package.mk @@ -18,7 +18,6 @@ PKG_NAME="SDL_net" PKG_VERSION="1.2.8" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/${PKG_NAME}/archive/refs/tags/release-${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/SDL/package.mk b/packages/graphics/SDL/package.mk index b5117b170..b245b9560 100644 --- a/packages/graphics/SDL/package.mk +++ b/packages/graphics/SDL/package.mk @@ -18,7 +18,6 @@ PKG_NAME="SDL" PKG_VERSION="52c7140" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/SDL-1.2/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/SDL/yasm/package.mk b/packages/graphics/SDL/yasm/package.mk index b293f7a47..603f13984 100644 --- a/packages/graphics/SDL/yasm/package.mk +++ b/packages/graphics/SDL/yasm/package.mk @@ -19,7 +19,6 @@ PKG_NAME="yasm" PKG_VERSION="1.3.0" PKG_SHA256="3dce6601b495f5b3d45b59f7d2492a340ee7e84b5beca17e48f862502bd5603f" -PKG_ARCH="any" PKG_LICENSE="BSD" PKG_SITE="http://www.tortall.net/projects/yasm/" PKG_URL="http://www.tortall.net/projects/yasm/releases/${PKG_NAME}-${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/glfw/package.mk b/packages/graphics/glfw/package.mk index d3a4a3913..07bc69807 100644 --- a/packages/graphics/glfw/package.mk +++ b/packages/graphics/glfw/package.mk @@ -3,7 +3,6 @@ PKG_NAME="glfw" PKG_VERSION="e2c9264" -PKG_ARCH="any" PKG_LICENSE="zlib" PKG_DEPENDS_TARGET="toolchain expat libdrm libxkbcommon libXrandr libXinerama libXcursor libXi Mako:host " PKG_SITE="https://github.com/glfw/glfw" diff --git a/packages/graphics/mesa-demos/package.mk b/packages/graphics/mesa-demos/package.mk index 1935c4e17..cfc654ab8 100644 --- a/packages/graphics/mesa-demos/package.mk +++ b/packages/graphics/mesa-demos/package.mk @@ -3,7 +3,6 @@ PKG_NAME="mesa-demos" PKG_VERSION="8.5.0" -PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.mesa3d.org/" PKG_URL="ftp://ftp.freedesktop.org/pub/mesa/demos/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.bz2" diff --git a/packages/hardware/quirks/package.mk b/packages/hardware/quirks/package.mk index 22547c350..787a038b8 100644 --- a/packages/hardware/quirks/package.mk +++ b/packages/hardware/quirks/package.mk @@ -3,7 +3,6 @@ PKG_NAME="quirks" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" diff --git a/packages/lang/luajit/package.mk b/packages/lang/luajit/package.mk index 73ddf6878..3d9149eb5 100644 --- a/packages/lang/luajit/package.mk +++ b/packages/lang/luajit/package.mk @@ -3,7 +3,6 @@ PKG_NAME="luajit" PKG_VERSION="29b0b282f59ac533313199f4f7be79490b7eee51" -PKG_ARCH="any" PKG_LICENSE="MIT" PKG_SITE="https://github.com/LuaJIT/LuaJIT" PKG_URL="${PKG_SITE}.git" diff --git a/packages/misc/modules/package.mk b/packages/misc/modules/package.mk index 301d0fafb..2cec8ddeb 100644 --- a/packages/misc/modules/package.mk +++ b/packages/misc/modules/package.mk @@ -3,7 +3,6 @@ PKG_NAME="modules" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="custom" PKG_SITE="" PKG_URL="" diff --git a/packages/multimedia/libdvbpsi/package.mk b/packages/multimedia/libdvbpsi/package.mk index ff751b763..e06df4add 100644 --- a/packages/multimedia/libdvbpsi/package.mk +++ b/packages/multimedia/libdvbpsi/package.mk @@ -3,7 +3,6 @@ PKG_NAME="libdvbpsi" PKG_VERSION="1.3.3" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.videolan.org/developers/libdvbpsi.html" PKG_URL="http://download.videolan.org/pub/libdvbpsi/${PKG_VERSION}/libdvbpsi-${PKG_VERSION}.tar.bz2" diff --git a/packages/multimedia/opusfile/package.mk b/packages/multimedia/opusfile/package.mk index 589546612..8dd7c44a8 100644 --- a/packages/multimedia/opusfile/package.mk +++ b/packages/multimedia/opusfile/package.mk @@ -20,7 +20,6 @@ PKG_NAME="opusfile" PKG_VERSION="a55c164" -PKG_ARCH="any" PKG_SITE="https://github.com/xiph/opusfile" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain opus openssl" diff --git a/packages/multimedia/vlc/package.mk b/packages/multimedia/vlc/package.mk index 0e8a9b5a8..d1da0489f 100644 --- a/packages/multimedia/vlc/package.mk +++ b/packages/multimedia/vlc/package.mk @@ -4,7 +4,6 @@ PKG_NAME="vlc" PKG_VERSION="3.0.20" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.videolan.org" PKG_URL="https://mirror.netcologne.de/videolan.org/${PKG_NAME}/${PKG_VERSION}/$PKG_NAME-${PKG_VERSION}.tar.xz" diff --git a/packages/network/fping/package.mk b/packages/network/fping/package.mk index 3c7f0ab3a..8a6d1e9fc 100644 --- a/packages/network/fping/package.mk +++ b/packages/network/fping/package.mk @@ -3,7 +3,6 @@ PKG_NAME="fping" PKG_VERSION="5.1" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://fping.org/" PKG_URL="http://fping.org/dist/fping-${PKG_VERSION}.tar.gz" diff --git a/packages/network/sixaxis/package.mk b/packages/network/sixaxis/package.mk index 324165668..804ed0118 100644 --- a/packages/network/sixaxis/package.mk +++ b/packages/network/sixaxis/package.mk @@ -4,7 +4,6 @@ PKG_NAME="sixaxis" PKG_VERSION="f53b0ca28c35ebd71b54190f33eadcb8c3267186" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/RetroPie/sixaxis" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/network/syncthing/package.mk b/packages/network/syncthing/package.mk index af02deafb..c6a4d4a88 100644 --- a/packages/network/syncthing/package.mk +++ b/packages/network/syncthing/package.mk @@ -4,7 +4,6 @@ PKG_NAME="syncthing" PKG_VERSION="1.27.1" -PKG_ARCH="any" PKG_LICENSE="MPLv2" PKG_SITE="https://syncthing.net/" PKG_URL="https://github.com/syncthing/syncthing/releases/download/v${PKG_VERSION}/syncthing-source-v${PKG_VERSION}.tar.gz" diff --git a/packages/python/devel/pgi/package.mk b/packages/python/devel/pgi/package.mk index 062c3e891..0e66c66c9 100644 --- a/packages/python/devel/pgi/package.mk +++ b/packages/python/devel/pgi/package.mk @@ -4,7 +4,6 @@ PKG_NAME="pgi" PKG_VERSION="0.0.11.2" PKG_SHA256="7a1ca8ac4e8bee6b663e6d556ecda8032584de753acd76ab3fc21c4f874fa738" -PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="https://github.com/pygobject/pgi" PKG_URL="https://github.com/pygobject/pgi/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/python/devel/pygobject/package.mk b/packages/python/devel/pygobject/package.mk index 6b77e2919..22f0a8178 100644 --- a/packages/python/devel/pygobject/package.mk +++ b/packages/python/devel/pygobject/package.mk @@ -5,7 +5,6 @@ PKG_NAME="pygobject" PKG_VERSION="3.46.0" -PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.pygtk.org/" PKG_URL="http://ftp.gnome.org/pub/GNOME/sources/pygobject/$(get_pkg_version_maj_min)/${PKG_NAME}-${PKG_VERSION}.tar.xz" diff --git a/packages/rocknix/package.mk b/packages/rocknix/package.mk index c33da70b2..13efccabe 100644 --- a/packages/rocknix/package.mk +++ b/packages/rocknix/package.mk @@ -3,7 +3,6 @@ PKG_NAME="rocknix" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" diff --git a/packages/sysutils/autostart/package.mk b/packages/sysutils/autostart/package.mk index a02db97c0..02948025f 100755 --- a/packages/sysutils/autostart/package.mk +++ b/packages/sysutils/autostart/package.mk @@ -3,7 +3,6 @@ PKG_NAME="autostart" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" diff --git a/packages/sysutils/pciutils/package.mk b/packages/sysutils/pciutils/package.mk index 0bdce7be8..c21cf2d46 100644 --- a/packages/sysutils/pciutils/package.mk +++ b/packages/sysutils/pciutils/package.mk @@ -4,7 +4,6 @@ PKG_NAME="pciutils" PKG_VERSION="3.9.0" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://mj.ucw.cz/pciutils.shtml" PKG_URL="http://www.kernel.org/pub/software/utils/pciutils/${PKG_NAME}-${PKG_VERSION}.tar.xz" diff --git a/packages/sysutils/powerstate/package.mk b/packages/sysutils/powerstate/package.mk index 59f561339..11d5c33db 100644 --- a/packages/sysutils/powerstate/package.mk +++ b/packages/sysutils/powerstate/package.mk @@ -3,7 +3,6 @@ PKG_NAME="powerstate" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="OSS" PKG_DEPENDS_TARGET="systemd" PKG_SITE="" diff --git a/packages/sysutils/sleep/package.mk b/packages/sysutils/sleep/package.mk index 6170f4da4..829513ff2 100644 --- a/packages/sysutils/sleep/package.mk +++ b/packages/sysutils/sleep/package.mk @@ -3,7 +3,6 @@ PKG_NAME="sleep" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="OSS" PKG_DEPENDS_TARGET="systemd" PKG_SITE="" diff --git a/packages/sysutils/system-utils/package.mk b/packages/sysutils/system-utils/package.mk index 229db3dbe..70f5fa6b9 100644 --- a/packages/sysutils/system-utils/package.mk +++ b/packages/sysutils/system-utils/package.mk @@ -2,7 +2,6 @@ PKG_NAME="system-utils" PKG_VERSION="" -PKG_ARCH="any" PKG_LICENSE="mix" PKG_DEPENDS_TARGET="toolchain sleep" PKG_SITE="" diff --git a/packages/tools/empty/package.mk b/packages/tools/empty/package.mk index 45201fd5f..07271f4b5 100644 --- a/packages/tools/empty/package.mk +++ b/packages/tools/empty/package.mk @@ -4,7 +4,6 @@ PKG_NAME="empty" PKG_VERSION="0.6.23c" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://empty.sourceforge.net/" PKG_DEPENDS_TARGET="toolchain linux" diff --git a/packages/tools/git/package.mk b/packages/tools/git/package.mk index 030c53846..a3cfdd956 100644 --- a/packages/tools/git/package.mk +++ b/packages/tools/git/package.mk @@ -4,7 +4,6 @@ PKG_NAME="git" PKG_VERSION="2.42.1" -PKG_ARCH="any" PKG_LICENSE="GPLv2" PKG_SITE="https://git-scm.com/" PKG_URL="https://mirrors.edge.kernel.org/pub/software/scm/git/git-${PKG_VERSION}.tar.gz" diff --git a/packages/tools/joyutils/package.mk b/packages/tools/joyutils/package.mk index ce52da0df..a202a1b96 100644 --- a/packages/tools/joyutils/package.mk +++ b/packages/tools/joyutils/package.mk @@ -4,7 +4,6 @@ PKG_NAME="joyutils" PKG_VERSION="b6703ebf04c839fc47f9e490b68c4d5d885f32f9" PKG_SHA256="73914d760d44542fa5b88ab42f914713e07e184c299415fdbe8abd83e68dc200" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/datrh/joyutils" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/tools/sound/timidity/package.mk b/packages/tools/sound/timidity/package.mk index 524be8ffb..7300a87e2 100644 --- a/packages/tools/sound/timidity/package.mk +++ b/packages/tools/sound/timidity/package.mk @@ -3,7 +3,6 @@ PKG_NAME="timidity" PKG_VERSION="2.15.0" -PKG_ARCH="any" PKG_LICENSE="GPL2" PKG_SITE="https://sourceforge.net/projects/timidity/" PKG_URL="${SOURCEFORGE_SRC}/timidity/TiMidity++-${PKG_VERSION}.tar.xz" diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index 65bead254..bd42f5255 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -5,7 +5,6 @@ PKG_NAME="emulationstation" PKG_VERSION="be669d916e9a3f393cf63c57929daf796ddec80d" PKG_GIT_CLONE_BRANCH="main" -PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" PKG_URL="${PKG_SITE}.git" diff --git a/packages/ui/themes/es-theme-art-book-next/package.mk b/packages/ui/themes/es-theme-art-book-next/package.mk index ae264f005..c8cbf2cef 100644 --- a/packages/ui/themes/es-theme-art-book-next/package.mk +++ b/packages/ui/themes/es-theme-art-book-next/package.mk @@ -5,7 +5,6 @@ PKG_NAME="es-theme-art-book-next" PKG_VERSION="9709a73be65faab5cb18d38de5fc0298aec7fcd6" -PKG_ARCH="any" PKG_LICENSE="CUSTOM" PKG_SITE="https://github.com/anthonycaccese/art-book-next-jelos" PKG_URL="${PKG_SITE}.git" From a021329f4b28e18e15ab2dcea788aa23e1389e8f Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 12 Apr 2024 18:54:36 +0200 Subject: [PATCH 012/184] fix accidental makefile change --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0fe59ba12..1f0467404 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ package-clean: # For example: make docker-AMD64 will use docker to call: make AMD64 # All variables are scoped to docker-* commands to prevent weird collisions/behavior with non-docker commands -docker-%: DOCKER_IMAGE := "rocknix-build" +docker-%: DOCKER_IMAGE := "rocknix/rocknix-build:latest" # DOCKER_WORK_DIR is the directory in the Docker image - it is set to /work by default # Anytime this directory changes, you must run `make clean` similarly to moving the distribution directory From 5b6bfeb746a7091bf1138d797bf3e50b706c5514 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 17:40:49 +0000 Subject: [PATCH 013/184] Clean up unused package variables --- config/docker/package.mk | 1 - packages/apps/control-gen/package.mk | 2 +- packages/apps/fileman/package.mk | 2 +- packages/apps/gamecontrollerdb/package.mk | 2 +- packages/apps/jstest-sdl/package.mk | 2 +- packages/apps/moonlight/package.mk | 2 +- packages/compat/lib32/package.mk | 2 +- packages/compress/cabextract/package.mk | 2 +- packages/compress/libarchive/package.mk | 2 +- packages/devel/ecm/package.mk | 2 +- packages/devel/gobject-introspection/package.mk | 4 ++-- packages/devel/xa/package.mk | 2 +- packages/emulators/libretro/2048-lr/package.mk | 2 +- packages/emulators/libretro/81-lr/package.mk | 2 +- packages/emulators/libretro/a5200-lr/package.mk | 2 +- packages/emulators/libretro/arduous-lr/package.mk | 2 +- packages/emulators/libretro/atari800-lr/package.mk | 2 +- packages/emulators/libretro/beetle-gba-lr/package.mk | 2 +- packages/emulators/libretro/beetle-lynx-lr/package.mk | 2 +- packages/emulators/libretro/beetle-ngp-lr/package.mk | 2 +- packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 2 +- packages/emulators/libretro/beetle-pce-lr/package.mk | 2 +- packages/emulators/libretro/beetle-pcfx-lr/package.mk | 2 +- packages/emulators/libretro/beetle-psx-lr/package.mk | 2 +- packages/emulators/libretro/beetle-saturn-lr/package.mk | 2 +- packages/emulators/libretro/beetle-supafaust-lr/package.mk | 2 +- packages/emulators/libretro/beetle-supergrafx-lr/package.mk | 2 +- packages/emulators/libretro/beetle-vb-lr/package.mk | 2 +- packages/emulators/libretro/beetle-wswan-lr/package.mk | 2 +- packages/emulators/libretro/bluemsx-lr/package.mk | 2 +- packages/emulators/libretro/bsnes-hd-lr/package.mk | 2 +- packages/emulators/libretro/bsnes-lr/package.mk | 2 +- .../libretro/bsnes-mercury-performance-lr/package.mk | 2 +- packages/emulators/libretro/cap32-lr/package.mk | 2 +- packages/emulators/libretro/common-shaders/package.mk | 2 +- packages/emulators/libretro/crocods-lr/package.mk | 2 +- packages/emulators/libretro/daphne-lr/package.mk | 2 +- packages/emulators/libretro/desmume-lr/package.mk | 2 +- packages/emulators/libretro/dolphin-lr/package.mk | 2 +- packages/emulators/libretro/dosbox-lr/package.mk | 4 ++-- packages/emulators/libretro/dosbox-pure-lr/package.mk | 2 +- packages/emulators/libretro/dosbox-svn-lr/package.mk | 2 +- packages/emulators/libretro/duckstation-lr/package.mk | 2 +- packages/emulators/libretro/easyrpg-lr/liblcf/package.mk | 2 +- packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk | 2 +- packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk | 2 +- packages/emulators/libretro/easyrpg-lr/package.mk | 2 +- packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk | 2 +- packages/emulators/libretro/ecwolf-lr/package.mk | 2 +- packages/emulators/libretro/fbalpha2012-lr/package.mk | 2 +- packages/emulators/libretro/fbalpha2019-lr/package.mk | 4 ++-- packages/emulators/libretro/fbneo-lr/package.mk | 4 ++-- packages/emulators/libretro/fceumm-lr/package.mk | 4 ++-- packages/emulators/libretro/fmsx-lr/package.mk | 2 +- packages/emulators/libretro/freechaf-lr/package.mk | 2 +- packages/emulators/libretro/freeintv-lr/package.mk | 2 +- packages/emulators/libretro/freej2me-lr/package.mk | 2 +- packages/emulators/libretro/fuse-lr/package.mk | 2 +- packages/emulators/libretro/gambatte-lr/package.mk | 4 ++-- packages/emulators/libretro/gearboy-lr/package.mk | 2 +- packages/emulators/libretro/gearcoleco-lr/package.mk | 2 +- packages/emulators/libretro/gearsystem-lr/package.mk | 2 +- packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 4 ++-- .../emulators/libretro/genesis-plus-gx-wide-lr/package.mk | 4 ++-- packages/emulators/libretro/glsl-shaders/package.mk | 2 +- packages/emulators/libretro/gw-lr/package.mk | 2 +- packages/emulators/libretro/handy-lr/package.mk | 4 ++-- packages/emulators/libretro/hatari-lr/package.mk | 2 +- packages/emulators/libretro/libretro-database/package.mk | 2 +- packages/emulators/libretro/lrps2-lr/package.mk | 2 +- packages/emulators/libretro/mame-lr/package.mk | 2 +- packages/emulators/libretro/mame2003-lr/package.mk | 2 +- packages/emulators/libretro/mame2003-midway-lr/package.mk | 2 +- packages/emulators/libretro/mame2003-plus-lr/package.mk | 2 +- packages/emulators/libretro/mame2010-lr/package.mk | 2 +- packages/emulators/libretro/mame2015-lr/package.mk | 2 +- packages/emulators/libretro/mame2016-lr/package.mk | 2 +- packages/emulators/libretro/melonds-lr/package.mk | 2 +- packages/emulators/libretro/mesen-lr/package.mk | 2 +- packages/emulators/libretro/mgba-lr/package.mk | 4 ++-- packages/emulators/libretro/minivmac-lr/package.mk | 2 +- packages/emulators/libretro/mu-lr/package.mk | 4 ++-- packages/emulators/libretro/mupen64plus-lr/package.mk | 2 +- packages/emulators/libretro/mupen64plus-nx-lr/package.mk | 2 +- packages/emulators/libretro/neocd_lr/package.mk | 4 ++-- packages/emulators/libretro/nestopia-lr/package.mk | 4 ++-- packages/emulators/libretro/np2kai-lr/package.mk | 2 +- packages/emulators/libretro/o2em-lr/package.mk | 2 +- packages/emulators/libretro/opera-lr/package.mk | 2 +- packages/emulators/libretro/parallel-n64-lr/package.mk | 2 +- packages/emulators/libretro/pcsx_rearmed-lr/package.mk | 2 +- packages/emulators/libretro/picodrive-lr/package.mk | 4 ++-- packages/emulators/libretro/pokemini-lr/package.mk | 2 +- packages/emulators/libretro/potator-lr/package.mk | 2 +- packages/emulators/libretro/prboom-lr/package.mk | 2 +- packages/emulators/libretro/prosystem-lr/package.mk | 2 +- packages/emulators/libretro/puae-lr/package.mk | 2 +- packages/emulators/libretro/puae2021-lr/package.mk | 2 +- packages/emulators/libretro/px68k-lr/package.mk | 2 +- packages/emulators/libretro/quasi88-lr/package.mk | 2 +- packages/emulators/libretro/quicknes-lr/package.mk | 2 +- packages/emulators/libretro/race-lr/package.mk | 2 +- packages/emulators/libretro/retropie-shaders/package.mk | 2 +- packages/emulators/libretro/sameboy-lr/package.mk | 2 +- packages/emulators/libretro/sameduck-lr/package.mk | 2 +- packages/emulators/libretro/scummvm-lr/package.mk | 4 ++-- packages/emulators/libretro/slang-shaders/package.mk | 2 +- packages/emulators/libretro/smsplus-gx-lr/package.mk | 4 ++-- packages/emulators/libretro/snes9x-lr/package.mk | 2 +- packages/emulators/libretro/snes9x2002-lr/package.mk | 4 ++-- packages/emulators/libretro/snes9x2005_plus-lr/package.mk | 4 ++-- packages/emulators/libretro/snes9x2010-lr/package.mk | 4 ++-- packages/emulators/libretro/stella-lr/package.mk | 4 ++-- packages/emulators/libretro/swanstation-lr/package.mk | 2 +- packages/emulators/libretro/tgbdual-lr/package.mk | 4 ++-- packages/emulators/libretro/tyrquake-lr/package.mk | 2 +- packages/emulators/libretro/uae4arm/package.mk | 4 ++-- packages/emulators/libretro/uzem-lr/package.mk | 2 +- packages/emulators/libretro/vba-next-lr/package.mk | 4 ++-- packages/emulators/libretro/vbam-lr/package.mk | 4 ++-- packages/emulators/libretro/vecx-lr/package.mk | 2 +- packages/emulators/libretro/vice-lr/package.mk | 2 +- packages/emulators/libretro/virtualjaguar-lr/package.mk | 2 +- packages/emulators/libretro/vitaquake2-lr/package.mk | 2 +- packages/emulators/libretro/xmil-lr/package.mk | 2 +- packages/emulators/libretro/yabasanshiro-lr/package.mk | 2 +- packages/emulators/standalone/duckstation-sa/package.mk | 2 +- packages/emulators/standalone/gzdoom-sa/zmusic/package.mk | 2 +- packages/emulators/standalone/minivmacsa/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk | 2 +- .../standalone/mupen64plus-sa/mupen64plus-sa-core/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-input-sdl/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-rsp-cxd4/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-rsp-hle/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-simplecore/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-ui-console/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-video-glide64mk2/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-video-gliden64/package.mk | 2 +- .../mupen64plus-sa/mupen64plus-sa-video-rice/package.mk | 2 +- packages/emulators/standalone/openbor/package.mk | 2 +- packages/emulators/standalone/pico-8/package.mk | 2 +- packages/emulators/standalone/ppsspp-sa/package.mk | 4 ++-- packages/emulators/standalone/scummvmsa/package.mk | 4 ++-- packages/emulators/standalone/vice-sa/package.mk | 2 +- packages/graphics/SDL/SDL_net/package.mk | 2 +- packages/graphics/SDL/package.mk | 4 ++-- packages/graphics/SDL/yasm/package.mk | 4 ++-- packages/graphics/glew/package.mk | 2 +- packages/graphics/glfw/package.mk | 2 +- packages/hardware/quirks/package.mk | 2 +- packages/lang/luajit/package.mk | 2 +- packages/misc/modules/package.mk | 2 +- packages/multimedia/libdvbpsi/package.mk | 4 ++-- packages/multimedia/opusfile/package.mk | 2 +- packages/multimedia/vlc/package.mk | 4 ++-- packages/network/rclone/package.mk | 2 +- packages/network/syncthing/package.mk | 4 ++-- packages/network/tailscale/package.mk | 2 +- packages/network/zerotier-one/package.mk | 2 +- packages/python/devel/pgi/package.mk | 2 -- packages/rocknix/package.mk | 2 +- packages/sysutils/autostart/package.mk | 2 +- packages/sysutils/nvtop/package.mk | 2 +- packages/textproc/textviewer/package.mk | 2 +- packages/tools/empty/package.mk | 2 +- packages/tools/git/package.mk | 2 +- packages/tools/joyutils/package.mk | 2 +- packages/ui/emulationstation/package.mk | 2 +- packages/ui/themes/es-theme-art-book-next/package.mk | 2 +- projects/Amlogic/packages/amlogic-boot-fip/package.mk | 2 +- 170 files changed, 199 insertions(+), 202 deletions(-) diff --git a/config/docker/package.mk b/config/docker/package.mk index 15b16c4cc..1a015311d 100644 --- a/config/docker/package.mk +++ b/config/docker/package.mk @@ -8,7 +8,6 @@ PKG_ARCH="@ARCH@" PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="docker" PKG_SITE="" -PKG_SHORTDESC="" PKG_LONGDESC="" PKG_IS_ADDON="yes" diff --git a/packages/apps/control-gen/package.mk b/packages/apps/control-gen/package.mk index 9c8957601..808b1be67 100644 --- a/packages/apps/control-gen/package.mk +++ b/packages/apps/control-gen/package.mk @@ -5,7 +5,7 @@ PKG_NAME="control-gen" PKG_VERSION="ea44ab254d09d2d86eeb70289673418df2beee75" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Generates control.txt for gptokeyb" +PKG_LONGDESC="Generates control.txt for gptokeyb" PKG_TOOLCHAIN="make" pre_make_target() { diff --git a/packages/apps/fileman/package.mk b/packages/apps/fileman/package.mk index 763801c34..e42858aa5 100644 --- a/packages/apps/fileman/package.mk +++ b/packages/apps/fileman/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/fileman" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_image SDL2_gfx SDL2_ttf" -PKG_SHORTDESC="A Single panel file Manager." +PKG_LONGDESC="A Single panel file Manager." PKG_PATCH_DIRS="${DEVICE}" [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ] && PKG_PATCH_DIRS+=" S922X-MALI" diff --git a/packages/apps/gamecontrollerdb/package.mk b/packages/apps/gamecontrollerdb/package.mk index 4429f6ea6..1045a733e 100644 --- a/packages/apps/gamecontrollerdb/package.mk +++ b/packages/apps/gamecontrollerdb/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPL" PKG_DEPENDS_TARGET="toolchain SDL2" PKG_SITE="https://github.com/gabomdq/SDL_GameControllerDB" PKG_URL="${PKG_SITE}.git" -PKG_SHORTDESC="SDL Game Controller DB" +PKG_LONGDESC="SDL Game Controller DB" PKG_TOOLCHAIN="manual" make_target() { diff --git a/packages/apps/jstest-sdl/package.mk b/packages/apps/jstest-sdl/package.mk index fc7632a01..0a00bcb3b 100644 --- a/packages/apps/jstest-sdl/package.mk +++ b/packages/apps/jstest-sdl/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/ROCKNIX/jstest-sdl" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 ncurses" -PKG_SHORTDESC="Simple SDL joystick test application for the console" +PKG_LONGDESC="Simple SDL joystick test application for the console" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/apps/moonlight/package.mk b/packages/apps/moonlight/package.mk index ea9a7a558..d8ab2451d 100644 --- a/packages/apps/moonlight/package.mk +++ b/packages/apps/moonlight/package.mk @@ -5,7 +5,7 @@ PKG_NAME="moonlight" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/moonlight-stream/moonlight-" PKG_DEPENDS_TARGET="toolchain opus SDL2 libevdev alsa curl enet avahi libvdpau libcec ffmpeg" -PKG_SHORTDESC="Moonlight is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built for Linux." +PKG_LONGDESC="Moonlight is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built for Linux." GET_HANDLER_SUPPORT="git" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/compat/lib32/package.mk b/packages/compat/lib32/package.mk index 4e9c9b2c2..564f4c96d 100644 --- a/packages/compat/lib32/package.mk +++ b/packages/compat/lib32/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="" PKG_ARCH="aarch64 x86_64" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain retroarch SDL2 libsndfile libmodplug" -PKG_SHORTDESC="ARM 32bit bundle for aarch64" +PKG_LONGDESC="ARM 32bit bundle for aarch64" PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/compress/cabextract/package.mk b/packages/compress/cabextract/package.mk index e870b54b0..bb4d04c21 100644 --- a/packages/compress/cabextract/package.mk +++ b/packages/compress/cabextract/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://www.cabextract.org.uk" PKG_URL="https://github.com/ROCKNIX/packages/raw/main/cabextract.tar.xz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="cabextract is Free Software for extracting Microsoft cabinet file" +PKG_LONGDESC="cabextract is Free Software for extracting Microsoft cabinet file" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/compress/libarchive/package.mk b/packages/compress/libarchive/package.mk index 479598039..1ae5fda08 100644 --- a/packages/compress/libarchive/package.mk +++ b/packages/compress/libarchive/package.mk @@ -8,7 +8,7 @@ PKG_SITE="https://www.libarchive.org" PKG_URL="https://www.libarchive.org/downloads/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_DEPENDS_HOST="toolchain:host" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A multi-format archive and compression library." +PKG_LONGDESC="A multi-format archive and compression library." PKG_CMAKE_OPTS_TARGET="-DCMAKE_POSITION_INDEPENDENT_CODE=1 \ -DENABLE_EXPAT=0 \ diff --git a/packages/devel/ecm/package.mk b/packages/devel/ecm/package.mk index f56418796..a1abd42a0 100644 --- a/packages/devel/ecm/package.mk +++ b/packages/devel/ecm/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="v5.112.0" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/KDE/extra-cmake-modules" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_SHORTDESC="KDE Extra CMake Modules" +PKG_LONGDESC="KDE Extra CMake Modules" PKG_TOOLCHAIN="cmake" PKG_CMAKE_OPTS_TARGET+=" -DBUILD_TESTING=OFF -DBUILD_HTML_DOCS=OFF -DBUILD_MAN_DOCS=OFF -DBUILD_QTHELP_DOCS=OFF" diff --git a/packages/devel/gobject-introspection/package.mk b/packages/devel/gobject-introspection/package.mk index da06d7e50..ed67741a1 100644 --- a/packages/devel/gobject-introspection/package.mk +++ b/packages/devel/gobject-introspection/package.mk @@ -10,8 +10,8 @@ PKG_SITE="http://www.gtk.org/" PKG_URL="https://github.com/GNOME/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libffi glib Python3 qemu:host gobject-introspection:host" PKG_DEPENDS_HOST="libffi:host glib:host" -PKG_SHORTDESC="glib: C support library" -PKG_LONGDESC="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." +PKG_LONGDESC="glib: C support library" +LINUX="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." PKG_TOOLCHAIN="meson" pre_configure_host() { diff --git a/packages/devel/xa/package.mk b/packages/devel/xa/package.mk index d24164ad3..42db3f6d3 100644 --- a/packages/devel/xa/package.mk +++ b/packages/devel/xa/package.mk @@ -8,7 +8,7 @@ PKG_SITE="https://www.floodgap.com/retrotech/xa/" PKG_URL="${PKG_SITE}/dists/xa-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_HOST="toolchain" -PKG_SHORTDESC="xa is a high-speed, two-pass portable cross-assembler." +PKG_LONGDESC="xa is a high-speed, two-pass portable cross-assembler." makeinstall_host() { mkdir -p ${TOOLCHAIN}/bin diff --git a/packages/emulators/libretro/2048-lr/package.mk b/packages/emulators/libretro/2048-lr/package.mk index c5a9c35d1..495154b23 100644 --- a/packages/emulators/libretro/2048-lr/package.mk +++ b/packages/emulators/libretro/2048-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/libretro-2048" PKG_URL="https://github.com/libretro/libretro-2048/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of 2048 puzzle game to the libretro API." PKG_LONGDESC="Port of 2048 puzzle game to the libretro API." +LINUX="Port of 2048 puzzle game to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/81-lr/package.mk b/packages/emulators/libretro/81-lr/package.mk index ae03e822c..d347f0440 100644 --- a/packages/emulators/libretro/81-lr/package.mk +++ b/packages/emulators/libretro/81-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/81-libretro" PKG_URL="https://github.com/libretro/81-libretro/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A port of the EightyOne ZX81 Emulator to libretro" PKG_LONGDESC="A port of the EightyOne ZX81 Emulator to libretro" +LINUX="A port of the EightyOne ZX81 Emulator to libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/a5200-lr/package.mk b/packages/emulators/libretro/a5200-lr/package.mk index b34dca6ff..c0426932f 100644 --- a/packages/emulators/libretro/a5200-lr/package.mk +++ b/packages/emulators/libretro/a5200-lr/package.mk @@ -25,7 +25,7 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/a5200" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Atari 5200 libretro core" +PKG_LONGDESC="Atari 5200 libretro core" PKG_TOOLCHAIN="auto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/arduous-lr/package.mk b/packages/emulators/libretro/arduous-lr/package.mk index 9bf880dce..504fdfdd8 100644 --- a/packages/emulators/libretro/arduous-lr/package.mk +++ b/packages/emulators/libretro/arduous-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/arduous" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A Libretro emulator core for the Arduboy" +PKG_LONGDESC="A Libretro emulator core for the Arduboy" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/atari800-lr/package.mk b/packages/emulators/libretro/atari800-lr/package.mk index f8c9ebc82..35fdd969c 100644 --- a/packages/emulators/libretro/atari800-lr/package.mk +++ b/packages/emulators/libretro/atari800-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-atari800" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="atari800 3.1.0 for libretro/libco WIP" PKG_LONGDESC="atari800 3.1.0 for libretro/libco WIP" +LINUX="atari800 3.1.0 for libretro/libco WIP" PKG_TOOLCHAIN="auto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/beetle-gba-lr/package.mk b/packages/emulators/libretro/beetle-gba-lr/package.mk index ea5944d19..423d5b838 100644 --- a/packages/emulators/libretro/beetle-gba-lr/package.mk +++ b/packages/emulators/libretro/beetle-gba-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-gba-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" PKG_LONGDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" +LINUX="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-lynx-lr/package.mk b/packages/emulators/libretro/beetle-lynx-lr/package.mk index 93966770b..bab09a449 100644 --- a/packages/emulators/libretro/beetle-lynx-lr/package.mk +++ b/packages/emulators/libretro/beetle-lynx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-lynx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen Lynx" PKG_LONGDESC="libretro implementation of Mednafen Lynx" +LINUX="libretro implementation of Mednafen Lynx" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-ngp-lr/package.mk b/packages/emulators/libretro/beetle-ngp-lr/package.mk index 3aef1e735..1cfef2d82 100644 --- a/packages/emulators/libretro/beetle-ngp-lr/package.mk +++ b/packages/emulators/libretro/beetle-ngp-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-ngp-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen Neo Geo Pocket." PKG_LONGDESC="libretro implementation of Mednafen Neo Geo Pocket." +LINUX="libretro implementation of Mednafen Neo Geo Pocket." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index d3c07ad36..c410069d8 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." +LINUX="Standalone port of Mednafen PCE Fast to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index 373d8fd9e..bf581122d 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Standalone port of Mednafen PCE to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE to libretro." +LINUX="Standalone port of Mednafen PCE to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pcfx-lr/package.mk b/packages/emulators/libretro/beetle-pcfx-lr/package.mk index 0a9d3b4c1..e0f4df9be 100644 --- a/packages/emulators/libretro/beetle-pcfx-lr/package.mk +++ b/packages/emulators/libretro/beetle-pcfx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pcfx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen PC-FX." PKG_LONGDESC="libretro implementation of Mednafen PC-FX." +LINUX="libretro implementation of Mednafen PC-FX." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-psx-lr/package.mk b/packages/emulators/libretro/beetle-psx-lr/package.mk index 8bdf7c81d..d45392cd7 100644 --- a/packages/emulators/libretro/beetle-psx-lr/package.mk +++ b/packages/emulators/libretro/beetle-psx-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://git.libretro.com/libretro/beetle-psx-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Fork of Mednafen PSX" +PKG_LONGDESC="Fork of Mednafen PSX" PKG_TOOLCHAIN="make" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/beetle-saturn-lr/package.mk b/packages/emulators/libretro/beetle-saturn-lr/package.mk index efdec4915..f924e29aa 100644 --- a/packages/emulators/libretro/beetle-saturn-lr/package.mk +++ b/packages/emulators/libretro/beetle-saturn-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-saturn-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Beetle Saturn libretro, a fork from mednafen" +PKG_LONGDESC="Beetle Saturn libretro, a fork from mednafen" PKG_TOOLCHAIN="make" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/beetle-supafaust-lr/package.mk b/packages/emulators/libretro/beetle-supafaust-lr/package.mk index b8518a726..068fc5ee2 100644 --- a/packages/emulators/libretro/beetle-supafaust-lr/package.mk +++ b/packages/emulators/libretro/beetle-supafaust-lr/package.mk @@ -26,7 +26,7 @@ PKG_SITE="https://github.com/libretro/supafaust" PKG_URL="${PKG_SITE}.git" #PKG_GIT_CLONE_BRANCH="hd" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Super Nintendo (Super Famicom) emulator" +PKG_LONGDESC="Super Nintendo (Super Famicom) emulator" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk index 3b4c49f4b..4cd2b747d 100644 --- a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk +++ b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-supergrafx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Standalone port of Mednafen PCE Fast to libretro." PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." +LINUX="Standalone port of Mednafen PCE Fast to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-vb-lr/package.mk b/packages/emulators/libretro/beetle-vb-lr/package.mk index d7a50d810..e2c7ebe5a 100644 --- a/packages/emulators/libretro/beetle-vb-lr/package.mk +++ b/packages/emulators/libretro/beetle-vb-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-vb-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen VB. (VirtualBoy)" PKG_LONGDESC="libretro implementation of Mednafen VB. (VirtualBoy)" +LINUX="libretro implementation of Mednafen VB. (VirtualBoy)" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-wswan-lr/package.mk b/packages/emulators/libretro/beetle-wswan-lr/package.mk index 2e3a4e40f..4cca564bf 100644 --- a/packages/emulators/libretro/beetle-wswan-lr/package.mk +++ b/packages/emulators/libretro/beetle-wswan-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-wswan-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Mednafen wswan" PKG_LONGDESC="libretro implementation of Mednafen wswan" +LINUX="libretro implementation of Mednafen wswan" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/bluemsx-lr/package.mk b/packages/emulators/libretro/bluemsx-lr/package.mk index 9afcb51ce..0ced20995 100644 --- a/packages/emulators/libretro/bluemsx-lr/package.mk +++ b/packages/emulators/libretro/bluemsx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/blueMSX-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of blueMSX to the libretro API." PKG_LONGDESC="Port of blueMSX to the libretro API." +LINUX="Port of blueMSX to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/bsnes-hd-lr/package.mk b/packages/emulators/libretro/bsnes-hd-lr/package.mk index 06cd1b253..23842d63d 100644 --- a/packages/emulators/libretro/bsnes-hd-lr/package.mk +++ b/packages/emulators/libretro/bsnes-hd-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/DerKoun/bsnes-hd" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="bsnes-hd is a fork of bsnes that adds HD video features such as widescreen, HD Mode 7 and true color" +PKG_LONGDESC="bsnes-hd is a fork of bsnes that adds HD video features such as widescreen, HD Mode 7 and true color" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/bsnes-lr/package.mk b/packages/emulators/libretro/bsnes-lr/package.mk index 44d9f5231..40bb3e2c7 100644 --- a/packages/emulators/libretro/bsnes-lr/package.mk +++ b/packages/emulators/libretro/bsnes-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/bsnes-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" +PKG_LONGDESC="BSNES Super Nintendo Libretro Core" PKG_TOOLCHAIN="make" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk index 37ef1e3a2..4b0356bcc 100644 --- a/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk +++ b/packages/emulators/libretro/bsnes-mercury-performance-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/bsnes-mercury" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="BSNES Super Nintendo Libretro Core" +PKG_LONGDESC="BSNES Super Nintendo Libretro Core" PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/cap32-lr/package.mk b/packages/emulators/libretro/cap32-lr/package.mk index 2b893fa4c..924d31681 100644 --- a/packages/emulators/libretro/cap32-lr/package.mk +++ b/packages/emulators/libretro/cap32-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-cap32" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="caprice32 4.2.0 libretro" PKG_LONGDESC="caprice32 4.2.0 libretro" +LINUX="caprice32 4.2.0 libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/common-shaders/package.mk b/packages/emulators/libretro/common-shaders/package.mk index 2e7b6d45b..324b4c97f 100644 --- a/packages/emulators/libretro/common-shaders/package.mk +++ b/packages/emulators/libretro/common-shaders/package.mk @@ -27,8 +27,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/common-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro common shaders" PKG_LONGDESC="Libretro common shaders" +LINUX="Libretro common shaders" make_target() { : diff --git a/packages/emulators/libretro/crocods-lr/package.mk b/packages/emulators/libretro/crocods-lr/package.mk index 8a28a7c12..8b00bca1e 100644 --- a/packages/emulators/libretro/crocods-lr/package.mk +++ b/packages/emulators/libretro/crocods-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/libretro/libretro-crocods" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Amstrad CPC emulator" PKG_LONGDESC="Amstrad CPC emulator" +LINUX="Amstrad CPC emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/daphne-lr/package.mk b/packages/emulators/libretro/daphne-lr/package.mk index 94431ae5a..c27fc188f 100644 --- a/packages/emulators/libretro/daphne-lr/package.mk +++ b/packages/emulators/libretro/daphne-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2+" PKG_SITE="https://github.com/libretro/daphne" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="This is a Daphne core" +PKG_LONGDESC="This is a Daphne core" PKG_TOOLCHAIN="make" makeinstall_target() { diff --git a/packages/emulators/libretro/desmume-lr/package.mk b/packages/emulators/libretro/desmume-lr/package.mk index e0a07bade..60a2975c4 100644 --- a/packages/emulators/libretro/desmume-lr/package.mk +++ b/packages/emulators/libretro/desmume-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://git.libretro.com/libretro/desmume" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain libpcap" -PKG_SHORTDESC="DeSmuME - Nintendo DS libretro" +PKG_LONGDESC="DeSmuME - Nintendo DS libretro" PKG_TOOLCHAIN="make" if [ "${OPENGL_SUPPORT}" = "yes" ]; then diff --git a/packages/emulators/libretro/dolphin-lr/package.mk b/packages/emulators/libretro/dolphin-lr/package.mk index 144143813..e216b07d5 100644 --- a/packages/emulators/libretro/dolphin-lr/package.mk +++ b/packages/emulators/libretro/dolphin-lr/package.mk @@ -8,7 +8,7 @@ PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb" PKG_SITE="https://github.com/libretro/dolphin" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Dolphin Libretro, a Gamecube & Wii emulator core for Retroarch" +PKG_LONGDESC="Dolphin Libretro, a Gamecube & Wii emulator core for Retroarch" PKG_TOOLCHAIN="cmake" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk index d68ac96ad..30169a570 100644 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ b/packages/emulators/libretro/dosbox-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/dosbox-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro wrapper for the DOSBox emulator" -PKG_LONGDESC="An open source DOS emulator for BeOS, Linux, Mac OS X, OS/2, and Windows. Primarily focuses on running DOS Games." +PKG_LONGDESC="libretro wrapper for the DOSBox emulator" +LINUX="An open source DOS emulator for BeOS, Linux, Mac OS X, OS/2, and Windows. Primarily focuses on running DOS Games." PKG_BUILD_FLAGS="-lto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/dosbox-pure-lr/package.mk b/packages/emulators/libretro/dosbox-pure-lr/package.mk index b5a697163..c282886ee 100644 --- a/packages/emulators/libretro/dosbox-pure-lr/package.mk +++ b/packages/emulators/libretro/dosbox-pure-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/schellingb/dosbox-pure" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A port of DOSBox to libretro" PKG_LONGDESC="A port of DOSBox to libretro" +LINUX="A port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/dosbox-svn-lr/package.mk b/packages/emulators/libretro/dosbox-svn-lr/package.mk index 0ef2fee53..1bcb7c6be 100644 --- a/packages/emulators/libretro/dosbox-svn-lr/package.mk +++ b/packages/emulators/libretro/dosbox-svn-lr/package.mk @@ -26,8 +26,8 @@ PKG_SITE="https://github.com/libretro/dosbox-svn" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="libretro" PKG_DEPENDS_TARGET="toolchain SDL SDL_net retroarch" -PKG_SHORTDESC="Upstream port of DOSBox to libretro" PKG_LONGDESC="Upstream port of DOSBox to libretro" +LINUX="Upstream port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="-lto" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/duckstation-lr/package.mk b/packages/emulators/libretro/duckstation-lr/package.mk index 3e84d2021..f25307263 100644 --- a/packages/emulators/libretro/duckstation-lr/package.mk +++ b/packages/emulators/libretro/duckstation-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/stenzek/duckstation" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 nasm:host pulseaudio openssl libidn2 nghttp2 zlib curl libevdev" -PKG_SHORTDESC="DuckStation - PlayStation 1, aka. PSX Emulator" +PKG_LONGDESC="DuckStation - PlayStation 1, aka. PSX Emulator" PKG_TOOLCHAIN="cmake" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk b/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk index a59268300..6bc0ed0e0 100644 --- a/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/liblcf/package.mk @@ -23,7 +23,7 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/EasyRPG/liblcf" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain expat icu" -PKG_SHORTDESC="Library to handle RPG Maker 2000/2003 and EasyRPG projects" +PKG_LONGDESC="Library to handle RPG Maker 2000/2003 and EasyRPG projects" GET_HANDLER_SUPPORT="git" PKG_USE_CMAKE="yes" diff --git a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk index a22d563ba..44be0c1e1 100644 --- a/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libspeexdsp/package.mk @@ -23,6 +23,6 @@ PKG_VERSION="738e17905e1ca2a1fa932ddd9c2a85d089f4e845" PKG_SITE="https://github.com/xiph/speexdsp" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Speex audio processing library" +PKG_LONGDESC="Speex audio processing library" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="autotools" diff --git a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk index a0651c832..6fcc3b972 100644 --- a/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/libxmp-lite/package.mk @@ -23,7 +23,7 @@ PKG_VERSION="4.5.0" PKG_SITE="http://sourceforge.net/projects/xmp" PKG_URL="${PKG_SITE}/files/libxmp/${PKG_VERSION}/libxmp-lite-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libxmp is a library that renders module files to PCM data." +PKG_LONGDESC="Libxmp is a library that renders module files to PCM data." PKG_TOOLCHAIN="configure" diff --git a/packages/emulators/libretro/easyrpg-lr/package.mk b/packages/emulators/libretro/easyrpg-lr/package.mk index 22785f7bb..18e96bdf6 100644 --- a/packages/emulators/libretro/easyrpg-lr/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/package.mk @@ -26,8 +26,8 @@ PKG_SITE="https://github.com/easyrpg/player" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="0-8-0-stable" PKG_DEPENDS_TARGET="toolchain zlib libfmt liblcf icu pixman libspeexdsp mpg123 libsndfile libvorbis opusfile wildmidi libxmp-lite fluidsynth harfbuzz libpng retroarch" -PKG_SHORTDESC="An unofficial libretro port of the EasyRPG/Player." PKG_LONGDESC="An unofficial libretro port of the EasyRPG/Player." +LINUX="An unofficial libretro port of the EasyRPG/Player." GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="+pic" diff --git a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk index c9a4e71bf..cf2b3a9d8 100644 --- a/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/wildmidi/package.mk @@ -23,7 +23,7 @@ PKG_VERSION="405ca73" PKG_SITE="https://github.com/Mindwerks/wildmidi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="WildMIDI is a simple software midi player which has a core softsynth library that can be used with other applications." +PKG_LONGDESC="WildMIDI is a simple software midi player which has a core softsynth library that can be used with other applications." PKG_TOOLCHAIN="cmake" diff --git a/packages/emulators/libretro/ecwolf-lr/package.mk b/packages/emulators/libretro/ecwolf-lr/package.mk index e0b1c8f3d..d05ac0d50 100644 --- a/packages/emulators/libretro/ecwolf-lr/package.mk +++ b/packages/emulators/libretro/ecwolf-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/ecwolf" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_mixer SDL2_net libjpeg-turbo bzip2" -PKG_SHORTDESC="ECWolf is a port of the Wolfenstein 3D engine based of Wolf4SDL." +PKG_LONGDESC="ECWolf is a port of the Wolfenstein 3D engine based of Wolf4SDL." PKG_TOOLCHAIN="make" if [ "${OPENGL_SUPPORT}" = "yes" ]; then diff --git a/packages/emulators/libretro/fbalpha2012-lr/package.mk b/packages/emulators/libretro/fbalpha2012-lr/package.mk index b70280e2f..781e8e7fa 100644 --- a/packages/emulators/libretro/fbalpha2012-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2012-lr/package.mk @@ -25,7 +25,7 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha2012" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of Final Burn Alpha 2012 to Libretro" +PKG_LONGDESC="Port of Final Burn Alpha 2012 to Libretro" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/fbalpha2019-lr/package.mk b/packages/emulators/libretro/fbalpha2019-lr/package.mk index 7a2b89559..491ece6f3 100644 --- a/packages/emulators/libretro/fbalpha2019-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2019-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/fbalpha" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of Final Burn Alpha to Libretro (v0.2.97.44)." -PKG_LONGDESC="Currently, FB Alpha supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware." +PKG_LONGDESC="Port of Final Burn Alpha to Libretro (v0.2.97.44)." +LINUX="Currently, FB Alpha supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware." PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/fbneo-lr/package.mk b/packages/emulators/libretro/fbneo-lr/package.mk index 8f71c6707..69ca0f27d 100644 --- a/packages/emulators/libretro/fbneo-lr/package.mk +++ b/packages/emulators/libretro/fbneo-lr/package.mk @@ -9,8 +9,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/FBNeo" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of Final Burn Neo to Libretro (v0.2.97.38)." -PKG_LONGDESC="Currently, FB neo supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware. " +PKG_LONGDESC="Port of Final Burn Neo to Libretro (v0.2.97.38)." +LINUX="Currently, FB neo supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware. " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index ccf1ae02f..d67b28458 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-fceumm" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of FCEUmm / FCEUX to Libretro." -PKG_LONGDESC="FCEUX is a Nintendo Entertainment System (NES), Famicom, and Famicom Disk System (FDS) emulator." +PKG_LONGDESC="Port of FCEUmm / FCEUX to Libretro." +LINUX="FCEUX is a Nintendo Entertainment System (NES), Famicom, and Famicom Disk System (FDS) emulator." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fmsx-lr/package.mk b/packages/emulators/libretro/fmsx-lr/package.mk index ac87fc106..bcc01b8c0 100644 --- a/packages/emulators/libretro/fmsx-lr/package.mk +++ b/packages/emulators/libretro/fmsx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/fmsx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of fMSX 4.9 to the libretro API." PKG_LONGDESC="Port of fMSX 4.9 to the libretro API." +LINUX="Port of fMSX 4.9 to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/freechaf-lr/package.mk b/packages/emulators/libretro/freechaf-lr/package.mk index 9ec03ce06..3adbfa42d 100644 --- a/packages/emulators/libretro/freechaf-lr/package.mk +++ b/packages/emulators/libretro/freechaf-lr/package.mk @@ -4,8 +4,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/FreeChaF" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." PKG_LONGDESC="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." +LINUX="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/freeintv-lr/package.mk b/packages/emulators/libretro/freeintv-lr/package.mk index dc7016c50..0b1b649be 100644 --- a/packages/emulators/libretro/freeintv-lr/package.mk +++ b/packages/emulators/libretro/freeintv-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/FreeIntv" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." PKG_LONGDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." +LINUX="FreeIntv is a libretro emulation core for the Mattel Intellivision." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/freej2me-lr/package.mk b/packages/emulators/libretro/freej2me-lr/package.mk index 339795efa..e21af27da 100644 --- a/packages/emulators/libretro/freej2me-lr/package.mk +++ b/packages/emulators/libretro/freej2me-lr/package.mk @@ -7,8 +7,8 @@ PKG_VERSION="8b9bc8a19baf26e3d92f88934a64a32f1cbc2795" PKG_SITE="https://github.com/hex007/freej2me" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain apache-ant:host" -PKG_SHORTDESC="A free J2ME emulator with libretro, awt and sdl2 frontends." PKG_LONGDESC="A free J2ME emulator with libretro, awt and sdl2 frontends." +LINUX="A free J2ME emulator with libretro, awt and sdl2 frontends." PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/fuse-lr/package.mk b/packages/emulators/libretro/fuse-lr/package.mk index d77dcd465..e7a9b1091 100644 --- a/packages/emulators/libretro/fuse-lr/package.mk +++ b/packages/emulators/libretro/fuse-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/fuse-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A port of the Fuse Unix Spectrum Emulator to libretro " PKG_LONGDESC="A port of the Fuse Unix Spectrum Emulator to libretro " +LINUX="A port of the Fuse Unix Spectrum Emulator to libretro " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gambatte-lr/package.mk b/packages/emulators/libretro/gambatte-lr/package.mk index 1c0998aae..2664b733f 100644 --- a/packages/emulators/libretro/gambatte-lr/package.mk +++ b/packages/emulators/libretro/gambatte-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/gambatte-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of libgambatte" -PKG_LONGDESC="Gambatte is an open-source Game Boy Color emulator written for fun and made available in the hope that it will be useful." +PKG_LONGDESC="libretro implementation of libgambatte" +LINUX="Gambatte is an open-source Game Boy Color emulator written for fun and made available in the hope that it will be useful." PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 972b81277..059069c45 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -20,8 +20,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearboy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" PKG_LONGDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" +LINUX="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gearcoleco-lr/package.mk b/packages/emulators/libretro/gearcoleco-lr/package.mk index 770ad601f..002e2c5b0 100644 --- a/packages/emulators/libretro/gearcoleco-lr/package.mk +++ b/packages/emulators/libretro/gearcoleco-lr/package.mk @@ -20,8 +20,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearcoleco" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." PKG_LONGDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." +LINUX="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gearsystem-lr/package.mk b/packages/emulators/libretro/gearsystem-lr/package.mk index 3ff81a42b..d680fc41b 100644 --- a/packages/emulators/libretro/gearsystem-lr/package.mk +++ b/packages/emulators/libretro/gearsystem-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/drhelius/Gearsystem" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" PKG_LONGDESC="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" +LINUX="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index 2ba13e3e0..1842d6051 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" -PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." +PKG_LONGDESC="An enhanced port of Genesis Plus for Gamecube/Wii" +LINUX="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk index 7eef80d3c..d1d09c8e3 100644 --- a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX-Wide" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="An enhanced port of Genesis Plus for Gamecube/Wii" -PKG_LONGDESC="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." +PKG_LONGDESC="An enhanced port of Genesis Plus for Gamecube/Wii" +LINUX="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/glsl-shaders/package.mk b/packages/emulators/libretro/glsl-shaders/package.mk index 65f87145b..2535c93ab 100644 --- a/packages/emulators/libretro/glsl-shaders/package.mk +++ b/packages/emulators/libretro/glsl-shaders/package.mk @@ -27,8 +27,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/glsl-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Common GSLS shaders for RetroArch" PKG_LONGDESC="Common GSLS shaders for RetroArch" +LINUX="Common GSLS shaders for RetroArch" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gw-lr/package.mk b/packages/emulators/libretro/gw-lr/package.mk index 72241e3dc..ac99a0756 100644 --- a/packages/emulators/libretro/gw-lr/package.mk +++ b/packages/emulators/libretro/gw-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/gw-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A libretro core for Game & Watch simulators " PKG_LONGDESC="A libretro core for Game & Watch simulators " +LINUX="A libretro core for Game & Watch simulators " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/handy-lr/package.mk b/packages/emulators/libretro/handy-lr/package.mk index e849ca3dc..8b7590ef4 100644 --- a/packages/emulators/libretro/handy-lr/package.mk +++ b/packages/emulators/libretro/handy-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Zlib" PKG_SITE="https://github.com/libretro/libretro-handy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="K. Wilkins' Atari Lynx emulator Handy for libretro" -PKG_LONGDESC="Handy is an Atari Lynx Emulator for Windows 95/98/NT/2000. Handy was the original name of the Lynx project that was started at Epyx and then finished by Atari." +PKG_LONGDESC="K. Wilkins' Atari Lynx emulator Handy for libretro" +LINUX="Handy is an Atari Lynx Emulator for Windows 95/98/NT/2000. Handy was the original name of the Lynx project that was started at Epyx and then finished by Atari." PKG_TOOLCHAIN="make" case ${ARCH} in diff --git a/packages/emulators/libretro/hatari-lr/package.mk b/packages/emulators/libretro/hatari-lr/package.mk index 5dda7d076..82d239028 100644 --- a/packages/emulators/libretro/hatari-lr/package.mk +++ b/packages/emulators/libretro/hatari-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/hatari" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain capsimg" -PKG_SHORTDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." PKG_LONGDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." +LINUX="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index b61c78df5..2f53513a5 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-database" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Repository containing cheatcode files, content data files, etc." PKG_LONGDESC="Repository containing cheatcode files, content data files, etc." +LINUX="Repository containing cheatcode files, content data files, etc." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/lrps2-lr/package.mk b/packages/emulators/libretro/lrps2-lr/package.mk index 29d8a3dce..5cf3ff8b9 100644 --- a/packages/emulators/libretro/lrps2-lr/package.mk +++ b/packages/emulators/libretro/lrps2-lr/package.mk @@ -8,7 +8,7 @@ PKG_DEPENDS_TARGET="toolchain alsa-lib freetype zlib libpng libaio libsamplerate PKG_SITE="https://github.com/libretro/LRPS2" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Hard fork / port of PCSX2. Will target only Libretro specifically." +PKG_LONGDESC="Hard fork / port of PCSX2. Will target only Libretro specifically." if [ ! "${OPENGL}" = "no" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" diff --git a/packages/emulators/libretro/mame-lr/package.mk b/packages/emulators/libretro/mame-lr/package.mk index b72b10bd0..145b8f266 100644 --- a/packages/emulators/libretro/mame-lr/package.mk +++ b/packages/emulators/libretro/mame-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame" PKG_URL="https://github.com/libretro/mame/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain zlib flac sqlite expat" -PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" +PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto +pic" diff --git a/packages/emulators/libretro/mame2003-lr/package.mk b/packages/emulators/libretro/mame2003-lr/package.mk index 2de89fea0..5627c4a3c 100644 --- a/packages/emulators/libretro/mame2003-lr/package.mk +++ b/packages/emulators/libretro/mame2003-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" +LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk index a471ef42a..d68b3600d 100644 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ b/packages/emulators/libretro/mame2003-midway-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003_midway" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" +LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index f5b47c608..59d1d75ea 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="MAME - Multiple Arcade Machine Emulator" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" +LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2010-lr/package.mk b/packages/emulators/libretro/mame2010-lr/package.mk index 2feb49438..4590720ba 100644 --- a/packages/emulators/libretro/mame2010-lr/package.mk +++ b/packages/emulators/libretro/mame2010-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2010-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." PKG_LONGDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." +LINUX="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2015-lr/package.mk b/packages/emulators/libretro/mame2015-lr/package.mk index d1da9472b..bf2e2f5ac 100644 --- a/packages/emulators/libretro/mame2015-lr/package.mk +++ b/packages/emulators/libretro/mame2015-lr/package.mk @@ -23,7 +23,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2015-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Late 2014/Early 2015 version of MAME (0.160-ish) for libretro. Compatible with MAME 0.160 romsets." +PKG_LONGDESC="Late 2014/Early 2015 version of MAME (0.160-ish) for libretro. Compatible with MAME 0.160 romsets." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/mame2016-lr/package.mk b/packages/emulators/libretro/mame2016-lr/package.mk index 51a2dde8b..933b288c0 100644 --- a/packages/emulators/libretro/mame2016-lr/package.mk +++ b/packages/emulators/libretro/mame2016-lr/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame2016-libretro" PKG_URL="https://github.com/libretro/mame2016-libretro/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="MAME (0.174-ish) for libretro" +PKG_LONGDESC="MAME (0.174-ish) for libretro" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/melonds-lr/package.mk b/packages/emulators/libretro/melonds-lr/package.mk index 97f4aa782..70300ad1a 100644 --- a/packages/emulators/libretro/melonds-lr/package.mk +++ b/packages/emulators/libretro/melonds-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://git.libretro.com/libretro/melonDS" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="MelonDS - Nintendo DS emulator for libretro" +PKG_LONGDESC="MelonDS - Nintendo DS emulator for libretro" PKG_TOOLCHAIN="make" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/libretro/mesen-lr/package.mk b/packages/emulators/libretro/mesen-lr/package.mk index bc23113ee..afb5780cd 100644 --- a/packages/emulators/libretro/mesen-lr/package.mk +++ b/packages/emulators/libretro/mesen-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/Mesen" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Mesen is a cross-platform NES/Famicom emulator for Windows & Linux built in C++ and C#." +PKG_LONGDESC="Mesen is a cross-platform NES/Famicom emulator for Windows & Linux built in C++ and C#." PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/mgba-lr/package.mk b/packages/emulators/libretro/mgba-lr/package.mk index f6ea11718..06074e6fe 100644 --- a/packages/emulators/libretro/mgba-lr/package.mk +++ b/packages/emulators/libretro/mgba-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="MPLv2.0" PKG_SITE="https://github.com/libretro/mgba" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="mGBA Game Boy Advance Emulator" -PKG_LONGDESC="mGBA is a new emulator for running Game Boy Advance games. It aims to be faster and more accurate than many existing Game Boy Advance emulators, as well as adding features that other emulators lack." +PKG_LONGDESC="mGBA Game Boy Advance Emulator" +LINUX="mGBA is a new emulator for running Game Boy Advance games. It aims to be faster and more accurate than many existing Game Boy Advance emulators, as well as adding features that other emulators lack." PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/minivmac-lr/package.mk b/packages/emulators/libretro/minivmac-lr/package.mk index c124208ae..91634ccb4 100644 --- a/packages/emulators/libretro/minivmac-lr/package.mk +++ b/packages/emulators/libretro/minivmac-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-minivmac" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Virtual Macintosh" +PKG_LONGDESC="Virtual Macintosh" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mu-lr/package.mk b/packages/emulators/libretro/mu-lr/package.mk index b137ecfc9..6522b7df7 100644 --- a/packages/emulators/libretro/mu-lr/package.mk +++ b/packages/emulators/libretro/mu-lr/package.mk @@ -8,8 +8,8 @@ PKG_SITE="https://git.libretro.com/libretro/Mu" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/Mu-${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="buildbot" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="An emulator for the Palm m515 OS ported to libretro." -PKG_LONGDESC="An emulator for the Palm m515 OS ported to libretro. It is intended to avoid hacks like those used by the POSE emulator, where API calls are intercepted and replaced with those that don't use the actual hardware." +PKG_LONGDESC="An emulator for the Palm m515 OS ported to libretro." +LINUX="An emulator for the Palm m515 OS ported to libretro. It is intended to avoid hacks like those used by the POSE emulator, where API calls are intercepted and replaced with those that don't use the actual hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mupen64plus-lr/package.mk b/packages/emulators/libretro/mupen64plus-lr/package.mk index 019769f57..c1ac4e102 100644 --- a/packages/emulators/libretro/mupen64plus-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mupen64plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_SHORTDESC="mupen64plus + RSP-HLE + GLideN64 + libretro" PKG_LONGDESC="mupen64plus + RSP-HLE + GLideN64 + libretro" +LINUX="mupen64plus + RSP-HLE + GLideN64 + libretro" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" PKG_PATCH_DIRS+=" ${DEVICE}" diff --git a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk index 8affabfcf..afa5b49c3 100755 --- a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mupen64plus-libretro-nx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_SHORTDESC="mupen64plus NX" PKG_LONGDESC="mupen64plus NX" +LINUX="mupen64plus NX" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/neocd_lr/package.mk b/packages/emulators/libretro/neocd_lr/package.mk index 4c0f4d817..b681fcc21 100644 --- a/packages/emulators/libretro/neocd_lr/package.mk +++ b/packages/emulators/libretro/neocd_lr/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="LGPLv3.0" PKG_SITE="https://github.com/libretro/neocd_libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain flac libogg libvorbis" -PKG_SHORTDESC="Neo Geo CD emulator for libretro " -PKG_LONGDESC="NeoCD-Libretro is a complete rewrite of NeoCD from scratch in modern C++11. It is designed with accuracy and portability in mind rather than being all about speed like the the older versions. The goal is also to document all I know about the platform in the source code so other emulator authors can make their own implementations." +PKG_LONGDESC="Neo Geo CD emulator for libretro " +LINUX="NeoCD-Libretro is a complete rewrite of NeoCD from scratch in modern C++11. It is designed with accuracy and portability in mind rather than being all about speed like the the older versions. The goal is also to document all I know about the platform in the source code so other emulator authors can make their own implementations." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index 61a69286a..4eb50d2b5 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/nestopia" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro implementation of NEStopia. (Nintendo Entertainment System)" -PKG_LONGDESC="This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to enhance the original, and ensure it continues to work on modern operating systems." +PKG_LONGDESC="Libretro implementation of NEStopia. (Nintendo Entertainment System)" +LINUX="This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to enhance the original, and ensure it continues to work on modern operating systems." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/np2kai-lr/package.mk b/packages/emulators/libretro/np2kai-lr/package.mk index 93395e908..a7365e0ed 100644 --- a/packages/emulators/libretro/np2kai-lr/package.mk +++ b/packages/emulators/libretro/np2kai-lr/package.mk @@ -24,7 +24,7 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/AZO234/NP2kai" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Neko Project II kai" +PKG_LONGDESC="Neko Project II kai" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/o2em-lr/package.mk b/packages/emulators/libretro/o2em-lr/package.mk index 2ca23e78d..4a6ca8877 100644 --- a/packages/emulators/libretro/o2em-lr/package.mk +++ b/packages/emulators/libretro/o2em-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Artistic License" PKG_SITE="https://github.com/libretro/libretro-o2em" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." PKG_LONGDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." +LINUX="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/opera-lr/package.mk b/packages/emulators/libretro/opera-lr/package.mk index a545b2b83..5f1665086 100644 --- a/packages/emulators/libretro/opera-lr/package.mk +++ b/packages/emulators/libretro/opera-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="LGPL with additional notes" PKG_SITE="https://github.com/libretro/opera-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of 4DO/libfreedo to libretro." PKG_LONGDESC="Port of 4DO/libfreedo to libretro." +LINUX="Port of 4DO/libfreedo to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/parallel-n64-lr/package.mk b/packages/emulators/libretro/parallel-n64-lr/package.mk index 5346e2e4b..9d32033ad 100644 --- a/packages/emulators/libretro/parallel-n64-lr/package.mk +++ b/packages/emulators/libretro/parallel-n64-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/parallel-n64" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain core-info" -PKG_SHORTDESC="Optimized/rewritten Nintendo 64 emulator made specifically for Libretro. Originally based on Mupen64 Plus." +PKG_LONGDESC="Optimized/rewritten Nintendo 64 emulator made specifically for Libretro. Originally based on Mupen64 Plus." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/pcsx_rearmed-lr/package.mk b/packages/emulators/libretro/pcsx_rearmed-lr/package.mk index 42830a337..0acdaf630 100644 --- a/packages/emulators/libretro/pcsx_rearmed-lr/package.mk +++ b/packages/emulators/libretro/pcsx_rearmed-lr/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/pcsx_rearmed" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="ARM optimized PCSX fork" +PKG_LONGDESC="ARM optimized PCSX fork" PKG_TOOLCHAIN="manual" pre_configure_target() { diff --git a/packages/emulators/libretro/picodrive-lr/package.mk b/packages/emulators/libretro/picodrive-lr/package.mk index 482d014e7..28b128a82 100644 --- a/packages/emulators/libretro/picodrive-lr/package.mk +++ b/packages/emulators/libretro/picodrive-lr/package.mk @@ -4,8 +4,8 @@ PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/picodrive" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro implementation of PicoDrive. (Sega Megadrive/Genesis/Sega Master System/Sega GameGear/Sega CD/32X)" -PKG_LONGDESC="This is yet another Megadrive / Genesis / Sega CD / Mega CD / 32X / SMS emulator, which was written having ARM-based AMD64 devices in mind (such as smartphones and AMD64 consoles like GP2X and Pandora), but also runs on non-ARM little-endian hardware too." +PKG_LONGDESC="Libretro implementation of PicoDrive. (Sega Megadrive/Genesis/Sega Master System/Sega GameGear/Sega CD/32X)" +LINUX="This is yet another Megadrive / Genesis / Sega CD / Mega CD / 32X / SMS emulator, which was written having ARM-based AMD64 devices in mind (such as smartphones and AMD64 consoles like GP2X and Pandora), but also runs on non-ARM little-endian hardware too." GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="-gold" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/pokemini-lr/package.mk b/packages/emulators/libretro/pokemini-lr/package.mk index 5fe90ed38..927653717 100644 --- a/packages/emulators/libretro/pokemini-lr/package.mk +++ b/packages/emulators/libretro/pokemini-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/pokemini" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" PKG_LONGDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" +LINUX="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/potator-lr/package.mk b/packages/emulators/libretro/potator-lr/package.mk index e25602cb6..5c0df5f5a 100644 --- a/packages/emulators/libretro/potator-lr/package.mk +++ b/packages/emulators/libretro/potator-lr/package.mk @@ -4,8 +4,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/potator" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A Watara Supervision Emulator based on Normmatt version." PKG_LONGDESC="A Watara Supervision Emulator based on Normmatt version." +LINUX="A Watara Supervision Emulator based on Normmatt version." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/prboom-lr/package.mk b/packages/emulators/libretro/prboom-lr/package.mk index 38519d8f0..b572187ef 100644 --- a/packages/emulators/libretro/prboom-lr/package.mk +++ b/packages/emulators/libretro/prboom-lr/package.mk @@ -24,7 +24,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-prboom" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro implementation of Doom" +PKG_LONGDESC="libretro implementation of Doom" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro diff --git a/packages/emulators/libretro/prosystem-lr/package.mk b/packages/emulators/libretro/prosystem-lr/package.mk index 99a7408b9..50501b260 100644 --- a/packages/emulators/libretro/prosystem-lr/package.mk +++ b/packages/emulators/libretro/prosystem-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/prosystem-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of ProSystem to libretro." PKG_LONGDESC="Port of ProSystem to libretro." +LINUX="Port of ProSystem to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/puae-lr/package.mk b/packages/emulators/libretro/puae-lr/package.mk index 7ea2d57f2..2e1854a60 100644 --- a/packages/emulators/libretro/puae-lr/package.mk +++ b/packages/emulators/libretro/puae-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="WIP libretro port of UAE (P-UAE and libco) Expect bugs" PKG_LONGDESC="WIP libretro port of UAE (P-UAE and libco) Expect bugs" +LINUX="WIP libretro port of UAE (P-UAE and libco) Expect bugs" PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/puae2021-lr/package.mk b/packages/emulators/libretro/puae2021-lr/package.mk index bdea01e64..710a6cd00 100644 --- a/packages/emulators/libretro/puae2021-lr/package.mk +++ b/packages/emulators/libretro/puae2021-lr/package.mk @@ -27,8 +27,8 @@ PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="2.6.1" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="PUAE 2021 libretro port of UAE" PKG_LONGDESC="PUAE 2021 libretro port of UAE" +LINUX="PUAE 2021 libretro port of UAE" PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/px68k-lr/package.mk b/packages/emulators/libretro/px68k-lr/package.mk index ecc43409b..55d4ec21a 100644 --- a/packages/emulators/libretro/px68k-lr/package.mk +++ b/packages/emulators/libretro/px68k-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Unknown" PKG_SITE="https://github.com/libretro/px68k-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_LONGDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" +LINUX="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/quasi88-lr/package.mk b/packages/emulators/libretro/quasi88-lr/package.mk index f15572feb..9ec67a8c0 100644 --- a/packages/emulators/libretro/quasi88-lr/package.mk +++ b/packages/emulators/libretro/quasi88-lr/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="BSD3" PKG_SITE="https://github.com/libretro/quasi88-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" PKG_LONGDESC="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" +LINUX="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/quicknes-lr/package.mk b/packages/emulators/libretro/quicknes-lr/package.mk index 46b605a5f..d4045efff 100644 --- a/packages/emulators/libretro/quicknes-lr/package.mk +++ b/packages/emulators/libretro/quicknes-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="LGPLv2.1+" PKG_SITE="https://github.com/libretro/QuickNES_Core" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="The QuickNES core library, originally by Shay Green, heavily modified" PKG_LONGDESC="The QuickNES core library, originally by Shay Green, heavily modified" +LINUX="The QuickNES core library, originally by Shay Green, heavily modified" PKG_BUILD_FLAGS="-gold" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/race-lr/package.mk b/packages/emulators/libretro/race-lr/package.mk index ea621e446..c0836e942 100644 --- a/packages/emulators/libretro/race-lr/package.mk +++ b/packages/emulators/libretro/race-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/RACE" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_LONGDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." +LINUX="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_TOOLCHAIN="make" makeinstall_target() { diff --git a/packages/emulators/libretro/retropie-shaders/package.mk b/packages/emulators/libretro/retropie-shaders/package.mk index d51428a75..220185069 100644 --- a/packages/emulators/libretro/retropie-shaders/package.mk +++ b/packages/emulators/libretro/retropie-shaders/package.mk @@ -27,8 +27,8 @@ PKG_SITE="https://github.com/RetroPie/common-shaders" PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="rpi" PKG_DEPENDS_TARGET="toolchain glsl-shaders" -PKG_SHORTDESC="Libretro common shaders from retropie" PKG_LONGDESC="Libretro common shaders from retropie" +LINUX="Libretro common shaders from retropie" PKG_TOOLCHAIN="manual" make_target() { diff --git a/packages/emulators/libretro/sameboy-lr/package.mk b/packages/emulators/libretro/sameboy-lr/package.mk index b235db539..cce77b5c8 100644 --- a/packages/emulators/libretro/sameboy-lr/package.mk +++ b/packages/emulators/libretro/sameboy-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="MIT" PKG_SITE="https://git.libretro.com/libretro/sameboy-upstream" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/sameboy-upstream-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain util-linux:host" -PKG_SHORTDESC="Gameboy and Gameboy Color emulator written in C" PKG_LONGDESC="Gameboy and Gameboy Color emulator written in C" +LINUX="Gameboy and Gameboy Color emulator written in C" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/sameduck-lr/package.mk b/packages/emulators/libretro/sameduck-lr/package.mk index 5fa64ab35..0611c2097 100644 --- a/packages/emulators/libretro/sameduck-lr/package.mk +++ b/packages/emulators/libretro/sameduck-lr/package.mk @@ -26,8 +26,8 @@ PKG_SITE="https://github.com/LIJI32/SameBoy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="SameDuck" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Mega Duck/Cougar Boy emulator written in C" PKG_LONGDESC="Mega Duck/Cougar Boy emulator written in C" +LINUX="Mega Duck/Cougar Boy emulator written in C" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index 693c59a5f..239358685 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/scummvm" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="ScummVM with libretro backend." -PKG_LONGDESC="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." +PKG_LONGDESC="ScummVM with libretro backend." +LINUX="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 6ded7cc31..56c4ab500 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/slang-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Common SLANG shaders for RetroArch" PKG_LONGDESC="Common SLANG shaders for RetroArch" +LINUX="Common SLANG shaders for RetroArch" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/smsplus-gx-lr/package.mk b/packages/emulators/libretro/smsplus-gx-lr/package.mk index bcef5dfcd..509ce5b9d 100644 --- a/packages/emulators/libretro/smsplus-gx-lr/package.mk +++ b/packages/emulators/libretro/smsplus-gx-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/smsplus-gx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="SMS Plus GX is an enhanced version" -PKG_LONGDESC="SMS Plus is an open-source Sega Master System and Game Gear emulator written by Charles MacDonald." +PKG_LONGDESC="SMS Plus GX is an enhanced version" +LINUX="SMS Plus is an open-source Sega Master System and Game Gear emulator written by Charles MacDonald." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x-lr/package.mk b/packages/emulators/libretro/snes9x-lr/package.mk index 286c6517f..bf16d5a47 100644 --- a/packages/emulators/libretro/snes9x-lr/package.mk +++ b/packages/emulators/libretro/snes9x-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" PKG_LONGDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" +LINUX="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x2002-lr/package.mk b/packages/emulators/libretro/snes9x2002-lr/package.mk index fca2ee360..3e29dc89d 100644 --- a/packages/emulators/libretro/snes9x2002-lr/package.mk +++ b/packages/emulators/libretro/snes9x2002-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2002" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Snes9x 2002." -PKG_LONGDESC="Snes9x 2002. Port of SNES9x 1.39 for libretro (was previously called PocketSNES). Heavily optimized for ARM." +PKG_LONGDESC="Snes9x 2002." +LINUX="Snes9x 2002. Port of SNES9x 1.39 for libretro (was previously called PocketSNES). Heavily optimized for ARM." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk index 1bd5a817a..0db105048 100644 --- a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk +++ b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2005" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Snes9x 2005 Plus." -PKG_LONGDESC="Snes9x 2005 Plus. Port of SNES9x 1.43 for libretro (was previously called CAT SFC) with enabled BLARRG APU." +PKG_LONGDESC="Snes9x 2005 Plus." +LINUX="Snes9x 2005 Plus. Port of SNES9x 1.43 for libretro (was previously called CAT SFC) with enabled BLARRG APU." PKG_TOOLCHAIN="make" PKG_MAKE_OPTS_TARGET="USE_BLARGG_APU=1 platform=armv8-hardfloat-neon" diff --git a/packages/emulators/libretro/snes9x2010-lr/package.mk b/packages/emulators/libretro/snes9x2010-lr/package.mk index 5bea6f677..71eab9282 100644 --- a/packages/emulators/libretro/snes9x2010-lr/package.mk +++ b/packages/emulators/libretro/snes9x2010-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/snes9x2010" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Snes9x 2010." -PKG_LONGDESC="Snes9x 2010. Port of Snes9x 1.52+ to Libretro (previously called SNES9x Next). Rewritten in C and several optimizations and speedhacks." +PKG_LONGDESC="Snes9x 2010." +LINUX="Snes9x 2010. Port of Snes9x 1.52+ to Libretro (previously called SNES9x Next). Rewritten in C and several optimizations and speedhacks." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/stella-lr/package.mk b/packages/emulators/libretro/stella-lr/package.mk index f4d6b873c..db293c770 100644 --- a/packages/emulators/libretro/stella-lr/package.mk +++ b/packages/emulators/libretro/stella-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL2" PKG_SITE="https://github.com/stella-emu/stella" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of Stella to libretro." -PKG_LONGDESC="Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL)." +PKG_LONGDESC="Port of Stella to libretro." +LINUX="Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL)." PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/swanstation-lr/package.mk b/packages/emulators/libretro/swanstation-lr/package.mk index f66b1d339..45bcede0c 100644 --- a/packages/emulators/libretro/swanstation-lr/package.mk +++ b/packages/emulators/libretro/swanstation-lr/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/swanstation" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" -PKG_SHORTDESC="SwanStation - PlayStation 1, aka. PSX Emulator" +PKG_LONGDESC="SwanStation - PlayStation 1, aka. PSX Emulator" PKG_TOOLCHAIN="cmake" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/tgbdual-lr/package.mk b/packages/emulators/libretro/tgbdual-lr/package.mk index 54792b185..972ee5f2e 100644 --- a/packages/emulators/libretro/tgbdual-lr/package.mk +++ b/packages/emulators/libretro/tgbdual-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tgbdual-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro port of TGB Dual" -PKG_LONGDESC="TGB Dual is an open source (GPLv2) GB/GBC emulator with game link cable support." +PKG_LONGDESC="libretro port of TGB Dual" +LINUX="TGB Dual is an open source (GPLv2) GB/GBC emulator with game link cable support." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index 1355d1281..f3ebd13b5 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/tyrquake" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro port of Tyrquake (Quake 1 engine)" PKG_LONGDESC="Libretro port of Tyrquake (Quake 1 engine)" +LINUX="Libretro port of Tyrquake (Quake 1 engine)" PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/uae4arm/package.mk b/packages/emulators/libretro/uae4arm/package.mk index 6ac897a3a..80f2a9013 100644 --- a/packages/emulators/libretro/uae4arm/package.mk +++ b/packages/emulators/libretro/uae4arm/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/Chips-fr/uae4arm-rpi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain flac mpg123" -PKG_SHORTDESC="Port of uae4arm for libretro (rpi/android)" -PKG_LONGDESC="Port of uae4arm for libretro (rpi/android) " +PKG_LONGDESC="Port of uae4arm for libretro (rpi/android)" +LINUX="Port of uae4arm for libretro (rpi/android) " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/uzem-lr/package.mk b/packages/emulators/libretro/uzem-lr/package.mk index 801bd324d..9f242f379 100644 --- a/packages/emulators/libretro/uzem-lr/package.mk +++ b/packages/emulators/libretro/uzem-lr/package.mk @@ -25,8 +25,8 @@ PKG_SITE="https://github.com/libretro/libretro-uzem" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_PATCH_DIRS="libretro" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A retro-minimalist game console engine for the ATMega644" PKG_LONGDESC="A retro-minimalist game console engine for the ATMega644" +LINUX="A retro-minimalist game console engine for the ATMega644" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vba-next-lr/package.mk b/packages/emulators/libretro/vba-next-lr/package.mk index f46dca171..dbbb39792 100644 --- a/packages/emulators/libretro/vba-next-lr/package.mk +++ b/packages/emulators/libretro/vba-next-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/vba-next" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Optimized port of VBA-M to Libretro." -PKG_LONGDESC="Optimized port of VBA-M to Libretro. " +PKG_LONGDESC="Optimized port of VBA-M to Libretro." +LINUX="Optimized port of VBA-M to Libretro. " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vbam-lr/package.mk b/packages/emulators/libretro/vbam-lr/package.mk index f67325717..cca7a9314 100644 --- a/packages/emulators/libretro/vbam-lr/package.mk +++ b/packages/emulators/libretro/vbam-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vbam-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="A fork of VBA-M with libretro integration" -PKG_LONGDESC="VBA-M is a [Super] Game Boy [Color / Advance] emulator for Windows, Linux & Mac." +PKG_LONGDESC="A fork of VBA-M with libretro integration" +LINUX="VBA-M is a [Super] Game Boy [Color / Advance] emulator for Windows, Linux & Mac." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/vecx-lr/package.mk b/packages/emulators/libretro/vecx-lr/package.mk index 90eabfe97..7c80fabfe 100644 --- a/packages/emulators/libretro/vecx-lr/package.mk +++ b/packages/emulators/libretro/vecx-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv2|LGPLv2.1" PKG_SITE="https://github.com/libretro/libretro-vecx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="libretro adaptation of vecx" PKG_LONGDESC="libretro adaptation of vecx" +LINUX="libretro adaptation of vecx" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vice-lr/package.mk b/packages/emulators/libretro/vice-lr/package.mk index 5ad9deee6..a30001bf9 100644 --- a/packages/emulators/libretro/vice-lr/package.mk +++ b/packages/emulators/libretro/vice-lr/package.mk @@ -26,8 +26,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vice-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Versatile Commodore 8-bit Emulator version 3.0" PKG_LONGDESC="Versatile Commodore 8-bit Emulator version 3.0" +LINUX="Versatile Commodore 8-bit Emulator version 3.0" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/virtualjaguar-lr/package.mk b/packages/emulators/libretro/virtualjaguar-lr/package.mk index 238310cdb..fde3666b3 100644 --- a/packages/emulators/libretro/virtualjaguar-lr/package.mk +++ b/packages/emulators/libretro/virtualjaguar-lr/package.mk @@ -24,8 +24,8 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/virtualjaguar-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of Virtual Jaguar to Libretro" PKG_LONGDESC="Port of Virtual Jaguar to Libretro" +LINUX="Port of Virtual Jaguar to Libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vitaquake2-lr/package.mk b/packages/emulators/libretro/vitaquake2-lr/package.mk index 6a96ce830..31bfe977f 100644 --- a/packages/emulators/libretro/vitaquake2-lr/package.mk +++ b/packages/emulators/libretro/vitaquake2-lr/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vitaquake2" PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro port of VitaQuakeII (Quake 2 engine)" +PKG_LONGDESC="Libretro port of VitaQuakeII (Quake 2 engine)" if [ "${OPENGL_SUPPORT}" = "yes" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL}" diff --git a/packages/emulators/libretro/xmil-lr/package.mk b/packages/emulators/libretro/xmil-lr/package.mk index 49b33e381..b96c53a6a 100644 --- a/packages/emulators/libretro/xmil-lr/package.mk +++ b/packages/emulators/libretro/xmil-lr/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="Unknown" PKG_SITE="https://github.com/r-type/xmil-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Libretro port of X Millennium Sharp X1 emulator" PKG_LONGDESC="Libretro port of X Millennium Sharp X1 emulator" +LINUX="Libretro port of X Millennium Sharp X1 emulator" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/yabasanshiro-lr/package.mk b/packages/emulators/libretro/yabasanshiro-lr/package.mk index a5971e59b..f5b8138e2 100644 --- a/packages/emulators/libretro/yabasanshiro-lr/package.mk +++ b/packages/emulators/libretro/yabasanshiro-lr/package.mk @@ -25,8 +25,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/yabause" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Port of YabaSanshiro to libretro." PKG_LONGDESC="Port of YabaSanshiro to libretro." +LINUX="Port of YabaSanshiro to libretro." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/standalone/duckstation-sa/package.mk b/packages/emulators/standalone/duckstation-sa/package.mk index 14e3c7a4e..c98dbb761 100644 --- a/packages/emulators/standalone/duckstation-sa/package.mk +++ b/packages/emulators/standalone/duckstation-sa/package.mk @@ -6,7 +6,7 @@ PKG_LICENSE="GPLv3" PKG_DEPENDS_TARGET="toolchain SDL2 nasm:host pulseaudio openssl libidn2 nghttp2 zlib curl libevdev ecm" PKG_SITE="https://github.com/stenzek/duckstation" PKG_URL="${PKG_SITE}.git" -PKG_SHORTDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 " +PKG_LONGDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 " PKG_TOOLCHAIN="cmake" case ${TARGET_ARCH} in diff --git a/packages/emulators/standalone/gzdoom-sa/zmusic/package.mk b/packages/emulators/standalone/gzdoom-sa/zmusic/package.mk index cc2c66eb5..6f09fa37c 100644 --- a/packages/emulators/standalone/gzdoom-sa/zmusic/package.mk +++ b/packages/emulators/standalone/gzdoom-sa/zmusic/package.mk @@ -9,7 +9,7 @@ PKG_SITE="https://github.com/coelckers/ZMusic" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_HOST="toolchain" PKG_DEPENDS_TARGET="toolchain zmusic:host" -PKG_SHORTDESC="GZDoom's music system as a standalone library" +PKG_LONGDESC="GZDoom's music system as a standalone library" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="cmake-make" diff --git a/packages/emulators/standalone/minivmacsa/package.mk b/packages/emulators/standalone/minivmacsa/package.mk index 291a52245..d0100d275 100644 --- a/packages/emulators/standalone/minivmacsa/package.mk +++ b/packages/emulators/standalone/minivmacsa/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://www.gryphel.com/c/minivmac/" PKG_URL="https://www.gryphel.com/d/minivmac/minivmac-${PKG_VERSION}/minivmac-${PKG_VERSION}.src.tgz" PKG_DEPENDS_TARGET="toolchain libX11" -PKG_SHORTDESC="Virtual Macintosh Plus" +PKG_LONGDESC="Virtual Macintosh Plus" PKG_TOOLCHAIN="make" pre_make_target() { diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk index 333731af0..e2330d441 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-audio-sdl" PKG_URL="https://github.com/mupen64plus/mupen64plus-audio-sdl/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-audio-sdl" +PKG_LONGDESC="mupen64plus-audio-sdl" PKG_LONGDESC="Mupen64Plus Standalone Audio SDL" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/package.mk index 863c75dc2..acede9db8 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/package.mk @@ -10,7 +10,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-core" PKG_URL="https://github.com/mupen64plus/mupen64plus-core/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain boost libpng SDL2 SDL2_net zlib freetype nasm:host" -PKG_SHORTDESC="mupen64plus" +PKG_LONGDESC="mupen64plus" PKG_LONGDESC="Mupen64Plus Standalone" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/package.mk index 7b19c5f9f..2568f215d 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-input-sdl" PKG_URL="https://github.com/mupen64plus/mupen64plus-input-sdl/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-input-sdl" +PKG_LONGDESC="mupen64plus-input-sdl" PKG_LONGDESC="Mupen64Plus Standalone Input SDL" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-cxd4/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-cxd4/package.mk index c48adb8c0..4dfaa364e 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-cxd4/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-cxd4/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-rsp-cxd4" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-rsp-cxd4" +PKG_LONGDESC="mupen64plus-rsp-cxd4" PKG_LONGDESC="Mupen64Plus Standalone RSP CXD4" PKG_TOOLCHAIN="manual" PKG_BUILD_FLAGS="-fpic" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-hle/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-hle/package.mk index 46611c382..5e9458aaa 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-hle/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-rsp-hle/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-rsp-hle" PKG_URL="https://github.com/mupen64plus/mupen64plus-rsp-hle/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-rsp-hle" +PKG_LONGDESC="mupen64plus-rsp-hle" PKG_LONGDESC="Mupen64Plus Standalone RSP HLE" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-simplecore/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-simplecore/package.mk index 3f6cbfc16..624801184 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-simplecore/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-simplecore/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/simple64/mupen64plus-core" PKG_URL="https://github.com/simple64/mupen64plus-core/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain boost libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="simple64" +PKG_LONGDESC="simple64" PKG_LONGDESC="Simple64's core" PKG_TOOLCHAIN="manual" PKG_GIT_CLONE_BRANCH="simple64" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-ui-console/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-ui-console/package.mk index e13545cf6..e37091c16 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-ui-console/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-ui-console/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-ui-console" PKG_URL="https://github.com/mupen64plus/mupen64plus-ui-console/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-ui-console" +PKG_LONGDESC="mupen64plus-ui-console" PKG_LONGDESC="Mupen64Plus Standalone Console" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-glide64mk2/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-glide64mk2/package.mk index c96a5694a..eda79eaa3 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-glide64mk2/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-glide64mk2/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-video-glide64mk2" PKG_URL="https://github.com/mupen64plus/mupen64plus-video-glide64mk2/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain boost libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-video-glide64mk2" +PKG_LONGDESC="mupen64plus-video-glide64mk2" PKG_LONGDESC="Mupen64Plus Standalone Glide64 Video Driver" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-gliden64/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-gliden64/package.mk index 835d43110..db8cc5fbd 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-gliden64/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-gliden64/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/gonetz/GLideN64" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain boost libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-video-gliden64" +PKG_LONGDESC="mupen64plus-video-gliden64" PKG_LONGDESC="Mupen64Plus Standalone GLide64 Video Driver" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-rice/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-rice/package.mk index 0f4414e60..b4bd52c51 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-rice/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-video-rice/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/mupen64plus/mupen64plus-video-rice" PKG_URL="https://github.com/mupen64plus/mupen64plus-video-rice/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plus-sa-core" -PKG_SHORTDESC="mupen64plus-video-rice" +PKG_LONGDESC="mupen64plus-video-rice" PKG_LONGDESC="Mupen64Plus Standalone Rice Video Driver" PKG_TOOLCHAIN="manual" diff --git a/packages/emulators/standalone/openbor/package.mk b/packages/emulators/standalone/openbor/package.mk index a0255de85..2f5c3bfd6 100644 --- a/packages/emulators/standalone/openbor/package.mk +++ b/packages/emulators/standalone/openbor/package.mk @@ -8,8 +8,8 @@ PKG_VERSION="b8303cce992a0db93c3a465df3c943942fe322f8" PKG_SITE="https://github.com/DCurrent/openbor" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 libogg libvorbisidec libvpx libpng" -PKG_SHORTDESC="OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!" PKG_LONGDESC="OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!" +LINUX="OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/standalone/pico-8/package.mk b/packages/emulators/standalone/pico-8/package.mk index bd0856056..742b48a45 100644 --- a/packages/emulators/standalone/pico-8/package.mk +++ b/packages/emulators/standalone/pico-8/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain SDL2" -PKG_SHORTDESC="PICO-8 Fantasy Console" +PKG_LONGDESC="PICO-8 Fantasy Console" PKG_TOOLCHAIN="manual" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index a94213da7..08823ea2d 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -8,8 +8,8 @@ PKG_URL="${PKG_SITE}.git" PKG_VERSION="d479b74ed9c3e321bc3735da29bc125a2ac3b9b2" # 1.17.1 PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain ffmpeg libzip SDL2 zlib zip" -PKG_SHORTDESC="PPSSPPDL" -PKG_LONGDESC="PPSSPP Standalone" +PKG_LONGDESC="PPSSPPDL" +LINUX="PPSSPP Standalone" GET_HANDLER_SUPPORT="git" ### Note: diff --git a/packages/emulators/standalone/scummvmsa/package.mk b/packages/emulators/standalone/scummvmsa/package.mk index d57706b10..bdaaad492 100644 --- a/packages/emulators/standalone/scummvmsa/package.mk +++ b/packages/emulators/standalone/scummvmsa/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="GPL2" PKG_SITE="https://github.com/scummvm/scummvm" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_net freetype fluidsynth soundfont-generaluser pipewire" -PKG_SHORTDESC="Script Creation Utility for Maniac Mansion Virtual Machine" -PKG_LONGDESC="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." +PKG_LONGDESC="Script Creation Utility for Maniac Mansion Virtual Machine" +LINUX="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." pre_configure_target() { sed -i "s|sdl-config|sdl2-config|g" ${PKG_BUILD}/configure diff --git a/packages/emulators/standalone/vice-sa/package.mk b/packages/emulators/standalone/vice-sa/package.mk index bdd8da024..7b6cc3a85 100644 --- a/packages/emulators/standalone/vice-sa/package.mk +++ b/packages/emulators/standalone/vice-sa/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://sourceforge.net/projects/vice-emu" PKG_URL="${PKG_SITE}/files/releases/vice-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain xa:host SDL2 SDL2_image ncurses readline dos2unix:host" -PKG_SHORTDESC="Commodore 8-bit Emulator" PKG_LONGDESC="Commodore 8-bit Emulator" +LINUX="Commodore 8-bit Emulator" PKG_CONFIGURE_OPTS_TARGET+=" --disable-pdf-docs --enable-gtk3ui=no --without-alsa --with-pulse --enable-sdl2ui" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/graphics/SDL/SDL_net/package.mk b/packages/graphics/SDL/SDL_net/package.mk index 978d5ef6e..631166f4c 100644 --- a/packages/graphics/SDL/SDL_net/package.mk +++ b/packages/graphics/SDL/SDL_net/package.mk @@ -23,7 +23,7 @@ PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/${PKG_NAME}/archive/refs/tags/release-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL SDL_net:host" PKG_DEPENDS_HOST="SDL:host" -PKG_SHORTDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." PKG_LONGDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." +LINUX="This is a small sample cross-platform networking library, with a sample chat client and server application." PKG_USE_CMAKE="no" diff --git a/packages/graphics/SDL/package.mk b/packages/graphics/SDL/package.mk index b245b9560..a1035b63a 100644 --- a/packages/graphics/SDL/package.mk +++ b/packages/graphics/SDL/package.mk @@ -22,8 +22,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/SDL-1.2/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL:host" -PKG_SHORTDESC="SDL: A cross-platform Graphic API" -PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." +PKG_LONGDESC="SDL: A cross-platform Graphic API" +LINUX="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." PKG_USE_CMAKE="no" diff --git a/packages/graphics/SDL/yasm/package.mk b/packages/graphics/SDL/yasm/package.mk index 603f13984..cc9c350e9 100644 --- a/packages/graphics/SDL/yasm/package.mk +++ b/packages/graphics/SDL/yasm/package.mk @@ -23,8 +23,8 @@ PKG_LICENSE="BSD" PKG_SITE="http://www.tortall.net/projects/yasm/" PKG_URL="http://www.tortall.net/projects/yasm/releases/${PKG_NAME}-${PKG_VERSION}.tar.gz" PKG_DEPENDS_HOST="" -PKG_SHORTDESC="yasm: A complete rewrite of the NASM assembler" -PKG_LONGDESC="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." +PKG_LONGDESC="yasm: A complete rewrite of the NASM assembler" +LINUX="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." PKG_USE_CMAKE="no" diff --git a/packages/graphics/glew/package.mk b/packages/graphics/glew/package.mk index ca16bf64a..85da95d5f 100644 --- a/packages/graphics/glew/package.mk +++ b/packages/graphics/glew/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="BSD" PKG_SITE="http://glew.sourceforge.net/" PKG_URL="${SOURCEFORGE_SRC}/glew/glew/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tgz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="GLEW - The OpenGL Extension Wrangler Library" +PKG_LONGDESC="GLEW - The OpenGL Extension Wrangler Library" PKG_TOOLCHAIN="cmake" if [ "${DISPLAYSERVER}" = "wl" ]; then diff --git a/packages/graphics/glfw/package.mk b/packages/graphics/glfw/package.mk index 07bc69807..9328cb226 100644 --- a/packages/graphics/glfw/package.mk +++ b/packages/graphics/glfw/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="zlib" PKG_DEPENDS_TARGET="toolchain expat libdrm libxkbcommon libXrandr libXinerama libXcursor libXi Mako:host " PKG_SITE="https://github.com/glfw/glfw" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_SHORTDESC="GLFW graphics library for wayland & x11" +PKG_LONGDESC="GLFW graphics library for wayland & x11" PKG_TOOLCHAIN="cmake" pre_configure_target() { diff --git a/packages/hardware/quirks/package.mk b/packages/hardware/quirks/package.mk index 787a038b8..34180ee1d 100644 --- a/packages/hardware/quirks/package.mk +++ b/packages/hardware/quirks/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain autostart ioport ectool" -PKG_SHORTDESC="Quirks is a simple package that provides device quirks." +PKG_LONGDESC="Quirks is a simple package that provides device quirks." PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/lang/luajit/package.mk b/packages/lang/luajit/package.mk index 3d9149eb5..92558c21a 100644 --- a/packages/lang/luajit/package.mk +++ b/packages/lang/luajit/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/LuaJIT/LuaJIT" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain luajit:host" -PKG_SHORTDESC="LuaJIT is a Just-In-Time Compiler (JIT) for the Lua programming language. " +PKG_LONGDESC="LuaJIT is a Just-In-Time Compiler (JIT) for the Lua programming language. " GET_HANDLER_SUPPORT="git" PKG_GIT_CLONE_BRANCH="v2.1" PKG_TOOLCHAIN="manual" diff --git a/packages/misc/modules/package.mk b/packages/misc/modules/package.mk index 2cec8ddeb..f1014c7c5 100644 --- a/packages/misc/modules/package.mk +++ b/packages/misc/modules/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="custom" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain rclone" -PKG_SHORTDESC="OS Modules Package" PKG_LONGDESC="OS Modules Package" +LINUX="OS Modules Package" PKG_TOOLCHAIN="manual" ### diff --git a/packages/multimedia/libdvbpsi/package.mk b/packages/multimedia/libdvbpsi/package.mk index e06df4add..1a34b622e 100644 --- a/packages/multimedia/libdvbpsi/package.mk +++ b/packages/multimedia/libdvbpsi/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.videolan.org/developers/libdvbpsi.html" PKG_URL="http://download.videolan.org/pub/libdvbpsi/${PKG_VERSION}/libdvbpsi-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="library for MPEG TS and DVB PSI tables decoding and generating" -PKG_LONGDESC="libdvbpsi is a simple library designed for MPEG TS and DVB PSI tables decoding and generating." +PKG_LONGDESC="library for MPEG TS and DVB PSI tables decoding and generating" +LINUX="libdvbpsi is a simple library designed for MPEG TS and DVB PSI tables decoding and generating." PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" diff --git a/packages/multimedia/opusfile/package.mk b/packages/multimedia/opusfile/package.mk index 8dd7c44a8..3d058a077 100644 --- a/packages/multimedia/opusfile/package.mk +++ b/packages/multimedia/opusfile/package.mk @@ -23,7 +23,7 @@ PKG_VERSION="a55c164" PKG_SITE="https://github.com/xiph/opusfile" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain opus openssl" -PKG_SHORTDESC="Stand-alone decoder library for .opus streams" +PKG_LONGDESC="Stand-alone decoder library for .opus streams" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="configure" diff --git a/packages/multimedia/vlc/package.mk b/packages/multimedia/vlc/package.mk index d1da0489f..69f6ae2e1 100644 --- a/packages/multimedia/vlc/package.mk +++ b/packages/multimedia/vlc/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.videolan.org" PKG_URL="https://mirror.netcologne.de/videolan.org/${PKG_NAME}/${PKG_VERSION}/$PKG_NAME-${PKG_VERSION}.tar.xz" PKG_DEPENDS_TARGET="toolchain libdvbpsi gnutls ffmpeg libmpeg2 zlib flac libvorbis libxml2 pulseaudio SDL2 x264 x265 aom libogg" -PKG_SHORTDESC="VideoLAN multimedia player and streamer" -PKG_LONGDESC="VLC is the VideoLAN project's media player. It plays MPEG, MPEG2, MPEG4, DivX, MOV, WMV, QuickTime, mp3, Ogg/Vorbis files, DVDs, VCDs, and multimedia streams from various network sources." +PKG_LONGDESC="VideoLAN multimedia player and streamer" +LINUX="VLC is the VideoLAN project's media player. It plays MPEG, MPEG2, MPEG4, DivX, MOV, WMV, QuickTime, mp3, Ogg/Vorbis files, DVDs, VCDs, and multimedia streams from various network sources." pre_configure_target() { diff --git a/packages/network/rclone/package.mk b/packages/network/rclone/package.mk index 2bfcca733..c8a48507b 100644 --- a/packages/network/rclone/package.mk +++ b/packages/network/rclone/package.mk @@ -5,7 +5,7 @@ PKG_NAME="rclone" PKG_VERSION="1.65.0" PKG_DEPENDS_TARGET="toolchain fuse rsync" -PKG_SHORTDESC="rsync for cloud storage" +PKG_LONGDESC="rsync for cloud storage" PKG_TOOLCHAIN="manual" case ${ARCH} in diff --git a/packages/network/syncthing/package.mk b/packages/network/syncthing/package.mk index c6a4d4a88..2ab81c3cf 100644 --- a/packages/network/syncthing/package.mk +++ b/packages/network/syncthing/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="MPLv2" PKG_SITE="https://syncthing.net/" PKG_URL="https://github.com/syncthing/syncthing/releases/download/v${PKG_VERSION}/syncthing-source-v${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain go:host" -PKG_SHORTDESC="Syncthing: open source continuous file synchronization" -PKG_LONGDESC="Syncthing (${PKG_VERSION}) replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet." +PKG_LONGDESC="Syncthing: open source continuous file synchronization" +LINUX="Syncthing (${PKG_VERSION}) replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet." PKG_TOOLCHAIN="manual" configure_target() { diff --git a/packages/network/tailscale/package.mk b/packages/network/tailscale/package.mk index 451b141ff..f3d09df08 100644 --- a/packages/network/tailscale/package.mk +++ b/packages/network/tailscale/package.mk @@ -6,7 +6,7 @@ PKG_NAME="tailscale" PKG_VERSION="1.56.1" PKG_SITE="https://tailscale.com/" PKG_DEPENDS_TARGET="toolchain wireguard-tools" -PKG_SHORTDESC="Zero config VPN. Installs on any device in minutes, manages firewall rules for you, and works from anywhere." +PKG_LONGDESC="Zero config VPN. Installs on any device in minutes, manages firewall rules for you, and works from anywhere." PKG_TOOLCHAIN="manual" case ${TARGET_ARCH} in diff --git a/packages/network/zerotier-one/package.mk b/packages/network/zerotier-one/package.mk index d68087d53..7c8d05fb9 100644 --- a/packages/network/zerotier-one/package.mk +++ b/packages/network/zerotier-one/package.mk @@ -8,7 +8,7 @@ PKG_VERSION="1.12.2" PKG_SITE="https://www.zerotier.com" PKG_URL="https://github.com/zerotier/ZeroTierOne/archive/refs/tags/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nlohmann-json" -PKG_SHORTDESC="A Smart Ethernet Switch for Earth" +PKG_LONGDESC="A Smart Ethernet Switch for Earth" PKG_TOOLCHAIN="manual" diff --git a/packages/python/devel/pgi/package.mk b/packages/python/devel/pgi/package.mk index 0e66c66c9..8d834f8c6 100644 --- a/packages/python/devel/pgi/package.mk +++ b/packages/python/devel/pgi/package.mk @@ -8,8 +8,6 @@ PKG_LICENSE="LGPL" PKG_SITE="https://github.com/pygobject/pgi" PKG_URL="https://github.com/pygobject/pgi/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain Python3" -PKG_SECTION="python/devel" -PKG_SHORTDESC="PGI - Pure Python GObject Introspection Bindings" PKG_LONGDESC="GObject Introspection bindings written in pure Python using ctypes and cffi (optional). API compatible with PyGObject." PKG_TOOLCHAIN="manual" diff --git a/packages/rocknix/package.mk b/packages/rocknix/package.mk index 13efccabe..56fdd2fcd 100644 --- a/packages/rocknix/package.mk +++ b/packages/rocknix/package.mk @@ -7,8 +7,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="ROCKNIX Meta Package" PKG_LONGDESC="ROCKNIX Meta Package" +LINUX="ROCKNIX Meta Package" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/sysutils/autostart/package.mk b/packages/sysutils/autostart/package.mk index 02948025f..694601e74 100755 --- a/packages/sysutils/autostart/package.mk +++ b/packages/sysutils/autostart/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPLv2" PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain systemd" -PKG_SHORTDESC="Autostart is a systemd helper that starts/configures device specific services and parameters." +PKG_LONGDESC="Autostart is a systemd helper that starts/configures device specific services and parameters." PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/packages/sysutils/nvtop/package.mk b/packages/sysutils/nvtop/package.mk index 010935049..49fd8fbc2 100644 --- a/packages/sysutils/nvtop/package.mk +++ b/packages/sysutils/nvtop/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/Syllo/nvtop" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET=" libdrm mesa" -PKG_SHORTDESC="NVTOP stands for Neat Videocard TOP, a (h)top like task monitor for AMD, Intel and NVIDIA GPUs." +PKG_LONGDESC="NVTOP stands for Neat Videocard TOP, a (h)top like task monitor for AMD, Intel and NVIDIA GPUs." PKG_TOOLCHAIN="cmake" case ${TARGET_ARCH} in diff --git a/packages/textproc/textviewer/package.mk b/packages/textproc/textviewer/package.mk index beef4b4a8..989f5d0f7 100644 --- a/packages/textproc/textviewer/package.mk +++ b/packages/textproc/textviewer/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="MIT" PKG_SITE="https://github.com/ROCKNIX/TvTextViewer" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2" -PKG_SHORTDESC="Full-screen text viewer tool with gamepad controls" +PKG_LONGDESC="Full-screen text viewer tool with gamepad controls" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/tools/empty/package.mk b/packages/tools/empty/package.mk index 07271f4b5..1e94d73c5 100644 --- a/packages/tools/empty/package.mk +++ b/packages/tools/empty/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="GPL" PKG_SITE="http://empty.sourceforge.net/" PKG_DEPENDS_TARGET="toolchain linux" PKG_URL="http://downloads.sourceforge.net/sourceforge/${PKG_NAME}/${PKG_NAME}-${PKG_VERSION}.tgz" -PKG_SHORTDESC="Run applications under pseudo-terminal sessions" PKG_LONGDESC="Run applications under pseudo-terminal sessions" +LINUX="Run applications under pseudo-terminal sessions" make_target() { diff --git a/packages/tools/git/package.mk b/packages/tools/git/package.mk index a3cfdd956..1bea1d063 100644 --- a/packages/tools/git/package.mk +++ b/packages/tools/git/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="GPLv2" PKG_SITE="https://git-scm.com/" PKG_URL="https://mirrors.edge.kernel.org/pub/software/scm/git/git-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain openssl pcre curl libiconv zlib" -PKG_SHORTDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_LONGDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " +LINUX="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_CONFIGURE_OPTS_TARGET="ac_cv_fread_reads_directories=yes \ ac_cv_snprintf_returns_bogus=yes \ diff --git a/packages/tools/joyutils/package.mk b/packages/tools/joyutils/package.mk index a202a1b96..2a98d9c76 100644 --- a/packages/tools/joyutils/package.mk +++ b/packages/tools/joyutils/package.mk @@ -8,8 +8,8 @@ PKG_LICENSE="GPL" PKG_SITE="https://github.com/datrh/joyutils" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" PKG_LONGDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" +LINUX="jscal, jstest, and jsattach utilities for the Linux joystick driver" # post_unpack() { diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index bd42f5255..d378aea33 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -10,7 +10,7 @@ PKG_SITE="https://github.com/ROCKNIX/emulationstation" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="boost toolchain SDL2 freetype curl freeimage bash rapidjson SDL2_mixer fping p7zip alsa vlc drm_tool pugixml" PKG_NEED_UNPACK="busybox" -PKG_SHORTDESC="Emulationstation emulator frontend" +PKG_LONGDESC="Emulationstation emulator frontend" PKG_BUILD_FLAGS="-gold" GET_HANDLER_SUPPORT="git" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/ui/themes/es-theme-art-book-next/package.mk b/packages/ui/themes/es-theme-art-book-next/package.mk index c8cbf2cef..f81176731 100644 --- a/packages/ui/themes/es-theme-art-book-next/package.mk +++ b/packages/ui/themes/es-theme-art-book-next/package.mk @@ -9,8 +9,8 @@ PKG_LICENSE="CUSTOM" PKG_SITE="https://github.com/anthonycaccese/art-book-next-jelos" PKG_URL="${PKG_SITE}.git" GET_HANDLER_SUPPORT="git" -PKG_SHORTDESC="Art Book Next" PKG_LONGDESC="Art Book Next" +LINUX="Art Book Next" PKG_TOOLCHAIN="manual" makeinstall_target() { diff --git a/projects/Amlogic/packages/amlogic-boot-fip/package.mk b/projects/Amlogic/packages/amlogic-boot-fip/package.mk index 97a004e08..236577cdb 100644 --- a/projects/Amlogic/packages/amlogic-boot-fip/package.mk +++ b/projects/Amlogic/packages/amlogic-boot-fip/package.mk @@ -7,5 +7,5 @@ PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/LibreELEC/amlogic-boot-fip" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" -PKG_SHORTDESC="Firmware Image Pacakge (FIP) sources used to sign Amlogic u-boot binaries" +PKG_LONGDESC="Firmware Image Pacakge (FIP) sources used to sign Amlogic u-boot binaries" PKG_TOOLCHAIN="manual" From 5f5d206404fa96267602741e0d295574796b8cbe Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 17:59:13 +0000 Subject: [PATCH 014/184] Clean up unused package variables --- packages/devel/gobject-introspection/package.mk | 1 - packages/emulators/libretro/2048-lr/package.mk | 1 - packages/emulators/libretro/81-lr/package.mk | 1 - packages/emulators/libretro/atari800-lr/package.mk | 1 - packages/emulators/libretro/beetle-gba-lr/package.mk | 1 - packages/emulators/libretro/beetle-lynx-lr/package.mk | 1 - packages/emulators/libretro/beetle-ngp-lr/package.mk | 1 - packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 1 - packages/emulators/libretro/beetle-pce-lr/package.mk | 1 - packages/emulators/libretro/beetle-pcfx-lr/package.mk | 1 - packages/emulators/libretro/beetle-supergrafx-lr/package.mk | 1 - packages/emulators/libretro/beetle-vb-lr/package.mk | 1 - packages/emulators/libretro/beetle-wswan-lr/package.mk | 1 - packages/emulators/libretro/bluemsx-lr/package.mk | 1 - packages/emulators/libretro/cap32-lr/package.mk | 1 - packages/emulators/libretro/common-shaders/package.mk | 1 - packages/emulators/libretro/crocods-lr/package.mk | 1 - packages/emulators/libretro/dosbox-lr/package.mk | 1 - packages/emulators/libretro/dosbox-pure-lr/package.mk | 1 - packages/emulators/libretro/dosbox-svn-lr/package.mk | 1 - packages/emulators/libretro/easyrpg-lr/package.mk | 1 - packages/emulators/libretro/fbalpha2019-lr/package.mk | 1 - packages/emulators/libretro/fbneo-lr/package.mk | 1 - packages/emulators/libretro/fceumm-lr/package.mk | 1 - packages/emulators/libretro/fmsx-lr/package.mk | 1 - packages/emulators/libretro/freechaf-lr/package.mk | 1 - packages/emulators/libretro/freeintv-lr/package.mk | 1 - packages/emulators/libretro/freej2me-lr/package.mk | 1 - packages/emulators/libretro/fuse-lr/package.mk | 1 - packages/emulators/libretro/gambatte-lr/package.mk | 1 - packages/emulators/libretro/gearboy-lr/package.mk | 1 - packages/emulators/libretro/gearcoleco-lr/package.mk | 1 - packages/emulators/libretro/gearsystem-lr/package.mk | 1 - packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 1 - packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk | 1 - packages/emulators/libretro/glsl-shaders/package.mk | 1 - packages/emulators/libretro/gw-lr/package.mk | 1 - packages/emulators/libretro/handy-lr/package.mk | 1 - packages/emulators/libretro/hatari-lr/package.mk | 1 - packages/emulators/libretro/libretro-database/package.mk | 1 - packages/emulators/libretro/mame2003-lr/package.mk | 1 - packages/emulators/libretro/mame2003-midway-lr/package.mk | 1 - packages/emulators/libretro/mame2003-plus-lr/package.mk | 1 - packages/emulators/libretro/mame2010-lr/package.mk | 1 - packages/emulators/libretro/mgba-lr/package.mk | 1 - packages/emulators/libretro/mu-lr/package.mk | 1 - packages/emulators/libretro/mupen64plus-lr/package.mk | 1 - packages/emulators/libretro/mupen64plus-nx-lr/package.mk | 1 - packages/emulators/libretro/neocd_lr/package.mk | 1 - packages/emulators/libretro/nestopia-lr/package.mk | 1 - packages/emulators/libretro/o2em-lr/package.mk | 1 - packages/emulators/libretro/opera-lr/package.mk | 1 - packages/emulators/libretro/picodrive-lr/package.mk | 1 - packages/emulators/libretro/pokemini-lr/package.mk | 1 - packages/emulators/libretro/potator-lr/package.mk | 1 - packages/emulators/libretro/prosystem-lr/package.mk | 1 - packages/emulators/libretro/puae-lr/package.mk | 1 - packages/emulators/libretro/puae2021-lr/package.mk | 1 - packages/emulators/libretro/px68k-lr/package.mk | 1 - packages/emulators/libretro/quasi88-lr/package.mk | 1 - packages/emulators/libretro/quicknes-lr/package.mk | 1 - packages/emulators/libretro/race-lr/package.mk | 1 - packages/emulators/libretro/retropie-shaders/package.mk | 1 - packages/emulators/libretro/sameboy-lr/package.mk | 1 - packages/emulators/libretro/sameduck-lr/package.mk | 1 - packages/emulators/libretro/scummvm-lr/package.mk | 1 - packages/emulators/libretro/slang-shaders/package.mk | 1 - packages/emulators/libretro/smsplus-gx-lr/package.mk | 1 - packages/emulators/libretro/snes9x-lr/package.mk | 1 - packages/emulators/libretro/snes9x2002-lr/package.mk | 1 - packages/emulators/libretro/snes9x2005_plus-lr/package.mk | 1 - packages/emulators/libretro/snes9x2010-lr/package.mk | 1 - packages/emulators/libretro/stella-lr/package.mk | 1 - packages/emulators/libretro/tgbdual-lr/package.mk | 1 - packages/emulators/libretro/tyrquake-lr/package.mk | 1 - packages/emulators/libretro/uae4arm/package.mk | 1 - packages/emulators/libretro/uzem-lr/package.mk | 1 - packages/emulators/libretro/vba-next-lr/package.mk | 1 - packages/emulators/libretro/vbam-lr/package.mk | 1 - packages/emulators/libretro/vecx-lr/package.mk | 1 - packages/emulators/libretro/vice-lr/package.mk | 1 - packages/emulators/libretro/virtualjaguar-lr/package.mk | 1 - packages/emulators/libretro/xmil-lr/package.mk | 1 - packages/emulators/libretro/yabasanshiro-lr/package.mk | 1 - packages/emulators/standalone/openbor/package.mk | 1 - packages/emulators/standalone/ppsspp-sa/package.mk | 1 - packages/emulators/standalone/scummvmsa/package.mk | 1 - packages/emulators/standalone/vice-sa/package.mk | 1 - packages/graphics/SDL/SDL_net/package.mk | 1 - packages/graphics/SDL/package.mk | 1 - packages/graphics/SDL/yasm/package.mk | 1 - packages/misc/modules/package.mk | 1 - packages/multimedia/libdvbpsi/package.mk | 1 - packages/multimedia/vlc/package.mk | 1 - packages/network/syncthing/package.mk | 1 - packages/rocknix/package.mk | 1 - packages/tools/empty/package.mk | 1 - packages/tools/git/package.mk | 1 - packages/tools/joyutils/package.mk | 1 - packages/ui/themes/es-theme-art-book-next/package.mk | 1 - 100 files changed, 100 deletions(-) diff --git a/packages/devel/gobject-introspection/package.mk b/packages/devel/gobject-introspection/package.mk index ed67741a1..c1b01d879 100644 --- a/packages/devel/gobject-introspection/package.mk +++ b/packages/devel/gobject-introspection/package.mk @@ -11,7 +11,6 @@ PKG_URL="https://github.com/GNOME/${PKG_NAME}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libffi glib Python3 qemu:host gobject-introspection:host" PKG_DEPENDS_HOST="libffi:host glib:host" PKG_LONGDESC="glib: C support library" -LINUX="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things." PKG_TOOLCHAIN="meson" pre_configure_host() { diff --git a/packages/emulators/libretro/2048-lr/package.mk b/packages/emulators/libretro/2048-lr/package.mk index 495154b23..6a3f99cff 100644 --- a/packages/emulators/libretro/2048-lr/package.mk +++ b/packages/emulators/libretro/2048-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-2048" PKG_URL="https://github.com/libretro/libretro-2048/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of 2048 puzzle game to the libretro API." -LINUX="Port of 2048 puzzle game to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/81-lr/package.mk b/packages/emulators/libretro/81-lr/package.mk index d347f0440..8d06a6721 100644 --- a/packages/emulators/libretro/81-lr/package.mk +++ b/packages/emulators/libretro/81-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/81-libretro" PKG_URL="https://github.com/libretro/81-libretro/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A port of the EightyOne ZX81 Emulator to libretro" -LINUX="A port of the EightyOne ZX81 Emulator to libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/atari800-lr/package.mk b/packages/emulators/libretro/atari800-lr/package.mk index 35fdd969c..65b6b2660 100644 --- a/packages/emulators/libretro/atari800-lr/package.mk +++ b/packages/emulators/libretro/atari800-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-atari800" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="atari800 3.1.0 for libretro/libco WIP" -LINUX="atari800 3.1.0 for libretro/libco WIP" PKG_TOOLCHAIN="auto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/beetle-gba-lr/package.mk b/packages/emulators/libretro/beetle-gba-lr/package.mk index 423d5b838..8266d1a92 100644 --- a/packages/emulators/libretro/beetle-gba-lr/package.mk +++ b/packages/emulators/libretro/beetle-gba-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-gba-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" -LINUX="libretro implementation of Mednafen VBA/GBA. (Game Boy Advance)" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-lynx-lr/package.mk b/packages/emulators/libretro/beetle-lynx-lr/package.mk index bab09a449..dd82fa7b6 100644 --- a/packages/emulators/libretro/beetle-lynx-lr/package.mk +++ b/packages/emulators/libretro/beetle-lynx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-lynx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen Lynx" -LINUX="libretro implementation of Mednafen Lynx" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-ngp-lr/package.mk b/packages/emulators/libretro/beetle-ngp-lr/package.mk index 1cfef2d82..dc5ed4150 100644 --- a/packages/emulators/libretro/beetle-ngp-lr/package.mk +++ b/packages/emulators/libretro/beetle-ngp-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-ngp-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen Neo Geo Pocket." -LINUX="libretro implementation of Mednafen Neo Geo Pocket." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index c410069d8..f8d7de1c9 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." -LINUX="Standalone port of Mednafen PCE Fast to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index bf581122d..6154c4e43 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-pce-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Standalone port of Mednafen PCE to libretro." -LINUX="Standalone port of Mednafen PCE to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-pcfx-lr/package.mk b/packages/emulators/libretro/beetle-pcfx-lr/package.mk index e0f4df9be..2149ccf9d 100644 --- a/packages/emulators/libretro/beetle-pcfx-lr/package.mk +++ b/packages/emulators/libretro/beetle-pcfx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-pcfx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen PC-FX." -LINUX="libretro implementation of Mednafen PC-FX." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk index 4cd2b747d..c047dc789 100644 --- a/packages/emulators/libretro/beetle-supergrafx-lr/package.mk +++ b/packages/emulators/libretro/beetle-supergrafx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-supergrafx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Standalone port of Mednafen PCE Fast to libretro." -LINUX="Standalone port of Mednafen PCE Fast to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-vb-lr/package.mk b/packages/emulators/libretro/beetle-vb-lr/package.mk index e2c7ebe5a..339f184b1 100644 --- a/packages/emulators/libretro/beetle-vb-lr/package.mk +++ b/packages/emulators/libretro/beetle-vb-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-vb-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen VB. (VirtualBoy)" -LINUX="libretro implementation of Mednafen VB. (VirtualBoy)" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/beetle-wswan-lr/package.mk b/packages/emulators/libretro/beetle-wswan-lr/package.mk index 4cca564bf..2c7c50025 100644 --- a/packages/emulators/libretro/beetle-wswan-lr/package.mk +++ b/packages/emulators/libretro/beetle-wswan-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/beetle-wswan-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of Mednafen wswan" -LINUX="libretro implementation of Mednafen wswan" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/bluemsx-lr/package.mk b/packages/emulators/libretro/bluemsx-lr/package.mk index 0ced20995..a557f86ef 100644 --- a/packages/emulators/libretro/bluemsx-lr/package.mk +++ b/packages/emulators/libretro/bluemsx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/blueMSX-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of blueMSX to the libretro API." -LINUX="Port of blueMSX to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/cap32-lr/package.mk b/packages/emulators/libretro/cap32-lr/package.mk index 924d31681..65a5bc49e 100644 --- a/packages/emulators/libretro/cap32-lr/package.mk +++ b/packages/emulators/libretro/cap32-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-cap32" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="caprice32 4.2.0 libretro" -LINUX="caprice32 4.2.0 libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/common-shaders/package.mk b/packages/emulators/libretro/common-shaders/package.mk index 324b4c97f..da739dca4 100644 --- a/packages/emulators/libretro/common-shaders/package.mk +++ b/packages/emulators/libretro/common-shaders/package.mk @@ -28,7 +28,6 @@ PKG_SITE="https://github.com/libretro/common-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Libretro common shaders" -LINUX="Libretro common shaders" make_target() { : diff --git a/packages/emulators/libretro/crocods-lr/package.mk b/packages/emulators/libretro/crocods-lr/package.mk index 8b00bca1e..d0ce63138 100644 --- a/packages/emulators/libretro/crocods-lr/package.mk +++ b/packages/emulators/libretro/crocods-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-crocods" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Amstrad CPC emulator" -LINUX="Amstrad CPC emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk index 30169a570..abfc1ae54 100644 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ b/packages/emulators/libretro/dosbox-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/dosbox-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro wrapper for the DOSBox emulator" -LINUX="An open source DOS emulator for BeOS, Linux, Mac OS X, OS/2, and Windows. Primarily focuses on running DOS Games." PKG_BUILD_FLAGS="-lto" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/dosbox-pure-lr/package.mk b/packages/emulators/libretro/dosbox-pure-lr/package.mk index c282886ee..0d8158e76 100644 --- a/packages/emulators/libretro/dosbox-pure-lr/package.mk +++ b/packages/emulators/libretro/dosbox-pure-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/schellingb/dosbox-pure" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A port of DOSBox to libretro" -LINUX="A port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/dosbox-svn-lr/package.mk b/packages/emulators/libretro/dosbox-svn-lr/package.mk index 1bcb7c6be..ebe538e93 100644 --- a/packages/emulators/libretro/dosbox-svn-lr/package.mk +++ b/packages/emulators/libretro/dosbox-svn-lr/package.mk @@ -27,7 +27,6 @@ PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="libretro" PKG_DEPENDS_TARGET="toolchain SDL SDL_net retroarch" PKG_LONGDESC="Upstream port of DOSBox to libretro" -LINUX="Upstream port of DOSBox to libretro" GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="-lto" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/easyrpg-lr/package.mk b/packages/emulators/libretro/easyrpg-lr/package.mk index 18e96bdf6..1df8d6cf7 100644 --- a/packages/emulators/libretro/easyrpg-lr/package.mk +++ b/packages/emulators/libretro/easyrpg-lr/package.mk @@ -27,7 +27,6 @@ PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="0-8-0-stable" PKG_DEPENDS_TARGET="toolchain zlib libfmt liblcf icu pixman libspeexdsp mpg123 libsndfile libvorbis opusfile wildmidi libxmp-lite fluidsynth harfbuzz libpng retroarch" PKG_LONGDESC="An unofficial libretro port of the EasyRPG/Player." -LINUX="An unofficial libretro port of the EasyRPG/Player." GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="+pic" diff --git a/packages/emulators/libretro/fbalpha2019-lr/package.mk b/packages/emulators/libretro/fbalpha2019-lr/package.mk index 491ece6f3..d5297e321 100644 --- a/packages/emulators/libretro/fbalpha2019-lr/package.mk +++ b/packages/emulators/libretro/fbalpha2019-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/fbalpha" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of Final Burn Alpha to Libretro (v0.2.97.44)." -LINUX="Currently, FB Alpha supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware." PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/fbneo-lr/package.mk b/packages/emulators/libretro/fbneo-lr/package.mk index 69ca0f27d..eeba1f56b 100644 --- a/packages/emulators/libretro/fbneo-lr/package.mk +++ b/packages/emulators/libretro/fbneo-lr/package.mk @@ -10,7 +10,6 @@ PKG_SITE="https://github.com/libretro/FBNeo" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of Final Burn Neo to Libretro (v0.2.97.38)." -LINUX="Currently, FB neo supports games on Capcom CPS-1 and CPS-2 hardware, SNK Neo-Geo hardware, Toaplan hardware, Cave hardware, and various games on miscellaneous hardware. " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index d67b28458..3418d8c08 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-fceumm" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of FCEUmm / FCEUX to Libretro." -LINUX="FCEUX is a Nintendo Entertainment System (NES), Famicom, and Famicom Disk System (FDS) emulator." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/fmsx-lr/package.mk b/packages/emulators/libretro/fmsx-lr/package.mk index bcc01b8c0..c65e2136d 100644 --- a/packages/emulators/libretro/fmsx-lr/package.mk +++ b/packages/emulators/libretro/fmsx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/fmsx-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of fMSX 4.9 to the libretro API." -LINUX="Port of fMSX 4.9 to the libretro API." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/freechaf-lr/package.mk b/packages/emulators/libretro/freechaf-lr/package.mk index 3adbfa42d..b89d71c43 100644 --- a/packages/emulators/libretro/freechaf-lr/package.mk +++ b/packages/emulators/libretro/freechaf-lr/package.mk @@ -5,7 +5,6 @@ PKG_SITE="https://github.com/libretro/FreeChaF" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." -LINUX="FreeChaF is a libretro emulation core for the Fairchild ChannelF / Video Entertainment System designed to be compatible with joypads from the SNES era forward." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/freeintv-lr/package.mk b/packages/emulators/libretro/freeintv-lr/package.mk index 0b1b649be..08e240927 100644 --- a/packages/emulators/libretro/freeintv-lr/package.mk +++ b/packages/emulators/libretro/freeintv-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/FreeIntv" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="FreeIntv is a libretro emulation core for the Mattel Intellivision." -LINUX="FreeIntv is a libretro emulation core for the Mattel Intellivision." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/freej2me-lr/package.mk b/packages/emulators/libretro/freej2me-lr/package.mk index e21af27da..21fd78097 100644 --- a/packages/emulators/libretro/freej2me-lr/package.mk +++ b/packages/emulators/libretro/freej2me-lr/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://github.com/hex007/freej2me" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain apache-ant:host" PKG_LONGDESC="A free J2ME emulator with libretro, awt and sdl2 frontends." -LINUX="A free J2ME emulator with libretro, awt and sdl2 frontends." PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/fuse-lr/package.mk b/packages/emulators/libretro/fuse-lr/package.mk index e7a9b1091..580fe1002 100644 --- a/packages/emulators/libretro/fuse-lr/package.mk +++ b/packages/emulators/libretro/fuse-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/fuse-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A port of the Fuse Unix Spectrum Emulator to libretro " -LINUX="A port of the Fuse Unix Spectrum Emulator to libretro " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gambatte-lr/package.mk b/packages/emulators/libretro/gambatte-lr/package.mk index 2664b733f..049c130df 100644 --- a/packages/emulators/libretro/gambatte-lr/package.mk +++ b/packages/emulators/libretro/gambatte-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/gambatte-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro implementation of libgambatte" -LINUX="Gambatte is an open-source Game Boy Color emulator written for fun and made available in the hope that it will be useful." PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 059069c45..66aade851 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -21,7 +21,6 @@ PKG_SITE="https://github.com/drhelius/Gearboy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" -LINUX="Game Boy / Gameboy Color emulator for iOS, Mac, Raspberry Pi, Windows and Linux" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gearcoleco-lr/package.mk b/packages/emulators/libretro/gearcoleco-lr/package.mk index 002e2c5b0..46ad3f071 100644 --- a/packages/emulators/libretro/gearcoleco-lr/package.mk +++ b/packages/emulators/libretro/gearcoleco-lr/package.mk @@ -21,7 +21,6 @@ PKG_SITE="https://github.com/drhelius/Gearcoleco" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." -LINUX="Gearcoleco is a very accurate cross-platform ColecoVision emulator written in C++ that runs on Windows, macOS, Linux, BSD, Raspberry Pi and RetroArch." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gearsystem-lr/package.mk b/packages/emulators/libretro/gearsystem-lr/package.mk index d680fc41b..7dfd443e5 100644 --- a/packages/emulators/libretro/gearsystem-lr/package.mk +++ b/packages/emulators/libretro/gearsystem-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/drhelius/Gearsystem" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" -LINUX="Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator written in C++" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index 1842d6051..c94f9be57 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/Genesis-Plus-GX" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="An enhanced port of Genesis Plus for Gamecube/Wii" -LINUX="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk index d1d09c8e3..2403b43d5 100644 --- a/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-wide-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/Genesis-Plus-GX-Wide" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="An enhanced port of Genesis Plus for Gamecube/Wii" -LINUX="Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/glsl-shaders/package.mk b/packages/emulators/libretro/glsl-shaders/package.mk index 2535c93ab..34c225851 100644 --- a/packages/emulators/libretro/glsl-shaders/package.mk +++ b/packages/emulators/libretro/glsl-shaders/package.mk @@ -28,7 +28,6 @@ PKG_SITE="https://github.com/libretro/glsl-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Common GSLS shaders for RetroArch" -LINUX="Common GSLS shaders for RetroArch" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/gw-lr/package.mk b/packages/emulators/libretro/gw-lr/package.mk index ac99a0756..754771335 100644 --- a/packages/emulators/libretro/gw-lr/package.mk +++ b/packages/emulators/libretro/gw-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/gw-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A libretro core for Game & Watch simulators " -LINUX="A libretro core for Game & Watch simulators " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/handy-lr/package.mk b/packages/emulators/libretro/handy-lr/package.mk index 8b7590ef4..d981a7312 100644 --- a/packages/emulators/libretro/handy-lr/package.mk +++ b/packages/emulators/libretro/handy-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/libretro-handy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="K. Wilkins' Atari Lynx emulator Handy for libretro" -LINUX="Handy is an Atari Lynx Emulator for Windows 95/98/NT/2000. Handy was the original name of the Lynx project that was started at Epyx and then finished by Atari." PKG_TOOLCHAIN="make" case ${ARCH} in diff --git a/packages/emulators/libretro/hatari-lr/package.mk b/packages/emulators/libretro/hatari-lr/package.mk index 82d239028..35d21a3fc 100644 --- a/packages/emulators/libretro/hatari-lr/package.mk +++ b/packages/emulators/libretro/hatari-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/hatari" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain capsimg" PKG_LONGDESC="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." -LINUX="New rebasing of Hatari based on Mercurial upstream. Tries to be a shallow fork for easy upstreaming later on." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index 2f53513a5..a2d44b929 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/libretro-database" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Repository containing cheatcode files, content data files, etc." -LINUX="Repository containing cheatcode files, content data files, etc." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2003-lr/package.mk b/packages/emulators/libretro/mame2003-lr/package.mk index 5627c4a3c..7e095fbf1 100644 --- a/packages/emulators/libretro/mame2003-lr/package.mk +++ b/packages/emulators/libretro/mame2003-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/mame2003-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk index d68b3600d..983f5823d 100644 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ b/packages/emulators/libretro/mame2003-midway-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/mame2003_midway" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index 59d1d75ea..fe62d5b49 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/mame2003-plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" -LINUX="MAME - Multiple Arcade Machine Emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mame2010-lr/package.mk b/packages/emulators/libretro/mame2010-lr/package.mk index 4590720ba..66a2dc682 100644 --- a/packages/emulators/libretro/mame2010-lr/package.mk +++ b/packages/emulators/libretro/mame2010-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/mame2010-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." -LINUX="Late 2010 version of MAME (0.139) for libretro. Compatible with MAME 0.139 romsets." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mgba-lr/package.mk b/packages/emulators/libretro/mgba-lr/package.mk index 06074e6fe..699f8d8c0 100644 --- a/packages/emulators/libretro/mgba-lr/package.mk +++ b/packages/emulators/libretro/mgba-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/mgba" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="mGBA Game Boy Advance Emulator" -LINUX="mGBA is a new emulator for running Game Boy Advance games. It aims to be faster and more accurate than many existing Game Boy Advance emulators, as well as adding features that other emulators lack." PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mu-lr/package.mk b/packages/emulators/libretro/mu-lr/package.mk index 6522b7df7..3953573e4 100644 --- a/packages/emulators/libretro/mu-lr/package.mk +++ b/packages/emulators/libretro/mu-lr/package.mk @@ -9,7 +9,6 @@ PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/Mu-${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="buildbot" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="An emulator for the Palm m515 OS ported to libretro." -LINUX="An emulator for the Palm m515 OS ported to libretro. It is intended to avoid hacks like those used by the POSE emulator, where API calls are intercepted and replaced with those that don't use the actual hardware." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/mupen64plus-lr/package.mk b/packages/emulators/libretro/mupen64plus-lr/package.mk index c1ac4e102..269591ebe 100644 --- a/packages/emulators/libretro/mupen64plus-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/mupen64plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" PKG_LONGDESC="mupen64plus + RSP-HLE + GLideN64 + libretro" -LINUX="mupen64plus + RSP-HLE + GLideN64 + libretro" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" PKG_PATCH_DIRS+=" ${DEVICE}" diff --git a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk index afa5b49c3..2cbd6f5a8 100755 --- a/packages/emulators/libretro/mupen64plus-nx-lr/package.mk +++ b/packages/emulators/libretro/mupen64plus-nx-lr/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://github.com/libretro/mupen64plus-libretro-nx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain nasm:host" PKG_LONGDESC="mupen64plus NX" -LINUX="mupen64plus NX" PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/neocd_lr/package.mk b/packages/emulators/libretro/neocd_lr/package.mk index b681fcc21..b7cc5f098 100644 --- a/packages/emulators/libretro/neocd_lr/package.mk +++ b/packages/emulators/libretro/neocd_lr/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://github.com/libretro/neocd_libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain flac libogg libvorbis" PKG_LONGDESC="Neo Geo CD emulator for libretro " -LINUX="NeoCD-Libretro is a complete rewrite of NeoCD from scratch in modern C++11. It is designed with accuracy and portability in mind rather than being all about speed like the the older versions. The goal is also to document all I know about the platform in the source code so other emulator authors can make their own implementations." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index 4eb50d2b5..d67315fb7 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/nestopia" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Libretro implementation of NEStopia. (Nintendo Entertainment System)" -LINUX="This project is a fork of the original Nestopia source code, plus the Linux port. The purpose of the project is to enhance the original, and ensure it continues to work on modern operating systems." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/o2em-lr/package.mk b/packages/emulators/libretro/o2em-lr/package.mk index 4a6ca8877..e23b5f2b5 100644 --- a/packages/emulators/libretro/o2em-lr/package.mk +++ b/packages/emulators/libretro/o2em-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/libretro-o2em" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." -LINUX="Port of O2EM to the libretro API, an Odyssey 2 / VideoPac emulator." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/opera-lr/package.mk b/packages/emulators/libretro/opera-lr/package.mk index 5f1665086..b23ff1bff 100644 --- a/packages/emulators/libretro/opera-lr/package.mk +++ b/packages/emulators/libretro/opera-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/opera-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of 4DO/libfreedo to libretro." -LINUX="Port of 4DO/libfreedo to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/picodrive-lr/package.mk b/packages/emulators/libretro/picodrive-lr/package.mk index 28b128a82..5999bd010 100644 --- a/packages/emulators/libretro/picodrive-lr/package.mk +++ b/packages/emulators/libretro/picodrive-lr/package.mk @@ -5,7 +5,6 @@ PKG_SITE="https://github.com/libretro/picodrive" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Libretro implementation of PicoDrive. (Sega Megadrive/Genesis/Sega Master System/Sega GameGear/Sega CD/32X)" -LINUX="This is yet another Megadrive / Genesis / Sega CD / Mega CD / 32X / SMS emulator, which was written having ARM-based AMD64 devices in mind (such as smartphones and AMD64 consoles like GP2X and Pandora), but also runs on non-ARM little-endian hardware too." GET_HANDLER_SUPPORT="git" PKG_BUILD_FLAGS="-gold" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/pokemini-lr/package.mk b/packages/emulators/libretro/pokemini-lr/package.mk index 927653717..df7f38926 100644 --- a/packages/emulators/libretro/pokemini-lr/package.mk +++ b/packages/emulators/libretro/pokemini-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/pokemini" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" -LINUX="Obscure nintendo AMD64 emulator (functional,no color files or savestates currently)" PKG_TOOLCHAIN="make" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/packages/emulators/libretro/potator-lr/package.mk b/packages/emulators/libretro/potator-lr/package.mk index 5c0df5f5a..8ba2da624 100644 --- a/packages/emulators/libretro/potator-lr/package.mk +++ b/packages/emulators/libretro/potator-lr/package.mk @@ -5,7 +5,6 @@ PKG_SITE="https://github.com/libretro/potator" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A Watara Supervision Emulator based on Normmatt version." -LINUX="A Watara Supervision Emulator based on Normmatt version." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/prosystem-lr/package.mk b/packages/emulators/libretro/prosystem-lr/package.mk index 50501b260..6236969a6 100644 --- a/packages/emulators/libretro/prosystem-lr/package.mk +++ b/packages/emulators/libretro/prosystem-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/prosystem-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of ProSystem to libretro." -LINUX="Port of ProSystem to libretro." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/puae-lr/package.mk b/packages/emulators/libretro/puae-lr/package.mk index 2e1854a60..e140fabd3 100644 --- a/packages/emulators/libretro/puae-lr/package.mk +++ b/packages/emulators/libretro/puae-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="WIP libretro port of UAE (P-UAE and libco) Expect bugs" -LINUX="WIP libretro port of UAE (P-UAE and libco) Expect bugs" PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/puae2021-lr/package.mk b/packages/emulators/libretro/puae2021-lr/package.mk index 710a6cd00..2f1818a06 100644 --- a/packages/emulators/libretro/puae2021-lr/package.mk +++ b/packages/emulators/libretro/puae2021-lr/package.mk @@ -28,7 +28,6 @@ PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="2.6.1" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="PUAE 2021 libretro port of UAE" -LINUX="PUAE 2021 libretro port of UAE" PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/px68k-lr/package.mk b/packages/emulators/libretro/px68k-lr/package.mk index 55d4ec21a..a8ff60b4d 100644 --- a/packages/emulators/libretro/px68k-lr/package.mk +++ b/packages/emulators/libretro/px68k-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/px68k-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Portable SHARP X68000 Emulator for PSP, Android and other platforms" -LINUX="Portable SHARP X68000 Emulator for PSP, Android and other platforms" PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/quasi88-lr/package.mk b/packages/emulators/libretro/quasi88-lr/package.mk index 9ec67a8c0..e172499be 100644 --- a/packages/emulators/libretro/quasi88-lr/package.mk +++ b/packages/emulators/libretro/quasi88-lr/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://github.com/libretro/quasi88-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" -LINUX="A port of QUASI88, a PC-8800 series emulator by Showzoh Fukunaga, to the libretro API" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/quicknes-lr/package.mk b/packages/emulators/libretro/quicknes-lr/package.mk index d4045efff..66c6644c0 100644 --- a/packages/emulators/libretro/quicknes-lr/package.mk +++ b/packages/emulators/libretro/quicknes-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/QuickNES_Core" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="The QuickNES core library, originally by Shay Green, heavily modified" -LINUX="The QuickNES core library, originally by Shay Green, heavily modified" PKG_BUILD_FLAGS="-gold" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/race-lr/package.mk b/packages/emulators/libretro/race-lr/package.mk index c0836e942..5da35e4e5 100644 --- a/packages/emulators/libretro/race-lr/package.mk +++ b/packages/emulators/libretro/race-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/RACE" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="This is the RACE NGPC emulator modified by theelf to run on the PSP." -LINUX="This is the RACE NGPC emulator modified by theelf to run on the PSP." PKG_TOOLCHAIN="make" makeinstall_target() { diff --git a/packages/emulators/libretro/retropie-shaders/package.mk b/packages/emulators/libretro/retropie-shaders/package.mk index 220185069..57bb35723 100644 --- a/packages/emulators/libretro/retropie-shaders/package.mk +++ b/packages/emulators/libretro/retropie-shaders/package.mk @@ -28,7 +28,6 @@ PKG_URL="${PKG_SITE}.git" PKG_GIT_CLONE_BRANCH="rpi" PKG_DEPENDS_TARGET="toolchain glsl-shaders" PKG_LONGDESC="Libretro common shaders from retropie" -LINUX="Libretro common shaders from retropie" PKG_TOOLCHAIN="manual" make_target() { diff --git a/packages/emulators/libretro/sameboy-lr/package.mk b/packages/emulators/libretro/sameboy-lr/package.mk index cce77b5c8..d50a941b8 100644 --- a/packages/emulators/libretro/sameboy-lr/package.mk +++ b/packages/emulators/libretro/sameboy-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://git.libretro.com/libretro/sameboy-upstream" PKG_URL="${PKG_SITE}/-/archive/${PKG_VERSION}/sameboy-upstream-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain util-linux:host" PKG_LONGDESC="Gameboy and Gameboy Color emulator written in C" -LINUX="Gameboy and Gameboy Color emulator written in C" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/sameduck-lr/package.mk b/packages/emulators/libretro/sameduck-lr/package.mk index 0611c2097..6e0791391 100644 --- a/packages/emulators/libretro/sameduck-lr/package.mk +++ b/packages/emulators/libretro/sameduck-lr/package.mk @@ -27,7 +27,6 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="SameDuck" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Mega Duck/Cougar Boy emulator written in C" -LINUX="Mega Duck/Cougar Boy emulator written in C" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index 239358685..ba0279fc8 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/scummvm" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="ScummVM with libretro backend." -LINUX="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." PKG_TOOLCHAIN="make" PKG_BUILD_FLAGS="-lto" diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 56c4ab500..55971d21e 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/slang-shaders" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Common SLANG shaders for RetroArch" -LINUX="Common SLANG shaders for RetroArch" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/smsplus-gx-lr/package.mk b/packages/emulators/libretro/smsplus-gx-lr/package.mk index 509ce5b9d..b2e537104 100644 --- a/packages/emulators/libretro/smsplus-gx-lr/package.mk +++ b/packages/emulators/libretro/smsplus-gx-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/smsplus-gx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="SMS Plus GX is an enhanced version" -LINUX="SMS Plus is an open-source Sega Master System and Game Gear emulator written by Charles MacDonald." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x-lr/package.mk b/packages/emulators/libretro/snes9x-lr/package.mk index bf16d5a47..f60c359b8 100644 --- a/packages/emulators/libretro/snes9x-lr/package.mk +++ b/packages/emulators/libretro/snes9x-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/snes9x" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" -LINUX="Snes9x - Portable Super Nintendo Entertainment System (TM) emulator" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x2002-lr/package.mk b/packages/emulators/libretro/snes9x2002-lr/package.mk index 3e29dc89d..f14dfb230 100644 --- a/packages/emulators/libretro/snes9x2002-lr/package.mk +++ b/packages/emulators/libretro/snes9x2002-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/snes9x2002" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Snes9x 2002." -LINUX="Snes9x 2002. Port of SNES9x 1.39 for libretro (was previously called PocketSNES). Heavily optimized for ARM." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk index 0db105048..cbb04650c 100644 --- a/packages/emulators/libretro/snes9x2005_plus-lr/package.mk +++ b/packages/emulators/libretro/snes9x2005_plus-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/snes9x2005" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Snes9x 2005 Plus." -LINUX="Snes9x 2005 Plus. Port of SNES9x 1.43 for libretro (was previously called CAT SFC) with enabled BLARRG APU." PKG_TOOLCHAIN="make" PKG_MAKE_OPTS_TARGET="USE_BLARGG_APU=1 platform=armv8-hardfloat-neon" diff --git a/packages/emulators/libretro/snes9x2010-lr/package.mk b/packages/emulators/libretro/snes9x2010-lr/package.mk index 71eab9282..11f5e5316 100644 --- a/packages/emulators/libretro/snes9x2010-lr/package.mk +++ b/packages/emulators/libretro/snes9x2010-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/snes9x2010" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Snes9x 2010." -LINUX="Snes9x 2010. Port of Snes9x 1.52+ to Libretro (previously called SNES9x Next). Rewritten in C and several optimizations and speedhacks." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/stella-lr/package.mk b/packages/emulators/libretro/stella-lr/package.mk index db293c770..521e37513 100644 --- a/packages/emulators/libretro/stella-lr/package.mk +++ b/packages/emulators/libretro/stella-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/stella-emu/stella" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of Stella to libretro." -LINUX="Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL)." PKG_TOOLCHAIN="make" pre_configure_target() { diff --git a/packages/emulators/libretro/tgbdual-lr/package.mk b/packages/emulators/libretro/tgbdual-lr/package.mk index 972ee5f2e..648875c7f 100644 --- a/packages/emulators/libretro/tgbdual-lr/package.mk +++ b/packages/emulators/libretro/tgbdual-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/tgbdual-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro port of TGB Dual" -LINUX="TGB Dual is an open source (GPLv2) GB/GBC emulator with game link cable support." PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index f3ebd13b5..9872ce109 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/tyrquake" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Libretro port of Tyrquake (Quake 1 engine)" -LINUX="Libretro port of Tyrquake (Quake 1 engine)" PKG_PATCH_DIRS+="${DEVICE}" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/uae4arm/package.mk b/packages/emulators/libretro/uae4arm/package.mk index 80f2a9013..1cd42273f 100644 --- a/packages/emulators/libretro/uae4arm/package.mk +++ b/packages/emulators/libretro/uae4arm/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/Chips-fr/uae4arm-rpi" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain flac mpg123" PKG_LONGDESC="Port of uae4arm for libretro (rpi/android)" -LINUX="Port of uae4arm for libretro (rpi/android) " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/uzem-lr/package.mk b/packages/emulators/libretro/uzem-lr/package.mk index 9f242f379..705b10d13 100644 --- a/packages/emulators/libretro/uzem-lr/package.mk +++ b/packages/emulators/libretro/uzem-lr/package.mk @@ -26,7 +26,6 @@ PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_PATCH_DIRS="libretro" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A retro-minimalist game console engine for the ATMega644" -LINUX="A retro-minimalist game console engine for the ATMega644" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vba-next-lr/package.mk b/packages/emulators/libretro/vba-next-lr/package.mk index dbbb39792..8e0806458 100644 --- a/packages/emulators/libretro/vba-next-lr/package.mk +++ b/packages/emulators/libretro/vba-next-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/vba-next" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Optimized port of VBA-M to Libretro." -LINUX="Optimized port of VBA-M to Libretro. " PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vbam-lr/package.mk b/packages/emulators/libretro/vbam-lr/package.mk index cca7a9314..aab1fea92 100644 --- a/packages/emulators/libretro/vbam-lr/package.mk +++ b/packages/emulators/libretro/vbam-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/vbam-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A fork of VBA-M with libretro integration" -LINUX="VBA-M is a [Super] Game Boy [Color / Advance] emulator for Windows, Linux & Mac." PKG_TOOLCHAIN="make" PKG_USE_CMAKE="no" diff --git a/packages/emulators/libretro/vecx-lr/package.mk b/packages/emulators/libretro/vecx-lr/package.mk index 7c80fabfe..88bc31a40 100644 --- a/packages/emulators/libretro/vecx-lr/package.mk +++ b/packages/emulators/libretro/vecx-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/libretro-vecx" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="libretro adaptation of vecx" -LINUX="libretro adaptation of vecx" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/vice-lr/package.mk b/packages/emulators/libretro/vice-lr/package.mk index a30001bf9..8f32781e9 100644 --- a/packages/emulators/libretro/vice-lr/package.mk +++ b/packages/emulators/libretro/vice-lr/package.mk @@ -27,7 +27,6 @@ PKG_SITE="https://github.com/libretro/vice-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Versatile Commodore 8-bit Emulator version 3.0" -LINUX="Versatile Commodore 8-bit Emulator version 3.0" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/emulators/libretro/virtualjaguar-lr/package.mk b/packages/emulators/libretro/virtualjaguar-lr/package.mk index fde3666b3..da990bf55 100644 --- a/packages/emulators/libretro/virtualjaguar-lr/package.mk +++ b/packages/emulators/libretro/virtualjaguar-lr/package.mk @@ -25,7 +25,6 @@ PKG_SITE="https://github.com/libretro/virtualjaguar-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of Virtual Jaguar to Libretro" -LINUX="Port of Virtual Jaguar to Libretro" PKG_TOOLCHAIN="make" diff --git a/packages/emulators/libretro/xmil-lr/package.mk b/packages/emulators/libretro/xmil-lr/package.mk index b96c53a6a..f94c06f7a 100644 --- a/packages/emulators/libretro/xmil-lr/package.mk +++ b/packages/emulators/libretro/xmil-lr/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://github.com/r-type/xmil-libretro" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Libretro port of X Millennium Sharp X1 emulator" -LINUX="Libretro port of X Millennium Sharp X1 emulator" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/libretro/yabasanshiro-lr/package.mk b/packages/emulators/libretro/yabasanshiro-lr/package.mk index f5b8138e2..edf34e2ac 100644 --- a/packages/emulators/libretro/yabasanshiro-lr/package.mk +++ b/packages/emulators/libretro/yabasanshiro-lr/package.mk @@ -26,7 +26,6 @@ PKG_SITE="https://github.com/libretro/yabause" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="Port of YabaSanshiro to libretro." -LINUX="Port of YabaSanshiro to libretro." PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/standalone/openbor/package.mk b/packages/emulators/standalone/openbor/package.mk index 2f5c3bfd6..bd2cbf8be 100644 --- a/packages/emulators/standalone/openbor/package.mk +++ b/packages/emulators/standalone/openbor/package.mk @@ -9,7 +9,6 @@ PKG_SITE="https://github.com/DCurrent/openbor" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 libogg libvorbisidec libvpx libpng" PKG_LONGDESC="OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!" -LINUX="OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!" PKG_TOOLCHAIN="make" GET_HANDLER_SUPPORT="git" diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index 08823ea2d..6eac1f249 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -9,7 +9,6 @@ PKG_VERSION="d479b74ed9c3e321bc3735da29bc125a2ac3b9b2" # 1.17.1 PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain ffmpeg libzip SDL2 zlib zip" PKG_LONGDESC="PPSSPPDL" -LINUX="PPSSPP Standalone" GET_HANDLER_SUPPORT="git" ### Note: diff --git a/packages/emulators/standalone/scummvmsa/package.mk b/packages/emulators/standalone/scummvmsa/package.mk index bdaaad492..33c08c59a 100644 --- a/packages/emulators/standalone/scummvmsa/package.mk +++ b/packages/emulators/standalone/scummvmsa/package.mk @@ -9,7 +9,6 @@ PKG_SITE="https://github.com/scummvm/scummvm" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_net freetype fluidsynth soundfont-generaluser pipewire" PKG_LONGDESC="Script Creation Utility for Maniac Mansion Virtual Machine" -LINUX="ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files." pre_configure_target() { sed -i "s|sdl-config|sdl2-config|g" ${PKG_BUILD}/configure diff --git a/packages/emulators/standalone/vice-sa/package.mk b/packages/emulators/standalone/vice-sa/package.mk index 7b6cc3a85..5167340c5 100644 --- a/packages/emulators/standalone/vice-sa/package.mk +++ b/packages/emulators/standalone/vice-sa/package.mk @@ -8,7 +8,6 @@ PKG_SITE="https://sourceforge.net/projects/vice-emu" PKG_URL="${PKG_SITE}/files/releases/vice-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain xa:host SDL2 SDL2_image ncurses readline dos2unix:host" PKG_LONGDESC="Commodore 8-bit Emulator" -LINUX="Commodore 8-bit Emulator" PKG_CONFIGURE_OPTS_TARGET+=" --disable-pdf-docs --enable-gtk3ui=no --without-alsa --with-pulse --enable-sdl2ui" if [ ! "${OPENGL}" = "no" ]; then diff --git a/packages/graphics/SDL/SDL_net/package.mk b/packages/graphics/SDL/SDL_net/package.mk index 631166f4c..6e458fa56 100644 --- a/packages/graphics/SDL/SDL_net/package.mk +++ b/packages/graphics/SDL/SDL_net/package.mk @@ -24,6 +24,5 @@ PKG_URL="https://github.com/libsdl-org/${PKG_NAME}/archive/refs/tags/release-${P PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL SDL_net:host" PKG_DEPENDS_HOST="SDL:host" PKG_LONGDESC="This is a small sample cross-platform networking library, with a sample chat client and server application." -LINUX="This is a small sample cross-platform networking library, with a sample chat client and server application." PKG_USE_CMAKE="no" diff --git a/packages/graphics/SDL/package.mk b/packages/graphics/SDL/package.mk index a1035b63a..4df2c9920 100644 --- a/packages/graphics/SDL/package.mk +++ b/packages/graphics/SDL/package.mk @@ -23,7 +23,6 @@ PKG_SITE="https://www.libsdl.org/" PKG_URL="https://github.com/libsdl-org/SDL-1.2/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain yasm:host alsa-lib systemd dbus SDL:host" PKG_LONGDESC="SDL: A cross-platform Graphic API" -LINUX="Simple DirectMedia Layer is a cross-platform multimedia library designed to provide fast access to the graphics framebuffer and audio device. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of 'Civilization: Call To Power.' Simple DirectMedia Layer supports Linux, Win32, BeOS, MacOS, Solaris, IRIX, and FreeBSD." PKG_USE_CMAKE="no" diff --git a/packages/graphics/SDL/yasm/package.mk b/packages/graphics/SDL/yasm/package.mk index cc9c350e9..3ff8f36d9 100644 --- a/packages/graphics/SDL/yasm/package.mk +++ b/packages/graphics/SDL/yasm/package.mk @@ -24,7 +24,6 @@ PKG_SITE="http://www.tortall.net/projects/yasm/" PKG_URL="http://www.tortall.net/projects/yasm/releases/${PKG_NAME}-${PKG_VERSION}.tar.gz" PKG_DEPENDS_HOST="" PKG_LONGDESC="yasm: A complete rewrite of the NASM assembler" -LINUX="Yasm is a complete rewrite of the NASM assembler under the new BSD License (some portions are under other licenses, see COPYING for details). It is designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats and even multiple instruction sets. Another primary module of the overall design is an optimizer module." PKG_USE_CMAKE="no" diff --git a/packages/misc/modules/package.mk b/packages/misc/modules/package.mk index f1014c7c5..2c58d9e03 100644 --- a/packages/misc/modules/package.mk +++ b/packages/misc/modules/package.mk @@ -8,7 +8,6 @@ PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain rclone" PKG_LONGDESC="OS Modules Package" -LINUX="OS Modules Package" PKG_TOOLCHAIN="manual" ### diff --git a/packages/multimedia/libdvbpsi/package.mk b/packages/multimedia/libdvbpsi/package.mk index 1a34b622e..674c5c876 100644 --- a/packages/multimedia/libdvbpsi/package.mk +++ b/packages/multimedia/libdvbpsi/package.mk @@ -8,6 +8,5 @@ PKG_SITE="http://www.videolan.org/developers/libdvbpsi.html" PKG_URL="http://download.videolan.org/pub/libdvbpsi/${PKG_VERSION}/libdvbpsi-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="library for MPEG TS and DVB PSI tables decoding and generating" -LINUX="libdvbpsi is a simple library designed for MPEG TS and DVB PSI tables decoding and generating." PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" diff --git a/packages/multimedia/vlc/package.mk b/packages/multimedia/vlc/package.mk index 69f6ae2e1..558b61429 100644 --- a/packages/multimedia/vlc/package.mk +++ b/packages/multimedia/vlc/package.mk @@ -9,7 +9,6 @@ PKG_SITE="http://www.videolan.org" PKG_URL="https://mirror.netcologne.de/videolan.org/${PKG_NAME}/${PKG_VERSION}/$PKG_NAME-${PKG_VERSION}.tar.xz" PKG_DEPENDS_TARGET="toolchain libdvbpsi gnutls ffmpeg libmpeg2 zlib flac libvorbis libxml2 pulseaudio SDL2 x264 x265 aom libogg" PKG_LONGDESC="VideoLAN multimedia player and streamer" -LINUX="VLC is the VideoLAN project's media player. It plays MPEG, MPEG2, MPEG4, DivX, MOV, WMV, QuickTime, mp3, Ogg/Vorbis files, DVDs, VCDs, and multimedia streams from various network sources." pre_configure_target() { diff --git a/packages/network/syncthing/package.mk b/packages/network/syncthing/package.mk index 2ab81c3cf..98171edf8 100644 --- a/packages/network/syncthing/package.mk +++ b/packages/network/syncthing/package.mk @@ -9,7 +9,6 @@ PKG_SITE="https://syncthing.net/" PKG_URL="https://github.com/syncthing/syncthing/releases/download/v${PKG_VERSION}/syncthing-source-v${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain go:host" PKG_LONGDESC="Syncthing: open source continuous file synchronization" -LINUX="Syncthing (${PKG_VERSION}) replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet." PKG_TOOLCHAIN="manual" configure_target() { diff --git a/packages/rocknix/package.mk b/packages/rocknix/package.mk index 56fdd2fcd..418cc555d 100644 --- a/packages/rocknix/package.mk +++ b/packages/rocknix/package.mk @@ -8,7 +8,6 @@ PKG_SITE="" PKG_URL="" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="ROCKNIX Meta Package" -LINUX="ROCKNIX Meta Package" PKG_TOOLCHAIN="make" make_target() { diff --git a/packages/tools/empty/package.mk b/packages/tools/empty/package.mk index 1e94d73c5..b3d0eb2e0 100644 --- a/packages/tools/empty/package.mk +++ b/packages/tools/empty/package.mk @@ -9,7 +9,6 @@ PKG_SITE="http://empty.sourceforge.net/" PKG_DEPENDS_TARGET="toolchain linux" PKG_URL="http://downloads.sourceforge.net/sourceforge/${PKG_NAME}/${PKG_NAME}-${PKG_VERSION}.tgz" PKG_LONGDESC="Run applications under pseudo-terminal sessions" -LINUX="Run applications under pseudo-terminal sessions" make_target() { diff --git a/packages/tools/git/package.mk b/packages/tools/git/package.mk index 1bea1d063..5a55a604f 100644 --- a/packages/tools/git/package.mk +++ b/packages/tools/git/package.mk @@ -9,7 +9,6 @@ PKG_SITE="https://git-scm.com/" PKG_URL="https://mirrors.edge.kernel.org/pub/software/scm/git/git-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain openssl pcre curl libiconv zlib" PKG_LONGDESC="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " -LINUX="Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. " PKG_CONFIGURE_OPTS_TARGET="ac_cv_fread_reads_directories=yes \ ac_cv_snprintf_returns_bogus=yes \ diff --git a/packages/tools/joyutils/package.mk b/packages/tools/joyutils/package.mk index 2a98d9c76..00b3a6b85 100644 --- a/packages/tools/joyutils/package.mk +++ b/packages/tools/joyutils/package.mk @@ -9,7 +9,6 @@ PKG_SITE="https://github.com/datrh/joyutils" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="jscal, jstest, and jsattach utilities for the Linux joystick driver" -LINUX="jscal, jstest, and jsattach utilities for the Linux joystick driver" # post_unpack() { diff --git a/packages/ui/themes/es-theme-art-book-next/package.mk b/packages/ui/themes/es-theme-art-book-next/package.mk index f81176731..d2cff3bc2 100644 --- a/packages/ui/themes/es-theme-art-book-next/package.mk +++ b/packages/ui/themes/es-theme-art-book-next/package.mk @@ -10,7 +10,6 @@ PKG_SITE="https://github.com/anthonycaccese/art-book-next-jelos" PKG_URL="${PKG_SITE}.git" GET_HANDLER_SUPPORT="git" PKG_LONGDESC="Art Book Next" -LINUX="Art Book Next" PKG_TOOLCHAIN="manual" makeinstall_target() { From dd78913e411dc83989151ed1f56679c287626927 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 18:34:30 +0000 Subject: [PATCH 015/184] Add correct ROCKNIX logo --- distributions/ROCKNIX/logos/rocknix-logo.png | Bin 25301 -> 27563 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 distributions/ROCKNIX/logos/rocknix-logo.png diff --git a/distributions/ROCKNIX/logos/rocknix-logo.png b/distributions/ROCKNIX/logos/rocknix-logo.png old mode 100644 new mode 100755 index 3d3396181572a03e6b850a9c12ec9bd39d04de3e..8b12863b79265630acf228c4cbd9b2d58c8358d7 GIT binary patch literal 27563 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 LTr@5}kBs;qrkZNs literal 25301 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 Ch8Jf5 From 1748af9bdc2d78d368ff3b534b13c87f983bbcf2 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 12 Apr 2024 21:06:05 +0200 Subject: [PATCH 016/184] rk3566: remove mmc alias patch for 353ps/vs --- .../RK3566/003-fix-ps-vs-dts-aliases.patch | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 projects/Rockchip/patches/linux/RK3566/003-fix-ps-vs-dts-aliases.patch diff --git a/projects/Rockchip/patches/linux/RK3566/003-fix-ps-vs-dts-aliases.patch b/projects/Rockchip/patches/linux/RK3566/003-fix-ps-vs-dts-aliases.patch deleted file mode 100644 index 407e89275..000000000 --- a/projects/Rockchip/patches/linux/RK3566/003-fix-ps-vs-dts-aliases.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts -index b211973e36c2..1eb16af26291 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts -@@ -12,9 +12,9 @@ / { - compatible = "anbernic,rg353ps", "rockchip,rk3566"; - - aliases { -- mmc0 = &sdmmc0; -- mmc1 = &sdmmc1; -- mmc2 = &sdmmc2; -+ mmc1 = &sdmmc0; -+ mmc2 = &sdmmc1; -+ mmc3 = &sdmmc2; - }; - - battery: battery { -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts -index a7dc462fe21f..0675c79d1f3a 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353vs.dts -@@ -12,9 +12,9 @@ / { - compatible = "anbernic,rg353vs", "rockchip,rk3566"; - - aliases { -- mmc0 = &sdmmc0; -- mmc1 = &sdmmc1; -- mmc2 = &sdmmc2; -+ mmc1 = &sdmmc0; -+ mmc2 = &sdmmc1; -+ mmc3 = &sdmmc2; - }; - - battery: battery { From 2f1f25a637a4ed6f0130c41df012806dcc0cab16 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 12 Apr 2024 21:07:27 +0200 Subject: [PATCH 017/184] rk3566: add wifi driver, add xpadled driver --- projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf | 2 +- projects/Rockchip/devices/RK3566/options | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index d6fb8f98e..264de84ae 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -2848,7 +2848,7 @@ CONFIG_JOYSTICK_SINGLEADC_QUADSAR_JOY=y # CONFIG_JOYSTICK_JOYDUMP is not set CONFIG_JOYSTICK_XPAD=m CONFIG_JOYSTICK_XPAD_FF=y -# CONFIG_JOYSTICK_XPAD_LEDS is not set +CONFIG_JOYSTICK_XPAD_LEDS=y # CONFIG_JOYSTICK_PSXPAD_SPI is not set # CONFIG_JOYSTICK_PXRC is not set # CONFIG_JOYSTICK_QWIIC is not set diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 1e8ebd4ee..00058e645 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -76,7 +76,7 @@ EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" # additional packages to install - ADDITIONAL_PACKAGES="stress-ng" + ADDITIONAL_PACKAGES="" # additional Firmware to use ( ) # Space separated list is supported, @@ -87,7 +87,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU" + ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU" # Some devices have internal storage. INSTALLER_SUPPORT="no" From a5f5ff97fa0e824e795c5f1516fbae4952eab4c5 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 19:10:22 +0000 Subject: [PATCH 018/184] Update Readme & License --- LICENSE.md | 4 ++++ README.md | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/LICENSE.md b/LICENSE.md index 8fbc98b77..f2c57de61 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,3 +1,7 @@ +      [![Latest Version](https://img.shields.io/github/release/ROCKNIX/distribution.svg?color=FF5555&label=latest%20version&style=flat-square)](https://github.com/ROCKNIX/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/ROCKNIX/distribution?color=FF5555&style=flat-square)](https://github.com/ROCKNIX/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/ROCKNIX/distribution?color=FF5555&style=flat-square)](https://github.com/ROCKNIX/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=FF5555&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy) + +--- + ## Licenses ROCKNIX is a Linux distribution that is made up of many open-source components. Components are provided under their respective licenses. This distribution includes components licensed for non-commercial use only. diff --git a/README.md b/README.md index b3ca93319..49789abff 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,41 @@ +      [![Latest Version](https://img.shields.io/github/release/ROCKNIX/distribution.svg?color=FF5555&label=latest%20version&style=flat-square)](https://github.com/ROCKNIX/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/ROCKNIX/distribution?color=FF5555&style=flat-square)](https://github.com/ROCKNIX/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/ROCKNIX/distribution?color=FF5555&style=flat-square)](https://github.com/ROCKNIX/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=FF5555&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy) + +--- + +ROCKNIX is an immutable Linux distribution for handheld gaming devices developed by a small community of enthusiasts. Our goal is to produce an operating system that has the features and capabilities that we need, and to have fun as we develop it. + +## Features + +* ROCKNIX has a very active community of developers and users. +* Integrated cross-device local and remote network play. +* In-game touch support on supported devices. +* Fine grain control for battery life or performance. +* Includes support for playing Music and Video. +* Bluetooth audio and controller support. +* Support for HDMI audio and video out, and USB audio. +* Device to device and device to cloud sync with Syncthing and rclone. +* VPN support with Wireguard, Tailscale, and ZeroTier. +* Includes built-in support for scraping and retroachievements. + +## Screenshots + + + + + + + + + + +
+ +## Community + +The ROCKNIX community utilizes Discord for discussion, if you would like to join us please use this link: [https://discord.gg/seTxckZjJy](https://discord.gg/seTxckZjJy) + +## Licenses + **ROCKNIX** is a fork of [JELOS](https://jelos.org/), all licenses apply and credit to the JELOS team. You are free to: From 26e4e4d4273be7c49d9aeb1acb4a4f715f26fa50 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 12 Apr 2024 23:18:46 +0200 Subject: [PATCH 019/184] mappings --- .../config/gamecontrollerdb.txt | 1 + .../gamepads/rg_arc_joypad.cfg | 35 +++++++++++++++++++ .../linux/RK3566/005-anbernic-input.patch | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg diff --git a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt index 2e993ebf3..aaf8a626c 100644 --- a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt +++ b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt @@ -12,3 +12,4 @@ 03001a3447616d65466f726365204100,GameForce ACE Gamepad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:-a1,-leftx:-a0,+leftx:+a0,-lefty:+a1,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux, 1900c3ea010000000100000001010000,odroidgo3_joypad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,dpright:b15,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b11,righttrigger:b7,back:b8,start:b9,dpup:b12,x:b2,y:b3,platform:Linux, 03001354474f2d556c74726120476100,GO-Ultra Gamepad,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11;+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4,platform:Linux, +190014b3010000009178000000050000,rg_arc_joypad,platform:Linux,x:b4,a:b0,b:b1,y:b3,back:b10,start:b11,dpleft:b14,dpdown:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,rightstick:b2,leftstick:b5,platform:Linux, diff --git a/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg new file mode 100644 index 000000000..cf97acb6e --- /dev/null +++ b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg @@ -0,0 +1,35 @@ +input_driver = "udev" +input_device = "rg_arc_joypad" +input_device_display_name = "RG Arc Joypad" + + +input_b_btn = "1" +input_y_btn = "3" +input_select_btn = "10" +input_start_btn = "11" +input_a_btn = "0" +input_x_btn = "4" +input_l_btn = "6" +input_r_btn = "7" +input_l2_btn = "8" +input_r2_btn = "9" + +input_up_btn = "12" +input_down_btn = 13" +input_left_btn = "14" +input_right_btn = "15" + +input_l3_btn = "5" +input_r3_btn = "2" +# Hotkeys +input_enable_hotkey_btn = "10" +input_exit_emulator_btn = "11" + +input_menu_toggle_btn = "4" +input_fps_toggle_btn = "3" + +input_load_state_btn = "6" +input_save_state_btn = "7" + +input_rewind_btn = "8" +input_toggle_fast_forward_btn = "9" diff --git a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch index 0f0bb6dc3..cf443d7f3 100644 --- a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch @@ -11,7 +11,7 @@ index a4a60e4a53d4..8b6ab9ac5c1f 100644 + * Y, and Z on the top row of buttons and A, B, and C under the bottom + * row. + */ -+ gpio_keys_control: gpio-keys-control { ++ gpio_keys_control: rg_arc_joypad { + compatible = "gpio-keys"; + pinctrl-0 = <&btn_pins_ctrl>; + pinctrl-names = "default"; From 67668becb1b448f6f5ddd050caed3e2d58ebcabf Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 12 Apr 2024 23:06:05 +0000 Subject: [PATCH 020/184] Purge CEC support, we dont use it --- distributions/ROCKNIX/options | 3 - packages/apps/moonlight/package.mk | 9 +- packages/devel/libcec/package.mk | 42 ---- packages/multimedia/p8-platform/package.mk | 21 -- .../p8-platform-01-revert-cc-badness.patch | 28 --- ...rm-02-cmake_install_prefix_toolchain.patch | 32 --- .../v4l-utils/config/rc_keymaps/README | 3 - packages/sysutils/v4l-utils/keymaps/a95x | 35 --- .../sysutils/v4l-utils/keymaps/beelink_bt_ir | 16 -- .../v4l-utils/keymaps/beelink_pwr_only | 3 - packages/sysutils/v4l-utils/keymaps/cubox_i | 10 - packages/sysutils/v4l-utils/keymaps/kvim | 13 -- packages/sysutils/v4l-utils/keymaps/kvim2 | 46 ---- packages/sysutils/v4l-utils/keymaps/mecool | 46 ---- packages/sysutils/v4l-utils/keymaps/minix_neo | 13 -- .../v4l-utils/keymaps/minix_neo_pwr_only | 2 - packages/sysutils/v4l-utils/keymaps/odroid | 13 -- packages/sysutils/v4l-utils/keymaps/pine64 | 26 --- packages/sysutils/v4l-utils/keymaps/tanix | 14 -- packages/sysutils/v4l-utils/keymaps/wetek_hub | 13 -- .../sysutils/v4l-utils/keymaps/wetek_play_2 | 44 ---- packages/sysutils/v4l-utils/keymaps/xbox_360 | 66 ------ packages/sysutils/v4l-utils/keymaps/xbox_dvd | 28 --- packages/sysutils/v4l-utils/keymaps/xbox_one | 22 -- packages/sysutils/v4l-utils/keymaps/zotac | 44 ---- packages/sysutils/v4l-utils/package.mk | 108 ---------- ...utils-0001-fix-build-with-glibc_2.28.patch | 37 ---- ...v4l-utils-0002-add-power-on-argument.patch | 201 ------------------ ...kport-imon-and-rcmm-protocol-support.patch | 35 --- ...v4l-utils-0003-add-xbox-dvd-protocol.patch | 33 --- ...ils-0004-add-power-on-argument-fixup.patch | 91 -------- .../v4l-utils/udev.d/70-infrared.rules | 19 -- .../v4l-utils/udev.d/70-input-repeat.rules | 18 -- projects/Amlogic/options | 3 - projects/Rockchip/options | 5 +- 35 files changed, 7 insertions(+), 1135 deletions(-) delete mode 100644 packages/devel/libcec/package.mk delete mode 100644 packages/multimedia/p8-platform/package.mk delete mode 100644 packages/multimedia/p8-platform/patches/p8-platform-01-revert-cc-badness.patch delete mode 100644 packages/multimedia/p8-platform/patches/p8-platform-02-cmake_install_prefix_toolchain.patch delete mode 100644 packages/sysutils/v4l-utils/config/rc_keymaps/README delete mode 100644 packages/sysutils/v4l-utils/keymaps/a95x delete mode 100644 packages/sysutils/v4l-utils/keymaps/beelink_bt_ir delete mode 100644 packages/sysutils/v4l-utils/keymaps/beelink_pwr_only delete mode 100644 packages/sysutils/v4l-utils/keymaps/cubox_i delete mode 100644 packages/sysutils/v4l-utils/keymaps/kvim delete mode 100644 packages/sysutils/v4l-utils/keymaps/kvim2 delete mode 100644 packages/sysutils/v4l-utils/keymaps/mecool delete mode 100644 packages/sysutils/v4l-utils/keymaps/minix_neo delete mode 100644 packages/sysutils/v4l-utils/keymaps/minix_neo_pwr_only delete mode 100644 packages/sysutils/v4l-utils/keymaps/odroid delete mode 100644 packages/sysutils/v4l-utils/keymaps/pine64 delete mode 100644 packages/sysutils/v4l-utils/keymaps/tanix delete mode 100644 packages/sysutils/v4l-utils/keymaps/wetek_hub delete mode 100644 packages/sysutils/v4l-utils/keymaps/wetek_play_2 delete mode 100644 packages/sysutils/v4l-utils/keymaps/xbox_360 delete mode 100644 packages/sysutils/v4l-utils/keymaps/xbox_dvd delete mode 100644 packages/sysutils/v4l-utils/keymaps/xbox_one delete mode 100644 packages/sysutils/v4l-utils/keymaps/zotac delete mode 100644 packages/sysutils/v4l-utils/package.mk delete mode 100644 packages/sysutils/v4l-utils/patches/v4l-utils-0001-fix-build-with-glibc_2.28.patch delete mode 100644 packages/sysutils/v4l-utils/patches/v4l-utils-0002-add-power-on-argument.patch delete mode 100644 packages/sysutils/v4l-utils/patches/v4l-utils-0002-backport-imon-and-rcmm-protocol-support.patch delete mode 100644 packages/sysutils/v4l-utils/patches/v4l-utils-0003-add-xbox-dvd-protocol.patch delete mode 100644 packages/sysutils/v4l-utils/patches/v4l-utils-0004-add-power-on-argument-fixup.patch delete mode 100644 packages/sysutils/v4l-utils/udev.d/70-infrared.rules delete mode 100644 packages/sysutils/v4l-utils/udev.d/70-input-repeat.rules diff --git a/distributions/ROCKNIX/options b/distributions/ROCKNIX/options index 9ac8d368c..fc0277e33 100644 --- a/distributions/ROCKNIX/options +++ b/distributions/ROCKNIX/options @@ -159,9 +159,6 @@ # Space separated list is supported, # e.g. ADDITIONAL_PACKAGES="PACKAGE1 PACKAGE2" -# build and install CEC framework support (yes / no) - CEC_FRAMEWORK_SUPPORT="no" - # build with installer (yes / no) INSTALLER_SUPPORT="no" diff --git a/packages/apps/moonlight/package.mk b/packages/apps/moonlight/package.mk index d8ab2451d..b75fb8db9 100644 --- a/packages/apps/moonlight/package.mk +++ b/packages/apps/moonlight/package.mk @@ -4,7 +4,7 @@ PKG_NAME="moonlight" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/moonlight-stream/moonlight-" -PKG_DEPENDS_TARGET="toolchain opus SDL2 libevdev alsa curl enet avahi libvdpau libcec ffmpeg" +PKG_DEPENDS_TARGET="toolchain opus SDL2 libevdev alsa curl enet avahi libvdpau ffmpeg" PKG_LONGDESC="Moonlight is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built for Linux." GET_HANDLER_SUPPORT="git" PKG_PATCH_DIRS+="${DEVICE}" @@ -33,11 +33,14 @@ else PKG_URL="${PKG_SITE}.git" PKG_VERSION="3b72f5195b6843be772a2eb6846ac10ceed39bf4" PKG_TOOLCHAIN="cmake" + + PKG_CMAKE_OPTS_TARGET+=" -DENABLE_CEC=OFF" + post_makeinstall_target() { mkdir -p ${INSTALL}/usr/config/moonlight cp -R ${PKG_BUILD}/moonlight.conf ${INSTALL}/usr/config/moonlight - rm ${INSTALL}/usr/etc/moonlight.conf - rm ${INSTALL}/usr/share/moonlight/gamecontrollerdb.txt + rm ${INSTALL}/usr/etc/moonlight.conf + rm ${INSTALL}/usr/share/moonlight/gamecontrollerdb.txt } fi diff --git a/packages/devel/libcec/package.mk b/packages/devel/libcec/package.mk deleted file mode 100644 index f328614a4..000000000 --- a/packages/devel/libcec/package.mk +++ /dev/null @@ -1,42 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libcec" -PKG_VERSION="6.0.2" -PKG_SHA256="090696d7a4fb772d7acebbb06f91ab92e025531c7c91824046b9e4e71ecb3377" -PKG_LICENSE="GPL" -PKG_SITE="http://libcec.pulse-eight.com/" -PKG_URL="https://github.com/Pulse-Eight/libcec/archive/libcec-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain systemd p8-platform swig:host" -PKG_LONGDESC="libCEC is an open-source dual licensed library designed for communicating with the Pulse-Eight USB - CEC Adaptor." - -PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=1 \ - -DCMAKE_INSTALL_LIBDIR:STRING=lib \ - -DCMAKE_INSTALL_LIBDIR_NOARCH:STRING=lib \ - -DSKIP_PYTHON_WRAPPER=1 \ - -DHAVE_IMX_API=0 \ - -DHAVE_AOCEC_API=0 -DHAVE_AMLOGIC_API=0 \ - -DHAVE_GIT_BIN=0 \ - -DHAVE_RPI_LIB=0" - -# libX11 and xrandr to read the sink's EDID, used to determine the PC's HDMI physical address -if [ "${DISPLAYSERVER}" = "x11" ]; then - PKG_DEPENDS_TARGET+=" libX11 libXrandr" -fi - -if [ "${CEC_FRAMEWORK_SUPPORT}" = "yes" ]; then - PKG_CMAKE_OPTS_TARGET+=" -DHAVE_LINUX_API=1" -else - PKG_CMAKE_OPTS_TARGET+=" -DHAVE_LINUX_API=0" -fi - -post_makeinstall_target() { - # Remove the Python3 demo - useless for us - rm -f ${INSTALL}/usr/bin/pyCecClient - - PYTHON_DIR=${INSTALL}/usr/lib/${PKG_PYTHON_VERSION} - if [ -d ${PYTHON_DIR}/dist-packages ]; then - mv ${PYTHON_DIR}/dist-packages ${PYTHON_DIR}/site-packages - fi -} diff --git a/packages/multimedia/p8-platform/package.mk b/packages/multimedia/p8-platform/package.mk deleted file mode 100644 index fd2e51da6..000000000 --- a/packages/multimedia/p8-platform/package.mk +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="p8-platform" -PKG_VERSION="cee64e9dc0b69e8d286dc170a78effaabfa09c44" -PKG_SHA256="8d2c3c2e2951a3f202aadd774ce52e2096468a6470ef4c926dbb13bb564ea378" -PKG_LICENSE="GPL" -PKG_SITE="http://www.kodi.tv" -PKG_URL="https://github.com/xbmc/platform/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Platform support library used by libCEC and binary add-ons for Kodi" - -PKG_CMAKE_OPTS_TARGET="-DCMAKE_INSTALL_LIBDIR:STRING=lib \ - -DCMAKE_INSTALL_LIBDIR_NOARCH:STRING=lib \ - -DCMAKE_INSTALL_PREFIX_TOOLCHAIN=${SYSROOT_PREFIX}/usr \ - -DBUILD_SHARED_LIBS=0" - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr -} diff --git a/packages/multimedia/p8-platform/patches/p8-platform-01-revert-cc-badness.patch b/packages/multimedia/p8-platform/patches/p8-platform-01-revert-cc-badness.patch deleted file mode 100644 index c060921a3..000000000 --- a/packages/multimedia/p8-platform/patches/p8-platform-01-revert-cc-badness.patch +++ /dev/null @@ -1,28 +0,0 @@ -From f91594676d1f75530addd87363ccbc6510efb84e Mon Sep 17 00:00:00 2001 -From: Stefan Saraev -Date: Fri, 8 May 2015 11:19:42 +0300 -Subject: [PATCH] revert cc badness - -this reverts upstream commit 68f8418 ---- - CMakeLists.txt | 6 ------ - 1 file changed, 6 deletions(-) - -diff -Naur a/CMakeLists.txt b/CMakeLists.txt ---- a/CMakeLists.txt 2016-01-05 23:58:40.000000000 +0100 -+++ b/CMakeLists.txt 2016-01-06 01:26:52.004076744 +0100 -@@ -22,12 +22,6 @@ - src/windows/os-threads.cpp) - endif() - --set(p8-platform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/p8-platform") --IF(WIN32) -- LIST(APPEND p8-platform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/p8-platform/windows") --ENDIF(WIN32) --set(p8-platform_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) -- - if(NOT ${CORE_SYSTEM_NAME} STREQUAL "") - if(${CORE_SYSTEM_NAME} STREQUAL "osx" OR ${CORE_SYSTEM_NAME} STREQUAL "ios") - list(APPEND p8-platform_LIBRARIES "-framework CoreVideo -framework IOKit") --- -1.7.10.4 diff --git a/packages/multimedia/p8-platform/patches/p8-platform-02-cmake_install_prefix_toolchain.patch b/packages/multimedia/p8-platform/patches/p8-platform-02-cmake_install_prefix_toolchain.patch deleted file mode 100644 index 495ca48bc..000000000 --- a/packages/multimedia/p8-platform/patches/p8-platform-02-cmake_install_prefix_toolchain.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/p8-platform-config.cmake.in b/p8-platform-config.cmake.in -index 47f30f1..df7ed21 100644 ---- a/p8-platform-config.cmake.in -+++ b/p8-platform-config.cmake.in -@@ -10,7 +10,7 @@ - # - # propagate these properties from one build system to the other - set (p8-platform_VERSION "@p8-platform_VERSION_MAJOR@.@p8-platform_VERSION_MINOR@") --set (p8-platform_INCLUDE_DIRS @p8-platform_INCLUDE_DIRS@ @CMAKE_INSTALL_PREFIX@/include) -+set (p8-platform_INCLUDE_DIRS @p8-platform_INCLUDE_DIRS@ @CMAKE_INSTALL_PREFIX_TOOLCHAIN@/include/p8-platform) - set (p8-platform_LIBRARY_DIRS "@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") - set (p8-platform_LINKER_FLAGS "@p8-platform_LINKER_FLAGS@") - set (p8-platform_CONFIG_VARS "@p8-platform_CONFIG_VARS@") -@@ -19,7 +19,7 @@ set (p8-platform_CONFIG_VARS "@p8-platform_CONFIG_VARS@") - if(WIN32) - set (p8-platform_LIBRARY "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/p8-platform.lib") - else(WIN32) -- set (p8-platform_LIBRARY "-L@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ -lp8-platform") -+ set (p8-platform_LIBRARY "-L@CMAKE_INSTALL_PREFIX_TOOLCHAIN@/@CMAKE_INSTALL_LIBDIR@ -lp8-platform") - endif(WIN32) - set (p8-platform_LIBRARIES ${p8-platform_LIBRARY} "@p8-platform_LIBRARIES@") - mark_as_advanced (p8-platform_LIBRARY) -diff --git a/p8-platform.pc.in b/p8-platform.pc.in -index f97a2d4..58cd057 100644 ---- a/p8-platform.pc.in -+++ b/p8-platform.pc.in -@@ -7,4 +7,4 @@ Name: @p8-platform_NAME@ - Description: @p8-platform_DESCRIPTION@ @p8-platform_VERSION_MAJOR@.@p8-platform_VERSION_MINOR@ - Version: @p8-platform_VERSION_MAJOR@.@p8-platform_VERSION_MINOR@.@p8-platform_VERSION_PATCH@ - Libs: -L${libdir} -lp8-platform --Cflags: -I${includedir} -+Cflags: -I${includedir}/p8-platform diff --git a/packages/sysutils/v4l-utils/config/rc_keymaps/README b/packages/sysutils/v4l-utils/config/rc_keymaps/README deleted file mode 100644 index 74b4005d1..000000000 --- a/packages/sysutils/v4l-utils/config/rc_keymaps/README +++ /dev/null @@ -1,3 +0,0 @@ -RC keymaps user config dir - -put your own keymaps for ir-keytable in this directory diff --git a/packages/sysutils/v4l-utils/keymaps/a95x b/packages/sysutils/v4l-utils/keymaps/a95x deleted file mode 100644 index 730bf3577..000000000 --- a/packages/sysutils/v4l-utils/keymaps/a95x +++ /dev/null @@ -1,35 +0,0 @@ -# table a95x, type: NEC -0xdf0c KEY_NUMERIC_0 -0xdf54 KEY_NUMERIC_1 -0xdf16 KEY_NUMERIC_2 -0xdf15 KEY_NUMERIC_3 -0xdf50 KEY_NUMERIC_4 -0xdf12 KEY_NUMERIC_5 -0xdf11 KEY_NUMERIC_6 -0xdf4c KEY_NUMERIC_7 -0xdf0e KEY_NUMERIC_8 -0xdf0d KEY_NUMERIC_9 -0xdf06 KEY_ENTER -0xdf1a KEY_UP -0xdf48 KEY_DOWN -0xdf47 KEY_LEFT -0xdf07 KEY_RIGHT -0xdf18 KEY_MENU -0xdf0a KEY_BACK -0xdf5d KEY_VOLUMEUP -0xdf5c KEY_VOLUMEDOWN -0xdf4f KEY_NEXT -0xdf4b KEY_PREVIOUS -0xdf5f KEY_INFO -0xdf01 KEY_EPG -0xdf1c KEY_POWER -0xdf42 KEY_HOME # home -0xdf41 KEY_FAVORITE # planet -0xdf03 KEY_CONTEXT_MENU # mouse -0xdf10 KEY_BACK # back -0xdff1 KEY_SLEEP # TV Power -0xdff2 KEY_SELECT # TV Input -0xdff3 KEY_MUTE # TV Mute -0xdff4 KEY_PAGEUP # TV Vol- -0xdff5 KEY_PAGEDOWN # TV Vol+ -0x07 KEY_PAGEDOWN # TV Vol+ diff --git a/packages/sysutils/v4l-utils/keymaps/beelink_bt_ir b/packages/sysutils/v4l-utils/keymaps/beelink_bt_ir deleted file mode 100644 index 9f90188bf..000000000 --- a/packages/sysutils/v4l-utils/keymaps/beelink_bt_ir +++ /dev/null @@ -1,16 +0,0 @@ -# table beelink_bt_ir, type: NEC -0x8051 KEY_POWER -0x804d KEY_MUTE -0x8053 KEY_HOME -0x800d KEY_OK -0x8026 KEY_UP -0x8025 KEY_LEFT -0x8027 KEY_RIGHT -0x8028 KEY_DOWN -0x8049 KEY_MENU -0x801b KEY_BACK -0x8056 KEY_VOLUMEDOWN -0x804e KEY_VOLUMEUP -0x8041 KEY_CHANNELUP -0x8042 KEY_CHANNELDOWN -0x8044 KEY_DELETE diff --git a/packages/sysutils/v4l-utils/keymaps/beelink_pwr_only b/packages/sysutils/v4l-utils/keymaps/beelink_pwr_only deleted file mode 100644 index a7157cb32..000000000 --- a/packages/sysutils/v4l-utils/keymaps/beelink_pwr_only +++ /dev/null @@ -1,3 +0,0 @@ -# table beelink_pwr_only, type: NEC -0x8051 KEY_POWER -0x59 KEY_POWER diff --git a/packages/sysutils/v4l-utils/keymaps/cubox_i b/packages/sysutils/v4l-utils/keymaps/cubox_i deleted file mode 100644 index e23b3f19a..000000000 --- a/packages/sysutils/v4l-utils/keymaps/cubox_i +++ /dev/null @@ -1,10 +0,0 @@ -# table cubox_i, type: RC6 -0x1f020b0 KEY_MEDIA -0x1f02078 KEY_UP -0x1f02044 KEY_ENTER -0x1f020f8 KEY_DOWN -0x1f02004 KEY_LEFT -0x1f02084 KEY_RIGHT -0x1f020c4 KEY_BACKSPACE -0x1f02068 KEY_PLAYPAUSE -0x1f02064 KEY_EPG diff --git a/packages/sysutils/v4l-utils/keymaps/kvim b/packages/sysutils/v4l-utils/keymaps/kvim deleted file mode 100644 index b07061e34..000000000 --- a/packages/sysutils/v4l-utils/keymaps/kvim +++ /dev/null @@ -1,13 +0,0 @@ -# table kvim, type: NEC -0x14 KEY_POWER -0x07 KEY_ENTER -0x03 KEY_UP -0x02 KEY_DOWN -0x0e KEY_LEFT -0x1a KEY_RIGHT -0x13 KEY_MENU -0x01 KEY_BACK -0x0b KEY_VOLUMEUP -0x58 KEY_VOLUMEDOWN -0x48 KEY_HOME -0x5b KEY_CONTEXT_MENU # mouse \ No newline at end of file diff --git a/packages/sysutils/v4l-utils/keymaps/kvim2 b/packages/sysutils/v4l-utils/keymaps/kvim2 deleted file mode 100644 index ea0c2085a..000000000 --- a/packages/sysutils/v4l-utils/keymaps/kvim2 +++ /dev/null @@ -1,46 +0,0 @@ -# table kvim2, type: NEC -0x113 KEY_1 -0x112 KEY_2 -0x110 KEY_3 -0x117 KEY_4 -0x116 KEY_5 -0x114 KEY_6 -0x11b KEY_7 -0x11a KEY_8 -0x118 KEY_9 -0x11e KEY_0 -0x158 KEY_MENU -0x104 KEY_CHANNELUP -0x106 KEY_CHANNELDOWN -0x148 KEY_VOLUMEUP -0x10b KEY_VOLUMEDOWN -0x150 KEY_HOME -0x115 KEY_RIGHT -0x154 KEY_LEFT -0x159 KEY_UP -0x151 KEY_DOWN -0x155 KEY_ENTER -0x141 KEY_MUTE -0x119 KEY_BACK -0x11d KEY_INFO -0x107 KEY_STOP -0x105 KEY_PREVIOUSSONG -0x101 KEY_NEXTSONG -0x100 KEY_POWER -0x140 KEY_REWIND -0x103 KEY_FASTFORWARD -0x144 KEY_PLAYPAUSE -0x109 KEY_FAVORITES -0x15c KEY_EPG -0x11f KEY_RECORD -0x111 KEY_ESC -0x10a KEY_RED -0x14d KEY_GREEN -0x10e KEY_YELLOW -0x10c KEY_BLUE -0x149 KEY_LANGUAGE # audio -0x108 KEY_SUBTITLE # subtitle -0x10d KEY_CONTEXT_MENU # mouse -0x14c KEY_CONFIG #APPS -0x145 KEY_COMPOSE #RECALL -0x111 KEY_TEXT #TV/RADIO \ No newline at end of file diff --git a/packages/sysutils/v4l-utils/keymaps/mecool b/packages/sysutils/v4l-utils/keymaps/mecool deleted file mode 100644 index ee654adb8..000000000 --- a/packages/sysutils/v4l-utils/keymaps/mecool +++ /dev/null @@ -1,46 +0,0 @@ -# table mecool, type: NEC -0x52 KEY_1 -0x50 KEY_2 -0x10 KEY_3 -0x56 KEY_4 -0x54 KEY_5 -0x14 KEY_6 -0x4e KEY_7 -0x4c KEY_8 -0x0c KEY_9 -0x0f KEY_0 -0x45 KEY_MENU -0x55 KEY_CHANNELUP -0x15 KEY_CHANNELDOWN -0x13 KEY_VOLUMEUP -0x17 KEY_VOLUMEDOWN -0x0d KEY_HOME -0x1b KEY_RIGHT -0x5a KEY_LEFT -0x06 KEY_UP -0x16 KEY_DOWN -0x1a KEY_ENTER -0x19 KEY_MUTE -0x05 KEY_BACK -0x02 KEY_INFO -0x44 KEY_STOP -0x08 KEY_PREVIOUSSONG -0x0b KEY_NEXTSONG -0x59 KEY_POWER -0x4a KEY_REWIND -0x48 KEY_FASTFORWARD -0x46 KEY_PLAYPAUSE -0x1f KEY_FAVORITES -0x4d KEY_EPG -0x04 KEY_RECORD -0x51 KEY_ESC -0x42 KEY_RED -0x40 KEY_GREEN -0x00 KEY_YELLOW -0x03 KEY_BLUE -0x01 KEY_LANGUAGE # audio -0x09 KEY_SUBTITLE # subtitle -0x12 KEY_CONTEXT_MENU # mouse -0x11 KEY_COMPOSE # DTV -0x58 KEY_CONFIG # APPS -0x18 KEY_TEXT # BROWSER \ No newline at end of file diff --git a/packages/sysutils/v4l-utils/keymaps/minix_neo b/packages/sysutils/v4l-utils/keymaps/minix_neo deleted file mode 100644 index 498282ce8..000000000 --- a/packages/sysutils/v4l-utils/keymaps/minix_neo +++ /dev/null @@ -1,13 +0,0 @@ -# table minix_neo, type: NEC -0x118 KEY_POWER -0x146 KEY_UP -0x116 KEY_DOWN -0x147 KEY_LEFT -0x115 KEY_RIGHT -0x155 KEY_ENTER -0x110 KEY_VOLUMEDOWN -0x140 KEY_BACK -0x114 KEY_VOLUMEUP -0x10d KEY_HOME -0x104 KEY_MENU -0x112 KEY_CONFIG diff --git a/packages/sysutils/v4l-utils/keymaps/minix_neo_pwr_only b/packages/sysutils/v4l-utils/keymaps/minix_neo_pwr_only deleted file mode 100644 index 59a0aa006..000000000 --- a/packages/sysutils/v4l-utils/keymaps/minix_neo_pwr_only +++ /dev/null @@ -1,2 +0,0 @@ -# table minix_neo_pwr_only, type: NEC -0x118 KEY_POWER diff --git a/packages/sysutils/v4l-utils/keymaps/odroid b/packages/sysutils/v4l-utils/keymaps/odroid deleted file mode 100644 index 49d7a17f1..000000000 --- a/packages/sysutils/v4l-utils/keymaps/odroid +++ /dev/null @@ -1,13 +0,0 @@ -# table odroid, type: NEC -0xb2dc KEY_POWER -0xb288 KEY_MUTE -0xb282 KEY_HOME -0xb2ce KEY_OK -0xb2ca KEY_UP -0xb299 KEY_LEFT -0xb2c1 KEY_RIGHT -0xb2d2 KEY_DOWN -0xb2c5 KEY_MENU -0xb29a KEY_BACK -0xb281 KEY_VOLUMEDOWN -0xb280 KEY_VOLUMEUP diff --git a/packages/sysutils/v4l-utils/keymaps/pine64 b/packages/sysutils/v4l-utils/keymaps/pine64 deleted file mode 100644 index 267d73167..000000000 --- a/packages/sysutils/v4l-utils/keymaps/pine64 +++ /dev/null @@ -1,26 +0,0 @@ -# table pine64, type: NEC -0x404000 KEY_NUMERIC_0 -0x404001 KEY_NUMERIC_1 -0x404002 KEY_NUMERIC_2 -0x404003 KEY_NUMERIC_3 -0x404004 KEY_NUMERIC_4 -0x404005 KEY_NUMERIC_5 -0x404006 KEY_NUMERIC_6 -0x404007 KEY_NUMERIC_7 -0x404008 KEY_NUMERIC_8 -0x404009 KEY_NUMERIC_9 -0x40400a KEY_MUTE -0x40400b KEY_UP -0x40400c KEY_BACKSPACE -0x40400d KEY_OK -0x40400e KEY_DOWN -0x404010 KEY_LEFT -0x404011 KEY_RIGHT -0x404017 KEY_VOLUMEDOWN -0x404018 KEY_VOLUMEUP -0x40401a KEY_HOME -0x40401d KEY_MENU -0x40401f KEY_WWW -0x404045 KEY_BACK -0x404047 KEY_INFO -0x40404d KEY_POWER diff --git a/packages/sysutils/v4l-utils/keymaps/tanix b/packages/sysutils/v4l-utils/keymaps/tanix deleted file mode 100644 index 6c8ca7a0e..000000000 --- a/packages/sysutils/v4l-utils/keymaps/tanix +++ /dev/null @@ -1,14 +0,0 @@ -# table tanix, type: NEC -0x40404d KEY_POWER -0x404043 KEY_MUTE -0x40400b KEY_UP -0x40400e KEY_DOWN -0x404010 KEY_LEFT -0x404011 KEY_RIGHT -0x40400d KEY_ENTER -0x40401a KEY_HOME -0x404045 KEY_MENU -0x404042 KEY_BACK -0x404018 KEY_VOLUMEUP -0x404017 KEY_VOLUMEDOWN -0x404047 KEY_PLAYPAUSE diff --git a/packages/sysutils/v4l-utils/keymaps/wetek_hub b/packages/sysutils/v4l-utils/keymaps/wetek_hub deleted file mode 100644 index 67fe25fc3..000000000 --- a/packages/sysutils/v4l-utils/keymaps/wetek_hub +++ /dev/null @@ -1,13 +0,0 @@ -# table wetek_hub, type: NEC -0x77f1 KEY_POWER -0x77f2 KEY_HOME -0x77f3 KEY_MUTE -0x77f4 KEY_UP -0x77f5 KEY_DOWN -0x77f6 KEY_LEFT -0x77f7 KEY_RIGHT -0x77f8 KEY_OK -0x77f9 KEY_BACK -0x77fa KEY_MENU -0x77fb KEY_VOLUMEUP -0x77fc KEY_VOLUMEDOWN diff --git a/packages/sysutils/v4l-utils/keymaps/wetek_play_2 b/packages/sysutils/v4l-utils/keymaps/wetek_play_2 deleted file mode 100644 index 154a45fb1..000000000 --- a/packages/sysutils/v4l-utils/keymaps/wetek_play_2 +++ /dev/null @@ -1,44 +0,0 @@ -# table wetek_play_2, type: NEC -0x5e5f02 KEY_POWER -0x5e5f46 KEY_SLEEP -0x5e5f10 KEY_MUTE -0x5e5f22 KEY_1 -0x5e5f23 KEY_2 -0x5e5f24 KEY_3 -0x5e5f25 KEY_4 -0x5e5f26 KEY_5 -0x5e5f27 KEY_6 -0x5e5f28 KEY_7 -0x5e5f29 KEY_8 -0x5e5f30 KEY_9 -0x5e5f71 KEY_ESC -0x5e5f21 KEY_0 -0x5e5f72 KEY_CAPSLOCK -0x5e5f03 KEY_HOME -0x5e5f48 KEY_MENU -0x5e5f61 KEY_BACKSPACE -0x5e5f83 KEY_EPG -0x5e5f84 KEY_COMPOSE -0x5e5f77 KEY_CONFIG -0x5e5f50 KEY_UP -0x5e5f4b KEY_DOWN -0x5e5f4c KEY_LEFT -0x5e5f4d KEY_RIGHT -0x5e5f47 KEY_ENTER -0x5e5f44 KEY_VOLUMEUP -0x5e5f43 KEY_VOLUMEDOWN -0x5e5f41 KEY_PAGEUP -0x5e5f42 KEY_PAGEDOWN -0x5e5f4f KEY_FAVORITES -0x5e5f82 KEY_TEXT -0x5e5f73 KEY_RED -0x5e5f74 KEY_GREEN -0x5e5f75 KEY_YELLOW -0x5e5f76 KEY_BLUE -0x5e5f67 KEY_PREVIOUSSONG -0x5e5f79 KEY_REWIND -0x5e5f80 KEY_FASTFORWARD -0x5e5f81 KEY_NEXTSONG -0x5e5f04 KEY_RECORD -0x5e5f2c KEY_PLAYPAUSE -0x5e5f2b KEY_STOP diff --git a/packages/sysutils/v4l-utils/keymaps/xbox_360 b/packages/sysutils/v4l-utils/keymaps/xbox_360 deleted file mode 100644 index 66b62adc7..000000000 --- a/packages/sysutils/v4l-utils/keymaps/xbox_360 +++ /dev/null @@ -1,66 +0,0 @@ -# table xbox_360, type: RC6 -0x800f7400 KEY_NUMERIC_0 -0x800f7401 KEY_NUMERIC_1 -0x800f7402 KEY_NUMERIC_2 -0x800f7403 KEY_NUMERIC_3 -0x800f7404 KEY_NUMERIC_4 -0x800f7405 KEY_NUMERIC_5 -0x800f7406 KEY_NUMERIC_6 -0x800f7407 KEY_NUMERIC_7 -0x800f7408 KEY_NUMERIC_8 -0x800f7409 KEY_NUMERIC_9 -0x800f740a KEY_DELETE -0x800f740b KEY_ENTER -0x800f740c KEY_SLEEP -0x800f740d KEY_MEDIA -0x800f7464 KEY_MEDIA -0x800f740e KEY_MUTE -0x800f740f KEY_INFO -0x800f7410 KEY_VOLUMEUP -0x800f7411 KEY_VOLUMEDOWN -0x800f7412 KEY_CHANNELUP -0x800f746C KEY_CHANNELUP -0x800f7413 KEY_CHANNELDOWN -0x800f746D KEY_CHANNELDOWN -0x800f7414 KEY_FASTFORWARD -0x800f7415 KEY_REWIND -0x800f7416 KEY_PLAY -0x800f7417 KEY_RECORD -0x800f7418 KEY_PAUSE -0x800f7419 KEY_STOP -0x800f741a KEY_NEXT -0x800f741b KEY_PREVIOUS -0x800f741c KEY_NUMERIC_POUND -0x800f741d KEY_NUMERIC_STAR -0x800f741e KEY_UP -0x800f741f KEY_DOWN -0x800f7420 KEY_LEFT -0x800f7421 KEY_RIGHT -0x800f7422 KEY_OK -0x800f7423 KEY_EXIT -0x800f7424 KEY_DVD -0x800f744f KEY_EPG -0x800f7427 KEY_ZOOM -0x800f7432 KEY_MODE -0x800f7433 KEY_PRESENTATION -0x800f7428 KEY_EJECTCD -0x800f743a KEY_BRIGHTNESSUP -0x800f7446 KEY_TV -0x800f7447 KEY_AUDIO -0x800f7448 KEY_PVR -0x800f7449 KEY_CAMERA -0x800f744a KEY_VIDEO -0x800f744c KEY_LANGUAGE -0x800f7451 KEY_TITLE -0x800f744e KEY_PRINT -0x800f7450 KEY_RADIO -0x800f745a KEY_SUBTITLE -0x800f7425 KEY_RED -0x800f7466 KEY_GREEN -0x800f7426 KEY_YELLOW -0x800f7468 KEY_BLUE -0x800f7465 KEY_POWER2 -0x800f746e KEY_PLAYPAUSE -0x800f746f KEY_PLAYER -0x800f7480 KEY_BRIGHTNESSDOWN -0x800f7481 KEY_PLAYPAUSE diff --git a/packages/sysutils/v4l-utils/keymaps/xbox_dvd b/packages/sysutils/v4l-utils/keymaps/xbox_dvd deleted file mode 100644 index 22c9f7026..000000000 --- a/packages/sysutils/v4l-utils/keymaps/xbox_dvd +++ /dev/null @@ -1,28 +0,0 @@ -# table xbox_dvd, type: xbox-dvd -0xa0b KEY_OK -0xaa6 KEY_UP -0xaa7 KEY_DOWN -0xaa8 KEY_RIGHT -0xaa9 KEY_LEFT -0xac3 KEY_INFO -0xac6 KEY_9 -0xac7 KEY_8 -0xac8 KEY_7 -0xac9 KEY_6 -0xaca KEY_5 -0xacb KEY_4 -0xacc KEY_3 -0xacd KEY_2 -0xace KEY_1 -0xacf KEY_0 -0xad5 KEY_ANGLE -0xad8 KEY_BACK -0xadd KEY_PREVIOUSSONG -0xadf KEY_NEXTSONG -0xae0 KEY_STOP -0xae2 KEY_REWIND -0xae3 KEY_FASTFORWARD -0xae5 KEY_TITLE -0xae6 KEY_PAUSE -0xaea KEY_PLAY -0xaf7 KEY_MENU diff --git a/packages/sysutils/v4l-utils/keymaps/xbox_one b/packages/sysutils/v4l-utils/keymaps/xbox_one deleted file mode 100644 index 366a58c8f..000000000 --- a/packages/sysutils/v4l-utils/keymaps/xbox_one +++ /dev/null @@ -1,22 +0,0 @@ -# table xbox_one, type: NEC -0x80d864 KEY_MEDIA -0x80d820 KEY_LEFT -0x80d821 KEY_RIGHT -0x80d81e KEY_UP -0x80d81f KEY_DOWN -0x80d822 KEY_OK -0x80d823 KEY_EXIT -0x80d80e KEY_MUTE -0x80d810 KEY_VOLUMEUP -0x80d811 KEY_VOLUMEDOWN -0x80d812 KEY_CHANNELUP -0x80d813 KEY_CHANNELDOWN -0x80d814 KEY_FASTFORWARD -0x80d815 KEY_REWIND -0x80d870 KEY_PLAYPAUSE -0x80d819 KEY_STOP -0x80d81a KEY_NEXT -0x80d81b KEY_PREVIOUS -0x80d826 KEY_INFO -0x80d86f KEY_EPG -0x80d86e KEY_ZOOM diff --git a/packages/sysutils/v4l-utils/keymaps/zotac b/packages/sysutils/v4l-utils/keymaps/zotac deleted file mode 100644 index 448d5cbb7..000000000 --- a/packages/sysutils/v4l-utils/keymaps/zotac +++ /dev/null @@ -1,44 +0,0 @@ -# table zotac, type: RC6 -0x8034048e KEY_POWER -0x8034043d KEY_SLEEP -0x80340400 KEY_NUMERIC_0 -0x80340401 KEY_NUMERIC_1 -0x80340402 KEY_NUMERIC_2 -0x80340403 KEY_NUMERIC_3 -0x80340404 KEY_NUMERIC_4 -0x80340405 KEY_NUMERIC_5 -0x80340406 KEY_NUMERIC_6 -0x80340407 KEY_NUMERIC_7 -0x80340408 KEY_NUMERIC_8 -0x80340409 KEY_NUMERIC_9 -0x80340432 KEY_NUMERIC_POUND -0x80340433 KEY_NUMERIC_STAR -0x8034043a KEY_DELETE -0x80340434 KEY_ENTER -0x8034045d KEY_MEDIA -0x8034040d KEY_MUTE -0x803404cb KEY_INFO -0x80340410 KEY_VOLUMEUP -0x80340411 KEY_VOLUMEDOWN -0x8034041e KEY_CHANNELUP -0x8034041f KEY_CHANNELDOWN -0x80340428 KEY_FASTFORWARD -0x80340429 KEY_REWIND -0x8034042c KEY_PLAY -0x80340437 KEY_RECORD -0x80340430 KEY_PAUSE -0x80340431 KEY_STOP -0x80340420 KEY_NEXT -0x80340421 KEY_PREVIOUS -0x80340458 KEY_UP -0x80340459 KEY_DOWN -0x8034045a KEY_LEFT -0x8034045b KEY_RIGHT -0x8034045c KEY_OK -0x80340483 KEY_EXIT -0x8034043e KEY_EPG -0x8034042f KEY_TITLE -0x8034046d KEY_RED -0x8034046e KEY_GREEN -0x8034046f KEY_YELLOW -0x80340470 KEY_BLUE diff --git a/packages/sysutils/v4l-utils/package.mk b/packages/sysutils/v4l-utils/package.mk deleted file mode 100644 index c80dbc132..000000000 --- a/packages/sysutils/v4l-utils/package.mk +++ /dev/null @@ -1,108 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018 Team LibreELEC (https://libreelec.tv) -# Copyright (C) 2018-present Team CoreELEC (https://coreelec.org) - -# with 1.0.0 repeat delay is broken. test on upgrade - -PKG_NAME="v4l-utils" -PKG_VERSION="1.24.1" -PKG_LICENSE="GPL" -PKG_SITE="http://linuxtv.org/" -PKG_URL="http://linuxtv.org/downloads/v4l-utils/${PKG_NAME}-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain alsa-lib systemd" -PKG_LONGDESC="Linux V4L2 and DVB API utilities and v4l libraries (libv4l)." -PKG_STAMP_VAR="$IR_REMOTE_KEYMAPS" - -PKG_CONFIGURE_OPTS_TARGET="--without-jpeg \ - --enable-static \ - --with-udevdir=/usr/lib/udev/ \ - --disable-shared" - -pre_configure_target() { - # cec-ctl fails to build in subdirs - cd ${PKG_BUILD} - rm -rf .${TARGET_NAME} -} - -make_target() { - make -C utils/keytable CFLAGS="${TARGET_CFLAGS}" - make -C utils/ir-ctl CFLAGS="${TARGET_CFLAGS}" - if [ "$CEC_FRAMEWORK_SUPPORT" = "yes" ]; then - make -C utils/cec-ctl CFLAGS="${TARGET_CFLAGS}" - fi - make -C lib CFLAGS="${TARGET_CFLAGS}" - make -C utils/dvb CFLAGS="${TARGET_CFLAGS}" - make -C utils/v4l2-ctl CFLAGS="${TARGET_CFLAGS}" -} - -makeinstall_target() { - make install DESTDIR=${INSTALL} PREFIX=/usr -C utils/keytable - make install DESTDIR=${INSTALL} PREFIX=/usr -C utils/ir-ctl - if [ "$CEC_FRAMEWORK_SUPPORT" = "yes" ]; then - make install DESTDIR=${INSTALL} PREFIX=/usr -C utils/cec-ctl - fi - make install DESTDIR=${INSTALL} PREFIX=/usr -C utils/dvb - make install DESTDIR=${INSTALL} PREFIX=/usr -C utils/v4l2-ctl -} - -create_multi_keymap() { - local f name protocols - name="$1" - protocols="$2" - shift 2 - ( - echo "# table $name, type: $protocols" - for f in "$@" ; do - echo "# $f" - grep -v "^#" ${INSTALL}/usr/lib/udev/rc_keymaps/$f - done - ) > ${INSTALL}/usr/lib/udev/rc_keymaps/$name -} - -post_makeinstall_target() { - local f keymap - - rm -rf ${INSTALL}/etc/rc_keymaps - ln -sf /storage/.config/rc_keymaps ${INSTALL}/etc/rc_keymaps - - mkdir -p ${INSTALL}/usr/config - cp -PR ${PKG_DIR}/config/* ${INSTALL}/usr/config - - rm -rf ${INSTALL}/usr/lib/udev/rules.d - mkdir -p ${INSTALL}/usr/lib/udev/rules.d - cp -PR ${PKG_DIR}/udev.d/*.rules ${INSTALL}/usr/lib/udev/rules.d - - # install additional keymaps without overwriting upstream maps - ( - set -C - for f in ${PKG_DIR}/keymaps/* ; do - if [ -e $f ] ; then - keymap=$(basename $f) - cat $f > ${INSTALL}/usr/lib/udev/rc_keymaps/$keymap - fi - done - ) - - # create multi keymap to support several remotes OOTB - if [ -n "$IR_REMOTE_PROTOCOLS" -a -n "$IR_REMOTE_KEYMAPS" ]; then - create_multi_keymap rocknix_multi "$IR_REMOTE_PROTOCOLS" $IR_REMOTE_KEYMAPS - - # use multi-keymap instead of default one - sed -i '/^\*\s*rc-rc6-mce\s*rc6_mce/d' ${INSTALL}/etc/rc_maps.cfg - - cat << EOF >> ${INSTALL}/etc/rc_maps.cfg -# -# Custom ROCKNIX configuration starts here -# -# use combined multi-table on MCE receivers -# * rc-rc6-mce rc6_mce -* rc-rc6-mce rocknix_multi -# table for Xbox DVD Playback Kit -* rc-xbox-dvd xbox_dvd -# multi-table for amlogic devices -meson-ir * rocknix_multi -EOF - - fi -} diff --git a/packages/sysutils/v4l-utils/patches/v4l-utils-0001-fix-build-with-glibc_2.28.patch b/packages/sysutils/v4l-utils/patches/v4l-utils-0001-fix-build-with-glibc_2.28.patch deleted file mode 100644 index 851406f40..000000000 --- a/packages/sysutils/v4l-utils/patches/v4l-utils-0001-fix-build-with-glibc_2.28.patch +++ /dev/null @@ -1,37 +0,0 @@ -From a46598389950a9764399667c7d30f318c95ffd0a Mon Sep 17 00:00:00 2001 -From: MilhouseVH -Date: Wed, 1 Aug 2018 23:21:24 +0100 -Subject: [PATCH] fix build with glibc-2.28 - ---- - lib/libv4lconvert/control/libv4lcontrol.c | 1 + - utils/v4l2-ctl/v4l2-ctl.cpp | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/lib/libv4lconvert/control/libv4lcontrol.c b/lib/libv4lconvert/control/libv4lcontrol.c -index 1e784ed..1252847 100644 ---- a/lib/libv4lconvert/control/libv4lcontrol.c -+++ b/lib/libv4lconvert/control/libv4lcontrol.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - #include - #include -diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp -index e02dc75..287114b 100644 ---- a/utils/v4l2-ctl/v4l2-ctl.cpp -+++ b/utils/v4l2-ctl/v4l2-ctl.cpp -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - #include - #include - #include --- -2.14.1 - diff --git a/packages/sysutils/v4l-utils/patches/v4l-utils-0002-add-power-on-argument.patch b/packages/sysutils/v4l-utils/patches/v4l-utils-0002-add-power-on-argument.patch deleted file mode 100644 index 87cc02018..000000000 --- a/packages/sysutils/v4l-utils/patches/v4l-utils-0002-add-power-on-argument.patch +++ /dev/null @@ -1,201 +0,0 @@ -diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c -index 34a1522..88ee52b 100644 ---- a/utils/keytable/keytable.c -+++ b/utils/keytable/keytable.c -@@ -228,6 +228,7 @@ static const struct argp_option options[] = { - {"clear", 'c', 0, 0, N_("clears the old table"), 0}, - {"sysdev", 's', N_("SYSDEV"), 0, N_("ir class device to control"), 0}, - {"test", 't', 0, 0, N_("test if IR is generating events"), 0}, -+ {"power-key", 'u', 0, 0, N_("will scan for NEC power on code"), 0}, - {"device", 'd', N_("DEV"), 0, N_("ir device to control"), 0}, - {"read", 'r', 0, 0, N_("reads the current scancode/keycode table"), 0}, - {"write", 'w', N_("TABLE"), 0, N_("write (adds) the scancodes to the device scancode/keycode table from an specified file"), 0}, -@@ -254,6 +255,7 @@ static int readtable = 0; - static int clear = 0; - static int debug = 0; - static int test = 0; -+static int poweron = 0; - static int delay = -1; - static int period = -1; - static enum sysfs_protocols ch_proto = 0; -@@ -478,6 +480,9 @@ static error_t parse_opt(int k, char *arg, struct argp_state *state) - case 't': - test++; - break; -+ case 'u': -+ poweron++; -+ break; - case 'c': - clear++; - break; -@@ -1339,7 +1344,7 @@ static void print_scancodes(const struct lirc_scancode *scancodes, unsigned coun - } - } - --static void test_event(struct rc_device *rc_dev, int fd) -+static void test_event(struct rc_device *rc_dev, int fd, int power_on) - { - struct input_event ev[64]; - struct lirc_scancode sc[64]; -@@ -1364,7 +1369,11 @@ static void test_event(struct rc_device *rc_dev, int fd) - } - } - -- printf (_("Testing events. Please, press CTRL-C to abort.\n")); -+ if (!power_on) -+ printf (_("Testing events. Please, press CTRL-C to abort.\n")); -+ else -+ printf (_("Waiting for NEC decode event. Please, press CTRL-C to abort.\n")); -+ - while (1) { - struct pollfd pollstruct[2] = { - { .fd = fd, .events = POLLIN }, -@@ -1399,54 +1408,72 @@ static void test_event(struct rc_device *rc_dev, int fd) - return; - } - -- for (i = 0; i < rd / sizeof(struct input_event); i++) { -- printf(_("%ld.%06ld: event type %s(0x%02x)"), -- ev[i].time.tv_sec, ev[i].time.tv_usec, -- get_event_name(events_type, ev[i].type), ev[i].type); -+ if (!power_on) { -+ for (i = 0; i < rd / sizeof(struct input_event); i++) { -+ printf(_("%ld.%06ld: event type %s(0x%02x)"), -+ ev[i].time.tv_sec, ev[i].time.tv_usec, -+ get_event_name(events_type, ev[i].type), ev[i].type); - -- switch (ev[i].type) { -- case EV_SYN: -- printf(".\n"); -- break; -- case EV_KEY: -- printf(_(" key_%s: %s(0x%04x)\n"), -- (ev[i].value == 0) ? _("up") : _("down"), -- get_event_name(key_events, ev[i].code), -- ev[i].code); -- break; -- case EV_REL: -- printf(_(": %s (0x%04x) value=%d\n"), -- get_event_name(rel_events, ev[i].code), -- ev[i].code, -- ev[i].value); -- break; -- case EV_ABS: -- printf(_(": %s (0x%04x) value=%d\n"), -- get_event_name(abs_events, ev[i].code), -- ev[i].code, -- ev[i].value); -- break; -- case EV_MSC: -- if (ev[i].code == MSC_SCAN) -- printf(_(": scancode = 0x%02x\n"), ev[i].value); -- else -- printf(_(": code = %s(0x%02x), value = %d\n"), -- get_event_name(msc_events, ev[i].code), -+ switch (ev[i].type) { -+ case EV_SYN: -+ printf(".\n"); -+ break; -+ case EV_KEY: -+ printf(_(" key_%s: %s(0x%04x)\n"), -+ (ev[i].value == 0) ? _("up") : _("down"), -+ get_event_name(key_events, ev[i].code), -+ ev[i].code); -+ break; -+ case EV_REL: -+ printf(_(": %s (0x%04x) value=%d\n"), -+ get_event_name(rel_events, ev[i].code), -+ ev[i].code, -+ ev[i].value); -+ break; -+ case EV_ABS: -+ printf(_(": %s (0x%04x) value=%d\n"), -+ get_event_name(abs_events, ev[i].code), -+ ev[i].code, -+ ev[i].value); -+ break; -+ case EV_MSC: -+ if (ev[i].code == MSC_SCAN) -+ printf(_(": scancode = 0x%02x\n"), ev[i].value); -+ else -+ printf(_(": code = %s(0x%02x), value = %d\n"), -+ get_event_name(msc_events, ev[i].code), -+ ev[i].code, ev[i].value); -+ break; -+ case EV_REP: -+ printf(_(": value = %d\n"), ev[i].value); -+ break; -+ case EV_SW: -+ case EV_LED: -+ case EV_SND: -+ case EV_FF: -+ case EV_PWR: -+ case EV_FF_STATUS: -+ default: -+ printf(_(": code = 0x%02x, value = %d\n"), - ev[i].code, ev[i].value); -- break; -- case EV_REP: -- printf(_(": value = %d\n"), ev[i].value); -- break; -- case EV_SW: -- case EV_LED: -- case EV_SND: -- case EV_FF: -- case EV_PWR: -- case EV_FF_STATUS: -- default: -- printf(_(": code = 0x%02x, value = %d\n"), -- ev[i].code, ev[i].value); -- break; -+ break; -+ } -+ } -+ } else { -+ for (i = 0; i < rd / sizeof(struct input_event); i++) { -+ -+ switch (ev[i].type) { -+ case EV_MSC: -+ if (ev[i].code == MSC_SCAN) { -+ unsigned int nec_code = -+ ((~ev[i].value & 0xFF) << 24) | -+ ((ev[i].value & 0xFF) << 16) | -+ ((~(ev[i].value >> 8) & 0xFF) << 8) | -+ ((ev[i].value >> 8) & 0xFF); -+ printf(_("Received NEC code: 0x%08X\n"), nec_code); -+ } -+ break; -+ } - } - } - } -@@ -1624,7 +1651,7 @@ int main(int argc, char *argv[]) - argp_parse(&argp, argc, argv, ARGP_NO_HELP, 0, 0); - - /* Just list all devices */ -- if (!clear && !readtable && !keytable && !ch_proto && !cfg.next && !test && delay < 0 && period < 0) { -+ if (!clear && !readtable && !keytable && !ch_proto && !cfg.next && !test && !poweron && delay < 0 && period < 0) { - if (devicename) { - fd = open(devicename, O_RDONLY); - if (fd < 0) { -@@ -1750,6 +1777,9 @@ int main(int argc, char *argv[]) - /* - * Third step: change protocol - */ -+ if (poweron) -+ ch_proto = SYSFS_NEC; -+ - if (ch_proto) { - rc_dev.current = ch_proto; - if (set_proto(&rc_dev)) -@@ -1780,8 +1810,8 @@ int main(int argc, char *argv[]) - set_rate(fd, new_delay, new_period); - } - -- if (test) -- test_event(&rc_dev, fd); -+ if (test || poweron) -+ test_event(&rc_dev, fd, poweron); - - return 0; - } diff --git a/packages/sysutils/v4l-utils/patches/v4l-utils-0002-backport-imon-and-rcmm-protocol-support.patch b/packages/sysutils/v4l-utils/patches/v4l-utils-0002-backport-imon-and-rcmm-protocol-support.patch deleted file mode 100644 index 9b04950ee..000000000 --- a/packages/sysutils/v4l-utils/patches/v4l-utils-0002-backport-imon-and-rcmm-protocol-support.patch +++ /dev/null @@ -1,35 +0,0 @@ -From dc70f6cdfa9980b707a958cfca9a3820d51af8f6 Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Sat, 23 Mar 2019 10:11:55 +0100 -Subject: [PATCH] keytable: backport imon and rc-mm protocols - -Signed-off-by: Matthias Reichl ---- - utils/keytable/keytable.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c -index 34a1522e..67c6f92c 100644 ---- a/utils/keytable/keytable.c -+++ b/utils/keytable/keytable.c -@@ -112,6 +112,8 @@ enum sysfs_protocols { - SYSFS_SHARP = (1 << 11), - SYSFS_XMP = (1 << 12), - SYSFS_CEC = (1 << 13), -+ SYSFS_IMON = (1 << 14), -+ SYSFS_RCMM = (1 << 15), - SYSFS_INVALID = 0, - }; - -@@ -145,6 +147,8 @@ const struct protocol_map_entry protocol_map[] = { - { "sharp", NULL, SYSFS_SHARP }, - { "xmp", "/xmp_decoder", SYSFS_XMP }, - { "cec", NULL, SYSFS_CEC }, -+ { "imon", NULL, SYSFS_IMON }, -+ { "rc-mm", NULL, SYSFS_RCMM }, - { NULL, NULL, SYSFS_INVALID }, - }; - --- -2.20.1 - diff --git a/packages/sysutils/v4l-utils/patches/v4l-utils-0003-add-xbox-dvd-protocol.patch b/packages/sysutils/v4l-utils/patches/v4l-utils-0003-add-xbox-dvd-protocol.patch deleted file mode 100644 index 1bbfabae7..000000000 --- a/packages/sysutils/v4l-utils/patches/v4l-utils-0003-add-xbox-dvd-protocol.patch +++ /dev/null @@ -1,33 +0,0 @@ -From dbf64abf9eed823b35a2931d4882905b6106461e Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Sat, 23 Mar 2019 10:19:48 +0100 -Subject: [PATCH] keytable: add xbox-dvd protocol - -Signed-off-by: Matthias Reichl ---- - utils/keytable/keytable.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c -index 67c6f92c..4ee280cc 100644 ---- a/utils/keytable/keytable.c -+++ b/utils/keytable/keytable.c -@@ -114,6 +114,7 @@ enum sysfs_protocols { - SYSFS_CEC = (1 << 13), - SYSFS_IMON = (1 << 14), - SYSFS_RCMM = (1 << 15), -+ SYSFS_XBOX_DVD = (1 << 16), - SYSFS_INVALID = 0, - }; - -@@ -149,6 +150,7 @@ const struct protocol_map_entry protocol_map[] = { - { "cec", NULL, SYSFS_CEC }, - { "imon", NULL, SYSFS_IMON }, - { "rc-mm", NULL, SYSFS_RCMM }, -+ { "xbox-dvd", NULL, SYSFS_XBOX_DVD }, - { NULL, NULL, SYSFS_INVALID }, - }; - --- -2.20.1 - diff --git a/packages/sysutils/v4l-utils/patches/v4l-utils-0004-add-power-on-argument-fixup.patch b/packages/sysutils/v4l-utils/patches/v4l-utils-0004-add-power-on-argument-fixup.patch deleted file mode 100644 index 7f1290f49..000000000 --- a/packages/sysutils/v4l-utils/patches/v4l-utils-0004-add-power-on-argument-fixup.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c -index b45b1fe..1097eb0 100644 ---- a/utils/keytable/keytable.c -+++ b/utils/keytable/keytable.c -@@ -115,6 +115,7 @@ enum sysfs_protocols { - SYSFS_IMON = (1 << 14), - SYSFS_RCMM = (1 << 15), - SYSFS_XBOX_DVD = (1 << 16), -+ SYSFS_IRMP = (1 << 17), - SYSFS_INVALID = 0, - }; - -@@ -151,6 +152,7 @@ const struct protocol_map_entry protocol_map[] = { - { "imon", NULL, SYSFS_IMON }, - { "rc-mm", NULL, SYSFS_RCMM }, - { "xbox-dvd", NULL, SYSFS_XBOX_DVD }, -+ { "irmp", "/irmp_decoder", SYSFS_IRMP }, - { NULL, NULL, SYSFS_INVALID }, - }; - -@@ -234,7 +236,7 @@ static const struct argp_option options[] = { - {"clear", 'c', 0, 0, N_("clears the old table"), 0}, - {"sysdev", 's', N_("SYSDEV"), 0, N_("ir class device to control"), 0}, - {"test", 't', 0, 0, N_("test if IR is generating events"), 0}, -- {"power-key", 'u', 0, 0, N_("will scan for NEC power on code"), 0}, -+ {"power-key", 'u', 0, 0, N_("will scan for a compatible power on code"), 0}, - {"device", 'd', N_("DEV"), 0, N_("ir device to control"), 0}, - {"read", 'r', 0, 0, N_("reads the current scancode/keycode table"), 0}, - {"write", 'w', N_("TABLE"), 0, N_("write (adds) the scancodes to the device scancode/keycode table from an specified file"), 0}, -@@ -1356,6 +1358,8 @@ static void test_event(struct rc_device *rc_dev, int fd, int power_on) - struct lirc_scancode sc[64]; - int rd, i, lircfd = -1; - unsigned mode; -+ unsigned protocol; -+ unsigned undefined; - - /* LIRC reports time in monotonic, set event to same */ - mode = CLOCK_MONOTONIC; -@@ -1378,7 +1382,7 @@ static void test_event(struct rc_device *rc_dev, int fd, int power_on) - if (!power_on) - printf (_("Testing events. Please, press CTRL-C to abort.\n")); - else -- printf (_("Waiting for NEC decode event. Please, press CTRL-C to abort.\n")); -+ printf (_("Waiting for IRMP decode event. Please, press CTRL-C to abort.\n")); - - while (1) { - struct pollfd pollstruct[2] = { -@@ -1471,12 +1475,28 @@ static void test_event(struct rc_device *rc_dev, int fd, int power_on) - switch (ev[i].type) { - case EV_MSC: - if (ev[i].code == MSC_SCAN) { -- unsigned int nec_code = -- ((~ev[i].value & 0xFF) << 24) | -- ((ev[i].value & 0xFF) << 16) | -- ((~(ev[i].value >> 8) & 0xFF) << 8) | -- ((ev[i].value >> 8) & 0xFF); -- printf(_("Received NEC code: 0x%08X\n"), nec_code); -+ if ((ev[i].value & 0xFFFFFF00) == 0xA0A0A000) { -+ protocol = ev[i].value & 0xFF; -+ undefined = 0; -+ mode = 0; -+ } -+ else if ((ev[i].value & 0xFFFFFF00) == 0xB0B0B000) { -+ protocol = ev[i].value & 0xFF; -+ undefined = 1; -+ mode = 0; -+ } -+ else if (!mode) { -+ if (!undefined) { -+ printf(_("Received IRMP code: remotewakeup='0x%08x', decode_type='0x%x', "), ev[i].value, protocol); -+ mode = 1; -+ } -+ else -+ printf(_("Received IRMP code: scancode='0x%08x', IRMP protocol = %d, decode_type is undefined!\n"), ev[i].value, protocol); -+ } -+ else if (mode) { -+ printf(_("remotewakeupmask='0x%08x'\n"), ev[i].value); -+ mode = 0; -+ } - } - break; - } -@@ -1784,7 +1804,7 @@ int main(int argc, char *argv[]) - * Third step: change protocol - */ - if (poweron) -- ch_proto = SYSFS_NEC; -+ ch_proto = SYSFS_IRMP; - - if (ch_proto) { - rc_dev.current = ch_proto; diff --git a/packages/sysutils/v4l-utils/udev.d/70-infrared.rules b/packages/sysutils/v4l-utils/udev.d/70-infrared.rules deleted file mode 100644 index 26728303b..000000000 --- a/packages/sysutils/v4l-utils/udev.d/70-infrared.rules +++ /dev/null @@ -1,19 +0,0 @@ - -# Automatically load the proper keymaps after the Remote Controller device -# creation. -# -# User-defined rules can be stored in /storage/.config/rc_maps.cfg. If that -# file doesn't exist the default rules from /etc/rc_maps.cfg are used. - -ACTION=="add", KERNEL=="event*", SUBSYSTEM=="input", SUBSYSTEMS=="rc", ENV{.rc_sysdev}="$id", GOTO="begin" -GOTO="end" - -LABEL="begin" - -ENV{.rc_maps_cfg}="/etc/rc_maps.cfg" -TEST=="/storage/.config/rc_maps.cfg", ENV{.rc_maps_cfg}="/storage/.config/rc_maps.cfg" - -RUN+="/usr/bin/ir-keytable -a $env{.rc_maps_cfg} -s $env{.rc_sysdev}" - -LABEL="end" - diff --git a/packages/sysutils/v4l-utils/udev.d/70-input-repeat.rules b/packages/sysutils/v4l-utils/udev.d/70-input-repeat.rules deleted file mode 100644 index 541276b87..000000000 --- a/packages/sysutils/v4l-utils/udev.d/70-input-repeat.rules +++ /dev/null @@ -1,18 +0,0 @@ -ACTION=="add", SUBSYSTEM=="input", KERNEL=="event[0-9]*", GOTO="start" -GOTO="end" -LABEL="start" - -# don't change eventlircd device settings -ATTRS{name}=="eventlircd", GOTO="end" - -# don't change settings of rc remotes -SUBSYSTEMS=="rc", GOTO="end" - -# set default repeat delay to 500ms like rc remotes -RUN+="/usr/bin/ir-keytable --delay=500 --device=$devnode" - -# make lircd-uinput use same repeat period like keyboards in kodi -ATTRS{name}=="lircd-uinput", \ - RUN+="/usr/bin/ir-keytable --period=80 --device=$devnode" - -LABEL="end" diff --git a/projects/Amlogic/options b/projects/Amlogic/options index b7f1b37f3..2cc2dfe7f 100644 --- a/projects/Amlogic/options +++ b/projects/Amlogic/options @@ -51,9 +51,6 @@ # additional packages to install ADDITIONAL_PACKAGES="" - # build and install CEC framework support (yes / no) - CEC_FRAMEWORK_SUPPORT="yes" - # debug tty path DEBUG_TTY="/dev/ttyAML0" diff --git a/projects/Rockchip/options b/projects/Rockchip/options index 7cf8bc242..01908e9d1 100755 --- a/projects/Rockchip/options +++ b/projects/Rockchip/options @@ -10,7 +10,7 @@ # Kernel to use. values can be: # default: default mainline kernel - LINUX="${LINUX:-rockchip-4.4}" + LINUX="" ################################################################################ # setup build defaults @@ -51,9 +51,6 @@ # additional packages to install # ADDITIONAL_PACKAGES="" - # build and install CEC framework support (yes / no) - CEC_FRAMEWORK_SUPPORT="yes" - # Start boot partition at 16MiB, same as https://github.com/rockchip-linux/build images SYSTEM_PART_START=32768 From f1e1ad1b7e5fd151a85140742a946f007a052276 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Sat, 13 Apr 2024 03:01:07 +0000 Subject: [PATCH 021/184] Fix portmaster compatability script bug --- packages/apps/portmaster/package.mk | 2 +- packages/apps/portmaster/scripts/portmaster_compatibility.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apps/portmaster/package.mk b/packages/apps/portmaster/package.mk index 08573a263..75f1d54d3 100644 --- a/packages/apps/portmaster/package.mk +++ b/packages/apps/portmaster/package.mk @@ -5,7 +5,7 @@ PKG_NAME="portmaster" PKG_VERSION="2024.04.07-0359" PKG_SITE="https://github.com/PortsMaster/PortMaster-GUI" PKG_URL="${PKG_SITE}/releases/download/${PKG_VERSION}/PortMaster.zip" -COMPAT_URL="https://github.com/brooksytech/JelosAddOns/raw/main/compat.zip" +COMPAT_URL="https://github.com/ROCKNIX/packages/raw/main/compat.zip" PKG_LICENSE="MIT" PKG_ARCH="arm aarch64" PKG_DEPENDS_TARGET="toolchain rocknix-hotkey gamecontrollerdb wget oga_controls control-gen" diff --git a/packages/apps/portmaster/scripts/portmaster_compatibility.sh b/packages/apps/portmaster/scripts/portmaster_compatibility.sh index 752c03857..cd57e6d8f 100644 --- a/packages/apps/portmaster/scripts/portmaster_compatibility.sh +++ b/packages/apps/portmaster/scripts/portmaster_compatibility.sh @@ -5,7 +5,7 @@ . /etc/profile -if [[ "${UI_SERVICE}" =~ "weston.service|*sway*" ]]; then +if [[ "${UI_SERVICE}" =~ "weston.service"|"*sway*" ]]; then case "${QUIRK_DEVICE}" in "Hardkernel ODROID-GO-Ultra"|"Powkiddy RGB10 MAX 3 Pro"|"Hardkernel ODROID-N2*") #Fixing ports on S922X, exclude FNA games From 45c29d591994089c468d783aa69455811d6f4b90 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sat, 13 Apr 2024 11:48:49 +0100 Subject: [PATCH 022/184] distro: cleanup orphaned packages --- distributions/ROCKNIX/options | 2 +- packages/audio/lame/package.mk | 32 - packages/audio/taglib/package.mk | 25 - packages/compat/wine-wayland/package.mk | 31 - packages/compress/7-zip/package.mk | 54 - packages/compress/minizip/package.mk | 18 - packages/compress/unrar/package.mk | 33 - .../emulators/libretro/2048-lr/package.mk | 37 - .../emulators/libretro/dosbox-lr/package.mk | 40 - .../libretro/mame2003-midway-lr/package.mk | 41 - .../libretro/mame2003-xtreme-lr/package.mk | 37 - .../sources/km_mame2003_xtreme_libretro.info | 14 - .../emulators/libretro/mame2016-lr/package.mk | 59 - .../mame2016-libretro-crosscompile.patch | 52 - packages/graphics/egl-wayland/package.mk | 18 - packages/graphics/librsvg/package.mk | 22 - packages/kernel/drivers/RTW89/package.mk | 27 - .../firmware/rtl8723ds_config | Bin 47 -> 0 bytes .../RTL8723DS-firmware/firmware/rtl8723ds_fw | Bin 48988 -> 0 bytes .../firmware/RTL8723DS-firmware/package.mk | 21 - .../brcmfmac_sdio-firmware-imx/package.mk | 18 - .../system.d/brcmfmac_sdio-firmware@.service | 8 - .../udev.d/80-brcmfmac_sdio.rules | 19 - .../brcmfmac_sdio-firmware/firmwares/any.dat | 1 - .../brcmfmac_sdio-firmware/package.mk | 47 - .../scripts/brcmfmac-firmware-setup | 12 - .../system.d/brcmfmac-firmware.service | 11 - .../multimedia/nvidia-vaapi-driver/package.mk | 10 - packages/multimedia/zvbi/package.mk | 18 - .../zvbi-0010-fix-static-linking.patch | 41 - .../zvbi/patches/zvbi-0020-ioctl.patch | 18 - .../zvbi/patches/zvbi-0030-ssize_max.patch | 28 - .../patches/zvbi-0040-fix-clang-support.patch | 29 - .../zvbi/patches/zvbi-0050-prevent-test.patch | 76 - packages/network/libssh/package.mk | 33 - .../modules-load.d/wireguard.conf | 1 - .../network/wireguard-linux-compat/package.mk | 27 - packages/sysutils/diffutils/package.mk | 20 - .../patches/diffutils-001-no-man.patch | 11 - ...-explicitly-disable-replacing-getopt.patch | 26 - packages/sysutils/dtach/package.mk | 15 - packages/sysutils/kbd/package.mk | 21 - packages/sysutils/lshw/package.mk | 18 - .../wait-time-sync/daemons/003-wait-time-sync | 4 - packages/sysutils/wait-time-sync/package.mk | 11 - .../sysutils/wait-time-sync/sources/Makefile | 12 - .../wait-time-sync/sources/wait-time-sync.c | 23 - .../system.d/wait-time-sync.service | 27 - packages/tools/MC/etc/edit.indent.rc | 31 - packages/tools/MC/etc/edit.spell.rc | 11 - packages/tools/MC/etc/filehighlight.ini | 47 - packages/tools/MC/etc/ini | 159 - packages/tools/MC/etc/mc.ext | 684 ---- packages/tools/MC/etc/mc.keymap | 429 --- packages/tools/MC/etc/mc.keymap.default | 429 --- packages/tools/MC/etc/mc.keymap.emacs | 432 --- packages/tools/MC/etc/mc.menu | 383 --- packages/tools/MC/etc/mc.menu.sr | 344 -- packages/tools/MC/etc/mcedit.menu | 486 --- packages/tools/MC/etc/panels.ini | 31 - packages/tools/MC/etc/sfs.ini | 28 - packages/tools/MC/package.mk | 48 - packages/tools/MC/patches/MC-01-utf8.patch | 33 - packages/tools/MC/profile.d/052-mc.conf | 4 - .../sound/timidity/config/GeneralUser.cfg | 1796 ----------- .../sound/timidity/config/fluidr3_gm.cfg | 2830 ----------------- .../sound/timidity/config/fluidr3_gs.cfg | 97 - .../tools/sound/timidity/config/freepats.cfg | 135 - .../timidity/config/soundfont_readme.txt | 9 - .../tools/sound/timidity/config/timidity.cfg | 42 - packages/tools/sound/timidity/package.mk | 36 - .../patches/02-calcnewt-host-build.patch | 28 - .../timidity/patches/03-ar-cru-fix.patch | 11 - packages/tools/u-boot-script/package.mk | 25 - packages/tools/xow/package.mk | 22 - 75 files changed, 1 insertion(+), 9757 deletions(-) delete mode 100644 packages/audio/lame/package.mk delete mode 100644 packages/audio/taglib/package.mk delete mode 100644 packages/compat/wine-wayland/package.mk delete mode 100644 packages/compress/7-zip/package.mk delete mode 100644 packages/compress/minizip/package.mk delete mode 100644 packages/compress/unrar/package.mk delete mode 100644 packages/emulators/libretro/2048-lr/package.mk delete mode 100644 packages/emulators/libretro/dosbox-lr/package.mk delete mode 100644 packages/emulators/libretro/mame2003-midway-lr/package.mk delete mode 100644 packages/emulators/libretro/mame2003-xtreme-lr/package.mk delete mode 100644 packages/emulators/libretro/mame2003-xtreme-lr/sources/km_mame2003_xtreme_libretro.info delete mode 100644 packages/emulators/libretro/mame2016-lr/package.mk delete mode 100644 packages/emulators/libretro/mame2016-lr/patches/mame2016-libretro-crosscompile.patch delete mode 100644 packages/graphics/egl-wayland/package.mk delete mode 100644 packages/graphics/librsvg/package.mk delete mode 100644 packages/kernel/drivers/RTW89/package.mk delete mode 100644 packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_config delete mode 100644 packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_fw delete mode 100644 packages/kernel/firmware/RTL8723DS-firmware/package.mk delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware-imx/package.mk delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware-imx/system.d/brcmfmac_sdio-firmware@.service delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware-imx/udev.d/80-brcmfmac_sdio.rules delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware/firmwares/any.dat delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware/package.mk delete mode 100755 packages/kernel/firmware/brcmfmac_sdio-firmware/scripts/brcmfmac-firmware-setup delete mode 100644 packages/kernel/firmware/brcmfmac_sdio-firmware/system.d/brcmfmac-firmware.service delete mode 100644 packages/multimedia/nvidia-vaapi-driver/package.mk delete mode 100644 packages/multimedia/zvbi/package.mk delete mode 100644 packages/multimedia/zvbi/patches/zvbi-0010-fix-static-linking.patch delete mode 100644 packages/multimedia/zvbi/patches/zvbi-0020-ioctl.patch delete mode 100644 packages/multimedia/zvbi/patches/zvbi-0030-ssize_max.patch delete mode 100644 packages/multimedia/zvbi/patches/zvbi-0040-fix-clang-support.patch delete mode 100644 packages/multimedia/zvbi/patches/zvbi-0050-prevent-test.patch delete mode 100644 packages/network/libssh/package.mk delete mode 100644 packages/network/wireguard-linux-compat/modules-load.d/wireguard.conf delete mode 100644 packages/network/wireguard-linux-compat/package.mk delete mode 100644 packages/sysutils/diffutils/package.mk delete mode 100644 packages/sysutils/diffutils/patches/diffutils-001-no-man.patch delete mode 100644 packages/sysutils/diffutils/patches/diffutils-002-explicitly-disable-replacing-getopt.patch delete mode 100644 packages/sysutils/dtach/package.mk delete mode 100644 packages/sysutils/kbd/package.mk delete mode 100644 packages/sysutils/lshw/package.mk delete mode 100755 packages/sysutils/wait-time-sync/daemons/003-wait-time-sync delete mode 100644 packages/sysutils/wait-time-sync/package.mk delete mode 100644 packages/sysutils/wait-time-sync/sources/Makefile delete mode 100644 packages/sysutils/wait-time-sync/sources/wait-time-sync.c delete mode 100644 packages/sysutils/wait-time-sync/system.d/wait-time-sync.service delete mode 100644 packages/tools/MC/etc/edit.indent.rc delete mode 100644 packages/tools/MC/etc/edit.spell.rc delete mode 100644 packages/tools/MC/etc/filehighlight.ini delete mode 100644 packages/tools/MC/etc/ini delete mode 100644 packages/tools/MC/etc/mc.ext delete mode 100644 packages/tools/MC/etc/mc.keymap delete mode 100644 packages/tools/MC/etc/mc.keymap.default delete mode 100644 packages/tools/MC/etc/mc.keymap.emacs delete mode 100644 packages/tools/MC/etc/mc.menu delete mode 100644 packages/tools/MC/etc/mc.menu.sr delete mode 100644 packages/tools/MC/etc/mcedit.menu delete mode 100644 packages/tools/MC/etc/panels.ini delete mode 100644 packages/tools/MC/etc/sfs.ini delete mode 100644 packages/tools/MC/package.mk delete mode 100644 packages/tools/MC/patches/MC-01-utf8.patch delete mode 100644 packages/tools/MC/profile.d/052-mc.conf delete mode 100644 packages/tools/sound/timidity/config/GeneralUser.cfg delete mode 100644 packages/tools/sound/timidity/config/fluidr3_gm.cfg delete mode 100644 packages/tools/sound/timidity/config/fluidr3_gs.cfg delete mode 100644 packages/tools/sound/timidity/config/freepats.cfg delete mode 100644 packages/tools/sound/timidity/config/soundfont_readme.txt delete mode 100644 packages/tools/sound/timidity/config/timidity.cfg delete mode 100644 packages/tools/sound/timidity/package.mk delete mode 100644 packages/tools/sound/timidity/patches/02-calcnewt-host-build.patch delete mode 100644 packages/tools/sound/timidity/patches/03-ar-cru-fix.patch delete mode 100644 packages/tools/u-boot-script/package.mk delete mode 100644 packages/tools/xow/package.mk diff --git a/distributions/ROCKNIX/options b/distributions/ROCKNIX/options index fc0277e33..eb6602136 100644 --- a/distributions/ROCKNIX/options +++ b/distributions/ROCKNIX/options @@ -45,7 +45,7 @@ # Define package sets to clean based on the type of build being executed. # This should be updated to be more dynamic in the future. - CLEAN_OS_BASE="initramfs emulators u-boot-script system-utils modules quirks autostart rocknix" + CLEAN_OS_BASE="initramfs emulators system-utils modules quirks autostart rocknix" CLEAN_NETWORK="RTL8821CS-firmware" CLEAN_EMU_32BIT="lib32 box86 pcsx_rearmed-lr arm" # Sway depends on it, weston will use it if it's built but we don't want that. diff --git a/packages/audio/lame/package.mk b/packages/audio/lame/package.mk deleted file mode 100644 index f15b34b01..000000000 --- a/packages/audio/lame/package.mk +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="lame" -PKG_VERSION="3.100" -PKG_SHA256="ddfe36cab873794038ae2c1210557ad34857a4b6bdc515785d1da9e175b1da1e" -PKG_LICENSE="LGPL" -PKG_SITE="http://lame.sourceforge.net/" -PKG_URL="${SOURCEFORGE_SRC}/lame/lame/3.100/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A high quality MPEG Audio Layer III (MP3) encoder." -PKG_BUILD_FLAGS="-parallel +pic" - -# package specific configure options -PKG_CONFIGURE_OPTS_TARGET="--enable-static \ - --disable-shared \ - --disable-nasm \ - --disable-rpath \ - --disable-cpml \ - --disable-gtktest \ - --disable-efence \ - --disable-analyzer-hooks \ - --enable-decoder \ - --disable-frontend \ - --disable-mp3x \ - --disable-mp3rtp \ - --disable-dynamic-frontends \ - --enable-expopt=no \ - --enable-debug=no \ - --with-gnu-ld \ - --with-fileio=lame \ - GTK_CONFIG=no" diff --git a/packages/audio/taglib/package.mk b/packages/audio/taglib/package.mk deleted file mode 100644 index b7da2cfde..000000000 --- a/packages/audio/taglib/package.mk +++ /dev/null @@ -1,25 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="taglib" -PKG_VERSION="1.13.1" -PKG_LICENSE="LGPL" -PKG_SITE="http://taglib.github.com/" -PKG_URL="https://taglib.org/releases/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain cmake:host zlib" -PKG_LONGDESC="TagLib is a library for reading and editing the meta-data of several popular audio formats." - -PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=OFF \ - -DWITH_MP4=ON \ - -DWITH_ASF=ON" - -post_makeinstall_target() { - rm -rf ${INSTALL}/usr/bin - # pkgconf hack - sed -e "s:\(['=\" ]\)/usr:\\1${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/bin/taglib-config - sed -e "s:\([':\" ]\)-I/usr:\\1-I${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/lib/pkgconfig/taglib.pc - sed -e "s:\([':\" ]\)-L/usr:\\1-L${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/lib/pkgconfig/taglib.pc - sed -e "s:\([':\" ]\)-I/usr:\\1-I${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/lib/pkgconfig/taglib_c.pc - sed -e "s:\([':\" ]\)-L/usr:\\1-L${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/lib/pkgconfig/taglib_c.pc -} diff --git a/packages/compat/wine-wayland/package.mk b/packages/compat/wine-wayland/package.mk deleted file mode 100644 index 1285199c8..000000000 --- a/packages/compat/wine-wayland/package.mk +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="wine-wayland" -PKG_VERSION="8.2.1" -PKG_LICENSE="free" -PKG_SITE="https://github.com/varmd/wine-wayland" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="wine wayland" -PKG_TOOLCHAIN="manual" - -PKG_SITE_X32="${PKG_SITE}/releases/download/v${PKG_VERSION}/lib32-${PKG_NAME}-8.2-1-x86_64.pkg.tar.zst" -PKG_SITE_X64="${PKG_SITE}/releases/download/v${PKG_VERSION}/${PKG_NAME}-8.2-1-x86_64.pkg.tar.zst" - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - mkdir -p ${INSTALL}/usr/config - mkdir -p ${INSTALL}/usr/lib - mkdir -p ${INSTALL}/usr/lib32 - - #Download Wine Wayland x32 packages - curl -Lo ${PKG_BUILD}/${PKG_NAME}_X32.tar.zst ${PKG_SITE_X32} - unzstd ${PKG_BUILD}/${PKG_NAME}_X32.tar.zst - tar -xvf ${PKG_BUILD}/${PKG_NAME}_X32.tar -C ${INSTALL}/ - - - #Download Wine Wayland x64 packages - curl -Lo ${PKG_BUILD}/${PKG_NAME}_X64.tar.zst ${PKG_SITE_X64} - unzstd ${PKG_BUILD}/${PKG_NAME}_X64.tar.zst - tar -xvf ${PKG_BUILD}/${PKG_NAME}_X64.tar -C ${INSTALL}/ -} diff --git a/packages/compress/7-zip/package.mk b/packages/compress/7-zip/package.mk deleted file mode 100644 index 5a688368e..000000000 --- a/packages/compress/7-zip/package.mk +++ /dev/null @@ -1,54 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# Copyright (C) 2023-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="7-zip" -PKG_VERSION="23.01" -PKG_LICENSE="7-Zip" -PKG_SITE="https://www.7-zip.org" -PKG_URL="https://www.7-zip.org/a/7z${PKG_VERSION/./}-src.tar.xz" -PKG_DEPENDS_HOST="ccache:host" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="7-Zip is a file archiver with a high compression ratio" -PKG_TAR_STRIP_COMPONENTS="--strip-components=0" -PKG_TOOLCHAIN="manual" - -pre_build_host() { - rm -fr ${PKG_BUILD}/.${HOST_NAME} - mkdir -p ${PKG_BUILD}/.${HOST_NAME} - cp -RP ${PKG_BUILD}/* ${PKG_BUILD}/.${HOST_NAME} -} - -make_host() { - # compile without 7-Zip's assembler code (not required in toolchain) - make CXX=${CXX} CC=${CC} -f makefile.gcc -C ${PKG_BUILD}/.${HOST_NAME}/CPP/7zip/Bundles/Alone -} - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/bin - cp ${PKG_BUILD}/.${HOST_NAME}/CPP/7zip/Bundles/Alone/_o/7za ${TOOLCHAIN}/bin -} - -pre_build_target() { - rm -fr ${PKG_BUILD}/.${TARGET_NAME} - mkdir -p ${PKG_BUILD}/.${TARGET_NAME} - cp -RP ${PKG_BUILD}/* ${PKG_BUILD}/.${TARGET_NAME} -} - -make_target() { - # arm (arm32) does not have an assembler code option for 7-Zip - # dont use x86_64 ../../cmpl_gcc_x64.mak file to build 7-Zip's assembler code (as asmc is not available) - if [ "${TARGET_ARCH}" = "aarch64" ]; then - make CXX=${CXX} CC=${CC} -f ../../cmpl_gcc_arm64.mak -C ${PKG_BUILD}/.${TARGET_NAME}/CPP/7zip/Bundles/Alone2 - else - make CXX=${CXX} CC=${CC} -f makefile.gcc -C ${PKG_BUILD}/.${TARGET_NAME}/CPP/7zip/Bundles/Alone2 - fi -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - if [ "${TARGET_ARCH}" = "aarch64" ]; then - cp -p ${PKG_BUILD}/.${TARGET_NAME}/CPP/7zip/Bundles/Alone2/b/g_arm64/7zz ${INSTALL}/usr/bin - else - cp -p ${PKG_BUILD}/.${TARGET_NAME}/CPP/7zip/Bundles/Alone2/_o/7zz ${INSTALL}/usr/bin - fi -} diff --git a/packages/compress/minizip/package.mk b/packages/compress/minizip/package.mk deleted file mode 100644 index 9138ff7ee..000000000 --- a/packages/compress/minizip/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="minizip" -PKG_VERSION="4.0.1" -PKG_LICENSE="zlib" -PKG_SITE="https://github.com/nmoinvaz/minizip" -PKG_URL="https://github.com/nmoinvaz/minizip/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="zlib" -PKG_LONGDESC="Minizip zlib contribution fork with latest bug fixes" - -PKG_CMAKE_OPTS_TARGET="-DUSE_AES=OFF \ - -DBUILD_TEST=ON" - -makeinstall_target() { - cp -v miniunz_exec ${SYSROOT_PREFIX}/usr/bin/miniunz - cp -v minizip_exec ${SYSROOT_PREFIX}/usr/bin/minizip -} diff --git a/packages/compress/unrar/package.mk b/packages/compress/unrar/package.mk deleted file mode 100644 index 7407b1872..000000000 --- a/packages/compress/unrar/package.mk +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="unrar" -PKG_VERSION="df15c8c3c9f4105d3501bc477e80ac6b8e227677" -PKG_LICENSE="free" -PKG_SITE="http://www.rarlab.com" -PKG_URL="https://github.com/pmachapman/unrar.git" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="unrar extract, test and view RAR archives" -PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="+pic" - -make_target() { - make CXX="${CXX}" \ - CXXFLAGS="${TARGET_CXXFLAGS}" \ - RANLIB="$RANLIB" \ - AR="${AR}" \ - STRIP="${STRIP}" \ - -f makefile unrar - - make clean - - make CXX="${CXX}" \ - CXXFLAGS="${TARGET_CXXFLAGS}" \ - RANLIB="$RANLIB" \ - AR="${AR}" \ - -f makefile lib -} - -post_make_target() { - rm -f libunrar.so -} diff --git a/packages/emulators/libretro/2048-lr/package.mk b/packages/emulators/libretro/2048-lr/package.mk deleted file mode 100644 index 6a3f99cff..000000000 --- a/packages/emulators/libretro/2048-lr/package.mk +++ /dev/null @@ -1,37 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2020 351ELEC team (https://github.com/fewtarius/351ELEC) -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="2048-lr" -PKG_VERSION="331c1de588ed8f8c370dcbc488e5434a3c09f0f2" -PKG_LICENSE="GPLv3" -PKG_SITE="https://github.com/libretro/libretro-2048" -PKG_URL="https://github.com/libretro/libretro-2048/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Port of 2048 puzzle game to the libretro API." -PKG_TOOLCHAIN="make" - - -PKG_MAKE_OPTS_TARGET="-f Makefile.libretro GIT_VERSION=${PKG_VERSION:0:7}" - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/lib/libretro - cp 2048_libretro.so ${INSTALL}/usr/lib/libretro/ -} diff --git a/packages/emulators/libretro/dosbox-lr/package.mk b/packages/emulators/libretro/dosbox-lr/package.mk deleted file mode 100644 index abfc1ae54..000000000 --- a/packages/emulators/libretro/dosbox-lr/package.mk +++ /dev/null @@ -1,40 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2020 351ELEC team (https://github.com/fewtarius/351ELEC) -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="dosbox-lr" -PKG_VERSION="b7b24262c282c0caef2368c87323ff8c381b3102" -PKG_LICENSE="GPLv2" -PKG_SITE="https://github.com/libretro/dosbox-libretro" -PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="libretro wrapper for the DOSBox emulator" -PKG_BUILD_FLAGS="-lto" -GET_HANDLER_SUPPORT="git" - - -make_target() { - make -f Makefile.libretro -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/lib/libretro - cp dosbox_libretro.so ${INSTALL}/usr/lib/libretro/ -} diff --git a/packages/emulators/libretro/mame2003-midway-lr/package.mk b/packages/emulators/libretro/mame2003-midway-lr/package.mk deleted file mode 100644 index 983f5823d..000000000 --- a/packages/emulators/libretro/mame2003-midway-lr/package.mk +++ /dev/null @@ -1,41 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2020 351ELEC team (https://github.com/fewtarius/351ELEC) -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="mame2003-midway-lr" -PKG_VERSION="2204233a66a78ebbb0ef1e86bb9d36e4405a2a92" -PKG_SHA256="8ed1addf56c9ed1999bac813e132c630f67096c9eaf4ab16495030c3e9045d43" -PKG_LICENSE="MAME" -PKG_SITE="https://github.com/libretro/mame2003_midway" -PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="MAME - Multiple Arcade Machine Emulator" - -PKG_TOOLCHAIN="make" -PKG_BUILD_FLAGS="-lto" - -make_target() { - make ARCH="" CC="${CC}" NATIVE_CC="${CC}" LD="${CC}" -j 1 -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/lib/libretro - cp mame2003_midway_libretro.so ${INSTALL}/usr/lib/libretro/ -} diff --git a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk b/packages/emulators/libretro/mame2003-xtreme-lr/package.mk deleted file mode 100644 index 0690de5d0..000000000 --- a/packages/emulators/libretro/mame2003-xtreme-lr/package.mk +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert) - -PKG_NAME="mame2003-xtreme-lr" -PKG_VERSION="47deb07f49224ec5b0bbc56392b639d728183629" -PKG_SHA256="185b7e857e836b3987737ff9077d0709444491a0f138cfbbe1f50a6ad5d719b7" -PKG_LICENSE="MAME" -PKG_SITE="https://github.com/KMFDManic/mame2003-xtreme" -PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Updated 2018 version of MAME (0.78) for libretro, with added game support, and optimized for performance and speed on the Mini Classics. " -PKG_TOOLCHAIN="make" - -pre_configure_target() { - cd ${PKG_BUILD} - export SYSROOT_PREFIX=${SYSROOT_PREFIX} - - case ${PROJECT} in - Amlogic-ng) - PKG_MAKE_OPTS_TARGET+=" platform=AMLG12B" - ;; - Amlogic) - PKG_MAKE_OPTS_TARGET+=" platform=AMLGX" - ;; - esac - PKG_MAKE_OPTS_TARGET+=" ARCH=\"\" CC=\"${CC}\" NATIVE_CC=\"${CC}\" LD=\"${CC}\"" - - # PKG_MAKE_OPTS_TARGET=" platform=rpi2 ARCH=\"\" CC=\"${CC}\" NATIVE_CC=\"${CC}\" LD=\"${CC}\"" - - } - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/lib/libretro - cp mame2003_libretro.so ${INSTALL}/usr/lib/libretro/km_mame2003_xtreme_libretro.so - cp km_mame2003_xtreme_libretro.info ${INSTALL}/usr/lib/libretro/km_mame2003_xtreme_libretro.info - -} diff --git a/packages/emulators/libretro/mame2003-xtreme-lr/sources/km_mame2003_xtreme_libretro.info b/packages/emulators/libretro/mame2003-xtreme-lr/sources/km_mame2003_xtreme_libretro.info deleted file mode 100644 index 84494a69e..000000000 --- a/packages/emulators/libretro/mame2003-xtreme-lr/sources/km_mame2003_xtreme_libretro.info +++ /dev/null @@ -1,14 +0,0 @@ -display_name = "Arcade (km_MAME 2003 Xtreme)" -authors = "MAMEdev" -supported_extensions = "zip" -corename = "MAME 2003 Xtreme (0.78)" -manufacturer = "Various" -categories = "Emulator" -systemname = "Arcade (various)" -systemid = "mame" -database = "MAME 2003" -license = "MAME" -permissions = "" -display_version = "0.78" -supports_no_game = "false" -notes = "(!) The BIOS files must be inside the ROM directory.|" diff --git a/packages/emulators/libretro/mame2016-lr/package.mk b/packages/emulators/libretro/mame2016-lr/package.mk deleted file mode 100644 index 933b288c0..000000000 --- a/packages/emulators/libretro/mame2016-lr/package.mk +++ /dev/null @@ -1,59 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2019 Trond Haugland (trondah@gmail.com) - -PKG_NAME="mame2016-lr" -PKG_VERSION="d53c379892b0bd91b4a52fc2de491e1199f03e32" -PKG_SHA256="bafcac133ff37fb3adeafd9960427e3314e682caf22d455395855d64553d46fe" -PKG_LICENSE="GPLv2" -PKG_SITE="https://github.com/libretro/mame2016-libretro" -PKG_URL="https://github.com/libretro/mame2016-libretro/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="MAME (0.174-ish) for libretro" -PKG_TOOLCHAIN="make" -PKG_BUILD_FLAGS="-lto" - -PTR64="0" -NOASM="0" - -if [ "${ARCH}" == "arm" ]; then - NOASM="1" -elif [ "${ARCH}" == "x86_64" ]; then - PTR64="1" -fi - -PKG_MAKE_OPTS_TARGET="REGENIE=1 \ - VERBOSE=1 \ - NOWERROR=1 \ - OPENMP=1 \ - CROSS_BUILD=1 \ - TOOLS=1 \ - RETRO=1 \ - PTR64=$PTR64 \ - NOASM=$NOASM \ - PYTHON_EXECUTABLE=python2 \ - CONFIG=libretro \ - LIBRETRO_OS=unix \ - LIBRETRO_CPU=${ARCH} \ - PLATFORM=${ARCH} \ - ARCH= \ - TARGET=mame \ - SUBTARGET=arcade \ - OSD=retro \ - USE_SYSTEM_LIB_EXPAT=1 \ - USE_SYSTEM_LIB_ZLIB=1 \ - USE_SYSTEM_LIB_FLAC=1 \ - USE_SYSTEM_LIB_SQLITE3=1" - -make_target() { - unset DISTRO - make ${PKG_MAKE_OPTS_TARGET} OVERRIDE_CC=${CC} OVERRIDE_CXX=${CXX} OVERRIDE_LD=$LD AR=${AR} ${MAKEFLAGS} -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - mkdir -p ${INSTALL}/usr/lib/libretro - cp *.so ${INSTALL}/usr/lib/libretro/mame2016_libretro.so - mkdir -p ${INSTALL}/usr/config/retroarch/savefiles/mame2016/hi - cp metadata/hiscore.dat ${INSTALL}/usr/config/retroarch/savefiles/mame2016/hi -} - diff --git a/packages/emulators/libretro/mame2016-lr/patches/mame2016-libretro-crosscompile.patch b/packages/emulators/libretro/mame2016-lr/patches/mame2016-libretro-crosscompile.patch deleted file mode 100644 index 7875180e3..000000000 --- a/packages/emulators/libretro/mame2016-lr/patches/mame2016-libretro-crosscompile.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- a/3rdparty/genie/build/gmake.linux/genie.make 2018-08-11 00:17:44.000000000 +0200 -+++ b/3rdparty/genie/build/gmake.linux/genie.make 2019-04-03 11:57:27.671223016 +0200 -@@ -28,8 +28,8 @@ - RM = $(SILENT) del /F "$(subst /,\\,$(1))" 2> nul || exit 0 - endif - --CC = gcc --CXX = g++ -+CC = $(HOST_CC) -+CXX = $(HOST_CXX) - AR = ar - - ifndef RESCOMP -@@ -47,11 +47,11 @@ - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN - INCLUDES += -I../../src/host/lua-5.3.0/src - ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) -- ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -- ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -- ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -+ ALL_CFLAGS += $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -+ ALL_CXXFLAGS += $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -+ ALL_OBJCFLAGS += $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os - ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) -- ALL_LDFLAGS += $(LDFLAGS) -L. -s -rdynamic -+ ALL_LDFLAGS += -L. -s -rdynamic - LDDEPS += - LIBS += $(LDDEPS) -ldl -lm - EXTERNAL_LIBS += ---- a/scripts/toolchain.lua 2019-04-03 12:13:08.556919475 +0200 -+++ b/scripts/toolchain.lua 2019-04-03 12:13:43.323043587 +0200 -@@ -675,9 +675,6 @@ - - configuration { "linux-gcc", "x32" } - objdir (_buildDir .. "linux_gcc" .. "/obj") -- buildoptions { -- "-m32", -- } - - configuration { "linux-gcc", "x32", "Release" } - targetdir (_buildDir .. "linux_gcc" .. "/bin/x32/Release") ---- a/3rdparty/genie/src/host/scripts.c 2019-04-03 12:30:33.272654617 +0200 -+++ b/3rdparty/genie/src/host/scripts.c 2019-04-03 12:30:12.892921812 +0200 -@@ -131,7 +131,7 @@ - "gs(cfg)\nlocal result = table.translate(cfg.flags, flags)\nreturn result\nend\nfunction premake.dotnet.getkind(cfg)\nif (cfg.kind == \"ConsoleApp\") then\nreturn \"Exe\"\nelseif (cfg.kind == \"WindowedApp\") then\nreturn \"WinExe\"\nelseif (cfg.kind == \"SharedLib\") then\nreturn \"Library\"\nend\nend", - - /* tools/gcc.lua */ -- "premake.gcc = { }\npremake.gcc.cc = \"gcc\"\npremake.gcc.cxx = \"g++\"\npremake.gcc.ar = \"ar\"\npremake.gcc.llvm = false\nlocal cflags =\n{\nEnableSSE = \"-msse\",\nEnableSSE2 = \"-msse2\",\nEnableAVX = \"-mavx\",\nEnableAVX2 = \"-mavx2\",\nExtraWarnings = \"-Wall -Wextra\",\nFatalWarnings = \"-Werror\",\nFloatFast = \"-ffast-math\",\nFloatStrict = \"-ffloat-store\",\nNoFramePointer = \"-fomit-frame-pointer\",\nOptimize = \"-O2\",\nOptimizeSize = \"-Os\",\nOptimizeSpeed = \"-O3\",\nSymbols = \"-g\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-fno-exceptions\",\nNoRTTI = \"-fno-rtti\",\nUnsignedChar = \"-funsigned-char\",\n}\npremake.gcc.platforms =\n{\nNative = {\ncppflags = \"-MMD -MP\",\n},\nx32 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m32\",\n},\nx64 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m64\",\n},\nUniversal = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch x86_64 -arch ppc -arch ppc64\",\n}," -+ "premake.gcc = { }\npremake.gcc.cc = \"gcc\"\npremake.gcc.cxx = \"g++\"\npremake.gcc.ar = \"ar\"\npremake.gcc.llvm = false\nlocal cflags =\n{\nEnableSSE = \"-msse\",\nEnableSSE2 = \"-msse2\",\nEnableAVX = \"-mavx\",\nEnableAVX2 = \"-mavx2\",\nExtraWarnings = \"-Wall -Wextra\",\nFatalWarnings = \"-Werror\",\nFloatFast = \"-ffast-math\",\nFloatStrict = \"-ffloat-store\",\nNoFramePointer = \"-fomit-frame-pointer\",\nOptimize = \"-O2\",\nOptimizeSize = \"-Os\",\nOptimizeSpeed = \"-O3\",\nSymbols = \"-g\",\n}\nlocal cxxflags =\n{\nNoExceptions = \"-fno-exceptions\",\nNoRTTI = \"-fno-rtti\",\nUnsignedChar = \"-funsigned-char\",\n}\npremake.gcc.platforms =\n{\nNative = {\ncppflags = \"-MMD -MP\",\n},\nx32 = {\ncppflags = \"-MMD -MP\",\n},\nx64 = {\ncppflags = \"-MMD -MP\",\nflags = \"-m64\",\n},\nUniversal = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch x86_64 -arch ppc -arch ppc64\",\n}," - "\nUniversal32 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch i386 -arch ppc\",\n},\nUniversal64 = {\nar = \"libtool\",\ncppflags = \"-MMD -MP\",\nflags = \"-arch x86_64 -arch ppc64\",\n},\nPS3 = {\ncc = \"ppu-lv2-g++\",\ncxx = \"ppu-lv2-g++\",\nar = \"ppu-lv2-ar\",\ncppflags = \"-MMD -MP\",\n},\nWiiDev = {\ncppflags = \"-MMD -MP -I$(LIBOGC_INC) $(MACHDEP)\",\nldflags= \"-L$(LIBOGC_LIB) $(MACHDEP)\",\ncfgsettings = [[\n ifeq ($(strip $(DEVKITPPC)),)\n $(error \"DEVKITPPC environment variable is not set\")'\n endif\n include $(DEVKITPPC)/wii_rules']],\n},\nOrbis = {\ncc = \"orbis-clang\",\ncxx = \"orbis-clang++\",\nar = \"orbis-ar\",\ncppflags = \"-MMD -MP\",\n}\n}\nlocal platforms = premake.gcc.platforms\nfunction premake.gcc.getcppflags(cfg)\nlocal flags = { }\ntable.insert(flags, platforms[cfg.platform].cppflags)\nif flags[1]:startswith(\"-MMD\") then\ntable.insert(flags, \"-MP\")\nend\nreturn flags\nend\nfunction " - "premake.gcc.getcflags(cfg)\nlocal result = table.translate(cfg.flags, cflags)\ntable.insert(result, platforms[cfg.platform].flags)\nif cfg.system ~= \"windows\" and cfg.kind == \"SharedLib\" then\ntable.insert(result, \"-fPIC\")\nend\nreturn result\nend\nfunction premake.gcc.getcxxflags(cfg)\nlocal result = table.translate(cfg.flags, cxxflags)\nreturn result\nend\nfunction premake.gcc.getldflags(cfg)\nlocal result = { }\nif not cfg.flags.Symbols then\nif cfg.system == \"macosx\" then\nelse\ntable.insert(result, \"-s\")\nend\nend\nif cfg.kind == \"SharedLib\" then\nif cfg.system == \"macosx\" then\ntable.insert(result, \"-dynamiclib\")\nelse\ntable.insert(result, \"-shared\")\nend\nif cfg.system == \"windows\" and not cfg.flags.NoImportLib then\ntable.insert(result, '-Wl,--out-implib=\"' .. cfg.linktarget.fullpath .. '\"')\nend\nend\nif cfg.kind == \"WindowedApp\" and cfg.system == \"windows\" then\ntable.insert(result, \"-mwindows\")\nend\nlocal platform = platforms[cfg.platform]\ntable.insert(result, platform" - ".flags)\ntable.insert(result, platform.ldflags)\nreturn result\nend\nfunction premake.gcc.getlibdirflags(cfg)\nlocal result = { }\nfor _, value in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\ntable.insert(result, '-L' .. _MAKE.esc(value))\nend\nreturn result\nend\nfunction premake.gcc.islibfile(p)\nif path.getextension(p) == \".a\" then\nreturn true\nend\nreturn false\nend\nfunction premake.gcc.getlibfiles(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif premake.gcc.islibfile(value) then\ntable.insert(result, _MAKE.esc(value))\nend\nend\nreturn result\nend\nfunction premake.gcc.getlinkflags(cfg)\nlocal result = {}\nfor _, value in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nif premake.gcc.islibfile(value) then\ntable.insert(result, _MAKE.esc(value))\nelseif path.getextension(value) == \".framework\" then\ntable.insert(result, '-framework ' .. _MAKE.esc(path.getbasename(value)))\nelse\ntable.insert(result, '-l' .. _MAKE.esc(path" diff --git a/packages/graphics/egl-wayland/package.mk b/packages/graphics/egl-wayland/package.mk deleted file mode 100644 index 4c20d025e..000000000 --- a/packages/graphics/egl-wayland/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="egl-wayland" -PKG_VERSION="1.1.13" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/NVIDIA/egl-wayland" -PKG_URL=${PKG_SITE}/archive/refs/tags/${PKG_VERSION}.tar.gz -PKG_DEPENDS_TARGET="toolchain eglexternalplatform" -PKG_LONGDESC="Wayland EGL External Platform library." - -configure_package() { - if [ "${DISPLAYSERVER}" = "wl" ] - then - PKG_DEPENDS_TARGET+=" wayland" - fi -} - diff --git a/packages/graphics/librsvg/package.mk b/packages/graphics/librsvg/package.mk deleted file mode 100644 index ef24924a6..000000000 --- a/packages/graphics/librsvg/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2021-present Frank Hartung (supervisedthinking (@) gmail.com) - -PKG_NAME="librsvg" -PKG_VERSION="2.57.0" -PKG_LICENSE="LGPL-2.1" -PKG_SITE="https://gitlab.gnome.org/GNOME/librsvg" -PKG_URL="https://download.gnome.org/sources/librsvg/${PKG_VERSION:0:4}/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain cargo:host gdk-pixbuf pango libcroco" -PKG_LONGDESC="This is librsvg - A small library to render Scalable Vector Graphics (SVG), associated with the GNOME Project." -PKG_TOOLCHAIN="autotools" - -pre_configure_target() { - PKG_CONFIGURE_OPTS_TARGET="ac_cv_path_GDK_PIXBUF_QUERYLOADERS="${SYSROOT_PREFIX}/usr/bin/gdk-pixbuf-query-loaders" \ - --enable-installed-tests=no \ - --disable-tools \ - --enable-introspection=no" -} - -pre_make_target() { - sed -e "s:^GLIB_MKENUMS =.*:GLIB_MKENUMS = ${SYSROOT_PREFIX}/usr/bin/glib-mkenums:g" -i ${PKG_BUILD}/.${TARGET_NAME}/Makefile -} diff --git a/packages/kernel/drivers/RTW89/package.mk b/packages/kernel/drivers/RTW89/package.mk deleted file mode 100644 index 51c3a1851..000000000 --- a/packages/kernel/drivers/RTW89/package.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="RTW89" -PKG_VERSION="fce040c12fbf93bfd904ded48df60dea2c8d4423" -PKG_ARCH="aarch64 x86_64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/lwfinger/rtw89" -PKG_URL="https://github.com/lwfinger/rtw89/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux linux-firmware" -PKG_NEED_UNPACK="${LINUX_DEPENDS}" -PKG_LONGDESC="Realtek RTL8852xx Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="make" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - kernel_make KSRC=$(kernel_path) KVER=$(kernel_version) -} - -makeinstall_target() { - mkdir -p ${INSTALL}/$(get_full_module_dir)/kernel/drivers/net/wireless/rtw89 - cp *.ko ${INSTALL}/$(get_full_module_dir)/kernel/drivers/net/wireless/rtw89 -} diff --git a/packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_config b/packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_config deleted file mode 100644 index a08fa3a9f8f6cbab10ad4584a36703336168df07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47 zcmWGtt=z83@P&bq@f!nEBf~ESCZPr%1_7pqNh|?JUr9cc{<}V&aS8WL21foT42&EA DU1<)g diff --git a/packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_fw b/packages/kernel/firmware/RTL8723DS-firmware/firmware/rtl8723ds_fw deleted file mode 100644 index 4c323a3d92dcd21e0481492819c656b9d4996b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48988 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 diff --git a/packages/kernel/firmware/RTL8723DS-firmware/package.mk b/packages/kernel/firmware/RTL8723DS-firmware/package.mk deleted file mode 100644 index 4de82333a..000000000 --- a/packages/kernel/firmware/RTL8723DS-firmware/package.mk +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="RTL8723DS-firmware" -PKG_VERSION="" -PKG_LICENSE="Apache-2.0" -PKG_SITE="https://rocknix.org" -PKG_LONGDESC="Realtek RTL8723DS Linux firmware" -PKG_DEPENDS_TARGET="linux rtk_hciattach" -PKG_TOOLCHAIN="manual" - -make_target() { - : -} - -makeinstall_target() { - mkdir -p ${INSTALL}/$(get_full_firmware_dir) ||: - cp -v ${PKG_DIR}/firmware/rtl8723ds_fw ${INSTALL}/$(get_full_firmware_dir)/rtl8723d_fw - cp -v ${PKG_DIR}/firmware/rtl8723ds_config ${INSTALL}/$(get_full_firmware_dir)/rtl8723d_config -} - diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/package.mk b/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/package.mk deleted file mode 100644 index a8a0554f5..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="brcmfmac_sdio-firmware-imx" -PKG_VERSION="0.1" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/LibreELEC/LibreELEC.tv" -PKG_URL="${DISTRO_SRC}/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain kernel-firmware" -PKG_LONGDESC="Firmware for brcm bluetooth chips used in some Freescale iMX based devices." - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/bin - cp -av brcm_patchram_plus ${INSTALL}/usr/bin/ - - mkdir -p ${INSTALL}/$(get_kernel_overlay_dir)/lib/firmware/ - cp -av firmware/brcm ${INSTALL}/$(get_kernel_overlay_dir)/lib/firmware/ -} diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/system.d/brcmfmac_sdio-firmware@.service b/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/system.d/brcmfmac_sdio-firmware@.service deleted file mode 100644 index fb06133cf..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/system.d/brcmfmac_sdio-firmware@.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Broadcom sdio firmware update for %I -ConditionPathExists=/dev/ttymxc3 - -[Service] -Type=simple -RemainAfterExit=yes -ExecStart=/usr/bin/brcm_patchram_plus --patchram /lib/firmware/brcm/%I.hcd --baudrate 3000000 --use_baudrate_for_download /dev/ttymxc3 --enable_hci --no2bytes --tosleep=50000 diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/udev.d/80-brcmfmac_sdio.rules b/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/udev.d/80-brcmfmac_sdio.rules deleted file mode 100644 index e29b8e152..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware-imx/udev.d/80-brcmfmac_sdio.rules +++ /dev/null @@ -1,19 +0,0 @@ -################################################################################ -# udev rules file for loading brcmfmac_sdio-firmware -################################################################################ - -ACTION!="add", GOTO="end" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4329", GOTO="begin" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4330", GOTO="begin" -GOTO="end" -LABEL="begin" -### Broadcom bcm4330 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4330", \ - ENV{brcm_device}="bcm4330" -### Broadcom bcm4329 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4329", \ - ENV{brcm_device}="bcm4329" - -ENV{brcm_device}=="bcm43*", ACTION=="add", \ - TAG+="systemd", ENV{SYSTEMD_WANTS}+="brcmfmac_sdio-firmware@$env{brcm_device}.service" -LABEL="end" diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware/firmwares/any.dat b/packages/kernel/firmware/brcmfmac_sdio-firmware/firmwares/any.dat deleted file mode 100644 index 72e8ffc0d..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware/firmwares/any.dat +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware/package.mk b/packages/kernel/firmware/brcmfmac_sdio-firmware/package.mk deleted file mode 100644 index 6c2c5a5a4..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware/package.mk +++ /dev/null @@ -1,47 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="brcmfmac_sdio-firmware" -PKG_VERSION="c70355f9ec6d015b91a5c3199aa08b433e2f7caf" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/LibreELEC/brcmfmac_sdio-firmware" -PKG_URL="https://github.com/LibreELEC/brcmfmac_sdio-firmware/archive/${PKG_VERSION}.tar.gz" -PKG_LONGDESC="Broadcom SDIO firmware used with ROCKNIX" -PKG_TOOLCHAIN="manual" - -post_makeinstall_target() { - FW_TARGET_DIR=${INSTALL}/$(get_full_firmware_dir) - - if find_file_path firmwares/${PKG_NAME}.dat; then - FW_LISTS="${FOUND_PATH}" - else - FW_LISTS="${PKG_DIR}/firmwares/any.dat ${PKG_DIR}/firmwares/${TARGET_ARCH}.dat" - fi - - for fwlist in ${FW_LISTS}; do - [ -f ${fwlist} ] || continue - while read -r fwline; do - [ -z "${fwline}" ] && continue - [[ ${fwline} =~ ^#.* ]] && continue - [[ ${fwline} =~ ^[[:space:]] ]] && continue - - for fwfile in $(cd ${PKG_BUILD} && eval "find ${fwline}"); do - [ -d ${PKG_BUILD}/${fwfile} ] && continue - if [ -f ${PKG_BUILD}/${fwfile} ]; then - mkdir -p $(dirname ${FW_TARGET_DIR}/brcm/${fwfile}) - cp -Lv ${PKG_BUILD}/${fwfile} ${FW_TARGET_DIR}/brcm/${fwfile} - else - echo "ERROR: Firmware file ${fwfile} does not exist - aborting" - exit 1 - fi - done - done < ${fwlist} - done - - mkdir -p ${INSTALL}/usr/bin - cp ${PKG_DIR}/scripts/brcmfmac-firmware-setup ${INSTALL}/usr/bin -} - -post_install() { - enable_service brcmfmac-firmware.service -} diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware/scripts/brcmfmac-firmware-setup b/packages/kernel/firmware/brcmfmac_sdio-firmware/scripts/brcmfmac-firmware-setup deleted file mode 100755 index 7754cd86b..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware/scripts/brcmfmac-firmware-setup +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -DTNAME=$(/usr/bin/dtname) - -if [ "$DTNAME" = "khadas,vim" -o "$DTNAME" = "xunlong,orangepi-win" ]; then - ln -sf /usr/lib/kernel-overlays/base/lib/firmware/brcm/BCM43430A1.vim /usr/lib/firmware/brcm/BCM43430A1.hcd -else - ln -sf /usr/lib/kernel-overlays/base/lib/firmware/brcm/BCM43430A1.def /usr/lib/firmware/brcm/BCM43430A1.hcd -fi diff --git a/packages/kernel/firmware/brcmfmac_sdio-firmware/system.d/brcmfmac-firmware.service b/packages/kernel/firmware/brcmfmac_sdio-firmware/system.d/brcmfmac-firmware.service deleted file mode 100644 index 062207fd0..000000000 --- a/packages/kernel/firmware/brcmfmac_sdio-firmware/system.d/brcmfmac-firmware.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Broadcom SDIO Firmware Symlink Service -After=kernel-overlays.service -Before=kodi.service - -[Service] -Type=oneshot -ExecStart=/bin/sh -c "/usr/bin/brcmfmac-firmware-setup" - -[Install] -WantedBy=local-fs.target diff --git a/packages/multimedia/nvidia-vaapi-driver/package.mk b/packages/multimedia/nvidia-vaapi-driver/package.mk deleted file mode 100644 index 16a44120d..000000000 --- a/packages/multimedia/nvidia-vaapi-driver/package.mk +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="nvidia-vaapi-driver" -PKG_VERSION="0.0.11" -PKG_LICENSE="MIT" -PKG_SITE="https://github.com/elFarto/nvidia-vaapi-driver" -PKG_URL="https://github.com/elFarto/nvidia-vaapi-driver/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libva nv-codec-headers gst-plugins-bad" -PKG_LONGDESC="A VA-API implemention using NVIDIA's NVDEC" diff --git a/packages/multimedia/zvbi/package.mk b/packages/multimedia/zvbi/package.mk deleted file mode 100644 index 32a2f26ed..000000000 --- a/packages/multimedia/zvbi/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="zvbi" -PKG_VERSION="0.2.35" -PKG_SHA256="fc883c34111a487c4a783f91b1b2bb5610d8d8e58dcba80c7ab31e67e4765318" -PKG_LICENSE="GPL2" -PKG_SITE="http://zapping.sourceforge.net/ZVBI" -PKG_URL="https://downloads.sourceforge.net/sourceforge/zapping/zvbi-${PKG_VERSION}.tar.bz2" -PKG_DEPENDS_TARGET="toolchain libpng zlib" -PKG_LONGDESC="Library to provide functions to capture and decode VBI data." - -PKG_CONFIGURE_OPTS_TARGET="--disable-dvb \ - --disable-bktr \ - --disable-nls \ - --disable-proxy \ - --without-doxygen \ - --without-x" diff --git a/packages/multimedia/zvbi/patches/zvbi-0010-fix-static-linking.patch b/packages/multimedia/zvbi/patches/zvbi-0010-fix-static-linking.patch deleted file mode 100644 index 3988a3e21..000000000 --- a/packages/multimedia/zvbi/patches/zvbi-0010-fix-static-linking.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- a/configure -+++ b/configure -@@ -16515,7 +16515,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_destroy_write_struct" >&5 - $as_echo "$ac_cv_lib_png_png_destroy_write_struct" >&6; } - if test "x$ac_cv_lib_png_png_destroy_write_struct" = x""yes; then : -- LIBS="$LIBS -lpng -lz" -+ LIBS="-lpng -lz $LIBS" - else - HAVE_PNG="no" - fi ---- a/configure.in -+++ b/configure.in -@@ -244,7 +244,7 @@ dnl (PNG page export) - dnl - HAVE_PNG="yes" - AC_CHECK_LIB(png, png_destroy_write_struct, -- LIBS="$LIBS -lpng -lz", HAVE_PNG="no", -lz -lm) -+ LIBS="-lpng $LIBS -lz -lm", HAVE_PNG="no", -lz -lm) - if test "x$HAVE_PNG" = xyes; then - AC_DEFINE(HAVE_LIBPNG, 1, [Define if you have libpng]) - fi ---- a/examples/Makefile.am -+++ b/examples/Makefile.am -@@ -19,4 +19,4 @@ EXTRA_DIST = \ - INCLUDES = -I$(top_srcdir)/src - - LDADD = $(top_builddir)/src/libzvbi.la \ -- $(PTHREAD_LIB) -lm $(PNG_LIB) -+ $(PTHREAD_LIB) $(PNG_LIB) -lm ---- a/examples/Makefile.in -+++ b/examples/Makefile.in -@@ -262,7 +262,7 @@ EXTRA_DIST = \ - - INCLUDES = -I$(top_srcdir)/src - LDADD = $(top_builddir)/src/libzvbi.la \ -- $(PTHREAD_LIB) -lm $(PNG_LIB) -+ $(PTHREAD_LIB) $(PNG_LIB) -lm - - all: all-am - diff --git a/packages/multimedia/zvbi/patches/zvbi-0020-ioctl.patch b/packages/multimedia/zvbi/patches/zvbi-0020-ioctl.patch deleted file mode 100644 index 4af7cb1a5..000000000 --- a/packages/multimedia/zvbi/patches/zvbi-0020-ioctl.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/contrib/ntsc-cc.c -+++ b/contrib/ntsc-cc.c -@@ -32,7 +32,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -45,6 +44,7 @@ - #include "src/libzvbi.h" - - #ifdef ENABLE_V4L2 -+# include - # include - # include "src/videodev2k.h" - #endif diff --git a/packages/multimedia/zvbi/patches/zvbi-0030-ssize_max.patch b/packages/multimedia/zvbi/patches/zvbi-0030-ssize_max.patch deleted file mode 100644 index efad9aa89..000000000 --- a/packages/multimedia/zvbi/patches/zvbi-0030-ssize_max.patch +++ /dev/null @@ -1,28 +0,0 @@ -Linear memory extents over SSIZE_MAX are undefined, so there is no -point in protecting against them. ---- a/src/export.c -+++ b/src/export.c -@@ -1056,8 +1056,6 @@ - size_t count; - - count = src_size; -- if (unlikely (src_size > SSIZE_MAX)) -- count = SSIZE_MAX & -4096; - - for (retry = 10;; --retry) { - actual = write (e->_handle.fd, src, count); -@@ -1614,12 +1612,7 @@ - free (e->buffer.data); - } - -- if (unlikely (e->buffer.offset > (size_t) SSIZE_MAX)) { -- errno = EOVERFLOW; -- actual = -1; /* failed */ -- } else { -- actual = e->buffer.offset; -- } -+ actual = e->buffer.offset; - } else { - if (VBI_EXPORT_TARGET_ALLOC == e->target) - free (e->buffer.data); - diff --git a/packages/multimedia/zvbi/patches/zvbi-0040-fix-clang-support.patch b/packages/multimedia/zvbi/patches/zvbi-0040-fix-clang-support.patch deleted file mode 100644 index 42ace29b2..000000000 --- a/packages/multimedia/zvbi/patches/zvbi-0040-fix-clang-support.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/src/misc.h -+++ b/src/misc.h -@@ -52,17 +52,6 @@ - # define unlikely(expr) __builtin_expect(expr, 0) - #endif - --#undef __i386__ --#undef __i686__ --/* FIXME #cpu is deprecated --#if #cpu (i386) --# define __i386__ 1 --#endif --#if #cpu (i686) --# define __i686__ 1 --#endif --*/ -- - /* &x == PARENT (&x.tm_min, struct tm, tm_min), - safer than &x == (struct tm *) &x.tm_min. A NULL _ptr is safe and - will return NULL, not -offsetof(_member). */ -@@ -156,8 +145,6 @@ - - #define likely(expr) (expr) - #define unlikely(expr) (expr) --#undef __i386__ --#undef __i686__ - - static char * - PARENT_HELPER (char *p, unsigned int offset) diff --git a/packages/multimedia/zvbi/patches/zvbi-0050-prevent-test.patch b/packages/multimedia/zvbi/patches/zvbi-0050-prevent-test.patch deleted file mode 100644 index e97cee381..000000000 --- a/packages/multimedia/zvbi/patches/zvbi-0050-prevent-test.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- a/Makefile.am -+++ b/Makefile.am -@@ -22,8 +22,6 @@ SUBDIRS = \ - src \ - $(proxy_dirs) \ - contrib \ -- examples \ -- test \ - po \ - doc - ---- a/Makefile.in -+++ b/Makefile.in -@@ -78,7 +78,7 @@ pkgconfigDATA_INSTALL = $(INSTALL_DATA) - DATA = $(pkgconfig_DATA) - ETAGS = etags - CTAGS = ctags --DIST_SUBDIRS = m4 src daemon contrib examples test po doc -+DIST_SUBDIRS = m4 src daemon contrib po doc - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - distdir = $(PACKAGE)-$(VERSION) - top_distdir = $(distdir) -@@ -268,8 +268,6 @@ SUBDIRS = \ - src \ - $(proxy_dirs) \ - contrib \ -- examples \ -- test \ - po \ - doc - ---- a/configure -+++ b/configure -@@ -18591,7 +18591,7 @@ else - fi - - --ac_config_files="$ac_config_files Makefile contrib/Makefile examples/Makefile daemon/Makefile daemon/zvbid.init doc/Doxyfile doc/Makefile m4/Makefile src/Makefile src/dvb/Makefile test/Makefile po/Makefile.in zvbi.spec zvbi-0.2.pc" -+ac_config_files="$ac_config_files Makefile contrib/Makefile daemon/Makefile daemon/zvbid.init doc/Doxyfile doc/Makefile m4/Makefile src/Makefile src/dvb/Makefile po/Makefile.in zvbi.spec zvbi-0.2.pc" - - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -19726,7 +19726,6 @@ do - "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; -- "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - "daemon/Makefile") CONFIG_FILES="$CONFIG_FILES daemon/Makefile" ;; - "daemon/zvbid.init") CONFIG_FILES="$CONFIG_FILES daemon/zvbid.init" ;; - "doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;; -@@ -19734,7 +19733,6 @@ do - "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "src/dvb/Makefile") CONFIG_FILES="$CONFIG_FILES src/dvb/Makefile" ;; -- "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; - "zvbi.spec") CONFIG_FILES="$CONFIG_FILES zvbi.spec" ;; - "zvbi-0.2.pc") CONFIG_FILES="$CONFIG_FILES zvbi-0.2.pc" ;; ---- a/configure.in -+++ b/configure.in -@@ -384,7 +384,6 @@ AM_CONDITIONAL(BUILD_STATIC_LIB, [test "x$enable_static" = xyes]) - AC_OUTPUT([ - Makefile - contrib/Makefile -- examples/Makefile - daemon/Makefile - daemon/zvbid.init - doc/Doxyfile -@@ -392,7 +391,6 @@ AC_OUTPUT([ - m4/Makefile - src/Makefile - src/dvb/Makefile -- test/Makefile - po/Makefile.in - zvbi.spec - zvbi-0.2.pc diff --git a/packages/network/libssh/package.mk b/packages/network/libssh/package.mk deleted file mode 100644 index 8e1eb254f..000000000 --- a/packages/network/libssh/package.mk +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="libssh" -PKG_VERSION="0.10.5" -PKG_LICENSE="LGPL" -PKG_SITE="http://www.libssh.org/" -PKG_URL="https://www.libssh.org/files/$(get_pkg_version_maj_min)/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain zlib openssl" -PKG_LONGDESC="Library for accessing ssh client services through C libraries." - -PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=OFF \ - -DWITH_SERVER=OFF \ - -DWITH_GCRYPT=OFF \ - -DWITH_EXAMPLES=OFF \ - -DWITH_GSSAPI=OFF \ - -DWITH_GEX=OFF \ - -DWITH_INTERNAL_DOC=OFF" - -makeinstall_target() { -# install static library only - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp ${PKG_BUILD}/.${TARGET_NAME}/src/libssh.a ${SYSROOT_PREFIX}/usr/lib - - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cp ${PKG_BUILD}/.${TARGET_NAME}/libssh.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig - - mkdir -p ${SYSROOT_PREFIX}/usr/include/libssh - cp ${PKG_BUILD}/include/libssh/{callbacks.h,legacy.h,libssh.h,server.h,sftp.h,ssh2.h} \ - ${PKG_BUILD}/.${TARGET_NAME}/include/libssh/libssh_version.h \ - ${SYSROOT_PREFIX}/usr/include/libssh -} diff --git a/packages/network/wireguard-linux-compat/modules-load.d/wireguard.conf b/packages/network/wireguard-linux-compat/modules-load.d/wireguard.conf deleted file mode 100644 index a82c63a20..000000000 --- a/packages/network/wireguard-linux-compat/modules-load.d/wireguard.conf +++ /dev/null @@ -1 +0,0 @@ -wireguard diff --git a/packages/network/wireguard-linux-compat/package.mk b/packages/network/wireguard-linux-compat/package.mk deleted file mode 100644 index 971d5b8d4..000000000 --- a/packages/network/wireguard-linux-compat/package.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="wireguard-linux-compat" -PKG_VERSION="v1.0.20220627" -PKG_LICENSE="GPLv2" -PKG_SITE="https://www.wireguard.com" -PKG_URL="https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain linux libmnl" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="WireGuard VPN kernel module" -PKG_TOOLCHAIN="manual" -PKG_IS_KERNEL_PKG="yes" -PKG_PATCH_DIRS+="${DEVICE}*" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - kernel_make KERNELDIR=$(kernel_path) -C src/ module -} - -makeinstall_target() { - mkdir -p ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} - cp src/*.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} -} diff --git a/packages/sysutils/diffutils/package.mk b/packages/sysutils/diffutils/package.mk deleted file mode 100644 index 7e7bbde0e..000000000 --- a/packages/sysutils/diffutils/package.mk +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="diffutils" -PKG_VERSION="3.9" -PKG_LICENSE="GPL" -PKG_SITE="http://www.gnu.org/software/diffutils/" -PKG_URL="http://ftp.gnu.org/gnu/diffutils/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A package of several programs related to finding differences between files." -PKG_TOOLCHAIN="autotools" - -PKG_CONFIGURE_OPTS_TARGET="--disable-nls \ - --without-libsigsegv-prefix \ - --without-libiconv-prefix \ - --without-libintl-prefix" - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/diffutils/patches/diffutils-001-no-man.patch b/packages/sysutils/diffutils/patches/diffutils-001-no-man.patch deleted file mode 100644 index 297d01496..000000000 --- a/packages/sysutils/diffutils/patches/diffutils-001-no-man.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- diffutils-3.5/Makefile.am.org 2017-05-24 18:54:09.404508347 +0200 -+++ diffutils-3.5/Makefile.am 2017-05-24 18:46:25.238456499 +0200 -@@ -19,7 +19,7 @@ - ALL_RECURSIVE_TARGETS = - - EXTRA_DIST = bootstrap exgettext ChangeLog-2008 cfg.mk dist-check.mk --SUBDIRS = lib src tests doc man po gnulib-tests -+SUBDIRS = lib src tests doc po gnulib-tests - - ACLOCAL_AMFLAGS = -I m4 - AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) diff --git a/packages/sysutils/diffutils/patches/diffutils-002-explicitly-disable-replacing-getopt.patch b/packages/sysutils/diffutils/patches/diffutils-002-explicitly-disable-replacing-getopt.patch deleted file mode 100644 index 6e12ba86e..000000000 --- a/packages/sysutils/diffutils/patches/diffutils-002-explicitly-disable-replacing-getopt.patch +++ /dev/null @@ -1,26 +0,0 @@ -http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-extended/diffutils/diffutils-3.6 - -Subject: explicitly disable replacing getopt - -Explicitly disable replacing getopt to avoid compilation error like below. - - xstrtol-error.c:84:26: error: invalid use of undefined type 'struct rpl_option' - -diff --git a/m4/getopt.m4 b/m4/getopt.m4 -index 3ebc7b7..8934426 100644 ---- a/m4/getopt.m4 -+++ b/m4/getopt.m4 -@@ -22,8 +22,8 @@ AC_DEFUN([gl_FUNC_GETOPT_POSIX], - fi - ]) - if test $REPLACE_GETOPT = 1; then -- dnl Arrange for getopt.h to be created. -- gl_GETOPT_SUBSTITUTE_HEADER -+ dnl Explicitly disable replacing getopt -+ : - fi - ]) - --- -2.11.0 - diff --git a/packages/sysutils/dtach/package.mk b/packages/sysutils/dtach/package.mk deleted file mode 100644 index 80361d0ab..000000000 --- a/packages/sysutils/dtach/package.mk +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="dtach" -PKG_VERSION="0.9" -PKG_SHA256="5f7e8c835ee49a9e6dcf89f4e8ccbe724b061c0fc8565b504dd8b3e67ab79f82" -PKG_LICENSE="GPL" -PKG_SITE="http://dtach.sourceforge.net" -PKG_URL="https://github.com/crigler/dtach/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A program that emulates the detach feature of screen." - -makeinstall_target() { - : -} diff --git a/packages/sysutils/kbd/package.mk b/packages/sysutils/kbd/package.mk deleted file mode 100644 index 4969b1790..000000000 --- a/packages/sysutils/kbd/package.mk +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="kbd" -PKG_VERSION="2.6.3" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/legionus/kbd" -PKG_URL="https://github.com/legionus/kbd/archive/refs/tags/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS="toolchain" -PKG_BUILD_FLAGS="+pic" -PKG_TOOLCHAIN="configure" - -pre_configure_target() { - cd . - ./autogen.sh -} - -configure_target() { - ./configure --disable-vlock --prefix=/usr --host=aarch64 -} diff --git a/packages/sysutils/lshw/package.mk b/packages/sysutils/lshw/package.mk deleted file mode 100644 index a94c7081c..000000000 --- a/packages/sysutils/lshw/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="lshw" -PKG_VERSION="B.02.19.2" -PKG_LICENSE="GPL" -PKG_SITE="http://ezix.org/project/wiki/HardwareLiSter" -PKG_URL="http://ezix.org/software/files/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A small tool to provide detailed information on the hardware configuration of the machine." - -make_target() { - make CXX=${CXX} -C src/ -} - -makeinstall_target() { - : # nop -} diff --git a/packages/sysutils/wait-time-sync/daemons/003-wait-time-sync b/packages/sysutils/wait-time-sync/daemons/003-wait-time-sync deleted file mode 100755 index 6abb4d45d..000000000 --- a/packages/sysutils/wait-time-sync/daemons/003-wait-time-sync +++ /dev/null @@ -1,4 +0,0 @@ -STATE=$(get_setting wts.enabled) -SVC="wait-time-sync" -CONF="wait-time-sync" -DAEMONS=("wait-time-sync") diff --git a/packages/sysutils/wait-time-sync/package.mk b/packages/sysutils/wait-time-sync/package.mk deleted file mode 100644 index 160295947..000000000 --- a/packages/sysutils/wait-time-sync/package.mk +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="wait-time-sync" -PKG_VERSION="1.0" -PKG_LICENSE="GPL" -PKG_SITE="" -PKG_URL="" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="A simple tool and systemd service to wait until NTP time is synced" - diff --git a/packages/sysutils/wait-time-sync/sources/Makefile b/packages/sysutils/wait-time-sync/sources/Makefile deleted file mode 100644 index 1014a4452..000000000 --- a/packages/sysutils/wait-time-sync/sources/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) - -.PHONY: all -all: wait-time-sync - -PREFIX = /usr - -.PHONY: install -install: wait-time-sync - install -d $(DESTDIR)$(PREFIX)/bin - install $< $(DESTDIR)$(PREFIX)/bin diff --git a/packages/sysutils/wait-time-sync/sources/wait-time-sync.c b/packages/sysutils/wait-time-sync/sources/wait-time-sync.c deleted file mode 100644 index 52cd5d780..000000000 --- a/packages/sysutils/wait-time-sync/sources/wait-time-sync.c +++ /dev/null @@ -1,23 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv) */ - -#include -#include -#include - -int main() -{ - int rc; - - for (;;) - { - struct timex tx = {}; - - rc = adjtimex(&tx); - if (rc != TIME_ERROR) - break; - usleep(1000000U/3); - } - - return rc == -1 ? errno : 0; -} diff --git a/packages/sysutils/wait-time-sync/system.d/wait-time-sync.service b/packages/sysutils/wait-time-sync/system.d/wait-time-sync.service deleted file mode 100644 index 75570975a..000000000 --- a/packages/sysutils/wait-time-sync/system.d/wait-time-sync.service +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1+ -# -# This file was part of systemd. -# Modified by Team LibreELEC (https://libreelec.tv) -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -[Unit] -Description=Wait For Kernel Time Synchronized - -ConditionVirtualization=!container - -DefaultDependencies=no -Before=time-sync.target shutdown.target -Wants=time-sync.target - -[Service] -Type=oneshot -ExecStart=/usr/bin/wait-time-sync -TimeoutStartSec=30 -RemainAfterExit=yes - -[Install] -WantedBy=sysinit.target diff --git a/packages/tools/MC/etc/edit.indent.rc b/packages/tools/MC/etc/edit.indent.rc deleted file mode 100644 index 92f82d595..000000000 --- a/packages/tools/MC/etc/edit.indent.rc +++ /dev/null @@ -1,31 +0,0 @@ -#! /bin/sh -# *** External Formatter (Indenter) for GNU Midnight Commander. -# arguments: -# $1 - Name of the file being edited -# $2 - Name of the file to be processed - -exec >/dev/null - -case `echo $1 |sed 's/^.*\.//'` in - c|h) - # ftp://ftp.gnu.org/pub/gnu/indent/ - # Please add options to your ~/.indent.pro, not here. - indent "$2" - ;; - C|cc|CC|cxx|CXX|cpp|CPP) - # http://astyle.sourceforge.net/ - astyle "$2" - ;; - java|JAVA) - # http://astyle.sourceforge.net/ - astyle --style=java --mode=java "$2" - ;; - htm|html|HTM|HTML) - # http://tidy.sourceforge.net/ - tidy -q -m -ascii -wrap 80 "$2" - ;; - *) - # http://www.gnu.org/software/coreutils/ - fmt "$2" >"$2.tmp" && rm -f "$2" && mv -f "$2.tmp" "$2" - ;; -esac diff --git a/packages/tools/MC/etc/edit.spell.rc b/packages/tools/MC/etc/edit.spell.rc deleted file mode 100644 index e9dee8bbe..000000000 --- a/packages/tools/MC/etc/edit.spell.rc +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/sh -# *** External Spell Checker for GNU Midnight Commander. -# arguments: -# $1 - Name of the file being edited -# $2 - Name of the file to be processed - -if aspell /dev/null 2>&1; then - aspell -c "$2" -else - ispell "$2" -fi diff --git a/packages/tools/MC/etc/filehighlight.ini b/packages/tools/MC/etc/filehighlight.ini deleted file mode 100644 index af911fed9..000000000 --- a/packages/tools/MC/etc/filehighlight.ini +++ /dev/null @@ -1,47 +0,0 @@ -[executable] - type=FILE_EXE - -[directory] - type=DIR - -[device] - type=DEVICE - -[special] - type=SPECIAL - -[stalelink] - type=STALE_LINK - -[symlink] - type=SYMLINK - -[hardlink] - type=HARDLINK - -[core] - regexp=^core\\.*\\d*$ - -[temp] - extensions=tmp;$$$;~;bak - extensions_case=false - regexp=(^#.*|.*~$) - -[archive] - extensions=gz;bz2;tar;tgz;rpm;Z;rar;zip;arj;cab;lzh;lha;zoo;arc;ark;xz;tbz;tbz2; - -[doc] - extensions=txt;doc;rtf;diz;ctl;me;ps;pdf;xml;xsd;xslt;dtd;html;shtml;htm;mail;msg;lsm;po;nroff;man;tex;sgml;css;text;letter;chm - -[source] - extensions=c;h;cc;hh;cpp;cxx;hpp;asm;py;pl;pm;inc;cgi;php;phps;js;java;jav;jasm;sh;bash;diff;patch;pas;tcl;tk;awk;m4;st;mak;sl;ada;caml;ml;mli;mly;mll;mlp;sas;prg;hs;hi;erl - -[media] - extensions=mp2;mp3;mpg;ogg;mpeg;wav;avi;asf;mov;mol;mpl;xm;mod;it;med;mid;midi;s3m;umx;vob;mkv;flv;mp4;m3u - -[graph] - extensions=jpg;jpeg;gif;png;tif;pcx;bmp;xpm;xbm;eps;pic;rle;ico;wmf;omf;ai;cdr - -[database] - extensions=dbf;mdn;db;mdb;dat;fox;dbx;mdx;sql;mssql;msql;ssql;pgsql;xls;cdx;dbi - diff --git a/packages/tools/MC/etc/ini b/packages/tools/MC/etc/ini deleted file mode 100644 index ba473564c..000000000 --- a/packages/tools/MC/etc/ini +++ /dev/null @@ -1,159 +0,0 @@ -[Midnight-Commander] -verbose=1 -pause_after_run=1 -shell_patterns=1 -auto_save_setup=1 -auto_menu=0 -use_internal_view=1 -use_internal_edit=1 -clear_before_exec=1 -confirm_delete=1 -confirm_overwrite=1 -confirm_execute=0 -confirm_history_cleanup=1 -confirm_exit=1 -confirm_directory_hotlist_delete=1 -safe_delete=0 -mouse_repeat_rate=100 -double_click_speed=250 -use_8th_bit_as_meta=0 -confirm_view_dir=0 -mouse_move_pages_viewer=1 -mouse_close_dialog=0 -fast_refresh=0 -drop_menus=0 -wrap_mode=1 -old_esc_mode=0 -old_esc_mode_timeout=1000000 -cd_symlinks=1 -show_all_if_ambiguous=0 -max_dirt_limit=10 -use_file_to_guess_type=1 -alternate_plus_minus=0 -only_leading_plus_minus=1 -show_output_starts_shell=0 -xtree_mode=0 -num_history_items_recorded=60 -file_op_compute_totals=1 -classic_progressbar=1 -vfs_timeout=60 -ftpfs_directory_timeout=900 -use_netrc=1 -ftpfs_retry_seconds=30 -ftpfs_always_use_proxy=0 -ftpfs_use_passive_connections=1 -ftpfs_use_passive_connections_over_proxy=0 -ftpfs_use_unix_list_options=1 -ftpfs_first_cd_then_ls=1 -fish_directory_timeout=900 -editor_tab_spacing=8 -editor_word_wrap_line_length=72 -editor_fill_tabs_with_spaces=0 -editor_return_does_auto_indent=1 -editor_backspace_through_tabs=0 -editor_fake_half_tabs=1 -editor_option_save_mode=0 -editor_option_save_position=1 -editor_option_auto_para_formatting=0 -editor_option_typewriter_wrap=0 -editor_edit_confirm_save=1 -editor_syntax_highlighting=1 -editor_persistent_selections=1 -editor_cursor_beyond_eol=0 -editor_visible_tabs=1 -editor_visible_spaces=1 -editor_line_state=0 -editor_simple_statusbar=0 -editor_check_new_line=0 -editor_show_right_margin=0 -editor_group_undo=0 -nice_rotating_dash=1 -mcview_remember_file_position=0 -auto_fill_mkdir_name=1 -copymove_persistent_attr=1 -select_flags=6 -editor_backup_extension=~ -mcview_eof= -ignore_ftp_chattr_errors=true -keymap=mc.keymap -skin=default - -filepos_max_saved_entries=1024 - -preallocate_space=0 -editor_cursor_after_inserted_block=0 -editor_ask_filename_before_edit=0 -editor_filesize_threshold=64M - -[Layout] -message_visible=0 -keybar_visible=1 -xterm_title=1 -output_lines=0 -command_prompt=1 -menubar_visible=1 -free_space=1 - -horizontal_split=0 -vertical_equal=1 -left_panel_size=118 -horizontal_equal=1 -top_panel_size=118 - -[Misc] -timeformat_recent=%b %e %H:%M -timeformat_old=%b %e %Y -ftp_proxy_host=gate -ftpfs_password=anonymous@ -display_codepage=UTF-8 -source_codepage=UTF-8 -autodetect_codeset= -clipboard_store= -clipboard_paste= - -[Colors] -base_color= -linux= -color_terminals= - -xterm= - -[Panels] -show_mini_info=true -kilobyte_si=false -mix_all_files=false -show_backups=true -show_dot_files=true -fast_reload=false -fast_reload_msg_shown=false -mark_moves_down=true -reverse_files_only=true -auto_save_setup_panels=true -navigate_with_arrows=false -panel_scroll_pages=true -mouse_move_pages=true -filetype_mode=true -permission_mode=false -torben_fj_mode=false -quick_search_mode=2 - -simple_swap=false - -[terminal:linux] -f1=\\e[11~ -f2=\\e[12~ -f3=\\e[13~ -f4=\\e[14~ -f5=\\e[15~ - -[terminal:xterm] -f1=\\e[11~ -up=\\e[A -down=\\e[B -left=\\e[D -right=\\e[C - -[Panelize] -Find *.orig after patching=find . -name \\*.orig -print -Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm +011 \\) -o \\( -perm -02000 -a -perm +01 \\) \\) -print -Find rejects after patching=find . -name \\*.rej -print diff --git a/packages/tools/MC/etc/mc.ext b/packages/tools/MC/etc/mc.ext deleted file mode 100644 index 204d1a5f6..000000000 --- a/packages/tools/MC/etc/mc.ext +++ /dev/null @@ -1,684 +0,0 @@ -# Midnight Commander 3.0 extension file -# Warning: Structure of this file has changed completely with version 3.0 -# -# All lines starting with # or empty lines are thrown away. -# Lines starting in the first column should have following format: -# -# keyword/descNL, i.e. everything after keyword/ until new line is desc -# -# keyword can be: -# -# shell (desc is, when starting with a dot, any extension (no wildcars), -# i.e. matches all the files *desc . Example: .tar matches *.tar; -# if it doesn't start with a dot, it matches only a file of that name) -# -# regex (desc is an extended regular expression) -# Please note that we are using the GNU regex library and thus -# \| matches the literal | and | has special meaning (or) and -# () have special meaning and \( \) stand for literal ( ). -# -# type (file matches this if `file %f` matches regular expression desc -# (the filename: part from `file %f` is removed)) -# -# directory (matches any directory matching regular expression desc) -# -# include (matches an include directive) -# -# default (matches any file no matter what desc is) -# -# Other lines should start with a space or tab and should be in the format: -# -# keyword=commandNL (with no spaces around =), where keyword should be: -# -# Open (if the user presses Enter or doubleclicks it), -# -# View (F3), Edit (F4) -# -# Include is the keyword used to add any further entries from an include/ -# section -# -# command is any one-line shell command, with the following substitutions: -# -# %% -> % character -# %p -> name of the current file (without path, but pwd is its path) -# %f -> name of the current file. Unlike %p, if file is located on a -# non-local virtual filesystem, i.e. either tarfs or ftpfs, -# then the file will be temporarily copied into a local directory -# and %f will be the full path to this local temporal file. -# If you don't want to get a local copy and want to get the -# virtual fs path (like /#ftp:ftp.cvut.cz/pub/hungry/xword), then -# use %d/%p instead of %f. -# %d -> name of the current directory (pwd, without trailing slash) -# %s -> "selected files", i.e. space separated list of tagged files if any -# or name of the current file -# %t -> list of tagged files -# %u -> list of tagged files (they'll be untaged after the command) -# -# (If these 6 letters are in uppercase, they refer to the other panel. -# But you shouldn't have to use it in this file.) -# -# -# %cd -> the rest is a path mc should change into (cd won't work, since it's -# a child process). %cd handles even vfs names. -# -# %view -> the command you type will be piped into mc's internal file viewer -# if you type only the %view and no command, viewer will load %f file -# instead (i.e. no piping, so it is different to %view cat %f) -# %view may be directly followed by {} with a list of any of -# ascii (Ascii mode), hex (Hex mode), nroff (color highlighting for -# text using backspace for bold and underscore) and unform -# (no highlighting for nroff sequences) separated by commas. -# -# %var -> You use it like this: %var{VAR:default}. This macro will expand -# to the value of the VAR variable in the environment if it's set -# otherwise the value in default will be used. This is similar to -# the Bourne shell ${VAR-default} construct. -# -# Rules are applied from top to bottom, thus the order is important. -# If some actions are missing, search continues as if this target didn't -# match (i.e. if a file matches the first and second entry and View action -# is missing in the first one, then on pressing F3 the View action from -# the second entry will be used. default should catch all the actions. -# -# Any new entries you develop for you are always welcome if they are -# useful on more than one system. You can post your modifications -# as tickets at www.midnight-commander.org - - -### Changes ### -# -# Reorganization: 2000-05-01 Michal Svec - - -### TODO ### -# -# Postscript Open: ps2svga [gs -DEVICE=jpeg|zgv or something] -# Images asciiview -# -# All X Apps [Nothing/Warning] if no DISPLAY -# Not found [Default/Warning] -# Empty Output [Default/Warning] -# Edit: CopyOut+EDIT+CopyIn -# Security Check gzip/bzip EDIT (mktemp) -# -# Maybe: Open/XOpen/GOpen/KOpen/... for Console/X/GNOME/KDE/etc. - - -### GIT Repo ### -# gitfs changeset -regex/^\[git\] - Open=%cd %p/changesetfs:// - View=%cd %p/patchsetfs:// - -### Archives ### - -# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .ipk -regex/\.t([gp]?z|ar\.g?[zZ])$|\.ipk$ - Open=%cd %p/utar:// - View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf - - -regex/\.tar\.bz$ - # Open=%cd %p/utar:// - View=%view{ascii} bzip -dc %f 2>/dev/null | tar tvvf - - -regex/\.t(ar\.bz2|bz2?|b2)$ - Open=%cd %p/utar:// - View=%view{ascii} bzip2 -dc %f 2>/dev/null | tar tvvf - - -# .tar.lzma, .tlz -regex/\.t(ar\.lzma|lz)$ - Open=%cd %p/utar:// - View=%view{ascii} lzma -dc %f 2>/dev/null | tar tvvf - - -# .tar.xz, .txz -regex/\.t(ar\.xz|xz)$ - Open=%cd %p/utar:// - View=%view{ascii} xz -dc %f 2>/dev/null | tar tvvf - - -# .tar.F - used in QNX -regex/\.tar\.F$ - # Open=%cd %p/utar:// - View=%view{ascii} freeze -dc %f 2>/dev/null | tar tvvf - - -# .qpr/.qpk - QNX Neutrino package installer files -regex/\.(qp[rk])$ - Open=%cd %p/utar:// - View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf - - -# tar -regex/\.(tar|TAR)$ - Open=%cd %p/utar:// - View=%view{ascii} tar tvvf - < %f - -# lha -type/^LHa\ .*archive - Open=%cd %p/ulha:// - View=%view{ascii} lha l %f - -# arj -regex/\.a(rj|[0-9][0-9])$ - Open=%cd %p/uarj:// - View=%view{ascii} unarj l %f - -# cab -regex/\.([cC][aA][bB])$ - Open=%cd %p/ucab:// - View=%view{ascii} cabextract -l %f - -# ha -regex/\.([Hh][Aa])$ - Open=%cd %p/uha:// - View=%view{ascii} ha lf %f - -# rar -regex/\.[rR]([aA][rR]|[0-9][0-9])$ - Open=%cd %p/urar:// - View=%view{ascii} rar v -c- %f - -# ALZip -regex/\.(alz|ALZ)$ - Open=%cd %p/ualz:// - View=%view{ascii} unalz -l %f - -# cpio -shell/.cpio.Z - Open=%cd %p/ucpio:// - View=%view{ascii} gzip -dc %f | cpio -itv 2>/dev/null - -shell/.cpio.gz - Open=%cd %p/ucpio:// - View=%view{ascii} gzip -dc %f | cpio -itv 2>/dev/null - -shell/.cpio - Open=%cd %p/ucpio:// - View=%view{ascii} cpio -itv < %f 2>/dev/null - -# ls-lR -regex/(^|\.)ls-?lR(\.gz|Z|bz2)$ - Open=%cd %p/lslR:// - -# patch -regex/\.(diff|patch)(\.bz2)$ - Open=%cd %p/patchfs:// - View=%view{ascii} bzip2 -dc %f 2>/dev/null - -regex/\.(diff|patch)(\.(gz|Z))$ - Open=%cd %p/patchfs:// - View=%view{ascii} gzip -dc %f 2>/dev/null - -regex/\.(diff|patch)$ - Open=%cd %p/patchfs:// - View=%view{ascii} /bin/cat %f 2>/dev/null - -# ar library -regex/\.s?a$ - Open=%cd %p/uar:// - #Open=%view{ascii} ar tv %f - View=%view{ascii} file %f && nm -C %f - -# trpm -regex/\.trpm$ - Open=%cd %p/trpm:// - View=%view{ascii} rpm -qivl --scripts `basename %p .trpm` - -# RPM packages (SuSE uses *.spm for source packages) -regex/\.(src\.rpm|spm)$ - Open=%cd %p/rpm:// - View=%view{ascii} if rpm --nosignature --version >/dev/null 2>&1; then RPM="rpm --nosignature" ; else RPM="rpm" ; fi ; $RPM -qivlp --scripts %f - -regex/\.rpm$ - Open=%cd %p/rpm:// - View=%view{ascii} if rpm --nosignature --version >/dev/null 2>&1; then RPM="rpm --nosignature" ; else RPM="rpm" ; fi ; $RPM -qivlp --scripts %f - -# deb -regex/\.u?deb$ - Open=%cd %p/deb:// - View=%view{ascii} dpkg-deb -I %f && echo && dpkg-deb -c %f - -# dpkg -shell/.debd - Open=%cd %p/debd:// - View=%view{ascii} dpkg -s `echo %p | sed 's/\([0-9a-z.-]*\).*/\1/'` -# apt -shell/.deba - Open=%cd %p/deba:// - View=%view{ascii} apt-cache show `echo %p | sed 's/\([0-9a-z.-]*\).*/\1/'` - -# ISO9660 -regex/\.([iI][sS][oO])$ - Open=%cd %p/iso9660:// - View=%view{ascii} isoinfo -l -i %f - -# 7zip archives (they are not man pages) -regex/\.(7z|7Z)$ - Open=%cd %p/u7z:// - View=%view{ascii} 7za l %f 2>/dev/null - -# Mailboxes -type/^ASCII\ mail\ text - Open=%cd %p/mailfs:// - - -### Sources ### - -# C -shell/.c - Include=editor - -# Fortran -shell/.f - Include=editor - -# Header -regex/\.(h|hpp)$ - Include=editor - -# Asm -shell/.s - Include=editor - -# C++ -regex/\.(C|cc|cpp)$ - Include=editor - -include/editor - Open=%var{EDITOR:vi} %f - -# .so libraries -regex/\.(so|so\.[0-9\.]*)$ - View=%view{ascii} file %f && nm -C -D %f - -# Object -type/^ELF - #Open=%var{PAGER:more} %f - View=%view{ascii} file %f && nm -C %f - -### Documentation ### - -# Texinfo -regex/\.(te?xi|texinfo)$ - -# GNU Info page -type/^Info\ text - Open=info -f %f - -shell/.info - Open=info -f %f - -# Exception: .3gp are video files not manual pages -regex/\.(3[gG][pP])$ - Include=video - -# Manual page -regex/(([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])|\.man)$ - Open=case %d/%f in */log/*|*/logs/*) cat %f ;; *) { zsoelim %f 2>/dev/null || cat %f; } | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) cat %f ;; *) { zsoelim %f 2>/dev/null || cat %f; } | nroff -c -Tlatin1 -mandoc ;; esac - -# Perl pod page -shell/.pod - Open=pod2man %f | nroff -c -Tlatin1 -mandoc | %var{PAGER:more} - View=%view{ascii,nroff} pod2man %f | nroff -c -Tlatin1 -mandoc - -# Troff with me macros. -# Exception - "read.me" is not a nroff file. -shell/read.me - Open= - View= - -shell/.me - Open=nroff -c -Tlatin1 -me %f | %var{PAGER:more} - View=%view{ascii,nroff} nroff -c -Tlatin1 -me %f - -# Troff with ms macros. -shell/.ms - Open=nroff -c -Tlatin1 -ms %f | %var{PAGER:more} - View=%view{ascii,nroff} nroff -c -Tlatin1 -ms %f - -# Manual page - compressed -regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.g?[Zz]$ - Open=case %d/%f in */log/*|*/logs/*) gzip -dc %f ;; *) gzip -dc %f | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) gzip -dc %f ;; *) gzip -dc %f | nroff -c -Tlatin1 -mandoc ;; esac - -regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz$ - Open=case %d/%f in */log/*|*/logs/*) bzip -dc %f ;; *) bzip -dc %f | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip -dc %f ;; *) bzip -dc %f | nroff -c -Tlatin1 -mandoc ;; esac - -regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz2$ - Open=case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff -c -Tlatin1 -mandoc ;; esac - -regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lzma$ - Open=case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) lzma -dc %f ;; *) lzma -dc %f | nroff -c -Tlatin1 -mandoc ;; esac - -regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.xz$ - Open=case %d/%f in */log/*|*/logs/*) xz -dc %f ;; *) xz -dc %f | nroff -c -Tlatin1 -mandoc ;; esac | %var{PAGER:more} - View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) xz -dc %f ;; *) xz -dc %f | nroff -c -Tlatin1 -mandoc ;; esac - -# CHM -regex/\.(chm|CHM)$ - Open=which kchmviewer > /dev/null 2>&1 && (kchmviewer %f &) || (xchm %f &) - -### Images ### - -type/^GIF - Include=image - -type/^JPEG - View=%view{ascii} identify %f; test -x /usr/bin/exif && echo && exif %f 2>/dev/null - Include=image - -type/^PC\ bitmap - Include=image - -type/^PNG - Include=image - -type/^TIFF - Include=image - -type/^PBM - Include=image - -type/^PGM - Include=image - -type/^PPM - Include=image - -type/^Netpbm - Include=image - -shell/.xcf - Open=(gimp %f &) - -shell/.xbm - Open=bitmap %f - -shell/.xpm - Include=image - View=sxpm %f - -shell/.ico - Include=image - -include/image - Open=if [ "$DISPLAY" = "" ]; then zgv %f; else (gqview %f &); fi - View=%view{ascii} identify %f - #View=%view{ascii} asciiview %f - - -### Sound files ### - -regex/\.([wW][aA][vV]|[sS][nN][dD]|[vV][oO][cC]|[aA][uU]|[sS][mM][pP]|[aA][iI][fF][fF]|[sS][nN][dD])$ - Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi - -regex/\.([mM][oO][dD]|[sS]3[mM]|[xX][mM]|[iI][tT]|[mM][tT][mM]|669|[sS][tT][mM]|[uU][lL][tT]|[fF][aA][rR])$ - Open=mikmod %f - #Open=tracker %f - -regex/\.([wW][aA][wW]22)$ - Open=vplay -s 22 %f - -regex/\.([mM][pP]3)$ - Open=if [ "$DISPLAY" = "" ]; then mpg123 %f; else (xmms %f >/dev/null 2>&1 &); fi - View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p' - -regex/\.([oO][gG][gG|aA|vV|xX])$ - Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f >/dev/null 2>&1 &); fi - View=%view{ascii} ogginfo %s - -regex/\.([sS][pP][xX]|[fF][lL][aA][cC])$ - Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi - -regex/\.([mM][iI][dD][iI]?|[rR][mM][iI][dD]?)$ - Open=timidity %f - -regex/\.([wW][mM][aA])$ - Open=mplayer -vo null %f - View=%view{ascii} mplayer -quiet -slave -frames 0 -vo null -ao null -identify %f 2>/dev/null | tail +13 || file %f - - -### Play lists ### - -regex/\.([mM]3[uU]|[pP][lL][sS])$ - Open=if [ -z "$DISPLAY" ]; then mplayer -vo null -playlist %f; else (xmms -p %f >/dev/null 2>&1 &); fi - - -### Video ### - -regex/\.([aA][vV][iI])$ - Include=video - -regex/\.([aA][sS][fFxX])$ - Include=video - -regex/\.([dD][iI][vV][xX])$ - Include=video - -regex/\.([mM][kK][vV])$ - Include=video - -regex/\.([mM][oO][vV]|[qQ][tT])$ - Include=video - -regex/\.([mM][pP]4|[mM][pP][eE]?[gG])$ - Include=video - -# MPEG-2 TS container + H.264 codec -regex/\.([mM][tT][sS])$ - Include=video - -regex/\.([vV][oO][bB])$ - Include=video - -regex/\.([wW][mM][vV])$ - Include=video - -regex/\.([fF][lL][iIcCvV])$ - Include=video - -regex/\.([oO][gG][mM])$ - Include=video - -regex/\.([rR][aA]?[mM])$ - Open=(realplay %f >/dev/null 2>&1 &) - -include/video - Open=(mplayer %f >/dev/null 2>&1 &) - #Open=(gtv %f >/dev/null 2>&1 &) - #Open=(xanim %f >/dev/null 2>&1 &) - - -### Documents ### - -# Postscript -type/^PostScript - Open=(gv %f &) - View=%view{ascii} ps2ascii %f - -# PDF -type/^PDF - Open=(xpdf %f &) - #Open=(acroread %f &) - #Open=(ghostview %f &) - View=%view{ascii} pdftotext %f - - -# The following code very ugly and should not be taken as example. -# It should be cleaned up when the new format of mc.ext is developed. - -# html -regex/\.([hH][tT][mM][lL]?)$ - Open=(if test -n "" && test -n "$DISPLAY"; then ( file://%d/%p &) 1>&2; else links %f || lynx -force_html %f || ${PAGER:-more} %f; fi) 2>/dev/null - View=%view{ascii} links -dump %f 2>/dev/null || w3m -dump %f 2>/dev/null || lynx -dump -force_html %f - -# StarOffice 5.2 -shell/.sdw - Open=(ooffice %f &) - -# StarOffice 6 and OpenOffice.org formats -regex/\.(odt|ott|sxw|stw|ods|ots|sxc|stc|odp|otp|sxi|sti|odg|otg|sxd|std|odb|odf|sxm|odm|sxg)$ - Open=(ooffice %f &) - View=%view{ascii} odt2txt %f - -# AbiWord -shell/.abw - Open=(abiword %f &) - -# Microsoft Word Document -regex/\.([Dd][oO][cCtT]|[Ww][rR][iI])$ - Open=(abiword %f >/dev/null 2>&1 &) - View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f -type/^Microsoft\ Word - Open=(abiword %f >/dev/null 2>&1 &) - View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f - -# RTF document -regex/\.([rR][tT][fF])$ - Open=(abiword %f >/dev/null 2>&1 &) - -# Microsoft Excel Worksheet -regex/\.([xX][lL][sSwW])$ - Open=(gnumeric %f >/dev/null 2>&1 &) - View=%view{ascii} xls2csv %f || strings %f -type/^Microsoft\ Excel - Open=(gnumeric %f >/dev/null 2>&1 &) - View=%view{ascii} xls2csv %f || strings %f - -# Use OpenOffice.org to open any MS Office documents -type/^Microsoft\ Office\ Document - Open=(ooffice %f &) - -# Framemaker -type/^FrameMaker - Open=fmclient -f %f - -# DVI -regex/\.([dD][vV][iI])$ - Open=if [ x$DISPLAY = x ]; then dvisvga %f; else (xdvi %f &); fi - View=%view{ascii} dvi2tty %f - -# TeX -regex/\.([Tt][Ee][Xx])$ - Include=editor - -# DjVu -regex/\.(djvu|DJVU)$ - Open=djview %f & - -### Miscellaneous ### - -# Makefile -regex/[Mm]akefile$ - Open=make -f %f %{Enter parameters} - -# Imakefile -shell/Imakefile - Open=xmkmf -a - -# Makefile.PL (MakeMaker) -regex/^Makefile.(PL|pl)$ - Open=%var{PERL:perl} %f - -# dbf -regex/\.([dD][bB][fF])$ - Open=%view{ascii} dbview %f - View=%view{ascii} dbview -b %f - -# REXX script -regex/\.(rexx?|cmd)$ - Open=rexx %f %{Enter parameters};echo "Press ENTER";read y - -# Disk images for Commodore computers (VIC20, C64, C128) -regex/\.(d64|D64)$ - Open=%cd %p/uc1541:// - View=%view{ascii} c1541 %f -list - Extract=c1541 %f -extract - -# Glade, a user interface designer for GTK+ and GNOME -regex/\.([Gg][Ll][Aa][Dd][Ee])$ - Open=if glade-3 --version >/dev/null 2>&1; then (glade-3 %f >/dev/null 2>&1 &); else (glade-2 %f >/dev/null 2>&1 &); fi - -# Gettext Catalogs -shell/.mo - View=%view{ascii} msgunfmt %f || cat %f - -# lyx -regex/\.(lyx|LYX)$ - Open=lyx %f - View=%view{ascii} lyxcat %f - -# torrent -regex/\.([tT][oO][rR][rR][eE][nN][tT])$ - View=%view{ascii} ctorrent -x %f 2>/dev/null - -### Plain compressed files ### - -# ace -regex/\.(ace|ACE)$ - Open=%cd %p/uace:// - View=%view{ascii} unace l %f - Extract=unace x %f - -# arc -regex/\.(arc|ARC)$ - Open=%cd %p/uarc:// - View=%view{ascii} arc l %f - Extract=arc x %f '*' - Extract (with flags)=I=%{Enter any Arc flags:}; if test -n "$I"; then arc x $I %f; fi - -# zip -type/^([Zz][Ii][Pp])\ archive - Open=%cd %p/uzip:// - View=%view{ascii} unzip -v %f - -# zoo -regex/\.([Zz][Oo][Oo])$ - Open=%cd %p/uzoo:// - View=%view{ascii} zoo l %f - -# gzip -type/^gzip - Open=gzip -dc %f | %var{PAGER:more} - View=%view{ascii} gzip -dc %f 2>/dev/null - -regex/\.(gz|Z)$ - View=%view{ascii} gzip -dc %f 2>/dev/null - -# bzip2 -type/^bzip2 - Open=bzip2 -dc %f | %var{PAGER:more} - View=%view{ascii} bzip2 -dc %f 2>/dev/null - -regex/\.bz2?$ - View=%view{ascii} bzip2 -dc %f 2>/dev/null - -# bzip -type/^bzip - Open=bzip -dc %f | %var{PAGER:more} - View=%view{ascii} bzip -dc %f 2>/dev/null - -# compress -type/^compress - Open=gzip -dc %f | %var{PAGER:more} - View=%view{ascii} gzip -dc %f 2>/dev/null - -# lzma -regex/\.lzma$ - Open=lzma -dc %f | %var{PAGER:more} - View=%view{ascii} lzma -dc %f 2>/dev/null - -# xz -regex/\.xz$ - Open=xz -dc %f | %var{PAGER:more} - View=%view{ascii} xz -dc %f 2>/dev/null - -### Default ### - -# Default target for anything not described above -default/* - Open= - View= - - -### EOF ### diff --git a/packages/tools/MC/etc/mc.keymap b/packages/tools/MC/etc/mc.keymap deleted file mode 100644 index 287557e26..000000000 --- a/packages/tools/MC/etc/mc.keymap +++ /dev/null @@ -1,429 +0,0 @@ -[main] -Help = f1 -UserMenu = f2 -View = f3 -ViewFile = -Edit = f4 -EditForceInternal = -Copy = f5 -Move = f6 -MakeDir = f7 -Delete = f8 -Menu = f9 -Quit = f10 -MenuLastSelected = f19 -QuitQuiet = f20 -Find = alt-question -CdQuick = alt-c -HotList = ctrl-backslash -Reread = ctrl-r -DirSize = ctrl-space -Suspend = ctrl-z -Swap = ctrl-u -History = alt-h -PanelListing = -PanelListingSwitch = alt-t -PanelListingChange = -ShowHidden = alt-dot -SplitVertHoriz = alt-comma -Shell = ctrl-o -PutCurrentPath = alt-a -PutOtherPath = alt-shift-a -ViewFiltered = alt-exclamation -Select = kpplus -Unselect = kpminus -SelectInvert = kpasterisk -ScreenList = alt-prime -OptionsLayout = -OptionsPanel = -OptionsConfirm = -OptionsDisplayBits = -OptionsVfs = -LearnKeys = -SaveSetup = -EditExtensionsFile = -EditFileHighlightFile = -Filter = -ConnectFish = -ConnectFtp = -ConnectSmb = -Undelete = -ExtendedKeyMap = ctrl-x - -[main:xmap] -ChangeMode = c -ChangeOwn = o -CompareDirs = d -CompareFiles = ctrl-d -HotListAdd = h -LinkSymbolicEdit = ctrl-s -Link = l -LinkSymbolic = s -LinkSymbolicRelative = v -PanelInfo = i -PanelQuickView = q -ExternalPanelize = exclamation -VfsList = a -Jobs = j -PutCurrentPath = p -PutOtherPath = ctrl-p -PutCurrentTagged = t -PutOtherTagged = ctrl-t -PutCurrentLink = r -PutOtherLink = ctrl-r - -[panel] -Search = ctrl-s; alt-s -Mark = insert; ctrl-t -MarkUp = shift-up -MarkDown = shift-down -MarkLeft = -MarkRight = -Down = down; ctrl-n -Up = up; ctrl-p -Left = left -Right = right -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -PanelOtherCd = alt-o -PanelOtherCdLink = alt-l -ViewRaw = f13 -EditNew = f14 -CopySingle = f15 -MoveSingle = f16 -DeleteSingle = f18 -Select = alt-plus -Unselect = alt-minus -SelectInvert = alt-asterisk -CdChild = ctrl-pgdn -CdParent = ctrl-pgup -CdParentSmart = -History = alt-shift-h -HistoryNext = alt-u -HistoryPrev = alt-y -BottomOnScreen = alt-j -MiddleOnScreen = alt-r -TopOnScreen = alt-g -PanelOtherSync = alt-i -SelectCodepage = alt-e -Top = alt-lt; home; a1 -Bottom = alt-gt; end; c1 -Sort = -SortPrev = -SortNext = -SortReverse = -SortByName = -SortByExt = -SortBySize = -SortByMTime = - -[dialog] -Ok = enter -Cancel = f10; esc; ctrl-g -Up = left; up -#Left = left; up -Down = right; down -#Right = right; down -Help = f1 -Suspend = ctrl-z -Refresh = ctrl-l -ScreenList = alt-prime -ScreenNext = alt-rbrace -ScreenPrev = alt-lbrace - -[input] -Home = ctrl-a; alt-lt; home; a1 -End = ctrl-e; alt-gt; end; c1 -Left = left; alt-left; ctrl-b -Right = right; alt-right; ctrl-f -WordLeft = ctrl-left; alt-b -WordRight = ctrl-right; alt-f -Backspace = backspace; ctrl-h -Delete = delete; ctrl-d -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -Mark = -Remove = ctrl-w -Cut = -Store = alt-w -Paste = -Yank = ctrl-y -DeleteToEnd = ctrl-k -HistoryPrev = alt-p; ctrl-down -HistoryNext = alt-n; ctrl-up -History = alt-h -Complete = alt-tab -Clear = -MarkLeft = shift-left -MarkRight = shift-right -MarkToWordBegin = ctrl-shift-left -MarkToWordEnd = ctrl-shift-right -MarkToHome = shift-home -MarkToEnd = shift-end - -[listbox] -Up = up; ctrl-p -Down = down; ctrl-n -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Delete = delete; d -Clear = shift-delete; shift-d - -[tree] -Help = f1 -Reread = f2; ctrl-r -Forget = f3 -ToggleNavigation = f4 -Copy = f5 -Move = f6 -Up = up; ctrl-p -Down = down; ctrl-n -Left = left -Right = right -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -Search = ctrl-s; alt-s -Delete = f8; delete - -[help] -Help = f1 -Index = f2; c -Back = f3; left; l -Quit = f10; esc -Up = up; ctrl-p -Down = down; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -Enter = right; enter -LinkNext = tab -LinkPrev = alt-tab -NodeNext = n -NodePrev = p - -[editor] -Store = ctrl-insert -Paste = shift-insert -Cut = shift-delete -Up = up -Down = down -Left = left -Right = right -WordLeft = ctrl-left; ctrl-z -WordRight = ctrl-right; ctrl-x -Enter = enter -Return = shift-enter -BackSpace = backspace; ctrl-h -Delete = delete; ctrl-d -PageUp = pgup -PageDown = pgdn -Home = home -End = end -Tab = tab -Undo = ctrl-u -Redo = alt-r -Top = ctrl-home; alt-lt -Bottom = ctrl-end; alt-gt -ScrollUp = ctrl-up -ScrollDown = ctrl-down -TopOnScreen = ctrl-pgup -BottomOnScreen = ctrl-pgdn -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -DeleteLine = ctrl-y -DeleteToEnd = ctrl-k -DeleteToHome = -ParagraphUp = -ParagraphDown = -Save = f2 -EditFile = -EditNew = ctrl-n -SaveAs = f12; ctrl-f2 -Mark = f3 -Copy = f5 -Move = f6 -Remove = f8 -MarkLine = -MarkWord = -MarkAll = -Unmark = -Search = f7 -SearchContinue = f17 -BlockShiftLeft = -BlockShiftRight = -MarkPageUp = shift-pgup -MarkPageDown = shift-pgdn -MarkLeft = shift-left -MarkRight = shift-right -MarkToWordBegin = ctrl-shift-left -MarkToWordEnd = ctrl-shift-right -MarkUp = shift-up -MarkDown = shift-down -MarkToHome = shift-home -MarkToEnd = shift-end -MarkToFileBegin = ctrl-shift-home -MarkToFileEnd = ctrl-shift-end -MarkToPageBegin = ctrl-shift-pgup -MarkToPageEnd = ctrl-shift-pgdn -MarkScrollUp = ctrl-shift-up -MarkScrollDown = ctrl-shift-down -MarkParagraphUp = -MarkParagraphDown = -MarkColumnPageUp = alt-pgup -MarkColumnPageDown = alt-pgdn -MarkColumnLeft = alt-left -MarkColumnRight = alt-right -MarkColumnUp = alt-up -MarkColumnDown = alt-down -MarkColumnScrollUp = -MarkColumnScrollDown = -MarkColumnParagraphUp = -MarkColumnParagraphDown = -BlockSave = ctrl-f -MarkColumn = f13 -Replace = f4 -ReplaceContinue = f14 -Complete = alt-tab -InsertFile = f15 -Quit = f10 -InsertOverwrite = insert -Help = f1 -Date = -Refresh = ctrl-l -Goto = alt-l -Sort = alt-t -Mail = alt-m -ParagraphFormat = alt-p -MatchBracket = alt-b -ExternalCommand = alt-u -UserMenu = f11 -Menu = f9 -Bookmark = alt-k -BookmarkFlush = alt-o -BookmarkNext = alt-j -BookmarkPrev = alt-i -History = -Shell = ctrl-o -InsertLiteral = ctrl-q -MacroStartRecord = -MacroStopRecord = -MacroStartStopRecord = ctrl-r -MacroDelete = -ShowNumbers = alt-n -ShowTabTws = alt-underline -SyntaxOnOff = ctrl-s -SyntaxChoose = -ShowMargin = -Find = alt-enter -FilePrev = alt-minus -FileNext = alt-plus -RepeatStartStopRecord = -SelectCodepage = alt-e -Options = -OptionsSaveMode = -LearnKeys = -ExtendedKeyMap = - -[viewer] -Help = f1 -WrapMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Search = f7; question; slash -SearchContinue = ctrl-r; ctrl-s; f17; n -MagicMode = f8 -NroffMode = f9 -Home = ctrl-a -End = ctrl-e -Left = h; left -Right = l; right -LeftQuick = ctrl-left -RightQuick = ctrl-right -Up = k; y; insert; up; ctrl-p -Down = j; e; delete; down; enter; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -BookmarkGoto = m -Bookmark = r -FileNext = ctrl-f -FilePrev = ctrl-b -SelectCodepage = alt-e -Shell = ctrl-o -Ruler = alt-r - -[viewer:hex] -Help = f1 -HexEditMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Save = f6 -Search = f7; question; slash -SearchContinue = ctrl-r; ctrl-s; f17; n -MagicMode = f8 -NroffMode = f9 -ToggleNavigation = tab -Home = ctrl-a; home -End = ctrl-e; end -Left = b; left -Right = f; right -Up = k; y; up -Down = j; delete; down -PageDown = pgdn; ctrl-v -PageUp = pgup; alt-v -Top = ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g - -[diffviewer] -ShowSymbols = alt-s; s -ShowNumbers = alt-n; l -SplitFull = f -SplitEqual = equal -SplitMore = gt -SplitLess = lt -Tab2 = 2 -Tab3 = 3 -Tab4 = 4 -Tab8 = 8 -Swap = ctrl-u -Redo = ctrl-r -HunkNext = n; enter; space -HunkPrev = p; backspace -Goto = g; shift-g -Save = f2 -Edit = f4 -EditOther = f14 -Merge = f5 -Search = f7 -SearchContinue = f17 -Options = f9 -Top = ctrl-home -Bottom = ctrl-end -Down = down -Up = up -LeftQuick = ctrl-left -RightQuick = ctrl-right -Left = left -Right = right -PageDown = pgdn -PageUp = pgup -Home = home -End = end -Help = f1 -Quit = f10; q; shift-q; esc -Shell = ctrl-o -SelectCodepage = alt-e diff --git a/packages/tools/MC/etc/mc.keymap.default b/packages/tools/MC/etc/mc.keymap.default deleted file mode 100644 index 287557e26..000000000 --- a/packages/tools/MC/etc/mc.keymap.default +++ /dev/null @@ -1,429 +0,0 @@ -[main] -Help = f1 -UserMenu = f2 -View = f3 -ViewFile = -Edit = f4 -EditForceInternal = -Copy = f5 -Move = f6 -MakeDir = f7 -Delete = f8 -Menu = f9 -Quit = f10 -MenuLastSelected = f19 -QuitQuiet = f20 -Find = alt-question -CdQuick = alt-c -HotList = ctrl-backslash -Reread = ctrl-r -DirSize = ctrl-space -Suspend = ctrl-z -Swap = ctrl-u -History = alt-h -PanelListing = -PanelListingSwitch = alt-t -PanelListingChange = -ShowHidden = alt-dot -SplitVertHoriz = alt-comma -Shell = ctrl-o -PutCurrentPath = alt-a -PutOtherPath = alt-shift-a -ViewFiltered = alt-exclamation -Select = kpplus -Unselect = kpminus -SelectInvert = kpasterisk -ScreenList = alt-prime -OptionsLayout = -OptionsPanel = -OptionsConfirm = -OptionsDisplayBits = -OptionsVfs = -LearnKeys = -SaveSetup = -EditExtensionsFile = -EditFileHighlightFile = -Filter = -ConnectFish = -ConnectFtp = -ConnectSmb = -Undelete = -ExtendedKeyMap = ctrl-x - -[main:xmap] -ChangeMode = c -ChangeOwn = o -CompareDirs = d -CompareFiles = ctrl-d -HotListAdd = h -LinkSymbolicEdit = ctrl-s -Link = l -LinkSymbolic = s -LinkSymbolicRelative = v -PanelInfo = i -PanelQuickView = q -ExternalPanelize = exclamation -VfsList = a -Jobs = j -PutCurrentPath = p -PutOtherPath = ctrl-p -PutCurrentTagged = t -PutOtherTagged = ctrl-t -PutCurrentLink = r -PutOtherLink = ctrl-r - -[panel] -Search = ctrl-s; alt-s -Mark = insert; ctrl-t -MarkUp = shift-up -MarkDown = shift-down -MarkLeft = -MarkRight = -Down = down; ctrl-n -Up = up; ctrl-p -Left = left -Right = right -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -PanelOtherCd = alt-o -PanelOtherCdLink = alt-l -ViewRaw = f13 -EditNew = f14 -CopySingle = f15 -MoveSingle = f16 -DeleteSingle = f18 -Select = alt-plus -Unselect = alt-minus -SelectInvert = alt-asterisk -CdChild = ctrl-pgdn -CdParent = ctrl-pgup -CdParentSmart = -History = alt-shift-h -HistoryNext = alt-u -HistoryPrev = alt-y -BottomOnScreen = alt-j -MiddleOnScreen = alt-r -TopOnScreen = alt-g -PanelOtherSync = alt-i -SelectCodepage = alt-e -Top = alt-lt; home; a1 -Bottom = alt-gt; end; c1 -Sort = -SortPrev = -SortNext = -SortReverse = -SortByName = -SortByExt = -SortBySize = -SortByMTime = - -[dialog] -Ok = enter -Cancel = f10; esc; ctrl-g -Up = left; up -#Left = left; up -Down = right; down -#Right = right; down -Help = f1 -Suspend = ctrl-z -Refresh = ctrl-l -ScreenList = alt-prime -ScreenNext = alt-rbrace -ScreenPrev = alt-lbrace - -[input] -Home = ctrl-a; alt-lt; home; a1 -End = ctrl-e; alt-gt; end; c1 -Left = left; alt-left; ctrl-b -Right = right; alt-right; ctrl-f -WordLeft = ctrl-left; alt-b -WordRight = ctrl-right; alt-f -Backspace = backspace; ctrl-h -Delete = delete; ctrl-d -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -Mark = -Remove = ctrl-w -Cut = -Store = alt-w -Paste = -Yank = ctrl-y -DeleteToEnd = ctrl-k -HistoryPrev = alt-p; ctrl-down -HistoryNext = alt-n; ctrl-up -History = alt-h -Complete = alt-tab -Clear = -MarkLeft = shift-left -MarkRight = shift-right -MarkToWordBegin = ctrl-shift-left -MarkToWordEnd = ctrl-shift-right -MarkToHome = shift-home -MarkToEnd = shift-end - -[listbox] -Up = up; ctrl-p -Down = down; ctrl-n -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Delete = delete; d -Clear = shift-delete; shift-d - -[tree] -Help = f1 -Reread = f2; ctrl-r -Forget = f3 -ToggleNavigation = f4 -Copy = f5 -Move = f6 -Up = up; ctrl-p -Down = down; ctrl-n -Left = left -Right = right -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -Search = ctrl-s; alt-s -Delete = f8; delete - -[help] -Help = f1 -Index = f2; c -Back = f3; left; l -Quit = f10; esc -Up = up; ctrl-p -Down = down; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -Enter = right; enter -LinkNext = tab -LinkPrev = alt-tab -NodeNext = n -NodePrev = p - -[editor] -Store = ctrl-insert -Paste = shift-insert -Cut = shift-delete -Up = up -Down = down -Left = left -Right = right -WordLeft = ctrl-left; ctrl-z -WordRight = ctrl-right; ctrl-x -Enter = enter -Return = shift-enter -BackSpace = backspace; ctrl-h -Delete = delete; ctrl-d -PageUp = pgup -PageDown = pgdn -Home = home -End = end -Tab = tab -Undo = ctrl-u -Redo = alt-r -Top = ctrl-home; alt-lt -Bottom = ctrl-end; alt-gt -ScrollUp = ctrl-up -ScrollDown = ctrl-down -TopOnScreen = ctrl-pgup -BottomOnScreen = ctrl-pgdn -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -DeleteLine = ctrl-y -DeleteToEnd = ctrl-k -DeleteToHome = -ParagraphUp = -ParagraphDown = -Save = f2 -EditFile = -EditNew = ctrl-n -SaveAs = f12; ctrl-f2 -Mark = f3 -Copy = f5 -Move = f6 -Remove = f8 -MarkLine = -MarkWord = -MarkAll = -Unmark = -Search = f7 -SearchContinue = f17 -BlockShiftLeft = -BlockShiftRight = -MarkPageUp = shift-pgup -MarkPageDown = shift-pgdn -MarkLeft = shift-left -MarkRight = shift-right -MarkToWordBegin = ctrl-shift-left -MarkToWordEnd = ctrl-shift-right -MarkUp = shift-up -MarkDown = shift-down -MarkToHome = shift-home -MarkToEnd = shift-end -MarkToFileBegin = ctrl-shift-home -MarkToFileEnd = ctrl-shift-end -MarkToPageBegin = ctrl-shift-pgup -MarkToPageEnd = ctrl-shift-pgdn -MarkScrollUp = ctrl-shift-up -MarkScrollDown = ctrl-shift-down -MarkParagraphUp = -MarkParagraphDown = -MarkColumnPageUp = alt-pgup -MarkColumnPageDown = alt-pgdn -MarkColumnLeft = alt-left -MarkColumnRight = alt-right -MarkColumnUp = alt-up -MarkColumnDown = alt-down -MarkColumnScrollUp = -MarkColumnScrollDown = -MarkColumnParagraphUp = -MarkColumnParagraphDown = -BlockSave = ctrl-f -MarkColumn = f13 -Replace = f4 -ReplaceContinue = f14 -Complete = alt-tab -InsertFile = f15 -Quit = f10 -InsertOverwrite = insert -Help = f1 -Date = -Refresh = ctrl-l -Goto = alt-l -Sort = alt-t -Mail = alt-m -ParagraphFormat = alt-p -MatchBracket = alt-b -ExternalCommand = alt-u -UserMenu = f11 -Menu = f9 -Bookmark = alt-k -BookmarkFlush = alt-o -BookmarkNext = alt-j -BookmarkPrev = alt-i -History = -Shell = ctrl-o -InsertLiteral = ctrl-q -MacroStartRecord = -MacroStopRecord = -MacroStartStopRecord = ctrl-r -MacroDelete = -ShowNumbers = alt-n -ShowTabTws = alt-underline -SyntaxOnOff = ctrl-s -SyntaxChoose = -ShowMargin = -Find = alt-enter -FilePrev = alt-minus -FileNext = alt-plus -RepeatStartStopRecord = -SelectCodepage = alt-e -Options = -OptionsSaveMode = -LearnKeys = -ExtendedKeyMap = - -[viewer] -Help = f1 -WrapMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Search = f7; question; slash -SearchContinue = ctrl-r; ctrl-s; f17; n -MagicMode = f8 -NroffMode = f9 -Home = ctrl-a -End = ctrl-e -Left = h; left -Right = l; right -LeftQuick = ctrl-left -RightQuick = ctrl-right -Up = k; y; insert; up; ctrl-p -Down = j; e; delete; down; enter; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -BookmarkGoto = m -Bookmark = r -FileNext = ctrl-f -FilePrev = ctrl-b -SelectCodepage = alt-e -Shell = ctrl-o -Ruler = alt-r - -[viewer:hex] -Help = f1 -HexEditMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Save = f6 -Search = f7; question; slash -SearchContinue = ctrl-r; ctrl-s; f17; n -MagicMode = f8 -NroffMode = f9 -ToggleNavigation = tab -Home = ctrl-a; home -End = ctrl-e; end -Left = b; left -Right = f; right -Up = k; y; up -Down = j; delete; down -PageDown = pgdn; ctrl-v -PageUp = pgup; alt-v -Top = ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g - -[diffviewer] -ShowSymbols = alt-s; s -ShowNumbers = alt-n; l -SplitFull = f -SplitEqual = equal -SplitMore = gt -SplitLess = lt -Tab2 = 2 -Tab3 = 3 -Tab4 = 4 -Tab8 = 8 -Swap = ctrl-u -Redo = ctrl-r -HunkNext = n; enter; space -HunkPrev = p; backspace -Goto = g; shift-g -Save = f2 -Edit = f4 -EditOther = f14 -Merge = f5 -Search = f7 -SearchContinue = f17 -Options = f9 -Top = ctrl-home -Bottom = ctrl-end -Down = down -Up = up -LeftQuick = ctrl-left -RightQuick = ctrl-right -Left = left -Right = right -PageDown = pgdn -PageUp = pgup -Home = home -End = end -Help = f1 -Quit = f10; q; shift-q; esc -Shell = ctrl-o -SelectCodepage = alt-e diff --git a/packages/tools/MC/etc/mc.keymap.emacs b/packages/tools/MC/etc/mc.keymap.emacs deleted file mode 100644 index 7f51c1cb3..000000000 --- a/packages/tools/MC/etc/mc.keymap.emacs +++ /dev/null @@ -1,432 +0,0 @@ -[main] -Help = f1 -UserMenu = f2 -View = f3 -ViewFile = -Edit = f4 -EditForceInternal = -Copy = f5 -Move = f6 -MakeDir = f7 -Delete = f8 -Menu = f9 -Quit = f10 -MenuLastSelected = f19 -QuitQuiet = f20 -Find = alt-question -CdQuick = alt-c -HotList = ctrl-backslash -Reread = ctrl-r -DirSize = ctrl-space -Suspend = ctrl-z -Swap = ctrl-u -History = alt-h -PanelListing = -PanelListingSwitch = alt-t -PanelListingChange = -ShowHidden = alt-dot -SplitVertHoriz = alt-comma -Shell = ctrl-o -PutCurrentPath = alt-a -PutOtherPath = alt-shift-a -ViewFiltered = alt-exclamation -Select = kpplus -Unselect = kpminus -SelectInvert = kpasterisk -ScreenList = alt-prime -Options = -OptionsLayout = -OptionsPanel = -OptionsConfirm = -OptionsDisplayBits = -OptionsVfs = -LearnKeys = -SaveSetup = -EditExtensionsFile = -EditFileHighlightFile = -Filter = -ConnectFish = -ConnectFtp = -ConnectSmb = -Undelete = -ExtendedKeyMap = ctrl-x - -[main:xmap] -ChangeMode = c -ChangeOwn = o -CompareDirs = d -CompareFiles = ctrl-d -HotListAdd = h -LinkSymbolicEdit = ctrl-s -Link = l -LinkSymbolic = s -LinkSymbolicRelative -PanelInfo = i -PanelQuickView = q -ExternalPanelize = exclamation -VfsList = a -Jobs = j -PutCurrentPath = p -PutOtherPath = ctrl-p -PutCurrentTagged = t -PutOtherTagged = ctrl-t -PutCurrentLink = r -PutOtherLink = ctrl-r - -[panel] -Search = ctrl-s; alt-s -Mark = insert; ctrl-t -MarkUp = shift-up -MarkDown = shift-down -MarkLeft = -MarkRight = -Down = down; ctrl-n -Up = up; ctrl-p -Left = left -Right = right -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -PanelOtherCd = alt-o -PanelOtherCdLink = alt-l -ViewRaw = f13 -EditNew = f14 -CopySingle = f15 -MoveSingle = f16 -DeleteSingle = f18 -Select = alt-plus -Unselect = alt-minus -SelectInvert = alt-asterisk -CdChild = ctrl-pgdn -CdParent = ctrl-pgup -CdParentSmart = -History = alt-shift-h -HistoryNext = alt-u -HistoryPrev = alt-y -BottomOnScreen = alt-j -MiddleOnScreen = alt-r -TopOnScreen = alt-g -PanelOtherSync = alt-i -SelectCodepage = alt-e -Top = alt-lt; home; a1 -Bottom = alt-gt; end; c1 -Sort = -SortPrev = -SortNext = -SortReverse = -SortByName = -SortByExt = -SortBySize = -SortByMTime = - -[dialog] -Ok = enter -Cancel = f10; esc -Up = left; up -#Left = left; up -Down = right; down -#Right = right; down -Help = f1 -Suspend = ctrl-z -Refresh = ctrl-l -ScreenList = alt-prime -ScreenNext = alt-rbrace -ScreenPrev = alt-lbrace - -[input] -Home = ctrl-a; alt-lt; home; a1 -End = ctrl-e; alt-gt; end; c1 -Left = left; alt-left; ctrl-b -Right = right; alt-right; ctrl-f -WordLeft = ctrl-left; alt-b -WordRight = ctrl-right; alt-f -Backspace = backspace -Delete = delete -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -Mark = -Remove = ctrl-w -Cut = -Store = alt-w -Paste = -Yank = ctrl-y -DeleteToEnd = ctrl-k -HistoryPrev = alt-p; ctrl-down -HistoryNext = alt-n; ctrl-up -History = alt-h -Complete = alt-tab -Clear = -MarkLeft = -MarkRight = -MarkToWordBegin = -MarkToWordEnd = -MarkToHome = -MarkToEnd = - -[listbox] -Up = up; ctrl-p -Down = down; ctrl-n -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Delete = delete; d -Clear = shift-delete; shift-d - -[tree] -Help = f1 -Reread = f2; ctrl-r -Forget = f3 -ToggleNavigation = f4 -Copy = f5 -Move = f6 -Up = up; ctrl-p -Down = down; ctrl-n -Left = left -Right = right -Top = home; alt-lt; a1 -Bottom = end; alt-gt; c1 -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Enter = enter -Search = ctrl-s; alt-s -Delete = f8; delete - -[help] -Help = f1 -Index = f2; c -Back = f3; left; l -Quit = f10; esc; ctrl-g -Up = up; ctrl-p -Down = down; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -Enter = right; enter -LinkNext = tab -LinkPrev = alt-tab -NodeNext = n -NodePrev = p - -[editor] -Store = alt-w -Paste = ctrl-y -Cut = ctrl-w -Up = up; ctrl-p -Down = down; ctrl-n -Left = left; ctrl-b -Right = right; ctrl-f -WordLeft = ctrl-left; alt-b -WordRight = ctrl-right; alt-f -Enter = enter -Return = shift-enter -BackSpace = backspace -Delete = delete -PageUp = pgup; alt-v -PageDown = pgdn; ctrl-v -Home = home; ctrl-a -End = end; ctrl-e -Tab = tab -Undo = ctrl-u -Redo = -Top = ctrl-home; alt-lt -Bottom = ctrl-end; alt-gt -ScrollUp = ctrl-up -ScrollDown = ctrl-down -TopOnScreen = ctrl-pgup -BottomOnScreen = ctrl-pgdn -DeleteToWordBegin = alt-backspace -DeleteToWordEnd = alt-d -DeleteLine = ctrl-y -DeleteToEnd = ctrl-k -DeleteToHome = -ParagraphUp = -ParagraphDown = -Save = f2 -EditFile = -SaveAs = f12; ctrl-f2 -Mark = f3; ctrl-at -Copy = f5 -Move = f6 -Remove = f8 -MarkLine = -MarkWord = -MarkAll = -Unmark = -Search = f7; ctrl-s -SearchContinue = f17 -BlockShiftLeft = -BlockShiftRight = -MarkPageUp = shift-pgup -MarkPageDown = shift-pgdn -MarkLeft = shift-left -MarkRight = shift-right -MarkToWordBegin = ctrl-shift-left -MarkToWordEnd = ctrl-shift-right -MarkUp = shift-up -MarkDown = shift-down -MarkToHome = shift-home -MarkToEnd = shift-end -MarkToFileBegin = ctrl-shift-home -MarkToFileEnd = ctrl-shift-end -MarkToPageBegin = ctrl-shift-pgup -MarkToPageEnd = ctrl-shift-pgdn -MarkScrollUp = ctrl-shift-up -MarkScrollDown = ctrl-shift-down -MarkParagraphUp = -MarkParagraphDown = -MarkColumnPageUp = alt-pgup -MarkColumnPageDown = alt-pgdn -MarkColumnLeft = alt-left -MarkColumnRight = alt-right -MarkColumnUp = alt-up -MarkColumnDown = alt-down -MarkColumnScrollUp = -MarkColumnScrollDown = -MarkColumnParagraphUp = -MarkColumnParagraphDown = -BlockSave = -MarkColumn = f13 -Replace = f4 -ReplaceContinue = f14 -Complete = alt-tab -InsertFile = f15 -Quit = f10 -InsertOverwrite = insert -Help = f1 -Date = -Refresh = ctrl-l -Goto = alt-l -Sort = alt-t -Mail = -ParagraphFormat = alt-p -MatchBracket = -ExternalCommand = alt-u -UserMenu = f11 -Menu = f9 -Bookmark = -BookmarkFlush = -BookmarkNext = -BookmarkPrev = -History = -Shell = ctrl-o -InsertLiteral = ctrl-q -MacroStartRecord = -MacroStopRecord = -MacroStartStopRecord = ctrl-r -MacroDelete = -ShowNumbers = alt-n -ShowTabTws = alt-underline -SyntaxOnOff = ctrl-s -SyntaxChoose = -ShowMargin = -Find = alt-enter -FilePrev = alt-minus -FileNext = alt-plus -RepeatStartStopRecord = -SelectCodepage = alt-e -Options = -OptionsSaveMode = -LearnKeys = -ExtendedKeyMap = ctrl-x - -[editor:xmap] -EditNew = k - -[viewer] -Help = f1 -WrapMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Search = f7; question; slash -MagicMode = f8 -NroffMode = f9 -SearchContinue = ctrl-r; ctrl-s; f17; n -Home = ctrl-a -End = ctrl-e -Left = h; left -Right = l; right -LeftQuick= ctrl-left -RightQuick = ctrl-right -Up = k; y; insert; up; ctrl-p -Down = j; e; delete; down; enter; ctrl-n -PageDown = f; space; pgdn; ctrl-v -PageUp = b; pgup; alt-v; backspace -HalfPageDown = d -HalfPageUp = u -Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g -BookmarkGoto = m -Bookmark = r -FileNext = ctrl-f -FilePrev = ctrl-b -SelectCodepage = alt-e -Shell = ctrl-o -Ruler = alt-r - -[viewer:hex] -Help = f1 -HexEditMode = f2 -Quit = f3; f10; q; esc -HexMode = f4 -Goto = f5 -Save = f6 -Search = f7; question; slash -SearchContinue = ctrl-r; ctrl-s; f17; n -MagicMode = f8 -NroffMode = f9 -ToggleNavigation = tab -Home = ctrl-a; home -End = ctrl-e; end -Left = b; left -Right = f; right -Up = k; y; up -Down = j; delete; down -PageDown = pgdn; ctrl-v -PageUp = pgup; alt-v -Top = ctrl-home; ctrl-pgup; a1; alt-lt; g -Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g - -[diffviewer] -ShowSymbols = alt-s; s -ShowNumbers = alt-n; l -SplitFull = f -SplitEqual = equal -SplitMore = gt -SplitLess = lt -Tab2 = 2 -Tab3 = 3 -Tab4 = 4 -Tab8 = 8 -Swap = ctrl-u -Redo = ctrl-r -HunkNext = n; enter; space -HunkPrev = p; backspace -Goto = g; shift-g -Save = f2 -Edit = f4 -EditOther = f14 -Merge = f5 -Search = f7 -SearchContinue = f17 -Options = f9 -Top = ctrl-home -Bottom = ctrl-end -Down = down -Up = up -LeftQuick = ctrl-left -RightQuick = ctrl-right -Left = left -Right = right -PageDown = pgdn -PageUp = pgup -Home = home -End = end -Help = f1 -Quit = f10; q; shift-q; esc -Shell = ctrl-o -SelectCodepage = alt-e diff --git a/packages/tools/MC/etc/mc.menu b/packages/tools/MC/etc/mc.menu deleted file mode 100644 index 6aa01aa71..000000000 --- a/packages/tools/MC/etc/mc.menu +++ /dev/null @@ -1,383 +0,0 @@ -shell_patterns=0 -+ ! t t -@ Do something on the current file - CMD=%{Enter command} - $CMD %f - -+ t t -@ Do something on the tagged files - set %t; CMD=%{Enter command} - while [ -n "$1" ]; do - $CMD "$1" - shift - done - - -0 Edit a bug report and send it to root - I=`mktemp "${MC_TMPDIR:-/tmp}/mail.XXXXXX"` || exit 1 - ${EDITOR-vi} "$I" - test -r $I && mail root < $I - rm -f "$I" - -=+ f \.1$ | f \.3$ | f \.4$ | f \.5$ | f \.6$ | f \.7$ | f \.8$ | f \.man$ & t r -1 Display the file with roff -man - nroff -man %f | less - -2 Call the info hypertext browser - info - -= t d -3 Compress the current subdirectory (tar.gz) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | gzip -f9 > "$tar.tar.gz" && \ - echo "../$tar.tar.gz created." - -4 Compress the current subdirectory (tar.bz2) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | bzip2 -f > "$tar.tar.bz2" && \ - echo "../$tar.tar.bz2 created." - -5 Compress the current subdirectory (tar.p7) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | 7za a -si "$tar.tar.7z" && \ - echo "../$tar.tar.7z created." - -6 Compress the current subdirectory (tar.lzma) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | lzma -f > "$tar.tar.lzma" && \ - echo "../$tar.tar.lzma created." - -7 Compress the current subdirectory (tar.lz) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | lzip -f > "$tar.tar.lz" && \ - echo "../$tar.tar.lz created." - -8 Compress the current subdirectory (tar.xz) - Pwd=`basename %d /` - echo -n "Name of the compressed file (without extension) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | xz -f > "$tar.tar.xz" && \ - echo "../$tar.tar.xz created." - -= f \.c$ & t r -+ f \.c$ & t r & ! t t -с Compile and link current .c file - make `basename %f .c` 2>/dev/null || cc -O -o `basename %f .c` %f - -+ t r & ! t t -a Append file to opposite - cat %f >> %D/%f - -+ t t -A Append files to opposite files - set %t - while [ -n "$1" ]; do - cat "$1" >> "%D/$1" - shift - done - -+ t r & ! t t -d Delete file if a copy exists in the other directory. - if [ "%d" = "%D" ]; then - echo "The two directories must be different." - exit 1 - fi - if [ -f %D/%f ]; then # if two of them, then - if cmp -s %D/%f %f; then - rm %f && echo "%f: DELETED." - else - echo "%f and %D/%f differ: NOT deleted." - echo -n "Press RETURN " - read key - fi - else - echo "%f: No copy in %D/%f: NOT deleted." - fi - -+ t t -D Delete tagged files if a copy exists in the other directory. - if [ "%d" = "%D" ]; then - echo "The two directores must be different." - exit 1 - fi - for i in %t - do - if [ -f "%D/$i" ]; then - SUM1="`sum $i`" - SUM2="`sum %D/$i`" - if [ "$SUM1" = "$SUM2" ]; then - rm "$i" && echo "${i}: DELETED." - else - echo "$i and %D/$i differ: NOT deleted." - fi - else - echo "%f has no copy in %D/%f: NOT deleted." - fi - done - -m View manual page - MAN=%{Enter manual name} - %view man -P cat $MAN - -= f \.gz$ & t r -+ ! t t -n Inspect gzip'ed newsbatch file - dd if=%f bs=1 skip=12|zcat|${PAGER-more} - # assuming the cunbatch header is 12 bytes long. - -= t r & -+ ! t t -h Strip headers from current newsarticle - CHECK=`awk '{print $1 ; exit}' %f` 2>/dev/null - case "$CHECK" in - Newsgroups:|Path:) - I=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1 - cp %f "$I" && sed '/^'"$CHECK"' /,/^$/d' "$I" > %f - [ "$?" = "0" ] && rm "$I" - echo "%f: header removed." - ;; - *) - echo "%f is not a news article." - ;; - esac - -+ t t -H Strip headers from the marked newsarticles - set %t - while [ -n "$1" ]; do - CHECK=`awk '{print $1 ; exit}' $1` 2>/dev/null - WFILE=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1 - case "$CHECK" in - Newsgroups:|Path:) - cp "$1" "$WFILE" && sed '/^'"$CHECK"' /,/^$/d' "$WFILE" > "$1" - if [ "$?" = "0" ]; then - rm "$WFILE"; echo "$1 header removed. OK." - else - echo "Oops! Please check $1 against $WFILE." - fi - ;; - *) - echo "$1 skipped: Not a news article." - ;; - esac - shift - done - -= t r -+ ! t t -r Copy file to remote host - echo -n "To which host?: " - read Host - echo -n "To which directory on $Host?: " - read Dir - rcp -p %f "${Host}:$Dir" - -+ t t -R Copy files to remote host (no error checking) - echo -n "Copy files to which host?: " - read Host - echo -n "To which directory on $Host? :" - read Dir - rcp -pr %u "${Host}:$Dir" - -= f \.tex$ & t r -+ f \.tex$ & t r & ! t t -t Run latex on file and show it with xdvi - latex %f && xdvi `basename %f .tex`.dvi - -=+ f ^part | f ^Part | f uue & t r -+ t t -U Uudecode marked news articles (needs work) - set %t - ( - while [ -n "$1" ]; do # strip headers - FIRST=`awk '{print $1 ; exit}' "$1"` - cat "$1" | sed '/^'"$FIRST"' /,/^$/d'; shift - done - ) |sed '/^$/d' |sed -n '/^begin 6/,/^end$/p' | uudecode - if [ "$?" != "0" ]; then - echo "Cannot decode %t." - fi - echo "Please test the output file before deleting anything." - -=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r -x Extract the contents of a compressed tar file - unset PRG - case %f in - *.tar.bz2) - PRG="bunzip2 -c" - ;; - *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z) - PRG="gzip -dc" - ;; - *.tar.lzma) - PRG="lzma -dc" - ;; - *.tar.lz) - PRG="lzip -dc" - ;; - *.tar.xz) - PRG="xz -dc" - ;; - *.tar.7z) - PRG="7za e -so" - ;; - *) - exit 1 - ;; - esac - $PRG %f | tar xvf - - -= t r -+ ! t t -y Gzip or gunzip current file - unset DECOMP - case %f in - *.gz) DECOMP=-d;; - *.[zZ]) DECOMP=-d;; - esac - gzip $DECOMP -v %f - -+ t t -Y Gzip or gunzip tagged files - for i in %t - do - unset DECOMP - case "$i" in - *.gz) DECOMP=-d;; - *.[zZ]) DECOMP=-d;; - esac - gzip $DECOMP -v "$i" - done - -+ ! t t -b Bzip2 or bunzip2 current file - unset DECOMP - case %f in - *.bz2) DECOMP=-d;; - esac - bzip2 $DECOMP -v %f - -+ t t -B Bzip2 or bunzip2 tagged files - for i in %t - do - unset DECOMP - case "$i" in - *.bz2) DECOMP=-d;; - esac - bzip2 $DECOMP -v "$i" - done - -+ f \.tar.gz$ | f \.tgz$ | f \.tpz$ | f \.tar.Z$ | f \.tar.z$ | f \.tar.bz2$ | f \.tar.F$ & t r & ! t t -z Extract compressed tar file to subdirectory - unset D - set gzip -cd - case %f in - *.tar.gz) D="`basename %f .tar.gz`";; - *.tgz) D="`basename %f .tgz`";; - *.tpz) D="`basename %f .tpz`";; - *.tar.Z) D="`basename %f .tar.Z`";; - *.tar.z) D="`basename %f .tar.z`";; - *.tar.bz2) D="`basename %f .tar.bz2`"; set bunzip2 -c ;; - *.tar.F) D="`basename %f .tar.F`"; set freeze -dc; - esac - mkdir "$D"; cd "$D" && ("$1" "$2" ../%f | tar xvf -) - -+ t t -Z Extract compressed tar files to subdirectories - for i in %t - do - set gzip -dc - unset D - case "$i" in - *.tar.gz) D="`basename $i .tar.gz`";; - *.tgz) D="`basename $i .tgz`";; - *.tpz) D="`basename $i .tpz`";; - *.tar.Z) D="`basename $i .tar.Z`";; - *.tar.z) D="`basename $i .tar.z`";; - *.tar.F) D="`basename $i .tar.F`"; set freeze -dc;; - *.tar.bz2) D="`basename $i .tar.bz2`"; set bunzip2 -c;; - esac - mkdir "$D"; (cd "$D" && "$1" "$2" "../$i" | tar xvf -) - done - -+ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t -c Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2 - unset D - unset EXT - case %f in - *.tgz) EXT=tgz;; - *.tpz) EXT=tpz;; - *.Z) EXT=Z;; - *.z) EXT=z;; - *.gz) EXT=gz;; - *.bz2) EXT=bz2;; - esac - case $EXT in - tgz|tpz) D="`basename %f .$EXT`.tar";; - gz|Z|z) D="`basename %f .$EXT`";; - bz2) D="`basename %f .bz2`";; - esac - if [ "$EXT" = "bz2" ]; then - bunzip2 -v %f ; gzip -f9 -v "$D" - else - gunzip -v %f ; bzip2 -v "$D" - fi - -+ t t -C Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2 - set %t - while [ -n "$1" ] - do - unset D - unset EXT - case "$1" in - *.tgz) EXT=tgz;; - *.tpz) EXT=tpz;; - *.Z) EXT=Z;; - *.z) EXT=z;; - *.gz) EXT=gz;; - *.bz2) EXT=bz2;; - esac - case $EXT in - tgz) D="`basename $1 .tgz`.tar";; - tpz) D="`basename $1 .tpz`.tar";; - gz|Z|z) D="`basename $1 .$EXT`";; - bz2) D="`basename $1 .bz2`";; - esac - if [ "$EXT" = "bz2" ]; then - bunzip2 -v "$1" - gzip -f9 -v "$D" - else - gunzip -v "$1" - bzip2 -v "$D" - fi - shift - done - -+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh -o Open next a free console - open -s -- sh diff --git a/packages/tools/MC/etc/mc.menu.sr b/packages/tools/MC/etc/mc.menu.sr deleted file mode 100644 index e57a628ce..000000000 --- a/packages/tools/MC/etc/mc.menu.sr +++ /dev/null @@ -1,344 +0,0 @@ -shell_patterns=0 -+ ! t t -@ Ради нешто над текућом датотеком - CMD=%{Унесите наредбу} - $CMD %f - -+ t t -@ Ради нешто над означеним датотекама - set %t; CMD=%{Унесите наредбу} - while [ -n "$1" ]; do - $CMD "$1" - shift - done - - -0 Уреди пријаву грешке и пошаљи је администратору - ${EDITOR-vi} /tmp/mail.$$ - test -r /tmp/mail.$$ && mail root < /tmp/mail.$$ - rm -f /tmp/mail.$$ - -=+ f \.1$ | f \.3$ | f \.4$ | f \.5$ | f \.6$ | f \.7$ | f \.8$ | f \.man$ & t r -1 Прикажи датотеку уз помоћ roff -man - nroff -man %f | less - -2 Позови читач хипертекста info - info - -= t d -3 Компримуј текући поддиректоријум (tar.gz) - Pwd=`basename "%d" /` - echo -n "Назив компримоване датотеке (без врсте) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | gzip -f9 > "$tar.tar.gz" && \ - echo "Датотека ../$tar.tar.gz је створена." - -4 Компримуј текући поддиректоријум (tar.bz2) - Pwd=`basename %d /` - echo -n "Назив компримоване датотеке (без врсте) [$Pwd]: " - read tar - if [ "$tar"x = x ]; then tar="$Pwd"; fi - cd .. && \ - tar cf - "$Pwd" | bzip2 -f > "$tar.tar.bz2" && \ - echo "Датотека ../$tar.tar.bz2 је створена." - -= f \.c$ & t r -+ f \.c$ & t r & ! t t -5 Преведи и повежи текућу датотеку врсте `.c' - make `basename %f .c` 2>/dev/null || cc -O -o `basename %f .c` %f - -+ t r & ! t t -a Надовежи датотеку на ону из другог окна - cat %f >>%D/%f - -+ t t -A Надовежи датотеке на оне из другог окна - set %t - while [ -n "$1" ]; do - cat "$1" >> "%D/$1" - shift - done - -+ t r & ! t t -d Обриши датотеку ако њена копија постоји у другом окну. - if [ "%d" = "%D" ]; then - echo "Два директоријума морају да буду различити." - exit 1 - fi - if [ -f %D/%f ]; then # if two of them, then - if cmp -s %D/%f %f; then - rm %f && echo "%f: ОБРИСАНА." - else - echo "%f и %D/%f се разликују: НИЈЕ обрисана." - echo -n "Притисните `RETURN' " - read тастер - fi - else - echo "%f: Нема копије у %D/%f: НИЈЕ обрисана." - fi - -+ t t -D Обриши означене датотеке ако постоји копија у другом окну. - if [ "%d" = "%D" ]; then - echo "Два директоријума морају да буду различити." - exit 1 - fi - for i in %t - do - if [ -f "%D/$i" ]; then - SUM1="`sum $i`" - SUM2="`sum %D/$i`" - if [ "$SUM1" = "$SUM2" ]; then - rm "$i" && echo "${i}: ОБРИСАНА." - else - echo "$i и %D/$i се разликују: НИЈЕ обрисана." - fi - else - echo "%f нема копију у %D/%f: НИЈЕ обрисана." - fi - done - -m Погледај страницу упутства - MAN=%{Унесите назив упутства} - %view man -P cat $MAN - -= f \.gz$ & t r -+ ! t t -n Прегледај датотеку вести компримовану програмом gzip - dd if=%f bs=1 skip=12|zcat|${PAGER-more} - # assuming the cunbatch header is 12 bytes long. - -= t r & -+ ! t t -h Скини заглавља из текућег чланка вести - CHECK=`awk '{print $1 ; exit}' %f` 2>/dev/null - case "$CHECK" in - Newsgroups:|Path:) - cp %f /tmp/%f.$$ && sed '/^'"$CHECK"' /,/^$/d' /tmp/%f.$$ > %f - [ "$?" = "0" ] && rm "/tmp/%f.$$" - echo "%f: уклоњено заглавље." - ;; - *) - echo "%f није чланак вести." - ;; - esac - -+ t t -H Скини заглавља из означених чланака вести - set %t - while [ -n "$1" ]; do - CHECK=`awk '{print $1 ; exit}' "$1"` 2>/dev/null - WFILE=/tmp/${1}.$$ - case "$CHECK" in - Newsgroups:|Path:) - cp "$1" "$WFILE" && sed '/^'"$CHECK"' /,/^$/d' "$WFILE" > "$1" - if [ "$?" = "0" ]; then - rm "$WFILE"; echo "$1 заглавље уклоњено. У реду." - else - echo "Уупс! Молим да проверите $1 са $WFILE." - fi - ;; - *) - echo "$1 прескочена: Није чланак вести." - ;; - esac - shift - done - -= t r -+ ! t t -r Копирај датотеку на удаљеног домаћина - echo -n "На ког домаћина?: " - read Домаћин - echo -n "У који директоријум на $Домаћин?: " - read Дир - rcp -p %f "${Домаћин}:$Дир" - -+ t t -R Копирај датотеке на удаљеног домаћина (без провере грешака) - echo -n "На ког домаћина да копирам датотеке?: " - read Домаћин - echo -n "У који директоријум на $Домаћин? :" - read Дир - rcp -pr %u "${Домаћин}:$Дир" - -= f \.tex$ & t r -+ f \.tex$ & t r & ! t t -t Покрени ЛаТеХ над датотеком и прикажи је преко програма `xdvi' - latex %f && xdvi `basename %f .tex`.dvi - -=+ f ^part | f ^Part | f uue & t r -+ t t -U Уудекодирај означени чланак вести (требало би разрадити) - set %t - ( - while [ -n "$1" ]; do # strip headers - FIRST=`awk '{print $1 ; exit}' "$1"` - cat "$1" | sed '/^'"$FIRST"' /,/^$/d'; shift - done - ) |sed '/^$/d' |sed -n '/^begin 6/,/^end$/p' | uudecode - if [ "$?" != "0" ]; then - echo "Не могу да декодирам %t." - fi - echo "Молим да проверите излазну датотеку пре било каквог брисања." - -=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.Z$ | f \.tar\.bz2$ & t r -x Издвој садржај компримоване датотеке врсте `tar' - unset PRG - case %f in - *.tar.bz2) - PRG="bunzip2 -c" - ;; - *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z) - PRG="gzip -dc" - ;; - *.tar.lzma) - PRG="lzma -dc" - ;; - *.tar.lz) - PRG="lzip -dc" - ;; - *.tar.xz) - PRG="xz -dc" - ;; - *.tar.7z) - PRG="7za e -so" - ;; - *) - exit 1 - ;; - esac - $PRG %f | tar xvf - - -= t r -+ ! t t -y Пакуј или расп. тек. дат. програмима `gzip' или `gunzip' - unset DECOMP - case %f in - *.gz) DECOMP=-d;; - *.[zZ]) DECOMP=-d;; - esac - gzip $DECOMP -v %f - -+ t t -Y Пакуј или расп. означ. дат. програмима `gzip' или `gunzip' - for i in %t - do - unset DECOMP - case "$i" in - *.gz) DECOMP=-d;; - *.[zZ]) DECOMP=-d;; - esac - gzip $DECOMP -v "$i" - done - -+ ! t t -b Пакуј или расп. тек. дат. програмима `bzip2' или `bunzip2' - unset DECOMP - case %f in - *.bz2) DECOMP=-d;; - esac - bzip2 $DECOMP -v %f - -+ t t -B Пакуј или расп. означ. дат. програмима `bzip2' или `bunzip2' - for i in %t - do - unset DECOMP - case "$i" in - *.bz2) DECOMP=-d;; - esac - bzip2 $DECOMP -v "$i" - done - -+ f \.tar.gz$ | f \.tgz$ | f \.tpz$ | f \.tar.Z$ | f \.tar.z$ | f \.tar.bz2$ | f \.tar.F$ & t r & ! t t -z Издвој компримовану датотеку врсте `tar' у поддиректоријум - unset D - set gzip -cd - case %f in - *.tar.gz) D="`basename %f .tar.gz`";; - *.tgz) D="`basename %f .tgz`";; - *.tpz) D="`basename %f .tpz`";; - *.tar.Z) D="`basename %f .tar.Z`";; - *.tar.z) D="`basename %f .tar.z`";; - *.tar.bz2) D="`basename %f .tar.bz2`"; set bunzip2 -c ;; - *.tar.F) D="`basename %f .tar.F`"; set freeze -dc; - esac - mkdir "$D"; cd "$D" && ("$1" "$2" ../%f | tar xvf -) - -+ t t -Z Издвој компримовану датотеке врсте `tar' у поддиректоријуме - for i in %t - do - set gzip -dc - unset D - case "$i" in - *.tar.gz) D="`basename $i .tar.gz`";; - *.tgz) D="`basename $i .tgz`";; - *.tpz) D="`basename $i .tpz`";; - *.tar.Z) D="`basename $i .tar.Z`";; - *.tar.z) D="`basename $i .tar.z`";; - *.tar.F) D="`basename $i .tar.F`"; set freeze -dc;; - *.tar.bz2) D="`basename $i .tar.bz2`"; set bunzip2 -c;; - esac - mkdir "$D"; (cd "$D" && "$1" "$2" "../$i" | tar xvf -) - done - -+ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t -c Пребаци gz<->bz2, tar.gz<->tar.bz2 и tgz->tar.bz2 - unset D - case "%f" in - *.tgz) EXT=tgz;; - *.tpz) EXT=tpz;; - *.Z) EXT=Z;; - *.z) EXT=z;; - *.gz) EXT=gz;; - *.bz2) EXT=bz2;; - esac - case $EXT in - tgz|tpz) D="`basename %f .$EXT`.tar";; - gz|Z|z) D="`basename %f .$EXT`";; - bz2) D="`basename %f .bz2`";; - esac - if [ "$EXT" = "bz2" ]; then - bunzip2 -v "%f" ; gzip -f9 -v "$D" - else - gunzip -v "%f" ; bzip2 -v "$D" - fi - -+ t t -C Пребаци gz<->bz2, tar.gz<->tar.bz2 и tgz->tar.bz2 - set %t - while [ -n "$1" ] - do - unset D - case "$1" in - *.tgz) EXT=tgz;; - *.tpz) EXT=tpz;; - *.Z) EXT=Z;; - *.z) EXT=z;; - *.gz) EXT=gz;; - *.bz2) EXT=bz2;; - esac - case $EXT in - tgz) D="`basename $1 .tgz`.tar";; - tpz) D="`basename $1 .tpz`.tar";; - gz|Z|z) D="`basename $1 .$EXT`";; - bz2) D="`basename $1 .bz2`";; - esac - if [ "$EXT" = "bz2" ]; then - bunzip2 -v "$1" - gzip -f9 -v "$D" - else - gunzip -v "$1" - bzip2 -v "$D" - fi - shift - done - -+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh -o Отвори следећу слободну конзолу - open -s -- sh - diff --git a/packages/tools/MC/etc/mcedit.menu b/packages/tools/MC/etc/mcedit.menu deleted file mode 100644 index eae309a93..000000000 --- a/packages/tools/MC/etc/mcedit.menu +++ /dev/null @@ -1,486 +0,0 @@ -shell_patterns=0 # expression type - -# The macros are: -# -# %c The cursor column position number. For edit menu only. -# %i The indent of blank space, equal the cursor column -# position. For edit menu only. -# %y The syntax type of current file. For edit menu only. -# %b The block file name. -# %f The current file name. -# %n Only the current file name without extension. -# %x The extension of current file name. -# %d The current directory name. -# %F The current file in the unselected panel. -# %D The directory name of the unselected panel. -# %t The currently tagged files. -# %T The tagged files in the unselected panel. -# %u and %U Similar to the %t and %T macros, but in -# addition the files are untagged. You can use this macro -# only once per menu file entry or extension file entry, -# because next time there will be no tagged files. -# %s and %S The selected files: The tagged files if -# there are any. Otherwise the current file. -# -# %% The % character -# -# %{some text} Prompt for the substitution. An input box -# is shown and the text inside the braces is used as a -# prompt. The macro is substituted by the text typed by the -# user. The user can press ESC or F10 to cancel. This macro -# doesn't work on the command line yet. - -#----------------------- Begin [perl] language template ----------------------- -+ y Perl\ Program | f \.pl$ -1 Author description header - unset LANG - unset LANGUAGE - LC_ALL= - MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`" - AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`" - cat >>%b < - # Created at: `date` - # Computer: `uname -n` - # System: `uname -sr` on `uname -m` - # - # Copyright (c) `date +%%Y` $AUTHOR All rights reserved. - # - #---------------------------------------------------------------------- - # Configure section: - - #---------------------------------------------------------------------- - # - # main() - - EOF - -+ y Perl\ Program | f \.pl$ -2 while () - cat < %b - %iwhile() { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -3 for () - cat < %b - %ifor ($i = ; $i < ; $i++) { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -4 foreach () - cat < %b - %iforeach ($ ) { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -5 if () - cat < %b - %iif () { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -6 if () else - cat < %b - %iif () { - %i} else { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -7 if () elsif () - cat < %b - %iif () { - %i} elsif () { - %i} - EOF - -+ y Perl\ Program | f \.pl$ -8 substr () - echo "%i$ = substr(\$str, \$off, \$cnt);" >%b - -+ y Perl\ Program | f \.pl$ -9 opendir () - cat < %b - %iopendir(DIR, \${dir}) || die("\$0: can't open \${dir}\n"); - EOF - -+ y Perl\ Program | f \.pl$ -a sub () - NAME=%{ Enter name of subroutine: } - cat < %b - sub - $NAME () - { - } # end of $NAME() - EOF -#----------------------- End [perl] language template ------------------------- - -#---------------------- Begin [shell] language template ----------------------- -+ y Shell\ Script | f \.sh$ -1 Author description header - unset LANG - unset LANGUAGE - LC_ALL= - MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`" - AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`" - cat >>%b < - # Created at: `date` - # Computer: `uname -n` - # System: `uname -sr` on `uname -m` - # - # Copyright (c) `date +%%Y` $AUTHOR All rights reserved. - # - #---------------------------------------------------------------------- - # Configure section: - - #---------------------------------------------------------------------- - # - # main() - - EOF - -+ y Shell\ Script | f \.sh$ -3 for - cat < %b - %ifor i in \$ - %ido - %idone - EOF - -+ y Shell\ Script | f \.sh$ -4 while - cat < %b - %iwhile - %ido - %idone - EOF - -+ y Shell\ Script | f \.sh$ -5 if [] then else - cat <> %b - %iif [ ];then - %ielse - %ifi - EOF - -+ y Shell\ Script | f \.sh$ -6 case - NUMBER=%{ Enter number elements of case:} - cat < %b - %icase "\$" in - EOF - while [ "$NUMBER" -gt 0 ] - do - cat <> %b - %i) - %i ;; - EOF - let NUMBER=$NUMBER-1 - done - cat <> %b - %i*) - %iesac - EOF - -+ y Shell\ Script | f \.sh$ -7 function - NAME=%{ Enter name of function:} - cat <> %b - $NAME() { - } # end of $NAME() - EOF - -+ y Shell\ Script | f \.sh$ -8 select of bash - cat <> %b - %iselect i in \$l - %ido - %i if [ -n "\$i" ];then - %i break - %i else - %i continue - %i fi - %idone - EOF - -#----------------------- End [shell] language template ------------------------ - -#------------------------- Begin [c] language template ------------------------ -+ f \.h$ | f \.c$ | f \.cc$ -1 Author description header - unset LANG - unset LANGUAGE - LC_ALL= - MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`" - AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`" - cat >> %b < - * Created at: `date` - * Computer: `uname -n` - * System: `uname -sr` on `uname -m` - * - * Copyright (c) `date +%%Y` $AUTHOR All rights reserved. - * - ********************************************************************/ - EOF - -+ f \.h$ | f \.c$ | f \.cc$ -2 GPL description header - cat >>%b <. - */ - EOF - -+ f \.c$ | f \.cc$ -3 if () - cat < %b - %iif () { - %i} - EOF - -+ f \.c$ | f \.cc$ -4 if () else - cat < %b - %iif () { - %i} else { - %i} - EOF - -+ f \.c$ | f \.cc$ -5 if () else if () - cat < %b - %iif ( ) { - %i} else if ( ) { - %i} - EOF - -+ f \.c$ | f \.cc$ -6 switch () - NUMBER=%{ Enter number elements of switch:} - echo "%iswitch () {" >%b - while [ "$NUMBER" -gt 0 ] - do - echo "%icase '':" >>%b - echo "%i break;" >>%b - let NUMBER=$NUMBER-1 - done - echo "%i default:" >>%b - echo "%i}" >>%b - -+ f \.c$ | f \.cc$ -7 for () - cat < %b - %ifor (i = ; i < ; i++) { - %i} - EOF - -+ f \.c$ | f \.cc$ -8 while () - cat < %b - %iwhile () { - %i} - EOF - -+ f \.c$ | f \.cc$ -9 do {} while () - cat < %b - %ido { - %i} while () - EOF - -+ f \.c$ | f \.cc$ -a array - cat < %b - %ichar const x[] = { - %i, , - %i}; - EOF - -+ f \.c$ | f \.cc$ -b enum - cat < %b - %ienum x { - %i, , - %i}; - EOF - -+ f \.c$ | f \.cc$ -c struct - cat < %b - %istruct ? { - %i; - %i}; - EOF - -+ f \.c$ | f \.cc$ -d union - cat < %b - %iunion ? { - %i; - %i}; - EOF - -+ f \.c$ | f \.cc$ -e typedef struct - cat < %b - %itypedef struct { - %i; - %i} ?; - EOF - -+ f \.c$ | f \.cc$ -f function - NAME=%{ Enter name of function:} - cat <> %b - $NAME() - { - } /* end of $NAME() */ - EOF - -+ f \.c$ | f \.h$ | f \.cc$ -g #include - INC=%{ Enter include name: } - if [ -r "$INC" ];then - echo \#include \"$INC\" >%b - else - echo \#include \<$INC\> >%b - fi - -+ f \.c$ | f \.h$ | f \.cc$ -d #define - echo "#define " >%b - -+ f \.c$ | f \.h$ | f \.cc$ -d #ifdef - cat < %b - #ifdef - #else - #endif - EOF - -+ f \.c$ | f \.h$ | f \.cc$ -............................................................................... - -+ f \.c$ | f \.h$ | f \.cc$ -h View all *.h into current directory - cat *.h |less - -+ f \.c$ | f \.cc$ -d Run gdb for current file - [ -x "./%n" ] && gdb ./%n - -= f \.c$ | f \.cc$ -+ f \.c$ | f \.cc$ -c Compile, link and run the current .c file - export CFLAGS="-g -Wall -O2" - make || make %n || cc ${CFLAGS} -o %n %f - [ -r "%n" ] && (echo "*** press any key for run... ***"; read) - [ -x "%n" ] && ./%n - (echo -ne "\n--- Press any key for return to edit. ---"; read) - -+ f \.c$ | f \.h$ -t Indent `C' formatter - indent -kr -pcs %b 1>/dev/null 2> %e - -#--------------------- End [c/c++] language template -------------------------- - -#------------------------- Begin unknown template ----------------------------- -+ y unknown & t r -s #! /bin/sh - echo "#! /bin/sh" >%b - -+ y unknown & t r -p #! /usr/bin/perl - echo "#! /usr/bin/perl" >%b - -+ y unknown & t r -a Author description header - unset LANG - unset LANGUAGE - LC_ALL= - MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`" - AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`" - cat >>%b < - Created at: `date` - Computer: `uname -n` - System: `uname -sr` on `uname -m` - - Copyright (c) `date +%%Y` $AUTHOR All rights reserved. - ---------------------------------------------------------------------- - - EOF -#--------------------------- End unknown template ----------------------------- - -------------------------------------------------------------------------------- - -#----------------------- Begin common section --------------------------------- -S Sort selection - TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1 - cat %b > $TMPFILE - cat $TMPFILE| sort >%b - rm -f $TMPFILE - -I Insert `Changelog' string - DATE="`date +%%Y-%%m-%%d`" - MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`" - AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`" - EMAIL="<$REPLYTO>" - echo "$DATE $AUTHOR $EMAIL" >%b - -s Invoke `shell' - sh - -m view `man' - MAN=%{Enter name of man:} - TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/mcview.$MAN.XXXXXX` || exit 1 - man -Pcat $MAN >$TMPFILE - mcview $TMPFILE - rm -f $TMPFILE - -i Insert a out of command to cursor. - CMD=%{ Enter command: } - eval $CMD > %b - -o Open bash to next free console - open -s -- /bin/bash - -u Upper case selection - TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1 - cat %b > $TMPFILE - cat $TMPFILE| sed 's/\(.*\)/\U\1/' >%b - rm -f $TMPFILE - -l Lower case selection - TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1 - cat %b > $TMPFILE - cat $TMPFILE| sed 's/\(.*\)/\U\1/' >%b - rm -f $TMPFILE - -#-------------------------- End of common section ----------------------------- diff --git a/packages/tools/MC/etc/panels.ini b/packages/tools/MC/etc/panels.ini deleted file mode 100644 index 639dd96c8..000000000 --- a/packages/tools/MC/etc/panels.ini +++ /dev/null @@ -1,31 +0,0 @@ -[New Left Panel] -display=listing -reverse=0 -case_sensitive=1 -exec_first=0 -sort_order=name -list_mode=full -user_format=half type name | size | perm -user_status0=half type name | size | perm -user_status1=half type name | size | perm -user_status2=half type name | size | perm -user_status3=half type name | size | perm -user_mini_status=0 - -[New Right Panel] -display=listing -reverse=0 -case_sensitive=1 -exec_first=0 -sort_order=name -list_mode=full -user_format=half type name | size | perm -user_status0=half type name | size | perm -user_status1=half type name | size | perm -user_status2=half type name | size | perm -user_status3=half type name | size | perm -user_mini_status=0 - -[Dirs] -other_dir=/ -current_is_left=false diff --git a/packages/tools/MC/etc/sfs.ini b/packages/tools/MC/etc/sfs.ini deleted file mode 100644 index 522cca10a..000000000 --- a/packages/tools/MC/etc/sfs.ini +++ /dev/null @@ -1,28 +0,0 @@ -# -# This is config for Single File fileSystem -# -# Notice that output files (%3) are pre-created atomically in /tmp -# with 0600 rights, so it is safe to > %3 -# -gz/1 gzip < %1 > %3 -ugz/1 gzip -cdf < %1 > %3 -bz/1 bzip < %1 > %3 -ubz/1 bzip -d < %1 > %3 -bz2/1 bzip2 < %1 > %3 -ubz2/1 bzip2 -d < %1 > %3 -lzma/1 lzma < %1 > %3 -ulzma/1 lzma -d < %1 > %3 -xz/1 xz < %1 > %3 -uxz/1 xz -d < %1 > %3 -tar/1 tar cf %3 %1 -tgz/1 tar czf %3 %1 -uhtml/1 lynx -force_html -dump %1 > %3 -uman/1 groff -Tascii -man %1 > %3 -uue/1 uuenpipe < %1 > %3 -uude/1 uudepipe < %1 > %3 -crlf/1 todos < %1 > %3 -cr/1 fromdos < %1 > %3 -# Fixme: we need it to fail whenever it should -url:2 lynx -source `echo "%2" | sed 's-|-/-g'` > %3 -nop/1 cat %1 > %3 -strings/1 strings %1 > %3 diff --git a/packages/tools/MC/package.mk b/packages/tools/MC/package.mk deleted file mode 100644 index 1feeaed0b..000000000 --- a/packages/tools/MC/package.mk +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2011-present AlexELEC (http://alexelec.in.ua) - -PKG_NAME="MC" -PKG_VERSION="4.8.30" -PKG_LICENSE="GPL" -PKG_SITE="http://www.midnight-commander.org/" -PKG_URL="http://ftp.midnight-commander.org/mc-${PKG_VERSION}.tar.xz" -PKG_SOURCE_NAME="${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain libtool:host gettext:host glib openssl libssh2 pcre slang" -PKG_LONGDESC="Midnight Commander is a visual file manager" -PKG_TOOLCHAIN="configure" - -PKG_CONFIGURE_OPTS_TARGET=" \ - --prefix=/usr \ - --sysconfdir=/etc \ - --with-screen=slang \ - --with-sysroot=${SYSROOT_PREFIX} \ - --disable-aspell \ - --without-diff-viewer \ - --disable-doxygen-doc \ - --disable-doxygen-dot \ - --disable-doxygen-html \ - --with-gnu-ld \ - --without-libiconv-prefix \ - --without-libintl-prefix \ - --without-gpm-mouse \ - --disable-mclib \ - --with-subshell \ - --with-edit \ - --with-internal-edit \ - --enable-vfs-extfs \ - --enable-vfs-ftp \ - --enable-vfs-sftp \ - --enable-vfs-tar \ - --without-x \ - --with-slang-includes=${SYSROOT_PREFIX}/usr/include" - -pre_configure_target() { - LDFLAGS="${LDFLAGS} -lssl -lcrypto" -} - -post_install() { - rm -rf ${INSTALL}/etc/mc - mkdir -p ${INSTALL}/usr/config/mc - cp -a ${PKG_DIR}/etc/* ${INSTALL}/usr/config/mc - ln -sf /storage/.config/mc ${INSTALL}/etc/mc -} diff --git a/packages/tools/MC/patches/MC-01-utf8.patch b/packages/tools/MC/patches/MC-01-utf8.patch deleted file mode 100644 index 53bb252fb..000000000 --- a/packages/tools/MC/patches/MC-01-utf8.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -Naurp mc-4.8.8/lib/strutil/strutil.c mc-4.8.8-patch/lib/strutil/strutil.c ---- mc-4.8.8/lib/strutil/strutil.c 2013-03-07 12:45:57.000000000 +0200 -+++ mc-4.8.8-patch/lib/strutil/strutil.c 2013-05-14 09:39:14.000000000 +0300 -@@ -322,16 +322,7 @@ str_translate_char (GIConv conv, const c - const char * - str_detect_termencoding (void) - { -- if (term_encoding == NULL) -- { -- /* On Linux, nl_langinfo (CODESET) returns upper case UTF-8 whether the LANG is set -- to utf-8 or UTF-8. -- On Mac OS X, it returns the same case as the LANG input. -- So let tranform result of nl_langinfo (CODESET) to upper case unconditionally. */ -- term_encoding = g_ascii_strup (nl_langinfo (CODESET), -1); -- } -- -- return term_encoding; -+ return "UTF8"; - } - - static int -diff -Naurp mc-4.8.8/lib/tty/tty-slang.c mc-4.8.8-patch/lib/tty/tty-slang.c ---- mc-4.8.8/lib/tty/tty-slang.c 2013-03-07 12:45:57.000000000 +0200 -+++ mc-4.8.8-patch/lib/tty/tty-slang.c 2013-05-14 09:40:10.000000000 +0300 -@@ -268,7 +268,7 @@ tty_init (gboolean mouse_enable, gboolea - { - SLtt_Ignore_Beep = 1; - -- SLutf8_enable (-1); /* has to be called first before any of the other functions. */ -+ SLutf8_enable (1); /* has to be called first before any of the other functions. */ - SLtt_get_terminfo (); - /* - * If the terminal in not in terminfo but begins with a well-known diff --git a/packages/tools/MC/profile.d/052-mc.conf b/packages/tools/MC/profile.d/052-mc.conf deleted file mode 100644 index 8b89c6d12..000000000 --- a/packages/tools/MC/profile.d/052-mc.conf +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2011-present AlexELEC (http://alexelec.in.ua) - -export EDITOR="mcedit" diff --git a/packages/tools/sound/timidity/config/GeneralUser.cfg b/packages/tools/sound/timidity/config/GeneralUser.cfg deleted file mode 100644 index 970e587d2..000000000 --- a/packages/tools/sound/timidity/config/GeneralUser.cfg +++ /dev/null @@ -1,1796 +0,0 @@ -dir /storage/.config/fluidsynth/soundfonts/ - -bank 0 -0 %font "GeneralUser.sf2" 0 0 amp=52 pan=0 -1 %font "GeneralUser.sf2" 0 1 amp=84 pan=0 -2 %font "GeneralUser.sf2" 0 2 amp=51 pan=0 -3 %font "GeneralUser.sf2" 0 3 amp=139 pan=0 -4 %font "GeneralUser.sf2" 0 4 amp=79 pan=0 -5 %font "GeneralUser.sf2" 0 5 amp=102 pan=0 -6 %font "GeneralUser.sf2" 0 6 amp=50 pan=0 -7 %font "GeneralUser.sf2" 0 7 amp=103 pan=0 -8 %font "GeneralUser.sf2" 0 8 amp=127 pan=0 -9 %font "GeneralUser.sf2" 0 9 amp=214 pan=0 -10 %font "GeneralUser.sf2" 0 10 amp=207 pan=0 -11 %font "GeneralUser.sf2" 0 11 amp=39 pan=0 -12 %font "GeneralUser.sf2" 0 12 amp=143 pan=0 -13 %font "GeneralUser.sf2" 0 13 amp=101 pan=0 -14 %font "GeneralUser.sf2" 0 14 amp=77 pan=0 -15 %font "GeneralUser.sf2" 0 15 amp=134 pan=0 -16 %font "GeneralUser.sf2" 0 16 amp=119 pan=0 -17 %font "GeneralUser.sf2" 0 17 amp=112 pan=0 -18 %font "GeneralUser.sf2" 0 18 amp=93 pan=0 -19 %font "GeneralUser.sf2" 0 19 amp=201 pan=0 -20 %font "GeneralUser.sf2" 0 20 amp=86 pan=0 -21 %font "GeneralUser.sf2" 0 21 amp=59 pan=0 -22 %font "GeneralUser.sf2" 0 22 amp=51 pan=0 -23 %font "GeneralUser.sf2" 0 23 amp=42 pan=0 -24 %font "GeneralUser.sf2" 0 24 amp=130 pan=0 -25 %font "GeneralUser.sf2" 0 25 amp=65 pan=0 -26 %font "GeneralUser.sf2" 0 26 amp=193 pan=0 -27 %font "GeneralUser.sf2" 0 27 amp=110 pan=0 -28 %font "GeneralUser.sf2" 0 28 amp=187 pan=0 -29 %font "GeneralUser.sf2" 0 29 amp=124 pan=0 -30 %font "GeneralUser.sf2" 0 30 amp=154 pan=0 -31 %font "GeneralUser.sf2" 0 31 amp=94 pan=0 -32 %font "GeneralUser.sf2" 0 32 amp=231 pan=0 -33 %font "GeneralUser.sf2" 0 33 amp=112 pan=0 -34 %font "GeneralUser.sf2" 0 34 amp=441 pan=0 -35 %font "GeneralUser.sf2" 0 35 amp=147 pan=0 -36 %font "GeneralUser.sf2" 0 36 amp=342 pan=0 -37 %font "GeneralUser.sf2" 0 37 amp=110 pan=0 -38 %font "GeneralUser.sf2" 0 38 amp=51 pan=0 -39 %font "GeneralUser.sf2" 0 39 amp=186 pan=0 -40 %font "GeneralUser.sf2" 0 40 amp=115 pan=0 -41 %font "GeneralUser.sf2" 0 41 amp=190 pan=0 -42 %font "GeneralUser.sf2" 0 42 amp=53 pan=0 -43 %font "GeneralUser.sf2" 0 43 amp=89 pan=0 -44 %font "GeneralUser.sf2" 0 44 amp=147 pan=0 -45 %font "GeneralUser.sf2" 0 45 amp=381 pan=0 -46 %font "GeneralUser.sf2" 0 46 amp=160 pan=0 -47 %font "GeneralUser.sf2" 0 47 amp=138 pan=0 -48 %font "GeneralUser.sf2" 0 48 amp=127 pan=0 -49 %font "GeneralUser.sf2" 0 49 amp=127 pan=0 -50 %font "GeneralUser.sf2" 0 50 amp=72 pan=0 -51 %font "GeneralUser.sf2" 0 51 amp=45 pan=0 -52 %font "GeneralUser.sf2" 0 52 amp=64 pan=0 -53 %font "GeneralUser.sf2" 0 53 amp=68 pan=0 -54 %font "GeneralUser.sf2" 0 54 amp=168 pan=0 -55 %font "GeneralUser.sf2" 0 55 amp=102 pan=0 -56 %font "GeneralUser.sf2" 0 56 amp=112 pan=0 -57 %font "GeneralUser.sf2" 0 57 amp=132 pan=0 -58 %font "GeneralUser.sf2" 0 58 amp=107 pan=0 -59 %font "GeneralUser.sf2" 0 59 amp=63 pan=0 -60 %font "GeneralUser.sf2" 0 60 amp=120 pan=0 -61 %font "GeneralUser.sf2" 0 61 amp=168 pan=0 -62 %font "GeneralUser.sf2" 0 62 amp=45 pan=0 -63 %font "GeneralUser.sf2" 0 63 amp=47 pan=0 -64 %font "GeneralUser.sf2" 0 64 amp=90 pan=0 -65 %font "GeneralUser.sf2" 0 65 amp=117 pan=0 -66 %font "GeneralUser.sf2" 0 66 amp=105 pan=0 -67 %font "GeneralUser.sf2" 0 67 amp=73 pan=0 -68 %font "GeneralUser.sf2" 0 68 amp=110 pan=0 -69 %font "GeneralUser.sf2" 0 69 amp=134 pan=0 -70 %font "GeneralUser.sf2" 0 70 amp=92 pan=0 -71 %font "GeneralUser.sf2" 0 71 amp=94 pan=0 -72 %font "GeneralUser.sf2" 0 72 amp=58 pan=0 -73 %font "GeneralUser.sf2" 0 73 amp=144 pan=0 -74 %font "GeneralUser.sf2" 0 74 amp=129 pan=0 -75 %font "GeneralUser.sf2" 0 75 amp=79 pan=0 -76 %font "GeneralUser.sf2" 0 76 amp=87 pan=0 -77 %font "GeneralUser.sf2" 0 77 amp=114 pan=0 -78 %font "GeneralUser.sf2" 0 78 amp=316 pan=0 -79 %font "GeneralUser.sf2" 0 79 amp=164 pan=0 -80 %font "GeneralUser.sf2" 0 80 amp=22 pan=0 -81 %font "GeneralUser.sf2" 0 81 amp=41 pan=0 -82 %font "GeneralUser.sf2" 0 82 amp=55 pan=0 -83 %font "GeneralUser.sf2" 0 83 amp=79 pan=0 -84 %font "GeneralUser.sf2" 0 84 amp=140 pan=0 -85 %font "GeneralUser.sf2" 0 85 amp=79 pan=0 -86 %font "GeneralUser.sf2" 0 86 amp=84 pan=0 -87 %font "GeneralUser.sf2" 0 87 amp=105 pan=0 -88 %font "GeneralUser.sf2" 0 88 amp=165 pan=0 -89 %font "GeneralUser.sf2" 0 89 amp=203 pan=0 -90 %font "GeneralUser.sf2" 0 90 amp=80 pan=0 -91 %font "GeneralUser.sf2" 0 91 amp=88 pan=0 -92 %font "GeneralUser.sf2" 0 92 amp=168 pan=0 -93 %font "GeneralUser.sf2" 0 93 amp=123 pan=0 -94 %font "GeneralUser.sf2" 0 94 amp=69 pan=0 -95 %font "GeneralUser.sf2" 0 95 amp=89 pan=0 -96 %font "GeneralUser.sf2" 0 96 amp=77 pan=0 -97 %font "GeneralUser.sf2" 0 97 amp=78 pan=0 -98 %font "GeneralUser.sf2" 0 98 amp=74 pan=0 -99 %font "GeneralUser.sf2" 0 99 amp=115 pan=0 -100 %font "GeneralUser.sf2" 0 100 amp=109 pan=0 -101 %font "GeneralUser.sf2" 0 101 amp=67 pan=0 -102 %font "GeneralUser.sf2" 0 102 amp=71 pan=0 -103 %font "GeneralUser.sf2" 0 103 amp=99 pan=0 -104 %font "GeneralUser.sf2" 0 104 amp=126 pan=0 -105 %font "GeneralUser.sf2" 0 105 amp=118 pan=0 -106 %font "GeneralUser.sf2" 0 106 amp=185 pan=0 -107 %font "GeneralUser.sf2" 0 107 amp=203 pan=0 -108 %font "GeneralUser.sf2" 0 108 amp=62 pan=0 -109 %font "GeneralUser.sf2" 0 109 amp=72 pan=0 -110 %font "GeneralUser.sf2" 0 110 amp=143 pan=0 -111 %font "GeneralUser.sf2" 0 111 amp=93 pan=0 -112 %font "GeneralUser.sf2" 0 112 amp=126 pan=0 -113 %font "GeneralUser.sf2" 0 113 amp=154 pan=0 -114 %font "GeneralUser.sf2" 0 114 amp=91 pan=0 -115 %font "GeneralUser.sf2" 0 115 amp=119 pan=0 -116 %font "GeneralUser.sf2" 0 116 amp=99 pan=0 -117 %font "GeneralUser.sf2" 0 117 amp=132 pan=0 -118 %font "GeneralUser.sf2" 0 118 amp=125 pan=0 -119 %font "GeneralUser.sf2" 0 119 amp=82 pan=0 -120 %font "GeneralUser.sf2" 0 120 amp=68 pan=0 -121 %font "GeneralUser.sf2" 0 121 amp=77 pan=0 -122 %font "GeneralUser.sf2" 0 122 amp=77 pan=0 -123 %font "GeneralUser.sf2" 0 123 amp=74 pan=0 -124 %font "GeneralUser.sf2" 0 124 amp=57 pan=0 -125 %font "GeneralUser.sf2" 0 125 amp=211 pan=0 -126 %font "GeneralUser.sf2" 0 126 amp=40 pan=0 -127 %font "GeneralUser.sf2" 0 127 amp=149 pan=0 - -bank 1 -38 %font "GeneralUser.sf2" 1 38 amp=103 pan=0 -44 %font "GeneralUser.sf2" 1 44 amp=142 pan=0 -48 %font "GeneralUser.sf2" 1 48 amp=119 pan=0 -49 %font "GeneralUser.sf2" 1 49 amp=108 pan=0 -57 %font "GeneralUser.sf2" 1 57 amp=89 pan=0 -60 %font "GeneralUser.sf2" 1 60 amp=196 pan=0 -80 %font "GeneralUser.sf2" 1 80 amp=31 pan=0 -81 %font "GeneralUser.sf2" 1 81 amp=45 pan=0 -98 %font "GeneralUser.sf2" 1 98 amp=89 pan=0 -120 %font "GeneralUser.sf2" 1 120 amp=28 pan=0 -121 %font "GeneralUser.sf2" 1 121 amp=104 pan=0 -122 %font "GeneralUser.sf2" 1 122 amp=59 pan=0 -123 %font "GeneralUser.sf2" 1 123 amp=50 pan=0 -124 %font "GeneralUser.sf2" 1 124 amp=101 pan=0 -125 %font "GeneralUser.sf2" 1 125 amp=203 pan=0 -126 %font "GeneralUser.sf2" 1 126 amp=207 pan=0 -127 %font "GeneralUser.sf2" 1 127 amp=65 pan=0 - -bank 2 -44 %font "GeneralUser.sf2" 2 44 amp=361 pan=0 -48 %font "GeneralUser.sf2" 2 48 amp=118 pan=0 -49 %font "GeneralUser.sf2" 2 49 amp=195 pan=0 -102 %font "GeneralUser.sf2" 2 102 amp=90 pan=0 -120 %font "GeneralUser.sf2" 2 120 amp=52 pan=0 -122 %font "GeneralUser.sf2" 2 122 amp=85 pan=0 -123 %font "GeneralUser.sf2" 2 123 amp=276 pan=0 -124 %font "GeneralUser.sf2" 2 124 amp=94 pan=0 -125 %font "GeneralUser.sf2" 2 125 amp=38 pan=0 -126 %font "GeneralUser.sf2" 2 126 amp=38 pan=0 -127 %font "GeneralUser.sf2" 2 127 amp=128 pan=0 - -bank 3 -122 %font "GeneralUser.sf2" 3 122 amp=72 pan=0 -123 %font "GeneralUser.sf2" 3 123 amp=45 pan=0 -124 %font "GeneralUser.sf2" 3 124 amp=128 pan=0 -125 %font "GeneralUser.sf2" 3 125 amp=61 pan=0 -126 %font "GeneralUser.sf2" 3 126 amp=83 pan=0 -127 %font "GeneralUser.sf2" 3 127 amp=77 pan=0 - -bank 4 -122 %font "GeneralUser.sf2" 4 122 amp=299 pan=0 -123 %font "GeneralUser.sf2" 4 123 amp=62 pan=0 -125 %font "GeneralUser.sf2" 4 125 amp=73 pan=0 -126 %font "GeneralUser.sf2" 4 126 amp=60 pan=0 - -bank 5 -122 %font "GeneralUser.sf2" 5 122 amp=81 pan=0 -124 %font "GeneralUser.sf2" 5 124 amp=98 pan=0 -125 %font "GeneralUser.sf2" 5 125 amp=58 pan=0 -126 %font "GeneralUser.sf2" 5 126 amp=141 pan=0 - -bank 6 -125 %font "GeneralUser.sf2" 6 125 amp=91 pan=0 - -bank 7 -125 %font "GeneralUser.sf2" 7 125 amp=41 pan=0 - -bank 8 -0 %font "GeneralUser.sf2" 8 0 amp=52 pan=0 -1 %font "GeneralUser.sf2" 8 1 amp=84 pan=0 -2 %font "GeneralUser.sf2" 8 2 amp=51 pan=0 -3 %font "GeneralUser.sf2" 8 3 amp=110 pan=0 -4 %font "GeneralUser.sf2" 8 4 amp=82 pan=0 -5 %font "GeneralUser.sf2" 8 5 amp=52 pan=0 -6 %font "GeneralUser.sf2" 8 6 amp=47 pan=0 -11 %font "GeneralUser.sf2" 8 11 amp=53 pan=0 -12 %font "GeneralUser.sf2" 8 12 amp=143 pan=0 -14 %font "GeneralUser.sf2" 8 14 amp=35 pan=0 -16 %font "GeneralUser.sf2" 8 16 amp=64 pan=0 -17 %font "GeneralUser.sf2" 8 17 amp=100 pan=0 -19 %font "GeneralUser.sf2" 8 19 amp=153 pan=0 -21 %font "GeneralUser.sf2" 8 21 amp=28 pan=0 -24 %font "GeneralUser.sf2" 8 24 amp=117 pan=0 -25 %font "GeneralUser.sf2" 8 25 amp=82 pan=0 -26 %font "GeneralUser.sf2" 8 26 amp=87 pan=0 -27 %font "GeneralUser.sf2" 8 27 amp=57 pan=0 -28 %font "GeneralUser.sf2" 8 28 amp=47 pan=0 -30 %font "GeneralUser.sf2" 8 30 amp=71 pan=0 -31 %font "GeneralUser.sf2" 8 31 amp=100 pan=0 -38 %font "GeneralUser.sf2" 8 38 amp=38 pan=0 -39 %font "GeneralUser.sf2" 8 39 amp=231 pan=0 -40 %font "GeneralUser.sf2" 8 40 amp=112 pan=0 -48 %font "GeneralUser.sf2" 8 48 amp=86 pan=0 -50 %font "GeneralUser.sf2" 8 50 amp=63 pan=0 -61 %font "GeneralUser.sf2" 8 61 amp=93 pan=0 -62 %font "GeneralUser.sf2" 8 62 amp=49 pan=0 -63 %font "GeneralUser.sf2" 8 63 amp=74 pan=0 -80 %font "GeneralUser.sf2" 8 80 amp=86 pan=0 -81 %font "GeneralUser.sf2" 8 81 amp=62 pan=0 -107 %font "GeneralUser.sf2" 8 107 amp=118 pan=0 -115 %font "GeneralUser.sf2" 8 115 amp=149 pan=0 -116 %font "GeneralUser.sf2" 8 116 amp=76 pan=0 -117 %font "GeneralUser.sf2" 8 117 amp=141 pan=0 -118 %font "GeneralUser.sf2" 8 118 amp=167 pan=0 -125 %font "GeneralUser.sf2" 8 125 amp=80 pan=0 - -bank 9 -14 %font "GeneralUser.sf2" 9 14 amp=53 pan=0 -125 %font "GeneralUser.sf2" 9 125 amp=19 pan=0 - -bank 11 -1 %font "GeneralUser.sf2" 11 1 amp=362 pan=0 -4 %font "GeneralUser.sf2" 11 4 amp=143 pan=0 -5 %font "GeneralUser.sf2" 11 5 amp=494 pan=0 -8 %font "GeneralUser.sf2" 11 8 amp=355 pan=0 -14 %font "GeneralUser.sf2" 11 14 amp=376 pan=0 -38 %font "GeneralUser.sf2" 11 38 amp=136 pan=0 -39 %font "GeneralUser.sf2" 11 39 amp=33 pan=0 -50 %font "GeneralUser.sf2" 11 50 amp=73 pan=0 -51 %font "GeneralUser.sf2" 11 51 amp=180 pan=0 -61 %font "GeneralUser.sf2" 11 61 amp=51 pan=0 -78 %font "GeneralUser.sf2" 11 78 amp=40 pan=0 -81 %font "GeneralUser.sf2" 11 81 amp=194 pan=0 -87 %font "GeneralUser.sf2" 11 87 amp=92 pan=0 -88 %font "GeneralUser.sf2" 11 88 amp=317 pan=0 -89 %font "GeneralUser.sf2" 11 89 amp=262 pan=0 -96 %font "GeneralUser.sf2" 11 96 amp=40 pan=0 -98 %font "GeneralUser.sf2" 11 98 amp=93 pan=0 -100 %font "GeneralUser.sf2" 11 100 amp=188 pan=0 -119 %font "GeneralUser.sf2" 11 119 amp=674 pan=0 -121 %font "GeneralUser.sf2" 11 121 amp=71 pan=0 -127 %font "GeneralUser.sf2" 11 127 amp=37 pan=0 - -bank 12 -10 %font "GeneralUser.sf2" 12 10 amp=55 pan=0 -27 %font "GeneralUser.sf2" 12 27 amp=69 pan=0 -38 %font "GeneralUser.sf2" 12 38 amp=34 pan=0 -48 %font "GeneralUser.sf2" 12 48 amp=156 pan=0 -49 %font "GeneralUser.sf2" 12 49 amp=193 pan=0 -80 %font "GeneralUser.sf2" 12 80 amp=13 pan=0 -81 %font "GeneralUser.sf2" 12 81 amp=21 pan=0 -88 %font "GeneralUser.sf2" 12 88 amp=108 pan=0 -89 %font "GeneralUser.sf2" 12 89 amp=64 pan=0 -119 %font "GeneralUser.sf2" 12 119 amp=422 pan=0 -122 %font "GeneralUser.sf2" 12 122 amp=68 pan=0 -127 %font "GeneralUser.sf2" 12 127 amp=185 pan=0 - -bank 13 -88 %font "GeneralUser.sf2" 13 88 amp=128 pan=0 - -bank 16 -0 %font "GeneralUser.sf2" 16 0 amp=118 pan=0 -4 %font "GeneralUser.sf2" 16 4 amp=78 pan=0 -5 %font "GeneralUser.sf2" 16 5 amp=107 pan=0 -6 %font "GeneralUser.sf2" 16 6 amp=50 pan=0 -25 %font "GeneralUser.sf2" 16 25 amp=61 pan=0 - -bank 126 -0 %font "GeneralUser.sf2" 0 1 amp=112 pan=0 -1 %font "GeneralUser.sf2" 0 1 amp=112 pan=0 -2 %font "GeneralUser.sf2" 0 1 amp=112 pan=0 -3 %font "GeneralUser.sf2" 0 3 amp=134 pan=0 -4 %font "GeneralUser.sf2" 0 0 amp=72 pan=0 -5 %font "GeneralUser.sf2" 0 1 amp=111 pan=0 -6 %font "GeneralUser.sf2" 0 1 amp=112 pan=0 -7 %font "GeneralUser.sf2" 0 4 amp=91 pan=0 -8 %font "GeneralUser.sf2" 0 4 amp=80 pan=0 -9 %font "GeneralUser.sf2" 0 5 amp=73 pan=0 -10 %font "GeneralUser.sf2" 0 25 amp=75 pan=0 -11 %font "GeneralUser.sf2" 0 25 amp=76 pan=0 -12 %font "GeneralUser.sf2" 0 26 amp=92 pan=0 -13 %font "GeneralUser.sf2" 0 26 amp=104 pan=0 -14 %font "GeneralUser.sf2" 0 28 amp=222 pan=0 -15 %font "GeneralUser.sf2" 0 36 amp=152 pan=0 -16 %font "GeneralUser.sf2" 0 36 amp=152 pan=0 -17 %font "GeneralUser.sf2" 0 36 amp=152 pan=0 -18 %font "GeneralUser.sf2" 0 36 amp=152 pan=0 -19 %font "GeneralUser.sf2" 0 37 amp=48 pan=0 -20 %font "GeneralUser.sf2" 0 37 amp=48 pan=0 -21 %font "GeneralUser.sf2" 0 37 amp=48 pan=0 -22 %font "GeneralUser.sf2" 0 37 amp=48 pan=0 -23 %font "GeneralUser.sf2" 0 33 amp=119 pan=0 -24 %font "GeneralUser.sf2" 0 33 amp=120 pan=0 -25 %font "GeneralUser.sf2" 0 34 amp=408 pan=0 -26 %font "GeneralUser.sf2" 0 34 amp=412 pan=0 -27 %font "GeneralUser.sf2" 0 35 amp=160 pan=0 -28 %font "GeneralUser.sf2" 0 32 amp=361 pan=0 -29 %font "GeneralUser.sf2" 0 52 amp=89 pan=0 -30 %font "GeneralUser.sf2" 0 52 amp=89 pan=0 -31 %font "GeneralUser.sf2" 0 52 amp=90 pan=0 -32 %font "GeneralUser.sf2" 0 52 amp=89 pan=0 -33 %font "GeneralUser.sf2" 0 49 amp=116 pan=0 -34 %font "GeneralUser.sf2" 0 48 amp=89 pan=0 -35 %font "GeneralUser.sf2" 0 50 amp=100 pan=0 -36 %font "GeneralUser.sf2" 0 50 amp=76 pan=0 -37 %font "GeneralUser.sf2" 0 16 amp=54 pan=0 -38 %font "GeneralUser.sf2" 0 16 amp=75 pan=0 -39 %font "GeneralUser.sf2" 0 16 amp=75 pan=0 -40 %font "GeneralUser.sf2" 0 17 amp=167 pan=0 -41 %font "GeneralUser.sf2" 0 16 amp=75 pan=0 -42 %font "GeneralUser.sf2" 0 16 amp=75 pan=0 -43 %font "GeneralUser.sf2" 0 17 amp=167 pan=0 -44 %font "GeneralUser.sf2" 0 17 amp=167 pan=0 -45 %font "GeneralUser.sf2" 0 17 amp=167 pan=0 -46 %font "GeneralUser.sf2" 0 56 amp=104 pan=0 -47 %font "GeneralUser.sf2" 0 56 amp=104 pan=0 -48 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -49 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -50 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -51 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -52 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -53 %font "GeneralUser.sf2" 0 57 amp=94 pan=0 -54 %font "GeneralUser.sf2" 0 65 amp=116 pan=0 -55 %font "GeneralUser.sf2" 0 66 amp=86 pan=0 -56 %font "GeneralUser.sf2" 0 67 amp=144 pan=0 -57 %font "GeneralUser.sf2" 0 65 amp=116 pan=0 -58 %font "GeneralUser.sf2" 0 61 amp=89 pan=0 -59 %font "GeneralUser.sf2" 0 61 amp=88 pan=0 -60 %font "GeneralUser.sf2" 0 61 amp=105 pan=0 -61 %font "GeneralUser.sf2" 0 61 amp=105 pan=0 -62 %font "GeneralUser.sf2" 0 61 amp=88 pan=0 -63 %font "GeneralUser.sf2" 0 55 amp=112 pan=0 - -bank 127 -0 %font "GeneralUser.sf2" 127 0 amp=80 pan=0 -1 %font "GeneralUser.sf2" 127 1 amp=143 pan=0 -8 %font "GeneralUser.sf2" 127 8 amp=204 pan=0 -9 %font "GeneralUser.sf2" 0 17 amp=101 pan=0 -10 %font "GeneralUser.sf2" 0 18 amp=106 pan=0 -11 %font "GeneralUser.sf2" 0 18 amp=79 pan=0 -12 %font "GeneralUser.sf2" 0 19 amp=87 pan=0 -13 %font "GeneralUser.sf2" 0 19 amp=148 pan=0 -14 %font "GeneralUser.sf2" 0 20 amp=35 pan=0 -15 %font "GeneralUser.sf2" 0 21 amp=53 pan=0 -16 %font "GeneralUser.sf2" 127 16 amp=96 pan=0 -17 %font "GeneralUser.sf2" 0 6 amp=38 pan=0 -18 %font "GeneralUser.sf2" 0 6 amp=43 pan=0 -19 %font "GeneralUser.sf2" 0 7 amp=63 pan=0 -20 %font "GeneralUser.sf2" 0 7 amp=111 pan=0 -21 %font "GeneralUser.sf2" 0 7 amp=72 pan=0 -22 %font "GeneralUser.sf2" 0 8 amp=32 pan=0 -23 %font "GeneralUser.sf2" 0 8 amp=32 pan=0 -24 %font "GeneralUser.sf2" 127 24 amp=332 pan=0 -25 %font "GeneralUser.sf2" 127 25 amp=406 pan=0 -26 %font "GeneralUser.sf2" 127 26 amp=350 pan=0 -27 %font "GeneralUser.sf2" 0 63 amp=89 pan=0 -28 %font "GeneralUser.sf2" 0 38 amp=55 pan=0 -29 %font "GeneralUser.sf2" 0 39 amp=50 pan=0 -30 %font "GeneralUser.sf2" 0 38 amp=55 pan=0 -31 %font "GeneralUser.sf2" 0 39 amp=69 pan=0 -32 %font "GeneralUser.sf2" 127 32 amp=205 pan=0 -33 %font "GeneralUser.sf2" 0 89 amp=48 pan=0 -34 %font "GeneralUser.sf2" 0 52 amp=52 pan=0 -35 %font "GeneralUser.sf2" 0 113 amp=165 pan=0 -36 %font "GeneralUser.sf2" 0 97 amp=78 pan=0 -37 %font "GeneralUser.sf2" 0 96 amp=56 pan=0 -38 %font "GeneralUser.sf2" 0 91 amp=47 pan=0 -39 %font "GeneralUser.sf2" 0 85 amp=16 pan=0 -40 %font "GeneralUser.sf2" 127 40 amp=356 pan=0 -41 %font "GeneralUser.sf2" 0 101 amp=107 pan=0 -42 %font "GeneralUser.sf2" 0 68 amp=40 pan=0 -43 %font "GeneralUser.sf2" 0 95 amp=119 pan=0 -44 %font "GeneralUser.sf2" 0 86 amp=49 pan=0 -45 %font "GeneralUser.sf2" 0 103 amp=104 pan=0 -46 %font "GeneralUser.sf2" 0 88 amp=33 pan=0 -47 %font "GeneralUser.sf2" 0 80 amp=19 pan=0 -48 %font "GeneralUser.sf2" 127 48 amp=189 pan=0 -49 %font "GeneralUser.sf2" 0 49 amp=111 pan=0 -51 %font "GeneralUser.sf2" 0 45 amp=76 pan=0 -52 %font "GeneralUser.sf2" 0 40 amp=86 pan=0 -53 %font "GeneralUser.sf2" 0 40 amp=76 pan=0 -54 %font "GeneralUser.sf2" 0 42 amp=64 pan=0 -55 %font "GeneralUser.sf2" 0 42 amp=64 pan=0 -56 %font "GeneralUser.sf2" 127 56 amp=220 pan=0 -57 %font "GeneralUser.sf2" 0 46 amp=36 pan=0 -58 %font "GeneralUser.sf2" 0 46 amp=48 pan=0 -59 %font "GeneralUser.sf2" 0 24 amp=56 pan=0 -60 %font "GeneralUser.sf2" 0 24 amp=43 pan=0 -61 %font "GeneralUser.sf2" 0 26 amp=88 pan=0 -62 %font "GeneralUser.sf2" 0 27 amp=198 pan=0 -63 %font "GeneralUser.sf2" 0 104 amp=77 pan=0 -64 %font "GeneralUser.sf2" 0 32 amp=158 pan=0 -65 %font "GeneralUser.sf2" 0 33 amp=67 pan=0 -66 %font "GeneralUser.sf2" 0 34 amp=201 pan=0 -67 %font "GeneralUser.sf2" 0 39 amp=99 pan=0 -68 %font "GeneralUser.sf2" 0 36 amp=117 pan=0 -69 %font "GeneralUser.sf2" 0 37 amp=35 pan=0 -70 %font "GeneralUser.sf2" 0 35 amp=88 pan=0 -71 %font "GeneralUser.sf2" 0 35 amp=64 pan=0 -72 %font "GeneralUser.sf2" 0 73 amp=64 pan=0 -73 %font "GeneralUser.sf2" 0 73 amp=110 pan=0 -74 %font "GeneralUser.sf2" 0 72 amp=62 pan=0 -75 %font "GeneralUser.sf2" 0 72 amp=40 pan=0 -76 %font "GeneralUser.sf2" 0 74 amp=71 pan=0 -77 %font "GeneralUser.sf2" 0 75 amp=62 pan=0 -78 %font "GeneralUser.sf2" 0 64 amp=53 pan=0 -79 %font "GeneralUser.sf2" 0 65 amp=95 pan=0 -80 %font "GeneralUser.sf2" 0 66 amp=111 pan=0 -81 %font "GeneralUser.sf2" 0 67 amp=111 pan=0 -82 %font "GeneralUser.sf2" 0 71 amp=39 pan=0 -83 %font "GeneralUser.sf2" 0 71 amp=34 pan=0 -84 %font "GeneralUser.sf2" 0 68 amp=66 pan=0 -85 %font "GeneralUser.sf2" 0 69 amp=130 pan=0 -86 %font "GeneralUser.sf2" 0 70 amp=49 pan=0 -87 %font "GeneralUser.sf2" 0 22 amp=80 pan=0 -88 %font "GeneralUser.sf2" 0 56 amp=156 pan=0 -89 %font "GeneralUser.sf2" 0 56 amp=136 pan=0 -90 %font "GeneralUser.sf2" 0 57 amp=216 pan=0 -91 %font "GeneralUser.sf2" 0 57 amp=125 pan=0 -92 %font "GeneralUser.sf2" 0 60 amp=146 pan=0 -93 %font "GeneralUser.sf2" 0 60 amp=203 pan=0 -94 %font "GeneralUser.sf2" 0 58 amp=111 pan=0 -95 %font "GeneralUser.sf2" 0 61 amp=100 pan=0 -96 %font "GeneralUser.sf2" 0 61 amp=89 pan=0 -97 %font "GeneralUser.sf2" 0 11 amp=18 pan=0 -98 %font "GeneralUser.sf2" 0 11 amp=19 pan=0 -99 %font "GeneralUser.sf2" 0 12 amp=43 pan=0 -100 %font "GeneralUser.sf2" 0 88 amp=30 pan=0 -101 %font "GeneralUser.sf2" 0 9 amp=76 pan=0 -102 %font "GeneralUser.sf2" 0 14 amp=57 pan=0 -103 %font "GeneralUser.sf2" 0 13 amp=103 pan=0 -104 %font "GeneralUser.sf2" 0 12 amp=61 pan=0 -105 %font "GeneralUser.sf2" 0 107 amp=100 pan=0 -106 %font "GeneralUser.sf2" 0 111 amp=63 pan=0 -107 %font "GeneralUser.sf2" 0 77 amp=171 pan=0 -108 %font "GeneralUser.sf2" 0 78 amp=164 pan=0 -109 %font "GeneralUser.sf2" 0 78 amp=83 pan=0 -110 %font "GeneralUser.sf2" 0 76 amp=68 pan=0 -111 %font "GeneralUser.sf2" 0 76 amp=75 pan=0 -112 %font "GeneralUser.sf2" 0 47 amp=40 pan=0 -113 %font "GeneralUser.sf2" 0 117 amp=66 pan=0 -114 %font "GeneralUser.sf2" 0 118 amp=39 pan=0 -115 %font "GeneralUser.sf2" 0 118 amp=41 pan=0 -116 %font "GeneralUser.sf2" 0 118 amp=67 pan=0 -117 %font "GeneralUser.sf2" 0 116 amp=84 pan=0 -118 %font "GeneralUser.sf2" 0 116 amp=30 pan=0 -119 %font "GeneralUser.sf2" 128 0 49 amp=72 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal - -drumset 0 -0 %font "GeneralUser.sf2" 128 0 36 amp=231 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -1 %font "GeneralUser.sf2" 128 0 35 amp=172 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -2 %font "GeneralUser.sf2" 128 1 36 amp=196 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -3 %font "GeneralUser.sf2" 128 1 35 amp=149 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -4 %font "GeneralUser.sf2" 128 0 36 amp=112 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -5 %font "GeneralUser.sf2" 128 0 35 amp=134 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -6 %font "GeneralUser.sf2" 128 32 36 amp=109 pan=0 # Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Standard Kick 1 Standard Kick 1 Standard Kick 1 -7 %font "GeneralUser.sf2" 128 32 35 amp=169 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -8 %font "GeneralUser.sf2" 128 8 36 amp=145 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -9 %font "GeneralUser.sf2" 128 8 35 amp=91 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -10 %font "GeneralUser.sf2" 128 16 36 amp=57 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -11 %font "GeneralUser.sf2" 128 16 35 amp=87 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -12 %font "GeneralUser.sf2" 128 24 36 amp=94 pan=0 # TR-909 Kick Electric Tom -13 %font "GeneralUser.sf2" 128 24 35 amp=294 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -14 %font "GeneralUser.sf2" 128 25 36 amp=88 pan=0 # TR-909 Kick -15 %font "GeneralUser.sf2" 128 25 35 amp=111 pan=0 # Sine-93.75Hz -16 %font "GeneralUser.sf2" 128 26 35 amp=147 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -27 %font "GeneralUser.sf2" 128 0 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 0 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 0 29 amp=44 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 0 30 amp=50 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 0 31 amp=154 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 0 32 amp=315 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 0 33 amp=77 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 0 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 0 35 amp=161 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 0 36 amp=158 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -37 %font "GeneralUser.sf2" 128 0 37 amp=72 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 0 38 amp=129 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -39 %font "GeneralUser.sf2" 128 0 39 amp=54 pan=-16 # Hand Clap -40 %font "GeneralUser.sf2" 128 0 40 amp=378 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -41 %font "GeneralUser.sf2" 128 0 41 amp=137 pan=-47 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -42 %font "GeneralUser.sf2" 128 0 42 amp=36 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 0 43 amp=130 pan=-28 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -44 %font "GeneralUser.sf2" 128 0 44 amp=23 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 0 45 amp=119 pan=-9 # Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 -46 %font "GeneralUser.sf2" 128 0 46 amp=59 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 0 47 amp=141 pan=9 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -48 %font "GeneralUser.sf2" 128 0 48 amp=84 pan=28 # Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 -49 %font "GeneralUser.sf2" 128 0 49 amp=166 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 0 50 amp=52 pan=47 # Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 -51 %font "GeneralUser.sf2" 128 0 51 amp=62 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 0 52 amp=70 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 0 53 amp=62 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 0 54 amp=66 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 0 55 amp=61 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 0 56 amp=102 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 0 57 amp=136 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 0 58 amp=33 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 0 59 amp=64 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 0 60 amp=17 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 0 61 amp=77 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 0 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 0 63 amp=68 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 0 64 amp=49 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 0 65 amp=127 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 0 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 0 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 0 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 0 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 0 70 amp=44 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 0 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 0 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 0 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 0 74 amp=46 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 0 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 0 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 0 77 amp=101 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 0 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 0 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 0 80 amp=45 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 0 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 0 82 amp=155 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 0 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 0 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 0 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 0 86 amp=64 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 0 87 amp=104 pan=-31 # Surdo Open -97 %font "GeneralUser.sf2" 128 0 38 amp=128 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -98 %font "GeneralUser.sf2" 128 0 40 amp=204 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -99 %font "GeneralUser.sf2" 128 1 38 amp=174 pan=0 # Standard 2 Snare Standard 2 Snare Standard 2 Snare Standard 2 Snare -100 %font "GeneralUser.sf2" 128 1 40 amp=211 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -101 %font "GeneralUser.sf2" 128 0 40 amp=345 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -102 %font "GeneralUser.sf2" 128 0 38 amp=129 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -103 %font "GeneralUser.sf2" 128 0 40 amp=250 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -104 %font "GeneralUser.sf2" 128 0 38 amp=157 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -105 %font "GeneralUser.sf2" 128 32 38 amp=80 pan=0 # Jazz Snare Soft 1 Jazz Snare Soft 1 Jazz Snare Soft 2 Jazz Snare Hard Jazz Snare Hard -106 %font "GeneralUser.sf2" 128 32 40 amp=179 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -107 %font "GeneralUser.sf2" 128 8 38 amp=117 pan=0 # Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 -108 %font "GeneralUser.sf2" 128 8 40 amp=144 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -109 %font "GeneralUser.sf2" 128 16 38 amp=50 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -110 %font "GeneralUser.sf2" 128 16 40 amp=58 pan=0 # Power Snare 2 Power Snare 2 Power Snare 2 Power Snare 2 -111 %font "GeneralUser.sf2" 128 24 40 amp=64 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -112 %font "GeneralUser.sf2" 128 26 38 amp=87 pan=0 # Dance Snare -113 %font "GeneralUser.sf2" 128 26 40 amp=75 pan=0 # TR-909 Snare 2 -114 %font "GeneralUser.sf2" 128 26 38 amp=93 pan=0 # Dance Snare -115 %font "GeneralUser.sf2" 128 24 40 amp=43 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -116 %font "GeneralUser.sf2" 128 24 38 amp=116 pan=0 # Electric Tom White Noise -117 %font "GeneralUser.sf2" 128 24 38 amp=190 pan=0 # Electric Tom White Noise -118 %font "GeneralUser.sf2" 128 25 38 amp=83 pan=0 # TR-909 Snare 1 -119 %font "GeneralUser.sf2" 128 25 38 amp=72 pan=0 # TR-909 Snare 1 -120 %font "GeneralUser.sf2" 128 25 40 amp=53 pan=0 # TR-909 Snare 2 -121 %font "GeneralUser.sf2" 128 25 38 amp=58 pan=0 # TR-909 Snare 1 -122 %font "GeneralUser.sf2" 128 25 40 amp=77 pan=0 # TR-909 Snare 2 -123 %font "GeneralUser.sf2" 128 25 38 amp=93 pan=0 # TR-909 Snare 1 -124 %font "GeneralUser.sf2" 128 25 38 amp=68 pan=0 # TR-909 Snare 1 -125 %font "GeneralUser.sf2" 128 26 38 amp=149 pan=0 # Dance Snare -126 %font "GeneralUser.sf2" 128 26 38 amp=101 pan=0 # Dance Snare -127 %font "GeneralUser.sf2" 128 26 38 amp=115 pan=0 # Dance Snare - -drumset 1 -27 %font "GeneralUser.sf2" 128 1 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 1 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 1 29 amp=44 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 1 30 amp=80 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 1 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 1 32 amp=432 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 1 33 amp=76 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 1 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 1 35 amp=161 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 1 36 amp=218 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -37 %font "GeneralUser.sf2" 128 1 37 amp=115 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 1 38 amp=286 pan=0 # Standard 2 Snare Standard 2 Snare Standard 2 Snare Standard 2 Snare -39 %font "GeneralUser.sf2" 128 1 39 amp=81 pan=-16 # Hand Clap -40 %font "GeneralUser.sf2" 128 1 40 amp=139 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -41 %font "GeneralUser.sf2" 128 1 41 amp=200 pan=-47 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -42 %font "GeneralUser.sf2" 128 1 42 amp=58 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 1 43 amp=130 pan=-28 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -44 %font "GeneralUser.sf2" 128 1 44 amp=33 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 1 45 amp=119 pan=-9 # Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 -46 %font "GeneralUser.sf2" 128 1 46 amp=31 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 1 47 amp=95 pan=9 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -48 %font "GeneralUser.sf2" 128 1 48 amp=124 pan=28 # Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 -49 %font "GeneralUser.sf2" 128 1 49 amp=176 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 1 50 amp=163 pan=47 # Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 -51 %font "GeneralUser.sf2" 128 1 51 amp=61 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 1 52 amp=55 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 1 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 1 54 amp=18 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 1 55 amp=63 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 1 56 amp=106 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 1 57 amp=114 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 1 58 amp=80 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 1 59 amp=65 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 1 60 amp=159 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 1 61 amp=124 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 1 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 1 63 amp=67 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 1 64 amp=49 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 1 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 1 66 amp=98 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 1 67 amp=64 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 1 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 1 69 amp=40 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 1 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 1 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 1 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 1 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 1 74 amp=45 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 1 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 1 76 amp=57 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 1 77 amp=62 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 1 78 amp=63 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 1 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 1 80 amp=45 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 1 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 1 82 amp=96 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 1 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 1 84 amp=110 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 1 85 amp=14 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 1 86 amp=61 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 1 87 amp=102 pan=-31 # Surdo Open - -drumset 8 -27 %font "GeneralUser.sf2" 128 8 27 amp=51 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 8 28 amp=167 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 8 29 amp=44 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 8 30 amp=50 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 8 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 8 32 amp=321 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 8 33 amp=77 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 8 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 8 35 amp=95 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -36 %font "GeneralUser.sf2" 128 8 36 amp=100 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -37 %font "GeneralUser.sf2" 128 8 37 amp=72 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 8 38 amp=194 pan=0 # Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 -39 %font "GeneralUser.sf2" 128 8 39 amp=81 pan=-16 # Hand Clap -40 %font "GeneralUser.sf2" 128 8 40 amp=197 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -41 %font "GeneralUser.sf2" 128 8 41 amp=115 pan=-47 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -42 %font "GeneralUser.sf2" 128 8 42 amp=35 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 8 43 amp=113 pan=-28 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -44 %font "GeneralUser.sf2" 128 8 44 amp=71 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 8 45 amp=221 pan=-9 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -46 %font "GeneralUser.sf2" 128 8 46 amp=42 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 8 47 amp=148 pan=9 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -48 %font "GeneralUser.sf2" 128 8 48 amp=152 pan=28 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -49 %font "GeneralUser.sf2" 128 8 49 amp=176 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 8 50 amp=249 pan=47 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -51 %font "GeneralUser.sf2" 128 8 51 amp=77 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 8 52 amp=71 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 8 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 8 54 amp=68 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 8 55 amp=63 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 8 56 amp=163 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 8 57 amp=121 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 8 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 8 59 amp=51 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 8 60 amp=98 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 8 61 amp=75 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 8 62 amp=48 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 8 63 amp=67 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 8 64 amp=49 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 8 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 8 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 8 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 8 68 amp=113 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 8 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 8 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 8 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 8 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 8 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 8 74 amp=43 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 8 75 amp=145 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 8 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 8 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 8 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 8 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 8 80 amp=65 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 8 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 8 82 amp=96 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 8 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 8 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 8 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 8 86 amp=95 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 8 87 amp=144 pan=-31 # Surdo Open - -drumset 9 -29 %font "GeneralUser.sf2" 128 25 29 amp=72 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=57 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=177 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=94 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=175 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=93 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=45 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=64 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=123 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=57 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=72 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=36 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=68 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=18 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=68 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=46 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=89 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=55 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=62 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=23 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=62 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=22 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=61 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=32 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=121 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=66 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=98 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=76 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=16 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=47 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=57 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=64 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=43 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=116 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=80 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=102 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=73 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=14 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=64 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=102 pan=-31 # Surdo Open - -drumset 10 -29 %font "GeneralUser.sf2" 128 25 29 amp=44 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=91 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=51 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=132 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=98 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=79 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=83 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=80 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=124 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=85 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=72 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=69 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=68 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=47 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=68 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=46 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=97 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=19 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=61 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=23 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=62 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=101 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=62 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=32 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=136 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=33 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=65 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=159 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=76 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=16 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=48 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=36 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=43 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=59 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=116 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=75 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=101 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=72 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=61 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=63 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=103 pan=-31 # Surdo Open - -drumset 11 -29 %font "GeneralUser.sf2" 128 25 29 amp=44 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=91 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=72 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=154 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=175 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=71 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=66 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=94 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=68 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=67 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=109 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=93 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=65 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=31 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=63 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=111 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=144 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=88 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=62 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=23 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=46 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=101 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=89 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=32 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=140 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=59 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=52 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=194 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=136 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=36 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=54 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=70 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=98 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=64 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=43 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=117 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=84 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=79 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=113 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=61 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=162 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=64 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=103 pan=-31 # Surdo Open - -drumset 16 -27 %font "GeneralUser.sf2" 128 16 27 amp=52 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 16 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 16 29 amp=44 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 16 30 amp=50 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 16 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 16 32 amp=431 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 16 33 amp=123 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 16 34 amp=68 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 16 35 amp=106 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -36 %font "GeneralUser.sf2" 128 16 36 amp=75 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -37 %font "GeneralUser.sf2" 128 16 37 amp=72 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 16 38 amp=71 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -39 %font "GeneralUser.sf2" 128 16 39 amp=129 pan=-16 # Hand Clap -40 %font "GeneralUser.sf2" 128 16 40 amp=86 pan=0 # Power Snare 2 Power Snare 2 Power Snare 2 Power Snare 2 -41 %font "GeneralUser.sf2" 128 16 41 amp=102 pan=-47 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -42 %font "GeneralUser.sf2" 128 16 42 amp=35 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 16 43 amp=99 pan=-28 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -44 %font "GeneralUser.sf2" 128 16 44 amp=23 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 16 45 amp=161 pan=-9 # Room Tom 1 Room Tom 1 Room Tom 1 Room Tom 1 -46 %font "GeneralUser.sf2" 128 16 46 amp=41 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 16 47 amp=109 pan=9 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -48 %font "GeneralUser.sf2" 128 16 48 amp=128 pan=28 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -49 %font "GeneralUser.sf2" 128 16 49 amp=176 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 16 50 amp=56 pan=47 # Room Tom 2 Room Tom 2 Room Tom 2 Room Tom 2 -51 %font "GeneralUser.sf2" 128 16 51 amp=77 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 16 52 amp=32 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 16 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 16 54 amp=18 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 16 55 amp=62 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 16 56 amp=106 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 16 57 amp=136 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 16 58 amp=80 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 16 59 amp=51 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 16 60 amp=98 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 16 61 amp=78 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 16 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 16 63 amp=108 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 16 64 amp=75 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 16 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 16 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 16 67 amp=64 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 16 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 16 69 amp=124 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 16 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 16 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 16 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 16 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 16 74 amp=44 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 16 75 amp=145 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 16 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 16 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 16 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 16 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 16 80 amp=46 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 16 81 amp=17 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 16 82 amp=96 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 16 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 16 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 16 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 16 86 amp=61 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 16 87 amp=144 pan=-31 # Surdo Open - -drumset 24 -27 %font "GeneralUser.sf2" 128 24 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 24 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 24 29 amp=52 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 24 30 amp=106 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 24 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 24 32 amp=431 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 24 33 amp=77 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 24 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 24 35 amp=213 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 24 36 amp=297 pan=0 # TR-909 Kick Electric Tom -37 %font "GeneralUser.sf2" 128 24 37 amp=90 pan=0 # Rim Shot -38 %font "GeneralUser.sf2" 128 24 38 amp=182 pan=0 # Electric Tom White Noise -39 %font "GeneralUser.sf2" 128 24 39 amp=67 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 24 40 amp=57 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -41 %font "GeneralUser.sf2" 128 24 41 amp=118 pan=-47 # Electric Tom -42 %font "GeneralUser.sf2" 128 24 42 amp=58 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 24 43 amp=82 pan=-28 # Electric Tom -44 %font "GeneralUser.sf2" 128 24 44 amp=32 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 24 45 amp=82 pan=-9 # Electric Tom -46 %font "GeneralUser.sf2" 128 24 46 amp=31 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 24 47 amp=84 pan=9 # Electric Tom -48 %font "GeneralUser.sf2" 128 24 48 amp=120 pan=28 # Electric Tom -49 %font "GeneralUser.sf2" 128 24 49 amp=176 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 24 50 amp=35 pan=47 # Electric Tom -51 %font "GeneralUser.sf2" 128 24 51 amp=62 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 24 52 amp=24 pan=-31 # Reverse Cymbal -53 %font "GeneralUser.sf2" 128 24 53 amp=47 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 24 54 amp=104 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 24 55 amp=63 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 24 56 amp=104 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 24 57 amp=121 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 24 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 24 59 amp=65 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 24 60 amp=157 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 24 61 amp=75 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 24 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 24 63 amp=68 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 24 64 amp=49 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 24 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 24 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 24 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 24 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 24 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 24 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 24 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 24 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 24 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 24 74 amp=43 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 24 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 24 76 amp=90 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 24 77 amp=63 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 24 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 24 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 24 80 amp=44 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 24 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 24 82 amp=155 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 24 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 24 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 24 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 24 86 amp=61 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 24 87 amp=103 pan=-31 # Surdo Open - -drumset 25 -27 %font "GeneralUser.sf2" 128 25 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 25 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 25 29 amp=43 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=57 pan=-16 # TR-909 Scratch Push -31 %font "GeneralUser.sf2" 128 25 31 amp=154 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 25 32 amp=320 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 25 33 amp=77 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 25 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 25 35 amp=70 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=97 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=275 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=62 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=67 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=72 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=67 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=68 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=69 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=86 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=101 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=38 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=64 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=72 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=76 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=135 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=111 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=55 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=107 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=55 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=32 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=140 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=81 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=50 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=28 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=89 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=33 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=76 pan=-31 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=69 pan=-23 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=124 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=70 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=116 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=111 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=90 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=62 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=72 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=62 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=143 pan=-31 # Surdo Open - -drumset 26 -21 %font "GeneralUser.sf2" 128 26 21 amp=100 pan=0 # WhiteNoiseWave FilterSnap -23 %font "GeneralUser.sf2" 128 26 23 amp=268 pan=0 # FilterSnap WhiteNoiseWave -24 %font "GeneralUser.sf2" 128 26 24 amp=76 pan=0 # WhiteNoiseWave FilterSnap -27 %font "GeneralUser.sf2" 128 26 27 amp=52 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 26 28 amp=167 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 26 29 amp=52 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 26 30 amp=66 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 26 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 26 32 amp=315 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 26 33 amp=77 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 26 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 26 35 amp=236 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 26 36 amp=94 pan=0 # TR-909 Kick TR-909 Kick -37 %font "GeneralUser.sf2" 128 26 37 amp=90 pan=0 # Rim Shot -38 %font "GeneralUser.sf2" 128 26 38 amp=93 pan=0 # Dance Snare -39 %font "GeneralUser.sf2" 128 26 39 amp=68 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 26 40 amp=142 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 26 41 amp=80 pan=-47 # Electric Tom -42 %font "GeneralUser.sf2" 128 26 42 amp=110 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 26 43 amp=81 pan=-28 # Electric Tom -44 %font "GeneralUser.sf2" 128 26 44 amp=35 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 26 45 amp=84 pan=-9 # Electric Tom -46 %font "GeneralUser.sf2" 128 26 46 amp=54 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 26 47 amp=83 pan=9 # Electric Tom -48 %font "GeneralUser.sf2" 128 26 48 amp=82 pan=28 # Electric Tom -49 %font "GeneralUser.sf2" 128 26 49 amp=116 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 26 50 amp=35 pan=47 # Electric Tom -51 %font "GeneralUser.sf2" 128 26 51 amp=113 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 26 52 amp=69 pan=-31 # Reverse Cymbal -53 %font "GeneralUser.sf2" 128 26 53 amp=62 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 26 54 amp=64 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 26 55 amp=61 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 26 56 amp=57 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 26 57 amp=136 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 26 58 amp=80 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 26 59 amp=51 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 26 60 amp=17 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 26 61 amp=75 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 26 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 26 63 amp=106 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 26 64 amp=73 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 26 65 amp=127 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 26 66 amp=98 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 26 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 26 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 26 69 amp=40 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 26 70 amp=44 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 26 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 26 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 26 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 26 74 amp=46 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 26 75 amp=145 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 26 76 amp=90 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 26 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 26 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 26 79 amp=72 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 26 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 26 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 26 82 amp=98 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 26 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 26 84 amp=39 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 26 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 26 86 amp=62 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 26 87 amp=101 pan=-31 # Surdo Open - -drumset 27 -29 %font "GeneralUser.sf2" 128 25 29 amp=43 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=57 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=100 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=88 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=293 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=87 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=66 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=81 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=105 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=110 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=135 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=64 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=98 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=34 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=57 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=145 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=97 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=32 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=113 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=54 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=33 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=89 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=96 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=141 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=58 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=49 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=129 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=89 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=33 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=81 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=102 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=122 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=126 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=116 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=64 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=62 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=72 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=163 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=46 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=98 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=41 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=63 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=144 pan=-31 # Surdo Open - -drumset 28 -29 %font "GeneralUser.sf2" 128 25 29 amp=44 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=91 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=100 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=85 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=293 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=84 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=66 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=110 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=126 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=76 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=64 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=64 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=62 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=47 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=58 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=86 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=75 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=67 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=113 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=54 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=44 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=107 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=90 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=59 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=140 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=58 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=50 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=28 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=89 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=52 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=76 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=72 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=98 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=64 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=113 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=40 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=78 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=116 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=98 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=51 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=72 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=157 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=46 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=61 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=64 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=104 pan=-31 # Surdo Open - -drumset 29 -29 %font "GeneralUser.sf2" 128 25 29 amp=71 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=91 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=90 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=90 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=124 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=235 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=66 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=141 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=105 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=67 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=105 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=31 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=105 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=34 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=44 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=51 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=144 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=91 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=142 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=50 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=44 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=107 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=61 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=32 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=119 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=49 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=17 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=75 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=16 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=76 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=56 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=127 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=63 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=70 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=46 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=101 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=80 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=73 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=39 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=96 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=103 pan=-31 # Surdo Open - -drumset 30 -29 %font "GeneralUser.sf2" 128 25 29 amp=44 pan=-16 # TR-909 Scratch Pull -30 %font "GeneralUser.sf2" 128 25 30 amp=91 pan=-16 # TR-909 Scratch Push -35 %font "GeneralUser.sf2" 128 25 35 amp=74 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=132 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 37 amp=304 pan=0 # TR-808 Click -38 %font "GeneralUser.sf2" 128 25 38 amp=136 pan=0 # TR-909 Snare 1 -39 %font "GeneralUser.sf2" 128 25 39 amp=45 pan=-16 # Synth Hand Clap -40 %font "GeneralUser.sf2" 128 25 40 amp=48 pan=0 # TR-909 Snare 2 -41 %font "GeneralUser.sf2" 128 25 41 amp=81 pan=-47 # Sine-750Hz -42 %font "GeneralUser.sf2" 128 25 42 amp=44 pan=31 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 43 amp=72 pan=-28 # Sine-750Hz -44 %font "GeneralUser.sf2" 128 25 44 amp=42 pan=31 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 45 amp=68 pan=-9 # Sine-750Hz -46 %font "GeneralUser.sf2" 128 25 46 amp=31 pan=31 # TR-909 Hi-Hat Open -47 %font "GeneralUser.sf2" 128 25 47 amp=43 pan=9 # Sine-750Hz -48 %font "GeneralUser.sf2" 128 25 48 amp=46 pan=28 # Sine-750Hz -49 %font "GeneralUser.sf2" 128 25 49 amp=90 pan=31 # TR-808 Hi-Hat Crash Cymbal -50 %font "GeneralUser.sf2" 128 25 50 amp=86 pan=47 # Sine-750Hz -51 %font "GeneralUser.sf2" 128 25 51 amp=142 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 25 52 amp=70 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 25 53 amp=46 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 25 54 amp=108 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 25 55 amp=62 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 25 56 amp=52 pan=31 # TR-808 Cowbell -57 %font "GeneralUser.sf2" 128 25 57 amp=122 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 25 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 25 59 amp=50 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 25 60 amp=99 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 25 61 amp=77 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 25 62 amp=15 pan=-39 # Sine-750Hz -63 %font "GeneralUser.sf2" 128 25 63 amp=75 pan=-39 # Sine-750Hz -64 %font "GeneralUser.sf2" 128 25 64 amp=53 pan=-31 # Sine-750Hz -65 %font "GeneralUser.sf2" 128 25 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 25 66 amp=65 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 25 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 25 68 amp=113 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 25 69 amp=123 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 25 70 amp=70 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 25 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 25 72 amp=40 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 25 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 25 74 amp=117 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 25 75 amp=82 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 25 76 amp=91 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 25 77 amp=101 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 25 78 amp=80 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 25 79 amp=73 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 25 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 25 81 amp=9 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 25 82 amp=61 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 25 83 amp=114 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 25 84 amp=60 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 25 85 amp=106 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 25 86 amp=65 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 25 87 amp=144 pan=-31 # Surdo Open - -drumset 32 -27 %font "GeneralUser.sf2" 128 32 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 32 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 32 29 amp=71 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 32 30 amp=80 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 32 31 amp=97 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 32 32 amp=433 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 32 33 amp=76 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 32 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 32 35 amp=169 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 32 36 amp=156 pan=0 # Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Standard Kick 1 Standard Kick 1 Standard Kick 1 -37 %font "GeneralUser.sf2" 128 32 37 amp=115 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 32 38 amp=95 pan=0 # Jazz Snare Soft 1 Jazz Snare Soft 1 Jazz Snare Soft 2 Jazz Snare Hard Jazz Snare Hard -39 %font "GeneralUser.sf2" 128 32 39 amp=92 pan=-16 # Hand Clap -40 %font "GeneralUser.sf2" 128 32 40 amp=132 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -41 %font "GeneralUser.sf2" 128 32 41 amp=123 pan=-47 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -42 %font "GeneralUser.sf2" 128 32 42 amp=37 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 32 43 amp=131 pan=-28 # Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 Standard Tom 5 -44 %font "GeneralUser.sf2" 128 32 44 amp=50 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 32 45 amp=118 pan=-9 # Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 Standard Tom 4 -46 %font "GeneralUser.sf2" 128 32 46 amp=30 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 32 47 amp=97 pan=9 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -48 %font "GeneralUser.sf2" 128 32 48 amp=84 pan=28 # Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 Standard Tom 2 -49 %font "GeneralUser.sf2" 128 32 49 amp=176 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 32 50 amp=50 pan=47 # Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 Standard Tom 1 -51 %font "GeneralUser.sf2" 128 32 51 amp=73 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 32 52 amp=32 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 32 53 amp=27 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 32 54 amp=68 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 32 55 amp=55 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 32 56 amp=103 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 32 57 amp=136 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 32 58 amp=81 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 32 59 amp=69 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 32 60 amp=98 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 32 61 amp=77 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 32 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 32 63 amp=68 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 32 64 amp=74 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 32 65 amp=127 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 32 66 amp=64 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 32 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 32 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 32 69 amp=39 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 32 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 32 71 amp=60 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 32 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 32 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 32 74 amp=43 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 32 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 32 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 32 77 amp=64 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 32 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 32 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 32 80 amp=45 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 32 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 32 82 amp=96 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 32 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 32 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 32 85 amp=162 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 32 86 amp=67 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 32 87 amp=98 pan=-31 # Surdo Open - -drumset 40 -27 %font "GeneralUser.sf2" 128 40 27 amp=36 pan=-23 # Filter Snap -28 %font "GeneralUser.sf2" 128 40 28 amp=104 pan=31 # Slap -29 %font "GeneralUser.sf2" 128 40 29 amp=44 pan=-16 # Scratch Push -30 %font "GeneralUser.sf2" 128 40 30 amp=50 pan=-16 # Scratch Pull -31 %font "GeneralUser.sf2" 128 40 31 amp=155 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 40 32 amp=436 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 40 33 amp=121 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 40 34 amp=45 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 40 35 amp=133 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 40 36 amp=104 pan=0 # Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Standard Kick 1 Standard Kick 1 Standard Kick 1 -37 %font "GeneralUser.sf2" 128 40 37 amp=72 pan=0 # Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Jazz Rim Shot Rim Shot -38 %font "GeneralUser.sf2" 128 40 38 amp=37 pan=0 # Brush Snare Brush Snare Brush Snare -39 %font "GeneralUser.sf2" 128 40 39 amp=90 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -40 %font "GeneralUser.sf2" 128 40 40 amp=16 pan=0 # Brush Swirl -41 %font "GeneralUser.sf2" 128 40 41 amp=138 pan=-47 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -42 %font "GeneralUser.sf2" 128 40 42 amp=36 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -43 %font "GeneralUser.sf2" 128 40 43 amp=111 pan=-28 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -44 %font "GeneralUser.sf2" 128 40 44 amp=31 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -45 %font "GeneralUser.sf2" 128 40 45 amp=157 pan=-9 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -46 %font "GeneralUser.sf2" 128 40 46 amp=39 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -47 %font "GeneralUser.sf2" 128 40 47 amp=104 pan=9 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -48 %font "GeneralUser.sf2" 128 40 48 amp=101 pan=28 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -49 %font "GeneralUser.sf2" 128 40 49 amp=183 pan=31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -50 %font "GeneralUser.sf2" 128 40 50 amp=54 pan=47 # Brushed Tom Brushed Tom Brushed Tom Brushed Tom -51 %font "GeneralUser.sf2" 128 40 51 amp=49 pan=-31 # Ride Cymbal -52 %font "GeneralUser.sf2" 128 40 52 amp=71 pan=-31 # Chinese Cymbal -53 %font "GeneralUser.sf2" 128 40 53 amp=110 pan=-31 # Ride Bell -54 %font "GeneralUser.sf2" 128 40 54 amp=19 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 40 55 amp=55 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 40 56 amp=106 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 40 57 amp=121 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 40 58 amp=34 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 40 59 amp=60 pan=-31 # Ride Cymbal -60 %font "GeneralUser.sf2" 128 40 60 amp=98 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 40 61 amp=78 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 40 62 amp=31 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 40 63 amp=69 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 40 64 amp=48 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 40 65 amp=82 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 40 66 amp=98 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 40 67 amp=63 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 40 68 amp=71 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 40 69 amp=40 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 40 70 amp=28 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 40 71 amp=37 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 40 72 amp=65 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 40 73 amp=77 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 40 74 amp=43 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 40 75 amp=92 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 40 76 amp=56 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 40 77 amp=63 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 40 78 amp=39 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 40 79 amp=43 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 40 80 amp=46 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 40 81 amp=11 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 40 82 amp=96 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 40 83 amp=71 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 40 84 amp=40 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 40 85 amp=162 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 40 86 amp=67 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 40 87 amp=144 pan=-31 # Surdo Open - -drumset 48 -27 %font "GeneralUser.sf2" 128 48 27 amp=38 pan=31 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -28 %font "GeneralUser.sf2" 128 48 28 amp=63 pan=31 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal -29 %font "GeneralUser.sf2" 128 48 29 amp=31 pan=31 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -30 %font "GeneralUser.sf2" 128 48 30 amp=52 pan=-31 # Ride Cymbal -31 %font "GeneralUser.sf2" 128 48 31 amp=23 pan=0 # Sticks -32 %font "GeneralUser.sf2" 128 48 32 amp=351 pan=-16 # Square Click -33 %font "GeneralUser.sf2" 128 48 33 amp=61 pan=0 # TR-808 Click -34 %font "GeneralUser.sf2" 128 48 34 amp=37 pan=0 # TR-808 Click Carillon-C6 -35 %font "GeneralUser.sf2" 128 48 35 amp=154 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -36 %font "GeneralUser.sf2" 128 48 36 amp=67 pan=0 # Taiko Drum Timpani Hard Timpani Hard Timpani Hard Timpani Hard -37 %font "GeneralUser.sf2" 128 48 37 amp=16 pan=0 # Rim Shot -38 %font "GeneralUser.sf2" 128 48 38 amp=55 pan=-31 # Orchestral Snare Orchestral Snare Orchestral Snare Orchestral Snare -39 %font "GeneralUser.sf2" 128 48 39 amp=70 pan=-47 # Castanets -40 %font "GeneralUser.sf2" 128 48 40 amp=55 pan=0 # Orchestral Snare Orchestral Snare Orchestral Snare Orchestral Snare -41 %font "GeneralUser.sf2" 128 48 41 amp=200 pan=-47 # Timpani Hard Timpani Hard Timpani Hard Timpani Soft Timpani Soft Timpani Hard Timpani Hard Timpani Soft -42 %font "GeneralUser.sf2" 0 47 amp=197 pan=-47 -43 %font "GeneralUser.sf2" 0 47 amp=123 pan=-47 -44 %font "GeneralUser.sf2" 0 47 amp=191 pan=-47 -45 %font "GeneralUser.sf2" 0 47 amp=112 pan=-47 -46 %font "GeneralUser.sf2" 0 47 amp=181 pan=-47 -47 %font "GeneralUser.sf2" 0 47 amp=108 pan=-47 -48 %font "GeneralUser.sf2" 0 47 amp=168 pan=-47 -49 %font "GeneralUser.sf2" 0 47 amp=166 pan=-47 -50 %font "GeneralUser.sf2" 0 47 amp=159 pan=-47 -51 %font "GeneralUser.sf2" 0 47 amp=93 pan=-47 -52 %font "GeneralUser.sf2" 0 47 amp=91 pan=-47 -53 %font "GeneralUser.sf2" 0 47 amp=89 pan=-47 -54 %font "GeneralUser.sf2" 128 48 54 amp=72 pan=16 # Tambourine -55 %font "GeneralUser.sf2" 128 48 55 amp=63 pan=-16 # Splash Cymbal -56 %font "GeneralUser.sf2" 128 48 56 amp=95 pan=31 # Cowbell -57 %font "GeneralUser.sf2" 128 48 57 amp=122 pan=-31 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -58 %font "GeneralUser.sf2" 128 48 58 amp=27 pan=-55 # Vibra Slap -59 %font "GeneralUser.sf2" 128 48 59 amp=99 pan=-47 # Orchestral Cymbal -60 %font "GeneralUser.sf2" 128 48 60 amp=16 pan=55 # Bongo Rim -61 %font "GeneralUser.sf2" 128 48 61 amp=115 pan=55 # Bongo Tone -62 %font "GeneralUser.sf2" 128 48 62 amp=43 pan=-39 # Conga High Muted -63 %font "GeneralUser.sf2" 128 48 63 amp=66 pan=-39 # Conga High Open -64 %font "GeneralUser.sf2" 128 48 64 amp=48 pan=-31 # Tumba Low -65 %font "GeneralUser.sf2" 128 48 65 amp=66 pan=31 # Timbale Rim -66 %font "GeneralUser.sf2" 128 48 66 amp=53 pan=31 # Timbale Low -67 %font "GeneralUser.sf2" 128 48 67 amp=91 pan=-55 # Agogo Agogo Agogo -68 %font "GeneralUser.sf2" 128 48 68 amp=101 pan=-55 # Agogo Agogo Agogo -69 %font "GeneralUser.sf2" 128 48 69 amp=30 pan=-55 # Cabasa -70 %font "GeneralUser.sf2" 128 48 70 amp=24 pan=-63 # Maracas -71 %font "GeneralUser.sf2" 128 48 71 amp=28 pan=55 # Whistle Short -72 %font "GeneralUser.sf2" 128 48 72 amp=29 pan=55 # Whistle Long -73 %font "GeneralUser.sf2" 128 48 73 amp=58 pan=47 # Guiro Short -74 %font "GeneralUser.sf2" 128 48 74 amp=65 pan=47 # Guiro Long -75 %font "GeneralUser.sf2" 128 48 75 amp=72 pan=31 # Claves -76 %font "GeneralUser.sf2" 128 48 76 amp=43 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -77 %font "GeneralUser.sf2" 128 48 77 amp=48 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -78 %font "GeneralUser.sf2" 128 48 78 amp=32 pan=-31 # Cuica Mute -79 %font "GeneralUser.sf2" 128 48 79 amp=35 pan=-31 # Cuica Open -80 %font "GeneralUser.sf2" 128 48 80 amp=36 pan=-63 # Triangle (Perc) -81 %font "GeneralUser.sf2" 128 48 81 amp=14 pan=-63 # Triangle (Perc) -82 %font "GeneralUser.sf2" 128 48 82 amp=71 pan=47 # Shaker -83 %font "GeneralUser.sf2" 128 48 83 amp=54 pan=55 # Jingle Bell -84 %font "GeneralUser.sf2" 128 48 84 amp=32 pan=63 # Bell Tree -85 %font "GeneralUser.sf2" 128 48 85 amp=81 pan=-47 # Castanets -86 %font "GeneralUser.sf2" 128 48 86 amp=52 pan=-31 # Surdo Muted -87 %font "GeneralUser.sf2" 128 48 87 amp=118 pan=-31 # Surdo Open -88 %font "GeneralUser.sf2" 128 48 88 amp=55 pan=0 # Applause - -drumset 49 -30 %font "GeneralUser.sf2" 128 0 38 amp=109 pan=-31 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -31 %font "GeneralUser.sf2" 128 0 49 amp=110 pan=-47 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -32 %font "GeneralUser.sf2" 128 0 35 amp=27 pan=-63 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -33 %font "GeneralUser.sf2" 0 116 amp=42 pan=55 -36 %font "GeneralUser.sf2" 128 0 47 amp=110 pan=0 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -38 %font "GeneralUser.sf2" 128 0 47 amp=216 pan=-31 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -39 %font "GeneralUser.sf2" 128 0 47 amp=100 pan=63 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -40 %font "GeneralUser.sf2" 128 0 47 amp=75 pan=63 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -41 %font "GeneralUser.sf2" 128 0 47 amp=140 pan=31 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -42 %font "GeneralUser.sf2" 128 0 63 amp=59 pan=47 # Conga High Open -43 %font "GeneralUser.sf2" 128 0 64 amp=81 pan=47 # Tumba Low -44 %font "GeneralUser.sf2" 128 0 47 amp=152 pan=63 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -49 %font "GeneralUser.sf2" 128 0 52 amp=45 pan=-47 # Chinese Cymbal -50 %font "GeneralUser.sf2" 128 0 52 amp=177 pan=31 # Chinese Cymbal -51 %font "GeneralUser.sf2" 128 0 47 amp=247 pan=47 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -52 %font "GeneralUser.sf2" 128 0 47 amp=260 pan=47 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -54 %font "GeneralUser.sf2" 128 0 64 amp=60 pan=23 # Tumba Low -55 %font "GeneralUser.sf2" 128 0 64 amp=55 pan=47 # Tumba Low -56 %font "GeneralUser.sf2" 128 0 64 amp=30 pan=47 # Tumba Low -57 %font "GeneralUser.sf2" 128 0 60 amp=97 pan=-47 # Bongo Rim -58 %font "GeneralUser.sf2" 128 0 61 amp=56 pan=-47 # Bongo Tone -59 %font "GeneralUser.sf2" 128 0 63 amp=27 pan=-47 # Conga High Open -60 %font "GeneralUser.sf2" 128 0 64 amp=55 pan=-47 # Tumba Low -61 %font "GeneralUser.sf2" 128 0 62 amp=99 pan=-31 # Conga High Muted -62 %font "GeneralUser.sf2" 128 0 47 amp=159 pan=31 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -63 %font "GeneralUser.sf2" 128 0 47 amp=175 pan=31 # Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 Standard Tom 3 -64 %font "GeneralUser.sf2" 128 0 64 amp=23 pan=-16 # Tumba Low -65 %font "GeneralUser.sf2" 128 0 60 amp=203 pan=-31 # Bongo Rim -67 %font "GeneralUser.sf2" 128 0 66 amp=76 pan=31 # Timbale Low -68 %font "GeneralUser.sf2" 128 0 66 amp=28 pan=39 # Timbale Low -69 %font "GeneralUser.sf2" 128 0 65 amp=69 pan=39 # Timbale Rim -70 %font "GeneralUser.sf2" 128 0 56 amp=74 pan=31 # Cowbell -71 %font "GeneralUser.sf2" 128 0 60 amp=93 pan=55 # Bongo Rim -72 %font "GeneralUser.sf2" 128 0 61 amp=91 pan=47 # Bongo Tone -73 %font "GeneralUser.sf2" 128 0 62 amp=58 pan=-31 # Conga High Muted -74 %font "GeneralUser.sf2" 128 0 63 amp=139 pan=-31 # Conga High Open -75 %font "GeneralUser.sf2" 128 0 64 amp=29 pan=-39 # Tumba Low -76 %font "GeneralUser.sf2" 128 0 64 amp=48 pan=-39 # Tumba Low -77 %font "GeneralUser.sf2" 128 0 64 amp=50 pan=-39 # Tumba Low -78 %font "GeneralUser.sf2" 128 0 64 amp=64 pan=-39 # Tumba Low -79 %font "GeneralUser.sf2" 0 116 amp=125 pan=63 -80 %font "GeneralUser.sf2" 0 116 amp=56 pan=63 -81 %font "GeneralUser.sf2" 0 116 amp=96 pan=-31 -82 %font "GeneralUser.sf2" 0 116 amp=66 pan=-31 -83 %font "GeneralUser.sf2" 128 0 54 amp=186 pan=8 # Tambourine -84 %font "GeneralUser.sf2" 128 0 67 amp=56 pan=-55 # Agogo Agogo Agogo -85 %font "GeneralUser.sf2" 128 0 68 amp=63 pan=-55 # Agogo Agogo Agogo -87 %font "GeneralUser.sf2" 128 0 71 amp=70 pan=55 # Whistle Short -88 %font "GeneralUser.sf2" 128 0 72 amp=39 pan=55 # Whistle Long -89 %font "GeneralUser.sf2" 128 0 78 amp=36 pan=-31 # Cuica Mute -90 %font "GeneralUser.sf2" 128 0 79 amp=39 pan=-31 # Cuica Open -91 %font "GeneralUser.sf2" 128 0 80 amp=43 pan=-63 # Triangle (Perc) -92 %font "GeneralUser.sf2" 128 0 81 amp=24 pan=-63 # Triangle (Perc) -93 %font "GeneralUser.sf2" 128 0 73 amp=63 pan=47 # Guiro Short -94 %font "GeneralUser.sf2" 128 0 74 amp=33 pan=47 # Guiro Long -95 %font "GeneralUser.sf2" 128 0 69 amp=44 pan=-55 # Cabasa -96 %font "GeneralUser.sf2" 128 0 69 amp=65 pan=-55 # Cabasa -97 %font "GeneralUser.sf2" 128 0 75 amp=65 pan=31 # Claves -98 %font "GeneralUser.sf2" 128 0 76 amp=79 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard -99 %font "GeneralUser.sf2" 128 0 77 amp=88 pan=55 # Wood Block Med Wood Block Med Wood Block Med Wood Block Med Wood Block Hard Wood Block Hard Wood Block Hard - -drumset 50 -25 %font "GeneralUser.sf2" 128 25 36 amp=88 pan=0 # TR-909 Kick -26 %font "GeneralUser.sf2" 128 25 35 amp=186 pan=0 # Sine-93.75Hz -27 %font "GeneralUser.sf2" 128 25 36 amp=82 pan=0 # TR-909 Kick -28 %font "GeneralUser.sf2" 128 25 36 amp=90 pan=0 # TR-909 Kick -29 %font "GeneralUser.sf2" 128 25 36 amp=80 pan=0 # TR-909 Kick -30 %font "GeneralUser.sf2" 128 25 36 amp=112 pan=0 # TR-909 Kick -31 %font "GeneralUser.sf2" 128 25 35 amp=311 pan=0 # Sine-93.75Hz -32 %font "GeneralUser.sf2" 128 25 36 amp=106 pan=0 # TR-909 Kick -33 %font "GeneralUser.sf2" 128 25 35 amp=160 pan=0 # Sine-93.75Hz -34 %font "GeneralUser.sf2" 128 25 36 amp=59 pan=0 # TR-909 Kick -35 %font "GeneralUser.sf2" 128 25 35 amp=67 pan=0 # Sine-93.75Hz -36 %font "GeneralUser.sf2" 128 25 36 amp=93 pan=0 # TR-909 Kick -37 %font "GeneralUser.sf2" 128 25 35 amp=323 pan=0 # Sine-93.75Hz -38 %font "GeneralUser.sf2" 128 0 36 amp=144 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -39 %font "GeneralUser.sf2" 128 0 35 amp=282 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -40 %font "GeneralUser.sf2" 128 0 36 amp=159 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -41 %font "GeneralUser.sf2" 128 0 35 amp=172 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -42 %font "GeneralUser.sf2" 128 1 36 amp=195 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -43 %font "GeneralUser.sf2" 128 1 35 amp=148 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -44 %font "GeneralUser.sf2" 128 0 36 amp=174 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -45 %font "GeneralUser.sf2" 128 0 35 amp=108 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -46 %font "GeneralUser.sf2" 128 0 36 amp=179 pan=0 # Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 Standard Kick 1 -47 %font "GeneralUser.sf2" 128 32 36 amp=106 pan=0 # Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Jazz Bass Drum Standard Kick 1 Standard Kick 1 Standard Kick 1 -48 %font "GeneralUser.sf2" 128 32 35 amp=133 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -49 %font "GeneralUser.sf2" 128 48 36 amp=58 pan=0 # Taiko Drum Timpani Hard Timpani Hard Timpani Hard Timpani Hard -50 %font "GeneralUser.sf2" 128 8 36 amp=45 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -51 %font "GeneralUser.sf2" 128 8 35 amp=137 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -52 %font "GeneralUser.sf2" 128 16 36 amp=92 pan=0 # Power Kick 2 Power Kick 2 Power Kick 2 Power Kick 2 -53 %font "GeneralUser.sf2" 128 16 35 amp=87 pan=0 # Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 Power/Room Kick 1 -54 %font "GeneralUser.sf2" 128 24 36 amp=94 pan=0 # TR-909 Kick Electric Tom -55 %font "GeneralUser.sf2" 128 24 35 amp=181 pan=0 # Standard Kick 2 Standard Kick 2 Standard Kick 2 Standard Kick 2 -56 %font "GeneralUser.sf2" 128 24 36 amp=68 pan=0 # TR-909 Kick Electric Tom -57 %font "GeneralUser.sf2" 128 25 36 amp=87 pan=0 # TR-909 Kick -58 %font "GeneralUser.sf2" 128 25 36 amp=101 pan=0 # TR-909 Kick -59 %font "GeneralUser.sf2" 128 26 36 amp=101 pan=0 # TR-909 Kick TR-909 Kick -60 %font "GeneralUser.sf2" 128 0 38 amp=127 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -61 %font "GeneralUser.sf2" 128 0 40 amp=202 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -62 %font "GeneralUser.sf2" 128 0 38 amp=135 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -63 %font "GeneralUser.sf2" 128 0 40 amp=139 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -64 %font "GeneralUser.sf2" 128 0 38 amp=125 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -65 %font "GeneralUser.sf2" 128 48 38 amp=85 pan=0 # Orchestral Snare Orchestral Snare Orchestral Snare Orchestral Snare -66 %font "GeneralUser.sf2" 128 32 38 amp=122 pan=0 # Jazz Snare Soft 1 Jazz Snare Soft 1 Jazz Snare Soft 2 Jazz Snare Hard Jazz Snare Hard -67 %font "GeneralUser.sf2" 128 32 40 amp=118 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -68 %font "GeneralUser.sf2" 128 8 38 amp=118 pan=0 # Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 Room Snare 1 -69 %font "GeneralUser.sf2" 128 8 40 amp=144 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -70 %font "GeneralUser.sf2" 128 16 38 amp=77 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -71 %font "GeneralUser.sf2" 128 16 40 amp=57 pan=0 # Power Snare 2 Power Snare 2 Power Snare 2 Power Snare 2 -72 %font "GeneralUser.sf2" 128 24 40 amp=103 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -73 %font "GeneralUser.sf2" 128 26 38 amp=133 pan=0 # Dance Snare -74 %font "GeneralUser.sf2" 128 26 40 amp=116 pan=0 # TR-909 Snare 2 -75 %font "GeneralUser.sf2" 128 26 40 amp=78 pan=0 # TR-909 Snare 2 -76 %font "GeneralUser.sf2" 128 24 38 amp=64 pan=0 # Electric Tom White Noise -77 %font "GeneralUser.sf2" 128 26 38 amp=67 pan=0 # Dance Snare -78 %font "GeneralUser.sf2" 128 24 38 amp=120 pan=0 # Electric Tom White Noise -79 %font "GeneralUser.sf2" 128 24 40 amp=126 pan=0 # Power Snare 1 Power Snare 1 Power Snare 1 Power Snare 1 -80 %font "GeneralUser.sf2" 128 25 38 amp=47 pan=0 # TR-909 Snare 1 -81 %font "GeneralUser.sf2" 128 25 40 amp=53 pan=0 # TR-909 Snare 2 -82 %font "GeneralUser.sf2" 128 25 38 amp=60 pan=0 # TR-909 Snare 1 -83 %font "GeneralUser.sf2" 128 25 40 amp=77 pan=0 # TR-909 Snare 2 -84 %font "GeneralUser.sf2" 128 40 38 amp=26 pan=0 # Brush Snare Brush Snare Brush Snare -85 %font "GeneralUser.sf2" 128 40 38 amp=36 pan=0 # Brush Snare Brush Snare Brush Snare -86 %font "GeneralUser.sf2" 128 40 39 amp=103 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -87 %font "GeneralUser.sf2" 128 40 39 amp=100 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -88 %font "GeneralUser.sf2" 128 40 39 amp=131 pan=0 # Brush Snare Brush Snare Brush Snare Standard Snare 2 Standard Snare 2 Standard Snare 2 -89 %font "GeneralUser.sf2" 128 40 40 amp=19 pan=0 # Brush Swirl -90 %font "GeneralUser.sf2" 128 40 40 amp=17 pan=0 # Brush Swirl -91 %font "GeneralUser.sf2" 128 40 40 amp=23 pan=0 # Brush Swirl -92 %font "GeneralUser.sf2" 128 0 38 amp=207 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -93 %font "GeneralUser.sf2" 128 0 40 amp=413 pan=0 # Standard Snare 2 Standard Snare 2 Standard Snare 2 Standard Snare 2 -94 %font "GeneralUser.sf2" 128 0 38 amp=267 pan=0 # Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Standard Snare 1 Jazz Snare Soft 1 Jazz Snare Soft 1 -95 %font "GeneralUser.sf2" 128 25 38 amp=93 pan=0 # TR-909 Snare 1 -96 %font "GeneralUser.sf2" 128 25 40 amp=61 pan=0 # TR-909 Snare 2 -97 %font "GeneralUser.sf2" 128 25 38 amp=68 pan=0 # TR-909 Snare 1 -98 %font "GeneralUser.sf2" 128 25 40 amp=80 pan=0 # TR-909 Snare 2 -99 %font "GeneralUser.sf2" 128 25 38 amp=66 pan=0 # TR-909 Snare 1 - -drumset 53 -32 %font "GeneralUser.sf2" 128 0 46 amp=51 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -33 %font "GeneralUser.sf2" 128 0 42 amp=61 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -34 %font "GeneralUser.sf2" 128 0 42 amp=82 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -35 %font "GeneralUser.sf2" 128 25 44 amp=170 pan=0 # TR-808 Hi-Hat -36 %font "GeneralUser.sf2" 128 0 42 amp=42 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -37 %font "GeneralUser.sf2" 128 0 42 amp=45 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -38 %font "GeneralUser.sf2" 128 0 42 amp=33 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -39 %font "GeneralUser.sf2" 128 0 42 amp=34 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -40 %font "GeneralUser.sf2" 128 0 42 amp=35 pan=0 # Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Hard Hi-Hat Closed Soft Hi-Hat Closed Soft Hi-Hat Closed Soft -41 %font "GeneralUser.sf2" 128 25 42 amp=50 pan=0 # TR-808 Hi-Hat -42 %font "GeneralUser.sf2" 128 25 42 amp=72 pan=0 # TR-808 Hi-Hat -43 %font "GeneralUser.sf2" 128 25 42 amp=88 pan=0 # TR-808 Hi-Hat -44 %font "GeneralUser.sf2" 128 25 42 amp=69 pan=0 # TR-808 Hi-Hat -45 %font "GeneralUser.sf2" 128 25 42 amp=151 pan=0 # TR-808 Hi-Hat -46 %font "GeneralUser.sf2" 128 0 44 amp=41 pan=0 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -47 %font "GeneralUser.sf2" 128 0 44 amp=60 pan=0 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -48 %font "GeneralUser.sf2" 128 0 44 amp=43 pan=0 # Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Hi-Hat Pedal Dead Air -49 %font "GeneralUser.sf2" 128 0 46 amp=43 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -50 %font "GeneralUser.sf2" 128 0 46 amp=36 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -51 %font "GeneralUser.sf2" 128 0 46 amp=38 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -52 %font "GeneralUser.sf2" 128 0 46 amp=18 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -53 %font "GeneralUser.sf2" 128 0 46 amp=42 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -54 %font "GeneralUser.sf2" 128 0 46 amp=60 pan=0 # Hi-Hat Open Hi-Hat Open Attack Hi-Hat Open Attack -55 %font "GeneralUser.sf2" 128 25 46 amp=31 pan=0 # TR-909 Hi-Hat Open -56 %font "GeneralUser.sf2" 128 25 46 amp=31 pan=0 # TR-909 Hi-Hat Open -57 %font "GeneralUser.sf2" 128 25 46 amp=47 pan=0 # TR-909 Hi-Hat Open -58 %font "GeneralUser.sf2" 128 25 46 amp=61 pan=0 # TR-909 Hi-Hat Open -59 %font "GeneralUser.sf2" 128 25 46 amp=38 pan=0 # TR-909 Hi-Hat Open -60 %font "GeneralUser.sf2" 128 25 46 amp=34 pan=0 # TR-909 Hi-Hat Open -61 %font "GeneralUser.sf2" 128 0 49 amp=176 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -62 %font "GeneralUser.sf2" 128 0 57 amp=164 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -63 %font "GeneralUser.sf2" 128 0 49 amp=180 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -64 %font "GeneralUser.sf2" 128 40 49 amp=105 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -65 %font "GeneralUser.sf2" 128 0 49 amp=172 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -66 %font "GeneralUser.sf2" 128 25 49 amp=60 pan=0 # TR-808 Hi-Hat Crash Cymbal -67 %font "GeneralUser.sf2" 128 25 49 amp=97 pan=0 # TR-808 Hi-Hat Crash Cymbal -68 %font "GeneralUser.sf2" 128 0 49 amp=271 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -69 %font "GeneralUser.sf2" 128 0 57 amp=220 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -70 %font "GeneralUser.sf2" 128 0 49 amp=169 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -71 %font "GeneralUser.sf2" 128 0 57 amp=148 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -72 %font "GeneralUser.sf2" 128 0 49 amp=155 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -73 %font "GeneralUser.sf2" 128 40 49 amp=155 pan=0 # Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Crash Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal Ride Cymbal -74 %font "GeneralUser.sf2" 128 0 55 amp=71 pan=0 # Splash Cymbal -75 %font "GeneralUser.sf2" 128 0 55 amp=90 pan=0 # Splash Cymbal -76 %font "GeneralUser.sf2" 128 0 53 amp=47 pan=0 # Ride Bell -77 %font "GeneralUser.sf2" 128 40 53 amp=58 pan=0 # Ride Bell -78 %font "GeneralUser.sf2" 128 0 51 amp=58 pan=0 # Ride Cymbal -79 %font "GeneralUser.sf2" 128 0 59 amp=58 pan=0 # Ride Cymbal -80 %font "GeneralUser.sf2" 128 40 51 amp=75 pan=0 # Ride Cymbal -81 %font "GeneralUser.sf2" 128 0 51 amp=83 pan=0 # Ride Cymbal -82 %font "GeneralUser.sf2" 128 0 51 amp=42 pan=0 # Ride Cymbal -83 %font "GeneralUser.sf2" 128 0 51 amp=36 pan=0 # Ride Cymbal -84 %font "GeneralUser.sf2" 128 0 51 amp=41 pan=0 # Ride Cymbal -85 %font "GeneralUser.sf2" 128 0 51 amp=41 pan=0 # Ride Cymbal -86 %font "GeneralUser.sf2" 128 0 51 amp=33 pan=0 # Ride Cymbal -87 %font "GeneralUser.sf2" 128 25 51 amp=80 pan=0 # Ride Cymbal -88 %font "GeneralUser.sf2" 128 25 51 amp=252 pan=0 # Ride Cymbal -89 %font "GeneralUser.sf2" 128 0 51 amp=308 pan=0 # Ride Cymbal -90 %font "GeneralUser.sf2" 128 0 51 amp=276 pan=0 # Ride Cymbal -91 %font "GeneralUser.sf2" 128 0 39 amp=21 pan=0 # Hand Clap -92 %font "GeneralUser.sf2" 128 0 39 amp=93 pan=0 # Hand Clap -93 %font "GeneralUser.sf2" 128 0 39 amp=81 pan=0 # Hand Clap -94 %font "GeneralUser.sf2" 128 0 39 amp=83 pan=0 # Hand Clap -95 %font "GeneralUser.sf2" 128 0 39 amp=155 pan=0 # Hand Clap -96 %font "GeneralUser.sf2" 128 25 39 amp=66 pan=0 # Synth Hand Clap - -drumset 56 -39 %font "GeneralUser.sf2" 128 56 39 amp=36 pan=-23 # Filter Snap -40 %font "GeneralUser.sf2" 128 56 40 amp=167 pan=-23 # Slap -41 %font "GeneralUser.sf2" 128 56 41 amp=74 pan=-16 # Scratch Push -42 %font "GeneralUser.sf2" 128 56 42 amp=52 pan=-16 # Scratch Pull -43 %font "GeneralUser.sf2" 128 56 43 amp=97 pan=0 # Sticks -44 %font "GeneralUser.sf2" 128 56 44 amp=433 pan=-16 # Square Click -45 %font "GeneralUser.sf2" 128 56 45 amp=77 pan=0 # TR-808 Click -46 %font "GeneralUser.sf2" 128 56 46 amp=45 pan=0 # TR-808 Click Carillon-C6 -47 %font "GeneralUser.sf2" 128 56 47 amp=68 pan=0 # Fret Slide -48 %font "GeneralUser.sf2" 128 56 48 amp=17 pan=0 # Gtr Cut Up -49 %font "GeneralUser.sf2" 128 56 49 amp=73 pan=0 # Gtr Cut Down -50 %font "GeneralUser.sf2" 128 56 50 amp=28 pan=0 # Gtr Slap -51 %font "GeneralUser.sf2" 128 56 51 amp=154 pan=0 # Gtr Click -52 %font "GeneralUser.sf2" 128 56 52 amp=87 pan=0 # Laughing -53 %font "GeneralUser.sf2" 128 56 53 amp=61 pan=0 # Scream -54 %font "GeneralUser.sf2" 128 56 54 amp=174 pan=0 # Punch Bone Crunch -55 %font "GeneralUser.sf2" 128 56 55 amp=155 pan=0 # Heartbeat -56 %font "GeneralUser.sf2" 128 56 56 amp=83 pan=0 # Foot Step -58 %font "GeneralUser.sf2" 128 56 58 amp=9 pan=0 # Applause Applause -59 %font "GeneralUser.sf2" 128 56 59 amp=24 pan=0 # Door Creak -60 %font "GeneralUser.sf2" 128 56 60 amp=75 pan=0 # Door Slam -61 %font "GeneralUser.sf2" 128 56 61 amp=74 pan=0 # Scratch Pull -62 %font "GeneralUser.sf2" 128 56 62 amp=118 pan=0 # Windchimes -63 %font "GeneralUser.sf2" 128 56 63 amp=55 pan=0 # Car-Start Car-Start -64 %font "GeneralUser.sf2" 128 56 64 amp=117 pan=0 # Car-Skid -65 %font "GeneralUser.sf2" 128 56 65 amp=56 pan=0 # Car-Pass Car-Pass -66 %font "GeneralUser.sf2" 128 56 66 amp=142 pan=0 # Car-Crash -67 %font "GeneralUser.sf2" 128 56 67 amp=14 pan=0 # Siren Siren -68 %font "GeneralUser.sf2" 128 56 68 amp=302 pan=0 # Train Train -69 %font "GeneralUser.sf2" 128 56 69 amp=26 pan=0 # Jet -70 %font "GeneralUser.sf2" 128 56 70 amp=171 pan=0 # Helicopter -71 %font "GeneralUser.sf2" 128 56 71 amp=12 pan=0 # Starship Noise Harpsichord-C6 -72 %font "GeneralUser.sf2" 128 56 72 amp=79 pan=0 # Gun Shot -73 %font "GeneralUser.sf2" 128 56 73 amp=33 pan=0 # Gun Shot -74 %font "GeneralUser.sf2" 128 56 74 amp=154 pan=0 # Sine-Triangle-12000 White Noise White Noise -75 %font "GeneralUser.sf2" 128 56 75 amp=65 pan=0 # Explosion Explosion -76 %font "GeneralUser.sf2" 128 56 76 amp=141 pan=0 # Dog -77 %font "GeneralUser.sf2" 128 56 77 amp=3 pan=0 # Horse Gallop -78 %font "GeneralUser.sf2" 128 56 78 amp=99 pan=0 # Birds Birds -79 %font "GeneralUser.sf2" 128 56 79 amp=14 pan=0 # Rain Rain -80 %font "GeneralUser.sf2" 128 56 80 amp=182 pan=0 # Thunder Thunder -81 %font "GeneralUser.sf2" 128 56 81 amp=12 pan=0 # WhiteNoiseWave WhiteNoiseWave -82 %font "GeneralUser.sf2" 128 56 82 amp=82 pan=0 # Seashore Seashore -83 %font "GeneralUser.sf2" 128 56 83 amp=109 pan=0 # Stream Stream -84 %font "GeneralUser.sf2" 128 56 84 amp=57 pan=0 # Bubbles - - diff --git a/packages/tools/sound/timidity/config/fluidr3_gm.cfg b/packages/tools/sound/timidity/config/fluidr3_gm.cfg deleted file mode 100644 index 4b97176fe..000000000 --- a/packages/tools/sound/timidity/config/fluidr3_gm.cfg +++ /dev/null @@ -1,2830 +0,0 @@ -dir /storage/roms/bios/timidity/sf2 - -bank 0 -0 %font "FluidR3_GM.sf2" 0 0 amp=29 pan=0 -1 %font "FluidR3_GM.sf2" 0 1 amp=41 pan=0 -2 %font "FluidR3_GM.sf2" 0 2 amp=64 pan=0 -3 %font "FluidR3_GM.sf2" 0 3 amp=32 pan=0 -4 %font "FluidR3_GM.sf2" 0 4 amp=35 pan=0 -5 %font "FluidR3_GM.sf2" 0 5 amp=51 pan=0 -6 %font "FluidR3_GM.sf2" 0 6 amp=71 pan=0 -7 %font "FluidR3_GM.sf2" 0 7 amp=65 pan=0 -8 %font "FluidR3_GM.sf2" 0 8 amp=73 pan=0 -9 %font "FluidR3_GM.sf2" 0 9 amp=98 pan=0 -10 %font "FluidR3_GM.sf2" 0 10 amp=150 pan=0 -11 %font "FluidR3_GM.sf2" 0 11 amp=63 pan=0 -12 %font "FluidR3_GM.sf2" 0 12 amp=48 pan=0 -13 %font "FluidR3_GM.sf2" 0 13 amp=46 pan=0 -14 %font "FluidR3_GM.sf2" 0 14 amp=65 pan=0 -15 %font "FluidR3_GM.sf2" 0 15 amp=62 pan=0 -16 %font "FluidR3_GM.sf2" 0 16 amp=154 pan=0 -17 %font "FluidR3_GM.sf2" 0 17 amp=96 pan=0 -18 %font "FluidR3_GM.sf2" 0 18 amp=75 pan=0 -19 %font "FluidR3_GM.sf2" 0 19 amp=128 pan=0 -20 %font "FluidR3_GM.sf2" 0 20 amp=45 pan=0 -21 %font "FluidR3_GM.sf2" 0 21 amp=50 pan=0 -22 %font "FluidR3_GM.sf2" 0 22 amp=36 pan=0 -23 %font "FluidR3_GM.sf2" 0 23 amp=46 pan=0 -24 %font "FluidR3_GM.sf2" 0 24 amp=139 pan=0 -25 %font "FluidR3_GM.sf2" 0 25 amp=92 pan=0 -26 %font "FluidR3_GM.sf2" 0 26 amp=87 pan=0 -27 %font "FluidR3_GM.sf2" 0 27 amp=46 pan=0 -28 %font "FluidR3_GM.sf2" 0 28 amp=92 pan=0 -29 %font "FluidR3_GM.sf2" 0 29 amp=41 pan=0 -30 %font "FluidR3_GM.sf2" 0 30 amp=91 pan=0 -31 %font "FluidR3_GM.sf2" 0 31 amp=60 pan=0 -32 %font "FluidR3_GM.sf2" 0 32 amp=125 pan=0 -33 %font "FluidR3_GM.sf2" 0 33 amp=85 pan=0 -34 %font "FluidR3_GM.sf2" 0 34 amp=148 pan=0 -35 %font "FluidR3_GM.sf2" 0 35 amp=98 pan=0 -36 %font "FluidR3_GM.sf2" 0 36 amp=207 pan=0 -37 %font "FluidR3_GM.sf2" 0 37 amp=223 pan=0 -38 %font "FluidR3_GM.sf2" 0 38 amp=35 pan=0 -39 %font "FluidR3_GM.sf2" 0 39 amp=38 pan=0 -40 %font "FluidR3_GM.sf2" 0 40 amp=48 pan=0 -41 %font "FluidR3_GM.sf2" 0 41 amp=69 pan=0 -42 %font "FluidR3_GM.sf2" 0 42 amp=34 pan=0 -43 %font "FluidR3_GM.sf2" 0 43 amp=109 pan=0 -44 %font "FluidR3_GM.sf2" 0 44 amp=68 pan=0 -45 %font "FluidR3_GM.sf2" 0 45 amp=124 pan=0 -46 %font "FluidR3_GM.sf2" 0 46 amp=117 pan=0 -47 %font "FluidR3_GM.sf2" 0 47 amp=98 pan=0 -48 %font "FluidR3_GM.sf2" 0 48 amp=91 pan=0 -49 %font "FluidR3_GM.sf2" 0 49 amp=79 pan=0 -50 %font "FluidR3_GM.sf2" 0 50 amp=30 pan=0 -51 %font "FluidR3_GM.sf2" 0 51 amp=14 pan=0 -52 %font "FluidR3_GM.sf2" 0 52 amp=56 pan=0 -53 %font "FluidR3_GM.sf2" 0 53 amp=66 pan=0 -54 %font "FluidR3_GM.sf2" 0 54 amp=79 pan=0 -55 %font "FluidR3_GM.sf2" 0 55 amp=105 pan=0 -56 %font "FluidR3_GM.sf2" 0 56 amp=102 pan=0 -57 %font "FluidR3_GM.sf2" 0 57 amp=54 pan=0 -58 %font "FluidR3_GM.sf2" 0 58 amp=60 pan=0 -59 %font "FluidR3_GM.sf2" 0 59 amp=42 pan=0 -60 %font "FluidR3_GM.sf2" 0 60 amp=80 pan=0 -61 %font "FluidR3_GM.sf2" 0 61 amp=89 pan=0 -62 %font "FluidR3_GM.sf2" 0 62 amp=82 pan=0 -63 %font "FluidR3_GM.sf2" 0 63 amp=117 pan=0 -64 %font "FluidR3_GM.sf2" 0 64 amp=90 pan=0 -65 %font "FluidR3_GM.sf2" 0 65 amp=30 pan=0 -66 %font "FluidR3_GM.sf2" 0 66 amp=51 pan=0 -67 %font "FluidR3_GM.sf2" 0 67 amp=33 pan=0 -68 %font "FluidR3_GM.sf2" 0 68 amp=58 pan=0 -69 %font "FluidR3_GM.sf2" 0 69 amp=68 pan=0 -70 %font "FluidR3_GM.sf2" 0 70 amp=67 pan=0 -71 %font "FluidR3_GM.sf2" 0 71 amp=61 pan=0 -72 %font "FluidR3_GM.sf2" 0 72 amp=43 pan=0 -73 %font "FluidR3_GM.sf2" 0 73 amp=43 pan=0 -74 %font "FluidR3_GM.sf2" 0 74 amp=116 pan=0 -75 %font "FluidR3_GM.sf2" 0 75 amp=51 pan=0 -76 %font "FluidR3_GM.sf2" 0 76 amp=56 pan=0 -77 %font "FluidR3_GM.sf2" 0 77 amp=32 pan=0 -78 %font "FluidR3_GM.sf2" 0 78 amp=122 pan=0 -79 %font "FluidR3_GM.sf2" 0 79 amp=144 pan=0 -80 %font "FluidR3_GM.sf2" 0 80 amp=24 pan=0 -81 %font "FluidR3_GM.sf2" 0 81 amp=65 pan=0 -82 %font "FluidR3_GM.sf2" 0 82 amp=222 pan=0 -83 %font "FluidR3_GM.sf2" 0 83 amp=86 pan=0 -84 %font "FluidR3_GM.sf2" 0 84 amp=41 pan=0 -85 %font "FluidR3_GM.sf2" 0 85 amp=147 pan=0 -86 %font "FluidR3_GM.sf2" 0 86 amp=29 pan=0 -87 %font "FluidR3_GM.sf2" 0 87 amp=60 pan=0 -88 %font "FluidR3_GM.sf2" 0 88 amp=205 pan=0 -89 %font "FluidR3_GM.sf2" 0 89 amp=52 pan=0 -90 %font "FluidR3_GM.sf2" 0 90 amp=39 pan=0 -91 %font "FluidR3_GM.sf2" 0 91 amp=60 pan=0 -92 %font "FluidR3_GM.sf2" 0 92 amp=107 pan=0 -93 %font "FluidR3_GM.sf2" 0 93 amp=50 pan=0 -94 %font "FluidR3_GM.sf2" 0 94 amp=87 pan=0 -95 %font "FluidR3_GM.sf2" 0 95 amp=70 pan=0 -96 %font "FluidR3_GM.sf2" 0 96 amp=37 pan=0 -97 %font "FluidR3_GM.sf2" 0 97 amp=74 pan=0 -98 %font "FluidR3_GM.sf2" 0 98 amp=132 pan=0 -99 %font "FluidR3_GM.sf2" 0 99 amp=117 pan=0 -100 %font "FluidR3_GM.sf2" 0 100 amp=64 pan=0 -101 %font "FluidR3_GM.sf2" 0 101 amp=53 pan=0 -102 %font "FluidR3_GM.sf2" 0 102 amp=51 pan=0 -103 %font "FluidR3_GM.sf2" 0 103 amp=110 pan=0 -104 %font "FluidR3_GM.sf2" 0 104 amp=66 pan=0 -105 %font "FluidR3_GM.sf2" 0 105 amp=120 pan=0 -106 %font "FluidR3_GM.sf2" 0 106 amp=77 pan=0 -107 %font "FluidR3_GM.sf2" 0 107 amp=182 pan=0 -108 %font "FluidR3_GM.sf2" 0 108 amp=88 pan=0 -109 %font "FluidR3_GM.sf2" 0 109 amp=62 pan=0 -110 %font "FluidR3_GM.sf2" 0 110 amp=45 pan=0 -111 %font "FluidR3_GM.sf2" 0 111 amp=78 pan=0 -112 %font "FluidR3_GM.sf2" 0 112 amp=72 pan=0 -113 %font "FluidR3_GM.sf2" 0 113 amp=122 pan=0 -114 %font "FluidR3_GM.sf2" 0 114 amp=47 pan=0 -115 %font "FluidR3_GM.sf2" 0 115 amp=142 pan=0 -116 %font "FluidR3_GM.sf2" 0 116 amp=61 pan=0 -117 %font "FluidR3_GM.sf2" 0 117 amp=83 pan=0 -118 %font "FluidR3_GM.sf2" 0 118 amp=42 pan=0 -119 %font "FluidR3_GM.sf2" 0 119 amp=75 pan=0 -120 %font "FluidR3_GM.sf2" 0 120 amp=56 pan=0 -121 %font "FluidR3_GM.sf2" 0 121 amp=13 pan=0 -122 %font "FluidR3_GM.sf2" 0 122 amp=113 pan=0 -123 %font "FluidR3_GM.sf2" 0 123 amp=80 pan=0 -124 %font "FluidR3_GM.sf2" 0 124 amp=91 pan=0 -125 %font "FluidR3_GM.sf2" 0 125 amp=67 pan=0 -126 %font "FluidR3_GM.sf2" 0 126 amp=31 pan=0 -127 %font "FluidR3_GM.sf2" 0 127 amp=117 pan=0 - -bank 8 -4 %font "FluidR3_GM.sf2" 8 4 amp=46 pan=0 -5 %font "FluidR3_GM.sf2" 8 5 amp=37 pan=0 -6 %font "FluidR3_GM.sf2" 8 6 amp=57 pan=0 -14 %font "FluidR3_GM.sf2" 8 14 amp=35 pan=0 -16 %font "FluidR3_GM.sf2" 8 16 amp=118 pan=0 -17 %font "FluidR3_GM.sf2" 8 17 amp=96 pan=0 -19 %font "FluidR3_GM.sf2" 8 19 amp=78 pan=0 -21 %font "FluidR3_GM.sf2" 8 21 amp=24 pan=0 -24 %font "FluidR3_GM.sf2" 8 24 amp=123 pan=0 -25 %font "FluidR3_GM.sf2" 8 25 amp=114 pan=0 -26 %font "FluidR3_GM.sf2" 8 26 amp=111 pan=0 -28 %font "FluidR3_GM.sf2" 8 28 amp=25 pan=0 -30 %font "FluidR3_GM.sf2" 8 30 amp=38 pan=0 -31 %font "FluidR3_GM.sf2" 8 31 amp=109 pan=0 -38 %font "FluidR3_GM.sf2" 8 38 amp=59 pan=0 -39 %font "FluidR3_GM.sf2" 8 39 amp=51 pan=0 -40 %font "FluidR3_GM.sf2" 8 40 amp=46 pan=0 -48 %font "FluidR3_GM.sf2" 8 48 amp=52 pan=0 -50 %font "FluidR3_GM.sf2" 8 50 amp=32 pan=0 -61 %font "FluidR3_GM.sf2" 8 61 amp=87 pan=0 -62 %font "FluidR3_GM.sf2" 8 62 amp=49 pan=0 -63 %font "FluidR3_GM.sf2" 8 63 amp=78 pan=0 -80 %font "FluidR3_GM.sf2" 8 80 amp=84 pan=0 -107 %font "FluidR3_GM.sf2" 8 107 amp=93 pan=0 -115 %font "FluidR3_GM.sf2" 8 115 amp=115 pan=0 -116 %font "FluidR3_GM.sf2" 8 116 amp=62 pan=0 -117 %font "FluidR3_GM.sf2" 8 117 amp=73 pan=0 -118 %font "FluidR3_GM.sf2" 8 118 amp=131 pan=0 - -bank 9 -125 %font "FluidR3_GM.sf2" 9 125 amp=51 pan=0 - -bank 16 -25 %font "FluidR3_GM.sf2" 16 25 amp=82 pan=0 - -bank 126 -0 %font "FluidR3_GM.sf2" 0 1 amp=55 pan=0 -1 %font "FluidR3_GM.sf2" 0 1 amp=55 pan=0 -2 %font "FluidR3_GM.sf2" 0 1 amp=55 pan=0 -3 %font "FluidR3_GM.sf2" 0 3 amp=31 pan=0 -4 %font "FluidR3_GM.sf2" 0 0 amp=40 pan=0 -5 %font "FluidR3_GM.sf2" 0 1 amp=55 pan=0 -6 %font "FluidR3_GM.sf2" 0 1 amp=55 pan=0 -7 %font "FluidR3_GM.sf2" 0 4 amp=40 pan=0 -8 %font "FluidR3_GM.sf2" 0 4 amp=35 pan=0 -9 %font "FluidR3_GM.sf2" 0 5 amp=37 pan=0 -10 %font "FluidR3_GM.sf2" 0 25 amp=106 pan=0 -11 %font "FluidR3_GM.sf2" 0 25 amp=107 pan=0 -12 %font "FluidR3_GM.sf2" 0 26 amp=41 pan=0 -13 %font "FluidR3_GM.sf2" 0 26 amp=47 pan=0 -14 %font "FluidR3_GM.sf2" 0 28 amp=109 pan=0 -15 %font "FluidR3_GM.sf2" 0 36 amp=92 pan=0 -16 %font "FluidR3_GM.sf2" 0 36 amp=92 pan=0 -17 %font "FluidR3_GM.sf2" 0 36 amp=92 pan=0 -18 %font "FluidR3_GM.sf2" 0 36 amp=92 pan=0 -19 %font "FluidR3_GM.sf2" 0 37 amp=98 pan=0 -20 %font "FluidR3_GM.sf2" 0 37 amp=98 pan=0 -21 %font "FluidR3_GM.sf2" 0 37 amp=98 pan=0 -22 %font "FluidR3_GM.sf2" 0 37 amp=98 pan=0 -23 %font "FluidR3_GM.sf2" 0 33 amp=91 pan=0 -24 %font "FluidR3_GM.sf2" 0 33 amp=92 pan=0 -25 %font "FluidR3_GM.sf2" 0 34 amp=137 pan=0 -26 %font "FluidR3_GM.sf2" 0 34 amp=138 pan=0 -27 %font "FluidR3_GM.sf2" 0 35 amp=107 pan=0 -28 %font "FluidR3_GM.sf2" 0 32 amp=195 pan=0 -29 %font "FluidR3_GM.sf2" 0 52 amp=78 pan=0 -30 %font "FluidR3_GM.sf2" 0 52 amp=77 pan=0 -31 %font "FluidR3_GM.sf2" 0 52 amp=78 pan=0 -32 %font "FluidR3_GM.sf2" 0 52 amp=78 pan=0 -33 %font "FluidR3_GM.sf2" 0 49 amp=72 pan=0 -34 %font "FluidR3_GM.sf2" 0 48 amp=64 pan=0 -35 %font "FluidR3_GM.sf2" 0 50 amp=42 pan=0 -36 %font "FluidR3_GM.sf2" 0 50 amp=32 pan=0 -37 %font "FluidR3_GM.sf2" 0 16 amp=70 pan=0 -38 %font "FluidR3_GM.sf2" 0 16 amp=98 pan=0 -39 %font "FluidR3_GM.sf2" 0 16 amp=98 pan=0 -40 %font "FluidR3_GM.sf2" 0 17 amp=144 pan=0 -41 %font "FluidR3_GM.sf2" 0 16 amp=98 pan=0 -42 %font "FluidR3_GM.sf2" 0 16 amp=98 pan=0 -43 %font "FluidR3_GM.sf2" 0 17 amp=144 pan=0 -44 %font "FluidR3_GM.sf2" 0 17 amp=144 pan=0 -45 %font "FluidR3_GM.sf2" 0 17 amp=144 pan=0 -46 %font "FluidR3_GM.sf2" 0 56 amp=94 pan=0 -47 %font "FluidR3_GM.sf2" 0 56 amp=95 pan=0 -48 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -49 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -50 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -51 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -52 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -53 %font "FluidR3_GM.sf2" 0 57 amp=38 pan=0 -54 %font "FluidR3_GM.sf2" 0 65 amp=29 pan=0 -55 %font "FluidR3_GM.sf2" 0 66 amp=41 pan=0 -56 %font "FluidR3_GM.sf2" 0 67 amp=65 pan=0 -57 %font "FluidR3_GM.sf2" 0 65 amp=29 pan=0 -58 %font "FluidR3_GM.sf2" 0 61 amp=47 pan=0 -59 %font "FluidR3_GM.sf2" 0 61 amp=47 pan=0 -60 %font "FluidR3_GM.sf2" 0 61 amp=56 pan=0 -61 %font "FluidR3_GM.sf2" 0 61 amp=56 pan=0 -62 %font "FluidR3_GM.sf2" 0 61 amp=46 pan=0 -63 %font "FluidR3_GM.sf2" 0 55 amp=116 pan=0 - -bank 127 -8 %font "FluidR3_GM.sf2" 0 16 amp=59 pan=0 -9 %font "FluidR3_GM.sf2" 0 17 amp=87 pan=0 -10 %font "FluidR3_GM.sf2" 0 18 amp=86 pan=0 -11 %font "FluidR3_GM.sf2" 0 18 amp=64 pan=0 -12 %font "FluidR3_GM.sf2" 0 19 amp=55 pan=0 -13 %font "FluidR3_GM.sf2" 0 19 amp=94 pan=0 -14 %font "FluidR3_GM.sf2" 0 20 amp=18 pan=0 -15 %font "FluidR3_GM.sf2" 0 21 amp=45 pan=0 -16 %font "FluidR3_GM.sf2" 0 6 amp=60 pan=0 -17 %font "FluidR3_GM.sf2" 0 6 amp=53 pan=0 -18 %font "FluidR3_GM.sf2" 0 6 amp=60 pan=0 -19 %font "FluidR3_GM.sf2" 0 7 amp=40 pan=0 -20 %font "FluidR3_GM.sf2" 0 7 amp=71 pan=0 -21 %font "FluidR3_GM.sf2" 0 7 amp=46 pan=0 -22 %font "FluidR3_GM.sf2" 0 8 amp=18 pan=0 -23 %font "FluidR3_GM.sf2" 0 8 amp=19 pan=0 -24 %font "FluidR3_GM.sf2" 0 62 amp=83 pan=0 -25 %font "FluidR3_GM.sf2" 0 63 amp=141 pan=0 -26 %font "FluidR3_GM.sf2" 0 62 amp=88 pan=0 -27 %font "FluidR3_GM.sf2" 0 63 amp=222 pan=0 -28 %font "FluidR3_GM.sf2" 0 38 amp=38 pan=0 -29 %font "FluidR3_GM.sf2" 0 39 amp=10 pan=0 -30 %font "FluidR3_GM.sf2" 0 38 amp=38 pan=0 -31 %font "FluidR3_GM.sf2" 0 39 amp=14 pan=0 -32 %font "FluidR3_GM.sf2" 0 88 amp=108 pan=0 -33 %font "FluidR3_GM.sf2" 0 89 amp=12 pan=0 -34 %font "FluidR3_GM.sf2" 0 52 amp=46 pan=0 -35 %font "FluidR3_GM.sf2" 0 113 amp=131 pan=0 -36 %font "FluidR3_GM.sf2" 0 97 amp=74 pan=0 -37 %font "FluidR3_GM.sf2" 0 96 amp=27 pan=0 -38 %font "FluidR3_GM.sf2" 0 91 amp=32 pan=0 -39 %font "FluidR3_GM.sf2" 0 85 amp=30 pan=0 -40 %font "FluidR3_GM.sf2" 0 102 amp=83 pan=0 -41 %font "FluidR3_GM.sf2" 0 101 amp=85 pan=0 -42 %font "FluidR3_GM.sf2" 0 68 amp=21 pan=0 -43 %font "FluidR3_GM.sf2" 0 95 amp=94 pan=0 -44 %font "FluidR3_GM.sf2" 0 86 amp=17 pan=0 -45 %font "FluidR3_GM.sf2" 0 103 amp=116 pan=0 -46 %font "FluidR3_GM.sf2" 0 88 amp=41 pan=0 -47 %font "FluidR3_GM.sf2" 0 80 amp=22 pan=0 -48 %font "FluidR3_GM.sf2" 0 48 amp=55 pan=0 -49 %font "FluidR3_GM.sf2" 0 49 amp=69 pan=0 -51 %font "FluidR3_GM.sf2" 0 45 amp=25 pan=0 -52 %font "FluidR3_GM.sf2" 0 40 amp=35 pan=0 -53 %font "FluidR3_GM.sf2" 0 40 amp=32 pan=0 -54 %font "FluidR3_GM.sf2" 0 42 amp=40 pan=0 -55 %font "FluidR3_GM.sf2" 0 42 amp=40 pan=0 -56 %font "FluidR3_GM.sf2" 0 43 amp=79 pan=0 -57 %font "FluidR3_GM.sf2" 0 46 amp=26 pan=0 -58 %font "FluidR3_GM.sf2" 0 46 amp=35 pan=0 -59 %font "FluidR3_GM.sf2" 0 24 amp=60 pan=0 -60 %font "FluidR3_GM.sf2" 0 24 amp=46 pan=0 -61 %font "FluidR3_GM.sf2" 0 26 amp=39 pan=0 -62 %font "FluidR3_GM.sf2" 0 27 amp=83 pan=0 -63 %font "FluidR3_GM.sf2" 0 104 amp=40 pan=0 -64 %font "FluidR3_GM.sf2" 0 32 amp=85 pan=0 -65 %font "FluidR3_GM.sf2" 0 33 amp=51 pan=0 -66 %font "FluidR3_GM.sf2" 0 34 amp=67 pan=0 -67 %font "FluidR3_GM.sf2" 0 39 amp=20 pan=0 -68 %font "FluidR3_GM.sf2" 0 36 amp=71 pan=0 -69 %font "FluidR3_GM.sf2" 0 37 amp=72 pan=0 -70 %font "FluidR3_GM.sf2" 0 35 amp=58 pan=0 -71 %font "FluidR3_GM.sf2" 0 35 amp=42 pan=0 -72 %font "FluidR3_GM.sf2" 0 73 amp=19 pan=0 -73 %font "FluidR3_GM.sf2" 0 73 amp=33 pan=0 -74 %font "FluidR3_GM.sf2" 0 72 amp=47 pan=0 -75 %font "FluidR3_GM.sf2" 0 72 amp=30 pan=0 -76 %font "FluidR3_GM.sf2" 0 74 amp=64 pan=0 -77 %font "FluidR3_GM.sf2" 0 75 amp=40 pan=0 -78 %font "FluidR3_GM.sf2" 0 64 amp=53 pan=0 -79 %font "FluidR3_GM.sf2" 0 65 amp=24 pan=0 -80 %font "FluidR3_GM.sf2" 0 66 amp=54 pan=0 -81 %font "FluidR3_GM.sf2" 0 67 amp=50 pan=0 -82 %font "FluidR3_GM.sf2" 0 71 amp=25 pan=0 -83 %font "FluidR3_GM.sf2" 0 71 amp=22 pan=0 -84 %font "FluidR3_GM.sf2" 0 68 amp=35 pan=0 -85 %font "FluidR3_GM.sf2" 0 69 amp=66 pan=0 -86 %font "FluidR3_GM.sf2" 0 70 amp=35 pan=0 -87 %font "FluidR3_GM.sf2" 0 22 amp=56 pan=0 -88 %font "FluidR3_GM.sf2" 0 56 amp=142 pan=0 -89 %font "FluidR3_GM.sf2" 0 56 amp=124 pan=0 -90 %font "FluidR3_GM.sf2" 0 57 amp=88 pan=0 -91 %font "FluidR3_GM.sf2" 0 57 amp=51 pan=0 -92 %font "FluidR3_GM.sf2" 0 60 amp=98 pan=0 -93 %font "FluidR3_GM.sf2" 0 60 amp=136 pan=0 -94 %font "FluidR3_GM.sf2" 0 58 amp=63 pan=0 -95 %font "FluidR3_GM.sf2" 0 61 amp=53 pan=0 -96 %font "FluidR3_GM.sf2" 0 61 amp=47 pan=0 -97 %font "FluidR3_GM.sf2" 0 11 amp=28 pan=0 -98 %font "FluidR3_GM.sf2" 0 11 amp=31 pan=0 -99 %font "FluidR3_GM.sf2" 0 12 amp=14 pan=0 -100 %font "FluidR3_GM.sf2" 0 88 amp=38 pan=0 -101 %font "FluidR3_GM.sf2" 0 9 amp=35 pan=0 -102 %font "FluidR3_GM.sf2" 0 14 amp=48 pan=0 -103 %font "FluidR3_GM.sf2" 0 13 amp=47 pan=0 -104 %font "FluidR3_GM.sf2" 0 12 amp=21 pan=0 -105 %font "FluidR3_GM.sf2" 0 107 amp=89 pan=0 -106 %font "FluidR3_GM.sf2" 0 111 amp=53 pan=0 -107 %font "FluidR3_GM.sf2" 0 77 amp=49 pan=0 -108 %font "FluidR3_GM.sf2" 0 78 amp=63 pan=0 -109 %font "FluidR3_GM.sf2" 0 78 amp=32 pan=0 -110 %font "FluidR3_GM.sf2" 0 76 amp=44 pan=0 -111 %font "FluidR3_GM.sf2" 0 76 amp=48 pan=0 -112 %font "FluidR3_GM.sf2" 0 47 amp=28 pan=0 -113 %font "FluidR3_GM.sf2" 0 117 amp=42 pan=0 -114 %font "FluidR3_GM.sf2" 0 118 amp=13 pan=0 -115 %font "FluidR3_GM.sf2" 0 118 amp=14 pan=0 -116 %font "FluidR3_GM.sf2" 0 118 amp=22 pan=0 -117 %font "FluidR3_GM.sf2" 0 116 amp=52 pan=0 -118 %font "FluidR3_GM.sf2" 0 116 amp=18 pan=0 -119 %font "FluidR3_GM.sf2" 128 0 49 amp=34 pan=0 # Crsh 1(L) Crsh 1(R) - -drumset 0 -0 %font "FluidR3_GM.sf2" 128 0 35 amp=206 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -1 %font "FluidR3_GM.sf2" 128 0 35 amp=138 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -2 %font "FluidR3_GM.sf2" 128 1 35 amp=189 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -3 %font "FluidR3_GM.sf2" 128 1 35 amp=129 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -4 %font "FluidR3_GM.sf2" 128 0 35 amp=100 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -5 %font "FluidR3_GM.sf2" 128 0 35 amp=107 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -6 %font "FluidR3_GM.sf2" 128 32 35 amp=89 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -7 %font "FluidR3_GM.sf2" 128 32 35 amp=119 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -8 %font "FluidR3_GM.sf2" 128 8 35 amp=249 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -9 %font "FluidR3_GM.sf2" 128 8 35 amp=143 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -10 %font "FluidR3_GM.sf2" 128 16 35 amp=86 pan=0 # Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R -11 %font "FluidR3_GM.sf2" 128 16 36 amp=85 pan=0 # Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R -12 %font "FluidR3_GM.sf2" 128 24 35 amp=86 pan=0 # Elec Kick1(L) Elec Kick1(R) -13 %font "FluidR3_GM.sf2" 128 24 36 amp=219 pan=0 # Elec Kick2(L) Elec Kick2(R) -14 %font "FluidR3_GM.sf2" 128 25 35 amp=59 pan=0 # 808 Kick 1 808 Kick 1 -15 %font "FluidR3_GM.sf2" 128 25 36 amp=47 pan=0 # 808 Kick 2 808 Kick 2 -16 %font "FluidR3_GM.sf2" 128 25 35 amp=60 pan=0 # 808 Kick 1 808 Kick 1 -27 %font "FluidR3_GM.sf2" 128 0 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 0 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 0 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 0 30 amp=27 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 0 31 amp=119 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 0 32 amp=128 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 0 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 0 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 0 35 amp=129 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -36 %font "FluidR3_GM.sf2" 128 0 35 amp=141 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -37 %font "FluidR3_GM.sf2" 128 0 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 0 38 amp=110 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 0 39 amp=38 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 0 40 amp=241 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 0 41 amp=105 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 0 42 amp=20 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 0 43 amp=73 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 0 44 amp=10 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 0 45 amp=132 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 0 46 amp=89 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 0 47 amp=167 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 0 48 amp=148 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 0 49 amp=79 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 0 50 amp=78 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 0 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 0 52 amp=84 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 0 53 amp=55 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 0 54 amp=62 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 0 55 amp=49 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 0 56 amp=100 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 0 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 0 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 0 59 amp=25 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 0 60 amp=9 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 0 61 amp=55 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 0 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 0 63 amp=80 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 0 64 amp=46 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 0 65 amp=153 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 0 66 amp=96 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 0 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 0 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 0 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 0 70 amp=49 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 0 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 0 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 0 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 0 74 amp=33 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 0 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 0 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 0 77 amp=131 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 0 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 0 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 0 80 amp=44 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 0 81 amp=64 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 0 82 amp=249 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 0 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 0 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 0 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 0 86 amp=48 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 0 87 amp=56 pan=-31 # Long Taiko Hit Long Taiko Hit -97 %font "FluidR3_GM.sf2" 128 0 38 amp=108 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -98 %font "FluidR3_GM.sf2" 128 0 40 amp=130 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -99 %font "FluidR3_GM.sf2" 128 1 38 amp=94 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -100 %font "FluidR3_GM.sf2" 128 1 40 amp=79 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -101 %font "FluidR3_GM.sf2" 128 0 40 amp=220 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -102 %font "FluidR3_GM.sf2" 128 0 38 amp=109 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -103 %font "FluidR3_GM.sf2" 128 0 40 amp=160 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -104 %font "FluidR3_GM.sf2" 128 0 38 amp=133 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -105 %font "FluidR3_GM.sf2" 128 32 38 amp=88 pan=0 # Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) -106 %font "FluidR3_GM.sf2" 128 32 40 amp=138 pan=0 # Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) -107 %font "FluidR3_GM.sf2" 128 8 38 amp=75 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -108 %font "FluidR3_GM.sf2" 128 8 40 amp=92 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -109 %font "FluidR3_GM.sf2" 128 16 38 amp=74 pan=0 # Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) -110 %font "FluidR3_GM.sf2" 128 16 40 amp=104 pan=0 # Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) -111 %font "FluidR3_GM.sf2" 128 24 40 amp=76 pan=0 # Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) -112 %font "FluidR3_GM.sf2" 128 11 38 amp=67 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -113 %font "FluidR3_GM.sf2" 128 11 40 amp=100 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -114 %font "FluidR3_GM.sf2" 128 11 38 amp=71 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -115 %font "FluidR3_GM.sf2" 128 24 40 amp=51 pan=0 # Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) -116 %font "FluidR3_GM.sf2" 128 24 38 amp=99 pan=0 # Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) -117 %font "FluidR3_GM.sf2" 128 24 38 amp=155 pan=0 # Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) -118 %font "FluidR3_GM.sf2" 128 25 38 amp=39 pan=0 # 808 Snare 1 808 Snare 1 -119 %font "FluidR3_GM.sf2" 128 25 38 amp=34 pan=0 # 808 Snare 1 808 Snare 1 -120 %font "FluidR3_GM.sf2" 128 25 40 amp=33 pan=0 # 808 Snare 2 808 Snare 2 -121 %font "FluidR3_GM.sf2" 128 25 38 amp=27 pan=0 # 808 Snare 1 808 Snare 1 -122 %font "FluidR3_GM.sf2" 128 25 40 amp=48 pan=0 # 808 Snare 2 808 Snare 2 -123 %font "FluidR3_GM.sf2" 128 9 38 amp=79 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -124 %font "FluidR3_GM.sf2" 128 10 38 amp=58 pan=0 # RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) -125 %font "FluidR3_GM.sf2" 128 11 38 amp=113 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -126 %font "FluidR3_GM.sf2" 128 11 38 amp=77 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -127 %font "FluidR3_GM.sf2" 128 11 38 amp=88 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) - -drumset 1 -27 %font "FluidR3_GM.sf2" 128 1 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 1 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 1 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 1 30 amp=43 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 1 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 1 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 1 33 amp=53 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 1 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 1 35 amp=139 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -36 %font "FluidR3_GM.sf2" 128 1 35 amp=210 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -37 %font "FluidR3_GM.sf2" 128 1 37 amp=186 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 1 38 amp=154 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -39 %font "FluidR3_GM.sf2" 128 1 39 amp=58 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 1 40 amp=52 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -41 %font "FluidR3_GM.sf2" 128 1 41 amp=153 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 1 42 amp=33 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 1 43 amp=73 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 1 44 amp=14 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 1 45 amp=132 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 1 46 amp=47 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 1 47 amp=112 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 1 48 amp=217 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 1 49 amp=83 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 1 50 amp=247 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 1 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 1 52 amp=65 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 1 53 amp=24 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 1 54 amp=17 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 1 55 amp=51 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 1 56 amp=103 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 1 57 amp=47 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 1 58 amp=64 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 1 59 amp=26 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 1 60 amp=87 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 1 61 amp=88 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 1 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 1 63 amp=78 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 1 64 amp=46 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 1 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 1 66 amp=145 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 1 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 1 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 1 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 1 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 1 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 1 72 amp=76 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 1 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 1 74 amp=32 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 1 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 1 76 amp=69 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 1 77 amp=81 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 1 78 amp=105 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 1 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 1 80 amp=45 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 1 81 amp=63 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 1 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 1 83 amp=165 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 1 84 amp=95 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 1 85 amp=11 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 1 86 amp=46 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 1 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 2 -27 %font "FluidR3_GM.sf2" 128 2 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 2 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 2 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 2 30 amp=27 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 2 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 2 32 amp=129 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 2 33 amp=85 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 2 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 2 35 amp=110 pan=0 # Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) -37 %font "FluidR3_GM.sf2" 128 2 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 2 38 amp=281 pan=0 # Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) -39 %font "FluidR3_GM.sf2" 128 2 39 amp=38 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 2 40 amp=221 pan=0 # Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) -41 %font "FluidR3_GM.sf2" 128 2 41 amp=105 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 2 42 amp=20 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 2 43 amp=106 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 2 44 amp=16 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 2 45 amp=194 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 2 46 amp=62 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 2 47 amp=114 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 2 48 amp=148 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 2 49 amp=81 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 2 50 amp=245 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 2 51 amp=25 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 2 52 amp=38 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 2 53 amp=21 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 2 54 amp=17 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 2 55 amp=71 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 2 56 amp=102 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 2 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 2 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 2 59 amp=16 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 2 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 2 61 amp=88 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 2 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 2 63 amp=78 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 2 64 amp=45 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 2 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 2 66 amp=95 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 2 67 amp=92 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 2 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 2 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 2 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 2 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 2 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 2 73 amp=69 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 2 74 amp=30 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 2 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 2 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 2 77 amp=83 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 2 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 2 79 amp=49 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 2 80 amp=63 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 2 81 amp=63 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 2 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 2 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 2 84 amp=35 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 2 85 amp=127 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 2 86 amp=51 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 2 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 3 -27 %font "FluidR3_GM.sf2" 128 3 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 3 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 3 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 3 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 3 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 3 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 3 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 3 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 3 35 amp=100 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -37 %font "FluidR3_GM.sf2" 128 3 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 3 38 amp=100 pan=0 # Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 3 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 3 40 amp=100 pan=0 # Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 3 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 3 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 3 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 3 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 3 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 3 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 3 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 3 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 3 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 3 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 3 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 3 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 3 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 3 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 3 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 3 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 3 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 3 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 3 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 3 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 3 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 3 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 3 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 3 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 3 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 3 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 3 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 3 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 3 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 3 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 3 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 3 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 3 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 3 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 3 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 3 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 3 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 3 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 3 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 3 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 3 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 3 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 3 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 3 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 3 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 3 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 3 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 4 -27 %font "FluidR3_GM.sf2" 128 4 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 4 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 4 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 4 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 4 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 4 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 4 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 4 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 4 35 amp=100 pan=0 # Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) -37 %font "FluidR3_GM.sf2" 128 4 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 4 38 amp=100 pan=0 # Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) -39 %font "FluidR3_GM.sf2" 128 4 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 4 40 amp=100 pan=0 # Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) -41 %font "FluidR3_GM.sf2" 128 4 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 4 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 4 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 4 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 4 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 4 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 4 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 4 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 4 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 4 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 4 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 4 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 4 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 4 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 4 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 4 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 4 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 4 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 4 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 4 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 4 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 4 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 4 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 4 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 4 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 4 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 4 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 4 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 4 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 4 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 4 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 4 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 4 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 4 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 4 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 4 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 4 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 4 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 4 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 4 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 4 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 4 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 4 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 4 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 4 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 4 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 4 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 5 -27 %font "FluidR3_GM.sf2" 128 5 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 5 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 5 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 5 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 5 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 5 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 5 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 5 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 5 35 amp=100 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -37 %font "FluidR3_GM.sf2" 128 5 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 5 38 amp=100 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 5 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 5 40 amp=100 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 5 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 5 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 5 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 5 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 5 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 5 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 5 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 5 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 5 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 5 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 5 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 5 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 5 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 5 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 5 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 5 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 5 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 5 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 5 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 5 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 5 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 5 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 5 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 5 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 5 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 5 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 5 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 5 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 5 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 5 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 5 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 5 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 5 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 5 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 5 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 5 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 5 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 5 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 5 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 5 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 5 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 5 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 5 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 5 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 5 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 5 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 5 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 6 -27 %font "FluidR3_GM.sf2" 128 6 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 6 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 6 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 6 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 6 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 6 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 6 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 6 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 6 35 amp=100 pan=0 # Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) -37 %font "FluidR3_GM.sf2" 128 6 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 6 38 amp=100 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 6 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 6 40 amp=100 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 6 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 6 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 6 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 6 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 6 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 6 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 6 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 6 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 6 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 6 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 6 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 6 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 6 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 6 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 6 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 6 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 6 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 6 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 6 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 6 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 6 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 6 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 6 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 6 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 6 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 6 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 6 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 6 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 6 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 6 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 6 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 6 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 6 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 6 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 6 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 6 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 6 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 6 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 6 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 6 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 6 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 6 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 6 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 6 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 6 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 6 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 6 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 7 -27 %font "FluidR3_GM.sf2" 128 7 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 7 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 7 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 7 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 7 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 7 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 7 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 7 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 7 35 amp=100 pan=0 # Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) -37 %font "FluidR3_GM.sf2" 128 7 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 7 38 amp=100 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -39 %font "FluidR3_GM.sf2" 128 7 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 7 40 amp=100 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -41 %font "FluidR3_GM.sf2" 128 7 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 7 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 7 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 7 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 7 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 7 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 7 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 7 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 7 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 7 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 7 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 7 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 7 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 7 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 7 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 7 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 7 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 7 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 7 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 7 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 7 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 7 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 7 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 7 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 7 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 7 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 7 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 7 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 7 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 7 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 7 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 7 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 7 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 7 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 7 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 7 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 7 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 7 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 7 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 7 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 7 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 7 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 7 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 7 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 7 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 7 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 7 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 8 -27 %font "FluidR3_GM.sf2" 128 8 27 amp=45 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 8 28 amp=70 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 8 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 8 30 amp=27 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 8 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 8 32 amp=131 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 8 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 8 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 8 35 amp=149 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -37 %font "FluidR3_GM.sf2" 128 8 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 8 38 amp=125 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 8 39 amp=58 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 8 40 amp=126 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 8 41 amp=84 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 8 42 amp=20 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 8 43 amp=62 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 8 44 amp=31 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 8 45 amp=231 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 8 46 amp=64 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 8 47 amp=127 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 8 48 amp=129 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 8 49 amp=83 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 8 50 amp=238 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 8 51 amp=29 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 8 52 amp=84 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 8 53 amp=24 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 8 54 amp=63 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 8 55 amp=51 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 8 56 amp=158 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 8 57 amp=50 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 8 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 8 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 8 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 8 61 amp=53 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 8 62 amp=46 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 8 63 amp=78 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 8 64 amp=45 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 8 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 8 66 amp=96 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 8 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 8 68 amp=103 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 8 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 8 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 8 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 8 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 8 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 8 74 amp=30 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 8 75 amp=123 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 8 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 8 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 8 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 8 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 8 80 amp=64 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 8 81 amp=64 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 8 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 8 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 8 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 8 85 amp=84 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 8 86 amp=71 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 8 87 amp=78 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 9 -27 %font "FluidR3_GM.sf2" 128 9 27 amp=32 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 9 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 9 29 amp=52 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 9 30 amp=35 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 9 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 9 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 9 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 9 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 9 35 amp=288 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -36 %font "FluidR3_GM.sf2" 128 25 36 amp=68 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 9 37 amp=210 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 9 38 amp=79 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -39 %font "FluidR3_GM.sf2" 128 9 39 amp=38 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 9 40 amp=57 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -41 %font "FluidR3_GM.sf2" 128 9 41 amp=237 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 9 42 amp=30 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 9 43 amp=95 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 9 44 amp=20 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 9 45 amp=178 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 9 46 amp=64 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 9 47 amp=159 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 9 48 amp=91 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 9 49 amp=66 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 9 50 amp=100 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 9 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 9 52 amp=28 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 9 53 amp=55 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 9 54 amp=20 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 9 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 9 56 amp=55 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 9 57 amp=50 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 9 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 9 59 amp=26 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 9 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 9 61 amp=54 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 9 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 9 63 amp=78 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 9 64 amp=72 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 9 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 9 66 amp=95 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 9 67 amp=58 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 9 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 9 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 9 70 amp=48 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 9 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 9 72 amp=76 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 9 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 9 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 9 75 amp=68 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 9 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 9 77 amp=133 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 9 78 amp=87 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 9 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 9 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 9 81 amp=81 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 9 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 9 83 amp=165 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 9 84 amp=35 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 9 85 amp=84 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 9 86 amp=48 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 9 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 10 -27 %font "FluidR3_GM.sf2" 128 10 27 amp=32 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 10 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 10 29 amp=32 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 10 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 10 31 amp=76 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 10 32 amp=178 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 10 33 amp=53 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 10 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 10 35 amp=63 pan=0 # Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) -36 %font "FluidR3_GM.sf2" 128 25 36 amp=96 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 10 37 amp=118 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 10 38 amp=68 pan=0 # RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 10 39 amp=71 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 10 40 amp=70 pan=0 # RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 10 41 amp=237 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 10 42 amp=45 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 10 43 amp=95 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 10 44 amp=39 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 10 45 amp=178 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 10 46 amp=161 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 10 47 amp=159 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 10 48 amp=91 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 10 49 amp=72 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 10 50 amp=34 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 10 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 10 52 amp=28 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 10 53 amp=55 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 10 54 amp=94 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 10 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 10 56 amp=55 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 10 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 10 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 10 59 amp=26 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 10 60 amp=87 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 10 61 amp=54 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 10 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 10 63 amp=80 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 10 64 amp=46 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 10 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 10 66 amp=95 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 10 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 10 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 10 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 10 70 amp=48 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 10 71 amp=95 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 10 72 amp=76 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 10 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 10 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 10 75 amp=64 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 10 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 10 77 amp=131 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 10 78 amp=86 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 10 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 10 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 10 81 amp=53 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 10 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 10 83 amp=164 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 10 84 amp=53 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 10 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 10 86 amp=47 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 10 87 amp=56 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 11 -27 %font "FluidR3_GM.sf2" 128 11 27 amp=32 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 11 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 11 29 amp=32 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 11 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 11 31 amp=119 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 11 32 amp=175 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 11 33 amp=53 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 11 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 11 35 amp=184 pan=0 # Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) -36 %font "FluidR3_GM.sf2" 128 25 36 amp=111 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 11 37 amp=210 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 11 38 amp=61 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -39 %font "FluidR3_GM.sf2" 128 11 39 amp=57 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 11 40 amp=126 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -41 %font "FluidR3_GM.sf2" 128 11 41 amp=130 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 11 42 amp=36 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 11 43 amp=143 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 11 44 amp=52 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 11 45 amp=170 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 11 46 amp=106 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 11 47 amp=148 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 11 48 amp=218 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 11 49 amp=106 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 11 50 amp=160 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 11 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 11 52 amp=28 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 11 53 amp=41 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 11 54 amp=94 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 11 55 amp=72 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 11 56 amp=55 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 11 57 amp=58 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 11 58 amp=47 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 11 59 amp=21 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 11 60 amp=106 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 11 61 amp=97 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 11 62 amp=69 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 11 63 amp=89 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 11 64 amp=88 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 11 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 11 66 amp=145 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 11 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 11 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 11 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 11 70 amp=48 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 11 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 11 72 amp=76 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 11 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 11 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 11 75 amp=71 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 11 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 11 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 11 78 amp=133 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 11 79 amp=79 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 11 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 11 81 amp=53 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 11 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 11 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 11 84 amp=52 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 11 85 amp=127 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 11 86 amp=48 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 11 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 12 -27 %font "FluidR3_GM.sf2" 128 12 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 12 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 12 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 12 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 12 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 12 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 12 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 12 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 12 35 amp=100 pan=0 # Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) -37 %font "FluidR3_GM.sf2" 128 12 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 12 38 amp=100 pan=0 # Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) -39 %font "FluidR3_GM.sf2" 128 12 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 12 40 amp=100 pan=0 # Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) -41 %font "FluidR3_GM.sf2" 128 12 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 12 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 12 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 12 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 12 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 12 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 12 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 12 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 12 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 12 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 12 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 12 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 12 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 12 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 12 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 12 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 12 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 12 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 12 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 12 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 12 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 12 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 12 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 12 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 12 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 12 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 12 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 12 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 12 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 12 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 12 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 12 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 12 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 12 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 12 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 12 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 12 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 12 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 12 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 12 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 12 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 12 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 12 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 12 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 12 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 12 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 12 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 13 -27 %font "FluidR3_GM.sf2" 128 13 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 13 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 13 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 13 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 13 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 13 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 13 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 13 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 13 35 amp=100 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -37 %font "FluidR3_GM.sf2" 128 13 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 13 38 amp=100 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 13 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 13 40 amp=100 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 13 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 13 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 13 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 13 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 13 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 13 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 13 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 13 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 13 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 13 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 13 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 13 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 13 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 13 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 13 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 13 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 13 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 13 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 13 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 13 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 13 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 13 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 13 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 13 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 13 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 13 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 13 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 13 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 13 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 13 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 13 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 13 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 13 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 13 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 13 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 13 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 13 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 13 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 13 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 13 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 13 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 13 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 13 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 13 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 13 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 13 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 13 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 14 -27 %font "FluidR3_GM.sf2" 128 14 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 14 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 14 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 14 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 14 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 14 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 14 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 14 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 14 35 amp=100 pan=0 # Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) Std Kick 4(L) Std Kick 4(R) -37 %font "FluidR3_GM.sf2" 128 14 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 14 38 amp=100 pan=0 # Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) -39 %font "FluidR3_GM.sf2" 128 14 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 14 40 amp=100 pan=0 # Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) -41 %font "FluidR3_GM.sf2" 128 14 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 14 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 14 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 14 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 14 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 14 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 14 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 14 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 14 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 14 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 14 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 14 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 14 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 14 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 14 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 14 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 14 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 14 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 14 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 14 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 14 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 14 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 14 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 14 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 14 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 14 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 14 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 14 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 14 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 14 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 14 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 14 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 14 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 14 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 14 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 14 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 14 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 14 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 14 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 14 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 14 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 14 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 14 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 14 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 14 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 14 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 14 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 15 -27 %font "FluidR3_GM.sf2" 128 15 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 15 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 15 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 15 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 15 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 15 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 15 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 15 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 15 35 amp=100 pan=0 # Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) -37 %font "FluidR3_GM.sf2" 128 15 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 15 38 amp=100 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 15 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 15 40 amp=100 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 15 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 15 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 15 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 15 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 15 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 15 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 15 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 15 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 15 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 15 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 15 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 15 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 15 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 15 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 15 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 15 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 15 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 15 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 15 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 15 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 15 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 15 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 15 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 15 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 15 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 15 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 15 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 15 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 15 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 15 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 15 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 15 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 15 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 15 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 15 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 15 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 15 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 15 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 15 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 15 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 15 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 15 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 15 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 15 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 15 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 15 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 15 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 16 -27 %font "FluidR3_GM.sf2" 128 16 27 amp=45 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 16 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 16 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 16 30 amp=27 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 16 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 16 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 16 33 amp=86 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 16 34 amp=24 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 16 35 amp=147 pan=0 # Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R -36 %font "FluidR3_GM.sf2" 128 16 36 amp=80 pan=0 # Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R -37 %font "FluidR3_GM.sf2" 128 16 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 16 38 amp=105 pan=0 # Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) -39 %font "FluidR3_GM.sf2" 128 16 39 amp=93 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 16 40 amp=155 pan=0 # Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) -41 %font "FluidR3_GM.sf2" 128 16 41 amp=82 pan=-47 # Tom Floor(L) Tom Floor(R) -42 %font "FluidR3_GM.sf2" 128 16 42 amp=20 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 16 43 amp=79 pan=-28 # Tom Floor(L) Tom Floor(R) -44 %font "FluidR3_GM.sf2" 128 16 44 amp=10 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 16 45 amp=98 pan=-9 # Tom Low(L) Tom Low(R) -46 %font "FluidR3_GM.sf2" 128 16 46 amp=62 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 16 47 amp=59 pan=9 # Tom Med(L) Tom Med(R) -48 %font "FluidR3_GM.sf2" 128 16 48 amp=72 pan=28 # Tom Hi(L) Tom Hi(R) -49 %font "FluidR3_GM.sf2" 128 16 49 amp=83 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 16 50 amp=31 pan=47 # Tom Hi(L) Tom Hi(R) -51 %font "FluidR3_GM.sf2" 128 16 51 amp=29 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 16 52 amp=38 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 16 53 amp=24 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 16 54 amp=17 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 16 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 16 56 amp=103 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 16 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 16 58 amp=65 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 16 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 16 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 16 61 amp=55 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 16 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 16 63 amp=126 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 16 64 amp=70 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 16 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 16 66 amp=95 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 16 67 amp=58 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 16 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 16 69 amp=47 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 16 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 16 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 16 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 16 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 16 74 amp=32 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 16 75 amp=123 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 16 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 16 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 16 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 16 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 16 80 amp=45 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 16 81 amp=97 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 16 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 16 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 16 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 16 85 amp=84 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 16 86 amp=46 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 16 87 amp=78 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 17 -27 %font "FluidR3_GM.sf2" 128 17 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 17 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 17 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 17 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 17 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 17 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 17 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 17 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 17 35 amp=100 pan=0 # Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) Power Kick (L) Power Kick (R) -37 %font "FluidR3_GM.sf2" 128 17 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 17 38 amp=100 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -39 %font "FluidR3_GM.sf2" 128 17 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 17 40 amp=100 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -41 %font "FluidR3_GM.sf2" 128 17 41 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -42 %font "FluidR3_GM.sf2" 128 17 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 17 43 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -44 %font "FluidR3_GM.sf2" 128 17 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 17 45 amp=100 pan=0 # Tom Low(L) Tom Low(R) -46 %font "FluidR3_GM.sf2" 128 17 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 17 47 amp=100 pan=0 # Tom Med(L) Tom Med(R) -48 %font "FluidR3_GM.sf2" 128 17 48 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -49 %font "FluidR3_GM.sf2" 128 17 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 17 50 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -51 %font "FluidR3_GM.sf2" 128 17 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 17 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 17 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 17 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 17 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 17 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 17 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 17 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 17 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 17 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 17 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 17 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 17 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 17 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 17 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 17 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 17 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 17 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 17 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 17 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 17 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 17 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 17 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 17 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 17 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 17 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 17 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 17 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 17 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 17 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 17 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 17 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 17 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 17 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 17 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 17 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 17 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 18 -27 %font "FluidR3_GM.sf2" 128 18 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 18 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 18 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 18 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 18 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 18 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 18 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 18 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 18 35 amp=100 pan=0 # Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) Power Kick 2(L) Power Kick 2(R) -37 %font "FluidR3_GM.sf2" 128 18 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 18 38 amp=100 pan=0 # RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 18 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 18 40 amp=100 pan=0 # RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 18 41 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -42 %font "FluidR3_GM.sf2" 128 18 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 18 43 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -44 %font "FluidR3_GM.sf2" 128 18 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 18 45 amp=100 pan=0 # Tom Low(L) Tom Low(R) -46 %font "FluidR3_GM.sf2" 128 18 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 18 47 amp=100 pan=0 # Tom Med(L) Tom Med(R) -48 %font "FluidR3_GM.sf2" 128 18 48 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -49 %font "FluidR3_GM.sf2" 128 18 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 18 50 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -51 %font "FluidR3_GM.sf2" 128 18 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 18 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 18 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 18 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 18 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 18 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 18 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 18 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 18 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 18 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 18 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 18 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 18 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 18 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 18 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 18 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 18 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 18 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 18 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 18 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 18 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 18 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 18 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 18 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 18 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 18 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 18 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 18 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 18 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 18 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 18 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 18 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 18 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 18 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 18 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 18 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 18 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 19 -27 %font "FluidR3_GM.sf2" 128 19 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 19 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 19 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 19 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 19 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 19 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 19 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 19 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 19 35 amp=100 pan=0 # Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) Power Kick 3(L) Power Kick 3(R) -37 %font "FluidR3_GM.sf2" 128 19 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 19 38 amp=100 pan=0 # RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 19 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 19 40 amp=100 pan=0 # RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 19 41 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -42 %font "FluidR3_GM.sf2" 128 19 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 19 43 amp=100 pan=0 # Tom Floor(L) Tom Floor(R) -44 %font "FluidR3_GM.sf2" 128 19 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 19 45 amp=100 pan=0 # Tom Low(L) Tom Low(R) -46 %font "FluidR3_GM.sf2" 128 19 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 19 47 amp=100 pan=0 # Tom Med(L) Tom Med(R) -48 %font "FluidR3_GM.sf2" 128 19 48 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -49 %font "FluidR3_GM.sf2" 128 19 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 19 50 amp=100 pan=0 # Tom Hi(L) Tom Hi(R) -51 %font "FluidR3_GM.sf2" 128 19 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 19 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 19 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 19 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 19 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 19 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 19 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 19 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 19 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 19 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 19 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 19 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 19 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 19 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 19 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 19 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 19 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 19 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 19 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 19 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 19 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 19 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 19 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 19 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 19 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 19 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 19 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 19 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 19 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 19 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 19 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 19 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 19 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 19 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 19 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 19 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 19 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 24 -27 %font "FluidR3_GM.sf2" 128 24 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 24 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 24 29 amp=31 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 24 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 24 31 amp=74 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 24 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 24 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 24 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 24 35 amp=162 pan=0 # Elec Kick1(L) Elec Kick1(R) -36 %font "FluidR3_GM.sf2" 128 24 36 amp=265 pan=0 # Elec Kick2(L) Elec Kick2(R) -37 %font "FluidR3_GM.sf2" 128 24 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 24 38 amp=151 pan=0 # Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 24 39 amp=58 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 24 40 amp=67 pan=0 # Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) -41 %font "FluidR3_GM.sf2" 128 24 41 amp=180 pan=-47 # ElectTom(L) ElectTom(R) -42 %font "FluidR3_GM.sf2" 128 24 42 amp=33 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 24 43 amp=119 pan=-28 # ElectTom(L) ElectTom(R) -44 %font "FluidR3_GM.sf2" 128 24 44 amp=14 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 24 45 amp=114 pan=-9 # ElectTom(L) ElectTom(R) -46 %font "FluidR3_GM.sf2" 128 24 46 amp=47 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 24 47 amp=116 pan=9 # ElectTom(L) ElectTom(R) -48 %font "FluidR3_GM.sf2" 128 24 48 amp=171 pan=28 # ElectTom(L) ElectTom(R) -49 %font "FluidR3_GM.sf2" 128 24 49 amp=83 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 24 50 amp=53 pan=47 # ElectTom(L) ElectTom(R) -51 %font "FluidR3_GM.sf2" 128 24 51 amp=23 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 24 52 amp=28 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 24 53 amp=41 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 24 54 amp=97 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 24 55 amp=51 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 24 56 amp=101 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 24 57 amp=50 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 24 58 amp=27 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 24 59 amp=25 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 24 60 amp=86 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 24 61 amp=54 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 24 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 24 63 amp=79 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 24 64 amp=45 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 24 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 24 66 amp=96 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 24 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 24 68 amp=65 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 24 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 24 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 24 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 24 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 24 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 24 74 amp=30 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 24 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 24 76 amp=109 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 24 77 amp=82 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 24 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 24 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 24 80 amp=43 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 24 81 amp=64 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 24 82 amp=249 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 24 83 amp=103 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 24 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 24 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 24 86 amp=46 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 24 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 25 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=31 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=35 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=119 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=130 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=54 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 25 36 amp=70 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 25 37 amp=331 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 25 38 amp=29 pan=0 # 808 Snare 1 808 Snare 1 -39 %font "FluidR3_GM.sf2" 128 25 39 amp=45 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 25 40 amp=45 pan=0 # 808 Snare 2 808 Snare 2 -41 %font "FluidR3_GM.sf2" 128 25 41 amp=38 pan=-47 # 808 Tom 1 808 Tom 1 -42 %font "FluidR3_GM.sf2" 128 25 42 amp=21 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 25 43 amp=36 pan=-28 # 808 Tom 2 808 Tom 2 -44 %font "FluidR3_GM.sf2" 128 25 44 amp=70 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 25 45 amp=53 pan=-9 # 808 Tom 3 808 Tom 3 -46 %font "FluidR3_GM.sf2" 128 25 46 amp=78 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 25 47 amp=33 pan=9 # 808 Tom 4 808 Tom 4 -48 %font "FluidR3_GM.sf2" 128 25 48 amp=30 pan=28 # 808 Tom 5 808 Tom 5 -49 %font "FluidR3_GM.sf2" 128 25 49 amp=56 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 25 50 amp=46 pan=47 # 808 Tom 6 808 Tom 6 -51 %font "FluidR3_GM.sf2" 128 25 51 amp=22 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=65 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=24 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 25 54 amp=99 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=44 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=30 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=58 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=15 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=63 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=28 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=66 pan=-31 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=61 pan=-23 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=47 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=78 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=41 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=109 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=81 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=86 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=54 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=35 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=46 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=77 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 26 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=45 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=70 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=31 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=35 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=128 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=97 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 24 35 amp=104 pan=0 # Elec Kick1(L) Elec Kick1(R) -37 %font "FluidR3_GM.sf2" 128 25 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 11 38 amp=71 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -39 %font "FluidR3_GM.sf2" 128 25 39 amp=46 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 11 40 amp=190 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -41 %font "FluidR3_GM.sf2" 128 24 41 amp=123 pan=-47 # ElectTom(L) ElectTom(R) -42 %font "FluidR3_GM.sf2" 128 25 42 amp=34 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 24 43 amp=117 pan=-28 # ElectTom(L) ElectTom(R) -44 %font "FluidR3_GM.sf2" 128 25 44 amp=28 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 24 45 amp=116 pan=-9 # ElectTom(L) ElectTom(R) -46 %font "FluidR3_GM.sf2" 128 25 46 amp=112 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 24 47 amp=114 pan=9 # ElectTom(L) ElectTom(R) -48 %font "FluidR3_GM.sf2" 128 24 48 amp=117 pan=28 # ElectTom(L) ElectTom(R) -49 %font "FluidR3_GM.sf2" 128 25 49 amp=55 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 24 50 amp=53 pan=47 # ElectTom(L) ElectTom(R) -51 %font "FluidR3_GM.sf2" 128 25 51 amp=22 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=80 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=55 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 11 54 amp=59 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=31 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=9 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=53 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=13 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=65 pan=-39 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=48 pan=-31 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=65 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=49 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=32 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=53 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=109 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=86 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=53 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=158 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=165 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=46 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=54 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 27 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=32 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=31 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=35 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=178 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=78 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 25 36 amp=64 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 25 37 amp=352 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 25 38 amp=41 pan=0 # 808 Snare 1 808 Snare 1 -39 %font "FluidR3_GM.sf2" 128 25 39 amp=44 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 25 40 amp=50 pan=0 # 808 Snare 2 808 Snare 2 -41 %font "FluidR3_GM.sf2" 128 25 41 amp=60 pan=-47 # 808 Tom 1 808 Tom 1 -42 %font "FluidR3_GM.sf2" 128 25 42 amp=34 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 25 43 amp=70 pan=-28 # 808 Tom 2 808 Tom 2 -44 %font "FluidR3_GM.sf2" 128 25 44 amp=52 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 25 45 amp=51 pan=-9 # 808 Tom 3 808 Tom 3 -46 %font "FluidR3_GM.sf2" 128 25 46 amp=71 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 25 47 amp=29 pan=9 # 808 Tom 4 808 Tom 4 -48 %font "FluidR3_GM.sf2" 128 25 48 amp=61 pan=28 # 808 Tom 5 808 Tom 5 -49 %font "FluidR3_GM.sf2" 128 25 49 amp=72 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 25 50 amp=11 pan=47 # 808 Tom 6 808 Tom 6 -51 %font "FluidR3_GM.sf2" 128 25 51 amp=22 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=65 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=24 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 25 54 amp=30 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=72 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=91 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=58 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=19 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=70 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=63 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=28 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=70 pan=-39 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=90 pan=-31 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=47 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=141 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=23 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=81 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=87 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=161 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=256 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=158 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=36 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=47 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=78 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 28 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=70 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=32 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=178 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=86 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=24 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=78 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 25 36 amp=61 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 25 37 amp=352 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 25 38 amp=40 pan=0 # 808 Snare 1 808 Snare 1 -39 %font "FluidR3_GM.sf2" 128 25 39 amp=44 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 25 40 amp=69 pan=0 # 808 Snare 2 808 Snare 2 -41 %font "FluidR3_GM.sf2" 128 25 41 amp=71 pan=-47 # 808 Tom 1 808 Tom 1 -42 %font "FluidR3_GM.sf2" 128 25 42 amp=24 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 25 43 amp=33 pan=-28 # 808 Tom 2 808 Tom 2 -44 %font "FluidR3_GM.sf2" 128 25 44 amp=52 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 25 45 amp=33 pan=-9 # 808 Tom 3 808 Tom 3 -46 %font "FluidR3_GM.sf2" 128 25 46 amp=97 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 25 47 amp=30 pan=9 # 808 Tom 4 808 Tom 4 -48 %font "FluidR3_GM.sf2" 128 25 48 amp=36 pan=28 # 808 Tom 5 808 Tom 5 -49 %font "FluidR3_GM.sf2" 128 25 49 amp=55 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 25 50 amp=23 pan=47 # 808 Tom 6 808 Tom 6 -51 %font "FluidR3_GM.sf2" 128 25 51 amp=22 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=65 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=39 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 25 54 amp=100 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=73 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=56 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=58 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=15 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=63 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=44 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=65 pan=-39 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=63 pan=-31 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=103 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=87 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=36 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=86 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=50 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=155 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=256 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=165 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=53 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=48 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=56 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 29 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=32 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=52 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=119 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=178 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=70 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 25 36 amp=65 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 25 37 amp=150 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 25 38 amp=112 pan=0 # 808 Snare 1 808 Snare 1 -39 %font "FluidR3_GM.sf2" 128 25 39 amp=44 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 25 40 amp=88 pan=0 # 808 Snare 2 808 Snare 2 -41 %font "FluidR3_GM.sf2" 128 25 41 amp=60 pan=-47 # 808 Tom 1 808 Tom 1 -42 %font "FluidR3_GM.sf2" 128 25 42 amp=20 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 25 43 amp=55 pan=-28 # 808 Tom 2 808 Tom 2 -44 %font "FluidR3_GM.sf2" 128 25 44 amp=25 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 25 45 amp=55 pan=-9 # 808 Tom 3 808 Tom 3 -46 %font "FluidR3_GM.sf2" 128 25 46 amp=71 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 25 47 amp=23 pan=9 # 808 Tom 4 808 Tom 4 -48 %font "FluidR3_GM.sf2" 128 25 48 amp=21 pan=28 # 808 Tom 5 808 Tom 5 -49 %font "FluidR3_GM.sf2" 128 25 49 amp=107 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 25 50 amp=31 pan=47 # 808 Tom 6 808 Tom 6 -51 %font "FluidR3_GM.sf2" 128 25 51 amp=28 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=60 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=39 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 25 54 amp=100 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=30 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=49 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=19 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=9 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=54 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=13 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=66 pan=-39 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=50 pan=-31 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=78 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=33 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=33 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=131 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=134 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=53 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=84 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=72 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=55 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 30 -27 %font "FluidR3_GM.sf2" 128 25 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 25 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 25 29 amp=32 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 25 30 amp=57 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 25 31 amp=74 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 25 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 25 33 amp=54 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 25 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 25 35 amp=58 pan=0 # 808 Kick 1 808 Kick 1 -36 %font "FluidR3_GM.sf2" 128 25 36 amp=95 pan=0 # 808 Kick 2 808 Kick 2 -37 %font "FluidR3_GM.sf2" 128 25 37 amp=365 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 25 38 amp=65 pan=0 # 808 Snare 1 808 Snare 1 -39 %font "FluidR3_GM.sf2" 128 25 39 amp=30 pan=-16 # 808 Clap 808 Clap -40 %font "FluidR3_GM.sf2" 128 25 40 amp=30 pan=0 # 808 Snare 2 808 Snare 2 -41 %font "FluidR3_GM.sf2" 128 25 41 amp=46 pan=-47 # 808 Tom 1 808 Tom 1 -42 %font "FluidR3_GM.sf2" 128 25 42 amp=13 pan=31 # 808 Closed Hat 808 Closed Hat -43 %font "FluidR3_GM.sf2" 128 25 43 amp=38 pan=-28 # 808 Tom 2 808 Tom 2 -44 %font "FluidR3_GM.sf2" 128 25 44 amp=35 pan=31 # 808 Open Hat 808 Open Hat -45 %font "FluidR3_GM.sf2" 128 25 45 amp=36 pan=-9 # 808 Tom 3 808 Tom 3 -46 %font "FluidR3_GM.sf2" 128 25 46 amp=64 pan=31 # 808 Open Hat 808 Open Hat -47 %font "FluidR3_GM.sf2" 128 25 47 amp=22 pan=9 # 808 Tom 4 808 Tom 4 -48 %font "FluidR3_GM.sf2" 128 25 48 amp=19 pan=28 # 808 Tom 5 808 Tom 5 -49 %font "FluidR3_GM.sf2" 128 25 49 amp=66 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 25 50 amp=29 pan=47 # 808 Tom 6 808 Tom 6 -51 %font "FluidR3_GM.sf2" 128 25 51 amp=28 pan=-31 # Ride1(L) Ride1(R) 808 Ride 808 Ride -52 %font "FluidR3_GM.sf2" 128 25 52 amp=84 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 25 53 amp=41 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 25 54 amp=100 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 25 55 amp=50 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 25 56 amp=49 pan=31 # 808 Cowbell 808 Cowbell -57 %font "FluidR3_GM.sf2" 128 25 57 amp=50 pan=-31 # Crsh 2(L) Crsh 2(R) -59 %font "FluidR3_GM.sf2" 128 25 59 amp=20 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 25 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 25 61 amp=55 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 25 62 amp=13 pan=-39 # 808 High Conga 808 High Conga -63 %font "FluidR3_GM.sf2" 128 25 63 amp=65 pan=-39 # 808 Mid Conga 808 Mid Conga -64 %font "FluidR3_GM.sf2" 128 25 64 amp=47 pan=-31 # 808 Low Conga 808 Low Conga -67 %font "FluidR3_GM.sf2" 128 25 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 25 68 amp=103 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 25 69 amp=47 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 25 70 amp=78 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 25 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 25 72 amp=47 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 25 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 25 74 amp=83 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 25 75 amp=30 pan=31 # 808 Clave 808 Clave -76 %font "FluidR3_GM.sf2" 128 25 76 amp=110 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 25 77 amp=131 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 25 78 amp=134 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 25 79 amp=51 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 25 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 25 81 amp=53 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 25 82 amp=99 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 25 83 amp=164 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 25 84 amp=52 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 25 85 amp=83 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 25 86 amp=49 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 25 87 amp=78 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 32 -27 %font "FluidR3_GM.sf2" 128 32 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 32 28 amp=43 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 32 29 amp=43 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 32 30 amp=43 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 32 31 amp=75 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 32 32 amp=176 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 32 33 amp=53 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 32 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 32 35 amp=119 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -37 %font "FluidR3_GM.sf2" 128 32 37 amp=186 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 32 38 amp=104 pan=0 # Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 32 39 amp=66 pan=-16 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 32 40 amp=101 pan=0 # Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 32 41 amp=94 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 32 42 amp=21 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 32 43 amp=73 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 32 44 amp=21 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 32 45 amp=131 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 32 46 amp=46 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 32 47 amp=114 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 32 48 amp=148 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 32 49 amp=83 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 32 50 amp=76 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 32 51 amp=27 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 32 52 amp=38 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 32 53 amp=23 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 32 54 amp=63 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 32 55 amp=44 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 32 56 amp=101 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 32 57 amp=56 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 32 58 amp=65 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 32 59 amp=27 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 32 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 32 61 amp=55 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 32 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 32 63 amp=79 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 32 64 amp=69 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 32 65 amp=152 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 32 66 amp=95 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 32 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 32 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 32 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 32 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 32 71 amp=95 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 32 72 amp=75 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 32 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 32 74 amp=31 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 32 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 32 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 32 77 amp=84 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 32 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 32 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 32 80 amp=44 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 32 81 amp=63 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 32 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 32 83 amp=103 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 32 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 32 85 amp=127 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 32 86 amp=50 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 32 87 amp=53 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 33 -27 %font "FluidR3_GM.sf2" 128 33 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 33 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 33 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 33 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 33 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 33 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 33 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 33 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 33 35 amp=100 pan=0 # Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) -37 %font "FluidR3_GM.sf2" 128 33 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 33 38 amp=100 pan=0 # Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) Piccolo 1-1(L) Piccolo 1-1(R) -39 %font "FluidR3_GM.sf2" 128 33 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 33 40 amp=100 pan=0 # Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) Piccolo 1-2(L) Piccolo 1-2(R) -41 %font "FluidR3_GM.sf2" 128 33 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 33 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 33 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 33 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 33 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 33 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 33 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 33 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 33 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 33 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 33 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 33 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 33 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 33 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 33 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 33 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 33 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 33 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 33 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 33 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 33 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 33 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 33 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 33 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 33 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 33 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 33 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 33 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 33 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 33 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 33 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 33 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 33 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 33 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 33 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 33 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 33 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 33 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 33 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 33 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 33 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 33 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 33 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 33 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 33 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 33 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 33 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 34 -27 %font "FluidR3_GM.sf2" 128 34 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 34 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 34 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 34 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 34 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 34 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 34 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 34 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 34 35 amp=100 pan=0 # Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) -37 %font "FluidR3_GM.sf2" 128 34 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 34 38 amp=100 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -39 %font "FluidR3_GM.sf2" 128 34 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 34 40 amp=100 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -41 %font "FluidR3_GM.sf2" 128 34 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 34 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 34 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 34 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 34 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 34 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 34 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 34 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 34 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 34 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 34 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 34 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 34 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 34 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 34 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 34 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 34 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 34 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 34 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 34 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 34 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 34 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 34 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 34 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 34 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 34 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 34 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 34 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 34 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 34 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 34 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 34 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 34 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 34 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 34 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 34 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 34 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 34 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 34 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 34 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 34 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 34 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 34 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 34 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 34 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 34 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 34 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 35 -27 %font "FluidR3_GM.sf2" 128 35 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 35 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 35 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 35 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 35 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 35 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 35 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 35 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 35 35 amp=100 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -37 %font "FluidR3_GM.sf2" 128 35 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 35 38 amp=100 pan=0 # Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) -39 %font "FluidR3_GM.sf2" 128 35 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 35 40 amp=100 pan=0 # Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) -41 %font "FluidR3_GM.sf2" 128 35 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 35 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 35 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 35 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 35 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 35 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 35 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 35 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 35 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 35 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 35 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 35 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 35 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 35 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 35 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 35 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 35 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 35 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 35 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 35 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 35 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 35 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 35 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 35 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 35 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 35 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 35 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 35 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 35 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 35 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 35 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 35 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 35 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 35 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 35 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 35 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 35 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 35 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 35 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 35 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 35 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 35 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 35 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 35 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 35 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 35 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 35 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 36 -27 %font "FluidR3_GM.sf2" 128 36 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 36 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 36 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 36 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 36 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 36 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 36 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 36 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 36 35 amp=100 pan=0 # Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) -37 %font "FluidR3_GM.sf2" 128 36 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 36 38 amp=100 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -39 %font "FluidR3_GM.sf2" 128 36 39 amp=100 pan=0 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 36 40 amp=100 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -41 %font "FluidR3_GM.sf2" 128 36 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 36 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 36 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 36 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 36 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 36 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 36 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 36 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 36 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 36 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 36 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 36 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 36 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 36 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 36 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 36 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 36 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 36 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 36 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 36 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 36 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 36 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 36 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 36 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 36 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 36 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 36 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 36 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 36 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 36 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 36 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 36 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 36 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 36 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 36 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 36 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 36 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 36 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 36 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 36 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 36 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 36 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 36 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 36 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 36 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 36 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 36 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 40 -27 %font "FluidR3_GM.sf2" 128 40 27 amp=31 pan=-23 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 40 28 amp=44 pan=31 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 40 29 amp=26 pan=-16 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 40 30 amp=27 pan=-16 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 40 31 amp=119 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 40 32 amp=178 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 40 33 amp=85 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 40 34 amp=16 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 40 35 amp=94 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -37 %font "FluidR3_GM.sf2" 128 40 37 amp=116 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 40 38 amp=28 pan=0 # Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 40 39 amp=69 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -40 %font "FluidR3_GM.sf2" 128 40 40 amp=33 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -41 %font "FluidR3_GM.sf2" 128 40 41 amp=76 pan=-47 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 40 42 amp=20 pan=31 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 40 43 amp=46 pan=-28 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 40 44 amp=13 pan=31 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 40 45 amp=125 pan=-9 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 40 46 amp=59 pan=31 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 40 47 amp=74 pan=9 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 40 48 amp=73 pan=28 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 40 49 amp=87 pan=31 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 40 50 amp=39 pan=47 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 40 51 amp=18 pan=-31 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 40 52 amp=84 pan=-31 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 40 53 amp=97 pan=-31 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 40 54 amp=17 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 40 55 amp=44 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 40 56 amp=103 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 40 57 amp=50 pan=-31 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 40 58 amp=28 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 40 59 amp=24 pan=-31 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 40 60 amp=54 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 40 61 amp=56 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 40 62 amp=30 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 40 63 amp=80 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 40 64 amp=44 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 40 65 amp=98 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 40 66 amp=146 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 40 67 amp=57 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 40 68 amp=64 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 40 69 amp=15 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 40 70 amp=31 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 40 71 amp=59 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 40 72 amp=76 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 40 73 amp=43 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 40 74 amp=30 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 40 75 amp=78 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 40 76 amp=68 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 40 77 amp=82 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 40 78 amp=66 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 40 79 amp=30 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 40 80 amp=45 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 40 81 amp=64 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 40 82 amp=155 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 40 83 amp=102 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 40 84 amp=34 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 40 85 amp=127 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 40 86 amp=50 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 40 87 amp=78 pan=-31 # Long Taiko Hit Long Taiko Hit - -drumset 41 -27 %font "FluidR3_GM.sf2" 128 41 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 41 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 41 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 41 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 41 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 41 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 41 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 41 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 41 35 amp=100 pan=0 # Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) Std Kick 5(L) Std Kick 5(R) -37 %font "FluidR3_GM.sf2" 128 41 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 41 38 amp=100 pan=0 # Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 41 39 amp=100 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -40 %font "FluidR3_GM.sf2" 128 41 40 amp=100 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -41 %font "FluidR3_GM.sf2" 128 41 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 41 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 41 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 41 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 41 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 41 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 41 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 41 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 41 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 41 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 41 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 41 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 41 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 41 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 41 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 41 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 41 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 41 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 41 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 41 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 41 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 41 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 41 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 41 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 41 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 41 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 41 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 41 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 41 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 41 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 41 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 41 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 41 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 41 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 41 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 41 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 41 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 41 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 41 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 41 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 41 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 41 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 41 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 41 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 41 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 41 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 41 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 42 -27 %font "FluidR3_GM.sf2" 128 42 27 amp=100 pan=0 # High Q(L) High Q(R) -28 %font "FluidR3_GM.sf2" 128 42 28 amp=100 pan=0 # Slap Slap -29 %font "FluidR3_GM.sf2" 128 42 29 amp=100 pan=0 # Scratch Push(L) Scratch Push(R) -30 %font "FluidR3_GM.sf2" 128 42 30 amp=100 pan=0 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 42 31 amp=100 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 42 32 amp=100 pan=0 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 42 33 amp=100 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 42 34 amp=100 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 42 35 amp=100 pan=0 # Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) Std Kick 1(L) Std Kick 1(R) -37 %font "FluidR3_GM.sf2" 128 42 37 amp=100 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 42 38 amp=100 pan=0 # Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) -39 %font "FluidR3_GM.sf2" 128 42 39 amp=100 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -40 %font "FluidR3_GM.sf2" 128 42 40 amp=100 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -41 %font "FluidR3_GM.sf2" 128 42 41 amp=100 pan=0 # Low Flr Studio(L) Low Flr Studio(R) -42 %font "FluidR3_GM.sf2" 128 42 42 amp=100 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 42 43 amp=100 pan=0 # Flr Studio(L) Flr Studio(R) -44 %font "FluidR3_GM.sf2" 128 42 44 amp=100 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -45 %font "FluidR3_GM.sf2" 128 42 45 amp=100 pan=0 # Low Studio(L) Low Studio(R) -46 %font "FluidR3_GM.sf2" 128 42 46 amp=100 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -47 %font "FluidR3_GM.sf2" 128 42 47 amp=100 pan=0 # Md Studio(L) Md Studio(R) -48 %font "FluidR3_GM.sf2" 128 42 48 amp=100 pan=0 # MdHi Studio(L) MdHi Studio(R) -49 %font "FluidR3_GM.sf2" 128 42 49 amp=100 pan=0 # Crsh 1(L) Crsh 1(R) -50 %font "FluidR3_GM.sf2" 128 42 50 amp=100 pan=0 # Hi Studio(L) Hi Studio(R) -51 %font "FluidR3_GM.sf2" 128 42 51 amp=100 pan=0 # Ride1(L) Ride1(R) -52 %font "FluidR3_GM.sf2" 128 42 52 amp=100 pan=0 # China Crash(L) China Crash(R) -53 %font "FluidR3_GM.sf2" 128 42 53 amp=100 pan=0 # BellRide(L) BellRide(R) -54 %font "FluidR3_GM.sf2" 128 42 54 amp=100 pan=0 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 42 55 amp=100 pan=0 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 42 56 amp=100 pan=0 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 42 57 amp=100 pan=0 # Crsh 2(L) Crsh 2(R) -58 %font "FluidR3_GM.sf2" 128 42 58 amp=100 pan=0 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 42 59 amp=100 pan=0 # Ride2(L) Ride2(R) -60 %font "FluidR3_GM.sf2" 128 42 60 amp=100 pan=0 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 42 61 amp=100 pan=0 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 42 62 amp=100 pan=0 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 42 63 amp=100 pan=0 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 42 64 amp=100 pan=0 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 42 65 amp=100 pan=0 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 42 66 amp=100 pan=0 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 42 67 amp=100 pan=0 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 42 68 amp=100 pan=0 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 42 69 amp=100 pan=0 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 42 70 amp=100 pan=0 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 42 71 amp=100 pan=0 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 42 72 amp=100 pan=0 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 42 73 amp=100 pan=0 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 42 74 amp=100 pan=0 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 42 75 amp=100 pan=0 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 42 76 amp=100 pan=0 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 42 77 amp=100 pan=0 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 42 78 amp=100 pan=0 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 42 79 amp=100 pan=0 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 42 80 amp=100 pan=0 # Triangle -81 %font "FluidR3_GM.sf2" 128 42 81 amp=100 pan=0 # Triangle -82 %font "FluidR3_GM.sf2" 128 42 82 amp=100 pan=0 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 42 83 amp=100 pan=0 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 42 84 amp=100 pan=0 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 42 85 amp=100 pan=0 # Castanet -86 %font "FluidR3_GM.sf2" 128 42 86 amp=100 pan=0 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 42 87 amp=100 pan=0 # Long Taiko Hit Long Taiko Hit - -drumset 48 -27 %font "FluidR3_GM.sf2" 128 48 27 amp=11 pan=31 # High Q(L) High Q(R) Hi-Hat Closed(L) Hi-Hat Closed(R) -28 %font "FluidR3_GM.sf2" 128 48 28 amp=24 pan=31 # Slap Slap Hi-Hat Foot(L) Hi-Hat Foot(R) -29 %font "FluidR3_GM.sf2" 128 48 29 amp=23 pan=31 # Scratch Push(L) Scratch Push(R) Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -30 %font "FluidR3_GM.sf2" 128 48 30 amp=3 pan=-31 # Scratch Pull(L) Scratch Pull(R) -31 %font "FluidR3_GM.sf2" 128 48 31 amp=18 pan=0 # Sticks(L) Sticks(R) -32 %font "FluidR3_GM.sf2" 128 48 32 amp=143 pan=-16 # Square Click(L) Square Click(R) -33 %font "FluidR3_GM.sf2" 128 48 33 amp=43 pan=0 # Metronome Click Metronome Click -34 %font "FluidR3_GM.sf2" 128 48 34 amp=13 pan=0 # Metronome Bell(L) Metronome Bell(R) -35 %font "FluidR3_GM.sf2" 128 48 35 amp=187 pan=0 # Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) -36 %font "FluidR3_GM.sf2" 128 48 35 amp=57 pan=0 # Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) -37 %font "FluidR3_GM.sf2" 128 48 37 amp=21 pan=0 # Rim Tap(L) Rim Tap(R) -38 %font "FluidR3_GM.sf2" 128 48 38 amp=126 pan=-31 # Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) -39 %font "FluidR3_GM.sf2" 128 48 39 amp=33 pan=-47 # Clap(L) Clap(R) -40 %font "FluidR3_GM.sf2" 128 48 40 amp=126 pan=0 # Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) -41 %font "FluidR3_GM.sf2" 128 48 41 amp=87 pan=-47 # Timpani 2(L) Timpani 2(R) -42 %font "FluidR3_GM.sf2" 128 48 41 amp=86 pan=-47 # Timpani 2(L) Timpani 2(R) -43 %font "FluidR3_GM.sf2" 128 48 43 amp=81 pan=-47 # Timpani 3(L) Timpani 3(R) -44 %font "FluidR3_GM.sf2" 128 48 43 amp=126 pan=-47 # Timpani 3(L) Timpani 3(R) -45 %font "FluidR3_GM.sf2" 128 48 43 amp=75 pan=-47 # Timpani 3(L) Timpani 3(R) -46 %font "FluidR3_GM.sf2" 128 48 43 amp=120 pan=-47 # Timpani 3(L) Timpani 3(R) -47 %font "FluidR3_GM.sf2" 128 48 43 amp=72 pan=-47 # Timpani 3(L) Timpani 3(R) -48 %font "FluidR3_GM.sf2" 128 48 43 amp=114 pan=-47 # Timpani 3(L) Timpani 3(R) -49 %font "FluidR3_GM.sf2" 128 48 43 amp=113 pan=-47 # Timpani 3(L) Timpani 3(R) -50 %font "FluidR3_GM.sf2" 128 48 43 amp=110 pan=-47 # Timpani 3(L) Timpani 3(R) -51 %font "FluidR3_GM.sf2" 128 48 43 amp=63 pan=-47 # Timpani 3(L) Timpani 3(R) -52 %font "FluidR3_GM.sf2" 128 48 43 amp=63 pan=-47 # Timpani 3(L) Timpani 3(R) -53 %font "FluidR3_GM.sf2" 128 48 43 amp=61 pan=-47 # Timpani 3(L) Timpani 3(R) -54 %font "FluidR3_GM.sf2" 128 48 54 amp=67 pan=16 # Tambourine(L) Tambourine(R) -55 %font "FluidR3_GM.sf2" 128 48 55 amp=49 pan=-16 # Splash(L) Splash(R) -56 %font "FluidR3_GM.sf2" 128 48 56 amp=92 pan=31 # Cow Bell(L) Cow Bell(R) -57 %font "FluidR3_GM.sf2" 128 48 57 amp=69 pan=-31 # Orchcrash(L) Orchcrash(R) -58 %font "FluidR3_GM.sf2" 128 48 58 amp=22 pan=-55 # Vibra Slap -59 %font "FluidR3_GM.sf2" 128 48 59 amp=76 pan=-47 # Orchcrash(L) Orchcrash(R) -60 %font "FluidR3_GM.sf2" 128 48 60 amp=8 pan=55 # Bongo Rim(L) Bongo Rim(R) -61 %font "FluidR3_GM.sf2" 128 48 61 amp=82 pan=55 # Low Bongo(L) Low Bongo(R) -62 %font "FluidR3_GM.sf2" 128 48 62 amp=41 pan=-39 # Closed Slap(L) Closed Slap(R) -63 %font "FluidR3_GM.sf2" 128 48 63 amp=77 pan=-39 # High Conga(L) High Conga(R) -64 %font "FluidR3_GM.sf2" 128 48 64 amp=45 pan=-31 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 48 65 amp=80 pan=31 # High Timbale(L) High Timbale(R) -66 %font "FluidR3_GM.sf2" 128 48 66 amp=78 pan=31 # Low Timbale(L) Low Timbale(R) -67 %font "FluidR3_GM.sf2" 128 48 67 amp=82 pan=-55 # High Agogo(L) High Agogo(R) -68 %font "FluidR3_GM.sf2" 128 48 68 amp=92 pan=-55 # Low Agogo(L) Low Agogo(R) -69 %font "FluidR3_GM.sf2" 128 48 69 amp=11 pan=-55 # Cabasa(L) Cabasa(R) -70 %font "FluidR3_GM.sf2" 128 48 70 amp=27 pan=-63 # Maracas(L) Maracas(R) -71 %font "FluidR3_GM.sf2" 128 48 71 amp=45 pan=55 # Short Whistle -72 %font "FluidR3_GM.sf2" 128 48 72 amp=34 pan=55 # Long Whistle -73 %font "FluidR3_GM.sf2" 128 48 73 amp=32 pan=47 # Guiro Down(L) Guiro Down(R) -74 %font "FluidR3_GM.sf2" 128 48 74 amp=46 pan=47 # Guiro Up(L) Guiro Up(R) -75 %font "FluidR3_GM.sf2" 128 48 75 amp=61 pan=31 # Clave(L) Clave(R) -76 %font "FluidR3_GM.sf2" 128 48 76 amp=52 pan=55 # High Woodblock(L) High Woodblock(R) -77 %font "FluidR3_GM.sf2" 128 48 77 amp=63 pan=55 # Low Woodblock(L) Low Woodblock(R) -78 %font "FluidR3_GM.sf2" 128 48 78 amp=54 pan=-31 # Quica Hi Quica Hi -79 %font "FluidR3_GM.sf2" 128 48 79 amp=24 pan=-31 # Quica Low Quica Low -80 %font "FluidR3_GM.sf2" 128 48 80 amp=36 pan=-63 # Triangle -81 %font "FluidR3_GM.sf2" 128 48 81 amp=76 pan=-63 # Triangle -82 %font "FluidR3_GM.sf2" 128 48 82 amp=114 pan=47 # Small Shaker (L) Small Shaker (R) -83 %font "FluidR3_GM.sf2" 128 48 83 amp=78 pan=55 # Sleigh Bells -84 %font "FluidR3_GM.sf2" 128 48 84 amp=27 pan=63 # Bell Tree Bell Tree -85 %font "FluidR3_GM.sf2" 128 48 85 amp=63 pan=-47 # Castanet -86 %font "FluidR3_GM.sf2" 128 48 86 amp=39 pan=-31 # Short Taiko Hit Short Taiko Hit -87 %font "FluidR3_GM.sf2" 128 48 87 amp=64 pan=-31 # Long Taiko Hit Long Taiko Hit -88 %font "FluidR3_GM.sf2" 128 48 88 amp=44 pan=0 # Applause Applause - -drumset 49 -30 %font "FluidR3_GM.sf2" 128 0 38 amp=93 pan=-31 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -31 %font "FluidR3_GM.sf2" 128 0 49 amp=52 pan=-47 # Crsh 1(L) Crsh 1(R) -32 %font "FluidR3_GM.sf2" 128 0 35 amp=21 pan=-63 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -33 %font "FluidR3_GM.sf2" 0 116 amp=26 pan=55 -36 %font "FluidR3_GM.sf2" 128 0 47 amp=96 pan=0 # Md Studio(L) Md Studio(R) -38 %font "FluidR3_GM.sf2" 128 0 47 amp=189 pan=-31 # Md Studio(L) Md Studio(R) -39 %font "FluidR3_GM.sf2" 128 0 47 amp=88 pan=63 # Md Studio(L) Md Studio(R) -40 %font "FluidR3_GM.sf2" 128 0 47 amp=66 pan=63 # Md Studio(L) Md Studio(R) -41 %font "FluidR3_GM.sf2" 128 0 47 amp=122 pan=31 # Md Studio(L) Md Studio(R) -42 %font "FluidR3_GM.sf2" 128 0 63 amp=69 pan=47 # High Conga(L) High Conga(R) -43 %font "FluidR3_GM.sf2" 128 0 64 amp=76 pan=47 # Low Tumba(L) Low Tumba(R) -44 %font "FluidR3_GM.sf2" 128 0 47 amp=133 pan=63 # Md Studio(L) Md Studio(R) -49 %font "FluidR3_GM.sf2" 128 0 52 amp=43 pan=-47 # China Crash(L) China Crash(R) -50 %font "FluidR3_GM.sf2" 128 0 52 amp=170 pan=31 # China Crash(L) China Crash(R) -51 %font "FluidR3_GM.sf2" 128 0 47 amp=216 pan=47 # Md Studio(L) Md Studio(R) -52 %font "FluidR3_GM.sf2" 128 0 47 amp=227 pan=47 # Md Studio(L) Md Studio(R) -54 %font "FluidR3_GM.sf2" 128 0 64 amp=56 pan=23 # Low Tumba(L) Low Tumba(R) -55 %font "FluidR3_GM.sf2" 128 0 64 amp=52 pan=47 # Low Tumba(L) Low Tumba(R) -56 %font "FluidR3_GM.sf2" 128 0 64 amp=28 pan=47 # Low Tumba(L) Low Tumba(R) -57 %font "FluidR3_GM.sf2" 128 0 60 amp=53 pan=-47 # Bongo Rim(L) Bongo Rim(R) -58 %font "FluidR3_GM.sf2" 128 0 61 amp=40 pan=-47 # Low Bongo(L) Low Bongo(R) -59 %font "FluidR3_GM.sf2" 128 0 63 amp=31 pan=-47 # High Conga(L) High Conga(R) -60 %font "FluidR3_GM.sf2" 128 0 64 amp=51 pan=-47 # Low Tumba(L) Low Tumba(R) -61 %font "FluidR3_GM.sf2" 128 0 62 amp=96 pan=-31 # Closed Slap(L) Closed Slap(R) -62 %font "FluidR3_GM.sf2" 128 0 47 amp=139 pan=31 # Md Studio(L) Md Studio(R) -63 %font "FluidR3_GM.sf2" 128 0 47 amp=153 pan=31 # Md Studio(L) Md Studio(R) -64 %font "FluidR3_GM.sf2" 128 0 64 amp=22 pan=-16 # Low Tumba(L) Low Tumba(R) -65 %font "FluidR3_GM.sf2" 128 0 60 amp=111 pan=-31 # Bongo Rim(L) Bongo Rim(R) -67 %font "FluidR3_GM.sf2" 128 0 66 amp=113 pan=31 # Low Timbale(L) Low Timbale(R) -68 %font "FluidR3_GM.sf2" 128 0 66 amp=41 pan=39 # Low Timbale(L) Low Timbale(R) -69 %font "FluidR3_GM.sf2" 128 0 65 amp=83 pan=39 # High Timbale(L) High Timbale(R) -70 %font "FluidR3_GM.sf2" 128 0 56 amp=72 pan=31 # Cow Bell(L) Cow Bell(R) -71 %font "FluidR3_GM.sf2" 128 0 60 amp=50 pan=55 # Bongo Rim(L) Bongo Rim(R) -72 %font "FluidR3_GM.sf2" 128 0 61 amp=65 pan=47 # Low Bongo(L) Low Bongo(R) -73 %font "FluidR3_GM.sf2" 128 0 62 amp=56 pan=-31 # Closed Slap(L) Closed Slap(R) -74 %font "FluidR3_GM.sf2" 128 0 63 amp=162 pan=-31 # High Conga(L) High Conga(R) -75 %font "FluidR3_GM.sf2" 128 0 64 amp=27 pan=-39 # Low Tumba(L) Low Tumba(R) -76 %font "FluidR3_GM.sf2" 128 0 64 amp=45 pan=-39 # Low Tumba(L) Low Tumba(R) -77 %font "FluidR3_GM.sf2" 128 0 64 amp=47 pan=-39 # Low Tumba(L) Low Tumba(R) -78 %font "FluidR3_GM.sf2" 128 0 64 amp=60 pan=-39 # Low Tumba(L) Low Tumba(R) -79 %font "FluidR3_GM.sf2" 0 116 amp=58 pan=63 -80 %font "FluidR3_GM.sf2" 0 116 amp=26 pan=63 -81 %font "FluidR3_GM.sf2" 0 116 amp=44 pan=-31 -82 %font "FluidR3_GM.sf2" 0 116 amp=30 pan=-31 -83 %font "FluidR3_GM.sf2" 128 0 54 amp=79 pan=8 # Tambourine(L) Tambourine(R) -84 %font "FluidR3_GM.sf2" 128 0 67 amp=50 pan=-55 # High Agogo(L) High Agogo(R) -85 %font "FluidR3_GM.sf2" 128 0 68 amp=57 pan=-55 # Low Agogo(L) Low Agogo(R) -87 %font "FluidR3_GM.sf2" 128 0 71 amp=111 pan=55 # Short Whistle -88 %font "FluidR3_GM.sf2" 128 0 72 amp=45 pan=55 # Long Whistle -89 %font "FluidR3_GM.sf2" 128 0 78 amp=61 pan=-31 # Quica Hi Quica Hi -90 %font "FluidR3_GM.sf2" 128 0 79 amp=27 pan=-31 # Quica Low Quica Low -91 %font "FluidR3_GM.sf2" 128 0 80 amp=41 pan=-63 # Triangle -92 %font "FluidR3_GM.sf2" 128 0 81 amp=48 pan=-63 # Triangle -93 %font "FluidR3_GM.sf2" 128 0 73 amp=35 pan=47 # Guiro Down(L) Guiro Down(R) -94 %font "FluidR3_GM.sf2" 128 0 74 amp=23 pan=47 # Guiro Up(L) Guiro Up(R) -95 %font "FluidR3_GM.sf2" 128 0 69 amp=17 pan=-55 # Cabasa(L) Cabasa(R) -96 %font "FluidR3_GM.sf2" 128 0 69 amp=25 pan=-55 # Cabasa(L) Cabasa(R) -97 %font "FluidR3_GM.sf2" 128 0 75 amp=55 pan=31 # Clave(L) Clave(R) -98 %font "FluidR3_GM.sf2" 128 0 76 amp=96 pan=55 # High Woodblock(L) High Woodblock(R) -99 %font "FluidR3_GM.sf2" 128 0 77 amp=115 pan=55 # Low Woodblock(L) Low Woodblock(R) - -drumset 50 -25 %font "FluidR3_GM.sf2" 128 25 36 amp=63 pan=0 # 808 Kick 2 808 Kick 2 -26 %font "FluidR3_GM.sf2" 128 25 35 amp=73 pan=0 # 808 Kick 1 808 Kick 1 -27 %font "FluidR3_GM.sf2" 128 25 36 amp=59 pan=0 # 808 Kick 2 808 Kick 2 -28 %font "FluidR3_GM.sf2" 128 25 36 amp=65 pan=0 # 808 Kick 2 808 Kick 2 -29 %font "FluidR3_GM.sf2" 128 25 36 amp=58 pan=0 # 808 Kick 2 808 Kick 2 -30 %font "FluidR3_GM.sf2" 128 25 36 amp=81 pan=0 # 808 Kick 2 808 Kick 2 -31 %font "FluidR3_GM.sf2" 128 25 35 amp=123 pan=0 # 808 Kick 1 808 Kick 1 -32 %font "FluidR3_GM.sf2" 128 9 35 amp=150 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -33 %font "FluidR3_GM.sf2" 128 9 35 amp=133 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -34 %font "FluidR3_GM.sf2" 128 10 35 amp=63 pan=0 # Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) -35 %font "FluidR3_GM.sf2" 128 10 35 amp=82 pan=0 # Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) Std Kick 3(L) Std Kick 3(R) -36 %font "FluidR3_GM.sf2" 128 11 35 amp=205 pan=0 # Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) -37 %font "FluidR3_GM.sf2" 128 11 35 amp=417 pan=0 # Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) Room Kick (L) Room Kick (R) -38 %font "FluidR3_GM.sf2" 128 0 35 amp=129 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -39 %font "FluidR3_GM.sf2" 128 0 35 amp=226 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -40 %font "FluidR3_GM.sf2" 128 0 35 amp=142 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -41 %font "FluidR3_GM.sf2" 128 0 35 amp=138 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -42 %font "FluidR3_GM.sf2" 128 1 35 amp=188 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -43 %font "FluidR3_GM.sf2" 128 1 35 amp=128 pan=0 # Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) Std Kick 2(L) Std Kick 2(R) -44 %font "FluidR3_GM.sf2" 128 0 35 amp=156 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -45 %font "FluidR3_GM.sf2" 128 0 35 amp=86 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -46 %font "FluidR3_GM.sf2" 128 0 35 amp=160 pan=0 # Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) Std Kick(L) Std Kick(R) -47 %font "FluidR3_GM.sf2" 128 32 35 amp=86 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -48 %font "FluidR3_GM.sf2" 128 32 35 amp=94 pan=0 # Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) Std Kick 7(L) Std Kick 7(R) -49 %font "FluidR3_GM.sf2" 128 48 35 amp=50 pan=0 # Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) Orch Bass Drum(L) Orch Bass Drum(R) -50 %font "FluidR3_GM.sf2" 128 8 35 amp=77 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -51 %font "FluidR3_GM.sf2" 128 8 35 amp=215 pan=0 # Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) Std Kick 6(L) Std Kick 6(R) -52 %font "FluidR3_GM.sf2" 128 16 35 amp=140 pan=0 # Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R Power Bass Drum 1(L Power Bass Drum 1(R -53 %font "FluidR3_GM.sf2" 128 16 36 amp=85 pan=0 # Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R Power Bass Drum 2(L Power Bass Drum 2(R -54 %font "FluidR3_GM.sf2" 128 24 35 amp=86 pan=0 # Elec Kick1(L) Elec Kick1(R) -55 %font "FluidR3_GM.sf2" 128 24 36 amp=135 pan=0 # Elec Kick2(L) Elec Kick2(R) -56 %font "FluidR3_GM.sf2" 128 24 35 amp=62 pan=0 # Elec Kick1(L) Elec Kick1(R) -57 %font "FluidR3_GM.sf2" 128 25 35 amp=59 pan=0 # 808 Kick 1 808 Kick 1 -58 %font "FluidR3_GM.sf2" 128 25 35 amp=68 pan=0 # 808 Kick 1 808 Kick 1 -59 %font "FluidR3_GM.sf2" 128 25 35 amp=60 pan=0 # 808 Kick 1 808 Kick 1 -60 %font "FluidR3_GM.sf2" 128 0 38 amp=108 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -61 %font "FluidR3_GM.sf2" 128 0 40 amp=129 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -62 %font "FluidR3_GM.sf2" 128 1 38 amp=93 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -63 %font "FluidR3_GM.sf2" 128 1 40 amp=52 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -64 %font "FluidR3_GM.sf2" 128 0 38 amp=106 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -65 %font "FluidR3_GM.sf2" 128 48 38 amp=194 pan=0 # Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) Orch Snare(L) Orch Snare(R) -66 %font "FluidR3_GM.sf2" 128 32 38 amp=134 pan=0 # Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) Snr 2-1(L) Snr 2-1(R) -67 %font "FluidR3_GM.sf2" 128 32 40 amp=91 pan=0 # Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) Snr 2-2(L) Snr 2-2(R) -68 %font "FluidR3_GM.sf2" 128 8 38 amp=76 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -69 %font "FluidR3_GM.sf2" 128 8 40 amp=92 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -70 %font "FluidR3_GM.sf2" 128 16 38 amp=113 pan=0 # Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) Power Snare 1(L) Power Snare 1(R) -71 %font "FluidR3_GM.sf2" 128 16 40 amp=103 pan=0 # Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) Power Snare 2(L) Power Snare 2(R) -72 %font "FluidR3_GM.sf2" 128 24 40 amp=123 pan=0 # Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) -73 %font "FluidR3_GM.sf2" 128 11 38 amp=102 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -74 %font "FluidR3_GM.sf2" 128 11 40 amp=155 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -75 %font "FluidR3_GM.sf2" 128 11 38 amp=71 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) -76 %font "FluidR3_GM.sf2" 128 11 40 amp=66 pan=0 # RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) RmPwr 1-2(L) RmPwr 1-2(R) -77 %font "FluidR3_GM.sf2" 128 8 38 amp=63 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -78 %font "FluidR3_GM.sf2" 128 24 38 amp=100 pan=0 # Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) Electronic Snr 1(L) Electronic Snr 1(R) -79 %font "FluidR3_GM.sf2" 128 24 40 amp=149 pan=0 # Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) Electronic Snr 2(L) Electronic Snr 2(R) -80 %font "FluidR3_GM.sf2" 128 25 38 amp=22 pan=0 # 808 Snare 1 808 Snare 1 -81 %font "FluidR3_GM.sf2" 128 25 40 amp=33 pan=0 # 808 Snare 2 808 Snare 2 -82 %font "FluidR3_GM.sf2" 128 25 38 amp=28 pan=0 # 808 Snare 1 808 Snare 1 -83 %font "FluidR3_GM.sf2" 128 25 40 amp=48 pan=0 # 808 Snare 2 808 Snare 2 -84 %font "FluidR3_GM.sf2" 128 40 38 amp=19 pan=0 # Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) -85 %font "FluidR3_GM.sf2" 128 40 38 amp=27 pan=0 # Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) Brush Snr 1(L) Brush Snr 1(R) -86 %font "FluidR3_GM.sf2" 128 40 39 amp=79 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -87 %font "FluidR3_GM.sf2" 128 40 39 amp=76 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -88 %font "FluidR3_GM.sf2" 128 40 39 amp=101 pan=0 # Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) Brush Snr 2(L) Brush Snr 2(R) -89 %font "FluidR3_GM.sf2" 128 40 40 amp=40 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -90 %font "FluidR3_GM.sf2" 128 40 40 amp=37 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -91 %font "FluidR3_GM.sf2" 128 40 40 amp=48 pan=0 # Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) Brush Swirl(L) Brush Swirl(R) -92 %font "FluidR3_GM.sf2" 128 0 38 amp=175 pan=0 # Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) Std Snr 1(L) Std Snr 1(R) -93 %font "FluidR3_GM.sf2" 128 0 40 amp=264 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -94 %font "FluidR3_GM.sf2" 128 0 40 amp=304 pan=0 # Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) Std Snr 2(L) Std Snr 2(R) -95 %font "FluidR3_GM.sf2" 128 9 38 amp=79 pan=0 # Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) Snr 1-2(L) Snr 1-2(R) -96 %font "FluidR3_GM.sf2" 128 9 40 amp=54 pan=0 # Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) Snr 1-1(L) Snr 1-1(R) -97 %font "FluidR3_GM.sf2" 128 10 38 amp=58 pan=0 # RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) RmPwr 2-1(L) RmPwr 2-1(R) -98 %font "FluidR3_GM.sf2" 128 10 40 amp=70 pan=0 # RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) RmPwr 2-2(L) RmPwr 2-2(R) -99 %font "FluidR3_GM.sf2" 128 11 38 amp=56 pan=0 # RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) RmPwr 1-1(L) RmPwr 1-1(R) - -drumset 53 -32 %font "FluidR3_GM.sf2" 128 0 46 amp=77 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -33 %font "FluidR3_GM.sf2" 128 0 42 amp=35 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -34 %font "FluidR3_GM.sf2" 128 0 42 amp=47 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -35 %font "FluidR3_GM.sf2" 128 0 46 amp=272 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -36 %font "FluidR3_GM.sf2" 128 0 42 amp=24 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -37 %font "FluidR3_GM.sf2" 128 0 42 amp=26 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -38 %font "FluidR3_GM.sf2" 128 0 42 amp=19 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -39 %font "FluidR3_GM.sf2" 128 0 42 amp=19 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -40 %font "FluidR3_GM.sf2" 128 0 42 amp=20 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -41 %font "FluidR3_GM.sf2" 128 0 42 amp=27 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -42 %font "FluidR3_GM.sf2" 128 0 42 amp=39 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -43 %font "FluidR3_GM.sf2" 128 0 42 amp=47 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -44 %font "FluidR3_GM.sf2" 128 0 42 amp=36 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -45 %font "FluidR3_GM.sf2" 128 0 42 amp=80 pan=0 # Hi-Hat Closed(L) Hi-Hat Closed(R) -46 %font "FluidR3_GM.sf2" 128 0 44 amp=17 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -47 %font "FluidR3_GM.sf2" 128 0 44 amp=26 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -48 %font "FluidR3_GM.sf2" 128 0 44 amp=18 pan=0 # Hi-Hat Foot(L) Hi-Hat Foot(R) -49 %font "FluidR3_GM.sf2" 128 0 46 amp=66 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -50 %font "FluidR3_GM.sf2" 128 0 46 amp=55 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -51 %font "FluidR3_GM.sf2" 128 0 46 amp=58 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -52 %font "FluidR3_GM.sf2" 128 0 46 amp=27 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -53 %font "FluidR3_GM.sf2" 128 0 46 amp=64 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -54 %font "FluidR3_GM.sf2" 128 0 46 amp=90 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -55 %font "FluidR3_GM.sf2" 128 0 46 amp=107 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -56 %font "FluidR3_GM.sf2" 128 0 46 amp=108 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -57 %font "FluidR3_GM.sf2" 128 0 46 amp=161 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -58 %font "FluidR3_GM.sf2" 128 0 46 amp=208 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -59 %font "FluidR3_GM.sf2" 128 0 46 amp=131 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -60 %font "FluidR3_GM.sf2" 128 0 46 amp=117 pan=0 # Hi-Hat Half-Open(L) Hi-Hat Half-Open(R) -61 %font "FluidR3_GM.sf2" 128 0 49 amp=83 pan=0 # Crsh 1(L) Crsh 1(R) -62 %font "FluidR3_GM.sf2" 128 0 57 amp=68 pan=0 # Crsh 2(L) Crsh 2(R) -63 %font "FluidR3_GM.sf2" 128 0 49 amp=85 pan=0 # Crsh 1(L) Crsh 1(R) -64 %font "FluidR3_GM.sf2" 128 0 49 amp=49 pan=0 # Crsh 1(L) Crsh 1(R) -65 %font "FluidR3_GM.sf2" 128 0 49 amp=81 pan=0 # Crsh 1(L) Crsh 1(R) -66 %font "FluidR3_GM.sf2" 128 0 49 amp=44 pan=0 # Crsh 1(L) Crsh 1(R) -67 %font "FluidR3_GM.sf2" 128 0 49 amp=72 pan=0 # Crsh 1(L) Crsh 1(R) -68 %font "FluidR3_GM.sf2" 128 0 49 amp=128 pan=0 # Crsh 1(L) Crsh 1(R) -69 %font "FluidR3_GM.sf2" 128 0 57 amp=91 pan=0 # Crsh 2(L) Crsh 2(R) -70 %font "FluidR3_GM.sf2" 128 0 49 amp=80 pan=0 # Crsh 1(L) Crsh 1(R) -71 %font "FluidR3_GM.sf2" 128 0 57 amp=61 pan=0 # Crsh 2(L) Crsh 2(R) -72 %font "FluidR3_GM.sf2" 128 0 49 amp=73 pan=0 # Crsh 1(L) Crsh 1(R) -73 %font "FluidR3_GM.sf2" 128 0 49 amp=73 pan=0 # Crsh 1(L) Crsh 1(R) -74 %font "FluidR3_GM.sf2" 128 0 55 amp=58 pan=0 # Splash(L) Splash(R) -75 %font "FluidR3_GM.sf2" 128 0 55 amp=73 pan=0 # Splash(L) Splash(R) -76 %font "FluidR3_GM.sf2" 128 0 53 amp=41 pan=0 # BellRide(L) BellRide(R) -77 %font "FluidR3_GM.sf2" 128 0 53 amp=51 pan=0 # BellRide(L) BellRide(R) -78 %font "FluidR3_GM.sf2" 128 0 51 amp=22 pan=0 # Ride1(L) Ride1(R) -79 %font "FluidR3_GM.sf2" 128 0 59 amp=23 pan=0 # Ride2(L) Ride2(R) -80 %font "FluidR3_GM.sf2" 128 0 51 amp=28 pan=0 # Ride1(L) Ride1(R) -81 %font "FluidR3_GM.sf2" 128 0 51 amp=31 pan=0 # Ride1(L) Ride1(R) -82 %font "FluidR3_GM.sf2" 128 0 51 amp=16 pan=0 # Ride1(L) Ride1(R) -83 %font "FluidR3_GM.sf2" 128 0 51 amp=13 pan=0 # Ride1(L) Ride1(R) -84 %font "FluidR3_GM.sf2" 128 0 51 amp=15 pan=0 # Ride1(L) Ride1(R) -85 %font "FluidR3_GM.sf2" 128 0 51 amp=15 pan=0 # Ride1(L) Ride1(R) -86 %font "FluidR3_GM.sf2" 128 0 51 amp=12 pan=0 # Ride1(L) Ride1(R) -87 %font "FluidR3_GM.sf2" 128 0 51 amp=30 pan=0 # Ride1(L) Ride1(R) -88 %font "FluidR3_GM.sf2" 128 0 51 amp=95 pan=0 # Ride1(L) Ride1(R) -89 %font "FluidR3_GM.sf2" 128 0 51 amp=116 pan=0 # Ride1(L) Ride1(R) -90 %font "FluidR3_GM.sf2" 128 0 51 amp=104 pan=0 # Ride1(L) Ride1(R) -91 %font "FluidR3_GM.sf2" 128 0 39 amp=15 pan=0 # Clap(L) Clap(R) -92 %font "FluidR3_GM.sf2" 128 0 39 amp=67 pan=0 # Clap(L) Clap(R) -93 %font "FluidR3_GM.sf2" 128 0 39 amp=58 pan=0 # Clap(L) Clap(R) -94 %font "FluidR3_GM.sf2" 128 0 39 amp=60 pan=0 # Clap(L) Clap(R) -95 %font "FluidR3_GM.sf2" 128 0 39 amp=111 pan=0 # Clap(L) Clap(R) -96 %font "FluidR3_GM.sf2" 128 0 39 amp=57 pan=0 # Clap(L) Clap(R) - diff --git a/packages/tools/sound/timidity/config/fluidr3_gs.cfg b/packages/tools/sound/timidity/config/fluidr3_gs.cfg deleted file mode 100644 index 29b89da14..000000000 --- a/packages/tools/sound/timidity/config/fluidr3_gs.cfg +++ /dev/null @@ -1,97 +0,0 @@ -dir /storage/roms/bios/timidity/sf2 - -bank 1 -120 %font "FluidR3_GS.sf2" 1 120 amp=42 pan=0 -121 %font "FluidR3_GS.sf2" 1 121 amp=170 pan=0 -122 %font "FluidR3_GS.sf2" 1 122 amp=24 pan=0 -123 %font "FluidR3_GS.sf2" 1 123 amp=26 pan=0 -124 %font "FluidR3_GS.sf2" 1 124 amp=66 pan=0 -125 %font "FluidR3_GS.sf2" 1 125 amp=97 pan=0 -126 %font "FluidR3_GS.sf2" 1 126 amp=181 pan=0 -127 %font "FluidR3_GS.sf2" 1 127 amp=44 pan=0 - -bank 2 -120 %font "FluidR3_GS.sf2" 2 120 amp=89 pan=0 -122 %font "FluidR3_GS.sf2" 2 122 amp=93 pan=0 -123 %font "FluidR3_GS.sf2" 2 123 amp=147 pan=0 -124 %font "FluidR3_GS.sf2" 2 124 amp=68 pan=0 -125 %font "FluidR3_GS.sf2" 2 125 amp=33 pan=0 -126 %font "FluidR3_GS.sf2" 2 126 amp=17 pan=0 -127 %font "FluidR3_GS.sf2" 2 127 amp=95 pan=0 - -bank 3 -122 %font "FluidR3_GS.sf2" 3 122 amp=45 pan=0 -123 %font "FluidR3_GS.sf2" 3 123 amp=58 pan=0 -124 %font "FluidR3_GS.sf2" 3 124 amp=146 pan=0 -125 %font "FluidR3_GS.sf2" 3 125 amp=121 pan=0 -126 %font "FluidR3_GS.sf2" 3 126 amp=67 pan=0 -127 %font "FluidR3_GS.sf2" 3 127 amp=94 pan=0 - -bank 4 -122 %font "FluidR3_GS.sf2" 4 122 amp=68 pan=0 -124 %font "FluidR3_GS.sf2" 4 124 amp=41 pan=0 -125 %font "FluidR3_GS.sf2" 4 125 amp=33 pan=0 -126 %font "FluidR3_GS.sf2" 4 126 amp=30 pan=0 - -bank 5 -122 %font "FluidR3_GS.sf2" 5 122 amp=81 pan=0 -124 %font "FluidR3_GS.sf2" 5 124 amp=136 pan=0 -125 %font "FluidR3_GS.sf2" 5 125 amp=22 pan=0 -126 %font "FluidR3_GS.sf2" 5 126 amp=51 pan=0 - -bank 6 -125 %font "FluidR3_GS.sf2" 6 125 amp=61 pan=0 - -bank 7 -125 %font "FluidR3_GS.sf2" 7 125 amp=47 pan=0 - -bank 8 -125 %font "FluidR3_GS.sf2" 8 125 amp=27 pan=0 - -drumset 56 -39 %font "FluidR3_GS.sf2" 128 56 39 amp=49 pan=-23 # High Q(L) -40 %font "FluidR3_GS.sf2" 128 56 40 amp=116 pan=-23 # Slap -41 %font "FluidR3_GS.sf2" 128 56 41 amp=71 pan=-16 # Scratch Push(L) -42 %font "FluidR3_GS.sf2" 128 56 42 amp=45 pan=-16 # Scratch Pull(L) -43 %font "FluidR3_GS.sf2" 128 56 43 amp=152 pan=0 # Sticks(L) -44 %font "FluidR3_GS.sf2" 128 56 44 amp=296 pan=-16 # Square Click(L) -45 %font "FluidR3_GS.sf2" 128 56 45 amp=91 pan=0 # Metronome Click -46 %font "FluidR3_GS.sf2" 128 56 46 amp=52 pan=0 # Metronome Click -47 %font "FluidR3_GS.sf2" 128 56 47 amp=56 pan=0 # Fretnoise -48 %font "FluidR3_GS.sf2" 128 56 48 amp=26 pan=0 # Gtr Cut Up -49 %font "FluidR3_GS.sf2" 128 56 49 amp=65 pan=0 # Gtr Cut Down -50 %font "FluidR3_GS.sf2" 128 56 50 amp=47 pan=0 # Str. Slap -51 %font "FluidR3_GS.sf2" 128 56 51 amp=106 pan=0 # Pick Click -52 %font "FluidR3_GS.sf2" 128 56 52 amp=76 pan=0 # Laugh -53 %font "FluidR3_GS.sf2" 128 56 53 amp=27 pan=0 # Scream -54 %font "FluidR3_GS.sf2" 128 56 54 amp=140 pan=0 # Punch Punch -55 %font "FluidR3_GS.sf2" 128 56 55 amp=78 pan=0 # HeartBeat HeartBeat -56 %font "FluidR3_GS.sf2" 128 56 56 amp=30 pan=0 # FootStep FootStep -57 %font "FluidR3_GS.sf2" 128 56 57 amp=30 pan=0 # FootStep FootStep -58 %font "FluidR3_GS.sf2" 128 56 58 amp=7 pan=0 # Applause Applause -59 %font "FluidR3_GS.sf2" 128 56 59 amp=17 pan=0 # doorcreak doorcreak -60 %font "FluidR3_GS.sf2" 128 56 60 amp=86 pan=0 # Door -61 %font "FluidR3_GS.sf2" 128 56 61 amp=40 pan=0 # Scratchgs(L) Scratchgs(R) -62 %font "FluidR3_GS.sf2" 128 56 62 amp=225 pan=0 # Wind Chime Wind Chime Wind Chime -63 %font "FluidR3_GS.sf2" 128 56 63 amp=26 pan=0 # Car Start Car Start -64 %font "FluidR3_GS.sf2" 128 56 64 amp=101 pan=0 # Car Stop Car Stop -65 %font "FluidR3_GS.sf2" 128 56 65 amp=112 pan=0 # Car Pass Car Pass -66 %font "FluidR3_GS.sf2" 128 56 66 amp=78 pan=0 # Crash Car Crash1 -67 %font "FluidR3_GS.sf2" 128 56 67 amp=3 pan=0 # Siren Siren -68 %font "FluidR3_GS.sf2" 128 56 68 amp=116 pan=0 # train train -69 %font "FluidR3_GS.sf2" 128 56 69 amp=43 pan=0 # Noise -70 %font "FluidR3_GS.sf2" 128 56 70 amp=76 pan=0 # Heli Heli -71 %font "FluidR3_GS.sf2" 128 56 71 amp=4 pan=0 # Ufo1 Ufo1 -72 %font "FluidR3_GS.sf2" 128 56 72 amp=62 pan=0 # Gun -73 %font "FluidR3_GS.sf2" 128 56 73 amp=32 pan=0 # MachineGun MachineGun -74 %font "FluidR3_GS.sf2" 128 56 74 amp=55 pan=0 # Noise Gun -75 %font "FluidR3_GS.sf2" 128 56 75 amp=83 pan=0 # Explosion Explosion -76 %font "FluidR3_GS.sf2" 128 56 76 amp=74 pan=0 # Dog Bark Dog Bark -77 %font "FluidR3_GS.sf2" 128 56 77 amp=6 pan=0 # Gallops Gallops -78 %font "FluidR3_GS.sf2" 128 56 78 amp=49 pan=0 # Bird2(R) Bird2(L) -79 %font "FluidR3_GS.sf2" 128 56 79 amp=4 pan=0 # SeattleRain...(L) SeattleRain...(R) -80 %font "FluidR3_GS.sf2" 128 56 80 amp=185 pan=0 # Thunder(R) Thunder(L) -81 %font "FluidR3_GS.sf2" 128 56 81 amp=7 pan=0 # Noise Noise -82 %font "FluidR3_GS.sf2" 128 56 82 amp=111 pan=0 # Sea Shore Sea Shore Sea Shore -83 %font "FluidR3_GS.sf2" 128 56 83 amp=132 pan=0 # River bubbles River -84 %font "FluidR3_GS.sf2" 128 56 84 amp=96 pan=0 # bubbles bubbles diff --git a/packages/tools/sound/timidity/config/freepats.cfg b/packages/tools/sound/timidity/config/freepats.cfg deleted file mode 100644 index e7cca8209..000000000 --- a/packages/tools/sound/timidity/config/freepats.cfg +++ /dev/null @@ -1,135 +0,0 @@ - -drumset 0 - - 25 /storage/.config/timidity/freepats/Drum_000/025_Snare_Roll.pat - 26 /storage/.config/timidity/freepats/Drum_000/026_Snap.pat - 27 /storage/.config/timidity/freepats/Drum_000/027_High_Q.pat - 31 /storage/.config/timidity/freepats/Drum_000/031_Sticks.pat - 32 /storage/.config/timidity/freepats/Drum_000/032_Square_Click.pat - 33 /storage/.config/timidity/freepats/Drum_000/033_Metronome_Click.pat - 34 /storage/.config/timidity/freepats/Drum_000/034_Metronome_Bell.pat - 35 /storage/.config/timidity/freepats/Drum_000/035_Kick_1.pat amp=100 - 36 /storage/.config/timidity/freepats/Drum_000/036_Kick_2.pat amp=100 - 37 /storage/.config/timidity/freepats/Drum_000/037_Stick_Rim.pat - 38 /storage/.config/timidity/freepats/Drum_000/038_Snare_1.pat - 39 /storage/.config/timidity/freepats/Drum_000/039_Clap_Hand.pat amp=100 - 40 /storage/.config/timidity/freepats/Drum_000/040_Snare_2.pat - 41 /storage/.config/timidity/freepats/Drum_000/041_Tom_Low_2.pat amp=100 - 42 /storage/.config/timidity/freepats/Drum_000/042_Hi-Hat_Closed.pat - 43 /storage/.config/timidity/freepats/Drum_000/043_Tom_Low_1.pat amp=100 - 44 /storage/.config/timidity/freepats/Drum_000/044_Hi-Hat_Pedal.pat - 45 /storage/.config/timidity/freepats/Drum_000/045_Tom_Mid_2.pat amp=100 - 46 /storage/.config/timidity/freepats/Drum_000/046_Hi-Hat_Open.pat - 47 /storage/.config/timidity/freepats/Drum_000/047_Tom_Mid_1.pat amp=100 - 48 /storage/.config/timidity/freepats/Drum_000/048_Tom_High_2.pat amp=100 - 49 /storage/.config/timidity/freepats/Drum_000/049_Cymbal_Crash_1.pat - 50 /storage/.config/timidity/freepats/Drum_000/050_Tom_High_1.pat amp=100 - 51 /storage/.config/timidity/freepats/Drum_000/051_Cymbal_Ride_1.pat - 52 /storage/.config/timidity/freepats/Drum_000/052_Cymbal_Chinese.pat - 53 /storage/.config/timidity/freepats/Drum_000/053_Cymbal_Ride_Bell.pat amp=100 - 54 /storage/.config/timidity/freepats/Drum_000/054_Tombourine.pat - 55 /storage/.config/timidity/freepats/Drum_000/055_Cymbal_Splash.pat - 56 /storage/.config/timidity/freepats/Drum_000/056_Cow_Bell.pat - 57 /storage/.config/timidity/freepats/Drum_000/057_Cymbal_Crash_2.pat - 58 /storage/.config/timidity/freepats/Drum_000/058_Vibra-Slap.pat - 59 /storage/.config/timidity/freepats/Drum_000/059_Cymbal_Ride_2.pat - 60 /storage/.config/timidity/freepats/Drum_000/060_Bongo_High.pat - 61 /storage/.config/timidity/freepats/Drum_000/061_Bongo_Low.pat - 62 /storage/.config/timidity/freepats/Drum_000/062_Conga_High_1_Mute.pat - 63 /storage/.config/timidity/freepats/Drum_000/063_Conga_High_2_Open.pat - 64 /storage/.config/timidity/freepats/Drum_000/064_Conga_Low.pat - 65 /storage/.config/timidity/freepats/Drum_000/065_Timbale_High.pat - 66 /storage/.config/timidity/freepats/Drum_000/066_Timbale_Low.pat - 67 /storage/.config/timidity/freepats/Drum_000/067_Agogo_High.pat - 68 /storage/.config/timidity/freepats/Drum_000/068_Agogo_Low.pat - 69 /storage/.config/timidity/freepats/Drum_000/069_Cabasa.pat amp=100 - 70 /storage/.config/timidity/freepats/Drum_000/070_Maracas.pat - 71 /storage/.config/timidity/freepats/Drum_000/071_Whistle_1_High_Short.pat - 72 /storage/.config/timidity/freepats/Drum_000/072_Whistle_2_Low_Long.pat - 73 /storage/.config/timidity/freepats/Drum_000/073_Guiro_1_Short.pat - 74 /storage/.config/timidity/freepats/Drum_000/074_Guiro_2_Long.pat - 75 /storage/.config/timidity/freepats/Drum_000/075_Claves.pat amp=100 - 76 /storage/.config/timidity/freepats/Drum_000/076_Wood_Block_1_High.pat - 77 /storage/.config/timidity/freepats/Drum_000/077_Wood_Block_2_Low.pat - 78 /storage/.config/timidity/freepats/Drum_000/078_Cuica_1_Mute.pat amp=100 - 79 /storage/.config/timidity/freepats/Drum_000/079_Cuica_2_Open.pat amp=100 - 80 /storage/.config/timidity/freepats/Drum_000/080_Triangle_1_Mute.pat - 81 /storage/.config/timidity/freepats/Drum_000/081_Triangle_2_Open.pat - 82 /storage/.config/timidity/freepats/Drum_000/082_Shaker.pat - 84 /storage/.config/timidity/freepats/Drum_000/084_Belltree.pat - -bank 0 - - 0 /storage/.config/timidity/freepats/Tone_000/000_Acoustic_Grand_Piano.pat amp=120 pan=center - 1 /storage/.config/timidity/freepats/Tone_000/001_Acoustic_Brite_Piano.pat - 2 /storage/.config/timidity/freepats/Tone_000/002_Electric_Grand_Piano.pat - 4 /storage/.config/timidity/freepats/Tone_000/004_Electric_Piano_1_Rhodes.pat - 5 /storage/.config/timidity/freepats/Tone_000/005_Electric_Piano_2_Chorused_Yamaha_DX.pat - 6 /storage/.config/timidity/freepats/Tone_000/006_Harpsichord.pat - 7 /storage/.config/timidity/freepats/Tone_000/007_Clavinet.pat - 8 /storage/.config/timidity/freepats/Tone_000/008_Celesta.pat - 9 /storage/.config/timidity/freepats/Tone_000/009_Glockenspiel.pat - 13 /storage/.config/timidity/freepats/Tone_000/013_Xylophone.pat - 14 /storage/.config/timidity/freepats/Tone_000/014_Tubular_Bells.pat - 15 /storage/.config/timidity/freepats/Tone_000/015_Dulcimer.pat - 16 /storage/.config/timidity/freepats/Tone_000/016_Hammond_Organ.pat - 19 /storage/.config/timidity/freepats/Tone_000/019_Church_Organ.pat - 21 /storage/.config/timidity/freepats/Tone_000/021_Accordion.pat - 23 /storage/.config/timidity/freepats/Tone_000/023_Tango_Accordion.pat - 24 /storage/.config/timidity/freepats/Tone_000/024_Nylon_Guitar.pat - 25 /storage/.config/timidity/freepats/Tone_000/025_Steel_Guitar.pat - 26 /storage/.config/timidity/freepats/Tone_000/026_Jazz_Guitar.pat - 27 /storage/.config/timidity/freepats/Tone_000/027_Clean_Electric_Guitar.pat - 28 /storage/.config/timidity/freepats/Tone_000/028_Muted_Electric_Guitar.pat - 29 /storage/.config/timidity/freepats/Tone_000/029_Overdriven_Guitar.pat - 30 /storage/.config/timidity/freepats/Tone_000/030_Distortion_Guitar.pat - 32 /storage/.config/timidity/freepats/Tone_000/032_Acoustic_Bass.pat - 33 /storage/.config/timidity/freepats/Tone_000/033_Finger_Bass.pat - 34 /storage/.config/timidity/freepats/Tone_000/034_Pick_Bass.pat - 35 /storage/.config/timidity/freepats/Tone_000/035_Fretless_Bass.pat - 36 /storage/.config/timidity/freepats/Tone_000/036_Slap_Bass_1.pat - 37 /storage/.config/timidity/freepats/Tone_000/037_Slap_Bass_2.pat - 38 /storage/.config/timidity/freepats/Tone_000/038_Synth_Bass_1.pat - 40 /storage/.config/timidity/freepats/Tone_000/040_Violin.pat - 42 /storage/.config/timidity/freepats/Tone_000/042_Cello.pat - 44 /storage/.config/timidity/freepats/Tone_000/044_Tremolo_Strings.pat - 45 /storage/.config/timidity/freepats/Tone_000/045_Pizzicato_Strings.pat - 46 /storage/.config/timidity/freepats/Tone_000/046_Harp.pat - 47 /storage/.config/timidity/freepats/Tone_000/047_Timpani.pat - 48 /storage/.config/timidity/freepats/Tone_000/048_String_Ensemble_1_Marcato.pat - 53 /storage/.config/timidity/freepats/Tone_000/053_Voice_Oohs.pat - 56 /storage/.config/timidity/freepats/Tone_000/056_Trumpet.pat - 57 /storage/.config/timidity/freepats/Tone_000/057_Trombone.pat - 58 /storage/.config/timidity/freepats/Tone_000/058_Tuba.pat - 59 /storage/.config/timidity/freepats/Tone_000/059_Muted_Trumpet.pat - 60 /storage/.config/timidity/freepats/Tone_000/060_French_Horn.pat - 61 /storage/.config/timidity/freepats/Tone_000/061_Brass_Section.pat - 64 /storage/.config/timidity/freepats/Tone_000/064_Soprano_Sax.pat - 65 /storage/.config/timidity/freepats/Tone_000/065_Alto_Sax.pat - 66 /storage/.config/timidity/freepats/Tone_000/066_Tenor_Sax.pat - 67 /storage/.config/timidity/freepats/Tone_000/067_Baritone_Sax.pat - 68 /storage/.config/timidity/freepats/Tone_000/068_Oboe.pat - 69 /storage/.config/timidity/freepats/Tone_000/069_English_Horn.pat - 70 /storage/.config/timidity/freepats/Tone_000/070_Bassoon.pat - 71 /storage/.config/timidity/freepats/Tone_000/071_Clarinet.pat - 72 /storage/.config/timidity/freepats/Tone_000/072_Piccolo.pat - 73 /storage/.config/timidity/freepats/Tone_000/073_Flute.pat - 74 /storage/.config/timidity/freepats/Tone_000/074_Recorder.pat - 75 /storage/.config/timidity/freepats/Tone_000/075_Pan_Flute.pat - 76 /storage/.config/timidity/freepats/Tone_000/076_Bottle_Blow.pat - 79 /storage/.config/timidity/freepats/Tone_000/079_Ocarina.pat - 80 /storage/.config/timidity/freepats/Tone_000/080_Square_Wave.pat - 84 /storage/.config/timidity/freepats/Tone_000/084_Charang.pat - 88 /storage/.config/timidity/freepats/Tone_000/088_New_Age.pat - 94 /storage/.config/timidity/freepats/Tone_000/094_Halo_Pad.pat - 95 /storage/.config/timidity/freepats/Tone_000/095_Sweep_Pad.pat - 98 /storage/.config/timidity/freepats/Tone_000/098_Crystal.pat - 101 /storage/.config/timidity/freepats/Tone_000/101_Goblins--Unicorn.pat - 102 /storage/.config/timidity/freepats/Tone_000/102_Echo_Voice.pat - 104 /storage/.config/timidity/freepats/Tone_000/104_Sitar.pat - 114 /storage/.config/timidity/freepats/Tone_000/114_Steel_Drums.pat - 115 /storage/.config/timidity/freepats/Tone_000/115_Wood_Block.pat - 120 /storage/.config/timidity/freepats/Tone_000/120_Guitar_Fret_Noise.pat - 122 /storage/.config/timidity/freepats/Tone_000/122_Seashore.pat - 125 /storage/.config/timidity/freepats/Tone_000/125_Helicopter.pat - diff --git a/packages/tools/sound/timidity/config/soundfont_readme.txt b/packages/tools/sound/timidity/config/soundfont_readme.txt deleted file mode 100644 index 8f1c9ef70..000000000 --- a/packages/tools/sound/timidity/config/soundfont_readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -If you want music using FluidR3_GM and FluidR3_GS you need to download the soundfonts from: -https://osdn.net/projects/sfnet_androidframe/downloads/soundfonts/FluidR3_GM.sf2/ -https://osdn.net/projects/sfnet_androidframe/downloads/soundfonts/FluidR3_GS.sf2/ -and place them in /storage/roms/bios/timidity/sf2 - - -If you want music using freepats you need to download http://freepats.zenvoid.org/freepats-20060219.zip -and unzip the file to /storage/roms/bios/timidity/freepats - diff --git a/packages/tools/sound/timidity/config/timidity.cfg b/packages/tools/sound/timidity/config/timidity.cfg deleted file mode 100644 index 3ce424fd2..000000000 --- a/packages/tools/sound/timidity/config/timidity.cfg +++ /dev/null @@ -1,42 +0,0 @@ -# Instrument configuration file for timidity -# $Id: timidity.cfg,v 1.7 2005/09/03 19:26:03 hmh Exp $ - -# You can change just about every option in TiMidity++ using -# This config file. Please refer to the timidity.cfg(5) manpage -# for more details - -## If you have a slow CPU, uncomment these: -#opt EFresamp=d #disable resampling -#opt EFvlpf=d #disable VLPF -#opt EFreverb=d #disable reverb -#opt EFchorus=d #disable chorus -#opt EFdelay=d #disable delay -#opt anti-alias=d #disable sample anti-aliasing -#opt EWPVSETOZ #disable all Midi Controls -#opt p32a #default to 32 voices with auto reduction -#opt s32kHz #default sample frequency to 32kHz -#opt fast-decay #fast decay notes - -## If you have a moderate CPU, try these: -#opt EFresamp=l -#opt EFreverb=g,42 -#opt EFchorus=s -#opt s32kHz -#opt p64a - -# Disabling some of the Midi Controls can help with the CPU usage a lot. -# The same goes to the VLPF, sample anti-aliasing and effects such as -# reverb and chorus - - -# By default, try to use the instrument patches from GeneralUser.cfg: - -source /storage/.config/timidity/GeneralUser.cfg - -# alternatively, you can use freepats -# source /storage/.config/timidity/freepats.cfg - -# or alternatively, you can use the fluid-soundfont: -# source /storage/.config/timidity/fluidr3_gm.cfg -# source /storage/.config/timidity/fluidr3_gs.cfg - diff --git a/packages/tools/sound/timidity/package.mk b/packages/tools/sound/timidity/package.mk deleted file mode 100644 index 7300a87e2..000000000 --- a/packages/tools/sound/timidity/package.mk +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2020-present Shanti Gilbert (https://github.com/shantigilbert) - -PKG_NAME="timidity" -PKG_VERSION="2.15.0" -PKG_LICENSE="GPL2" -PKG_SITE="https://sourceforge.net/projects/timidity/" -PKG_URL="${SOURCEFORGE_SRC}/timidity/TiMidity++-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_mixer" -PKG_LONGDESC="TiMidity++" -PKG_TOOLCHAIN="autotools" - -pre_configure_target() { - # doesn't like to be build in target folder - cd ${PKG_BUILD} - rm -fr .${TARGET_NAME} - - # simple tool can be build directly - ${HOST_CC} timidity/calcnewt.c -o timidity/calcnewt_host -lm - - PKG_CONFIGURE_OPTS_TARGET="--host=${TARGET_NAME} \ - enable_audio=alsa \ - --with-default-output=alsa \ - --with-default-path=/storage/.config/timidity \ - lib_cv_va_copy=yes \ - lib_cv___va_copy=yes \ - lib_cv_va_val_copy=no" -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/config/timidity - cp -rf ${PKG_DIR}/config/* ${INSTALL}/usr/config/timidity - - mkdir -p ${INSTALL}/usr/bin - cp ${PKG_BUILD}/timidity/timidity ${INSTALL}/usr/bin -} diff --git a/packages/tools/sound/timidity/patches/02-calcnewt-host-build.patch b/packages/tools/sound/timidity/patches/02-calcnewt-host-build.patch deleted file mode 100644 index d8d59c01b..000000000 --- a/packages/tools/sound/timidity/patches/02-calcnewt-host-build.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/timidity/Makefile.am 2008-03-30 04:31:14.000000000 +0200 -+++ b/timidity/Makefile.am 2020-08-17 10:55:25.271404644 +0200 -@@ -446,21 +446,21 @@ resample.c: newton_table.c - - if VCPP - newton_table.c: calcnewt$(EXEEXT) -- ./calcnewt $@ -+ ./calcnewt_host $@ - - else - if POCC - newton_table.c: calcnewt$(EXEEXT) -- ./calcnewt $@ -+ ./calcnewt_host $@ - - else - if WATCOM_C - newton_table.c: calcnewt$(EXEEXT) -- ./calcnewt > $@ -+ ./calcnewt_host > $@ - - else - newton_table.c: calcnewt$(EXEEXT) -- ./calcnewt > $@ -+ ./calcnewt_host > $@ - - endif - endif diff --git a/packages/tools/sound/timidity/patches/03-ar-cru-fix.patch b/packages/tools/sound/timidity/patches/03-ar-cru-fix.patch deleted file mode 100644 index 78ababd58..000000000 --- a/packages/tools/sound/timidity/patches/03-ar-cru-fix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/interface/Makefile.am 2013-12-12 03:04:52.000000000 +0100 -+++ b/interface/Makefile.am 2020-08-17 10:56:55.977780546 +0200 -@@ -220,7 +220,7 @@ if POCC - if test -f interface.lib ; then touch $@ ; fi - else - rm -f libinterface.a -- $(AR) cru libinterface.a $(libinterface_a_OBJECTS) $(libinterface_a_LIBADD) -+ $(AR) cr libinterface.a $(libinterface_a_OBJECTS) $(libinterface_a_LIBADD) - $(RANLIB) libinterface.a - endif - endif diff --git a/packages/tools/u-boot-script/package.mk b/packages/tools/u-boot-script/package.mk deleted file mode 100644 index f1d986306..000000000 --- a/packages/tools/u-boot-script/package.mk +++ /dev/null @@ -1,25 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="u-boot-script" -PKG_VERSION="1.0" -PKG_LICENSE="GPL" -PKG_DEPENDS_TARGET="u-boot-tools:host" -PKG_TOOLCHAIN="manual" -PKG_LONGDESC="Compile scripts for u-boot environment." - -PKG_NEED_UNPACK="${PROJECT_DIR}/${PROJECT}/bootloader" -[ -n "${DEVICE}" ] && PKG_NEED_UNPACK+=" ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/bootloader" - -make_target() { - if find_dir_path bootloader/scripts ; then - for src in ${FOUND_PATH}/*.src ; do - mkimage -A ${TARGET_KERNEL_ARCH} -O linux -T script -C none -d "$src" "$(basename $src .src)" - done - fi -} - -makeinstall_target() { - mkdir -p ${INSTALL}/usr/share/bootloader - cp -a ${PKG_BUILD}/* ${INSTALL}/usr/share/bootloader/ -} diff --git a/packages/tools/xow/package.mk b/packages/tools/xow/package.mk deleted file mode 100644 index c9d5ebb9a..000000000 --- a/packages/tools/xow/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert) - -PKG_NAME="xow" -PKG_VERSION="d335d60" -PKG_LICENSE="GPLv2" -PKG_SITE="https://github.com/medusalix/xow" -PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Linux driver for the Xbox One wireless dongle " -PKG_TOOLCHAIN="make" - -PKG_MAKE_OPTS_TARGET=" BUILD=RELEASE" - -pre_configure_target() { -sed -i "s|ld -r|\$(LD) -r|" Makefile - -} -makeinstall_target() { -mkdir -p ${INSTALL}/usr/bin -cp xow ${INSTALL}/usr/bin -} From 5b104701eced8a0128a19660ac0b2b678324f607 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Thu, 11 Apr 2024 19:39:20 +0100 Subject: [PATCH 023/184] Amlogic: remove installer, we use recovery mode for internal install --- projects/Amlogic/devices/S922X/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index b2ae9b871..3413dc92c 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -108,7 +108,7 @@ fi # Some devices have internal storage. - INSTALLER_SUPPORT="yes" + INSTALLER_SUPPORT="no" # ROCKNIX Subdevices (supported devices: Odroid_GOU Odroid_N2 Odroid_N2L) SUBDEVICES="Odroid_GOU Odroid_N2 Odroid_N2L" From 70b0a3131af305f7b0c315a1a95b0fdf9d4b674d Mon Sep 17 00:00:00 2001 From: spycat88 Date: Thu, 11 Apr 2024 19:50:38 +0100 Subject: [PATCH 024/184] Amlogic: use kernel drivers where possible --- projects/Amlogic/devices/S922X/linux/linux.aarch64.conf | 6 +++--- projects/Amlogic/devices/S922X/options | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf index 467ee2ddd..c9b8b2033 100644 --- a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf +++ b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf @@ -2449,7 +2449,7 @@ CONFIG_RTL8192EE=m CONFIG_RTL8821AE=m CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m -CONFIG_RTLWIFI_PCI=m +# CONFIG_RTLWIFI_PCI is not set CONFIG_RTLWIFI_USB=m # CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m @@ -2466,7 +2466,7 @@ CONFIG_RTW88_8723D=m CONFIG_RTW88_8821C=m CONFIG_RTW88_8822BE=m # CONFIG_RTW88_8822BS is not set -# CONFIG_RTW88_8822BU is not set +CONFIG_RTW88_8822BU=m CONFIG_RTW88_8822CE=m # CONFIG_RTW88_8822CS is not set # CONFIG_RTW88_8822CU is not set @@ -2475,7 +2475,7 @@ CONFIG_RTW88_8723DE=m # CONFIG_RTW88_8723DU is not set CONFIG_RTW88_8821CE=m # CONFIG_RTW88_8821CS is not set -# CONFIG_RTW88_8821CU is not set +CONFIG_RTW88_8821CU=m # CONFIG_RTW88_DEBUG is not set # CONFIG_RTW88_DEBUGFS is not set CONFIG_RTW89=m diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index 3413dc92c..04799eb5e 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -91,7 +91,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU RTL8821CU RTL88x2BU" + ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU" if [ "${USE_MALI}" != "no" ]; then ADDITIONAL_DRIVERS+=" mali-bifrost" From b6f893c039304d630b5a266e90487f63335e77be Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sat, 13 Apr 2024 14:26:38 +0100 Subject: [PATCH 025/184] Amlogic: bump linux to 6.9-rc3 --- packages/kernel/linux/package.mk | 2 +- .../devices/S922X/linux/linux.aarch64.conf | 175 +++++++++++------- ...c-meson-g12b-odroid-n2-add-support-f.patch | 2 +- ...ply-core-ease-special-formatting-imp.patch | 44 +++++ 4 files changed, 155 insertions(+), 68 deletions(-) create mode 100644 projects/Amlogic/patches/linux/S922X/0045-Revert-power-supply-core-ease-special-formatting-imp.patch diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 9e88554da..badb14f46 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -24,7 +24,7 @@ case ${DEVICE} in PKG_URL="https://github.com/armbian/linux-rockchip/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" ;; - RK3566*) + RK3566*|S922X) PKG_VERSION="6.9-rc3" PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; diff --git a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf index c9b8b2033..df7d96f32 100644 --- a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf +++ b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf @@ -1,8 +1,8 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.7.4 Kernel Configuration +# Linux/arm64 6.9.0-rc3 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" +CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=120301 CONFIG_CLANG_VERSION=0 @@ -15,6 +15,7 @@ CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=0 @@ -152,8 +153,10 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y +CONFIG_GCC10_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y @@ -241,17 +244,17 @@ CONFIG_AIO=y CONFIG_IO_URING=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y -CONFIG_KCMP=y -CONFIG_RSEQ=y -CONFIG_CACHESTAT_SYSCALL=y -# CONFIG_DEBUG_RSEQ is not set CONFIG_HAVE_PERF_EVENTS=y -# CONFIG_PC104 is not set # # Kernel Performance Events And Counters @@ -268,7 +271,6 @@ CONFIG_PROFILING=y # # CONFIG_KEXEC is not set # CONFIG_KEXEC_FILE is not set -# CONFIG_CRASH_DUMP is not set # end of Kexec and crash features # end of General setup @@ -276,7 +278,6 @@ CONFIG_ARM64=y CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_64BIT=y CONFIG_MMU=y -CONFIG_ARM64_PAGE_SHIFT=12 CONFIG_ARM64_CONT_PTE_SHIFT=4 CONFIG_ARM64_CONT_PMD_SHIFT=4 CONFIG_ARCH_MMAP_RND_BITS_MIN=18 @@ -404,6 +405,7 @@ CONFIG_ARM64_4K_PAGES=y # CONFIG_ARM64_64K_PAGES is not set # CONFIG_ARM64_VA_BITS_39 is not set CONFIG_ARM64_VA_BITS_48=y +# CONFIG_ARM64_VA_BITS_52 is not set CONFIG_ARM64_VA_BITS=48 CONFIG_ARM64_PA_BITS_48=y CONFIG_ARM64_PA_BITS=48 @@ -513,6 +515,7 @@ CONFIG_RANDOMIZE_BASE=y CONFIG_RANDOMIZE_MODULE_REGION_FULL=y CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y CONFIG_STACKPROTECTOR_PER_TASK=y +CONFIG_ARM64_CONTPTE=y # end of Kernel Features # @@ -531,6 +534,8 @@ CONFIG_SUSPEND_FREEZER=y CONFIG_HIBERNATE_CALLBACKS=y CONFIG_HIBERNATION=y CONFIG_HIBERNATION_SNAPSHOT_DEV=y +CONFIG_HIBERNATION_COMP_LZO=y +CONFIG_HIBERNATION_DEF_COMP="lzo" CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y @@ -599,7 +604,6 @@ CONFIG_ARM_SCPI_CPUFREQ=y # end of CPU Frequency scaling # end of CPU Power Management -CONFIG_HAVE_KVM=y # CONFIG_VIRTUALIZATION is not set # @@ -633,6 +637,7 @@ CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_PERF_EVENTS_NMI=y @@ -683,8 +688,11 @@ CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -709,6 +717,7 @@ CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y # # GCOV-based kernel profiling @@ -751,6 +760,7 @@ CONFIG_BLK_DEV_BSG_COMMON=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY_T10=y +CONFIG_BLK_DEV_WRITE_MOUNTED=y # CONFIG_BLK_DEV_ZONED is not set CONFIG_BLK_DEV_THROTTLING=y # CONFIG_BLK_DEV_THROTTLING_LOW is not set @@ -837,9 +847,8 @@ CONFIG_SWAP=y # CONFIG_ZSWAP is not set # -# SLAB allocator options +# Slab allocator options # -# CONFIG_SLAB_DEPRECATED is not set CONFIG_SLUB=y # CONFIG_SLUB_TINY is not set CONFIG_SLAB_MERGE_DEFAULT=y @@ -848,7 +857,7 @@ CONFIG_SLAB_MERGE_DEFAULT=y # CONFIG_SLUB_STATS is not set CONFIG_SLUB_CPU_PARTIAL=y # CONFIG_RANDOM_KMALLOC_CACHES is not set -# end of SLAB allocator options +# end of Slab allocator options # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set # CONFIG_COMPAT_BRK is not set @@ -882,10 +891,10 @@ CONFIG_ARCH_WANTS_THP_SWAP=y CONFIG_TRANSPARENT_HUGEPAGE=y CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set CONFIG_THP_SWAP=y # CONFIG_READ_ONLY_THP_FOR_FS is not set CONFIG_CMA=y -# CONFIG_CMA_DEBUG is not set CONFIG_CMA_DEBUGFS=y # CONFIG_CMA_SYSFS is not set CONFIG_CMA_AREAS=7 @@ -934,7 +943,6 @@ CONFIG_SKB_EXTENSIONS=y CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set CONFIG_UNIX=y -CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y # CONFIG_UNIX_DIAG is not set CONFIG_TLS=y @@ -1159,6 +1167,7 @@ CONFIG_NETFILTER_XT_MATCH_STATE=m # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=m +CONFIG_IP_NF_IPTABLES_LEGACY=m # CONFIG_NF_SOCKET_IPV4 is not set # CONFIG_NF_TPROXY_IPV4 is not set # CONFIG_NF_DUP_IPV4 is not set @@ -1181,12 +1190,13 @@ CONFIG_IP_NF_MANGLE=m # CONFIG_IP_NF_TARGET_ECN is not set # CONFIG_IP_NF_TARGET_TTL is not set # CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_ARPFILTER is not set # end of IP: Netfilter Configuration # # IPv6: Netfilter Configuration # +CONFIG_IP6_NF_IPTABLES_LEGACY=m # CONFIG_NF_SOCKET_IPV6 is not set # CONFIG_NF_TPROXY_IPV6 is not set # CONFIG_NF_DUP_IPV6 is not set @@ -1217,7 +1227,6 @@ CONFIG_IP6_NF_NAT=m CONFIG_NF_DEFRAG_IPV6=m # CONFIG_NF_CONNTRACK_BRIDGE is not set # CONFIG_BRIDGE_NF_EBTABLES is not set -# CONFIG_BPFILTER is not set # CONFIG_IP_DCCP is not set # CONFIG_IP_SCTP is not set # CONFIG_RDS is not set @@ -1332,7 +1341,6 @@ CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y # CONFIG_BT_BNEP is not set CONFIG_BT_HIDP=m -CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_LE_L2CAP_ECRED=y # CONFIG_BT_LEDS is not set @@ -1387,10 +1395,8 @@ CONFIG_BT_MTKUART=m CONFIG_STREAM_PARSER=y # CONFIG_MCTP is not set CONFIG_WIRELESS=y -CONFIG_WIRELESS_EXT=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y -CONFIG_WEXT_PRIV=y CONFIG_CFG80211=m # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set @@ -1436,6 +1442,7 @@ CONFIG_ETHTOOL_NETLINK=y # CONFIG_ARM_AMBA=y CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_DOMAINS_GENERIC=y @@ -1480,7 +1487,6 @@ CONFIG_VGA_ARB_MAX_GPUS=16 # Cadence-based PCIe controllers # # CONFIG_PCIE_CADENCE_PLAT_HOST is not set -# CONFIG_PCI_J721E_HOST is not set # end of Cadence-based PCIe controllers # @@ -1543,6 +1549,7 @@ CONFIG_WANT_DEV_COREDUMP=y # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_SOC_BUS=y @@ -1584,7 +1591,6 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # end of ARM System Control and Management Interface Protocol CONFIG_ARM_SCPI_PROTOCOL=y -CONFIG_ARM_SCPI_POWER_DOMAIN=y # CONFIG_FIRMWARE_MEMMAP is not set # CONFIG_FW_CFG_SYSFS is not set # CONFIG_ARM_FFA_TRANSPORT is not set @@ -1659,7 +1665,6 @@ CONFIG_MTD_CFI_I2=y # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set # end of Mapping drivers for chip access @@ -1728,6 +1733,7 @@ CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_NULL_BLK is not set CONFIG_CDROM=y # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +# CONFIG_ZRAM is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 # CONFIG_BLK_DEV_DRBD is not set @@ -2182,6 +2188,9 @@ CONFIG_MICROCHIP_PHY=m # CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_NCN26000_PHY is not set # CONFIG_AT803X_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QCA807X_PHY is not set # CONFIG_QSEMI_PHY is not set CONFIG_REALTEK_PHY=y # CONFIG_RENESAS_PHY is not set @@ -2195,6 +2204,7 @@ CONFIG_SMSC_PHY=y # CONFIG_DP83867_PHY is not set # CONFIG_DP83869_PHY is not set # CONFIG_DP83TD510_PHY is not set +# CONFIG_DP83TG720_PHY is not set # CONFIG_VITESSE_PHY is not set # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set @@ -2326,8 +2336,9 @@ CONFIG_ATH10K_USB=m # CONFIG_ATH10K_DEBUGFS is not set CONFIG_WCN36XX=m # CONFIG_WCN36XX_DEBUGFS is not set +# CONFIG_ATH11K is not set +# CONFIG_ATH12K is not set CONFIG_WLAN_VENDOR_ATMEL=y -# CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set CONFIG_WLAN_VENDOR_BROADCOM=y CONFIG_B43=m @@ -2358,8 +2369,6 @@ CONFIG_BRCMFMAC_SDIO=y # CONFIG_BRCMFMAC_PCIE is not set # CONFIG_BRCM_TRACING is not set CONFIG_BRCMDBG=y -CONFIG_WLAN_VENDOR_CISCO=y -# CONFIG_AIRO is not set CONFIG_WLAN_VENDOR_INTEL=y # CONFIG_IPW2100 is not set # CONFIG_IPW2200 is not set @@ -2367,8 +2376,6 @@ CONFIG_WLAN_VENDOR_INTEL=y # CONFIG_IWL3945 is not set # CONFIG_IWLWIFI is not set CONFIG_WLAN_VENDOR_INTERSIL=y -# CONFIG_HOSTAP is not set -# CONFIG_HERMES is not set CONFIG_P54_COMMON=m CONFIG_P54_USB=m # CONFIG_P54_PCI is not set @@ -2449,7 +2456,7 @@ CONFIG_RTL8192EE=m CONFIG_RTL8821AE=m CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m -# CONFIG_RTLWIFI_PCI is not set +CONFIG_RTLWIFI_PCI=m CONFIG_RTLWIFI_USB=m # CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m @@ -2460,6 +2467,7 @@ CONFIG_RTL8XXXU=m CONFIG_RTW88=m CONFIG_RTW88_CORE=m CONFIG_RTW88_PCI=m +CONFIG_RTW88_USB=m CONFIG_RTW88_8822B=m CONFIG_RTW88_8822C=m CONFIG_RTW88_8723D=m @@ -2490,11 +2498,9 @@ CONFIG_WLAN_VENDOR_SILABS=y # CONFIG_WLAN_VENDOR_ST is not set # CONFIG_WLAN_VENDOR_TI is not set CONFIG_WLAN_VENDOR_ZYDAS=y -CONFIG_USB_ZD1201=m CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set # CONFIG_WLAN_VENDOR_QUANTENNA is not set -CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_MAC80211_HWSIM is not set # CONFIG_VIRT_WIFI is not set # CONFIG_WAN is not set @@ -2610,6 +2616,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y # CONFIG_JOYSTICK_QWIIC is not set # CONFIG_JOYSTICK_FSIA6B is not set # CONFIG_JOYSTICK_SENSEHAT is not set +# CONFIG_JOYSTICK_SEESAW is not set # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y @@ -2687,7 +2694,6 @@ CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y -CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set @@ -2959,6 +2965,7 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AW9523 is not set # CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set @@ -3159,9 +3166,11 @@ CONFIG_HWMON=y # CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set # CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set # CONFIG_SENSORS_AXI_FAN_CONTROL is not set CONFIG_SENSORS_ARM_SCPI=y # CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set # CONFIG_SENSORS_CORSAIR_PSU is not set # CONFIG_SENSORS_DRIVETEMP is not set @@ -3172,6 +3181,7 @@ CONFIG_SENSORS_ARM_SCPI=y # CONFIG_SENSORS_F71882FG is not set # CONFIG_SENSORS_F75375S is not set # CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set # CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_G760A is not set @@ -3197,6 +3207,7 @@ CONFIG_SENSORS_GPIO_FAN=m # CONFIG_SENSORS_LTC4245 is not set # CONFIG_SENSORS_LTC4260 is not set # CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set # CONFIG_SENSORS_MAX1111 is not set # CONFIG_SENSORS_MAX127 is not set # CONFIG_SENSORS_MAX16065 is not set @@ -3246,10 +3257,12 @@ CONFIG_SENSORS_GPIO_FAN=m # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_NPCM7XX is not set # CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set # CONFIG_SENSORS_NZXT_SMART2 is not set # CONFIG_SENSORS_OCC_P8_I2C is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set CONFIG_SENSORS_PWM_FAN=m # CONFIG_SENSORS_SBTSI is not set # CONFIG_SENSORS_SBRMI is not set @@ -3303,10 +3316,10 @@ CONFIG_SENSORS_PWM_FAN=m CONFIG_THERMAL=y # CONFIG_THERMAL_NETLINK is not set # CONFIG_THERMAL_STATISTICS is not set +# CONFIG_THERMAL_DEBUGFS is not set CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y -# CONFIG_THERMAL_WRITABLE_TRIPS is not set CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set @@ -3521,6 +3534,7 @@ CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_NETLINK_EVENTS is not set # CONFIG_REGULATOR_88PG86X is not set # CONFIG_REGULATOR_ACT8865 is not set # CONFIG_REGULATOR_AD5398 is not set @@ -3826,6 +3840,7 @@ CONFIG_VIDEOBUF2_DMA_SG=m # CONFIG_VIDEO_TVP5150 is not set # CONFIG_VIDEO_TVP7002 is not set # CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9900 is not set # CONFIG_VIDEO_TW9903 is not set # CONFIG_VIDEO_TW9906 is not set # CONFIG_VIDEO_TW9910 is not set @@ -3897,8 +3912,7 @@ CONFIG_VIDEOBUF2_DMA_SG=m # # Graphics support # -CONFIG_VIDEO_CMDLINE=y -CONFIG_VIDEO_NOMODESET=y +CONFIG_VIDEO=y # CONFIG_AUXDISPLAY is not set CONFIG_DRM=y CONFIG_DRM_MIPI_DSI=y @@ -3936,6 +3950,7 @@ CONFIG_DRM_GEM_DMA_HELPER=y # CONFIG_DRM_RADEON is not set # CONFIG_DRM_AMDGPU is not set # CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_XE is not set # CONFIG_DRM_VGEM is not set # CONFIG_DRM_VKMS is not set # CONFIG_DRM_VMWGFX is not set @@ -3954,34 +3969,35 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_AUO_A030JTN01 is not set # CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set # CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set +# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set -# CONFIG_DRM_PANEL_DSI_CM is not set -# CONFIG_DRM_PANEL_LVDS is not set -# CONFIG_DRM_PANEL_SIMPLE is not set -# CONFIG_DRM_PANEL_EDP is not set # CONFIG_DRM_PANEL_EBBG_FT8719 is not set # CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set # CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set +# CONFIG_DRM_PANEL_DSI_CM is not set +# CONFIG_DRM_PANEL_LVDS is not set +# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set # CONFIG_DRM_PANEL_HIMAX_HX8394 is not set # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set # CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set # CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set # CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set -# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_LPM102A188A is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_R63452 is not set # CONFIG_DRM_PANEL_KHADAS_TS050 is not set # CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set # CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set # CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set -# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_LG_LB035Q02 is not set # CONFIG_DRM_PANEL_LG_LG4573 is not set # CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set +# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set # CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set # CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set @@ -3990,8 +4006,8 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set # CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set -# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set # CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set # CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set @@ -4002,15 +4018,16 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set # CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set # CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set # CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set @@ -4025,14 +4042,17 @@ CONFIG_DRM_PANEL_SITRONIX_ST7701=y # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set # CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set # CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set +# CONFIG_DRM_PANEL_EDP is not set +# CONFIG_DRM_PANEL_SIMPLE is not set +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set # CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set # CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DRM_PANEL_TPO_TPG110 is not set # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set -# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set # end of Display Panels @@ -4088,7 +4108,6 @@ CONFIG_DRM_DW_HDMI_I2S_AUDIO=y CONFIG_DRM_DW_MIPI_DSI=y # end of Display Interface Bridges -# CONFIG_DRM_LOONGSON is not set # CONFIG_DRM_ETNAVIV is not set # CONFIG_DRM_HISI_HIBMC is not set # CONFIG_DRM_HISI_KIRIN is not set @@ -4117,7 +4136,7 @@ CONFIG_DRM_MESON_DW_MIPI_DSI=y # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set -# CONFIG_DRM_LEGACY is not set +# CONFIG_DRM_POWERVR is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y # @@ -4126,7 +4145,6 @@ CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y CONFIG_FB=y # CONFIG_FB_CIRRUS is not set # CONFIG_FB_PM2 is not set -# CONFIG_FB_ARMCLCD is not set # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_ASILIANT is not set # CONFIG_FB_IMSTT is not set @@ -4168,10 +4186,9 @@ CONFIG_FB_SYS_FILLRECT=y CONFIG_FB_SYS_COPYAREA=y CONFIG_FB_SYS_IMAGEBLIT=y # CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_SYS_FOPS=y +CONFIG_FB_SYSMEM_FOPS=y CONFIG_FB_DEFERRED_IO=y CONFIG_FB_DMAMEM_HELPERS=y -CONFIG_FB_IOMEM_FOPS=y CONFIG_FB_SYSMEM_HELPERS=y CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y CONFIG_FB_MODE_HELPERS=y @@ -4184,6 +4201,7 @@ CONFIG_FB_MODE_HELPERS=y # CONFIG_LCD_CLASS_DEVICE is not set CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set # CONFIG_BACKLIGHT_KTZ8866 is not set CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_QCOM_WLED is not set @@ -4192,6 +4210,7 @@ CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_MP3309C is not set CONFIG_BACKLIGHT_GPIO=y # CONFIG_BACKLIGHT_LV5207LP is not set # CONFIG_BACKLIGHT_BD6107 is not set @@ -4659,6 +4678,7 @@ CONFIG_HID_XINMO=y CONFIG_HID_ZYDACRON=y # CONFIG_HID_SENSOR_HUB is not set # CONFIG_HID_ALPS is not set +# CONFIG_HID_MCP2200 is not set # CONFIG_HID_MCP2221 is not set # end of Special HID drivers @@ -4702,6 +4722,7 @@ CONFIG_USB_OTG=y # CONFIG_USB_OTG_FSM is not set # CONFIG_USB_LEDS_TRIGGER_USBPORT is not set CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 CONFIG_USB_MON=m # @@ -4946,8 +4967,10 @@ CONFIG_TYPEC_FUSB302=m # CONFIG_TYPEC_MUX_FSA4480 is not set # CONFIG_TYPEC_MUX_GPIO_SBU is not set # CONFIG_TYPEC_MUX_PI3USB30532 is not set +# CONFIG_TYPEC_MUX_IT5205 is not set # CONFIG_TYPEC_MUX_NB7VPQ904M is not set # CONFIG_TYPEC_MUX_PTN36502 is not set +# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set # end of USB Type-C Multiplexer/DeMultiplexer Switch support # @@ -5011,8 +5034,6 @@ CONFIG_LEDS_CLASS=y CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_LP3952 is not set -# CONFIG_LEDS_LP50XX is not set -# CONFIG_LEDS_LP55XX_COMMON is not set # CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set @@ -5109,6 +5130,7 @@ CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_DRV_DS1672 is not set CONFIG_RTC_DRV_HYM8563=m # CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set # CONFIG_RTC_DRV_NCT3018Y is not set CONFIG_RTC_DRV_RK808=y # CONFIG_RTC_DRV_RS5C372 is not set @@ -5276,8 +5298,11 @@ CONFIG_STAGING=y CONFIG_STAGING_MEDIA=y # CONFIG_VIDEO_MAX96712 is not set CONFIG_VIDEO_MESON_VDEC=y + +# +# StarFive media platform drivers +# # CONFIG_STAGING_MEDIA_DEPRECATED is not set -# CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set # CONFIG_FB_TFT is not set # CONFIG_KS7010 is not set @@ -5456,6 +5481,7 @@ CONFIG_MESON_GX_SOCINFO=y # # Qualcomm SoC drivers # +# CONFIG_QCOM_PBS is not set # end of Qualcomm SoC drivers # CONFIG_SOC_TI is not set @@ -5478,6 +5504,8 @@ CONFIG_MESON_EE_PM_DOMAINS=y CONFIG_MESON_SECURE_PM_DOMAINS=y # end of Amlogic PM Domains +CONFIG_ARM_SCPI_POWER_DOMAIN=y + # # Broadcom PM Domains # @@ -5592,6 +5620,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # CONFIG_AD4130 is not set # CONFIG_AD7091R5 is not set +# CONFIG_AD7091R8 is not set # CONFIG_AD7124 is not set # CONFIG_AD7192 is not set # CONFIG_AD7266 is not set @@ -5611,6 +5640,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_AD7923 is not set # CONFIG_AD7949 is not set # CONFIG_AD799X is not set +# CONFIG_AD9467 is not set # CONFIG_ADI_AXI_ADC is not set # CONFIG_CC10001_ADC is not set # CONFIG_ENVELOPE_DETECTOR is not set @@ -5629,6 +5659,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_MAX11410 is not set # CONFIG_MAX1241 is not set # CONFIG_MAX1363 is not set +# CONFIG_MAX34408 is not set # CONFIG_MAX9611 is not set # CONFIG_MCP320X is not set # CONFIG_MCP3422 is not set @@ -5636,6 +5667,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_MCP3911 is not set CONFIG_MESON_SARADC=y # CONFIG_NAU7802 is not set +# CONFIG_PAC1934 is not set # CONFIG_QCOM_SPMI_IADC is not set # CONFIG_QCOM_SPMI_VADC is not set # CONFIG_QCOM_SPMI_ADC5 is not set @@ -5651,6 +5683,7 @@ CONFIG_MESON_SARADC=y # CONFIG_TI_ADS1015 is not set # CONFIG_TI_ADS7924 is not set # CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1298 is not set # CONFIG_TI_ADS7950 is not set # CONFIG_TI_ADS8344 is not set # CONFIG_TI_ADS8688 is not set @@ -5694,6 +5727,7 @@ CONFIG_MESON_SARADC=y # # Chemical Sensors # +# CONFIG_AOSONG_AGS02MA is not set # CONFIG_ATLAS_PH_SENSOR is not set # CONFIG_ATLAS_EZO_SENSOR is not set # CONFIG_BME680 is not set @@ -5763,6 +5797,7 @@ CONFIG_MESON_SARADC=y # CONFIG_MAX5821 is not set # CONFIG_MCP4725 is not set # CONFIG_MCP4728 is not set +# CONFIG_MCP4821 is not set # CONFIG_MCP4922 is not set # CONFIG_TI_DAC082S085 is not set # CONFIG_TI_DAC5571 is not set @@ -5798,6 +5833,7 @@ CONFIG_MESON_SARADC=y # CONFIG_ADF4350 is not set # CONFIG_ADF4371 is not set # CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set # CONFIG_ADMV1013 is not set # CONFIG_ADMV1014 is not set # CONFIG_ADMV4420 is not set @@ -5842,6 +5878,7 @@ CONFIG_MESON_SARADC=y # CONFIG_DHT11 is not set # CONFIG_HDC100X is not set # CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set # CONFIG_HTS221 is not set # CONFIG_HTU21 is not set # CONFIG_SI7005 is not set @@ -5857,6 +5894,8 @@ CONFIG_MESON_SARADC=y # CONFIG_ADIS16480 is not set # CONFIG_BMI160_I2C is not set # CONFIG_BMI160_SPI is not set +# CONFIG_BMI323_I2C is not set +# CONFIG_BMI323_SPI is not set # CONFIG_BOSCH_BNO055_SERIAL is not set # CONFIG_BOSCH_BNO055_I2C is not set # CONFIG_FXOS8700_I2C is not set @@ -5892,10 +5931,12 @@ CONFIG_MESON_SARADC=y # CONFIG_SENSORS_ISL29018 is not set # CONFIG_SENSORS_ISL29028 is not set # CONFIG_ISL29125 is not set +# CONFIG_ISL76682 is not set # CONFIG_JSA1212 is not set # CONFIG_ROHM_BU27008 is not set # CONFIG_ROHM_BU27034 is not set # CONFIG_RPR0521 is not set +# CONFIG_LTR390 is not set # CONFIG_LTR501 is not set # CONFIG_LTRF216A is not set # CONFIG_LV0104CS is not set @@ -5921,6 +5962,7 @@ CONFIG_MESON_SARADC=y # CONFIG_VCNL4035 is not set # CONFIG_VEML6030 is not set # CONFIG_VEML6070 is not set +# CONFIG_VEML6075 is not set # CONFIG_VL6180 is not set # CONFIG_ZOPT2201 is not set # end of Light sensors @@ -5928,6 +5970,7 @@ CONFIG_MESON_SARADC=y # # Magnetometer sensors # +# CONFIG_AF8133J is not set # CONFIG_AK8974 is not set # CONFIG_AK8975 is not set # CONFIG_AK09911 is not set @@ -5999,6 +6042,7 @@ CONFIG_MESON_SARADC=y # CONFIG_DLHL60D is not set # CONFIG_DPS310 is not set # CONFIG_HP03 is not set +# CONFIG_HSC030PA is not set # CONFIG_ICP10100 is not set # CONFIG_MPL115_I2C is not set # CONFIG_MPL115_SPI is not set @@ -6052,6 +6096,7 @@ CONFIG_MESON_SARADC=y # CONFIG_MAXIM_THERMOCOUPLE is not set # CONFIG_MLX90614 is not set # CONFIG_MLX90632 is not set +# CONFIG_MLX90635 is not set # CONFIG_TMP006 is not set # CONFIG_TMP007 is not set # CONFIG_TMP117 is not set @@ -6060,6 +6105,7 @@ CONFIG_MESON_SARADC=y # CONFIG_MAX30208 is not set # CONFIG_MAX31856 is not set # CONFIG_MAX31865 is not set +# CONFIG_MCP9600 is not set # end of Temperature sensors # CONFIG_NTB is not set @@ -6092,6 +6138,7 @@ CONFIG_MESON_IRQ_GPIO=y # CONFIG_IPACK_BUS is not set CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set CONFIG_RESET_MESON=y CONFIG_RESET_MESON_AUDIO_ARB=y # CONFIG_RESET_SIMPLE is not set @@ -6150,6 +6197,7 @@ CONFIG_POWERCAP=y # CONFIG_ARM_SPE_PMU is not set # CONFIG_HISI_PCIE_PMU is not set # CONFIG_HNS3_PMU is not set +# CONFIG_DWC_PCIE_PMU is not set # CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set # CONFIG_MESON_DDR_PMU is not set # end of Performance monitor support @@ -6167,6 +6215,7 @@ CONFIG_RAS=y # CONFIG_DAX is not set CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y +CONFIG_NVMEM_LAYOUTS=y # # Layout Types @@ -6222,6 +6271,7 @@ CONFIG_PM_OPP=y CONFIG_DCACHE_WORD_ACCESS=y CONFIG_VALIDATE_FS_PARSER=y CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y CONFIG_BUFFER_HEAD=y CONFIG_LEGACY_DIRECT_IO=y # CONFIG_EXT2_FS is not set @@ -6285,6 +6335,7 @@ CONFIG_AUTOFS_FS=y CONFIG_FUSE_FS=m # CONFIG_CUSE is not set # CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y CONFIG_OVERLAY_FS=m CONFIG_OVERLAY_FS_REDIRECT_DIR=y CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y @@ -6296,12 +6347,6 @@ CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # # Caches # -CONFIG_NETFS_SUPPORT=y -# CONFIG_NETFS_STATS is not set -CONFIG_FSCACHE=y -# CONFIG_FSCACHE_STATS is not set -# CONFIG_FSCACHE_DEBUG is not set -# CONFIG_CACHEFILES is not set # end of Caches # @@ -6324,7 +6369,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set # CONFIG_NTFS3_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems @@ -6584,14 +6628,12 @@ CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_ARC4=y CONFIG_CRYPTO_CHACHA20=y CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_CFB=m CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=m CONFIG_CRYPTO_ECB=y # CONFIG_CRYPTO_HCTR2 is not set # CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set # CONFIG_CRYPTO_XTS is not set # end of Length-preserving ciphers and modes @@ -6646,7 +6688,7 @@ CONFIG_CRYPTO_CRC64_ROCKSOFT=y # Compression # # CONFIG_CRYPTO_DEFLATE is not set -# CONFIG_CRYPTO_LZO is not set +CONFIG_CRYPTO_LZO=y # CONFIG_CRYPTO_842 is not set # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set @@ -6721,6 +6763,7 @@ CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_QAT_C3XXX is not set # CONFIG_CRYPTO_DEV_QAT_C62X is not set # CONFIG_CRYPTO_DEV_QAT_4XXX is not set +# CONFIG_CRYPTO_DEV_QAT_420XX is not set # CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set # CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set # CONFIG_CRYPTO_DEV_QAT_C62XVF is not set @@ -6766,7 +6809,6 @@ CONFIG_GENERIC_NET_UTILS=y CONFIG_CORDIC=m # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y -CONFIG_GENERIC_PCI_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_ARCH_USE_SYM_ANNOTATIONS=y @@ -6907,6 +6949,7 @@ CONFIG_FONT_6x8=y CONFIG_SG_POOL=y CONFIG_ARCH_STACKWALK=y CONFIG_STACKDEPOT=y +CONFIG_STACKDEPOT_MAX_FRAMES=64 CONFIG_SBITMAP=y # CONFIG_LWQ_TEST is not set # end of Library routines @@ -6940,7 +6983,7 @@ CONFIG_DEBUG_KERNEL=y # # Compile-time checks and compiler options # -CONFIG_AS_HAS_NON_CONST_LEB128=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y CONFIG_DEBUG_INFO_NONE=y # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set # CONFIG_DEBUG_INFO_DWARF4 is not set @@ -6971,7 +7014,7 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y # CONFIG_DEBUG_FS_ALLOW_NONE is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_UBSAN=y # CONFIG_UBSAN is not set CONFIG_HAVE_ARCH_KCSAN=y CONFIG_HAVE_KCSAN_COMPILER=y diff --git a/projects/Amlogic/patches/linux/S922X/0044-arm64-dts-amlogic-meson-g12b-odroid-n2-add-support-f.patch b/projects/Amlogic/patches/linux/S922X/0044-arm64-dts-amlogic-meson-g12b-odroid-n2-add-support-f.patch index 3ff6f2e53..2dc7b2b74 100644 --- a/projects/Amlogic/patches/linux/S922X/0044-arm64-dts-amlogic-meson-g12b-odroid-n2-add-support-f.patch +++ b/projects/Amlogic/patches/linux/S922X/0044-arm64-dts-amlogic-meson-g12b-odroid-n2-add-support-f.patch @@ -27,7 +27,7 @@ index 91c9769fda20..326f9d8810af 100644 + }; + }; + - hub_5v: regulator-hub_5v { + hub_5v: regulator-hub-5v { compatible = "regulator-fixed"; regulator-name = "HUB_5V"; -- diff --git a/projects/Amlogic/patches/linux/S922X/0045-Revert-power-supply-core-ease-special-formatting-imp.patch b/projects/Amlogic/patches/linux/S922X/0045-Revert-power-supply-core-ease-special-formatting-imp.patch new file mode 100644 index 000000000..f0997f6f0 --- /dev/null +++ b/projects/Amlogic/patches/linux/S922X/0045-Revert-power-supply-core-ease-special-formatting-imp.patch @@ -0,0 +1,44 @@ +From 6a27a420ff3830226aa930d9ed7109d9a6e68d52 Mon Sep 17 00:00:00 2001 +From: spycat88 +Date: Sat, 13 Apr 2024 17:16:30 +0100 +Subject: [PATCH 45/45] Revert "power: supply: core: ease special formatting + implementations" + +This reverts commit 521d75b4174e9cbfad73e7d0ac34fd6461b542d7. +--- + drivers/power/supply/power_supply_sysfs.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c +index 0d2c3724d0bc..bdbeaece7f13 100644 +--- a/drivers/power/supply/power_supply_sysfs.c ++++ b/drivers/power/supply/power_supply_sysfs.c +@@ -315,6 +315,11 @@ static ssize_t power_supply_show_property(struct device *dev, + } + } + ++ if (ps_attr->text_values_len > 0 && ++ value.intval < ps_attr->text_values_len && value.intval >= 0) { ++ return sysfs_emit(buf, "%s\n", ps_attr->text_values[value.intval]); ++ } ++ + switch (psp) { + case POWER_SUPPLY_PROP_USB_TYPE: + ret = power_supply_show_usb_type(dev, psy->desc, +@@ -327,12 +332,7 @@ static ssize_t power_supply_show_property(struct device *dev, + ret = sysfs_emit(buf, "%s\n", value.strval); + break; + default: +- if (ps_attr->text_values_len > 0 && +- value.intval < ps_attr->text_values_len && value.intval >= 0) { +- ret = sysfs_emit(buf, "%s\n", ps_attr->text_values[value.intval]); +- } else { +- ret = sysfs_emit(buf, "%d\n", value.intval); +- } ++ ret = sysfs_emit(buf, "%d\n", value.intval); + } + + return ret; +-- +2.34.1 + From bb83110bf321e9f485c145703706ac5a0d7af9eb Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:46:53 +0000 Subject: [PATCH 026/184] Clean up portmaster input setup --- packages/apps/portmaster/package.mk | 2 +- packages/apps/portmaster/sources/control.txt | 8 +++++++- packages/apps/portmaster/sources/mapper.txt | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/apps/portmaster/package.mk b/packages/apps/portmaster/package.mk index 75f1d54d3..1a7f113e7 100644 --- a/packages/apps/portmaster/package.mk +++ b/packages/apps/portmaster/package.mk @@ -8,7 +8,7 @@ PKG_URL="${PKG_SITE}/releases/download/${PKG_VERSION}/PortMaster.zip" COMPAT_URL="https://github.com/ROCKNIX/packages/raw/main/compat.zip" PKG_LICENSE="MIT" PKG_ARCH="arm aarch64" -PKG_DEPENDS_TARGET="toolchain rocknix-hotkey gamecontrollerdb wget oga_controls control-gen" +PKG_DEPENDS_TARGET="toolchain rocknix-hotkey gamecontrollerdb wget oga_controls control-gen xmlstarlet" PKG_TOOLCHAIN="manual" PKG_LONGDESC="Portmaster - a simple tool that allows you to download various game ports" diff --git a/packages/apps/portmaster/sources/control.txt b/packages/apps/portmaster/sources/control.txt index 9c5d64b89..fbef44146 100644 --- a/packages/apps/portmaster/sources/control.txt +++ b/packages/apps/portmaster/sources/control.txt @@ -76,7 +76,13 @@ get_controls() { param_device="${profile}" # Extract GUID of current input - GUID=$(control-gen | awk 'BEGIN {FS="\""} /^DEVICE/ {print $2;exit}') + DGUID=$(control-gen | awk 'BEGIN {FS="\""} /^DEVICE/ {print $2;exit}') + + # Copy es_input into temp + cp -r /storage/.config/emulationstation/es_input.cfg /tmp/es_input.cfg + + # Remove records from es_input that dont match device GUID + xmlstarlet ed --inplace -d "inputList/inputConfig[@deviceGUID!='${DGUID}']" /tmp/es_input.cfg # Set file export SDL_GAMECONTROLLERCONFIG_FILE="/tmp/gamecontrollerdb.txt" diff --git a/packages/apps/portmaster/sources/mapper.txt b/packages/apps/portmaster/sources/mapper.txt index 7df09ea33..8b3f0ac98 100644 --- a/packages/apps/portmaster/sources/mapper.txt +++ b/packages/apps/portmaster/sources/mapper.txt @@ -16,7 +16,7 @@ controlfolder="$2" echo "" > ${CONTROLLER_DB} # Where the emulationstation configuration file is -ES_CONFIG="${HOME}/.config/emulationstation/es_input.cfg" +ES_CONFIG="/tmp/es_input.cfg" #Set layout via Emulation Station ACTIVE_GAME="" From b76a4cc536f471a9c99353a68545ed3a19b7fe6b Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Sat, 13 Apr 2024 17:16:03 -0700 Subject: [PATCH 027/184] Fix build issues with kernel 6.9.x pull latest systemd patches to address this issue Signed-off-by: Paul Reioux --- .../systemd/patches/add-PIDFS-magic.patch | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/sysutils/systemd/patches/add-PIDFS-magic.patch diff --git a/packages/sysutils/systemd/patches/add-PIDFS-magic.patch b/packages/sysutils/systemd/patches/add-PIDFS-magic.patch new file mode 100644 index 000000000..ea7af527e --- /dev/null +++ b/packages/sysutils/systemd/patches/add-PIDFS-magic.patch @@ -0,0 +1,48 @@ +From 4a5f23dd0cffbbcfddc04497e435d47e7e5091e6 Mon Sep 17 00:00:00 2001 +From: Chris Packham +Date: Mon, 11 Mar 2024 16:32:52 +1300 +Subject: [PATCH] basic: add PIDFS magic + +Kernel commit cb12fd8e0dabb9a1c8aef55a6a41e2c255fcdf4b added pidfs. +Update filesystems-gperf.gperf and missing_magic.h accordingly. + +This fixes the following error building against a bleeding edge kernel. +``` +../src/basic/meson.build:234:8: ERROR: Problem encountered: Unknown filesystems defined in kernel headers: + +Filesystem found in kernel header but not in filesystems-gperf.gperf: PID_FS_MAGIC +``` +--- + src/basic/filesystems-gperf.gperf | 1 + + src/basic/missing_magic.h | 5 +++++ + 2 files changed, 6 insertions(+) + +diff --git a/src/basic/filesystems-gperf.gperf b/src/basic/filesystems-gperf.gperf +index e8c5357f91461..1cd66b5a5fa99 100644 +--- a/src/basic/filesystems-gperf.gperf ++++ b/src/basic/filesystems-gperf.gperf +@@ -91,6 +91,7 @@ ocfs2, {OCFS2_SUPER_MAGIC} + openpromfs, {OPENPROM_SUPER_MAGIC} + orangefs, {ORANGEFS_DEVREQ_MAGIC} + overlay, {OVERLAYFS_SUPER_MAGIC} ++pidfs, {PID_FS_MAGIC} + pipefs, {PIPEFS_MAGIC} + ppc-cmm, {PPC_CMM_MAGIC} + proc, {PROC_SUPER_MAGIC} +diff --git a/src/basic/missing_magic.h b/src/basic/missing_magic.h +index 27a33adecb4ed..82d71c8ad1233 100644 +--- a/src/basic/missing_magic.h ++++ b/src/basic/missing_magic.h +@@ -128,6 +128,11 @@ + #define DEVMEM_MAGIC 0x454d444d + #endif + ++/* cb12fd8e0dabb9a1c8aef55a6a41e2c255fcdf4b (6.8) */ ++#ifndef PID_FS_MAGIC ++#define PID_FS_MAGIC 0x50494446 ++#endif ++ + /* Not in mainline but included in Ubuntu */ + #ifndef SHIFTFS_MAGIC + #define SHIFTFS_MAGIC 0x6a656a62 + From e713ee78866755e3e7510ea58e43262fbbf4f8aa Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 14 Apr 2024 00:08:40 +0100 Subject: [PATCH 028/184] rocknix-joypad: introduce package --- .../kernel/drivers/rocknix-joypad/package.mk | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/kernel/drivers/rocknix-joypad/package.mk diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk new file mode 100644 index 000000000..9b85e310d --- /dev/null +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="rocknix-joypad" +PKG_VERSION="3f857f0f5905a565ccef58fa8231b4b511d281a1" +PKG_LICENSE="GPL" +PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" +PKG_LONGDESC="rocknix-joypad: ROCKNIX joypad driver" +PKG_DEPENDS_TARGET="toolchain linux" +PKG_NEED_UNPACK="${LINUX_DEPENDS}" +PKG_TOOLCHAIN="manual" +PKG_IS_KERNEL_PKG="yes" + +pre_make_target() { + unset LDFLAGS +} + +make_target() { + kernel_make -C $(kernel_path) M=${PKG_BUILD} +} + +makeinstall_target() { + mkdir -p ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} + cp *.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} +} From 90e83973234eacbc9cba654ce595222f38904948 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 14 Apr 2024 07:21:19 +0100 Subject: [PATCH 029/184] S922X: use rocknix-joypad driver --- projects/Amlogic/devices/S922X/options | 2 +- ...ck-add-odroid-go-ultra-joypad-driver.patch | 1050 ----------------- ...m64-meson-odroid-go-ultra-add-joypad.patch | 4 +- ...-add-dt-for-powkiddy-rgb10-max-3-pro.patch | 2 +- 4 files changed, 4 insertions(+), 1054 deletions(-) delete mode 100644 projects/Amlogic/patches/linux/S922X/0011-input-joystick-add-odroid-go-ultra-joypad-driver.patch diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index 04799eb5e..0edde3f0d 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -91,7 +91,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU" + ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU rocknix-joypad" if [ "${USE_MALI}" != "no" ]; then ADDITIONAL_DRIVERS+=" mali-bifrost" diff --git a/projects/Amlogic/patches/linux/S922X/0011-input-joystick-add-odroid-go-ultra-joypad-driver.patch b/projects/Amlogic/patches/linux/S922X/0011-input-joystick-add-odroid-go-ultra-joypad-driver.patch deleted file mode 100644 index b457bd06f..000000000 --- a/projects/Amlogic/patches/linux/S922X/0011-input-joystick-add-odroid-go-ultra-joypad-driver.patch +++ /dev/null @@ -1,1050 +0,0 @@ -From 8321fa2704f8e4a8a916994d3564995034190357 Mon Sep 17 00:00:00 2001 -From: brooksytech <1673861+brooksytech@users.noreply.github.com> -Date: Wed, 24 Jan 2024 21:55:38 +0000 -Subject: [PATCH 11/44] input: joystick: add odroid-go ultra-joypad driver - ---- - drivers/input/joystick/Kconfig | 6 + - drivers/input/joystick/Makefile | 1 + - drivers/input/joystick/amlogic-saradc.h | 32 + - drivers/input/joystick/odroid-gou-joypad.c | 960 +++++++++++++++++++++ - 4 files changed, 999 insertions(+) - create mode 100644 drivers/input/joystick/amlogic-saradc.h - create mode 100644 drivers/input/joystick/odroid-gou-joypad.c - -diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig -index 7755e5b454d2..ad7b5584d3fe 100644 ---- a/drivers/input/joystick/Kconfig -+++ b/drivers/input/joystick/Kconfig -@@ -344,6 +344,12 @@ config JOYSTICK_MAPLE - To compile this as a module choose M here: the module will be called - maplecontrol. - -+config JOYSTICK_ODROID_GOU -+ tristate "ODROID-Go-Ultra joypad driver" -+ depends on INPUT_POLLDEV -+ help -+ Made for ODROID-GO-Ultra. -+ - config JOYSTICK_PSXPAD_SPI - tristate "PlayStation 1/2 joypads via SPI interface" - depends on SPI -diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile -index 9976f596a920..b19b42acc573 100644 ---- a/drivers/input/joystick/Makefile -+++ b/drivers/input/joystick/Makefile -@@ -25,6 +25,7 @@ obj-$(CONFIG_JOYSTICK_JOYDUMP) += joydump.o - obj-$(CONFIG_JOYSTICK_MAGELLAN) += magellan.o - obj-$(CONFIG_JOYSTICK_MAPLE) += maplecontrol.o - obj-$(CONFIG_JOYSTICK_N64) += n64joy.o -+obj-$(CONFIG_JOYSTICK_ODROID_GOU) += odroid-gou-joypad.o - obj-$(CONFIG_JOYSTICK_PSXPAD_SPI) += psxpad-spi.o - obj-$(CONFIG_JOYSTICK_PXRC) += pxrc.o - obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-joystick.o -diff --git a/drivers/input/joystick/amlogic-saradc.h b/drivers/input/joystick/amlogic-saradc.h -new file mode 100644 -index 000000000000..126796b99924 ---- /dev/null -+++ b/drivers/input/joystick/amlogic-saradc.h -@@ -0,0 +1,32 @@ -+/* -+ * include/dt-bindings/iio/adc/amlogic-saradc.h -+ * -+ * Copyright (C) 2017 Amlogic, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ */ -+ -+#ifndef _DT_BINDINGS_IIO_ADC_AMLOGIC_H -+#define _DT_BINDINGS_IIO_ADC_AMLOGIC_H -+ -+#define SARADC_CH0 0 -+#define SARADC_CH1 1 -+#define SARADC_CH2 2 -+#define SARADC_CH3 3 -+#define SARADC_CH4 4 -+#define SARADC_CH5 5 -+#define SARADC_CH6 6 -+#define SARADC_CH7 7 -+ -+#define SARADC_CH_NUM 8 -+ -+#endif -diff --git a/drivers/input/joystick/odroid-gou-joypad.c b/drivers/input/joystick/odroid-gou-joypad.c -new file mode 100644 -index 000000000000..93f7644c469b ---- /dev/null -+++ b/drivers/input/joystick/odroid-gou-joypad.c -@@ -0,0 +1,960 @@ -+/*----------------------------------------------------------------------------*/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "amlogic-saradc.h" -+#include -+ -+/*----------------------------------------------------------------------------*/ -+#define DRV_NAME "odroidgo_joypad" -+ -+/*----------------------------------------------------------------------------*/ -+ -+ -+/*----------------------------------------------------------------------------*/ -+#define ADC_MAX_VOLTAGE 1800 -+#define ADC_DATA_TUNING(x, p) ((x * p) / 100) -+#define ADC_TUNING_DEFAULT 180 -+ -+struct bt_adc { -+ /* report value (mV) */ -+ int value; -+ /* report type */ -+ int report_type; -+ /* input device init value (mV) */ -+ int max, min; -+ /* calibrated adc value */ -+ int cal; -+ /* adc scale value */ -+ int scale; -+ /* invert report */ -+ bool invert; -+ /* adc channel */ -+ int channel; -+ /* adc data tuning value([percent), p = positive, n = negative */ -+ int tuning_p, tuning_n; -+}; -+ -+struct bt_gpio { -+ /* GPIO Request label */ -+ const char *label; -+ /* GPIO Number */ -+ int num; -+ /* report type */ -+ int report_type; -+ /* report linux code */ -+ int linux_code; -+ /* prev button value */ -+ bool old_value; -+ /* button press level */ -+ bool active_level; -+}; -+ -+struct joypad { -+ struct device *dev; -+ struct input_polled_dev *poll_dev; -+ int poll_interval; -+ -+ /* report enable/disable */ -+ bool enable; -+ -+ /* analog mux & joystick control */ -+ struct iio_channel *adc_ch[SARADC_CH_NUM]; -+ -+ /* adc input channel count */ -+ int chan_count; -+ /* analog button */ -+ struct bt_adc *adcs; -+ -+ /* report interval (ms) */ -+ int bt_gpio_count; -+ struct bt_gpio *gpios; -+ -+ /* button auto repeat */ -+ int auto_repeat; -+ -+ /* report threshold (mV) */ -+ int bt_adc_fuzz, bt_adc_flat; -+ /* adc read value scale */ -+ int bt_adc_scale; -+ /* joystick deadzone control */ -+ int bt_adc_deadzone; -+ -+ struct mutex lock; -+ -+ /* adc debug channel */ -+ int debug_ch; -+}; -+ -+/*----------------------------------------------------------------------------*/ -+// -+// set to the value in the boot.ini file. (if exist) -+// -+/*----------------------------------------------------------------------------*/ -+static unsigned int g_button_adc_fuzz = 0; -+static unsigned int g_button_adc_flat = 0; -+static unsigned int g_button_adc_scale = 0; -+static unsigned int g_button_adc_deadzone = 0; -+ -+static int button_adc_fuzz(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-fuzz=", button_adc_fuzz); -+ -+static int button_adc_flat(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_flat = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-flat=", button_adc_flat); -+ -+static int button_adc_scale(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_scale = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-scale=", button_adc_scale); -+ -+static int button_adc_deadzone(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-deadzone=", button_adc_deadzone); -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_read(struct joypad *joypad, struct bt_adc *adc) -+{ -+ int value; -+ -+ if (iio_read_channel_processed(joypad->adc_ch[adc->channel], &value) < 0) -+ return 0; -+ -+ value *= adc->scale; -+ -+ return (adc->invert ? (adc->max - value) : value); -+} -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo_joypad/poll_interval [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->poll_interval = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->poll_interval); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, -+ joypad_show_poll_interval, -+ joypad_store_poll_interval); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo_joypad/adc_fuzz [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_fuzz(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, -+ joypad_show_adc_fuzz, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo_joypad/adc_flat [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_flat(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_flat); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, -+ joypad_show_adc_flat, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/oodroidgo_joypad/enable [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_enable(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->enable = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_enable(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->enable); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, -+ joypad_show_enable, -+ joypad_store_enable); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo_joypad/adc_cal [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ bool calibration; -+ -+ calibration = simple_strtoul(buf, NULL, 10); -+ -+ if (calibration) { -+ int nbtn; -+ -+ mutex_lock(&joypad->lock); -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ mutex_unlock(&joypad->lock); -+ } -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ int nbtn; -+ ssize_t pos; -+ -+ for (nbtn = 0, pos = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ nbtn, adc->cal); -+ } -+ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, -+ joypad_show_adc_cal, -+ joypad_store_adc_cal); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ NULL, -+}; -+ -+static struct attribute_group joypad_attr_group = { -+ .attrs = joypad_attrs, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static void joypad_gpio_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn, value; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ -+ if (gpio_get_value_cansleep(gpio->num) < 0) { -+ dev_err(joypad->dev, "failed to get gpio state\n"); -+ continue; -+ } -+ value = gpio_get_value(gpio->num); -+ if (value != gpio->old_value) { -+ input_event(poll_dev->input, -+ gpio->report_type, -+ gpio->linux_code, -+ (value == gpio->active_level) ? 1 : 0); -+ gpio->old_value = value; -+ } -+ } -+ input_sync(poll_dev->input); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_adc_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ int mag; -+ -+ /* Assumes an even number of axes and that joystick axis pairs are sequential */ -+ /* e.g. left stick Y immediately follows left stick X */ -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn += 2) { -+ struct bt_adc *adcx = &joypad->adcs[nbtn]; -+ struct bt_adc *adcy = &joypad->adcs[nbtn + 1]; -+ -+ /* Read first joystick axis */ -+ adcx->value = joypad_adc_read(joypad, adcx); -+ if (!adcx->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adcx->value = adcx->value - adcx->cal; -+ -+ /* Read second joystick axis */ -+ adcy->value = joypad_adc_read(joypad, adcy); -+ if (!adcy->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn + 1); -+ continue; -+ } -+ adcy->value = adcy->value - adcy->cal; -+ -+ /* Scaled Radial Deadzone */ -+ /* https://web.archive.org/web/20190129113357/http://www.third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html */ -+ mag = int_sqrt((adcx->value * adcx->value) + (adcy->value * adcy->value)); -+ if (joypad->bt_adc_deadzone) { -+ if (mag <= joypad->bt_adc_deadzone) { -+ adcx->value = 0; -+ adcy->value = 0; -+ } -+ else { -+ /* Assumes adcx->max == -adcx->min == adcy->max == -adcy->min */ -+ /* Order of operations is critical to avoid integer overflow */ -+ adcx->value = (((adcx->max * adcx->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcx->max - joypad->bt_adc_deadzone); -+ adcy->value = (((adcy->max * adcy->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcy->max - joypad->bt_adc_deadzone); -+ } -+ } -+ -+ /* adc data tuning */ -+ if (adcx->tuning_n && adcx->value < 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_n); -+ if (adcx->tuning_p && adcx->value > 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_p); -+ if (adcy->tuning_n && adcy->value < 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_n); -+ if (adcy->tuning_p && adcy->value > 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_p); -+ -+ /* Clamp to [min, max] */ -+ adcx->value = adcx->value > adcx->max ? adcx->max : adcx->value; -+ adcx->value = adcx->value < adcx->min ? adcx->min : adcx->value; -+ adcy->value = adcy->value > adcy->max ? adcy->max : adcy->value; -+ adcy->value = adcy->value < adcy->min ? adcy->min : adcy->value; -+ -+ input_report_abs(poll_dev->input, -+ adcx->report_type, -+ adcx->invert ? adcx->value * (-1) : adcx->value); -+ input_report_abs(poll_dev->input, -+ adcy->report_type, -+ adcy->invert ? adcy->value * (-1) : adcy->value); -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_poll(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ if (joypad->enable) { -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ } -+ if (poll_dev->poll_interval != joypad->poll_interval) { -+ mutex_lock(&joypad->lock); -+ poll_dev->poll_interval = joypad->poll_interval; -+ mutex_unlock(&joypad->lock); -+ } -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_open(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ gpio->old_value = gpio->active_level ? 0 : 1; -+ } -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ __func__, nbtn, adc->cal); -+ } -+ /* buttons status sync */ -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ -+ /* button report enable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = true; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : opened\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_close(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ /* button report disable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = false; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : closed\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_iochannel_setup(struct device *dev, struct joypad *joypad) -+{ -+ enum iio_chan_type type; -+ unsigned char cnt; -+ const char *uname; -+ int ret; -+ -+ for (cnt = 0; cnt < joypad->chan_count; cnt++) { -+ -+ ret = of_property_read_string_index(dev->of_node, -+ "io-channel-names", cnt, &uname); -+ if (ret < 0) { -+ dev_err(dev, "invalid channel name index[%d]\n", cnt); -+ return -EINVAL; -+ } -+ -+ joypad->adc_ch[cnt] = devm_iio_channel_get(dev, -+ uname); -+ if (IS_ERR(joypad->adc_ch[cnt])) { -+ dev_err(dev, "iio channel get error\n"); -+ return -EINVAL; -+ } -+ if (!joypad->adc_ch[cnt]->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(joypad->adc_ch[cnt], &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel type %d\n", type); -+ return -EINVAL; -+ } -+ } -+ return ret; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_setup(struct device *dev, struct joypad *joypad) -+{ -+ int nbtn; -+ -+ /* adc button struct init */ -+ joypad->adcs = devm_kzalloc(dev, joypad->chan_count * -+ sizeof(struct bt_adc), GFP_KERNEL); -+ if (!joypad->adcs) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->scale = joypad->bt_adc_scale; -+ -+ adc->max = (ADC_MAX_VOLTAGE / 2); -+ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -+ if (adc->scale) { -+ adc->max *= adc->scale; -+ adc->min *= adc->scale; -+ } -+ adc->channel = nbtn; -+ adc->invert = false; -+ -+ switch (nbtn) { -+ case 0: -+ adc->report_type = ABS_RY; -+ if (device_property_read_u32(dev, -+ "abs_ry-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_ry-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 1: -+ adc->report_type = ABS_RX; -+ if (device_property_read_u32(dev, -+ "abs_rx-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rx-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 2: -+ adc->report_type = ABS_Y; -+ if (device_property_read_u32(dev, -+ "abs_y-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_y-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 3: -+ adc->report_type = ABS_X; -+ if (device_property_read_u32(dev, -+ "abs_x-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_x-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ default : -+ dev_err(dev, "%s io channel count(%d) error!", -+ __func__, nbtn); -+ return -EINVAL; -+ } -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct device_node *node, *pp; -+ int nbtn; -+ -+ node = dev->of_node; -+ if (!node) -+ return -ENODEV; -+ -+ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * -+ sizeof(struct bt_gpio), GFP_KERNEL); -+ -+ if (!joypad->gpios) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ nbtn = 0; -+ for_each_child_of_node(node, pp) { -+ enum of_gpio_flags flags; -+ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; -+ int error; -+ -+ gpio->num = of_get_gpio_flags(pp, 0, &flags); -+ if (gpio->num < 0) { -+ error = gpio->num; -+ dev_err(dev, "Failed to get gpio flags, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* gpio active level(key press level) */ -+ gpio->active_level = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; -+ -+ gpio->label = of_get_property(pp, "label", NULL); -+ -+ if (gpio_is_valid(gpio->num)) { -+ error = devm_gpio_request_one(dev, gpio->num, -+ GPIOF_IN, gpio->label); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to request GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ #if 0 -+ error = gpiod_set_pull(gpio_to_desc(gpio->num), GPIOD_PULL_UP); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to set pull-up GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ #endif -+ } -+ if (of_property_read_u32(pp, "linux,code", &gpio->linux_code)) { -+ dev_err(dev, "Button without keycode: 0x%x\n", -+ gpio->num); -+ return -EINVAL; -+ } -+ if (of_property_read_u32(pp, "linux,input-type", -+ &gpio->report_type)) -+ gpio->report_type = EV_KEY; -+ } -+ if (nbtn == 0) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_input_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct input_polled_dev *poll_dev; -+ struct input_dev *input; -+ int nbtn, error; -+ u32 joypad_vendor = 0; -+ u32 joypad_revision = 0; -+ u32 joypad_product = 0; -+ -+ poll_dev = devm_input_allocate_polled_device(dev); -+ if (!poll_dev) { -+ dev_err(dev, "no memory for polled device\n"); -+ return -ENOMEM; -+ } -+ -+ poll_dev->private = joypad; -+ poll_dev->poll = joypad_poll; -+ poll_dev->poll_interval = joypad->poll_interval; -+ poll_dev->open = joypad_open; -+ poll_dev->close = joypad_close; -+ -+ input = poll_dev->input; -+ -+ input->name = DRV_NAME; -+ -+ device_property_read_string(dev, "joypad-name", &input->name); -+ input->phys = DRV_NAME"/input0"; -+ -+ device_property_read_u32(dev, "joypad-vendor", &joypad_vendor); -+ device_property_read_u32(dev, "joypad-revision", &joypad_revision); -+ device_property_read_u32(dev, "joypad-product", &joypad_product); -+ //input->id.bustype = BUS_HOST; -+ input->id.bustype = BUS_USB; -+ input->id.vendor = (u16)joypad_vendor; -+ input->id.product = (u16)joypad_product; -+ input->id.version = (u16)joypad_revision; -+ -+ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ -+ __set_bit(EV_ABS, input->evbit); -+ -+ // Set mapped ones on dt -+ for(nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ input_set_abs_params(input, adc->report_type, -+ adc->min, adc->max, -+ joypad->bt_adc_fuzz, -+ joypad->bt_adc_flat); -+ dev_info(dev, -+ "%s : SCALE = %d, ABS min = %d, max = %d," -+ " fuzz = %d, flat = %d, deadzone = %d\n", -+ __func__, adc->scale, adc->min, adc->max, -+ joypad->bt_adc_fuzz, joypad->bt_adc_flat, -+ joypad->bt_adc_deadzone); -+ dev_info(dev, -+ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -+ __func__, adc->tuning_p, adc->tuning_n); -+ } -+ -+ /* GPIO key setup */ -+ __set_bit(EV_KEY, input->evbit); -+ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ input_set_capability(input, gpio->report_type, -+ gpio->linux_code); -+ } -+ -+ if (joypad->auto_repeat) -+ __set_bit(EV_REP, input->evbit); -+ -+ joypad->dev = dev; -+ -+ error = input_register_polled_device(poll_dev); -+ if (error) { -+ dev_err(dev, "unable to register polled device, err=%d\n", -+ error); -+ return error; -+ } -+ joypad->dev = dev; -+ joypad->poll_dev = poll_dev; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) -+{ -+ /* -+ fuzz: specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ if (g_button_adc_fuzz) -+ joypad->bt_adc_fuzz = g_button_adc_fuzz; -+ else -+ device_property_read_u32(dev, "button-adc-fuzz", -+ &joypad->bt_adc_fuzz); -+ /* -+ flat: values that are within this value will be discarded by -+ joydev interface and reported as 0 instead. -+ */ -+ if (g_button_adc_flat) -+ joypad->bt_adc_flat = g_button_adc_flat; -+ else -+ device_property_read_u32(dev, "button-adc-flat", -+ &joypad->bt_adc_flat); -+ -+ /* Joystick report value control */ -+ if (g_button_adc_scale) -+ joypad->bt_adc_scale = g_button_adc_scale; -+ else -+ device_property_read_u32(dev, "button-adc-scale", -+ &joypad->bt_adc_scale); -+ -+ /* Joystick deadzone value control */ -+ if (g_button_adc_deadzone) -+ joypad->bt_adc_deadzone = g_button_adc_deadzone; -+ else -+ device_property_read_u32(dev, "button-adc-deadzone", -+ &joypad->bt_adc_deadzone); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_dt_parse(struct device *dev, struct joypad *joypad) -+{ -+ int error = 0; -+ -+ /* initialize value check from boot.ini */ -+ joypad_setup_value_check(dev, joypad); -+ -+ joypad->chan_count = of_property_count_strings(dev->of_node, -+ "io-channel-names"); -+ -+ device_property_read_u32(dev, "poll-interval", -+ &joypad->poll_interval); -+ -+ joypad->auto_repeat = device_property_present(dev, "autorepeat"); -+ -+ joypad->bt_gpio_count = device_get_child_node_count(dev); -+ -+ if ((joypad->chan_count == 0) || (joypad->bt_gpio_count == 0)) { -+ dev_err(dev, "adc key = %d, gpio key = %d error!", -+ joypad->chan_count, joypad->bt_gpio_count); -+ return -EINVAL; -+ } -+ -+ error = joypad_adc_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_iochannel_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_gpio_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -+ __func__, joypad->chan_count, joypad->bt_gpio_count); -+ -+ return error; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_probe(struct platform_device *pdev) -+{ -+ struct joypad *joypad; -+ struct device *dev = &pdev->dev; -+ int error; -+ -+ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); -+ if (!joypad) { -+ dev_err(dev, "joypad devm_kzmalloc error!"); -+ return -ENOMEM; -+ } -+ -+ /* device tree data parse */ -+ error = joypad_dt_parse(dev, joypad); -+ if (error) { -+ dev_err(dev, "dt parse error!(err = %d)\n", error); -+ return error; -+ } -+ -+ mutex_init(&joypad->lock); -+ platform_set_drvdata(pdev, joypad); -+ -+ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); -+ if (error) { -+ dev_err(dev, "create sysfs group fail, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* poll input device setup */ -+ error = joypad_input_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "input setup failed!(err = %d)\n", error); -+ return error; -+ } -+ dev_info(dev, "%s : probe success\n", __func__); -+ return 0; -+} -+ -+static void joypad_shutdown(struct platform_device *pdev) -+{ -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ input_unregister_polled_device(joypad->poll_dev); -+} -+/*----------------------------------------------------------------------------*/ -+static const struct of_device_id joypad_of_match[] = { -+ { .compatible = "odroidgou-joypad", }, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(of, joypad_of_match); -+ -+/*----------------------------------------------------------------------------*/ -+static struct platform_driver joypad_driver = { -+ .probe = joypad_probe, -+ .shutdown = joypad_shutdown, -+ .driver = { -+ .name = DRV_NAME, -+ .of_match_table = of_match_ptr(joypad_of_match), -+ }, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+static int __init joypad_init(void) -+{ -+ return platform_driver_register(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void __exit joypad_exit(void) -+{ -+ platform_driver_unregister(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+late_initcall(joypad_init); -+module_exit(joypad_exit); -+ -+/*----------------------------------------------------------------------------*/ -+MODULE_AUTHOR("Hardkernel Co.,LTD"); -+MODULE_DESCRIPTION("Keypad driver(ADC&GPIO) for ODROIDGO-Advance"); -+MODULE_LICENSE("GPL v2"); -+MODULE_ALIAS("platform:" DRV_NAME); -+ -+/*----------------------------------------------------------------------------*/ --- -2.34.1 - diff --git a/projects/Amlogic/patches/linux/S922X/0012-arm64-meson-odroid-go-ultra-add-joypad.patch b/projects/Amlogic/patches/linux/S922X/0012-arm64-meson-odroid-go-ultra-add-joypad.patch index 3d5bded51..0a58ade74 100644 --- a/projects/Amlogic/patches/linux/S922X/0012-arm64-meson-odroid-go-ultra-add-joypad.patch +++ b/projects/Amlogic/patches/linux/S922X/0012-arm64-meson-odroid-go-ultra-add-joypad.patch @@ -85,8 +85,8 @@ index c3af3954a1e7..206044f8456b 100644 - linux,code = ; + }; + -+ joypad: gou_joypad { -+ compatible = "odroidgou-joypad"; ++ joypad: odroid-go-ultra-joypad { ++ compatible = "rocknix-joypad"; + poll-interval = <10>; + pinctrl-0 = <&keypad_gpio_pins>; + pinctrl-names = "default"; diff --git a/projects/Amlogic/patches/linux/S922X/0015-arm64-meson-add-dt-for-powkiddy-rgb10-max-3-pro.patch b/projects/Amlogic/patches/linux/S922X/0015-arm64-meson-add-dt-for-powkiddy-rgb10-max-3-pro.patch index 447b69a74..7a5fbe049 100644 --- a/projects/Amlogic/patches/linux/S922X/0015-arm64-meson-add-dt-for-powkiddy-rgb10-max-3-pro.patch +++ b/projects/Amlogic/patches/linux/S922X/0015-arm64-meson-add-dt-for-powkiddy-rgb10-max-3-pro.patch @@ -29,7 +29,7 @@ index 000000000000..9edbae10268c + + /delete-node/ hp-detect-switch; + -+ joypad: gou_joypad { ++ joypad: odroid-go-ultra-joypad { + button-adc-deadzone = <400>; + button-adc-fuzz = <64>; + sw12 { From c42eba094e2ef52bafad07dda6716f05a3224f48 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 14 Apr 2024 07:22:58 +0100 Subject: [PATCH 030/184] RK3588: use rocknix-joypad driver --- projects/Rockchip/devices/RK3588/options | 2 +- .../linux/RK3588/000-gameforce-ace.patch | 2 +- .../linux/RK3588/006-joypad-driver.patch | 1033 ----------------- 3 files changed, 2 insertions(+), 1035 deletions(-) delete mode 100644 projects/Rockchip/patches/linux/RK3588/006-joypad-driver.patch diff --git a/projects/Rockchip/devices/RK3588/options b/projects/Rockchip/devices/RK3588/options index 9f8477c9e..52b8e36bd 100755 --- a/projects/Rockchip/devices/RK3588/options +++ b/projects/Rockchip/devices/RK3588/options @@ -83,7 +83,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="" + ADDITIONAL_DRIVERS="rocknix-joypad" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" diff --git a/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch b/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch index 93961377c..09ad29b21 100644 --- a/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch +++ b/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch @@ -59,7 +59,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin + }; + + joypad: gameforce-ace-joypad { -+ compatible = "jelos-joypad"; ++ compatible = "rocknix-joypad"; + poll-interval = <10>; + status = "okay"; + diff --git a/projects/Rockchip/patches/linux/RK3588/006-joypad-driver.patch b/projects/Rockchip/patches/linux/RK3588/006-joypad-driver.patch deleted file mode 100644 index c95872a68..000000000 --- a/projects/Rockchip/patches/linux/RK3588/006-joypad-driver.patch +++ /dev/null @@ -1,1033 +0,0 @@ -diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig -index 04ca3d1c2816..d62319d5ff32 100644 ---- a/drivers/input/joystick/Kconfig -+++ b/drivers/input/joystick/Kconfig -@@ -412,4 +412,10 @@ config JOYSTICK_SENSEHAT - To compile this driver as a module, choose M here: the - module will be called sensehat_joystick. - -+config JOYSTICK_JELOS_JOYPAD -+ tristate "JELOS joypad driver" -+ depends on INPUT_POLLDEV -+ help -+ Say Y here if you want to use the JELOS joypad driver. -+ - endif -diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile -index 3937535f0098..f473353fd283 100644 ---- a/drivers/input/joystick/Makefile -+++ b/drivers/input/joystick/Makefile -@@ -21,6 +21,7 @@ obj-$(CONFIG_JOYSTICK_GRIP_MP) += grip_mp.o - obj-$(CONFIG_JOYSTICK_GUILLEMOT) += guillemot.o - obj-$(CONFIG_JOYSTICK_IFORCE) += iforce/ - obj-$(CONFIG_JOYSTICK_INTERACT) += interact.o -+obj-$(CONFIG_JOYSTICK_JELOS_JOYPAD) += jelos-joypad.o - obj-$(CONFIG_JOYSTICK_JOYDUMP) += joydump.o - obj-$(CONFIG_JOYSTICK_MAGELLAN) += magellan.o - obj-$(CONFIG_JOYSTICK_MAPLE) += maplecontrol.o -diff --git a/drivers/input/joystick/jelos-joypad.c b/drivers/input/joystick/jelos-joypad.c -new file mode 100644 -index 000000000000..51eda0980703 ---- /dev/null -+++ b/drivers/input/joystick/jelos-joypad.c -@@ -0,0 +1,984 @@ -+/*----------------------------------------------------------------------------*/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "jelos-joypad.h" -+ -+/*----------------------------------------------------------------------------*/ -+#define DRV_NAME "jelos-joypad" -+ -+/*----------------------------------------------------------------------------*/ -+ -+ -+/*----------------------------------------------------------------------------*/ -+#define ADC_MAX_VOLTAGE 1800 -+#define ADC_DATA_TUNING(x, p) ((x * p) / 100) -+#define ADC_TUNING_DEFAULT 180 -+ -+struct bt_adc { -+ /* report value (mV) */ -+ int value; -+ /* report type */ -+ int report_type; -+ /* input device init value (mV) */ -+ int max, min; -+ /* calibrated adc value */ -+ int cal; -+ /* adc scale value */ -+ int scale; -+ /* invert report */ -+ bool invert; -+ /* adc channel */ -+ int channel; -+ /* adc data tuning value([percent), p = positive, n = negative */ -+ int tuning_p, tuning_n; -+}; -+ -+struct bt_gpio { -+ /* GPIO Request label */ -+ const char *label; -+ /* GPIO Number */ -+ int num; -+ /* report type */ -+ int report_type; -+ /* report linux code */ -+ int linux_code; -+ /* prev button value */ -+ bool old_value; -+ /* button press level */ -+ bool active_level; -+}; -+ -+struct joypad { -+ struct device *dev; -+ struct input_polled_dev *poll_dev; -+ int poll_interval; -+ -+ /* report enable/disable */ -+ bool enable; -+ -+ /* analog mux & joystick control */ -+ struct iio_channel *adc_ch[SARADC_CH_NUM]; -+ -+ /* adc input channel count */ -+ int chan_count; -+ /* analog button */ -+ struct bt_adc *adcs; -+ -+ /* report interval (ms) */ -+ int bt_gpio_count; -+ struct bt_gpio *gpios; -+ -+ /* button auto repeat */ -+ int auto_repeat; -+ -+ /* report threshold (mV) */ -+ int bt_adc_fuzz, bt_adc_flat; -+ /* adc read value scale */ -+ int bt_adc_scale; -+ /* joystick deadzone control */ -+ int bt_adc_deadzone; -+ -+ struct mutex lock; -+ -+ /* adc debug channel */ -+ int debug_ch; -+}; -+ -+/*----------------------------------------------------------------------------*/ -+// -+// set to the value in the boot.ini file. (if exist) -+// -+/*----------------------------------------------------------------------------*/ -+static unsigned int g_button_adc_fuzz = 0; -+static unsigned int g_button_adc_flat = 0; -+static unsigned int g_button_adc_scale = 0; -+static unsigned int g_button_adc_deadzone = 0; -+ -+static int button_adc_fuzz(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-fuzz=", button_adc_fuzz); -+ -+static int button_adc_flat(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_flat = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-flat=", button_adc_flat); -+ -+static int button_adc_scale(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_scale = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-scale=", button_adc_scale); -+ -+static int button_adc_deadzone(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-deadzone=", button_adc_deadzone); -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_read(struct joypad *joypad, struct bt_adc *adc) -+{ -+ int value; -+ -+ if (iio_read_channel_processed(joypad->adc_ch[adc->channel], &value) < 0) -+ return 0; -+ -+ value *= adc->scale; -+ -+ return (adc->invert ? (adc->max - value) : value); -+} -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/jelos-joypad/poll_interval [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->poll_interval = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->poll_interval); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, -+ joypad_show_poll_interval, -+ joypad_store_poll_interval); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/jelos-joypad/adc_fuzz [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_fuzz(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, -+ joypad_show_adc_fuzz, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/jelos-joypad/adc_flat [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_flat(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_flat); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, -+ joypad_show_adc_flat, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/jelos-joypad/enable [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_enable(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->enable = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_enable(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->enable); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, -+ joypad_show_enable, -+ joypad_store_enable); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/jelos-joypad/adc_cal [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ bool calibration; -+ -+ calibration = simple_strtoul(buf, NULL, 10); -+ -+ if (calibration) { -+ int nbtn; -+ -+ mutex_lock(&joypad->lock); -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ mutex_unlock(&joypad->lock); -+ } -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ int nbtn; -+ ssize_t pos; -+ -+ for (nbtn = 0, pos = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ nbtn, adc->cal); -+ } -+ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, -+ joypad_show_adc_cal, -+ joypad_store_adc_cal); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ NULL, -+}; -+ -+static struct attribute_group joypad_attr_group = { -+ .attrs = joypad_attrs, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static void joypad_gpio_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn, value; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ -+ if (gpio_get_value_cansleep(gpio->num) < 0) { -+ dev_err(joypad->dev, "failed to get gpio state\n"); -+ continue; -+ } -+ value = gpio_get_value(gpio->num); -+ if (value != gpio->old_value) { -+ input_event(poll_dev->input, -+ gpio->report_type, -+ gpio->linux_code, -+ (value == gpio->active_level) ? 1 : 0); -+ gpio->old_value = value; -+ } -+ } -+ input_sync(poll_dev->input); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_adc_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ int mag; -+ -+ /* Assumes an even number of axes and that joystick axis pairs are sequential */ -+ /* e.g. left stick Y immediately follows left stick X */ -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn += 2) { -+ struct bt_adc *adcx = &joypad->adcs[nbtn]; -+ struct bt_adc *adcy = &joypad->adcs[nbtn + 1]; -+ -+ /* Read first joystick axis */ -+ adcx->value = joypad_adc_read(joypad, adcx); -+ if (!adcx->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adcx->value = adcx->value - adcx->cal; -+ -+ /* Read second joystick axis */ -+ adcy->value = joypad_adc_read(joypad, adcy); -+ if (!adcy->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn + 1); -+ continue; -+ } -+ adcy->value = adcy->value - adcy->cal; -+ -+ /* Scaled Radial Deadzone */ -+ /* https://web.archive.org/web/20190129113357/http://www.third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html */ -+ mag = int_sqrt((adcx->value * adcx->value) + (adcy->value * adcy->value)); -+ if (joypad->bt_adc_deadzone) { -+ if (mag <= joypad->bt_adc_deadzone) { -+ adcx->value = 0; -+ adcy->value = 0; -+ } -+ else { -+ /* Assumes adcx->max == -adcx->min == adcy->max == -adcy->min */ -+ /* Order of operations is critical to avoid integer overflow */ -+ adcx->value = (((adcx->max * adcx->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcx->max - joypad->bt_adc_deadzone); -+ adcy->value = (((adcy->max * adcy->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcy->max - joypad->bt_adc_deadzone); -+ } -+ } -+ -+ /* adc data tuning */ -+ if (adcx->tuning_n && adcx->value < 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_n); -+ if (adcx->tuning_p && adcx->value > 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_p); -+ if (adcy->tuning_n && adcy->value < 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_n); -+ if (adcy->tuning_p && adcy->value > 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_p); -+ -+ /* Clamp to [min, max] */ -+ adcx->value = adcx->value > adcx->max ? adcx->max : adcx->value; -+ adcx->value = adcx->value < adcx->min ? adcx->min : adcx->value; -+ adcy->value = adcy->value > adcy->max ? adcy->max : adcy->value; -+ adcy->value = adcy->value < adcy->min ? adcy->min : adcy->value; -+ -+ input_report_abs(poll_dev->input, -+ adcx->report_type, -+ adcx->invert ? adcx->value * (-1) : adcx->value); -+ input_report_abs(poll_dev->input, -+ adcy->report_type, -+ adcy->invert ? adcy->value * (-1) : adcy->value); -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_poll(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ if (joypad->enable) { -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ } -+ if (poll_dev->poll_interval != joypad->poll_interval) { -+ mutex_lock(&joypad->lock); -+ poll_dev->poll_interval = joypad->poll_interval; -+ mutex_unlock(&joypad->lock); -+ } -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_open(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ gpio->old_value = gpio->active_level ? 0 : 1; -+ } -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ __func__, nbtn, adc->cal); -+ } -+ /* buttons status sync */ -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ -+ /* button report enable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = true; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : opened\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_close(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ /* button report disable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = false; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : closed\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_iochannel_setup(struct device *dev, struct joypad *joypad) -+{ -+ enum iio_chan_type type; -+ unsigned char cnt; -+ const char *uname; -+ int ret; -+ -+ for (cnt = 0; cnt < joypad->chan_count; cnt++) { -+ -+ ret = of_property_read_string_index(dev->of_node, -+ "io-channel-names", cnt, &uname); -+ if (ret < 0) { -+ dev_err(dev, "invalid channel name index[%d]\n", cnt); -+ return -EINVAL; -+ } -+ -+ joypad->adc_ch[cnt] = devm_iio_channel_get(dev, -+ uname); -+ if (IS_ERR(joypad->adc_ch[cnt])) { -+ dev_err(dev, "iio channel get error\n"); -+ return -EINVAL; -+ } -+ if (!joypad->adc_ch[cnt]->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(joypad->adc_ch[cnt], &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel type %d\n", type); -+ return -EINVAL; -+ } -+ } -+ return ret; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_setup(struct device *dev, struct joypad *joypad) -+{ -+ int nbtn; -+ -+ /* adc button struct init */ -+ joypad->adcs = devm_kzalloc(dev, joypad->chan_count * -+ sizeof(struct bt_adc), GFP_KERNEL); -+ if (!joypad->adcs) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ for (nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->scale = joypad->bt_adc_scale; -+ -+ adc->max = (ADC_MAX_VOLTAGE / 2); -+ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -+ if (adc->scale) { -+ adc->max *= adc->scale; -+ adc->min *= adc->scale; -+ } -+ adc->channel = nbtn; -+ adc->invert = false; -+ -+ switch (nbtn) { -+ case 0: -+ adc->report_type = ABS_RY; -+ if (device_property_read_u32(dev, -+ "abs_ry-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_ry-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 1: -+ adc->report_type = ABS_RX; -+ if (device_property_read_u32(dev, -+ "abs_rx-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rx-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 2: -+ adc->report_type = ABS_Y; -+ if (device_property_read_u32(dev, -+ "abs_y-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_y-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 3: -+ adc->report_type = ABS_X; -+ if (device_property_read_u32(dev, -+ "abs_x-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_x-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 4: -+ adc->invert = true; -+ adc->report_type = ABS_Z; -+ if (device_property_read_u32(dev, -+ "abs_z-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_z-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 5: -+ adc->invert = true; -+ adc->report_type = ABS_RZ; -+ if (device_property_read_u32(dev, -+ "abs_rz-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rz-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ default : -+ dev_err(dev, "%s io channel count(%d) error!", -+ __func__, nbtn); -+ return -EINVAL; -+ } -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct device_node *node, *pp; -+ int nbtn; -+ -+ node = dev->of_node; -+ if (!node) -+ return -ENODEV; -+ -+ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * -+ sizeof(struct bt_gpio), GFP_KERNEL); -+ -+ if (!joypad->gpios) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ nbtn = 0; -+ for_each_child_of_node(node, pp) { -+ enum of_gpio_flags flags; -+ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; -+ int error; -+ -+ gpio->num = of_get_gpio_flags(pp, 0, &flags); -+ if (gpio->num < 0) { -+ error = gpio->num; -+ dev_err(dev, "Failed to get gpio flags, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* gpio active level(key press level) */ -+ gpio->active_level = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; -+ -+ gpio->label = of_get_property(pp, "label", NULL); -+ -+ if (gpio_is_valid(gpio->num)) { -+ error = devm_gpio_request_one(dev, gpio->num, -+ GPIOF_IN, gpio->label); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to request GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ #if 0 -+ error = gpiod_set_pull(gpio_to_desc(gpio->num), GPIOD_PULL_UP); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to set pull-up GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ #endif -+ } -+ if (of_property_read_u32(pp, "linux,code", &gpio->linux_code)) { -+ dev_err(dev, "Button without keycode: 0x%x\n", -+ gpio->num); -+ return -EINVAL; -+ } -+ if (of_property_read_u32(pp, "linux,input-type", -+ &gpio->report_type)) -+ gpio->report_type = EV_KEY; -+ } -+ if (nbtn == 0) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_input_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct input_polled_dev *poll_dev; -+ struct input_dev *input; -+ int nbtn, error; -+ u32 joypad_vendor = 0; -+ u32 joypad_revision = 0; -+ u32 joypad_product = 0; -+ -+ poll_dev = devm_input_allocate_polled_device(dev); -+ if (!poll_dev) { -+ dev_err(dev, "no memory for polled device\n"); -+ return -ENOMEM; -+ } -+ -+ poll_dev->private = joypad; -+ poll_dev->poll = joypad_poll; -+ poll_dev->poll_interval = joypad->poll_interval; -+ poll_dev->open = joypad_open; -+ poll_dev->close = joypad_close; -+ -+ input = poll_dev->input; -+ -+ input->name = DRV_NAME; -+ -+ device_property_read_string(dev, "joypad-name", &input->name); -+ input->phys = DRV_NAME"/input0"; -+ -+ device_property_read_u32(dev, "joypad-vendor", &joypad_vendor); -+ device_property_read_u32(dev, "joypad-revision", &joypad_revision); -+ device_property_read_u32(dev, "joypad-product", &joypad_product); -+ //input->id.bustype = BUS_HOST; -+ input->id.bustype = BUS_USB; -+ input->id.vendor = (u16)joypad_vendor; -+ input->id.product = (u16)joypad_product; -+ input->id.version = (u16)joypad_revision; -+ -+ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ -+ __set_bit(EV_ABS, input->evbit); -+ -+ // Set mapped ones on dt -+ for(nbtn = 0; nbtn < joypad->chan_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ input_set_abs_params(input, adc->report_type, -+ adc->min, adc->max, -+ joypad->bt_adc_fuzz, -+ joypad->bt_adc_flat); -+ dev_info(dev, -+ "%s : SCALE = %d, ABS min = %d, max = %d," -+ " fuzz = %d, flat = %d, deadzone = %d\n", -+ __func__, adc->scale, adc->min, adc->max, -+ joypad->bt_adc_fuzz, joypad->bt_adc_flat, -+ joypad->bt_adc_deadzone); -+ dev_info(dev, -+ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -+ __func__, adc->tuning_p, adc->tuning_n); -+ } -+ -+ /* GPIO key setup */ -+ __set_bit(EV_KEY, input->evbit); -+ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ input_set_capability(input, gpio->report_type, -+ gpio->linux_code); -+ } -+ -+ if (joypad->auto_repeat) -+ __set_bit(EV_REP, input->evbit); -+ -+ joypad->dev = dev; -+ -+ error = input_register_polled_device(poll_dev); -+ if (error) { -+ dev_err(dev, "unable to register polled device, err=%d\n", -+ error); -+ return error; -+ } -+ joypad->dev = dev; -+ joypad->poll_dev = poll_dev; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) -+{ -+ /* -+ fuzz: specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ if (g_button_adc_fuzz) -+ joypad->bt_adc_fuzz = g_button_adc_fuzz; -+ else -+ device_property_read_u32(dev, "button-adc-fuzz", -+ &joypad->bt_adc_fuzz); -+ /* -+ flat: values that are within this value will be discarded by -+ joydev interface and reported as 0 instead. -+ */ -+ if (g_button_adc_flat) -+ joypad->bt_adc_flat = g_button_adc_flat; -+ else -+ device_property_read_u32(dev, "button-adc-flat", -+ &joypad->bt_adc_flat); -+ -+ /* Joystick report value control */ -+ if (g_button_adc_scale) -+ joypad->bt_adc_scale = g_button_adc_scale; -+ else -+ device_property_read_u32(dev, "button-adc-scale", -+ &joypad->bt_adc_scale); -+ -+ /* Joystick deadzone value control */ -+ if (g_button_adc_deadzone) -+ joypad->bt_adc_deadzone = g_button_adc_deadzone; -+ else -+ device_property_read_u32(dev, "button-adc-deadzone", -+ &joypad->bt_adc_deadzone); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_dt_parse(struct device *dev, struct joypad *joypad) -+{ -+ int error = 0; -+ -+ /* initialize value check from boot.ini */ -+ joypad_setup_value_check(dev, joypad); -+ -+ joypad->chan_count = of_property_count_strings(dev->of_node, -+ "io-channel-names"); -+ -+ device_property_read_u32(dev, "poll-interval", -+ &joypad->poll_interval); -+ -+ joypad->auto_repeat = device_property_present(dev, "autorepeat"); -+ -+ joypad->bt_gpio_count = device_get_child_node_count(dev); -+ -+ if ((joypad->chan_count == 0) || (joypad->bt_gpio_count == 0)) { -+ dev_err(dev, "adc key = %d, gpio key = %d error!", -+ joypad->chan_count, joypad->bt_gpio_count); -+ return -EINVAL; -+ } -+ -+ error = joypad_adc_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_iochannel_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_gpio_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -+ __func__, joypad->chan_count, joypad->bt_gpio_count); -+ -+ return error; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_probe(struct platform_device *pdev) -+{ -+ struct joypad *joypad; -+ struct device *dev = &pdev->dev; -+ int error; -+ -+ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); -+ if (!joypad) { -+ dev_err(dev, "joypad devm_kzmalloc error!"); -+ return -ENOMEM; -+ } -+ -+ /* device tree data parse */ -+ error = joypad_dt_parse(dev, joypad); -+ if (error) { -+ dev_err(dev, "dt parse error!(err = %d)\n", error); -+ return error; -+ } -+ -+ mutex_init(&joypad->lock); -+ platform_set_drvdata(pdev, joypad); -+ -+ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); -+ if (error) { -+ dev_err(dev, "create sysfs group fail, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* poll input device setup */ -+ error = joypad_input_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "input setup failed!(err = %d)\n", error); -+ return error; -+ } -+ dev_info(dev, "%s : probe success\n", __func__); -+ return 0; -+} -+ -+static void joypad_shutdown(struct platform_device *pdev) -+{ -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ input_unregister_polled_device(joypad->poll_dev); -+} -+/*----------------------------------------------------------------------------*/ -+static const struct of_device_id joypad_of_match[] = { -+ { .compatible = "jelos-joypad", }, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(of, joypad_of_match); -+ -+/*----------------------------------------------------------------------------*/ -+static struct platform_driver joypad_driver = { -+ .probe = joypad_probe, -+ .shutdown = joypad_shutdown, -+ .driver = { -+ .name = DRV_NAME, -+ .of_match_table = of_match_ptr(joypad_of_match), -+ }, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+static int __init joypad_init(void) -+{ -+ return platform_driver_register(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void __exit joypad_exit(void) -+{ -+ platform_driver_unregister(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+late_initcall(joypad_init); -+module_exit(joypad_exit); -+ -+/*----------------------------------------------------------------------------*/ -+MODULE_AUTHOR("JELOS"); -+MODULE_DESCRIPTION("JELOS joypad driver"); -+MODULE_LICENSE("GPL v2"); -+MODULE_ALIAS("platform:" DRV_NAME); -+ -+/*----------------------------------------------------------------------------*/ -diff --git a/drivers/input/joystick/jelos-joypad.h b/drivers/input/joystick/jelos-joypad.h -new file mode 100644 -index 000000000000..2c73e9970948 ---- /dev/null -+++ b/drivers/input/joystick/jelos-joypad.h -@@ -0,0 +1,10 @@ -+#define SARADC_CH0 0 -+#define SARADC_CH1 1 -+#define SARADC_CH2 2 -+#define SARADC_CH3 3 -+#define SARADC_CH4 4 -+#define SARADC_CH5 5 -+#define SARADC_CH6 6 -+#define SARADC_CH7 7 -+ -+#define SARADC_CH_NUM 8 From 366155f421326d70cd02f96205b95236b684e5e9 Mon Sep 17 00:00:00 2001 From: sydarn Date: Sun, 14 Apr 2024 00:15:22 +0200 Subject: [PATCH 031/184] rk3566 hdmi handling and sway desktop improvements hdmi works at boot, but the switching during runtime not. --- .../compositor/sway/autostart/111-sway-init | 58 +++++++++++++------ .../compositor/sway/system.d/sway.service | 2 +- packages/wayland/util/foot/package.mk | 4 +- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/packages/wayland/compositor/sway/autostart/111-sway-init b/packages/wayland/compositor/sway/autostart/111-sway-init index 29ca5c85d..27a024f75 100755 --- a/packages/wayland/compositor/sway/autostart/111-sway-init +++ b/packages/wayland/compositor/sway/autostart/111-sway-init @@ -5,7 +5,8 @@ . /etc/profile export SWAY_HOME=/storage/.config/sway/ -export SWAY_CONFIG=/usr/share/sway/config.kiosk +export SWAY_CONFIG_KIOSK=/usr/share/sway/config.kiosk +export SWAY_CONFIG_DESKTOP=/usr/share/sway/config.desktop if [ ! -d "$SWAY_HOME" ] then @@ -13,8 +14,16 @@ then fi # Copy base config, we are overwriting any user config -cp $SWAY_CONFIG $SWAY_HOME/config - +UIMODE=$(get_setting desktop.enabled) +if [ "${UIMODE}" = "1" ]; then + cp $SWAY_CONFIG_DESKTOP $SWAY_HOME/config + # Shouldn't need to mask, but disable wouldn't do it. + systemctl mask essway.service + set_setting desktop.enabled "0" +else + cp $SWAY_CONFIG_KIOSK $SWAY_HOME/config + systemctl unmask essway.service +fi # get the card number, this may not be a safe way to derive it... card_no=$(ls /sys/class/drm/ | grep -E "HDMI|DSI" | head -n 1 | cut -b 5) @@ -31,26 +40,37 @@ for connector in ${card}/card${card_no}*/ do status=$(cat ${connector}/status) if [ "$status" = "connected" ]; then + # If device has a connected DSI port, store that device. + if [[ $connector == *"DSI"* ]]; then + dsi=$(basename $connector) + dsi=${dsi: +6} + fi + # Simply prioritize later connectors, meaning HDMI priority con=$(basename $connector) con=${con: +6} fi done -# Generate output line for sway config -if [[ $(grep -L "output" $SWAY_HOME/config) ]] -then -rot=$(cat /sys/class/graphics/fbcon/rotate) -output="output ${con}" - if [ $rot = 1 ]; then - angle="90" - elif [ $rot = 2 ]; then - angle="180" - elif [ $rot = 3 ]; then - angle="270" - else - angle="0" +# If dsi check rotation +if [[ $con == "DSI"* ]]; then + rot=$(cat /sys/class/graphics/fbcon/rotate) + case $rot in + 1) angle="90";; + 2) angle="180";; + 3) angle="270";; + *) angle="0";; + esac +else + # Main output not DSI and DSI is connected, then disable it + if [ ! -z $dsi ]; then + echo $dsi + echo "output ${dsi} disable" >> $SWAY_HOME/config fi - echo "${output} bg #000000 solid_color" >> $SWAY_HOME/config - echo "${output} transform ${angle}" >> $SWAY_HOME/config - echo "${output} max_render_time off" >> $SWAY_HOME/config + angle="0" fi +# Main output string base +output="output ${con}" +echo "${output} transform ${angle}" >> $SWAY_HOME/config +echo "${output} bg #000000 solid_color" >> $SWAY_HOME/config +echo "${output} max_render_time off" >> $SWAY_HOME/config + diff --git a/packages/wayland/compositor/sway/system.d/sway.service b/packages/wayland/compositor/sway/system.d/sway.service index 427503666..e05ea6466 100644 --- a/packages/wayland/compositor/sway/system.d/sway.service +++ b/packages/wayland/compositor/sway/system.d/sway.service @@ -1,6 +1,6 @@ [Unit] Description=Sway Wayland Compositor -Before=graphical.target essway.service +Before=graphical.target After=multi-user.target rocknix-automount.service ConditionKernelCommandLine=!installer diff --git a/packages/wayland/util/foot/package.mk b/packages/wayland/util/foot/package.mk index 7d8a6acba..85f361035 100644 --- a/packages/wayland/util/foot/package.mk +++ b/packages/wayland/util/foot/package.mk @@ -2,8 +2,8 @@ # Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) PKG_NAME="foot" -PKG_VERSION="1.16.2" -PKG_SHA256="0e02af376e5f4a96eeb90470b7ad2e79a1d660db2a7d1aa772be43c7db00e475" +PKG_VERSION="1.17.1" +PKG_SHA256="da49d302fb98d61e674dace27d44ab6e6e6446a1ee156a09a430efb738d74b39" PKG_LICENSE="MIT" PKG_SITE="https://codeberg.org/dnkl/foot/" PKG_URL="https://codeberg.org/dnkl/foot/archive/${PKG_VERSION}.tar.gz" From a5a18064ebcb619e8ef6820154eef9507c25277e Mon Sep 17 00:00:00 2001 From: sydarn Date: Sun, 14 Apr 2024 12:04:40 +0200 Subject: [PATCH 032/184] Update ES to remove desktop options for wlroots based compositors --- packages/ui/emulationstation/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index d378aea33..4f16a09d4 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="emulationstation" -PKG_VERSION="be669d916e9a3f393cf63c57929daf796ddec80d" +PKG_VERSION="3aa7268c043e4c2c9b65fd4d10ce4f734b267368" PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From 7a0fae727b3904276c84c847b25a597e5c20f7c3 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Sun, 14 Apr 2024 13:35:32 +0000 Subject: [PATCH 033/184] Portmaster - map only connected controllers --- packages/apps/list-guid/Makefile | 15 ++++++++ packages/apps/list-guid/list-guid.cpp | 37 ++++++++++++++++++++ packages/apps/list-guid/package.mk | 21 +++++++++++ packages/apps/portmaster/package.mk | 6 ++-- packages/apps/portmaster/sources/control.txt | 32 ++++++++++++----- 5 files changed, 99 insertions(+), 12 deletions(-) create mode 100644 packages/apps/list-guid/Makefile create mode 100644 packages/apps/list-guid/list-guid.cpp create mode 100644 packages/apps/list-guid/package.mk diff --git a/packages/apps/list-guid/Makefile b/packages/apps/list-guid/Makefile new file mode 100644 index 000000000..747bcf2e3 --- /dev/null +++ b/packages/apps/list-guid/Makefile @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +CXX ?= gcc +CCFLAGS = -W -Wall -std=c++11 `sdl2-config --cflags` + +BINARY = list-guid +LIBRARIES = -lSDL2 +SOURCES = "list-guid.cpp" + +all: + $(CXX) $(CFLAGS) $(SOURCES) -o $(BINARY) $(LIBRARIES) + +clean: + rm -f $(BINARY) diff --git a/packages/apps/list-guid/list-guid.cpp b/packages/apps/list-guid/list-guid.cpp new file mode 100644 index 000000000..42f539f9c --- /dev/null +++ b/packages/apps/list-guid/list-guid.cpp @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +#include +#include +#include + +int main() +{ + + SDL_GameControllerAddMappingsFromFile("/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt"); + SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); + atexit(SDL_Quit); + + int num_joysticks = SDL_NumJoysticks(); + int i; + for(i = 0; i < num_joysticks; ++i) + { + SDL_Joystick* js = SDL_JoystickOpen(i); + if (js) + { + SDL_JoystickGUID guid = SDL_JoystickGetGUID(js); + bool is_controller = SDL_IsGameController(i); + + char guid_str[1024]; + SDL_JoystickGetGUIDString(guid, guid_str, sizeof(guid_str)); + if (is_controller) + { + printf("%s\n", + guid_str); + } + SDL_JoystickClose(js); + } + } + + return 0; +} diff --git a/packages/apps/list-guid/package.mk b/packages/apps/list-guid/package.mk new file mode 100644 index 000000000..7cb31e9c6 --- /dev/null +++ b/packages/apps/list-guid/package.mk @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="list-guid" +PKG_VERSION="ea44ab254d09d2d86eeb70289673418df2beee75" +PKG_LICENSE="GPLv2" +PKG_DEPENDS_TARGET="toolchain" +PKG_LONGDESC="Simple SDL tool to create a list off GUIDs for all connected gamepads." +PKG_TOOLCHAIN="make" + +pre_make_target() { + cp -f ${PKG_DIR}/Makefile ${PKG_BUILD} + cp -f ${PKG_DIR}/list-guid.cpp ${PKG_BUILD} + CFLAGS+=" -I$(get_build_dir SDL2)/include -D_REENTRANT" +} + +makeinstall_target() { + mkdir -p ${INSTALL}/usr/bin + cp ${PKG_BUILD}/list-guid ${INSTALL}/usr/bin + chmod 0755 ${INSTALL}/usr/bin/* +} diff --git a/packages/apps/portmaster/package.mk b/packages/apps/portmaster/package.mk index 1a7f113e7..b4d285493 100644 --- a/packages/apps/portmaster/package.mk +++ b/packages/apps/portmaster/package.mk @@ -1,14 +1,14 @@ # SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="portmaster" -PKG_VERSION="2024.04.07-0359" +PKG_VERSION="2024.04.12-1452" PKG_SITE="https://github.com/PortsMaster/PortMaster-GUI" PKG_URL="${PKG_SITE}/releases/download/${PKG_VERSION}/PortMaster.zip" COMPAT_URL="https://github.com/ROCKNIX/packages/raw/main/compat.zip" PKG_LICENSE="MIT" PKG_ARCH="arm aarch64" -PKG_DEPENDS_TARGET="toolchain rocknix-hotkey gamecontrollerdb wget oga_controls control-gen xmlstarlet" +PKG_DEPENDS_TARGET="toolchain rocknix-hotkey gamecontrollerdb wget oga_controls control-gen xmlstarlet list-guid" PKG_TOOLCHAIN="manual" PKG_LONGDESC="Portmaster - a simple tool that allows you to download various game ports" diff --git a/packages/apps/portmaster/sources/control.txt b/packages/apps/portmaster/sources/control.txt index fbef44146..ab0550c68 100644 --- a/packages/apps/portmaster/sources/control.txt +++ b/packages/apps/portmaster/sources/control.txt @@ -1,7 +1,7 @@ #!/bin/bash # SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2023-present JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) # This file can and should be sourced by ports for various parameters to # minimize script customizations and allow for easier future updates @@ -75,14 +75,28 @@ get_controls() { param_device="${profile}" - # Extract GUID of current input - DGUID=$(control-gen | awk 'BEGIN {FS="\""} /^DEVICE/ {print $2;exit}') - - # Copy es_input into temp - cp -r /storage/.config/emulationstation/es_input.cfg /tmp/es_input.cfg - - # Remove records from es_input that dont match device GUID - xmlstarlet ed --inplace -d "inputList/inputConfig[@deviceGUID!='${DGUID}']" /tmp/es_input.cfg + # Clean up any former .port_input files + rm -rf /tmp/port_input + rm -rf /tmp/es_input.cfg + + # Dump connected device GUIDs + /usr/bin/list-guid > /tmp/list-guid.txt + #/storage/.config/list-guid > /tmp/list-guid + + # Loop through connected device and extract ES xml mapping + mkdir /tmp/port_input + while read DGUID; do + if [ ! -z "$(cat /storage/.config/emulationstation/es_input.cfg | grep ${DGUID})" ]; then + cp -r /storage/.config/emulationstation/es_input.cfg /tmp/port_input/${DGUID}.xml + xmlstarlet ed --inplace -d "inputList/inputConfig[@deviceGUID!='${DGUID}']" /tmp/port_input/${DGUID}.xml + fi + done ' > /tmp/es_input.cfg + grep -vh '>\|> /tmp/es_input.cfg + echo '' >> /tmp/es_input.cfg # Set file export SDL_GAMECONTROLLERCONFIG_FILE="/tmp/gamecontrollerdb.txt" From a90242bdf8e017c1298c494bd59c094e28d9b374 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 15 Apr 2024 21:05:57 +0000 Subject: [PATCH 034/184] Add Standalone emu option to reset menu --- packages/rocknix/sources/scripts/factoryreset | 34 +++++++++++++++++++ packages/ui/emulationstation/package.mk | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/rocknix/sources/scripts/factoryreset b/packages/rocknix/sources/scripts/factoryreset index 3c2e0a2d8..b3a7cdb8d 100755 --- a/packages/rocknix/sources/scripts/factoryreset +++ b/packages/rocknix/sources/scripts/factoryreset @@ -16,6 +16,40 @@ case "${1}" in "mednafen") rm -f /storage/.config/mednafen/mednafen.cfg ;; + "standalone") + rm -rf /storage/.config/aethersx2 + cp -rf /usr/config/aethersx2 /storage/.config/ + + rm -rf /storage/.config/amiberry + cp -rf /usr/config/amiberry /storage/.config/ + + rm -rf /storage/.config/dolphin-emu + cp -rf /usr/config/dolphin-emu /storage/.config/ + + rm -rf /storage/.config/drastic + cp -rf /usr/config/drastic /storage/.config/ + + rm -rf /storage/.config/duckstation + cp -rf /usr/config/duckstation /storage/.config/ + + rm -rf /storage/.config/flycast + cp -rf /usr/config/flycast /storage/.config/ + + rm -rf /storage/.config/gzdoom + cp -rf /usr/config/gzdoom /storage/.config/ + + rm -rf /storage/.config/hatari + cp -rf /usr/config/hatari /storage/.config/ + + rm -rf /storage/.config/melonDS + cp -rf /usr/config/melonDS /storage/.config/ + + rm -rf /storage/.config/openbor + cp -rf /usr/config/openbor /storage/.config/ + + rm -rf /storage/.config/ppsspp + cp -rf /usr/config/ppsspp /storage/.config/ + ;; "overlays") rm -rf $(cat /usr/lib/systemd/system/tmp-*.mount | grep -Eo 'upperdir=.*,' | sed -e 's~upperdir=~~g; s~,~~g') sync diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index 4f16a09d4..e87f4d43c 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="emulationstation" -PKG_VERSION="3aa7268c043e4c2c9b65fd4d10ce4f734b267368" +PKG_VERSION="bc96b151c43f5b2604bb46f9273cbff9311c2aeb" PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From 65090257a86c901032627369f73e378f8e2e29bf Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 15 Apr 2024 22:35:54 +0000 Subject: [PATCH 035/184] Update Box64 and fix portmaster --- packages/apps/portmaster/sources/control.txt | 3 +-- packages/compat/box64/package.mk | 10 ++++++++-- packages/x11/lib/libXss/package.mk | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 packages/x11/lib/libXss/package.mk diff --git a/packages/apps/portmaster/sources/control.txt b/packages/apps/portmaster/sources/control.txt index ab0550c68..204cb4b91 100644 --- a/packages/apps/portmaster/sources/control.txt +++ b/packages/apps/portmaster/sources/control.txt @@ -80,8 +80,7 @@ get_controls() { rm -rf /tmp/es_input.cfg # Dump connected device GUIDs - /usr/bin/list-guid > /tmp/list-guid.txt - #/storage/.config/list-guid > /tmp/list-guid + /usr/bin/list-guid > /tmp/list-guid # Loop through connected device and extract ES xml mapping mkdir /tmp/port_input diff --git a/packages/compat/box64/package.mk b/packages/compat/box64/package.mk index a3ea49407..f4a837a85 100644 --- a/packages/compat/box64/package.mk +++ b/packages/compat/box64/package.mk @@ -2,17 +2,23 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box64" -PKG_VERSION="211fee2e4e4ce1f7132660469df613df5a74ac88" +PKG_VERSION="067cf75c658c632b7c476036e6b21d985cbe67a2" PKG_ARCH="aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box64" PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound cabextract" +PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound cabextract libXss libXdmcp" PKG_LONGDESC="Box64 lets you run x86_64 Linux programs (such as games) on non-x86_64 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" PKG_CMAKE_OPTS_TARGET+=" -DCMAKE_BUILD_TYPE=Release" +case ${DEVICE} in + RK3588) + PKG_CMAKE_OPTS_TARGET+=" -DRK3588=On" + ;; +esac + makeinstall_target() { mkdir -p ${INSTALL}/usr/share/box64/lib cp ${PKG_BUILD}/x64lib/* ${INSTALL}/usr/share/box64/lib diff --git a/packages/x11/lib/libXss/package.mk b/packages/x11/lib/libXss/package.mk new file mode 100644 index 000000000..d954eee70 --- /dev/null +++ b/packages/x11/lib/libXss/package.mk @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="libXss" +PKG_VERSION="1.2.4" +PKG_LICENSE="OSS" +PKG_SITE="https://www.X.org" +PKG_URL="https://xorg.freedesktop.org/archive/individual/lib/libXScrnSaver-${PKG_VERSION}.tar.xz" +PKG_DEPENDS_TARGET="toolchain util-macros libXext" +PKG_LONGDESC="X11 Screen Saver extension library." +PKG_BUILD_FLAGS="+pic -sysroot" + +PKG_CONFIGURE_OPTS_TARGET="--enable-malloc0returnsnull" + +post_configure_target() { + libtool_remove_rpath libtool +} From b54af22f613f761fc898d7996139709d2eb1375b Mon Sep 17 00:00:00 2001 From: sydarn Date: Mon, 15 Apr 2024 15:04:54 +0200 Subject: [PATCH 036/184] rk3588: use Ace's RAM init blob --- packages/tools/rkbin/package.mk | 3 +-- projects/Rockchip/devices/RK3588/options | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/tools/rkbin/package.mk b/packages/tools/rkbin/package.mk index f0cd61b50..b172686ea 100644 --- a/packages/tools/rkbin/package.mk +++ b/packages/tools/rkbin/package.mk @@ -8,6 +8,5 @@ PKG_SITE="https://github.com/ROCKNIX/rkbin" PKG_LONGDESC="rkbin: Rockchip Firmware and Tool Binaries" PKG_TOOLCHAIN="manual" PKG_PATCH_DIRS+="${DEVICE}*" - -PKG_VERSION="30691baa32ebc8a40f23e4cf5471b17256bd7b4d" +PKG_VERSION="14a5c52f024df8731347de7c985632156449f34d" PKG_URL="${PKG_SITE}.git" diff --git a/projects/Rockchip/devices/RK3588/options b/projects/Rockchip/devices/RK3588/options index 52b8e36bd..d3653be69 100755 --- a/projects/Rockchip/devices/RK3588/options +++ b/projects/Rockchip/devices/RK3588/options @@ -39,7 +39,7 @@ UBOOT_CONFIG="orangepi_5_defconfig" PKG_SOC="rk3588" - PKG_DATAFILE="${PKG_RKBIN}/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin" + PKG_DATAFILE="${PKG_RKBIN}/bin/rk35/rk3588_ddr_lp4_1848MHz_lp5_2736MHz_v1.10.bin" PKG_LOADER="spl/u-boot-spl.bin" PKG_BL31="${PKG_RKBIN}/bin/rk35/rk3588_bl31_v1.38.elf" PKG_LOAD_ADDR="0x00200000" From 3f82be5ddd168e70efa38374e21beee5cd22e40f Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:36:01 +0000 Subject: [PATCH 037/184] Box86 / Box64: add missing libraries needed for some games --- packages/compat/box64/package.mk | 2 +- packages/compat/box86/package.mk | 2 +- packages/x11/lib/libXft/package.mk | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 packages/x11/lib/libXft/package.mk diff --git a/packages/compat/box64/package.mk b/packages/compat/box64/package.mk index f4a837a85..dd8e3a60c 100644 --- a/packages/compat/box64/package.mk +++ b/packages/compat/box64/package.mk @@ -7,7 +7,7 @@ PKG_ARCH="aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box64" PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound cabextract libXss libXdmcp" +PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound cabextract libXss libXdmcp libXft" 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/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index 7a367a455..e2cd25dc4 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -7,7 +7,7 @@ PKG_ARCH="arm aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound" +PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound libXdmcp libXft" PKG_LONGDESC="Box86 lets you run x86 Linux programs (such as games) on non-x86 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" diff --git a/packages/x11/lib/libXft/package.mk b/packages/x11/lib/libXft/package.mk new file mode 100644 index 000000000..3b9f05960 --- /dev/null +++ b/packages/x11/lib/libXft/package.mk @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="libXft" +PKG_VERSION="2.3.8" +PKG_SHA256="5e8c3c4bc2d4c0a40aef6b4b38ed2fb74301640da29f6528154b5009b1c6dd49" +PKG_LICENSE="OSS" +PKG_SITE="https://www.X.org" +PKG_URL="https://xorg.freedesktop.org/archive/individual/lib/libXft-${PKG_VERSION}.tar.xz" +PKG_DEPENDS_TARGET="toolchain fontconfig freetype libXrender util-macros xorgproto" +PKG_LONGDESC="X FreeType library." +PKG_BUILD_FLAGS="+pic -sysroot" + +PKG_CONFIGURE_OPTS_TARGET="--disable-static \ + --enable-shared" From 923bf0888d84b2ce9cb6217326793d378efd51d4 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:37:53 +0000 Subject: [PATCH 038/184] RK3588 Gameforce Ace Fixes, thanks doc brown! --- .../quirks/devices/GameForce ACE/bin/fancontrol | 4 ++-- .../patches/linux/RK3588/000-gameforce-ace.patch | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol b/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol index 22f44ea90..563cc33e2 100755 --- a/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol +++ b/packages/hardware/quirks/devices/GameForce ACE/bin/fancontrol @@ -56,8 +56,8 @@ then elif [ "${COOLING_PROFILE}" = "quiet" ] then # Quiet. - SPEEDS=(32 48 64 96 128 192 255) - TEMPS=(45000 50000 55000 65000 75000 85000 90000) + SPEEDS=(24 32 48 64 96 128 192 255) + TEMPS=(35000 45000 50000 55000 65000 75000 85000 90000) else # auto set_control 0 >/dev/null 2>&1 diff --git a/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch b/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch index 09ad29b21..aa697e89e 100644 --- a/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch +++ b/projects/Rockchip/patches/linux/RK3588/000-gameforce-ace.patch @@ -205,7 +205,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin + }; + + hdmi0_sound: hdmi0-sound { -+ status = "disabled"; ++ status = "okay"; + compatible = "rockchip,hdmi"; + rockchip,mclk-fs = <128>; + rockchip,card-name = "rockchip-hdmi0"; @@ -215,7 +215,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin + }; + + dp0_sound: dp0-sound { -+ status = "disabled"; ++ status = "okay"; + compatible = "rockchip,hdmi"; + rockchip,card-name= "rockchip-dp0"; + rockchip,mclk-fs = <512>; @@ -456,7 +456,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin +}; + +&hdmi0_sound { -+ status = "disabled"; ++ status = "okay"; +}; + +&hdptxphy_hdmi0 { @@ -474,7 +474,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin +}; + +&dp0_sound{ -+ status = "disabled"; ++ status = "okay"; +}; + +&dp0 { @@ -1285,6 +1285,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin + + bluetooth { + compatible = "brcm,bcm4345c5"; ++ max-speed = <1500000>; + clocks = <&hym8563>; + clock-names = "lpo"; + device-wakeup-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_HIGH>; @@ -1310,7 +1311,6 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588s-gameforce-ace.dts lin +}; + + -+ +&u2phy2_host { + status = "okay"; + phy-supply = <&vcc5v0_host>; From f70c76da86595828e942c69fbd9c3dc9fe1b6356 Mon Sep 17 00:00:00 2001 From: alexdelorenzo <3579286+alexdelorenzo@users.noreply.github.com> Date: Wed, 17 Apr 2024 03:27:37 -0400 Subject: [PATCH 039/184] Add Wii gamepad maps for Odroid Go Ultra --- .../S922X/WiiControllerProfiles/hremote.ini | 28 +++++++------- .../S922X/WiiControllerProfiles/nunchuck.ini | 38 +++++++++---------- .../S922X/WiiControllerProfiles/vremote.ini | 28 +++++++------- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/hremote.ini b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/hremote.ini index 1a9391b18..e01f83715 100644 --- a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/hremote.ini +++ b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/hremote.ini @@ -1,19 +1,19 @@ [Wiimote1] Device = evdev/0/GO-Ultra Gamepad -Buttons/A = Button 0 -Buttons/B = Button 1 -Buttons/1 = Button 3 -Buttons/2 = Button 2 -Buttons/- = Button 12 -Buttons/+ = Button 17 -Buttons/Home = Button 13 -Shake/X = Button 4 -Shake/Y = Button 4 -Shake/Z = Button 4 -D-Pad/Up = Button 10 -D-Pad/Down = Button 11 -D-Pad/Left = Button 9 -D-Pad/Right = Button 8 +Buttons/A = Button 1 +Buttons/B = Button 0 +Buttons/1 = Button 4 +Buttons/2 = Button 3 +Buttons/- = Button 9 +Buttons/+ = Button 10 +Buttons/Home = Button 12 +Shake/X = Button 13 +Shake/Y = Button 13 +Shake/Z = Button 13 +D-Pad/Up = Button 14 +D-Pad/Down = Button 15 +D-Pad/Left = Button 16 +D-Pad/Right = Button 17 IR/Up = `Axis 3-` IR/Down = `Axis 3+` IR/Left = `Axis 2-` diff --git a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/nunchuck.ini b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/nunchuck.ini index 17cbe3d76..0913aa6d9 100644 --- a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/nunchuck.ini +++ b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/nunchuck.ini @@ -1,29 +1,29 @@ [Wiimote1] Device = evdev/0/GO-Ultra Gamepad Extension = Nunchuk -Buttons/A = Button 0 -Buttons/B = Button 1 -Buttons/1 = Button 3 -Buttons/2 = Button 2 -Buttons/- = Button 12 -Buttons/+ = Button 17 -D-Pad/Up = Button 8 -D-Pad/Down = Button 9 -D-Pad/Left = Button 10 -D-Pad/Right = Button 11 -Buttons/Home = Button 13 -Shake/X = Button 4 -Shake/Y = Button 4 -Shake/Z = Button 4 -Nunchuk/Buttons/C = Button 5 -Nunchuk/Buttons/Z = Button 7 +Buttons/A = Button 1 +Buttons/B = Button 0 +Buttons/1 = Button 4 +Buttons/2 = Button 3 +Buttons/- = Button 9 +Buttons/+ = Button 10 +D-Pad/Up = Button 17 +D-Pad/Down = Button 16 +D-Pad/Left = Button 14 +D-Pad/Right = Button 15 +Buttons/Home = Button 12 +Shake/X = Button 13 +Shake/Y = Button 13 +Shake/Z = Button 13 +Nunchuk/Buttons/C = Button 7 +Nunchuk/Buttons/Z = Button 8 Nunchuk/Stick/Up = Axis 1- Nunchuk/Stick/Down = Axis 1+ Nunchuk/Stick/Left = Axis 0- Nunchuk/Stick/Right = Axis 0+ -Nunchuk/Shake/X = Button 6 -Nunchuk/Shake/Y = Button 6 -Nunchuk/Shake/Z = Button 6 +Nunchuk/Shake/X = Button 2 +Nunchuk/Shake/Y = Button 2 +Nunchuk/Shake/Z = Button 2 IR/Up = `Axis 3-` IR/Down = `Axis 3+` IR/Left = `Axis 2-` diff --git a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/vremote.ini b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/vremote.ini index 33767e20c..3025cfcdb 100644 --- a/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/vremote.ini +++ b/packages/emulators/standalone/dolphin-sa/config/S922X/WiiControllerProfiles/vremote.ini @@ -1,19 +1,19 @@ [Wiimote1] Device = evdev/0/GO-Ultra Gamepad -Buttons/A = Button 0 -Buttons/B = Button 1 -Buttons/1 = Button 3 -Buttons/2 = Button 2 -Buttons/- = Button 12 -Buttons/+ = Button 17 -Buttons/Home = Button 13 -Shake/X = Button 4 -Shake/Y = Button 4 -Shake/Z = Button 4 -D-Pad/Up = Button 8 -D-Pad/Down = Button 9 -D-Pad/Left = Button 10 -D-Pad/Right = Button 11 +Buttons/A = Button 1 +Buttons/B = Button 0 +Buttons/1 = Button 4 +Buttons/2 = Button 3 +Buttons/- = Button 9 +Buttons/+ = Button 10 +Buttons/Home = Button 12 +Shake/X = Button 13 +Shake/Y = Button 13 +Shake/Z = Button 13 +D-Pad/Up = Button 17 +D-Pad/Down = Button 16 +D-Pad/Left = Button 14 +D-Pad/Right = Button 15 IR/Up = `Axis 3-` IR/Down = `Axis 3+` IR/Left = `Axis 2-` From 01f9dbb6fe7c690a34f40983893050a2dc45ce7e Mon Sep 17 00:00:00 2001 From: John Williams Date: Wed, 17 Apr 2024 21:05:19 +1000 Subject: [PATCH 040/184] Refactor OpenGL check in portmaster_compatibility.sh --- .../scripts/portmaster_compatibility.sh | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/apps/portmaster/scripts/portmaster_compatibility.sh b/packages/apps/portmaster/scripts/portmaster_compatibility.sh index cd57e6d8f..2326544a8 100644 --- a/packages/apps/portmaster/scripts/portmaster_compatibility.sh +++ b/packages/apps/portmaster/scripts/portmaster_compatibility.sh @@ -6,18 +6,8 @@ . /etc/profile if [[ "${UI_SERVICE}" =~ "weston.service"|"*sway*" ]]; then -case "${QUIRK_DEVICE}" in - "Hardkernel ODROID-GO-Ultra"|"Powkiddy RGB10 MAX 3 Pro"|"Hardkernel ODROID-N2*") - #Fixing ports on S922X, exclude FNA games - for port in /storage/roms/ports/*.sh; do - if ! grep -q FNA "$port"; then - sed -i '/get_controls/c\get_controls && export SDL_VIDEO_GL_DRIVER=/usr/lib/egl/libGL.so.1 SDL_VIDEO_EGL_DRIVER=/usr/lib/egl/libEGL.so.1' "$port" - echo Fixing: "$port"; - fi - done; - ;; - *) - #Remove gl4es libs on devices that support OpenGL and sed any port that refrences it + if [[ $(glxinfo | grep -i "opengl renderer") =~ "Panfrost" ]]; then + #Remove gl4es libs on devices that support OpenGL and sed any port that references it rm -rf /storage/roms/ports/*/lib*/libEGL* rm -rf /storage/roms/ports/*/lib*/libGL* for port in /storage/roms/ports/*.sh; do @@ -33,6 +23,17 @@ case "${QUIRK_DEVICE}" in sed -i '/get_controls && export/c\get_controls' "$port" echo Fixing: "$port"; done; - ;; -esac + else + case "${QUIRK_DEVICE}" in + "Hardkernel ODROID-GO-Ultra"|"Powkiddy RGB10 MAX 3 Pro"|"Hardkernel ODROID-N2*") + #Fixing ports on S922X, exclude FNA games + for port in /storage/roms/ports/*.sh; do + if ! grep -q FNA "$port"; then + sed -i '/get_controls/c\get_controls && export SDL_VIDEO_GL_DRIVER=/usr/lib/egl/libGL.so.1 SDL_VIDEO_EGL_DRIVER=/usr/lib/egl/libEGL.so.1' "$port" + echo Fixing: "$port"; + fi + done; + ;; + esac + fi fi From 4febe1ee99e27a155f6accca4016997df93d5f8d Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:28:53 +0000 Subject: [PATCH 041/184] Update linux, update mesa, update wine, update box86/64 --- packages/compat/box64/package.mk | 2 +- packages/compat/box86/package.mk | 4 +- packages/compat/lutris-wine/package.mk | 59 -------------------------- packages/compat/wine/package.mk | 2 +- packages/graphics/mesa/package.mk | 6 +-- packages/kernel/linux/package.mk | 2 +- packages/virtual/x86/package.mk | 4 -- scripts/update_packages | 2 +- 8 files changed, 9 insertions(+), 72 deletions(-) delete mode 100644 packages/compat/lutris-wine/package.mk diff --git a/packages/compat/box64/package.mk b/packages/compat/box64/package.mk index dd8e3a60c..0aff9abd7 100644 --- a/packages/compat/box64/package.mk +++ b/packages/compat/box64/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box64" -PKG_VERSION="067cf75c658c632b7c476036e6b21d985cbe67a2" +PKG_VERSION="d4e32fdbc0a971ce5c6f2880b38df7789b9d64a5" PKG_ARCH="aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box64" diff --git a/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index e2cd25dc4..e1c95a71f 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -2,12 +2,12 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box86" -PKG_VERSION="266392e315bb5e7827928512c930e04448f137d1" +PKG_VERSION="22ee4685a18981983eb6c0031da37a8ca2b87b1f" PKG_ARCH="arm aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound libXdmcp libXft" +PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound libXdmcp libXft libXcomposite cups" PKG_LONGDESC="Box86 lets you run x86 Linux programs (such as games) on non-x86 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" diff --git a/packages/compat/lutris-wine/package.mk b/packages/compat/lutris-wine/package.mk deleted file mode 100644 index 65021e161..000000000 --- a/packages/compat/lutris-wine/package.mk +++ /dev/null @@ -1,59 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="lutris-wine" -PKG_VERSION="7.2-2" -PKG_ARCH="x86_64 i686" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/lutris/wine" -PKG_URL="${PKG_SITE}/archive/refs/tags/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain bison flex lutris-wine:host" -PKG_DEPENDS_HOST="toolchain bison:host flex:host" -PKG_TOOLCHAIN="configure" - -pre_configure_host() { - PKG_CONFIGURE_OPTS_HOST+=" --enable-win64 --disable-tests" - - case ${TARGET_ARCH} in - i686) - PKG_CONFIGURE_OPTS_HOST+=" --without-freetype" - ;; - esac -} - -pre_configure_target() { - PKG_CONFIGURE_OPTS_TARGET+=" --disable-tests --with-wine-tools=${TOOLCHAIN}/wine" - - case ${TARGET_ARCH} in - x86_64) - PKG_CONFIGURE_OPTS_TARGET+=" --enable-win64" - ;; - i686) - PKG_CONFIGURE_OPTS_TARGET+=" --without-freetype" - ;; - esac -} - -make_host() { - make -C ${PKG_BUILD}/.${HOST_NAME} - make -C ${PKG_BUILD}/.${HOST_NAME}/tools - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/sfnt2fon - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/widl - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/winebuild - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/winegcc - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/wmc - make -C ${PKG_BUILD}/.${HOST_NAME}/tools/wrc -} - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/wine/tools - cp -rf ${PKG_BUILD}/.${HOST_NAME}/tools/* ${TOOLCHAIN}/wine/tools -} - -post_install() { - case ${TARGET_ARCH} in - x86_64) - cp -vPr ${ROOT}/build.${DISTRO}-${DEVICE}.i686/lutris-wine-*/.install_pkg/usr/ ${INSTALL}/ - ;; - esac -} diff --git a/packages/compat/wine/package.mk b/packages/compat/wine/package.mk index ee7e88f22..df64f233e 100644 --- a/packages/compat/wine/package.mk +++ b/packages/compat/wine/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="wine" -PKG_VERSION="9.4" +PKG_VERSION="9.6" PKG_LICENSE="MIT" PKG_SITE="https://github.com/Kron4ek/Wine-Builds" PKG_URL="${PKG_SITE}/releases/download/${PKG_VERSION}/wine-${PKG_VERSION}-x86.tar.xz" diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index 7185e797c..d8e7b6a79 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -17,19 +17,19 @@ case ${DEVICE} in ;; RK3*|S922X) if [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ]; then - PKG_VERSION="24.0.4" + PKG_VERSION="24.0.5" PKG_SITE="http://www.mesa3d.org/" PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" else #Using upstream dev for panfrost - PKG_VERSION="db29984c254f60f5daeec0ea4e6048b6ee7902f8" + PKG_VERSION="5363f7cce5c967bd84210b0a316cd502e197609f" PKG_SITE="https://gitlab.freedesktop.org/mesa/mesa" PKG_URL="${PKG_SITE}.git" PKG_PATCH_DIRS+=" panfrost" fi ;; *) - PKG_VERSION="24.0.4" + PKG_VERSION="24.0.5" PKG_SITE="http://www.mesa3d.org/" PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" ;; diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index badb14f46..2c76c5965 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -29,7 +29,7 @@ case ${DEVICE} in PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; *) - PKG_VERSION="6.8.5" + PKG_VERSION="6.8.6" PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" ;; esac diff --git a/packages/virtual/x86/package.mk b/packages/virtual/x86/package.mk index f7b400b1c..87f96bcd7 100644 --- a/packages/virtual/x86/package.mk +++ b/packages/virtual/x86/package.mk @@ -26,7 +26,3 @@ if [ "${DISPLAYSERVER}" = "wl" ]; then PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER}" fi -### Compatability -#PKG_DEPENDS_TARGET+=" lutris-wine" - - diff --git a/scripts/update_packages b/scripts/update_packages index 1eeea2a82..8cf16a602 100755 --- a/scripts/update_packages +++ b/scripts/update_packages @@ -4,7 +4,7 @@ # Based on work by ToKe79 and Shanti Gilbert -OPTIONS="distributions/rocknix/options" +OPTIONS="distributions/ROCKNIX/options" PACKAGES=("packages/virtual/emulators/package.mk" \ "packages/virtual/es-themes/package.mk" \ "packages/virtual/gamesupport/package.mk" ) From 6cadc9f0c9408e1cd0afba163a077bdb1527d999 Mon Sep 17 00:00:00 2001 From: LittleBoi Date: Thu, 18 Apr 2024 03:19:31 +0900 Subject: [PATCH 042/184] Update 002-display-quirks.patch --- .../patches/AMD64/002-display-quirks.patch | 79 ++++++++++++------- 1 file changed, 50 insertions(+), 29 deletions(-) diff --git a/packages/kernel/linux/patches/AMD64/002-display-quirks.patch b/packages/kernel/linux/patches/AMD64/002-display-quirks.patch index 806f3f644..1cb6b6bb8 100755 --- a/packages/kernel/linux/patches/AMD64/002-display-quirks.patch +++ b/packages/kernel/linux/patches/AMD64/002-display-quirks.patch @@ -1,7 +1,7 @@ -diff -rupN linux-6.6.9.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux-6.6.9/drivers/gpu/drm/drm_panel_orientation_quirks.c ---- linux-6.6.9.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-01-04 00:22:05.545161814 +0000 -+++ linux-6.6.9/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-01-04 00:23:21.365247268 +0000 -@@ -141,6 +141,12 @@ static const struct drm_dmi_panel_orient +diff -rupN linux-6.8.6.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux-6.8.6/drivers/gpu/drm/drm_panel_orientation_quirks.c +--- linux-6.8.6.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-04-13 20:10:12.000000000 +0900 ++++ linux-6.8.6/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-04-18 03:04:59.815912789 +0900 +@@ -147,6 +147,12 @@ static const struct drm_dmi_panel_orient .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, }; @@ -14,7 +14,7 @@ diff -rupN linux-6.6.9.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux static const struct dmi_system_id orientation_data[] = { { /* Acer One 10 (S1003) */ .matches = { -@@ -178,13 +184,13 @@ static const struct dmi_system_id orient +@@ -184,13 +190,13 @@ static const struct dmi_system_id orient DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"), }, .driver_data = (void *)&lcd800x1280_rightside_up, @@ -31,34 +31,55 @@ diff -rupN linux-6.6.9.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"), DMI_MATCH(DMI_PRODUCT_NAME, "AIR"), -@@ -196,6 +202,30 @@ static const struct dmi_system_id orient +@@ -202,6 +208,30 @@ static const struct dmi_system_id orient DMI_MATCH(DMI_BOARD_NAME, "NEXT"), }, .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* AYA NEO GEEK */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AYANEO"), -+ DMI_MATCH(DMI_BOARD_NAME, "GEEK"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* AYANEO AYANEO 2, 2S */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "AYANEO 2"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* AOKZOE A1 Pro */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AOKZOE"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AOKZOE A1 Pro"), -+ }, ++ }, { /* AYA NEO GEEK */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AYANEO"), ++ DMI_MATCH(DMI_BOARD_NAME, "GEEK"), ++ }, ++ .driver_data = (void *)&lcd800x1280_rightside_up, ++ }, { /* AYANEO AYANEO 2, 2S */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "AYANEO 2"), ++ }, ++ .driver_data = (void *)&lcd1200x1920_rightside_up, ++ }, { /* AOKZOE A1 Pro */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AOKZOE"), ++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AOKZOE A1 Pro"), ++ }, + .driver_data = (void *)&lcd1200x1920_leftside_up, -+ }, { /* AYN Loki Zero, Max, Max Pro */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ayn"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "Loki"), -+ }, -+ .driver_data = (void *)&lcd1080x1920_leftside_up, ++ }, { /* AYN Loki Zero, Max, Max Pro */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ayn"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Loki"), ++ }, ++ .driver_data = (void *)&lcd1080x1920_leftside_up, }, { /* Chuwi HiBook (CWI514) */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), +@@ -351,6 +381,7 @@ static const struct dmi_system_id orient + }, { /* Lenovo Legion Go 8APU1 */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "83E1"), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Legion Go 8APU1"), + }, + .driver_data = (void *)&lcd1600x2560_leftside_up, +@@ -408,6 +439,12 @@ static const struct dmi_system_id orient + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"), + }, + .driver_data = (void *)&lcd1600x2560_leftside_up, ++ }, { /* OneXPlayer2 */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"), ++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER 2 ARP23"), ++ }, ++ .driver_data = (void *)&lcd1600x2560_leftside_up, + }, { /* Samsung GalaxyBook 10.6 */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), From 33131acf76e808f6d7b9df43cb9b4cf11b278818 Mon Sep 17 00:00:00 2001 From: LittleBoi Date: Thu, 18 Apr 2024 03:28:30 +0900 Subject: [PATCH 043/184] Delete packages/kernel/linux/patches/AMD64/002-LegionGO-rotation-quirk.patch --- .../AMD64/002-LegionGO-rotation-quirk.patch | 533 ------------------ 1 file changed, 533 deletions(-) delete mode 100644 packages/kernel/linux/patches/AMD64/002-LegionGO-rotation-quirk.patch diff --git a/packages/kernel/linux/patches/AMD64/002-LegionGO-rotation-quirk.patch b/packages/kernel/linux/patches/AMD64/002-LegionGO-rotation-quirk.patch deleted file mode 100644 index 1bca49a0a..000000000 --- a/packages/kernel/linux/patches/AMD64/002-LegionGO-rotation-quirk.patch +++ /dev/null @@ -1,533 +0,0 @@ -diff -rupN linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c ---- linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-01-04 23:15:09.706448784 +0000 -+++ linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c 2024-01-04 23:20:09.071025713 +0000 -@@ -336,6 +336,13 @@ static const struct dmi_system_id orient - DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Duet 3 10IGL5"), - }, - .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Legion Go */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "83E1"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Legion Go 8APU1"), -+ }, -+ .driver_data = (void *)&lcd1600x2560_leftside_up, - }, { /* Lenovo Legion Go 8APU1 */ - .matches = { - DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -diff -rupN linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c.orig linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c.orig ---- linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c.orig 1970-01-01 00:00:00.000000000 +0000 -+++ linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c.orig 2024-01-04 23:18:55.450922222 +0000 -@@ -0,0 +1,492 @@ -+/* SPDX-License-Identifier: MIT */ -+/* -+ * drm_panel_orientation_quirks.c -- Quirks for non-normal panel orientation -+ * -+ * Copyright (C) 2017 Hans de Goede -+ * -+ * Note the quirks in this file are shared with fbdev/efifb and as such -+ * must not depend on other drm code. -+ */ -+ -+#include -+#include -+#include -+#include -+ -+#ifdef CONFIG_DMI -+ -+/* -+ * Some x86 clamshell design devices use portrait tablet screens and a display -+ * engine which cannot rotate in hardware, so we need to rotate the fbcon to -+ * compensate. Unfortunately these (cheap) devices also typically have quite -+ * generic DMI data, so we match on a combination of DMI data, screen resolution -+ * and a list of known BIOS dates to avoid false positives. -+ */ -+ -+struct drm_dmi_panel_orientation_data { -+ int width; -+ int height; -+ const char * const *bios_dates; -+ int orientation; -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_micropc = { -+ .width = 720, -+ .height = 1280, -+ .bios_dates = (const char * const []){ "04/26/2019", -+ NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_onemix2s = { -+ .width = 1200, -+ .height = 1920, -+ .bios_dates = (const char * const []){ "05/21/2018", "10/26/2018", -+ "03/04/2019", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_pocket = { -+ .width = 1200, -+ .height = 1920, -+ .bios_dates = (const char * const []){ "05/26/2017", "06/28/2017", -+ "07/05/2017", "08/07/2017", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_pocket2 = { -+ .width = 1200, -+ .height = 1920, -+ .bios_dates = (const char * const []){ "06/28/2018", "08/28/2018", -+ "12/07/2018", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_win = { -+ .width = 720, -+ .height = 1280, -+ .bios_dates = (const char * const []){ -+ "10/25/2016", "11/18/2016", "12/23/2016", "12/26/2016", -+ "02/21/2017", "03/20/2017", "05/25/2017", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data gpd_win2 = { -+ .width = 720, -+ .height = 1280, -+ .bios_dates = (const char * const []){ -+ "12/07/2017", "05/24/2018", "06/29/2018", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data itworks_tw891 = { -+ .width = 800, -+ .height = 1280, -+ .bios_dates = (const char * const []){ "10/16/2015", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data onegx1_pro = { -+ .width = 1200, -+ .height = 1920, -+ .bios_dates = (const char * const []){ "12/17/2020", NULL }, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd720x1280_rightside_up = { -+ .width = 720, -+ .height = 1280, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd800x1280_leftside_up = { -+ .width = 800, -+ .height = 1280, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd800x1280_rightside_up = { -+ .width = 800, -+ .height = 1280, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd1080x1920_leftside_up = { -+ .width = 1080, -+ .height = 1920, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd1200x1920_rightside_up = { -+ .width = 1200, -+ .height = 1920, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd1280x1920_rightside_up = { -+ .width = 1280, -+ .height = 1920, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd1600x2560_leftside_up = { -+ .width = 1600, -+ .height = 2560, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP, -+}; -+ -+static const struct drm_dmi_panel_orientation_data lcd1600x2560_rightside_up = { -+ .width = 1600, -+ .height = 2560, -+ .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, -+}; -+ -+static const struct dmi_system_id orientation_data[] = { -+ { /* Acer One 10 (S1003) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Acer Switch V 10 (SW5-017) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Anbernic Win600 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Anbernic"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Win600"), -+ }, -+ .driver_data = (void *)&lcd720x1280_rightside_up, -+ }, { /* Asus T100HA */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100HAN"), -+ }, -+ .driver_data = (void *)&lcd800x1280_leftside_up, -+ }, { /* Asus T101HA */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T101HA"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Asus T103HAF */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* AYA NEO 2021 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYADEVICE"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AYA NEO 2021"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* AYA NEO AIR */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYANEO"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "AIR"), -+ }, -+ .driver_data = (void *)&lcd1080x1920_leftside_up, -+ }, { /* AYA NEO NEXT */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AYANEO"), -+ DMI_MATCH(DMI_BOARD_NAME, "NEXT"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Chuwi HiBook (CWI514) */ -+ .matches = { -+ DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), -+ DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"), -+ /* Above matches are too generic, add bios-date match */ -+ DMI_MATCH(DMI_BIOS_DATE, "05/07/2016"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Chuwi Hi10 Pro (CWI529) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Hampoo"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Hi10 pro tablet"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Dynabook K50 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dynabook Inc."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "dynabook K50/FR"), -+ }, -+ .driver_data = (void *)&lcd800x1280_leftside_up, -+ }, { /* GPD MicroPC (generic strings, also match on bios date) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_micropc, -+ }, { /* GPD MicroPC (later BIOS versions with proper DMI strings) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MicroPC"), -+ }, -+ .driver_data = (void *)&lcd720x1280_rightside_up, -+ }, { /* GPD Win Max */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1619-01"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* -+ * GPD Pocket, note that the DMI data is less generic then -+ * it seems, devices with a board-vendor of "AMI Corporation" -+ * are quite rare, as are devices which have both board- *and* -+ * product-id set to "Default String" -+ */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_SERIAL, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_pocket, -+ }, { /* GPD Pocket 2 (generic strings, also match on bios date) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_pocket2, -+ }, { /* GPD Win (same note on DMI match as GPD Pocket) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_SERIAL, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_win, -+ }, { /* GPD Win 2 (too generic strings, also match on bios date) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_win2, -+ }, { /* GPD Win 3 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1618-03") -+ }, -+ .driver_data = (void *)&lcd720x1280_rightside_up, -+ }, { /* I.T.Works TW891 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TW891"), -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "To be filled by O.E.M."), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "TW891"), -+ }, -+ .driver_data = (void *)&itworks_tw891, -+ }, { /* KD Kurio Smart C15200 2-in-1 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "KD Interactive"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Kurio Smart"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "KDM960BCP"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* -+ * Lenovo Ideapad Miix 310 laptop, only some production batches -+ * have a portrait screen, the resolution checks makes the quirk -+ * apply only to those batches. -+ */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "80SG"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "MIIX 310-10ICR"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Lenovo Ideapad Miix 320 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "80XF"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Lenovo Ideapad D330-10IGM (HD) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad D330-10IGM"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Lenovo Ideapad D330-10IGM (FHD) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad D330-10IGM"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Ideapad D330-10IGL (HD) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad D330-10IGL"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* Lenovo IdeaPad Duet 3 10IGL5 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Duet 3 10IGL5"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Legion Go 8APU1 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Legion Go 8APU1"), -+ }, -+ .driver_data = (void *)&lcd1600x2560_leftside_up, -+ }, { /* Lenovo Yoga Book X90F / X90L */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Yoga Book X91F / X91L */ -+ .matches = { -+ /* Non exact match to match F + L versions */ -+ DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Yoga Tablet 2 830F / 830L */ -+ .matches = { -+ /* -+ * Note this also matches the Lenovo Yoga Tablet 2 1050F/L -+ * since that uses the same mainboard. The resolution match -+ * will limit this to only matching on the 830F/L. Neither has -+ * any external video outputs so those are not a concern. -+ */ -+ DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "VALLEYVIEW C0 PLATFORM"), -+ DMI_MATCH(DMI_BOARD_NAME, "BYT-T FFD8"), -+ /* Partial match on beginning of BIOS version */ -+ DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* Lenovo Yoga Tab 3 X90F */ -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), -+ }, -+ .driver_data = (void *)&lcd1600x2560_rightside_up, -+ }, { /* Nanote UMPC-01 */ -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "RWC CO.,LTD"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "UMPC-01"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -+ }, { /* OneGX1 Pro */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SYSTEM_MANUFACTURER"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SYSTEM_PRODUCT_NAME"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Default string"), -+ }, -+ .driver_data = (void *)&onegx1_pro, -+ }, { /* OneXPlayer */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK TECHNOLOGY CO., LTD."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"), -+ }, -+ .driver_data = (void *)&lcd1600x2560_leftside_up, -+ }, { /* Samsung GalaxyBook 10.6 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Galaxy Book 10.6"), -+ }, -+ .driver_data = (void *)&lcd1280x1920_rightside_up, -+ }, { /* Valve Steam Deck */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Valve"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Jupiter"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "1"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* VIOS LTH17 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VIOS"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LTH17"), -+ }, -+ .driver_data = (void *)&lcd800x1280_rightside_up, -+ }, { /* One Mix 2S (generic strings, also match on bios date) */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"), -+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), -+ }, -+ .driver_data = (void *)&gpd_onemix2s, -+ }, -+ {} -+}; -+ -+/** -+ * drm_get_panel_orientation_quirk - Check for panel orientation quirks -+ * @width: width in pixels of the panel -+ * @height: height in pixels of the panel -+ * -+ * This function checks for platform specific (e.g. DMI based) quirks -+ * providing info on panel_orientation for systems where this cannot be -+ * probed from the hard-/firm-ware. To avoid false-positive this function -+ * takes the panel resolution as argument and checks that against the -+ * resolution expected by the quirk-table entry. -+ * -+ * Note this function is also used outside of the drm-subsys, by for example -+ * the efifb code. Because of this this function gets compiled into its own -+ * kernel-module when built as a module. -+ * -+ * Returns: -+ * A DRM_MODE_PANEL_ORIENTATION_* value if there is a quirk for this system, -+ * or DRM_MODE_PANEL_ORIENTATION_UNKNOWN if there is no quirk. -+ */ -+int drm_get_panel_orientation_quirk(int width, int height) -+{ -+ const struct dmi_system_id *match; -+ const struct drm_dmi_panel_orientation_data *data; -+ const char *bios_date; -+ int i; -+ -+ for (match = dmi_first_match(orientation_data); -+ match; -+ match = dmi_first_match(match + 1)) { -+ data = match->driver_data; -+ -+ if (data->width != width || -+ data->height != height) -+ continue; -+ -+ if (!data->bios_dates) -+ return data->orientation; -+ -+ bios_date = dmi_get_system_info(DMI_BIOS_DATE); -+ if (!bios_date) -+ continue; -+ -+ i = match_string(data->bios_dates, -1, bios_date); -+ if (i >= 0) -+ return data->orientation; -+ } -+ -+ return DRM_MODE_PANEL_ORIENTATION_UNKNOWN; -+} -+EXPORT_SYMBOL(drm_get_panel_orientation_quirk); -+ -+#else -+ -+/* There are no quirks for non x86 devices yet */ -+int drm_get_panel_orientation_quirk(int width, int height) -+{ -+ return DRM_MODE_PANEL_ORIENTATION_UNKNOWN; -+} -+EXPORT_SYMBOL(drm_get_panel_orientation_quirk); -+ -+#endif -+ -+MODULE_LICENSE("Dual MIT/GPL"); -diff -rupN linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c.rej linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c.rej ---- linux-6.7-rc8.orig/drivers/gpu/drm/drm_panel_orientation_quirks.c.rej 1970-01-01 00:00:00.000000000 +0000 -+++ linux-6.7-rc8.panel/drivers/gpu/drm/drm_panel_orientation_quirks.c.rej 2024-01-04 23:18:55.450922222 +0000 -@@ -0,0 +1,16 @@ -+--- drivers/gpu/drm/drm_panel_orientation_quirks.c 2023-11-28 17:20:18.000000000 +0000 -++++ drivers/gpu/drm/drm_panel_orientation_quirks.c 2023-11-30 15:33:54.949480402 +0000 -+@@ -336,6 +336,13 @@ static const struct dmi_system_id orient -+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Duet 3 10IGL5"), -+ }, -+ .driver_data = (void *)&lcd1200x1920_rightside_up, -++ }, { /* Lenovo Legion Go */ -++ .matches = { -++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), -++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "83E1"), -++ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Legion Go 8APU1"), -++ }, -++ .driver_data = (void *)&lcd1600x2560_leftside_up, -+ }, { /* Lenovo Yoga Book X90F / X90L */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), From 4071fd8e962c79fadc990935f574e4b5b3deae29 Mon Sep 17 00:00:00 2001 From: LittleBoi Date: Thu, 18 Apr 2024 03:42:05 +0900 Subject: [PATCH 044/184] Add files via upload --- .../targets/x86_64-rocknix-linux-gnu.json | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 packages/rust/rust/targets/x86_64-rocknix-linux-gnu.json diff --git a/packages/rust/rust/targets/x86_64-rocknix-linux-gnu.json b/packages/rust/rust/targets/x86_64-rocknix-linux-gnu.json new file mode 100644 index 000000000..ef80b2b38 --- /dev/null +++ b/packages/rust/rust/targets/x86_64-rocknix-linux-gnu.json @@ -0,0 +1,38 @@ +{ + "arch": "x86_64", + "cpu": "x86-64", + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", + "dynamic-linking": true, + "env": "gnu", + "executables": true, + "has-rpath": true, + "has-thread-local": true, + "is-builtin": false, + "llvm-target": "x86_64-unknown-linux-gnu", + "max-atomic-width": 64, + "os": "linux", + "position-independent-executables": true, + "pre-link-args": { + "gcc": [ + "-m64" + ] + }, + "relro-level": "full", + "stack-probes": { + "kind": "call" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "address", + "cfi", + "leak", + "memory", + "thread" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": "64" +} + From f19bed52758616602e16b8ed634ac77a519955f8 Mon Sep 17 00:00:00 2001 From: LittleBoi Date: Thu, 18 Apr 2024 03:45:24 +0900 Subject: [PATCH 045/184] Add files via upload --- .../lime3ds-sa/config/AMD64/lime3ds.gptk | 27 ++ .../lime3ds-sa/config/AMD64/sdl2-config.ini | 347 ++++++++++++++++++ 2 files changed, 374 insertions(+) create mode 100644 packages/emulators/standalone/lime3ds-sa/config/AMD64/lime3ds.gptk create mode 100644 packages/emulators/standalone/lime3ds-sa/config/AMD64/sdl2-config.ini diff --git a/packages/emulators/standalone/lime3ds-sa/config/AMD64/lime3ds.gptk b/packages/emulators/standalone/lime3ds-sa/config/AMD64/lime3ds.gptk new file mode 100644 index 000000000..3aa1a26e0 --- /dev/null +++ b/packages/emulators/standalone/lime3ds-sa/config/AMD64/lime3ds.gptk @@ -0,0 +1,27 @@ +back = \\ +start = \\ +a = \\ +b = \\ +x = \\ +y = \\ +l1 = \\ +l2 = \\ +l3 = \\ +r1 = \\ +r2 = \\ +r3 = mouse_left +up = \\ +down = \\ +left = \\ +right = \\ +left_analog_up = \\ +left_analog_down = \\ +left_analog_left = \\ +left_analog_right = \\ +right_analog_up = mouse_movement_up +right_analog_down = mouse_movement_down +right_analog_left = mouse_movement_left +right_analog_right = mouse_movement_right +deadzone_triggers = 3000 +mouse_scale = 6128 +mouse_delay = 16 diff --git a/packages/emulators/standalone/lime3ds-sa/config/AMD64/sdl2-config.ini b/packages/emulators/standalone/lime3ds-sa/config/AMD64/sdl2-config.ini new file mode 100644 index 000000000..f1d7e9d20 --- /dev/null +++ b/packages/emulators/standalone/lime3ds-sa/config/AMD64/sdl2-config.ini @@ -0,0 +1,347 @@ + +[Controls] +# The input devices and parameters for each 3DS native input +# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." +# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values + +# for button input, the following devices are available: +# - "keyboard" (default) for keyboard input. Required parameters: +# - "code": the code of the key to bind +# - "sdl" for joystick input using SDL. Required parameters: +# - "joystick": the index of the joystick to bind +# - "button"(optional): the index of the button to bind +# - "hat"(optional): the index of the hat to bind as direction buttons +# - "axis"(optional): the index of the axis to bind +# - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" +# - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is +# triggered if the axis value crosses +# - "direction"(only used for axis): "+" means the button is triggered when the axis value +# is greater than the threshold; "-" means the button is triggered when the axis value +# is smaller than the threshold +button_a=button:1,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_b=button:0,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_x=button:3,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_y=button:2,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_up=direction:up,engine:sdl,guid:030003f05e0400008e02000010010000,hat:0,port:0 +button_down=direction:down,engine:sdl,guid:030003f05e0400008e02000010010000,hat:0,port:0 +button_left=direction:left,engine:sdl,guid:030003f05e0400008e02000010010000,hat:0,port:0 +button_right=direction:right,engine:sdl,guid:030003f05e0400008e02000010010000,hat:0,port:0 +button_l=button:4,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_r=button:5,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_start=button:7,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_select=button:6,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +button_debug= +button_gpio14= +button_zl=axis:2,direction:+,engine:sdl,guid:030003f05e0400008e02000010010000,port:0,threshold:0.5 +button_zr=axis:5,direction:+,engine:sdl,guid:030003f05e0400008e02000010010000,port:0,threshold:0.5 +button_home= + +# for analog input, the following devices are available: +# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: +# - "up", "down", "left", "right": sub-devices for each direction. +# Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" +# - "modifier": sub-devices as a modifier. +# - "modifier_scale": a float number representing the applied modifier scale to the analog input. +# Must be in range of 0.0-1.0. Defaults to 0.5 +# - "sdl" for joystick input using SDL. Required parameters: +# - "joystick": the index of the joystick to bind +# - "axis_x": the index of the axis to bind as x-axis (default to 0) +# - "axis_y": the index of the axis to bind as y-axis (default to 1) + +circle_Pad=axis_x:0,axis_y:1,deadzone:0.100000,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 +c_stick=axis_x:3,axis_y:4,deadzone:0.100000,engine:sdl,guid:030003f05e0400008e02000010010000,port:0 + +# for motion input, the following devices are available: +# - "motion_emu" (default) for emulating motion input from mouse input. Required parameters: +# - "update_period": update period in milliseconds (default to 100) +# - "sensitivity": the coefficient converting mouse movement to tilting angle (default to 0.01) +# - "tilt_clamp": the max value of the tilt angle in degrees (default to 90) +# - "cemuhookudp" reads motion input from a udp server that uses cemuhook's udp protocol +motion_device= + +# for touch input, the following devices are available: +# - "emu_window" (default) for emulating touch input from mouse input to the emulation window. No parameters required +# - "cemuhookudp" reads touch input from a udp server that uses cemuhook's udp protocol +# - "min_x", "min_y", "max_x", "max_y": defines the udp device's touch screen coordinate system +touch_device= + +# Most desktop operating systems do not expose a way to poll the motion state of the controllers +# so as a way around it, cemuhook created a udp client/server protocol to broadcast the data directly +# from a controller device to the client program. Citra has a client that can connect and read +# from any cemuhook compatible motion program. + +# IPv4 address of the udp input server (Default "127.0.0.1") +udp_input_address= + +# Port of the udp input server. (Default 26760) +udp_input_port= + +# The pad to request data on. Should be between 0 (Pad 1) and 3 (Pad 4). (Default 0) +udp_pad_index= + +[Core] +# Whether to use the Just-In-Time (JIT) compiler for CPU emulation +# 0: Interpreter (slow), 1 (default): JIT (fast) +use_cpu_jit = + +# Change the Clock Frequency of the emulated 3DS CPU. +# Underclocking can increase the performance of the game at the risk of freezing. +# Overclocking may fix lag that happens on console, but also comes with the risk of freezing. +# Range is any positive integer (but we suspect 25 - 400 is a good idea) Default is 100 +cpu_clock_percentage = + +[Renderer] +# Whether to render using OpenGL or Software +# 0: Software, 1: OpenGL (default) +graphics_api = 2 + +[Renderer] +# Whether to render using GLES or OpenGL +# 0 (default): OpenGL, 1: GLES +use_gles = + +# Whether to use software or hardware rendering. +# 0: Software, 1 (default): Hardware +use_hw_renderer = + +# Whether to use hardware shaders to emulate 3DS shaders +# 0: Software, 1 (default): Hardware +use_hw_shader = + +# Whether to use separable shaders to emulate 3DS shaders (macOS only) +# 0: Off (Default), 1 : On +separable_shader = + +# Whether to use accurate multiplication in hardware shaders +# 0: Off (Faster, but causes issues in some games) 1: On (Default. Slower, but correct) +shaders_accurate_mul = 0 + +# Whether to use the Just-In-Time (JIT) compiler for shader emulation +# 0: Interpreter (slow), 1 (default): JIT (fast) +use_shader_jit = + +# Forces VSync on the display thread. Usually doesn't impact performance, but on some drivers it can +# so only turn this off if you notice a speed difference. +# 0: Off, 1 (default): On +use_vsync_new = + +# Reduce stuttering by storing and loading generated shaders to disk +# 0: Off, 1 (default. On) +use_disk_shader_cache = 0 + +# Resolution scale factor +# 0: Auto (scales resolution to window size), 1: Native 3DS screen resolution, Otherwise a scale +# factor for the 3DS resolution +resolution_factor = + +# Texture filter name +texture_filter_name = + +# Limits the speed of the game to run no faster than this value as a percentage of target speed. +# Will not have an effect if unthrottled is enabled. +# 5 - 995: Speed limit as a percentage of target game speed. 0 for unthrottled. 100 (default) +frame_limit = + +# Overrides the frame limiter to use frame_limit_alternate instead of frame_limit. +# 0: Off (default), 1: On +use_frame_limit_alternate = + +# Alternate speed limit to be used instead of frame_limit if use_frame_limit_alternate is enabled +# 5 - 995: Speed limit as a percentage of target game speed. 0 for unthrottled. 200 (default) +frame_limit_alternate = + +# The clear color for the renderer. What shows up on the sides of the bottom screen. +# Must be in range of 0.0-1.0. Defaults to 0.0 for all. +bg_red = +bg_blue = +bg_green = + +# Whether and how Stereoscopic 3D should be rendered +# 0 (default): Off, 1: Side by Side, 2: Anaglyph, 3: Interlaced, 4: Reverse Interlaced +render_3d = + +# Change 3D Intensity +# 0 - 100: Intensity. 0 (default) +factor_3d = + +# The name of the post processing shader to apply. +# Loaded from shaders if render_3d is off or side by side. +# Loaded from shaders/anaglyph if render_3d is anaglyph +pp_shader_name = + +# Whether to enable linear filtering or not +# This is required for some shaders to work correctly +# 0: Nearest, 1 (default): Linear +filter_mode = + +[Layout] +# Layout for the screen inside the render window. +# 0 (default): Default Top Bottom Screen, 1: Single Screen Only, 2: Large Screen Small Screen, 3: Side by Side +layout_option = 2 + +# Toggle custom layout (using the settings below) on or off. +# 0 (default): Off, 1: On +custom_layout = + +# Screen placement when using Custom layout option +# 0x, 0y is the top left corner of the render window. +custom_top_left = +custom_top_top = +custom_top_right = +custom_top_bottom = +custom_bottom_left = +custom_bottom_top = +custom_bottom_right = +custom_bottom_bottom = + +# Swaps the prominent screen with the other screen. +# For example, if Single Screen is chosen, setting this to 1 will display the bottom screen instead of the top screen. +# 0 (default): Top Screen is prominent, 1: Bottom Screen is prominent +swap_screen = + +# Toggle upright orientation, for book style games. +# 0 (default): Off, 1: On +upright_screen = + +# Dumps textures as PNG to dump/textures/[Title ID]/. +# 0 (default): Off, 1: On +dump_textures = + +# Reads PNG files from load/textures/[Title ID]/ and replaces textures. +# 0 (default): Off, 1: On +custom_textures = + +# Loads all custom textures into memory before booting. +# 0 (default): Off, 1: On +preload_textures = + +[Audio] +# Whether or not to enable DSP LLE +# 0 (default): No, 1: Yes +enable_dsp_lle = + +# Whether or not to run DSP LLE on a different thread +# 0 (default): No, 1: Yes +enable_dsp_lle_thread = + + +# Which audio output engine to use. +# auto (default): Auto-select, null: No audio output, sdl2: SDL2 (if available) +output_engine = + +# Whether or not to enable the audio-stretching post-processing effect. +# This effect adjusts audio speed to match emulation speed and helps prevent audio stutter, +# at the cost of increasing audio latency. +# 0: No, 1 (default): Yes +enable_audio_stretching = + +# Which audio device to use. +# auto (default): Auto-select +output_device = + +# Output volume. +# 1.0 (default): 100%, 0.0; mute +volume = + +[Data Storage] +# Whether to create a virtual SD card. +# 1 (default): Yes, 0: No +use_virtual_sd = + +# The path of the virtual SD card directory. +# empty (default) will use the user_path +sdmc_directory = + +# The path of NAND directory. +# empty (default) will use the user_path +nand_directory = + +[System] +# The system model that Citra will try to emulate +# 0: Old 3DS, 1: New 3DS (default) +is_new_3ds = + +# The system region that Citra will use during emulation +# -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan +region_value = + +# The clock to use when citra starts +# 0: System clock (default), 1: fixed time +init_clock = + +# Time used when init_clock is set to fixed_time in the format %Y-%m-%d %H:%M:%S +# set to fixed time. Default 2000-01-01 00:00:01 +# Note: 3DS can only handle times later then Jan 1 2000 +init_time = + +[Camera] +# Which camera engine to use for the right outer camera +# blank (default): a dummy camera that always returns black image +camera_outer_right_name = + +# A config string for the right outer camera. Its meaning is defined by the camera engine +camera_outer_right_config = + +# The image flip to apply +# 0: None (default), 1: Horizontal, 2: Vertical, 3: Reverse +camera_outer_right_flip = + +# ... for the left outer camera +camera_outer_left_name = +camera_outer_left_config = +camera_outer_left_flip = + +# ... for the inner camera +camera_inner_name = +camera_inner_config = +camera_inner_flip = + +[Miscellaneous] +# A filter which removes logs below a certain logging level. +# Examples: *:Debug Kernel.SVC:Trace Service.*:Critical +log_filter = *:Info + +[Debugging] +# Record frame time data, can be found in the log directory. Boolean value +record_frame_times = +# Port for listening to GDB connections. +use_gdbstub=false +gdbstub_port=24689 +# To LLE a service module add "LLE\=true" + +[WebService] +# Whether or not to enable telemetry +# 0: No, 1 (default): Yes +enable_telemetry = +# URL for Web API +web_api_url = https://api.citra-emu.org +# Username and token for Citra Web Service +# See https://profile.citra-emu.org/ for more info +citra_username = +citra_token = + +[Video Dumping] +# Format of the video to output, default: webm +output_format = + +# Options passed to the muxer (optional) +# This is a param package, format: [key1]:[value1],[key2]:[value2],... +format_options = + +# Video encoder used, default: libvpx-vp9 +video_encoder = + +# Options passed to the video codec (optional) +video_encoder_options = + +# Video bitrate, default: 2500000 +video_bitrate = + +# Audio encoder used, default: libvorbis +audio_encoder = + +# Options passed to the audio codec (optional) +audio_encoder_options = + +# Audio bitrate, default: 64000 +audio_bitrate = From 4ebe5414f26433538fd36e9aa3b313451f653b6d Mon Sep 17 00:00:00 2001 From: anthonycaccese Date: Wed, 17 Apr 2024 15:20:52 -0400 Subject: [PATCH 046/184] Update install-rocknix.svg --- .../sources/images/install-rocknix.svg | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/misc/modules/sources/images/install-rocknix.svg b/packages/misc/modules/sources/images/install-rocknix.svg index d34f0acf2..fd9cdcb4b 100644 --- a/packages/misc/modules/sources/images/install-rocknix.svg +++ b/packages/misc/modules/sources/images/install-rocknix.svg @@ -7,23 +7,14 @@ - - - - - - - - - - - - - - - - + + + + + + Install ROCKNIX + From dc9f8c1a4777c0a479bc809de516ea4ff6126a6b Mon Sep 17 00:00:00 2001 From: spycat88 Date: Wed, 17 Apr 2024 23:15:52 +0100 Subject: [PATCH 047/184] rocknix-joypad: bump package --- packages/kernel/drivers/rocknix-joypad/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 9b85e310d..1f3e43cc2 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="3f857f0f5905a565ccef58fa8231b4b511d281a1" +PKG_VERSION="feb34291d210c1d95842ed54b0c82fb9fbf7e018" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" From 0e2c15264c5803b9cfd9dca9107fe904e0c8155b Mon Sep 17 00:00:00 2001 From: anthonycaccese Date: Wed, 17 Apr 2024 18:37:02 -0400 Subject: [PATCH 048/184] fixing my mistake =)... new rocknix and aethersx2 images text is property converted to curves now --- .../misc/modules/sources/images/aethersx2.svg | 32 +++++++++++++++++++ .../sources/images/install-rocknix.svg | 23 +++++++++---- 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 packages/misc/modules/sources/images/aethersx2.svg diff --git a/packages/misc/modules/sources/images/aethersx2.svg b/packages/misc/modules/sources/images/aethersx2.svg new file mode 100644 index 000000000..4f5c8ad35 --- /dev/null +++ b/packages/misc/modules/sources/images/aethersx2.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/misc/modules/sources/images/install-rocknix.svg b/packages/misc/modules/sources/images/install-rocknix.svg index fd9cdcb4b..03f0b50dd 100644 --- a/packages/misc/modules/sources/images/install-rocknix.svg +++ b/packages/misc/modules/sources/images/install-rocknix.svg @@ -7,14 +7,25 @@ - - + + - - - + + + + + + + + + + + + + + + - Install ROCKNIX From dbea7763ec37dd63d1380a26bb85c1001c056e98 Mon Sep 17 00:00:00 2001 From: anthonycaccese Date: Wed, 17 Apr 2024 18:59:27 -0400 Subject: [PATCH 049/184] Create idtech.svg --- .../misc/modules/sources/images/idtech.svg | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/misc/modules/sources/images/idtech.svg diff --git a/packages/misc/modules/sources/images/idtech.svg b/packages/misc/modules/sources/images/idtech.svg new file mode 100644 index 000000000..3feeb848c --- /dev/null +++ b/packages/misc/modules/sources/images/idtech.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + From 31a953f7128cdd508158cea1b40b59d0d2177f28 Mon Sep 17 00:00:00 2001 From: Alex DeLorenzo <3579286+alexdelorenzo@users.noreply.github.com> Date: Thu, 18 Apr 2024 03:08:55 -0400 Subject: [PATCH 050/184] Only save environment variables to `.env` --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1f0467404..62030ac92 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,7 @@ docker-%: INTERACTIVE=$(shell [ -t 0 ] && echo "-it") docker-%: COMMAND=make $* # Get .env file ready -docker-%: $(shell env | grep "=" > .env) +docker-%: $(shell for var in $(compgen -e); do echo "$var=${!var}"; done > .env) # If the user issues a `make docker-shell` just start up bash as the shell to run commands docker-shell: COMMAND=bash From 31ad5544e548fcaa548b2b90e3b1068ecd2692dd Mon Sep 17 00:00:00 2001 From: Alex DeLorenzo Date: Thu, 18 Apr 2024 04:32:50 -0400 Subject: [PATCH 051/184] Move .env logic to script --- Makefile | 2 +- scripts/get_env | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100755 scripts/get_env diff --git a/Makefile b/Makefile index 62030ac92..97f5aec84 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,7 @@ docker-%: INTERACTIVE=$(shell [ -t 0 ] && echo "-it") docker-%: COMMAND=make $* # Get .env file ready -docker-%: $(shell for var in $(compgen -e); do echo "$var=${!var}"; done > .env) +docker-%: $(shell ./scripts/get_env > .env) # If the user issues a `make docker-shell` just start up bash as the shell to run commands docker-shell: COMMAND=bash diff --git a/scripts/get_env b/scripts/get_env new file mode 100755 index 000000000..a10aaa38e --- /dev/null +++ b/scripts/get_env @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +for var in $(compgen -ve); do echo "$var=${!var}"; done From fcaf31fded1dad09a011867e13c89f562baf19a1 Mon Sep 17 00:00:00 2001 From: Alex DeLorenzo Date: Thu, 18 Apr 2024 04:34:08 -0400 Subject: [PATCH 052/184] Remove double entries --- scripts/get_env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/get_env b/scripts/get_env index a10aaa38e..c33693818 100755 --- a/scripts/get_env +++ b/scripts/get_env @@ -1,2 +1,2 @@ #!/usr/bin/env bash -for var in $(compgen -ve); do echo "$var=${!var}"; done +for var in $(compgen -e); do echo "$var=${!var}"; done From e049ecb7b67333c81fb2a1bec67ccf86b89ef915 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:36:24 +0000 Subject: [PATCH 053/184] Bump kernel to 6.8.7, bump mesa, update box86 dep --- packages/compat/box86/package.mk | 2 +- packages/graphics/mesa/package.mk | 2 +- packages/kernel/linux/package.mk | 2 +- .../devices/RK3399/linux/linux.aarch64.conf | 87 +- .../RK3326/100-panfrost-memory-shrinker.patch | 5235 ----------------- .../RK3399/100-panfrost-memory-shrinker.patch | 5235 ----------------- 6 files changed, 59 insertions(+), 10504 deletions(-) delete mode 100644 projects/Rockchip/patches/linux/RK3326/100-panfrost-memory-shrinker.patch delete mode 100644 projects/Rockchip/patches/linux/RK3399/100-panfrost-memory-shrinker.patch diff --git a/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index e1c95a71f..ae9e4e279 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -7,7 +7,7 @@ PKG_ARCH="arm aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound libXdmcp libXft libXcomposite cups" +PKG_DEPENDS_TARGET="toolchain ncurses SDL_sound libXdmcp libXft libXcomposite cups libogg-system" PKG_LONGDESC="Box86 lets you run x86 Linux programs (such as games) on non-x86 Linux systems, like ARM." PKG_TOOLCHAIN="cmake" diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index d8e7b6a79..9c80aceb0 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -22,7 +22,7 @@ case ${DEVICE} in PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" else #Using upstream dev for panfrost - PKG_VERSION="5363f7cce5c967bd84210b0a316cd502e197609f" + PKG_VERSION="acf1c7dc7377f33ff416f3c52b0be2b73a4867ad" PKG_SITE="https://gitlab.freedesktop.org/mesa/mesa" PKG_URL="${PKG_SITE}.git" PKG_PATCH_DIRS+=" panfrost" diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 2c76c5965..448507e48 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -29,7 +29,7 @@ case ${DEVICE} in PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; *) - PKG_VERSION="6.8.6" + PKG_VERSION="6.8.7" PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" ;; esac diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index 5845e0a95..0f68dfdf7 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -1,8 +1,8 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.7.1 Kernel Configuration +# Linux/arm64 6.8.7 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" +CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=120301 CONFIG_CLANG_VERSION=0 @@ -15,6 +15,7 @@ CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=0 @@ -152,8 +153,10 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y +CONFIG_GCC10_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y @@ -239,17 +242,17 @@ CONFIG_AIO=y CONFIG_IO_URING=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y -CONFIG_KCMP=y -CONFIG_RSEQ=y -CONFIG_CACHESTAT_SYSCALL=y -# CONFIG_DEBUG_RSEQ is not set CONFIG_HAVE_PERF_EVENTS=y -# CONFIG_PC104 is not set # # Kernel Performance Events And Counters @@ -376,7 +379,9 @@ CONFIG_ARM64_ERRATUM_1319367=y # CONFIG_ARM64_ERRATUM_2067961 is not set # CONFIG_ARM64_ERRATUM_2441009 is not set # CONFIG_ARM64_ERRATUM_2645198 is not set +CONFIG_ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD=y # CONFIG_ARM64_ERRATUM_2966298 is not set +CONFIG_ARM64_ERRATUM_3117295=y # CONFIG_CAVIUM_ERRATUM_22375 is not set # CONFIG_CAVIUM_ERRATUM_23154 is not set # CONFIG_CAVIUM_ERRATUM_27456 is not set @@ -694,6 +699,7 @@ CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y # # GCOV-based kernel profiling @@ -734,6 +740,7 @@ CONFIG_BLK_CGROUP_RWSTAT=y CONFIG_BLK_DEV_BSG_COMMON=y CONFIG_BLK_DEV_BSGLIB=y # CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_WRITE_MOUNTED=y # CONFIG_BLK_DEV_ZONED is not set CONFIG_BLK_DEV_THROTTLING=y # CONFIG_BLK_DEV_THROTTLING_LOW is not set @@ -846,9 +853,8 @@ CONFIG_ZSMALLOC=y CONFIG_ZSMALLOC_CHAIN_SIZE=8 # -# SLAB allocator options +# Slab allocator options # -# CONFIG_SLAB_DEPRECATED is not set CONFIG_SLUB=y # CONFIG_SLUB_TINY is not set # CONFIG_SLAB_MERGE_DEFAULT is not set @@ -857,7 +863,7 @@ CONFIG_SLUB=y # CONFIG_SLUB_STATS is not set # CONFIG_SLUB_CPU_PARTIAL is not set # CONFIG_RANDOM_KMALLOC_CACHES is not set -# end of SLAB allocator options +# end of Slab allocator options # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set # CONFIG_COMPAT_BRK is not set @@ -906,6 +912,7 @@ CONFIG_SECRETMEM=y CONFIG_LRU_GEN=y # CONFIG_LRU_GEN_ENABLED is not set # CONFIG_LRU_GEN_STATS is not set +CONFIG_LRU_GEN_WALKS_MMU=y CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y CONFIG_PER_VMA_LOCK=y CONFIG_LOCK_MM_AND_FIND_VMA=y @@ -1157,7 +1164,6 @@ CONFIG_IP_NF_MANGLE=m CONFIG_NF_DEFRAG_IPV6=m # CONFIG_NF_CONNTRACK_BRIDGE is not set # CONFIG_BRIDGE_NF_EBTABLES is not set -# CONFIG_BPFILTER is not set # CONFIG_IP_DCCP is not set # CONFIG_IP_SCTP is not set # CONFIG_RDS is not set @@ -1221,7 +1227,6 @@ CONFIG_BT_RFCOMM=y # CONFIG_BT_RFCOMM_TTY is not set # CONFIG_BT_BNEP is not set CONFIG_BT_HIDP=y -CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_LE_L2CAP_ECRED=y # CONFIG_BT_LEDS is not set @@ -1354,6 +1359,7 @@ CONFIG_DEV_COREDUMP=y # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_SOC_BUS=y @@ -1395,7 +1401,6 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # end of ARM System Control and Management Interface Protocol CONFIG_ARM_SCPI_PROTOCOL=y -CONFIG_ARM_SCPI_POWER_DOMAIN=y # CONFIG_FIRMWARE_MEMMAP is not set # CONFIG_ARM_FFA_TRANSPORT is not set # CONFIG_GOOGLE_FIRMWARE is not set @@ -1440,6 +1445,7 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y # CONFIG_ZRAM_DEF_COMP_LZO is not set CONFIG_ZRAM_DEF_COMP="lzo-rle" # CONFIG_ZRAM_WRITEBACK is not set +# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set # CONFIG_ZRAM_MEMORY_TRACKING is not set # CONFIG_ZRAM_MULTI_COMP is not set CONFIG_BLK_DEV_LOOP=y @@ -1637,6 +1643,7 @@ CONFIG_ROCKCHIP_PHY=y # CONFIG_DP83867_PHY is not set # CONFIG_DP83869_PHY is not set # CONFIG_DP83TD510_PHY is not set +# CONFIG_DP83TG720_PHY is not set # CONFIG_VITESSE_PHY is not set # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set @@ -1713,7 +1720,6 @@ CONFIG_WLAN=y # CONFIG_WLAN_VENDOR_ATH is not set # CONFIG_WLAN_VENDOR_ATMEL is not set # CONFIG_WLAN_VENDOR_BROADCOM is not set -# CONFIG_WLAN_VENDOR_CISCO is not set # CONFIG_WLAN_VENDOR_INTEL is not set # CONFIG_WLAN_VENDOR_INTERSIL is not set # CONFIG_WLAN_VENDOR_MARVELL is not set @@ -1748,7 +1754,6 @@ CONFIG_RTW89=m # CONFIG_WLAN_VENDOR_TI is not set # CONFIG_WLAN_VENDOR_ZYDAS is not set # CONFIG_WLAN_VENDOR_QUANTENNA is not set -# CONFIG_USB_NET_RNDIS_WLAN is not set # CONFIG_MAC80211_HWSIM is not set # CONFIG_VIRT_WIFI is not set # CONFIG_WAN is not set @@ -1859,6 +1864,7 @@ CONFIG_JOYSTICK_XPAD_LEDS=y # CONFIG_JOYSTICK_FSIA6B is not set CONFIG_JOYSTICK_RG552=y # CONFIG_JOYSTICK_SENSEHAT is not set +# CONFIG_JOYSTICK_SEESAW is not set # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_ADS7846 is not set @@ -2430,6 +2436,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_F71882FG is not set # CONFIG_SENSORS_F75375S is not set # CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set # CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_G760A is not set @@ -2558,6 +2565,7 @@ CONFIG_SENSORS_PWM_FAN=y CONFIG_THERMAL=y # CONFIG_THERMAL_NETLINK is not set # CONFIG_THERMAL_STATISTICS is not set +# CONFIG_THERMAL_DEBUGFS is not set CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y @@ -2695,7 +2703,6 @@ CONFIG_MFD_RK8XX_I2C=y # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_STMPE is not set CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set # CONFIG_MFD_TI_LMU is not set @@ -2749,6 +2756,7 @@ CONFIG_REGULATOR_DEBUG=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_VIRTUAL_CONSUMER=y CONFIG_REGULATOR_USERSPACE_CONSUMER=y +# CONFIG_REGULATOR_NETLINK_EVENTS is not set # CONFIG_REGULATOR_88PG86X is not set # CONFIG_REGULATOR_ACT8865 is not set # CONFIG_REGULATOR_AD5398 is not set @@ -2865,7 +2873,6 @@ CONFIG_V4L2_ASYNC=y # # Media controller options # -CONFIG_MEDIA_CONTROLLER_REQUEST_API=y # end of Media controller options # @@ -3050,6 +3057,7 @@ CONFIG_VIDEO_MSP3400=m # CONFIG_VIDEO_TVP5150 is not set # CONFIG_VIDEO_TVP7002 is not set # CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9900 is not set # CONFIG_VIDEO_TW9903 is not set # CONFIG_VIDEO_TW9906 is not set # CONFIG_VIDEO_TW9910 is not set @@ -3196,6 +3204,7 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_HIMAX_HX8394 is not set # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set # CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set # CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set @@ -3252,6 +3261,7 @@ CONFIG_DRM_PANEL_SHARP_LS054B3SX01=y # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_SONY_ACX565AKM is not set # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set # CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set @@ -3341,14 +3351,13 @@ CONFIG_DRM_PANFROST=y # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set -# CONFIG_DRM_LEGACY is not set +# CONFIG_DRM_POWERVR is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y # # Frame buffer Devices # CONFIG_FB=y -# CONFIG_FB_ARMCLCD is not set # CONFIG_FB_OPENCORES is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_SMSCUFX is not set @@ -3366,10 +3375,9 @@ CONFIG_FB_SYS_FILLRECT=y CONFIG_FB_SYS_COPYAREA=y CONFIG_FB_SYS_IMAGEBLIT=y # CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_SYS_FOPS=y +CONFIG_FB_SYSMEM_FOPS=y CONFIG_FB_DEFERRED_IO=y CONFIG_FB_DMAMEM_HELPERS=y -CONFIG_FB_IOMEM_FOPS=y CONFIG_FB_SYSMEM_HELPERS=y CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y CONFIG_FB_MODE_HELPERS=y @@ -3390,6 +3398,7 @@ CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_MP3309C is not set # CONFIG_BACKLIGHT_GPIO is not set # CONFIG_BACKLIGHT_LV5207LP is not set # CONFIG_BACKLIGHT_BD6107 is not set @@ -3837,6 +3846,7 @@ CONFIG_HID_ZYDACRON=m CONFIG_HID_SENSOR_HUB=m CONFIG_HID_SENSOR_CUSTOM_SENSOR=m CONFIG_HID_ALPS=m +# CONFIG_HID_MCP2200 is not set # CONFIG_HID_MCP2221 is not set # end of Special HID drivers @@ -4086,6 +4096,7 @@ CONFIG_TYPEC_FUSB302=y # CONFIG_TYPEC_MUX_PI3USB30532 is not set # CONFIG_TYPEC_MUX_NB7VPQ904M is not set # CONFIG_TYPEC_MUX_PTN36502 is not set +# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set # end of USB Type-C Multiplexer/DeMultiplexer Switch support # @@ -4252,6 +4263,7 @@ CONFIG_RTC_INTF_SYSFS=y # CONFIG_RTC_DRV_DS1672 is not set # CONFIG_RTC_DRV_HYM8563 is not set # CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set # CONFIG_RTC_DRV_NCT3018Y is not set CONFIG_RTC_DRV_RK808=y # CONFIG_RTC_DRV_RS5C372 is not set @@ -4440,6 +4452,10 @@ CONFIG_R8712U=m CONFIG_STAGING_MEDIA=y # CONFIG_VIDEO_MAX96712 is not set CONFIG_VIDEO_ROCKCHIP_VDEC=m + +# +# StarFive media platform drivers +# CONFIG_STAGING_MEDIA_DEPRECATED=y # @@ -4628,6 +4644,8 @@ CONFIG_ROCKCHIP_IODOMAIN=y # # end of Amlogic PM Domains +CONFIG_ARM_SCPI_POWER_DOMAIN=y + # # Broadcom PM Domains # @@ -4748,6 +4766,7 @@ CONFIG_IIO_TRIGGERED_EVENT=y # # CONFIG_AD4130 is not set # CONFIG_AD7091R5 is not set +# CONFIG_AD7091R8 is not set # CONFIG_AD7124 is not set # CONFIG_AD7192 is not set # CONFIG_AD7266 is not set @@ -4785,6 +4804,7 @@ CONFIG_IIO_TRIGGERED_EVENT=y # CONFIG_MAX11410 is not set # CONFIG_MAX1241 is not set # CONFIG_MAX1363 is not set +# CONFIG_MAX34408 is not set # CONFIG_MAX9611 is not set # CONFIG_MCP320X is not set # CONFIG_MCP3422 is not set @@ -4847,6 +4867,7 @@ CONFIG_ROCKCHIP_SARADC=y # # Chemical Sensors # +# CONFIG_AOSONG_AGS02MA is not set # CONFIG_ATLAS_PH_SENSOR is not set # CONFIG_ATLAS_EZO_SENSOR is not set # CONFIG_BME680 is not set @@ -4917,6 +4938,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_MAX5821 is not set # CONFIG_MCP4725 is not set # CONFIG_MCP4728 is not set +# CONFIG_MCP4821 is not set # CONFIG_MCP4922 is not set # CONFIG_TI_DAC082S085 is not set # CONFIG_TI_DAC5571 is not set @@ -4998,6 +5020,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_DHT11 is not set # CONFIG_HDC100X is not set # CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set # CONFIG_HID_SENSOR_HUMIDITY is not set # CONFIG_HTS221 is not set # CONFIG_HTU21 is not set @@ -5014,6 +5037,8 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_ADIS16480 is not set # CONFIG_BMI160_I2C is not set # CONFIG_BMI160_SPI is not set +# CONFIG_BMI323_I2C is not set +# CONFIG_BMI323_SPI is not set # CONFIG_BOSCH_BNO055_SERIAL is not set # CONFIG_BOSCH_BNO055_I2C is not set # CONFIG_FXOS8700_I2C is not set @@ -5049,12 +5074,14 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_SENSORS_ISL29018 is not set # CONFIG_SENSORS_ISL29028 is not set # CONFIG_ISL29125 is not set +# CONFIG_ISL76682 is not set # CONFIG_HID_SENSOR_ALS is not set # CONFIG_HID_SENSOR_PROX is not set # CONFIG_JSA1212 is not set # CONFIG_ROHM_BU27008 is not set # CONFIG_ROHM_BU27034 is not set # CONFIG_RPR0521 is not set +# CONFIG_LTR390 is not set # CONFIG_LTR501 is not set # CONFIG_LTRF216A is not set # CONFIG_LV0104CS is not set @@ -5080,6 +5107,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_VCNL4035 is not set # CONFIG_VEML6030 is not set # CONFIG_VEML6070 is not set +# CONFIG_VEML6075 is not set # CONFIG_VL6180 is not set # CONFIG_ZOPT2201 is not set # end of Light sensors @@ -5165,6 +5193,7 @@ CONFIG_IIO_SYSFS_TRIGGER=y # CONFIG_DPS310 is not set # CONFIG_HID_SENSOR_PRESS is not set # CONFIG_HP03 is not set +# CONFIG_HSC030PA is not set # CONFIG_ICP10100 is not set # CONFIG_MPL115_I2C is not set # CONFIG_MPL115_SPI is not set @@ -5219,6 +5248,7 @@ CONFIG_IIO_SYSFS_TRIGGER=y # CONFIG_HID_SENSOR_TEMP is not set # CONFIG_MLX90614 is not set # CONFIG_MLX90632 is not set +# CONFIG_MLX90635 is not set # CONFIG_TMP006 is not set # CONFIG_TMP007 is not set # CONFIG_TMP117 is not set @@ -5227,6 +5257,7 @@ CONFIG_IIO_SYSFS_TRIGGER=y # CONFIG_MAX30208 is not set # CONFIG_MAX31856 is not set # CONFIG_MAX31865 is not set +# CONFIG_MCP9600 is not set # end of Temperature sensors CONFIG_PWM=y @@ -5327,6 +5358,7 @@ CONFIG_RAS=y # CONFIG_DAX is not set CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y +CONFIG_NVMEM_LAYOUTS=y # # Layout Types @@ -5377,6 +5409,7 @@ CONFIG_PM_OPP=y CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_VALIDATE_FS_PARSER is not set CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y CONFIG_BUFFER_HEAD=y CONFIG_LEGACY_DIRECT_IO=y # CONFIG_EXT2_FS is not set @@ -5432,12 +5465,6 @@ CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # # Caches # -CONFIG_NETFS_SUPPORT=y -# CONFIG_NETFS_STATS is not set -CONFIG_FSCACHE=y -# CONFIG_FSCACHE_STATS is not set -# CONFIG_FSCACHE_DEBUG is not set -# CONFIG_CACHEFILES is not set # end of Caches # @@ -5725,14 +5752,12 @@ CONFIG_CRYPTO_TWOFISH_COMMON=y CONFIG_CRYPTO_ARC4=y # CONFIG_CRYPTO_CHACHA20 is not set CONFIG_CRYPTO_CBC=y -# CONFIG_CRYPTO_CFB is not set CONFIG_CRYPTO_CTR=y # CONFIG_CRYPTO_CTS is not set CONFIG_CRYPTO_ECB=y # CONFIG_CRYPTO_HCTR2 is not set # CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set # CONFIG_CRYPTO_XTS is not set # end of Length-preserving ciphers and modes @@ -6047,7 +6072,7 @@ CONFIG_DEBUG_KERNEL=y # # Compile-time checks and compiler options # -CONFIG_AS_HAS_NON_CONST_LEB128=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y CONFIG_DEBUG_INFO_NONE=y # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set # CONFIG_DEBUG_INFO_DWARF4 is not set diff --git a/projects/Rockchip/patches/linux/RK3326/100-panfrost-memory-shrinker.patch b/projects/Rockchip/patches/linux/RK3326/100-panfrost-memory-shrinker.patch deleted file mode 100644 index eab599967..000000000 --- a/projects/Rockchip/patches/linux/RK3326/100-panfrost-memory-shrinker.patch +++ /dev/null @@ -1,5235 +0,0 @@ -* [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers -@ 2024-01-05 18:45 Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko - ` (29 more replies) - 0 siblings, 30 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -This series: - - 1. Adds common drm-shmem memory shrinker - 2. Moves drm-shmem drivers to new SGT usage policy - 3. Enables shrinker for VirtIO-GPU driver - 4. Switches Panfrost driver to the common shrinker - 5. Fixes bugs and improves/refactors drm-shmem code - -Mesa: https://gitlab.freedesktop.org/digetx/mesa/-/commits/virgl-madvise -IGT: https://gitlab.freedesktop.org/digetx/igt-gpu-tools/-/commits/virtio-madvise - https://gitlab.freedesktop.org/digetx/igt-gpu-tools/-/commits/panfrost-madvise - -Changelog: - -v19:- Addressed v18 review comments from Boris Brezillon: - - - Improved bisectablity of Panfrost and drm-shmem patches by - fixing iterim warning splats related to shrinker changes. - - - Improved commit messages - - - Reworked Lima patch to avoid adding `put_pages` flag - - - Reworked Panfrost patch that switches driver to explicit - get/put pages by moving drm_gem_shmem_put_pages() into - gem_mapping_release() instead of gem_free_object(). - - - Updated Panfrost patch that switches driver to generic shrinker - with more comments and minor imporovemnts. - - - Added new Panfrost patch from Boris that fixes handling of - a partially mapped heap BOs. - - - Added link to the related Mesa MR to the commit msg of the patch - that adds new DRM_VIRTGPU_MADVISE ioctl, like was requested by - Gurchetan Singh. - - - Added ackes/r-b from Boris Brezillon and Maxime Ripard - - - New patches in v19: - - drm/gem: Document locking rule of vmap and evict callbacks - drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - - - Factored out couple code changes into these new separate patches: - - drm/shmem-helper: Avoid lockdep warning when pages are released - drm/shmem-helper: Turn warnings about imported GEM into errors - -v18:- Added new pathes that change sgt allocation policy. Previously once - sgt was allocated, it exsited till GEM was freed. Now sgt is destroyed - once pages are unpinned and drivers have to manage the pages' pinning - refcounting by themselves using get/put() and pin/unpin() pages. - This removes pages refcounting ambiguity from the drm-shmem core. - - - Dropped patch that changed drm_gem_shmem_vmap_locked() error handling, - like was requested by Boris Brezillon. - - - Added new patches that make minor improvements: - - - Optimize unlocked get_pages_sgt() - - Don't free refcounted GEM - - - Dropped t-b from the Panfrost shrinker patch that was given for older - patch version since code changed with the new sgt allocation policy. - -v17:- Dropped patches that added new drm-shmem sgt flags, fixing dma-buf UAF - in drm-prime error code path and preventing invalid page_count when GEM - is freed. Will revist them later on and then factor them out into a - seprate patchset. - - - Dropped patches that replaced drm_gem_shmem_free() with - drm_gem_object_put(), they not needed anymore after changing - drm_gem_shmem_free() to not touch reservation lock. - - - Addressed review comments from Boris Brezillon: - - - Added new patch to clean up error unwinding in - drm_gem_shmem_vmap_locked() - - - Added new __drm_gem_shmem_put_pages() to let the callers - to assert the held reservation lock themselves - - - Moved replacement of shmem->pages check with refcount_read() - in drm_gem_shmem_free() to the shrinker addition patch - - - Improved commit message of the vmap_use_count patch - - - Added r-bs from Boris Brezillon that he gave to v16 - -v16:- Added more comments to the code for the new drm-shmem flags - - - Added r-bs from Boris Brezillon - - - Fixed typos and made impovements pointed out by Boris Brezillon - - - Replaced kref with refcount_t as was suggested by Boris Brezillon - - - Corrected placement of got_sgt flag in the Lima driver, also renamed - flag to got_pages_sgt - - - Removed drm_gem_shmem_resv_assert_held() and made drm_gem_shmem_free() - to free pages without a new func that doesn't touch resv lock, as was - suggested by Boris Brezillon - - - Added pages_pin_count to drm_gem_shmem_print_info() - -v15:- Moved drm-shmem reference counters to use kref that allows to - optimize unlocked functions, like was suggested by Boris Brezillon. - - - Changed drm/gem/shmem function names to use _locked postfix and - dropped the _unlocked, making the naming scheme consistent across - DRM code, like was suggested by Boris Brezillon. - - - Added patch that fixes UAF in drm-shmem for drivers that import - dma-buf and then release buffer in the import error code path. - - - Added patch that makes drm-shmem use new flag for SGT's get_pages() - refcounting, preventing unbalanced refcounting when GEM is freed. - - - Fixed guest blob pinning in virtio-gpu driver that was missed - previously in the shrinker patch. - - - Moved VC4 and virtio-gpu drivers to use drm_gem_put() in - GEM-creation error code paths, which is now required by drm-shmem - and was missed in a previous patch versions. - - - Virtio-GPU now attaches shmem pages to host on first use and not - when BO is created. In older patch versions there was a potential - race condition in the BO creation code path where both - get_sgt()+object_attach() should've been made under same resv lock, - otherwise pages could be evicted before attachment is invoked. - - - Virtio-GPU and drm-shmem shrinker patches are split into smaller - ones. - -v14:- All the prerequisite reservation locking patches landed upstream, - previously were a part of this series in v13 and older. - - https://lore.kernel.org/dri-devel/20230529223935.2672495-1-dmitry.osipenko@collabora.com/ - - - Added patches to improve locked/unlocked function names, like was - suggested by Boris Brezillon for v13. - - - Made all exported drm-shmem symbols GPL, like was previously - discussed with Thomas Zimmermann on this series. - - - Improved virtio-gpu shrinker patch. Now it won't detach purged BO - when userspace closes GEM. Crosvm (and not qemu) checks res_id on - CMD_CTX_DETACH_RESOURCE and prints noisy error message if ID is - invalid, which wasn't noticed before. - -v13:- Updated virtio-gpu shrinker patch to use drm_gem_shmem_object_pin() - directly instead of drm_gem_pin() and dropped patch that exported - drm_gem_pin() functions, like was requested by Thomas Zimmermann in - v12. - -v12:- Fixed the "no previous prototype for function" warning reported by - kernel build bot for v11. - - - Fixed the missing reservation lock reported by Intel CI for VGEM - driver. Other drivers using drm-shmem were affected similarly to - VGEM. The problem was in the dma-buf attachment code path that led - to drm-shmem pinning function which assumed the held reservation lock - by drm_gem_pin(). In the past that code path was causing trouble for - i915 driver and we've changed the locking scheme for the attachment - code path in the dma-buf core to let exporters to handle the locking - themselves. After a closer investigation, I realized that my assumption - about testing of dma-buf export code path using Panfrost driver was - incorrect. Now I created additional local test to exrecise the Panfrost - export path. I also reproduced the issue reported by the Intel CI for - v10. It's all fixed now by making the drm_gem_shmem_pin() to take the - resv lock by itself. - - - Patches are based on top of drm-tip, CC'd intel-gfx CI for testing. - -v11:- Rebased on a recent linux-next. Added new patch as a result: - - drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - - It's needed by the virtio-gpu driver to swap-in/unevict shmem - object, previously get_pages_sgt() didn't use locking. - - - Separated the "Add memory shrinker" patch into smaller parts to ease - the reviewing, as was requested by Thomas Zimmermann: - - drm/shmem-helper: Factor out pages alloc/release from - drm_gem_shmem_get/put_pages() - drm/shmem-helper: Add pages_pin_count field - drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - drm/shmem-helper: Factor out unpinning part from drm_gem_shmem_purge() - - - Addessed the v10 review comments from Thomas Zimmermann: return errno - instead of bool, sort code alphabetically, rename function and etc - minor changes. - - - Added new patch to remove the "map->is_iomem" from drm-shmem, as - was suggested by Thomas Zimmermann. - - - Added acks and r-b's that were given to v10. - -v10:- Was partially applied to misc-fixes/next. - - https://lore.kernel.org/dri-devel/6c16f303-81df-7ebe-85e9-51bb40a8b301@collabora.com/T/ - -Boris Brezillon (1): - drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - -Dmitry Osipenko (29): - drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function - names - drm/gem: Add _locked postfix to functions that have unlocked - counterpart - drm/gem: Document locking rule of vmap and evict callbacks - drm/shmem-helper: Make all exported symbols GPL - drm/shmem-helper: Refactor locked/unlocked functions - drm/shmem-helper: Remove obsoleted is_iomem test - drm/shmem-helper: Add and use pages_pin_count - drm/shmem-helper: Use refcount_t for pages_use_count - drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() - drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - drm/shmem-helper: Use refcount_t for vmap_use_count - drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition - drm/shmem-helper: Make drm_gem_shmem_get_pages() public - drm/shmem-helper: Add drm_gem_shmem_put_pages() - drm/shmem-helper: Avoid lockdep warning when pages are released - drm/lima: Explicitly get and put drm-shmem pages - drm/panfrost: Explicitly get and put drm-shmem pages - drm/virtio: Explicitly get and put drm-shmem pages - drm/v3d: Explicitly get and put drm-shmem pages - drm/shmem-helper: Change sgt allocation policy - drm/shmem-helper: Add common memory shrinker - drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - drm/shmem-helper: Optimize unlocked get_pages_sgt() - drm/shmem-helper: Don't free refcounted GEM - drm/shmem-helper: Turn warnings about imported GEM into errors - drm/virtio: Pin display framebuffer BO - drm/virtio: Attach shmem BOs dynamically - drm/virtio: Support shmem shrinking - drm/panfrost: Switch to generic memory shrinker - - drivers/gpu/drm/drm_client.c | 6 +- - drivers/gpu/drm/drm_gem.c | 26 +- - drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +- - drivers/gpu/drm/drm_gem_shmem_helper.c | 663 +++++++++++++++--- - drivers/gpu/drm/drm_internal.h | 4 +- - drivers/gpu/drm/drm_prime.c | 4 +- - drivers/gpu/drm/lima/lima_gem.c | 23 +- - drivers/gpu/drm/lima/lima_sched.c | 4 +- - drivers/gpu/drm/panfrost/Makefile | 1 - - drivers/gpu/drm/panfrost/panfrost_device.h | 4 - - drivers/gpu/drm/panfrost/panfrost_drv.c | 31 +- - drivers/gpu/drm/panfrost/panfrost_dump.c | 4 +- - drivers/gpu/drm/panfrost/panfrost_gem.c | 110 ++- - drivers/gpu/drm/panfrost/panfrost_gem.h | 9 - - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 127 ---- - drivers/gpu/drm/panfrost/panfrost_job.c | 18 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 39 +- - drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 6 +- - drivers/gpu/drm/v3d/v3d_bo.c | 11 +- - drivers/gpu/drm/virtio/virtgpu_drv.h | 22 +- - drivers/gpu/drm/virtio/virtgpu_gem.c | 85 +++ - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 57 +- - drivers/gpu/drm/virtio/virtgpu_kms.c | 8 + - drivers/gpu/drm/virtio/virtgpu_object.c | 143 +++- - drivers/gpu/drm/virtio/virtgpu_plane.c | 17 +- - drivers/gpu/drm/virtio/virtgpu_submit.c | 15 +- - drivers/gpu/drm/virtio/virtgpu_vq.c | 40 ++ - include/drm/drm_device.h | 10 +- - include/drm/drm_gem.h | 15 +- - include/drm/drm_gem_shmem_helper.h | 117 +++- - include/uapi/drm/virtgpu_drm.h | 14 + - 31 files changed, 1216 insertions(+), 423 deletions(-) - delete mode 100644 drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c - --- -2.43.0 - - -^ permalink raw reply [flat|nested] 31+ messages in thread -* [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko - ` (28 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Make drm/gem API function names consistent by having locked function -use the _locked postfix in the name, while the unlocked variants don't -use the _unlocked postfix. Rename drm_gem_v/unmap() function names to -make them consistent with the rest of the API functions. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_client.c | 6 +++--- - drivers/gpu/drm/drm_gem.c | 20 ++++++++++---------- - drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +++--- - drivers/gpu/drm/drm_internal.h | 4 ++-- - drivers/gpu/drm/drm_prime.c | 4 ++-- - drivers/gpu/drm/lima/lima_sched.c | 4 ++-- - drivers/gpu/drm/panfrost/panfrost_dump.c | 4 ++-- - drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 6 +++--- - include/drm/drm_gem.h | 4 ++-- - 9 files changed, 29 insertions(+), 29 deletions(-) - -diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c -index 9403b3f576f7..7ee9baf46eaa 100644 ---- a/drivers/gpu/drm/drm_client.c -+++ b/drivers/gpu/drm/drm_client.c -@@ -255,7 +255,7 @@ void drm_client_dev_restore(struct drm_device *dev) - static void drm_client_buffer_delete(struct drm_client_buffer *buffer) - { - if (buffer->gem) { -- drm_gem_vunmap_unlocked(buffer->gem, &buffer->map); -+ drm_gem_vunmap(buffer->gem, &buffer->map); - drm_gem_object_put(buffer->gem); - } - -@@ -339,7 +339,7 @@ drm_client_buffer_vmap(struct drm_client_buffer *buffer, - * fd_install step out of the driver backend hooks, to make that - * final step optional for internal users. - */ -- ret = drm_gem_vmap_unlocked(buffer->gem, map); -+ ret = drm_gem_vmap(buffer->gem, map); - if (ret) - return ret; - -@@ -361,7 +361,7 @@ void drm_client_buffer_vunmap(struct drm_client_buffer *buffer) - { - struct iosys_map *map = &buffer->map; - -- drm_gem_vunmap_unlocked(buffer->gem, map); -+ drm_gem_vunmap(buffer->gem, map); - } - EXPORT_SYMBOL(drm_client_buffer_vunmap); - -diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c -index 44a948b80ee1..95327b003692 100644 ---- a/drivers/gpu/drm/drm_gem.c -+++ b/drivers/gpu/drm/drm_gem.c -@@ -1175,7 +1175,7 @@ void drm_gem_unpin(struct drm_gem_object *obj) - obj->funcs->unpin(obj); - } - --int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) -+int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map) - { - int ret; - -@@ -1192,9 +1192,9 @@ int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - - return 0; - } --EXPORT_SYMBOL(drm_gem_vmap); -+EXPORT_SYMBOL(drm_gem_vmap_locked); - --void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) -+void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *map) - { - dma_resv_assert_held(obj->resv); - -@@ -1207,27 +1207,27 @@ void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) - /* Always set the mapping to NULL. Callers may rely on this. */ - iosys_map_clear(map); - } --EXPORT_SYMBOL(drm_gem_vunmap); -+EXPORT_SYMBOL(drm_gem_vunmap_locked); - --int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) -+int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - { - int ret; - - dma_resv_lock(obj->resv, NULL); -- ret = drm_gem_vmap(obj, map); -+ ret = drm_gem_vmap_locked(obj, map); - dma_resv_unlock(obj->resv); - - return ret; - } --EXPORT_SYMBOL(drm_gem_vmap_unlocked); -+EXPORT_SYMBOL(drm_gem_vmap); - --void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) -+void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) - { - dma_resv_lock(obj->resv, NULL); -- drm_gem_vunmap(obj, map); -+ drm_gem_vunmap_locked(obj, map); - dma_resv_unlock(obj->resv); - } --EXPORT_SYMBOL(drm_gem_vunmap_unlocked); -+EXPORT_SYMBOL(drm_gem_vunmap); - - /** - * drm_gem_lock_reservations - Sets up the ww context and acquires -diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c b/drivers/gpu/drm/drm_gem_framebuffer_helper.c -index 3bdb6ba37ff4..3808f47310bf 100644 ---- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c -+++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c -@@ -362,7 +362,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct iosys_map *map, - ret = -EINVAL; - goto err_drm_gem_vunmap; - } -- ret = drm_gem_vmap_unlocked(obj, &map[i]); -+ ret = drm_gem_vmap(obj, &map[i]); - if (ret) - goto err_drm_gem_vunmap; - } -@@ -384,7 +384,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct iosys_map *map, - obj = drm_gem_fb_get_obj(fb, i); - if (!obj) - continue; -- drm_gem_vunmap_unlocked(obj, &map[i]); -+ drm_gem_vunmap(obj, &map[i]); - } - return ret; - } -@@ -411,7 +411,7 @@ void drm_gem_fb_vunmap(struct drm_framebuffer *fb, struct iosys_map *map) - continue; - if (iosys_map_is_null(&map[i])) - continue; -- drm_gem_vunmap_unlocked(obj, &map[i]); -+ drm_gem_vunmap(obj, &map[i]); - } - } - EXPORT_SYMBOL(drm_gem_fb_vunmap); -diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h -index 8e4faf0a28e6..227f58e5b232 100644 ---- a/drivers/gpu/drm/drm_internal.h -+++ b/drivers/gpu/drm/drm_internal.h -@@ -172,8 +172,8 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent, - - int drm_gem_pin(struct drm_gem_object *obj); - void drm_gem_unpin(struct drm_gem_object *obj); --int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); --void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); -+int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map); -+void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *map); - - /* drm_debugfs.c drm_debugfs_crc.c */ - #if defined(CONFIG_DEBUG_FS) -diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c -index 834a5e28abbe..4a5935a400ec 100644 ---- a/drivers/gpu/drm/drm_prime.c -+++ b/drivers/gpu/drm/drm_prime.c -@@ -684,7 +684,7 @@ int drm_gem_dmabuf_vmap(struct dma_buf *dma_buf, struct iosys_map *map) - { - struct drm_gem_object *obj = dma_buf->priv; - -- return drm_gem_vmap(obj, map); -+ return drm_gem_vmap_locked(obj, map); - } - EXPORT_SYMBOL(drm_gem_dmabuf_vmap); - -@@ -700,7 +700,7 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, struct iosys_map *map) - { - struct drm_gem_object *obj = dma_buf->priv; - -- drm_gem_vunmap(obj, map); -+ drm_gem_vunmap_locked(obj, map); - } - EXPORT_SYMBOL(drm_gem_dmabuf_vunmap); - -diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c -index c3bf8cda8498..3813f30480ba 100644 ---- a/drivers/gpu/drm/lima/lima_sched.c -+++ b/drivers/gpu/drm/lima/lima_sched.c -@@ -371,7 +371,7 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) - } else { - buffer_chunk->size = lima_bo_size(bo); - -- ret = drm_gem_vmap_unlocked(&bo->base.base, &map); -+ ret = drm_gem_vmap(&bo->base.base, &map); - if (ret) { - kvfree(et); - goto out; -@@ -379,7 +379,7 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) - - memcpy(buffer_chunk + 1, map.vaddr, buffer_chunk->size); - -- drm_gem_vunmap_unlocked(&bo->base.base, &map); -+ drm_gem_vunmap(&bo->base.base, &map); - } - - buffer_chunk = (void *)(buffer_chunk + 1) + buffer_chunk->size; -diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/panfrost/panfrost_dump.c -index 47751302f1bc..4042afe2fbf4 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_dump.c -+++ b/drivers/gpu/drm/panfrost/panfrost_dump.c -@@ -209,7 +209,7 @@ void panfrost_core_dump(struct panfrost_job *job) - goto dump_header; - } - -- ret = drm_gem_vmap_unlocked(&bo->base.base, &map); -+ ret = drm_gem_vmap(&bo->base.base, &map); - if (ret) { - dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n"); - iter.hdr->bomap.valid = 0; -@@ -228,7 +228,7 @@ void panfrost_core_dump(struct panfrost_job *job) - vaddr = map.vaddr; - memcpy(iter.data, vaddr, bo->base.base.size); - -- drm_gem_vunmap_unlocked(&bo->base.base, &map); -+ drm_gem_vunmap(&bo->base.base, &map); - - iter.hdr->bomap.valid = 1; - -diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -index ba9b6e2b2636..52befead08c6 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -+++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -@@ -106,7 +106,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, - goto err_close_bo; - } - -- ret = drm_gem_vmap_unlocked(&bo->base, &map); -+ ret = drm_gem_vmap(&bo->base, &map); - if (ret) - goto err_put_mapping; - perfcnt->buf = map.vaddr; -@@ -165,7 +165,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, - return 0; - - err_vunmap: -- drm_gem_vunmap_unlocked(&bo->base, &map); -+ drm_gem_vunmap(&bo->base, &map); - err_put_mapping: - panfrost_gem_mapping_put(perfcnt->mapping); - err_close_bo: -@@ -195,7 +195,7 @@ static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - - perfcnt->user = NULL; -- drm_gem_vunmap_unlocked(&perfcnt->mapping->obj->base.base, &map); -+ drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); - perfcnt->buf = NULL; - panfrost_gem_close(&perfcnt->mapping->obj->base.base, file_priv); - panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index 369505447acd..decb19ffb2c8 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -527,8 +527,8 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj); - void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, - bool dirty, bool accessed); - --int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map); --void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map); -+int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); -+void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); - - int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, - int count, struct drm_gem_object ***objs_out); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko - ` (27 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add _locked postfix to drm_gem functions that have unlocked counterpart -functions to make GEM functions naming more consistent and intuitive in -regards to the locking requirements. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem.c | 6 +++--- - include/drm/drm_gem.h | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c -index 95327b003692..4523cd40fb2f 100644 ---- a/drivers/gpu/drm/drm_gem.c -+++ b/drivers/gpu/drm/drm_gem.c -@@ -1490,10 +1490,10 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, - EXPORT_SYMBOL(drm_gem_lru_scan); - - /** -- * drm_gem_evict - helper to evict backing pages for a GEM object -+ * drm_gem_evict_locked - helper to evict backing pages for a GEM object - * @obj: obj in question - */ --int drm_gem_evict(struct drm_gem_object *obj) -+int drm_gem_evict_locked(struct drm_gem_object *obj) - { - dma_resv_assert_held(obj->resv); - -@@ -1505,4 +1505,4 @@ int drm_gem_evict(struct drm_gem_object *obj) - - return 0; - } --EXPORT_SYMBOL(drm_gem_evict); -+EXPORT_SYMBOL(drm_gem_evict_locked); -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index decb19ffb2c8..f835fdee6a5e 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -551,7 +551,7 @@ unsigned long drm_gem_lru_scan(struct drm_gem_lru *lru, - unsigned long *remaining, - bool (*shrink)(struct drm_gem_object *obj)); - --int drm_gem_evict(struct drm_gem_object *obj); -+int drm_gem_evict_locked(struct drm_gem_object *obj); - - #ifdef CONFIG_LOCKDEP - /** --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko - ` (26 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -The vmap/vunmap/evict GEM callbacks are always invoked with a held GEM's -reservation lock. Document this locking rule for clarity. - -Signed-off-by: Dmitry Osipenko ---- - include/drm/drm_gem.h | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index f835fdee6a5e..021f64371056 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -156,7 +156,8 @@ struct drm_gem_object_funcs { - * @vmap: - * - * Returns a virtual address for the buffer. Used by the -- * drm_gem_dmabuf_vmap() helper. -+ * drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation -+ * lock. - * - * This callback is optional. - */ -@@ -166,7 +167,8 @@ struct drm_gem_object_funcs { - * @vunmap: - * - * Releases the address previously returned by @vmap. Used by the -- * drm_gem_dmabuf_vunmap() helper. -+ * drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation -+ * lock. - * - * This callback is optional. - */ -@@ -189,7 +191,8 @@ struct drm_gem_object_funcs { - * @evict: - * - * Evicts gem object out from memory. Used by the drm_gem_object_evict() -- * helper. Returns 0 on success, -errno otherwise. -+ * helper. Returns 0 on success, -errno otherwise. Called with a held -+ * GEM reservation lock. - * - * This callback is optional. - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (2 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko - ` (25 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Make all drm-shmem exported symbols GPL to make them consistent with -the rest of drm-shmem symbols. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index e435f986cd13..0d61f2b3e213 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -226,7 +226,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - shmem->pages_mark_accessed_on_put); - shmem->pages = NULL; - } --EXPORT_SYMBOL(drm_gem_shmem_put_pages); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -@@ -271,7 +271,7 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - - return ret; - } --EXPORT_SYMBOL(drm_gem_shmem_pin); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_pin); - - /** - * drm_gem_shmem_unpin - Unpin backing pages for a shmem GEM object -@@ -290,7 +290,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - drm_gem_shmem_unpin_locked(shmem); - dma_resv_unlock(shmem->base.resv); - } --EXPORT_SYMBOL(drm_gem_shmem_unpin); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - - /* - * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object -@@ -360,7 +360,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - - return ret; - } --EXPORT_SYMBOL(drm_gem_shmem_vmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); - - /* - * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object -@@ -396,7 +396,7 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - - shmem->vaddr = NULL; - } --EXPORT_SYMBOL(drm_gem_shmem_vunmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); - - static int - drm_gem_shmem_create_with_handle(struct drm_file *file_priv, -@@ -435,7 +435,7 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - - return (madv >= 0); - } --EXPORT_SYMBOL(drm_gem_shmem_madvise); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); - - void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - { -@@ -467,7 +467,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); - } --EXPORT_SYMBOL(drm_gem_shmem_purge); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); - - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object -@@ -642,7 +642,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } --EXPORT_SYMBOL(drm_gem_shmem_print_info); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); - - /** - * drm_gem_shmem_get_sg_table - Provide a scatter/gather table of pinned --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (3 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko - ` (24 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add locked and remove unlocked postfixes from drm-shmem function names, -making names consistent with the drm/gem core code. - -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 60 +++++++++---------- - drivers/gpu/drm/lima/lima_gem.c | 6 +- - drivers/gpu/drm/panfrost/panfrost_drv.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_gem.c | 2 +- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- - include/drm/drm_gem_shmem_helper.h | 28 ++++----- - 7 files changed, 51 insertions(+), 51 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 0d61f2b3e213..043e8e3b129c 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -153,7 +153,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - kfree(shmem->sgt); - } - if (shmem->pages) -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - - drm_WARN_ON(obj->dev, shmem->pages_use_count); - -@@ -165,7 +165,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_free); - --static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct page **pages; -@@ -199,12 +199,12 @@ static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - } - - /* -- * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object -+ * drm_gem_shmem_put_pages_locked - Decrease use count on the backing pages for a shmem GEM object - * @shmem: shmem GEM object - * - * This function decreases the use count and puts the backing pages when use drops to zero. - */ --void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) -+void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -@@ -226,7 +226,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - shmem->pages_mark_accessed_on_put); - shmem->pages = NULL; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -@@ -234,7 +234,7 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - - return ret; - } -@@ -243,7 +243,7 @@ static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) - { - dma_resv_assert_held(shmem->base.resv); - -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - } - - /** -@@ -293,7 +293,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - - /* -- * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object -+ * drm_gem_shmem_vmap_locked - Create a virtual mapping for a shmem GEM object - * @shmem: shmem GEM object - * @map: Returns the kernel virtual address of the SHMEM GEM object's backing - * store. -@@ -302,13 +302,13 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - * exists for the buffer backing the shmem GEM object. It hides the differences - * between dma-buf imported and natively allocated objects. - * -- * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap(). -+ * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap_locked(). - * - * Returns: - * 0 on success or a negative error code on failure. - */ --int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map) -+int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map) - { - struct drm_gem_object *obj = &shmem->base; - int ret = 0; -@@ -331,7 +331,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - return 0; - } - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - if (ret) - goto err_zero_use; - -@@ -354,28 +354,28 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - - err_put_pages: - if (!obj->import_attach) -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - err_zero_use: - shmem->vmap_use_count = 0; - - return ret; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap_locked); - - /* -- * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object -+ * drm_gem_shmem_vunmap_locked - Unmap a virtual mapping for a shmem GEM object - * @shmem: shmem GEM object - * @map: Kernel virtual address where the SHMEM GEM object was mapped - * - * This function cleans up a kernel virtual address mapping acquired by -- * drm_gem_shmem_vmap(). The mapping is only removed when the use count drops to -- * zero. -+ * drm_gem_shmem_vmap_locked(). The mapping is only removed when the use count -+ * drops to zero. - * - * This function hides the differences between dma-buf imported and natively - * allocated objects. - */ --void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map) -+void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map) - { - struct drm_gem_object *obj = &shmem->base; - -@@ -391,12 +391,12 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - return; - - vunmap(shmem->vaddr); -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - } - - shmem->vaddr = NULL; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap_locked); - - static int - drm_gem_shmem_create_with_handle(struct drm_file *file_priv, -@@ -424,7 +424,7 @@ drm_gem_shmem_create_with_handle(struct drm_file *file_priv, - /* Update madvise status, returns true if not purged, else - * false or -errno. - */ --int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) -+int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv) - { - dma_resv_assert_held(shmem->base.resv); - -@@ -435,9 +435,9 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - - return (madv >= 0); - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise_locked); - --void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct drm_device *dev = obj->dev; -@@ -451,7 +451,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - kfree(shmem->sgt); - shmem->sgt = NULL; - -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - - shmem->madv = -1; - -@@ -467,7 +467,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_purge_locked); - - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object -@@ -564,7 +564,7 @@ static void drm_gem_shmem_vm_close(struct vm_area_struct *vma) - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - - dma_resv_lock(shmem->base.resv, NULL); -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - drm_gem_vm_close(vma); -@@ -611,7 +611,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct - } - - dma_resv_lock(shmem->base.resv, NULL); -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - if (ret) -@@ -679,7 +679,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - - drm_WARN_ON(obj->dev, obj->import_attach); - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - if (ret) - return ERR_PTR(ret); - -@@ -701,7 +701,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - sg_free_table(sgt); - kfree(sgt); - err_put_pages: -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - return ERR_PTR(ret); - } - -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 4f9736e5f929..433bda72e59b 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -180,7 +180,7 @@ static int lima_gem_pin(struct drm_gem_object *obj) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_pin(&bo->base); -+ return drm_gem_shmem_object_pin(obj); - } - - static int lima_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) -@@ -190,7 +190,7 @@ static int lima_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_vmap(&bo->base, map); -+ return drm_gem_shmem_object_vmap(obj, map); - } - - static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) -@@ -200,7 +200,7 @@ static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_mmap(&bo->base, vma); -+ return drm_gem_shmem_object_mmap(obj, vma); - } - - static const struct drm_gem_object_funcs lima_gem_funcs = { -diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c -index a926d71e8131..a15d62f19afb 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_drv.c -+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c -@@ -438,7 +438,7 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - } - } - -- args->retained = drm_gem_shmem_madvise(&bo->base, args->madv); -+ args->retained = drm_gem_shmem_madvise_locked(&bo->base, args->madv); - - if (args->retained) { - if (args->madv == PANFROST_MADV_DONTNEED) -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index d47b40b82b0b..f268bd5c2884 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -192,7 +192,7 @@ static int panfrost_gem_pin(struct drm_gem_object *obj) - if (bo->is_heap) - return -EINVAL; - -- return drm_gem_shmem_pin(&bo->base); -+ return drm_gem_shmem_object_pin(obj); - } - - static enum drm_gem_object_status panfrost_gem_status(struct drm_gem_object *obj) -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index 3d9f51bd48b6..02b60ea1433a 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -51,7 +51,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - goto unlock_mappings; - - panfrost_gem_teardown_mappings_locked(bo); -- drm_gem_shmem_purge(&bo->base); -+ drm_gem_shmem_purge_locked(&bo->base); - ret = true; - - dma_resv_unlock(shmem->base.resv); -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index f38385fe76bb..1ab081bd81a8 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -538,7 +538,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - err_map: - sg_free_table(sgt); - err_pages: -- drm_gem_shmem_put_pages(&bo->base); -+ drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index bf0c31aa8fbe..9e83212becbb 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -99,16 +99,16 @@ struct drm_gem_shmem_object { - struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size); - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - --void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map); --void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map); -+int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map); -+void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map); - int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma); - --int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv); -+int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); - - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { -@@ -117,7 +117,7 @@ static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem - !shmem->base.dma_buf && !shmem->base.import_attach; - } - --void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem); -@@ -208,12 +208,12 @@ static inline struct sg_table *drm_gem_shmem_object_get_sg_table(struct drm_gem_ - } - - /* -- * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap() -+ * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap_locked() - * @obj: GEM object - * @map: Returns the kernel virtual address of the SHMEM GEM object's backing store. - * -- * This function wraps drm_gem_shmem_vmap(). Drivers that employ the shmem helpers should -- * use it as their &drm_gem_object_funcs.vmap handler. -+ * This function wraps drm_gem_shmem_vmap_locked(). Drivers that employ the shmem -+ * helpers should use it as their &drm_gem_object_funcs.vmap handler. - * - * Returns: - * 0 on success or a negative error code on failure. -@@ -223,7 +223,7 @@ static inline int drm_gem_shmem_object_vmap(struct drm_gem_object *obj, - { - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - -- return drm_gem_shmem_vmap(shmem, map); -+ return drm_gem_shmem_vmap_locked(shmem, map); - } - - /* -@@ -231,15 +231,15 @@ static inline int drm_gem_shmem_object_vmap(struct drm_gem_object *obj, - * @obj: GEM object - * @map: Kernel virtual address where the SHMEM GEM object was mapped - * -- * This function wraps drm_gem_shmem_vunmap(). Drivers that employ the shmem helpers should -- * use it as their &drm_gem_object_funcs.vunmap handler. -+ * This function wraps drm_gem_shmem_vunmap_locked(). Drivers that employ the shmem -+ * helpers should use it as their &drm_gem_object_funcs.vunmap handler. - */ - static inline void drm_gem_shmem_object_vunmap(struct drm_gem_object *obj, - struct iosys_map *map) - { - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - -- drm_gem_shmem_vunmap(shmem, map); -+ drm_gem_shmem_vunmap_locked(shmem, map); - } - - /** --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (4 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko - ` (23 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Everything that uses the mapped buffer should be agnostic to is_iomem. -The only reason for the is_iomem test is that we're setting shmem->vaddr -to the returned map->vaddr. Now that the shmem->vaddr code is gone, remove -the obsoleted is_iomem test to clean up the code. - -Acked-by: Maxime Ripard -Suggested-by: Thomas Zimmermann -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 043e8e3b129c..1f0a66386415 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -315,12 +315,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - if (obj->import_attach) { - ret = dma_buf_vmap(obj->import_attach->dmabuf, map); -- if (!ret) { -- if (drm_WARN_ON(obj->dev, map->is_iomem)) { -- dma_buf_vunmap(obj->import_attach->dmabuf, map); -- return -EIO; -- } -- } - } else { - pgprot_t prot = PAGE_KERNEL; - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (5 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko - ` (22 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add separate pages_pin_count for tracking of whether drm-shmem pages are -moveable or not. With the addition of memory shrinker support to drm-shmem, -the pages_use_count will no longer determine whether pages are hard-pinned -in memory, but whether pages exist and are soft-pinned (and could be swapped -out). The pages_pin_count > 1 will hard-pin pages in memory. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 25 +++++++++++++++++-------- - include/drm/drm_gem_shmem_helper.h | 11 +++++++++++ - 2 files changed, 28 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 1f0a66386415..55b9dd3d4b18 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -156,6 +156,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - drm_gem_shmem_put_pages_locked(shmem); - - drm_WARN_ON(obj->dev, shmem->pages_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - dma_resv_unlock(shmem->base.resv); - } -@@ -234,18 +235,16 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -+ if (refcount_inc_not_zero(&shmem->pages_pin_count)) -+ return 0; -+ - ret = drm_gem_shmem_get_pages_locked(shmem); -+ if (!ret) -+ refcount_set(&shmem->pages_pin_count, 1); - - return ret; - } - --static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) --{ -- dma_resv_assert_held(shmem->base.resv); -- -- drm_gem_shmem_put_pages_locked(shmem); --} -- - /** - * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object - * @shmem: shmem GEM object -@@ -263,6 +262,9 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (refcount_inc_not_zero(&shmem->pages_pin_count)) -+ return 0; -+ - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) - return ret; -@@ -286,8 +288,14 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (refcount_dec_not_one(&shmem->pages_pin_count)) -+ return; -+ - dma_resv_lock(shmem->base.resv, NULL); -- drm_gem_shmem_unpin_locked(shmem); -+ -+ if (refcount_dec_and_test(&shmem->pages_pin_count)) -+ drm_gem_shmem_put_pages_locked(shmem); -+ - dma_resv_unlock(shmem->base.resv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); -@@ -632,6 +640,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - if (shmem->base.import_attach) - return; - -+ drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", shmem->pages_use_count); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 9e83212becbb..c708a9f45cbd 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -39,6 +39,17 @@ struct drm_gem_shmem_object { - */ - unsigned int pages_use_count; - -+ /** -+ * @pages_pin_count: -+ * -+ * Reference count on the pinned pages table. -+ * -+ * Pages are hard-pinned and reside in memory if count -+ * greater than zero. Otherwise, when count is zero, the pages are -+ * allowed to be evicted and purged by memory shrinker. -+ */ -+ refcount_t pages_pin_count; -+ - /** - * @madv: State for madvise - * --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (6 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko - ` (21 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Use atomic refcount_t helper for pages_use_count to optimize pin/unpin -functions by skipping reservation locking while GEM's pin refcount > 1. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 33 +++++++++++-------------- - drivers/gpu/drm/lima/lima_gem.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- - include/drm/drm_gem_shmem_helper.h | 2 +- - 4 files changed, 18 insertions(+), 21 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 55b9dd3d4b18..cacf0f8c42e2 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -155,7 +155,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (shmem->pages) - drm_gem_shmem_put_pages_locked(shmem); - -- drm_WARN_ON(obj->dev, shmem->pages_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - dma_resv_unlock(shmem->base.resv); -@@ -173,14 +173,13 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- if (shmem->pages_use_count++ > 0) -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) - return 0; - - pages = drm_gem_get_pages(obj); - if (IS_ERR(pages)) { - drm_dbg_kms(obj->dev, "Failed to get pages (%ld)\n", - PTR_ERR(pages)); -- shmem->pages_use_count = 0; - return PTR_ERR(pages); - } - -@@ -196,6 +195,8 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - shmem->pages = pages; - -+ refcount_set(&shmem->pages_use_count, 1); -+ - return 0; - } - -@@ -211,21 +212,17 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- if (drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) -- return; -- -- if (--shmem->pages_use_count > 0) -- return; -- -+ if (refcount_dec_and_test(&shmem->pages_use_count)) { - #ifdef CONFIG_X86 -- if (shmem->map_wc) -- set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -+ if (shmem->map_wc) -+ set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); - #endif - -- drm_gem_put_pages(obj, shmem->pages, -- shmem->pages_mark_dirty_on_put, -- shmem->pages_mark_accessed_on_put); -- shmem->pages = NULL; -+ drm_gem_put_pages(obj, shmem->pages, -+ shmem->pages_mark_dirty_on_put, -+ shmem->pages_mark_accessed_on_put); -+ shmem->pages = NULL; -+ } - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -@@ -552,8 +549,8 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) - * mmap'd, vm_open() just grabs an additional reference for the new - * mm the vma is getting copied into (ie. on fork()). - */ -- if (!drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) -- shmem->pages_use_count++; -+ drm_WARN_ON_ONCE(obj->dev, -+ !refcount_inc_not_zero(&shmem->pages_use_count)); - - dma_resv_unlock(shmem->base.resv); - -@@ -641,7 +638,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - return; - - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); -- drm_printf_indent(p, indent, "pages_use_count=%u\n", shmem->pages_use_count); -+ drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 433bda72e59b..2a97aa85416b 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -47,7 +47,7 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm) - } - - bo->base.pages = pages; -- bo->base.pages_use_count = 1; -+ refcount_set(&bo->base.pages_use_count, 1); - - mapping_set_unevictable(mapping); - } -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index 1ab081bd81a8..bd5a0073009d 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -489,7 +489,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - goto err_unlock; - } - bo->base.pages = pages; -- bo->base.pages_use_count = 1; -+ refcount_set(&bo->base.pages_use_count, 1); - } else { - pages = bo->base.pages; - if (pages[page_offset]) { -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index c708a9f45cbd..2c5dc62df20c 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -37,7 +37,7 @@ struct drm_gem_shmem_object { - * Reference count on the pages table. - * The pages are put when the count reaches zero. - */ -- unsigned int pages_use_count; -+ refcount_t pages_use_count; - - /** - * @pages_pin_count: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (7 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko - ` (20 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add lockless drm_gem_shmem_get_pages() helper that skips taking reservation -lock if pages_use_count is non-zero, leveraging from atomicity of the -refcount_t. Make drm_gem_shmem_mmap() to utilize the new helper. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index cacf0f8c42e2..1c032513abf1 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -226,6 +226,20 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -+static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+{ -+ int ret; -+ -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ return 0; -+ -+ dma_resv_lock(shmem->base.resv, NULL); -+ ret = drm_gem_shmem_get_pages_locked(shmem); -+ dma_resv_unlock(shmem->base.resv); -+ -+ return ret; -+} -+ - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { - int ret; -@@ -609,10 +623,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct - return ret; - } - -- dma_resv_lock(shmem->base.resv, NULL); -- ret = drm_gem_shmem_get_pages_locked(shmem); -- dma_resv_unlock(shmem->base.resv); -- -+ ret = drm_gem_shmem_get_pages(shmem); - if (ret) - return ret; - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (8 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko - ` (19 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -The vmapped pages shall be pinned in memory and previously get/put_pages() -were implicitly hard-pinning/unpinning the pages. This will no longer be -the case with addition of memory shrinker because pages_use_count > 0 won't -determine anymore whether pages are hard-pinned (they will be soft-pinned), -while the new pages_pin_count will do the hard-pinning. Switch the -vmap/vunmap() to use pin/unpin() functions in a preparation of addition -of the memory shrinker support to drm-shmem. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 19 ++++++++++++------- - include/drm/drm_gem_shmem_helper.h | 2 +- - 2 files changed, 13 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 1c032513abf1..9c89183f81b7 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -256,6 +256,14 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - return ret; - } - -+static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) -+{ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (refcount_dec_and_test(&shmem->pages_pin_count)) -+ drm_gem_shmem_put_pages_locked(shmem); -+} -+ - /** - * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object - * @shmem: shmem GEM object -@@ -303,10 +311,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - return; - - dma_resv_lock(shmem->base.resv, NULL); -- -- if (refcount_dec_and_test(&shmem->pages_pin_count)) -- drm_gem_shmem_put_pages_locked(shmem); -- -+ drm_gem_shmem_unpin_locked(shmem); - dma_resv_unlock(shmem->base.resv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); -@@ -344,7 +349,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - return 0; - } - -- ret = drm_gem_shmem_get_pages_locked(shmem); -+ ret = drm_gem_shmem_pin_locked(shmem); - if (ret) - goto err_zero_use; - -@@ -367,7 +372,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - err_put_pages: - if (!obj->import_attach) -- drm_gem_shmem_put_pages_locked(shmem); -+ drm_gem_shmem_unpin_locked(shmem); - err_zero_use: - shmem->vmap_use_count = 0; - -@@ -404,7 +409,7 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - return; - - vunmap(shmem->vaddr); -- drm_gem_shmem_put_pages_locked(shmem); -+ drm_gem_shmem_unpin_locked(shmem); - } - - shmem->vaddr = NULL; -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 2c5dc62df20c..80623b897803 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -124,7 +124,7 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { - return (shmem->madv > 0) && -- !shmem->vmap_use_count && shmem->sgt && -+ !refcount_read(&shmem->pages_pin_count) && shmem->sgt && - !shmem->base.dma_buf && !shmem->base.import_attach; - } - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (9 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko - ` (18 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Use refcount_t helper for vmap_use_count to make refcounting consistent -with pages_use_count and pages_pin_count that use refcount_t. This also -makes vmapping to benefit from the refcount_t's overflow checks. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 28 +++++++++++--------------- - include/drm/drm_gem_shmem_helper.h | 2 +- - 2 files changed, 13 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 9c89183f81b7..3403700780c3 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -144,7 +144,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } else { - dma_resv_lock(shmem->base.resv, NULL); - -- drm_WARN_ON(obj->dev, shmem->vmap_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - - if (shmem->sgt) { - dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -@@ -344,23 +344,25 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - dma_resv_assert_held(shmem->base.resv); - -- if (shmem->vmap_use_count++ > 0) { -+ if (refcount_inc_not_zero(&shmem->vmap_use_count)) { - iosys_map_set_vaddr(map, shmem->vaddr); - return 0; - } - - ret = drm_gem_shmem_pin_locked(shmem); - if (ret) -- goto err_zero_use; -+ return ret; - - if (shmem->map_wc) - prot = pgprot_writecombine(prot); - shmem->vaddr = vmap(shmem->pages, obj->size >> PAGE_SHIFT, - VM_MAP, prot); -- if (!shmem->vaddr) -+ if (!shmem->vaddr) { - ret = -ENOMEM; -- else -+ } else { - iosys_map_set_vaddr(map, shmem->vaddr); -+ refcount_set(&shmem->vmap_use_count, 1); -+ } - } - - if (ret) { -@@ -373,8 +375,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - err_put_pages: - if (!obj->import_attach) - drm_gem_shmem_unpin_locked(shmem); --err_zero_use: -- shmem->vmap_use_count = 0; - - return ret; - } -@@ -402,14 +402,10 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - } else { - dma_resv_assert_held(shmem->base.resv); - -- if (drm_WARN_ON_ONCE(obj->dev, !shmem->vmap_use_count)) -- return; -- -- if (--shmem->vmap_use_count > 0) -- return; -- -- vunmap(shmem->vaddr); -- drm_gem_shmem_unpin_locked(shmem); -+ if (refcount_dec_and_test(&shmem->vmap_use_count)) { -+ vunmap(shmem->vaddr); -+ drm_gem_shmem_unpin_locked(shmem); -+ } - } - - shmem->vaddr = NULL; -@@ -655,7 +651,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); -- drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); -+ drm_printf_indent(p, indent, "vmap_use_count=%u\n", refcount_read(&shmem->vmap_use_count)); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 80623b897803..18020f653d7e 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -82,7 +82,7 @@ struct drm_gem_shmem_object { - * Reference count on the virtual address. - * The address are un-mapped when the count reaches zero. - */ -- unsigned int vmap_use_count; -+ refcount_t vmap_use_count; - - /** - * @pages_mark_dirty_on_put: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (10 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko - ` (17 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare drm_gem_shmem_free() to addition of memory shrinker support -to drm-shmem by adding and using variant of put_pages() that doesn't -touch reservation lock. Reservation shouldn't be touched because lockdep -will trigger a bogus warning about locking contention with fs_reclaim -code paths that can't happen during the time when GEM is freed and -lockdep doesn't know about that. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 40 ++++++++++++++------------ - 1 file changed, 21 insertions(+), 19 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 3403700780c3..799a3c5015ad 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -128,6 +128,22 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_create); - -+static void -+drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+#ifdef CONFIG_X86 -+ if (shmem->map_wc) -+ set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -+#endif -+ -+ drm_gem_put_pages(obj, shmem->pages, -+ shmem->pages_mark_dirty_on_put, -+ shmem->pages_mark_accessed_on_put); -+ shmem->pages = NULL; -+} -+ - /** - * drm_gem_shmem_free - Free resources associated with a shmem GEM object - * @shmem: shmem GEM object to free -@@ -142,8 +158,6 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (obj->import_attach) { - drm_prime_gem_destroy(obj, shmem->sgt); - } else { -- dma_resv_lock(shmem->base.resv, NULL); -- - drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - - if (shmem->sgt) { -@@ -152,13 +166,12 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - sg_free_table(shmem->sgt); - kfree(shmem->sgt); - } -- if (shmem->pages) -- drm_gem_shmem_put_pages_locked(shmem); -+ if (shmem->pages && -+ refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); - - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -- -- dma_resv_unlock(shmem->base.resv); - } - - drm_gem_object_release(obj); -@@ -208,21 +221,10 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - */ - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { -- struct drm_gem_object *obj = &shmem->base; -- - dma_resv_assert_held(shmem->base.resv); - -- if (refcount_dec_and_test(&shmem->pages_use_count)) { --#ifdef CONFIG_X86 -- if (shmem->map_wc) -- set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); --#endif -- -- drm_gem_put_pages(obj, shmem->pages, -- shmem->pages_mark_dirty_on_put, -- shmem->pages_mark_accessed_on_put); -- shmem->pages = NULL; -- } -+ if (refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (11 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko - ` (16 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're going to move away from having implicit get_pages() done by -get_pages_sgt() to simplify refcnt handling. Drivers will manage -get/put_pages() by themselves. Expose the drm_gem_shmem_get_pages() -in a public drm-shmem API. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 10 +++++++++- - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 799a3c5015ad..dc416a4bce1b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -228,7 +228,14 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - --static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+/* -+ * drm_gem_shmem_get_pages - Increase use count on the backing pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This function Increases the use count and allocates the backing pages if -+ * use-count equals to zero. -+ */ -+int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - { - int ret; - -@@ -241,6 +248,7 @@ static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - - return ret; - } -+EXPORT_SYMBOL_GPL(drm_gem_shmem_get_pages); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 18020f653d7e..6dedc0739fbc 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -110,6 +110,7 @@ struct drm_gem_shmem_object { - struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size); - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - -+int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (12 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko - ` (15 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're going to move away from having implicit get_pages() done by -get_pages_sgt() to ease simplify refcnt handling. Drivers will manage -get/put_pages() by themselves. Add drm_gem_shmem_put_pages(). - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 20 ++++++++++++++++++++ - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 21 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index dc416a4bce1b..f5ed64f78648 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -218,6 +218,7 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - * @shmem: shmem GEM object - * - * This function decreases the use count and puts the backing pages when use drops to zero. -+ * Caller must hold GEM's reservation lock. - */ - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { -@@ -228,6 +229,25 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -+/* -+ * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This function decreases the use count and puts the backing pages when use drops to zero. -+ * It's unlocked version of drm_gem_shmem_put_pages_locked(), caller must not hold -+ * GEM's reservation lock. -+ */ -+void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) -+{ -+ if (refcount_dec_not_one(&shmem->pages_use_count)) -+ return; -+ -+ dma_resv_lock(shmem->base.resv, NULL); -+ drm_gem_shmem_put_pages_locked(shmem); -+ dma_resv_unlock(shmem->base.resv); -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); -+ - /* - * drm_gem_shmem_get_pages - Increase use count on the backing pages for a shmem GEM object - * @shmem: shmem GEM object -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 6dedc0739fbc..525480488451 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -111,6 +111,7 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - - int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (13 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko - ` (14 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -All drivers will be moved to get/put pages explicitly and then the last -put_pages() will be invoked during gem_free() time by some drivers. -We can't touch reservation lock when GEM is freed because that will cause -a spurious warning from lockdep when shrinker support will be added. -Lockdep doesn't know that fs_reclaim isn't functioning for a freed object, -and thus, can't deadlock. Release pages directly without taking reservation -lock if GEM is freed and its refcount is zero. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index f5ed64f78648..c7357110ca76 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -242,6 +242,22 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - if (refcount_dec_not_one(&shmem->pages_use_count)) - return; - -+ /* -+ * Destroying the object is a special case because acquiring -+ * the obj lock can cause a locking order inversion between -+ * reservation_ww_class_mutex and fs_reclaim. -+ * -+ * This deadlock is not actually possible, because no one should -+ * be already holding the lock when GEM is released. Unfortunately -+ * lockdep is not aware of this detail. So when the refcount drops -+ * to zero, we pretend it is already locked. -+ */ -+ if (!kref_read(&shmem->base.refcount)) { -+ if (refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); -+ return; -+ } -+ - dma_resv_lock(shmem->base.resv, NULL); - drm_gem_shmem_put_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (14 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko - ` (13 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -To simplify the drm-shmem refcnt handling, we're moving away from -the implicit get_pages() that is used by get_pages_sgt(). From now on -drivers will have to pin pages while they use sgt. Lima driver doesn't -have shrinker, hence pages are pinned and sgt is valid as long as pages' -use-count > 0. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/lima/lima_gem.c | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 2a97aa85416b..9c3e34a7fbed 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -115,6 +115,7 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - return PTR_ERR(shmem); - - obj = &shmem->base; -+ bo = to_lima_bo(obj); - - /* Mali Utgard GPU can only support 32bit address space */ - mask = mapping_gfp_mask(obj->filp->f_mapping); -@@ -123,13 +124,17 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - mapping_set_gfp_mask(obj->filp->f_mapping, mask); - - if (is_heap) { -- bo = to_lima_bo(obj); - err = lima_heap_alloc(bo, NULL); - if (err) - goto out; - } else { -- struct sg_table *sgt = drm_gem_shmem_get_pages_sgt(shmem); -+ struct sg_table *sgt; - -+ err = drm_gem_shmem_get_pages(shmem); -+ if (err) -+ goto out; -+ -+ sgt = drm_gem_shmem_get_pages_sgt(shmem); - if (IS_ERR(sgt)) { - err = PTR_ERR(sgt); - goto out; -@@ -139,6 +144,9 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - err = drm_gem_handle_create(file, obj, handle); - - out: -+ if (err && refcount_read(&bo->base.pages_use_count)) -+ drm_gem_shmem_put_pages(shmem); -+ - /* drop reference from allocate - handle holds it now */ - drm_gem_object_put(obj); - -@@ -152,6 +160,9 @@ static void lima_gem_free_object(struct drm_gem_object *obj) - if (!list_empty(&bo->va)) - dev_err(obj->dev->dev, "lima gem free bo still has va\n"); - -+ if (refcount_read(&bo->base.pages_use_count)) -+ drm_gem_shmem_put_pages(&bo->base); -+ - drm_gem_shmem_free(&bo->base); - } - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (15 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko - ` (12 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -From: Boris Brezillon - -If some the pages or sgt allocation failed, we shouldn't release the -pages ref we got earlier, otherwise we will end up with unbalanced -get/put_pages() calls. We should instead leave everything in place -and let the BO release function deal with extra cleanup when the object -is destroyed, or let the fault handler try again next time it's called. - -Fixes: 187d2929206e ("drm/panfrost: Add support for GPU heap allocations") -Cc: -Signed-off-by: Boris Brezillon -Co-developed-by: Dmitry Osipenko -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index bd5a0073009d..4a0b4bf03f1a 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -502,11 +502,18 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - mapping_set_unevictable(mapping); - - for (i = page_offset; i < page_offset + NUM_FAULT_PAGES; i++) { -+ /* Can happen if the last fault only partially filled this -+ * section of the pages array before failing. In that case -+ * we skip already filled pages. -+ */ -+ if (pages[i]) -+ continue; -+ - pages[i] = shmem_read_mapping_page(mapping, i); - if (IS_ERR(pages[i])) { - ret = PTR_ERR(pages[i]); - pages[i] = NULL; -- goto err_pages; -+ goto err_unlock; - } - } - -@@ -514,7 +521,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - ret = sg_alloc_table_from_pages(sgt, pages + page_offset, - NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL); - if (ret) -- goto err_pages; -+ goto err_unlock; - - ret = dma_map_sgtable(pfdev->dev, sgt, DMA_BIDIRECTIONAL, 0); - if (ret) -@@ -537,8 +544,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - - err_map: - sg_free_table(sgt); --err_pages: -- drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (16 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 19/30] drm/virtio: " Dmitry Osipenko - ` (11 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -To simplify the drm-shmem refcnt handling, we're moving away from -the implicit get_pages() that is used by get_pages_sgt(). From now on -drivers will have to pin pages while they use sgt. Panfrost's shrinker -doesn't support swapping out BOs, hence pages are pinned and sgt is valid -as long as pages' use-count > 0. - -In Panfrost, panfrost_gem_mapping, which is the object representing a -GPU mapping of a BO, owns a pages ref. This guarantees that any BO being -mapped GPU side has its pages retained till the mapping is destroyed. - -Since pages are no longer guaranteed to stay pinned for the BO lifetime, -and MADVISE(DONT_NEED) flagging remains after the GEM handle has been -destroyed, we need to add an extra 'is_purgeable' check in -panfrost_gem_purge(), to make sure we're not trying to purge a BO that -already had its pages released. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/panfrost/panfrost_gem.c | 63 ++++++++++++++----- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 6 ++ - 2 files changed, 52 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index f268bd5c2884..7edfc12f7c1f 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -35,20 +35,6 @@ static void panfrost_gem_free_object(struct drm_gem_object *obj) - */ - WARN_ON_ONCE(!list_empty(&bo->mappings.list)); - -- if (bo->sgts) { -- int i; -- int n_sgt = bo->base.base.size / SZ_2M; -- -- for (i = 0; i < n_sgt; i++) { -- if (bo->sgts[i].sgl) { -- dma_unmap_sgtable(pfdev->dev, &bo->sgts[i], -- DMA_BIDIRECTIONAL, 0); -- sg_free_table(&bo->sgts[i]); -- } -- } -- kvfree(bo->sgts); -- } -- - drm_gem_shmem_free(&bo->base); - } - -@@ -85,11 +71,40 @@ panfrost_gem_teardown_mapping(struct panfrost_gem_mapping *mapping) - - static void panfrost_gem_mapping_release(struct kref *kref) - { -- struct panfrost_gem_mapping *mapping; -- -- mapping = container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_mapping *mapping = -+ container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_object *bo = mapping->obj; -+ struct panfrost_device *pfdev = bo->base.base.dev->dev_private; - - panfrost_gem_teardown_mapping(mapping); -+ -+ /* On heap BOs, release the sgts created in the fault handler path. */ -+ if (bo->sgts) { -+ int i, n_sgt = bo->base.base.size / SZ_2M; -+ -+ for (i = 0; i < n_sgt; i++) { -+ if (bo->sgts[i].sgl) { -+ dma_unmap_sgtable(pfdev->dev, &bo->sgts[i], -+ DMA_BIDIRECTIONAL, 0); -+ sg_free_table(&bo->sgts[i]); -+ } -+ } -+ kvfree(bo->sgts); -+ } -+ -+ /* Pages ref is owned by the panfrost_gem_mapping object. We must -+ * release our pages ref (if any), before releasing the object -+ * ref. -+ * Non-heap BOs acquired the pages at panfrost_gem_mapping creation -+ * time, and heap BOs may have acquired pages if the fault handler -+ * was called, in which case bo->sgts should be non-NULL. -+ */ -+ if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts) && -+ bo->base.madv >= 0) { -+ drm_gem_shmem_put_pages(&bo->base); -+ bo->sgts = NULL; -+ } -+ - drm_gem_object_put(&mapping->obj->base.base); - panfrost_mmu_ctx_put(mapping->mmu); - kfree(mapping); -@@ -125,6 +140,20 @@ int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv) - if (!mapping) - return -ENOMEM; - -+ if (!bo->is_heap && !bo->base.base.import_attach) { -+ /* Pages ref is owned by the panfrost_gem_mapping object. -+ * For non-heap BOs, we request pages at mapping creation -+ * time, such that the panfrost_mmu_map() call, further down in -+ * this function, is guaranteed to have pages_use_count > 0 -+ * when drm_gem_shmem_get_pages_sgt() is called. -+ */ -+ ret = drm_gem_shmem_get_pages(&bo->base); -+ if (ret) { -+ kfree(mapping); -+ return ret; -+ } -+ } -+ - INIT_LIST_HEAD(&mapping->node); - kref_init(&mapping->refcount); - drm_gem_object_get(obj); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index 02b60ea1433a..d4fb0854cf2f 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -50,6 +50,12 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - if (!dma_resv_trylock(shmem->base.resv)) - goto unlock_mappings; - -+ /* BO might have become unpurgeable if the last pages_use_count ref -+ * was dropped, but the BO hasn't been destroyed yet. -+ */ -+ if (!drm_gem_shmem_is_purgeable(shmem)) -+ goto unlock_mappings; -+ - panfrost_gem_teardown_mappings_locked(bo); - drm_gem_shmem_purge_locked(&bo->base); - ret = true; --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 19/30] drm/virtio: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (17 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko - ` (10 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're moving away from implicit get_pages() that is done by -get_pages_sgt() to simplify the refcnt handling. Drivers will have -to pin pages while they use sgt. VirtIO-GPU doesn't support shrinker, -hence pages are pinned and sgt is valid as long as pages' use-count > 0. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_object.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index c7e74cf13022..e58528c562ef 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -67,6 +67,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) - - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); - if (virtio_gpu_is_shmem(bo)) { -+ drm_gem_shmem_put_pages(&bo->base); - drm_gem_shmem_free(&bo->base); - } else if (virtio_gpu_is_vram(bo)) { - struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); -@@ -196,9 +197,13 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - return PTR_ERR(shmem_obj); - bo = gem_to_virtio_gpu_obj(&shmem_obj->base); - -+ ret = drm_gem_shmem_get_pages(shmem_obj); -+ if (ret) -+ goto err_free_gem; -+ - ret = virtio_gpu_resource_id_get(vgdev, &bo->hw_res_handle); - if (ret < 0) -- goto err_free_gem; -+ goto err_put_pages; - - bo->dumb = params->dumb; - -@@ -243,6 +248,8 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - kvfree(ents); - err_put_id: - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); -+err_put_pages: -+ drm_gem_shmem_put_pages(shmem_obj); - err_free_gem: - drm_gem_shmem_free(shmem_obj); - return ret; --- -2.43.0 - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (19 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko - ` (8 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -In a preparation to addition of drm-shmem memory shrinker support, change -the SGT allocation policy in this way: - -1. SGT can be allocated only if shmem pages are pinned at the -time of allocation, otherwise allocation fails. - -2. Drivers must ensure that pages are pinned during the time of SGT usage -and should get new SGT if pages were unpinned. - -This new policy is required by the shrinker because it will move pages -to/from SWAP unless pages are pinned, invalidating SGT pointer once pages -are relocated. - -Previous patches prepared drivers to the new policy. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 55 ++++++++++++++------------ - 1 file changed, 29 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index c7357110ca76..ff5437ab2c95 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -133,6 +133,14 @@ drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ if (shmem->sgt) { -+ dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -+ DMA_BIDIRECTIONAL, 0); -+ sg_free_table(shmem->sgt); -+ kfree(shmem->sgt); -+ shmem->sgt = NULL; -+ } -+ - #ifdef CONFIG_X86 - if (shmem->map_wc) - set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -@@ -155,24 +163,12 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -- if (obj->import_attach) { -+ if (obj->import_attach) - drm_prime_gem_destroy(obj, shmem->sgt); -- } else { -- drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - -- if (shmem->sgt) { -- dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -- DMA_BIDIRECTIONAL, 0); -- sg_free_table(shmem->sgt); -- kfree(shmem->sgt); -- } -- if (shmem->pages && -- refcount_dec_and_test(&shmem->pages_use_count)) -- drm_gem_shmem_free_pages(shmem); -- -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -- } -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - drm_gem_object_release(obj); - kfree(shmem); -@@ -722,6 +718,9 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (drm_WARN_ON(obj->dev, !shmem->pages)) -+ return ERR_PTR(-ENOMEM); -+ - return drm_prime_pages_to_sg(obj->dev, shmem->pages, obj->size >> PAGE_SHIFT); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_get_sg_table); -@@ -737,15 +736,10 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - - drm_WARN_ON(obj->dev, obj->import_attach); - -- ret = drm_gem_shmem_get_pages_locked(shmem); -- if (ret) -- return ERR_PTR(ret); -- - sgt = drm_gem_shmem_get_sg_table(shmem); -- if (IS_ERR(sgt)) { -- ret = PTR_ERR(sgt); -- goto err_put_pages; -- } -+ if (IS_ERR(sgt)) -+ return sgt; -+ - /* Map the pages for use by the h/w. */ - ret = dma_map_sgtable(obj->dev->dev, sgt, DMA_BIDIRECTIONAL, 0); - if (ret) -@@ -758,8 +752,6 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - err_free_sgt: - sg_free_table(sgt); - kfree(sgt); --err_put_pages: -- drm_gem_shmem_put_pages_locked(shmem); - return ERR_PTR(ret); - } - -@@ -776,6 +768,17 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - * and difference between dma-buf imported and natively allocated objects. - * drm_gem_shmem_get_sg_table() should not be directly called by drivers. - * -+ * Drivers should adhere to these SGT usage rules: -+ * -+ * 1. SGT should be allocated only if shmem pages are pinned at the -+ * time of allocation, otherwise allocation will fail. -+ * -+ * 2. Drivers should ensure that pages are pinned during the time of -+ * SGT usage and should get new SGT if pages were unpinned. -+ * -+ * Drivers don't own returned SGT and must take care of the SGT pointer -+ * lifetime. SGT is valid as long as GEM pages that backing SGT are pinned. -+ * - * Returns: - * A pointer to the scatter/gather table of pinned pages or errno on failure. - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (20 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko - ` (7 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Introduce common drm-shmem shrinker for DRM drivers. - -To start using drm-shmem shrinker drivers should do the following: - -1. Implement evict() callback of GEM object where driver should check - whether object is purgeable or evictable using drm-shmem helpers and - perform the shrinking action - -2. Initialize drm-shmem internals using drmm_gem_shmem_init(drm_device), - which will register drm-shmem shrinker - -3. Implement madvise IOCTL that will use drm_gem_shmem_madvise() - -Signed-off-by: Daniel Almeida -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 365 +++++++++++++++++- - drivers/gpu/drm/panfrost/panfrost_gem.c | 3 +- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 13 +- - include/drm/drm_device.h | 10 +- - include/drm/drm_gem_shmem_helper.h | 68 +++- - 5 files changed, 433 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index ff5437ab2c95..59cebd1e35af 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -128,11 +129,49 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_create); - -+static bool drm_gem_shmem_is_evictable(struct drm_gem_shmem_object *shmem) -+{ -+ return (shmem->madv >= 0) && shmem->base.funcs->evict && -+ refcount_read(&shmem->pages_use_count) && -+ !refcount_read(&shmem->pages_pin_count) && -+ !shmem->base.dma_buf && !shmem->base.import_attach && -+ !shmem->evicted; -+} -+ -+static void -+drm_gem_shmem_shrinker_update_lru_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ struct drm_gem_shmem *shmem_mm = obj->dev->shmem_mm; -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (!shmem_shrinker || obj->import_attach) -+ return; -+ -+ if (shmem->madv < 0) -+ drm_gem_lru_remove(&shmem->base); -+ else if (drm_gem_shmem_is_evictable(shmem) || drm_gem_shmem_is_purgeable(shmem)) -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_evictable, &shmem->base); -+ else if (shmem->evicted) -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_evicted, &shmem->base); -+ else if (!shmem->pages) -+ drm_gem_lru_remove(&shmem->base); -+ else -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_pinned, &shmem->base); -+} -+ - static void - drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ if (!shmem->pages) { -+ drm_WARN_ON(obj->dev, !shmem->evicted && shmem->madv >= 0); -+ return; -+ } -+ - if (shmem->sgt) { - dma_unmap_sgtable(obj->dev->dev, shmem->sgt, - DMA_BIDIRECTIONAL, 0); -@@ -175,15 +214,26 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_free); - --static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) -+static int -+drm_gem_shmem_acquire_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct page **pages; - -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return -EINVAL; -+ - dma_resv_assert_held(shmem->base.resv); - -- if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ if (shmem->madv < 0) { -+ drm_WARN_ON(obj->dev, shmem->pages); -+ return -ENOMEM; -+ } -+ -+ if (shmem->pages) { -+ drm_WARN_ON(obj->dev, !shmem->evicted); - return 0; -+ } - - pages = drm_gem_get_pages(obj); - if (IS_ERR(pages)) { -@@ -204,8 +254,29 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - shmem->pages = pages; - -+ return 0; -+} -+ -+static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) -+{ -+ int err; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (shmem->madv < 0) -+ return -ENOMEM; -+ -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ return 0; -+ -+ err = drm_gem_shmem_acquire_pages(shmem); -+ if (err) -+ return err; -+ - refcount_set(&shmem->pages_use_count, 1); - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ - return 0; - } - -@@ -222,6 +293,8 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - - if (refcount_dec_and_test(&shmem->pages_use_count)) - drm_gem_shmem_free_pages(shmem); -+ -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -@@ -266,6 +339,11 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); - * - * This function Increases the use count and allocates the backing pages if - * use-count equals to zero. -+ * -+ * Note that this function doesn't pin pages in memory. If your driver -+ * uses drm-shmem shrinker, then it's free to relocate pages to swap. -+ * Getting pages only guarantees that pages are allocated, and not that -+ * pages reside in memory. In order to pin pages use drm_gem_shmem_pin(). - */ - int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - { -@@ -291,6 +369,10 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - if (refcount_inc_not_zero(&shmem->pages_pin_count)) - return 0; - -+ ret = drm_gem_shmem_swapin_locked(shmem); -+ if (ret) -+ return ret; -+ - ret = drm_gem_shmem_get_pages_locked(shmem); - if (!ret) - refcount_set(&shmem->pages_pin_count, 1); -@@ -489,29 +571,48 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv) - - madv = shmem->madv; - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ - return (madv >= 0); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise_locked); - --void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) -+int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - { - struct drm_gem_object *obj = &shmem->base; -- struct drm_device *dev = obj->dev; -+ int ret; - -- dma_resv_assert_held(shmem->base.resv); -+ ret = dma_resv_lock_interruptible(obj->resv, NULL); -+ if (ret) -+ return ret; - -- drm_WARN_ON(obj->dev, !drm_gem_shmem_is_purgeable(shmem)); -+ ret = drm_gem_shmem_madvise_locked(shmem, madv); -+ dma_resv_unlock(obj->resv); - -- dma_unmap_sgtable(dev->dev, shmem->sgt, DMA_BIDIRECTIONAL, 0); -- sg_free_table(shmem->sgt); -- kfree(shmem->sgt); -- shmem->sgt = NULL; -+ return ret; -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); - -- drm_gem_shmem_put_pages_locked(shmem); -+static void -+drm_gem_shmem_shrinker_put_pages_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ struct drm_device *dev = obj->dev; - -- shmem->madv = -1; -+ dma_resv_assert_held(shmem->base.resv); - -+ if (shmem->evicted) -+ return; -+ -+ drm_gem_shmem_free_pages(shmem); - drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping); -+} -+ -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+ drm_gem_shmem_shrinker_put_pages_locked(shmem); - drm_gem_free_mmap_offset(obj); - - /* Our goal here is to return as much of the memory as -@@ -522,9 +623,45 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - shmem_truncate_range(file_inode(obj->filp), 0, (loff_t)-1); - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); -+ -+ shmem->madv = -1; -+ shmem->evicted = false; -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_purge_locked); - -+/** -+ * drm_gem_shmem_swapin_locked() - Moves shmem GEM back to memory and enables -+ * hardware access to the memory. -+ * @shmem: shmem GEM object -+ * -+ * This function moves shmem GEM back to memory if it was previously evicted -+ * by the memory shrinker. The GEM is ready to use on success. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+int drm_gem_shmem_swapin_locked(struct drm_gem_shmem_object *shmem) -+{ -+ int err; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (!shmem->evicted) -+ return 0; -+ -+ err = drm_gem_shmem_acquire_pages(shmem); -+ if (err) -+ return err; -+ -+ shmem->evicted = false; -+ -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_swapin_locked); -+ - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object - * @file: DRM file structure to create the dumb buffer for -@@ -571,22 +708,32 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf) - vm_fault_t ret; - struct page *page; - pgoff_t page_offset; -+ int err; - - /* We don't use vmf->pgoff since that has the fake offset */ - page_offset = (vmf->address - vma->vm_start) >> PAGE_SHIFT; - - dma_resv_lock(shmem->base.resv, NULL); - -- if (page_offset >= num_pages || -- drm_WARN_ON_ONCE(obj->dev, !shmem->pages) || -- shmem->madv < 0) { -+ err = drm_gem_shmem_swapin_locked(shmem); -+ if (err) { -+ ret = VM_FAULT_OOM; -+ goto unlock; -+ } -+ -+ if (page_offset >= num_pages || !shmem->pages) { - ret = VM_FAULT_SIGBUS; - } else { -+ /* -+ * shmem->pages is guaranteed to be valid while reservation -+ * lock is held and drm_gem_shmem_swapin_locked() succeeds. -+ */ - page = shmem->pages[page_offset]; - - ret = vmf_insert_pfn(vma, vmf->address, page_to_pfn(page)); - } - -+unlock: - dma_resv_unlock(shmem->base.resv); - - return ret; -@@ -609,6 +756,7 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) - drm_WARN_ON_ONCE(obj->dev, - !refcount_inc_not_zero(&shmem->pages_use_count)); - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - drm_gem_vm_open(vma); -@@ -694,7 +842,9 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", refcount_read(&shmem->vmap_use_count)); -+ drm_printf_indent(p, indent, "evicted=%d\n", shmem->evicted); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); -+ drm_printf_indent(p, indent, "madv=%d\n", shmem->madv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); - -@@ -784,8 +934,13 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - */ - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem) - { -- int ret; -+ struct drm_gem_object *obj = &shmem->base; - struct sg_table *sgt; -+ int ret; -+ -+ if (drm_WARN_ON(obj->dev, drm_gem_shmem_is_evictable(shmem)) || -+ drm_WARN_ON(obj->dev, drm_gem_shmem_is_purgeable(shmem))) -+ return ERR_PTR(-EBUSY); - - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) -@@ -832,6 +987,184 @@ drm_gem_shmem_prime_import_sg_table(struct drm_device *dev, - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_prime_import_sg_table); - -+static unsigned long -+drm_gem_shmem_shrinker_count_objects(struct shrinker *shrinker, -+ struct shrink_control *sc) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = shrinker->private_data; -+ unsigned long count = shmem_shrinker->lru_evictable.count; -+ -+ if (count >= SHRINK_EMPTY) -+ return SHRINK_EMPTY - 1; -+ -+ return count ?: SHRINK_EMPTY; -+} -+ -+void drm_gem_shmem_evict_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+ drm_WARN_ON(obj->dev, !drm_gem_shmem_is_evictable(shmem)); -+ drm_WARN_ON(obj->dev, shmem->evicted); -+ -+ drm_gem_shmem_shrinker_put_pages_locked(shmem); -+ -+ shmem->evicted = true; -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_evict_locked); -+ -+static bool drm_gem_shmem_shrinker_evict_locked(struct drm_gem_object *obj) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ int err; -+ -+ if (!drm_gem_shmem_is_evictable(shmem) || -+ get_nr_swap_pages() < obj->size >> PAGE_SHIFT) -+ return false; -+ -+ err = drm_gem_evict_locked(obj); -+ if (err) -+ return false; -+ -+ return true; -+} -+ -+static bool drm_gem_shmem_shrinker_purge_locked(struct drm_gem_object *obj) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ int err; -+ -+ if (!drm_gem_shmem_is_purgeable(shmem)) -+ return false; -+ -+ err = drm_gem_evict_locked(obj); -+ if (err) -+ return false; -+ -+ return true; -+} -+ -+static unsigned long -+drm_gem_shmem_shrinker_scan_objects(struct shrinker *shrinker, -+ struct shrink_control *sc) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = shrinker->private_data; -+ unsigned long nr_to_scan = sc->nr_to_scan; -+ unsigned long remaining = 0; -+ unsigned long freed = 0; -+ -+ /* purge as many objects as we can */ -+ freed += drm_gem_lru_scan(&shmem_shrinker->lru_evictable, -+ nr_to_scan, &remaining, -+ drm_gem_shmem_shrinker_purge_locked); -+ -+ /* evict as many objects as we can */ -+ if (freed < nr_to_scan) -+ freed += drm_gem_lru_scan(&shmem_shrinker->lru_evictable, -+ nr_to_scan - freed, &remaining, -+ drm_gem_shmem_shrinker_evict_locked); -+ -+ return (freed > 0 && remaining > 0) ? freed : SHRINK_STOP; -+} -+ -+static int drm_gem_shmem_shrinker_init(struct drm_gem_shmem *shmem_mm, -+ const char *shrinker_name) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ struct shrinker *shrinker; -+ -+ shrinker = shrinker_alloc(0, shrinker_name); -+ if (!shrinker) -+ return -ENOMEM; -+ -+ shrinker->count_objects = drm_gem_shmem_shrinker_count_objects; -+ shrinker->scan_objects = drm_gem_shmem_shrinker_scan_objects; -+ shrinker->private_data = shmem_shrinker; -+ shrinker->seeks = DEFAULT_SEEKS; -+ -+ mutex_init(&shmem_shrinker->lock); -+ shmem_shrinker->shrinker = shrinker; -+ drm_gem_lru_init(&shmem_shrinker->lru_evictable, &shmem_shrinker->lock); -+ drm_gem_lru_init(&shmem_shrinker->lru_evicted, &shmem_shrinker->lock); -+ drm_gem_lru_init(&shmem_shrinker->lru_pinned, &shmem_shrinker->lock); -+ -+ shrinker_register(shrinker); -+ -+ return 0; -+} -+ -+static void drm_gem_shmem_shrinker_release(struct drm_device *dev, -+ struct drm_gem_shmem *shmem_mm) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ -+ shrinker_free(shmem_shrinker->shrinker); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_evictable.list)); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_evicted.list)); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_pinned.list)); -+ mutex_destroy(&shmem_shrinker->lock); -+} -+ -+static int drm_gem_shmem_init(struct drm_device *dev) -+{ -+ int err; -+ -+ if (drm_WARN_ON(dev, dev->shmem_mm)) -+ return -EBUSY; -+ -+ dev->shmem_mm = kzalloc(sizeof(*dev->shmem_mm), GFP_KERNEL); -+ if (!dev->shmem_mm) -+ return -ENOMEM; -+ -+ err = drm_gem_shmem_shrinker_init(dev->shmem_mm, dev->unique); -+ if (err) -+ goto free_gem_shmem; -+ -+ return 0; -+ -+free_gem_shmem: -+ kfree(dev->shmem_mm); -+ dev->shmem_mm = NULL; -+ -+ return err; -+} -+ -+static void drm_gem_shmem_release(struct drm_device *dev, void *ptr) -+{ -+ struct drm_gem_shmem *shmem_mm = dev->shmem_mm; -+ -+ drm_gem_shmem_shrinker_release(dev, shmem_mm); -+ dev->shmem_mm = NULL; -+ kfree(shmem_mm); -+} -+ -+/** -+ * drmm_gem_shmem_init() - Initialize drm-shmem internals -+ * @dev: DRM device -+ * -+ * Cleanup is automatically managed as part of DRM device releasing. -+ * Calling this function multiple times will result in a error. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+int drmm_gem_shmem_init(struct drm_device *dev) -+{ -+ int err; -+ -+ err = drm_gem_shmem_init(dev); -+ if (err) -+ return err; -+ -+ err = drmm_add_action_or_reset(dev, drm_gem_shmem_release, NULL); -+ if (err) -+ return err; -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(drmm_gem_shmem_init); -+ - MODULE_DESCRIPTION("DRM SHMEM memory-management helpers"); - MODULE_IMPORT_NS(DMA_BUF); - MODULE_LICENSE("GPL v2"); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index 7edfc12f7c1f..8c26b7e41b95 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -99,8 +99,7 @@ static void panfrost_gem_mapping_release(struct kref *kref) - * time, and heap BOs may have acquired pages if the fault handler - * was called, in which case bo->sgts should be non-NULL. - */ -- if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts) && -- bo->base.madv >= 0) { -+ if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts)) { - drm_gem_shmem_put_pages(&bo->base); - bo->sgts = NULL; - } -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index d4fb0854cf2f..7b4deba803ed 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -15,6 +15,13 @@ - #include "panfrost_gem.h" - #include "panfrost_mmu.h" - -+static bool panfrost_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) -+{ -+ return (shmem->madv > 0) && -+ !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -+ !shmem->base.dma_buf && !shmem->base.import_attach; -+} -+ - static unsigned long - panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) - { -@@ -26,7 +33,7 @@ panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc - return 0; - - list_for_each_entry(shmem, &pfdev->shrinker_list, madv_list) { -- if (drm_gem_shmem_is_purgeable(shmem)) -+ if (panfrost_gem_shmem_is_purgeable(shmem)) - count += shmem->base.size >> PAGE_SHIFT; - } - -@@ -53,7 +60,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - /* BO might have become unpurgeable if the last pages_use_count ref - * was dropped, but the BO hasn't been destroyed yet. - */ -- if (!drm_gem_shmem_is_purgeable(shmem)) -+ if (!panfrost_gem_shmem_is_purgeable(shmem)) - goto unlock_mappings; - - panfrost_gem_teardown_mappings_locked(bo); -@@ -80,7 +87,7 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) - list_for_each_entry_safe(shmem, tmp, &pfdev->shrinker_list, madv_list) { - if (freed >= sc->nr_to_scan) - break; -- if (drm_gem_shmem_is_purgeable(shmem) && -+ if (panfrost_gem_shmem_is_purgeable(shmem) && - panfrost_gem_purge(&shmem->base)) { - freed += shmem->base.size >> PAGE_SHIFT; - list_del_init(&shmem->madv_list); -diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h -index 63767cf24371..6e729e716505 100644 ---- a/include/drm/drm_device.h -+++ b/include/drm/drm_device.h -@@ -15,6 +15,7 @@ struct drm_vblank_crtc; - struct drm_vma_offset_manager; - struct drm_vram_mm; - struct drm_fb_helper; -+struct drm_gem_shmem_shrinker; - - struct inode; - -@@ -289,8 +290,13 @@ struct drm_device { - /** @vma_offset_manager: GEM information */ - struct drm_vma_offset_manager *vma_offset_manager; - -- /** @vram_mm: VRAM MM memory manager */ -- struct drm_vram_mm *vram_mm; -+ union { -+ /** @vram_mm: VRAM MM memory manager */ -+ struct drm_vram_mm *vram_mm; -+ -+ /** @shmem_mm: SHMEM GEM memory manager */ -+ struct drm_gem_shmem *shmem_mm; -+ }; - - /** - * @switch_power_state: -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 525480488451..df97c11fc99a 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -6,6 +6,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -13,6 +14,7 @@ - #include - - struct dma_buf_attachment; -+struct drm_device; - struct drm_mode_create_dumb; - struct drm_printer; - struct sg_table; -@@ -54,8 +56,8 @@ struct drm_gem_shmem_object { - * @madv: State for madvise - * - * 0 is active/inuse. -+ * 1 is not-needed/can-be-purged - * A negative value is the object is purged. -- * Positive values are driver specific and not used by the helpers. - */ - int madv; - -@@ -102,6 +104,14 @@ struct drm_gem_shmem_object { - * @map_wc: map object write-combined (instead of using shmem defaults). - */ - bool map_wc : 1; -+ -+ /** -+ * @evicted: True if shmem pages are evicted by the memory shrinker. -+ * Used internally by memory shrinker. The evicted pages can be -+ * moved back to memory using drm_gem_shmem_swapin_locked(), unlike -+ * the purged pages (madv < 0) that are destroyed permanently. -+ */ -+ bool evicted : 1; - }; - - #define to_drm_gem_shmem_obj(obj) \ -@@ -122,14 +132,19 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma); - - int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); -+int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv); - - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { -- return (shmem->madv > 0) && -- !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -+ return (shmem->madv > 0) && shmem->base.funcs->evict && -+ refcount_read(&shmem->pages_use_count) && -+ !refcount_read(&shmem->pages_pin_count) && - !shmem->base.dma_buf && !shmem->base.import_attach; - } - -+int drm_gem_shmem_swapin_locked(struct drm_gem_shmem_object *shmem); -+ -+void drm_gem_shmem_evict_locked(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); -@@ -273,6 +288,53 @@ static inline int drm_gem_shmem_object_mmap(struct drm_gem_object *obj, struct v - return drm_gem_shmem_mmap(shmem, vma); - } - -+/** -+ * drm_gem_shmem_object_madvise - unlocked GEM object function for drm_gem_shmem_madvise_locked() -+ * @obj: GEM object -+ * @madv: Madvise value -+ * -+ * This function wraps drm_gem_shmem_madvise_locked(), providing unlocked variant. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+static inline int drm_gem_shmem_object_madvise(struct drm_gem_object *obj, int madv) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ -+ return drm_gem_shmem_madvise(shmem, madv); -+} -+ -+/** -+ * struct drm_gem_shmem_shrinker - Memory shrinker of GEM shmem memory manager -+ */ -+struct drm_gem_shmem_shrinker { -+ /** @lock: Protects @lru_* */ -+ struct mutex lock; -+ -+ /** @shrinker: Shrinker for purging shmem GEM objects */ -+ struct shrinker *shrinker; -+ -+ /** @lru_pinned: List of pinned shmem GEM objects */ -+ struct drm_gem_lru lru_pinned; -+ -+ /** @lru_evictable: List of shmem GEM objects to be evicted */ -+ struct drm_gem_lru lru_evictable; -+ -+ /** @lru_evicted: List of evicted shmem GEM objects */ -+ struct drm_gem_lru lru_evicted; -+}; -+ -+/** -+ * struct drm_gem_shmem - GEM shmem memory manager -+ */ -+struct drm_gem_shmem { -+ /** @shrinker: GEM shmem shrinker */ -+ struct drm_gem_shmem_shrinker shrinker; -+}; -+ -+int drmm_gem_shmem_init(struct drm_device *dev); -+ - /* - * Driver ops - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (21 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko - ` (6 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Export drm_gem_shmem_get_pages_sgt_locked() that will be used by virtio-gpu -shrinker during GEM swap-in operation done under the held reservation lock. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 22 +++++++++++++++++++++- - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 22 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 59cebd1e35af..8fd7851c088b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -875,12 +875,31 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_get_sg_table); - --static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem) -+/** -+ * drm_gem_shmem_get_pages_sgt_locked - Provide a scatter/gather table of pinned -+ * pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This is a locked version of @drm_gem_shmem_get_sg_table that exports a -+ * scatter/gather table suitable for PRIME usage by calling the standard -+ * DMA mapping API. -+ * -+ * Drivers must hold GEM's reservation lock when using this function. -+ * -+ * Drivers who need to acquire an scatter/gather table for objects need to call -+ * drm_gem_shmem_get_pages_sgt() instead. -+ * -+ * Returns: -+ * A pointer to the scatter/gather table of pinned pages or error pointer on failure. -+ */ -+struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - int ret; - struct sg_table *sgt; - -+ dma_resv_assert_held(shmem->base.resv); -+ - if (shmem->sgt) - return shmem->sgt; - -@@ -904,6 +923,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - kfree(sgt); - return ERR_PTR(ret); - } -+EXPORT_SYMBOL_GPL(drm_gem_shmem_get_pages_sgt_locked); - - /** - * drm_gem_shmem_get_pages_sgt - Pin pages, dma map them, and return a -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index df97c11fc99a..167f00f089de 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -149,6 +149,7 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem); -+struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem); - - void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - struct drm_printer *p, unsigned int indent); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (22 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko - ` (5 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -SGT isn't refcounted. Once SGT pointer has been obtained, it remains the -same for both locked and unlocked get_pages_sgt(). Return cached SGT -directly without taking a potentially expensive lock. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 8fd7851c088b..e6e6e693ab95 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -962,6 +962,18 @@ struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem) - drm_WARN_ON(obj->dev, drm_gem_shmem_is_purgeable(shmem))) - return ERR_PTR(-EBUSY); - -+ /* -+ * Drivers that use shrinker should take into account that shrinker -+ * may relocate BO, thus invalidating the returned SGT pointer. -+ * Such drivers should pin GEM while they use SGT. -+ * -+ * Drivers that don't use shrinker should take into account that -+ * SGT is released together with the GEM pages. Pages should be kept -+ * alive while SGT is used. -+ */ -+ if (shmem->sgt) -+ return shmem->sgt; -+ - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) - return ERR_PTR(ret); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (23 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko - ` (4 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Don't free shmem object if it has pages that are in use at the time of -the GEM's freeing if DRM driver doesn't manage GEM/pages lifetime properly. -This prevents memory corruption due to the use-after-free bug in exchange -to leaking GEM. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index e6e6e693ab95..0d95d723b90d 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -205,9 +205,15 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (obj->import_attach) - drm_prime_gem_destroy(obj, shmem->sgt); - -- drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -+ /* -+ * Prevent memory corruption caused by the use-after-free bug in a -+ * case where shmem user erroneously holds reference to pages while -+ * GEM is freed by leaking the GEM. -+ */ -+ if (drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)) || -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)) || -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count))) -+ return; - - drm_gem_object_release(obj); - kfree(shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (24 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko - ` (3 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Turn sanity warnings about DRM-SHMEM API misuse into a error conditions -for cases where imported GEM is used when it shouldn't be used. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 0d95d723b90d..7d2fe12bd793 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -409,7 +409,8 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - struct drm_gem_object *obj = &shmem->base; - int ret; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return -EINVAL; - - if (refcount_inc_not_zero(&shmem->pages_pin_count)) - return 0; -@@ -872,7 +873,8 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return ERR_PTR(-EINVAL); - - if (drm_WARN_ON(obj->dev, !shmem->pages)) - return ERR_PTR(-ENOMEM); -@@ -909,7 +911,8 @@ struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object - if (shmem->sgt) - return shmem->sgt; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return ERR_PTR(-EINVAL); - - sgt = drm_gem_shmem_get_sg_table(shmem); - if (IS_ERR(sgt)) --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (25 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko - ` (2 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare to addition of memory shrinker support by pinning display -framebuffer BO pages in memory while they are in use by display on host. -Shrinker is free to relocate framebuffer BO pages if it doesn't know that -pages are in use, thus pin the pages to disallow shrinker to move them. - -Acked-by: Gerd Hoffmann -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ - drivers/gpu/drm/virtio/virtgpu_gem.c | 19 +++++++++++++++++++ - drivers/gpu/drm/virtio/virtgpu_plane.c | 17 +++++++++++++++-- - 3 files changed, 36 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index bb7d86a0c6a1..83d1e4622292 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -318,6 +318,8 @@ void virtio_gpu_array_put_free(struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_work(struct work_struct *work); -+int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); -+void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - - /* virtgpu_vq.c */ - int virtio_gpu_alloc_vbufs(struct virtio_gpu_device *vgdev); -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 7db48d17ee3a..625c05d625bf 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -294,3 +294,22 @@ void virtio_gpu_array_put_free_work(struct work_struct *work) - } - spin_unlock(&vgdev->obj_free_lock); - } -+ -+int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) -+{ -+ int err; -+ -+ if (virtio_gpu_is_shmem(bo)) { -+ err = drm_gem_shmem_pin(&bo->base); -+ if (err) -+ return err; -+ } -+ -+ return 0; -+} -+ -+void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo) -+{ -+ if (virtio_gpu_is_shmem(bo)) -+ drm_gem_shmem_unpin(&bo->base); -+} -diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c -index a72a2dbda031..162fb8a44d71 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_plane.c -+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c -@@ -248,20 +248,28 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, - struct virtio_gpu_device *vgdev = dev->dev_private; - struct virtio_gpu_framebuffer *vgfb; - struct virtio_gpu_object *bo; -+ int err; - - if (!new_state->fb) - return 0; - - vgfb = to_virtio_gpu_framebuffer(new_state->fb); - bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]); -- if (!bo || (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob)) -+ -+ err = virtio_gpu_gem_pin(bo); -+ if (err) -+ return err; -+ -+ if (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob) - return 0; - - if (bo->dumb && (plane->state->fb != new_state->fb)) { - vgfb->fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, - 0); -- if (!vgfb->fence) -+ if (!vgfb->fence) { -+ virtio_gpu_gem_unpin(bo); - return -ENOMEM; -+ } - } - - return 0; -@@ -271,15 +279,20 @@ static void virtio_gpu_plane_cleanup_fb(struct drm_plane *plane, - struct drm_plane_state *state) - { - struct virtio_gpu_framebuffer *vgfb; -+ struct virtio_gpu_object *bo; - - if (!state->fb) - return; - - vgfb = to_virtio_gpu_framebuffer(state->fb); -+ bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]); -+ - if (vgfb->fence) { - dma_fence_put(&vgfb->fence->f); - vgfb->fence = NULL; - } -+ -+ virtio_gpu_gem_unpin(bo); - } - - static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (26 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare for addition of memory shrinker support by attaching shmem pages -to host dynamically on first use. Previously the attachment vq command -wasn't fenced and there was no vq kick made in the BO creation code path, -hence the attachment already was happening dynamically, but implicitly. -Making attachment explicitly dynamic will allow to simplify and reuse more -code when shrinker will be added. The virtio_gpu_object_shmem_init() now -works under the held reservation lock, which will be important to have for -shrinker to avoid moving pages while they are in active use by the driver. - -Acked-by: Gerd Hoffmann -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 7 +++ - drivers/gpu/drm/virtio/virtgpu_gem.c | 26 +++++++++ - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 32 +++++++---- - drivers/gpu/drm/virtio/virtgpu_object.c | 73 ++++++++++++++++++++----- - drivers/gpu/drm/virtio/virtgpu_submit.c | 15 ++++- - 5 files changed, 125 insertions(+), 28 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index 83d1e4622292..1837dc7ea9fb 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -92,6 +92,7 @@ struct virtio_gpu_object { - uint32_t hw_res_handle; - bool dumb; - bool created; -+ bool detached; - bool host3d_blob, guest_blob; - uint32_t blob_mem, blob_flags; - -@@ -318,6 +319,8 @@ void virtio_gpu_array_put_free(struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_work(struct work_struct *work); -+int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object_array *objs); - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); - void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - -@@ -458,6 +461,10 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - - bool virtio_gpu_is_shmem(struct virtio_gpu_object *bo); - -+int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo); -+ -+int virtio_gpu_reattach_shmem_object(struct virtio_gpu_object *bo); -+ - int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, - uint32_t *resid); - /* virtgpu_prime.c */ -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 625c05d625bf..97e67064c97e 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -295,6 +295,26 @@ void virtio_gpu_array_put_free_work(struct work_struct *work) - spin_unlock(&vgdev->obj_free_lock); - } - -+int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object_array *objs) -+{ -+ struct virtio_gpu_object *bo; -+ int ret = 0; -+ u32 i; -+ -+ for (i = 0; i < objs->nents; i++) { -+ bo = gem_to_virtio_gpu_obj(objs->objs[i]); -+ -+ if (virtio_gpu_is_shmem(bo) && bo->detached) { -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ if (ret) -+ break; -+ } -+ } -+ -+ return ret; -+} -+ - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - { - int err; -@@ -303,6 +323,12 @@ int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - err = drm_gem_shmem_pin(&bo->base); - if (err) - return err; -+ -+ err = virtio_gpu_reattach_shmem_object(bo); -+ if (err) { -+ drm_gem_shmem_unpin(&bo->base); -+ return err; -+ } - } - - return 0; -diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -index e4f76f315550..c7da22006149 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c -+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -@@ -256,6 +256,10 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, - if (ret != 0) - goto err_put_free; - -+ ret = virtio_gpu_array_prepare(vgdev, objs); -+ if (ret) -+ goto err_unlock; -+ - fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); - if (!fence) { - ret = -ENOMEM; -@@ -298,11 +302,25 @@ static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, - goto err_put_free; - } - -+ ret = virtio_gpu_array_lock_resv(objs); -+ if (ret != 0) -+ goto err_put_free; -+ -+ ret = virtio_gpu_array_prepare(vgdev, objs); -+ if (ret) -+ goto err_unlock; -+ -+ fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); -+ if (!fence) { -+ ret = -ENOMEM; -+ goto err_unlock; -+ } -+ - if (!vgdev->has_virgl_3d) { - virtio_gpu_cmd_transfer_to_host_2d - (vgdev, offset, - args->box.w, args->box.h, args->box.x, args->box.y, -- objs, NULL); -+ objs, fence); - } else { - virtio_gpu_create_context(dev, file); - -@@ -311,23 +329,13 @@ static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, - goto err_put_free; - } - -- ret = virtio_gpu_array_lock_resv(objs); -- if (ret != 0) -- goto err_put_free; -- -- ret = -ENOMEM; -- fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, -- 0); -- if (!fence) -- goto err_unlock; -- - virtio_gpu_cmd_transfer_to_host_3d - (vgdev, - vfpriv ? vfpriv->ctx_id : 0, offset, args->level, - args->stride, args->layer_stride, &args->box, objs, - fence); -- dma_fence_put(&fence->f); - } -+ dma_fence_put(&fence->f); - virtio_gpu_notify(vgdev); - return 0; - -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index e58528c562ef..de347aa3b9a8 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -143,7 +143,7 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, - struct sg_table *pages; - int si; - -- pages = drm_gem_shmem_get_pages_sgt(&bo->base); -+ pages = drm_gem_shmem_get_pages_sgt_locked(&bo->base); - if (IS_ERR(pages)) - return PTR_ERR(pages); - -@@ -177,6 +177,40 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, - return 0; - } - -+int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ struct virtio_gpu_mem_entry *ents; -+ unsigned int nents; -+ int err; -+ -+ if (!bo->detached) -+ return 0; -+ -+ err = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -+ if (err) -+ return err; -+ -+ virtio_gpu_object_attach(vgdev, bo, ents, nents); -+ -+ bo->detached = false; -+ -+ return 0; -+} -+ -+int virtio_gpu_reattach_shmem_object(struct virtio_gpu_object *bo) -+{ -+ int ret; -+ -+ ret = dma_resv_lock_interruptible(bo->base.base.resv, NULL); -+ if (ret) -+ return ret; -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ dma_resv_unlock(bo->base.base.resv); -+ -+ return ret; -+} -+ - int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_params *params, - struct virtio_gpu_object **bo_ptr, -@@ -207,45 +241,56 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - - bo->dumb = params->dumb; - -- ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -- if (ret != 0) -- goto err_put_id; -+ if (bo->blob_mem == VIRTGPU_BLOB_MEM_GUEST) -+ bo->guest_blob = true; - - if (fence) { - ret = -ENOMEM; - objs = virtio_gpu_array_alloc(1); - if (!objs) -- goto err_free_entry; -+ goto err_put_id; - virtio_gpu_array_add_obj(objs, &bo->base.base); - - ret = virtio_gpu_array_lock_resv(objs); - if (ret != 0) - goto err_put_objs; -+ } else { -+ ret = dma_resv_lock(bo->base.base.resv, NULL); -+ if (ret) -+ goto err_put_id; - } - - if (params->blob) { -- if (params->blob_mem == VIRTGPU_BLOB_MEM_GUEST) -- bo->guest_blob = true; -+ ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -+ if (ret) -+ goto err_unlock_objs; -+ } else { -+ bo->detached = true; -+ } - -+ if (params->blob) - virtio_gpu_cmd_resource_create_blob(vgdev, bo, params, - ents, nents); -- } else if (params->virgl) { -+ else if (params->virgl) - virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, - objs, fence); -- virtio_gpu_object_attach(vgdev, bo, ents, nents); -- } else { -+ else - virtio_gpu_cmd_create_resource(vgdev, bo, params, - objs, fence); -- virtio_gpu_object_attach(vgdev, bo, ents, nents); -- } -+ -+ if (!fence) -+ dma_resv_unlock(bo->base.base.resv); - - *bo_ptr = bo; - return 0; - -+err_unlock_objs: -+ if (fence) -+ virtio_gpu_array_unlock_resv(objs); -+ else -+ dma_resv_unlock(bo->base.base.resv); - err_put_objs: - virtio_gpu_array_put_free(objs); --err_free_entry: -- kvfree(ents); - err_put_id: - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); - err_put_pages: -diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c -index 5c514946bbad..6e4ef2593e8f 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_submit.c -+++ b/drivers/gpu/drm/virtio/virtgpu_submit.c -@@ -464,8 +464,19 @@ static void virtio_gpu_install_out_fence_fd(struct virtio_gpu_submit *submit) - - static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) - { -- if (submit->buflist) -- return virtio_gpu_array_lock_resv(submit->buflist); -+ int err; -+ -+ if (submit->buflist) { -+ err = virtio_gpu_array_lock_resv(submit->buflist); -+ if (err) -+ return err; -+ -+ err = virtio_gpu_array_prepare(submit->vgdev, submit->buflist); -+ if (err) { -+ virtio_gpu_array_unlock_resv(submit->buflist); -+ return err; -+ } -+ } - - return 0; - } --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 29/30] drm/virtio: Support shmem shrinking - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (27 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Support generic drm-shmem memory shrinker and add new madvise IOCTL to -the VirtIO-GPU driver. BO cache manager of Mesa driver will mark BOs as -"don't need" using the new IOCTL to let shrinker purge the marked BOs on -OOM, the shrinker will also evict unpurgeable shmem BOs from memory if -guest supports SWAP file or partition. - -Link: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15278 -Acked-by: Gerd Hoffmann -Signed-off-by: Daniel Almeida -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 13 +++++- - drivers/gpu/drm/virtio/virtgpu_gem.c | 48 +++++++++++++++++-- - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 25 ++++++++++ - drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++ - drivers/gpu/drm/virtio/virtgpu_object.c | 61 +++++++++++++++++++++++++ - drivers/gpu/drm/virtio/virtgpu_vq.c | 40 ++++++++++++++++ - include/uapi/drm/virtgpu_drm.h | 14 ++++++ - 7 files changed, 204 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index 1837dc7ea9fb..37188c00e161 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -283,7 +283,7 @@ struct virtio_gpu_fpriv { - }; - - /* virtgpu_ioctl.c */ --#define DRM_VIRTIO_NUM_IOCTLS 12 -+#define DRM_VIRTIO_NUM_IOCTLS 13 - extern struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS]; - void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file); - -@@ -321,6 +321,8 @@ void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - void virtio_gpu_array_put_free_work(struct work_struct *work); - int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); -+int virtio_gpu_gem_host_mem_release(struct virtio_gpu_object *bo); -+int virtio_gpu_gem_madvise(struct virtio_gpu_object *obj, int madv); - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); - void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - -@@ -334,6 +336,8 @@ void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev, - struct virtio_gpu_fence *fence); - void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object *bo); -+int virtio_gpu_cmd_release_resource(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *bo); - void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev, - uint64_t offset, - uint32_t width, uint32_t height, -@@ -354,6 +358,9 @@ void virtio_gpu_object_attach(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object *obj, - struct virtio_gpu_mem_entry *ents, - unsigned int nents); -+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *obj, -+ struct virtio_gpu_fence *fence); - void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev, - struct virtio_gpu_output *output); - int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev); -@@ -497,4 +504,8 @@ void virtio_gpu_vram_unmap_dma_buf(struct device *dev, - int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, - struct drm_file *file); - -+/* virtgpu_gem_shrinker.c */ -+int virtio_gpu_gem_shrinker_init(struct virtio_gpu_device *vgdev); -+void virtio_gpu_gem_shrinker_fini(struct virtio_gpu_device *vgdev); -+ - #endif -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 97e67064c97e..68d27ae582ba 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -147,10 +147,20 @@ void virtio_gpu_gem_object_close(struct drm_gem_object *obj, - struct virtio_gpu_device *vgdev = obj->dev->dev_private; - struct virtio_gpu_fpriv *vfpriv = file->driver_priv; - struct virtio_gpu_object_array *objs; -+ struct virtio_gpu_object *bo; - - if (!vgdev->has_virgl_3d) - return; - -+ bo = gem_to_virtio_gpu_obj(obj); -+ -+ /* -+ * Purged BO was already detached and released, the resource ID -+ * is invalid by now. -+ */ -+ if (!virtio_gpu_gem_madvise(bo, VIRTGPU_MADV_WILLNEED)) -+ return; -+ - objs = virtio_gpu_array_alloc(1); - if (!objs) - return; -@@ -305,16 +315,46 @@ int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, - for (i = 0; i < objs->nents; i++) { - bo = gem_to_virtio_gpu_obj(objs->objs[i]); - -- if (virtio_gpu_is_shmem(bo) && bo->detached) { -- ret = virtio_gpu_reattach_shmem_object_locked(bo); -- if (ret) -- break; -+ if (virtio_gpu_is_shmem(bo)) { -+ if (bo->base.madv) -+ return -EINVAL; -+ -+ if (bo->detached) { -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ if (ret) -+ break; -+ } - } - } - - return ret; - } - -+int virtio_gpu_gem_madvise(struct virtio_gpu_object *bo, int madv) -+{ -+ if (virtio_gpu_is_shmem(bo)) -+ return drm_gem_shmem_object_madvise(&bo->base.base, madv); -+ -+ return 1; -+} -+ -+int virtio_gpu_gem_host_mem_release(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ int err; -+ -+ if (bo->created) { -+ err = virtio_gpu_cmd_release_resource(vgdev, bo); -+ if (err) -+ return err; -+ -+ virtio_gpu_notify(vgdev); -+ bo->created = false; -+ } -+ -+ return 0; -+} -+ - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - { - int err; -diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -index c7da22006149..a42799146090 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c -+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -@@ -701,6 +701,28 @@ static int virtio_gpu_context_init_ioctl(struct drm_device *dev, - return ret; - } - -+static int virtio_gpu_madvise_ioctl(struct drm_device *dev, -+ void *data, -+ struct drm_file *file) -+{ -+ struct drm_virtgpu_madvise *args = data; -+ struct virtio_gpu_object *bo; -+ struct drm_gem_object *obj; -+ -+ if (args->madv > VIRTGPU_MADV_DONTNEED) -+ return -EOPNOTSUPP; -+ -+ obj = drm_gem_object_lookup(file, args->bo_handle); -+ if (!obj) -+ return -ENOENT; -+ -+ bo = gem_to_virtio_gpu_obj(obj); -+ args->retained = virtio_gpu_gem_madvise(bo, args->madv); -+ drm_gem_object_put(obj); -+ -+ return 0; -+} -+ - struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS] = { - DRM_IOCTL_DEF_DRV(VIRTGPU_MAP, virtio_gpu_map_ioctl, - DRM_RENDER_ALLOW), -@@ -740,4 +762,7 @@ struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS] = { - - DRM_IOCTL_DEF_DRV(VIRTGPU_CONTEXT_INIT, virtio_gpu_context_init_ioctl, - DRM_RENDER_ALLOW), -+ -+ DRM_IOCTL_DEF_DRV(VIRTGPU_MADVISE, virtio_gpu_madvise_ioctl, -+ DRM_RENDER_ALLOW), - }; -diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c -index 5a3b5aaed1f3..43e237082cec 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_kms.c -+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c -@@ -245,6 +245,12 @@ int virtio_gpu_init(struct virtio_device *vdev, struct drm_device *dev) - goto err_scanouts; - } - -+ ret = drmm_gem_shmem_init(dev); -+ if (ret) { -+ DRM_ERROR("shmem init failed\n"); -+ goto err_modeset; -+ } -+ - virtio_device_ready(vgdev->vdev); - - if (num_capsets) -@@ -259,6 +265,8 @@ int virtio_gpu_init(struct virtio_device *vdev, struct drm_device *dev) - } - return 0; - -+err_modeset: -+ virtio_gpu_modeset_fini(vgdev); - err_scanouts: - virtio_gpu_free_vbufs(vgdev); - err_vbufs: -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index de347aa3b9a8..86888c1ae5d4 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -98,6 +98,60 @@ static void virtio_gpu_free_object(struct drm_gem_object *obj) - virtio_gpu_cleanup_object(bo); - } - -+static int virtio_gpu_detach_object_fenced(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ struct virtio_gpu_fence *fence; -+ -+ if (bo->detached) -+ return 0; -+ -+ fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); -+ if (!fence) -+ return -ENOMEM; -+ -+ virtio_gpu_object_detach(vgdev, bo, fence); -+ virtio_gpu_notify(vgdev); -+ -+ dma_fence_wait(&fence->f, false); -+ dma_fence_put(&fence->f); -+ -+ bo->detached = true; -+ -+ return 0; -+} -+ -+static int virtio_gpu_shmem_evict(struct drm_gem_object *obj) -+{ -+ struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); -+ int err; -+ -+ /* blob is not movable, it's impossible to detach it from host */ -+ if (bo->blob_mem) -+ return -EBUSY; -+ -+ /* -+ * At first tell host to stop using guest's memory to ensure that -+ * host won't touch the released guest's memory once it's gone. -+ */ -+ err = virtio_gpu_detach_object_fenced(bo); -+ if (err) -+ return err; -+ -+ if (drm_gem_shmem_is_purgeable(&bo->base)) { -+ err = virtio_gpu_gem_host_mem_release(bo); -+ if (err) -+ return err; -+ -+ drm_gem_shmem_purge_locked(&bo->base); -+ } else { -+ bo->base.pages_mark_dirty_on_put = 1; -+ drm_gem_shmem_evict_locked(&bo->base); -+ } -+ -+ return 0; -+} -+ - static const struct drm_gem_object_funcs virtio_gpu_shmem_funcs = { - .free = virtio_gpu_free_object, - .open = virtio_gpu_gem_object_open, -@@ -111,6 +165,7 @@ static const struct drm_gem_object_funcs virtio_gpu_shmem_funcs = { - .vunmap = drm_gem_shmem_object_vunmap, - .mmap = drm_gem_shmem_object_mmap, - .vm_ops = &drm_gem_shmem_vm_ops, -+ .evict = virtio_gpu_shmem_evict, - }; - - bool virtio_gpu_is_shmem(struct virtio_gpu_object *bo) -@@ -187,6 +242,10 @@ int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo) - if (!bo->detached) - return 0; - -+ err = drm_gem_shmem_swapin_locked(&bo->base); -+ if (err) -+ return err; -+ - err = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); - if (err) - return err; -@@ -240,6 +299,8 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - goto err_put_pages; - - bo->dumb = params->dumb; -+ bo->blob_mem = params->blob_mem; -+ bo->blob_flags = params->blob_flags; - - if (bo->blob_mem == VIRTGPU_BLOB_MEM_GUEST) - bo->guest_blob = true; -diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c -index b1a00c0c25a7..14ab470f413a 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_vq.c -+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c -@@ -545,6 +545,21 @@ void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev, - virtio_gpu_cleanup_object(bo); - } - -+int virtio_gpu_cmd_release_resource(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_resource_unref *cmd_p; -+ struct virtio_gpu_vbuffer *vbuf; -+ -+ cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); -+ memset(cmd_p, 0, sizeof(*cmd_p)); -+ -+ cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_UNREF); -+ cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle); -+ -+ return virtio_gpu_queue_ctrl_buffer(vgdev, vbuf); -+} -+ - void virtio_gpu_cmd_set_scanout(struct virtio_gpu_device *vgdev, - uint32_t scanout_id, uint32_t resource_id, - uint32_t width, uint32_t height, -@@ -645,6 +660,23 @@ virtio_gpu_cmd_resource_attach_backing(struct virtio_gpu_device *vgdev, - virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, fence); - } - -+static void -+virtio_gpu_cmd_resource_detach_backing(struct virtio_gpu_device *vgdev, -+ u32 resource_id, -+ struct virtio_gpu_fence *fence) -+{ -+ struct virtio_gpu_resource_attach_backing *cmd_p; -+ struct virtio_gpu_vbuffer *vbuf; -+ -+ cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); -+ memset(cmd_p, 0, sizeof(*cmd_p)); -+ -+ cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING); -+ cmd_p->resource_id = cpu_to_le32(resource_id); -+ -+ virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, fence); -+} -+ - static void virtio_gpu_cmd_get_display_info_cb(struct virtio_gpu_device *vgdev, - struct virtio_gpu_vbuffer *vbuf) - { -@@ -1107,6 +1139,14 @@ void virtio_gpu_object_attach(struct virtio_gpu_device *vgdev, - ents, nents, NULL); - } - -+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *obj, -+ struct virtio_gpu_fence *fence) -+{ -+ virtio_gpu_cmd_resource_detach_backing(vgdev, obj->hw_res_handle, -+ fence); -+} -+ - void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev, - struct virtio_gpu_output *output) - { -diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h -index c2ce71987e9b..78255060bc9a 100644 ---- a/include/uapi/drm/virtgpu_drm.h -+++ b/include/uapi/drm/virtgpu_drm.h -@@ -48,6 +48,7 @@ extern "C" { - #define DRM_VIRTGPU_GET_CAPS 0x09 - #define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a - #define DRM_VIRTGPU_CONTEXT_INIT 0x0b -+#define DRM_VIRTGPU_MADVISE 0x0c - - #define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 - #define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -@@ -213,6 +214,15 @@ struct drm_virtgpu_context_init { - __u64 ctx_set_params; - }; - -+#define VIRTGPU_MADV_WILLNEED 0 -+#define VIRTGPU_MADV_DONTNEED 1 -+struct drm_virtgpu_madvise { -+ __u32 bo_handle; -+ __u32 retained; /* out, non-zero if BO can be used */ -+ __u32 madv; -+ __u32 pad; -+}; -+ - /* - * Event code that's given when VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK is in - * effect. The event size is sizeof(drm_event), since there is no additional -@@ -263,6 +273,10 @@ struct drm_virtgpu_context_init { - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_CONTEXT_INIT, \ - struct drm_virtgpu_context_init) - -+#define DRM_IOCTL_VIRTGPU_MADVISE \ -+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MADVISE, \ -+ struct drm_virtgpu_madvise) -+ - #if defined(__cplusplus) - } - #endif --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (28 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Replace Panfrost's custom memory shrinker with a common drm-shmem -memory shrinker. - -Co-developed-by: Boris Brezillon -Signed-off-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 4 +- - drivers/gpu/drm/panfrost/Makefile | 1 - - drivers/gpu/drm/panfrost/panfrost_device.h | 4 - - drivers/gpu/drm/panfrost/panfrost_drv.c | 29 ++-- - drivers/gpu/drm/panfrost/panfrost_gem.c | 60 ++++---- - drivers/gpu/drm/panfrost/panfrost_gem.h | 9 -- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 140 ------------------ - drivers/gpu/drm/panfrost/panfrost_job.c | 18 ++- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 24 ++- - include/drm/drm_gem_shmem_helper.h | 7 - - 10 files changed, 83 insertions(+), 213 deletions(-) - delete mode 100644 drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 7d2fe12bd793..56e88378079b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -89,8 +89,6 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private) - if (ret) - goto err_release; - -- INIT_LIST_HEAD(&shmem->madv_list); -- - if (!private) { - /* - * Our buffers are kept pinned, so allocating them -@@ -619,6 +617,8 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ drm_WARN_ON_ONCE(obj->dev, !drm_gem_shmem_is_purgeable(shmem)); -+ - drm_gem_shmem_shrinker_put_pages_locked(shmem); - drm_gem_free_mmap_offset(obj); - -diff --git a/drivers/gpu/drm/panfrost/Makefile b/drivers/gpu/drm/panfrost/Makefile -index 2c01c1e7523e..f2cb1ab0a32d 100644 ---- a/drivers/gpu/drm/panfrost/Makefile -+++ b/drivers/gpu/drm/panfrost/Makefile -@@ -5,7 +5,6 @@ panfrost-y := \ - panfrost_device.o \ - panfrost_devfreq.o \ - panfrost_gem.o \ -- panfrost_gem_shrinker.o \ - panfrost_gpu.o \ - panfrost_job.o \ - panfrost_mmu.o \ -diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h -index 62f7e3527385..cea6df9cd650 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_device.h -+++ b/drivers/gpu/drm/panfrost/panfrost_device.h -@@ -140,10 +140,6 @@ struct panfrost_device { - atomic_t pending; - } reset; - -- struct mutex shrinker_lock; -- struct list_head shrinker_list; -- struct shrinker *shrinker; -- - struct panfrost_devfreq pfdevfreq; - - struct { -diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c -index a15d62f19afb..5c730d15a24d 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_drv.c -+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c -@@ -171,7 +171,6 @@ panfrost_lookup_bos(struct drm_device *dev, - break; - } - -- atomic_inc(&bo->gpu_usecount); - job->mappings[i] = mapping; - } - -@@ -397,7 +396,6 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - { - struct panfrost_file_priv *priv = file_priv->driver_priv; - struct drm_panfrost_madvise *args = data; -- struct panfrost_device *pfdev = dev->dev_private; - struct drm_gem_object *gem_obj; - struct panfrost_gem_object *bo; - int ret = 0; -@@ -410,11 +408,15 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - - bo = to_panfrost_bo(gem_obj); - -+ if (bo->is_heap) { -+ args->retained = 1; -+ goto out_put_object; -+ } -+ - ret = dma_resv_lock_interruptible(bo->base.base.resv, NULL); - if (ret) - goto out_put_object; - -- mutex_lock(&pfdev->shrinker_lock); - mutex_lock(&bo->mappings.lock); - if (args->madv == PANFROST_MADV_DONTNEED) { - struct panfrost_gem_mapping *first; -@@ -440,17 +442,8 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - - args->retained = drm_gem_shmem_madvise_locked(&bo->base, args->madv); - -- if (args->retained) { -- if (args->madv == PANFROST_MADV_DONTNEED) -- list_move_tail(&bo->base.madv_list, -- &pfdev->shrinker_list); -- else if (args->madv == PANFROST_MADV_WILLNEED) -- list_del_init(&bo->base.madv_list); -- } -- - out_unlock_mappings: - mutex_unlock(&bo->mappings.lock); -- mutex_unlock(&pfdev->shrinker_lock); - dma_resv_unlock(bo->base.base.resv); - out_put_object: - drm_gem_object_put(gem_obj); -@@ -635,9 +628,6 @@ static int panfrost_probe(struct platform_device *pdev) - ddev->dev_private = pfdev; - pfdev->ddev = ddev; - -- mutex_init(&pfdev->shrinker_lock); -- INIT_LIST_HEAD(&pfdev->shrinker_list); -- - err = panfrost_device_init(pfdev); - if (err) { - if (err != -EPROBE_DEFER) -@@ -659,13 +649,13 @@ static int panfrost_probe(struct platform_device *pdev) - if (err < 0) - goto err_out1; - -- err = panfrost_gem_shrinker_init(ddev); -- if (err) -- goto err_out2; -+ err = drmm_gem_shmem_init(ddev); -+ if (err < 0) -+ goto err_unregister_dev; - - return 0; - --err_out2: -+err_unregister_dev: - drm_dev_unregister(ddev); - err_out1: - pm_runtime_disable(pfdev->dev); -@@ -682,7 +672,6 @@ static void panfrost_remove(struct platform_device *pdev) - struct drm_device *ddev = pfdev->ddev; - - drm_dev_unregister(ddev); -- panfrost_gem_shrinker_cleanup(ddev); - - pm_runtime_get_sync(pfdev->dev); - pm_runtime_disable(pfdev->dev); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index 8c26b7e41b95..05eb5a89c4ed 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -17,17 +17,6 @@ - static void panfrost_gem_free_object(struct drm_gem_object *obj) - { - struct panfrost_gem_object *bo = to_panfrost_bo(obj); -- struct panfrost_device *pfdev = obj->dev->dev_private; -- -- /* -- * Make sure the BO is no longer inserted in the shrinker list before -- * taking care of the destruction itself. If we don't do that we have a -- * race condition between this function and what's done in -- * panfrost_gem_shrinker_scan(). -- */ -- mutex_lock(&pfdev->shrinker_lock); -- list_del_init(&bo->base.madv_list); -- mutex_unlock(&pfdev->shrinker_lock); - - /* - * If we still have mappings attached to the BO, there's a problem in -@@ -57,26 +46,23 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, - return mapping; - } - --static void --panfrost_gem_teardown_mapping(struct panfrost_gem_mapping *mapping) -+static void panfrost_gem_mapping_release(struct kref *kref) - { -+ struct panfrost_gem_mapping *mapping = -+ container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_object *bo = mapping->obj; -+ struct panfrost_device *pfdev = bo->base.base.dev->dev_private; -+ -+ /* Shrinker may purge the mapping at the same time. */ -+ dma_resv_lock(mapping->obj->base.base.resv, NULL); - if (mapping->active) - panfrost_mmu_unmap(mapping); -+ dma_resv_unlock(mapping->obj->base.base.resv); - - spin_lock(&mapping->mmu->mm_lock); - if (drm_mm_node_allocated(&mapping->mmnode)) - drm_mm_remove_node(&mapping->mmnode); - spin_unlock(&mapping->mmu->mm_lock); --} -- --static void panfrost_gem_mapping_release(struct kref *kref) --{ -- struct panfrost_gem_mapping *mapping = -- container_of(kref, struct panfrost_gem_mapping, refcount); -- struct panfrost_gem_object *bo = mapping->obj; -- struct panfrost_device *pfdev = bo->base.base.dev->dev_private; -- -- panfrost_gem_teardown_mapping(mapping); - - /* On heap BOs, release the sgts created in the fault handler path. */ - if (bo->sgts) { -@@ -117,12 +103,14 @@ void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping) - kref_put(&mapping->refcount, panfrost_gem_mapping_release); - } - --void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo) -+void panfrost_gem_evict_mappings_locked(struct panfrost_gem_object *bo) - { - struct panfrost_gem_mapping *mapping; - -- list_for_each_entry(mapping, &bo->mappings.list, node) -- panfrost_gem_teardown_mapping(mapping); -+ list_for_each_entry(mapping, &bo->mappings.list, node) { -+ if (mapping->active) -+ panfrost_mmu_unmap(mapping); -+ } - } - - int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv) -@@ -251,6 +239,25 @@ static size_t panfrost_gem_rss(struct drm_gem_object *obj) - return 0; - } - -+static int panfrost_shmem_evict(struct drm_gem_object *obj) -+{ -+ struct panfrost_gem_object *bo = to_panfrost_bo(obj); -+ -+ if (!drm_gem_shmem_is_purgeable(&bo->base)) -+ return -EBUSY; -+ -+ if (!mutex_trylock(&bo->mappings.lock)) -+ return -EBUSY; -+ -+ panfrost_gem_evict_mappings_locked(bo); -+ -+ drm_gem_shmem_purge_locked(&bo->base); -+ -+ mutex_unlock(&bo->mappings.lock); -+ -+ return 0; -+} -+ - static const struct drm_gem_object_funcs panfrost_gem_funcs = { - .free = panfrost_gem_free_object, - .open = panfrost_gem_open, -@@ -265,6 +272,7 @@ static const struct drm_gem_object_funcs panfrost_gem_funcs = { - .status = panfrost_gem_status, - .rss = panfrost_gem_rss, - .vm_ops = &drm_gem_shmem_vm_ops, -+ .evict = panfrost_shmem_evict, - }; - - /** -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h -index 7516b7ecf7fe..8ddc2d310d29 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.h -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h -@@ -30,12 +30,6 @@ struct panfrost_gem_object { - struct mutex lock; - } mappings; - -- /* -- * Count the number of jobs referencing this BO so we don't let the -- * shrinker reclaim this object prematurely. -- */ -- atomic_t gpu_usecount; -- - /* - * Object chunk size currently mapped onto physical memory - */ -@@ -86,7 +80,4 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, - void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); - void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); - --int panfrost_gem_shrinker_init(struct drm_device *dev); --void panfrost_gem_shrinker_cleanup(struct drm_device *dev); -- - #endif /* __PANFROST_GEM_H__ */ -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -deleted file mode 100644 -index 7b4deba803ed..000000000000 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ /dev/null -@@ -1,140 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (C) 2019 Arm Ltd. -- * -- * Based on msm_gem_freedreno.c: -- * Copyright (C) 2016 Red Hat -- * Author: Rob Clark -- */ -- --#include -- --#include --#include -- --#include "panfrost_device.h" --#include "panfrost_gem.h" --#include "panfrost_mmu.h" -- --static bool panfrost_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) --{ -- return (shmem->madv > 0) && -- !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -- !shmem->base.dma_buf && !shmem->base.import_attach; --} -- --static unsigned long --panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) --{ -- struct panfrost_device *pfdev = shrinker->private_data; -- struct drm_gem_shmem_object *shmem; -- unsigned long count = 0; -- -- if (!mutex_trylock(&pfdev->shrinker_lock)) -- return 0; -- -- list_for_each_entry(shmem, &pfdev->shrinker_list, madv_list) { -- if (panfrost_gem_shmem_is_purgeable(shmem)) -- count += shmem->base.size >> PAGE_SHIFT; -- } -- -- mutex_unlock(&pfdev->shrinker_lock); -- -- return count; --} -- --static bool panfrost_gem_purge(struct drm_gem_object *obj) --{ -- struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -- struct panfrost_gem_object *bo = to_panfrost_bo(obj); -- bool ret = false; -- -- if (atomic_read(&bo->gpu_usecount)) -- return false; -- -- if (!mutex_trylock(&bo->mappings.lock)) -- return false; -- -- if (!dma_resv_trylock(shmem->base.resv)) -- goto unlock_mappings; -- -- /* BO might have become unpurgeable if the last pages_use_count ref -- * was dropped, but the BO hasn't been destroyed yet. -- */ -- if (!panfrost_gem_shmem_is_purgeable(shmem)) -- goto unlock_mappings; -- -- panfrost_gem_teardown_mappings_locked(bo); -- drm_gem_shmem_purge_locked(&bo->base); -- ret = true; -- -- dma_resv_unlock(shmem->base.resv); -- --unlock_mappings: -- mutex_unlock(&bo->mappings.lock); -- return ret; --} -- --static unsigned long --panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) --{ -- struct panfrost_device *pfdev = shrinker->private_data; -- struct drm_gem_shmem_object *shmem, *tmp; -- unsigned long freed = 0; -- -- if (!mutex_trylock(&pfdev->shrinker_lock)) -- return SHRINK_STOP; -- -- list_for_each_entry_safe(shmem, tmp, &pfdev->shrinker_list, madv_list) { -- if (freed >= sc->nr_to_scan) -- break; -- if (panfrost_gem_shmem_is_purgeable(shmem) && -- panfrost_gem_purge(&shmem->base)) { -- freed += shmem->base.size >> PAGE_SHIFT; -- list_del_init(&shmem->madv_list); -- } -- } -- -- mutex_unlock(&pfdev->shrinker_lock); -- -- if (freed > 0) -- pr_info_ratelimited("Purging %lu bytes\n", freed << PAGE_SHIFT); -- -- return freed; --} -- --/** -- * panfrost_gem_shrinker_init - Initialize panfrost shrinker -- * @dev: DRM device -- * -- * This function registers and sets up the panfrost shrinker. -- */ --int panfrost_gem_shrinker_init(struct drm_device *dev) --{ -- struct panfrost_device *pfdev = dev->dev_private; -- -- pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); -- if (!pfdev->shrinker) -- return -ENOMEM; -- -- pfdev->shrinker->count_objects = panfrost_gem_shrinker_count; -- pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan; -- pfdev->shrinker->private_data = pfdev; -- -- shrinker_register(pfdev->shrinker); -- -- return 0; --} -- --/** -- * panfrost_gem_shrinker_cleanup - Clean up panfrost shrinker -- * @dev: DRM device -- * -- * This function unregisters the panfrost shrinker. -- */ --void panfrost_gem_shrinker_cleanup(struct drm_device *dev) --{ -- struct panfrost_device *pfdev = dev->dev_private; -- -- if (pfdev->shrinker) -- shrinker_free(pfdev->shrinker); --} -diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c -index 0c2dbf6ef2a5..9e26cb013191 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_job.c -+++ b/drivers/gpu/drm/panfrost/panfrost_job.c -@@ -289,6 +289,19 @@ static void panfrost_attach_object_fences(struct drm_gem_object **bos, - dma_resv_add_fence(bos[i]->resv, fence, DMA_RESV_USAGE_WRITE); - } - -+static int panfrost_objects_prepare(struct drm_gem_object **bos, int bo_count) -+{ -+ struct panfrost_gem_object *bo; -+ int ret = 0; -+ -+ while (!ret && bo_count--) { -+ bo = to_panfrost_bo(bos[bo_count]); -+ ret = bo->base.madv != PANFROST_MADV_WILLNEED ? -EINVAL : 0; -+ } -+ -+ return ret; -+} -+ - int panfrost_job_push(struct panfrost_job *job) - { - struct panfrost_device *pfdev = job->pfdev; -@@ -300,6 +313,10 @@ int panfrost_job_push(struct panfrost_job *job) - if (ret) - return ret; - -+ ret = panfrost_objects_prepare(job->bos, job->bo_count); -+ if (ret) -+ goto unlock; -+ - mutex_lock(&pfdev->sched_lock); - drm_sched_job_arm(&job->base); - -@@ -341,7 +358,6 @@ static void panfrost_job_cleanup(struct kref *ref) - if (!job->mappings[i]) - break; - -- atomic_dec(&job->mappings[i]->obj->gpu_usecount); - panfrost_gem_mapping_put(job->mappings[i]); - } - kvfree(job->mappings); -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index 4a0b4bf03f1a..22e18f7986e7 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -328,6 +328,7 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mapping) - struct panfrost_device *pfdev = to_panfrost_device(obj->dev); - struct sg_table *sgt; - int prot = IOMMU_READ | IOMMU_WRITE; -+ int ret = 0; - - if (WARN_ON(mapping->active)) - return 0; -@@ -335,15 +336,32 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mapping) - if (bo->noexec) - prot |= IOMMU_NOEXEC; - -+ if (!obj->import_attach) { -+ /* -+ * Don't allow shrinker to move pages while pages are mapped. -+ * It's fine to move pages afterwards because shrinker will -+ * take care of unmapping pages during eviction. -+ */ -+ ret = drm_gem_shmem_pin(shmem); -+ if (ret) -+ return ret; -+ } -+ - sgt = drm_gem_shmem_get_pages_sgt(shmem); -- if (WARN_ON(IS_ERR(sgt))) -- return PTR_ERR(sgt); -+ if (WARN_ON(IS_ERR(sgt))) { -+ ret = PTR_ERR(sgt); -+ goto unpin; -+ } - - mmu_map_sg(pfdev, mapping->mmu, mapping->mmnode.start << PAGE_SHIFT, - prot, sgt); - mapping->active = true; - -- return 0; -+unpin: -+ if (!obj->import_attach) -+ drm_gem_shmem_unpin(shmem); -+ -+ return ret; - } - - void panfrost_mmu_unmap(struct panfrost_gem_mapping *mapping) -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 167f00f089de..9c6bb00260fc 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -61,13 +61,6 @@ struct drm_gem_shmem_object { - */ - int madv; - -- /** -- * @madv_list: List entry for madvise tracking -- * -- * Typically used by drivers to track purgeable objects -- */ -- struct list_head madv_list; -- - /** - * @sgt: Scatter/gather table for imported PRIME buffers - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -end of thread, other threads:[~2024-01-05 18:47 UTC | newest] - -Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed) --- links below jump to the message on this page -- -2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 19/30] drm/virtio: " Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko -This is a public inbox, see mirroring instructions -for how to clone and mirror all data and code used for this inbox; -as well as URLs for NNTP newsgroup(s). diff --git a/projects/Rockchip/patches/linux/RK3399/100-panfrost-memory-shrinker.patch b/projects/Rockchip/patches/linux/RK3399/100-panfrost-memory-shrinker.patch deleted file mode 100644 index eab599967..000000000 --- a/projects/Rockchip/patches/linux/RK3399/100-panfrost-memory-shrinker.patch +++ /dev/null @@ -1,5235 +0,0 @@ -* [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers -@ 2024-01-05 18:45 Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko - ` (29 more replies) - 0 siblings, 30 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -This series: - - 1. Adds common drm-shmem memory shrinker - 2. Moves drm-shmem drivers to new SGT usage policy - 3. Enables shrinker for VirtIO-GPU driver - 4. Switches Panfrost driver to the common shrinker - 5. Fixes bugs and improves/refactors drm-shmem code - -Mesa: https://gitlab.freedesktop.org/digetx/mesa/-/commits/virgl-madvise -IGT: https://gitlab.freedesktop.org/digetx/igt-gpu-tools/-/commits/virtio-madvise - https://gitlab.freedesktop.org/digetx/igt-gpu-tools/-/commits/panfrost-madvise - -Changelog: - -v19:- Addressed v18 review comments from Boris Brezillon: - - - Improved bisectablity of Panfrost and drm-shmem patches by - fixing iterim warning splats related to shrinker changes. - - - Improved commit messages - - - Reworked Lima patch to avoid adding `put_pages` flag - - - Reworked Panfrost patch that switches driver to explicit - get/put pages by moving drm_gem_shmem_put_pages() into - gem_mapping_release() instead of gem_free_object(). - - - Updated Panfrost patch that switches driver to generic shrinker - with more comments and minor imporovemnts. - - - Added new Panfrost patch from Boris that fixes handling of - a partially mapped heap BOs. - - - Added link to the related Mesa MR to the commit msg of the patch - that adds new DRM_VIRTGPU_MADVISE ioctl, like was requested by - Gurchetan Singh. - - - Added ackes/r-b from Boris Brezillon and Maxime Ripard - - - New patches in v19: - - drm/gem: Document locking rule of vmap and evict callbacks - drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - - - Factored out couple code changes into these new separate patches: - - drm/shmem-helper: Avoid lockdep warning when pages are released - drm/shmem-helper: Turn warnings about imported GEM into errors - -v18:- Added new pathes that change sgt allocation policy. Previously once - sgt was allocated, it exsited till GEM was freed. Now sgt is destroyed - once pages are unpinned and drivers have to manage the pages' pinning - refcounting by themselves using get/put() and pin/unpin() pages. - This removes pages refcounting ambiguity from the drm-shmem core. - - - Dropped patch that changed drm_gem_shmem_vmap_locked() error handling, - like was requested by Boris Brezillon. - - - Added new patches that make minor improvements: - - - Optimize unlocked get_pages_sgt() - - Don't free refcounted GEM - - - Dropped t-b from the Panfrost shrinker patch that was given for older - patch version since code changed with the new sgt allocation policy. - -v17:- Dropped patches that added new drm-shmem sgt flags, fixing dma-buf UAF - in drm-prime error code path and preventing invalid page_count when GEM - is freed. Will revist them later on and then factor them out into a - seprate patchset. - - - Dropped patches that replaced drm_gem_shmem_free() with - drm_gem_object_put(), they not needed anymore after changing - drm_gem_shmem_free() to not touch reservation lock. - - - Addressed review comments from Boris Brezillon: - - - Added new patch to clean up error unwinding in - drm_gem_shmem_vmap_locked() - - - Added new __drm_gem_shmem_put_pages() to let the callers - to assert the held reservation lock themselves - - - Moved replacement of shmem->pages check with refcount_read() - in drm_gem_shmem_free() to the shrinker addition patch - - - Improved commit message of the vmap_use_count patch - - - Added r-bs from Boris Brezillon that he gave to v16 - -v16:- Added more comments to the code for the new drm-shmem flags - - - Added r-bs from Boris Brezillon - - - Fixed typos and made impovements pointed out by Boris Brezillon - - - Replaced kref with refcount_t as was suggested by Boris Brezillon - - - Corrected placement of got_sgt flag in the Lima driver, also renamed - flag to got_pages_sgt - - - Removed drm_gem_shmem_resv_assert_held() and made drm_gem_shmem_free() - to free pages without a new func that doesn't touch resv lock, as was - suggested by Boris Brezillon - - - Added pages_pin_count to drm_gem_shmem_print_info() - -v15:- Moved drm-shmem reference counters to use kref that allows to - optimize unlocked functions, like was suggested by Boris Brezillon. - - - Changed drm/gem/shmem function names to use _locked postfix and - dropped the _unlocked, making the naming scheme consistent across - DRM code, like was suggested by Boris Brezillon. - - - Added patch that fixes UAF in drm-shmem for drivers that import - dma-buf and then release buffer in the import error code path. - - - Added patch that makes drm-shmem use new flag for SGT's get_pages() - refcounting, preventing unbalanced refcounting when GEM is freed. - - - Fixed guest blob pinning in virtio-gpu driver that was missed - previously in the shrinker patch. - - - Moved VC4 and virtio-gpu drivers to use drm_gem_put() in - GEM-creation error code paths, which is now required by drm-shmem - and was missed in a previous patch versions. - - - Virtio-GPU now attaches shmem pages to host on first use and not - when BO is created. In older patch versions there was a potential - race condition in the BO creation code path where both - get_sgt()+object_attach() should've been made under same resv lock, - otherwise pages could be evicted before attachment is invoked. - - - Virtio-GPU and drm-shmem shrinker patches are split into smaller - ones. - -v14:- All the prerequisite reservation locking patches landed upstream, - previously were a part of this series in v13 and older. - - https://lore.kernel.org/dri-devel/20230529223935.2672495-1-dmitry.osipenko@collabora.com/ - - - Added patches to improve locked/unlocked function names, like was - suggested by Boris Brezillon for v13. - - - Made all exported drm-shmem symbols GPL, like was previously - discussed with Thomas Zimmermann on this series. - - - Improved virtio-gpu shrinker patch. Now it won't detach purged BO - when userspace closes GEM. Crosvm (and not qemu) checks res_id on - CMD_CTX_DETACH_RESOURCE and prints noisy error message if ID is - invalid, which wasn't noticed before. - -v13:- Updated virtio-gpu shrinker patch to use drm_gem_shmem_object_pin() - directly instead of drm_gem_pin() and dropped patch that exported - drm_gem_pin() functions, like was requested by Thomas Zimmermann in - v12. - -v12:- Fixed the "no previous prototype for function" warning reported by - kernel build bot for v11. - - - Fixed the missing reservation lock reported by Intel CI for VGEM - driver. Other drivers using drm-shmem were affected similarly to - VGEM. The problem was in the dma-buf attachment code path that led - to drm-shmem pinning function which assumed the held reservation lock - by drm_gem_pin(). In the past that code path was causing trouble for - i915 driver and we've changed the locking scheme for the attachment - code path in the dma-buf core to let exporters to handle the locking - themselves. After a closer investigation, I realized that my assumption - about testing of dma-buf export code path using Panfrost driver was - incorrect. Now I created additional local test to exrecise the Panfrost - export path. I also reproduced the issue reported by the Intel CI for - v10. It's all fixed now by making the drm_gem_shmem_pin() to take the - resv lock by itself. - - - Patches are based on top of drm-tip, CC'd intel-gfx CI for testing. - -v11:- Rebased on a recent linux-next. Added new patch as a result: - - drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - - It's needed by the virtio-gpu driver to swap-in/unevict shmem - object, previously get_pages_sgt() didn't use locking. - - - Separated the "Add memory shrinker" patch into smaller parts to ease - the reviewing, as was requested by Thomas Zimmermann: - - drm/shmem-helper: Factor out pages alloc/release from - drm_gem_shmem_get/put_pages() - drm/shmem-helper: Add pages_pin_count field - drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - drm/shmem-helper: Factor out unpinning part from drm_gem_shmem_purge() - - - Addessed the v10 review comments from Thomas Zimmermann: return errno - instead of bool, sort code alphabetically, rename function and etc - minor changes. - - - Added new patch to remove the "map->is_iomem" from drm-shmem, as - was suggested by Thomas Zimmermann. - - - Added acks and r-b's that were given to v10. - -v10:- Was partially applied to misc-fixes/next. - - https://lore.kernel.org/dri-devel/6c16f303-81df-7ebe-85e9-51bb40a8b301@collabora.com/T/ - -Boris Brezillon (1): - drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - -Dmitry Osipenko (29): - drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function - names - drm/gem: Add _locked postfix to functions that have unlocked - counterpart - drm/gem: Document locking rule of vmap and evict callbacks - drm/shmem-helper: Make all exported symbols GPL - drm/shmem-helper: Refactor locked/unlocked functions - drm/shmem-helper: Remove obsoleted is_iomem test - drm/shmem-helper: Add and use pages_pin_count - drm/shmem-helper: Use refcount_t for pages_use_count - drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() - drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - drm/shmem-helper: Use refcount_t for vmap_use_count - drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition - drm/shmem-helper: Make drm_gem_shmem_get_pages() public - drm/shmem-helper: Add drm_gem_shmem_put_pages() - drm/shmem-helper: Avoid lockdep warning when pages are released - drm/lima: Explicitly get and put drm-shmem pages - drm/panfrost: Explicitly get and put drm-shmem pages - drm/virtio: Explicitly get and put drm-shmem pages - drm/v3d: Explicitly get and put drm-shmem pages - drm/shmem-helper: Change sgt allocation policy - drm/shmem-helper: Add common memory shrinker - drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - drm/shmem-helper: Optimize unlocked get_pages_sgt() - drm/shmem-helper: Don't free refcounted GEM - drm/shmem-helper: Turn warnings about imported GEM into errors - drm/virtio: Pin display framebuffer BO - drm/virtio: Attach shmem BOs dynamically - drm/virtio: Support shmem shrinking - drm/panfrost: Switch to generic memory shrinker - - drivers/gpu/drm/drm_client.c | 6 +- - drivers/gpu/drm/drm_gem.c | 26 +- - drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +- - drivers/gpu/drm/drm_gem_shmem_helper.c | 663 +++++++++++++++--- - drivers/gpu/drm/drm_internal.h | 4 +- - drivers/gpu/drm/drm_prime.c | 4 +- - drivers/gpu/drm/lima/lima_gem.c | 23 +- - drivers/gpu/drm/lima/lima_sched.c | 4 +- - drivers/gpu/drm/panfrost/Makefile | 1 - - drivers/gpu/drm/panfrost/panfrost_device.h | 4 - - drivers/gpu/drm/panfrost/panfrost_drv.c | 31 +- - drivers/gpu/drm/panfrost/panfrost_dump.c | 4 +- - drivers/gpu/drm/panfrost/panfrost_gem.c | 110 ++- - drivers/gpu/drm/panfrost/panfrost_gem.h | 9 - - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 127 ---- - drivers/gpu/drm/panfrost/panfrost_job.c | 18 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 39 +- - drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 6 +- - drivers/gpu/drm/v3d/v3d_bo.c | 11 +- - drivers/gpu/drm/virtio/virtgpu_drv.h | 22 +- - drivers/gpu/drm/virtio/virtgpu_gem.c | 85 +++ - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 57 +- - drivers/gpu/drm/virtio/virtgpu_kms.c | 8 + - drivers/gpu/drm/virtio/virtgpu_object.c | 143 +++- - drivers/gpu/drm/virtio/virtgpu_plane.c | 17 +- - drivers/gpu/drm/virtio/virtgpu_submit.c | 15 +- - drivers/gpu/drm/virtio/virtgpu_vq.c | 40 ++ - include/drm/drm_device.h | 10 +- - include/drm/drm_gem.h | 15 +- - include/drm/drm_gem_shmem_helper.h | 117 +++- - include/uapi/drm/virtgpu_drm.h | 14 + - 31 files changed, 1216 insertions(+), 423 deletions(-) - delete mode 100644 drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c - --- -2.43.0 - - -^ permalink raw reply [flat|nested] 31+ messages in thread -* [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko - ` (28 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Make drm/gem API function names consistent by having locked function -use the _locked postfix in the name, while the unlocked variants don't -use the _unlocked postfix. Rename drm_gem_v/unmap() function names to -make them consistent with the rest of the API functions. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_client.c | 6 +++--- - drivers/gpu/drm/drm_gem.c | 20 ++++++++++---------- - drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +++--- - drivers/gpu/drm/drm_internal.h | 4 ++-- - drivers/gpu/drm/drm_prime.c | 4 ++-- - drivers/gpu/drm/lima/lima_sched.c | 4 ++-- - drivers/gpu/drm/panfrost/panfrost_dump.c | 4 ++-- - drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 6 +++--- - include/drm/drm_gem.h | 4 ++-- - 9 files changed, 29 insertions(+), 29 deletions(-) - -diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c -index 9403b3f576f7..7ee9baf46eaa 100644 ---- a/drivers/gpu/drm/drm_client.c -+++ b/drivers/gpu/drm/drm_client.c -@@ -255,7 +255,7 @@ void drm_client_dev_restore(struct drm_device *dev) - static void drm_client_buffer_delete(struct drm_client_buffer *buffer) - { - if (buffer->gem) { -- drm_gem_vunmap_unlocked(buffer->gem, &buffer->map); -+ drm_gem_vunmap(buffer->gem, &buffer->map); - drm_gem_object_put(buffer->gem); - } - -@@ -339,7 +339,7 @@ drm_client_buffer_vmap(struct drm_client_buffer *buffer, - * fd_install step out of the driver backend hooks, to make that - * final step optional for internal users. - */ -- ret = drm_gem_vmap_unlocked(buffer->gem, map); -+ ret = drm_gem_vmap(buffer->gem, map); - if (ret) - return ret; - -@@ -361,7 +361,7 @@ void drm_client_buffer_vunmap(struct drm_client_buffer *buffer) - { - struct iosys_map *map = &buffer->map; - -- drm_gem_vunmap_unlocked(buffer->gem, map); -+ drm_gem_vunmap(buffer->gem, map); - } - EXPORT_SYMBOL(drm_client_buffer_vunmap); - -diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c -index 44a948b80ee1..95327b003692 100644 ---- a/drivers/gpu/drm/drm_gem.c -+++ b/drivers/gpu/drm/drm_gem.c -@@ -1175,7 +1175,7 @@ void drm_gem_unpin(struct drm_gem_object *obj) - obj->funcs->unpin(obj); - } - --int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) -+int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map) - { - int ret; - -@@ -1192,9 +1192,9 @@ int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - - return 0; - } --EXPORT_SYMBOL(drm_gem_vmap); -+EXPORT_SYMBOL(drm_gem_vmap_locked); - --void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) -+void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *map) - { - dma_resv_assert_held(obj->resv); - -@@ -1207,27 +1207,27 @@ void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) - /* Always set the mapping to NULL. Callers may rely on this. */ - iosys_map_clear(map); - } --EXPORT_SYMBOL(drm_gem_vunmap); -+EXPORT_SYMBOL(drm_gem_vunmap_locked); - --int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) -+int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - { - int ret; - - dma_resv_lock(obj->resv, NULL); -- ret = drm_gem_vmap(obj, map); -+ ret = drm_gem_vmap_locked(obj, map); - dma_resv_unlock(obj->resv); - - return ret; - } --EXPORT_SYMBOL(drm_gem_vmap_unlocked); -+EXPORT_SYMBOL(drm_gem_vmap); - --void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) -+void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) - { - dma_resv_lock(obj->resv, NULL); -- drm_gem_vunmap(obj, map); -+ drm_gem_vunmap_locked(obj, map); - dma_resv_unlock(obj->resv); - } --EXPORT_SYMBOL(drm_gem_vunmap_unlocked); -+EXPORT_SYMBOL(drm_gem_vunmap); - - /** - * drm_gem_lock_reservations - Sets up the ww context and acquires -diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c b/drivers/gpu/drm/drm_gem_framebuffer_helper.c -index 3bdb6ba37ff4..3808f47310bf 100644 ---- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c -+++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c -@@ -362,7 +362,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct iosys_map *map, - ret = -EINVAL; - goto err_drm_gem_vunmap; - } -- ret = drm_gem_vmap_unlocked(obj, &map[i]); -+ ret = drm_gem_vmap(obj, &map[i]); - if (ret) - goto err_drm_gem_vunmap; - } -@@ -384,7 +384,7 @@ int drm_gem_fb_vmap(struct drm_framebuffer *fb, struct iosys_map *map, - obj = drm_gem_fb_get_obj(fb, i); - if (!obj) - continue; -- drm_gem_vunmap_unlocked(obj, &map[i]); -+ drm_gem_vunmap(obj, &map[i]); - } - return ret; - } -@@ -411,7 +411,7 @@ void drm_gem_fb_vunmap(struct drm_framebuffer *fb, struct iosys_map *map) - continue; - if (iosys_map_is_null(&map[i])) - continue; -- drm_gem_vunmap_unlocked(obj, &map[i]); -+ drm_gem_vunmap(obj, &map[i]); - } - } - EXPORT_SYMBOL(drm_gem_fb_vunmap); -diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h -index 8e4faf0a28e6..227f58e5b232 100644 ---- a/drivers/gpu/drm/drm_internal.h -+++ b/drivers/gpu/drm/drm_internal.h -@@ -172,8 +172,8 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent, - - int drm_gem_pin(struct drm_gem_object *obj); - void drm_gem_unpin(struct drm_gem_object *obj); --int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); --void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); -+int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map); -+void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *map); - - /* drm_debugfs.c drm_debugfs_crc.c */ - #if defined(CONFIG_DEBUG_FS) -diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c -index 834a5e28abbe..4a5935a400ec 100644 ---- a/drivers/gpu/drm/drm_prime.c -+++ b/drivers/gpu/drm/drm_prime.c -@@ -684,7 +684,7 @@ int drm_gem_dmabuf_vmap(struct dma_buf *dma_buf, struct iosys_map *map) - { - struct drm_gem_object *obj = dma_buf->priv; - -- return drm_gem_vmap(obj, map); -+ return drm_gem_vmap_locked(obj, map); - } - EXPORT_SYMBOL(drm_gem_dmabuf_vmap); - -@@ -700,7 +700,7 @@ void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, struct iosys_map *map) - { - struct drm_gem_object *obj = dma_buf->priv; - -- drm_gem_vunmap(obj, map); -+ drm_gem_vunmap_locked(obj, map); - } - EXPORT_SYMBOL(drm_gem_dmabuf_vunmap); - -diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c -index c3bf8cda8498..3813f30480ba 100644 ---- a/drivers/gpu/drm/lima/lima_sched.c -+++ b/drivers/gpu/drm/lima/lima_sched.c -@@ -371,7 +371,7 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) - } else { - buffer_chunk->size = lima_bo_size(bo); - -- ret = drm_gem_vmap_unlocked(&bo->base.base, &map); -+ ret = drm_gem_vmap(&bo->base.base, &map); - if (ret) { - kvfree(et); - goto out; -@@ -379,7 +379,7 @@ static void lima_sched_build_error_task_list(struct lima_sched_task *task) - - memcpy(buffer_chunk + 1, map.vaddr, buffer_chunk->size); - -- drm_gem_vunmap_unlocked(&bo->base.base, &map); -+ drm_gem_vunmap(&bo->base.base, &map); - } - - buffer_chunk = (void *)(buffer_chunk + 1) + buffer_chunk->size; -diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/panfrost/panfrost_dump.c -index 47751302f1bc..4042afe2fbf4 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_dump.c -+++ b/drivers/gpu/drm/panfrost/panfrost_dump.c -@@ -209,7 +209,7 @@ void panfrost_core_dump(struct panfrost_job *job) - goto dump_header; - } - -- ret = drm_gem_vmap_unlocked(&bo->base.base, &map); -+ ret = drm_gem_vmap(&bo->base.base, &map); - if (ret) { - dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n"); - iter.hdr->bomap.valid = 0; -@@ -228,7 +228,7 @@ void panfrost_core_dump(struct panfrost_job *job) - vaddr = map.vaddr; - memcpy(iter.data, vaddr, bo->base.base.size); - -- drm_gem_vunmap_unlocked(&bo->base.base, &map); -+ drm_gem_vunmap(&bo->base.base, &map); - - iter.hdr->bomap.valid = 1; - -diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -index ba9b6e2b2636..52befead08c6 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -+++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c -@@ -106,7 +106,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, - goto err_close_bo; - } - -- ret = drm_gem_vmap_unlocked(&bo->base, &map); -+ ret = drm_gem_vmap(&bo->base, &map); - if (ret) - goto err_put_mapping; - perfcnt->buf = map.vaddr; -@@ -165,7 +165,7 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev, - return 0; - - err_vunmap: -- drm_gem_vunmap_unlocked(&bo->base, &map); -+ drm_gem_vunmap(&bo->base, &map); - err_put_mapping: - panfrost_gem_mapping_put(perfcnt->mapping); - err_close_bo: -@@ -195,7 +195,7 @@ static int panfrost_perfcnt_disable_locked(struct panfrost_device *pfdev, - GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_OFF)); - - perfcnt->user = NULL; -- drm_gem_vunmap_unlocked(&perfcnt->mapping->obj->base.base, &map); -+ drm_gem_vunmap(&perfcnt->mapping->obj->base.base, &map); - perfcnt->buf = NULL; - panfrost_gem_close(&perfcnt->mapping->obj->base.base, file_priv); - panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index 369505447acd..decb19ffb2c8 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -527,8 +527,8 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj); - void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, - bool dirty, bool accessed); - --int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map); --void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map); -+int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map); -+void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map); - - int drm_gem_objects_lookup(struct drm_file *filp, void __user *bo_handles, - int count, struct drm_gem_object ***objs_out); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko - ` (27 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add _locked postfix to drm_gem functions that have unlocked counterpart -functions to make GEM functions naming more consistent and intuitive in -regards to the locking requirements. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem.c | 6 +++--- - include/drm/drm_gem.h | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c -index 95327b003692..4523cd40fb2f 100644 ---- a/drivers/gpu/drm/drm_gem.c -+++ b/drivers/gpu/drm/drm_gem.c -@@ -1490,10 +1490,10 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, - EXPORT_SYMBOL(drm_gem_lru_scan); - - /** -- * drm_gem_evict - helper to evict backing pages for a GEM object -+ * drm_gem_evict_locked - helper to evict backing pages for a GEM object - * @obj: obj in question - */ --int drm_gem_evict(struct drm_gem_object *obj) -+int drm_gem_evict_locked(struct drm_gem_object *obj) - { - dma_resv_assert_held(obj->resv); - -@@ -1505,4 +1505,4 @@ int drm_gem_evict(struct drm_gem_object *obj) - - return 0; - } --EXPORT_SYMBOL(drm_gem_evict); -+EXPORT_SYMBOL(drm_gem_evict_locked); -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index decb19ffb2c8..f835fdee6a5e 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -551,7 +551,7 @@ unsigned long drm_gem_lru_scan(struct drm_gem_lru *lru, - unsigned long *remaining, - bool (*shrink)(struct drm_gem_object *obj)); - --int drm_gem_evict(struct drm_gem_object *obj); -+int drm_gem_evict_locked(struct drm_gem_object *obj); - - #ifdef CONFIG_LOCKDEP - /** --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko - ` (26 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -The vmap/vunmap/evict GEM callbacks are always invoked with a held GEM's -reservation lock. Document this locking rule for clarity. - -Signed-off-by: Dmitry Osipenko ---- - include/drm/drm_gem.h | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h -index f835fdee6a5e..021f64371056 100644 ---- a/include/drm/drm_gem.h -+++ b/include/drm/drm_gem.h -@@ -156,7 +156,8 @@ struct drm_gem_object_funcs { - * @vmap: - * - * Returns a virtual address for the buffer. Used by the -- * drm_gem_dmabuf_vmap() helper. -+ * drm_gem_dmabuf_vmap() helper. Called with a held GEM reservation -+ * lock. - * - * This callback is optional. - */ -@@ -166,7 +167,8 @@ struct drm_gem_object_funcs { - * @vunmap: - * - * Releases the address previously returned by @vmap. Used by the -- * drm_gem_dmabuf_vunmap() helper. -+ * drm_gem_dmabuf_vunmap() helper. Called with a held GEM reservation -+ * lock. - * - * This callback is optional. - */ -@@ -189,7 +191,8 @@ struct drm_gem_object_funcs { - * @evict: - * - * Evicts gem object out from memory. Used by the drm_gem_object_evict() -- * helper. Returns 0 on success, -errno otherwise. -+ * helper. Returns 0 on success, -errno otherwise. Called with a held -+ * GEM reservation lock. - * - * This callback is optional. - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (2 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko - ` (25 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Make all drm-shmem exported symbols GPL to make them consistent with -the rest of drm-shmem symbols. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index e435f986cd13..0d61f2b3e213 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -226,7 +226,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - shmem->pages_mark_accessed_on_put); - shmem->pages = NULL; - } --EXPORT_SYMBOL(drm_gem_shmem_put_pages); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -@@ -271,7 +271,7 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - - return ret; - } --EXPORT_SYMBOL(drm_gem_shmem_pin); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_pin); - - /** - * drm_gem_shmem_unpin - Unpin backing pages for a shmem GEM object -@@ -290,7 +290,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - drm_gem_shmem_unpin_locked(shmem); - dma_resv_unlock(shmem->base.resv); - } --EXPORT_SYMBOL(drm_gem_shmem_unpin); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - - /* - * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object -@@ -360,7 +360,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - - return ret; - } --EXPORT_SYMBOL(drm_gem_shmem_vmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); - - /* - * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object -@@ -396,7 +396,7 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - - shmem->vaddr = NULL; - } --EXPORT_SYMBOL(drm_gem_shmem_vunmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); - - static int - drm_gem_shmem_create_with_handle(struct drm_file *file_priv, -@@ -435,7 +435,7 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - - return (madv >= 0); - } --EXPORT_SYMBOL(drm_gem_shmem_madvise); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); - - void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - { -@@ -467,7 +467,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); - } --EXPORT_SYMBOL(drm_gem_shmem_purge); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); - - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object -@@ -642,7 +642,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } --EXPORT_SYMBOL(drm_gem_shmem_print_info); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); - - /** - * drm_gem_shmem_get_sg_table - Provide a scatter/gather table of pinned --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (3 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko -@ 2024-01-05 18:45 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko - ` (24 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:45 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add locked and remove unlocked postfixes from drm-shmem function names, -making names consistent with the drm/gem core code. - -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 60 +++++++++---------- - drivers/gpu/drm/lima/lima_gem.c | 6 +- - drivers/gpu/drm/panfrost/panfrost_drv.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_gem.c | 2 +- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- - include/drm/drm_gem_shmem_helper.h | 28 ++++----- - 7 files changed, 51 insertions(+), 51 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 0d61f2b3e213..043e8e3b129c 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -153,7 +153,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - kfree(shmem->sgt); - } - if (shmem->pages) -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - - drm_WARN_ON(obj->dev, shmem->pages_use_count); - -@@ -165,7 +165,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_free); - --static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct page **pages; -@@ -199,12 +199,12 @@ static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - } - - /* -- * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object -+ * drm_gem_shmem_put_pages_locked - Decrease use count on the backing pages for a shmem GEM object - * @shmem: shmem GEM object - * - * This function decreases the use count and puts the backing pages when use drops to zero. - */ --void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) -+void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -@@ -226,7 +226,7 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - shmem->pages_mark_accessed_on_put); - shmem->pages = NULL; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -@@ -234,7 +234,7 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - - return ret; - } -@@ -243,7 +243,7 @@ static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) - { - dma_resv_assert_held(shmem->base.resv); - -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - } - - /** -@@ -293,7 +293,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - - /* -- * drm_gem_shmem_vmap - Create a virtual mapping for a shmem GEM object -+ * drm_gem_shmem_vmap_locked - Create a virtual mapping for a shmem GEM object - * @shmem: shmem GEM object - * @map: Returns the kernel virtual address of the SHMEM GEM object's backing - * store. -@@ -302,13 +302,13 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); - * exists for the buffer backing the shmem GEM object. It hides the differences - * between dma-buf imported and natively allocated objects. - * -- * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap(). -+ * Acquired mappings should be cleaned up by calling drm_gem_shmem_vunmap_locked(). - * - * Returns: - * 0 on success or a negative error code on failure. - */ --int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map) -+int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map) - { - struct drm_gem_object *obj = &shmem->base; - int ret = 0; -@@ -331,7 +331,7 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - return 0; - } - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - if (ret) - goto err_zero_use; - -@@ -354,28 +354,28 @@ int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, - - err_put_pages: - if (!obj->import_attach) -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - err_zero_use: - shmem->vmap_use_count = 0; - - return ret; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vmap_locked); - - /* -- * drm_gem_shmem_vunmap - Unmap a virtual mapping for a shmem GEM object -+ * drm_gem_shmem_vunmap_locked - Unmap a virtual mapping for a shmem GEM object - * @shmem: shmem GEM object - * @map: Kernel virtual address where the SHMEM GEM object was mapped - * - * This function cleans up a kernel virtual address mapping acquired by -- * drm_gem_shmem_vmap(). The mapping is only removed when the use count drops to -- * zero. -+ * drm_gem_shmem_vmap_locked(). The mapping is only removed when the use count -+ * drops to zero. - * - * This function hides the differences between dma-buf imported and natively - * allocated objects. - */ --void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map) -+void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map) - { - struct drm_gem_object *obj = &shmem->base; - -@@ -391,12 +391,12 @@ void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, - return; - - vunmap(shmem->vaddr); -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - } - - shmem->vaddr = NULL; - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_vunmap_locked); - - static int - drm_gem_shmem_create_with_handle(struct drm_file *file_priv, -@@ -424,7 +424,7 @@ drm_gem_shmem_create_with_handle(struct drm_file *file_priv, - /* Update madvise status, returns true if not purged, else - * false or -errno. - */ --int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) -+int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv) - { - dma_resv_assert_held(shmem->base.resv); - -@@ -435,9 +435,9 @@ int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - - return (madv >= 0); - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise_locked); - --void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct drm_device *dev = obj->dev; -@@ -451,7 +451,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - kfree(shmem->sgt); - shmem->sgt = NULL; - -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - - shmem->madv = -1; - -@@ -467,7 +467,7 @@ void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem) - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); - } --EXPORT_SYMBOL_GPL(drm_gem_shmem_purge); -+EXPORT_SYMBOL_GPL(drm_gem_shmem_purge_locked); - - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object -@@ -564,7 +564,7 @@ static void drm_gem_shmem_vm_close(struct vm_area_struct *vma) - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - - dma_resv_lock(shmem->base.resv, NULL); -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - drm_gem_vm_close(vma); -@@ -611,7 +611,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct - } - - dma_resv_lock(shmem->base.resv, NULL); -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - if (ret) -@@ -679,7 +679,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - - drm_WARN_ON(obj->dev, obj->import_attach); - -- ret = drm_gem_shmem_get_pages(shmem); -+ ret = drm_gem_shmem_get_pages_locked(shmem); - if (ret) - return ERR_PTR(ret); - -@@ -701,7 +701,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - sg_free_table(sgt); - kfree(sgt); - err_put_pages: -- drm_gem_shmem_put_pages(shmem); -+ drm_gem_shmem_put_pages_locked(shmem); - return ERR_PTR(ret); - } - -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 4f9736e5f929..433bda72e59b 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -180,7 +180,7 @@ static int lima_gem_pin(struct drm_gem_object *obj) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_pin(&bo->base); -+ return drm_gem_shmem_object_pin(obj); - } - - static int lima_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) -@@ -190,7 +190,7 @@ static int lima_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_vmap(&bo->base, map); -+ return drm_gem_shmem_object_vmap(obj, map); - } - - static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) -@@ -200,7 +200,7 @@ static int lima_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) - if (bo->heap_size) - return -EINVAL; - -- return drm_gem_shmem_mmap(&bo->base, vma); -+ return drm_gem_shmem_object_mmap(obj, vma); - } - - static const struct drm_gem_object_funcs lima_gem_funcs = { -diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c -index a926d71e8131..a15d62f19afb 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_drv.c -+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c -@@ -438,7 +438,7 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - } - } - -- args->retained = drm_gem_shmem_madvise(&bo->base, args->madv); -+ args->retained = drm_gem_shmem_madvise_locked(&bo->base, args->madv); - - if (args->retained) { - if (args->madv == PANFROST_MADV_DONTNEED) -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index d47b40b82b0b..f268bd5c2884 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -192,7 +192,7 @@ static int panfrost_gem_pin(struct drm_gem_object *obj) - if (bo->is_heap) - return -EINVAL; - -- return drm_gem_shmem_pin(&bo->base); -+ return drm_gem_shmem_object_pin(obj); - } - - static enum drm_gem_object_status panfrost_gem_status(struct drm_gem_object *obj) -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index 3d9f51bd48b6..02b60ea1433a 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -51,7 +51,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - goto unlock_mappings; - - panfrost_gem_teardown_mappings_locked(bo); -- drm_gem_shmem_purge(&bo->base); -+ drm_gem_shmem_purge_locked(&bo->base); - ret = true; - - dma_resv_unlock(shmem->base.resv); -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index f38385fe76bb..1ab081bd81a8 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -538,7 +538,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - err_map: - sg_free_table(sgt); - err_pages: -- drm_gem_shmem_put_pages(&bo->base); -+ drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index bf0c31aa8fbe..9e83212becbb 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -99,16 +99,16 @@ struct drm_gem_shmem_object { - struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size); - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - --void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --int drm_gem_shmem_vmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map); --void drm_gem_shmem_vunmap(struct drm_gem_shmem_object *shmem, -- struct iosys_map *map); -+int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map); -+void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, -+ struct iosys_map *map); - int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma); - --int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv); -+int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); - - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { -@@ -117,7 +117,7 @@ static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem - !shmem->base.dma_buf && !shmem->base.import_attach; - } - --void drm_gem_shmem_purge(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem); -@@ -208,12 +208,12 @@ static inline struct sg_table *drm_gem_shmem_object_get_sg_table(struct drm_gem_ - } - - /* -- * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap() -+ * drm_gem_shmem_object_vmap - GEM object function for drm_gem_shmem_vmap_locked() - * @obj: GEM object - * @map: Returns the kernel virtual address of the SHMEM GEM object's backing store. - * -- * This function wraps drm_gem_shmem_vmap(). Drivers that employ the shmem helpers should -- * use it as their &drm_gem_object_funcs.vmap handler. -+ * This function wraps drm_gem_shmem_vmap_locked(). Drivers that employ the shmem -+ * helpers should use it as their &drm_gem_object_funcs.vmap handler. - * - * Returns: - * 0 on success or a negative error code on failure. -@@ -223,7 +223,7 @@ static inline int drm_gem_shmem_object_vmap(struct drm_gem_object *obj, - { - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - -- return drm_gem_shmem_vmap(shmem, map); -+ return drm_gem_shmem_vmap_locked(shmem, map); - } - - /* -@@ -231,15 +231,15 @@ static inline int drm_gem_shmem_object_vmap(struct drm_gem_object *obj, - * @obj: GEM object - * @map: Kernel virtual address where the SHMEM GEM object was mapped - * -- * This function wraps drm_gem_shmem_vunmap(). Drivers that employ the shmem helpers should -- * use it as their &drm_gem_object_funcs.vunmap handler. -+ * This function wraps drm_gem_shmem_vunmap_locked(). Drivers that employ the shmem -+ * helpers should use it as their &drm_gem_object_funcs.vunmap handler. - */ - static inline void drm_gem_shmem_object_vunmap(struct drm_gem_object *obj, - struct iosys_map *map) - { - struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); - -- drm_gem_shmem_vunmap(shmem, map); -+ drm_gem_shmem_vunmap_locked(shmem, map); - } - - /** --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (4 preceding siblings ...) - 2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko - ` (23 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Everything that uses the mapped buffer should be agnostic to is_iomem. -The only reason for the is_iomem test is that we're setting shmem->vaddr -to the returned map->vaddr. Now that the shmem->vaddr code is gone, remove -the obsoleted is_iomem test to clean up the code. - -Acked-by: Maxime Ripard -Suggested-by: Thomas Zimmermann -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 043e8e3b129c..1f0a66386415 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -315,12 +315,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - if (obj->import_attach) { - ret = dma_buf_vmap(obj->import_attach->dmabuf, map); -- if (!ret) { -- if (drm_WARN_ON(obj->dev, map->is_iomem)) { -- dma_buf_vunmap(obj->import_attach->dmabuf, map); -- return -EIO; -- } -- } - } else { - pgprot_t prot = PAGE_KERNEL; - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (5 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko - ` (22 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add separate pages_pin_count for tracking of whether drm-shmem pages are -moveable or not. With the addition of memory shrinker support to drm-shmem, -the pages_use_count will no longer determine whether pages are hard-pinned -in memory, but whether pages exist and are soft-pinned (and could be swapped -out). The pages_pin_count > 1 will hard-pin pages in memory. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 25 +++++++++++++++++-------- - include/drm/drm_gem_shmem_helper.h | 11 +++++++++++ - 2 files changed, 28 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 1f0a66386415..55b9dd3d4b18 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -156,6 +156,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - drm_gem_shmem_put_pages_locked(shmem); - - drm_WARN_ON(obj->dev, shmem->pages_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - dma_resv_unlock(shmem->base.resv); - } -@@ -234,18 +235,16 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -+ if (refcount_inc_not_zero(&shmem->pages_pin_count)) -+ return 0; -+ - ret = drm_gem_shmem_get_pages_locked(shmem); -+ if (!ret) -+ refcount_set(&shmem->pages_pin_count, 1); - - return ret; - } - --static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) --{ -- dma_resv_assert_held(shmem->base.resv); -- -- drm_gem_shmem_put_pages_locked(shmem); --} -- - /** - * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object - * @shmem: shmem GEM object -@@ -263,6 +262,9 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (refcount_inc_not_zero(&shmem->pages_pin_count)) -+ return 0; -+ - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) - return ret; -@@ -286,8 +288,14 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (refcount_dec_not_one(&shmem->pages_pin_count)) -+ return; -+ - dma_resv_lock(shmem->base.resv, NULL); -- drm_gem_shmem_unpin_locked(shmem); -+ -+ if (refcount_dec_and_test(&shmem->pages_pin_count)) -+ drm_gem_shmem_put_pages_locked(shmem); -+ - dma_resv_unlock(shmem->base.resv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); -@@ -632,6 +640,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - if (shmem->base.import_attach) - return; - -+ drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", shmem->pages_use_count); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 9e83212becbb..c708a9f45cbd 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -39,6 +39,17 @@ struct drm_gem_shmem_object { - */ - unsigned int pages_use_count; - -+ /** -+ * @pages_pin_count: -+ * -+ * Reference count on the pinned pages table. -+ * -+ * Pages are hard-pinned and reside in memory if count -+ * greater than zero. Otherwise, when count is zero, the pages are -+ * allowed to be evicted and purged by memory shrinker. -+ */ -+ refcount_t pages_pin_count; -+ - /** - * @madv: State for madvise - * --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (6 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko - ` (21 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Use atomic refcount_t helper for pages_use_count to optimize pin/unpin -functions by skipping reservation locking while GEM's pin refcount > 1. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 33 +++++++++++-------------- - drivers/gpu/drm/lima/lima_gem.c | 2 +- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 2 +- - include/drm/drm_gem_shmem_helper.h | 2 +- - 4 files changed, 18 insertions(+), 21 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 55b9dd3d4b18..cacf0f8c42e2 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -155,7 +155,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (shmem->pages) - drm_gem_shmem_put_pages_locked(shmem); - -- drm_WARN_ON(obj->dev, shmem->pages_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - dma_resv_unlock(shmem->base.resv); -@@ -173,14 +173,13 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- if (shmem->pages_use_count++ > 0) -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) - return 0; - - pages = drm_gem_get_pages(obj); - if (IS_ERR(pages)) { - drm_dbg_kms(obj->dev, "Failed to get pages (%ld)\n", - PTR_ERR(pages)); -- shmem->pages_use_count = 0; - return PTR_ERR(pages); - } - -@@ -196,6 +195,8 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - shmem->pages = pages; - -+ refcount_set(&shmem->pages_use_count, 1); -+ - return 0; - } - -@@ -211,21 +212,17 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - - dma_resv_assert_held(shmem->base.resv); - -- if (drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) -- return; -- -- if (--shmem->pages_use_count > 0) -- return; -- -+ if (refcount_dec_and_test(&shmem->pages_use_count)) { - #ifdef CONFIG_X86 -- if (shmem->map_wc) -- set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -+ if (shmem->map_wc) -+ set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); - #endif - -- drm_gem_put_pages(obj, shmem->pages, -- shmem->pages_mark_dirty_on_put, -- shmem->pages_mark_accessed_on_put); -- shmem->pages = NULL; -+ drm_gem_put_pages(obj, shmem->pages, -+ shmem->pages_mark_dirty_on_put, -+ shmem->pages_mark_accessed_on_put); -+ shmem->pages = NULL; -+ } - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -@@ -552,8 +549,8 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) - * mmap'd, vm_open() just grabs an additional reference for the new - * mm the vma is getting copied into (ie. on fork()). - */ -- if (!drm_WARN_ON_ONCE(obj->dev, !shmem->pages_use_count)) -- shmem->pages_use_count++; -+ drm_WARN_ON_ONCE(obj->dev, -+ !refcount_inc_not_zero(&shmem->pages_use_count)); - - dma_resv_unlock(shmem->base.resv); - -@@ -641,7 +638,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - return; - - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); -- drm_printf_indent(p, indent, "pages_use_count=%u\n", shmem->pages_use_count); -+ drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 433bda72e59b..2a97aa85416b 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -47,7 +47,7 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm) - } - - bo->base.pages = pages; -- bo->base.pages_use_count = 1; -+ refcount_set(&bo->base.pages_use_count, 1); - - mapping_set_unevictable(mapping); - } -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index 1ab081bd81a8..bd5a0073009d 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -489,7 +489,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - goto err_unlock; - } - bo->base.pages = pages; -- bo->base.pages_use_count = 1; -+ refcount_set(&bo->base.pages_use_count, 1); - } else { - pages = bo->base.pages; - if (pages[page_offset]) { -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index c708a9f45cbd..2c5dc62df20c 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -37,7 +37,7 @@ struct drm_gem_shmem_object { - * Reference count on the pages table. - * The pages are put when the count reaches zero. - */ -- unsigned int pages_use_count; -+ refcount_t pages_use_count; - - /** - * @pages_pin_count: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (7 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko - ` (20 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Add lockless drm_gem_shmem_get_pages() helper that skips taking reservation -lock if pages_use_count is non-zero, leveraging from atomicity of the -refcount_t. Make drm_gem_shmem_mmap() to utilize the new helper. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index cacf0f8c42e2..1c032513abf1 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -226,6 +226,20 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -+static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+{ -+ int ret; -+ -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ return 0; -+ -+ dma_resv_lock(shmem->base.resv, NULL); -+ ret = drm_gem_shmem_get_pages_locked(shmem); -+ dma_resv_unlock(shmem->base.resv); -+ -+ return ret; -+} -+ - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { - int ret; -@@ -609,10 +623,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct - return ret; - } - -- dma_resv_lock(shmem->base.resv, NULL); -- ret = drm_gem_shmem_get_pages_locked(shmem); -- dma_resv_unlock(shmem->base.resv); -- -+ ret = drm_gem_shmem_get_pages(shmem); - if (ret) - return ret; - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (8 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko - ` (19 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -The vmapped pages shall be pinned in memory and previously get/put_pages() -were implicitly hard-pinning/unpinning the pages. This will no longer be -the case with addition of memory shrinker because pages_use_count > 0 won't -determine anymore whether pages are hard-pinned (they will be soft-pinned), -while the new pages_pin_count will do the hard-pinning. Switch the -vmap/vunmap() to use pin/unpin() functions in a preparation of addition -of the memory shrinker support to drm-shmem. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 19 ++++++++++++------- - include/drm/drm_gem_shmem_helper.h | 2 +- - 2 files changed, 13 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 1c032513abf1..9c89183f81b7 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -256,6 +256,14 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - return ret; - } - -+static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) -+{ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (refcount_dec_and_test(&shmem->pages_pin_count)) -+ drm_gem_shmem_put_pages_locked(shmem); -+} -+ - /** - * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object - * @shmem: shmem GEM object -@@ -303,10 +311,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) - return; - - dma_resv_lock(shmem->base.resv, NULL); -- -- if (refcount_dec_and_test(&shmem->pages_pin_count)) -- drm_gem_shmem_put_pages_locked(shmem); -- -+ drm_gem_shmem_unpin_locked(shmem); - dma_resv_unlock(shmem->base.resv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); -@@ -344,7 +349,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - return 0; - } - -- ret = drm_gem_shmem_get_pages_locked(shmem); -+ ret = drm_gem_shmem_pin_locked(shmem); - if (ret) - goto err_zero_use; - -@@ -367,7 +372,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - err_put_pages: - if (!obj->import_attach) -- drm_gem_shmem_put_pages_locked(shmem); -+ drm_gem_shmem_unpin_locked(shmem); - err_zero_use: - shmem->vmap_use_count = 0; - -@@ -404,7 +409,7 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - return; - - vunmap(shmem->vaddr); -- drm_gem_shmem_put_pages_locked(shmem); -+ drm_gem_shmem_unpin_locked(shmem); - } - - shmem->vaddr = NULL; -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 2c5dc62df20c..80623b897803 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -124,7 +124,7 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { - return (shmem->madv > 0) && -- !shmem->vmap_use_count && shmem->sgt && -+ !refcount_read(&shmem->pages_pin_count) && shmem->sgt && - !shmem->base.dma_buf && !shmem->base.import_attach; - } - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (9 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko - ` (18 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Use refcount_t helper for vmap_use_count to make refcounting consistent -with pages_use_count and pages_pin_count that use refcount_t. This also -makes vmapping to benefit from the refcount_t's overflow checks. - -Acked-by: Maxime Ripard -Reviewed-by: Boris Brezillon -Suggested-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 28 +++++++++++--------------- - include/drm/drm_gem_shmem_helper.h | 2 +- - 2 files changed, 13 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 9c89183f81b7..3403700780c3 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -144,7 +144,7 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } else { - dma_resv_lock(shmem->base.resv, NULL); - -- drm_WARN_ON(obj->dev, shmem->vmap_use_count); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - - if (shmem->sgt) { - dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -@@ -344,23 +344,25 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - - dma_resv_assert_held(shmem->base.resv); - -- if (shmem->vmap_use_count++ > 0) { -+ if (refcount_inc_not_zero(&shmem->vmap_use_count)) { - iosys_map_set_vaddr(map, shmem->vaddr); - return 0; - } - - ret = drm_gem_shmem_pin_locked(shmem); - if (ret) -- goto err_zero_use; -+ return ret; - - if (shmem->map_wc) - prot = pgprot_writecombine(prot); - shmem->vaddr = vmap(shmem->pages, obj->size >> PAGE_SHIFT, - VM_MAP, prot); -- if (!shmem->vaddr) -+ if (!shmem->vaddr) { - ret = -ENOMEM; -- else -+ } else { - iosys_map_set_vaddr(map, shmem->vaddr); -+ refcount_set(&shmem->vmap_use_count, 1); -+ } - } - - if (ret) { -@@ -373,8 +375,6 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, - err_put_pages: - if (!obj->import_attach) - drm_gem_shmem_unpin_locked(shmem); --err_zero_use: -- shmem->vmap_use_count = 0; - - return ret; - } -@@ -402,14 +402,10 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - } else { - dma_resv_assert_held(shmem->base.resv); - -- if (drm_WARN_ON_ONCE(obj->dev, !shmem->vmap_use_count)) -- return; -- -- if (--shmem->vmap_use_count > 0) -- return; -- -- vunmap(shmem->vaddr); -- drm_gem_shmem_unpin_locked(shmem); -+ if (refcount_dec_and_test(&shmem->vmap_use_count)) { -+ vunmap(shmem->vaddr); -+ drm_gem_shmem_unpin_locked(shmem); -+ } - } - - shmem->vaddr = NULL; -@@ -655,7 +651,7 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); -- drm_printf_indent(p, indent, "vmap_use_count=%u\n", shmem->vmap_use_count); -+ drm_printf_indent(p, indent, "vmap_use_count=%u\n", refcount_read(&shmem->vmap_use_count)); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 80623b897803..18020f653d7e 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -82,7 +82,7 @@ struct drm_gem_shmem_object { - * Reference count on the virtual address. - * The address are un-mapped when the count reaches zero. - */ -- unsigned int vmap_use_count; -+ refcount_t vmap_use_count; - - /** - * @pages_mark_dirty_on_put: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (10 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko - ` (17 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare drm_gem_shmem_free() to addition of memory shrinker support -to drm-shmem by adding and using variant of put_pages() that doesn't -touch reservation lock. Reservation shouldn't be touched because lockdep -will trigger a bogus warning about locking contention with fs_reclaim -code paths that can't happen during the time when GEM is freed and -lockdep doesn't know about that. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 40 ++++++++++++++------------ - 1 file changed, 21 insertions(+), 19 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 3403700780c3..799a3c5015ad 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -128,6 +128,22 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_create); - -+static void -+drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+#ifdef CONFIG_X86 -+ if (shmem->map_wc) -+ set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -+#endif -+ -+ drm_gem_put_pages(obj, shmem->pages, -+ shmem->pages_mark_dirty_on_put, -+ shmem->pages_mark_accessed_on_put); -+ shmem->pages = NULL; -+} -+ - /** - * drm_gem_shmem_free - Free resources associated with a shmem GEM object - * @shmem: shmem GEM object to free -@@ -142,8 +158,6 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (obj->import_attach) { - drm_prime_gem_destroy(obj, shmem->sgt); - } else { -- dma_resv_lock(shmem->base.resv, NULL); -- - drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - - if (shmem->sgt) { -@@ -152,13 +166,12 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - sg_free_table(shmem->sgt); - kfree(shmem->sgt); - } -- if (shmem->pages) -- drm_gem_shmem_put_pages_locked(shmem); -+ if (shmem->pages && -+ refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); - - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); - drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -- -- dma_resv_unlock(shmem->base.resv); - } - - drm_gem_object_release(obj); -@@ -208,21 +221,10 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - */ - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { -- struct drm_gem_object *obj = &shmem->base; -- - dma_resv_assert_held(shmem->base.resv); - -- if (refcount_dec_and_test(&shmem->pages_use_count)) { --#ifdef CONFIG_X86 -- if (shmem->map_wc) -- set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); --#endif -- -- drm_gem_put_pages(obj, shmem->pages, -- shmem->pages_mark_dirty_on_put, -- shmem->pages_mark_accessed_on_put); -- shmem->pages = NULL; -- } -+ if (refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (11 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko - ` (16 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're going to move away from having implicit get_pages() done by -get_pages_sgt() to simplify refcnt handling. Drivers will manage -get/put_pages() by themselves. Expose the drm_gem_shmem_get_pages() -in a public drm-shmem API. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 10 +++++++++- - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 799a3c5015ad..dc416a4bce1b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -228,7 +228,14 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - --static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) -+/* -+ * drm_gem_shmem_get_pages - Increase use count on the backing pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This function Increases the use count and allocates the backing pages if -+ * use-count equals to zero. -+ */ -+int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - { - int ret; - -@@ -241,6 +248,7 @@ static int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - - return ret; - } -+EXPORT_SYMBOL_GPL(drm_gem_shmem_get_pages); - - static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - { -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 18020f653d7e..6dedc0739fbc 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -110,6 +110,7 @@ struct drm_gem_shmem_object { - struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t size); - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - -+int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (12 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko - ` (15 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're going to move away from having implicit get_pages() done by -get_pages_sgt() to ease simplify refcnt handling. Drivers will manage -get/put_pages() by themselves. Add drm_gem_shmem_put_pages(). - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 20 ++++++++++++++++++++ - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 21 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index dc416a4bce1b..f5ed64f78648 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -218,6 +218,7 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - * @shmem: shmem GEM object - * - * This function decreases the use count and puts the backing pages when use drops to zero. -+ * Caller must hold GEM's reservation lock. - */ - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - { -@@ -228,6 +229,25 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -+/* -+ * drm_gem_shmem_put_pages - Decrease use count on the backing pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This function decreases the use count and puts the backing pages when use drops to zero. -+ * It's unlocked version of drm_gem_shmem_put_pages_locked(), caller must not hold -+ * GEM's reservation lock. -+ */ -+void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) -+{ -+ if (refcount_dec_not_one(&shmem->pages_use_count)) -+ return; -+ -+ dma_resv_lock(shmem->base.resv, NULL); -+ drm_gem_shmem_put_pages_locked(shmem); -+ dma_resv_unlock(shmem->base.resv); -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); -+ - /* - * drm_gem_shmem_get_pages - Increase use count on the backing pages for a shmem GEM object - * @shmem: shmem GEM object -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 6dedc0739fbc..525480488451 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -111,6 +111,7 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem); - - int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem); -+void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem); - int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (13 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko - ` (14 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -All drivers will be moved to get/put pages explicitly and then the last -put_pages() will be invoked during gem_free() time by some drivers. -We can't touch reservation lock when GEM is freed because that will cause -a spurious warning from lockdep when shrinker support will be added. -Lockdep doesn't know that fs_reclaim isn't functioning for a freed object, -and thus, can't deadlock. Release pages directly without taking reservation -lock if GEM is freed and its refcount is zero. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index f5ed64f78648..c7357110ca76 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -242,6 +242,22 @@ void drm_gem_shmem_put_pages(struct drm_gem_shmem_object *shmem) - if (refcount_dec_not_one(&shmem->pages_use_count)) - return; - -+ /* -+ * Destroying the object is a special case because acquiring -+ * the obj lock can cause a locking order inversion between -+ * reservation_ww_class_mutex and fs_reclaim. -+ * -+ * This deadlock is not actually possible, because no one should -+ * be already holding the lock when GEM is released. Unfortunately -+ * lockdep is not aware of this detail. So when the refcount drops -+ * to zero, we pretend it is already locked. -+ */ -+ if (!kref_read(&shmem->base.refcount)) { -+ if (refcount_dec_and_test(&shmem->pages_use_count)) -+ drm_gem_shmem_free_pages(shmem); -+ return; -+ } -+ - dma_resv_lock(shmem->base.resv, NULL); - drm_gem_shmem_put_pages_locked(shmem); - dma_resv_unlock(shmem->base.resv); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (14 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko - ` (13 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -To simplify the drm-shmem refcnt handling, we're moving away from -the implicit get_pages() that is used by get_pages_sgt(). From now on -drivers will have to pin pages while they use sgt. Lima driver doesn't -have shrinker, hence pages are pinned and sgt is valid as long as pages' -use-count > 0. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/lima/lima_gem.c | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c -index 2a97aa85416b..9c3e34a7fbed 100644 ---- a/drivers/gpu/drm/lima/lima_gem.c -+++ b/drivers/gpu/drm/lima/lima_gem.c -@@ -115,6 +115,7 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - return PTR_ERR(shmem); - - obj = &shmem->base; -+ bo = to_lima_bo(obj); - - /* Mali Utgard GPU can only support 32bit address space */ - mask = mapping_gfp_mask(obj->filp->f_mapping); -@@ -123,13 +124,17 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - mapping_set_gfp_mask(obj->filp->f_mapping, mask); - - if (is_heap) { -- bo = to_lima_bo(obj); - err = lima_heap_alloc(bo, NULL); - if (err) - goto out; - } else { -- struct sg_table *sgt = drm_gem_shmem_get_pages_sgt(shmem); -+ struct sg_table *sgt; - -+ err = drm_gem_shmem_get_pages(shmem); -+ if (err) -+ goto out; -+ -+ sgt = drm_gem_shmem_get_pages_sgt(shmem); - if (IS_ERR(sgt)) { - err = PTR_ERR(sgt); - goto out; -@@ -139,6 +144,9 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, - err = drm_gem_handle_create(file, obj, handle); - - out: -+ if (err && refcount_read(&bo->base.pages_use_count)) -+ drm_gem_shmem_put_pages(shmem); -+ - /* drop reference from allocate - handle holds it now */ - drm_gem_object_put(obj); - -@@ -152,6 +160,9 @@ static void lima_gem_free_object(struct drm_gem_object *obj) - if (!list_empty(&bo->va)) - dev_err(obj->dev->dev, "lima gem free bo still has va\n"); - -+ if (refcount_read(&bo->base.pages_use_count)) -+ drm_gem_shmem_put_pages(&bo->base); -+ - drm_gem_shmem_free(&bo->base); - } - --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (15 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko - ` (12 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -From: Boris Brezillon - -If some the pages or sgt allocation failed, we shouldn't release the -pages ref we got earlier, otherwise we will end up with unbalanced -get/put_pages() calls. We should instead leave everything in place -and let the BO release function deal with extra cleanup when the object -is destroyed, or let the fault handler try again next time it's called. - -Fixes: 187d2929206e ("drm/panfrost: Add support for GPU heap allocations") -Cc: -Signed-off-by: Boris Brezillon -Co-developed-by: Dmitry Osipenko -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index bd5a0073009d..4a0b4bf03f1a 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -502,11 +502,18 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - mapping_set_unevictable(mapping); - - for (i = page_offset; i < page_offset + NUM_FAULT_PAGES; i++) { -+ /* Can happen if the last fault only partially filled this -+ * section of the pages array before failing. In that case -+ * we skip already filled pages. -+ */ -+ if (pages[i]) -+ continue; -+ - pages[i] = shmem_read_mapping_page(mapping, i); - if (IS_ERR(pages[i])) { - ret = PTR_ERR(pages[i]); - pages[i] = NULL; -- goto err_pages; -+ goto err_unlock; - } - } - -@@ -514,7 +521,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - ret = sg_alloc_table_from_pages(sgt, pages + page_offset, - NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL); - if (ret) -- goto err_pages; -+ goto err_unlock; - - ret = dma_map_sgtable(pfdev->dev, sgt, DMA_BIDIRECTIONAL, 0); - if (ret) -@@ -537,8 +544,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - - err_map: - sg_free_table(sgt); --err_pages: -- drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (16 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 19/30] drm/virtio: " Dmitry Osipenko - ` (11 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -To simplify the drm-shmem refcnt handling, we're moving away from -the implicit get_pages() that is used by get_pages_sgt(). From now on -drivers will have to pin pages while they use sgt. Panfrost's shrinker -doesn't support swapping out BOs, hence pages are pinned and sgt is valid -as long as pages' use-count > 0. - -In Panfrost, panfrost_gem_mapping, which is the object representing a -GPU mapping of a BO, owns a pages ref. This guarantees that any BO being -mapped GPU side has its pages retained till the mapping is destroyed. - -Since pages are no longer guaranteed to stay pinned for the BO lifetime, -and MADVISE(DONT_NEED) flagging remains after the GEM handle has been -destroyed, we need to add an extra 'is_purgeable' check in -panfrost_gem_purge(), to make sure we're not trying to purge a BO that -already had its pages released. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/panfrost/panfrost_gem.c | 63 ++++++++++++++----- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 6 ++ - 2 files changed, 52 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index f268bd5c2884..7edfc12f7c1f 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -35,20 +35,6 @@ static void panfrost_gem_free_object(struct drm_gem_object *obj) - */ - WARN_ON_ONCE(!list_empty(&bo->mappings.list)); - -- if (bo->sgts) { -- int i; -- int n_sgt = bo->base.base.size / SZ_2M; -- -- for (i = 0; i < n_sgt; i++) { -- if (bo->sgts[i].sgl) { -- dma_unmap_sgtable(pfdev->dev, &bo->sgts[i], -- DMA_BIDIRECTIONAL, 0); -- sg_free_table(&bo->sgts[i]); -- } -- } -- kvfree(bo->sgts); -- } -- - drm_gem_shmem_free(&bo->base); - } - -@@ -85,11 +71,40 @@ panfrost_gem_teardown_mapping(struct panfrost_gem_mapping *mapping) - - static void panfrost_gem_mapping_release(struct kref *kref) - { -- struct panfrost_gem_mapping *mapping; -- -- mapping = container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_mapping *mapping = -+ container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_object *bo = mapping->obj; -+ struct panfrost_device *pfdev = bo->base.base.dev->dev_private; - - panfrost_gem_teardown_mapping(mapping); -+ -+ /* On heap BOs, release the sgts created in the fault handler path. */ -+ if (bo->sgts) { -+ int i, n_sgt = bo->base.base.size / SZ_2M; -+ -+ for (i = 0; i < n_sgt; i++) { -+ if (bo->sgts[i].sgl) { -+ dma_unmap_sgtable(pfdev->dev, &bo->sgts[i], -+ DMA_BIDIRECTIONAL, 0); -+ sg_free_table(&bo->sgts[i]); -+ } -+ } -+ kvfree(bo->sgts); -+ } -+ -+ /* Pages ref is owned by the panfrost_gem_mapping object. We must -+ * release our pages ref (if any), before releasing the object -+ * ref. -+ * Non-heap BOs acquired the pages at panfrost_gem_mapping creation -+ * time, and heap BOs may have acquired pages if the fault handler -+ * was called, in which case bo->sgts should be non-NULL. -+ */ -+ if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts) && -+ bo->base.madv >= 0) { -+ drm_gem_shmem_put_pages(&bo->base); -+ bo->sgts = NULL; -+ } -+ - drm_gem_object_put(&mapping->obj->base.base); - panfrost_mmu_ctx_put(mapping->mmu); - kfree(mapping); -@@ -125,6 +140,20 @@ int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv) - if (!mapping) - return -ENOMEM; - -+ if (!bo->is_heap && !bo->base.base.import_attach) { -+ /* Pages ref is owned by the panfrost_gem_mapping object. -+ * For non-heap BOs, we request pages at mapping creation -+ * time, such that the panfrost_mmu_map() call, further down in -+ * this function, is guaranteed to have pages_use_count > 0 -+ * when drm_gem_shmem_get_pages_sgt() is called. -+ */ -+ ret = drm_gem_shmem_get_pages(&bo->base); -+ if (ret) { -+ kfree(mapping); -+ return ret; -+ } -+ } -+ - INIT_LIST_HEAD(&mapping->node); - kref_init(&mapping->refcount); - drm_gem_object_get(obj); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index 02b60ea1433a..d4fb0854cf2f 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -50,6 +50,12 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - if (!dma_resv_trylock(shmem->base.resv)) - goto unlock_mappings; - -+ /* BO might have become unpurgeable if the last pages_use_count ref -+ * was dropped, but the BO hasn't been destroyed yet. -+ */ -+ if (!drm_gem_shmem_is_purgeable(shmem)) -+ goto unlock_mappings; -+ - panfrost_gem_teardown_mappings_locked(bo); - drm_gem_shmem_purge_locked(&bo->base); - ret = true; --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 19/30] drm/virtio: Explicitly get and put drm-shmem pages - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (17 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko - ` (10 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -We're moving away from implicit get_pages() that is done by -get_pages_sgt() to simplify the refcnt handling. Drivers will have -to pin pages while they use sgt. VirtIO-GPU doesn't support shrinker, -hence pages are pinned and sgt is valid as long as pages' use-count > 0. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_object.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index c7e74cf13022..e58528c562ef 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -67,6 +67,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) - - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); - if (virtio_gpu_is_shmem(bo)) { -+ drm_gem_shmem_put_pages(&bo->base); - drm_gem_shmem_free(&bo->base); - } else if (virtio_gpu_is_vram(bo)) { - struct virtio_gpu_object_vram *vram = to_virtio_gpu_vram(bo); -@@ -196,9 +197,13 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - return PTR_ERR(shmem_obj); - bo = gem_to_virtio_gpu_obj(&shmem_obj->base); - -+ ret = drm_gem_shmem_get_pages(shmem_obj); -+ if (ret) -+ goto err_free_gem; -+ - ret = virtio_gpu_resource_id_get(vgdev, &bo->hw_res_handle); - if (ret < 0) -- goto err_free_gem; -+ goto err_put_pages; - - bo->dumb = params->dumb; - -@@ -243,6 +248,8 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - kvfree(ents); - err_put_id: - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); -+err_put_pages: -+ drm_gem_shmem_put_pages(shmem_obj); - err_free_gem: - drm_gem_shmem_free(shmem_obj); - return ret; --- -2.43.0 - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (19 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko - ` (8 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -In a preparation to addition of drm-shmem memory shrinker support, change -the SGT allocation policy in this way: - -1. SGT can be allocated only if shmem pages are pinned at the -time of allocation, otherwise allocation fails. - -2. Drivers must ensure that pages are pinned during the time of SGT usage -and should get new SGT if pages were unpinned. - -This new policy is required by the shrinker because it will move pages -to/from SWAP unless pages are pinned, invalidating SGT pointer once pages -are relocated. - -Previous patches prepared drivers to the new policy. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 55 ++++++++++++++------------ - 1 file changed, 29 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index c7357110ca76..ff5437ab2c95 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -133,6 +133,14 @@ drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ if (shmem->sgt) { -+ dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -+ DMA_BIDIRECTIONAL, 0); -+ sg_free_table(shmem->sgt); -+ kfree(shmem->sgt); -+ shmem->sgt = NULL; -+ } -+ - #ifdef CONFIG_X86 - if (shmem->map_wc) - set_pages_array_wb(shmem->pages, obj->size >> PAGE_SHIFT); -@@ -155,24 +163,12 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -- if (obj->import_attach) { -+ if (obj->import_attach) - drm_prime_gem_destroy(obj, shmem->sgt); -- } else { -- drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); - -- if (shmem->sgt) { -- dma_unmap_sgtable(obj->dev->dev, shmem->sgt, -- DMA_BIDIRECTIONAL, 0); -- sg_free_table(shmem->sgt); -- kfree(shmem->sgt); -- } -- if (shmem->pages && -- refcount_dec_and_test(&shmem->pages_use_count)) -- drm_gem_shmem_free_pages(shmem); -- -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -- } -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); - - drm_gem_object_release(obj); - kfree(shmem); -@@ -722,6 +718,9 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - - drm_WARN_ON(obj->dev, obj->import_attach); - -+ if (drm_WARN_ON(obj->dev, !shmem->pages)) -+ return ERR_PTR(-ENOMEM); -+ - return drm_prime_pages_to_sg(obj->dev, shmem->pages, obj->size >> PAGE_SHIFT); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_get_sg_table); -@@ -737,15 +736,10 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - - drm_WARN_ON(obj->dev, obj->import_attach); - -- ret = drm_gem_shmem_get_pages_locked(shmem); -- if (ret) -- return ERR_PTR(ret); -- - sgt = drm_gem_shmem_get_sg_table(shmem); -- if (IS_ERR(sgt)) { -- ret = PTR_ERR(sgt); -- goto err_put_pages; -- } -+ if (IS_ERR(sgt)) -+ return sgt; -+ - /* Map the pages for use by the h/w. */ - ret = dma_map_sgtable(obj->dev->dev, sgt, DMA_BIDIRECTIONAL, 0); - if (ret) -@@ -758,8 +752,6 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - err_free_sgt: - sg_free_table(sgt); - kfree(sgt); --err_put_pages: -- drm_gem_shmem_put_pages_locked(shmem); - return ERR_PTR(ret); - } - -@@ -776,6 +768,17 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - * and difference between dma-buf imported and natively allocated objects. - * drm_gem_shmem_get_sg_table() should not be directly called by drivers. - * -+ * Drivers should adhere to these SGT usage rules: -+ * -+ * 1. SGT should be allocated only if shmem pages are pinned at the -+ * time of allocation, otherwise allocation will fail. -+ * -+ * 2. Drivers should ensure that pages are pinned during the time of -+ * SGT usage and should get new SGT if pages were unpinned. -+ * -+ * Drivers don't own returned SGT and must take care of the SGT pointer -+ * lifetime. SGT is valid as long as GEM pages that backing SGT are pinned. -+ * - * Returns: - * A pointer to the scatter/gather table of pinned pages or errno on failure. - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (20 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko - ` (7 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Introduce common drm-shmem shrinker for DRM drivers. - -To start using drm-shmem shrinker drivers should do the following: - -1. Implement evict() callback of GEM object where driver should check - whether object is purgeable or evictable using drm-shmem helpers and - perform the shrinking action - -2. Initialize drm-shmem internals using drmm_gem_shmem_init(drm_device), - which will register drm-shmem shrinker - -3. Implement madvise IOCTL that will use drm_gem_shmem_madvise() - -Signed-off-by: Daniel Almeida -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 365 +++++++++++++++++- - drivers/gpu/drm/panfrost/panfrost_gem.c | 3 +- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 13 +- - include/drm/drm_device.h | 10 +- - include/drm/drm_gem_shmem_helper.h | 68 +++- - 5 files changed, 433 insertions(+), 26 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index ff5437ab2c95..59cebd1e35af 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -128,11 +129,49 @@ struct drm_gem_shmem_object *drm_gem_shmem_create(struct drm_device *dev, size_t - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_create); - -+static bool drm_gem_shmem_is_evictable(struct drm_gem_shmem_object *shmem) -+{ -+ return (shmem->madv >= 0) && shmem->base.funcs->evict && -+ refcount_read(&shmem->pages_use_count) && -+ !refcount_read(&shmem->pages_pin_count) && -+ !shmem->base.dma_buf && !shmem->base.import_attach && -+ !shmem->evicted; -+} -+ -+static void -+drm_gem_shmem_shrinker_update_lru_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ struct drm_gem_shmem *shmem_mm = obj->dev->shmem_mm; -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (!shmem_shrinker || obj->import_attach) -+ return; -+ -+ if (shmem->madv < 0) -+ drm_gem_lru_remove(&shmem->base); -+ else if (drm_gem_shmem_is_evictable(shmem) || drm_gem_shmem_is_purgeable(shmem)) -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_evictable, &shmem->base); -+ else if (shmem->evicted) -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_evicted, &shmem->base); -+ else if (!shmem->pages) -+ drm_gem_lru_remove(&shmem->base); -+ else -+ drm_gem_lru_move_tail(&shmem_shrinker->lru_pinned, &shmem->base); -+} -+ - static void - drm_gem_shmem_free_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ if (!shmem->pages) { -+ drm_WARN_ON(obj->dev, !shmem->evicted && shmem->madv >= 0); -+ return; -+ } -+ - if (shmem->sgt) { - dma_unmap_sgtable(obj->dev->dev, shmem->sgt, - DMA_BIDIRECTIONAL, 0); -@@ -175,15 +214,26 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_free); - --static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) -+static int -+drm_gem_shmem_acquire_pages(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - struct page **pages; - -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return -EINVAL; -+ - dma_resv_assert_held(shmem->base.resv); - -- if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ if (shmem->madv < 0) { -+ drm_WARN_ON(obj->dev, shmem->pages); -+ return -ENOMEM; -+ } -+ -+ if (shmem->pages) { -+ drm_WARN_ON(obj->dev, !shmem->evicted); - return 0; -+ } - - pages = drm_gem_get_pages(obj); - if (IS_ERR(pages)) { -@@ -204,8 +254,29 @@ static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) - - shmem->pages = pages; - -+ return 0; -+} -+ -+static int drm_gem_shmem_get_pages_locked(struct drm_gem_shmem_object *shmem) -+{ -+ int err; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (shmem->madv < 0) -+ return -ENOMEM; -+ -+ if (refcount_inc_not_zero(&shmem->pages_use_count)) -+ return 0; -+ -+ err = drm_gem_shmem_acquire_pages(shmem); -+ if (err) -+ return err; -+ - refcount_set(&shmem->pages_use_count, 1); - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ - return 0; - } - -@@ -222,6 +293,8 @@ void drm_gem_shmem_put_pages_locked(struct drm_gem_shmem_object *shmem) - - if (refcount_dec_and_test(&shmem->pages_use_count)) - drm_gem_shmem_free_pages(shmem); -+ -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages_locked); - -@@ -266,6 +339,11 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_put_pages); - * - * This function Increases the use count and allocates the backing pages if - * use-count equals to zero. -+ * -+ * Note that this function doesn't pin pages in memory. If your driver -+ * uses drm-shmem shrinker, then it's free to relocate pages to swap. -+ * Getting pages only guarantees that pages are allocated, and not that -+ * pages reside in memory. In order to pin pages use drm_gem_shmem_pin(). - */ - int drm_gem_shmem_get_pages(struct drm_gem_shmem_object *shmem) - { -@@ -291,6 +369,10 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) - if (refcount_inc_not_zero(&shmem->pages_pin_count)) - return 0; - -+ ret = drm_gem_shmem_swapin_locked(shmem); -+ if (ret) -+ return ret; -+ - ret = drm_gem_shmem_get_pages_locked(shmem); - if (!ret) - refcount_set(&shmem->pages_pin_count, 1); -@@ -489,29 +571,48 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv) - - madv = shmem->madv; - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ - return (madv >= 0); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise_locked); - --void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) -+int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv) - { - struct drm_gem_object *obj = &shmem->base; -- struct drm_device *dev = obj->dev; -+ int ret; - -- dma_resv_assert_held(shmem->base.resv); -+ ret = dma_resv_lock_interruptible(obj->resv, NULL); -+ if (ret) -+ return ret; - -- drm_WARN_ON(obj->dev, !drm_gem_shmem_is_purgeable(shmem)); -+ ret = drm_gem_shmem_madvise_locked(shmem, madv); -+ dma_resv_unlock(obj->resv); - -- dma_unmap_sgtable(dev->dev, shmem->sgt, DMA_BIDIRECTIONAL, 0); -- sg_free_table(shmem->sgt); -- kfree(shmem->sgt); -- shmem->sgt = NULL; -+ return ret; -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_madvise); - -- drm_gem_shmem_put_pages_locked(shmem); -+static void -+drm_gem_shmem_shrinker_put_pages_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ struct drm_device *dev = obj->dev; - -- shmem->madv = -1; -+ dma_resv_assert_held(shmem->base.resv); - -+ if (shmem->evicted) -+ return; -+ -+ drm_gem_shmem_free_pages(shmem); - drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping); -+} -+ -+void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+ drm_gem_shmem_shrinker_put_pages_locked(shmem); - drm_gem_free_mmap_offset(obj); - - /* Our goal here is to return as much of the memory as -@@ -522,9 +623,45 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - shmem_truncate_range(file_inode(obj->filp), 0, (loff_t)-1); - - invalidate_mapping_pages(file_inode(obj->filp)->i_mapping, 0, (loff_t)-1); -+ -+ shmem->madv = -1; -+ shmem->evicted = false; -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_purge_locked); - -+/** -+ * drm_gem_shmem_swapin_locked() - Moves shmem GEM back to memory and enables -+ * hardware access to the memory. -+ * @shmem: shmem GEM object -+ * -+ * This function moves shmem GEM back to memory if it was previously evicted -+ * by the memory shrinker. The GEM is ready to use on success. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+int drm_gem_shmem_swapin_locked(struct drm_gem_shmem_object *shmem) -+{ -+ int err; -+ -+ dma_resv_assert_held(shmem->base.resv); -+ -+ if (!shmem->evicted) -+ return 0; -+ -+ err = drm_gem_shmem_acquire_pages(shmem); -+ if (err) -+ return err; -+ -+ shmem->evicted = false; -+ -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_swapin_locked); -+ - /** - * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object - * @file: DRM file structure to create the dumb buffer for -@@ -571,22 +708,32 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf) - vm_fault_t ret; - struct page *page; - pgoff_t page_offset; -+ int err; - - /* We don't use vmf->pgoff since that has the fake offset */ - page_offset = (vmf->address - vma->vm_start) >> PAGE_SHIFT; - - dma_resv_lock(shmem->base.resv, NULL); - -- if (page_offset >= num_pages || -- drm_WARN_ON_ONCE(obj->dev, !shmem->pages) || -- shmem->madv < 0) { -+ err = drm_gem_shmem_swapin_locked(shmem); -+ if (err) { -+ ret = VM_FAULT_OOM; -+ goto unlock; -+ } -+ -+ if (page_offset >= num_pages || !shmem->pages) { - ret = VM_FAULT_SIGBUS; - } else { -+ /* -+ * shmem->pages is guaranteed to be valid while reservation -+ * lock is held and drm_gem_shmem_swapin_locked() succeeds. -+ */ - page = shmem->pages[page_offset]; - - ret = vmf_insert_pfn(vma, vmf->address, page_to_pfn(page)); - } - -+unlock: - dma_resv_unlock(shmem->base.resv); - - return ret; -@@ -609,6 +756,7 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) - drm_WARN_ON_ONCE(obj->dev, - !refcount_inc_not_zero(&shmem->pages_use_count)); - -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); - dma_resv_unlock(shmem->base.resv); - - drm_gem_vm_open(vma); -@@ -694,7 +842,9 @@ void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - drm_printf_indent(p, indent, "pages_pin_count=%u\n", refcount_read(&shmem->pages_pin_count)); - drm_printf_indent(p, indent, "pages_use_count=%u\n", refcount_read(&shmem->pages_use_count)); - drm_printf_indent(p, indent, "vmap_use_count=%u\n", refcount_read(&shmem->vmap_use_count)); -+ drm_printf_indent(p, indent, "evicted=%d\n", shmem->evicted); - drm_printf_indent(p, indent, "vaddr=%p\n", shmem->vaddr); -+ drm_printf_indent(p, indent, "madv=%d\n", shmem->madv); - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_print_info); - -@@ -784,8 +934,13 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - */ - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem) - { -- int ret; -+ struct drm_gem_object *obj = &shmem->base; - struct sg_table *sgt; -+ int ret; -+ -+ if (drm_WARN_ON(obj->dev, drm_gem_shmem_is_evictable(shmem)) || -+ drm_WARN_ON(obj->dev, drm_gem_shmem_is_purgeable(shmem))) -+ return ERR_PTR(-EBUSY); - - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) -@@ -832,6 +987,184 @@ drm_gem_shmem_prime_import_sg_table(struct drm_device *dev, - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_prime_import_sg_table); - -+static unsigned long -+drm_gem_shmem_shrinker_count_objects(struct shrinker *shrinker, -+ struct shrink_control *sc) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = shrinker->private_data; -+ unsigned long count = shmem_shrinker->lru_evictable.count; -+ -+ if (count >= SHRINK_EMPTY) -+ return SHRINK_EMPTY - 1; -+ -+ return count ?: SHRINK_EMPTY; -+} -+ -+void drm_gem_shmem_evict_locked(struct drm_gem_shmem_object *shmem) -+{ -+ struct drm_gem_object *obj = &shmem->base; -+ -+ drm_WARN_ON(obj->dev, !drm_gem_shmem_is_evictable(shmem)); -+ drm_WARN_ON(obj->dev, shmem->evicted); -+ -+ drm_gem_shmem_shrinker_put_pages_locked(shmem); -+ -+ shmem->evicted = true; -+ drm_gem_shmem_shrinker_update_lru_locked(shmem); -+} -+EXPORT_SYMBOL_GPL(drm_gem_shmem_evict_locked); -+ -+static bool drm_gem_shmem_shrinker_evict_locked(struct drm_gem_object *obj) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ int err; -+ -+ if (!drm_gem_shmem_is_evictable(shmem) || -+ get_nr_swap_pages() < obj->size >> PAGE_SHIFT) -+ return false; -+ -+ err = drm_gem_evict_locked(obj); -+ if (err) -+ return false; -+ -+ return true; -+} -+ -+static bool drm_gem_shmem_shrinker_purge_locked(struct drm_gem_object *obj) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ int err; -+ -+ if (!drm_gem_shmem_is_purgeable(shmem)) -+ return false; -+ -+ err = drm_gem_evict_locked(obj); -+ if (err) -+ return false; -+ -+ return true; -+} -+ -+static unsigned long -+drm_gem_shmem_shrinker_scan_objects(struct shrinker *shrinker, -+ struct shrink_control *sc) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = shrinker->private_data; -+ unsigned long nr_to_scan = sc->nr_to_scan; -+ unsigned long remaining = 0; -+ unsigned long freed = 0; -+ -+ /* purge as many objects as we can */ -+ freed += drm_gem_lru_scan(&shmem_shrinker->lru_evictable, -+ nr_to_scan, &remaining, -+ drm_gem_shmem_shrinker_purge_locked); -+ -+ /* evict as many objects as we can */ -+ if (freed < nr_to_scan) -+ freed += drm_gem_lru_scan(&shmem_shrinker->lru_evictable, -+ nr_to_scan - freed, &remaining, -+ drm_gem_shmem_shrinker_evict_locked); -+ -+ return (freed > 0 && remaining > 0) ? freed : SHRINK_STOP; -+} -+ -+static int drm_gem_shmem_shrinker_init(struct drm_gem_shmem *shmem_mm, -+ const char *shrinker_name) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ struct shrinker *shrinker; -+ -+ shrinker = shrinker_alloc(0, shrinker_name); -+ if (!shrinker) -+ return -ENOMEM; -+ -+ shrinker->count_objects = drm_gem_shmem_shrinker_count_objects; -+ shrinker->scan_objects = drm_gem_shmem_shrinker_scan_objects; -+ shrinker->private_data = shmem_shrinker; -+ shrinker->seeks = DEFAULT_SEEKS; -+ -+ mutex_init(&shmem_shrinker->lock); -+ shmem_shrinker->shrinker = shrinker; -+ drm_gem_lru_init(&shmem_shrinker->lru_evictable, &shmem_shrinker->lock); -+ drm_gem_lru_init(&shmem_shrinker->lru_evicted, &shmem_shrinker->lock); -+ drm_gem_lru_init(&shmem_shrinker->lru_pinned, &shmem_shrinker->lock); -+ -+ shrinker_register(shrinker); -+ -+ return 0; -+} -+ -+static void drm_gem_shmem_shrinker_release(struct drm_device *dev, -+ struct drm_gem_shmem *shmem_mm) -+{ -+ struct drm_gem_shmem_shrinker *shmem_shrinker = &shmem_mm->shrinker; -+ -+ shrinker_free(shmem_shrinker->shrinker); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_evictable.list)); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_evicted.list)); -+ drm_WARN_ON(dev, !list_empty(&shmem_shrinker->lru_pinned.list)); -+ mutex_destroy(&shmem_shrinker->lock); -+} -+ -+static int drm_gem_shmem_init(struct drm_device *dev) -+{ -+ int err; -+ -+ if (drm_WARN_ON(dev, dev->shmem_mm)) -+ return -EBUSY; -+ -+ dev->shmem_mm = kzalloc(sizeof(*dev->shmem_mm), GFP_KERNEL); -+ if (!dev->shmem_mm) -+ return -ENOMEM; -+ -+ err = drm_gem_shmem_shrinker_init(dev->shmem_mm, dev->unique); -+ if (err) -+ goto free_gem_shmem; -+ -+ return 0; -+ -+free_gem_shmem: -+ kfree(dev->shmem_mm); -+ dev->shmem_mm = NULL; -+ -+ return err; -+} -+ -+static void drm_gem_shmem_release(struct drm_device *dev, void *ptr) -+{ -+ struct drm_gem_shmem *shmem_mm = dev->shmem_mm; -+ -+ drm_gem_shmem_shrinker_release(dev, shmem_mm); -+ dev->shmem_mm = NULL; -+ kfree(shmem_mm); -+} -+ -+/** -+ * drmm_gem_shmem_init() - Initialize drm-shmem internals -+ * @dev: DRM device -+ * -+ * Cleanup is automatically managed as part of DRM device releasing. -+ * Calling this function multiple times will result in a error. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+int drmm_gem_shmem_init(struct drm_device *dev) -+{ -+ int err; -+ -+ err = drm_gem_shmem_init(dev); -+ if (err) -+ return err; -+ -+ err = drmm_add_action_or_reset(dev, drm_gem_shmem_release, NULL); -+ if (err) -+ return err; -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(drmm_gem_shmem_init); -+ - MODULE_DESCRIPTION("DRM SHMEM memory-management helpers"); - MODULE_IMPORT_NS(DMA_BUF); - MODULE_LICENSE("GPL v2"); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index 7edfc12f7c1f..8c26b7e41b95 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -99,8 +99,7 @@ static void panfrost_gem_mapping_release(struct kref *kref) - * time, and heap BOs may have acquired pages if the fault handler - * was called, in which case bo->sgts should be non-NULL. - */ -- if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts) && -- bo->base.madv >= 0) { -+ if (!bo->base.base.import_attach && (!bo->is_heap || bo->sgts)) { - drm_gem_shmem_put_pages(&bo->base); - bo->sgts = NULL; - } -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -index d4fb0854cf2f..7b4deba803ed 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -@@ -15,6 +15,13 @@ - #include "panfrost_gem.h" - #include "panfrost_mmu.h" - -+static bool panfrost_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) -+{ -+ return (shmem->madv > 0) && -+ !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -+ !shmem->base.dma_buf && !shmem->base.import_attach; -+} -+ - static unsigned long - panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) - { -@@ -26,7 +33,7 @@ panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc - return 0; - - list_for_each_entry(shmem, &pfdev->shrinker_list, madv_list) { -- if (drm_gem_shmem_is_purgeable(shmem)) -+ if (panfrost_gem_shmem_is_purgeable(shmem)) - count += shmem->base.size >> PAGE_SHIFT; - } - -@@ -53,7 +60,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) - /* BO might have become unpurgeable if the last pages_use_count ref - * was dropped, but the BO hasn't been destroyed yet. - */ -- if (!drm_gem_shmem_is_purgeable(shmem)) -+ if (!panfrost_gem_shmem_is_purgeable(shmem)) - goto unlock_mappings; - - panfrost_gem_teardown_mappings_locked(bo); -@@ -80,7 +87,7 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) - list_for_each_entry_safe(shmem, tmp, &pfdev->shrinker_list, madv_list) { - if (freed >= sc->nr_to_scan) - break; -- if (drm_gem_shmem_is_purgeable(shmem) && -+ if (panfrost_gem_shmem_is_purgeable(shmem) && - panfrost_gem_purge(&shmem->base)) { - freed += shmem->base.size >> PAGE_SHIFT; - list_del_init(&shmem->madv_list); -diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h -index 63767cf24371..6e729e716505 100644 ---- a/include/drm/drm_device.h -+++ b/include/drm/drm_device.h -@@ -15,6 +15,7 @@ struct drm_vblank_crtc; - struct drm_vma_offset_manager; - struct drm_vram_mm; - struct drm_fb_helper; -+struct drm_gem_shmem_shrinker; - - struct inode; - -@@ -289,8 +290,13 @@ struct drm_device { - /** @vma_offset_manager: GEM information */ - struct drm_vma_offset_manager *vma_offset_manager; - -- /** @vram_mm: VRAM MM memory manager */ -- struct drm_vram_mm *vram_mm; -+ union { -+ /** @vram_mm: VRAM MM memory manager */ -+ struct drm_vram_mm *vram_mm; -+ -+ /** @shmem_mm: SHMEM GEM memory manager */ -+ struct drm_gem_shmem *shmem_mm; -+ }; - - /** - * @switch_power_state: -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 525480488451..df97c11fc99a 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -6,6 +6,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -13,6 +14,7 @@ - #include - - struct dma_buf_attachment; -+struct drm_device; - struct drm_mode_create_dumb; - struct drm_printer; - struct sg_table; -@@ -54,8 +56,8 @@ struct drm_gem_shmem_object { - * @madv: State for madvise - * - * 0 is active/inuse. -+ * 1 is not-needed/can-be-purged - * A negative value is the object is purged. -- * Positive values are driver specific and not used by the helpers. - */ - int madv; - -@@ -102,6 +104,14 @@ struct drm_gem_shmem_object { - * @map_wc: map object write-combined (instead of using shmem defaults). - */ - bool map_wc : 1; -+ -+ /** -+ * @evicted: True if shmem pages are evicted by the memory shrinker. -+ * Used internally by memory shrinker. The evicted pages can be -+ * moved back to memory using drm_gem_shmem_swapin_locked(), unlike -+ * the purged pages (madv < 0) that are destroyed permanently. -+ */ -+ bool evicted : 1; - }; - - #define to_drm_gem_shmem_obj(obj) \ -@@ -122,14 +132,19 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, - int drm_gem_shmem_mmap(struct drm_gem_shmem_object *shmem, struct vm_area_struct *vma); - - int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); -+int drm_gem_shmem_madvise(struct drm_gem_shmem_object *shmem, int madv); - - static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) - { -- return (shmem->madv > 0) && -- !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -+ return (shmem->madv > 0) && shmem->base.funcs->evict && -+ refcount_read(&shmem->pages_use_count) && -+ !refcount_read(&shmem->pages_pin_count) && - !shmem->base.dma_buf && !shmem->base.import_attach; - } - -+int drm_gem_shmem_swapin_locked(struct drm_gem_shmem_object *shmem); -+ -+void drm_gem_shmem_evict_locked(struct drm_gem_shmem_object *shmem); - void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); -@@ -273,6 +288,53 @@ static inline int drm_gem_shmem_object_mmap(struct drm_gem_object *obj, struct v - return drm_gem_shmem_mmap(shmem, vma); - } - -+/** -+ * drm_gem_shmem_object_madvise - unlocked GEM object function for drm_gem_shmem_madvise_locked() -+ * @obj: GEM object -+ * @madv: Madvise value -+ * -+ * This function wraps drm_gem_shmem_madvise_locked(), providing unlocked variant. -+ * -+ * Returns: -+ * 0 on success or a negative error code on failure. -+ */ -+static inline int drm_gem_shmem_object_madvise(struct drm_gem_object *obj, int madv) -+{ -+ struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -+ -+ return drm_gem_shmem_madvise(shmem, madv); -+} -+ -+/** -+ * struct drm_gem_shmem_shrinker - Memory shrinker of GEM shmem memory manager -+ */ -+struct drm_gem_shmem_shrinker { -+ /** @lock: Protects @lru_* */ -+ struct mutex lock; -+ -+ /** @shrinker: Shrinker for purging shmem GEM objects */ -+ struct shrinker *shrinker; -+ -+ /** @lru_pinned: List of pinned shmem GEM objects */ -+ struct drm_gem_lru lru_pinned; -+ -+ /** @lru_evictable: List of shmem GEM objects to be evicted */ -+ struct drm_gem_lru lru_evictable; -+ -+ /** @lru_evicted: List of evicted shmem GEM objects */ -+ struct drm_gem_lru lru_evicted; -+}; -+ -+/** -+ * struct drm_gem_shmem - GEM shmem memory manager -+ */ -+struct drm_gem_shmem { -+ /** @shrinker: GEM shmem shrinker */ -+ struct drm_gem_shmem_shrinker shrinker; -+}; -+ -+int drmm_gem_shmem_init(struct drm_device *dev); -+ - /* - * Driver ops - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (21 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko - ` (6 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Export drm_gem_shmem_get_pages_sgt_locked() that will be used by virtio-gpu -shrinker during GEM swap-in operation done under the held reservation lock. - -Reviewed-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 22 +++++++++++++++++++++- - include/drm/drm_gem_shmem_helper.h | 1 + - 2 files changed, 22 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 59cebd1e35af..8fd7851c088b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -875,12 +875,31 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - } - EXPORT_SYMBOL_GPL(drm_gem_shmem_get_sg_table); - --static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem) -+/** -+ * drm_gem_shmem_get_pages_sgt_locked - Provide a scatter/gather table of pinned -+ * pages for a shmem GEM object -+ * @shmem: shmem GEM object -+ * -+ * This is a locked version of @drm_gem_shmem_get_sg_table that exports a -+ * scatter/gather table suitable for PRIME usage by calling the standard -+ * DMA mapping API. -+ * -+ * Drivers must hold GEM's reservation lock when using this function. -+ * -+ * Drivers who need to acquire an scatter/gather table for objects need to call -+ * drm_gem_shmem_get_pages_sgt() instead. -+ * -+ * Returns: -+ * A pointer to the scatter/gather table of pinned pages or error pointer on failure. -+ */ -+struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - int ret; - struct sg_table *sgt; - -+ dma_resv_assert_held(shmem->base.resv); -+ - if (shmem->sgt) - return shmem->sgt; - -@@ -904,6 +923,7 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_ - kfree(sgt); - return ERR_PTR(ret); - } -+EXPORT_SYMBOL_GPL(drm_gem_shmem_get_pages_sgt_locked); - - /** - * drm_gem_shmem_get_pages_sgt - Pin pages, dma map them, and return a -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index df97c11fc99a..167f00f089de 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -149,6 +149,7 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem); - - struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem); - struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem); -+struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem); - - void drm_gem_shmem_print_info(const struct drm_gem_shmem_object *shmem, - struct drm_printer *p, unsigned int indent); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (22 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko - ` (5 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -SGT isn't refcounted. Once SGT pointer has been obtained, it remains the -same for both locked and unlocked get_pages_sgt(). Return cached SGT -directly without taking a potentially expensive lock. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 8fd7851c088b..e6e6e693ab95 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -962,6 +962,18 @@ struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_shmem_object *shmem) - drm_WARN_ON(obj->dev, drm_gem_shmem_is_purgeable(shmem))) - return ERR_PTR(-EBUSY); - -+ /* -+ * Drivers that use shrinker should take into account that shrinker -+ * may relocate BO, thus invalidating the returned SGT pointer. -+ * Such drivers should pin GEM while they use SGT. -+ * -+ * Drivers that don't use shrinker should take into account that -+ * SGT is released together with the GEM pages. Pages should be kept -+ * alive while SGT is used. -+ */ -+ if (shmem->sgt) -+ return shmem->sgt; -+ - ret = dma_resv_lock_interruptible(shmem->base.resv, NULL); - if (ret) - return ERR_PTR(ret); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (23 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko - ` (4 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Don't free shmem object if it has pages that are in use at the time of -the GEM's freeing if DRM driver doesn't manage GEM/pages lifetime properly. -This prevents memory corruption due to the use-after-free bug in exchange -to leaking GEM. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index e6e6e693ab95..0d95d723b90d 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -205,9 +205,15 @@ void drm_gem_shmem_free(struct drm_gem_shmem_object *shmem) - if (obj->import_attach) - drm_prime_gem_destroy(obj, shmem->sgt); - -- drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)); -- drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count)); -+ /* -+ * Prevent memory corruption caused by the use-after-free bug in a -+ * case where shmem user erroneously holds reference to pages while -+ * GEM is freed by leaking the GEM. -+ */ -+ if (drm_WARN_ON(obj->dev, refcount_read(&shmem->vmap_use_count)) || -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_use_count)) || -+ drm_WARN_ON(obj->dev, refcount_read(&shmem->pages_pin_count))) -+ return; - - drm_gem_object_release(obj); - kfree(shmem); --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (24 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko - ` (3 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Turn sanity warnings about DRM-SHMEM API misuse into a error conditions -for cases where imported GEM is used when it shouldn't be used. - -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 0d95d723b90d..7d2fe12bd793 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -409,7 +409,8 @@ int drm_gem_shmem_pin(struct drm_gem_shmem_object *shmem) - struct drm_gem_object *obj = &shmem->base; - int ret; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return -EINVAL; - - if (refcount_inc_not_zero(&shmem->pages_pin_count)) - return 0; -@@ -872,7 +873,8 @@ struct sg_table *drm_gem_shmem_get_sg_table(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return ERR_PTR(-EINVAL); - - if (drm_WARN_ON(obj->dev, !shmem->pages)) - return ERR_PTR(-ENOMEM); -@@ -909,7 +911,8 @@ struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object - if (shmem->sgt) - return shmem->sgt; - -- drm_WARN_ON(obj->dev, obj->import_attach); -+ if (drm_WARN_ON(obj->dev, obj->import_attach)) -+ return ERR_PTR(-EINVAL); - - sgt = drm_gem_shmem_get_sg_table(shmem); - if (IS_ERR(sgt)) --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (25 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko - ` (2 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare to addition of memory shrinker support by pinning display -framebuffer BO pages in memory while they are in use by display on host. -Shrinker is free to relocate framebuffer BO pages if it doesn't know that -pages are in use, thus pin the pages to disallow shrinker to move them. - -Acked-by: Gerd Hoffmann -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ - drivers/gpu/drm/virtio/virtgpu_gem.c | 19 +++++++++++++++++++ - drivers/gpu/drm/virtio/virtgpu_plane.c | 17 +++++++++++++++-- - 3 files changed, 36 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index bb7d86a0c6a1..83d1e4622292 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -318,6 +318,8 @@ void virtio_gpu_array_put_free(struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_work(struct work_struct *work); -+int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); -+void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - - /* virtgpu_vq.c */ - int virtio_gpu_alloc_vbufs(struct virtio_gpu_device *vgdev); -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 7db48d17ee3a..625c05d625bf 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -294,3 +294,22 @@ void virtio_gpu_array_put_free_work(struct work_struct *work) - } - spin_unlock(&vgdev->obj_free_lock); - } -+ -+int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) -+{ -+ int err; -+ -+ if (virtio_gpu_is_shmem(bo)) { -+ err = drm_gem_shmem_pin(&bo->base); -+ if (err) -+ return err; -+ } -+ -+ return 0; -+} -+ -+void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo) -+{ -+ if (virtio_gpu_is_shmem(bo)) -+ drm_gem_shmem_unpin(&bo->base); -+} -diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c -index a72a2dbda031..162fb8a44d71 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_plane.c -+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c -@@ -248,20 +248,28 @@ static int virtio_gpu_plane_prepare_fb(struct drm_plane *plane, - struct virtio_gpu_device *vgdev = dev->dev_private; - struct virtio_gpu_framebuffer *vgfb; - struct virtio_gpu_object *bo; -+ int err; - - if (!new_state->fb) - return 0; - - vgfb = to_virtio_gpu_framebuffer(new_state->fb); - bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]); -- if (!bo || (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob)) -+ -+ err = virtio_gpu_gem_pin(bo); -+ if (err) -+ return err; -+ -+ if (plane->type == DRM_PLANE_TYPE_PRIMARY && !bo->guest_blob) - return 0; - - if (bo->dumb && (plane->state->fb != new_state->fb)) { - vgfb->fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, - 0); -- if (!vgfb->fence) -+ if (!vgfb->fence) { -+ virtio_gpu_gem_unpin(bo); - return -ENOMEM; -+ } - } - - return 0; -@@ -271,15 +279,20 @@ static void virtio_gpu_plane_cleanup_fb(struct drm_plane *plane, - struct drm_plane_state *state) - { - struct virtio_gpu_framebuffer *vgfb; -+ struct virtio_gpu_object *bo; - - if (!state->fb) - return; - - vgfb = to_virtio_gpu_framebuffer(state->fb); -+ bo = gem_to_virtio_gpu_obj(vgfb->base.obj[0]); -+ - if (vgfb->fence) { - dma_fence_put(&vgfb->fence->f); - vgfb->fence = NULL; - } -+ -+ virtio_gpu_gem_unpin(bo); - } - - static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (26 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Prepare for addition of memory shrinker support by attaching shmem pages -to host dynamically on first use. Previously the attachment vq command -wasn't fenced and there was no vq kick made in the BO creation code path, -hence the attachment already was happening dynamically, but implicitly. -Making attachment explicitly dynamic will allow to simplify and reuse more -code when shrinker will be added. The virtio_gpu_object_shmem_init() now -works under the held reservation lock, which will be important to have for -shrinker to avoid moving pages while they are in active use by the driver. - -Acked-by: Gerd Hoffmann -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 7 +++ - drivers/gpu/drm/virtio/virtgpu_gem.c | 26 +++++++++ - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 32 +++++++---- - drivers/gpu/drm/virtio/virtgpu_object.c | 73 ++++++++++++++++++++----- - drivers/gpu/drm/virtio/virtgpu_submit.c | 15 ++++- - 5 files changed, 125 insertions(+), 28 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index 83d1e4622292..1837dc7ea9fb 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -92,6 +92,7 @@ struct virtio_gpu_object { - uint32_t hw_res_handle; - bool dumb; - bool created; -+ bool detached; - bool host3d_blob, guest_blob; - uint32_t blob_mem, blob_flags; - -@@ -318,6 +319,8 @@ void virtio_gpu_array_put_free(struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); - void virtio_gpu_array_put_free_work(struct work_struct *work); -+int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object_array *objs); - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); - void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - -@@ -458,6 +461,10 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - - bool virtio_gpu_is_shmem(struct virtio_gpu_object *bo); - -+int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo); -+ -+int virtio_gpu_reattach_shmem_object(struct virtio_gpu_object *bo); -+ - int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev, - uint32_t *resid); - /* virtgpu_prime.c */ -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 625c05d625bf..97e67064c97e 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -295,6 +295,26 @@ void virtio_gpu_array_put_free_work(struct work_struct *work) - spin_unlock(&vgdev->obj_free_lock); - } - -+int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object_array *objs) -+{ -+ struct virtio_gpu_object *bo; -+ int ret = 0; -+ u32 i; -+ -+ for (i = 0; i < objs->nents; i++) { -+ bo = gem_to_virtio_gpu_obj(objs->objs[i]); -+ -+ if (virtio_gpu_is_shmem(bo) && bo->detached) { -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ if (ret) -+ break; -+ } -+ } -+ -+ return ret; -+} -+ - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - { - int err; -@@ -303,6 +323,12 @@ int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - err = drm_gem_shmem_pin(&bo->base); - if (err) - return err; -+ -+ err = virtio_gpu_reattach_shmem_object(bo); -+ if (err) { -+ drm_gem_shmem_unpin(&bo->base); -+ return err; -+ } - } - - return 0; -diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -index e4f76f315550..c7da22006149 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c -+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -@@ -256,6 +256,10 @@ static int virtio_gpu_transfer_from_host_ioctl(struct drm_device *dev, - if (ret != 0) - goto err_put_free; - -+ ret = virtio_gpu_array_prepare(vgdev, objs); -+ if (ret) -+ goto err_unlock; -+ - fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); - if (!fence) { - ret = -ENOMEM; -@@ -298,11 +302,25 @@ static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, - goto err_put_free; - } - -+ ret = virtio_gpu_array_lock_resv(objs); -+ if (ret != 0) -+ goto err_put_free; -+ -+ ret = virtio_gpu_array_prepare(vgdev, objs); -+ if (ret) -+ goto err_unlock; -+ -+ fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); -+ if (!fence) { -+ ret = -ENOMEM; -+ goto err_unlock; -+ } -+ - if (!vgdev->has_virgl_3d) { - virtio_gpu_cmd_transfer_to_host_2d - (vgdev, offset, - args->box.w, args->box.h, args->box.x, args->box.y, -- objs, NULL); -+ objs, fence); - } else { - virtio_gpu_create_context(dev, file); - -@@ -311,23 +329,13 @@ static int virtio_gpu_transfer_to_host_ioctl(struct drm_device *dev, void *data, - goto err_put_free; - } - -- ret = virtio_gpu_array_lock_resv(objs); -- if (ret != 0) -- goto err_put_free; -- -- ret = -ENOMEM; -- fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, -- 0); -- if (!fence) -- goto err_unlock; -- - virtio_gpu_cmd_transfer_to_host_3d - (vgdev, - vfpriv ? vfpriv->ctx_id : 0, offset, args->level, - args->stride, args->layer_stride, &args->box, objs, - fence); -- dma_fence_put(&fence->f); - } -+ dma_fence_put(&fence->f); - virtio_gpu_notify(vgdev); - return 0; - -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index e58528c562ef..de347aa3b9a8 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -143,7 +143,7 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, - struct sg_table *pages; - int si; - -- pages = drm_gem_shmem_get_pages_sgt(&bo->base); -+ pages = drm_gem_shmem_get_pages_sgt_locked(&bo->base); - if (IS_ERR(pages)) - return PTR_ERR(pages); - -@@ -177,6 +177,40 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, - return 0; - } - -+int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ struct virtio_gpu_mem_entry *ents; -+ unsigned int nents; -+ int err; -+ -+ if (!bo->detached) -+ return 0; -+ -+ err = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -+ if (err) -+ return err; -+ -+ virtio_gpu_object_attach(vgdev, bo, ents, nents); -+ -+ bo->detached = false; -+ -+ return 0; -+} -+ -+int virtio_gpu_reattach_shmem_object(struct virtio_gpu_object *bo) -+{ -+ int ret; -+ -+ ret = dma_resv_lock_interruptible(bo->base.base.resv, NULL); -+ if (ret) -+ return ret; -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ dma_resv_unlock(bo->base.base.resv); -+ -+ return ret; -+} -+ - int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_params *params, - struct virtio_gpu_object **bo_ptr, -@@ -207,45 +241,56 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - - bo->dumb = params->dumb; - -- ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -- if (ret != 0) -- goto err_put_id; -+ if (bo->blob_mem == VIRTGPU_BLOB_MEM_GUEST) -+ bo->guest_blob = true; - - if (fence) { - ret = -ENOMEM; - objs = virtio_gpu_array_alloc(1); - if (!objs) -- goto err_free_entry; -+ goto err_put_id; - virtio_gpu_array_add_obj(objs, &bo->base.base); - - ret = virtio_gpu_array_lock_resv(objs); - if (ret != 0) - goto err_put_objs; -+ } else { -+ ret = dma_resv_lock(bo->base.base.resv, NULL); -+ if (ret) -+ goto err_put_id; - } - - if (params->blob) { -- if (params->blob_mem == VIRTGPU_BLOB_MEM_GUEST) -- bo->guest_blob = true; -+ ret = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); -+ if (ret) -+ goto err_unlock_objs; -+ } else { -+ bo->detached = true; -+ } - -+ if (params->blob) - virtio_gpu_cmd_resource_create_blob(vgdev, bo, params, - ents, nents); -- } else if (params->virgl) { -+ else if (params->virgl) - virtio_gpu_cmd_resource_create_3d(vgdev, bo, params, - objs, fence); -- virtio_gpu_object_attach(vgdev, bo, ents, nents); -- } else { -+ else - virtio_gpu_cmd_create_resource(vgdev, bo, params, - objs, fence); -- virtio_gpu_object_attach(vgdev, bo, ents, nents); -- } -+ -+ if (!fence) -+ dma_resv_unlock(bo->base.base.resv); - - *bo_ptr = bo; - return 0; - -+err_unlock_objs: -+ if (fence) -+ virtio_gpu_array_unlock_resv(objs); -+ else -+ dma_resv_unlock(bo->base.base.resv); - err_put_objs: - virtio_gpu_array_put_free(objs); --err_free_entry: -- kvfree(ents); - err_put_id: - virtio_gpu_resource_id_put(vgdev, bo->hw_res_handle); - err_put_pages: -diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c -index 5c514946bbad..6e4ef2593e8f 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_submit.c -+++ b/drivers/gpu/drm/virtio/virtgpu_submit.c -@@ -464,8 +464,19 @@ static void virtio_gpu_install_out_fence_fd(struct virtio_gpu_submit *submit) - - static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) - { -- if (submit->buflist) -- return virtio_gpu_array_lock_resv(submit->buflist); -+ int err; -+ -+ if (submit->buflist) { -+ err = virtio_gpu_array_lock_resv(submit->buflist); -+ if (err) -+ return err; -+ -+ err = virtio_gpu_array_prepare(submit->vgdev, submit->buflist); -+ if (err) { -+ virtio_gpu_array_unlock_resv(submit->buflist); -+ return err; -+ } -+ } - - return 0; - } --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 29/30] drm/virtio: Support shmem shrinking - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (27 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Support generic drm-shmem memory shrinker and add new madvise IOCTL to -the VirtIO-GPU driver. BO cache manager of Mesa driver will mark BOs as -"don't need" using the new IOCTL to let shrinker purge the marked BOs on -OOM, the shrinker will also evict unpurgeable shmem BOs from memory if -guest supports SWAP file or partition. - -Link: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15278 -Acked-by: Gerd Hoffmann -Signed-off-by: Daniel Almeida -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/virtio/virtgpu_drv.h | 13 +++++- - drivers/gpu/drm/virtio/virtgpu_gem.c | 48 +++++++++++++++++-- - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 25 ++++++++++ - drivers/gpu/drm/virtio/virtgpu_kms.c | 8 ++++ - drivers/gpu/drm/virtio/virtgpu_object.c | 61 +++++++++++++++++++++++++ - drivers/gpu/drm/virtio/virtgpu_vq.c | 40 ++++++++++++++++ - include/uapi/drm/virtgpu_drm.h | 14 ++++++ - 7 files changed, 204 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h -index 1837dc7ea9fb..37188c00e161 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_drv.h -+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h -@@ -283,7 +283,7 @@ struct virtio_gpu_fpriv { - }; - - /* virtgpu_ioctl.c */ --#define DRM_VIRTIO_NUM_IOCTLS 12 -+#define DRM_VIRTIO_NUM_IOCTLS 13 - extern struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS]; - void virtio_gpu_create_context(struct drm_device *dev, struct drm_file *file); - -@@ -321,6 +321,8 @@ void virtio_gpu_array_put_free_delayed(struct virtio_gpu_device *vgdev, - void virtio_gpu_array_put_free_work(struct work_struct *work); - int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object_array *objs); -+int virtio_gpu_gem_host_mem_release(struct virtio_gpu_object *bo); -+int virtio_gpu_gem_madvise(struct virtio_gpu_object *obj, int madv); - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo); - void virtio_gpu_gem_unpin(struct virtio_gpu_object *bo); - -@@ -334,6 +336,8 @@ void virtio_gpu_cmd_create_resource(struct virtio_gpu_device *vgdev, - struct virtio_gpu_fence *fence); - void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object *bo); -+int virtio_gpu_cmd_release_resource(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *bo); - void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev, - uint64_t offset, - uint32_t width, uint32_t height, -@@ -354,6 +358,9 @@ void virtio_gpu_object_attach(struct virtio_gpu_device *vgdev, - struct virtio_gpu_object *obj, - struct virtio_gpu_mem_entry *ents, - unsigned int nents); -+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *obj, -+ struct virtio_gpu_fence *fence); - void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev, - struct virtio_gpu_output *output); - int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev); -@@ -497,4 +504,8 @@ void virtio_gpu_vram_unmap_dma_buf(struct device *dev, - int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, - struct drm_file *file); - -+/* virtgpu_gem_shrinker.c */ -+int virtio_gpu_gem_shrinker_init(struct virtio_gpu_device *vgdev); -+void virtio_gpu_gem_shrinker_fini(struct virtio_gpu_device *vgdev); -+ - #endif -diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c -index 97e67064c97e..68d27ae582ba 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_gem.c -+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c -@@ -147,10 +147,20 @@ void virtio_gpu_gem_object_close(struct drm_gem_object *obj, - struct virtio_gpu_device *vgdev = obj->dev->dev_private; - struct virtio_gpu_fpriv *vfpriv = file->driver_priv; - struct virtio_gpu_object_array *objs; -+ struct virtio_gpu_object *bo; - - if (!vgdev->has_virgl_3d) - return; - -+ bo = gem_to_virtio_gpu_obj(obj); -+ -+ /* -+ * Purged BO was already detached and released, the resource ID -+ * is invalid by now. -+ */ -+ if (!virtio_gpu_gem_madvise(bo, VIRTGPU_MADV_WILLNEED)) -+ return; -+ - objs = virtio_gpu_array_alloc(1); - if (!objs) - return; -@@ -305,16 +315,46 @@ int virtio_gpu_array_prepare(struct virtio_gpu_device *vgdev, - for (i = 0; i < objs->nents; i++) { - bo = gem_to_virtio_gpu_obj(objs->objs[i]); - -- if (virtio_gpu_is_shmem(bo) && bo->detached) { -- ret = virtio_gpu_reattach_shmem_object_locked(bo); -- if (ret) -- break; -+ if (virtio_gpu_is_shmem(bo)) { -+ if (bo->base.madv) -+ return -EINVAL; -+ -+ if (bo->detached) { -+ ret = virtio_gpu_reattach_shmem_object_locked(bo); -+ if (ret) -+ break; -+ } - } - } - - return ret; - } - -+int virtio_gpu_gem_madvise(struct virtio_gpu_object *bo, int madv) -+{ -+ if (virtio_gpu_is_shmem(bo)) -+ return drm_gem_shmem_object_madvise(&bo->base.base, madv); -+ -+ return 1; -+} -+ -+int virtio_gpu_gem_host_mem_release(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ int err; -+ -+ if (bo->created) { -+ err = virtio_gpu_cmd_release_resource(vgdev, bo); -+ if (err) -+ return err; -+ -+ virtio_gpu_notify(vgdev); -+ bo->created = false; -+ } -+ -+ return 0; -+} -+ - int virtio_gpu_gem_pin(struct virtio_gpu_object *bo) - { - int err; -diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -index c7da22006149..a42799146090 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c -+++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c -@@ -701,6 +701,28 @@ static int virtio_gpu_context_init_ioctl(struct drm_device *dev, - return ret; - } - -+static int virtio_gpu_madvise_ioctl(struct drm_device *dev, -+ void *data, -+ struct drm_file *file) -+{ -+ struct drm_virtgpu_madvise *args = data; -+ struct virtio_gpu_object *bo; -+ struct drm_gem_object *obj; -+ -+ if (args->madv > VIRTGPU_MADV_DONTNEED) -+ return -EOPNOTSUPP; -+ -+ obj = drm_gem_object_lookup(file, args->bo_handle); -+ if (!obj) -+ return -ENOENT; -+ -+ bo = gem_to_virtio_gpu_obj(obj); -+ args->retained = virtio_gpu_gem_madvise(bo, args->madv); -+ drm_gem_object_put(obj); -+ -+ return 0; -+} -+ - struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS] = { - DRM_IOCTL_DEF_DRV(VIRTGPU_MAP, virtio_gpu_map_ioctl, - DRM_RENDER_ALLOW), -@@ -740,4 +762,7 @@ struct drm_ioctl_desc virtio_gpu_ioctls[DRM_VIRTIO_NUM_IOCTLS] = { - - DRM_IOCTL_DEF_DRV(VIRTGPU_CONTEXT_INIT, virtio_gpu_context_init_ioctl, - DRM_RENDER_ALLOW), -+ -+ DRM_IOCTL_DEF_DRV(VIRTGPU_MADVISE, virtio_gpu_madvise_ioctl, -+ DRM_RENDER_ALLOW), - }; -diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c -index 5a3b5aaed1f3..43e237082cec 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_kms.c -+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c -@@ -245,6 +245,12 @@ int virtio_gpu_init(struct virtio_device *vdev, struct drm_device *dev) - goto err_scanouts; - } - -+ ret = drmm_gem_shmem_init(dev); -+ if (ret) { -+ DRM_ERROR("shmem init failed\n"); -+ goto err_modeset; -+ } -+ - virtio_device_ready(vgdev->vdev); - - if (num_capsets) -@@ -259,6 +265,8 @@ int virtio_gpu_init(struct virtio_device *vdev, struct drm_device *dev) - } - return 0; - -+err_modeset: -+ virtio_gpu_modeset_fini(vgdev); - err_scanouts: - virtio_gpu_free_vbufs(vgdev); - err_vbufs: -diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c -index de347aa3b9a8..86888c1ae5d4 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_object.c -+++ b/drivers/gpu/drm/virtio/virtgpu_object.c -@@ -98,6 +98,60 @@ static void virtio_gpu_free_object(struct drm_gem_object *obj) - virtio_gpu_cleanup_object(bo); - } - -+static int virtio_gpu_detach_object_fenced(struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_device *vgdev = bo->base.base.dev->dev_private; -+ struct virtio_gpu_fence *fence; -+ -+ if (bo->detached) -+ return 0; -+ -+ fence = virtio_gpu_fence_alloc(vgdev, vgdev->fence_drv.context, 0); -+ if (!fence) -+ return -ENOMEM; -+ -+ virtio_gpu_object_detach(vgdev, bo, fence); -+ virtio_gpu_notify(vgdev); -+ -+ dma_fence_wait(&fence->f, false); -+ dma_fence_put(&fence->f); -+ -+ bo->detached = true; -+ -+ return 0; -+} -+ -+static int virtio_gpu_shmem_evict(struct drm_gem_object *obj) -+{ -+ struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); -+ int err; -+ -+ /* blob is not movable, it's impossible to detach it from host */ -+ if (bo->blob_mem) -+ return -EBUSY; -+ -+ /* -+ * At first tell host to stop using guest's memory to ensure that -+ * host won't touch the released guest's memory once it's gone. -+ */ -+ err = virtio_gpu_detach_object_fenced(bo); -+ if (err) -+ return err; -+ -+ if (drm_gem_shmem_is_purgeable(&bo->base)) { -+ err = virtio_gpu_gem_host_mem_release(bo); -+ if (err) -+ return err; -+ -+ drm_gem_shmem_purge_locked(&bo->base); -+ } else { -+ bo->base.pages_mark_dirty_on_put = 1; -+ drm_gem_shmem_evict_locked(&bo->base); -+ } -+ -+ return 0; -+} -+ - static const struct drm_gem_object_funcs virtio_gpu_shmem_funcs = { - .free = virtio_gpu_free_object, - .open = virtio_gpu_gem_object_open, -@@ -111,6 +165,7 @@ static const struct drm_gem_object_funcs virtio_gpu_shmem_funcs = { - .vunmap = drm_gem_shmem_object_vunmap, - .mmap = drm_gem_shmem_object_mmap, - .vm_ops = &drm_gem_shmem_vm_ops, -+ .evict = virtio_gpu_shmem_evict, - }; - - bool virtio_gpu_is_shmem(struct virtio_gpu_object *bo) -@@ -187,6 +242,10 @@ int virtio_gpu_reattach_shmem_object_locked(struct virtio_gpu_object *bo) - if (!bo->detached) - return 0; - -+ err = drm_gem_shmem_swapin_locked(&bo->base); -+ if (err) -+ return err; -+ - err = virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents); - if (err) - return err; -@@ -240,6 +299,8 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, - goto err_put_pages; - - bo->dumb = params->dumb; -+ bo->blob_mem = params->blob_mem; -+ bo->blob_flags = params->blob_flags; - - if (bo->blob_mem == VIRTGPU_BLOB_MEM_GUEST) - bo->guest_blob = true; -diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c -index b1a00c0c25a7..14ab470f413a 100644 ---- a/drivers/gpu/drm/virtio/virtgpu_vq.c -+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c -@@ -545,6 +545,21 @@ void virtio_gpu_cmd_unref_resource(struct virtio_gpu_device *vgdev, - virtio_gpu_cleanup_object(bo); - } - -+int virtio_gpu_cmd_release_resource(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *bo) -+{ -+ struct virtio_gpu_resource_unref *cmd_p; -+ struct virtio_gpu_vbuffer *vbuf; -+ -+ cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); -+ memset(cmd_p, 0, sizeof(*cmd_p)); -+ -+ cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_UNREF); -+ cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle); -+ -+ return virtio_gpu_queue_ctrl_buffer(vgdev, vbuf); -+} -+ - void virtio_gpu_cmd_set_scanout(struct virtio_gpu_device *vgdev, - uint32_t scanout_id, uint32_t resource_id, - uint32_t width, uint32_t height, -@@ -645,6 +660,23 @@ virtio_gpu_cmd_resource_attach_backing(struct virtio_gpu_device *vgdev, - virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, fence); - } - -+static void -+virtio_gpu_cmd_resource_detach_backing(struct virtio_gpu_device *vgdev, -+ u32 resource_id, -+ struct virtio_gpu_fence *fence) -+{ -+ struct virtio_gpu_resource_attach_backing *cmd_p; -+ struct virtio_gpu_vbuffer *vbuf; -+ -+ cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); -+ memset(cmd_p, 0, sizeof(*cmd_p)); -+ -+ cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING); -+ cmd_p->resource_id = cpu_to_le32(resource_id); -+ -+ virtio_gpu_queue_fenced_ctrl_buffer(vgdev, vbuf, fence); -+} -+ - static void virtio_gpu_cmd_get_display_info_cb(struct virtio_gpu_device *vgdev, - struct virtio_gpu_vbuffer *vbuf) - { -@@ -1107,6 +1139,14 @@ void virtio_gpu_object_attach(struct virtio_gpu_device *vgdev, - ents, nents, NULL); - } - -+void virtio_gpu_object_detach(struct virtio_gpu_device *vgdev, -+ struct virtio_gpu_object *obj, -+ struct virtio_gpu_fence *fence) -+{ -+ virtio_gpu_cmd_resource_detach_backing(vgdev, obj->hw_res_handle, -+ fence); -+} -+ - void virtio_gpu_cursor_ping(struct virtio_gpu_device *vgdev, - struct virtio_gpu_output *output) - { -diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h -index c2ce71987e9b..78255060bc9a 100644 ---- a/include/uapi/drm/virtgpu_drm.h -+++ b/include/uapi/drm/virtgpu_drm.h -@@ -48,6 +48,7 @@ extern "C" { - #define DRM_VIRTGPU_GET_CAPS 0x09 - #define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a - #define DRM_VIRTGPU_CONTEXT_INIT 0x0b -+#define DRM_VIRTGPU_MADVISE 0x0c - - #define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 - #define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 -@@ -213,6 +214,15 @@ struct drm_virtgpu_context_init { - __u64 ctx_set_params; - }; - -+#define VIRTGPU_MADV_WILLNEED 0 -+#define VIRTGPU_MADV_DONTNEED 1 -+struct drm_virtgpu_madvise { -+ __u32 bo_handle; -+ __u32 retained; /* out, non-zero if BO can be used */ -+ __u32 madv; -+ __u32 pad; -+}; -+ - /* - * Event code that's given when VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK is in - * effect. The event size is sizeof(drm_event), since there is no additional -@@ -263,6 +273,10 @@ struct drm_virtgpu_context_init { - DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_CONTEXT_INIT, \ - struct drm_virtgpu_context_init) - -+#define DRM_IOCTL_VIRTGPU_MADVISE \ -+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MADVISE, \ -+ struct drm_virtgpu_madvise) -+ - #if defined(__cplusplus) - } - #endif --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (28 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -Replace Panfrost's custom memory shrinker with a common drm-shmem -memory shrinker. - -Co-developed-by: Boris Brezillon -Signed-off-by: Boris Brezillon -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/drm_gem_shmem_helper.c | 4 +- - drivers/gpu/drm/panfrost/Makefile | 1 - - drivers/gpu/drm/panfrost/panfrost_device.h | 4 - - drivers/gpu/drm/panfrost/panfrost_drv.c | 29 ++-- - drivers/gpu/drm/panfrost/panfrost_gem.c | 60 ++++---- - drivers/gpu/drm/panfrost/panfrost_gem.h | 9 -- - .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 140 ------------------ - drivers/gpu/drm/panfrost/panfrost_job.c | 18 ++- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 24 ++- - include/drm/drm_gem_shmem_helper.h | 7 - - 10 files changed, 83 insertions(+), 213 deletions(-) - delete mode 100644 drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c - -diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c -index 7d2fe12bd793..56e88378079b 100644 ---- a/drivers/gpu/drm/drm_gem_shmem_helper.c -+++ b/drivers/gpu/drm/drm_gem_shmem_helper.c -@@ -89,8 +89,6 @@ __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool private) - if (ret) - goto err_release; - -- INIT_LIST_HEAD(&shmem->madv_list); -- - if (!private) { - /* - * Our buffers are kept pinned, so allocating them -@@ -619,6 +617,8 @@ void drm_gem_shmem_purge_locked(struct drm_gem_shmem_object *shmem) - { - struct drm_gem_object *obj = &shmem->base; - -+ drm_WARN_ON_ONCE(obj->dev, !drm_gem_shmem_is_purgeable(shmem)); -+ - drm_gem_shmem_shrinker_put_pages_locked(shmem); - drm_gem_free_mmap_offset(obj); - -diff --git a/drivers/gpu/drm/panfrost/Makefile b/drivers/gpu/drm/panfrost/Makefile -index 2c01c1e7523e..f2cb1ab0a32d 100644 ---- a/drivers/gpu/drm/panfrost/Makefile -+++ b/drivers/gpu/drm/panfrost/Makefile -@@ -5,7 +5,6 @@ panfrost-y := \ - panfrost_device.o \ - panfrost_devfreq.o \ - panfrost_gem.o \ -- panfrost_gem_shrinker.o \ - panfrost_gpu.o \ - panfrost_job.o \ - panfrost_mmu.o \ -diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h -index 62f7e3527385..cea6df9cd650 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_device.h -+++ b/drivers/gpu/drm/panfrost/panfrost_device.h -@@ -140,10 +140,6 @@ struct panfrost_device { - atomic_t pending; - } reset; - -- struct mutex shrinker_lock; -- struct list_head shrinker_list; -- struct shrinker *shrinker; -- - struct panfrost_devfreq pfdevfreq; - - struct { -diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c -index a15d62f19afb..5c730d15a24d 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_drv.c -+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c -@@ -171,7 +171,6 @@ panfrost_lookup_bos(struct drm_device *dev, - break; - } - -- atomic_inc(&bo->gpu_usecount); - job->mappings[i] = mapping; - } - -@@ -397,7 +396,6 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - { - struct panfrost_file_priv *priv = file_priv->driver_priv; - struct drm_panfrost_madvise *args = data; -- struct panfrost_device *pfdev = dev->dev_private; - struct drm_gem_object *gem_obj; - struct panfrost_gem_object *bo; - int ret = 0; -@@ -410,11 +408,15 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - - bo = to_panfrost_bo(gem_obj); - -+ if (bo->is_heap) { -+ args->retained = 1; -+ goto out_put_object; -+ } -+ - ret = dma_resv_lock_interruptible(bo->base.base.resv, NULL); - if (ret) - goto out_put_object; - -- mutex_lock(&pfdev->shrinker_lock); - mutex_lock(&bo->mappings.lock); - if (args->madv == PANFROST_MADV_DONTNEED) { - struct panfrost_gem_mapping *first; -@@ -440,17 +442,8 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, - - args->retained = drm_gem_shmem_madvise_locked(&bo->base, args->madv); - -- if (args->retained) { -- if (args->madv == PANFROST_MADV_DONTNEED) -- list_move_tail(&bo->base.madv_list, -- &pfdev->shrinker_list); -- else if (args->madv == PANFROST_MADV_WILLNEED) -- list_del_init(&bo->base.madv_list); -- } -- - out_unlock_mappings: - mutex_unlock(&bo->mappings.lock); -- mutex_unlock(&pfdev->shrinker_lock); - dma_resv_unlock(bo->base.base.resv); - out_put_object: - drm_gem_object_put(gem_obj); -@@ -635,9 +628,6 @@ static int panfrost_probe(struct platform_device *pdev) - ddev->dev_private = pfdev; - pfdev->ddev = ddev; - -- mutex_init(&pfdev->shrinker_lock); -- INIT_LIST_HEAD(&pfdev->shrinker_list); -- - err = panfrost_device_init(pfdev); - if (err) { - if (err != -EPROBE_DEFER) -@@ -659,13 +649,13 @@ static int panfrost_probe(struct platform_device *pdev) - if (err < 0) - goto err_out1; - -- err = panfrost_gem_shrinker_init(ddev); -- if (err) -- goto err_out2; -+ err = drmm_gem_shmem_init(ddev); -+ if (err < 0) -+ goto err_unregister_dev; - - return 0; - --err_out2: -+err_unregister_dev: - drm_dev_unregister(ddev); - err_out1: - pm_runtime_disable(pfdev->dev); -@@ -682,7 +672,6 @@ static void panfrost_remove(struct platform_device *pdev) - struct drm_device *ddev = pfdev->ddev; - - drm_dev_unregister(ddev); -- panfrost_gem_shrinker_cleanup(ddev); - - pm_runtime_get_sync(pfdev->dev); - pm_runtime_disable(pfdev->dev); -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c -index 8c26b7e41b95..05eb5a89c4ed 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.c -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c -@@ -17,17 +17,6 @@ - static void panfrost_gem_free_object(struct drm_gem_object *obj) - { - struct panfrost_gem_object *bo = to_panfrost_bo(obj); -- struct panfrost_device *pfdev = obj->dev->dev_private; -- -- /* -- * Make sure the BO is no longer inserted in the shrinker list before -- * taking care of the destruction itself. If we don't do that we have a -- * race condition between this function and what's done in -- * panfrost_gem_shrinker_scan(). -- */ -- mutex_lock(&pfdev->shrinker_lock); -- list_del_init(&bo->base.madv_list); -- mutex_unlock(&pfdev->shrinker_lock); - - /* - * If we still have mappings attached to the BO, there's a problem in -@@ -57,26 +46,23 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, - return mapping; - } - --static void --panfrost_gem_teardown_mapping(struct panfrost_gem_mapping *mapping) -+static void panfrost_gem_mapping_release(struct kref *kref) - { -+ struct panfrost_gem_mapping *mapping = -+ container_of(kref, struct panfrost_gem_mapping, refcount); -+ struct panfrost_gem_object *bo = mapping->obj; -+ struct panfrost_device *pfdev = bo->base.base.dev->dev_private; -+ -+ /* Shrinker may purge the mapping at the same time. */ -+ dma_resv_lock(mapping->obj->base.base.resv, NULL); - if (mapping->active) - panfrost_mmu_unmap(mapping); -+ dma_resv_unlock(mapping->obj->base.base.resv); - - spin_lock(&mapping->mmu->mm_lock); - if (drm_mm_node_allocated(&mapping->mmnode)) - drm_mm_remove_node(&mapping->mmnode); - spin_unlock(&mapping->mmu->mm_lock); --} -- --static void panfrost_gem_mapping_release(struct kref *kref) --{ -- struct panfrost_gem_mapping *mapping = -- container_of(kref, struct panfrost_gem_mapping, refcount); -- struct panfrost_gem_object *bo = mapping->obj; -- struct panfrost_device *pfdev = bo->base.base.dev->dev_private; -- -- panfrost_gem_teardown_mapping(mapping); - - /* On heap BOs, release the sgts created in the fault handler path. */ - if (bo->sgts) { -@@ -117,12 +103,14 @@ void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping) - kref_put(&mapping->refcount, panfrost_gem_mapping_release); - } - --void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo) -+void panfrost_gem_evict_mappings_locked(struct panfrost_gem_object *bo) - { - struct panfrost_gem_mapping *mapping; - -- list_for_each_entry(mapping, &bo->mappings.list, node) -- panfrost_gem_teardown_mapping(mapping); -+ list_for_each_entry(mapping, &bo->mappings.list, node) { -+ if (mapping->active) -+ panfrost_mmu_unmap(mapping); -+ } - } - - int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv) -@@ -251,6 +239,25 @@ static size_t panfrost_gem_rss(struct drm_gem_object *obj) - return 0; - } - -+static int panfrost_shmem_evict(struct drm_gem_object *obj) -+{ -+ struct panfrost_gem_object *bo = to_panfrost_bo(obj); -+ -+ if (!drm_gem_shmem_is_purgeable(&bo->base)) -+ return -EBUSY; -+ -+ if (!mutex_trylock(&bo->mappings.lock)) -+ return -EBUSY; -+ -+ panfrost_gem_evict_mappings_locked(bo); -+ -+ drm_gem_shmem_purge_locked(&bo->base); -+ -+ mutex_unlock(&bo->mappings.lock); -+ -+ return 0; -+} -+ - static const struct drm_gem_object_funcs panfrost_gem_funcs = { - .free = panfrost_gem_free_object, - .open = panfrost_gem_open, -@@ -265,6 +272,7 @@ static const struct drm_gem_object_funcs panfrost_gem_funcs = { - .status = panfrost_gem_status, - .rss = panfrost_gem_rss, - .vm_ops = &drm_gem_shmem_vm_ops, -+ .evict = panfrost_shmem_evict, - }; - - /** -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h -index 7516b7ecf7fe..8ddc2d310d29 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_gem.h -+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h -@@ -30,12 +30,6 @@ struct panfrost_gem_object { - struct mutex lock; - } mappings; - -- /* -- * Count the number of jobs referencing this BO so we don't let the -- * shrinker reclaim this object prematurely. -- */ -- atomic_t gpu_usecount; -- - /* - * Object chunk size currently mapped onto physical memory - */ -@@ -86,7 +80,4 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, - void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); - void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); - --int panfrost_gem_shrinker_init(struct drm_device *dev); --void panfrost_gem_shrinker_cleanup(struct drm_device *dev); -- - #endif /* __PANFROST_GEM_H__ */ -diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -deleted file mode 100644 -index 7b4deba803ed..000000000000 ---- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c -+++ /dev/null -@@ -1,140 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* Copyright (C) 2019 Arm Ltd. -- * -- * Based on msm_gem_freedreno.c: -- * Copyright (C) 2016 Red Hat -- * Author: Rob Clark -- */ -- --#include -- --#include --#include -- --#include "panfrost_device.h" --#include "panfrost_gem.h" --#include "panfrost_mmu.h" -- --static bool panfrost_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) --{ -- return (shmem->madv > 0) && -- !refcount_read(&shmem->pages_pin_count) && shmem->sgt && -- !shmem->base.dma_buf && !shmem->base.import_attach; --} -- --static unsigned long --panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) --{ -- struct panfrost_device *pfdev = shrinker->private_data; -- struct drm_gem_shmem_object *shmem; -- unsigned long count = 0; -- -- if (!mutex_trylock(&pfdev->shrinker_lock)) -- return 0; -- -- list_for_each_entry(shmem, &pfdev->shrinker_list, madv_list) { -- if (panfrost_gem_shmem_is_purgeable(shmem)) -- count += shmem->base.size >> PAGE_SHIFT; -- } -- -- mutex_unlock(&pfdev->shrinker_lock); -- -- return count; --} -- --static bool panfrost_gem_purge(struct drm_gem_object *obj) --{ -- struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); -- struct panfrost_gem_object *bo = to_panfrost_bo(obj); -- bool ret = false; -- -- if (atomic_read(&bo->gpu_usecount)) -- return false; -- -- if (!mutex_trylock(&bo->mappings.lock)) -- return false; -- -- if (!dma_resv_trylock(shmem->base.resv)) -- goto unlock_mappings; -- -- /* BO might have become unpurgeable if the last pages_use_count ref -- * was dropped, but the BO hasn't been destroyed yet. -- */ -- if (!panfrost_gem_shmem_is_purgeable(shmem)) -- goto unlock_mappings; -- -- panfrost_gem_teardown_mappings_locked(bo); -- drm_gem_shmem_purge_locked(&bo->base); -- ret = true; -- -- dma_resv_unlock(shmem->base.resv); -- --unlock_mappings: -- mutex_unlock(&bo->mappings.lock); -- return ret; --} -- --static unsigned long --panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) --{ -- struct panfrost_device *pfdev = shrinker->private_data; -- struct drm_gem_shmem_object *shmem, *tmp; -- unsigned long freed = 0; -- -- if (!mutex_trylock(&pfdev->shrinker_lock)) -- return SHRINK_STOP; -- -- list_for_each_entry_safe(shmem, tmp, &pfdev->shrinker_list, madv_list) { -- if (freed >= sc->nr_to_scan) -- break; -- if (panfrost_gem_shmem_is_purgeable(shmem) && -- panfrost_gem_purge(&shmem->base)) { -- freed += shmem->base.size >> PAGE_SHIFT; -- list_del_init(&shmem->madv_list); -- } -- } -- -- mutex_unlock(&pfdev->shrinker_lock); -- -- if (freed > 0) -- pr_info_ratelimited("Purging %lu bytes\n", freed << PAGE_SHIFT); -- -- return freed; --} -- --/** -- * panfrost_gem_shrinker_init - Initialize panfrost shrinker -- * @dev: DRM device -- * -- * This function registers and sets up the panfrost shrinker. -- */ --int panfrost_gem_shrinker_init(struct drm_device *dev) --{ -- struct panfrost_device *pfdev = dev->dev_private; -- -- pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); -- if (!pfdev->shrinker) -- return -ENOMEM; -- -- pfdev->shrinker->count_objects = panfrost_gem_shrinker_count; -- pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan; -- pfdev->shrinker->private_data = pfdev; -- -- shrinker_register(pfdev->shrinker); -- -- return 0; --} -- --/** -- * panfrost_gem_shrinker_cleanup - Clean up panfrost shrinker -- * @dev: DRM device -- * -- * This function unregisters the panfrost shrinker. -- */ --void panfrost_gem_shrinker_cleanup(struct drm_device *dev) --{ -- struct panfrost_device *pfdev = dev->dev_private; -- -- if (pfdev->shrinker) -- shrinker_free(pfdev->shrinker); --} -diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c -index 0c2dbf6ef2a5..9e26cb013191 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_job.c -+++ b/drivers/gpu/drm/panfrost/panfrost_job.c -@@ -289,6 +289,19 @@ static void panfrost_attach_object_fences(struct drm_gem_object **bos, - dma_resv_add_fence(bos[i]->resv, fence, DMA_RESV_USAGE_WRITE); - } - -+static int panfrost_objects_prepare(struct drm_gem_object **bos, int bo_count) -+{ -+ struct panfrost_gem_object *bo; -+ int ret = 0; -+ -+ while (!ret && bo_count--) { -+ bo = to_panfrost_bo(bos[bo_count]); -+ ret = bo->base.madv != PANFROST_MADV_WILLNEED ? -EINVAL : 0; -+ } -+ -+ return ret; -+} -+ - int panfrost_job_push(struct panfrost_job *job) - { - struct panfrost_device *pfdev = job->pfdev; -@@ -300,6 +313,10 @@ int panfrost_job_push(struct panfrost_job *job) - if (ret) - return ret; - -+ ret = panfrost_objects_prepare(job->bos, job->bo_count); -+ if (ret) -+ goto unlock; -+ - mutex_lock(&pfdev->sched_lock); - drm_sched_job_arm(&job->base); - -@@ -341,7 +358,6 @@ static void panfrost_job_cleanup(struct kref *ref) - if (!job->mappings[i]) - break; - -- atomic_dec(&job->mappings[i]->obj->gpu_usecount); - panfrost_gem_mapping_put(job->mappings[i]); - } - kvfree(job->mappings); -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index 4a0b4bf03f1a..22e18f7986e7 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -328,6 +328,7 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mapping) - struct panfrost_device *pfdev = to_panfrost_device(obj->dev); - struct sg_table *sgt; - int prot = IOMMU_READ | IOMMU_WRITE; -+ int ret = 0; - - if (WARN_ON(mapping->active)) - return 0; -@@ -335,15 +336,32 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mapping) - if (bo->noexec) - prot |= IOMMU_NOEXEC; - -+ if (!obj->import_attach) { -+ /* -+ * Don't allow shrinker to move pages while pages are mapped. -+ * It's fine to move pages afterwards because shrinker will -+ * take care of unmapping pages during eviction. -+ */ -+ ret = drm_gem_shmem_pin(shmem); -+ if (ret) -+ return ret; -+ } -+ - sgt = drm_gem_shmem_get_pages_sgt(shmem); -- if (WARN_ON(IS_ERR(sgt))) -- return PTR_ERR(sgt); -+ if (WARN_ON(IS_ERR(sgt))) { -+ ret = PTR_ERR(sgt); -+ goto unpin; -+ } - - mmu_map_sg(pfdev, mapping->mmu, mapping->mmnode.start << PAGE_SHIFT, - prot, sgt); - mapping->active = true; - -- return 0; -+unpin: -+ if (!obj->import_attach) -+ drm_gem_shmem_unpin(shmem); -+ -+ return ret; - } - - void panfrost_mmu_unmap(struct panfrost_gem_mapping *mapping) -diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h -index 167f00f089de..9c6bb00260fc 100644 ---- a/include/drm/drm_gem_shmem_helper.h -+++ b/include/drm/drm_gem_shmem_helper.h -@@ -61,13 +61,6 @@ struct drm_gem_shmem_object { - */ - int madv; - -- /** -- * @madv_list: List entry for madvise tracking -- * -- * Typically used by drivers to track purgeable objects -- */ -- struct list_head madv_list; -- - /** - * @sgt: Scatter/gather table for imported PRIME buffers - */ --- -2.43.0 - - -^ permalink raw reply related [flat|nested] 31+ messages in thread -end of thread, other threads:[~2024-01-05 18:47 UTC | newest] - -Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed) --- links below jump to the message on this page -- -2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 01/30] drm/gem: Change locked/unlocked postfix of drm_gem_v/unmap() function names Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 02/30] drm/gem: Add _locked postfix to functions that have unlocked counterpart Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 03/30] drm/gem: Document locking rule of vmap and evict callbacks Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 04/30] drm/shmem-helper: Make all exported symbols GPL Dmitry Osipenko -2024-01-05 18:45 ` [PATCH v19 05/30] drm/shmem-helper: Refactor locked/unlocked functions Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 06/30] drm/shmem-helper: Remove obsoleted is_iomem test Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 07/30] drm/shmem-helper: Add and use pages_pin_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 08/30] drm/shmem-helper: Use refcount_t for pages_use_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 09/30] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 10/30] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 11/30] drm/shmem-helper: Use refcount_t for vmap_use_count Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 12/30] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 13/30] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 14/30] drm/shmem-helper: Add drm_gem_shmem_put_pages() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 15/30] drm/shmem-helper: Avoid lockdep warning when pages are released Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 19/30] drm/virtio: " Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 20/30] drm/v3d: " Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 21/30] drm/shmem-helper: Change sgt allocation policy Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 22/30] drm/shmem-helper: Add common memory shrinker Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 23/30] drm/shmem-helper: Export drm_gem_shmem_get_pages_sgt_locked() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 24/30] drm/shmem-helper: Optimize unlocked get_pages_sgt() Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 25/30] drm/shmem-helper: Don't free refcounted GEM Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 26/30] drm/shmem-helper: Turn warnings about imported GEM into errors Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 27/30] drm/virtio: Pin display framebuffer BO Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 28/30] drm/virtio: Attach shmem BOs dynamically Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 29/30] drm/virtio: Support shmem shrinking Dmitry Osipenko -2024-01-05 18:46 ` [PATCH v19 30/30] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko -This is a public inbox, see mirroring instructions -for how to clone and mirror all data and code used for this inbox; -as well as URLs for NNTP newsgroup(s). From a1c43a8d4ecbc9879ea750ea83bd1338509498c2 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:50:31 +0000 Subject: [PATCH 054/184] Set Rrockchip RK3588 as default build --- config/options | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/options b/config/options index 12ff7b50e..43f35207c 100644 --- a/config/options +++ b/config/options @@ -25,17 +25,17 @@ PROJECT_DIR="${ROOT}/projects" DISTRO="${DISTRO:-ROCKNIX}" # determines PROJECT, if not forced by user -PROJECT="${PROJECT:-PC}" +PROJECT="${PROJECT:-Rockchip}" # determines TARGET_ARCH, if not forced by user -ARCH="${ARCH:-x86_64}" +ARCH="${ARCH:-aarch64}" TARGET_ARCH="${ARCH}" # determine if we are building 32bit support ENABLE_32BIT="${ENABLE_32BIT-true}" # determines the default device, if not forced by user -DEVICE="${DEVICE:-AMD64}" +DEVICE="${DEVICE:-RK3588}" # the version is the date OS_VERSION=$(date +%Y%m%d) From 5e9d012f8982fce1e04e4ae1f13e743b7b70d064 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:19:25 +0000 Subject: [PATCH 055/184] RK3399: Drop out of tree wifi drivers --- .../devices/RK3399/linux/linux.aarch64.conf | 23 +++++++++++++------ projects/Rockchip/devices/RK3399/options | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index 0f68dfdf7..9503a4740 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -1739,14 +1739,23 @@ CONFIG_RTL8192C_COMMON=m CONFIG_RTL8XXXU=m CONFIG_RTL8XXXU_UNTESTED=y CONFIG_RTW88=m -# CONFIG_RTW88_8822BS is not set -# CONFIG_RTW88_8822BU is not set -# CONFIG_RTW88_8822CS is not set -# CONFIG_RTW88_8822CU is not set +CONFIG_RTW88_CORE=m +CONFIG_RTW88_SDIO=m +CONFIG_RTW88_USB=m +CONFIG_RTW88_8822B=m +CONFIG_RTW88_8822C=m +CONFIG_RTW88_8723D=m +CONFIG_RTW88_8821C=m +CONFIG_RTW88_8822BS=m +CONFIG_RTW88_8822BU=m +CONFIG_RTW88_8822CS=m +CONFIG_RTW88_8822CU=m # CONFIG_RTW88_8723DS is not set -# CONFIG_RTW88_8723DU is not set -# CONFIG_RTW88_8821CS is not set -# CONFIG_RTW88_8821CU is not set +CONFIG_RTW88_8723DU=m +CONFIG_RTW88_8821CS=m +CONFIG_RTW88_8821CU=m +# CONFIG_RTW88_DEBUG is not set +# CONFIG_RTW88_DEBUGFS is not set CONFIG_RTW89=m # CONFIG_WLAN_VENDOR_RSI is not set # CONFIG_WLAN_VENDOR_SILABS is not set diff --git a/projects/Rockchip/devices/RK3399/options b/projects/Rockchip/devices/RK3399/options index 6645347bd..a33d4ebbb 100644 --- a/projects/Rockchip/devices/RK3399/options +++ b/projects/Rockchip/devices/RK3399/options @@ -83,7 +83,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU RTL8821CU RTL88x2BU" + ADDITIONAL_DRIVERS="" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" From 5baac121b5937e7aa8fb2c9ddeadf5dbe1bf5101 Mon Sep 17 00:00:00 2001 From: Sparticuz Date: Thu, 18 Apr 2024 12:56:57 -0400 Subject: [PATCH 056/184] allow a specific arch-type docker image to be build and loaded locally --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 1f0467404..e18ae7190 100644 --- a/Makefile +++ b/Makefile @@ -124,11 +124,11 @@ docker-%: $(shell env | grep "=" > .env) # If the user issues a `make docker-shell` just start up bash as the shell to run commands docker-shell: COMMAND=bash -# Command: builds and pushes a hybrid docker image to dockerhub -# You must login with: docker login --username and provide either a password or token (from user settings -> security in dockerhub) before this will work. The build user must also be a member of the "docker" group. +# Command: builds and saves a docker builder image locally. +# The build user must also be a member of the "docker" group. docker-image-build: $(DOCKER_CMD) buildx create --use - $(DOCKER_CMD) buildx build --tag $(DOCKER_IMAGE) --platform linux/amd64,linux/arm64 --push . + $(DOCKER_CMD) buildx build --tag $(DOCKER_IMAGE) --platform $(shell if [ "$(uname -m)" = "aarch64" ]; then echo "linux/arm64"; else echo "linux/amd64"; fi) --load . # Command: pulls latest docker image from dockerhub. This will *replace* locally built version. docker-image-pull: From 16f4847e9cce328f36475027ade9933efa2e1062 Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Wed, 17 Apr 2024 15:16:10 -0700 Subject: [PATCH 057/184] PowKiddy X55: replace old patched quadsaradc driver with rocknix-joypad driver thanks to AJ1211 for his insights and spycat for his code reviews Signed-off-by: Paul Reioux --- projects/Rockchip/devices/RK3566-X55/options | 2 +- ...t-api-changes-needed-for-joypad-driv.patch | 324 +++ ...029-singleadc-quadsar_adc-joypad-x55.patch | 2155 ----------------- .../linux/RK3566/030-powkiddy-x55-input.patch | 350 +-- 4 files changed, 515 insertions(+), 2316 deletions(-) create mode 100644 projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/029-singleadc-quadsar_adc-joypad-x55.patch diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index d54ca8f12..59f1f3cf2 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -87,7 +87,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - # ADDITIONAL_DRIVERS="" + ADDITIONAL_DRIVERS="rocknix-joypad" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch b/projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch new file mode 100644 index 000000000..bba58b880 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch @@ -0,0 +1,324 @@ +From a2a47a8b3f3235dded76dfc1e10052d1ea8f89fc Mon Sep 17 00:00:00 2001 +From: brooksytech <1673861+brooksytech@users.noreply.github.com> +Date: Wed, 24 Jan 2024 22:12:01 +0000 +Subject: [PATCH 09/44] gpiolib: of: revert api changes needed for joypad + driver + +--- + include/linux/of_gpio_legacy.h | 304 +++++++++++++++++++++++++++++++++ + 2 files changed, 318 insertions(+) + create mode 100644 include/linux/of_gpio_legacy.h + +diff --git a/include/linux/of_gpio_legacy.h b/include/linux/of_gpio_legacy.h +new file mode 100644 +index 000000000000..ce58afecb4f9 +--- /dev/null ++++ b/include/linux/of_gpio_legacy.h +@@ -0,0 +1,304 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * OF helpers for the GPIO API ++ * ++ * Copyright (c) 2007-2008 MontaVista Software, Inc. ++ * ++ * Author: Anton Vorontsov ++ */ ++ ++#ifndef __LINUX_OF_GPIO_H ++#define __LINUX_OF_GPIO_H ++ ++#include ++#include ++#include /* FIXME: Shouldn't be here */ ++#include ++ ++struct device_node; ++ ++/* ++ * This is Linux-specific flags. By default controllers' and Linux' mapping ++ * match, but GPIO controllers are free to translate their own flags to ++ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. ++ */ ++enum of_gpio_flags { ++ OF_GPIO_ACTIVE_LOW = 0x1, ++ OF_GPIO_SINGLE_ENDED = 0x2, ++ OF_GPIO_OPEN_DRAIN = 0x4, ++ OF_GPIO_TRANSITORY = 0x8, ++ OF_GPIO_PULL_UP = 0x10, ++ OF_GPIO_PULL_DOWN = 0x20, ++}; ++ ++#ifdef CONFIG_OF_GPIO ++ ++#include ++ ++/* ++ * OF GPIO chip for memory mapped banks ++ */ ++struct of_mm_gpio_chip { ++ struct gpio_chip gc; ++ void (*save_regs)(struct of_mm_gpio_chip *mm_gc); ++ void __iomem *regs; ++}; ++ ++static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) ++{ ++ return container_of(gc, struct of_mm_gpio_chip, gc); ++} ++ ++extern int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags); ++ ++extern int of_mm_gpiochip_add_data(struct device_node *np, ++ struct of_mm_gpio_chip *mm_gc, ++ void *data); ++static inline int of_mm_gpiochip_add(struct device_node *np, ++ struct of_mm_gpio_chip *mm_gc) ++{ ++ return of_mm_gpiochip_add_data(np, mm_gc, NULL); ++} ++extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc); ++ ++#else /* CONFIG_OF_GPIO */ ++ ++#include ++ ++/* Drivers may not strictly depend on the GPIO support, so let them link. */ ++static inline int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags) ++{ ++ if (flags) ++ *flags = 0; ++ ++ return -ENOSYS; ++} ++ ++#endif /* CONFIG_OF_GPIO */ ++ ++/** ++ * of_gpio_named_count() - Count GPIOs for a device ++ * @np: device node to count GPIOs for ++ * @propname: property name containing gpio specifier(s) ++ * ++ * The function returns the count of GPIOs specified for a node. ++ * Note that the empty GPIO specifiers count too. Returns either ++ * Number of gpios defined in property, ++ * -EINVAL for an incorrectly formed gpios property, or ++ * -ENOENT for a missing gpios property ++ * ++ * Example: ++ * gpios = <0 ++ * &gpio1 1 2 ++ * 0 ++ * &gpio2 3 4>; ++ * ++ * The above example defines four GPIOs, two of which are not specified. ++ * This function will return '4' ++ */ ++static inline int of_gpio_named_count(const struct device_node *np, ++ const char *propname) ++{ ++ return of_count_phandle_with_args(np, propname, "#gpio-cells"); ++} ++ ++/** ++ * of_gpio_count() - Count GPIOs for a device ++ * @np: device node to count GPIOs for ++ * ++ * Same as of_gpio_named_count, but hard coded to use the 'gpios' property ++ */ ++static inline int of_gpio_count(const struct device_node *np) ++{ ++ return of_gpio_named_count(np, "gpios"); ++} ++ ++static inline int of_get_gpio_flags(const struct device_node *np, int index, ++ enum of_gpio_flags *flags) ++{ ++ return of_get_named_gpio_flags(np, "gpios", index, flags); ++} ++ ++/** ++ * of_get_named_gpio() - Get a GPIO number to use with GPIO API ++ * @np: device node to get GPIO from ++ * @propname: Name of property containing gpio specifier(s) ++ * @index: index of the GPIO ++ * ++ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno ++ * value on the error condition. ++ */ ++static inline int of_get_named_gpio(const struct device_node *np, ++ const char *propname, int index) ++{ ++ return of_get_named_gpio_flags(np, propname, index, NULL); ++} ++ ++/** ++ * of_get_gpio() - Get a GPIO number to use with GPIO API ++ * @np: device node to get GPIO from ++ * @index: index of the GPIO ++ * ++ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno ++ * value on the error condition. ++ */ ++static inline int of_get_gpio(const struct device_node *np, int index) ++{ ++ return of_get_gpio_flags(np, index, NULL); ++} ++ ++#endif /* __LINUX_OF_GPIO_H */ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * OF helpers for the GPIO API ++ * ++ * Copyright (c) 2007-2008 MontaVista Software, Inc. ++ * ++ * Author: Anton Vorontsov ++ */ ++ ++#ifndef __LINUX_OF_GPIO_H ++#define __LINUX_OF_GPIO_H ++ ++#include ++#include ++#include /* FIXME: Shouldn't be here */ ++#include ++ ++struct device_node; ++ ++/* ++ * This is Linux-specific flags. By default controllers' and Linux' mapping ++ * match, but GPIO controllers are free to translate their own flags to ++ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. ++ */ ++enum of_gpio_flags { ++ OF_GPIO_ACTIVE_LOW = 0x1, ++ OF_GPIO_SINGLE_ENDED = 0x2, ++ OF_GPIO_OPEN_DRAIN = 0x4, ++ OF_GPIO_TRANSITORY = 0x8, ++ OF_GPIO_PULL_UP = 0x10, ++ OF_GPIO_PULL_DOWN = 0x20, ++}; ++ ++#ifdef CONFIG_OF_GPIO ++ ++#include ++ ++/* ++ * OF GPIO chip for memory mapped banks ++ */ ++struct of_mm_gpio_chip { ++ struct gpio_chip gc; ++ void (*save_regs)(struct of_mm_gpio_chip *mm_gc); ++ void __iomem *regs; ++}; ++ ++static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) ++{ ++ return container_of(gc, struct of_mm_gpio_chip, gc); ++} ++ ++extern int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags); ++ ++extern int of_mm_gpiochip_add_data(struct device_node *np, ++ struct of_mm_gpio_chip *mm_gc, ++ void *data); ++static inline int of_mm_gpiochip_add(struct device_node *np, ++ struct of_mm_gpio_chip *mm_gc) ++{ ++ return of_mm_gpiochip_add_data(np, mm_gc, NULL); ++} ++extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc); ++ ++#else /* CONFIG_OF_GPIO */ ++ ++#include ++ ++/* Drivers may not strictly depend on the GPIO support, so let them link. */ ++static inline int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags) ++{ ++ if (flags) ++ *flags = 0; ++ ++ return -ENOSYS; ++} ++ ++#endif /* CONFIG_OF_GPIO */ ++ ++/** ++ * of_gpio_named_count() - Count GPIOs for a device ++ * @np: device node to count GPIOs for ++ * @propname: property name containing gpio specifier(s) ++ * ++ * The function returns the count of GPIOs specified for a node. ++ * Note that the empty GPIO specifiers count too. Returns either ++ * Number of gpios defined in property, ++ * -EINVAL for an incorrectly formed gpios property, or ++ * -ENOENT for a missing gpios property ++ * ++ * Example: ++ * gpios = <0 ++ * &gpio1 1 2 ++ * 0 ++ * &gpio2 3 4>; ++ * ++ * The above example defines four GPIOs, two of which are not specified. ++ * This function will return '4' ++ */ ++static inline int of_gpio_named_count(const struct device_node *np, ++ const char *propname) ++{ ++ return of_count_phandle_with_args(np, propname, "#gpio-cells"); ++} ++ ++/** ++ * of_gpio_count() - Count GPIOs for a device ++ * @np: device node to count GPIOs for ++ * ++ * Same as of_gpio_named_count, but hard coded to use the 'gpios' property ++ */ ++static inline int of_gpio_count(const struct device_node *np) ++{ ++ return of_gpio_named_count(np, "gpios"); ++} ++ ++static inline int of_get_gpio_flags(const struct device_node *np, int index, ++ enum of_gpio_flags *flags) ++{ ++ return of_get_named_gpio_flags(np, "gpios", index, flags); ++} ++ ++/** ++ * of_get_named_gpio() - Get a GPIO number to use with GPIO API ++ * @np: device node to get GPIO from ++ * @propname: Name of property containing gpio specifier(s) ++ * @index: index of the GPIO ++ * ++ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno ++ * value on the error condition. ++ */ ++static inline int of_get_named_gpio(const struct device_node *np, ++ const char *propname, int index) ++{ ++ return of_get_named_gpio_flags(np, propname, index, NULL); ++} ++ ++/** ++ * of_get_gpio() - Get a GPIO number to use with GPIO API ++ * @np: device node to get GPIO from ++ * @index: index of the GPIO ++ * ++ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno ++ * value on the error condition. ++ */ ++static inline int of_get_gpio(const struct device_node *np, int index) ++{ ++ return of_get_gpio_flags(np, index, NULL); ++} ++ ++#endif /* __LINUX_OF_GPIO_H */ +-- +2.34.1 + diff --git a/projects/Rockchip/patches/linux/RK3566/029-singleadc-quadsar_adc-joypad-x55.patch b/projects/Rockchip/patches/linux/RK3566/029-singleadc-quadsar_adc-joypad-x55.patch deleted file mode 100644 index f3403be60..000000000 --- a/projects/Rockchip/patches/linux/RK3566/029-singleadc-quadsar_adc-joypad-x55.patch +++ /dev/null @@ -1,2155 +0,0 @@ -From 271086da26bad5312e0281cfdca9e4d0c6204b8e Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 2 Apr 2024 04:09:38 +0400 -Subject: [PATCH 1/7] drivers: input: singleadc_quadsaradc joystick - -* Duplicate singleadc driver for modifications ---- - drivers/input/joystick/Kconfig | 5 + - drivers/input/joystick/Makefile | 3 +- - .../input/joystick/singleadc_quadsaradc_joy.c | 1087 +++++++++++++++++ - 3 files changed, 1094 insertions(+), 1 deletion(-) - create mode 100644 drivers/input/joystick/singleadc_quadsaradc_joy.c - -diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig -index 32982bd77..b9a6d626c 100644 ---- a/drivers/input/joystick/Kconfig -+++ b/drivers/input/joystick/Kconfig -@@ -398,6 +398,11 @@ config JOYSTICK_SINGLEADCJOY - help - The 1-in 4-out SARADC joypad driver. - -+config JOYSTICK_SINGLEADC_QUADSAR_JOY -+ tristate "Quad SARADC dual-joystick gamepad driver" -+ help -+ The 4-in 4-out SARADC joypad driver. -+ - config JOYSTICK_N64 - bool "N64 controller" - depends on MACH_NINTENDO64 -diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile -index f0c22c069..5d48aafad 100644 ---- a/drivers/input/joystick/Makefile -+++ b/drivers/input/joystick/Makefile -@@ -31,7 +31,8 @@ obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-joystick.o - obj-$(CONFIG_JOYSTICK_SEESAW) += adafruit-seesaw.o - obj-$(CONFIG_JOYSTICK_SENSEHAT) += sensehat-joystick.o - obj-$(CONFIG_JOYSTICK_SIDEWINDER) += sidewinder.o --obj-$(CONFIG_JOYSTICK_SINGLEADCJOY) += singleadcjoy.o -+obj-$(CONFIG_JOYSTICK_SINGLEADCJOY) += singleadcjoy.o -+obj-$(CONFIG_JOYSTICK_SINGLEADC_QUADSAR_JOY) += singleadc_quadsaradc_joy.o - obj-$(CONFIG_JOYSTICK_SPACEBALL) += spaceball.o - obj-$(CONFIG_JOYSTICK_SPACEORB) += spaceorb.o - obj-$(CONFIG_JOYSTICK_STINGER) += stinger.o -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -new file mode 100644 -index 000000000..f8e7f04c2 ---- /dev/null -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -0,0 +1,1087 @@ -+/*----------------------------------------------------------------------------*/ -+ -+/* -+ * Copyright (c) 2008-2021 Anbernic -+ */ -+ -+/* -+ * Single SARADC dual-joystick gamepad driver -+ */ -+ -+/*----------------------------------------------------------------------------*/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/*----------------------------------------------------------------------------*/ -+#define DRV_NAME "retrogame_joypad" -+#define __LEFT_JOYSTICK_INVERT__ -+#define __MURMUR__ -+/*----------------------------------------------------------------------------*/ -+#define ADC_MAX_VOLTAGE 1800 -+#define ADC_DATA_TUNING(x, p) ((x * p) / 100) -+#define ADC_TUNING_DEFAULT 180 -+ -+struct bt_adc { -+ /* report value (mV) */ -+ int value; -+ /* report type */ -+ int report_type; -+ /* input device init value (mV) */ -+ int max, min; -+ /* calibrated adc value */ -+ int cal; -+ /* adc scale value */ -+ int scale; -+ /* invert report */ -+ bool invert; -+ /* amux channel */ -+ int amux_ch; -+ /* adc data tuning value([percent), p = positive, n = negative */ -+ int tuning_p, tuning_n; -+}; -+ -+struct analog_mux { -+ /* IIO ADC Channel : amux connect channel */ -+ struct iio_channel *iio_ch; -+ /* analog mux select(a,b) gpio */ -+ int sel_a_gpio, sel_b_gpio; -+ /* analog mux enable gpio */ -+ int en_gpio; -+}; -+ -+struct bt_gpio { -+ /* GPIO Request label */ -+ const char *label; -+ /* GPIO Number */ -+ int num; -+ /* report type */ -+ int report_type; -+ /* report linux code */ -+ int linux_code; -+ /* prev button value */ -+ bool old_value; -+ /* button press level */ -+ bool active_level; -+}; -+ -+struct joypad { -+ struct device *dev; -+ int poll_interval; -+ -+ /* report enable/disable */ -+ bool enable; -+ -+ /* analog mux & joystick control */ -+ struct analog_mux *amux; -+ /* analog mux max count */ -+ int amux_count; -+ /* analog button */ -+ struct bt_adc *adcs; -+ -+ /* report interval (ms) */ -+ int bt_gpio_count; -+ struct bt_gpio *gpios; -+ -+ /* button auto repeat */ -+ int auto_repeat; -+ -+ /* report threshold (mV) */ -+ int bt_adc_fuzz, bt_adc_flat; -+ /* adc read value scale */ -+ int bt_adc_scale; -+ /* joystick deadzone control */ -+ int bt_adc_deadzone; -+ -+ struct mutex lock; -+ -+ /* amux debug channel */ -+ int debug_ch; -+}; -+ -+/*----------------------------------------------------------------------------*/ -+// -+// set to the value in the boot.ini file. (if exist) -+// -+/*----------------------------------------------------------------------------*/ -+static unsigned int g_button_adc_fuzz = 0; -+static unsigned int g_button_adc_flat = 0; -+static unsigned int g_button_adc_scale = 0; -+static unsigned int g_button_adc_deadzone = 0; -+ -+static int button_adc_fuzz(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-fuzz=", button_adc_fuzz); -+ -+static int button_adc_flat(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_flat = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-flat=", button_adc_flat); -+ -+static int button_adc_scale(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_scale = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-scale=", button_adc_scale); -+ -+static int button_adc_deadzone(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-deadzone=", button_adc_deadzone); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_select(struct analog_mux *amux, int channel) -+{ -+ /* select mux channel */ -+ gpio_set_value(amux->en_gpio, 0); -+ -+ switch(channel) { -+ case 0: /* EVENT (ABS_RY) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 1: /* EVENT (ABS_RX) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ case 2: /* EVENT (ABS_Y) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 3: /* EVENT (ABS_X) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ default: -+ /* amux disanle */ -+ gpio_set_value(amux->en_gpio, 1); -+ return -1; -+ } -+ /* mux swtiching speed : 35ns(on) / 9ns(off) */ -+ usleep_range(10, 20); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_read(struct analog_mux *amux, struct bt_adc *adc) -+{ -+ int value; -+ -+ -+ if (joypad_amux_select(amux, adc->amux_ch)) -+ return 0; -+ -+ iio_read_channel_raw(amux->iio_ch, &value); -+ -+ value *= adc->scale; -+#ifdef __LEFT_JOYSTICK_INVERT__ -+ return value; -+#else -+ return (adc->invert ? (adc->max - value) : value); -+#endif -+} -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/poll_interval [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->poll_interval = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->poll_interval); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, -+ joypad_show_poll_interval, -+ joypad_store_poll_interval); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_fuzz [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_fuzz(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, -+ joypad_show_adc_fuzz, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_flat [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_flat(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_flat); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, -+ joypad_show_adc_flat, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/enable [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_enable(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->enable = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_enable(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->enable); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, -+ joypad_show_enable, -+ joypad_store_enable); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_cal [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ bool calibration; -+ -+ calibration = simple_strtoul(buf, NULL, 10); -+ -+ if (calibration) { -+ int nbtn; -+ -+ mutex_lock(&joypad->lock); -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ mutex_unlock(&joypad->lock); -+ } -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ int nbtn; -+ ssize_t pos; -+ -+ for (nbtn = 0, pos = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ nbtn, adc->cal); -+ } -+ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, -+ joypad_show_adc_cal, -+ joypad_store_adc_cal); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/amux_debug [rw] -+ * -+ * echo [debug channel] > amux_debug -+ * cat amux_debug : debug channel mux set & adc read -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ joypad->debug_ch = simple_strtoul(buf, NULL, 10); -+ -+ /* if error than default setting(debug_ch = 0) */ -+ if (joypad->debug_ch > joypad->amux_count) -+ joypad->debug_ch = 0; -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ struct analog_mux *amux = joypad->amux; -+ ssize_t pos; -+ int value; -+ -+ mutex_lock(&joypad->lock); -+ -+ /* disable poll driver */ -+ if (joypad->enable) -+ joypad->enable = false; -+ -+ if (joypad_amux_select(amux, joypad->debug_ch)) -+ goto err_out; -+ -+ if (iio_read_channel_processed(amux->iio_ch, &value)) -+ goto err_out; -+ -+ pos = sprintf(buf, "amux ch[%d], adc scale = %d, adc value = %d\n", -+ joypad->debug_ch, joypad->bt_adc_scale, -+ value * joypad->bt_adc_scale); -+ goto out; -+ -+err_out: -+ pos = sprintf(buf, "error : amux setup & adc read!\n"); -+out: -+ mutex_unlock(&joypad->lock); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(amux_debug, S_IWUSR | S_IRUGO, -+ joypad_show_amux_debug, -+ joypad_store_amux_debug); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ &dev_attr_amux_debug.attr, -+ NULL, -+}; -+ -+static struct attribute_group joypad_attr_group = { -+ .attrs = joypad_attrs, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static void joypad_gpio_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn, value; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ -+ if (gpio_get_value_cansleep(gpio->num) < 0) { -+ dev_err(joypad->dev, "failed to get gpio state\n"); -+ continue; -+ } -+ value = gpio_get_value(gpio->num); -+ if (value != gpio->old_value) { -+ input_event(poll_dev->input, -+ gpio->report_type, -+ gpio->linux_code, -+ (value == gpio->active_level) ? 1 : 0); -+ gpio->old_value = value; -+ } -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_adc_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); -+ continue; -+ } -+ adc->value = adc->value - adc->cal; -+ -+ /* Joystick Deadzone check */ -+ if (joypad->bt_adc_deadzone) { -+ if (abs(adc->value) < joypad->bt_adc_deadzone) -+ adc->value = 0; -+ } -+ -+ /* adc data tuning */ -+ if (adc->tuning_n && adc->value < 0) -+ adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_n); -+ if (adc->tuning_p && adc->value > 0) -+ adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_p); -+ -+ adc->value = adc->value > adc->max ? adc->max : adc->value; -+ adc->value = adc->value < adc->min ? adc->min : adc->value; -+ -+ input_report_abs(poll_dev->input, -+ adc->report_type, -+ adc->invert ? adc->value * (-1) : adc->value); -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_poll(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ if (joypad->enable) { -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ } -+ if (poll_dev->poll_interval != joypad->poll_interval) { -+ mutex_lock(&joypad->lock); -+ poll_dev->poll_interval = joypad->poll_interval; -+ mutex_unlock(&joypad->lock); -+ } -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_open(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ gpio->old_value = gpio->active_level ? 0 : 1; -+ } -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ __func__, nbtn, adc->cal); -+ } -+ /* buttons status sync */ -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ -+ /* button report enable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = true; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : opened\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_close(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ /* button report disable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = false; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : closed\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct analog_mux *amux; -+ enum iio_chan_type type; -+ enum of_gpio_flags flags; -+ int ret; -+ -+ /* analog mux control struct init */ -+ joypad->amux = devm_kzalloc(dev, sizeof(struct analog_mux), -+ GFP_KERNEL); -+ if (!joypad->amux) { -+ dev_err(dev, "%s amux devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ amux = joypad->amux; -+ amux->iio_ch = devm_iio_channel_get(dev, "amux_adc"); -+ if (PTR_ERR(amux->iio_ch) == -EPROBE_DEFER) -+ return -EPROBE_DEFER; -+ if (IS_ERR(amux->iio_ch)) { -+ dev_err(dev, "iio channel get error\n"); -+ return -EINVAL; -+ } -+ if (!amux->iio_ch->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(amux->iio_ch, &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel type %d\n", type); -+ return -EINVAL; -+ } -+ -+ amux->sel_a_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-a-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_a_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_a_gpio, "amux-sel-a"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-a %d\n", -+ __func__, amux->sel_a_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_a_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->sel_b_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-b-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_b_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_b_gpio, "amux-sel-b"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-b %d\n", -+ __func__, amux->sel_b_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_b_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->en_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-en-gpios", 0, &flags); -+ if (gpio_is_valid(amux->en_gpio)) { -+ ret = devm_gpio_request(dev, amux->en_gpio, "amux-en"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-en %d\n", -+ __func__, amux->en_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->en_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ return 0; -+err_out: -+ return ret; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_setup(struct device *dev, struct joypad *joypad) -+{ -+ int nbtn; -+ -+ /* adc button struct init */ -+ joypad->adcs = devm_kzalloc(dev, joypad->amux_count * -+ sizeof(struct bt_adc), GFP_KERNEL); -+ if (!joypad->adcs) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->scale = joypad->bt_adc_scale; -+ -+ adc->max = (ADC_MAX_VOLTAGE / 2); -+ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -+ if (adc->scale) { -+ adc->max *= adc->scale; -+ adc->min *= adc->scale; -+ } -+ adc->amux_ch = nbtn; -+ adc->invert = false; -+ -+ switch (nbtn) { -+ case 0: -+ adc->report_type = ABS_RY; -+ if (device_property_read_u32(dev, -+ "abs_ry-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_ry-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 1: -+ adc->report_type = ABS_RX; -+ if (device_property_read_u32(dev, -+ "abs_rx-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rx-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 2: -+ #ifdef __LEFT_JOYSTICK_INVERT__ -+ adc->invert = true; -+ #endif -+ adc->report_type = ABS_Y; -+ if (device_property_read_u32(dev, -+ "abs_y-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_y-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 3: -+ #ifdef __LEFT_JOYSTICK_INVERT__ -+ adc->invert = true; -+ #endif -+ adc->report_type = ABS_X; -+ if (device_property_read_u32(dev, -+ "abs_x-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_x-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ default : -+ dev_err(dev, "%s amux count(%d) error!", -+ __func__, nbtn); -+ return -EINVAL; -+ } -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct device_node *node, *pp; -+ int nbtn; -+ -+ node = dev->of_node; -+ if (!node) -+ return -ENODEV; -+ -+ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * -+ sizeof(struct bt_gpio), GFP_KERNEL); -+ -+ if (!joypad->gpios) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ nbtn = 0; -+ for_each_child_of_node(node, pp) { -+ enum of_gpio_flags flags; -+ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; -+ int error; -+ -+ gpio->num = of_get_gpio_flags(pp, 0, &flags); -+ if (gpio->num < 0) { -+ error = gpio->num; -+ dev_err(dev, "Failed to get gpio flags, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* gpio active level(key press level) */ -+ gpio->active_level = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; -+ -+ gpio->label = of_get_property(pp, "label", NULL); -+ -+ if (gpio_is_valid(gpio->num)) { -+ error = devm_gpio_request_one(dev, gpio->num, -+ GPIOF_IN, gpio->label); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to request GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ } -+ if (of_property_read_u32(pp, "linux,code", &gpio->linux_code)) { -+ dev_err(dev, "Button without keycode: 0x%x\n", -+ gpio->num); -+ return -EINVAL; -+ } -+ if (of_property_read_u32(pp, "linux,input-type", -+ &gpio->report_type)) -+ gpio->report_type = EV_KEY; -+ } -+ if (nbtn == 0) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+struct input_dev * joypad_input_g; -+ -+ -+void rk_send_key_f_key_up(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 1); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_up); -+ -+ -+void rk_send_key_f_key_down(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 0); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_down); -+ -+ -+static int joypad_input_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct input_polled_dev *poll_dev; -+ struct input_dev *input; -+ int nbtn, error; -+ u32 joypad_revision = 0; -+ u32 joypad_product = 0; -+ -+ poll_dev = devm_input_allocate_polled_device(dev); -+ if (!poll_dev) { -+ dev_err(dev, "no memory for polled device\n"); -+ return -ENOMEM; -+ } -+ -+ poll_dev->private = joypad; -+ poll_dev->poll = joypad_poll; -+ poll_dev->poll_interval = joypad->poll_interval; -+ poll_dev->open = joypad_open; -+ poll_dev->close = joypad_close; -+ -+ input = poll_dev->input; -+ joypad_input_g=input; -+ -+ device_property_read_string(dev, "joypad-name", &input->name); -+ input->phys = DRV_NAME"/input0"; -+ -+ device_property_read_u32(dev, "joypad-revision", &joypad_revision); -+ device_property_read_u32(dev, "joypad-product", &joypad_product); -+ input->id.bustype = BUS_HOST; -+ input->id.vendor = 0x484B; -+ input->id.product = (u16)joypad_product; -+ input->id.version = (u16)joypad_revision; -+ -+ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ -+ __set_bit(EV_ABS, input->evbit); -+ for(nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ input_set_abs_params(input, adc->report_type, -+ adc->min, adc->max, -+ joypad->bt_adc_fuzz, -+ joypad->bt_adc_flat); -+ dev_info(dev, -+ "%s : SCALE = %d, ABS min = %d, max = %d," -+ " fuzz = %d, flat = %d, deadzone = %d\n", -+ __func__, adc->scale, adc->min, adc->max, -+ joypad->bt_adc_fuzz, joypad->bt_adc_flat, -+ joypad->bt_adc_deadzone); -+ dev_info(dev, -+ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -+ __func__, adc->tuning_p, adc->tuning_n); -+ } -+ -+ /* GPIO key setup */ -+ __set_bit(EV_KEY, input->evbit); -+ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ input_set_capability(input, gpio->report_type, -+ gpio->linux_code); -+ } -+ -+ if (joypad->auto_repeat) -+ __set_bit(EV_REP, input->evbit); -+ -+ joypad->dev = dev; -+ -+ error = input_register_polled_device(poll_dev); -+ if (error) { -+ dev_err(dev, "unable to register polled device, err=%d\n", -+ error); -+ return error; -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) -+{ -+ /* -+ fuzz: specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ if (g_button_adc_fuzz) -+ joypad->bt_adc_fuzz = g_button_adc_fuzz; -+ else -+ device_property_read_u32(dev, "button-adc-fuzz", -+ &joypad->bt_adc_fuzz); -+ /* -+ flat: values that are within this value will be discarded by -+ joydev interface and reported as 0 instead. -+ */ -+ if (g_button_adc_flat) -+ joypad->bt_adc_flat = g_button_adc_flat; -+ else -+ device_property_read_u32(dev, "button-adc-flat", -+ &joypad->bt_adc_flat); -+ -+ /* Joystick report value control */ -+ if (g_button_adc_scale) -+ joypad->bt_adc_scale = g_button_adc_scale; -+ else -+ device_property_read_u32(dev, "button-adc-scale", -+ &joypad->bt_adc_scale); -+ -+ /* Joystick deadzone value control */ -+ if (g_button_adc_deadzone) -+ joypad->bt_adc_deadzone = g_button_adc_deadzone; -+ else -+ device_property_read_u32(dev, "button-adc-deadzone", -+ &joypad->bt_adc_deadzone); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_dt_parse(struct device *dev, struct joypad *joypad) -+{ -+ int error = 0; -+ -+ /* initialize value check from boot.ini */ -+ joypad_setup_value_check(dev, joypad); -+ -+ device_property_read_u32(dev, "amux-count", -+ &joypad->amux_count); -+ -+ device_property_read_u32(dev, "poll-interval", -+ &joypad->poll_interval); -+ -+ joypad->auto_repeat = device_property_present(dev, "autorepeat"); -+ -+ joypad->bt_gpio_count = device_get_child_node_count(dev); -+ -+ if ((joypad->amux_count == 0) || (joypad->bt_gpio_count == 0)) { -+ dev_err(dev, "adc key = %d, gpio key = %d error!", -+ joypad->amux_count, joypad->bt_gpio_count); -+ return -EINVAL; -+ } -+ -+ error = joypad_adc_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_amux_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_gpio_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -+ __func__, joypad->amux_count, joypad->bt_gpio_count); -+ -+ return error; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_probe(struct platform_device *pdev) -+{ -+ struct joypad *joypad; -+ struct device *dev = &pdev->dev; -+ int error; -+ -+ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); -+ if (!joypad) { -+ dev_err(dev, "joypad devm_kzmalloc error!"); -+ return -ENOMEM; -+ } -+ -+ /* device tree data parse */ -+ error = joypad_dt_parse(dev, joypad); -+ if (error) { -+ dev_err(dev, "dt parse error!(err = %d)\n", error); -+ return error; -+ } -+ -+ mutex_init(&joypad->lock); -+ platform_set_drvdata(pdev, joypad); -+ -+ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); -+ if (error) { -+ dev_err(dev, "create sysfs group fail, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* poll input device setup */ -+ error = joypad_input_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "input setup failed!(err = %d)\n", error); -+ return error; -+ } -+ dev_info(dev, "%s : probe success\n", __func__); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static const struct of_device_id joypad_of_match[] = { -+ { .compatible = "singleadc-joypad", }, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(of, joypad_of_match); -+ -+/*----------------------------------------------------------------------------*/ -+static struct platform_driver joypad_driver = { -+ .probe = joypad_probe, -+ .driver = { -+ .name = DRV_NAME, -+ .of_match_table = of_match_ptr(joypad_of_match), -+ }, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+static int __init joypad_init(void) -+{ -+ return platform_driver_register(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void __exit joypad_exit(void) -+{ -+ platform_driver_unregister(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+late_initcall(joypad_init); -+module_exit(joypad_exit); --- -2.34.1 - - -From 630503c2f1868970c00459f382576e2cd6e42565 Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 2 Apr 2024 04:19:59 +0400 -Subject: [PATCH 2/7] drivers: input: joystick: yoink from odroidgo2-joypad.c - -* https://github.com/SummerSunGenius/RG351V_kernel/blob/master/drivers/input/joystick/odroidgo2-joypad.c ---- - .../input/joystick/singleadc_quadsaradc_joy.c | 470 +++++------------- - 1 file changed, 136 insertions(+), 334 deletions(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index f8e7f04c2..bca08a4c0 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -5,7 +5,7 @@ - */ - - /* -- * Single SARADC dual-joystick gamepad driver -+ * Quad SARADC dual-joystick gamepad driver - */ - - /*----------------------------------------------------------------------------*/ -@@ -27,16 +27,14 @@ - - /*----------------------------------------------------------------------------*/ - #define DRV_NAME "retrogame_joypad" --#define __LEFT_JOYSTICK_INVERT__ - #define __MURMUR__ - /*----------------------------------------------------------------------------*/ --#define ADC_MAX_VOLTAGE 1800 --#define ADC_DATA_TUNING(x, p) ((x * p) / 100) --#define ADC_TUNING_DEFAULT 180 - - struct bt_adc { -+ /* IIO ADC Channel */ -+ struct iio_channel *channel; - /* report value (mV) */ -- int value; -+ int old_value; - /* report type */ - int report_type; - /* input device init value (mV) */ -@@ -47,19 +45,6 @@ struct bt_adc { - int scale; - /* invert report */ - bool invert; -- /* amux channel */ -- int amux_ch; -- /* adc data tuning value([percent), p = positive, n = negative */ -- int tuning_p, tuning_n; --}; -- --struct analog_mux { -- /* IIO ADC Channel : amux connect channel */ -- struct iio_channel *iio_ch; -- /* analog mux select(a,b) gpio */ -- int sel_a_gpio, sel_b_gpio; -- /* analog mux enable gpio */ -- int en_gpio; - }; - - struct bt_gpio { -@@ -84,31 +69,27 @@ struct joypad { - /* report enable/disable */ - bool enable; - -- /* analog mux & joystick control */ -- struct analog_mux *amux; -- /* analog mux max count */ -- int amux_count; -- /* analog button */ -- struct bt_adc *adcs; -+ /* report reference point */ -+ bool invert_absx; -+ bool invert_absy; - - /* report interval (ms) */ - int bt_gpio_count; - struct bt_gpio *gpios; -- - /* button auto repeat */ - int auto_repeat; - - /* report threshold (mV) */ - int bt_adc_fuzz, bt_adc_flat; -+ int bt_adc_x_range, bt_adc_y_range; - /* adc read value scale */ - int bt_adc_scale; - /* joystick deadzone control */ - int bt_adc_deadzone; -+ int bt_adc_count; -+ struct bt_adc *adcs; - - struct mutex lock; -- -- /* amux debug channel */ -- int debug_ch; - }; - - /*----------------------------------------------------------------------------*/ -@@ -116,11 +97,35 @@ struct joypad { - // set to the value in the boot.ini file. (if exist) - // - /*----------------------------------------------------------------------------*/ -+static unsigned int g_button_adc_x_range = 0; -+static unsigned int g_button_adc_y_range = 0; - static unsigned int g_button_adc_fuzz = 0; - static unsigned int g_button_adc_flat = 0; - static unsigned int g_button_adc_scale = 0; - static unsigned int g_button_adc_deadzone = 0; - -+static int __init button_adcx_range_setup(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ -+ g_button_adc_x_range = simple_strtoul(str, NULL, 10); -+ -+ return 0; -+} -+__setup("button-adc-x-range=", button_adcx_range_setup); -+ -+static int __init button_adcy_range_setup(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ -+ g_button_adc_y_range = simple_strtoul(str, NULL, 10); -+ -+ return 0; -+} -+__setup("button-adc-y-range=", button_adcy_range_setup); -+ - static int button_adc_fuzz(char *str) - { - if (!str) -@@ -159,55 +164,16 @@ __setup("button-adc-deadzone=", button_adc_deadzone); - - /*----------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------*/ --static int joypad_amux_select(struct analog_mux *amux, int channel) --{ -- /* select mux channel */ -- gpio_set_value(amux->en_gpio, 0); -- -- switch(channel) { -- case 0: /* EVENT (ABS_RY) */ -- gpio_set_value(amux->sel_a_gpio, 0); -- gpio_set_value(amux->sel_b_gpio, 0); -- break; -- case 1: /* EVENT (ABS_RX) */ -- gpio_set_value(amux->sel_a_gpio, 0); -- gpio_set_value(amux->sel_b_gpio, 1); -- break; -- case 2: /* EVENT (ABS_Y) */ -- gpio_set_value(amux->sel_a_gpio, 1); -- gpio_set_value(amux->sel_b_gpio, 0); -- break; -- case 3: /* EVENT (ABS_X) */ -- gpio_set_value(amux->sel_a_gpio, 1); -- gpio_set_value(amux->sel_b_gpio, 1); -- break; -- default: -- /* amux disanle */ -- gpio_set_value(amux->en_gpio, 1); -- return -1; -- } -- /* mux swtiching speed : 35ns(on) / 9ns(off) */ -- usleep_range(10, 20); -- return 0; --} -- --/*----------------------------------------------------------------------------*/ --static int joypad_adc_read(struct analog_mux *amux, struct bt_adc *adc) -+static int joypad_adc_read(struct bt_adc *adc) - { - int value; - -- -- if (joypad_amux_select(amux, adc->amux_ch)) -+ if (iio_read_channel_processed(adc->channel, &value)) - return 0; - -- iio_read_channel_raw(amux->iio_ch, &value); -- - value *= adc->scale; --#ifdef __LEFT_JOYSTICK_INVERT__ -- return value; --#else -+ - return (adc->invert ? (adc->max - value) : value); --#endif - } - - /*----------------------------------------------------------------------------*/ -@@ -353,16 +319,16 @@ static ssize_t joypad_store_adc_cal(struct device *dev, - int nbtn; - - mutex_lock(&joypad->lock); -- for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ for (nbtn = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; - -- adc->value = joypad_adc_read(joypad->amux, adc); -- if (!adc->value) { -+ adc->cal = joypad_adc_read(adc); -+ if (!adc->cal) { - dev_err(joypad->dev, "%s : saradc channels[%d]!\n", - __func__, nbtn); - continue; - } -- adc->cal = adc->value; -+ adc->old_value = adc->cal; - } - mutex_unlock(&joypad->lock); - } -@@ -379,12 +345,12 @@ static ssize_t joypad_show_adc_cal(struct device *dev, - int nbtn; - ssize_t pos; - -- for (nbtn = 0, pos = 0; nbtn < joypad->amux_count; nbtn++) { -+ for (nbtn = 0, pos = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; -- pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d ", - nbtn, adc->cal); - } -- pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ pos += sprintf(&buf[pos], "\n"); - return pos; - } - -@@ -393,73 +359,6 @@ static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, - joypad_show_adc_cal, - joypad_store_adc_cal); - --/*----------------------------------------------------------------------------*/ --/* -- * ATTRIBUTES: -- * -- * /sys/devices/platform/retrogame_joypad/amux_debug [rw] -- * -- * echo [debug channel] > amux_debug -- * cat amux_debug : debug channel mux set & adc read -- */ --/*----------------------------------------------------------------------------*/ --static ssize_t joypad_store_amux_debug(struct device *dev, -- struct device_attribute *attr, -- const char *buf, -- size_t count) --{ -- struct platform_device *pdev = to_platform_device(dev); -- struct joypad *joypad = platform_get_drvdata(pdev); -- -- joypad->debug_ch = simple_strtoul(buf, NULL, 10); -- -- /* if error than default setting(debug_ch = 0) */ -- if (joypad->debug_ch > joypad->amux_count) -- joypad->debug_ch = 0; -- -- return count; --} -- --/*----------------------------------------------------------------------------*/ --static ssize_t joypad_show_amux_debug(struct device *dev, -- struct device_attribute *attr, -- char *buf) --{ -- struct platform_device *pdev = to_platform_device(dev); -- struct joypad *joypad = platform_get_drvdata(pdev); -- struct analog_mux *amux = joypad->amux; -- ssize_t pos; -- int value; -- -- mutex_lock(&joypad->lock); -- -- /* disable poll driver */ -- if (joypad->enable) -- joypad->enable = false; -- -- if (joypad_amux_select(amux, joypad->debug_ch)) -- goto err_out; -- -- if (iio_read_channel_processed(amux->iio_ch, &value)) -- goto err_out; -- -- pos = sprintf(buf, "amux ch[%d], adc scale = %d, adc value = %d\n", -- joypad->debug_ch, joypad->bt_adc_scale, -- value * joypad->bt_adc_scale); -- goto out; -- --err_out: -- pos = sprintf(buf, "error : amux setup & adc read!\n"); --out: -- mutex_unlock(&joypad->lock); -- return pos; --} -- --/*----------------------------------------------------------------------------*/ --static DEVICE_ATTR(amux_debug, S_IWUSR | S_IRUGO, -- joypad_show_amux_debug, -- joypad_store_amux_debug); -- - /*----------------------------------------------------------------------------*/ - /*----------------------------------------------------------------------------*/ - static struct attribute *joypad_attrs[] = { -@@ -468,7 +367,6 @@ static struct attribute *joypad_attrs[] = { - &dev_attr_adc_flat.attr, - &dev_attr_enable.attr, - &dev_attr_adc_cal.attr, -- &dev_attr_amux_debug.attr, - NULL, - }; - -@@ -506,36 +404,40 @@ static void joypad_gpio_check(struct input_polled_dev *poll_dev) - static void joypad_adc_check(struct input_polled_dev *poll_dev) - { - struct joypad *joypad = poll_dev->private; -- int nbtn; -+ int nbtn, value; - -- for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ for (nbtn = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; - -- adc->value = joypad_adc_read(joypad->amux, adc); -- if (!adc->value) { -- //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); -+ value = joypad_adc_read(adc); -+ if (!value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); - continue; - } -- adc->value = adc->value - adc->cal; - - /* Joystick Deadzone check */ - if (joypad->bt_adc_deadzone) { -- if (abs(adc->value) < joypad->bt_adc_deadzone) -- adc->value = 0; -+ if ((value < adc->cal + joypad->bt_adc_deadzone) && -+ (value > adc->cal - joypad->bt_adc_deadzone)) -+ value = adc->cal; - } -- -- /* adc data tuning */ -- if (adc->tuning_n && adc->value < 0) -- adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_n); -- if (adc->tuning_p && adc->value > 0) -- adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_p); -- -- adc->value = adc->value > adc->max ? adc->max : adc->value; -- adc->value = adc->value < adc->min ? adc->min : adc->value; -- -- input_report_abs(poll_dev->input, -- adc->report_type, -- adc->invert ? adc->value * (-1) : adc->value); -+ value = value - adc->cal; -+ value = value > adc->max ? adc->max : value; -+ value = value < adc->min ? adc->min : value; -+ -+ if (nbtn == 0) -+ { -+ // adc-x value is default inverted(h/w) -+ input_report_abs(poll_dev->input, -+ adc->report_type, value * (-1)); -+ } -+ else -+ { -+ input_report_abs(poll_dev->input, -+ adc->report_type, value); -+ } -+ adc->old_value = value; - } - input_sync(poll_dev->input); - } -@@ -566,16 +468,16 @@ static void joypad_open(struct input_polled_dev *poll_dev) - struct bt_gpio *gpio = &joypad->gpios[nbtn]; - gpio->old_value = gpio->active_level ? 0 : 1; - } -- for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ for (nbtn = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; - -- adc->value = joypad_adc_read(joypad->amux, adc); -- if (!adc->value) { -+ adc->old_value = joypad_adc_read(adc); -+ if (!adc->old_value) { - dev_err(joypad->dev, "%s : saradc channels[%d]!\n", - __func__, nbtn); - continue; - } -- adc->cal = adc->value; -+ adc->cal = adc->old_value; - dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", - __func__, nbtn, adc->cal); - } -@@ -604,170 +506,64 @@ static void joypad_close(struct input_polled_dev *poll_dev) - dev_info(joypad->dev, "%s : closed\n", __func__); - } - --/*----------------------------------------------------------------------------*/ --static int joypad_amux_setup(struct device *dev, struct joypad *joypad) --{ -- struct analog_mux *amux; -- enum iio_chan_type type; -- enum of_gpio_flags flags; -- int ret; -- -- /* analog mux control struct init */ -- joypad->amux = devm_kzalloc(dev, sizeof(struct analog_mux), -- GFP_KERNEL); -- if (!joypad->amux) { -- dev_err(dev, "%s amux devm_kzmalloc error!", __func__); -- return -ENOMEM; -- } -- amux = joypad->amux; -- amux->iio_ch = devm_iio_channel_get(dev, "amux_adc"); -- if (PTR_ERR(amux->iio_ch) == -EPROBE_DEFER) -- return -EPROBE_DEFER; -- if (IS_ERR(amux->iio_ch)) { -- dev_err(dev, "iio channel get error\n"); -- return -EINVAL; -- } -- if (!amux->iio_ch->indio_dev) -- return -ENXIO; -- -- if (iio_get_channel_type(amux->iio_ch, &type)) -- return -EINVAL; -- -- if (type != IIO_VOLTAGE) { -- dev_err(dev, "Incompatible channel type %d\n", type); -- return -EINVAL; -- } -- -- amux->sel_a_gpio = of_get_named_gpio_flags(dev->of_node, -- "amux-a-gpios", 0, &flags); -- if (gpio_is_valid(amux->sel_a_gpio)) { -- ret = devm_gpio_request(dev, amux->sel_a_gpio, "amux-sel-a"); -- if (ret < 0) { -- dev_err(dev, "%s : failed to request amux-sel-a %d\n", -- __func__, amux->sel_a_gpio); -- goto err_out; -- } -- ret = gpio_direction_output(amux->sel_a_gpio, 0); -- if (ret < 0) -- goto err_out; -- } -- -- amux->sel_b_gpio = of_get_named_gpio_flags(dev->of_node, -- "amux-b-gpios", 0, &flags); -- if (gpio_is_valid(amux->sel_b_gpio)) { -- ret = devm_gpio_request(dev, amux->sel_b_gpio, "amux-sel-b"); -- if (ret < 0) { -- dev_err(dev, "%s : failed to request amux-sel-b %d\n", -- __func__, amux->sel_b_gpio); -- goto err_out; -- } -- ret = gpio_direction_output(amux->sel_b_gpio, 0); -- if (ret < 0) -- goto err_out; -- } -- -- amux->en_gpio = of_get_named_gpio_flags(dev->of_node, -- "amux-en-gpios", 0, &flags); -- if (gpio_is_valid(amux->en_gpio)) { -- ret = devm_gpio_request(dev, amux->en_gpio, "amux-en"); -- if (ret < 0) { -- dev_err(dev, "%s : failed to request amux-en %d\n", -- __func__, amux->en_gpio); -- goto err_out; -- } -- ret = gpio_direction_output(amux->en_gpio, 0); -- if (ret < 0) -- goto err_out; -- } -- return 0; --err_out: -- return ret; --} -- - /*----------------------------------------------------------------------------*/ - static int joypad_adc_setup(struct device *dev, struct joypad *joypad) - { -- int nbtn; -+ int nbtn = 0; - -- /* adc button struct init */ -- joypad->adcs = devm_kzalloc(dev, joypad->amux_count * -+ joypad->adcs = devm_kzalloc(dev, joypad->bt_adc_count * - sizeof(struct bt_adc), GFP_KERNEL); -+ - if (!joypad->adcs) { - dev_err(dev, "%s devm_kzmalloc error!", __func__); - return -ENOMEM; - } - -- for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ for (nbtn = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; -+ enum iio_chan_type type; - - adc->scale = joypad->bt_adc_scale; -- -- adc->max = (ADC_MAX_VOLTAGE / 2); -- adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -- if (adc->scale) { -- adc->max *= adc->scale; -- adc->min *= adc->scale; -+ if (nbtn) { -+ adc->channel = -+ devm_iio_channel_get(dev, "joy_y"); -+ adc->report_type = ABS_Y; -+ if (joypad->invert_absy) -+ adc->invert = true; -+ -+ adc->max = (joypad->bt_adc_y_range / 2) - 1; -+ adc->min = -(joypad->bt_adc_y_range / 2); - } -- adc->amux_ch = nbtn; -- adc->invert = false; -- -- switch (nbtn) { -- case 0: -- adc->report_type = ABS_RY; -- if (device_property_read_u32(dev, -- "abs_ry-p-tuning", -- &adc->tuning_p)) -- adc->tuning_p = ADC_TUNING_DEFAULT; -- if (device_property_read_u32(dev, -- "abs_ry-n-tuning", -- &adc->tuning_n)) -- adc->tuning_n = ADC_TUNING_DEFAULT; -- break; -- case 1: -- adc->report_type = ABS_RX; -- if (device_property_read_u32(dev, -- "abs_rx-p-tuning", -- &adc->tuning_p)) -- adc->tuning_p = ADC_TUNING_DEFAULT; -- if (device_property_read_u32(dev, -- "abs_rx-n-tuning", -- &adc->tuning_n)) -- adc->tuning_n = ADC_TUNING_DEFAULT; -- break; -- case 2: -- #ifdef __LEFT_JOYSTICK_INVERT__ -- adc->invert = true; -- #endif -- adc->report_type = ABS_Y; -- if (device_property_read_u32(dev, -- "abs_y-p-tuning", -- &adc->tuning_p)) -- adc->tuning_p = ADC_TUNING_DEFAULT; -- if (device_property_read_u32(dev, -- "abs_y-n-tuning", -- &adc->tuning_n)) -- adc->tuning_n = ADC_TUNING_DEFAULT; -- break; -- case 3: -- #ifdef __LEFT_JOYSTICK_INVERT__ -- adc->invert = true; -- #endif -- adc->report_type = ABS_X; -- if (device_property_read_u32(dev, -- "abs_x-p-tuning", -- &adc->tuning_p)) -- adc->tuning_p = ADC_TUNING_DEFAULT; -- if (device_property_read_u32(dev, -- "abs_x-n-tuning", -- &adc->tuning_n)) -- adc->tuning_n = ADC_TUNING_DEFAULT; -- break; -- default : -- dev_err(dev, "%s amux count(%d) error!", -- __func__, nbtn); -- return -EINVAL; -+ else { -+ adc->channel = -+ devm_iio_channel_get(dev, "joy_x"); -+ adc->report_type = ABS_X; -+ if (joypad->invert_absx) -+ adc->invert = true; -+ -+ adc->max = (joypad->bt_adc_x_range / 2) - 1; -+ adc->min = -(joypad->bt_adc_x_range / 2); -+ } -+ -+ if (IS_ERR(adc->channel)) { -+ dev_err(dev, "iio channel[%d] get error\n", nbtn); -+ return -EINVAL; -+ } -+ if (!adc->channel->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(adc->channel, &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel %d type %d\n", -+ nbtn, type); -+ return -EINVAL; - } - } -+ if (nbtn == 0) -+ return -EINVAL; -+ - return 0; - } - -@@ -894,7 +690,7 @@ static int joypad_input_setup(struct device *dev, struct joypad *joypad) - - /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ - __set_bit(EV_ABS, input->evbit); -- for(nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ for(nbtn = 0; nbtn < joypad->bt_adc_count; nbtn++) { - struct bt_adc *adc = &joypad->adcs[nbtn]; - input_set_abs_params(input, adc->report_type, - adc->min, adc->max, -@@ -906,9 +702,6 @@ static int joypad_input_setup(struct device *dev, struct joypad *joypad) - __func__, adc->scale, adc->min, adc->max, - joypad->bt_adc_fuzz, joypad->bt_adc_flat, - joypad->bt_adc_deadzone); -- dev_info(dev, -- "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -- __func__, adc->tuning_p, adc->tuning_n); - } - - /* GPIO key setup */ -@@ -969,6 +762,16 @@ static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) - device_property_read_u32(dev, "button-adc-deadzone", - &joypad->bt_adc_deadzone); - -+ if (g_button_adc_x_range) -+ joypad->bt_adc_x_range = g_button_adc_x_range; -+ else -+ device_property_read_u32(dev, "button-adc-x-range", -+ &joypad->bt_adc_x_range); -+ if (g_button_adc_y_range) -+ joypad->bt_adc_y_range = g_button_adc_y_range; -+ else -+ device_property_read_u32(dev, "button-adc-y-range", -+ &joypad->bt_adc_y_range); - } - - /*----------------------------------------------------------------------------*/ -@@ -979,19 +782,25 @@ static int joypad_dt_parse(struct device *dev, struct joypad *joypad) - /* initialize value check from boot.ini */ - joypad_setup_value_check(dev, joypad); - -- device_property_read_u32(dev, "amux-count", -- &joypad->amux_count); -+ device_property_read_u32(dev, "button-adc-count", -+ &joypad->bt_adc_count); - - device_property_read_u32(dev, "poll-interval", - &joypad->poll_interval); - - joypad->auto_repeat = device_property_present(dev, "autorepeat"); - -+ /* change the report reference point? (ADC MAX - read value) */ -+ joypad->invert_absx = device_property_present(dev, "invert-absx"); -+ joypad->invert_absy = device_property_present(dev, "invert-absy"); -+ dev_info(dev, "%s : invert-absx = %d, inveret-absy = %d\n", -+ __func__, joypad->invert_absx, joypad->invert_absy); -+ - joypad->bt_gpio_count = device_get_child_node_count(dev); - -- if ((joypad->amux_count == 0) || (joypad->bt_gpio_count == 0)) { -+ if ((joypad->bt_adc_count == 0) || (joypad->bt_gpio_count == 0)) { - dev_err(dev, "adc key = %d, gpio key = %d error!", -- joypad->amux_count, joypad->bt_gpio_count); -+ joypad->bt_adc_count, joypad->bt_gpio_count); - return -EINVAL; - } - -@@ -999,17 +808,10 @@ static int joypad_dt_parse(struct device *dev, struct joypad *joypad) - if (error) - return error; - -- error = joypad_amux_setup(dev, joypad); -- if (error) -- return error; -- - error = joypad_gpio_setup(dev, joypad); - if (error) - return error; - -- dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -- __func__, joypad->amux_count, joypad->bt_gpio_count); -- - return error; - } - --- -2.34.1 - - -From bd92c3584e2aaea7b1f1767104b5b41933f45fe3 Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 2 Apr 2024 04:33:56 +0400 -Subject: [PATCH 3/7] drivers: input: joystick: add all 4 channels - -* From Stock X55 BSP : -saradc 0 - ABS_X <15 1023>; -saradc 1 - ABS_Y <1023 15>; -saradc 2 - ABS_RX <15 1023>; -saradc 3 - ABS_RY <1023 15>; ---- - .../input/joystick/singleadc_quadsaradc_joy.c | 79 ++++++++++++++++--- - 1 file changed, 67 insertions(+), 12 deletions(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index bca08a4c0..5e23df657 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -72,6 +72,8 @@ struct joypad { - /* report reference point */ - bool invert_absx; - bool invert_absy; -+ bool invert_absrx; -+ bool invert_absry; - - /* report interval (ms) */ - int bt_gpio_count; -@@ -81,7 +83,7 @@ struct joypad { - - /* report threshold (mV) */ - int bt_adc_fuzz, bt_adc_flat; -- int bt_adc_x_range, bt_adc_y_range; -+ int bt_adc_x_range, bt_adc_y_range, bt_adc_rx_range, bt_adc_ry_range; - /* adc read value scale */ - int bt_adc_scale; - /* joystick deadzone control */ -@@ -99,6 +101,8 @@ struct joypad { - /*----------------------------------------------------------------------------*/ - static unsigned int g_button_adc_x_range = 0; - static unsigned int g_button_adc_y_range = 0; -+static unsigned int g_button_adc_rx_range = 0; -+static unsigned int g_button_adc_ry_range = 0; - static unsigned int g_button_adc_fuzz = 0; - static unsigned int g_button_adc_flat = 0; - static unsigned int g_button_adc_scale = 0; -@@ -126,6 +130,28 @@ static int __init button_adcy_range_setup(char *str) - } - __setup("button-adc-y-range=", button_adcy_range_setup); - -+static int __init button_adcrx_range_setup(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ -+ g_button_adc_rx_range = simple_strtoul(str, NULL, 10); -+ -+ return 0; -+} -+__setup("button-adc-rx-range=", button_adcrx_range_setup); -+ -+static int __init button_adcry_range_setup(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ -+ g_button_adc_ry_range = simple_strtoul(str, NULL, 10); -+ -+ return 0; -+} -+__setup("button-adc-ry-range=", button_adcry_range_setup); -+ - static int button_adc_fuzz(char *str) - { - if (!str) -@@ -524,9 +550,18 @@ static int joypad_adc_setup(struct device *dev, struct joypad *joypad) - enum iio_chan_type type; - - adc->scale = joypad->bt_adc_scale; -- if (nbtn) { -- adc->channel = -- devm_iio_channel_get(dev, "joy_y"); -+ -+ if (nbtn == 0) { -+ adc->channel = devm_iio_channel_get(dev, "ABS_X"); -+ adc->report_type = ABS_X; -+ if (joypad->invert_absx) -+ adc->invert = true; -+ -+ adc->max = (joypad->bt_adc_x_range / 2) - 1; -+ adc->min = -(joypad->bt_adc_x_range / 2); -+ } -+ else if (nbtn == 1) { -+ adc->channel = devm_iio_channel_get(dev, "ABS_Y"); - adc->report_type = ABS_Y; - if (joypad->invert_absy) - adc->invert = true; -@@ -534,15 +569,23 @@ static int joypad_adc_setup(struct device *dev, struct joypad *joypad) - adc->max = (joypad->bt_adc_y_range / 2) - 1; - adc->min = -(joypad->bt_adc_y_range / 2); - } -+ else if (nbtn == 2) { -+ adc->channel = devm_iio_channel_get(dev, "ABS_RX"); -+ adc->report_type = ABS_RX; -+ if (joypad->invert_absrx) -+ adc->invert = true; -+ -+ adc->max = (joypad->bt_adc_rx_range / 2) - 1; -+ adc->min = -(joypad->bt_adc_rx_range / 2); -+ } - else { -- adc->channel = -- devm_iio_channel_get(dev, "joy_x"); -- adc->report_type = ABS_X; -- if (joypad->invert_absx) -+ adc->channel = devm_iio_channel_get(dev, "ABS_RY"); -+ adc->report_type = ABS_RY; -+ if (joypad->invert_absry) - adc->invert = true; - -- adc->max = (joypad->bt_adc_x_range / 2) - 1; -- adc->min = -(joypad->bt_adc_x_range / 2); -+ adc->max = (joypad->bt_adc_ry_range / 2) - 1; -+ adc->min = -(joypad->bt_adc_ry_range / 2); - } - - if (IS_ERR(adc->channel)) { -@@ -772,6 +815,16 @@ static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) - else - device_property_read_u32(dev, "button-adc-y-range", - &joypad->bt_adc_y_range); -+ if (g_button_adc_rx_range) -+ joypad->bt_adc_rx_range = g_button_adc_rx_range; -+ else -+ device_property_read_u32(dev, "button-adc-rx-range", -+ &joypad->bt_adc_rx_range); -+ if (g_button_adc_ry_range) -+ joypad->bt_adc_ry_range = g_button_adc_ry_range; -+ else -+ device_property_read_u32(dev, "button-adc-ry-range", -+ &joypad->bt_adc_ry_range); - } - - /*----------------------------------------------------------------------------*/ -@@ -793,8 +846,10 @@ static int joypad_dt_parse(struct device *dev, struct joypad *joypad) - /* change the report reference point? (ADC MAX - read value) */ - joypad->invert_absx = device_property_present(dev, "invert-absx"); - joypad->invert_absy = device_property_present(dev, "invert-absy"); -- dev_info(dev, "%s : invert-absx = %d, inveret-absy = %d\n", -- __func__, joypad->invert_absx, joypad->invert_absy); -+ joypad->invert_absrx = device_property_present(dev, "invert-absrx"); -+ joypad->invert_absry = device_property_present(dev, "invert-absry"); -+ dev_info(dev, "%s : invert-absx = %d, inveret-absy = %d\n, inveret-absrx = %d\n, inveret-absry = %d\n", -+ __func__, joypad->invert_absx, joypad->invert_absy, joypad->invert_absrx, joypad->invert_absry); - - joypad->bt_gpio_count = device_get_child_node_count(dev); - --- -2.34.1 - - -From 26241d4bf8e17a96aa30dace7267519f85d5e83e Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Wed, 3 Apr 2024 00:31:14 +0400 -Subject: [PATCH 4/7] drivers: input: joystick: dont invert X axis - ---- - drivers/input/joystick/singleadc_quadsaradc_joy.c | 12 ++---------- - 1 file changed, 2 insertions(+), 10 deletions(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index 5e23df657..a13982375 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -452,17 +452,9 @@ static void joypad_adc_check(struct input_polled_dev *poll_dev) - value = value > adc->max ? adc->max : value; - value = value < adc->min ? adc->min : value; - -- if (nbtn == 0) -- { -- // adc-x value is default inverted(h/w) -- input_report_abs(poll_dev->input, -- adc->report_type, value * (-1)); -- } -- else -- { -- input_report_abs(poll_dev->input, -+ input_report_abs(poll_dev->input, - adc->report_type, value); -- } -+ - adc->old_value = value; - } - input_sync(poll_dev->input); --- -2.34.1 - - -From 7a18f03bc041db8ce7f2a8b84695fae98efa2fb4 Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 9 Apr 2024 19:52:31 +0400 -Subject: [PATCH 5/7] drivers: input: singleadc: change device name - ---- - drivers/input/joystick/singleadc_quadsaradc_joy.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index a13982375..27af64a7d 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -904,7 +904,7 @@ static int joypad_probe(struct platform_device *pdev) - - /*----------------------------------------------------------------------------*/ - static const struct of_device_id joypad_of_match[] = { -- { .compatible = "singleadc-joypad", }, -+ { .compatible = "singleadc-joypad-x55", }, - {}, - }; - --- -2.34.1 - - -From 6071df09f533e9eaa82be8c283c025ce3ff0482f Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 9 Apr 2024 20:29:33 +0400 -Subject: [PATCH 6/7] drivers: input: singleadc: fix definitions - ---- - .../input/joystick/singleadc_quadsaradc_joy.c | 24 +++++++++---------- - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index 27af64a7d..542da74d9 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -665,29 +665,29 @@ static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) - } - - /*----------------------------------------------------------------------------*/ --struct input_dev * joypad_input_g; -+struct input_dev * joypad_input_g_x55; - - --void rk_send_key_f_key_up(void) -+void rk_send_key_f_key_up_x55(void) - { -- if (!joypad_input_g) -+ if (!joypad_input_g_x55) - return; - -- input_report_key(joypad_input_g, BTN_MODE, 1); -- input_sync(joypad_input_g); -+ input_report_key(joypad_input_g_x55, BTN_MODE, 1); -+ input_sync(joypad_input_g_x55); - } --EXPORT_SYMBOL(rk_send_key_f_key_up); -+EXPORT_SYMBOL(rk_send_key_f_key_up_x55); - - --void rk_send_key_f_key_down(void) -+void rk_send_key_f_key_down_x55(void) - { -- if (!joypad_input_g) -+ if (!joypad_input_g_x55) - return; - -- input_report_key(joypad_input_g, BTN_MODE, 0); -- input_sync(joypad_input_g); -+ input_report_key(joypad_input_g_x55, BTN_MODE, 0); -+ input_sync(joypad_input_g_x55); - } --EXPORT_SYMBOL(rk_send_key_f_key_down); -+EXPORT_SYMBOL(rk_send_key_f_key_down_x55); - - - static int joypad_input_setup(struct device *dev, struct joypad *joypad) -@@ -711,7 +711,7 @@ static int joypad_input_setup(struct device *dev, struct joypad *joypad) - poll_dev->close = joypad_close; - - input = poll_dev->input; -- joypad_input_g=input; -+ joypad_input_g_x55=input; - - device_property_read_string(dev, "joypad-name", &input->name); - input->phys = DRV_NAME"/input0"; --- -2.34.1 - - -From 02d9bf62d26a57408e9476d56e8ba8a8ea1a2cfe Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 9 Apr 2024 21:18:30 +0400 -Subject: [PATCH 7/7] drivers: input: singleadc: change DRV name - -* Error: Driver 'retrogame_joypad' is already registered, aborting... ---- - drivers/input/joystick/singleadc_quadsaradc_joy.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/input/joystick/singleadc_quadsaradc_joy.c b/drivers/input/joystick/singleadc_quadsaradc_joy.c -index 542da74d9..67c9ade27 100644 ---- a/drivers/input/joystick/singleadc_quadsaradc_joy.c -+++ b/drivers/input/joystick/singleadc_quadsaradc_joy.c -@@ -26,7 +26,7 @@ - #include - - /*----------------------------------------------------------------------------*/ --#define DRV_NAME "retrogame_joypad" -+#define DRV_NAME "retrogame_joypad_x55" - #define __MURMUR__ - /*----------------------------------------------------------------------------*/ - --- -2.34.1 - diff --git a/projects/Rockchip/patches/linux/RK3566/030-powkiddy-x55-input.patch b/projects/Rockchip/patches/linux/RK3566/030-powkiddy-x55-input.patch index f3609bbad..6164bd2f3 100644 --- a/projects/Rockchip/patches/linux/RK3566/030-powkiddy-x55-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/030-powkiddy-x55-input.patch @@ -1,46 +1,29 @@ -From ecf0713489cd02a29f9d0dd489408a3f3ee2cd1e Mon Sep 17 00:00:00 2001 -From: AnanJaser -Date: Tue, 9 Apr 2024 19:52:55 +0400 -Subject: [PATCH] dts: rk3566-x55: setup singleadc-joypad-x55 +From 0482670dd782fccbf4e5d93787644812a81578ed Mon Sep 17 00:00:00 2001 +From: Paul Reioux +Date: Wed, 17 Apr 2024 16:16:26 -0700 +Subject: [PATCH] PowKiddy X55: update X55 dts to support rocknix-joypad driver -* Adjust joystick ranges to match stock -* change device id +Signed-off-by: Paul Reioux --- - .../boot/dts/rockchip/rk3566-powkiddy-x55.dts | 274 +++++++++--------- - 1 file changed, 140 insertions(+), 134 deletions(-) + .../boot/dts/rockchip/rk3566-powkiddy-x55.dts | 304 ++++++++++-------- + 1 file changed, 161 insertions(+), 143 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts -index ab627cb30..13509328c 100644 +index 4786b19fd017..0f3e4fb45410 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts -@@ -24,45 +24,153 @@ chosen: chosen { +@@ -24,47 +24,6 @@ chosen: chosen { stdout-path = "serial2:1500000n8"; }; - adc_joystick: adc-joystick { - compatible = "adc-joystick"; -+ joypad: singleadc-joypad-x55 { -+ compatible = "singleadc-joypad-x55"; -+ hw_info = <0x01>; -+ -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; -+ -+ status = "okay"; -+ -+ /* gpio pincontrol setup */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ -+ /* JOYSTICK Channel define */ -+ io-channel-names = "ABS_X", "ABS_Y", "ABS_RX", "ABS_RY"; - io-channels = <&saradc 0>, <&saradc 1>, - <&saradc 2>, <&saradc 3>; +- io-channels = <&saradc 0>, <&saradc 1>, +- <&saradc 2>, <&saradc 3>; - poll-interval = <60>; - #address-cells = <1>; - #size-cells = <0>; - +- - axis@0 { - reg = <0>; - abs-flat = <30>; @@ -48,9 +31,7 @@ index ab627cb30..13509328c 100644 - abs-range = <15 1023>; - linux,code = ; - }; -+ /* adc channel count */ -+ button-adc-count = <4>; - +- - axis@1 { - reg = <1>; - abs-flat = <30>; @@ -58,9 +39,7 @@ index ab627cb30..13509328c 100644 - abs-range = <1023 15>; - linux,code = ; - }; -+ /* adc calculate scale */ -+ button-adc-scale = <2>; - +- - axis@2 { - reg = <2>; - abs-flat = <30>; @@ -68,138 +47,20 @@ index ab627cb30..13509328c 100644 - abs-range = <15 1023>; - linux,code = ; - }; -+ /* adc deadzone range */ -+ button-adc-deadzone = <64>; -+ -+ /* -+ specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ button-adc-fuzz = <20>; -+ button-adc-flat = <30>; -+ -+ /* -+ joy-stick voltage range -+ /sys/devices/platform/ff288000.saradc/iio:device0 -+ adc-x : in_voltage1_raw -+ adc-y : in_voltage2_raw -+ adc-rx : in_voltage3_raw -+ adc-ry : in_voltage4_raw -+ -+ range calculate. -+ (adc raw max value - adc raw min value) * scale * 1.7515 - +- - axis@3 { - reg = <3>; - abs-flat = <30>; - abs-fuzz = <20>; - abs-range = <1023 15>; - linux,code = ; -+ This calculation outputs 3517 which feels wrong so instead do max - min * scale which gives us stock range -+ */ -+ -+ button-adc-x-range = <2016>; -+ button-adc-y-range = <2016>; -+ button-adc-rx-range = <2016>; -+ button-adc-ry-range = <2016>; -+ -+ /* poll device interval (ms), adc read interval */ -+ poll-interval = <60>; -+ -+ /* gpio button auto repeat set value : default disable */ -+ /* -+ autorepeat; -+ */ -+ sw1 { -+ gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-UP"; -+ linux,code = ; -+ }; -+ sw2 { -+ gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-DOWN"; -+ linux,code = ; -+ }; -+ sw3 { -+ gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-LEFT"; -+ linux,code = ; -+ }; -+ sw4 { -+ gpios = <&gpio3 RK_PD7 GPIO_ACTIVE_LOW>; -+ label = "GPIO DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ sw5 { -+ gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_LOW>; -+ label = "GPIO KEY BTN-A"; -+ linux,code = ; -+ }; -+ sw6 { -+ gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-B"; -+ linux,code = ; -+ }; -+ sw7 { -+ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-X"; -+ linux,code = ; -+ }; -+ sw8 { -+ gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN-Y"; -+ linux,code = ; -+ }; -+ sw9 { -+ gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_SELECT"; -+ linux,code = ; -+ }; -+ sw10 { -+ gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_START"; -+ linux,code = ; -+ }; -+ sw11 { -+ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_F"; -+ linux,code = ; -+ }; -+ sw12 { -+ gpios = <&gpio3 RK_PD0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL"; -+ linux,code = ; -+ }; -+ sw13 { -+ gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR"; -+ linux,code = ; -+ }; -+ sw14 { -+ gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TL2"; -+ linux,code = ; -+ }; -+ sw15 { -+ gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_TR2"; -+ linux,code = ; -+ }; -+ sw16 { -+ gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBL"; -+ linux,code = ; -+ }; -+ sw17 { -+ gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>; -+ label = "GPIO BTN_THUMBR"; -+ linux,code = ; - }; -+ - }; - +- }; +- }; +- backlight: backlight { -@@ -90,108 +198,6 @@ battery: battery { + compatible = "pwm-backlight"; + power-supply = <&vcc_sys>; +@@ -90,108 +49,6 @@ battery: battery { <3400000 0>; }; @@ -308,6 +169,175 @@ index ab627cb30..13509328c 100644 gpio_keys_vol: gpio-keys-vol { compatible = "gpio-keys"; autorepeat; +@@ -250,6 +107,167 @@ hdmi_con_in: endpoint { + }; + }; + ++ joypad: rocknix-joypad { ++ compatible = "rocknix-joypad"; ++ status = "okay"; ++ ++ /* the following 4 dts entries starting from joypad-name are important to keep ++ compatibility with existing userspace programs such as ES and retroarch */ ++ joypad-name = "retrogame_joypad"; ++ joypad-product = <0x1101>; ++ joypad-revision = <0x0100>; ++ joypad-vendor = <0x484B>; ++ ++ /* analog mux define */ ++ io-channel-names = "key-RY", "key-RX", "key-LY", "key-LX"; ++ io-channels = <&saradc 3>,<&saradc 2>,<&saradc 1>, <&saradc 0>; ++ ++ /* gpio pincontrol setup */ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&btn_pins_ctrl>; ++ ++ /* adc calculate scale */ ++ button-adc-scale = <2>; ++ ++ /* adc deadzone range (minimum should be around 12%) */ ++ button-adc-deadzone = <216>; ++ ++ /* specifies fuzz value that is used to filter noise from ++ the event stream. (around 3%) */ ++ button-adc-fuzz = <54>; ++ button-adc-flat = <54>; ++ ++ /* analog Stick data tuning value(precent) ++ p = positive direction, n = negative direction ++ report value = (real_adc_data * tuning_value) / 100 */ ++ abs_x-p-tuning = <180>; ++ abs_x-n-tuning = <180>; ++ ++ abs_y-p-tuning = <180>; ++ abs_y-n-tuning = <180>; ++ ++ abs_rx-p-tuning = <180>; ++ abs_rx-n-tuning = <180>; ++ ++ abs_ry-p-tuning = <180>; ++ abs_ry-n-tuning = <180>; ++ ++ /* poll device interval (ms), adc read interval */ ++ poll-interval = <10>; ++ ++ /* gpio button auto repeat set value : default disable */ ++ /* autorepeat; */ ++ ++ /* *** Powkiddy X55 Switch layout *** ++ |------------------------------------------------| ++ | sw15 sw13 | ++ | sw16 sw14 | ++ |------------------------------------------------| ++ | | ++ | Analog |-------------------| | ++ | sw11 | | sw8 | ++ | | | sw7 sw5 | ++ | | LCD Display | sw6 | ++ | sw1 | | | ++ | sw3 sw4 | | Analog | ++ | sw2 |-------------------| sw12 | ++ | | ++ | sw9 Vol+ Vol- sw10 | ++ | | ++ |------------------------------------------------| */ ++ ++ sw1 { ++ gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-UP"; ++ linux,code = ; ++ }; ++ sw2 { ++ gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-DOWN"; ++ linux,code = ; ++ }; ++ sw3 { ++ gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-LEFT"; ++ linux,code = ; ++ }; ++ sw4 { ++ gpios = <&gpio3 RK_PD7 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-RIGHT"; ++ linux,code = ; ++ }; ++ sw5 { ++ gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-A"; ++ linux,code = ; ++ }; ++ sw6 { ++ gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW> ; ++ label = "GPIO BTN-B"; ++ linux,code = ; ++ }; ++ sw7 { ++ gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-Y"; ++ linux,code = ; ++ }; ++ sw8 { ++ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-X"; ++ linux,code = ; ++ }; ++ sw9 { ++ gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>; ++ label = "BTN_SELECT"; ++ linux,code = ; ++ }; ++ sw10 { ++ gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_LOW>; ++ label = "BTN_START"; ++ linux,code = ; ++ }; ++ /* this sw11 entry is SPECIAL, most RK3566 devices do not have ++ this physical button but for the sake of keeping compatibility ++ with ES and retroarch, this phantom button and offset will ++ allow existing userspace programs to work without doing any ++ new remapping thus saving lots of headaches and extra work */ ++ sw11 { ++ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_F"; ++ linux,code = ; ++ }; ++ sw12 { ++ gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>; ++ label = "BTN_THUMBL"; ++ linux,code = ; ++ }; ++ sw13 { ++ gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>; ++ label = "BTN_THUMBR"; ++ linux,code = ; ++ }; ++ sw14 { ++ gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++ sw16 { ++ gpios = <&gpio3 RK_PD0 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL"; ++ linux,code = ; ++ }; ++ sw17 { ++ gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL2"; ++ linux,code = ; ++ }; ++ }; ++ + sdio_pwrseq: sdio-pwrseq { + compatible = "mmc-pwrseq-simple"; + clocks = <&rk817 1>; -- 2.34.1 + From 07e47ad876e4deb0933714d58f568a73ced4534c Mon Sep 17 00:00:00 2001 From: spycat88 Date: Thu, 18 Apr 2024 21:48:39 +0100 Subject: [PATCH 058/184] mali-bifrost: bump package to r49p0 --- projects/Amlogic/packages/mali-bifrost/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Amlogic/packages/mali-bifrost/package.mk b/projects/Amlogic/packages/mali-bifrost/package.mk index 2fc3de167..4d1de532f 100644 --- a/projects/Amlogic/packages/mali-bifrost/package.mk +++ b/projects/Amlogic/packages/mali-bifrost/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="mali-bifrost" -PKG_VERSION="r48p0-01eac0" +PKG_VERSION="r49p0-00eac0" PKG_LICENSE="GPL" PKG_SITE="https://developer.arm.com/downloads/-/mali-drivers/bifrost-kernel" PKG_URL="https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-bifrost-gpu/BX304L01B-SW-99002-${PKG_VERSION}.tar" From 9d9bc3468ccb2a5e65742b2f8411c3a4daa62165 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 19 Apr 2024 04:25:14 +0000 Subject: [PATCH 059/184] Add geolisth emulator --- config/emulators/neogeo.conf | 2 +- .../AMD64/SUPPORTED_EMULATORS_AND_CORES.md | 9 ++++---- .../RK3326/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../RK3399/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../RK3566/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../RK3588/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../emulators/libretro/geolith-lr/package.mk | 22 +++++++++++++++++++ .../geolith-lr/patches/000-platform.patch | 20 +++++++++++++++++ .../config/common/es_features.cfg | 1 + packages/virtual/emulators/package.mk | 15 ++++++++----- 11 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 packages/emulators/libretro/geolith-lr/package.mk create mode 100644 packages/emulators/libretro/geolith-lr/patches/000-platform.patch diff --git a/config/emulators/neogeo.conf b/config/emulators/neogeo.conf index 5bad25ae4..433a3d71e 100644 --- a/config/emulators/neogeo.conf +++ b/config/emulators/neogeo.conf @@ -4,7 +4,7 @@ SYSTEM_MANUFACTURER="SNK" SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/neogeo" -SYSTEM_EXTENSION=".7z .zip" +SYSTEM_EXTENSION=".7z .zip .neo" SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="neogeo" SYSTEM_THEME="neogeo" diff --git a/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md index 8023e2ccf..2caca5a7d 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md @@ -55,7 +55,7 @@ This document describes all available systems emulators and cores available for |Microsoft|Xbox (xbox)|2001|`xbox`|.iso|**xemu:** xemu-sa (default)
| |NEC|PC Engine (pcengine)|1987|`pcengine`|.pce .bin .zip .7z|**retroarch:** beetle_pce_fast (default)
**retroarch:** beetle_pce
**retroarch:** beetle_supergrafx
**mednafen:** pce
**mednafen:** pce_fast
| |NEC|PC Engine CD (pcenginecd)|1988|`pcenginecd`|.cue .ccd .chd .toc .m3u|**retroarch:** beetle_pce_fast (default)
**retroarch:** beetle_pce
**retroarch:** beetle_supergrafx
**mednafen:** pce
**mednafen:** pce_fast
| -|NEC|PC-8800 (pc-8800)|1981|`pc88`|.d88 .m3u|**retroarch:** quasi88 (default)
| +|NEC|PC-8800 (pc-8800)|1981|`pc88`|.d88 .u88 .m3u|**retroarch:** quasi88 (default)
| |NEC|PC-9800 (pc-9800)|1983|`pc98`|.d98 .zip .fdi .fdd .2hd .tfd .d88 .hdm .xdf .dup .hdi .thd .nhd .hdd .hdn|**retroarch:** np2kai (default)
| |NEC|PC-FX (pcfx)|1994|`pcfx`|.chd .cue .ccd .toc|**retroarch:** beetle_pcfx (default)
**mednafen:** pcfx
| |NEC|SuperGrafx (supergrafx)|1989|`sgfx`|.pce .sgx .cue .ccd .chd .zip .7z|**retroarch:** beetle_supergrafx
**retroarch:** beetle_pce
**mednafen:** pce
**mednafen:** pce_fast
| @@ -85,6 +85,7 @@ This document describes all available systems emulators and cores available for |Nintendo|Virtual Boy (virtualboy)|1995|`virtualboy`|.vb .zip .7z|**retroarch:** beetle_vb (default)
**mednafen:** vb
| |Nintendo|Wii (wii)|2006|`wii`|.gcm .iso .gcz .ciso .wbfs .rvz .dol .wad|**dolphin:** dolphin-sa-wii (default)
**retroarch:** dolphin
| |Nintendo|Wii U (wiiu)|2012|`wiiu`|.wud .wux .wua|**cemu:** cemu-sa (default)
| +|Palm, Inc.|Palm OS (palm)|1996|`palm`|.prc .pqa .img .pdb .zip|**retroarch:** mu (default)
| |Panasonic|3DO (3do)|1993|`3do`|.iso .bin .chd .cue|**retroarch:** opera (default)
| |Philips|CD-i (cdi)|1991|`cdi`|.chd .cue .iso|**retroarch:** same_cdi (default)
| |Philips|VideoPac (videopac)|1978|`videopac`|.bin .zip .7z|**retroarch:** o2em (default)
| @@ -104,12 +105,12 @@ This document describes all available systems emulators and cores available for |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| |Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**retroarch:** beetle_saturn
**retroarch:** kronos
**mednafen:** ss
| -|Sharp|X1 (x1)|1982|`x1`|.dx1 .2d .2hd .tfd .d88 .hdm .xdf .dup .tap .cmd .zip .7z|**retroarch:** x1 (default)
| +|Sharp|X1 (x1)|1982|`x1`|.dx1 .2d .2hd .tfd .d88 .88d .hdm .xdf .dup .tap .cmd .zip .7z|**retroarch:** x1 (default)
| |Sharp|x68000 (x68000)|1987|`x68000`|.dim .img .d88 .hdm .dup .2hd .xdf .hdf .cmd .m3u .zip .7z|**retroarch:** px68k (default)
| |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| -|Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .zip .7z|**retroarch:** 81 (default)
| +|Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md index 5129e21b2..a6e75165c 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md @@ -106,7 +106,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md index ac107176e..66fd5067c 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md @@ -108,7 +108,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md index b51387e80..8911cb0dd 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md @@ -106,7 +106,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md index b51387e80..8911cb0dd 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md @@ -106,7 +106,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md index 256413fe5..f605ab5a9 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md @@ -109,7 +109,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/packages/emulators/libretro/geolith-lr/package.mk b/packages/emulators/libretro/geolith-lr/package.mk new file mode 100644 index 000000000..0f4dbaa0e --- /dev/null +++ b/packages/emulators/libretro/geolith-lr/package.mk @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="geolith-lr" +PKG_VERSION="1ca863e1a10f40be3f3c4cccf22719c6a859d2b3" +PKG_ARCH="aarch64" +PKG_LICENSE="BSD" +PKG_SITE="https://github.com/libretro/geolith-libretro" +PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_LONGDESC="Geolith is a highly accurate emulator for the Neo Geo AES and MVS." +PKG_TOOLCHAIN="make" + +make_target() { +cd libretro + make -f ./Makefile platform=${DEVICE_NAME} +} + +makeinstall_target() { + mkdir -p ${INSTALL}/usr/lib/libretro + cp geolith_libretro.so ${INSTALL}/usr/lib/libretro/ +} diff --git a/packages/emulators/libretro/geolith-lr/patches/000-platform.patch b/packages/emulators/libretro/geolith-lr/patches/000-platform.patch new file mode 100644 index 000000000..ce9e015a9 --- /dev/null +++ b/packages/emulators/libretro/geolith-lr/patches/000-platform.patch @@ -0,0 +1,20 @@ +diff -rupN geolith-libretro.orig/libretro/Makefile geolith-libretro/libretro/Makefile +--- geolith-libretro.orig/libretro/Makefile 2024-04-18 21:11:00.166799951 +0000 ++++ geolith-libretro/libretro/Makefile 2024-04-18 22:08:26.503486311 +0000 +@@ -375,6 +375,16 @@ else ifeq ($(platform), rpi4) + FLAGS += -mcpu=cortex-a72 -mtune=cortex-a72 + FLAGS += -fomit-frame-pointer -ffast-math + ++# @DEVICE@ ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T ++ CFLAGS+=-fsigned-char ++ FLAGS += -DARM ++ FLAGS += -mcpu=@TARGET_CPU@ -mtune=@TARGET_CPU@ ++ FLAGS += -fomit-frame-pointer -ffast-math ++ + else ifeq ($(platform), emscripten) + TARGET := $(TARGET_NAME)_libretro_$(platform).bc + STATIC_LINKING = 1 diff --git a/packages/ui/emulationstation/config/common/es_features.cfg b/packages/ui/emulationstation/config/common/es_features.cfg index 18953bbf9..530d528f9 100644 --- a/packages/ui/emulationstation/config/common/es_features.cfg +++ b/packages/ui/emulationstation/config/common/es_features.cfg @@ -818,6 +818,7 @@ + diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index dad9c6503..46618d119 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -36,26 +36,26 @@ case "${DEVICE}" in RK3588*) [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr wine" PKG_EMUS+=" aethersx2-sa box64 dolphin-sa drastic-sa mednafen melonds-sa portmaster scummvmsa supermodel-sa yabasanshiro-sa" - LIBRETRO_CORES+=" beetle-psx-lr beetle-saturn-lr bsnes-lr bsnes-hd-lr dolphin-lr pcsx_rearmed-lr uae4arm" + LIBRETRO_CORES+=" beetle-psx-lr beetle-saturn-lr bsnes-lr bsnes-hd-lr dolphin-lr geolith-lr pcsx_rearmed-lr uae4arm" PKG_RETROARCH+=" retropie-shaders" ;; RK3399) [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr" PKG_EMUS+=" aethersx2-sa box64 dolphin-sa drastic-sa mednafen melonds-sa nanoboyadvance-sa portmaster scummvmsa yabasanshiro-sa" - LIBRETRO_CORES+=" beetle-psx-lr bsnes-lr bsnes-hd-lr dolphin-lr flycast-lr pcsx_rearmed-lr uae4arm" + LIBRETRO_CORES+=" beetle-psx-lr bsnes-lr bsnes-hd-lr dolphin-lr geolith-lr flycast-lr pcsx_rearmed-lr uae4arm" PKG_RETROARCH+=" retropie-shaders" ;; RK356*) [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr wine" PKG_DEPENDS_TARGET+=" common-shaders glsl-shaders" PKG_EMUS+=" box64 drastic-sa mednafen portmaster scummvmsa yabasanshiro-sa" - LIBRETRO_CORES+=" flycast-lr uae4arm" + LIBRETRO_CORES+=" flycast-lr geolith-lr uae4arm" PKG_RETROARCH+=" retropie-shaders" ;; S922X*) [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 pcsx_rearmed-lr wine" PKG_EMUS+=" aethersx2-sa box64 dolphin-sa drastic-sa portmaster yabasanshiro-sa" - LIBRETRO_CORES+=" beetle-psx-lr bsnes-lr bsnes-hd-lr dolphin-lr flycast-lr uae4arm" + LIBRETRO_CORES+=" beetle-psx-lr bsnes-lr bsnes-hd-lr dolphin-lr geolith-lr flycast-lr uae4arm" [ "${USE_MALI}" != "no" ] && PKG_EMUS+=" lime3ds-sa" PKG_RETROARCH+=" retropie-shaders" ;; @@ -63,7 +63,7 @@ case "${DEVICE}" in [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 desmume-lr gpsp-lr pcsx_rearmed-lr" PKG_DEPENDS_TARGET+=" common-shaders glsl-shaders" PKG_EMUS+=" box64 drastic-sa mednafen portmaster scummvmsa yabasanshiro-sa" - LIBRETRO_CORES+=" flycast-lr flycast2021-lr uae4arm" + LIBRETRO_CORES+=" flycast-lr flycast2021-lr geolith-lr uae4arm" PKG_RETROARCH+=" retropie-shaders" ;; esac @@ -660,6 +660,11 @@ makeinstall_target() { add_emu_core neogeo retroarch mame2010 false add_emu_core neogeo retroarch mame2015 false add_emu_core neogeo retroarch mame false + case ${TARGET_ARCH} in + aarch64) + add_emu_core neogeo retroarch geolith false + ;; + esac add_es_system neogeo ### SNK NeoCD From 5fad407048dccd8c1f348cd6cdca61989a9072d5 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Tue, 16 Apr 2024 02:08:50 +0300 Subject: [PATCH 060/184] SDL2: fix no-rpath option --- packages/graphics/SDL2/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index fa9a5a141..9bdff9493 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -131,7 +131,7 @@ pre_configure_target(){ -DDIRECTX=OFF \ -DSDL_DLOPEN=ON \ -DCLOCK_GETTIME=OFF \ - -DRPATH=OFF \ + -DSDL_RPATH=OFF \ -DRENDER_D3D=OFF \ -DPIPEWIRE=ON \ -DPULSEAUDIO=ON" From 6ca1a1adc601d55c2e69ba314699cfb3df5616a2 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Tue, 16 Apr 2024 12:01:44 +0300 Subject: [PATCH 061/184] libfreeaptx: remove rpath from pkgconfig --- packages/audio/libfreeaptx/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/audio/libfreeaptx/package.mk b/packages/audio/libfreeaptx/package.mk index 02e1150a9..26c2555ed 100644 --- a/packages/audio/libfreeaptx/package.mk +++ b/packages/audio/libfreeaptx/package.mk @@ -34,7 +34,7 @@ includedir=\${prefix}/include Name: ${PKG_NAME} Description: Open Source aptX codec library Version: ${PKG_VERSION} -Libs: -Wl,-rpath=\${libdir} -L\${libdir} -l${PKG_NAME##*lib} +Libs: -L\${libdir} -l${PKG_NAME##*lib} Cflags: -I\${includedir} EOF } From 057814d77f1b9073ebd16e0df3c44f02496981f3 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 5 Apr 2024 21:26:09 +0300 Subject: [PATCH 062/184] xwayland: remove removed dri1 option --- packages/x11/xserver/xwayland/package.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/x11/xserver/xwayland/package.mk b/packages/x11/xserver/xwayland/package.mk index 519071544..9e9ef9f34 100644 --- a/packages/x11/xserver/xwayland/package.mk +++ b/packages/x11/xserver/xwayland/package.mk @@ -54,7 +54,6 @@ if [ ! "${OPENGL}" = "no" ]; then -Dglamor=true" else PKG_MESON_OPTS_TARGET+=" -Dglx=false \ - -Ddri1=false \ -Dglamor=false" fi From 2e613e59d1b22eed93497264b34194c628272074 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Tue, 16 Apr 2024 12:00:23 +0300 Subject: [PATCH 063/184] mupen64plus-sa-audio-sdl: fix building without opengl --- .../mupen64plus-sa-audio-sdl/package.mk | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk index e2330d441..d86b67007 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-audio-sdl/package.mk @@ -19,15 +19,15 @@ case ${DEVICE} in ;; esac -case ${DEVICE} in - AMD64|RK33*|RK3588|RK3566) - PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" - export USE_GLES=0 - ;; - *) +case ${OPENGL} in + no) PKG_DEPENDS_TARGET+=" ${OPENGLES}" export USE_GLES=1 ;; + *) + PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" + export USE_GLES=0 + ;; esac make_target() { From 5d308a4e660921d048b6d38c725e1599219b298c Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Tue, 16 Apr 2024 12:00:52 +0300 Subject: [PATCH 064/184] aom: build with gcc --- packages/multimedia/aom/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/multimedia/aom/package.mk b/packages/multimedia/aom/package.mk index 2dcab668d..98329ed58 100644 --- a/packages/multimedia/aom/package.mk +++ b/packages/multimedia/aom/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="3.7.0" PKG_LICENSE="BSD" PKG_SITE="https://www.webmproject.org" PKG_URL="https://storage.googleapis.com/aom-releases/libaom-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain llvm" +PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="AV1 Codec Library" PKG_BUILD_FLAGS="+pic" From 2a0ead437824c5cf00b51bae3fb31422562fcde7 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Wed, 17 Apr 2024 11:29:18 +0300 Subject: [PATCH 065/184] fakeroot source: use tarball instead of slow git --- packages/devel/fakeroot/package.mk | 4 ++-- .../fakeroot/patches/fakeroot-001-disable-docs-tests.patch | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/devel/fakeroot/package.mk b/packages/devel/fakeroot/package.mk index cdbc47717..8be991247 100644 --- a/packages/devel/fakeroot/package.mk +++ b/packages/devel/fakeroot/package.mk @@ -3,10 +3,10 @@ # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) PKG_NAME="fakeroot" -PKG_VERSION="305c8a1b5396554a67794f3fe6e4990a24a810f9" # 1.32.1 +PKG_VERSION="1.34" PKG_LICENSE="GPL3" PKG_SITE="https://salsa.debian.org/clint/fakeroot" -PKG_URL="${PKG_SITE}.git" +PKG_URL="http://deb.debian.org/debian/pool/main/f/fakeroot/fakeroot_${PKG_VERSION}.orig.tar.gz" PKG_DEPENDS_HOST="ccache:host libcap:host autoconf:host libtool:host" PKG_LONGDESC="fakeroot provides a fake root environment by means of LD_PRELOAD and SYSV IPC (or TCP) trickery." PKG_TOOLCHAIN="configure" diff --git a/packages/devel/fakeroot/patches/fakeroot-001-disable-docs-tests.patch b/packages/devel/fakeroot/patches/fakeroot-001-disable-docs-tests.patch index 94936d6ea..a75361228 100644 --- a/packages/devel/fakeroot/patches/fakeroot-001-disable-docs-tests.patch +++ b/packages/devel/fakeroot/patches/fakeroot-001-disable-docs-tests.patch @@ -1,11 +1,11 @@ --- fakeroot-1.25.3/configure.ac 2020-10-08 17:13:18.000000000 +0000 +++ fakeroot-1.25.3/configure.ac 2021-01-10 03:57:50.295218481 +0000 -@@ -597,9 +597,7 @@ +@@ -744,9 +744,7 @@ AC_CONFIG_FILES([ Makefile scripts/Makefile - doc/Makefile -- doc/de/Makefile doc/es/Makefile doc/fr/Makefile doc/nl/Makefile doc/pt/Makefile doc/sv/Makefile +- doc/de/Makefile doc/es/Makefile doc/fr/Makefile doc/nl/Makefile doc/pt/Makefile doc/ro/Makefile doc/sv/Makefile - test/Makefile test/defs]) + ]) AC_OUTPUT From 6a9074d11e124a9aae6dfa87e422f71c80afb9c3 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 19 Apr 2024 15:04:32 +0200 Subject: [PATCH 066/184] wip perf tuning --- .../platforms/RK3566/002-turbo-mode_config | 7 +++++ .../quirks/platforms/RK3566/055-thermal-trips | 11 +++++++ .../linux/RK3566/000-rk3566-dtsi.patch | 25 ++++++++++++++++ ...9-Overclock-powkiddy-x55-to-1.992GHz.patch | 30 ------------------- 4 files changed, 43 insertions(+), 30 deletions(-) create mode 100755 packages/hardware/quirks/platforms/RK3566/002-turbo-mode_config create mode 100755 packages/hardware/quirks/platforms/RK3566/055-thermal-trips create mode 100644 projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch delete mode 100644 projects/Rockchip/patches/linux/RK3566/029-Overclock-powkiddy-x55-to-1.992GHz.patch diff --git a/packages/hardware/quirks/platforms/RK3566/002-turbo-mode_config b/packages/hardware/quirks/platforms/RK3566/002-turbo-mode_config new file mode 100755 index 000000000..e78c24e2f --- /dev/null +++ b/packages/hardware/quirks/platforms/RK3566/002-turbo-mode_config @@ -0,0 +1,7 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 JELOS (https://github.com/JustEnoughLinuxOS) + +cat </storage/.config/profile.d/002-turbo-mode_config +DEVICE_TURBO_MODE="true" +EOF diff --git a/packages/hardware/quirks/platforms/RK3566/055-thermal-trips b/packages/hardware/quirks/platforms/RK3566/055-thermal-trips new file mode 100755 index 000000000..47e977052 --- /dev/null +++ b/packages/hardware/quirks/platforms/RK3566/055-thermal-trips @@ -0,0 +1,11 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +# CPU thermal trips +echo "83000" > /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp +echo "88000" > /sys/devices/virtual/thermal/thermal_zone0/trip_point_1_temp + +# GPU thermal trips +echo "80000" > /sys/devices/virtual/thermal/thermal_zone1/trip_point_0_temp +echo "88000" > /sys/devices/virtual/thermal/thermal_zone1/trip_point_1_temp diff --git a/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch b/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch new file mode 100644 index 000000000..f08375309 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch @@ -0,0 +1,25 @@ +diff --git a/arch/arm64/boot/dts/rockchip/rk3566.dtsi b/arch/arm64/boot/dts/rockchip/rk3566.dtsi +index 6c4b17d27bdc..4eb4e14c556f 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566.dtsi +@@ -33,3 +33,20 @@ &usb_host0_xhci { + &vop { + compatible = "rockchip,rk3566-vop"; + }; ++ ++&cpu0_opp_table { ++ opp-1704000000 { ++ opp-hz = /bits/ 64 <1704000000>; ++ opp-microvolt = <1000000 1000000 1150000>; ++ }; ++ opp-1896000000 { ++ opp-hz = /bits/ 64 <1896000000>; ++ opp-microvolt = <1100000 1100000 1150000>; ++ turbo-mode; ++ }; ++ opp-1992000000 { ++ opp-hz = /bits/ 64 <1992000000>; ++ opp-microvolt = <1150000 1150000 1150000>; ++ turbo-mode; ++ }; ++}; diff --git a/projects/Rockchip/patches/linux/RK3566/029-Overclock-powkiddy-x55-to-1.992GHz.patch b/projects/Rockchip/patches/linux/RK3566/029-Overclock-powkiddy-x55-to-1.992GHz.patch deleted file mode 100644 index 175fefb8a..000000000 --- a/projects/Rockchip/patches/linux/RK3566/029-Overclock-powkiddy-x55-to-1.992GHz.patch +++ /dev/null @@ -1,30 +0,0 @@ -0001-RK3566-X55-Overclock-powkiddy-x55-to-1.992GHz.patch -00:00:00 2001 -From: AnanJaser -Date: Mon, 18 Mar 2024 01:31:55 +0400 -Subject: [PATCH 1/1] RK3566-X55: Overclock powkiddy-x55 to 1.992GHz - ---- - arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts -index 10900d5..ab627cb 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts -+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-x55.dts -@@ -927,3 +927,12 @@ - remote-endpoint = <&dsi0_in_vp1>; - }; - }; -+ -+&cpu0_opp_table { -+ opp-1992000000 { -+ opp-hz = /bits/ 64 <1992000000>; -+ opp-microvolt = <1150000 1150000 1150000>; -+ clock-latency-ns = <40000>; -+ }; -+}; -+ --- -2.34.1 - From 55f7be4f7372482004e16d392751ed830f19bd81 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 19 Apr 2024 15:57:03 +0200 Subject: [PATCH 067/184] rk3566: Remove extra cpu opps --- .../patches/linux/RK3566/000-rk3566-dtsi.patch | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch b/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch index f08375309..c4720984d 100644 --- a/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch +++ b/projects/Rockchip/patches/linux/RK3566/000-rk3566-dtsi.patch @@ -1,22 +1,13 @@ diff --git a/arch/arm64/boot/dts/rockchip/rk3566.dtsi b/arch/arm64/boot/dts/rockchip/rk3566.dtsi -index 6c4b17d27bdc..4eb4e14c556f 100644 +index 6c4b17d27bdc..f4050ae1cbf4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566.dtsi -@@ -33,3 +33,20 @@ &usb_host0_xhci { +@@ -33,3 +33,11 @@ &usb_host0_xhci { &vop { compatible = "rockchip,rk3566-vop"; }; + +&cpu0_opp_table { -+ opp-1704000000 { -+ opp-hz = /bits/ 64 <1704000000>; -+ opp-microvolt = <1000000 1000000 1150000>; -+ }; -+ opp-1896000000 { -+ opp-hz = /bits/ 64 <1896000000>; -+ opp-microvolt = <1100000 1100000 1150000>; -+ turbo-mode; -+ }; + opp-1992000000 { + opp-hz = /bits/ 64 <1992000000>; + opp-microvolt = <1150000 1150000 1150000>; From 940e0089e4c037533f825c2c9d13ba2a8a935302 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 19 Apr 2024 12:59:08 +0300 Subject: [PATCH 068/184] scripts/build: respect PKG_BUILD_FLAGS=-strip --- scripts/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build b/scripts/build index 53248c14e..257d7cc1c 100755 --- a/scripts/build +++ b/scripts/build @@ -510,7 +510,7 @@ if [ "${TARGET}" = "target" -o "${TARGET}" = "init" ]; then python_fix_abi "${INSTALL}" - if [ ! "${BUILD_WITH_DEBUG}" = "yes" ]; then + if [ "${BUILD_WITH_DEBUG}" != "yes" ] && flag_enabled "strip" "yes"; then ${STRIP} $(find ${INSTALL} \ -type f -name "*.so*" \ ! -name "ld-*.so" \ From a2ce87051029d3e62cd35873b4447f390873ac9d Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 19 Apr 2024 13:00:10 +0300 Subject: [PATCH 069/184] lib32: avoid extra stripping --- packages/compat/lib32/package.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/compat/lib32/package.mk b/packages/compat/lib32/package.mk index 564f4c96d..d9aa1c81c 100644 --- a/packages/compat/lib32/package.mk +++ b/packages/compat/lib32/package.mk @@ -8,6 +8,7 @@ PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain retroarch SDL2 libsndfile libmodplug" PKG_LONGDESC="ARM 32bit bundle for aarch64" PKG_TOOLCHAIN="manual" +PKG_BUILD_FLAGS="-strip" makeinstall_target() { From 766ede25c3f48bb81981cc4b8a1b9a3d7fdc1760 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 19 Apr 2024 21:54:44 +0300 Subject: [PATCH 070/184] fix some build deps --- packages/devel/glib/package.mk | 2 +- packages/devel/pcre2/package.mk | 2 +- packages/graphics/mesa/package.mk | 2 +- packages/sysutils/systemd/package.mk | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/devel/glib/package.mk b/packages/devel/glib/package.mk index 6305322b7..554f8e8a4 100644 --- a/packages/devel/glib/package.mk +++ b/packages/devel/glib/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="LGPL" PKG_SITE="https://www.gtk.org/" PKG_URL="https://download.gnome.org/sources/glib/$(get_pkg_version_maj_min)/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_DEPENDS_HOST="libffi:host pcre2:host Python3:host meson:host ninja:host" -PKG_DEPENDS_TARGET="toolchain pcre2 zlib libffi Python3:host util-linux" +PKG_DEPENDS_TARGET="toolchain pcre2 zlib libffi Python3:host util-linux elfutils" PKG_LONGDESC="A library which includes support routines for C such as lists, trees, hashes, memory allocation." PKG_MESON_OPTS_HOST="-Ddefault_library=shared \ diff --git a/packages/devel/pcre2/package.mk b/packages/devel/pcre2/package.mk index 80219aff4..c72235250 100644 --- a/packages/devel/pcre2/package.mk +++ b/packages/devel/pcre2/package.mk @@ -8,7 +8,7 @@ PKG_LICENSE="BSD" PKG_SITE="http://www.pcre.org/" PKG_URL="https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PKG_VERSION}/pcre2-${PKG_VERSION}.tar.bz2" PKG_DEPENDS_HOST="toolchain:host" -PKG_DEPENDS_TARGET="toolchain" +PKG_DEPENDS_TARGET="toolchain zlib" PKG_LONGDESC="A set of functions that implement regular expression pattern matching using the same syntax." PKG_BUILD_FLAGS="+pic" diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index 9c80aceb0..6c4fbc9b2 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -4,7 +4,7 @@ PKG_NAME="mesa" PKG_LICENSE="OSS" -PKG_DEPENDS_TARGET="toolchain expat libdrm Mako:host" +PKG_DEPENDS_TARGET="toolchain expat libdrm zstd Mako:host" PKG_LONGDESC="Mesa is a 3-D graphics library with an API." PKG_TOOLCHAIN="meson" PKG_PATCH_DIRS+=" ${DEVICE}" diff --git a/packages/sysutils/systemd/package.mk b/packages/sysutils/systemd/package.mk index d1bfaeb89..c75ac2fca 100644 --- a/packages/sysutils/systemd/package.mk +++ b/packages/sysutils/systemd/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="253.16" PKG_LICENSE="LGPL2.1+" PKG_SITE="http://www.freedesktop.org/wiki/Software/systemd" PKG_URL="https://github.com/systemd/systemd-stable/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain libcap kmod util-linux libidn2 Python3:host jinja2:host pcre2" +PKG_DEPENDS_TARGET="toolchain libcap kmod util-linux libidn2 Python3:host jinja2:host pcre2 zstd" PKG_LONGDESC="A system and session manager for Linux, compatible with SysV and LSB init scripts." PKG_MESON_OPTS_TARGET="--libdir=/usr/lib \ From c08c6ae585c3acad05a31aceaa03e6705b20daa7 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:01:14 +0000 Subject: [PATCH 071/184] Start working on ID Tech --- config/emulators/idtech.conf | 2 +- .../emulators/libretro/idtech-lr/package.mk | 14 +- .../idtech-lr/scripts/generate-idtech.sh | 175 ++++++++++++++++++ .../libretro/idtech-lr/sources/idtech_dirs | 17 ++ .../emulators/libretro/prboom-lr/package.mk | 4 - .../libretro/prboom-lr/scripts/Doom II.sh | 4 - .../libretro/prboom-lr/scripts/Doom.sh | 4 - .../emulators/libretro/tyrquake-lr/package.mk | 4 - .../libretro/tyrquake-lr/scripts/Quake.sh | 4 - 9 files changed, 206 insertions(+), 22 deletions(-) create mode 100644 packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh create mode 100644 packages/emulators/libretro/idtech-lr/sources/idtech_dirs delete mode 100644 packages/emulators/libretro/prboom-lr/scripts/Doom II.sh delete mode 100644 packages/emulators/libretro/prboom-lr/scripts/Doom.sh delete mode 100644 packages/emulators/libretro/tyrquake-lr/scripts/Quake.sh diff --git a/config/emulators/idtech.conf b/config/emulators/idtech.conf index 5c572e1f8..3254f61d2 100644 --- a/config/emulators/idtech.conf +++ b/config/emulators/idtech.conf @@ -3,7 +3,7 @@ SYSTEM_FULLNAME="iDtech" SYSTEM_MANUFACTURER="id Software" SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="game engine" -SYSTEM_PATH="/storage/roms/idtech" +SYSTEM_PATH="/storage/.config/idtech" SYSTEM_EXTENSION=".sh" SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="idtech" diff --git a/packages/emulators/libretro/idtech-lr/package.mk b/packages/emulators/libretro/idtech-lr/package.mk index 7341eba28..eb92ae3c8 100644 --- a/packages/emulators/libretro/idtech-lr/package.mk +++ b/packages/emulators/libretro/idtech-lr/package.mk @@ -1,11 +1,12 @@ # SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="idtech-lr" PKG_LICENSE="Apache-2.0" PKG_SITE="https://rocknix.org" PKG_LONGDESC="Package for all iD Software game engines." PKG_TOOLCHAIN="manual" +PKG_DOOM_SHAREWARE="https://github.com/ROCKNIX/packages/raw/main/doom.tar.gz" if [[ "${OPENGL_SUPPORT}" = "yes" ]] && [[ ! "${DEVICE}" = "S922X" ]]; then PKG_DEPENDS_TARGET+=" ${OPENGL}" @@ -20,3 +21,14 @@ fi if [ "${TARGET_ARCH}" = "x86_64" ]; then PKG_DEPENDS_TARGET+=" boom3-lr" fi + +makeinstall_target() { + mkdir -p ${INSTALL}/usr/config/idtech + mkdir -p ${INSTALL}/usr/bin + cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin + chmod +x ${INSTALL}/usr/bin/* + + mkdir -p ${INSTALL}/usr/share/idtech + cp -rf ${PKG_DIR}/sources/* ${INSTALL}/usr/share/idtech/ + curl -Lo ${INSTALL}/usr/share/idtech/doom.tar.gz ${PKG_DOOM_SHAREWARE} +} diff --git a/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh new file mode 100644 index 000000000..d320a1c97 --- /dev/null +++ b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh @@ -0,0 +1,175 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + + +# This scripts scans the /storage/roms/idtech folder for idtech game files +# and creates the necessary idtech launcher scripts + + +RA_BIN="/usr/bin/retroarch" +RA_DIR="/usr/lib/libretro" +SCRIPT_DIR="/storage/.config/idtech" +GAME_DIR="/storage/roms/idtech" + +### Create directories +while read IDTECH_DIR; do + if [ ! -d "${GAME_DIR}/${IDTECH_DIR}" ]; then + mkdir -p ${GAME_DIR}/${IDTECH_DIR} + fi +done ${SCRIPT_DIR}/Doom.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/doom/doom.wad +EOF +fi + +### Doom 2 +if [[ -f "${GAME_DIR}/doom/doom2/doom2.wad" ]] && [[ ! -f ${SCRIPT_DIR}/Doom\ II.sh ]]; then +cat <${SCRIPT_DIR}/Doom\ II.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/doom2/doom2.wad +EOF +fi + +### The Plutonia Experiment +if [[ -f "${GAME_DIR}/doom/plutonia/plutonia.wad" ]] && [[ ! -f ${SCRIPT_DIR}/The\ Plutonia\ Experiment.sh ]]; then +cat <${SCRIPT_DIR}/The\ Plutonia\ Experiment.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/plutonia/plutonia.wad +EOF +fi + +### TNT Evilution +if [[ -f "${GAME_DIR}/doom/tnt/tnt.wad" ]] && [[ ! -f ${SCRIPT_DIR}/TNT\ Evilution.sh ]]; then +cat <${SCRIPT_DIR}/TNT\ Evilution.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/tnt/tnt.wad +EOF +fi + +### SIGIL +if [[ -f "${GAME_DIR}/doom/sigil/sigil.wad" ]] && [[ ! -f ${SCRIPT_DIR}/Sigil.sh ]]; then +cat <${SCRIPT_DIR}/Sigil.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/sigil/sigil.wad +EOF +fi + +### SIGIL II +if [[ -f "${GAME_DIR}/doom/sigil2/sigil2.wad" ]] && [[ ! -f ${SCRIPT_DIR}/Sigil\ II.sh ]]; then +cat <${SCRIPT_DIR}/Sigil\ II.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/sigil2/sigil2.wad +EOF +fi + +### Quake +if [[ -f "${GAME_DIR}/quake/id1/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake.sh ]]; then +cat <${SCRIPT_DIR}/Quake.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/id1/pak1.pak +EOF +fi + +### Quake - Dimension of the Past +if [[ -f "${GAME_DIR}/quake/dopa/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ -\ Dimension\ of\ the\ Past.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ -\ Dimension\ of\ the\ Past.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/dopa/pak0.pak +EOF +fi + +### Quake - Scourge of Armagon +if [[ -f "${GAME_DIR}/quake/hipnotic/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ -\ Scourge\ of\ Armagon.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ -\ Scourge\ of\ Armagon.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/hipnotic/pak0.pak +EOF +fi + +### Quake - Dissolution of Eternity +if [[ -f "${GAME_DIR}/quake/rogue/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ -\ Dissolution\ of\ Eternity.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ -\ Dissolution\ of\ Eternity.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/rogue/pak0.pak +EOF +fi + +### Quake 2 +if [[ -f "${GAME_DIR}/quake2/quake2/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ II.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/quake2/* +EOF +fi + +### Quake 2 - The Reckoning +if [[ -f "${GAME_DIR}/quake2/xatrix/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II\ -\ The\ Reckoning.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ II\ -\ The\ Reckoning.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/xatrix/* +EOF +fi + +### Quake 2 - Ground Zero +if [[ -f "${GAME_DIR}/quake2/rogue/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II\ -\ Ground\ Zero.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ II\ -\ Ground\ Zero.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/rogue/* +EOF +fi + +### Quake 3 +if [[ -f "${GAME_DIR}/quake3/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ III.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ III.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/vitaquake3_libretro.so ${GAME_DIR}/quake3/* +EOF +fi + +### Wolf3D +if [[ -f "${GAME_DIR}/wolf3d/wolf3d/VSWAP.WL6" ]] && [[ ! -f ${SCRIPT_DIR}/Wolfenstein\ 3D.sh ]]; then +cat <${SCRIPT_DIR}/Wolfenstein\ 3D.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/ecwolf_libretro.so ${GAME_DIR}/wolf3d/wolf3d/* +EOF +fi + +### Wolf3D - Spear of Destiny +if [[ -f "${GAME_DIR}/wolf3d/sod/VSWAP.SOD" ]] && [[ ! -f ${SCRIPT_DIR}/Wolfenstein\ 3D\ -\ Spear\ of\ Destiny.sh ]]; then +cat <${SCRIPT_DIR}/Wolfenstein\ 3D\ -\ Spear\ of\ Destiny.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/ecwolf_libretro.so ${GAME_DIR}/wolf3d/sod/* +EOF +fi + + +### Set all launcher scripts to be executable ### +chmod +x ${SCRIPT_DIR}/* diff --git a/packages/emulators/libretro/idtech-lr/sources/idtech_dirs b/packages/emulators/libretro/idtech-lr/sources/idtech_dirs new file mode 100644 index 000000000..ae2dc4469 --- /dev/null +++ b/packages/emulators/libretro/idtech-lr/sources/idtech_dirs @@ -0,0 +1,17 @@ +doom/doom +doom/doom2 +doom/tnt +doom/plutonia +doom/sigil +doom/sigil2 +doom/udoom +quake/id1 +quake/dopa +quake/hipnotic +quake/rogue +quake2/quake2 +quake2/rogue +quake2/xatrix +quake3/baseq3 +wolf3d/wolf3d +wolf3d/sod diff --git a/packages/emulators/libretro/prboom-lr/package.mk b/packages/emulators/libretro/prboom-lr/package.mk index b572187ef..176353097 100644 --- a/packages/emulators/libretro/prboom-lr/package.mk +++ b/packages/emulators/libretro/prboom-lr/package.mk @@ -29,8 +29,4 @@ PKG_LONGDESC="libretro implementation of Doom" makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro cp prboom_libretro.so ${INSTALL}/usr/lib/libretro/prboom_libretro.so - - mkdir -p ${INSTALL}/usr/config/idtech - cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/idtech/ - chmod 0755 ${INSTALL}/usr/config/idtech/* } diff --git a/packages/emulators/libretro/prboom-lr/scripts/Doom II.sh b/packages/emulators/libretro/prboom-lr/scripts/Doom II.sh deleted file mode 100644 index e8d878c95..000000000 --- a/packages/emulators/libretro/prboom-lr/scripts/Doom II.sh +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) - -/usr/bin/retroarch -L /usr/lib/libretro/prboom_libretro.so /storage/roms/idtech/doom2/Doom2.wad diff --git a/packages/emulators/libretro/prboom-lr/scripts/Doom.sh b/packages/emulators/libretro/prboom-lr/scripts/Doom.sh deleted file mode 100644 index 36cd2b13d..000000000 --- a/packages/emulators/libretro/prboom-lr/scripts/Doom.sh +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) - -/usr/bin/retroarch -L /usr/lib/libretro/prboom_libretro.so /storage/roms/idtech/doom/Doom.wad diff --git a/packages/emulators/libretro/tyrquake-lr/package.mk b/packages/emulators/libretro/tyrquake-lr/package.mk index 9872ce109..6c9a2cbe3 100644 --- a/packages/emulators/libretro/tyrquake-lr/package.mk +++ b/packages/emulators/libretro/tyrquake-lr/package.mk @@ -38,8 +38,4 @@ pre_configure_target() { makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro cp tyrquake_libretro.so ${INSTALL}/usr/lib/libretro/ - - mkdir -p ${INSTALL}/usr/config/idtech - cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/idtech/ - chmod 0755 ${INSTALL}/usr/config/idtech/* } diff --git a/packages/emulators/libretro/tyrquake-lr/scripts/Quake.sh b/packages/emulators/libretro/tyrquake-lr/scripts/Quake.sh deleted file mode 100644 index 669deb59b..000000000 --- a/packages/emulators/libretro/tyrquake-lr/scripts/Quake.sh +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) - -/usr/bin/retroarch -L /usr/lib/libretro/tyrquake_libretro.so /storage/roms/idtech/quakepaks/id1/* From 441e7d1048be197457182eb820bfac2b28a5460f Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Sat, 20 Apr 2024 14:37:53 +0000 Subject: [PATCH 072/184] Finish up idtech support --- .../emulators/libretro/idtech-lr/package.mk | 16 +++++--- .../idtech-lr/scripts/generate-idtech.sh | 37 ++++++++++++------- .../libretro/idtech-lr/sources/idtech_dirs | 2 + .../libretro/vitaquake2-lr/package.mk | 4 +- .../vitaquake2-rogue-lr/package.mk | 27 ++++++++++++++ .../patches/aarch64/001-set-platform.patch | 19 ++++++++++ .../patches/x86_64/001-set-platform.patch | 18 +++++++++ .../vitaquake2-xatrix-lr/package.mk | 27 ++++++++++++++ .../patches/aarch64/001-set-platform.patch | 19 ++++++++++ .../patches/x86_64/001-set-platform.patch | 18 +++++++++ .../vitaquake2-zaero-lr/package.mk | 27 ++++++++++++++ .../patches/aarch64/001-set-platform.patch | 19 ++++++++++ .../patches/x86_64/001-set-platform.patch | 18 +++++++++ packages/misc/modules/sources/gamelist.xml | 24 ++++++++++++ packages/virtual/emulators/package.mk | 1 + .../sources/Generate id Tech Launchers.sh | 8 ++++ 16 files changed, 262 insertions(+), 22 deletions(-) create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/package.mk create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/aarch64/001-set-platform.patch create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/x86_64/001-set-platform.patch create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/package.mk create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/aarch64/001-set-platform.patch create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/x86_64/001-set-platform.patch create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/package.mk create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/aarch64/001-set-platform.patch create mode 100644 packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/x86_64/001-set-platform.patch create mode 100644 packages/virtual/emulators/sources/Generate id Tech Launchers.sh diff --git a/packages/emulators/libretro/idtech-lr/package.mk b/packages/emulators/libretro/idtech-lr/package.mk index eb92ae3c8..f5266211a 100644 --- a/packages/emulators/libretro/idtech-lr/package.mk +++ b/packages/emulators/libretro/idtech-lr/package.mk @@ -8,18 +8,13 @@ PKG_LONGDESC="Package for all iD Software game engines." PKG_TOOLCHAIN="manual" PKG_DOOM_SHAREWARE="https://github.com/ROCKNIX/packages/raw/main/doom.tar.gz" -if [[ "${OPENGL_SUPPORT}" = "yes" ]] && [[ ! "${DEVICE}" = "S922X" ]]; then - PKG_DEPENDS_TARGET+=" ${OPENGL}" - PKG_DEPENDS_TARGET+=" vitaquake3-lr" -fi - if [ "${OPENGLES_SUPPORT}" = yes ]; then PKG_DEPENDS_TARGET+=" ${OPENGLES}" PKG_DEPENDS_TARGET+=" ecwolf-lr prboom-lr tyrquake-lr vitaquake2-lr" fi if [ "${TARGET_ARCH}" = "x86_64" ]; then - PKG_DEPENDS_TARGET+=" boom3-lr" + PKG_DEPENDS_TARGET+=" vitaquake3-lr boom3-lr" fi makeinstall_target() { @@ -32,3 +27,12 @@ makeinstall_target() { cp -rf ${PKG_DIR}/sources/* ${INSTALL}/usr/share/idtech/ curl -Lo ${INSTALL}/usr/share/idtech/doom.tar.gz ${PKG_DOOM_SHAREWARE} } + +post_install() { + case ${TARGET_ARCH} in + aarch64) + sed -i '/doom3/d' ${INSTALL}/usr/share/idtech/idtech_dirs + sed -i '/quake3/d' ${INSTALL}/usr/share/idtech/idtech_dirs + ;; + esac +} diff --git a/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh index d320a1c97..855d99df5 100644 --- a/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh +++ b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh @@ -35,6 +35,15 @@ ${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/doom/doom.wad EOF fi +### The Ultimate Doom +if [[ -f "${GAME_DIR}/doom/doomu/doomu.wad" ]] && [[ ! -f ${SCRIPT_DIR}/The\ Ultimate\ Doom.sh ]]; then +cat <${SCRIPT_DIR}/The\ Ultimate\ Doom.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/prboom_libretro.so ${GAME_DIR}/doom/doomu/doomu.wad +EOF +fi + ### Doom 2 if [[ -f "${GAME_DIR}/doom/doom2/doom2.wad" ]] && [[ ! -f ${SCRIPT_DIR}/Doom\ II.sh ]]; then cat <${SCRIPT_DIR}/Doom\ II.sh @@ -85,16 +94,7 @@ if [[ -f "${GAME_DIR}/quake/id1/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake.sh ] cat <${SCRIPT_DIR}/Quake.sh #!/bin/bash -${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/id1/pak1.pak -EOF -fi - -### Quake - Dimension of the Past -if [[ -f "${GAME_DIR}/quake/dopa/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ -\ Dimension\ of\ the\ Past.sh ]]; then -cat <${SCRIPT_DIR}/Quake\ -\ Dimension\ of\ the\ Past.sh -#!/bin/bash - -${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/dopa/pak0.pak +${RA_BIN} -L ${RA_DIR}/tyrquake_libretro.so ${GAME_DIR}/quake/id1/pak0.pak EOF fi @@ -117,11 +117,11 @@ EOF fi ### Quake 2 -if [[ -f "${GAME_DIR}/quake2/quake2/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II.sh ]]; then +if [[ -f "${GAME_DIR}/quake2/baseq2/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II.sh ]]; then cat <${SCRIPT_DIR}/Quake\ II.sh #!/bin/bash -${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/quake2/* +${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/baseq2/* EOF fi @@ -130,7 +130,7 @@ if [[ -f "${GAME_DIR}/quake2/xatrix/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ cat <${SCRIPT_DIR}/Quake\ II\ -\ The\ Reckoning.sh #!/bin/bash -${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/xatrix/* +${RA_BIN} -L ${RA_DIR}/vitaquake2-xatrix_libretro.so ${GAME_DIR}/quake2/xatrix/* EOF fi @@ -139,7 +139,16 @@ if [[ -f "${GAME_DIR}/quake2/rogue/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ cat <${SCRIPT_DIR}/Quake\ II\ -\ Ground\ Zero.sh #!/bin/bash -${RA_BIN} -L ${RA_DIR}/vitaquake2_libretro.so ${GAME_DIR}/quake2/rogue/* +${RA_BIN} -L ${RA_DIR}/vitaquake2-rogue_libretro.so ${GAME_DIR}/quake2/rogue/* +EOF +fi + +### Quake 2 - Zaero +if [[ -f "${GAME_DIR}/quake2/zaero/pak0.pak" ]] && [[ ! -f ${SCRIPT_DIR}/Quake\ II\ -\ Zaero.sh ]]; then +cat <${SCRIPT_DIR}/Quake\ II\ -\ Zaero.sh +#!/bin/bash + +${RA_BIN} -L ${RA_DIR}/vitaquake2-zaero_libretro.so ${GAME_DIR}/quake2/zaero/* EOF fi diff --git a/packages/emulators/libretro/idtech-lr/sources/idtech_dirs b/packages/emulators/libretro/idtech-lr/sources/idtech_dirs index ae2dc4469..875400be8 100644 --- a/packages/emulators/libretro/idtech-lr/sources/idtech_dirs +++ b/packages/emulators/libretro/idtech-lr/sources/idtech_dirs @@ -5,6 +5,8 @@ doom/plutonia doom/sigil doom/sigil2 doom/udoom +doom3/base +doom3/d3xp quake/id1 quake/dopa quake/hipnotic diff --git a/packages/emulators/libretro/vitaquake2-lr/package.mk b/packages/emulators/libretro/vitaquake2-lr/package.mk index 31bfe977f..c0536ce5c 100644 --- a/packages/emulators/libretro/vitaquake2-lr/package.mk +++ b/packages/emulators/libretro/vitaquake2-lr/package.mk @@ -1,12 +1,12 @@ # SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="vitaquake2-lr" PKG_VERSION="6bb3ee592169694b055e7efd5fa2a4e57875bddd" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/vitaquake2" PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain" +PKG_DEPENDS_TARGET="toolchain vitaquake2-rogue-lr vitaquake2-xatrix-lr vitaquake2-zaero-lr" PKG_LONGDESC="Libretro port of VitaQuakeII (Quake 2 engine)" if [ "${OPENGL_SUPPORT}" = "yes" ]; then diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/package.mk b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/package.mk new file mode 100644 index 000000000..5f1b499d1 --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/package.mk @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="vitaquake2-rogue-lr" +PKG_VERSION="6bb3ee592169694b055e7efd5fa2a4e57875bddd" +PKG_LICENSE="GPLv2" +PKG_SITE="https://github.com/libretro/vitaquake2" +PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_LONGDESC="Libretro port of VitaQuakeII (Quake 2 engine)" + +if [ "${OPENGL_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGL}" +elif [ "${OPENGLES_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGLES}" +fi + +pre_make_target() { + export BUILD_SYSROOT=${SYSROOT_PREFIX} + + PKG_MAKE_OPTS_TARGET+=" basegame=rogue platform=${DEVICE}" +} + +makeinstall_target() { + mkdir -p $INSTALL/usr/lib/libretro + cp vitaquake2-rogue_libretro.so $INSTALL/usr/lib/libretro/ +} diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/aarch64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/aarch64/001-set-platform.patch new file mode 100644 index 000000000..f14c8858b --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/aarch64/001-set-platform.patch @@ -0,0 +1,19 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,15 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -mcpu=@TARGET_CPU@ -mtune=@TARGET_CPU@ -ffast-math -DARM ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/x86_64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/x86_64/001-set-platform.patch new file mode 100644 index 000000000..fdb106c44 --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-rogue-lr/patches/x86_64/001-set-platform.patch @@ -0,0 +1,18 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,14 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/package.mk b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/package.mk new file mode 100644 index 000000000..1534b815c --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/package.mk @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="vitaquake2-xatrix-lr" +PKG_VERSION="6bb3ee592169694b055e7efd5fa2a4e57875bddd" +PKG_LICENSE="GPLv2" +PKG_SITE="https://github.com/libretro/vitaquake2" +PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_LONGDESC="Libretro port of VitaQuakeII (Quake 2 engine)" + +if [ "${OPENGL_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGL}" +elif [ "${OPENGLES_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGLES}" +fi + +pre_make_target() { + export BUILD_SYSROOT=${SYSROOT_PREFIX} + + PKG_MAKE_OPTS_TARGET+=" basegame=xatrix platform=${DEVICE}" +} + +makeinstall_target() { + mkdir -p $INSTALL/usr/lib/libretro + cp vitaquake2-xatrix_libretro.so $INSTALL/usr/lib/libretro/ +} diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/aarch64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/aarch64/001-set-platform.patch new file mode 100644 index 000000000..f14c8858b --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/aarch64/001-set-platform.patch @@ -0,0 +1,19 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,15 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -mcpu=@TARGET_CPU@ -mtune=@TARGET_CPU@ -ffast-math -DARM ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/x86_64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/x86_64/001-set-platform.patch new file mode 100644 index 000000000..fdb106c44 --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-xatrix-lr/patches/x86_64/001-set-platform.patch @@ -0,0 +1,18 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,14 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/package.mk b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/package.mk new file mode 100644 index 000000000..7df1d82e9 --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/package.mk @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="vitaquake2-zaero-lr" +PKG_VERSION="6bb3ee592169694b055e7efd5fa2a4e57875bddd" +PKG_LICENSE="GPLv2" +PKG_SITE="https://github.com/libretro/vitaquake2" +PKG_URL="$PKG_SITE/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_LONGDESC="Libretro port of VitaQuakeII (Quake 2 engine)" + +if [ "${OPENGL_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGL}" +elif [ "${OPENGLES_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" ${OPENGLES}" +fi + +pre_make_target() { + export BUILD_SYSROOT=${SYSROOT_PREFIX} + + PKG_MAKE_OPTS_TARGET+=" basegame=zaero platform=${DEVICE}" +} + +makeinstall_target() { + mkdir -p $INSTALL/usr/lib/libretro + cp vitaquake2-zaero_libretro.so $INSTALL/usr/lib/libretro/ +} diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/aarch64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/aarch64/001-set-platform.patch new file mode 100644 index 000000000..f14c8858b --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/aarch64/001-set-platform.patch @@ -0,0 +1,19 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,15 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -mcpu=@TARGET_CPU@ -mtune=@TARGET_CPU@ -ffast-math -DARM ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/x86_64/001-set-platform.patch b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/x86_64/001-set-platform.patch new file mode 100644 index 000000000..fdb106c44 --- /dev/null +++ b/packages/emulators/libretro/vitaquake2-lr/vitaquake2-zaero-lr/patches/x86_64/001-set-platform.patch @@ -0,0 +1,18 @@ +diff -rupN vitaquake2.orig/Makefile vitaquake2/Makefile +--- vitaquake2.orig/Makefile 2023-09-15 16:57:45.991890996 +0000 ++++ vitaquake2/Makefile 2023-09-15 20:08:45.856895708 +0000 +@@ -76,6 +76,14 @@ else ifeq ($(platform), linux-portable) + SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T + LIBM := + ++else ifeq ($(platform), @DEVICE@) ++ TARGET := $(TARGET_NAME)_libretro.so ++ fpic := -fPIC ++ SHARED := -shared -Wl,--version-script=$(CORE_DIR)/link.T -Wl,--no-undefined ++ CFLAGS += -D_POSIX_C_SOURCE=199309L ++ GLES := 1 ++ GLES31 := 1 ++ + else ifneq (,$(findstring rockchip,$(platform))) + EXT ?= so + TARGET := $(TARGET_NAME)_libretro.$(EXT) diff --git a/packages/misc/modules/sources/gamelist.xml b/packages/misc/modules/sources/gamelist.xml index 7c5b0131d..1c97e3442 100755 --- a/packages/misc/modules/sources/gamelist.xml +++ b/packages/misc/modules/sources/gamelist.xml @@ -72,6 +72,18 @@ 1 ./images/remove-mac-files.svg + + ./Start AetherSX2.sh + Start AetherSX2 + Opens the AetherSX2 GUI (PS2) to enable global configuration changes to be made directly to the emulator. It's recommended to have a mouse and keyboard to modify settings. + ROCKNIX + ROCKNIX + 5.0 + 2021 + Emulator + 1 + ./images/aethersx2.svg + ./Start CEMU.sh Start Cemu @@ -194,4 +206,16 @@ 1 ./images/xemu.svg + + ./Generate id Tech Launchers.sh + Generate id Tech Launchers + Creates launchers for id software games + ROCKNIX + ROCKNIX + 5.0 + 2023 + Emulator + 1 + ./images/idtech.svg + diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index 46618d119..313501ed6 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -378,6 +378,7 @@ makeinstall_target() { ### iD Software game engines add_emu_core idtech retroarch idtech add_es_system idtech + install_script "Generate id Tech Launchers.sh" ### Apple Macintosh Plus add_emu_core macintosh retroarch minivmac true diff --git a/packages/virtual/emulators/sources/Generate id Tech Launchers.sh b/packages/virtual/emulators/sources/Generate id Tech Launchers.sh new file mode 100644 index 000000000..941bab577 --- /dev/null +++ b/packages/virtual/emulators/sources/Generate id Tech Launchers.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +source /etc/profile + +/usr/bin/generate-idtech.sh >/dev/null 2>&1 From 2cb9fb53de33afc52d8e8f884e2ead0c8cd921bb Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 19 Apr 2024 01:51:08 +0300 Subject: [PATCH 073/184] reduce 32bit arm build --- .../emulators/libretro/retroarch/package.mk | 23 ++++++++++++++++--- packages/graphics/SDL2/package.mk | 10 +++++++- packages/network/avahi/package.mk | 12 +++++++++- packages/virtual/arm/package.mk | 19 ++++++++++++--- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/packages/emulators/libretro/retroarch/package.mk b/packages/emulators/libretro/retroarch/package.mk index a39683c62..3feeae1ca 100644 --- a/packages/emulators/libretro/retroarch/package.mk +++ b/packages/emulators/libretro/retroarch/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="06fa532" # v1.18.0 PKG_SITE="https://github.com/libretro/RetroArch" PKG_URL="${PKG_SITE}.git" PKG_LICENSE="GPLv3" -PKG_DEPENDS_TARGET="toolchain SDL2 alsa-lib libass openssl freetype zlib retroarch-assets core-info ffmpeg libass joyutils empty nss-mdns openal-soft libogg libvorbisidec libvorbis libvpx libpng libdrm pulseaudio miniupnpc flac" +PKG_DEPENDS_TARGET="toolchain SDL2 alsa-lib libass openssl freetype zlib retroarch-assets core-info ffmpeg libass joyutils nss-mdns openal-soft libogg libvorbisidec libvorbis libvpx libpng libdrm pulseaudio miniupnpc flac" PKG_LONGDESC="Reference frontend for the libretro API." GET_HANDLER_SUPPORT="git" @@ -15,6 +15,15 @@ if [ "${PIPEWIRE_SUPPORT}" = "yes" ]; then PKG_DEPENDS_TARGET+=" pipewire" fi +case ${ARCH} in + arm|i686) + true + ;; + *) + PKG_DEPENDS_TARGET+=" empty" + ;; +esac + PKG_PATCH_DIRS+=" ${DEVICE}" PKG_CONFIGURE_OPTS_TARGET=" --disable-qt \ @@ -28,7 +37,7 @@ PKG_CONFIGURE_OPTS_TARGET=" --disable-qt \ --disable-vg \ --disable-sdl \ --enable-sdl2 \ - --enable-kms \ + --enable-kms \ --enable-ffmpeg" case ${ARCH} in @@ -47,8 +56,16 @@ case ${PROJECT} in esac if [ "${DISPLAYSERVER}" = "wl" ]; then - PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER}" + PKG_DEPENDS_TARGET+=" wayland" PKG_CONFIGURE_OPTS_TARGET+=" --enable-wayland" + case ${ARCH} in + arm|i686) + true + ;; + *) + PKG_DEPENDS_TARGET+=" ${WINDOWMANAGER}" + ;; + esac else PKG_CONFIGURE_OPTS_TARGET+=" --disable-wayland" fi diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index fa9a5a141..9e3cf6129 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -46,7 +46,15 @@ fi if [ "${DISPLAYSERVER}" = "wl" ] then - PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER}" + PKG_DEPENDS_TARGET+=" wayland " + case ${ARCH} in + arm|i686) + true + ;; + *) + PKG_DEPENDS_TARGET+=" ${WINDOWMANAGER}" + ;; + esac PKG_CMAKE_OPTS_TARGET+=" -DSDL_WAYLAND=ON \ -DVIDEO_WAYLAND=ON \ -DVIDEO_WAYLAND_QT_TOUCH=ON \ diff --git a/packages/network/avahi/package.mk b/packages/network/avahi/package.mk index 97e82475c..2a03dbb2a 100644 --- a/packages/network/avahi/package.mk +++ b/packages/network/avahi/package.mk @@ -8,10 +8,20 @@ PKG_SHA256="c15e750ef7c6df595fb5f2ce10cac0fee2353649600e6919ad08ae8871e4945f" PKG_LICENSE="GPL" PKG_SITE="http://avahi.org/" PKG_URL="https://github.com/lathiat/avahi/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain expat libdaemon dbus connman gettext" +PKG_DEPENDS_TARGET="toolchain expat libdaemon dbus gettext" PKG_LONGDESC="Service Discovery for Linux using mDNS/DNS-SD, compatible with Bonjour." PKG_TOOLCHAIN="configure" +case ${ARCH} in + arm|i686) + # avahi does not have direct dependency on connman, ok to skip it on secondary arch + true + ;; + *) + PKG_DEPENDS_TARGET+=" connman" + ;; +esac + PKG_CONFIGURE_OPTS_TARGET="py_cv_mod_gtk_=yes \ py_cv_mod_dbus_=yes \ ac_cv_func_chroot=no \ diff --git a/packages/virtual/arm/package.mk b/packages/virtual/arm/package.mk index dcb3af7dd..91ff18a90 100644 --- a/packages/virtual/arm/package.mk +++ b/packages/virtual/arm/package.mk @@ -4,7 +4,7 @@ PKG_NAME="arm" PKG_LICENSE="GPLv2" PKG_SITE="https://rocknix.org" -PKG_DEPENDS_TARGET="toolchain squashfs-tools:host dosfstools:host fakeroot:host kmod:host mtools:host populatefs:host libc gcc linux linux-drivers linux-firmware libusb unzip socat p7zip file SDL2 SDL2_gfx SDL2_image SDL2_mixer SDL2_net SDL2_ttf" +PKG_DEPENDS_TARGET="toolchain libc gcc libusb SDL2 SDL2_gfx SDL2_image SDL2_mixer SDL2_net SDL2_ttf" PKG_SECTION="virtual" PKG_LONGDESC="Root package used to build and create 32-bit userland" @@ -23,7 +23,15 @@ then fi if [ "${DISPLAYSERVER}" = "wl" ]; then - PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER} libXtst libXfixes libXi gdk-pixbuf libvdpau" + PKG_DEPENDS_TARGET+=" wayland libXtst libXfixes libXi gdk-pixbuf libvdpau" + case ${ARCH} in + arm|i686) + true + ;; + *) + PKG_DEPENDS_TARGET+=" ${WINDOWMANAGER}" + ;; + esac fi ### Audio @@ -32,4 +40,9 @@ if [ "${PIPEWIRE_SUPPORT}" = "yes" ]; then fi ### Emulators and Cores -PKG_DEPENDS_TARGET+=" retroarch pcsx_rearmed-lr gpsp-lr box86 desmume-lr" +if [ "${EMULATION_DEVICE}" = "yes" ]; then + EMUS_32BIT=$(ENABLE_32BIT=true bash -c ". ${ROOT}/packages/virtual/emulators/package.mk; echo \$EMUS_32BIT") + PKG_DEPENDS_TARGET+=" retroarch ${EMUS_32BIT}" +fi + +PKG_DEPENDS_TARGET+=" ${ADDITIONAL_PACKAGES}" From 9e34e7b93262af893545f3ddd9192ed930858dad Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 19 Apr 2024 22:25:26 +0300 Subject: [PATCH 074/184] mesa: fix 32-bit driver search path --- packages/graphics/mesa/package.mk | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index 9c80aceb0..b26e77af1 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -37,7 +37,31 @@ esac get_graphicdrivers -PKG_MESON_OPTS_TARGET="-Dgallium-drivers=${GALLIUM_DRIVERS// /,} \ +# For lib32 build Mesa needs some tweaks +# * scripts/build sets --libdir=/usr/lib +# * lib32 package moves /usr/lib into /usr/lib32 +# * in running system /usr/lib is 64-bit +# * mesa loader looks for drivers in ${libdir}/{dri,gbm} etc. +# * 32-bit mesa fails to load 64-bit drivers +# +# This may be worked around by setting LIBGL_DRIVERS_PATH=/usr/lib32/dri +# but that needs careful editing of run scripts +# +# Just setting --libdir=/usr/lib32 in scripts/build fails because libtool wants exactly /usr/lib +# +# So, for 32-bit build we set a bunch of options normally derived from libdir +# This hopefully will be not needed if libtool accepts lib32 (libtool-multilib?) +case ${ARCH} in + arm|i686) + MESA_LIBS_PATH_OPTS=" -Ddri-drivers-path=/usr/lib32/dri -Dgbm-backends-path=/usr/lib32/gbm -Dd3d-drivers-path=/usr/lib32/d3d " + ;; + *) + MESA_LIBS_PATH_OPTS="" + ;; +esac + +PKG_MESON_OPTS_TARGET=" ${MESA_LIBS_PATH_OPTS} \ + -Dgallium-drivers=${GALLIUM_DRIVERS// /,} \ -Dgallium-extra-hud=false \ -Dgallium-omx=disabled \ -Dgallium-nine=true \ @@ -112,6 +136,9 @@ else fi post_makeinstall_target() { + if [ -d "${INSTALL}/usr/lib32/dri" ]; then + mv "${INSTALL}/usr/lib32"/* "${INSTALL}/usr/lib/" + fi if [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ]; then rm -f ${INSTALL}/usr/lib/libvulkan_panfrost.so ${INSTALL}/usr/share/vulkan/icd.d/panfrost_icd.aarch64.json fi From 2a65655d9b8882280fbf28f43ca0c84e4b6958da Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 22 Apr 2024 21:26:07 +0000 Subject: [PATCH 075/184] id tech cleanup --- .../libretro/idtech-lr/scripts/generate-idtech.sh | 12 ++++++++---- packages/misc/modules/sources/gamelist.xml | 4 ++-- packages/virtual/emulators/package.mk | 2 +- ...Tech Launchers.sh => Create id Tech Launchers.sh} | 0 4 files changed, 11 insertions(+), 7 deletions(-) rename packages/virtual/emulators/sources/{Generate id Tech Launchers.sh => Create id Tech Launchers.sh} (100%) mode change 100644 => 100755 diff --git a/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh index 855d99df5..2ed84be97 100644 --- a/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh +++ b/packages/emulators/libretro/idtech-lr/scripts/generate-idtech.sh @@ -6,13 +6,17 @@ # This scripts scans the /storage/roms/idtech folder for idtech game files # and creates the necessary idtech launcher scripts - RA_BIN="/usr/bin/retroarch" RA_DIR="/usr/lib/libretro" SCRIPT_DIR="/storage/.config/idtech" GAME_DIR="/storage/roms/idtech" -### Create directories +### create .config/idtech if does not exist +if [ ! -d ${SCRIPT_DIR} ]; then + mkdir -p ${SCRIPT_DIR} +fi + +### Create game directories while read IDTECH_DIR; do if [ ! -d "${GAME_DIR}/${IDTECH_DIR}" ]; then mkdir -p ${GAME_DIR}/${IDTECH_DIR} @@ -161,7 +165,7 @@ ${RA_BIN} -L ${RA_DIR}/vitaquake3_libretro.so ${GAME_DIR}/quake3/* EOF fi -### Wolf3D +### Wolfenstein 3D if [[ -f "${GAME_DIR}/wolf3d/wolf3d/VSWAP.WL6" ]] && [[ ! -f ${SCRIPT_DIR}/Wolfenstein\ 3D.sh ]]; then cat <${SCRIPT_DIR}/Wolfenstein\ 3D.sh #!/bin/bash @@ -170,7 +174,7 @@ ${RA_BIN} -L ${RA_DIR}/ecwolf_libretro.so ${GAME_DIR}/wolf3d/wolf3d/* EOF fi -### Wolf3D - Spear of Destiny +### Wolfenstein 3D - Spear of Destiny if [[ -f "${GAME_DIR}/wolf3d/sod/VSWAP.SOD" ]] && [[ ! -f ${SCRIPT_DIR}/Wolfenstein\ 3D\ -\ Spear\ of\ Destiny.sh ]]; then cat <${SCRIPT_DIR}/Wolfenstein\ 3D\ -\ Spear\ of\ Destiny.sh #!/bin/bash diff --git a/packages/misc/modules/sources/gamelist.xml b/packages/misc/modules/sources/gamelist.xml index 1c97e3442..b55871a76 100755 --- a/packages/misc/modules/sources/gamelist.xml +++ b/packages/misc/modules/sources/gamelist.xml @@ -207,8 +207,8 @@ ./images/xemu.svg - ./Generate id Tech Launchers.sh - Generate id Tech Launchers + ./Create id Tech Launchers.sh + Create id Tech Launchers Creates launchers for id software games ROCKNIX ROCKNIX diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index 313501ed6..974887822 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -378,7 +378,7 @@ makeinstall_target() { ### iD Software game engines add_emu_core idtech retroarch idtech add_es_system idtech - install_script "Generate id Tech Launchers.sh" + install_script "Create id Tech Launchers.sh" ### Apple Macintosh Plus add_emu_core macintosh retroarch minivmac true diff --git a/packages/virtual/emulators/sources/Generate id Tech Launchers.sh b/packages/virtual/emulators/sources/Create id Tech Launchers.sh old mode 100644 new mode 100755 similarity index 100% rename from packages/virtual/emulators/sources/Generate id Tech Launchers.sh rename to packages/virtual/emulators/sources/Create id Tech Launchers.sh From 592021da14f6c13266e072f3df51d944b43c35a4 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Tue, 23 Apr 2024 15:28:09 +0000 Subject: [PATCH 076/184] Update vulkan to 1.3.283 --- packages/graphics/vulkan/vulkan-headers/package.mk | 2 +- packages/graphics/vulkan/vulkan-loader/package.mk | 2 +- packages/graphics/vulkan/vulkan-tools/package.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/graphics/vulkan/vulkan-headers/package.mk b/packages/graphics/vulkan/vulkan-headers/package.mk index e1cb20b61..cfefdf279 100755 --- a/packages/graphics/vulkan/vulkan-headers/package.mk +++ b/packages/graphics/vulkan/vulkan-headers/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) PKG_NAME="vulkan-headers" -PKG_VERSION="1.3.277" +PKG_VERSION="1.3.283" PKG_LICENSE="Apache-2.0" PKG_SITE="https://github.com/KhronosGroup/Vulkan-Headers" PKG_URL="https://github.com/KhronosGroup/Vulkan-Headers/archive/v${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/vulkan/vulkan-loader/package.mk b/packages/graphics/vulkan/vulkan-loader/package.mk index b0d0317f0..b65771df5 100755 --- a/packages/graphics/vulkan/vulkan-loader/package.mk +++ b/packages/graphics/vulkan/vulkan-loader/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) PKG_NAME="vulkan-loader" -PKG_VERSION="1.3.277" +PKG_VERSION="1.3.283" PKG_LICENSE="Apache-2.0" PKG_SITE="https://github.com/KhronosGroup/Vulkan-Loader" PKG_URL="https://github.com/KhronosGroup/Vulkan-Loader/archive/v${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/vulkan/vulkan-tools/package.mk b/packages/graphics/vulkan/vulkan-tools/package.mk index d7237d1ca..36ea6e638 100644 --- a/packages/graphics/vulkan/vulkan-tools/package.mk +++ b/packages/graphics/vulkan/vulkan-tools/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) PKG_NAME="vulkan-tools" -PKG_VERSION="1.3.277" +PKG_VERSION="1.3.283" PKG_LICENSE="Apache-2.0" PKG_SITE="https://github.com/KhronosGroup/Vulkan-Tools" PKG_URL="https://github.com/KhronosGroup/Vulkan-tools/archive/v${PKG_VERSION}.tar.gz" From 3681c4db2aee36e7d86b0d605e6caad3f78f35d6 Mon Sep 17 00:00:00 2001 From: sydarn Date: Sat, 20 Apr 2024 20:58:48 +0200 Subject: [PATCH 077/184] todd: ra, gamecontrollerdb mapping improvement. yabasanshiro-sa mapping --- .../config/gamecontrollerdb.txt | 2 +- .../gamepads/rg_arc_joypad.cfg | 8 +- .../devices/keymapv2_rg_arc_joypad.json | 100 ++++++++++++++++++ .../standalone/yabasanshiro-sa/package.mk | 1 + .../scripts/start_yabasanshiro.sh | 5 + .../config/common/es_input.cfg | 19 ++++ 6 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 packages/emulators/standalone/yabasanshiro-sa/config/devices/keymapv2_rg_arc_joypad.json diff --git a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt index aaf8a626c..d3448aa3e 100644 --- a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt +++ b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt @@ -12,4 +12,4 @@ 03001a3447616d65466f726365204100,GameForce ACE Gamepad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:-a1,-leftx:-a0,+leftx:+a0,-lefty:+a1,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux, 1900c3ea010000000100000001010000,odroidgo3_joypad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,dpright:b15,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b11,righttrigger:b7,back:b8,start:b9,dpup:b12,x:b2,y:b3,platform:Linux, 03001354474f2d556c74726120476100,GO-Ultra Gamepad,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11;+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4,platform:Linux, -190014b3010000009178000000050000,rg_arc_joypad,platform:Linux,x:b4,a:b0,b:b1,y:b3,back:b10,start:b11,dpleft:b14,dpdown:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,rightstick:b2,leftstick:b5,platform:Linux, +1900d632010000000100000000010000,rg_arc_joypad,platform:Linux,x:b4,a:b0,b:b1,y:b3,back:b10,start:b11,dpleft:b14,dpdown:b13,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,rightstick:b2,leftstick:b5,platform:Linux, diff --git a/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg index cf97acb6e..2ecbc2350 100644 --- a/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg +++ b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg @@ -1,14 +1,18 @@ input_driver = "udev" input_device = "rg_arc_joypad" -input_device_display_name = "RG Arc Joypad" +input_device_display_name = "Anbernic RG ARC" input_b_btn = "1" +input_b_btn_label = "A" input_y_btn = "3" +input_y_btn_label = "X" input_select_btn = "10" input_start_btn = "11" input_a_btn = "0" +input_y_btn_label = "B" input_x_btn = "4" +input_y_btn_label = "Y" input_l_btn = "6" input_r_btn = "7" input_l2_btn = "8" @@ -20,7 +24,9 @@ input_left_btn = "14" input_right_btn = "15" input_l3_btn = "5" +input_l3_btn_label = "Z" input_r3_btn = "2" +input_r3_btn_label = "C" # Hotkeys input_enable_hotkey_btn = "10" input_exit_emulator_btn = "11" diff --git a/packages/emulators/standalone/yabasanshiro-sa/config/devices/keymapv2_rg_arc_joypad.json b/packages/emulators/standalone/yabasanshiro-sa/config/devices/keymapv2_rg_arc_joypad.json new file mode 100644 index 000000000..1e990527d --- /dev/null +++ b/packages/emulators/standalone/yabasanshiro-sa/config/devices/keymapv2_rg_arc_joypad.json @@ -0,0 +1,100 @@ +{ + "0_rg_arc_joypad_1900d632010000000100000000010000": { + "a": { + "id": 1, + "type": "button", + "value": 1 + }, + "analogleft": { + "id": 4, + "type": "axis", + "value": 0 + }, + "analogright": { + "id": 5, + "type": "axis", + "value": 0 + }, + "analogx": { + "id": 0, + "type": "axis", + "value": 0 + }, + "analogy": { + "id": 1, + "type": "axis", + "value": 0 + }, + "b": { + "id": 0, + "type": "button", + "value": 1 + }, + "c": { + "id": 2, + "type": "button", + "value": 1 + }, + "down": { + "id": 13, + "type": "button", + "value": 1 + }, + "l": { + "id": 6, + "type": "button", + "value": 1 + }, + "left": { + "id": 14, + "type": "button", + "value": 1 + }, + "r": { + "id": 7, + "type": "button", + "value": 1 + }, + "right": { + "id": 15, + "type": "button", + "value": 1 + }, + "select": { + "id": 10, + "type": "button", + "value": 1 + }, + "start": { + "id": 11, + "type": "button", + "value": 1 + }, + "up": { + "id": 12, + "type": "button", + "value": 1 + }, + "x": { + "id": 3, + "type": "button", + "value": 1 + }, + "y": { + "id": 4, + "type": "button", + "value": 1 + }, + "z": { + "id": 5, + "type": "button", + "value": 1 + } + }, + "player1": { + "DeviceID": 0, + "deviceGUID": "1900d632010000000100000000010000", + "deviceName": "rg_arc_joypad", + "padmode": 0 + } +} \ No newline at end of file diff --git a/packages/emulators/standalone/yabasanshiro-sa/package.mk b/packages/emulators/standalone/yabasanshiro-sa/package.mk index 9265b7255..e2fc81822 100644 --- a/packages/emulators/standalone/yabasanshiro-sa/package.mk +++ b/packages/emulators/standalone/yabasanshiro-sa/package.mk @@ -98,4 +98,5 @@ makeinstall_target() { chmod 0755 ${INSTALL}/usr/bin/start_yabasanshiro.sh mkdir -p ${INSTALL}/usr/config/yabasanshiro cp ${PKG_DIR}/config/config ${INSTALL}/usr/config/yabasanshiro/.config + cp -r ${PKG_DIR}/config/devices ${INSTALL}/usr/config/yabasanshiro/ } diff --git a/packages/emulators/standalone/yabasanshiro-sa/scripts/start_yabasanshiro.sh b/packages/emulators/standalone/yabasanshiro-sa/scripts/start_yabasanshiro.sh index a29ee3d0a..8e895281d 100644 --- a/packages/emulators/standalone/yabasanshiro-sa/scripts/start_yabasanshiro.sh +++ b/packages/emulators/standalone/yabasanshiro-sa/scripts/start_yabasanshiro.sh @@ -34,6 +34,11 @@ then GAMEPAD="'$(grep -b4 js0 /proc/bus/input/devices | awk 'BEGIN {FS="\""}; /Name/ {printf $2}')'" GAMEPADCONFIG=$(xmlstarlet sel -t -c "//inputList/inputConfig[@deviceName=${GAMEPAD}]" -n /storage/.emulationstation/es_input.cfg) + MAPPING_FILE="/usr/config/yabasanshiro/devices/keymapv2_$(eval echo $GAMEPAD).json" + if [ -e "${MAPPING_FILE}" ]; then + cp ${MAPPING_FILE} ${CONFIG_DIR}/keymapv2.json + fi + if [ ! -z "${GAMEPADCONFIG}" ] then cat <${CONFIG_DIR}/input.cfg diff --git a/packages/ui/emulationstation/config/common/es_input.cfg b/packages/ui/emulationstation/config/common/es_input.cfg index 23f5b36b9..a17de3358 100644 --- a/packages/ui/emulationstation/config/common/es_input.cfg +++ b/packages/ui/emulationstation/config/common/es_input.cfg @@ -1500,4 +1500,23 @@ + + + + + + + + + + + + + + + + + + + From af5d2a1baaa575b07285f7987825ff816255deeb Mon Sep 17 00:00:00 2001 From: sydarn Date: Sat, 20 Apr 2024 20:59:43 +0200 Subject: [PATCH 078/184] libpng: update package --- packages/graphics/libpng/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/libpng/package.mk b/packages/graphics/libpng/package.mk index 68c7666ef..192822987 100644 --- a/packages/graphics/libpng/package.mk +++ b/packages/graphics/libpng/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) PKG_NAME="libpng" -PKG_VERSION="1.6.39" +PKG_VERSION="1.6.40" PKG_LICENSE="LibPNG2" PKG_SITE="http://www.libpng.org/" PKG_URL="${SOURCEFORGE_SRC}/libpng/${PKG_NAME}-${PKG_VERSION}.tar.xz" From 322ba24669b5add3e39562e9979e744251f8e9cf Mon Sep 17 00:00:00 2001 From: sydarn Date: Sun, 21 Apr 2024 00:00:13 +0200 Subject: [PATCH 079/184] todd: mupen64plus mappings --- .../config/RK3566/mupen64plus.cfg.rgarc | 665 ++++++++++++++++++ .../config/RK3566/default.ini | 28 +- .../Anbernic RG ARC-D/050-game-configs | 43 ++ 3 files changed, 735 insertions(+), 1 deletion(-) create mode 100644 packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/config/RK3566/mupen64plus.cfg.rgarc create mode 100755 packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/config/RK3566/mupen64plus.cfg.rgarc b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/config/RK3566/mupen64plus.cfg.rgarc new file mode 100644 index 000000000..a5a1d7770 --- /dev/null +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-core/config/RK3566/mupen64plus.cfg.rgarc @@ -0,0 +1,665 @@ +# Mupen64Plus Configuration File +# This file is automatically read and written by the Mupen64Plus Core library + +[64DD] + +# Filename of the 64DD IPL ROM +IPL-ROM = "" +# Filename of the disk to load into Disk Drive +Disk = "" + + +[Audio-SDL] + +# Mupen64Plus SDL Audio Plugin config parameter version number +Version = 1.000000 +# Frequency which is used if rom doesn't want to change it +DEFAULT_FREQUENCY = 33600 +# Swaps left and right channels +SWAP_CHANNELS = False +# Size of primary buffer in output samples. This is where audio is loaded after it's extracted from n64's memory. +PRIMARY_BUFFER_SIZE = 16384 +# Fullness level target for Primary audio buffer, in equivalent output samples. This value must be larger than the SECONDARY_BUFFER_SIZE. Decreasing this value will reduce audio latency but requires a faster PC to avoid choppiness. Increasing this will increase audio latency but reduce the chance of drop-outs. +PRIMARY_BUFFER_TARGET = 2048 +# Size of secondary buffer in output samples. This is SDL's hardware buffer. The SDL documentation states that this should be a power of two between 512 and 8192. +SECONDARY_BUFFER_SIZE = 1024 +# Audio resampling algorithm. src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold, src-linear, speex-fixed-{10-0}, trivial +RESAMPLE = "trivial" +# Volume control type: 1 = SDL (only affects Mupen64Plus output) 2 = OSS mixer (adjusts master PC volume) +VOLUME_CONTROL_TYPE = 1 +# Percentage change each time the volume is increased or decreased +VOLUME_ADJUST = 5 +# Default volume when a game is started. Only used if VOLUME_CONTROL_TYPE is 1 +VOLUME_DEFAULT = 100 +# Synchronize Video/Audio +AUDIO_SYNC = False + + +[Core] + +# Mupen64Plus Core config parameter set version number. Please don't change this version number. +Version = 1.010000 +# Draw on-screen display if True, otherwise don't draw OSD +OnScreenDisplay = True +# Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more +R4300Emulator = 2 +# Disable compiled jump commands in dynamic recompiler (should be set to False) +NoCompiledJump = False +# Disable 4MB expansion RAM pack. May be necessary for some games +DisableExtraMem = False +# Increment the save state slot after each save operation +AutoStateSlotIncrement = False +# Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support +EnableDebugger = False +# Save state slot (0-9) to use when saving/loading the emulator state +CurrentStateSlot = 0 +# Path to directory where screenshots are saved. If this is blank, the default value of ${UserDataPath}/screenshot will be used +ScreenshotPath = "/storage/roms/screenshots" +# Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserDataPath}/save will be used +SaveStatePath = "/storage/roms/n64" +# Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserDataPath}/save will be used +SaveSRAMPath = "/storage/roms/n64" +# Path to a directory to search when looking for shared data files +SharedDataPath = "/storage/.config/game/configs/mupen64plussa" +# Force number of cycles per emulated instruction +CountPerOp = 0 +# Randomize PI/SI Interrupt Timing +RandomizeInterrupt = True +# Duration of SI DMA (-1: use per game settings) +SiDmaDuration = -1 +# Gameboy Camera Video Capture backend +GbCameraVideoCaptureBackend1 = "" +# Disk Save Format (0: Full Disk Copy (*.ndr/*.d6r), 1: RAM Area Only (*.ram)) +SaveDiskFormat = 1 + + +[CoreEvents] + +# Mupen64Plus CoreEvents config parameter set version number. Please don't change this version number. +Version = 1.000000 +# SDL keysym for stopping the emulator +Kbd Mapping Stop = 27 +# SDL keysym for switching between fullscreen/windowed modes +Kbd Mapping Fullscreen = 0 +# SDL keysym for saving the emulator state +Kbd Mapping Save State = 286 +# SDL keysym for loading the emulator state +Kbd Mapping Load State = 288 +# SDL keysym for advancing the save state slot +Kbd Mapping Increment Slot = 0 +# SDL keysym for resetting the emulator +Kbd Mapping Reset = 290 +# SDL keysym for slowing down the emulator +Kbd Mapping Speed Down = 291 +# SDL keysym for speeding up the emulator +Kbd Mapping Speed Up = 292 +# SDL keysym for taking a screenshot +Kbd Mapping Screenshot = 293 +# SDL keysym for pausing the emulator +Kbd Mapping Pause = 112 +# SDL keysym for muting/unmuting the sound +Kbd Mapping Mute = 109 +# SDL keysym for increasing the volume +Kbd Mapping Increase Volume = 93 +# SDL keysym for decreasing the volume +Kbd Mapping Decrease Volume = 91 +# SDL keysym for temporarily going really fast +Kbd Mapping Fast Forward = 102 +# SDL keysym for advancing by one frame when paused +Kbd Mapping Frame Advance = 47 +# SDL keysym for pressing the game shark button +Kbd Mapping Gameshark = 103 +# Joystick event string for stopping the emulator +Joy Mapping Stop = "J0B8/B9" +# Joystick event string for switching between fullscreen/windowed modes +Joy Mapping Fullscreen = "" +# Joystick event string for saving the emulator state +Joy Mapping Save State = "J0B8/B5" +# Joystick event string for loading the emulator state +Joy Mapping Load State = "J0B8/B4" +# Joystick event string for advancing the save state slot +Joy Mapping Increment Slot = "" +# Joystick event string for resetting the emulator +Joy Mapping Reset = "J0B8/B0" +# Joystick event string for slowing down the emulator +Joy Mapping Speed Down = "" +# Joystick event string for speeding up the emulator +Joy Mapping Speed Up = "" +# Joystick event string for taking a screenshot +Joy Mapping Screenshot = "J0B8/B3" +# Joystick event string for pausing the emulator +Joy Mapping Pause = "J0B12/B1" +# Joystick event string for muting/unmuting the sound +Joy Mapping Mute = "" +# Joystick event string for increasing the volume +Joy Mapping Increase Volume = "" +# Joystick event string for decreasing the volume +Joy Mapping Decrease Volume = "" +# Joystick event string for fast-forward +Joy Mapping Fast Forward = "J0B8/B7" +# Joystick event string for advancing by one frame when paused +Joy Mapping Frame Advance = "" +# Joystick event string for pressing the game shark button +Joy Mapping Gameshark = "J0B8/B2" +# SDL keysym for save slot 0 +Kbd Mapping Slot 0 = 48 +# SDL keysym for save slot 1 +Kbd Mapping Slot 1 = 49 +# SDL keysym for save slot 2 +Kbd Mapping Slot 2 = 50 +# SDL keysym for save slot 3 +Kbd Mapping Slot 3 = 51 +# SDL keysym for save slot 4 +Kbd Mapping Slot 4 = 52 +# SDL keysym for save slot 5 +Kbd Mapping Slot 5 = 53 +# SDL keysym for save slot 6 +Kbd Mapping Slot 6 = 54 +# SDL keysym for save slot 7 +Kbd Mapping Slot 7 = 55 +# SDL keysym for save slot 8 +Kbd Mapping Slot 8 = 56 +# SDL keysym for save slot 9 +Kbd Mapping Slot 9 = 57 + + +[Input-SDL-Control1] + +# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. +version = 2.000000 +# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic +mode = 2 +# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number +device = 0 +# SDL joystick name (or Keyboard) +name = "rg_arc_joypad" +# Specifies whether this controller is 'plugged in' to the simulated N64 +plugged = True +# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak +plugin = 2 +# If True, then mouse buttons may be used with this controller +mouse = False +# Scaling factor for mouse movements. For X, Y axes. +MouseSensitivity = "2.00,2.00" +# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. +AnalogDeadzone = "0,0" +# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value +AnalogPeak = "32768,32768" +# Digital button configuration mappings +DPad R = +DPad L = +DPad D = +DPad U = +Start = button(11) +Z Trig = button(8) +B Button = button(3) +A Button = button(1) +C Button R = button(2) +C Button L = button(4) +C Button D = button(0) +C Button U = button(5) +R Trig = button(7) +L Trig = button(6) +Mempak switch = +Rumblepak switch = +# Analog axis configuration mappings +X Axis = button(14,15) +Y Axis = button(12,13) + + +[Input-SDL-Control2] + +# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. +version = 2.000000 +# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic +mode = 2 +# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number +device = -1 +# SDL joystick name (or Keyboard) +name = "" +# Specifies whether this controller is 'plugged in' to the simulated N64 +plugged = False +# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak +plugin = 2 +# If True, then mouse buttons may be used with this controller +mouse = False +# Scaling factor for mouse movements. For X, Y axes. +MouseSensitivity = "2.00,2.00" +# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. +AnalogDeadzone = "4096,4096" +# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value +AnalogPeak = "32768,32768" +# Digital button configuration mappings +DPad R = "" +DPad L = "" +DPad D = "" +DPad U = "" +Start = "" +Z Trig = "" +B Button = "" +A Button = "" +C Button R = "" +C Button L = "" +C Button D = "" +C Button U = "" +R Trig = "" +L Trig = "" +Mempak switch = "" +Rumblepak switch = "" +# Analog axis configuration mappings +X Axis = "" +Y Axis = "" + + +[Input-SDL-Control3] + +# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. +version = 2.000000 +# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic +mode = 2 +# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number +device = -1 +# SDL joystick name (or Keyboard) +name = "" +# Specifies whether this controller is 'plugged in' to the simulated N64 +plugged = False +# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak +plugin = 2 +# If True, then mouse buttons may be used with this controller +mouse = False +# Scaling factor for mouse movements. For X, Y axes. +MouseSensitivity = "2.00,2.00" +# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. +AnalogDeadzone = "4096,4096" +# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value +AnalogPeak = "32768,32768" +# Digital button configuration mappings +DPad R = "" +DPad L = "" +DPad D = "" +DPad U = "" +Start = "" +Z Trig = "" +B Button = "" +A Button = "" +C Button R = "" +C Button L = "" +C Button D = "" +C Button U = "" +R Trig = "" +L Trig = "" +Mempak switch = "" +Rumblepak switch = "" +# Analog axis configuration mappings +X Axis = "" +Y Axis = "" + + +[Input-SDL-Control4] + +# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. +version = 2.000000 +# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic +mode = 2 +# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number +device = -1 +# SDL joystick name (or Keyboard) +name = "" +# Specifies whether this controller is 'plugged in' to the simulated N64 +plugged = False +# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak +plugin = 2 +# If True, then mouse buttons may be used with this controller +mouse = False +# Scaling factor for mouse movements. For X, Y axes. +MouseSensitivity = "2.00,2.00" +# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. +AnalogDeadzone = "4096,4096" +# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value +AnalogPeak = "32768,32768" +# Digital button configuration mappings +DPad R = "" +DPad L = "" +DPad D = "" +DPad U = "" +Start = "" +Z Trig = "" +B Button = "" +A Button = "" +C Button R = "" +C Button L = "" +C Button D = "" +C Button U = "" +R Trig = "" +L Trig = "" +Mempak switch = "" +Rumblepak switch = "" +# Analog axis configuration mappings +X Axis = "" +Y Axis = "" + + +[Rsp-HLE] + +# Mupen64Plus RSP HLE Plugin config parameter version number +Version = 1.000000 +# Path to a RSP plugin which will be used when encountering an unknown ucode.You can disable this by letting an empty string. +RspFallback = "" +# Send display lists to the graphics plugin +DisplayListToGraphicsPlugin = True +# Send audio lists to the audio plugin +AudioListToAudioPlugin = False + + +[Transferpak] + +# Filename of the GB ROM to load into transferpak 1 +GB-rom-1 = "" +# Filename of the GB RAM to load into transferpak 1 +GB-ram-1 = "" +# Filename of the GB ROM to load into transferpak 2 +GB-rom-2 = "" +# Filename of the GB RAM to load into transferpak 2 +GB-ram-2 = "" +# Filename of the GB ROM to load into transferpak 3 +GB-rom-3 = "" +# Filename of the GB RAM to load into transferpak 3 +GB-ram-3 = "" +# Filename of the GB ROM to load into transferpak 4 +GB-rom-4 = "" +# Filename of the GB RAM to load into transferpak 4 +GB-ram-4 = "" + + +[UI-Console] + +# Mupen64Plus UI-Console config parameter set version number. Please don't change this version number. +Version = 1.000000 +# Directory in which to search for plugins +PluginDir = "/usr/local/lib/mupen64plus" +# Filename of video plugin +VideoPlugin = "mupen64plus-video-rice" +# Filename of audio plugin +AudioPlugin = "mupen64plus-audio-sdl.so" +# Filename of input plugin +InputPlugin = "mupen64plus-input-sdl.so" +# Filename of RSP plugin +RspPlugin = "mupen64plus-rsp-hle.so" + + +[Video-General] + +# Width of output window or fullscreen width +ScreenWidth = 640 +# Height of output window or fullscreen height +ScreenHeight = 480 +# Use fullscreen mode if True, or windowed mode if False +Fullscreen = True +# If true, activate the SDL_GL_SWAP_CONTROL attribute +VerticalSync = True +# Rotate screen contents: 0=0 degree, 1=90 degree, 2 = 180 degree, 3=270 degree +Rotate = 0 + +[Video-GLideN64] + +###### Hardware Compatibility ###### +# Leave enabled unless a mobile gpu doesn't support it. +EnableFragmentDepthWrite = 1 +# Hardware per pixel lighting, supposedly good for GLES3.1 devices or higher. +EnableHWLighting = 0 + +###### Enhancements ####### +# Internal render resoluton rather than output. So 2 x 240p is 480p, etc. +UseNativeResolutionFactor = 1 +# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality) +MultiSampling = 0 +# Enable/Disable Fast Approximate Anti-Aliasing FXAA +FXAA = 0 +# Max level of Anisotropic Filtering, 0 for off +anisotropy = 0 +# Bilinear filtering mode (0=N64 3point, 1=standard) +# @rishooty: best to use this at 1x native res, any higher turn it off. +bilinearMode = 1 + +###### Compatibility ###### +# Make texrect coordinates continuous to avoid black lines between them. (0=Off/default, 1=Auto, 2=Force) +CorrectTexrectCoords = 1 +# Copy auxiliary buffers to RDRAM (default: 0) +EnableCopyAuxiliaryToRDRAM = 1 +# Render 2D texrects in native resolution to fix misalignment between parts of 2D image. (0=Off/default, 1=Optimized, 2=Unoptimized)") +EnableNativeResTexrects = 1 + +###### Other ###### +# Enable threaded video backend at the cost of input lag +ThreadedVideo = 1 +# Screen aspect ratio (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust) +AspectRatio = 1 +# Display On-screen FPS +ShowFPS = False + +[Video-Glide64mk2] + +# Enable full-scene anti-aliasing by setting this to a value greater than 1 +wrpAntiAliasing = 0 +# Card ID +card_id = 0 +# If true, use polygon offset values specified below +force_polygon_offset = False +# Specifies a scale factor that is used to create a variable depth offset for each polygon +polygon_offset_factor = 0.000000 +# Is multiplied by an implementation-specific value to create a constant depth offset +polygon_offset_units = 0.000000 +# Vertical sync +vsync = True +# TODO:ssformat +ssformat = False +# Display performance stats (add together desired flags): 1=FPS counter, 2=VI/s counter, 4=% speed, 8=FPS transparent +show_fps = 0 +# Clock enabled +clock = False +# Clock is 24-hour +clock_24_hr = True +# Wrapper resolution +wrpResolution = 0 +# Wrapper VRAM +wrpVRAM = 0 +# Wrapper FBO +wrpFBO = True +# Wrapper Anisotropic Filtering +wrpAnisotropic = True +# Texture Enhancement: Smooth/Sharpen Filters +ghq_fltr = 0 +# Texture Compression: 0 for S3TC, 1 for FXT1 +ghq_cmpr = 0 +# Texture Enhancement: More filters +ghq_enht = 0 +# Hi-res texture pack format (0 for none, 1 for Rice) +ghq_hirs = 1 +# Compress texture cache with S3TC or FXT1 +ghq_enht_cmpr = False +# Tile textures (saves memory but could cause issues) +ghq_enht_tile = 0 +# Force 16bpp textures (saves ram but lower quality) +ghq_enht_f16bpp = False +# Compress texture cache +ghq_enht_gz = True +# Don't enhance textures for backgrounds +ghq_enht_nobg = False +# Enable S3TC and FXT1 compression +ghq_hirs_cmpr = False +# Tile hi-res textures (saves memory but could cause issues) +ghq_hirs_tile = False +# Force 16bpp hi-res textures (saves ram but lower quality) +ghq_hirs_f16bpp = False +# Compress hi-res texture cache +ghq_hirs_gz = True +# Alternative CRC calculation -- emulates Rice bug +ghq_hirs_altcrc = True +# Save tex cache to disk +ghq_cache_save = True +# Texture Cache Size (MB) +ghq_cache_size = 128 +# Use full alpha channel -- could cause issues for some tex packs +ghq_hirs_let_texartists_fly = False +# Dump textures +ghq_hirs_dump = False +# Alternate texture size method: -1=Game default, 0=disable. 1=enable +alt_tex_size = -1 +# Use first SETTILESIZE only: -1=Game default, 0=disable. 1=enable +use_sts1_only = -1 +# Use spheric mapping only: -1=Game default, 0=disable. 1=enable +force_calc_sphere = -1 +# Force positive viewport: -1=Game default, 0=disable. 1=enable +correct_viewport = -1 +# Force texrect size to integral value: -1=Game default, 0=disable. 1=enable +increase_texrect_edge = -1 +# Reduce fillrect size by 1: -1=Game default, 0=disable. 1=enable +decrease_fillrect_edge = -1 +# Enable perspective texture correction emulation: -1=Game default, 0=disable. 1=enable +texture_correction = -1 +# Set special scale for PAL games: -1=Game default, 0=disable. 1=enable +pal230 = -1 +# 3DFX Dithered alpha emulation mode: -1=Game default, >=0=dithered alpha emulation mode +stipple_mode = -1 +# 3DFX Dithered alpha pattern: -1=Game default, >=0=pattern used for dithered alpha emulation +stipple_pattern = -1 +# Check microcode each frame: -1=Game default, 0=disable. 1=enable +force_microcheck = -1 +# Force 0xb5 command to be quad, not line 3D: -1=Game default, 0=disable. 1=enable +force_quad3d = -1 +# Enable near z clipping: -1=Game default, 0=disable. 1=enable +clip_zmin = -1 +# Enable far plane clipping: -1=Game default, 0=disable. 1=enable +clip_zmax = -1 +# Use fast CRC algorithm: -1=Game default, 0=disable. 1=enable +fast_crc = -1 +# Adjust screen aspect for wide screen mode: -1=Game default, 0=disable. 1=enable +adjust_aspect = -1 +# Force strict check in Depth buffer test: -1=Game default, 0=disable. 1=enable +zmode_compare_less = -1 +# Apply alpha dither regardless of alpha_dither_mode: -1=Game default, 0=disable. 1=enable +old_style_adither = -1 +# Scale vertex z value before writing to depth buffer: -1=Game default, 0=disable. 1=enable +n64_z_scale = -1 +# Fast texrect rendering with hwfbe: -1=Game default, 0=disable. 1=enable +optimize_texrect = -1 +# Do not copy auxiliary frame buffers: -1=Game default, 0=disable. 1=enable +ignore_aux_copy = -1 +# Clear auxiliary texture frame buffers: -1=Game default, 0=disable. 1=enable +hires_buf_clear = -1 +# Read alpha from framebuffer: -1=Game default, 0=disable. 1=enable +fb_read_alpha = -1 +# Handle unchanged fb: -1=Game default, 0=disable. 1=enable +useless_is_useless = -1 +# Set frambuffer CRC mode: -1=Game default, 0=disable CRC, 1=fast CRC, 2=safe CRC +fb_crc_mode = -1 +# Filtering mode: -1=Game default, 0=automatic, 1=force bilinear, 2=force point sampled +filtering = -1 +# Fog: -1=Game default, 0=disable. 1=enable +fog = -1 +# Buffer clear on every frame: -1=Game default, 0=disable. 1=enable +buff_clear = -1 +# Buffer swapping method: -1=Game default, 0=swap buffers when vertical interrupt has occurred, 1=swap buffers when set of conditions is satisfied. Prevents flicker on some games, 2=mix of first two methods +swapmode = -1 +# Aspect ratio: -1=Game default, 0=Force 4:3, 1=Force 16:9, 2=Stretch, 3=Original +aspect = -1 +# LOD calculation: -1=Game default, 0=disable. 1=fast, 2=precise +lodmode = -1 +# Smart framebuffer: -1=Game default, 0=disable. 1=enable +fb_smart = -1 +# Hardware frame buffer emulation: -1=Game default, 0=disable. 1=enable +fb_hires = -1 +# Read framebuffer every frame (may be slow use only for effects that need it e.g. Banjo Kazooie, DK64 transitions): -1=Game default, 0=disable. 1=enable +fb_read_always = -1 +# Render N64 frame buffer as texture: -1=Game default, 0=disable, 1=mode1, 2=mode2 +read_back_to_screen = -1 +# Show images written directly by CPU: -1=Game default, 0=disable. 1=enable +detect_cpu_write = -1 +# Get frame buffer info: -1=Game default, 0=disable. 1=enable +fb_get_info = -1 +# Enable software depth render: -1=Game default, 0=disable. 1=enable +fb_render = -1 +# If true, skip up to maxframeskip frames to maintain clock schedule; if false, skip exactly maxframeskip frames +autoframeskip = False +# If autoframeskip is true, skip up to this many frames to maintain clock schedule; if autoframeskip is false, skip exactly this many frames +maxframeskip = 0 + + +[Video-Rice] + +# Mupen64Plus Rice Video Plugin config parameter version number +Version = 1 +# Frame Buffer Emulation (0=ROM default, 1=disable) +FrameBufferSetting = 0 +# Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc) +FrameBufferWriteBackControl = 0 +# Render-to-texture emulation (0=none, 1=ignore, 2=normal, 3=write back, 4=write back and reload) +RenderToTexture = 0 +# Control when the screen will be updated (0=ROM default, 1=VI origin update, 2=VI origin change, 3=CI change, 4=first CI change, 5=first primitive draw, 6=before screen clear, 7=after screen drawn) +ScreenUpdateSetting = 4 +# Force to use normal alpha blender +NormalAlphaBlender = False +# Use a faster algorithm to speed up texture loading and CRC computation +FastTextureLoading = False +# Use different texture coordinate clamping code +AccurateTextureMapping = True +# Force emulated frame buffers to be in N64 native resolution +InN64Resolution = False +# Try to reduce Video RAM usage (should never be used) +SaveVRAM = False +# Enable this option to have better render-to-texture quality +DoubleSizeForSmallTxtrBuf = False +# Force to use normal color combiner +DefaultCombinerDisable = False +# Enable game-specific settings from INI file +EnableHacks = True +# If enabled, graphics will be drawn in WinFrame mode instead of solid and texture mode +WinFrameMode = False +# N64 Texture Memory Full Emulation (may fix some games, may break others) +FullTMEMEmulation = False +# Enable vertex clipper for fog operations +OpenGLVertexClipper = False +# Enable/Disable SSE optimizations for capable CPUs +EnableSSE = True +# If this option is enabled, the plugin will skip every other frame +SkipFrame = False +# If enabled, texture enhancement will be done only for TxtRect ucode +TexRectOnly = False +# If enabled, texture enhancement will be done only for textures width+height<=128 +SmallTextureOnly = False +# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility) +LoadHiResCRCOnly = True +# Enable hi-resolution texture file loading +LoadHiResTextures = False +# Enable texture dumping +DumpTexturesToFiles = False +# Display On-screen FPS +ShowFPS = False +# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear +Mipmapping = 2 +# Enable, Disable fog generation (0=Disable, 1=Enable) +FogMethod = 1 +# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering) +ForceTextureFilter = 0 +# Primary texture enhancement filter (0=None, 1=2X, 2=2XSAI, 3=HQ2X, 4=LQ2X, 5=HQ4X, 6=Sharpen, 7=Sharpen More, 8=External, 9=Mirrored) +TextureEnhancement = 0 +# Secondary texture enhancement filter (0 = none, 1-4 = filtered) +TextureEnhancementControl = 0 +# Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits) +TextureQuality = 0 +# Z-buffer depth (only 16 or 32) +OpenGLDepthBufferSetting = 16 +# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality) +MultiSampling = 0 +# Color bit depth for rendering window (0=32 bits, 1=16 bits) +ColorQuality = 1 +# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM) +OpenGLRenderSetting = 0 +# Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering +AnisotropicFiltering = 0 +# If true, use polygon offset values specified below +ForcePolygonOffset = False +# Specifies a scale factor that is used to create a variable depth offset for each polygon +PolygonOffsetFactor = 0.000000 +# Is multiplied by an implementation-specific value to create a constant depth offset +PolygonOffsetUnits = 0.000000 diff --git a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/config/RK3566/default.ini b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/config/RK3566/default.ini index 8005fb6fc..97ef8f71a 100644 --- a/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/config/RK3566/default.ini +++ b/packages/emulators/standalone/mupen64plus-sa/mupen64plus-sa-input-sdl/config/RK3566/default.ini @@ -22,4 +22,30 @@ Mempak switch = Rumblepak switch = # Analog axis configuration mappings X Axis = axis(0-,0+) -Y Axis = axis(1-,1+) \ No newline at end of file +Y Axis = axis(1-,1+) + +; RG ARC Gamepad - default.ini +[rg_arc_joypad] +plugged = True +mouse = False +AnalogDeadzone = 0,0 +AnalogPeak = 32768,32768 +DPad R = +DPad L = +DPad D = +DPad U = +Start = button(11) +Z Trig = button(8) +B Button = button(3) +A Button = button(1) +C Button R = button(2) +C Button L = button(4) +C Button D = button(0) +C Button U = button(5) +R Trig = button(7) +L Trig = button(6) +Mempak switch = +Rumblepak switch = +# Analog axis configuration mappings +X Axis = button(14,15) +Y Axis = button(12,13) diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs new file mode 100755 index 000000000..f3a2c3444 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) + +. /etc/profile + +#Set mupen64-plus-sa config for R33S +if [ ! -d "/storage/.config/mupen64plus" ]; then + mkdir -p "/storage/.config/mupen64plus/" + cp -r /usr/local/share/mupen64plus/mupen64plus.cfg* /storage/.config/mupen64plus/ +fi +if [ -f "/storage/.config/mupen64plus/mupen64plus.cfg.rgarc" ]; then + rm /storage/.config/mupen64plus/mupen64plus.cfg + mv /storage/.config/mupen64plus/mupen64plus.cfg.rgarc /storage/.config/mupen64plus/mupen64plus.cfg +fi +if [ ! -f "/storage/.config/mupen64plus/custominput.ini" ]; then +cat </storage/.config/mupen64plus/custominput.ini +[rg_arc_joypad] +plugged = True +mouse = False +AnalogDeadzone = 0,0 +AnalogPeak = 32768,32768 +DPad R = button(15) +DPad L = button(14) +DPad D = button(13) +DPad U = button(12) +Start = button(11) +Z Trig = button(8) +B Button = button(3) +A Button = button(1) +C Button R = button(2) +C Button L = button(4) +C Button D = button(0) +C Button U = button(5) +R Trig = button(7) +L Trig = button(6) +Mempak switch = +Rumblepak switch = +# Analog axis configuration mappings +X Axis = +Y Axis = +EOF +fi + From f70d29bae9de717cf0c399c2d75df2ba2cd35df4 Mon Sep 17 00:00:00 2001 From: sydarn Date: Sun, 21 Apr 2024 17:26:39 +0200 Subject: [PATCH 080/184] todd: fix ra mapping labels, plus add remaps need to implement method to apply remaps if files doesn't exist --- .../gamepads/rg_arc_joypad.cfg | 4 ++-- .../remappings/Beetle PC-FX/Beetle PC-FX.rmp | 22 +++++++++++++++++++ .../Genesis Plus GX/Genesis Plus GX.rmp | 22 +++++++++++++++++++ .../remappings/Opera/Opera.rmp | 19 ++++++++++++++++ .../remappings/PicoDrive/PicoDrive.rmp | 22 +++++++++++++++++++ 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Beetle PC-FX/Beetle PC-FX.rmp create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Genesis Plus GX/Genesis Plus GX.rmp create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Opera/Opera.rmp create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/PicoDrive/PicoDrive.rmp diff --git a/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg index 2ecbc2350..8850d7c3f 100644 --- a/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg +++ b/packages/emulators/libretro/retroarch/retroarch-joypads/gamepads/rg_arc_joypad.cfg @@ -10,9 +10,9 @@ input_y_btn_label = "X" input_select_btn = "10" input_start_btn = "11" input_a_btn = "0" -input_y_btn_label = "B" +input_a_btn_label = "B" input_x_btn = "4" -input_y_btn_label = "Y" +input_x_btn_label = "Y" input_l_btn = "6" input_r_btn = "7" input_l2_btn = "8" diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Beetle PC-FX/Beetle PC-FX.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Beetle PC-FX/Beetle PC-FX.rmp new file mode 100644 index 000000000..9e2a9d503 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Beetle PC-FX/Beetle PC-FX.rmp @@ -0,0 +1,22 @@ +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "1" +input_player1_btn_a = "0" +input_player1_btn_b = "9" +input_player1_btn_l = "-1" +input_player1_btn_l3 = "11" +input_player1_btn_r = "-1" +input_player1_btn_r3 = "8" +input_player1_btn_x = "10" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Genesis Plus GX/Genesis Plus GX.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Genesis Plus GX/Genesis Plus GX.rmp new file mode 100644 index 000000000..83420fa59 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Genesis Plus GX/Genesis Plus GX.rmp @@ -0,0 +1,22 @@ +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "1" +input_player1_btn_a = "0" +input_player1_btn_b = "1" +input_player1_btn_l = "-1" +input_player1_btn_l3 = "11" +input_player1_btn_r = "-1" +input_player1_btn_r3 = "8" +input_player1_btn_y = "10" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Opera/Opera.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Opera/Opera.rmp new file mode 100644 index 000000000..0db3b832a --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Opera/Opera.rmp @@ -0,0 +1,19 @@ +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "1" +input_player1_btn_a = "0" +input_player1_btn_b = "1" +input_player1_btn_r3 = "8" +input_player1_btn_y = "-1" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/PicoDrive/PicoDrive.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/PicoDrive/PicoDrive.rmp new file mode 100644 index 000000000..83420fa59 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/PicoDrive/PicoDrive.rmp @@ -0,0 +1,22 @@ +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "1" +input_player1_btn_a = "0" +input_player1_btn_b = "1" +input_player1_btn_l = "-1" +input_player1_btn_l3 = "11" +input_player1_btn_r = "-1" +input_player1_btn_r3 = "8" +input_player1_btn_y = "10" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" From 79c4b8398cc6a61c38e217d6a26f201808fa99a1 Mon Sep 17 00:00:00 2001 From: sydarn Date: Mon, 22 Apr 2024 15:03:05 +0200 Subject: [PATCH 081/184] todd: copy device specific RA remappings as quirk --- .../Anbernic RG ARC-D/050-game-configs | 10 ++++++ .../remappings/Flycast/Flycast.rmp | 19 +++++++++++ .../Mupen64Plus GLES2/Mupen64Plus GLES2.rmp | 33 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Flycast/Flycast.rmp create mode 100644 packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Mupen64Plus GLES2/Mupen64Plus GLES2.rmp diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs index f3a2c3444..33408a13f 100755 --- a/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs @@ -41,3 +41,13 @@ Y Axis = EOF fi +# Copy over device specific retroarch remappings unless they already exist +REMAP_DIR="/usr/lib/autostart/quirks/devices/${QUIRK_DEVICE}/remappings" +if [ -d "${REMAP_DIR}" ]; then + for dir in "${REMAP_DIR}"/*/; do + CORE_NAME=$(basename "${dir}") + if [ ! -d "/storage/remappings/${CORE_NAME}" ]; then + cp -r "${dir}" "/storage/remappings/" + fi + done +fi diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Flycast/Flycast.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Flycast/Flycast.rmp new file mode 100644 index 000000000..0fd5df11c --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Flycast/Flycast.rmp @@ -0,0 +1,19 @@ +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "0" +input_player1_stk_l_x+ = "-1" +input_player1_stk_l_x- = "-1" +input_player1_stk_l_y+ = "-1" +input_player1_stk_l_y- = "-1" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Mupen64Plus GLES2/Mupen64Plus GLES2.rmp b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Mupen64Plus GLES2/Mupen64Plus GLES2.rmp new file mode 100644 index 000000000..b682320c9 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/remappings/Mupen64Plus GLES2/Mupen64Plus GLES2.rmp @@ -0,0 +1,33 @@ +#R33S +input_libretro_device_p1 = "1" +input_libretro_device_p2 = "1" +input_libretro_device_p3 = "1" +input_libretro_device_p4 = "1" +input_libretro_device_p5 = "1" +input_player1_analog_dpad_mode = "0" +input_player1_btn_a = "22" +input_player1_btn_down = "18" +input_player1_btn_l = "12" +input_player1_btn_l2 = "21" +input_player1_btn_left = "17" +input_player1_btn_r2 = "20" +input_player1_btn_right = "16" +input_player1_btn_up = "19" +input_player1_btn_x = "23" +input_player1_stk_l_x+ = "-1" +input_player1_stk_l_x- = "-1" +input_player1_stk_l_y+ = "-1" +input_player1_stk_l_y- = "-1" +input_player1_stk_r_x+ = "-1" +input_player1_stk_r_x- = "-1" +input_player1_stk_r_y+ = "-1" +input_player1_stk_r_y- = "-1" +input_player2_analog_dpad_mode = "0" +input_player3_analog_dpad_mode = "0" +input_player4_analog_dpad_mode = "0" +input_player5_analog_dpad_mode = "0" +input_remap_port_p1 = "0" +input_remap_port_p2 = "1" +input_remap_port_p3 = "2" +input_remap_port_p4 = "3" +input_remap_port_p5 = "4" From ab9ff44a5107fc8f8a6969087f4b1d88f7ea9d79 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 24 Apr 2024 12:56:23 +0200 Subject: [PATCH 082/184] todd: drastic mappings --- .../drastic-sa/config/RK3566/drastic.cfg.arc | 111 ++++++++++++++++++ .../Anbernic RG ARC-D/050-game-configs | 9 ++ 2 files changed, 120 insertions(+) create mode 100644 packages/emulators/standalone/drastic-sa/config/RK3566/drastic.cfg.arc diff --git a/packages/emulators/standalone/drastic-sa/config/RK3566/drastic.cfg.arc b/packages/emulators/standalone/drastic-sa/config/RK3566/drastic.cfg.arc new file mode 100644 index 000000000..34dace050 --- /dev/null +++ b/packages/emulators/standalone/drastic-sa/config/RK3566/drastic.cfg.arc @@ -0,0 +1,111 @@ +frameskip_type = 0 +frameskip_value = 1 +safe_frameskip = 1 +show_frame_counter = 0 +screen_orientation = 3 +screen_swap = 0 +savestate_number = 0 +fast_forward = 0 +enable_sound = 1 +clock_speed = 0 +threaded_3d = 1 +mirror_touch = 0 +compress_savestates = 1 +savestate_snapshot = 1 +unzip_roms = 0 +preload_roms = 0 +backup_in_savestates = 1 +ignore_gamecard_limit = 0 +frame_interval = 0 +trim_roms = 0 +fix_main_2d_screen = 0 +disable_edge_marking = 0 +interframe_blend = 0 +hires_3d = 1 +use_rtc_custom_time = 0 +rtc_custom_time = 0 +rtc_system_time = 0 +slot2_device_type = 0 +rumble_frames = 3 +firmware.username = JELOS +firmware.language = 1 +firmware.favorite_color = 0 +firmware.birthday_month = 1 +firmware.birthday_day = 1 +enable_cheats = 1 +controls_a[CONTROL_INDEX_UP] = 1036 +controls_a[CONTROL_INDEX_DOWN] = 1037 +controls_a[CONTROL_INDEX_LEFT] = 1038 +controls_a[CONTROL_INDEX_RIGHT] = 1039 +controls_a[CONTROL_INDEX_A] = 100 +controls_a[CONTROL_INDEX_B] = 99 +controls_a[CONTROL_INDEX_X] = 122 +controls_a[CONTROL_INDEX_Y] = 118 +controls_a[CONTROL_INDEX_L] = 113 +controls_a[CONTROL_INDEX_R] = 111 +controls_a[CONTROL_INDEX_START] = 1035 +controls_a[CONTROL_INDEX_SELECT] = 1034 +controls_a[CONTROL_INDEX_HINGE] = 65535 +controls_a[CONTROL_INDEX_TOUCH_CURSOR_UP] = 65535 +controls_a[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 65535 +controls_a[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 65535 +controls_a[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 65535 +controls_a[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 65535 +controls_a[CONTROL_INDEX_MENU] = 1029 +controls_a[CONTROL_INDEX_SAVE_STATE] = 65535 +controls_a[CONTROL_INDEX_LOAD_STATE] = 65535 +controls_a[CONTROL_INDEX_FAST_FORWARD] = 65535 +controls_a[CONTROL_INDEX_SWAP_SCREENS] = 65535 +controls_a[CONTROL_INDEX_SWAP_ORIENTATION_A] = 110 +controls_a[CONTROL_INDEX_SWAP_ORIENTATION_B] = 112 +controls_a[CONTROL_INDEX_LOAD_GAME] = 65535 +controls_a[CONTROL_INDEX_QUIT] = 65535 +controls_a[CONTROL_INDEX_FAKE_MICROPHONE] = 65535 +controls_a[CONTROL_INDEX_UI_UP] = 1036 +controls_a[CONTROL_INDEX_UI_DOWN] = 1037 +controls_a[CONTROL_INDEX_UI_LEFT] = 1038 +controls_a[CONTROL_INDEX_UI_RIGHT] = 1039 +controls_a[CONTROL_INDEX_UI_SELECT] = 1024 +controls_a[CONTROL_INDEX_UI_BACK] = 65535 +controls_a[CONTROL_INDEX_UI_EXIT] = 65535 +controls_a[CONTROL_INDEX_UI_PAGE_UP] = 65535 +controls_a[CONTROL_INDEX_UI_PAGE_DOWN] = 65535 +controls_a[CONTROL_INDEX_UI_SWITCH] = 65535 +controls_b[CONTROL_INDEX_UP] = 1036 +controls_b[CONTROL_INDEX_DOWN] = 1037 +controls_b[CONTROL_INDEX_LEFT] = 1038 +controls_b[CONTROL_INDEX_RIGHT] = 1039 +controls_b[CONTROL_INDEX_A] = 100 +controls_b[CONTROL_INDEX_B] = 99 +controls_b[CONTROL_INDEX_X] = 122 +controls_b[CONTROL_INDEX_Y] = 118 +controls_b[CONTROL_INDEX_L] = 113 +controls_b[CONTROL_INDEX_R] = 111 +controls_b[CONTROL_INDEX_START] = 1035 +controls_b[CONTROL_INDEX_SELECT] = 1034 +controls_b[CONTROL_INDEX_HINGE] = 65535 +controls_b[CONTROL_INDEX_TOUCH_CURSOR_UP] = 65535 +controls_b[CONTROL_INDEX_TOUCH_CURSOR_DOWN] = 65535 +controls_b[CONTROL_INDEX_TOUCH_CURSOR_LEFT] = 65535 +controls_b[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] = 65535 +controls_b[CONTROL_INDEX_TOUCH_CURSOR_PRESS] = 65535 +controls_b[CONTROL_INDEX_MENU] = 1029 +controls_b[CONTROL_INDEX_SAVE_STATE] = 65535 +controls_b[CONTROL_INDEX_LOAD_STATE] = 65535 +controls_b[CONTROL_INDEX_FAST_FORWARD] = 65535 +controls_b[CONTROL_INDEX_SWAP_SCREENS] = 65535 +controls_b[CONTROL_INDEX_SWAP_ORIENTATION_A] = 110 +controls_b[CONTROL_INDEX_SWAP_ORIENTATION_B] = 112 +controls_b[CONTROL_INDEX_LOAD_GAME] = 65535 +controls_b[CONTROL_INDEX_QUIT] = 65535 +controls_b[CONTROL_INDEX_FAKE_MICROPHONE] = 65535 +controls_b[CONTROL_INDEX_UI_UP] = 1036 +controls_b[CONTROL_INDEX_UI_DOWN] = 1037 +controls_b[CONTROL_INDEX_UI_LEFT] = 1038 +controls_b[CONTROL_INDEX_UI_RIGHT] = 1039 +controls_b[CONTROL_INDEX_UI_SELECT] = 65535 +controls_b[CONTROL_INDEX_UI_BACK] = 65535 +controls_b[CONTROL_INDEX_UI_EXIT] = 65535 +controls_b[CONTROL_INDEX_UI_PAGE_UP] = 65535 +controls_b[CONTROL_INDEX_UI_PAGE_DOWN] = 65535 +controls_b[CONTROL_INDEX_UI_SWITCH] = 65535 diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs index 33408a13f..95dee1421 100755 --- a/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-D/050-game-configs @@ -41,6 +41,15 @@ Y Axis = EOF fi +#Set drastic-sa config +if [ ! -d "/storage/.config/drastic" ]; then + mkdir -p "/storage/.config/drastic" + cp -r "/usr/config/drastic" "/storage/.config/" +fi +if [ -f "/storage/.config/drastic/config/drastic.cfg.arc" ]; then + mv /storage/.config/drastic/config/drastic.cfg.arc /storage/.config/drastic/config/drastic.cfg +fi + # Copy over device specific retroarch remappings unless they already exist REMAP_DIR="/usr/lib/autostart/quirks/devices/${QUIRK_DEVICE}/remappings" if [ -d "${REMAP_DIR}" ]; then From e989ac04a12345286c80294a5d07cc4dcd2b351b Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 24 Apr 2024 13:02:18 +0200 Subject: [PATCH 083/184] anbernic v2 panel init sequence patch, thanks to @macromorgan --- .../003-anbernic-v2-panel-init-seq.patch | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 projects/Rockchip/patches/linux/RK3566/003-anbernic-v2-panel-init-seq.patch diff --git a/projects/Rockchip/patches/linux/RK3566/003-anbernic-v2-panel-init-seq.patch b/projects/Rockchip/patches/linux/RK3566/003-anbernic-v2-panel-init-seq.patch new file mode 100644 index 000000000..48bdd37ab --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/003-anbernic-v2-panel-init-seq.patch @@ -0,0 +1,60 @@ +From: Ao Zhong +To: "Guido Günther" +Cc: Purism Kernel Team , Ondrej Jirman , + Chris Morgan , + dri-devel , + Ao Zhong +Subject: [PATCH v3] drm/panel: st7703: Fix Panel Initialization for Anbernic RG353V-V2 +Date: Sat, 10 Feb 2024 01:24:43 +0100 [thread overview] +Message-ID: <20240210002443.5590-1-hacc1225@gmail.com> (raw) +In-Reply-To: + +This patch addresses an issue with the Anbernic RG353V-V2 panel +initialization that was caused by incorrect parameter. The correct +initialization sequence was derived by referencing the JELOS (Just +Enough Linux OS) BSP kernel's device tree for the V2 panel, which is +identified by the ID "38 21". The relevant device tree can be found at: + +https://github.com/JustEnoughLinuxOS/rk356x-kernel/blob/d4d7335a5ca18fc216a29712d5c6cecfb86147d2/arch/arm64/boot/dts/rockchip/rk3568-evb-rg353v.dtsi#L582 + +The proper initialization sequence was further informed by dissecting +instructions as outlined in the "Rockchip_DRM_Panel_Porting_Guide", +specifically in Chapter 3.3 of the document. + +https://web.archive.org/web/20240209211932if_/http://download.t-firefly.com/product/Board/Common/Document/Developer/Rockchip_Developer_Guide_DRM_Panel_Porting_CN.pdf + +Upon comparing the initialization sequence within the +rg353v2_init_sequence function against the device tree in the BSP +kernel, discrepancies were identified in two instructions. The relevant +instructions in the device tree are: + +1. 15 00 03 b6 7f 7f corresponding to the ST7703_CMD_SETVCOM command + with parameters 7f 7f +2. 39 00 05 b8 26 62 f0 63 corresponding to the ST7703_CMD_SETPOWER_EXT + command with parameters 26 62 f0 63 + +Adjusting the parameters to match those specified in the BSP kernel's +device tree allow the panel to initialize correctly. + +Signed-off-by: Ao Zhong +--- + drivers/gpu/drm/panel/panel-sitronix-st7703.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c +index b55bafd1a8be..a346d6c3d283 100644 +--- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c ++++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c +@@ -357,8 +357,8 @@ static int rg353v2_init_sequence(struct st7703 *ctx) + 0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00); + mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); + mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x0a, 0x0a); +- mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x92, 0x92); +- mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, ++ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x7f, 0x7f); ++ mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x26, 0x62, + 0xf0, 0x63); + mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, + 0xf9, 0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, +-- +2.43.0 From d1020faf0665fc42268704fe460aa570c443a415 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 24 Apr 2024 13:51:37 +0200 Subject: [PATCH 084/184] Symlink ARC-D game mappings with ARC-S --- .../hardware/quirks/devices/Anbernic RG ARC-S/050-game-configs | 1 + packages/hardware/quirks/devices/Anbernic RG ARC-S/remappings | 1 + 2 files changed, 2 insertions(+) create mode 120000 packages/hardware/quirks/devices/Anbernic RG ARC-S/050-game-configs create mode 120000 packages/hardware/quirks/devices/Anbernic RG ARC-S/remappings diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-S/050-game-configs b/packages/hardware/quirks/devices/Anbernic RG ARC-S/050-game-configs new file mode 120000 index 000000000..940a8a638 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-S/050-game-configs @@ -0,0 +1 @@ +../Anbernic RG ARC-D/050-game-configs \ No newline at end of file diff --git a/packages/hardware/quirks/devices/Anbernic RG ARC-S/remappings b/packages/hardware/quirks/devices/Anbernic RG ARC-S/remappings new file mode 120000 index 000000000..aece2cf04 --- /dev/null +++ b/packages/hardware/quirks/devices/Anbernic RG ARC-S/remappings @@ -0,0 +1 @@ +../Anbernic RG ARC-D/remappings \ No newline at end of file From 7dd29fa2bb53a833d7ba1bc0832bda1157c87b89 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 24 Apr 2024 15:19:33 +0000 Subject: [PATCH 085/184] Refactor RG552 DTS --- .../devices/RK3399/linux/linux.aarch64.conf | 14 +- .../patches/linux/RK3399/000-rk3399-dts.patch | 603 +++++++++--------- 2 files changed, 298 insertions(+), 319 deletions(-) diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index 9503a4740..385a3db5a 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -2582,7 +2582,7 @@ CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -CONFIG_THERMAL_GOV_FAIR_SHARE=y +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_BANG_BANG is not set # CONFIG_THERMAL_GOV_USER_SPACE is not set @@ -4708,18 +4708,18 @@ CONFIG_MEMORY=y # CONFIG_ARM_PL172_MPMC is not set CONFIG_IIO=y CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_BUFFER_CB=m # CONFIG_IIO_BUFFER_DMA is not set # CONFIG_IIO_BUFFER_DMAENGINE is not set -CONFIG_IIO_BUFFER_HW_CONSUMER=y +# CONFIG_IIO_BUFFER_HW_CONSUMER is not set CONFIG_IIO_KFIFO_BUF=y CONFIG_IIO_TRIGGERED_BUFFER=y -CONFIG_IIO_CONFIGFS=y +# CONFIG_IIO_CONFIGFS is not set CONFIG_IIO_TRIGGER=y CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 -CONFIG_IIO_SW_DEVICE=y -CONFIG_IIO_SW_TRIGGER=y -CONFIG_IIO_TRIGGERED_EVENT=y +# CONFIG_IIO_SW_DEVICE is not set +# CONFIG_IIO_SW_TRIGGER is not set +# CONFIG_IIO_TRIGGERED_EVENT is not set # # Accelerometers diff --git a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch index 01104238b..c916c4af6 100644 --- a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch +++ b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch @@ -1,7 +1,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boot/dts/rockchip/Makefile ---- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-01-23 23:55:32.434476392 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-01-25 01:21:59.078794990 +0000 -@@ -29,6 +29,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-li +--- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-04-12 20:11:08.853321539 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-04-23 16:40:41.368372474 +0000 +@@ -30,6 +30,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-li dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-orion-r68-meta.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-px5-evb.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-r88.dtb @@ -11,14 +11,14 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boo dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ficus.dtb diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 2024-01-25 01:22:30.031520037 +0000 -@@ -0,0 +1,1325 @@ ++++ linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 2024-04-24 14:55:25.961040764 +0000 +@@ -0,0 +1,1304 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd. + * Copyright (c) 2018 Akash Gajjar + * Copyright (c) 2022 Maya Matuszczyk -+ * Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) ++ * Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + */ + + @@ -61,21 +61,37 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + }; + -+ power-btn { ++ gpio-key-power { + compatible = "gpio-keys"; -+ autorepeat; + pinctrl-names = "default"; -+ pinctrl-0 = <&pwr_btn>; ++ pinctrl-0 = <&pwrbtn_pin>; + -+ sw1 { -+ debounce-interval = <100>; ++ key-power { ++ debounce-interval = <20>; + gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "BTN PWR"; ++ label = "Power"; + linux,code = ; + wakeup-source; + }; + }; + ++ leds { ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 =<&leds_gpio>; ++ ++ green_led: led-0 { ++ gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_HIGH>; ++ label = "battery_green"; ++ default-state= "on"; ++ }; ++ ++ red_led: led-1 { ++ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; ++ label = "battery_red"; ++ }; ++ }; ++ + adc-keys { + compatible = "adc-keys"; + io-channels = <&saradc 1>; @@ -248,24 +264,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + }; + -+ leds: gpio-leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 =<&leds_gpio>; -+ -+ led@1 { -+ gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_HIGH>; -+ label = "battery_green"; -+ default-state= "on"; -+ }; -+ -+ led@2 { -+ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; -+ label = "battery_red"; -+ }; -+ -+ }; -+ ++ /* Audio components */ + es8316-sound { + compatible = "simple-audio-card"; + pinctrl-names = "default"; @@ -376,38 +375,15 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + pinctrl-0 = <&dc_det_pin>; + }; + -+ xin32k: xin32k { -+ compatible = "fixed-clock"; -+ clock-frequency = <32768>; -+ clock-output-names = "xin32k"; -+ #clock-cells = <0>; -+ }; -+ -+ clkin_gmac: external-gmac-clock { -+ compatible = "fixed-clock"; -+ clock-frequency = <125000000>; -+ clock-output-names = "clkin_gmac"; -+ #clock-cells = <0>; -+ }; -+ -+ vcc12v_dcin: vcc12v-dcin { ++ dc_12v: dc-12v { + compatible = "regulator-fixed"; -+ regulator-name = "vcc12v_dcin"; ++ regulator-name = "dc_12v"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; + }; + -+ vcc_sys: vcc-sys { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc_sys"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-always-on; -+ vin-supply = <&vcc12v_dcin>; -+ }; -+ + /* switched by pmic_sleep */ + vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 { + compatible = "regulator-fixed"; @@ -429,45 +405,59 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + vin-supply = <&vcc5v0_sys>; + }; + -+ vcc3v0_sd: vcc3v0-sd { -+ compatible = "regulator-fixed"; -+ enable-active-high; -+ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdmmc0_pwr_h>; -+ regulator-name = "vcc3v0_sd"; -+ regulator-always-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ vin-supply = <&vcc3v3_sys>; -+ -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc5v0_host: vcc5v0-host-regulator { ++ /* micro SD card power */ ++ vcc3v0_sd: vcc3v0-sd { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc0_pwr_h_pin>; ++ regulator-name = "vcc3v0_sd"; ++ regulator-always-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ vin-supply = <&vcc3v3_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ /* Regulators supplied by vcc5v0_usb */ ++ /* USB 3 port power supply regulator */ ++ vcc5v0_otg: vcc5v0-otg { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; -+ pinctrl-0 = <&vcc5v0_host_en>; -+ regulator-name = "vcc5v0_host"; ++ pinctrl-0 = <&vcc5v0_host_en_pin>; ++ regulator-name = "vcc5v0_otg"; + regulator-always-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vcc5v0_usb>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; + }; + -+ vcc5v0_typec: vcc5v0-typec-regulator { ++ /* Regulators supplied by vcc5v0_usb */ ++ /* Type C port power supply regulator */ ++ vbus_5vout: vbus_typec: vbus-5vout { + compatible = "regulator-fixed"; + enable-active-high; + gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; -+ pinctrl-0 = <&vcc5v0_typec_en>; -+ regulator-name = "vcc5v0_typec"; -+ regulator-always-on; ++ pinctrl-0 = <&vcc5v0_typec0_en_pin>; ++ regulator-name = "vbus_5vout"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; + vin-supply = <&vcc5v0_usb>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; + }; + + vcc5v0_sys: vcc5v0-sys { @@ -477,7 +467,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; -+ vin-supply = <&vcc12v_dcin>; ++ vin-supply = <&dc_12v>; + }; + + vcc5v0_usb: vcc5v0-usb { @@ -487,7 +477,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; -+ vin-supply = <&vcc12v_dcin>; ++ vin-supply = <&dc_12v>; + }; + + vcc5v5_lcd: vcc5v5-lcd { @@ -554,43 +544,12 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + status = "okay"; +}; + -+&cpu_thermal { -+ trips { -+ cpu_warm: cpu_warm { -+ temperature = <50000>; -+ hysteresis = <2000>; -+ type = "active"; -+ }; -+ -+ cpu_hot: cpu_hot { -+ temperature = <55000>; -+ hysteresis = <2000>; -+ type = "active"; -+ }; -+ -+ cpu_scalding: cpu_scalding { -+ temperature = <65000>; -+ hysteresis = <5000>; -+ type = "active"; -+ }; -+ }; -+ -+ cooling-maps { -+ map1 { -+ trip = <&cpu_warm>; -+ cooling-device = <&fan THERMAL_NO_LIMIT 1>; -+ }; -+ -+ map2 { -+ trip = <&cpu_hot>; -+ cooling-device = <&fan THERMAL_NO_LIMIT 1>; -+ }; ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; + -+ map3 { -+ trip = <&cpu_scalding>; -+ cooling-device = <&fan 2 THERMAL_NO_LIMIT>; -+ }; -+ }; ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; +}; + +&cpu_l0 { @@ -609,108 +568,24 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + cpu-supply = <&vdd_cpu_l>; +}; + -+&cpu_b0 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&cpu_b1 { -+ cpu-supply = <&vdd_cpu_b>; -+}; -+ -+&sdio0 { -+ clock-frequency = <150000000>; -+ clock-freq-min-max = <100000 150000000>; -+ supports-sd; -+ no-sdio; -+ bus-width = <4>; -+ disable-wp; -+ cap-sd-highspeed; -+ cap-sdio-irq; -+ keep-power-in-suspend; -+ card-detect-delay = <800>; -+ cd-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_LOW>; /*[> CD GPIO <]*/ -+ num-slots = <1>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_cd &sdio0_bus4>; -+ sd-uhs-sdr104; -+ vqmmc-supply = <&vcc3v0_touch>; -+ //vqmmc-supply = <&vcc_sdio>; -+ status = "okay"; -+}; -+ -+&sdmmc { -+ bus-width = <4>; -+ cap-sd-highspeed; -+ cd-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; -+ disable-wp; -+ max-frequency = <150000000>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>; -+ vmmc-supply = <&vcc3v0_sd>; -+ vqmmc-supply = <&vcc_sdio>; -+ status = "okay"; -+}; -+ -+&emmc_phy { -+ status = "okay"; -+}; -+ -+&gpu { -+ mali-supply = <&vdd_gpu>; -+ status = "okay"; -+}; -+ -+&pwm0 { -+ status = "okay"; -+}; -+ -+&pwm1 { -+ status = "okay"; -+}; -+ -+&pwm2 { -+ status = "okay"; -+ pinctrl-names = "active"; -+ pinctrl-0 = <&pwm2_pin_pull_down>; -+}; -+ -+&pwm3 { ++&hdmi { ++ ddc-i2c-bus = <&i2c3>; + status = "okay"; -+ label = "rumble-pwm"; -+}; -+ -+&saradc { -+ vref-supply = <&vcca1v8_s3>; -+ status = "okay"; +}; + -+&sdhci { -+ assigned-clock-rates = <150000000>; -+ -+ bus-width = <8>; -+ mmc-hs400-1_8v; -+ mmc-hs400-enhanced-strobe; -+ non-removable; -+ ++&hdmi_sound { + status = "okay"; +}; + -+&hdmi { -+ ddc-i2c-bus = <&i2c3>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&hdmi_cec>; -+ status = "okay"; -+}; -+ +&mipi_dsi { -+ status = "okay"; + clock-master; ++ status = "okay"; + + ports { + mipi_out: port@1 { -+ #address-cells = <0>; -+ #size-cells = <0>; + reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; + + mipi_out_panel: endpoint { + remote-endpoint = <&mipi_in_panel>; @@ -719,8 +594,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + + panel@0 { -+ reg = <0>; + compatible = "sharp,ls054b3sx01"; ++ reg = <0>; + backlight = <&backlight>; + rotation = <270>; + @@ -741,21 +616,30 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; +}; + ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ +&i2c0 { + clock-frequency = <400000>; -+ i2c-scl-rising-time-ns = <168>; + i2c-scl-falling-time-ns = <4>; ++ i2c-scl-rising-time-ns = <168>; + status = "okay"; + + rk808: pmic@1b { + compatible = "rockchip,rk808"; + reg = <0x1b>; ++ #clock-cells = <1>; ++ clock-output-names = "xin32k", "rk808-clkout2"; + interrupt-parent = <&gpio3>; + interrupts = <10 IRQ_TYPE_LEVEL_LOW>; -+ #clock-cells = <1>; -+ clock-output-names = "rk808-clkout1", "rk808-clkout2"; + pinctrl-names = "default"; -+ pinctrl-0 = <&pmic_int_l>; ++ pinctrl-0 = <&pmic_int_l_pin>; + rockchip,system-power-controller; + wakeup-source; + @@ -777,13 +661,15 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + + regulators { ++ /* rk3399 center logic supply */ + vdd_center: DCDC_REG1 { + regulator-name = "vdd_center"; + regulator-always-on; + regulator-boot-on; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <900000>; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <6001>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -796,6 +682,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <1350000>; + regulator-ramp-delay = <6001>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -805,6 +692,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-name = "vcc_ddr"; + regulator-always-on; + regulator-boot-on; ++ + regulator-state-mem { + regulator-on-in-suspend; + }; @@ -816,6 +704,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; ++ + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1800000>; @@ -826,6 +715,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-name = "vcc1v8_dvp"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -837,6 +727,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -848,6 +739,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; ++ + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1800000>; @@ -860,6 +752,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; ++ + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <3300000>; @@ -872,6 +765,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -883,6 +777,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1500000>; + regulator-max-microvolt = <1500000>; ++ + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <1500000>; @@ -895,6 +790,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -906,16 +802,18 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-boot-on; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; ++ + regulator-state-mem { + regulator-on-in-suspend; + regulator-suspend-microvolt = <3000000>; + }; + }; + -+ vcc3v3_s3: vcc_lan: SWITCH_REG1 { ++ vcc3v3_s3: SWITCH_REG1 { + regulator-name = "vcc3v3_s3"; + regulator-always-on; + regulator-boot-on; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -925,6 +823,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + regulator-name = "vcc3v3_s0"; + regulator-always-on; + regulator-boot-on; ++ + regulator-state-mem { + regulator-off-in-suspend; + }; @@ -939,11 +838,11 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + pinctrl-names = "default"; + pinctrl-0 = <&vsel1_pin>; + regulator-name = "vdd_cpu_b"; ++ regulator-always-on; ++ regulator-boot-on; + regulator-min-microvolt = <712500>; + regulator-max-microvolt = <1500000>; + regulator-ramp-delay = <1000>; -+ regulator-always-on; -+ regulator-boot-on; + vin-supply = <&vcc5v0_sys>; + + regulator-state-mem { @@ -955,15 +854,14 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + compatible = "silergy,syr828"; + reg = <0x41>; + fcs,suspend-voltage-selector = <1>; -+ vsel-gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&vsel2_pin>; + regulator-name = "vdd_gpu"; ++ regulator-always-on; ++ regulator-boot-on; + regulator-min-microvolt = <712500>; + regulator-max-microvolt = <1500000>; + regulator-ramp-delay = <1000>; -+ regulator-always-on; -+ regulator-boot-on; + vin-supply = <&vcc5v0_sys>; + + regulator-state-mem { @@ -988,16 +886,15 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + monitored-battery = <&bat>; + power-supplies = <&mains_charger>, <&fusb0>; + }; -+ +}; + +&i2c1 { + clock-frequency = <100000>; -+ i2c-scl-rising-time-ns = <168>; + i2c-scl-falling-time-ns = <4>; ++ i2c-scl-rising-time-ns = <168>; + status = "okay"; + -+ es8316: es8316@11 { ++ es8316: audio-codec@11 { + compatible = "everest,es8316"; + reg = <0x11>; + clocks = <&cru SCLK_I2S_8CH_OUT>; @@ -1007,14 +904,14 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin +}; + +&i2c3 { -+ i2c-scl-rising-time-ns = <450>; + i2c-scl-falling-time-ns = <15>; ++ i2c-scl-rising-time-ns = <450>; + status = "okay"; +}; + +&i2c4 { -+ i2c-scl-rising-time-ns = <600>; + i2c-scl-falling-time-ns = <20>; ++ i2c-scl-rising-time-ns = <600>; + status = "okay"; + + touchscreen@14 { @@ -1032,15 +929,14 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + touchscreen-inverted-y; + }; + -+ fusb0: typec-portc@22 { ++ fusb0: fusb30x@22 { + compatible = "fcs,fusb302"; -+ status = "okay"; + reg = <0x22>; + interrupt-parent = <&gpio1>; + interrupts = ; + pinctrl-names = "default"; -+ pinctrl-0 = <&fusb0_int>; -+ vbus-supply = <&vcc5v0_typec>; ++ pinctrl-0 = <&fusb0_int_pin>; ++ vbus-supply = <&vbus_typec>; + + connector { + compatible = "usb-c-connector"; @@ -1062,7 +958,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + reg = <0>; + + usbc_hs: endpoint { -+ remote-endpoint = <&u2phy0_typec_hs>; ++ remote-endpoint = ++ <&u2phy0_typec_hs>; + }; + }; + @@ -1070,7 +967,17 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + reg = <1>; + + usbc_ss: endpoint { -+ remote-endpoint = <&tcphy0_typec_ss>; ++ remote-endpoint = ++ <&tcphy0_typec_ss>; ++ }; ++ }; ++ ++ port@2 { ++ reg = <2>; ++ ++ usbc_dp: endpoint { ++ remote-endpoint = ++ <&tcphy0_typec_dp>; + }; + }; + }; @@ -1091,20 +998,44 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin +}; + +&io_domains { -+ status = "okay"; -+ -+ bt656-supply = <&vcc1v8_dvp>; + audio-supply = <&vcca3v0_codec>; -+ sdmmc-supply = <&vcc_sdio>; + gpio1830-supply = <&vcc_3v0>; -+}; -+ -+&pmu_io_domains { -+ pmu1830-supply = <&vcc_3v0>; ++ sdmmc-supply = <&vcc_sdio>; + status = "okay"; +}; + +&pinctrl { ++ btns { ++ btn_pins: btn-pins { ++ rockchip,pins = ++ <3 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ vol_pwr_btn: vol-pwr-btn { ++ rockchip,pins = ++ <3 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ pwrbtn_pin: pwrbtn-pin { ++ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ + dc-charger { + dc_det_pin: dc-det-pin { + rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>; @@ -1113,24 +1044,46 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + + es8316 { + hp_det_pin: hp-det-pin { -+ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; ++ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + -+ i2s1 { -+ i2s_8ch_mclk_pin: i2s-8ch-mclk-pin { -+ rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>; -+ }; -+ }; -+ + fusb302x { -+ fusb0_int: fusb0-int { ++ fusb0_int_pin: fusb0-int-pin { + rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + ++ i2s1 { ++ i2s_8ch_mclk_pin: i2s-8ch-mclk-pin { ++ rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>; ++ }; ++ }; ++ ++ lcd-panel { ++ lcd_reset_gpio: lcd-reset-gpio { ++ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vcc5v5_lcd_en: vcc5v5-lcd-en { ++ rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vcc5v5_neg_lcd_en: vcc5v5-neg-lcd-en { ++ rockchip,pins = <0 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ leds { ++ leds_gpio: leds-gpio { ++ rockchip,pins = ++ <1 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ + pmic { -+ pmic_int_l: pmic-int-l { ++ pmic_int_l_pin: pmic-int-l-pin { + rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; + }; + @@ -1143,90 +1096,116 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + }; + -+ sdcard { -+ sdmmc0_pwr_h: sdmmc0-pwr-h { -+ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; ++ sdcard { ++ sdmmc0_pwr_h_pin: sdmmc0-pwr-h-pin { ++ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; + -+ }; ++ }; + + usb-typec { -+ vcc5v0_typec_en: vcc5v0_typec_en { ++ vcc5v0_typec0_en_pin: vcc5v0-typec0-en-pin { + rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + + usb2 { -+ vcc5v0_host_en: vcc5v0-host-en { ++ vcc5v0_host_en_pin: vcc5v0-host-en-pin { + rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + -+ gpio-leds { -+ leds_gpio: leds-gpio { -+ rockchip,pins = -+ <1 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ lcd-panel { -+ lcd_reset_gpio: lcd-reset-gpio { -+ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ vcc5v5_lcd_en: vcc5v5-lcd-en { -+ rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ -+ vcc5v5_neg_lcd_en: vcc5v5-neg-lcd-en { -+ rockchip,pins = <0 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ + wifi { + wifi_pwr: wifi-pwr { + rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; ++}; + -+ btns { -+ btn_pins: btn-pins { -+ rockchip,pins = -+ <3 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ vol_pwr_btn: vol-pwr-btn { -+ rockchip,pins = -+ <3 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ pwr_btn: pwr-btn { -+ rockchip,pins = -+ <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; ++&pmu_io_domains { ++ pmu1830-supply = <&vcc_3v0>; ++ status = "okay"; ++}; ++ ++&pwm0 { ++ status = "okay"; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ status = "okay"; ++ pinctrl-names = "active"; ++ pinctrl-0 = <&pwm2_pin_pull_down>; ++}; ++ ++&pwm3 { ++ status = "okay"; ++ label = "rumble-pwm"; ++}; ++ ++&saradc { ++ vref-supply = <&vcca1v8_s3>; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-mmc-highspeed; ++ cap-sd-highspeed; ++ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>; ++ sd-uhs-sdr50; ++ vmmc-supply = <&vcc3v0_sd>; ++ vqmmc-supply = <&vcc_sdio>; ++ status = "okay"; ++}; ++ ++&sdio0 { ++ clock-frequency = <150000000>; ++ clock-freq-min-max = <100000 150000000>; ++ supports-sd; ++ no-sdio; ++ bus-width = <4>; ++ disable-wp; ++ cap-sd-highspeed; ++ cap-sdio-irq; ++ keep-power-in-suspend; ++ card-detect-delay = <800>; ++ cd-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_LOW>; /*[> CD GPIO <]*/ ++ num-slots = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_cd &sdio0_bus4>; ++ sd-uhs-sdr104; ++ vqmmc-supply = <&vcc3v0_touch>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ assigned-clock-rates = <150000000>; ++ bus-width = <8>; ++ mmc-hs400-1_8v; ++ mmc-hs400-enhanced-strobe; ++ non-removable; ++ status = "okay"; +}; + +&tcphy0 { + status = "okay"; +}; + ++&tcphy0_dp { ++ port { ++ tcphy0_typec_dp: endpoint { ++ remote-endpoint = <&usbc_dp>; ++ }; ++ }; ++}; ++ +&tcphy0_usb3 { + port { + tcphy0_typec_ss: endpoint { @@ -1255,7 +1234,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + + u2phy0_host: host-port { -+ phy-supply = <&vcc5v0_host>; ++ phy-supply = <&vcc5v0_otg>; + status = "okay"; + }; + @@ -1274,7 +1253,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + + u2phy1_host: host-port { -+ phy-supply = <&vcc5v0_host>; ++ phy-supply = <&vcc5v0_otg>; + status = "okay"; + }; +}; @@ -1310,8 +1289,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin +}; + +&usbdrd_dwc3_0 { -+ status = "okay"; + dr_mode = "host"; ++ status = "okay"; +}; + +&usbdrd3_1 { @@ -1319,8 +1298,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin +}; + +&usbdrd_dwc3_1 { -+ status = "okay"; + dr_mode = "host"; ++ status = "okay"; +}; + +&vopb { From d6d6febf07cd7e10eeb80b74d593b1e5fd7306de Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 24 Apr 2024 15:33:45 +0000 Subject: [PATCH 086/184] Add hotkey support to dpad buttons --- packages/apps/rocknix-hotkey/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/rocknix-hotkey/package.mk b/packages/apps/rocknix-hotkey/package.mk index dcf8a73e9..3e0e10211 100644 --- a/packages/apps/rocknix-hotkey/package.mk +++ b/packages/apps/rocknix-hotkey/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2021-present Shanti Gilbert (https://github.com/shantigilbert) PKG_NAME="rocknix-hotkey" -PKG_VERSION="14255daccc61dd8f366b3c88292d54cfef1c087a" +PKG_VERSION="221103e20eaaad4c9c659bcfee508752938313e2" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/ROCKNIX/rocknix-hotkey" PKG_URL="${PKG_SITE}.git" From 6f3114636aafa0a739bdacd0a8a793498f47e890 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 24 Apr 2024 22:16:14 +0200 Subject: [PATCH 087/184] Ace: mednafen saturn support still pretty slow but it might an optimization issue --- config/emulators/saturn.conf | 2 +- .../RK3588/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../emulators/standalone/mednafen/package.mk | 5 +++- .../mednafen/scripts/mednafen_gen_config.sh | 29 ++++++++++++++----- packages/virtual/emulators/package.mk | 1 + 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/config/emulators/saturn.conf b/config/emulators/saturn.conf index 9fdc0a966..16b2787f1 100644 --- a/config/emulators/saturn.conf +++ b/config/emulators/saturn.conf @@ -4,7 +4,7 @@ SYSTEM_MANUFACTURER="Sega" SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/saturn" -SYSTEM_EXTENSION=".cue .chd .iso" +SYSTEM_EXTENSION=".cue .chd .iso .zip" SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="saturn" SYSTEM_THEME="saturn" diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md index f605ab5a9..ae5a4532a 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md @@ -98,7 +98,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021 (default)
**flycast:** flycast-sa
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
**retroarch:** beetle_saturn
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
**retroarch:** beetle_saturn
**mednafen:** ss
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|Sega Model 3 (segamodel3)|1996|`segamodel3`|.zip|**supermodel:** supermodel-sa (default)
| diff --git a/packages/emulators/standalone/mednafen/package.mk b/packages/emulators/standalone/mednafen/package.mk index c6f8fe43a..c0d69f725 100644 --- a/packages/emulators/standalone/mednafen/package.mk +++ b/packages/emulators/standalone/mednafen/package.mk @@ -30,10 +30,13 @@ case ${DEVICE} in --disable-ss \ --disable-psx" ;; - S922X|RK3588*) + S922X) DISABLED_MODULES+=" --disable-ss \ --disable-snes" ;; + RK3588*) + DISABLED_MODULES+=" --disable-snes" + ;; esac PKG_CONFIGURE_OPTS_TARGET="${DISABLED_MODULES}" diff --git a/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh b/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh index 9e607f319..55a2077d5 100644 --- a/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh +++ b/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh @@ -110,9 +110,8 @@ DEVICE_BTN_AR_LEFT="" DEVICE_BTN_AR_RIGHT="" for CONTROL in DEVICE_BTN_AL_DOWN DEVICE_BTN_AL_UP DEVICE_BTN_AL_LEFT \ DEVICE_BTN_AL_RIGHT DEVICE_BTN_AR_DOWN DEVICE_BTN_AR_UP \ - DEVICE_BTN_AR_LEFT DEVICE_BTN_DPAD_UP DEVICE_BTN_DPAD_DOWN\ - DEVICE_BTN_DPAD_LEFT DEVICE_BTN_DPAD_RIGHT - + DEVICE_BTN_AR_LEFT DEVICE_BTN_AR_RIGHT DEVICE_BTN_DPAD_UP \ + DEVICE_BTN_DPAD_DOWN DEVICE_BTN_DPAD_LEFT DEVICE_BTN_DPAD_RIGHT do sed -i -e "s/@${CONTROL}@/${!CONTROL}/g" $MEDNAFEN_HOME/mednafen.cfg done @@ -125,19 +124,33 @@ then DEVICE_BTN_TL2="abs_2-" DEVICE_BTN_TR2="abs_5-" +# No other GPIO device has analog triggers (I think), Just set them to the same DEVICE_BTN_TL2_MINUS=${DEVICE_BTN_TL2} DEVICE_BTN_TR2_MINUS=${DEVICE_BTN_TR2} +# Left analog +DEVICE_BTN_AL_DOWN="abs_1+_" +DEVICE_BTN_AL_UP="abs_1-" +DEVICE_BTN_AL_LEFT="abs_0+" +DEVICE_BTN_AL_RIGHT="abs_0-" + +# Right analog +DEVICE_BTN_AR_DOWN="abs_4+" +DEVICE_BTN_AR_UP="abs_4-" +DEVICE_BTN_AR_LEFT="abs_3-" +DEVICE_BTN_AR_RIGHT="abs_3+" + + for CONTROL in DEVICE_BTN_TL2 DEVICE_BTN_TR2 \ - DEVICE_BTN_TL2_MINUS DEVICE_BTN_TR2_MINUS + DEVICE_BTN_TL2_MINUS DEVICE_BTN_TR2_MINUS \ + DEVICE_BTN_AL_DOWN DEVICE_BTN_AL_UP DEVICE_BTN_AL_LEFT \ + DEVICE_BTN_AL_RIGHT DEVICE_BTN_AR_DOWN DEVICE_BTN_AR_UP \ + DEVICE_BTN_AR_LEFT DEVICE_BTN_AR_RIGHT do sed -i -e "s/@${CONTROL}@/${!CONTROL}/g" $MEDNAFEN_HOME/mednafen.cfg done -fi -# No other GPIO device has analog triggers (I think), Just set them to the same -DEVICE_BTN_TL2_MINUS=${DEVICE_BTN_TL2} -DEVICE_BTN_TR2_MINUS=${DEVICE_BTN_TR2} +fi # These are the inputs prefixed with button_ for CONTROL in DEVICE_BTN_SOUTH DEVICE_BTN_EAST DEVICE_BTN_NORTH \ diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index 974887822..f0a69db37 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -994,6 +994,7 @@ makeinstall_target() { ;; RK358*) add_emu_core saturn retroarch beetle_saturn false + add_emu_core saturn mednafen ss false ;; esac add_es_system saturn From 636a51abcc0e5e5b181c27802d8562ad68b0a337 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 24 Apr 2024 22:09:45 +0000 Subject: [PATCH 088/184] Move PPSSPP save dir's to /storage/roms --- .../RK3399/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../emulators/standalone/ppsspp-sa/package.mk | 2 +- .../ppsspp-sa/patches/004-set-paths.patch | 125 ++++++++++++++++++ .../ppsspp-sa/scripts/psp_save_mover.sh | 12 ++ packages/rocknix/sources/post-update | 8 ++ 5 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 packages/emulators/standalone/ppsspp-sa/patches/004-set-paths.patch create mode 100644 packages/emulators/standalone/ppsspp-sa/scripts/psp_save_mover.sh diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md index 66fd5067c..901a11816 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md @@ -108,7 +108,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
**mednafen:** ngp
| diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index 6eac1f249..8eea8b1e8 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -82,7 +82,7 @@ pre_make_target() { makeinstall_target() { mkdir -p ${INSTALL}/usr/bin - cp ${PKG_DIR}/scripts/start_ppsspp.sh ${INSTALL}/usr/bin + cp ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin cp PPSSPPSDL ${INSTALL}/usr/bin/ppsspp chmod 0755 ${INSTALL}/usr/bin/* ln -sf /storage/.config/ppsspp/assets ${INSTALL}/usr/bin/assets diff --git a/packages/emulators/standalone/ppsspp-sa/patches/004-set-paths.patch b/packages/emulators/standalone/ppsspp-sa/patches/004-set-paths.patch new file mode 100644 index 000000000..1806a233a --- /dev/null +++ b/packages/emulators/standalone/ppsspp-sa/patches/004-set-paths.patch @@ -0,0 +1,125 @@ +diff -rupN ppsspp.orig/Core/Config.cpp ppsspp/Core/Config.cpp +--- ppsspp.orig/Core/Config.cpp 2024-04-24 20:38:11.626645801 +0000 ++++ ppsspp/Core/Config.cpp 2024-04-24 20:39:14.719993428 +0000 +@@ -1075,10 +1075,10 @@ void Config::Reload() { + void Config::UpdateIniLocation(const char *iniFileName, const char *controllerIniFilename) { + const bool useIniFilename = iniFileName != nullptr && strlen(iniFileName) > 0; + const char *ppssppIniFilename = IsVREnabled() ? "ppssppvr.ini" : "ppsspp.ini"; +- iniFilename_ = FindConfigFile(useIniFilename ? iniFileName : ppssppIniFilename); ++ iniFilename_ = Path("/storage/.config/ppsspp/PSP/SYSTEM") / ppssppIniFilename; + const bool useControllerIniFilename = controllerIniFilename != nullptr && strlen(controllerIniFilename) > 0; + const char *controlsIniFilename = IsVREnabled() ? "controlsvr.ini" : "controls.ini"; +- controllerIniFilename_ = FindConfigFile(useControllerIniFilename ? controllerIniFilename : controlsIniFilename); ++ controllerIniFilename_ = Path("/storage/.config/ppsspp/PSP/SYSTEM") / controlsIniFilename; + } + + bool Config::LoadAppendedConfig() { +diff -rupN ppsspp.orig/Core/SaveState.cpp ppsspp/Core/SaveState.cpp +--- ppsspp.orig/Core/SaveState.cpp 2024-04-24 20:38:11.630645887 +0000 ++++ ppsspp/Core/SaveState.cpp 2024-04-24 21:19:52.911740439 +0000 +@@ -532,7 +532,7 @@ namespace SaveState + + Path GenerateSaveSlotFilename(const Path &gameFilename, int slot, const char *extension) + { +- std::string filename = StringFromFormat("%s_%d.%s", GenerateFullDiscId(gameFilename).c_str(), slot, extension); ++ std::string filename = StringFromFormat("%s_%d.%s", gameFilename.WithReplacedExtension("").GetFilename().c_str(), slot, extension); + return GetSysDirectory(DIRECTORY_SAVESTATE) / filename; + } + +diff -rupN ppsspp.orig/Core/System.cpp ppsspp/Core/System.cpp +--- ppsspp.orig/Core/System.cpp 2024-04-24 20:38:11.630645887 +0000 ++++ ppsspp/Core/System.cpp 2024-04-24 21:23:17.568309911 +0000 +@@ -659,14 +659,8 @@ std::string PSP_GetLoading() { + } + + Path GetSysDirectory(PSPDirectories directoryType) { +- const Path &memStickDirectory = g_Config.memStickDirectory; +- Path pspDirectory; +- if (!strcasecmp(memStickDirectory.GetFilename().c_str(), "PSP")) { +- // Let's strip this off, to easily allow choosing a root directory named "PSP" on Android. +- pspDirectory = memStickDirectory; +- } else { +- pspDirectory = memStickDirectory / "PSP"; +- } ++ Path memStickDirectory = Path("/storage/roms/psp/"); ++ Path pspDirectory = Path("/storage/.config/ppsspp/PSP/"); + + switch (directoryType) { + case DIRECTORY_PSP: +@@ -676,9 +670,9 @@ Path GetSysDirectory(PSPDirectories dire + case DIRECTORY_GAME: + return pspDirectory / "GAME"; + case DIRECTORY_SAVEDATA: +- return pspDirectory / "SAVEDATA"; ++ return Path("/storage/roms/psp/"); + case DIRECTORY_SCREENSHOT: +- return pspDirectory / "SCREENSHOT"; ++ return Path("/storage/roms/screenshots/"); + case DIRECTORY_SYSTEM: + return pspDirectory / "SYSTEM"; + case DIRECTORY_PAUTH: +@@ -688,7 +682,7 @@ Path GetSysDirectory(PSPDirectories dire + case DIRECTORY_DUMP: + return pspDirectory / "SYSTEM/DUMP"; + case DIRECTORY_SAVESTATE: +- return pspDirectory / "PPSSPP_STATE"; ++ return Path("/storage/roms/savestates/psp/ppsspp-sa"); + case DIRECTORY_CACHE: + return pspDirectory / "SYSTEM/CACHE"; + case DIRECTORY_TEXTURES: +@@ -710,11 +704,11 @@ Path GetSysDirectory(PSPDirectories dire + return pspDirectory / "themes"; + + case DIRECTORY_MEMSTICK_ROOT: +- return g_Config.memStickDirectory; ++ return memStickDirectory; + // Just return the memory stick root if we run into some sort of problem. + default: + ERROR_LOG(FILESYS, "Unknown directory type."); +- return g_Config.memStickDirectory; ++ return pspDirectory; + } + } + +diff -rupN ppsspp.orig/SDL/SDLJoystick.cpp ppsspp/SDL/SDLJoystick.cpp +--- ppsspp.orig/SDL/SDLJoystick.cpp 2024-04-24 20:38:11.650646325 +0000 ++++ ppsspp/SDL/SDLJoystick.cpp 2024-04-24 20:53:07.224922822 +0000 +@@ -25,7 +25,7 @@ SDLJoystick::SDLJoystick(bool init_SDL ) + SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER); + } + +- const char *dbPath = "gamecontrollerdb.txt"; ++ const char *dbPath = "/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt"; + cout << "loading control pad mappings from " << dbPath << ": "; + + size_t size; +@@ -34,7 +34,7 @@ SDLJoystick::SDLJoystick(bool init_SDL ) + SDL_RWops *rw = SDL_RWFromConstMem(mappingData, size); + // 1 to free the rw after use + if (SDL_GameControllerAddMappingsFromRW(rw, 1) == -1) { +- cout << "Failed to read mapping data - corrupt?" << endl; ++ cout << "/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt missing" << endl; + } + delete[] mappingData; + } else { +diff -rupN ppsspp.orig/UI/NativeApp.cpp ppsspp/UI/NativeApp.cpp +--- ppsspp.orig/UI/NativeApp.cpp 2024-04-24 20:38:11.658646498 +0000 ++++ ppsspp/UI/NativeApp.cpp 2024-04-24 20:53:07.224922822 +0000 +@@ -390,7 +390,7 @@ void NativeInit(int argc, const char *ar + g_VFS.Register("", new DirectoryReader(File::GetExeDirectory())); + g_VFS.Register("", new DirectoryReader(Path("/usr/local/share/ppsspp/assets"))); + g_VFS.Register("", new DirectoryReader(Path("/usr/local/share/games/ppsspp/assets"))); +- g_VFS.Register("", new DirectoryReader(Path("/usr/share/ppsspp/assets"))); ++ g_VFS.Register("", new DirectoryReader(Path("/storage/.config/ppsspp/assets"))); + g_VFS.Register("", new DirectoryReader(Path("/usr/share/games/ppsspp/assets"))); + #endif + +@@ -495,7 +495,7 @@ void NativeInit(int argc, const char *ar + else // Just in case + config = "./config"; + +- g_Config.memStickDirectory = Path(config) / "ppsspp"; ++ g_Config.memStickDirectory = Path("/storage/roms/psp/"); + g_Config.flash0Directory = File::GetExeDirectory() / "assets/flash0"; + if (getenv("HOME") != nullptr) { + g_Config.defaultCurrentDirectory = Path(getenv("HOME")); diff --git a/packages/emulators/standalone/ppsspp-sa/scripts/psp_save_mover.sh b/packages/emulators/standalone/ppsspp-sa/scripts/psp_save_mover.sh new file mode 100644 index 000000000..a90e750b6 --- /dev/null +++ b/packages/emulators/standalone/ppsspp-sa/scripts/psp_save_mover.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +#This will copy saves to the correct directory after making changes to PPSSPP +if [ ! -d "/storage/roms/psp/PSP" ]; then + mkdir -p "/storage/roms/psp/PSP" + cp -r /storage/.config/ppsspp/PSP/SAVEDATA /storage/roms/psp/PSP/ +fi + +if [ ! -d "/storage/roms/savestates/psp/ppsspp-sa" ]; then + mkdir -p /storage/roms/savestates/psp/ppsspp-sa + cp -r /storage/.config/ppsspp/PSP/PPSSPP_STATE/* /storage/roms/savestates/psp/ppsspp-sa/ +fi diff --git a/packages/rocknix/sources/post-update b/packages/rocknix/sources/post-update index de959aa96..b74210d8f 100644 --- a/packages/rocknix/sources/post-update +++ b/packages/rocknix/sources/post-update @@ -83,3 +83,11 @@ if echo ${HW_DEVICE} | grep RK33; then echo "Removing" rm -f /storage/.config/profile.d/041-panfrost fi + +# run the idtech script on update if folder does not exist +if [ ! -d "/storage/.config/idtech" ]; then + /usr/bin/generate-idtech.sh +fi + +# Move PSP saves to new directories +/usr/bin/psp_save_mover.sh From ffb0392eb240207dd1646de8e163108fca411f0d Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 25 Apr 2024 13:30:42 +0000 Subject: [PATCH 089/184] Add intial support for Rock5b+ and Rock5a --- projects/Rockchip/bootloader/update.sh | 12 +- .../devices/RK3588/linux/linux.aarch64.conf | 2223 ++++++----------- projects/Rockchip/devices/RK3588/options | 2 +- .../RK3588/006-rk3588-rock-5b-plus.patch | 1293 ++++++++++ 4 files changed, 2122 insertions(+), 1408 deletions(-) create mode 100644 projects/Rockchip/patches/linux/RK3588/006-rk3588-rock-5b-plus.patch diff --git a/projects/Rockchip/bootloader/update.sh b/projects/Rockchip/bootloader/update.sh index c8e70abf5..cfb254909 100755 --- a/projects/Rockchip/bootloader/update.sh +++ b/projects/Rockchip/bootloader/update.sh @@ -51,11 +51,21 @@ if [ -f $BOOT_ROOT/extlinux/extlinux.conf ]; then sed -i '/FDT/c\ FDT /rk3588s-orangepi-5.dtb' $BOOT_ROOT/extlinux/extlinux.conf sed -i 's/ fbcon=rotate:1//' $BOOT_ROOT/extlinux/extlinux.conf ;; - *rock-5) + *rock-5b-plus) + echo "Setting boot FDT to Rock 5B+..." + sed -i '/FDT/c\ FDT /rk3588-rock-5b-plus.dtb' $BOOT_ROOT/extlinux/extlinux.conf + sed -i 's/ fbcon=rotate:1//' $BOOT_ROOT/extlinux/extlinux.conf + ;; + *rock-5b) echo "Setting boot FDT to Rock 5B..." sed -i '/FDT/c\ FDT /rk3588-rock-5b.dtb' $BOOT_ROOT/extlinux/extlinux.conf sed -i 's/ fbcon=rotate:1//' $BOOT_ROOT/extlinux/extlinux.conf ;; + *rock-5a) + echo "Setting boot FDT to Rock 5A..." + sed -i '/FDT/c\ FDT /rk3588-rock-5b.dtb' $BOOT_ROOT/extlinux/extlinux.conf + sed -i 's/ fbcon=rotate:1//' $BOOT_ROOT/extlinux/extlinux.conf + ;; esac fi fi diff --git a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf index 0aa0b3019..674f3cfd1 100644 --- a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf @@ -1,23 +1,19 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.1.43 Kernel Configuration +# Linux/arm64 5.10.160 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-jelos-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" +CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=120301 +CONFIG_LD_VERSION=241000000 CONFIG_CLANG_VERSION=0 -CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24100 -CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24100 CONFIG_LLD_VERSION=0 CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y +CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y -CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y -CONFIG_PAHOLE_VERSION=0 CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y @@ -32,10 +28,10 @@ CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_BUILD_SALT="" CONFIG_DEFAULT_INIT="" -CONFIG_DEFAULT_HOSTNAME="RK3588-ACE" +CONFIG_DEFAULT_HOSTNAME="@DEVICENAME@" +CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y -CONFIG_SYSVIPC_COMPAT=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y # CONFIG_WATCH_QUEUE is not set @@ -62,19 +58,18 @@ CONFIG_GENERIC_IRQ_IPI=y CONFIG_GENERIC_MSI_IRQ=y CONFIG_GENERIC_MSI_IRQ_DOMAIN=y CONFIG_IRQ_MSI_IOMMU=y +CONFIG_HANDLE_DOMAIN_IRQ=y +CONFIG_ARCH_WANTS_IRQ_RAW=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set # end of IRQ subsystem +CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y -CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_CONTEXT_TRACKING=y -CONFIG_CONTEXT_TRACKING_IDLE=y # # Timers subsystem @@ -88,25 +83,9 @@ CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem -CONFIG_BPF=y -CONFIG_HAVE_EBPF_JIT=y -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y - -# -# BPF subsystem -# -CONFIG_BPF_SYSCALL=y -# CONFIG_BPF_JIT is not set -# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set -CONFIG_USERMODE_DRIVER=y -# CONFIG_BPF_PRELOAD is not set -# end of BPF subsystem - -CONFIG_PREEMPT_VOLUNTARY_BUILD=y # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set -# CONFIG_PREEMPT_DYNAMIC is not set # # CPU/Task time and stats accounting @@ -146,7 +125,6 @@ CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 -# CONFIG_PRINTK_INDEX is not set CONFIG_GENERIC_SCHED_CLOCK=y # @@ -158,14 +136,11 @@ CONFIG_UCLAMP_BUCKETS_COUNT=20 CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y -CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y -# CONFIG_CGROUP_FAVOR_DYNMODS is not set CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_KMEM=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_WRITEBACK=y @@ -184,7 +159,6 @@ CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y -# CONFIG_CGROUP_MISC is not set # CONFIG_CGROUP_DEBUG is not set CONFIG_SOCK_CGROUP_DATA=y CONFIG_NAMESPACES=y @@ -196,10 +170,11 @@ CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_CHECKPOINT_RESTORE=y CONFIG_SCHED_AUTOGROUP=y +# CONFIG_RT_SOFTINT_OPTIMIZATION is not set # CONFIG_SYSFS_DEPRECATED is not set CONFIG_RELAY=y CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="/media/storage/5jel/packages/virtual/initramfs/config/initramfs.conf /media/storage/5jel/build.JELOS-RK3588-ACE.aarch64/initramfs" +CONFIG_INITRAMFS_SOURCE="@INITRAMFS_SOURCE@" CONFIG_INITRAMFS_ROOT_UID=0 CONFIG_INITRAMFS_ROOT_GID=0 CONFIG_RD_GZIP=y @@ -217,14 +192,15 @@ CONFIG_INITRAMFS_COMPRESSION_GZIP=y # CONFIG_INITRAMFS_COMPRESSION_LZ4 is not set # CONFIG_INITRAMFS_COMPRESSION_ZSTD is not set # CONFIG_INITRAMFS_COMPRESSION_NONE is not set +# CONFIG_INITRD_ASYNC is not set # CONFIG_BOOT_CONFIG is not set -CONFIG_INITRAMFS_PRESERVE_MTIME=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_LD_ORPHAN_WARN=y CONFIG_SYSCTL=y CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_BPF=y CONFIG_EXPERT=y CONFIG_UID16=y CONFIG_MULTIUSER=y @@ -233,11 +209,13 @@ CONFIG_SYSFS_SYSCALL=y CONFIG_FHANDLE=y CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y +CONFIG_PRINTK_NMI=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y +CONFIG_HAVE_FUTEX_CMPXCHG=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y @@ -250,13 +228,18 @@ CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_ALL is not set CONFIG_KALLSYMS_BASE_RELATIVE=y +CONFIG_BPF_SYSCALL=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y +# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set +CONFIG_USERMODE_DRIVER=y +# CONFIG_BPF_PRELOAD is not set +# CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_KCMP=y CONFIG_RSEQ=y # CONFIG_DEBUG_RSEQ is not set CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y -CONFIG_GUEST_PERF_EVENTS=y # CONFIG_PC104 is not set # @@ -266,13 +249,25 @@ CONFIG_PERF_EVENTS=y # CONFIG_DEBUG_PERF_USE_VMALLOC is not set # end of Kernel Performance Events And Counters +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_SYSFS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_MEMCG_SYSFS_ON is not set +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_SLAB_MERGE_DEFAULT=y +# CONFIG_SLAB_FREELIST_RANDOM is not set +# CONFIG_SLAB_FREELIST_HARDENED is not set +# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set +CONFIG_SLUB_CPU_PARTIAL=y CONFIG_SYSTEM_DATA_VERIFICATION=y CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y # end of General setup CONFIG_ARM64=y -CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_64BIT=y CONFIG_MMU=y CONFIG_ARM64_PAGE_SHIFT=12 @@ -285,12 +280,16 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 CONFIG_STACKTRACE_SUPPORT=y CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_SMP=y CONFIG_KERNEL_MODE_NEON=y CONFIG_FIX_EARLYCON_MEM=y @@ -302,29 +301,32 @@ CONFIG_ARCH_PROC_KCORE_TEXT=y # Platform selection # # CONFIG_ARCH_ACTIONS is not set +# CONFIG_ARCH_AGILEX is not set # CONFIG_ARCH_SUNXI is not set # CONFIG_ARCH_ALPINE is not set -# CONFIG_ARCH_APPLE is not set -# CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BCM2835 is not set +# CONFIG_ARCH_BCM_IPROC is not set # CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_BITMAIN is not set +# CONFIG_ARCH_BRCMSTB is not set # CONFIG_ARCH_EXYNOS is not set # CONFIG_ARCH_SPARX5 is not set # CONFIG_ARCH_K3 is not set +# CONFIG_ARCH_LAYERSCAPE is not set # CONFIG_ARCH_LG1K is not set # CONFIG_ARCH_HISI is not set # CONFIG_ARCH_KEEMBAY is not set # CONFIG_ARCH_MEDIATEK is not set # CONFIG_ARCH_MESON is not set # CONFIG_ARCH_MVEBU is not set -# CONFIG_ARCH_NXP is not set -# CONFIG_ARCH_NPCM is not set +# CONFIG_ARCH_MXC is not set # CONFIG_ARCH_QCOM is not set # CONFIG_ARCH_REALTEK is not set # CONFIG_ARCH_RENESAS is not set CONFIG_ARCH_ROCKCHIP=y +# CONFIG_ARCH_S32 is not set # CONFIG_ARCH_SEATTLE is not set -# CONFIG_ARCH_INTEL_SOCFPGA is not set +# CONFIG_ARCH_STRATIX10 is not set # CONFIG_ARCH_SYNQUACER is not set # CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_SPRD is not set @@ -334,6 +336,7 @@ CONFIG_ARCH_ROCKCHIP=y # CONFIG_ARCH_VEXPRESS is not set # CONFIG_ARCH_VISCONTI is not set # CONFIG_ARCH_XGENE is not set +# CONFIG_ARCH_ZX is not set # CONFIG_ARCH_ZYNQMP is not set # end of Platform selection @@ -344,7 +347,6 @@ CONFIG_ARCH_ROCKCHIP=y # # ARM errata workarounds via the alternatives framework # -CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y # CONFIG_ARM64_ERRATUM_826319 is not set # CONFIG_ARM64_ERRATUM_827319 is not set # CONFIG_ARM64_ERRATUM_824069 is not set @@ -354,7 +356,6 @@ CONFIG_ARM64_ERRATUM_834220=y CONFIG_ARM64_ERRATUM_1742098=y CONFIG_ARM64_ERRATUM_845719=y CONFIG_ARM64_ERRATUM_843419=y -CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y CONFIG_ARM64_ERRATUM_1024718=y CONFIG_ARM64_ERRATUM_1418040=y CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y @@ -362,18 +363,15 @@ CONFIG_ARM64_ERRATUM_1165522=y CONFIG_ARM64_ERRATUM_1319367=y CONFIG_ARM64_ERRATUM_1530923=y CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y -CONFIG_ARM64_ERRATUM_2441007=y CONFIG_ARM64_ERRATUM_1286807=y CONFIG_ARM64_ERRATUM_1463225=y CONFIG_ARM64_ERRATUM_1542419=y CONFIG_ARM64_ERRATUM_1508412=y # CONFIG_ARM64_ERRATUM_2051678 is not set -CONFIG_ARM64_ERRATUM_2077057=y -CONFIG_ARM64_ERRATUM_2658417=y CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE=y CONFIG_ARM64_ERRATUM_2054223=y CONFIG_ARM64_ERRATUM_2067961=y -CONFIG_ARM64_ERRATUM_2441009=y +# CONFIG_ARM64_ERRATUM_2454944 is not set CONFIG_ARM64_ERRATUM_2457168=y # CONFIG_CAVIUM_ERRATUM_22375 is not set # CONFIG_CAVIUM_ERRATUM_23154 is not set @@ -386,7 +384,6 @@ CONFIG_QCOM_FALKOR_ERRATUM_1003=y CONFIG_QCOM_FALKOR_ERRATUM_1009=y CONFIG_QCOM_QDF2400_ERRATUM_0065=y CONFIG_QCOM_FALKOR_ERRATUM_E1041=y -CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y CONFIG_SOCIONEXT_SYNQUACER_PREITS=y # end of ARM errata workarounds via the alternatives framework @@ -401,19 +398,28 @@ CONFIG_ARM64_PA_BITS=48 # CONFIG_CPU_BIG_ENDIAN is not set CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SCHED_MC=y -# CONFIG_SCHED_CLUSTER is not set # CONFIG_SCHED_SMT is not set CONFIG_NR_CPUS=8 CONFIG_HOTPLUG_CPU=y # CONFIG_NUMA is not set +CONFIG_HOLES_IN_ZONE=y # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set CONFIG_HZ_300=y # CONFIG_HZ_1000 is not set CONFIG_HZ=300 CONFIG_SCHED_HRTICK=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_HAVE_ARCH_PFN_VALID=y CONFIG_HW_PERF_EVENTS=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_CC_HAVE_SHADOW_CALL_STACK=y # CONFIG_PARAVIRT is not set # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set @@ -421,7 +427,7 @@ CONFIG_CC_HAVE_SHADOW_CALL_STACK=y # CONFIG_KEXEC_FILE is not set # CONFIG_CRASH_DUMP is not set # CONFIG_XEN is not set -CONFIG_ARCH_FORCE_MAX_ORDER=11 +CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_UNMAP_KERNEL_AT_EL0=y CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y CONFIG_RODATA_FULL_DEFAULT_ENABLED=y @@ -429,7 +435,6 @@ CONFIG_RODATA_FULL_DEFAULT_ENABLED=y CONFIG_ARM64_TAGGED_ADDR_ABI=y CONFIG_COMPAT=y CONFIG_KUSER_HELPERS=y -# CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set CONFIG_ARMV8_DEPRECATED=y CONFIG_SWP_EMULATION=y CONFIG_CP15_BARRIER_EMULATION=y @@ -442,13 +447,13 @@ CONFIG_ARM64_HW_AFDBM=y CONFIG_ARM64_PAN=y CONFIG_AS_HAS_LDAPR=y CONFIG_AS_HAS_LSE_ATOMICS=y +CONFIG_ARM64_VHE=y # end of ARMv8.1 architectural features # # ARMv8.2 architectural features # -CONFIG_AS_HAS_ARMV8_2=y -CONFIG_AS_HAS_SHA3=y +CONFIG_ARM64_UAO=y # CONFIG_ARM64_PMEM is not set CONFIG_ARM64_RAS_EXTN=y CONFIG_ARM64_CNP=y @@ -458,7 +463,6 @@ CONFIG_ARM64_CNP=y # ARMv8.3 architectural features # CONFIG_ARM64_PTR_AUTH=y -CONFIG_ARM64_PTR_AUTH_KERNEL=y CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y CONFIG_AS_HAS_PAC=y @@ -480,18 +484,12 @@ CONFIG_AS_HAS_ARMV8_5=y CONFIG_ARM64_BTI=y CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y CONFIG_ARM64_E0PD=y +CONFIG_ARCH_RANDOM=y CONFIG_ARM64_AS_HAS_MTE=y CONFIG_ARM64_MTE=y # end of ARMv8.5 architectural features -# -# ARMv8.7 architectural features -# -CONFIG_ARM64_EPAN=y -# end of ARMv8.7 architectural features - CONFIG_ARM64_SVE=y -CONFIG_ARM64_SME=y CONFIG_ARM64_MODULE_PLTS=y CONFIG_ARM64_PSEUDO_NMI=y # CONFIG_ARM64_DEBUG_PRIORITY_MASKING is not set @@ -500,7 +498,6 @@ CONFIG_RANDOMIZE_BASE=y CONFIG_RANDOMIZE_MODULE_REGION_FULL=y CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y CONFIG_STACKPROTECTOR_PER_TASK=y -CONFIG_ARCH_NR_GPIO=0 # end of Kernel Features # @@ -512,6 +509,9 @@ CONFIG_EFI=y CONFIG_DMI=y # end of Boot options +CONFIG_SYSVIPC_COMPAT=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y + # # Power management options # @@ -522,7 +522,6 @@ CONFIG_SUSPEND_FREEZER=y CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y # CONFIG_PM_AUTOSLEEP is not set -# CONFIG_PM_USERSPACE_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set CONFIG_PM=y CONFIG_PM_DEBUG=y @@ -554,11 +553,11 @@ CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y CONFIG_CPU_IDLE_GOV_MENU=y # CONFIG_CPU_IDLE_GOV_TEO is not set CONFIG_DT_IDLE_STATES=y -CONFIG_DT_IDLE_GENPD=y # # ARM CPU Idle Drivers # +# CONFIG_ARM_CPUIDLE is not set CONFIG_ARM_PSCI_CPUIDLE=y CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y # end of ARM CPU Idle Drivers @@ -571,6 +570,7 @@ CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_GOV_ATTR_SET=y CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_TIMES is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set @@ -590,15 +590,63 @@ CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y # CPU frequency scaling drivers # CONFIG_CPUFREQ_DT=y +# CONFIG_CPUFREQ_DUMMY is not set CONFIG_ARM_ROCKCHIP_CPUFREQ=y # CONFIG_ARM_SCMI_CPUFREQ is not set # end of CPU Frequency scaling # end of CPU Power Management +# +# Firmware Drivers +# +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCMI_POWER_DOMAIN=y +# CONFIG_ARM_SCPI_PROTOCOL is not set +# CONFIG_ARM_SDE_INTERFACE is not set +# CONFIG_FIRMWARE_MEMMAP is not set +CONFIG_DMIID=y +# CONFIG_DMI_SYSFS is not set +# CONFIG_FW_CFG_SYSFS is not set +# CONFIG_QCOM_SCM is not set +CONFIG_ROCKCHIP_SIP=y +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_ESRT=y +CONFIG_EFI_VARS_PSTORE=y +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EFI_PARAMS_FROM_FDT=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_GENERIC_STUB=y +CONFIG_EFI_ARMSTUB_DTB_LOADER=y +CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y +# CONFIG_EFI_BOOTLOADER_CONTROL is not set +# CONFIG_EFI_CAPSULE_LOADER is not set +# CONFIG_EFI_TEST is not set +# CONFIG_RESET_ATTACK_MITIGATION is not set +# CONFIG_EFI_DISABLE_PCI_DMA is not set +# end of EFI (Extensible Firmware Interface) Support + +CONFIG_EFI_EARLYCON=y +CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PSCI_CHECKER is not set +CONFIG_HAVE_ARM_SMCCC=y +CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y +CONFIG_ARM_SMCCC_SOC_ID=y + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + CONFIG_ARCH_SUPPORTS_ACPI=y # CONFIG_ACPI is not set CONFIG_IRQ_BYPASS_MANAGER=y -CONFIG_HAVE_KVM=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y CONFIG_HAVE_KVM_IRQFD=y CONFIG_HAVE_KVM_IRQ_ROUTING=y @@ -611,27 +659,39 @@ CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y CONFIG_HAVE_KVM_IRQ_BYPASS=y CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y -CONFIG_KVM_XFER_TO_GUEST_WORK=y -CONFIG_VIRTUALIZATION=y -CONFIG_KVM=y -# CONFIG_NVHE_EL2_DEBUG is not set +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA256_ARM64=y +# CONFIG_CRYPTO_SHA512_ARM64 is not set +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +# CONFIG_CRYPTO_SHA512_ARM64_CE is not set +# CONFIG_CRYPTO_SHA3_ARM64 is not set +# CONFIG_CRYPTO_SM3_ARM64_CE is not set +# CONFIG_CRYPTO_SM4_ARM64_CE is not set +CONFIG_CRYPTO_GHASH_ARM64_CE=y +# CONFIG_CRYPTO_CRCT10DIF_ARM64_CE is not set +# CONFIG_CRYPTO_AES_ARM64 is not set +CONFIG_CRYPTO_AES_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set +CONFIG_CRYPTO_CHACHA20_NEON=m +CONFIG_CRYPTO_POLY1305_NEON=m +# CONFIG_CRYPTO_NHPOLY1305_NEON is not set +# CONFIG_CRYPTO_AES_ARM64_BS is not set # # General architecture-dependent options # -CONFIG_ARCH_HAS_SUBPAGE_FAULTS=y +CONFIG_SET_FS=y # CONFIG_KPROBES is not set # CONFIG_JUMP_LABEL is not set CONFIG_UPROBES=y CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y -CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_NMI=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y @@ -641,7 +701,6 @@ CONFIG_ARCH_HAS_KEEPINITRD=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y -CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y @@ -662,37 +721,28 @@ CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP=y CONFIG_SECCOMP_FILTER=y -# CONFIG_SECCOMP_CACHE_DEBUG is not set CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y -# CONFIG_SHADOW_CALL_STACK is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_LTO_NONE=y -CONFIG_ARCH_SUPPORTS_CFI_CLANG=y -CONFIG_HAVE_CONTEXT_TRACKING_USER=y +CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOVE_PUD=y CONFIG_HAVE_MOVE_PMD=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_ARCH_HUGE_VMAP=y -CONFIG_HAVE_ARCH_HUGE_VMALLOC=y -CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y -CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y -CONFIG_SOFTIRQ_ON_OWN_STACK=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 -CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -700,9 +750,6 @@ CONFIG_COMPAT_OLD_SIGACTION=y CONFIG_COMPAT_32BIT_TIME=y CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y -CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y -CONFIG_RANDOMIZE_KSTACK_OFFSET=y -# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -712,12 +759,7 @@ CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y CONFIG_ARCH_USE_MEMREMAP_PROT=y # CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_HAS_RELR=y -CONFIG_HAVE_PREEMPT_DYNAMIC=y -CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y -CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y -CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y # # GCOV-based kernel profiling @@ -728,7 +770,9 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_HAVE_GCC_PLUGINS=y CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set # CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set # end of General architecture-dependent options CONFIG_RT_MUTEXES=y @@ -737,28 +781,25 @@ CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set CONFIG_MODVERSIONS=y CONFIG_ASM_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set -CONFIG_MODULE_COMPRESS_NONE=y -# CONFIG_MODULE_COMPRESS_GZIP is not set -# CONFIG_MODULE_COMPRESS_XZ is not set -# CONFIG_MODULE_COMPRESS_ZSTD is not set +# CONFIG_MODULE_COMPRESS is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set -CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_UNUSED_SYMBOLS is not set # CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y -CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_SCSI_REQUEST=y CONFIG_BLK_CGROUP_RWSTAT=y -CONFIG_BLK_DEV_BSG_COMMON=y +CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y # CONFIG_BLK_DEV_INTEGRITY is not set # CONFIG_BLK_DEV_ZONED is not set CONFIG_BLK_DEV_THROTTLING=y # CONFIG_BLK_DEV_THROTTLING_LOW is not set +CONFIG_BLK_CMDLINE_PARSER=y # CONFIG_BLK_WBT is not set # CONFIG_BLK_CGROUP_IOLATENCY is not set # CONFIG_BLK_CGROUP_IOCOST is not set @@ -795,13 +836,12 @@ CONFIG_CMDLINE_PARTITION=y CONFIG_BLOCK_COMPAT=y CONFIG_BLK_MQ_PCI=y CONFIG_BLK_PM=y -CONFIG_BLOCK_HOLDER_DEPRECATED=y -CONFIG_BLK_MQ_STACKING=y # # IO Schedulers # CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_DEADLINE_CGROUP=y CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_IOSCHED_BFQ is not set # end of IO Schedulers @@ -845,6 +885,29 @@ CONFIG_ARCH_USE_QUEUED_RWLOCKS=y CONFIG_QUEUED_RWLOCKS=y CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +# CONFIG_GKI_HIDDEN_DRM_CONFIGS is not set +# CONFIG_GKI_HIDDEN_REGMAP_CONFIGS is not set +# CONFIG_GKI_HIDDEN_CRYPTO_CONFIGS is not set +# CONFIG_GKI_HIDDEN_SND_CONFIGS is not set +# CONFIG_GKI_HIDDEN_SND_SOC_CONFIGS is not set +# CONFIG_GKI_HIDDEN_MMC_CONFIGS is not set +# CONFIG_GKI_HIDDEN_GPIO_CONFIGS is not set +# CONFIG_GKI_HIDDEN_QCOM_CONFIGS is not set +# CONFIG_GKI_HIDDEN_MEDIA_CONFIGS is not set +# CONFIG_GKI_HIDDEN_VIRTUAL_CONFIGS is not set +# CONFIG_GKI_LEGACY_WEXT_ALLCONFIG is not set +# CONFIG_GKI_HIDDEN_USB_CONFIGS is not set +# CONFIG_GKI_HIDDEN_SOC_BUS_CONFIGS is not set +# CONFIG_GKI_HIDDEN_RPMSG_CONFIGS is not set +# CONFIG_GKI_HIDDEN_GPU_CONFIGS is not set +# CONFIG_GKI_HIDDEN_IRQ_CONFIGS is not set +# CONFIG_GKI_HIDDEN_HYPERVISOR_CONFIGS is not set +# CONFIG_GKI_HIDDEN_NET_CONFIGS is not set +# CONFIG_GKI_HIDDEN_PHY_CONFIGS is not set +# CONFIG_GKI_HIDDEN_MM_CONFIGS is not set +# CONFIG_GKI_HIDDEN_DMA_CONFIGS is not set +# CONFIG_GKI_HIDDEN_ETHERNET_CONFIGS is not set +# CONFIG_GKI_HACKS_TO_FIX is not set CONFIG_FREEZER=y # @@ -853,7 +916,6 @@ CONFIG_FREEZER=y CONFIG_BINFMT_ELF=y CONFIG_COMPAT_BINFMT_ELF=y CONFIG_ARCH_BINFMT_ELF_STATE=y -CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y CONFIG_ARCH_HAVE_ELF_PROT=y CONFIG_ARCH_USE_GNU_PROPERTY=y CONFIG_ELFCORE=y @@ -866,27 +928,9 @@ CONFIG_COREDUMP=y # # Memory Management options # -CONFIG_SWAP=y -# CONFIG_ZSWAP is not set -CONFIG_ZSMALLOC=y -# CONFIG_ZSMALLOC_STAT is not set - -# -# SLAB allocator options -# -# CONFIG_SLAB is not set -CONFIG_SLUB=y -# CONFIG_SLOB is not set -CONFIG_SLAB_MERGE_DEFAULT=y -# CONFIG_SLAB_FREELIST_RANDOM is not set -# CONFIG_SLAB_FREELIST_HARDENED is not set -CONFIG_SLUB_SYSFS=y -# CONFIG_SLUB_STATS is not set -CONFIG_SLUB_CPU_PARTIAL=y -# end of SLAB allocator options - -# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set -# CONFIG_COMPAT_BRK is not set +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y @@ -894,25 +938,22 @@ CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y CONFIG_MEMORY_ISOLATION=y -CONFIG_EXCLUSIVE_SYSTEM_RAM=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_SPLIT_PTLOCK_CPUS=4 -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y # CONFIG_COMPACTION is not set # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y -CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y CONFIG_CONTIG_ALLOC=y CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_BOUNCE=y CONFIG_MMU_NOTIFIER=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y # CONFIG_MEMORY_FAILURE is not set -CONFIG_ARCH_WANTS_THP_SWAP=y # CONFIG_TRANSPARENT_HUGEPAGE is not set +# CONFIG_CLEANCACHE is not set +# CONFIG_FRONTSWAP is not set CONFIG_CMA=y # CONFIG_CMA_INACTIVE is not set # CONFIG_CMA_DEBUG is not set @@ -920,24 +961,21 @@ CONFIG_CMA_DEBUGFS=y CONFIG_CMA_DEBUGFS_BITMAP_HEX=y CONFIG_CMA_SYSFS=y CONFIG_CMA_AREAS=7 +# CONFIG_ZPOOL is not set +# CONFIG_ZBUD is not set +CONFIG_ZSMALLOC=y +# CONFIG_ZSMALLOC_STAT is not set CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_IDLE_PAGE_TRACKING is not set -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y CONFIG_ARCH_HAS_PTE_DEVMAP=y -CONFIG_ARCH_HAS_ZONE_DMA_SET=y -CONFIG_ZONE_DMA=y -CONFIG_ZONE_DMA32=y +CONFIG_FRAME_VECTOR=y CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y -CONFIG_VM_EVENT_COUNTERS=y # CONFIG_PERCPU_STATS is not set -# CONFIG_GUP_TEST is not set +CONFIG_ARCH_SUPPORTS_SPECULATIVE_PAGE_FAULT=y +CONFIG_SPECULATIVE_PAGE_FAULT=y +# CONFIG_GUP_BENCHMARK is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y -# CONFIG_ANON_VMA_NAME is not set -# CONFIG_USERFAULTFD is not set -# CONFIG_LRU_GEN is not set -CONFIG_LOCK_MM_AND_FIND_VMA=y # # Data Access Monitoring @@ -949,7 +987,6 @@ CONFIG_LOCK_MM_AND_FIND_VMA=y CONFIG_NET=y CONFIG_COMPAT_NETLINK_MESSAGES=y CONFIG_NET_INGRESS=y -CONFIG_NET_EGRESS=y CONFIG_NET_REDIRECT=y CONFIG_SKB_EXTENSIONS=y @@ -960,7 +997,6 @@ CONFIG_PACKET=y CONFIG_PACKET_DIAG=m CONFIG_UNIX=y CONFIG_UNIX_SCM=y -CONFIG_AF_UNIX_OOB=y CONFIG_UNIX_DIAG=m CONFIG_TLS=m CONFIG_TLS_DEVICE=y @@ -1066,7 +1102,6 @@ CONFIG_IPV6_PIMSM_V2=y # CONFIG_IPV6_SEG6_LWTUNNEL is not set # CONFIG_IPV6_SEG6_HMAC is not set # CONFIG_IPV6_RPL_LWTUNNEL is not set -# CONFIG_IPV6_IOAM6_LWTUNNEL is not set CONFIG_NETLABEL=y CONFIG_MPTCP=y CONFIG_INET_MPTCP_DIAG=m @@ -1081,18 +1116,16 @@ CONFIG_BRIDGE_NETFILTER=m # Core Netfilter Configuration # CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_EGRESS=y -CONFIG_NETFILTER_SKIP_EGRESS=y CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_FAMILY_BRIDGE=y CONFIG_NETFILTER_FAMILY_ARP=y -# CONFIG_NETFILTER_NETLINK_HOOK is not set CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_OSF=m CONFIG_NF_CONNTRACK=m -CONFIG_NF_LOG_SYSLOG=m +CONFIG_NF_LOG_COMMON=m +# CONFIG_NF_LOG_NETDEV is not set CONFIG_NETFILTER_CONNCOUNT=m CONFIG_NF_CONNTRACK_MARK=y # CONFIG_NF_CONNTRACK_SECMARK is not set @@ -1135,6 +1168,7 @@ CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_FLOW_OFFLOAD=m +# CONFIG_NFT_COUNTER is not set CONFIG_NFT_CONNLIMIT=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m @@ -1160,12 +1194,9 @@ CONFIG_NF_DUP_NETDEV=m CONFIG_NFT_DUP_NETDEV=m CONFIG_NFT_FWD_NETDEV=m CONFIG_NFT_FIB_NETDEV=m -# CONFIG_NFT_REJECT_NETDEV is not set CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m -# CONFIG_NF_FLOW_TABLE_PROCFS is not set CONFIG_NETFILTER_XTABLES=y -CONFIG_NETFILTER_XTABLES_COMPAT=y # # Xtables combined modules @@ -1242,6 +1273,7 @@ CONFIG_NETFILTER_XT_MATCH_POLICY=m CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_QUOTA2 is not set CONFIG_NETFILTER_XT_MATCH_RATEEST=m CONFIG_NETFILTER_XT_MATCH_REALM=m CONFIG_NETFILTER_XT_MATCH_RECENT=m @@ -1304,7 +1336,6 @@ CONFIG_IP_VS_SH=m CONFIG_IP_VS_MH=m CONFIG_IP_VS_SED=m CONFIG_IP_VS_NQ=m -# CONFIG_IP_VS_TWOS is not set # # IPVS SH scheduler @@ -1334,6 +1365,7 @@ CONFIG_NFT_REJECT_IPV4=m CONFIG_NFT_DUP_IPV4=m CONFIG_NFT_FIB_IPV4=m CONFIG_NF_TABLES_ARP=y +# CONFIG_NF_FLOW_TABLE_IPV4 is not set CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m @@ -1373,6 +1405,7 @@ CONFIG_NF_TABLES_IPV6=y CONFIG_NFT_REJECT_IPV6=m CONFIG_NFT_DUP_IPV6=m CONFIG_NFT_FIB_IPV6=m +# CONFIG_NF_FLOW_TABLE_IPV6 is not set CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m @@ -1403,6 +1436,7 @@ CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m CONFIG_NFT_BRIDGE_REJECT=m +# CONFIG_NF_LOG_BRIDGE is not set CONFIG_NF_CONNTRACK_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m @@ -1477,11 +1511,12 @@ CONFIG_BRIDGE=m CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_BRIDGE_MRP=y -# CONFIG_BRIDGE_CFM is not set +CONFIG_HAVE_NET_DSA=y # CONFIG_NET_DSA is not set CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y CONFIG_VLAN_8021Q_MVRP=y +# CONFIG_DECNET is not set CONFIG_LLC=m CONFIG_LLC2=m CONFIG_ATALK=m @@ -1556,6 +1591,7 @@ CONFIG_NET_SCH_PLUG=m # CONFIG_NET_CLS=y CONFIG_NET_CLS_BASIC=m +# CONFIG_NET_CLS_TCINDEX is not set CONFIG_NET_CLS_ROUTE4=m # CONFIG_NET_CLS_FW is not set CONFIG_NET_CLS_U32=m @@ -1610,7 +1646,9 @@ CONFIG_BATMAN_ADV_BLA=y CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y CONFIG_BATMAN_ADV_MCAST=y +# CONFIG_BATMAN_ADV_DEBUGFS is not set CONFIG_BATMAN_ADV_DEBUG=y +# CONFIG_BATMAN_ADV_SYSFS is not set CONFIG_BATMAN_ADV_TRACING=y CONFIG_OPENVSWITCH=m CONFIG_OPENVSWITCH_GRE=m @@ -1633,16 +1671,14 @@ CONFIG_QRTR_TUN=m CONFIG_QRTR_MHI=m CONFIG_NET_NCSI=y CONFIG_NCSI_OEM_CMD_GET_MAC=y -# CONFIG_NCSI_OEM_CMD_KEEP_PHY is not set -CONFIG_PCPU_DEV_REFCNT=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y -CONFIG_SOCK_RX_QUEUE_MAPPING=y CONFIG_XPS=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y +# CONFIG_BPF_JIT is not set CONFIG_BPF_STREAM_PARSER=y CONFIG_NET_FLOW_LIMIT=y @@ -1661,6 +1697,68 @@ CONFIG_CAN_BCM=m CONFIG_CAN_GW=m # CONFIG_CAN_J1939 is not set # CONFIG_CAN_ISOTP is not set + +# +# CAN Device Drivers +# +CONFIG_CAN_VCAN=m +# CONFIG_CAN_VXCAN is not set +CONFIG_CAN_SLCAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_CALC_BITTIMING=y +# CONFIG_CAN_FLEXCAN is not set +CONFIG_CAN_GRCAN=m +# CONFIG_CAN_KVASER_PCIEFD is not set +CONFIG_CAN_XILINXCAN=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +# CONFIG_CAN_IFI_CANFD is not set +CONFIG_CAN_M_CAN=m +# CONFIG_CAN_M_CAN_PLATFORM is not set +# CONFIG_CAN_M_CAN_TCAN4X5X is not set +# CONFIG_CAN_PEAK_PCIEFD is not set +# CONFIG_CAN_ROCKCHIP is not set +# CONFIG_CANFD_ROCKCHIP is not set +CONFIG_CAN_SJA1000=m +CONFIG_CAN_EMS_PCI=m +# CONFIG_CAN_F81601 is not set +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_SJA1000_ISA=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_SOFTING=m + +# +# CAN SPI interfaces +# +CONFIG_CAN_HI311X=m +CONFIG_CAN_MCP251X=m +CONFIG_CAN_MCP251XFD=m +# CONFIG_CAN_MCP251XFD_SANITY is not set +# end of CAN SPI interfaces + +# +# CAN USB interfaces +# +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_EMS_USB=m +# CONFIG_CAN_ESD_USB2 is not set +CONFIG_CAN_GS_USB=m +CONFIG_CAN_KVASER_USB=m +# CONFIG_CAN_MCBA_USB is not set +CONFIG_CAN_PEAK_USB=m +# CONFIG_CAN_UCAN is not set +# end of CAN USB interfaces + +CONFIG_CAN_DEBUG_DEVICES=y +# end of CAN Device Drivers + CONFIG_BT=y CONFIG_BT_BREDR=y CONFIG_BT_RFCOMM=m @@ -1674,7 +1772,6 @@ CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m CONFIG_BT_LEDS=y # CONFIG_BT_MSFTEXT is not set -# CONFIG_BT_AOSPEXT is not set CONFIG_BT_DEBUGFS=y # CONFIG_BT_SELFTEST is not set @@ -1684,7 +1781,6 @@ CONFIG_BT_DEBUGFS=y CONFIG_BT_INTEL=m CONFIG_BT_BCM=m CONFIG_BT_RTL=m -CONFIG_BT_MTK=m CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y CONFIG_BT_HCIBTUSB_BCM=y @@ -1714,12 +1810,12 @@ CONFIG_BT_MRVL=m CONFIG_BT_ATH3K=m CONFIG_BT_MTKSDIO=m # CONFIG_BT_MTKUART is not set +# CONFIG_BT_HCIBTUSB_RTLBTUSB is not set # end of Bluetooth device drivers # CONFIG_AF_RXRPC is not set # CONFIG_AF_KCM is not set CONFIG_STREAM_PARSER=y -# CONFIG_MCTP is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WIRELESS_EXT=y @@ -1763,6 +1859,7 @@ CONFIG_MAC80211_VERBOSE_DEBUG=y # CONFIG_MAC80211_TDLS_DEBUG is not set # CONFIG_MAC80211_DEBUG_COUNTERS is not set CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +# CONFIG_WIMAX is not set CONFIG_RFKILL=y CONFIG_RFKILL_LEDS=y # CONFIG_RFKILL_INPUT is not set @@ -1781,12 +1878,11 @@ CONFIG_LWTUNNEL_BPF=y CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y CONFIG_SOCK_VALIDATE_XMIT=y -CONFIG_NET_SELFTESTS=y CONFIG_NET_SOCK_MSG=y CONFIG_PAGE_POOL=y -# CONFIG_PAGE_POOL_STATS is not set # CONFIG_FAILOVER is not set CONFIG_ETHTOOL_NETLINK=y +CONFIG_HAVE_EBPF_JIT=y # # Device Drivers @@ -1821,7 +1917,6 @@ CONFIG_PCIE_BUS_DEFAULT=y # CONFIG_PCIE_BUS_SAFE is not set # CONFIG_PCIE_BUS_PERFORMANCE is not set # CONFIG_PCIE_BUS_PEER2PEER is not set -# CONFIG_VGA_ARB is not set # CONFIG_HOTPLUG_PCI is not set # @@ -1837,7 +1932,6 @@ CONFIG_PCIE_BUS_DEFAULT=y CONFIG_PCIE_ROCKCHIP=y CONFIG_PCIE_ROCKCHIP_HOST=y # CONFIG_ROCKCHIP_PCIE_DMA_OBJ is not set -# CONFIG_PCIE_MICROCHIP_HOST is not set # # DesignWare PCI Core Support @@ -1858,6 +1952,7 @@ CONFIG_PCIE_RK_THREADED_INIT=y # # Mobiveil PCIe Core Support # +# CONFIG_PCIE_LAYERSCAPE_GEN4 is not set # end of Mobiveil PCIe Core Support # @@ -1880,7 +1975,6 @@ CONFIG_PCIE_RK_THREADED_INIT=y # CONFIG_PCI_SW_SWITCHTEC is not set # end of PCI switch controller drivers -# CONFIG_CXL_BUS is not set # CONFIG_PCCARD is not set # CONFIG_RAPIDIO is not set @@ -1890,7 +1984,6 @@ CONFIG_PCIE_RK_THREADED_INIT=y # CONFIG_UEVENT_HELPER is not set CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y -# CONFIG_DEVTMPFS_SAFE is not set CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y @@ -1902,7 +1995,6 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set # CONFIG_FW_LOADER_COMPRESS is not set CONFIG_FW_CACHE=y -# CONFIG_FW_UPLOAD is not set # end of Firmware loader CONFIG_WANT_DEV_COREDUMP=y @@ -1931,114 +2023,45 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # # CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_MOXTET is not set +# CONFIG_SIMPLE_PM_BUS is not set # CONFIG_VEXPRESS_CONFIG is not set CONFIG_MHI_BUS=m # CONFIG_MHI_BUS_DEBUG is not set -# CONFIG_MHI_BUS_PCI_GENERIC is not set -# CONFIG_MHI_BUS_EP is not set # end of Bus devices CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y +# CONFIG_GNSS is not set +CONFIG_MTD=y +# CONFIG_MTD_TESTS is not set # -# Firmware Drivers +# Partition parsers # +# CONFIG_MTD_AR7_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_OF_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# end of Partition parsers # -# ARM System Control and Management Interface Protocol +# User Modules And Translation Layers # -CONFIG_ARM_SCMI_PROTOCOL=y -CONFIG_ARM_SCMI_HAVE_TRANSPORT=y -CONFIG_ARM_SCMI_HAVE_SHMEM=y -CONFIG_ARM_SCMI_HAVE_MSG=y -CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y -CONFIG_ARM_SCMI_TRANSPORT_OPTEE=y -CONFIG_ARM_SCMI_TRANSPORT_SMC=y -# CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE is not set -CONFIG_ARM_SCMI_POWER_DOMAIN=y -# CONFIG_ARM_SCMI_POWER_CONTROL is not set -# end of ARM System Control and Management Interface Protocol - -# CONFIG_ARM_SCPI_PROTOCOL is not set -# CONFIG_FIRMWARE_MEMMAP is not set -CONFIG_DMIID=y -# CONFIG_DMI_SYSFS is not set -# CONFIG_FW_CFG_SYSFS is not set -CONFIG_ROCKCHIP_SIP=y -# CONFIG_SYSFB_SIMPLEFB is not set -# CONFIG_ARM_FFA_TRANSPORT is not set -# CONFIG_GOOGLE_FIRMWARE is not set +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +# CONFIG_MTD_OOPS is not set +# CONFIG_MTD_SWAP is not set +# CONFIG_MTD_PARTITIONED_MASTER is not set # -# EFI (Extensible Firmware Interface) Support -# -CONFIG_EFI_ESRT=y -CONFIG_EFI_VARS_PSTORE=y -# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set -CONFIG_EFI_PARAMS_FROM_FDT=y -CONFIG_EFI_RUNTIME_WRAPPERS=y -CONFIG_EFI_GENERIC_STUB=y -# CONFIG_EFI_ZBOOT is not set -CONFIG_EFI_ARMSTUB_DTB_LOADER=y -CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y -# CONFIG_EFI_BOOTLOADER_CONTROL is not set -# CONFIG_EFI_CAPSULE_LOADER is not set -# CONFIG_EFI_TEST is not set -# CONFIG_RESET_ATTACK_MITIGATION is not set -# CONFIG_EFI_DISABLE_PCI_DMA is not set -CONFIG_EFI_EARLYCON=y -# CONFIG_EFI_DISABLE_RUNTIME is not set -# CONFIG_EFI_COCO_SECRET is not set -# end of EFI (Extensible Firmware Interface) Support - -CONFIG_ARM_PSCI_FW=y -# CONFIG_ARM_PSCI_CHECKER is not set -CONFIG_HAVE_ARM_SMCCC=y -CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y -CONFIG_ARM_SMCCC_SOC_ID=y - -# -# Tegra firmware driver -# -# end of Tegra firmware driver -# end of Firmware Drivers - -# CONFIG_GNSS is not set -CONFIG_MTD=y -# CONFIG_MTD_TESTS is not set - -# -# Partition parsers -# -# CONFIG_MTD_AR7_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_OF_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# end of Partition parsers - -# -# User Modules And Translation Layers -# -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y - -# -# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. -# -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_SM_FTL is not set -# CONFIG_MTD_OOPS is not set -# CONFIG_MTD_SWAP is not set -# CONFIG_MTD_PARTITIONED_MASTER is not set - -# -# RAM/ROM/Flash chip drivers +# RAM/ROM/Flash chip drivers # # CONFIG_MTD_CFI is not set # CONFIG_MTD_JEDECPROBE is not set @@ -2066,7 +2089,6 @@ CONFIG_MTD_CFI_I2=y # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_DATAFLASH is not set # CONFIG_MTD_MCHP23K256 is not set -# CONFIG_MTD_MCHP48L640 is not set # CONFIG_MTD_SST25L is not set # CONFIG_MTD_SLRAM is not set # CONFIG_MTD_PHRAM is not set @@ -2090,10 +2112,6 @@ CONFIG_MTD_SPI_NAND=y # # ECC engine support # -CONFIG_MTD_NAND_ECC=y -# CONFIG_MTD_NAND_ECC_SW_HAMMING is not set -# CONFIG_MTD_NAND_ECC_SW_BCH is not set -# CONFIG_MTD_NAND_ECC_MXIC is not set CONFIG_MTD_NAND_BBT_USING_FLASH=y # end of ECC engine support # end of NAND @@ -2107,9 +2125,6 @@ CONFIG_MTD_NAND_BBT_USING_FLASH=y CONFIG_MTD_SPI_NOR=y CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y # CONFIG_MTD_SPI_NOR_MISC is not set -# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set -CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y -# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set CONFIG_MTD_UBI=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 @@ -2127,6 +2142,7 @@ CONFIG_OF_KOBJ=y CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set @@ -2135,23 +2151,23 @@ CONFIG_BLK_DEV=y CONFIG_CDROM=y # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set CONFIG_ZRAM=y -CONFIG_ZRAM_DEF_COMP_LZORLE=y -# CONFIG_ZRAM_DEF_COMP_ZSTD is not set -# CONFIG_ZRAM_DEF_COMP_LZO is not set -CONFIG_ZRAM_DEF_COMP="lzo-rle" # CONFIG_ZRAM_WRITEBACK is not set # CONFIG_ZRAM_MEMORY_TRACKING is not set +# CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_DRBD is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SKD is not set +# CONFIG_BLK_DEV_SX8 is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=1 CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set # CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_UBLK is not set +# CONFIG_BLK_DEV_RSXX is not set # # NVME Support @@ -2159,11 +2175,9 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_NVME_CORE=y CONFIG_BLK_DEV_NVME=y # CONFIG_NVME_MULTIPATH is not set -# CONFIG_NVME_VERBOSE_ERRORS is not set # CONFIG_NVME_HWMON is not set # CONFIG_NVME_FC is not set # CONFIG_NVME_TCP is not set -# CONFIG_NVME_AUTH is not set # CONFIG_NVME_TARGET is not set # end of NVME Support @@ -2186,7 +2200,6 @@ CONFIG_BLK_DEV_NVME=y # CONFIG_TIFM_CORE is not set # CONFIG_ICS932S401 is not set # CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_HI6421V600_IRQ is not set # CONFIG_HP_ILO is not set # CONFIG_APDS9802ALS is not set # CONFIG_ISL29003 is not set @@ -2198,12 +2211,12 @@ CONFIG_BLK_DEV_NVME=y # CONFIG_DS1682 is not set # CONFIG_LATTICE_ECP3_CONFIG is not set CONFIG_SRAM=y -# CONFIG_DW_XDATA_PCIE is not set # CONFIG_PCI_ENDPOINT_TEST is not set # CONFIG_XILINX_SDFEC is not set +# CONFIG_UID_SYS_STATS is not set +# CONFIG_PVPANIC is not set # CONFIG_HISI_HIKEY_USB is not set -# CONFIG_OPEN_DICE is not set -# CONFIG_VCPU_STALL_DETECTOR is not set +CONFIG_KHADAS_MCU=y # CONFIG_C2PORT is not set # @@ -2230,17 +2243,13 @@ CONFIG_EEPROM_93CX6=m # CONFIG_SENSORS_LIS3_SPI is not set # CONFIG_SENSORS_LIS3_I2C is not set # CONFIG_ALTERA_STAPL is not set -# CONFIG_VMWARE_VMCI is not set # CONFIG_GENWQE is not set # CONFIG_ECHO is not set -# CONFIG_BCM_VK is not set # CONFIG_MISC_ALCOR_PCI is not set # CONFIG_MISC_RTSX_PCI is not set # CONFIG_MISC_RTSX_USB is not set # CONFIG_HABANA_AI is not set # CONFIG_UACCE is not set -# CONFIG_PVPANIC is not set -# CONFIG_GP_PCI1XXXX is not set # end of Misc devices # @@ -2248,7 +2257,6 @@ CONFIG_EEPROM_93CX6=m # CONFIG_SCSI_MOD=y # CONFIG_RAID_ATTRS is not set -CONFIG_SCSI_COMMON=y CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_PROC_FS=y @@ -2260,7 +2268,6 @@ CONFIG_BLK_DEV_SD=y # CONFIG_CHR_DEV_ST is not set CONFIG_BLK_DEV_SR=y # CONFIG_CHR_DEV_SG is not set -CONFIG_BLK_DEV_BSG=y # CONFIG_CHR_DEV_SCH is not set # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set @@ -2304,15 +2311,15 @@ CONFIG_SCSI_LOWLEVEL=y # CONFIG_MEGARAID_SAS is not set # CONFIG_SCSI_MPT3SAS is not set # CONFIG_SCSI_MPT2SAS is not set -# CONFIG_SCSI_MPI3MR is not set # CONFIG_SCSI_SMARTPQI is not set +# CONFIG_SCSI_UFSHCD is not set # CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_MYRB is not set # CONFIG_SCSI_MYRS is not set # CONFIG_SCSI_SNIC is not set # CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_FDOMAIN_PCI is not set +# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set @@ -2330,6 +2337,7 @@ CONFIG_SCSI_LOWLEVEL=y # CONFIG_SCSI_DH is not set # end of SCSI device support +CONFIG_HAVE_PATA_PLATFORM=y CONFIG_ATA=y CONFIG_SATA_HOST=y CONFIG_ATA_VERBOSE_ERROR=y @@ -2342,7 +2350,6 @@ CONFIG_SATA_PMP=y CONFIG_SATA_AHCI=y CONFIG_SATA_MOBILE_LPM_POLICY=0 CONFIG_SATA_AHCI_PLATFORM=y -# CONFIG_AHCI_DWC is not set # CONFIG_AHCI_CEVA is not set # CONFIG_AHCI_QORIQ is not set # CONFIG_SATA_INIC162X is not set @@ -2387,7 +2394,6 @@ CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_QL=m CONFIG_DM_MULTIPATH_ST=m # CONFIG_DM_MULTIPATH_HST is not set -# CONFIG_DM_MULTIPATH_IOA is not set CONFIG_DM_DELAY=m # CONFIG_DM_DUST is not set # CONFIG_DM_UEVENT is not set @@ -2398,7 +2404,8 @@ CONFIG_DM_VERITY=m CONFIG_DM_SWITCH=m CONFIG_DM_LOG_WRITES=m # CONFIG_DM_INTEGRITY is not set -# CONFIG_DM_AUDIT is not set +# CONFIG_DM_BOW is not set +CONFIG_DM_USER=m # CONFIG_TARGET_CORE is not set # CONFIG_FUSION is not set @@ -2434,7 +2441,6 @@ CONFIG_VXLAN=m CONFIG_GENEVE=m # CONFIG_BAREUDP is not set # CONFIG_GTP is not set -# CONFIG_AMT is not set # CONFIG_MACSEC is not set CONFIG_NETCONSOLE=m # CONFIG_NETCONSOLE_DYNAMIC is not set @@ -2446,7 +2452,6 @@ CONFIG_TAP=m CONFIG_VETH=m CONFIG_NLMON=m CONFIG_NET_VRF=m -# CONFIG_MHI_NET is not set CONFIG_ARCNET=m # CONFIG_ARCNET_1201 is not set # CONFIG_ARCNET_1051 is not set @@ -2467,6 +2472,12 @@ CONFIG_ATM_DRIVERS=y # CONFIG_ATM_FORE200E is not set # CONFIG_ATM_HE is not set # CONFIG_ATM_SOLOS is not set + +# +# Distributed Switch Architecture drivers +# +# end of Distributed Switch Architecture drivers + CONFIG_ETHERNET=y # CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_ADAPTEC is not set @@ -2481,10 +2492,11 @@ CONFIG_NET_VENDOR_AMAZON=y CONFIG_NET_VENDOR_AQUANTIA=y # CONFIG_AQTION is not set # CONFIG_NET_VENDOR_ARC is not set -CONFIG_NET_VENDOR_ASIX=y -# CONFIG_SPI_AX88796C is not set # CONFIG_NET_VENDOR_ATHEROS is not set +CONFIG_NET_VENDOR_AURORA=y +# CONFIG_AURORA_NB8800 is not set # CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE is not set CONFIG_NET_VENDOR_CADENCE=y # CONFIG_MACB is not set # CONFIG_NET_VENDOR_CAVIUM is not set @@ -2492,47 +2504,34 @@ CONFIG_NET_VENDOR_CADENCE=y # CONFIG_NET_VENDOR_CISCO is not set CONFIG_NET_VENDOR_CORTINA=y # CONFIG_GEMINI_ETHERNET is not set -CONFIG_NET_VENDOR_DAVICOM=y -# CONFIG_DM9051 is not set # CONFIG_DNET is not set # CONFIG_NET_VENDOR_DEC is not set # CONFIG_NET_VENDOR_DLINK is not set # CONFIG_NET_VENDOR_EMULEX is not set -CONFIG_NET_VENDOR_ENGLEDER=y -# CONFIG_TSNEP is not set # CONFIG_NET_VENDOR_EZCHIP is not set -CONFIG_NET_VENDOR_FUNGIBLE=y -# CONFIG_FUN_ETH is not set CONFIG_NET_VENDOR_GOOGLE=y # CONFIG_GVE is not set # CONFIG_NET_VENDOR_HISILICON is not set CONFIG_NET_VENDOR_HUAWEI=y # CONFIG_HINIC is not set # CONFIG_NET_VENDOR_INTEL is not set -CONFIG_NET_VENDOR_WANGXUN=y -# CONFIG_NGBE is not set -# CONFIG_TXGBE is not set # CONFIG_JME is not set -CONFIG_NET_VENDOR_ADI=y -# CONFIG_ADIN1110 is not set -CONFIG_NET_VENDOR_LITEX=y -# CONFIG_LITEX_LITEETH is not set # CONFIG_NET_VENDOR_MARVELL is not set # CONFIG_NET_VENDOR_MELLANOX is not set # CONFIG_NET_VENDOR_MICREL is not set # CONFIG_NET_VENDOR_MICROCHIP is not set CONFIG_NET_VENDOR_MICROSEMI=y # CONFIG_MSCC_OCELOT_SWITCH is not set -CONFIG_NET_VENDOR_MICROSOFT=y # CONFIG_NET_VENDOR_MYRI is not set # CONFIG_FEALNX is not set -CONFIG_NET_VENDOR_NI=y -# CONFIG_NI_XGE_MANAGEMENT_ENET is not set # CONFIG_NET_VENDOR_NATSEMI is not set CONFIG_NET_VENDOR_NETERION=y # CONFIG_S2IO is not set +# CONFIG_VXGE is not set CONFIG_NET_VENDOR_NETRONOME=y # CONFIG_NFP is not set +CONFIG_NET_VENDOR_NI=y +# CONFIG_NI_XGE_MANAGEMENT_ENET is not set # CONFIG_NET_VENDOR_NVIDIA is not set # CONFIG_NET_VENDOR_OKI is not set # CONFIG_ETHOC is not set @@ -2542,7 +2541,6 @@ CONFIG_NET_VENDOR_PACKET_ENGINES=y CONFIG_NET_VENDOR_PENSANDO=y # CONFIG_IONIC is not set # CONFIG_NET_VENDOR_QLOGIC is not set -# CONFIG_NET_VENDOR_BROCADE is not set # CONFIG_NET_VENDOR_QUALCOMM is not set # CONFIG_NET_VENDOR_RDC is not set CONFIG_NET_VENDOR_REALTEK=y @@ -2551,16 +2549,16 @@ CONFIG_NET_VENDOR_REALTEK=y CONFIG_R8168=y CONFIG_R8169=y # CONFIG_R8125 is not set +# CONFIG_REALTEK_PGTOOL is not set # CONFIG_NET_VENDOR_RENESAS is not set # CONFIG_NET_VENDOR_ROCKER is not set # CONFIG_NET_VENDOR_SAMSUNG is not set # CONFIG_NET_VENDOR_SEEQ is not set -# CONFIG_NET_VENDOR_SILAN is not set -# CONFIG_NET_VENDOR_SIS is not set CONFIG_NET_VENDOR_SOLARFLARE=y # CONFIG_SFC is not set # CONFIG_SFC_FALCON is not set -# CONFIG_SFC_SIENA is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set # CONFIG_NET_VENDOR_SMSC is not set CONFIG_NET_VENDOR_SOCIONEXT=y CONFIG_NET_VENDOR_STMICRO=y @@ -2575,18 +2573,14 @@ CONFIG_DWMAC_GENERIC=y CONFIG_DWMAC_ROCKCHIP=y CONFIG_DWMAC_ROCKCHIP_TOOL=y # CONFIG_DWMAC_INTEL_PLAT is not set -# CONFIG_DWMAC_LOONGSON is not set # CONFIG_STMMAC_PCI is not set # CONFIG_NET_VENDOR_SUN is not set # CONFIG_NET_VENDOR_SYNOPSYS is not set # CONFIG_NET_VENDOR_TEHUTI is not set # CONFIG_NET_VENDOR_TI is not set -CONFIG_NET_VENDOR_VERTEXCOM=y -# CONFIG_MSE102X is not set # CONFIG_NET_VENDOR_VIA is not set # CONFIG_NET_VENDOR_WIZNET is not set CONFIG_NET_VENDOR_XILINX=y -# CONFIG_XILINX_EMACLITE is not set # CONFIG_XILINX_AXI_EMAC is not set # CONFIG_XILINX_LL_TEMAC is not set # CONFIG_FDDI is not set @@ -2603,7 +2597,6 @@ CONFIG_FIXED_PHY=y # # CONFIG_AMD_PHY is not set # CONFIG_ADIN_PHY is not set -# CONFIG_ADIN1100_PHY is not set # CONFIG_AQUANTIA_PHY is not set CONFIG_AX88796B_PHY=y # CONFIG_BROADCOM_PHY is not set @@ -2620,16 +2613,12 @@ CONFIG_AX88796B_PHY=y # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_MARVELL_PHY is not set # CONFIG_MARVELL_10G_PHY is not set -# CONFIG_MARVELL_88X2222_PHY is not set -# CONFIG_MAXLINEAR_GPHY is not set -# CONFIG_MEDIATEK_GE_PHY is not set # CONFIG_MICREL_PHY is not set CONFIG_MICROCHIP_PHY=m # CONFIG_MICROCHIP_T1_PHY is not set # CONFIG_MICROSEMI_PHY is not set CONFIG_MOTORCOMM_PHY=y # CONFIG_NATIONAL_PHY is not set -# CONFIG_NXP_C45_TJA11XX_PHY is not set # CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_AT803X_PHY is not set # CONFIG_QSEMI_PHY is not set @@ -2645,77 +2634,11 @@ CONFIG_SMSC_PHY=m # CONFIG_DP83848_PHY is not set # CONFIG_DP83867_PHY is not set # CONFIG_DP83869_PHY is not set -# CONFIG_DP83TD510_PHY is not set # CONFIG_VITESSE_PHY is not set # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set -# CONFIG_PSE_CONTROLLER is not set -CONFIG_CAN_DEV=m -CONFIG_CAN_VCAN=m -# CONFIG_CAN_VXCAN is not set -CONFIG_CAN_NETLINK=y -CONFIG_CAN_CALC_BITTIMING=y -CONFIG_CAN_RX_OFFLOAD=y -# CONFIG_CAN_CAN327 is not set -# CONFIG_CAN_FLEXCAN is not set -CONFIG_CAN_GRCAN=m -# CONFIG_CAN_KVASER_PCIEFD is not set -CONFIG_CAN_SLCAN=m -CONFIG_CAN_XILINXCAN=m -CONFIG_CAN_C_CAN=m -CONFIG_CAN_C_CAN_PLATFORM=m -CONFIG_CAN_C_CAN_PCI=m -CONFIG_CAN_CC770=m -CONFIG_CAN_CC770_ISA=m -CONFIG_CAN_CC770_PLATFORM=m -# CONFIG_CAN_CTUCANFD_PCI is not set -# CONFIG_CAN_CTUCANFD_PLATFORM is not set -# CONFIG_CAN_IFI_CANFD is not set -CONFIG_CAN_M_CAN=m -# CONFIG_CAN_M_CAN_PCI is not set -# CONFIG_CAN_M_CAN_PLATFORM is not set -# CONFIG_CAN_M_CAN_TCAN4X5X is not set -# CONFIG_CAN_PEAK_PCIEFD is not set -# CONFIG_CAN_ROCKCHIP is not set -# CONFIG_CANFD_ROCKCHIP is not set -CONFIG_CAN_SJA1000=m -CONFIG_CAN_EMS_PCI=m -# CONFIG_CAN_F81601 is not set -CONFIG_CAN_KVASER_PCI=m -CONFIG_CAN_PEAK_PCI=m -CONFIG_CAN_PEAK_PCIEC=y -CONFIG_CAN_PLX_PCI=m -CONFIG_CAN_SJA1000_ISA=m -CONFIG_CAN_SJA1000_PLATFORM=m -CONFIG_CAN_SOFTING=m - -# -# CAN SPI interfaces -# -CONFIG_CAN_HI311X=m -CONFIG_CAN_MCP251X=m -CONFIG_CAN_MCP251XFD=m -# CONFIG_CAN_MCP251XFD_SANITY is not set -# end of CAN SPI interfaces - -# -# CAN USB interfaces -# -CONFIG_CAN_8DEV_USB=m -CONFIG_CAN_EMS_USB=m -# CONFIG_CAN_ESD_USB is not set -# CONFIG_CAN_ETAS_ES58X is not set -CONFIG_CAN_GS_USB=m -CONFIG_CAN_KVASER_USB=m -# CONFIG_CAN_MCBA_USB is not set -CONFIG_CAN_PEAK_USB=m -# CONFIG_CAN_UCAN is not set -# end of CAN USB interfaces - -CONFIG_CAN_DEBUG_DEVICES=y CONFIG_MDIO_DEVICE=y CONFIG_MDIO_BUS=y -CONFIG_FWNODE_MDIO=y CONFIG_OF_MDIO=y CONFIG_MDIO_DEVRES=y # CONFIG_MDIO_BITBANG is not set @@ -2800,8 +2723,8 @@ CONFIG_USB_SIERRA_NET=m CONFIG_USB_VL600=m CONFIG_USB_NET_CH9200=m # CONFIG_USB_NET_AQC111 is not set -CONFIG_USB_RTL8153_ECM=m CONFIG_WLAN=y +# CONFIG_WIRELESS_WDS is not set CONFIG_WLAN_VENDOR_ADMTEK=y # CONFIG_ADM8211 is not set CONFIG_ATH_COMMON=m @@ -2860,6 +2783,7 @@ CONFIG_HOSTAP_FIRMWARE_NVRAM=y # CONFIG_HOSTAP_PCI is not set # CONFIG_HERMES is not set # CONFIG_P54_COMMON is not set +# CONFIG_PRISM54 is not set CONFIG_WLAN_VENDOR_MARVELL=y # CONFIG_LIBERTAS is not set CONFIG_LIBERTAS_THINFIRM=y @@ -2881,14 +2805,9 @@ CONFIG_MT7601U=m # CONFIG_MT7663U is not set # CONFIG_MT7663S is not set # CONFIG_MT7915E is not set -# CONFIG_MT7921E is not set -# CONFIG_MT7921S is not set -# CONFIG_MT7921U is not set CONFIG_WLAN_VENDOR_MICROCHIP=y # CONFIG_WILC1000_SDIO is not set # CONFIG_WILC1000_SPI is not set -CONFIG_WLAN_VENDOR_PURELIFI=y -# CONFIG_PLFXLC is not set CONFIG_WLAN_VENDOR_RALINK=y CONFIG_RT2X00=m # CONFIG_RT2400PCI is not set @@ -2927,24 +2846,13 @@ CONFIG_RTW88_PCI=m CONFIG_RTW88_8822C=m CONFIG_RTW88_8821C=m # CONFIG_RTW88_8822BE is not set -# CONFIG_RTW88_8822BS is not set -# CONFIG_RTW88_8822BU is not set CONFIG_RTW88_8822CE=m -# CONFIG_RTW88_8822CS is not set -# CONFIG_RTW88_8822CU is not set # CONFIG_RTW88_8723DE is not set -# CONFIG_RTW88_8723DS is not set -# CONFIG_RTW88_8723DU is not set CONFIG_RTW88_8821CE=m -# CONFIG_RTW88_8821CS is not set -# CONFIG_RTW88_8821CU is not set # CONFIG_RTW88_DEBUG is not set # CONFIG_RTW88_DEBUGFS is not set -# CONFIG_RTW89 is not set CONFIG_WLAN_VENDOR_RSI=y # CONFIG_RSI_91X is not set -CONFIG_WLAN_VENDOR_SILABS=y -# CONFIG_WFX is not set CONFIG_WLAN_VENDOR_ST=y # CONFIG_CW1200 is not set CONFIG_WLAN_VENDOR_TI=y @@ -2958,27 +2866,17 @@ CONFIG_USB_ZD1201=m CONFIG_WLAN_VENDOR_QUANTENNA=y # CONFIG_QTNFMAC_PCIE is not set # CONFIG_WL_ROCKCHIP is not set -# CONFIG_AIC_WLAN_SUPPORT is not set -# CONFIG_RTL8723DS is not set -# CONFIG_RTL8822BU is not set -# CONFIG_RTL8821CU is not set -# CONFIG_88XXAU is not set -# CONFIG_RTL8192EU is not set -# CONFIG_RTL8189FS is not set -# CONFIG_RTL8189ES is not set # CONFIG_SPARD_WLAN_SUPPORT is not set +# CONFIG_AIC_WLAN_SUPPORT is not set # CONFIG_MAC80211_HWSIM is not set CONFIG_USB_NET_RNDIS_WLAN=y # CONFIG_VIRT_WIFI is not set -# CONFIG_WAN is not set -# CONFIG_IEEE802154_DRIVERS is not set # -# Wireless WAN +# Enable WiMAX (Networking options) to see the WiMAX drivers # -# CONFIG_WWAN is not set -# end of Wireless WAN - +# CONFIG_WAN is not set +# CONFIG_IEEE802154_DRIVERS is not set # CONFIG_VMXNET3 is not set # CONFIG_NETDEVSIM is not set # CONFIG_NET_FAILOVER is not set @@ -3027,7 +2925,6 @@ CONFIG_KEYBOARD_GPIO_POLLED=y # CONFIG_KEYBOARD_MPR121 is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set -# CONFIG_KEYBOARD_PINEPHONE is not set # CONFIG_KEYBOARD_SAMSUNG is not set # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_SUNKBD is not set @@ -3036,7 +2933,6 @@ CONFIG_KEYBOARD_GPIO_POLLED=y # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_CAP11XX is not set # CONFIG_KEYBOARD_BCM is not set -# CONFIG_KEYBOARD_CYPRESS_SF is not set CONFIG_INPUT_MOUSE=y # CONFIG_MOUSE_PS2 is not set # CONFIG_MOUSE_SERIAL is not set @@ -3079,18 +2975,17 @@ CONFIG_JOYSTICK_XPAD_LEDS=y CONFIG_JOYSTICK_PSXPAD_SPI=y # CONFIG_JOYSTICK_PSXPAD_SPI_FF is not set # CONFIG_JOYSTICK_PXRC is not set -# CONFIG_JOYSTICK_QWIIC is not set # CONFIG_JOYSTICK_FSIA6B is not set -# CONFIG_JOYSTICK_SENSEHAT is not set -CONFIG_JOYSTICK_JELOS_JOYPAD=y CONFIG_INPUT_TABLET=y # CONFIG_TABLET_USB_ACECAD is not set # CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set # CONFIG_TABLET_USB_HANWANG is not set # CONFIG_TABLET_USB_KBTAB is not set # CONFIG_TABLET_USB_PEGASUS is not set # CONFIG_TABLET_SERIAL_WACOM4 is not set CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_PROPERTIES=y # CONFIG_TOUCHSCREEN_ADS7846 is not set # CONFIG_TOUCHSCREEN_AD7877 is not set # CONFIG_TOUCHSCREEN_AD7879 is not set @@ -3105,7 +3000,6 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_CY8CTMG110 is not set # CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set # CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set -# CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5 is not set # CONFIG_TOUCHSCREEN_DYNAPRO is not set # CONFIG_TOUCHSCREEN_HAMPSHIRE is not set # CONFIG_TOUCHSCREEN_EETI is not set @@ -3121,9 +3015,7 @@ CONFIG_TOUCHSCREEN_GOODIX=y # CONFIG_TOUCHSCREEN_GT1X is not set # CONFIG_TOUCHSCREEN_GT9XX is not set # CONFIG_TOUCHSCREEN_HIDEEP is not set -# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set # CONFIG_TOUCHSCREEN_ILI210X is not set -# CONFIG_TOUCHSCREEN_ILITEK is not set # CONFIG_TOUCHSCREEN_S6SY761 is not set # CONFIG_TOUCHSCREEN_GUNZE is not set # CONFIG_TOUCHSCREEN_EKTF2127 is not set @@ -3131,20 +3023,18 @@ CONFIG_TOUCHSCREEN_GOODIX=y # CONFIG_TOUCHSCREEN_ELAN5515 is not set # CONFIG_TOUCHSCREEN_ELO is not set # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -# CONFIG_TOUCHSCREEN_WACOM_W9013 is not set # CONFIG_TOUCHSCREEN_WACOM_I2C is not set # CONFIG_TOUCHSCREEN_MAX11801 is not set # CONFIG_TOUCHSCREEN_MCS5000 is not set # CONFIG_TOUCHSCREEN_MMS114 is not set # CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set -# CONFIG_TOUCHSCREEN_MSG2638 is not set # CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_IMAGIS is not set # CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set # CONFIG_TOUCHSCREEN_INEXIO is not set # CONFIG_TOUCHSCREEN_MK712 is not set # CONFIG_TOUCHSCREEN_PENMOUNT is not set # CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_RASPITS_FT5426 is not set # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set # CONFIG_TOUCHSCREEN_PIXCIR is not set @@ -3166,7 +3056,6 @@ CONFIG_TOUCHSCREEN_GOODIX=y # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZET6223 is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set -# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_IQS5XX is not set # CONFIG_TOUCHSCREEN_ZINITIX is not set @@ -3199,13 +3088,9 @@ CONFIG_INPUT_UINPUT=y # CONFIG_INPUT_PWM_VIBRA is not set CONFIG_INPUT_RK805_PWRKEY=y # CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_DA7280_HAPTICS is not set # CONFIG_INPUT_ADXL34X is not set -# CONFIG_INPUT_IBM_PANEL is not set # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_IQS269A is not set -# CONFIG_INPUT_IQS626A is not set -# CONFIG_INPUT_IQS7222 is not set # CONFIG_INPUT_CMA3000 is not set # CONFIG_INPUT_DRV260X_HAPTICS is not set # CONFIG_INPUT_DRV2665_HAPTICS is not set @@ -3259,11 +3144,11 @@ CONFIG_SERIAL_8250_DMA=y CONFIG_SERIAL_8250_NR_UARTS=10 CONFIG_SERIAL_8250_RUNTIME_UARTS=10 # CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_ASPEED_VUART is not set CONFIG_SERIAL_8250_DWLIB=y CONFIG_SERIAL_8250_FSL=y CONFIG_SERIAL_8250_DW=y # CONFIG_SERIAL_8250_RT288X is not set -CONFIG_SERIAL_8250_PERICOM=y CONFIG_SERIAL_OF_PLATFORM=y # @@ -3272,17 +3157,20 @@ CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_SERIAL_AMBA_PL010 is not set # CONFIG_SERIAL_AMBA_PL011 is not set # CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set +# CONFIG_SERIAL_SAMSUNG is not set # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_MSM_GENI_EARLY_CONSOLE is not set # CONFIG_SERIAL_SIFIVE is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set # CONFIG_SERIAL_ALTERA_JTAGUART is not set # CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_XILINX_PS_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_RP2 is not set @@ -3297,6 +3185,7 @@ CONFIG_SERIAL_MCTRL_GPIO=y # CONFIG_N_GSM is not set # CONFIG_NOZOMI is not set # CONFIG_NULL_TTY is not set +# CONFIG_TRACE_SINK is not set # CONFIG_HVC_DCC is not set CONFIG_SERIAL_DEV_BUS=y CONFIG_SERIAL_DEV_CTRL_TTYPORT=y @@ -3310,18 +3199,15 @@ CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_OPTEE=y # CONFIG_HW_RANDOM_CCTRNG is not set # CONFIG_HW_RANDOM_XIPHERA is not set -CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=y -CONFIG_HW_RANDOM_CN10K=y CONFIG_HW_RANDOM_ROCKCHIP=y # CONFIG_APPLICOM is not set CONFIG_DEVMEM=y +# CONFIG_RAW_DRIVER is not set CONFIG_DEVPORT=y CONFIG_TCG_TPM=y CONFIG_HW_RANDOM_TPM=y # CONFIG_TCG_TIS is not set # CONFIG_TCG_TIS_SPI is not set -# CONFIG_TCG_TIS_I2C is not set -# CONFIG_TCG_TIS_I2C_CR50 is not set # CONFIG_TCG_TIS_I2C_ATMEL is not set CONFIG_TCG_TIS_I2C_INFINEON=y # CONFIG_TCG_TIS_I2C_NUVOTON is not set @@ -3331,7 +3217,6 @@ CONFIG_TCG_TIS_I2C_INFINEON=y # CONFIG_TCG_TIS_ST33ZP24_I2C is not set # CONFIG_TCG_TIS_ST33ZP24_SPI is not set # CONFIG_XILLYBUS is not set -# CONFIG_XILLYUSB is not set # CONFIG_RANDOM_TRUST_CPU is not set # CONFIG_RANDOM_TRUST_BOOTLOADER is not set # end of Character devices @@ -3410,8 +3295,6 @@ CONFIG_I2C_XILINX=m # External I2C/SMBus adapter drivers # CONFIG_I2C_DIOLAN_U2C=m -# CONFIG_I2C_CP2615 is not set -# CONFIG_I2C_PCI1XXXX is not set CONFIG_I2C_ROBOTFUZZ_OSIF=m CONFIG_I2C_TAOS_EVM=m CONFIG_I2C_TINY_USB=m @@ -3419,7 +3302,6 @@ CONFIG_I2C_TINY_USB=m # # Other I2C/SMBus bus drivers # -# CONFIG_I2C_VIRTIO is not set # end of I2C Hardware Bus support CONFIG_I2C_STUB=m @@ -3445,20 +3327,16 @@ CONFIG_SPI_MEM=y CONFIG_SPI_BITBANG=y # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_CADENCE_QUADSPI is not set -# CONFIG_SPI_CADENCE_XSPI is not set # CONFIG_SPI_DESIGNWARE is not set # CONFIG_SPI_NXP_FLEXSPI is not set # CONFIG_SPI_GPIO is not set # CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_MICROCHIP_CORE is not set -# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set # CONFIG_SPI_OC_TINY is not set # CONFIG_SPI_PL022 is not set # CONFIG_SPI_PXA2XX is not set CONFIG_SPI_ROCKCHIP=y CONFIG_SPI_ROCKCHIP_MISCDEV=y CONFIG_SPI_ROCKCHIP_SFC=y -CONFIG_SPI_ROCKCHIP_SLAVE=y # CONFIG_SPI_SC18IS602 is not set # CONFIG_SPI_SIFIVE is not set # CONFIG_SPI_MXIC is not set @@ -3485,7 +3363,6 @@ CONFIG_SPI_SLAVE=y # CONFIG_SPI_SLAVE_ROCKCHIP_OBJ is not set CONFIG_SPI_DYNAMIC=y CONFIG_SPMI=m -# CONFIG_SPMI_HISI3670 is not set CONFIG_HSI=m CONFIG_HSI_BOARDINFO=y @@ -3515,15 +3392,12 @@ CONFIG_PPS_CLIENT_GPIO=m # PTP clock support # CONFIG_PTP_1588_CLOCK=y -CONFIG_PTP_1588_CLOCK_OPTIONAL=y # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # -CONFIG_PTP_1588_CLOCK_KVM=y # CONFIG_PTP_1588_CLOCK_IDT82P33 is not set # CONFIG_PTP_1588_CLOCK_IDTCM is not set -# CONFIG_PTP_1588_CLOCK_OCP is not set # end of PTP clock support CONFIG_PINCTRL=y @@ -3531,16 +3405,14 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set -# CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set -# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set -# CONFIG_PINCTRL_OCELOT is not set -CONFIG_PINCTRL_RK805=y -CONFIG_PINCTRL_RK806=y CONFIG_PINCTRL_ROCKCHIP=y # CONFIG_PINCTRL_SINGLE is not set -# CONFIG_PINCTRL_STMFX is not set # CONFIG_PINCTRL_SX150X is not set +# CONFIG_PINCTRL_STMFX is not set +CONFIG_PINCTRL_RK805=y +CONFIG_PINCTRL_RK806=y +# CONFIG_PINCTRL_OCELOT is not set # # Renesas pinctrl drivers @@ -3573,6 +3445,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=y # CONFIG_GPIO_MB86S7X is not set # CONFIG_GPIO_PL061 is not set CONFIG_GPIO_ROCKCHIP=y +# CONFIG_GPIO_SAMA5D2_PIOBU is not set # CONFIG_GPIO_SIFIVE is not set # CONFIG_GPIO_SYSCON is not set # CONFIG_GPIO_XGENE is not set @@ -3583,6 +3456,7 @@ CONFIG_GPIO_ROCKCHIP=y # # I2C GPIO expanders # +# CONFIG_GPIO_ADP5588 is not set CONFIG_GPIO_ADNP=m CONFIG_GPIO_AW9110=m CONFIG_GPIO_GW_PLD=m @@ -3627,14 +3501,8 @@ CONFIG_GPIO_XRA1403=m # # end of USB GPIO expanders -# -# Virtual GPIO drivers -# CONFIG_GPIO_AGGREGATOR=m CONFIG_GPIO_MOCKUP=m -# CONFIG_GPIO_SIM is not set -# end of Virtual GPIO drivers - CONFIG_W1=m CONFIG_W1_CON=y @@ -3678,7 +3546,6 @@ CONFIG_POWER_RESET=y CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_GPIO_RESTART=y # CONFIG_POWER_RESET_LTC2952 is not set -# CONFIG_POWER_RESET_REGULATOR is not set # CONFIG_POWER_RESET_RESTART is not set # CONFIG_POWER_RESET_XGENE is not set # CONFIG_POWER_RESET_SYSCON is not set @@ -3691,7 +3558,6 @@ CONFIG_POWER_SUPPLY=y CONFIG_POWER_SUPPLY_HWMON=y # CONFIG_PDA_POWER is not set # CONFIG_GENERIC_ADC_BATTERY is not set -# CONFIG_IP5XXX_POWER is not set # CONFIG_TEST_POWER is not set # CONFIG_CHARGER_ADP5061 is not set CONFIG_BATTERY_CW2015=y @@ -3701,7 +3567,6 @@ CONFIG_BATTERY_CW2015=y # CONFIG_BATTERY_DS2780 is not set # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_DS2782 is not set -# CONFIG_BATTERY_SAMSUNG_SDI is not set CONFIG_BATTERY_SBS=y # CONFIG_CHARGER_SBS is not set # CONFIG_MANAGER_SBS is not set @@ -3716,11 +3581,9 @@ CONFIG_CHARGER_GPIO=y # CONFIG_CHARGER_MANAGER is not set # CONFIG_ROCKCHIP_CHARGER_MANAGER is not set # CONFIG_CHARGER_LT3651 is not set -# CONFIG_CHARGER_LTC4162L is not set # CONFIG_CHARGER_SC8551 is not set # CONFIG_CHARGER_SC89890 is not set # CONFIG_CHARGER_DETECTOR_MAX14656 is not set -# CONFIG_CHARGER_MAX77976 is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set # CONFIG_CHARGER_BQ24257 is not set @@ -3729,21 +3592,18 @@ CONFIG_CHARGER_BQ24735=y CONFIG_CHARGER_BQ25700=y # CONFIG_CHARGER_BQ25890 is not set # CONFIG_CHARGER_BQ25980 is not set -# CONFIG_CHARGER_BQ256XX is not set -# CONFIG_BATTERY_RK816 is not set -CONFIG_BATTERY_RK817=y -CONFIG_CHARGER_RK817=y -# CONFIG_BATTERY_RK818 is not set -# CONFIG_CHARGER_RK818 is not set -# CONFIG_CHARGER_SGM41542 is not set # CONFIG_CHARGER_SMB347 is not set # CONFIG_BATTERY_GAUGE_LTC2941 is not set -# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_BATTERY_RT5033 is not set # CONFIG_CHARGER_RT9455 is not set # CONFIG_CHARGER_UCS1002 is not set # CONFIG_CHARGER_BD99954 is not set -# CONFIG_BATTERY_UG3105 is not set +# CONFIG_BATTERY_RK816 is not set +CONFIG_BATTERY_RK817=y +CONFIG_CHARGER_RK817=y +# CONFIG_BATTERY_RK818 is not set +# CONFIG_CHARGER_RK818 is not set +# CONFIG_CHARGER_SGM41542 is not set CONFIG_HWMON=y # CONFIG_HWMON_DEBUG_CHIP is not set @@ -3766,15 +3626,13 @@ CONFIG_HWMON=y # CONFIG_SENSORS_ADT7462 is not set # CONFIG_SENSORS_ADT7470 is not set # CONFIG_SENSORS_ADT7475 is not set -# CONFIG_SENSORS_AHT10 is not set -# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set # CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASC7621 is not set # CONFIG_SENSORS_AXI_FAN_CONTROL is not set # CONFIG_SENSORS_ARM_SCMI is not set +# CONFIG_SENSORS_ASPEED is not set # CONFIG_SENSORS_ATXP1 is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set -# CONFIG_SENSORS_CORSAIR_PSU is not set # CONFIG_SENSORS_DRIVETEMP is not set # CONFIG_SENSORS_DS620 is not set # CONFIG_SENSORS_DS1621 is not set @@ -3798,7 +3656,6 @@ CONFIG_SENSORS_GPIO_FAN=y # CONFIG_SENSORS_LTC2947_I2C is not set # CONFIG_SENSORS_LTC2947_SPI is not set # CONFIG_SENSORS_LTC2990 is not set -# CONFIG_SENSORS_LTC2992 is not set # CONFIG_SENSORS_LTC4151 is not set # CONFIG_SENSORS_LTC4215 is not set # CONFIG_SENSORS_LTC4222 is not set @@ -3806,15 +3663,12 @@ CONFIG_SENSORS_GPIO_FAN=y # CONFIG_SENSORS_LTC4260 is not set # CONFIG_SENSORS_LTC4261 is not set # CONFIG_SENSORS_MAX1111 is not set -# CONFIG_SENSORS_MAX127 is not set # CONFIG_SENSORS_MAX16065 is not set # CONFIG_SENSORS_MAX1619 is not set # CONFIG_SENSORS_MAX1668 is not set # CONFIG_SENSORS_MAX197 is not set # CONFIG_SENSORS_MAX31722 is not set # CONFIG_SENSORS_MAX31730 is not set -# CONFIG_SENSORS_MAX31760 is not set -# CONFIG_SENSORS_MAX6620 is not set # CONFIG_SENSORS_MAX6621 is not set # CONFIG_SENSORS_MAX6639 is not set # CONFIG_SENSORS_MAX6642 is not set @@ -3823,7 +3677,6 @@ CONFIG_SENSORS_GPIO_FAN=y # CONFIG_SENSORS_MAX31790 is not set # CONFIG_SENSORS_MCP3021 is not set # CONFIG_SENSORS_TC654 is not set -# CONFIG_SENSORS_TPS23861 is not set # CONFIG_SENSORS_MR75203 is not set # CONFIG_SENSORS_ADCXX is not set # CONFIG_SENSORS_LM63 is not set @@ -3847,28 +3700,21 @@ CONFIG_SENSORS_GPIO_FAN=y # CONFIG_SENSORS_NTC_THERMISTOR is not set # CONFIG_SENSORS_NCT6683 is not set # CONFIG_SENSORS_NCT6775 is not set -# CONFIG_SENSORS_NCT6775_I2C is not set # CONFIG_SENSORS_NCT7802 is not set # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_NPCM7XX is not set -# CONFIG_SENSORS_NZXT_KRAKEN2 is not set -# CONFIG_SENSORS_NZXT_SMART2 is not set # CONFIG_SENSORS_OCC_P8_I2C is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set CONFIG_SENSORS_PWM_FAN=y -# CONFIG_SENSORS_SBTSI is not set -# CONFIG_SENSORS_SBRMI is not set # CONFIG_SENSORS_SHT15 is not set # CONFIG_SENSORS_SHT21 is not set # CONFIG_SENSORS_SHT3x is not set -# CONFIG_SENSORS_SHT4x is not set # CONFIG_SENSORS_SHTC1 is not set # CONFIG_SENSORS_SIS5595 is not set # CONFIG_SENSORS_DME1737 is not set # CONFIG_SENSORS_EMC1403 is not set # CONFIG_SENSORS_EMC2103 is not set -# CONFIG_SENSORS_EMC2305 is not set # CONFIG_SENSORS_EMC6W201 is not set # CONFIG_SENSORS_SMSC47M1 is not set # CONFIG_SENSORS_SMSC47M192 is not set @@ -3883,7 +3729,6 @@ CONFIG_SENSORS_PWM_FAN=y # CONFIG_SENSORS_AMC6821 is not set # CONFIG_SENSORS_INA209 is not set # CONFIG_SENSORS_INA2XX is not set -# CONFIG_SENSORS_INA238 is not set # CONFIG_SENSORS_INA3221 is not set # CONFIG_SENSORS_TC74 is not set # CONFIG_SENSORS_THMC50 is not set @@ -3892,7 +3737,6 @@ CONFIG_SENSORS_PWM_FAN=y # CONFIG_SENSORS_TMP108 is not set # CONFIG_SENSORS_TMP401 is not set # CONFIG_SENSORS_TMP421 is not set -# CONFIG_SENSORS_TMP464 is not set # CONFIG_SENSORS_TMP513 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_VT1211 is not set @@ -3937,7 +3781,6 @@ CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y CONFIG_WATCHDOG_OPEN_TIMEOUT=0 # CONFIG_WATCHDOG_SYSFS is not set -# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set # # Watchdog Pretimeout Governors @@ -3960,7 +3803,6 @@ CONFIG_KHADAS_WATCHDOG=y # CONFIG_ARM_SMC_WATCHDOG is not set # CONFIG_ALIM7101_WDT is not set # CONFIG_I6300ESB_WDT is not set -# CONFIG_HP_WATCHDOG is not set # CONFIG_MEN_A21_WDT is not set # @@ -4006,7 +3848,6 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_MFD_MP2629 is not set # CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_MFD_HI6421_SPMI is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_HTC_I2CPLD is not set # CONFIG_LPC_ICH is not set @@ -4022,7 +3863,6 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX77650 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX77714 is not set # CONFIG_MFD_MAX77843 is not set # CONFIG_MFD_MAX8907 is not set # CONFIG_MFD_MAX8925 is not set @@ -4031,21 +3871,15 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX96745 is not set # CONFIG_MFD_MAX96755F is not set # CONFIG_MFD_MT6360 is not set -# CONFIG_MFD_MT6370 is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set -# CONFIG_MFD_OCELOT is not set # CONFIG_EZX_PCAP is not set # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_VIPERBOARD is not set -# CONFIG_MFD_NTXEC is not set # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set -# CONFIG_MFD_SY7636A is not set CONFIG_MFD_RDC321X=m -# CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_RT5120 is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK618 is not set # CONFIG_MFD_RK628 is not set @@ -4053,7 +3887,6 @@ CONFIG_MFD_RDC321X=m # CONFIG_MFD_RK630_I2C is not set # CONFIG_MFD_RK630_SPI is not set CONFIG_MFD_RK806=y -# CONFIG_MFD_RK806_I2C is not set CONFIG_MFD_RK806_SPI=y CONFIG_MFD_RK808=y # CONFIG_MFD_RK1000 is not set @@ -4069,6 +3902,7 @@ CONFIG_MFD_RK808=y # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set +# CONFIG_ABX500_CORE is not set # CONFIG_MFD_STMPE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set @@ -4089,6 +3923,7 @@ CONFIG_MFD_TPS6586X=y # CONFIG_MFD_TPS65910 is not set # CONFIG_MFD_TPS65912_I2C is not set # CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS80031 is not set # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set # CONFIG_MFD_WL1273_CORE is not set @@ -4105,17 +3940,13 @@ CONFIG_MFD_TPS6586X=y # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set # CONFIG_MFD_ROHM_BD718XX is not set +# CONFIG_MFD_ROHM_BD70528 is not set # CONFIG_MFD_ROHM_BD71828 is not set -# CONFIG_MFD_ROHM_BD957XMUF is not set # CONFIG_MFD_STPMIC1 is not set # CONFIG_MFD_STMFX is not set -# CONFIG_MFD_ATC260X_I2C is not set # CONFIG_MFD_KHADAS_MCU is not set -# CONFIG_MFD_QCOM_PM8008 is not set # CONFIG_RAVE_SP_CORE is not set # CONFIG_MFD_INTEL_M10_BMC is not set -# CONFIG_MFD_RSMU_I2C is not set -# CONFIG_MFD_RSMU_SPI is not set # end of Multifunction device drivers CONFIG_REGULATOR=y @@ -4127,7 +3958,6 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_ACT8865=y # CONFIG_REGULATOR_AD5398 is not set # CONFIG_REGULATOR_ARM_SCMI is not set -# CONFIG_REGULATOR_DA9121 is not set # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_DA9211 is not set CONFIG_REGULATOR_FAN53555=y @@ -4145,10 +3975,8 @@ CONFIG_REGULATOR_LP8752=y # CONFIG_REGULATOR_MAX1586 is not set # CONFIG_REGULATOR_MAX8649 is not set # CONFIG_REGULATOR_MAX8660 is not set -# CONFIG_REGULATOR_MAX8893 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_MAX20086 is not set # CONFIG_REGULATOR_MAX77826 is not set # CONFIG_REGULATOR_MCP16502 is not set # CONFIG_REGULATOR_MP5416 is not set @@ -4157,9 +3985,7 @@ CONFIG_REGULATOR_MP8865=y # CONFIG_REGULATOR_MP886X is not set # CONFIG_REGULATOR_MPQ7920 is not set # CONFIG_REGULATOR_MT6311 is not set -# CONFIG_REGULATOR_MT6315 is not set # CONFIG_REGULATOR_PCA9450 is not set -# CONFIG_REGULATOR_PF8X00 is not set # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PV88060 is not set # CONFIG_REGULATOR_PV88080 is not set @@ -4172,20 +3998,13 @@ CONFIG_REGULATOR_RK806=y CONFIG_REGULATOR_RK808=y CONFIG_REGULATOR_RK860X=y # CONFIG_REGULATOR_RT4801 is not set -# CONFIG_REGULATOR_RT5190A is not set -# CONFIG_REGULATOR_RT5759 is not set -# CONFIG_REGULATOR_RT6160 is not set -# CONFIG_REGULATOR_RT6245 is not set -# CONFIG_REGULATOR_RTQ2134 is not set # CONFIG_REGULATOR_RTMV20 is not set -# CONFIG_REGULATOR_RTQ6752 is not set # CONFIG_REGULATOR_SLG51000 is not set # CONFIG_REGULATOR_SY8106A is not set # CONFIG_REGULATOR_SY8824X is not set # CONFIG_REGULATOR_SY8827N is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set -# CONFIG_REGULATOR_TPS6286X is not set # CONFIG_REGULATOR_TPS65023 is not set # CONFIG_REGULATOR_TPS6507X is not set CONFIG_REGULATOR_TPS65132=y @@ -4196,16 +4015,10 @@ CONFIG_REGULATOR_TPS6586X=y # CONFIG_REGULATOR_QCOM_LABIBB is not set CONFIG_REGULATOR_XZ3216=y # CONFIG_RC_CORE is not set - -# -# CEC support -# CONFIG_MEDIA_CEC_SUPPORT=y # CONFIG_CEC_CH7322 is not set # CONFIG_USB_PULSE8_CEC is not set # CONFIG_USB_RAINSHADOW_CEC is not set -# end of CEC support - CONFIG_MEDIA_SUPPORT=y # CONFIG_MEDIA_SUPPORT_FILTER is not set # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set @@ -4233,13 +4046,13 @@ CONFIG_DVB_CORE=y # # Video4Linux options # +CONFIG_VIDEO_V4L2=y CONFIG_VIDEO_V4L2_I2C=y CONFIG_VIDEO_V4L2_SUBDEV_API=y # CONFIG_VIDEO_ADV_DEBUG is not set # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set CONFIG_V4L2_MEM2MEM_DEV=y CONFIG_V4L2_FWNODE=y -CONFIG_V4L2_ASYNC=y # end of Video4Linux options # @@ -4259,10 +4072,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y # CONFIG_DVB_ULE_DEBUG is not set # end of Digital TV options -# -# Media drivers -# - # # Media drivers # @@ -4271,20 +4080,23 @@ CONFIG_MEDIA_USB_SUPPORT=y # # Webcam devices # +CONFIG_USB_VIDEO_CLASS=y +# CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV is not set # CONFIG_USB_GSPCA is not set # CONFIG_USB_PWC is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_USB_ZR364XX is not set +# CONFIG_USB_STKWEBCAM is not set # CONFIG_USB_S2255 is not set # CONFIG_VIDEO_USBTV is not set -CONFIG_USB_VIDEO_CLASS=y -# CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV is not set # # Analog TV USB devices # -# CONFIG_VIDEO_GO7007 is not set -# CONFIG_VIDEO_HDPVR is not set # CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_HDPVR is not set # CONFIG_VIDEO_STK1160_COMMON is not set +# CONFIG_VIDEO_GO7007 is not set # # Analog/digital TV USB devices @@ -4295,12 +4107,12 @@ CONFIG_USB_VIDEO_CLASS=y # # Digital TV USB devices # -# CONFIG_DVB_AS102 is not set -# CONFIG_DVB_B2C2_FLEXCOP_USB is not set # CONFIG_DVB_USB_V2 is not set -# CONFIG_SMS_USB_DRV is not set # CONFIG_DVB_TTUSB_BUDGET is not set # CONFIG_DVB_TTUSB_DEC is not set +# CONFIG_SMS_USB_DRV is not set +# CONFIG_DVB_B2C2_FLEXCOP_USB is not set +# CONFIG_DVB_AS102 is not set # # Webcam, TV (analog/digital) USB devices @@ -4315,91 +4127,31 @@ CONFIG_USB_VIDEO_CLASS=y # CONFIG_USB_MSI2500 is not set # CONFIG_MEDIA_PCI_SUPPORT is not set CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_SI470X is not set +# CONFIG_RADIO_SI4713 is not set +# CONFIG_USB_MR800 is not set +# CONFIG_USB_DSBR is not set # CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_SAA7706H is not set # CONFIG_RADIO_SHARK is not set # CONFIG_RADIO_SHARK2 is not set -# CONFIG_RADIO_SI4713 is not set +# CONFIG_USB_KEENE is not set +# CONFIG_USB_RAREMONO is not set +# CONFIG_USB_MA901 is not set # CONFIG_RADIO_TEA5764 is not set +# CONFIG_RADIO_SAA7706H is not set # CONFIG_RADIO_TEF6862 is not set # CONFIG_RADIO_WL1273 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_KEENE is not set -# CONFIG_USB_MA901 is not set -# CONFIG_USB_MR800 is not set -# CONFIG_USB_RAREMONO is not set -# CONFIG_RADIO_SI470X is not set -CONFIG_MEDIA_PLATFORM_DRIVERS=y +CONFIG_VIDEOBUF2_CORE=y +CONFIG_VIDEOBUF2_V4L2=y +CONFIG_VIDEOBUF2_MEMOPS=y +CONFIG_VIDEOBUF2_CMA_SG=y +CONFIG_VIDEOBUF2_VMALLOC=y +CONFIG_VIDEOBUF2_DMA_SG=y CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_SDR_PLATFORM_DRIVERS is not set -# CONFIG_DVB_PLATFORM_DRIVERS is not set -CONFIG_V4L_MEM2MEM_DRIVERS=y -# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set -# CONFIG_VIDEO_MUX is not set - -# -# Allegro DVT media platform drivers -# - -# -# Amlogic media platform drivers -# - -# -# Amphion drivers -# - -# -# Aspeed media platform drivers -# -# CONFIG_VIDEO_ASPEED is not set - -# -# Atmel media platform drivers -# - -# -# Cadence media platform drivers -# -# CONFIG_VIDEO_CADENCE_CSI2RX is not set -# CONFIG_VIDEO_CADENCE_CSI2TX is not set - -# -# Chips&Media media platform drivers -# - -# -# Intel media platform drivers -# - -# -# Marvell media platform drivers -# # CONFIG_VIDEO_CAFE_CCIC is not set - -# -# Mediatek media platform drivers -# - -# -# NVidia media platform drivers -# - -# -# NXP media platform drivers -# - -# -# Qualcomm media platform drivers -# - -# -# Renesas media platform drivers -# - -# -# Rockchip media platform drivers -# +# CONFIG_VIDEO_CADENCE is not set +# CONFIG_VIDEO_ASPEED is not set +# CONFIG_VIDEO_MUX is not set CONFIG_VIDEO_ROCKCHIP_CIF=y CONFIG_ROCKCHIP_CIF_WORKMODE_PINGPONG=y # CONFIG_ROCKCHIP_CIF_WORKMODE_ONEFRAME is not set @@ -4418,96 +4170,174 @@ CONFIG_VIDEO_ROCKCHIP_ISPP=y # CONFIG_VIDEO_ROCKCHIP_ISPP_VERSION_V10 is not set CONFIG_VIDEO_ROCKCHIP_ISPP_VERSION_V20=y CONFIG_VIDEO_ROCKCHIP_HDMIRX_CLASS=y -# CONFIG_VIDEO_ROCKCHIP_HDMIRX is not set -CONFIG_VIDEO_ROCKCHIP_RGA=y -# CONFIG_VIDEO_ROCKCHIP_ISP1 is not set +CONFIG_VIDEO_ROCKCHIP_HDMIRX=y +# CONFIG_VIDEO_XILINX is not set +CONFIG_V4L_MEM2MEM_DRIVERS=y +# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set +CONFIG_VIDEO_ROCKCHIP_RGA=y +# CONFIG_DVB_PLATFORM_DRIVERS is not set +# CONFIG_SDR_PLATFORM_DRIVERS is not set # -# Samsung media platform drivers +# MMC/SDIO DVB adapters # +# CONFIG_SMS_SDIO_DRV is not set +# CONFIG_V4L_TEST_DRIVERS is not set +# CONFIG_DVB_TEST_DRIVERS is not set +# end of Media drivers # -# STMicroelectronics media platform drivers +# Media ancillary drivers # +CONFIG_MEDIA_ATTACH=y # -# Sunxi media platform drivers +# Audio decoders, processors and mixers # +# CONFIG_VIDEO_TVAUDIO is not set +# CONFIG_VIDEO_TDA7432 is not set +# CONFIG_VIDEO_TDA9840 is not set +# CONFIG_VIDEO_TDA1997X is not set +# CONFIG_VIDEO_TEA6415C is not set +# CONFIG_VIDEO_TEA6420 is not set +# CONFIG_VIDEO_MSP3400 is not set +# CONFIG_VIDEO_CS3308 is not set +# CONFIG_VIDEO_CS5345 is not set +# CONFIG_VIDEO_CS53L32A is not set +# CONFIG_VIDEO_TLV320AIC23B is not set +# CONFIG_VIDEO_UDA1342 is not set +# CONFIG_VIDEO_WM8775 is not set +# CONFIG_VIDEO_WM8739 is not set +# CONFIG_VIDEO_VP27SMPX is not set +# CONFIG_VIDEO_SONY_BTF_MPX is not set +# end of Audio decoders, processors and mixers # -# Texas Instruments drivers +# RDS decoders # +# CONFIG_VIDEO_SAA6588 is not set +# end of RDS decoders # -# Verisilicon media platform drivers +# Video decoders # -# CONFIG_VIDEO_HANTRO is not set +# CONFIG_VIDEO_ADV7180 is not set +# CONFIG_VIDEO_ADV7183 is not set +# CONFIG_VIDEO_ADV748X is not set +# CONFIG_VIDEO_ADV7604 is not set +# CONFIG_VIDEO_ADV7842 is not set +# CONFIG_VIDEO_BT819 is not set +# CONFIG_VIDEO_BT856 is not set +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_EP9461E is not set +# CONFIG_VIDEO_KS0127 is not set +# CONFIG_VIDEO_IT6616 is not set +CONFIG_VIDEO_LT6911UXC=y +# CONFIG_VIDEO_LT6911UXE is not set +CONFIG_VIDEO_LT7911D=y +# CONFIG_VIDEO_LT7911UXC is not set +# CONFIG_VIDEO_LT8619C is not set +# CONFIG_VIDEO_ML86V7667 is not set +# CONFIG_VIDEO_NVP6158 is not set +# CONFIG_VIDEO_NVP6188 is not set +# CONFIG_VIDEO_NVP6324 is not set +# CONFIG_VIDEO_OTP_EEPROM is not set +CONFIG_VIDEO_RK628=y +CONFIG_VIDEO_RK628_CSI=y +CONFIG_VIDEO_RK628_BT1120=y +# CONFIG_VIDEO_SAA7110 is not set +# CONFIG_VIDEO_SAA711X is not set +# CONFIG_VIDEO_TC358743 is not set +CONFIG_VIDEO_TC35874X=y +# CONFIG_VIDEO_TECHPOINT is not set +# CONFIG_VIDEO_THCV244 is not set +# CONFIG_VIDEO_TVP514X is not set +# CONFIG_VIDEO_TVP5150 is not set +# CONFIG_VIDEO_TVP7002 is not set +# CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9903 is not set +# CONFIG_VIDEO_TW9906 is not set +# CONFIG_VIDEO_TW9910 is not set +# CONFIG_VIDEO_VPX3220 is not set +# CONFIG_VIDEO_MAX9286 is not set +# CONFIG_VIDEO_MAX96712 is not set +# CONFIG_VIDEO_MAX96714 is not set +# CONFIG_VIDEO_MAX96722 is not set +# CONFIG_VIDEO_DES_MAXIM4C is not set # -# VIA media platform drivers +# Video and audio decoders # +# CONFIG_VIDEO_SAA717X is not set +# CONFIG_VIDEO_CX25840 is not set +# CONFIG_VIDEO_IT66353 is not set +# end of Video decoders # -# Xilinx media platform drivers +# Video encoders # -# CONFIG_VIDEO_XILINX is not set +# CONFIG_VIDEO_SAA7127 is not set +# CONFIG_VIDEO_SAA7185 is not set +# CONFIG_VIDEO_ADV7170 is not set +# CONFIG_VIDEO_ADV7175 is not set +# CONFIG_VIDEO_ADV7343 is not set +# CONFIG_VIDEO_ADV7393 is not set +# CONFIG_VIDEO_ADV7511 is not set +# CONFIG_VIDEO_AD9389B is not set +# CONFIG_VIDEO_AK881X is not set +# CONFIG_VIDEO_THS8200 is not set +# end of Video encoders # -# MMC/SDIO DVB adapters +# Video improvement chips # -# CONFIG_SMS_SDIO_DRV is not set -# CONFIG_V4L_TEST_DRIVERS is not set -# CONFIG_DVB_TEST_DRIVERS is not set -CONFIG_VIDEOBUF2_CORE=y -CONFIG_VIDEOBUF2_V4L2=y -CONFIG_VIDEOBUF2_MEMOPS=y -CONFIG_VIDEOBUF2_CMA_SG=y -CONFIG_VIDEOBUF2_VMALLOC=y -CONFIG_VIDEOBUF2_DMA_SG=y -# end of Media drivers +# CONFIG_VIDEO_UPD64031A is not set +# CONFIG_VIDEO_UPD64083 is not set +# end of Video improvement chips # -# Media ancillary drivers +# Audio/Video compression chips # -CONFIG_MEDIA_ATTACH=y -# CONFIG_VIDEO_CAM_SLEEP_WAKEUP is not set +# CONFIG_VIDEO_SAA6752HS is not set +# end of Audio/Video compression chips + +# +# SDR tuner chips +# +# CONFIG_SDR_MAX2175 is not set +# end of SDR tuner chips + +# +# Miscellaneous helper chips +# +# CONFIG_VIDEO_THS7303 is not set +# CONFIG_VIDEO_M52790 is not set +# CONFIG_VIDEO_I2C is not set +# CONFIG_VIDEO_ST_MIPID02 is not set +CONFIG_VIDEO_RK_IRCUT=y +# end of Miscellaneous helper chips # # Camera sensor devices # # CONFIG_VIDEO_AR0230 is not set -# CONFIG_VIDEO_AR0521 is not set # CONFIG_VIDEO_AR0822 is not set -# CONFIG_VIDEO_AR2020 is not set -# CONFIG_VIDEO_BF3925 is not set # CONFIG_VIDEO_GC02M2 is not set -# CONFIG_VIDEO_GC0312 is not set -# CONFIG_VIDEO_GC0329 is not set -# CONFIG_VIDEO_GC0403 is not set -# CONFIG_VIDEO_GC05A2 is not set # CONFIG_VIDEO_GC08A3 is not set # CONFIG_VIDEO_GC1084 is not set -# CONFIG_VIDEO_GC2035 is not set # CONFIG_VIDEO_GC2053 is not set # CONFIG_VIDEO_GC2093 is not set # CONFIG_VIDEO_GC2145 is not set -# CONFIG_VIDEO_GC2155 is not set -# CONFIG_VIDEO_GC2355 is not set -# CONFIG_VIDEO_GC2375H is not set # CONFIG_VIDEO_GC2385 is not set # CONFIG_VIDEO_GC3003 is not set # CONFIG_VIDEO_GC4023 is not set # CONFIG_VIDEO_GC4653 is not set # CONFIG_VIDEO_GC4663 is not set # CONFIG_VIDEO_GC4C33 is not set -# CONFIG_VIDEO_GC5024 is not set # CONFIG_VIDEO_GC5025 is not set # CONFIG_VIDEO_GC5035 is not set CONFIG_VIDEO_GC8034=y # CONFIG_VIDEO_HI556 is not set -# CONFIG_VIDEO_HI846 is not set -# CONFIG_VIDEO_HI847 is not set -# CONFIG_VIDEO_IMX208 is not set # CONFIG_VIDEO_IMX214 is not set # CONFIG_VIDEO_IMX219 is not set # CONFIG_VIDEO_IMX258 is not set @@ -4521,50 +4351,22 @@ CONFIG_VIDEO_GC8034=y # CONFIG_VIDEO_IMX334 is not set # CONFIG_VIDEO_IMX335 is not set # CONFIG_VIDEO_IMX347 is not set -# CONFIG_VIDEO_IMX355 is not set # CONFIG_VIDEO_IMX378 is not set -# CONFIG_VIDEO_IMX412 is not set CONFIG_VIDEO_IMX415=y CONFIG_VIDEO_IMX464=y # CONFIG_VIDEO_IMX492 is not set +# CONFIG_VIDEO_IMX355 is not set # CONFIG_VIDEO_IMX577 is not set # CONFIG_VIDEO_IMX586 is not set -# CONFIG_VIDEO_JX_F37 is not set -# CONFIG_VIDEO_JX_H62 is not set -# CONFIG_VIDEO_JX_H65 is not set # CONFIG_VIDEO_JX_K17 is not set -# CONFIG_VIDEO_MIS2031 is not set -# CONFIG_VIDEO_MIS4001 is not set -# CONFIG_VIDEO_MT9M001 is not set -# CONFIG_VIDEO_MT9M032 is not set -# CONFIG_VIDEO_MT9M111 is not set -# CONFIG_VIDEO_MT9P031 is not set -# CONFIG_VIDEO_MT9T001 is not set -# CONFIG_VIDEO_MT9T112 is not set -# CONFIG_VIDEO_MT9V011 is not set -# CONFIG_VIDEO_MT9V032 is not set -# CONFIG_VIDEO_MT9V111 is not set -# CONFIG_VIDEO_NOON010PC30 is not set -# CONFIG_VIDEO_OG01A10 is not set -# CONFIG_VIDEO_OG01A1B is not set -# CONFIG_VIDEO_OG02B10 is not set # CONFIG_VIDEO_OS02G10 is not set # CONFIG_VIDEO_OS02K10 is not set # CONFIG_VIDEO_OS03B10 is not set CONFIG_VIDEO_OS04A10=y -# CONFIG_VIDEO_OS04D10 is not set # CONFIG_VIDEO_OS05A20 is not set # CONFIG_VIDEO_OS08A20 is not set -# CONFIG_VIDEO_OV02A10 is not set # CONFIG_VIDEO_OV02B10 is not set # CONFIG_VIDEO_OV02K10 is not set -# CONFIG_VIDEO_OV08D10 is not set -# CONFIG_VIDEO_OV12D2Q is not set -CONFIG_VIDEO_OV13850=y -CONFIG_VIDEO_OV13855=y -# CONFIG_VIDEO_OV13858 is not set -# CONFIG_VIDEO_OV13B10 is not set -# CONFIG_VIDEO_OV16885 is not set # CONFIG_VIDEO_OV16A10 is not set # CONFIG_VIDEO_OV16A1Q is not set # CONFIG_VIDEO_OV2640 is not set @@ -4579,36 +4381,34 @@ CONFIG_VIDEO_OV4689=y # CONFIG_VIDEO_OV5640 is not set # CONFIG_VIDEO_OV5645 is not set # CONFIG_VIDEO_OV5647 is not set -# CONFIG_VIDEO_OV5648 is not set +# CONFIG_VIDEO_OV6650 is not set # CONFIG_VIDEO_OV5670 is not set # CONFIG_VIDEO_OV5675 is not set -# CONFIG_VIDEO_OV5693 is not set CONFIG_VIDEO_OV5695=y -# CONFIG_VIDEO_OV6650 is not set CONFIG_VIDEO_OV7251=y +# CONFIG_VIDEO_OV772X is not set # CONFIG_VIDEO_OV7640 is not set # CONFIG_VIDEO_OV7670 is not set -# CONFIG_VIDEO_OV772X is not set # CONFIG_VIDEO_OV7740 is not set # CONFIG_VIDEO_OV8856 is not set # CONFIG_VIDEO_OV8858 is not set -# CONFIG_VIDEO_OV8865 is not set # CONFIG_VIDEO_OV9281 is not set -# CONFIG_VIDEO_OV9282 is not set # CONFIG_VIDEO_OV9640 is not set # CONFIG_VIDEO_OV9650 is not set -# CONFIG_VIDEO_PREISP_DUMMY_SENSOR is not set -# CONFIG_VIDEO_RDACM20 is not set -# CONFIG_VIDEO_RDACM21 is not set -# CONFIG_VIDEO_RJ54N1 is not set -# CONFIG_VIDEO_S5C73M3 is not set -# CONFIG_VIDEO_S5K3L6XX is not set -# CONFIG_VIDEO_S5K3L8XX is not set -# CONFIG_VIDEO_S5K4ECGX is not set -# CONFIG_VIDEO_S5K5BAF is not set -# CONFIG_VIDEO_S5K6A3 is not set -# CONFIG_VIDEO_S5K6AA is not set -# CONFIG_VIDEO_S5KJN1 is not set +# CONFIG_VIDEO_OV12D2Q is not set +CONFIG_VIDEO_OV13850=y +CONFIG_VIDEO_OV13855=y +# CONFIG_VIDEO_OV13858 is not set +# CONFIG_VIDEO_VS6624 is not set +# CONFIG_VIDEO_MT9M001 is not set +# CONFIG_VIDEO_MT9M032 is not set +# CONFIG_VIDEO_MT9M111 is not set +# CONFIG_VIDEO_MT9P031 is not set +# CONFIG_VIDEO_MT9T001 is not set +# CONFIG_VIDEO_MT9T112 is not set +# CONFIG_VIDEO_MT9V011 is not set +# CONFIG_VIDEO_MT9V032 is not set +# CONFIG_VIDEO_MT9V111 is not set # CONFIG_VIDEO_SC031GS is not set # CONFIG_VIDEO_SC035GS is not set # CONFIG_VIDEO_SC132GS is not set @@ -4621,7 +4421,6 @@ CONFIG_VIDEO_OV7251=y # CONFIG_VIDEO_SC230AI is not set # CONFIG_VIDEO_SC2310 is not set # CONFIG_VIDEO_SC2336 is not set -# CONFIG_VIDEO_SC2355 is not set # CONFIG_VIDEO_SC301IOT is not set # CONFIG_VIDEO_SC3336 is not set # CONFIG_VIDEO_SC3338 is not set @@ -4630,8 +4429,6 @@ CONFIG_VIDEO_OV7251=y # CONFIG_VIDEO_SC4238 is not set # CONFIG_VIDEO_SC430CS is not set # CONFIG_VIDEO_SC4336 is not set -# CONFIG_VIDEO_SC4336P is not set -# CONFIG_VIDEO_SC450AI is not set # CONFIG_VIDEO_SC500AI is not set # CONFIG_VIDEO_SC501AI is not set # CONFIG_VIDEO_SC530AI is not set @@ -4639,10 +4436,20 @@ CONFIG_VIDEO_OV7251=y # CONFIG_VIDEO_SC850SL is not set # CONFIG_VIDEO_SENSOR_ADAPTER is not set # CONFIG_VIDEO_SR030PC30 is not set -# CONFIG_VIDEO_VS6624 is not set -# CONFIG_VIDEO_CCS is not set -# CONFIG_VIDEO_ET8EK8 is not set +# CONFIG_VIDEO_NOON010PC30 is not set # CONFIG_VIDEO_M5MOLS is not set +# CONFIG_VIDEO_RDACM20 is not set +# CONFIG_VIDEO_RJ54N1 is not set +# CONFIG_VIDEO_S5K3L6XX is not set +# CONFIG_VIDEO_S5K6AA is not set +# CONFIG_VIDEO_S5K6A3 is not set +# CONFIG_VIDEO_S5K4ECGX is not set +# CONFIG_VIDEO_S5K5BAF is not set +# CONFIG_VIDEO_S5KJN1 is not set +# CONFIG_VIDEO_SMIAPP is not set +# CONFIG_VIDEO_ET8EK8 is not set +# CONFIG_VIDEO_S5C73M3 is not set +# CONFIG_VIDEO_PREISP_DUMMY_SENSOR is not set # end of Camera sensor devices # @@ -4655,7 +4462,6 @@ CONFIG_VIDEO_CN3927V=m CONFIG_VIDEO_DW9714=m # CONFIG_VIDEO_DW9763 is not set CONFIG_VIDEO_DW9768=m -# CONFIG_VIDEO_DW9800V is not set CONFIG_VIDEO_DW9800W=m CONFIG_VIDEO_DW9807_VCM=m CONFIG_VIDEO_FP5510=m @@ -4672,140 +4478,16 @@ CONFIG_VIDEO_FP5510=m # end of Flash devices # -# Audio decoders, processors and mixers -# -# CONFIG_VIDEO_CS3308 is not set -# CONFIG_VIDEO_CS5345 is not set -# CONFIG_VIDEO_CS53L32A is not set -# CONFIG_VIDEO_MSP3400 is not set -# CONFIG_VIDEO_SONY_BTF_MPX is not set -# CONFIG_VIDEO_TDA1997X is not set -# CONFIG_VIDEO_TDA7432 is not set -# CONFIG_VIDEO_TDA9840 is not set -# CONFIG_VIDEO_TEA6415C is not set -# CONFIG_VIDEO_TEA6420 is not set -# CONFIG_VIDEO_TLV320AIC23B is not set -# CONFIG_VIDEO_TVAUDIO is not set -# CONFIG_VIDEO_UDA1342 is not set -# CONFIG_VIDEO_VP27SMPX is not set -# CONFIG_VIDEO_WM8739 is not set -# CONFIG_VIDEO_WM8775 is not set -# end of Audio decoders, processors and mixers - -# -# RDS decoders -# -# CONFIG_VIDEO_SAA6588 is not set -# end of RDS decoders - -# -# Video decoders +# SPI helper chips # -# CONFIG_VIDEO_ADV7180 is not set -# CONFIG_VIDEO_ADV7183 is not set -# CONFIG_VIDEO_ADV748X is not set -# CONFIG_VIDEO_ADV7604 is not set -# CONFIG_VIDEO_ADV7842 is not set -# CONFIG_VIDEO_BT819 is not set -# CONFIG_VIDEO_BT856 is not set -# CONFIG_VIDEO_BT866 is not set -# CONFIG_VIDEO_EP9461E is not set -# CONFIG_VIDEO_ISL7998X is not set -# CONFIG_VIDEO_IT6616 is not set -# CONFIG_VIDEO_KS0127 is not set -CONFIG_VIDEO_LT6911UXC=y -# CONFIG_VIDEO_LT6911UXE is not set -CONFIG_VIDEO_LT7911D=y -# CONFIG_VIDEO_LT7911UXC is not set -# CONFIG_VIDEO_LT8619C is not set -# CONFIG_VIDEO_MAX9286 is not set -# CONFIG_VIDEO_MAX96712 is not set -# CONFIG_VIDEO_MAX96714 is not set -# CONFIG_VIDEO_MAX96722 is not set -# CONFIG_VIDEO_MAX96756 is not set -# CONFIG_VIDEO_ML86V7667 is not set -# CONFIG_VIDEO_NVP6158 is not set -# CONFIG_VIDEO_NVP6188 is not set -# CONFIG_VIDEO_NVP6324 is not set -# CONFIG_VIDEO_OTP_EEPROM is not set -# CONFIG_VIDEO_SAA7110 is not set -# CONFIG_VIDEO_SAA711X is not set -# CONFIG_VIDEO_TC358743 is not set -CONFIG_VIDEO_TC35874X=y -# CONFIG_VIDEO_TECHPOINT is not set -# CONFIG_VIDEO_THCV244 is not set -# CONFIG_VIDEO_TVP514X is not set -# CONFIG_VIDEO_TVP5150 is not set -# CONFIG_VIDEO_TVP7002 is not set -# CONFIG_VIDEO_TW2804 is not set -# CONFIG_VIDEO_TW9903 is not set -# CONFIG_VIDEO_TW9906 is not set -# CONFIG_VIDEO_TW9910 is not set -# CONFIG_VIDEO_VPX3220 is not set -CONFIG_VIDEO_RK628=y -CONFIG_VIDEO_RK628_CSI=y -CONFIG_VIDEO_RK628_BT1120=y -# CONFIG_VIDEO_DES_MAXIM2C is not set -# CONFIG_VIDEO_DES_MAXIM4C is not set - -# -# Video and audio decoders -# -# CONFIG_VIDEO_SAA717X is not set -# CONFIG_VIDEO_CX25840 is not set -# CONFIG_VIDEO_IT66353 is not set -# end of Video decoders - -# -# Video encoders -# -# CONFIG_VIDEO_AD9389B is not set -# CONFIG_VIDEO_ADV7170 is not set -# CONFIG_VIDEO_ADV7175 is not set -# CONFIG_VIDEO_ADV7343 is not set -# CONFIG_VIDEO_ADV7393 is not set -# CONFIG_VIDEO_ADV7511 is not set -# CONFIG_VIDEO_AK881X is not set -# CONFIG_VIDEO_SAA7127 is not set -# CONFIG_VIDEO_SAA7185 is not set -# CONFIG_VIDEO_THS8200 is not set -# end of Video encoders - -# -# Video improvement chips -# -# CONFIG_VIDEO_UPD64031A is not set -# CONFIG_VIDEO_UPD64083 is not set -# end of Video improvement chips - -# -# Audio/Video compression chips -# -# CONFIG_VIDEO_SAA6752HS is not set -# end of Audio/Video compression chips - -# -# SDR tuner chips -# -# CONFIG_SDR_MAX2175 is not set -# end of SDR tuner chips - -# -# Miscellaneous helper chips -# -# CONFIG_VIDEO_I2C is not set -# CONFIG_VIDEO_M52790 is not set -CONFIG_VIDEO_RK_IRCUT=y -# CONFIG_VIDEO_ST_MIPID02 is not set -# CONFIG_VIDEO_THS7303 is not set -# end of Miscellaneous helper chips +# CONFIG_VIDEO_GS1662 is not set +# CONFIG_VIDEO_ROCKCHIP_PREISP is not set +# end of SPI helper chips # # Media SPI Adapters # CONFIG_CXD2880_SPI_DRV=m -# CONFIG_VIDEO_GS1662 is not set -# CONFIG_VIDEO_ROCKCHIP_PREISP is not set # end of Media SPI Adapters CONFIG_MEDIA_TUNER=y @@ -4813,43 +4495,43 @@ CONFIG_MEDIA_TUNER=y # # Customize TV tuners # -CONFIG_MEDIA_TUNER_E4000=m -CONFIG_MEDIA_TUNER_FC0011=m -CONFIG_MEDIA_TUNER_FC0012=m -CONFIG_MEDIA_TUNER_FC0013=m -CONFIG_MEDIA_TUNER_FC2580=m -CONFIG_MEDIA_TUNER_IT913X=m -CONFIG_MEDIA_TUNER_M88RS6000T=m -CONFIG_MEDIA_TUNER_MAX2165=m -CONFIG_MEDIA_TUNER_MC44S803=m -CONFIG_MEDIA_TUNER_MSI001=m -CONFIG_MEDIA_TUNER_MT2060=m -CONFIG_MEDIA_TUNER_MT2063=m -CONFIG_MEDIA_TUNER_MT20XX=m -CONFIG_MEDIA_TUNER_MT2131=m -CONFIG_MEDIA_TUNER_MT2266=m -CONFIG_MEDIA_TUNER_MXL301RF=m -CONFIG_MEDIA_TUNER_MXL5005S=m -CONFIG_MEDIA_TUNER_MXL5007T=m -CONFIG_MEDIA_TUNER_QM1D1B0004=m -CONFIG_MEDIA_TUNER_QM1D1C0042=m -CONFIG_MEDIA_TUNER_QT1010=m -CONFIG_MEDIA_TUNER_R820T=m -CONFIG_MEDIA_TUNER_SI2157=m CONFIG_MEDIA_TUNER_SIMPLE=m -CONFIG_MEDIA_TUNER_TDA18212=m -CONFIG_MEDIA_TUNER_TDA18218=m CONFIG_MEDIA_TUNER_TDA18250=m -CONFIG_MEDIA_TUNER_TDA18271=m -CONFIG_MEDIA_TUNER_TDA827X=m CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA18271=m CONFIG_MEDIA_TUNER_TDA9887=m CONFIG_MEDIA_TUNER_TEA5761=m CONFIG_MEDIA_TUNER_TEA5767=m -CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_MSI001=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_QT1010=m CONFIG_MEDIA_TUNER_XC2028=m -CONFIG_MEDIA_TUNER_XC4000=m CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_MEDIA_TUNER_XC4000=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88RS6000T=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_SI2157=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_R820T=m +CONFIG_MEDIA_TUNER_MXL301RF=m +CONFIG_MEDIA_TUNER_QM1D1C0042=m +CONFIG_MEDIA_TUNER_QM1D1B0004=m # end of Customize TV tuners # @@ -4859,124 +4541,124 @@ CONFIG_MEDIA_TUNER_XC5000=m # # Multistandard (satellite) frontends # -CONFIG_DVB_M88DS3103=m -CONFIG_DVB_MXL5XX=m CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV0910=m CONFIG_DVB_STV6110x=m CONFIG_DVB_STV6111=m +CONFIG_DVB_MXL5XX=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends # CONFIG_DVB_DRXK=m +CONFIG_DVB_TDA18271C2DD=m +CONFIG_DVB_SI2165=m CONFIG_DVB_MN88472=m CONFIG_DVB_MN88473=m -CONFIG_DVB_SI2165=m -CONFIG_DVB_TDA18271C2DD=m # # DVB-S (satellite) frontends # CONFIG_DVB_CX24110=m -CONFIG_DVB_CX24116=m -CONFIG_DVB_CX24117=m -CONFIG_DVB_CX24120=m CONFIG_DVB_CX24123=m -CONFIG_DVB_DS3000=m -CONFIG_DVB_MB86A16=m CONFIG_DVB_MT312=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m CONFIG_DVB_S5H1420=m -CONFIG_DVB_SI21XX=m -CONFIG_DVB_STB6000=m CONFIG_DVB_STV0288=m +CONFIG_DVB_STB6000=m CONFIG_DVB_STV0299=m -CONFIG_DVB_STV0900=m CONFIG_DVB_STV6110=m -CONFIG_DVB_TDA10071=m -CONFIG_DVB_TDA10086=m +CONFIG_DVB_STV0900=m CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA10086=m CONFIG_DVB_TDA8261=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m -CONFIG_DVB_TS2020=m CONFIG_DVB_TUA6100=m -CONFIG_DVB_TUNER_CX24113=m -CONFIG_DVB_TUNER_ITD1000=m -CONFIG_DVB_VES1X93=m -CONFIG_DVB_ZL10036=m -CONFIG_DVB_ZL10039=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24117=m +CONFIG_DVB_CX24120=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_MB86A16=m +CONFIG_DVB_TDA10071=m # # DVB-T (terrestrial) frontends # -CONFIG_DVB_AF9013=m +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m CONFIG_DVB_CX22700=m CONFIG_DVB_CX22702=m -CONFIG_DVB_CXD2820R=m -CONFIG_DVB_CXD2841ER=m +CONFIG_DVB_S5H1432=m +CONFIG_DVB_DRXD=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m CONFIG_DVB_DIB3000MB=m CONFIG_DVB_DIB3000MC=m CONFIG_DVB_DIB7000M=m CONFIG_DVB_DIB7000P=m CONFIG_DVB_DIB9000=m -CONFIG_DVB_DRXD=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_AF9013=m CONFIG_DVB_EC100=m -CONFIG_DVB_L64781=m -CONFIG_DVB_MT352=m -CONFIG_DVB_NXT6000=m +CONFIG_DVB_STV0367=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_CXD2841ER=m CONFIG_DVB_RTL2830=m CONFIG_DVB_RTL2832=m CONFIG_DVB_RTL2832_SDR=m -CONFIG_DVB_S5H1432=m CONFIG_DVB_SI2168=m -CONFIG_DVB_SP887X=m -CONFIG_DVB_STV0367=m -CONFIG_DVB_TDA10048=m -CONFIG_DVB_TDA1004X=m CONFIG_DVB_ZD1301_DEMOD=m -CONFIG_DVB_ZL10353=m CONFIG_DVB_CXD2880=m # # DVB-C (cable) frontends # -CONFIG_DVB_STV0297=m +CONFIG_DVB_VES1820=m CONFIG_DVB_TDA10021=m CONFIG_DVB_TDA10023=m -CONFIG_DVB_VES1820=m +CONFIG_DVB_STV0297=m # # ATSC (North American/Korean Terrestrial/Cable DTV) frontends -# -CONFIG_DVB_AU8522=m -CONFIG_DVB_AU8522_DTV=m -CONFIG_DVB_AU8522_V4L=m +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m CONFIG_DVB_BCM3510=m -CONFIG_DVB_LG2160=m +CONFIG_DVB_LGDT330X=m CONFIG_DVB_LGDT3305=m CONFIG_DVB_LGDT3306A=m -CONFIG_DVB_LGDT330X=m -CONFIG_DVB_MXL692=m -CONFIG_DVB_NXT200X=m -CONFIG_DVB_OR51132=m -CONFIG_DVB_OR51211=m +CONFIG_DVB_LG2160=m CONFIG_DVB_S5H1409=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m CONFIG_DVB_S5H1411=m # # ISDB-T (terrestrial) frontends # +CONFIG_DVB_S921=m CONFIG_DVB_DIB8000=m CONFIG_DVB_MB86A20S=m -CONFIG_DVB_S921=m # # ISDB-S (satellite) & ISDB-T (terrestrial) frontends # -CONFIG_DVB_MN88443X=m CONFIG_DVB_TC90522=m +CONFIG_DVB_MN88443X=m # # Digital terrestrial only tuners/PLL @@ -4988,25 +4670,25 @@ CONFIG_DVB_TUNER_DIB0090=m # # SEC control devices for DVB-S # -CONFIG_DVB_A8293=m -CONFIG_DVB_AF9033=m -CONFIG_DVB_ASCOT2E=m -CONFIG_DVB_ATBM8830=m -CONFIG_DVB_HELENE=m -CONFIG_DVB_HORUS3A=m +CONFIG_DVB_DRX39XYJ=m +CONFIG_DVB_LNBH25=m +CONFIG_DVB_LNBH29=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m CONFIG_DVB_ISL6405=m CONFIG_DVB_ISL6421=m CONFIG_DVB_ISL6423=m -CONFIG_DVB_IX2505V=m +CONFIG_DVB_A8293=m CONFIG_DVB_LGS8GL5=m CONFIG_DVB_LGS8GXX=m -CONFIG_DVB_LNBH25=m -CONFIG_DVB_LNBH29=m -CONFIG_DVB_LNBP21=m -CONFIG_DVB_LNBP22=m -CONFIG_DVB_M88RS2000=m +CONFIG_DVB_ATBM8830=m CONFIG_DVB_TDA665x=m -CONFIG_DVB_DRX39XYJ=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m +CONFIG_DVB_HORUS3A=m +CONFIG_DVB_ASCOT2E=m +CONFIG_DVB_HELENE=m # # Common Interface (EN50221) controller drivers @@ -5024,22 +4706,24 @@ CONFIG_DVB_SP2=m # # Graphics support # +# CONFIG_VGA_ARB is not set CONFIG_DRM=y -# CONFIG_DRM_EDID is not set +CONFIG_DRM_EDID=y # CONFIG_DRM_IGNORE_IOTCL_PERMIT is not set CONFIG_DRM_MIPI_DSI=y +CONFIG_DRM_DP=y +CONFIG_DRM_DP_AUX_CHARDEV=y # CONFIG_DRM_DEBUG_MM is not set +# CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set -# CONFIG_DRM_DEBUG_MODESET_LOCK is not set CONFIG_DRM_FBDEV_EMULATION=y -CONFIG_DRM_FBDEV_OVERALLOC=200 +CONFIG_DRM_FBDEV_OVERALLOC=100 # CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set -# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set -# CONFIG_DRM_DP is not set -CONFIG_DRM_GEM_DMA_HELPER=y -CONFIG_DRM_GEM_SHMEM_HELPER=y -CONFIG_DRM_SCHED=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_GEM_CMA_HELPER=y # # I2C encoder or helper chips @@ -5064,59 +4748,49 @@ CONFIG_DRM_MALI_DISPLAY=y # CONFIG_DRM_VGEM is not set # CONFIG_DRM_VKMS is not set CONFIG_DRM_ROCKCHIP=y -CONFIG_ROCKCHIP_DRM_DEBUG=y +# CONFIG_ROCKCHIP_DRM_DEBUG is not set # CONFIG_ROCKCHIP_DRM_DIRECT_SHOW is not set CONFIG_ROCKCHIP_VOP=y CONFIG_ROCKCHIP_VOP2=y -# CONFIG_ROCKCHIP_ANALOGIX_DP is not set -# CONFIG_ROCKCHIP_CDN_DP is not set +CONFIG_ROCKCHIP_ANALOGIX_DP=y +CONFIG_ROCKCHIP_CDN_DP=y # CONFIG_ROCKCHIP_DRM_TVE is not set -# CONFIG_ROCKCHIP_DW_HDMI is not set +CONFIG_ROCKCHIP_DW_HDMI=y CONFIG_ROCKCHIP_DW_MIPI_DSI=y -# CONFIG_ROCKCHIP_DW_DP is not set -# CONFIG_ROCKCHIP_INNO_HDMI is not set +CONFIG_ROCKCHIP_DW_DP=y +CONFIG_ROCKCHIP_INNO_HDMI=y CONFIG_ROCKCHIP_LVDS=y CONFIG_ROCKCHIP_RGB=y # CONFIG_ROCKCHIP_RK3066_HDMI is not set # CONFIG_ROCKCHIP_VCONN is not set # CONFIG_DRM_ROCKCHIP_VVOP is not set -CONFIG_ROCKCHIP_DW_HDCP2=y -# CONFIG_DRM_VMWGFX is not set +CONFIG_ROCKCHIP_DW_HDCP2=m # CONFIG_DRM_UDL is not set # CONFIG_DRM_AST is not set # CONFIG_DRM_MGAG200 is not set # CONFIG_DRM_RCAR_DW_HDMI is not set -# CONFIG_DRM_RCAR_USE_LVDS is not set -# CONFIG_DRM_RCAR_USE_MIPI_DSI is not set +# CONFIG_DRM_RCAR_LVDS is not set # CONFIG_DRM_QXL is not set -# CONFIG_DRM_VIRTIO_GPU is not set +# CONFIG_DRM_BOCHS is not set CONFIG_DRM_PANEL=y # # Display Panels # -# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set # CONFIG_DRM_PANEL_ARM_VERSATILE is not set # CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set -# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set # CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set -# CONFIG_DRM_PANEL_DSI_CM is not set # CONFIG_DRM_PANEL_LVDS is not set CONFIG_DRM_PANEL_SIMPLE=y -# CONFIG_DRM_PANEL_EDP is not set -# CONFIG_DRM_PANEL_EBBG_FT8719 is not set # CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set # CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set -# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set +# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set # CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set -# CONFIG_DRM_PANEL_JDI_R63452 is not set -# CONFIG_DRM_PANEL_KHADAS_TS050 is not set # CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set # CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set # CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set @@ -5124,11 +4798,7 @@ CONFIG_DRM_PANEL_SIMPLE=y # CONFIG_DRM_PANEL_LG_LB035Q02 is not set # CONFIG_DRM_PANEL_LG_LG4573 is not set # CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set -# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set # CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set # CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set # CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_MAXIM_MAX96752F is not set @@ -5137,38 +4807,33 @@ CONFIG_DRM_PANEL_SIMPLE=y # CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set # CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set # CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set +# CONFIG_DRM_PANEL_RADXA_DISPLAY_8HD is not set # CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set # CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set -# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set -# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set # CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set # CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set # CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set # CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set -# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set +# CONFIG_DRM_PANEL_SONY_ACX424AKP is not set # CONFIG_DRM_PANEL_SONY_ACX565AKM is not set -# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set -# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set # CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set # CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DRM_PANEL_TPO_TPG110 is not set # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set -# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set +# CONFIG_DRM_PANEL_INNOLUX_AFJ101_BA2131 is not set # end of Display Panels CONFIG_DRM_BRIDGE=y @@ -5178,16 +4843,10 @@ CONFIG_DRM_PANEL_BRIDGE=y # Display Interface Bridges # # CONFIG_DRM_CDNS_DSI is not set -# CONFIG_DRM_CHIPONE_ICN6211 is not set # CONFIG_DRM_CHRONTEL_CH7033 is not set -# CONFIG_DRM_DISPLAY_CONNECTOR is not set +CONFIG_DRM_DISPLAY_CONNECTOR=y # CONFIG_DRM_ITE_IT6161 is not set -# CONFIG_DRM_ITE_IT6505 is not set -# CONFIG_DRM_LONTIUM_LT8912B is not set -# CONFIG_DRM_LONTIUM_LT9211 is not set # CONFIG_DRM_LONTIUM_LT9611 is not set -# CONFIG_DRM_LONTIUM_LT9611UXC is not set -# CONFIG_DRM_ITE_IT66121 is not set # CONFIG_DRM_LVDS_CODEC is not set # CONFIG_DRM_MAXIM_MAX96745 is not set # CONFIG_DRM_MAXIM_MAX96755F is not set @@ -5208,31 +4867,29 @@ CONFIG_DRM_PANEL_BRIDGE=y # CONFIG_DRM_TOSHIBA_TC358767 is not set # CONFIG_DRM_TOSHIBA_TC358768 is not set # CONFIG_DRM_TOSHIBA_TC358775 is not set -# CONFIG_DRM_TI_DLPC3433 is not set # CONFIG_DRM_TI_TFP410 is not set -# CONFIG_DRM_TI_SN65DSI83 is not set # CONFIG_DRM_TI_SN65DSI86 is not set # CONFIG_DRM_TI_TPD12S015 is not set # CONFIG_DRM_ANALOGIX_ANX6345 is not set # CONFIG_DRM_ANALOGIX_ANX78XX is not set -# CONFIG_DRM_ANALOGIX_ANX7625 is not set +CONFIG_DRM_ANALOGIX_DP=y # CONFIG_DRM_I2C_ADV7511 is not set # CONFIG_DRM_CDNS_MHDP8546 is not set +CONFIG_DRM_DW_HDMI=y +# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set +CONFIG_DRM_DW_HDMI_I2S_AUDIO=y +CONFIG_DRM_DW_HDMI_CEC=y CONFIG_DRM_DW_MIPI_DSI=y # end of Display Interface Bridges # CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_ARCPGU is not set # CONFIG_DRM_HISI_HIBMC is not set # CONFIG_DRM_HISI_KIRIN is not set -# CONFIG_DRM_LOGICVC is not set -# CONFIG_DRM_ARCPGU is not set -# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_MXSFB is not set # CONFIG_DRM_CIRRUS_QEMU is not set # CONFIG_DRM_GM12U320 is not set -# CONFIG_DRM_PANEL_MIPI_DBI is not set -# CONFIG_DRM_SIMPLEDRM is not set # CONFIG_TINYDRM_HX8357D is not set -# CONFIG_TINYDRM_ILI9163 is not set # CONFIG_TINYDRM_ILI9225 is not set # CONFIG_TINYDRM_ILI9341 is not set # CONFIG_TINYDRM_ILI9486 is not set @@ -5243,13 +4900,9 @@ CONFIG_DRM_DW_MIPI_DSI=y # CONFIG_DRM_PL111 is not set # CONFIG_DRM_LIMA is not set CONFIG_DRM_PANFROST=y -CONFIG_DRM_PANTHOR=m # CONFIG_DRM_TIDSS is not set -# CONFIG_DRM_GUD is not set -# CONFIG_DRM_SSD130X is not set # CONFIG_DRM_LEGACY is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y -CONFIG_DRM_NOMODESET=y # CONFIG_MALI400 is not set CONFIG_MALI_DEVFREQ=y CONFIG_MALI_MIDGARD=y @@ -5279,8 +4932,6 @@ CONFIG_MALI_REAL_HW=y # # Platform specific options # -# end of Platform specific options - CONFIG_MALI_CSF_SUPPORT=y CONFIG_MALI_BIFROST_DEVFREQ=y CONFIG_MALI_BIFROST_GATOR_SUPPORT=y @@ -5441,12 +5092,6 @@ CONFIG_ROCKCHIP_MPP_JPGDEC=y CONFIG_ROCKCHIP_MPP_AV1DEC=y # CONFIG_ROCKCHIP_MPP_VDPP is not set # CONFIG_ROCKCHIP_DVBM is not set - -# -# Rockchip video tunnel support -# -# CONFIG_ROCKCHIP_VIDEO_TUNNEL is not set -# end of Rockchip video tunnel support # end of Rockchip Misc Video driver CONFIG_VIDEOMODE_HELPERS=y @@ -5489,9 +5134,7 @@ CONFIG_SND_MAX_CARDS=32 CONFIG_SND_PROC_FS=y CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_VERBOSE_PRINTK is not set -CONFIG_SND_CTL_FAST_LOOKUP=y # CONFIG_SND_DEBUG is not set -# CONFIG_SND_CTL_INPUT_VALIDATION is not set CONFIG_SND_SEQUENCER=y CONFIG_SND_SEQ_DUMMY=y CONFIG_SND_SEQ_HRTIMER_DEFAULT=y @@ -5503,7 +5146,6 @@ CONFIG_SND_DRIVERS=y # CONFIG_SND_VIRMIDI is not set # CONFIG_SND_MTPAV is not set # CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_SERIAL_GENERIC is not set # CONFIG_SND_MPU401 is not set # CONFIG_SND_PCI is not set @@ -5528,9 +5170,7 @@ CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y # CONFIG_SND_USB_VARIAX is not set CONFIG_SND_SOC=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -# CONFIG_SND_SOC_ADI is not set # CONFIG_SND_SOC_AMD_ACP is not set -# CONFIG_SND_AMD_ACP_CONFIG is not set # CONFIG_SND_ATMEL_SOC is not set # CONFIG_SND_BCM63XX_I2S_WHISTLER is not set # CONFIG_SND_DESIGNWARE_I2S is not set @@ -5549,15 +5189,15 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_FSL_SPDIF is not set # CONFIG_SND_SOC_FSL_ESAI is not set # CONFIG_SND_SOC_FSL_MICFIL is not set -# CONFIG_SND_SOC_FSL_XCVR is not set # CONFIG_SND_SOC_IMX_AUDMUX is not set # end of SoC Audio for Freescale CPUs # CONFIG_SND_I2S_HI6210_I2S is not set +# CONFIG_SND_I2S_HI3660_I2S is not set # CONFIG_SND_SOC_IMG is not set # CONFIG_SND_SOC_MTK_BTCVSD is not set CONFIG_SND_SOC_ROCKCHIP=y -# CONFIG_SND_SOC_ROCKCHIP_DLP_PCM is not set +# CONFIG_SND_SOC_ROCKCHIP_DLP is not set CONFIG_SND_SOC_ROCKCHIP_I2S=y CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=y # CONFIG_SND_SOC_ROCKCHIP_I2S_TDM_MULTI_LANES is not set @@ -5584,14 +5224,13 @@ CONFIG_SND_SOC_ROCKCHIP_HDMI=y # CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set # CONFIG_SND_SOC_XILINX_SPDIF is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set +# CONFIG_ZX_TDM is not set CONFIG_SND_SOC_I2C_AND_SPI=y # # CODEC drivers # # CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SOC_ADAU1372_I2C is not set -# CONFIG_SND_SOC_ADAU1372_SPI is not set # CONFIG_SND_SOC_ADAU1701 is not set # CONFIG_SND_SOC_ADAU1761_I2C is not set # CONFIG_SND_SOC_ADAU1761_SPI is not set @@ -5600,7 +5239,6 @@ CONFIG_SND_SOC_I2C_AND_SPI=y # CONFIG_SND_SOC_ADAU7118_I2C is not set # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4118 is not set -# CONFIG_SND_SOC_AK4375 is not set # CONFIG_SND_SOC_AK4458 is not set # CONFIG_SND_SOC_AK4554 is not set # CONFIG_SND_SOC_AK4613 is not set @@ -5608,7 +5246,6 @@ CONFIG_SND_SOC_I2C_AND_SPI=y # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_AK5558 is not set # CONFIG_SND_SOC_ALC5623 is not set -# CONFIG_SND_SOC_AW8738 is not set # CONFIG_SND_SOC_BD28623 is not set # CONFIG_SND_SOC_BT_SCO is not set # CONFIG_SND_SOC_CS35L32 is not set @@ -5616,16 +5253,11 @@ CONFIG_SND_SOC_I2C_AND_SPI=y # CONFIG_SND_SOC_CS35L34 is not set # CONFIG_SND_SOC_CS35L35 is not set # CONFIG_SND_SOC_CS35L36 is not set -# CONFIG_SND_SOC_CS35L41_SPI is not set -# CONFIG_SND_SOC_CS35L41_I2C is not set -# CONFIG_SND_SOC_CS35L45_SPI is not set -# CONFIG_SND_SOC_CS35L45_I2C is not set # CONFIG_SND_SOC_CS42L42 is not set # CONFIG_SND_SOC_CS42L51_I2C is not set # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set # CONFIG_SND_SOC_CS42L73 is not set -# CONFIG_SND_SOC_CS42L83 is not set # CONFIG_SND_SOC_CS4234 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set @@ -5657,8 +5289,6 @@ CONFIG_SND_SOC_ES8328_I2C=y CONFIG_SND_SOC_ES8328_SPI=y # CONFIG_SND_SOC_ES8396 is not set # CONFIG_SND_SOC_GTM601 is not set -# CONFIG_SND_SOC_HDA is not set -# CONFIG_SND_SOC_ICS43432 is not set # CONFIG_SND_SOC_INNO_RK3036 is not set # CONFIG_SND_SOC_MAX98088 is not set CONFIG_SND_SOC_MAX98090=y @@ -5666,10 +5296,8 @@ CONFIG_SND_SOC_MAX98090=y # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9867 is not set # CONFIG_SND_SOC_MAX98927 is not set -# CONFIG_SND_SOC_MAX98520 is not set # CONFIG_SND_SOC_MAX98373_I2C is not set # CONFIG_SND_SOC_MAX98390 is not set -# CONFIG_SND_SOC_MAX98396 is not set # CONFIG_SND_SOC_MAX9860 is not set # CONFIG_SND_SOC_MSM8916_WCD_ANALOG is not set # CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set @@ -5683,7 +5311,6 @@ CONFIG_SND_SOC_MAX98090=y # CONFIG_SND_SOC_PCM3060_SPI is not set # CONFIG_SND_SOC_PCM3168A_I2C is not set # CONFIG_SND_SOC_PCM3168A_SPI is not set -# CONFIG_SND_SOC_PCM5102A is not set # CONFIG_SND_SOC_PCM512x_I2C is not set # CONFIG_SND_SOC_PCM512x_SPI is not set # CONFIG_SND_SOC_RK312X is not set @@ -5696,22 +5323,17 @@ CONFIG_SND_SOC_RK817=y CONFIG_SND_SOC_RK_CODEC_DIGITAL=y # CONFIG_SND_SOC_RK_DSM is not set CONFIG_SND_SOC_RL6231=y -# CONFIG_SND_SOC_ROCKCHIP_SPI_CODEC is not set CONFIG_SND_SOC_RT5616=y # CONFIG_SND_SOC_RT5631 is not set CONFIG_SND_SOC_RT5640=y CONFIG_SND_SOC_RT5645=y CONFIG_SND_SOC_RT5651=y -# CONFIG_SND_SOC_RT5659 is not set -# CONFIG_SND_SOC_RT9120 is not set # CONFIG_SND_SOC_RV1106 is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set -# CONFIG_SND_SOC_SIMPLE_MUX is not set +# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set CONFIG_SND_SOC_SPDIF=y -# CONFIG_SND_SOC_SRC4XXX_I2C is not set # CONFIG_SND_SOC_SSM2305 is not set -# CONFIG_SND_SOC_SSM2518 is not set # CONFIG_SND_SOC_SSM2602_SPI is not set # CONFIG_SND_SOC_SSM2602_I2C is not set # CONFIG_SND_SOC_SSM4567 is not set @@ -5722,24 +5344,19 @@ CONFIG_SND_SOC_SPDIF=y # CONFIG_SND_SOC_TAS2562 is not set # CONFIG_SND_SOC_TAS2764 is not set # CONFIG_SND_SOC_TAS2770 is not set -# CONFIG_SND_SOC_TAS2780 is not set # CONFIG_SND_SOC_TAS5086 is not set # CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SOC_TAS5720 is not set -# CONFIG_SND_SOC_TAS5805M is not set # CONFIG_SND_SOC_TAS6424 is not set # CONFIG_SND_SOC_TDA7419 is not set # CONFIG_SND_SOC_TDA7803 is not set # CONFIG_SND_SOC_TFA9879 is not set -# CONFIG_SND_SOC_TFA989X is not set -# CONFIG_SND_SOC_TLV320ADC3XXX is not set # CONFIG_SND_SOC_TLV320AIC23_I2C is not set # CONFIG_SND_SOC_TLV320AIC23_SPI is not set # CONFIG_SND_SOC_TLV320AIC31XX is not set # CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set # CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set -# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set -# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set +# CONFIG_SND_SOC_TLV320AIC3X is not set # CONFIG_SND_SOC_TLV320ADCX140 is not set CONFIG_SND_SOC_TS3A227E=y # CONFIG_SND_SOC_TSCS42XX is not set @@ -5751,8 +5368,7 @@ CONFIG_SND_SOC_TS3A227E=y # CONFIG_SND_SOC_WM8580 is not set # CONFIG_SND_SOC_WM8711 is not set # CONFIG_SND_SOC_WM8728 is not set -# CONFIG_SND_SOC_WM8731_I2C is not set -# CONFIG_SND_SOC_WM8731_SPI is not set +# CONFIG_SND_SOC_WM8731 is not set # CONFIG_SND_SOC_WM8737 is not set # CONFIG_SND_SOC_WM8741 is not set # CONFIG_SND_SOC_WM8750 is not set @@ -5764,28 +5380,22 @@ CONFIG_SND_SOC_TS3A227E=y # CONFIG_SND_SOC_WM8804_SPI is not set # CONFIG_SND_SOC_WM8903 is not set # CONFIG_SND_SOC_WM8904 is not set -# CONFIG_SND_SOC_WM8940 is not set # CONFIG_SND_SOC_WM8960 is not set # CONFIG_SND_SOC_WM8962 is not set # CONFIG_SND_SOC_WM8974 is not set # CONFIG_SND_SOC_WM8978 is not set # CONFIG_SND_SOC_WM8985 is not set # CONFIG_SND_SOC_ZL38060 is not set +# CONFIG_SND_SOC_ZX_AUD96P22 is not set # CONFIG_SND_SOC_MAX9759 is not set # CONFIG_SND_SOC_MT6351 is not set # CONFIG_SND_SOC_MT6358 is not set # CONFIG_SND_SOC_MT6660 is not set -# CONFIG_SND_SOC_NAU8315 is not set # CONFIG_SND_SOC_NAU8540 is not set # CONFIG_SND_SOC_NAU8810 is not set -# CONFIG_SND_SOC_NAU8821 is not set # CONFIG_SND_SOC_NAU8822 is not set # CONFIG_SND_SOC_NAU8824 is not set # CONFIG_SND_SOC_TPA6130A2 is not set -# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set -# CONFIG_SND_SOC_LPASS_VA_MACRO is not set -# CONFIG_SND_SOC_LPASS_RX_MACRO is not set -# CONFIG_SND_SOC_LPASS_TX_MACRO is not set # CONFIG_SND_SOC_AW87XXX is not set # CONFIG_SND_SOC_AW883XX is not set # end of CODEC drivers @@ -5793,8 +5403,6 @@ CONFIG_SND_SOC_TS3A227E=y CONFIG_SND_SIMPLE_CARD_UTILS=y CONFIG_SND_SIMPLE_CARD=y # CONFIG_SND_AUDIO_GRAPH_CARD is not set -# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set -# CONFIG_SND_TEST_COMPONENT is not set # # HID support @@ -5834,7 +5442,6 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_ELECOM is not set # CONFIG_HID_ELO is not set # CONFIG_HID_EZKEY is not set -# CONFIG_HID_FT260 is not set # CONFIG_HID_GEMBIRD is not set # CONFIG_HID_GFRM is not set # CONFIG_HID_GLORIOUS is not set @@ -5846,8 +5453,6 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_UCLOGIC is not set # CONFIG_HID_WALTOP is not set # CONFIG_HID_VIEWSONIC is not set -# CONFIG_HID_VRC2 is not set -# CONFIG_HID_XIAOMI is not set # CONFIG_HID_GYRATION is not set # CONFIG_HID_ICADE is not set # CONFIG_HID_ITE is not set @@ -5857,12 +5462,10 @@ CONFIG_HID_KENSINGTON=y # CONFIG_HID_LCPOWER is not set # CONFIG_HID_LED is not set # CONFIG_HID_LENOVO is not set -# CONFIG_HID_LETSKETCH is not set # CONFIG_HID_LOGITECH is not set # CONFIG_HID_MAGICMOUSE is not set # CONFIG_HID_MALTRON is not set # CONFIG_HID_MAYFLASH is not set -# CONFIG_HID_MEGAWORLD_FF is not set # CONFIG_HID_REDRAGON is not set # CONFIG_HID_MICROSOFT is not set # CONFIG_HID_MONTEREY is not set @@ -5876,15 +5479,12 @@ CONFIG_HID_MULTITOUCH=y # CONFIG_HID_PETALYNX is not set # CONFIG_HID_PICOLCD is not set # CONFIG_HID_PLANTRONICS is not set -# CONFIG_HID_PXRC is not set -# CONFIG_HID_RAZER is not set +# CONFIG_HID_PLAYSTATION is not set # CONFIG_HID_PRIMAX is not set # CONFIG_HID_RETRODE is not set # CONFIG_HID_ROCCAT is not set # CONFIG_HID_SAITEK is not set # CONFIG_HID_SAMSUNG is not set -# CONFIG_HID_SEMITEK is not set -# CONFIG_HID_SIGMAMICRO is not set # CONFIG_HID_SONY is not set # CONFIG_HID_SPEEDLINK is not set # CONFIG_HID_STEAM is not set @@ -5895,7 +5495,6 @@ CONFIG_HID_MULTITOUCH=y # CONFIG_HID_SMARTJOYPLUS is not set # CONFIG_HID_TIVO is not set # CONFIG_HID_TOPSEED is not set -# CONFIG_HID_TOPRE is not set # CONFIG_HID_THINGM is not set # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_UDRAW_PS3 is not set @@ -5921,9 +5520,7 @@ CONFIG_USB_HIDDEV=y # # I2C HID support # -# CONFIG_I2C_HID_OF is not set -# CONFIG_I2C_HID_OF_ELAN is not set -# CONFIG_I2C_HID_OF_GOODIX is not set +# CONFIG_I2C_HID is not set # end of I2C HID support # end of HID support @@ -6025,7 +5622,7 @@ CONFIG_USBIP_VHCI_NR_HCS=1 CONFIG_USBIP_HOST=m CONFIG_USBIP_VUDC=m CONFIG_USBIP_DEBUG=y -# CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_CDNS3 is not set # CONFIG_USB_MUSB_HDRC is not set CONFIG_USB_DWC3=y # CONFIG_USB_DWC3_HOST is not set @@ -6099,6 +5696,7 @@ CONFIG_USB_SERIAL_SIERRAWIRELESS=m CONFIG_USB_SERIAL_SYMBOL=m CONFIG_USB_SERIAL_TI=m CONFIG_USB_SERIAL_CYBERJACK=m +# CONFIG_USB_SERIAL_XIRCOM is not set CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m CONFIG_USB_SERIAL_OMNINET=m @@ -6108,7 +5706,6 @@ CONFIG_USB_SERIAL_WISHBONE=m CONFIG_USB_SERIAL_SSU100=m CONFIG_USB_SERIAL_QT2=m CONFIG_USB_SERIAL_UPD78F0730=m -# CONFIG_USB_SERIAL_XR is not set # CONFIG_USB_SERIAL_DEBUG is not set # @@ -6140,7 +5737,6 @@ CONFIG_USB_EZUSB_FX2=y # CONFIG_USB_HSIC_USB4604 is not set # CONFIG_USB_LINK_LAYER_TEST is not set # CONFIG_USB_CHAOSKEY is not set -# CONFIG_USB_ONBOARD_HUB is not set CONFIG_USB_ATM=m # CONFIG_USB_SPEEDTOUCH is not set # CONFIG_USB_CXACRU is not set @@ -6178,6 +5774,10 @@ CONFIG_USB_SNP_CORE=m CONFIG_USB_SNP_UDC_PLAT=m CONFIG_USB_M66592=m CONFIG_USB_BDC_UDC=m + +# +# Platform Support +# CONFIG_USB_AMD5536UDC=m CONFIG_USB_NET2272=m CONFIG_USB_NET2272_DMA=y @@ -6225,6 +5825,8 @@ CONFIG_USB_CONFIGFS_EEM=y CONFIG_USB_CONFIGFS_MASS_STORAGE=y # CONFIG_USB_CONFIGFS_F_LB_SS is not set CONFIG_USB_CONFIGFS_F_FS=y +# CONFIG_USB_CONFIGFS_F_ACC is not set +# CONFIG_USB_CONFIGFS_F_AUDIO_SRC is not set CONFIG_USB_CONFIGFS_F_UAC1=y CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y CONFIG_USB_CONFIGFS_F_UAC2=y @@ -6277,17 +5879,13 @@ CONFIG_TYPEC_HUSB311=y # CONFIG_TYPEC_TCPCI_MAXIM is not set CONFIG_TYPEC_FUSB302=y # CONFIG_TYPEC_UCSI is not set -# CONFIG_TYPEC_TPS6598X is not set -# CONFIG_TYPEC_ANX7411 is not set -# CONFIG_TYPEC_RT1719 is not set # CONFIG_TYPEC_HD3SS3220 is not set +# CONFIG_TYPEC_TPS6598X is not set # CONFIG_TYPEC_STUSB160X is not set -# CONFIG_TYPEC_WUSB3801 is not set # # USB Type-C Multiplexer/DeMultiplexer Switch support # -# CONFIG_TYPEC_MUX_FSA4480 is not set # CONFIG_TYPEC_MUX_PI3USB30532 is not set # end of USB Type-C Multiplexer/DeMultiplexer Switch support @@ -6317,6 +5915,7 @@ CONFIG_MMC_SDHCI=y # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_OF_ARASAN=y +# CONFIG_MMC_SDHCI_OF_ASPEED is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set CONFIG_MMC_SDHCI_OF_DWCMSHC=y # CONFIG_MMC_SDHCI_CADENCE is not set @@ -6344,7 +5943,6 @@ CONFIG_MMC_HSQ=y # CONFIG_MMC_SDHCI_XENON is not set # CONFIG_MMC_SDHCI_OMAP is not set # CONFIG_MMC_SDHCI_AM654 is not set -# CONFIG_SCSI_UFSHCD is not set # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y @@ -6395,14 +5993,6 @@ CONFIG_LEDS_IS31FL32XX=y # CONFIG_LEDS_SPI_BYTE is not set # CONFIG_LEDS_TI_LMU_COMMON is not set -# -# Flash and Torch LED drivers -# - -# -# RGB LED drivers -# - # # LED Triggers # @@ -6427,11 +6017,6 @@ CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_TRIGGER_NETDEV=y CONFIG_LEDS_TRIGGER_PATTERN=m CONFIG_LEDS_TRIGGER_AUDIO=m -# CONFIG_LEDS_TRIGGER_TTY is not set - -# -# Simple LED drivers -# # CONFIG_ACCESSIBILITY is not set # CONFIG_INFINIBAND is not set CONFIG_EDAC_SUPPORT=y @@ -6464,7 +6049,6 @@ CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_DRV_DS1672 is not set CONFIG_RTC_DRV_HYM8563=y # CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_NCT3018Y is not set CONFIG_RTC_DRV_RK808=y # CONFIG_RTC_DRV_ROCKCHIP is not set # CONFIG_RTC_DRV_RS5C372 is not set @@ -6504,6 +6088,7 @@ CONFIG_RTC_DRV_RK808=y # CONFIG_RTC_DRV_MAX6916 is not set # CONFIG_RTC_DRV_R9701 is not set # CONFIG_RTC_DRV_RX4581 is not set +# CONFIG_RTC_DRV_RX6110 is not set # CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_MAX6902 is not set # CONFIG_RTC_DRV_PCF2123 is not set @@ -6516,7 +6101,6 @@ CONFIG_RTC_I2C_AND_SPI=y # CONFIG_RTC_DRV_DS3232 is not set # CONFIG_RTC_DRV_PCF2127 is not set # CONFIG_RTC_DRV_RV3029C2 is not set -# CONFIG_RTC_DRV_RX6110 is not set # # Platform RTC drivers @@ -6536,7 +6120,6 @@ CONFIG_RTC_I2C_AND_SPI=y # CONFIG_RTC_DRV_BQ4802 is not set # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_V3020 is not set -# CONFIG_RTC_DRV_OPTEE is not set # CONFIG_RTC_DRV_ZYNQMP is not set # @@ -6551,7 +6134,6 @@ CONFIG_RTC_I2C_AND_SPI=y # # HID Sensor RTC drivers # -# CONFIG_RTC_DRV_GOLDFISH is not set CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set @@ -6566,6 +6148,7 @@ CONFIG_DMA_OF=y # CONFIG_DW_AXI_DMAC is not set # CONFIG_FSL_EDMA is not set # CONFIG_FSL_QDMA is not set +# CONFIG_HISI_DMA is not set # CONFIG_INTEL_IDMA64 is not set # CONFIG_MV_XOR_V2 is not set CONFIG_PL330_DMA=y @@ -6598,11 +6181,11 @@ CONFIG_SW_SYNC=y CONFIG_SW_SYNC_DEBUG=y # CONFIG_UDMABUF is not set # CONFIG_DMABUF_MOVE_NOTIFY is not set -# CONFIG_DMABUF_DEBUG is not set # CONFIG_DMABUF_SELFTESTS is not set CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_SYSFS_STATS=y -# CONFIG_DMABUF_HEAPS_SYSTEM is not set +# CONFIG_DMABUF_HEAPS_DEFERRED_FREE is not set +# CONFIG_DMABUF_HEAPS_PAGE_POOL is not set CONFIG_DMABUF_HEAPS_CMA=y # CONFIG_DMABUF_HEAPS_SRAM is not set # CONFIG_DMABUF_HEAPS_ROCKCHIP is not set @@ -6615,6 +6198,7 @@ CONFIG_DMABUF_HEAPS_CMA=y CONFIG_VIRTIO_MENU=y # CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_MMIO is not set +# CONFIG_VIRTIO_DMA_SHARED_BUFFER is not set # CONFIG_VDPA is not set CONFIG_VHOST_MENU=y # CONFIG_VHOST_NET is not set @@ -6627,9 +6211,9 @@ CONFIG_VHOST_MENU=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set -# CONFIG_COMEDI is not set CONFIG_STAGING=y # CONFIG_PRISM2_USB is not set +# CONFIG_COMEDI is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_RTL8723BS is not set @@ -6654,6 +6238,7 @@ CONFIG_STAGING=y # Analog to digital converters # # CONFIG_AD7816 is not set +# CONFIG_AD7280 is not set # end of Analog to digital converters # @@ -6662,6 +6247,13 @@ CONFIG_STAGING=y # CONFIG_ADT7316 is not set # end of Analog digital bi-direction converters +# +# Capacitance to digital converters +# +# CONFIG_AD7150 is not set +# CONFIG_AD7746 is not set +# end of Capacitance to digital converters + # # Direct Digital Synthesis # @@ -6690,8 +6282,17 @@ CONFIG_STAGING=y # CONFIG_FB_SM750 is not set # CONFIG_STAGING_MEDIA is not set + +# +# Android +# +# end of Android + # CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set +# CONFIG_GS_FPGABOOT is not set +# CONFIG_UNISYSSPAR is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set CONFIG_FB_TFT=y CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_BD663474=m @@ -6724,17 +6325,27 @@ CONFIG_FB_TFT_TLS8204=m CONFIG_FB_TFT_UC1611=m CONFIG_FB_TFT_UC1701=m CONFIG_FB_TFT_UPD161704=m +# CONFIG_FB_TFT_WATTEROTT is not set # CONFIG_KS7010 is not set # CONFIG_PI433 is not set + +# +# Gasket devices +# +# CONFIG_STAGING_GASKET_FRAMEWORK is not set +# end of Gasket devices + # CONFIG_XIL_AXIS_FIFO is not set # CONFIG_FIELDBUS_DEV is not set # CONFIG_QLGE is not set -# CONFIG_VME_BUS is not set +# CONFIG_WFX is not set +# CONFIG_SPMI_HISI3670 is not set +# CONFIG_MFD_HI6421_SPMI is not set # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set -CONFIG_SURFACE_PLATFORMS=y CONFIG_HAVE_CLK=y +CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y # CONFIG_COMMON_CLK_PROCFS is not set @@ -6742,11 +6353,10 @@ CONFIG_COMMON_CLK=y # # Clock driver for ARM Reference designs # -# CONFIG_CLK_ICST is not set +# CONFIG_ICST is not set # CONFIG_CLK_SP810 is not set # end of Clock driver for ARM Reference designs -# CONFIG_LMK04832 is not set # CONFIG_COMMON_CLK_MAX9485 is not set CONFIG_COMMON_CLK_RK808=y CONFIG_COMMON_CLK_SCMI=y @@ -6758,19 +6368,17 @@ CONFIG_COMMON_CLK_SCMI=y # CONFIG_COMMON_CLK_CDCE706 is not set # CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_COMMON_CLK_CS2000_CP is not set -# CONFIG_COMMON_CLK_AXI_CLKGEN is not set +# CONFIG_CLK_QORIQ is not set # CONFIG_COMMON_CLK_XGENE is not set CONFIG_COMMON_CLK_PWM=y -# CONFIG_COMMON_CLK_RS9_PCIE is not set # CONFIG_COMMON_CLK_VC5 is not set -# CONFIG_COMMON_CLK_VC7 is not set # CONFIG_COMMON_CLK_FIXED_MMIO is not set CONFIG_COMMON_CLK_ROCKCHIP=y CONFIG_CLK_PX30=y CONFIG_CLK_RK1808=y -CONFIG_CLK_RK3328=y -CONFIG_CLK_RK3399=y -CONFIG_CLK_RK3568=y +# CONFIG_CLK_RK3328 is not set +# CONFIG_CLK_RK3399 is not set +# CONFIG_CLK_RK3568 is not set CONFIG_CLK_RK3588=y # CONFIG_ROCKCHIP_CLK_COMPENSATION is not set CONFIG_ROCKCHIP_CLK_LINK=y @@ -6782,10 +6390,8 @@ CONFIG_ROCKCHIP_DDRCLK=y CONFIG_ROCKCHIP_DDRCLK_SIP=y CONFIG_ROCKCHIP_DDRCLK_SIP_V2=y # CONFIG_ROCKCHIP_PLL_RK3066 is not set -CONFIG_ROCKCHIP_PLL_RK3399=y +# CONFIG_ROCKCHIP_PLL_RK3399 is not set CONFIG_ROCKCHIP_PLL_RK3588=y -# CONFIG_XILINX_VCU is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set # CONFIG_HWSPINLOCK is not set # @@ -6795,18 +6401,19 @@ CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_CLKSRC_MMIO=y CONFIG_ROCKCHIP_TIMER=y +# CONFIG_SUN4I_TIMER is not set CONFIG_ARM_ARCH_TIMER=y CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y CONFIG_FSL_ERRATUM_A008585=y CONFIG_HISILICON_ERRATUM_161010101=y CONFIG_ARM64_ERRATUM_858921=y +# CONFIG_MTK_TIMER is not set # CONFIG_MICROCHIP_PIT64B is not set # end of Clock Source drivers CONFIG_MAILBOX=y # CONFIG_ARM_MHU is not set -# CONFIG_ARM_MHU_V2 is not set # CONFIG_PLATFORM_MHU is not set # CONFIG_PL320_MBOX is not set # CONFIG_ROCKCHIP_MBOX is not set @@ -6814,6 +6421,7 @@ CONFIG_MAILBOX=y # CONFIG_MAILBOX_TEST is not set CONFIG_IOMMU_IOVA=y CONFIG_IOMMU_API=y +# CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT is not set CONFIG_IOMMU_SUPPORT=y # @@ -6823,12 +6431,9 @@ CONFIG_IOMMU_IO_PGTABLE=y CONFIG_IOMMU_IO_PGTABLE_LPAE=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set # CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set -# CONFIG_IOMMU_IO_PGTABLE_DART is not set # end of Generic IOMMU Pagetable Support # CONFIG_IOMMU_DEBUGFS is not set -CONFIG_IOMMU_DEFAULT_DMA_STRICT=y -# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_OF_IOMMU=y CONFIG_IOMMU_DMA=y @@ -6847,7 +6452,6 @@ CONFIG_ARM_SMMU_V3=y # Rpmsg drivers # # CONFIG_RPMSG_QCOM_GLINK_RPM is not set -# CONFIG_RPMSG_ROCKCHIP_SOFTIRQ is not set # CONFIG_RPMSG_VIRTIO is not set # end of Rpmsg drivers @@ -6862,6 +6466,11 @@ CONFIG_ARM_SMMU_V3=y # # end of Amlogic SoC drivers +# +# Aspeed SoC drivers +# +# end of Aspeed SoC drivers + # # Broadcom SoC drivers # @@ -6875,22 +6484,11 @@ CONFIG_ARM_SMMU_V3=y # CONFIG_FSL_RCPM is not set # end of NXP/Freescale QorIQ SoC drivers -# -# fujitsu SoC drivers -# -# end of fujitsu SoC drivers - # # i.MX SoC drivers # # end of i.MX SoC drivers -# -# Enable LiteX SoC Builder specific drivers -# -# CONFIG_LITEX_SOC_CONTROLLER is not set -# end of Enable LiteX SoC Builder specific drivers - # # Qualcomm SoC drivers # @@ -6904,23 +6502,21 @@ CONFIG_QCOM_QMI_HELPERS=m # # Rockchip CPU selection # -CONFIG_CPU_PX30=y -CONFIG_CPU_RK1808=y +# CONFIG_CPU_PX30 is not set +# CONFIG_CPU_RK1808 is not set # CONFIG_CPU_RK3308 is not set -CONFIG_CPU_RK3328=y +# CONFIG_CPU_RK3328 is not set # CONFIG_CPU_RK3368 is not set -CONFIG_CPU_RK3399=y +# CONFIG_CPU_RK3399 is not set # CONFIG_CPU_RK3528 is not set # CONFIG_CPU_RK3562 is not set -CONFIG_CPU_RK3568=y +# CONFIG_CPU_RK3568 is not set CONFIG_CPU_RK3588=y # end of Rockchip CPU selection CONFIG_NO_GKI=y -# CONFIG_ROCKCHIP_DISABLE_UNUSED is not set # CONFIG_ROCKCHIP_AMP is not set # CONFIG_ROCKCHIP_ARM64_ALIGN_FAULT_FIX is not set -# CONFIG_ROCKCHIP_CSU is not set CONFIG_ROCKCHIP_GRF=y # CONFIG_ROCKCHIP_HW_DECOMPRESS is not set # CONFIG_ROCKCHIP_HW_DECOMPRESS_USER is not set @@ -6931,10 +6527,8 @@ CONFIG_ROCKCHIP_OPP=y # CONFIG_ROCKCHIP_OPTIMIZE_RT_PRIO is not set # CONFIG_ROCKCHIP_PERFORMANCE is not set CONFIG_ROCKCHIP_PM_DOMAINS=y -CONFIG_ROCKCHIP_REGULATOR_COUPLER=y CONFIG_ROCKCHIP_PVTM=y # CONFIG_ROCKCHIP_RAMDISK is not set -# CONFIG_ROCKCHIP_LITE_ULTRA_SUSPEND is not set CONFIG_ROCKCHIP_SUSPEND_MODE=y CONFIG_ROCKCHIP_SYSTEM_MONITOR=y CONFIG_ROCKCHIP_VENDOR_STORAGE=y @@ -6977,6 +6571,7 @@ CONFIG_RK_DMABUF_PROCFS=y # # Xilinx SoC drivers # +# CONFIG_XILINX_VCU is not set # end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers @@ -7012,7 +6607,6 @@ CONFIG_EXTCON=y # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set # CONFIG_EXTCON_USB_GPIO is not set -# CONFIG_EXTCON_USBC_TUSB320 is not set # CONFIG_EXTCON_USBC_VIRTUAL_PD is not set # CONFIG_MEMORY is not set CONFIG_IIO=y @@ -7035,28 +6629,19 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # CONFIG_ADIS16201 is not set # CONFIG_ADIS16209 is not set -# CONFIG_ADXL313_I2C is not set -# CONFIG_ADXL313_SPI is not set # CONFIG_ADXL345_I2C is not set # CONFIG_ADXL345_SPI is not set -# CONFIG_ADXL355_I2C is not set -# CONFIG_ADXL355_SPI is not set -# CONFIG_ADXL367_SPI is not set -# CONFIG_ADXL367_I2C is not set # CONFIG_ADXL372_SPI is not set # CONFIG_ADXL372_I2C is not set # CONFIG_BMA180 is not set # CONFIG_BMA220 is not set # CONFIG_BMA400 is not set # CONFIG_BMC150_ACCEL is not set -# CONFIG_BMI088_ACCEL is not set # CONFIG_DA280 is not set # CONFIG_DA311 is not set # CONFIG_DMARD06 is not set # CONFIG_DMARD09 is not set # CONFIG_DMARD10 is not set -# CONFIG_FXLS8962AF_I2C is not set -# CONFIG_FXLS8962AF_SPI is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set # CONFIG_KXSD9 is not set # CONFIG_KXCJK1013 is not set @@ -7067,11 +6652,9 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_MMA8452 is not set # CONFIG_MMA9551 is not set # CONFIG_MMA9553 is not set -# CONFIG_MSA311 is not set # CONFIG_MXC4005 is not set # CONFIG_MXC6255 is not set # CONFIG_SCA3000 is not set -# CONFIG_SCA3300 is not set # CONFIG_STK8312 is not set # CONFIG_STK8BA50 is not set # end of Accelerometers @@ -7083,7 +6666,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_AD7124 is not set # CONFIG_AD7192 is not set # CONFIG_AD7266 is not set -# CONFIG_AD7280 is not set # CONFIG_AD7291 is not set # CONFIG_AD7292 is not set # CONFIG_AD7298 is not set @@ -7112,7 +6694,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_MAX1027 is not set # CONFIG_MAX11100 is not set # CONFIG_MAX1118 is not set -# CONFIG_MAX11205 is not set # CONFIG_MAX1241 is not set # CONFIG_MAX1363 is not set # CONFIG_MAX9611 is not set @@ -7125,7 +6706,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_QCOM_SPMI_ADC5 is not set CONFIG_ROCKCHIP_SARADC=y # CONFIG_ROCKCHIP_SARADC_TEST_CHN is not set -# CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_SD_ADC_MODULATOR is not set # CONFIG_TI_ADC081C is not set # CONFIG_TI_ADC0832 is not set @@ -7139,19 +6719,11 @@ CONFIG_TI_ADS1015=y # CONFIG_TI_ADS8344 is not set # CONFIG_TI_ADS8688 is not set # CONFIG_TI_ADS124S08 is not set -# CONFIG_TI_ADS131E08 is not set # CONFIG_TI_TLC4541 is not set -# CONFIG_TI_TSC2046 is not set # CONFIG_VF610_ADC is not set # CONFIG_XILINX_XADC is not set # end of Analog to digital converters -# -# Analog to digital and digital to analog converters -# -# CONFIG_AD74413R is not set -# end of Analog to digital and digital to analog converters - # # Analog Front Ends # @@ -7162,17 +6734,9 @@ CONFIG_TI_ADS1015=y # Amplifiers # # CONFIG_AD8366 is not set -# CONFIG_ADA4250 is not set # CONFIG_HMC425 is not set # end of Amplifiers -# -# Capacitance to digital converters -# -# CONFIG_AD7150 is not set -# CONFIG_AD7746 is not set -# end of Capacitance to digital converters - # # Chemical Sensors # @@ -7183,12 +6747,8 @@ CONFIG_TI_ADS1015=y # CONFIG_IAQCORE is not set # CONFIG_PMS7003 is not set # CONFIG_SCD30_CORE is not set -# CONFIG_SCD4X is not set # CONFIG_SENSIRION_SGP30 is not set -# CONFIG_SENSIRION_SGP40 is not set -# CONFIG_SPS30_I2C is not set -# CONFIG_SPS30_SERIAL is not set -# CONFIG_SENSEAIR_SUNRISE_CO2 is not set +# CONFIG_SPS30 is not set # CONFIG_VZ89X is not set # end of Chemical Sensors @@ -7197,12 +6757,6 @@ CONFIG_TI_ADS1015=y # # end of Hid Sensor IIO Common -# -# IIO SCMI Sensors -# -# CONFIG_IIO_SCMI is not set -# end of IIO SCMI Sensors - # # SSP Sensor Common # @@ -7212,7 +6766,6 @@ CONFIG_TI_ADS1015=y # # Digital to analog converters # -# CONFIG_AD3552R is not set # CONFIG_AD5064 is not set # CONFIG_AD5360 is not set # CONFIG_AD5380 is not set @@ -7223,17 +6776,14 @@ CONFIG_TI_ADS1015=y # CONFIG_AD5593R is not set # CONFIG_AD5504 is not set # CONFIG_AD5624R_SPI is not set -# CONFIG_LTC2688 is not set # CONFIG_AD5686_SPI is not set # CONFIG_AD5696_I2C is not set # CONFIG_AD5755 is not set # CONFIG_AD5758 is not set # CONFIG_AD5761 is not set # CONFIG_AD5764 is not set -# CONFIG_AD5766 is not set # CONFIG_AD5770R is not set # CONFIG_AD5791 is not set -# CONFIG_AD7293 is not set # CONFIG_AD7303 is not set # CONFIG_AD8801 is not set # CONFIG_DPOT_DAC is not set @@ -7257,12 +6807,6 @@ CONFIG_TI_ADS1015=y # # end of IIO dummy driver -# -# Filters -# -# CONFIG_ADMV8818 is not set -# end of Filters - # # Frequency Synthesizers DDS/PLL # @@ -7278,10 +6822,6 @@ CONFIG_TI_ADS1015=y # # CONFIG_ADF4350 is not set # CONFIG_ADF4371 is not set -# CONFIG_ADMV1013 is not set -# CONFIG_ADMV1014 is not set -# CONFIG_ADMV4420 is not set -# CONFIG_ADRF6780 is not set # end of Phase-Locked Loop (PLL) frequency synthesizers # end of Frequency Synthesizers DDS/PLL @@ -7337,8 +6877,6 @@ CONFIG_TI_ADS1015=y # CONFIG_ADIS16480 is not set # CONFIG_BMI160_I2C is not set # CONFIG_BMI160_SPI is not set -# CONFIG_BOSCH_BNO055_SERIAL is not set -# CONFIG_BOSCH_BNO055_I2C is not set # CONFIG_FXOS8700_I2C is not set # CONFIG_FXOS8700_SPI is not set # CONFIG_KMX61 is not set @@ -7348,7 +6886,6 @@ CONFIG_TI_ADS1015=y # CONFIG_INV_MPU6050_SPI is not set # CONFIG_IIO_ST_LSM6DSR is not set # CONFIG_IIO_ST_LSM6DSX is not set -# CONFIG_IIO_ST_LSM9DS0 is not set # end of Inertial measurement units # @@ -7376,7 +6913,6 @@ CONFIG_SENSORS_ISL29018=y # CONFIG_JSA1212 is not set # CONFIG_RPR0521 is not set # CONFIG_LTR501 is not set -# CONFIG_LTRF216A is not set # CONFIG_LV0104CS is not set # CONFIG_MAX44000 is not set # CONFIG_MAX44009 is not set @@ -7391,7 +6927,6 @@ CONFIG_SENSORS_ISL29018=y # CONFIG_TCS3472 is not set CONFIG_SENSORS_TSL2563=y CONFIG_TSL2583=y -# CONFIG_TSL2591 is not set # CONFIG_TSL2772 is not set # CONFIG_TSL4531 is not set # CONFIG_UCS12CM0 is not set @@ -7419,7 +6954,6 @@ CONFIG_TSL2583=y # CONFIG_SENSORS_HMC5843_SPI is not set # CONFIG_SENSORS_RM3100_I2C is not set # CONFIG_SENSORS_RM3100_SPI is not set -# CONFIG_YAMAHA_YAS530 is not set # end of Magnetometer sensors # @@ -7448,7 +6982,6 @@ CONFIG_IIO_SYSFS_TRIGGER=y # # Digital potentiometers # -# CONFIG_AD5110 is not set # CONFIG_AD5272 is not set # CONFIG_DS1803 is not set # CONFIG_MAX5432 is not set @@ -7503,8 +7036,6 @@ CONFIG_IIO_SYSFS_TRIGGER=y # CONFIG_RFD77402 is not set # CONFIG_SRF04 is not set # CONFIG_SX9310 is not set -# CONFIG_SX9324 is not set -# CONFIG_SX9360 is not set # CONFIG_SX9500 is not set # CONFIG_SRF08 is not set # CONFIG_VCNL3020 is not set @@ -7527,26 +7058,21 @@ CONFIG_IIO_SYSFS_TRIGGER=y # CONFIG_MLX90632 is not set # CONFIG_TMP006 is not set # CONFIG_TMP007 is not set -# CONFIG_TMP117 is not set # CONFIG_TSYS01 is not set # CONFIG_TSYS02D is not set # CONFIG_MAX31856 is not set -# CONFIG_MAX31865 is not set # end of Temperature sensors # CONFIG_NTB is not set +# CONFIG_VME_BUS is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y # CONFIG_PWM_DEBUG is not set -# CONFIG_PWM_ATMEL_TCB is not set -# CONFIG_PWM_CLK is not set -# CONFIG_PWM_DWC is not set # CONFIG_PWM_FSL_FTM is not set # CONFIG_PWM_GPIO is not set # CONFIG_PWM_PCA9685 is not set CONFIG_PWM_ROCKCHIP=y # CONFIG_PWM_ROCKCHIP_ONESHOT is not set -# CONFIG_PWM_XILINX is not set # # IRQ chip support @@ -7559,7 +7085,6 @@ CONFIG_ARM_GIC_V3=y CONFIG_ARM_GIC_V3_ITS=y CONFIG_ARM_GIC_V3_ITS_PCI=y # CONFIG_AL_FIC is not set -# CONFIG_XILINX_INTC is not set CONFIG_PARTITION_PERCPU=y # end of IRQ chip support @@ -7567,9 +7092,7 @@ CONFIG_PARTITION_PERCPU=y CONFIG_ARCH_HAS_RESET_CONTROLLER=y CONFIG_RESET_CONTROLLER=y CONFIG_RESET_SCMI=y -# CONFIG_RESET_SIMPLE is not set # CONFIG_RESET_TI_SYSCON is not set -# CONFIG_RESET_TI_TPS380X is not set # # PHY Subsystem @@ -7577,22 +7100,15 @@ CONFIG_RESET_SCMI=y CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PHY_MIPI_DPHY=y # CONFIG_PHY_XGENE is not set -# CONFIG_PHY_CAN_TRANSCEIVER is not set - -# -# PHY drivers for Broadcom platforms -# # CONFIG_BCM_KONA_USB2_PHY is not set -# end of PHY drivers for Broadcom platforms - # CONFIG_PHY_CADENCE_TORRENT is not set # CONFIG_PHY_CADENCE_DPHY is not set -# CONFIG_PHY_CADENCE_DPHY_RX is not set # CONFIG_PHY_CADENCE_SIERRA is not set # CONFIG_PHY_CADENCE_SALVO is not set +# CONFIG_PHY_FSL_IMX8MQ_USB is not set +# CONFIG_PHY_MIXEL_MIPI_DPHY is not set # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set -# CONFIG_PHY_LAN966X_SERDES is not set # CONFIG_PHY_CPCAP_USB is not set # CONFIG_PHY_MAPPHONE_MDM6600 is not set # CONFIG_PHY_OCELOT_SERDES is not set @@ -7606,7 +7122,6 @@ CONFIG_PHY_ROCKCHIP_EMMC=y CONFIG_PHY_ROCKCHIP_INNO_HDMI=y CONFIG_PHY_ROCKCHIP_INNO_USB2=y CONFIG_PHY_ROCKCHIP_INNO_USB3=y -# CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY is not set CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y CONFIG_PHY_ROCKCHIP_MIPI_RX=y CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y @@ -7636,8 +7151,6 @@ CONFIG_PHY_ROCKCHIP_USBDP=y CONFIG_ARM_PMU=y # CONFIG_ARM_DSU_PMU is not set # CONFIG_ARM_SPE_PMU is not set -# CONFIG_HISI_PCIE_PMU is not set -# CONFIG_HNS3_PMU is not set # end of Performance monitor support # CONFIG_RAS is not set @@ -7646,32 +7159,36 @@ CONFIG_ARM_PMU=y # # Android # -# CONFIG_ANDROID_BINDER_IPC is not set +# CONFIG_ANDROID is not set # end of Android # CONFIG_LIBNVDIMM is not set # CONFIG_DAX is not set CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y -# CONFIG_NVMEM_RMEM is not set -# CONFIG_NVMEM_ROCKCHIP_EFUSE is not set -# CONFIG_NVMEM_ROCKCHIP_OTP is not set -# CONFIG_NVMEM_ROCKCHIP_SEC_OTP is not set # CONFIG_NVMEM_SPMI_SDAM is not set -# CONFIG_NVMEM_U_BOOT_ENV is not set +# CONFIG_ROCKCHIP_EFUSE is not set +# CONFIG_ROCKCHIP_OTP is not set +# CONFIG_NVMEM_ROCKCHIP_SEC_OTP is not set # # HW tracing support # # CONFIG_STM is not set # CONFIG_INTEL_TH is not set -# CONFIG_HISI_PTT is not set # end of HW tracing support # CONFIG_FPGA is not set # CONFIG_FSI is not set CONFIG_TEE=y + +# +# TEE drivers +# CONFIG_OPTEE=y +CONFIG_OPTEE_SHM_NUM_PRIV_PAGES=1 +# end of TEE drivers + CONFIG_MULTIPLEXER=m # @@ -7689,8 +7206,6 @@ CONFIG_PM_OPP=y # CONFIG_INTERCONNECT is not set # CONFIG_COUNTER is not set # CONFIG_MOST is not set -# CONFIG_PECI is not set -# CONFIG_HTE is not set # CONFIG_RK_FLASH is not set # CONFIG_RK_NAND is not set @@ -7769,12 +7284,12 @@ CONFIG_F2FS_FS_SECURITY=y # CONFIG_F2FS_CHECK_FS is not set # CONFIG_F2FS_FAULT_INJECTION is not set # CONFIG_F2FS_FS_COMPRESSION is not set -CONFIG_F2FS_IOSTAT=y -# CONFIG_F2FS_UNFAIR_RWSEM is not set +# CONFIG_FS_DAX is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y # CONFIG_EXPORTFS_BLOCK_OPS is not set CONFIG_FILE_LOCKING=y +CONFIG_MANDATORY_FILE_LOCKING=y # CONFIG_FS_ENCRYPTION is not set # CONFIG_FS_VERITY is not set CONFIG_FSNOTIFY=y @@ -7801,6 +7316,7 @@ CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # CONFIG_OVERLAY_FS_INDEX is not set # CONFIG_OVERLAY_FS_XINO_AUTO is not set # CONFIG_OVERLAY_FS_METACOPY is not set +# CONFIG_INCREMENTAL_FS is not set # # Caches @@ -7829,7 +7345,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="utf8" CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" # CONFIG_NTFS_FS is not set -# CONFIG_NTFS3_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems # @@ -7846,7 +7361,6 @@ CONFIG_TMPFS=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_TMPFS_XATTR=y # CONFIG_TMPFS_INODE64 is not set -CONFIG_ARCH_SUPPORTS_HUGETLBFS=y CONFIG_HUGETLBFS=y CONFIG_HUGETLB_PAGE=y CONFIG_MEMFD_CREATE=y @@ -7908,7 +7422,6 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_QNX6FS_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_PSTORE=y -CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 CONFIG_PSTORE_DEFLATE_COMPRESS=y # CONFIG_PSTORE_LZO_COMPRESS is not set # CONFIG_PSTORE_LZ4_COMPRESS is not set @@ -7922,7 +7435,6 @@ CONFIG_PSTORE_CONSOLE=y # CONFIG_PSTORE_PMSG is not set # CONFIG_PSTORE_FTRACE is not set CONFIG_PSTORE_RAM=y -# CONFIG_PSTORE_BLK is not set # CONFIG_PSTORE_BOOT_LOG is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set @@ -7931,6 +7443,7 @@ CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NFS_FS is not set CONFIG_NFSD=m CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y # CONFIG_NFSD_BLOCKLAYOUT is not set @@ -7949,7 +7462,6 @@ CONFIG_RPCSEC_GSS_KRB5=m # CONFIG_SUNRPC_DEBUG is not set # CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set -# CONFIG_SMB_SERVER is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y @@ -8016,10 +7528,7 @@ CONFIG_KEYS=y # CONFIG_KEYS_REQUEST_CACHE is not set # CONFIG_PERSISTENT_KEYRINGS is not set CONFIG_TRUSTED_KEYS=m -CONFIG_TRUSTED_KEYS_TPM=y -CONFIG_TRUSTED_KEYS_TEE=y CONFIG_ENCRYPTED_KEYS=m -# CONFIG_USER_DECRYPTED_DATA is not set # CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set CONFIG_SECURITY=y @@ -8043,22 +7552,17 @@ CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 # CONFIG_SECURITY_SMACK is not set # CONFIG_SECURITY_TOMOYO is not set CONFIG_SECURITY_APPARMOR=y -# CONFIG_SECURITY_APPARMOR_DEBUG is not set -CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y CONFIG_SECURITY_APPARMOR_HASH=y CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y -CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y -CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y +# CONFIG_SECURITY_APPARMOR_DEBUG is not set # CONFIG_SECURITY_LOADPIN is not set # CONFIG_SECURITY_YAMA is not set # CONFIG_SECURITY_SAFESETID is not set # CONFIG_SECURITY_LOCKDOWN_LSM is not set -# CONFIG_SECURITY_LANDLOCK is not set CONFIG_INTEGRITY=y # CONFIG_INTEGRITY_SIGNATURE is not set CONFIG_INTEGRITY_AUDIT=y # CONFIG_IMA is not set -# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set # CONFIG_EVM is not set # CONFIG_DEFAULT_SECURITY_SELINUX is not set # CONFIG_DEFAULT_SECURITY_APPARMOR is not set @@ -8076,18 +7580,15 @@ CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y CONFIG_INIT_STACK_NONE=y +# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL is not set # CONFIG_INIT_STACK_ALL_PATTERN is not set # CONFIG_INIT_STACK_ALL_ZERO is not set # CONFIG_GCC_PLUGIN_STACKLEAK is not set # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set -CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y -# CONFIG_ZERO_CALL_USED_REGS is not set # end of Memory initialization - -CONFIG_RANDSTRUCT_NONE=y -# CONFIG_RANDSTRUCT_FULL is not set -# CONFIG_RANDSTRUCT_PERFORMANCE is not set # end of Kernel hardening options # end of Security options @@ -8102,6 +7603,7 @@ CONFIG_CRYPTO=y # # Crypto core or helper # +CONFIG_CRYPTO_FIPS140=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y @@ -8129,8 +7631,6 @@ CONFIG_CRYPTO_NULL2=y # CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_AUTHENC=m # CONFIG_CRYPTO_TEST is not set -CONFIG_CRYPTO_ENGINE=y -# end of Crypto core or helper # # Public-key cryptography @@ -8139,99 +7639,93 @@ CONFIG_CRYPTO_RSA=y # CONFIG_CRYPTO_DH is not set CONFIG_CRYPTO_ECC=y CONFIG_CRYPTO_ECDH=y -# CONFIG_CRYPTO_ECDSA is not set # CONFIG_CRYPTO_ECRDSA is not set # CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set -# end of Public-key cryptography # -# Block ciphers +# Authenticated Encryption with Associated Data # -CONFIG_CRYPTO_AES=y -# CONFIG_CRYPTO_AES_TI is not set -# CONFIG_CRYPTO_ANUBIS is not set -# CONFIG_CRYPTO_ARIA is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -CONFIG_CRYPTO_DES=y -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_SEED is not set -# CONFIG_CRYPTO_SERPENT is not set -CONFIG_CRYPTO_SM4=y -# CONFIG_CRYPTO_SM4_GENERIC is not set -# CONFIG_CRYPTO_TEA is not set -CONFIG_CRYPTO_TWOFISH=y -CONFIG_CRYPTO_TWOFISH_COMMON=y -# end of Block ciphers +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +# CONFIG_CRYPTO_CHACHA20POLY1305 is not set +# CONFIG_CRYPTO_AEGIS128 is not set +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_ECHAINIV=m # -# Length-preserving ciphers and modes +# Block modes # -# CONFIG_CRYPTO_ADIANTUM is not set -# CONFIG_CRYPTO_ARC4 is not set -# CONFIG_CRYPTO_CHACHA20 is not set CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CFB=y CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_ECB=y -# CONFIG_CRYPTO_HCTR2 is not set -# CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_LRW is not set CONFIG_CRYPTO_OFB=y # CONFIG_CRYPTO_PCBC is not set CONFIG_CRYPTO_XTS=y -# end of Length-preserving ciphers and modes +# CONFIG_CRYPTO_KEYWRAP is not set +# CONFIG_CRYPTO_ADIANTUM is not set +CONFIG_CRYPTO_ESSIV=m # -# AEAD (authenticated encryption with associated data) ciphers +# Hash modes # -# CONFIG_CRYPTO_AEGIS128 is not set -# CONFIG_CRYPTO_CHACHA20POLY1305 is not set -CONFIG_CRYPTO_CCM=y -CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_SEQIV=m -CONFIG_CRYPTO_ECHAINIV=m -CONFIG_CRYPTO_ESSIV=m -# end of AEAD (authenticated encryption with associated data) ciphers +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set # -# Hashes, digests, and MACs +# Digest # +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_XXHASH=y CONFIG_CRYPTO_BLAKE2B=y -CONFIG_CRYPTO_CMAC=y +# CONFIG_CRYPTO_BLAKE2S is not set +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=y -CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_POLY1305 is not set CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MICHAEL_MIC=m -# CONFIG_CRYPTO_POLY1305 is not set +# CONFIG_CRYPTO_RMD128 is not set # CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y # CONFIG_CRYPTO_SHA3 is not set CONFIG_CRYPTO_SM3=y -# CONFIG_CRYPTO_SM3_GENERIC is not set # CONFIG_CRYPTO_STREEBOG is not set -# CONFIG_CRYPTO_VMAC is not set +# CONFIG_CRYPTO_TGR192 is not set # CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_XCBC is not set -CONFIG_CRYPTO_XXHASH=y -# end of Hashes, digests, and MACs # -# CRCs (cyclic redundancy checks) +# Ciphers # -CONFIG_CRYPTO_CRC32C=y -CONFIG_CRYPTO_CRC32=y -CONFIG_CRYPTO_CRCT10DIF=y -# CONFIG_CRYPTO_CRC64_ROCKSOFT is not set -# end of CRCs (cyclic redundancy checks) +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_TI is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_CHACHA20 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_SM4=y +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_TWOFISH_COMMON=y # # Compression @@ -8242,10 +7736,9 @@ CONFIG_CRYPTO_LZO=y # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set CONFIG_CRYPTO_ZSTD=m -# end of Compression # -# Random number generation +# Random Number Generation # CONFIG_CRYPTO_ANSI_CPRNG=y CONFIG_CRYPTO_DRBG_MENU=y @@ -8254,60 +7747,17 @@ CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_CTR is not set CONFIG_CRYPTO_DRBG=y CONFIG_CRYPTO_JITTERENTROPY=y -# end of Random number generation - -# -# Userspace interface -# CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y # CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_USER_API_AEAD is not set CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y -# end of Userspace interface - CONFIG_CRYPTO_HASH_INFO=y -# CONFIG_CRYPTO_NHPOLY1305_NEON is not set -CONFIG_CRYPTO_CHACHA20_NEON=m - -# -# Accelerated Cryptographic Algorithms for CPU (arm64) -# -CONFIG_CRYPTO_GHASH_ARM64_CE=y -CONFIG_CRYPTO_POLY1305_NEON=m -CONFIG_CRYPTO_SHA1_ARM64_CE=y -CONFIG_CRYPTO_SHA256_ARM64=y -CONFIG_CRYPTO_SHA2_ARM64_CE=y -# CONFIG_CRYPTO_SHA512_ARM64 is not set -# CONFIG_CRYPTO_SHA512_ARM64_CE is not set -# CONFIG_CRYPTO_SHA3_ARM64 is not set -# CONFIG_CRYPTO_SM3_NEON is not set -# CONFIG_CRYPTO_SM3_ARM64_CE is not set -# CONFIG_CRYPTO_POLYVAL_ARM64_CE is not set -# CONFIG_CRYPTO_AES_ARM64 is not set -CONFIG_CRYPTO_AES_ARM64_CE=y -CONFIG_CRYPTO_AES_ARM64_CE_BLK=y -# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set -# CONFIG_CRYPTO_AES_ARM64_BS is not set -# CONFIG_CRYPTO_SM4_ARM64_CE is not set -# CONFIG_CRYPTO_SM4_ARM64_CE_BLK is not set -# CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set -CONFIG_CRYPTO_AES_ARM64_CE_CCM=y -# CONFIG_CRYPTO_CRCT10DIF_ARM64_CE is not set -# end of Accelerated Cryptographic Algorithms for CPU (arm64) - CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_ATMEL_ECC is not set # CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set # CONFIG_CRYPTO_DEV_CCP is not set -# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set -# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set -# CONFIG_CRYPTO_DEV_QAT_C62X is not set -# CONFIG_CRYPTO_DEV_QAT_4XXX is not set -# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set -# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set -# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set # CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set # CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set CONFIG_CRYPTO_DEV_ROCKCHIP=y @@ -8321,12 +7771,12 @@ CONFIG_CRYPTO_DEV_ROCKCHIP_DEV=y # CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +# CONFIG_ASYMMETRIC_TPM_KEY_SUBTYPE is not set CONFIG_X509_CERTIFICATE_PARSER=y # CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set CONFIG_PKCS7_MESSAGE_PARSER=y # CONFIG_PKCS7_TEST_KEY is not set # CONFIG_SIGNED_PE_FILE_VERIFICATION is not set -# CONFIG_FIPS_SIGNATURE_SELFTEST is not set # # Certificates for signature checking @@ -8360,12 +7810,10 @@ CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_ARCH_USE_SYM_ANNOTATIONS=y # CONFIG_INDIRECT_PIO is not set -# CONFIG_TRACE_MMIO_ACCESS is not set # # Crypto library routines # -CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_LIB_AES=y CONFIG_CRYPTO_LIB_ARC4=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y @@ -8379,14 +7827,13 @@ CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m CONFIG_CRYPTO_LIB_POLY1305=m CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m -CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_SHA256=y # end of Crypto library routines +CONFIG_LIB_MEMNEQ=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y -# CONFIG_CRC64_ROCKSOFT is not set CONFIG_CRC_ITU_T=y CONFIG_CRC32=y # CONFIG_CRC32_SELFTEST is not set @@ -8409,7 +7856,6 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_DECOMPRESS=y -CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_COMPRESS=y CONFIG_ZSTD_DECOMPRESS=y CONFIG_XZ_DEC=y @@ -8419,7 +7865,6 @@ CONFIG_XZ_DEC=y CONFIG_XZ_DEC_ARM=y CONFIG_XZ_DEC_ARMTHUMB=y # CONFIG_XZ_DEC_SPARC is not set -# CONFIG_XZ_DEC_MICROLZMA is not set CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set CONFIG_DECOMPRESS_GZIP=y @@ -8438,7 +7883,6 @@ CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m CONFIG_INTERVAL_TREE=y -CONFIG_XARRAY_MULTI=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT_MAP=y @@ -8454,9 +7898,9 @@ CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y CONFIG_SWIOTLB=y -# CONFIG_DMA_RESTRICTED_POOL is not set CONFIG_DMA_NONCOHERENT_MMAP=y CONFIG_DMA_COHERENT_POOL=y +CONFIG_DMA_REMAP=y CONFIG_DMA_DIRECT_REMAP=y CONFIG_DMA_CMA=y # CONFIG_DMA_PERNUMA_CMA is not set @@ -8471,9 +7915,7 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y # CONFIG_CMA_SIZE_SEL_MAX is not set CONFIG_CMA_ALIGNMENT=8 # CONFIG_DMA_API_DEBUG is not set -# CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_SGL_ALLOC=y -# CONFIG_FORCE_NR_CPUS is not set CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y @@ -8494,14 +7936,10 @@ CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y CONFIG_SG_POOL=y CONFIG_ARCH_STACKWALK=y -CONFIG_STACKDEPOT=y CONFIG_SBITMAP=y +# CONFIG_STRING_SELFTEST is not set # end of Library routines -CONFIG_GENERIC_IOREMAP=y -CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y -CONFIG_ASN1_ENCODER=m - # # Kernel hacking # @@ -8512,7 +7950,6 @@ CONFIG_ASN1_ENCODER=m CONFIG_PRINTK_TIME=y CONFIG_PRINTK_TIME_FROM_ARM_ARCH_TIMER=y # CONFIG_PRINTK_CALLER is not set -# CONFIG_STACKTRACE_BUILD_ID is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 @@ -8523,27 +7960,20 @@ CONFIG_SYMBOLIC_ERRNAME=y CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_MISC=y - # # Compile-time checks and compiler options # -CONFIG_AS_HAS_NON_CONST_LEB128=y -CONFIG_DEBUG_INFO_NONE=y -# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set -# CONFIG_DEBUG_INFO_DWARF4 is not set -# CONFIG_DEBUG_INFO_DWARF5 is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_READABLE_ASM is not set # CONFIG_HEADERS_INSTALL is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_SECTION_MISMATCH_WARN_ONLY=y -# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y CONFIG_FRAME_POINTER=y -# CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -8562,28 +7992,19 @@ CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y # CONFIG_UBSAN is not set -CONFIG_HAVE_ARCH_KCSAN=y CONFIG_HAVE_KCSAN_COMPILER=y -# CONFIG_KCSAN is not set # end of Generic Kernel Debugging Instruments -# -# Networking Debugging -# -# CONFIG_NET_DEV_REFCNT_TRACKER is not set -# CONFIG_NET_NS_REFCNT_TRACKER is not set -# CONFIG_DEBUG_NET is not set -# end of Networking Debugging +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y # # Memory Debugging # # CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_SLUB_DEBUG=y -# CONFIG_SLUB_DEBUG_ON is not set # CONFIG_PAGE_OWNER is not set -# CONFIG_PAGE_TABLE_CHECK is not set +# CONFIG_PAGE_PINNER is not set # CONFIG_PAGE_POISONING is not set # CONFIG_DEBUG_PAGE_REF is not set # CONFIG_DEBUG_RODATA_TEST is not set @@ -8592,7 +8013,8 @@ CONFIG_ARCH_HAS_DEBUG_WX=y CONFIG_GENERIC_PTDUMP=y # CONFIG_PTDUMP_DEBUGFS is not set # CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SHRINKER_DEBUG is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set # CONFIG_DEBUG_STACK_USAGE is not set @@ -8662,10 +8084,10 @@ CONFIG_DEBUG_SPINLOCK=y # CONFIG_CSD_LOCK_WAIT_DEBUG is not set # end of Lock Debugging (spinlocks, mutexes, etc...) -# CONFIG_DEBUG_IRQFLAGS is not set CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # CONFIG_DEBUG_KOBJECT is not set +CONFIG_HAVE_DEBUG_BUGVERBOSE=y # # Debug kernel data structures @@ -8675,7 +8097,6 @@ CONFIG_STACKTRACE=y # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_BUG_ON_DATA_CORRUPTION is not set -# CONFIG_DEBUG_MAPLE_TREE is not set # end of Debug kernel data structures CONFIG_DEBUG_CREDENTIALS=y @@ -8689,12 +8110,12 @@ CONFIG_DEBUG_CREDENTIALS=y CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_BOOTPARAM_RCU_STALL_PANIC is not set CONFIG_BOOTPARAM_RCU_STALL_PANIC_VALUE=0 -CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 CONFIG_RCU_TRACE=y # CONFIG_RCU_EQS_DEBUG is not set # end of RCU Debugging # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set # CONFIG_LATENCYTOP is not set CONFIG_NOP_TRACER=y @@ -8709,6 +8130,8 @@ CONFIG_TRACE_CLOCK=y CONFIG_RING_BUFFER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y +# CONFIG_TRACE_MMIO_ACCESS is not set +# CONFIG_TRACEFS_DISABLE_AUTOMOUNT is not set CONFIG_TRACING=y CONFIG_GENERIC_TRACER=y CONFIG_TRACING_SUPPORT=y @@ -8723,8 +8146,6 @@ CONFIG_DYNAMIC_FTRACE_WITH_REGS=y # CONFIG_IRQSOFF_TRACER is not set # CONFIG_SCHED_TRACER is not set # CONFIG_HWLAT_TRACER is not set -# CONFIG_OSNOISE_TRACER is not set -# CONFIG_TIMERLAT_TRACER is not set # CONFIG_FTRACE_SYSCALLS is not set # CONFIG_TRACER_SNAPSHOT is not set CONFIG_BRANCH_PROFILE_NONE=y @@ -8743,13 +8164,11 @@ CONFIG_FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY=y # CONFIG_TRACEPOINT_BENCHMARK is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_TRACE_EVAL_MAP_FILE is not set -# CONFIG_FTRACE_RECORD_RECURSION is not set # CONFIG_FTRACE_STARTUP_TEST is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set # CONFIG_PREEMPTIRQ_DELAY_TEST is not set -# CONFIG_RV is not set # CONFIG_SAMPLES is not set +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y CONFIG_STRICT_DEVMEM=y # CONFIG_IO_STRICT_DEVMEM is not set @@ -8772,10 +8191,10 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set CONFIG_RUNTIME_TESTING_MENU=y CONFIG_LKDTM=y +# CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_MIN_HEAP is not set -# CONFIG_TEST_DIV64 is not set +# CONFIG_TEST_SORT is not set # CONFIG_BACKTRACE_SELF_TEST is not set -# CONFIG_TEST_REF_TRACKER is not set # CONFIG_RBTREE_TEST is not set # CONFIG_REED_SOLOMON_TEST is not set # CONFIG_INTERVAL_TREE_TEST is not set @@ -8783,18 +8202,16 @@ CONFIG_LKDTM=y # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_ASYNC_RAID6_TEST is not set # CONFIG_TEST_HEXDUMP is not set -# CONFIG_STRING_SELFTEST is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_STRSCPY is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_PRINTF is not set -# CONFIG_TEST_SCANF is not set # CONFIG_TEST_BITMAP is not set # CONFIG_TEST_UUID is not set # CONFIG_TEST_XARRAY is not set -# CONFIG_TEST_MAPLE_TREE is not set +# CONFIG_TEST_OVERFLOW is not set # CONFIG_TEST_RHASHTABLE is not set -# CONFIG_TEST_SIPHASH is not set +# CONFIG_TEST_HASH is not set # CONFIG_TEST_IDA is not set # CONFIG_TEST_LKM is not set # CONFIG_TEST_BITOPS is not set @@ -8807,17 +8224,11 @@ CONFIG_LKDTM=y # CONFIG_TEST_SYSCTL is not set # CONFIG_TEST_UDELAY is not set # CONFIG_TEST_STATIC_KEYS is not set -# CONFIG_TEST_DYNAMIC_DEBUG is not set # CONFIG_TEST_KMOD is not set # CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_STACKINIT is not set # CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_FREE_PAGES is not set -CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage - -# -# Rust hacking -# -# end of Rust hacking # end of Kernel hacking diff --git a/projects/Rockchip/devices/RK3588/options b/projects/Rockchip/devices/RK3588/options index d3653be69..bede3e4b6 100755 --- a/projects/Rockchip/devices/RK3588/options +++ b/projects/Rockchip/devices/RK3588/options @@ -34,7 +34,7 @@ # Single dtb settings TRUST_LABEL="trust" - DEVICE_DTB=("rk3588s-gameforce-ace" "rk3588s-orangepi-5" "rk3588-rock-5b" "rk3588-orangepi-5-plus") + DEVICE_DTB=("rk3588s-gameforce-ace" "rk3588s-orangepi-5" "rk3588s-rock-5a" "rk3588-rock-5b" "rk3588-rock-5b-plus" "rk3588-orangepi-5-plus") UBOOT_DTB="${DEVICE_DTB[0]}" UBOOT_CONFIG="orangepi_5_defconfig" diff --git a/projects/Rockchip/patches/linux/RK3588/006-rk3588-rock-5b-plus.patch b/projects/Rockchip/patches/linux/RK3588/006-rk3588-rock-5b-plus.patch new file mode 100644 index 000000000..75375e197 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3588/006-rk3588-rock-5b-plus.patch @@ -0,0 +1,1293 @@ +diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boot/dts/rockchip/Makefile +--- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-04-25 00:07:03.075472129 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-04-25 00:09:05.142429979 +0000 +@@ -262,6 +262,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-pc + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-pcie-ep-demo-v11-linux.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-orangepi-5-plus.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5b-plus.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5-itx.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-turing-rk1.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-mixtile-core3588e.dtb +diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts linux/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts 1970-01-01 00:00:00.000000000 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3588-rock-5b-plus.dts 2024-04-25 00:07:45.808514172 +0000 +@@ -0,0 +1,1278 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2023 Rockchip Electronics Co., Ltd. ++ * Copyright (c) 2023 Radxa Limited ++ * ++ */ ++ ++/dts-v1/; ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "dt-bindings/usb/pd.h" ++#include "rk3588.dtsi" ++#include "rk3588-rk806-single.dtsi" ++#include "rk3588-linux.dtsi" ++ ++/ { ++ model = "Radxa ROCK 5B+"; ++ compatible = "radxa,rock-5b-plus", "rockchip,rk3588"; ++ ++ /delete-node/ chosen; ++ ++ fan0: pwm-fan { ++ compatible = "pwm-fan"; ++ #cooling-cells = <2>; ++ cooling-levels = <0 64 128 192 255>; ++ pwms = <&pwm1 0 10000 0>; ++ }; ++ ++ vcc12v_dcin: vcc12v-dcin { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ }; ++ ++ vcc5v0_sys: vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin>; ++ }; ++ ++ wifi_disable: wifi-diable-gpio-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "wifi_disable"; ++ enable-active-high; ++ gpio = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ bt_wake: bt-wake-gpio-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "bt_wake"; ++ enable-active-high; ++ gpio = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; ++ regulator-boot-on; ++ regulator-always-on; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&bt_wake_l>; ++ }; ++ ++ vcc_1v1_nldo_s3: vcc-1v1-nldo-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc_1v1_nldo_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1100000>; ++ regulator-max-microvolt = <1100000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ hdmi0_sound: hdmi0-sound { ++ status = "okay"; ++ compatible = "rockchip,hdmi"; ++ rockchip,mclk-fs = <128>; ++ rockchip,card-name = "rockchip-hdmi0"; ++ rockchip,cpu = <&i2s5_8ch>; ++ rockchip,codec = <&hdmi0>; ++ rockchip,jack-det; ++ }; ++ ++ hdmi1_sound: hdmi1-sound { ++ status = "okay"; ++ compatible = "rockchip,hdmi"; ++ rockchip,mclk-fs = <128>; ++ rockchip,card-name = "rockchip-hdmi1"; ++ rockchip,cpu = <&i2s6_8ch>; ++ rockchip,codec = <&hdmi1>; ++ rockchip,jack-det; ++ }; ++ ++ dp0_sound: dp0-sound { ++ status = "okay"; ++ compatible = "rockchip,hdmi"; ++ rockchip,card-name= "rockchip-hdmi2"; ++ rockchip,mclk-fs = <512>; ++ rockchip,cpu = <&spdif_tx2>; ++ rockchip,codec = <&dp0 1>; ++ rockchip,jack-det; ++ }; ++ ++ es8316_sound: es8316-sound { ++ status = "okay"; ++ compatible = "rockchip,multicodecs-card"; ++ rockchip,card-name = "rockchip-es8316"; ++ rockchip,format = "i2s"; ++ rockchip,mclk-fs = <256>; ++ rockchip,cpu = <&i2s0_8ch >; ++ rockchip,codec = <&es8316>; ++ poll-interval = <100>; ++ io-channels = <&saradc 3>; ++ io-channel-names = "adc-detect"; ++ keyup-threshold-microvolt = <1800000>; ++ pinctrl-0 = <&hp_det>; ++ pinctrl-names = "default"; ++ hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>; ++ play-pause-key { ++ label = "playpause"; ++ linux,code = <164>; ++ press-threshold-microvolt = <2000>; ++ }; ++ }; ++ ++ vbus5v0_typec: vbus5v0-typec { ++ compatible = "regulator-fixed"; ++ regulator-name = "vbus5v0_typec"; ++ gpio = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vbus5v0_typec_en>; ++ enable-active-high; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ vcc5v0_host: vcc5v0-host-regulator { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_host"; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vcc5v0_host_en>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ vcc3v3_pcie2x1l2: vcc3v3-pcie2x1l2 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_pcie2x1l2"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ startup-delay-us = <5000>; ++ vin-supply = <&vcc_3v3_s3>; ++ }; ++ ++ vcc3v3_pcie2x1l0: vcc3v3-pcie2x1l0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_pcie2x1l0"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ enable-active-high; ++ regulator-boot-on; ++ regulator-always-on; ++ gpios = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>; ++ startup-delay-us = <50000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ vcc3v3_pcie30: vcc3v3-pcie30 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_pcie30"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ enable-active-high; ++ gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>; ++ startup-delay-us = <5000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ em05_modem: em05-modem { ++ compatible = "lte-em05-modem-platdata"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&em05_power_en &em05_airplane_mode &em05_reset>; ++ em05,power-gpio = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>; ++ em05,reset-gpio = <&gpio2 RK_PB3 GPIO_ACTIVE_HIGH>; ++ em05,airplane-gpio = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>; ++ status = "okay"; ++ }; ++ ++ gpio-leds { ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ ++ user-led2 { ++ gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "heartbeat"; ++ default-state = "on"; ++ }; ++ }; ++ ++ /* If hdmirx node is disabled, delete the reserved-memory node here. */ ++ reserved-memory { ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ranges; ++ ++ /* Reserve 256MB memory for hdmirx-controller@fdee0000 */ ++ cma { ++ compatible = "shared-dma-pool"; ++ reusable; ++ reg = <0x0 (256 * 0x100000) 0x0 (256 * 0x100000)>; ++ linux,cma-default; ++ }; ++ }; ++ ++ hdmiin_dc: hdmiin-dc { ++ compatible = "rockchip,dummy-codec"; ++ #sound-dai-cells = <0>; ++ }; ++ ++ hdmiin-sound { ++ compatible = "simple-audio-card"; ++ simple-audio-card,format = "i2s"; ++ simple-audio-card,name = "rockchip,hdmiin"; ++ simple-audio-card,bitclock-master = <&dailink0_master>; ++ simple-audio-card,frame-master = <&dailink0_master>; ++ status = "okay"; ++ simple-audio-card,cpu { ++ sound-dai = <&i2s7_8ch>; ++ }; ++ dailink0_master: simple-audio-card,codec { ++ sound-dai = <&hdmiin_dc>; ++ }; ++ }; ++}; ++ ++&av1d { ++ status = "okay"; ++}; ++ ++&av1d_mmu { ++ status = "okay"; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_lit_s0>; ++ mem-supply = <&vdd_cpu_lit_mem_s0>; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_big0_s0>; ++ mem-supply = <&vdd_cpu_big0_mem_s0>; ++}; ++ ++&cpu_b2 { ++ cpu-supply = <&vdd_cpu_big1_s0>; ++ mem-supply = <&vdd_cpu_big1_mem_s0>; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu_s0>; ++ mem-supply = <&vdd_gpu_mem_s0>; ++ status = "okay"; ++}; ++ ++&rknpu { ++ rknpu-supply = <&vdd_npu_s0>; ++ mem-supply = <&vdd_npu_mem_s0>; ++ status = "okay"; ++}; ++ ++&rknpu_mmu { ++ status = "okay"; ++}; ++ ++&i2c0 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c0m2_xfer>; ++ ++ vdd_cpu_big0_s0: vdd_cpu_big0_mem_s0: rk8602@42 { ++ compatible = "rockchip,rk8602"; ++ reg = <0x42>; ++ vin-supply = <&vcc5v0_sys>; ++ regulator-compatible = "rk860x-reg"; ++ regulator-name = "vdd_cpu_big0_s0"; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-ramp-delay = <2300>; ++ rockchip,suspend-voltage-selector = <1>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_cpu_big1_s0: vdd_cpu_big1_mem_s0: rk8603@43 { ++ compatible = "rockchip,rk8603"; ++ reg = <0x43>; ++ vin-supply = <&vcc5v0_sys>; ++ regulator-compatible = "rk860x-reg"; ++ regulator-name = "vdd_cpu_big1_s0"; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-ramp-delay = <2300>; ++ rockchip,suspend-voltage-selector = <1>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&dmc { ++ center-supply = <&vdd_ddr_s0>; ++ mem-supply = <&vdd_log_s0>; ++ status = "okay"; ++}; ++ ++&dfi { ++ status = "okay"; ++}; ++ ++&i2c1 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c1m2_xfer>; ++ ++ vdd_npu_s0: vdd_npu_mem_s0: rk8602@42 { ++ compatible = "rockchip,rk8602"; ++ reg = <0x42>; ++ vin-supply = <&vcc5v0_sys>; ++ regulator-compatible = "rk860x-reg"; ++ regulator-name = "vdd_npu_s0"; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <950000>; ++ regulator-ramp-delay = <2300>; ++ rockchip,suspend-voltage-selector = <1>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&iep { ++ status = "okay"; ++}; ++ ++&iep_mmu { ++ status = "okay"; ++}; ++ ++&jpegd { ++ status = "okay"; ++}; ++ ++&jpegd_mmu { ++ status = "okay"; ++}; ++ ++&jpege_ccu { ++ status = "okay"; ++}; ++ ++&jpege0 { ++ status = "okay"; ++}; ++ ++&jpege0_mmu { ++ status = "okay"; ++}; ++ ++&jpege1 { ++ status = "okay"; ++}; ++ ++&jpege1_mmu { ++ status = "okay"; ++}; ++ ++&jpege2 { ++ status = "okay"; ++}; ++ ++&jpege2_mmu { ++ status = "okay"; ++}; ++ ++&jpege3 { ++ status = "okay"; ++}; ++ ++&jpege3_mmu { ++ status = "okay"; ++}; ++ ++&vdpu { ++ status = "okay"; ++}; ++ ++&vdpu_mmu { ++ status = "okay"; ++}; ++ ++&mpp_srv { ++ status = "okay"; ++}; ++ ++&rga3_core0 { ++ status = "okay"; ++}; ++ ++&rga3_0_mmu { ++ status = "okay"; ++}; ++ ++&rga3_core1 { ++ status = "okay"; ++}; ++ ++&rga3_1_mmu { ++ status = "okay"; ++}; ++ ++&rga2 { ++ status = "okay"; ++}; ++ ++&rkvdec_ccu { ++ status = "okay"; ++}; ++ ++&rkvdec0 { ++ status = "okay"; ++}; ++ ++&rkvdec0_mmu { ++ status = "okay"; ++}; ++ ++&rkvdec1 { ++ status = "okay"; ++}; ++ ++&rkvdec1_mmu { ++ status = "okay"; ++}; ++ ++&rkvenc_ccu { ++ status = "okay"; ++}; ++ ++&rkvenc0 { ++ status = "okay"; ++}; ++ ++&rkvenc0_mmu { ++ status = "okay"; ++}; ++ ++&rkvenc1 { ++ status = "okay"; ++}; ++ ++&rkvenc1_mmu { ++ status = "okay"; ++}; ++ ++&saradc { ++ status = "okay"; ++ vref-supply = <&avcc_1v8_s0>; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ no-sdio; ++ no-sd; ++ non-removable; ++ max-frequency = <200000000>; ++ mmc-hs400-1_8v; ++ mmc-hs400-enhanced-strobe; ++ mmc-hs200-1_8v; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ max-frequency = <200000000>; ++ no-sdio; ++ no-mmc; ++ bus-width = <4>; ++ cap-mmc-highspeed; ++ cap-sd-highspeed; ++ disable-wp; ++ sd-uhs-sdr104; ++ vmmc-supply = <&vcc_3v3_s3>; ++ vqmmc-supply = <&vccio_sd_s0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_det>; ++ status = "okay"; ++}; ++ ++&tsadc { ++ status = "okay"; ++}; ++ ++&display_subsystem { ++ clocks = <&hdptxphy_hdmi_clk0>, <&hdptxphy_hdmi_clk1>; ++ clock-names = "hdmi0_phy_pll", "hdmi1_phy_pll"; ++ ++ route { ++ route_hdmi0: route-hdmi0 { ++ status = "okay"; ++ logo,uboot = "logo.bmp"; ++ logo,kernel = "logo_kernel.bmp"; ++ logo,mode = "center"; ++ charge_logo,mode = "center"; ++ connect = <&vp0_out_hdmi0>; ++ }; ++ ++ route_hdmi1: route-hdmi1 { ++ status = "okay"; ++ logo,uboot = "logo.bmp"; ++ logo,kernel = "logo_kernel.bmp"; ++ logo,mode = "center"; ++ charge_logo,mode = "center"; ++ connect = <&vp1_out_hdmi1>; ++ }; ++ }; ++}; ++ ++&hdptxphy_hdmi_clk0 { ++ status = "okay"; ++}; ++ ++&hdptxphy_hdmi_clk1 { ++ status = "okay"; ++}; ++ ++&hdmi0 { ++ status = "okay"; ++ cec-enable = "true"; ++}; ++ ++&hdmi0_in_vp0 { ++ status = "okay"; ++}; ++ ++&hdmi0_in_vp1 { ++ status = "disabled"; ++}; ++ ++&hdmi0_in_vp2 { ++ status = "disabled"; ++}; ++ ++&hdmi0_sound { ++ status = "okay"; ++}; ++ ++&hdmi1 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdmim0_tx1_cec &hdmim0_tx1_hpd &hdmim1_tx1_scl &hdmim1_tx1_sda>; ++ cec-enable = "true"; ++}; ++ ++&hdmi1_in_vp0 { ++ status = "disabled"; ++}; ++ ++&hdmi1_in_vp1 { ++ status = "okay"; ++}; ++ ++&hdmi1_in_vp2 { ++ status = "disabled"; ++}; ++ ++&hdmi1_sound { ++ status = "okay"; ++}; ++ ++/* Should work with at least 128MB cma reserved above. */ ++&hdmirx_ctrler { ++ status = "okay"; ++ ++ /* Effective level used to trigger HPD: 0-low, 1-high */ ++ hpd-trigger-level = <1>; ++ hdmirx-det-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>; ++ ++ pinctrl-0 = <&hdmim1_rx_cec &hdmim1_rx_hpdin &hdmim1_rx_scl &hdmim1_rx_sda &hdmirx_det>; ++ pinctrl-names = "default"; ++}; ++ ++&hdptxphy_hdmi0 { ++ status = "okay"; ++}; ++ ++&hdptxphy_hdmi1 { ++ status = "okay"; ++}; ++ ++&i2s5_8ch { ++ status = "okay"; ++}; ++ ++&i2s6_8ch { ++ status = "okay"; ++}; ++ ++&i2s7_8ch { ++ status = "okay"; ++}; ++ ++&vop { ++ status = "okay"; ++}; ++ ++&vop_mmu { ++ status = "okay"; ++}; ++ ++&vepu { ++ status = "okay"; ++}; ++ ++/* vp0 & vp1 splice for 8K output */ ++&vp0 { ++ rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0)>; ++ rockchip,primary-plane = ; ++}; ++ ++&vp1 { ++ rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER1 | 1 << ROCKCHIP_VOP2_ESMART1)>; ++ rockchip,primary-plane = ; ++}; ++ ++&vp2 { ++ rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER2 | 1 << ROCKCHIP_VOP2_ESMART2)>; ++ rockchip,primary-plane = ; ++}; ++ ++&vp3 { ++ rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER3 | 1 << ROCKCHIP_VOP2_ESMART3)>; ++ rockchip,primary-plane = ; ++}; ++ ++&u2phy2 { ++ status = "okay"; ++}; ++ ++&u2phy2_host { ++ status = "okay"; ++}; ++ ++&u2phy3 { ++ status = "okay"; ++}; ++ ++&u2phy3_host { ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_host0_ohci { ++ status = "okay"; ++}; ++ ++&usb_host1_ehci { ++ status = "okay"; ++}; ++ ++&usb_host1_ohci { ++ status = "okay"; ++}; ++ ++&usbhost3_0 { ++ status = "okay"; ++}; ++ ++&usbhost_dwc3_0 { ++ status = "okay"; ++}; ++ ++&combphy2_psu { ++ status = "okay"; ++}; ++ ++&u2phy1 { ++ status = "okay"; ++}; ++ ++&u2phy1_otg { ++ status = "okay"; ++}; ++ ++&usbdrd3_1{ ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_1{ ++ status = "okay"; ++}; ++ ++&usbdp_phy1 { ++ status = "okay"; ++}; ++ ++&usbdp_phy1_u3 { ++ status = "okay"; ++}; ++ ++&i2c4 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c4m1_xfer>; ++ ++ usbc0: fusb302@22 { ++ compatible = "fcs,fusb302"; ++ reg = <0x22>; ++ interrupt-parent = <&gpio3>; ++ interrupts = ; ++ int-n-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&usbc0_int>; ++ vbus-supply = <&vbus5v0_typec>; ++ status = "okay"; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ usbc0_role_sw: endpoint@0 { ++ remote-endpoint = <&dwc3_0_role_switch>; ++ }; ++ }; ++ }; ++ ++ usb_con: connector { ++ compatible = "usb-c-connector"; ++ label = "USB-C"; ++ data-role = "dual"; ++ power-role = "dual"; ++ try-power-role = "sink"; ++ op-sink-microwatt = <1000000>; ++ sink-pdos = ++ ; ++ ++ source-pdos = ++ ; ++ ++ altmodes { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ altmode@0 { ++ reg = <0>; ++ svid = <0xff01>; ++ vdo = <0xffffffff>; ++ }; ++ }; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ usbc0_orien_sw: endpoint { ++ remote-endpoint = <&usbdp_phy0_orientation_switch>; ++ }; ++ }; ++ ++ port@1 { ++ reg = <1>; ++ dp_altmode_mux: endpoint { ++ remote-endpoint = <&usbdp_phy0_dp_altmode_mux>; ++ }; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++&u2phy0 { ++ status = "okay"; ++}; ++ ++&u2phy0_otg { ++ rockchip,typec-vbus-det; ++ status = "okay"; ++}; ++ ++&usbdrd3_0 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_0 { ++ status = "okay"; ++ dr_mode = "otg"; ++ usb-role-switch; ++ port { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ dwc3_0_role_switch: endpoint@0 { ++ reg = <0>; ++ remote-endpoint = <&usbc0_role_sw>; ++ }; ++ }; ++}; ++ ++&usbdp_phy0 { ++ status = "okay"; ++ orientation-switch; ++ svid = <0xff01>; ++ sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>; ++ sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>; ++ ++ port { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ usbdp_phy0_orientation_switch: endpoint@0 { ++ reg = <0>; ++ remote-endpoint = <&usbc0_orien_sw>; ++ }; ++ ++ usbdp_phy0_dp_altmode_mux: endpoint@1 { ++ reg = <1>; ++ remote-endpoint = <&dp_altmode_mux>; ++ }; ++ }; ++}; ++ ++&usbdp_phy0_u3 { ++ status = "okay"; ++}; ++ ++&usbdp_phy0_dp { ++ status = "okay"; ++}; ++ ++&dp0 { ++ status = "okay"; ++}; ++ ++&dp0_in_vp2 { ++ status = "okay"; ++}; ++ ++&route_dp0 { ++ status = "okay"; ++ connect = <&vp2_out_dp0>; ++}; ++ ++&spdif_tx2 { ++ status = "okay"; ++}; ++ ++&combphy0_ps { ++ status = "okay"; ++}; ++ ++&pcie2x1l2 { ++ reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie2x1l2>; ++ status = "okay"; ++}; ++ ++&pcie2x1l0 { ++ reset-gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie2x1l0>; ++ status = "okay"; ++}; ++ ++&combphy1_ps { ++ status = "okay"; ++}; ++ ++&pcie30phy { ++ rockchip,pcie30-phymode = ; ++ status = "okay"; ++}; ++ ++&pcie3x2 { ++ reset-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie30>; ++ status = "okay"; ++}; ++ ++&pcie3x4 { ++ num-lanes = <2>; ++ reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie30>; ++ status = "okay"; ++}; ++ ++&pwm1 { ++ pinctrl-names = "active"; ++ pinctrl-0 = <&pwm1m0_pins>; ++ status = "okay"; ++}; ++ ++&threshold { ++ temperature = <60000>; ++}; ++ ++&soc_thermal { ++ sustainable-power = <5000>; /* milliwatts */ ++ cooling-maps { ++ map3 { ++ trip = <&target>; ++ cooling-device = ++ <&fan0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; ++ contribution = <8192>; ++ }; ++ map4 { ++ trip = <&threshold>; ++ cooling-device = ++ <&fan0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; ++ contribution = <8192>; ++ }; ++ }; ++}; ++ ++&i2c6 { ++ status = "okay"; ++ ++ hym8563: hym8563@51 { ++ compatible = "haoyu,hym8563"; ++ reg = <0x51>; ++ #clock-cells = <0>; ++ clock-frequency = <32768>; ++ clock-output-names = "hym8563"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rtc_int>; ++ interrupt-parent = <&gpio0>; ++ interrupts = ; ++ }; ++}; ++ ++&i2c7 { ++ status = "okay"; ++ ++ es8316: es8316@11 { ++ compatible = "everest,es8316"; ++ reg = <0x11>; ++ clocks = <&mclkout_i2s0>; ++ clock-names = "mclk"; ++ assigned-clocks = <&mclkout_i2s0>; ++ assigned-clock-rates = <12288000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s0_mclk>; ++ #sound-dai-cells = <0>; ++ status = "okay"; ++ }; ++}; ++ ++&i2s0_8ch { ++ status = "okay"; ++ rockchip,playback-channels = <2>; ++ rockchip,capture-channels = <2>; ++ #sound-dai-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s0_lrck ++ &i2s0_sclk ++ &i2s0_sdi0 ++ &i2s0_sdo0>; ++}; ++ ++&sfc { ++ status = "okay"; ++ max-freq = <50000000>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fspim2_pins>; ++ ++ spi_flash: spi-flash@0 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ compatible = "jedec,spi-nor"; ++ reg = <0x0>; ++ spi-max-frequency = <50000000>; ++ spi-tx-bus-width = <1>; ++ spi-rx-bus-width = <4>; ++ status = "okay"; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ loader@0 { ++ label = "loader"; ++ reg = <0x0 0x1000000>; ++ }; ++ }; ++ }; ++}; ++ ++&rockchip_suspend { ++ compatible = "rockchip,pm-rk3588"; ++ status = "okay"; ++ rockchip,sleep-debug-en = <1>; ++ rockchip,sleep-mode-config = < ++ (0 ++ | RKPM_SLP_ARMOFF_DDRPD ++ ) ++ >; ++ rockchip,wakeup-config = < ++ (0 ++ | RKPM_GPIO_WKUP_EN ++ | RKPM_USB_WKUP_EN ++ ) ++ >; ++}; ++ ++&avdd_0v75_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <837500>; ++ }; ++}; ++ ++&avcc_1v8_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++}; ++ ++&vcc_1v8_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++}; ++ ++&vcc_3v3_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3300000>; ++ }; ++}; ++ ++&vdd_log_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <750000>; ++ }; ++}; ++ ++&vdd_ddr_pll_s0 { ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <850000>; ++ }; ++}; ++ ++&pinctrl { ++ usb { ++ vcc5v0_host_en: vcc5v0-host-en { ++ rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vcc5v0_otg_en: vcc5v0-otg-en { ++ rockchip,pins = <2 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ usb-typec { ++ usbc0_int: usbc0-int { ++ rockchip,pins = <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ vbus5v0_typec_en: vbus5v0-typec-en { ++ rockchip,pins = <2 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ hym8563 { ++ rtc_int: rtc-int { ++ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ headphone { ++ hp_det: hp-det { ++ rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ hdmirx { ++ hdmirx_det: hdmirx-det { ++ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ sdio-pwrseq { ++ wifi_enable_h: wifi-enable-h { ++ rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ wireless-wlan { ++ wifi_host_wake_irq: wifi-host-wake-irq { ++ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ bt { ++ bt_wake_l: bt-wake-l { ++ rockchip,pins = <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ headphone { ++ hp_det: hp-det { ++ rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ lte-em05-modem { ++ em05_airplane_mode: em05-airplane-mode { ++ rockchip,pins = <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ em05_power_en: em05-power-en { ++ rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ em05_reset: em05-reset { ++ rockchip,pins = <2 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&gpio0 { ++ gpio-line-names = ++ /* GPIO0_A0-A3 */ ++ "", "", "", "", ++ /* GPIO0_A4-A7 */ ++ "", "", "", "", ++ ++ /* GPIO0_B0-B3 */ ++ "", "", "", "", ++ /* GPIO0_B4-B7 */ ++ "", "PIN_8", "PIN_10", "", ++ ++ /* GPIO0_C0-C3 */ ++ "", "", "", "", ++ /* GPIO0_C4-C7 */ ++ "", "", "", "", ++ ++ /* GPIO0_D0-D3 */ ++ "", "", "", "", ++ /* GPIO0_D4-D7 */ ++ "", "", "", ""; ++}; ++ ++&gpio1 { ++ gpio-line-names = ++ /* GPIO1_A0-A3 */ ++ "", "", "PIN_31", "PIN_29", ++ /* GPIO1_A4-A7 */ ++ "", "", "", "", ++ ++ /* GPIO1_B0-B3 */ ++ "", "PIN_21", "PIN_19", "PIN_23", ++ /* GPIO1_B4-B7 */ ++ "PIN_24", "PIN_26", "", "", ++ ++ /* GPIO1_C0-C3 */ ++ "", "", "", "", ++ /* GPIO1_C4-C7 */ ++ "", "", "", "", ++ ++ /* GPIO1_D0-D3 */ ++ "", "", "", "", ++ /* GPIO1_D4-D7 */ ++ "", "", "", ""; ++}; ++ ++&gpio2 { ++ gpio-line-names = ++ /* GPIO2_A0-A3 */ ++ "", "", "", "", ++ /* GPIO2_A4-A7 */ ++ "", "", "", "", ++ ++ /* GPIO2_B0-B3 */ ++ "", "", "", "", ++ /* GPIO2_B4-B7 */ ++ "", "", "", "", ++ ++ /* GPIO2_C0-C3 */ ++ "", "", "", "", ++ /* GPIO2_C4-C7 */ ++ "", "", "", "", ++ ++ /* GPIO2_D0-D3 */ ++ "", "", "", "", ++ /* GPIO2_D4-D7 */ ++ "", "", "", ""; ++}; ++ ++&gpio3 { ++ gpio-line-names = ++ /* GPIO3_A0-A3 */ ++ "", "", "", "", ++ /* GPIO3_A4-A7 */ ++ "PIN_16", "", "", "PIN_33", ++ ++ /* GPIO3_B0-B3 */ ++ "", "PIN_36", "PIN_38", "PIN_40", ++ /* GPIO3_B4-B7 */ ++ "", "PIN_12", "PIN_35", "PIN_13", ++ ++ /* GPIO3_C0-C3 */ ++ "PIN_15", "PIN_11", "PIN_32", "PIN_7", ++ /* GPIO3_C4-C7 */ ++ "", "", "", "", ++ ++ /* GPIO3_D0-D3 */ ++ "", "", "", "", ++ /* GPIO3_D4-D7 */ ++ "", "", "", ""; ++}; ++ ++&gpio4 { ++ gpio-line-names = ++ /* GPIO4_A0-A3 */ ++ "", "", "", "", ++ /* GPIO4_A4-A7 */ ++ "", "", "", "", ++ ++ /* GPIO4_B0-B3 */ ++ "", "", "PIN_5", "PIN_3", ++ /* GPIO4_B4-B7 */ ++ "", "", "", "", ++ ++ /* GPIO4_C0-C3 */ ++ "", "", "", "", ++ /* GPIO4_C4-C7 */ ++ "PIN_18", "PIN_28", "PIN_27", "", ++ ++ /* GPIO4_D0-D3 */ ++ "", "", "", "", ++ /* GPIO4_D4-D7 */ ++ "", "", "", ""; ++}; From 4c843f051ed0caa2575e3c9cc7579d33cad83759 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 25 Apr 2024 14:41:55 +0000 Subject: [PATCH 090/184] Fix OGU/Max3 controller mapping --- packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt index aaf8a626c..6a4be0c47 100644 --- a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt +++ b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt @@ -11,5 +11,5 @@ 1900e7444b4800000111000034020000,rg552_joypad,platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b8,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3, 03001a3447616d65466f726365204100,GameForce ACE Gamepad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:-a1,-leftx:-a0,+leftx:+a0,-lefty:+a1,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux, 1900c3ea010000000100000001010000,odroidgo3_joypad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,dpright:b15,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b11,righttrigger:b7,back:b8,start:b9,dpup:b12,x:b2,y:b3,platform:Linux, -03001354474f2d556c74726120476100,GO-Ultra Gamepad,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11;+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4,platform:Linux, +03001354474f2d556c74726120476100,GO-Ultra Gamepad,platform:Linux,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4, 190014b3010000009178000000050000,rg_arc_joypad,platform:Linux,x:b4,a:b0,b:b1,y:b3,back:b10,start:b11,dpleft:b14,dpdown:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,rightstick:b2,leftstick:b5,platform:Linux, From 6963ce96531a8e03b2b4044225b2e1edc758a039 Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 25 Apr 2024 21:01:43 +0200 Subject: [PATCH 091/184] ace saturn, configuring cpu affinity solves performance issue * map Ace analog sticks in mednafen * fix mapping issues * update mednafen * fix es systems * set big cores as default for saturn and st-v on rk3588 It seems there might be an issue how mednafen interpret the ace analog triggers, needs to be investigated. --- .../RK3588/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../standalone/mednafen/config/common/mednafen.template | 8 ++++---- packages/emulators/standalone/mednafen/package.mk | 2 +- .../standalone/mednafen/scripts/mednafen_gen_config.sh | 8 ++++---- .../standalone/mednafen/scripts/start_mednafen.sh | 8 +++++++- .../hardware/quirks/platforms/RK3588/060-game_settings | 9 +++++++++ packages/virtual/emulators/package.mk | 2 -- 7 files changed, 26 insertions(+), 13 deletions(-) diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md index ae5a4532a..8c2380adf 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3588/SUPPORTED_EMULATORS_AND_CORES.md @@ -103,7 +103,7 @@ This document describes all available systems emulators and cores available for |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|Sega Model 3 (segamodel3)|1996|`segamodel3`|.zip|**supermodel:** supermodel-sa (default)
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| -|Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**retroarch:** beetle_saturn (default)
**mednafen:** ss
| +|Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**mednafen:** ss
| |Sharp|X1 (x1)|1982|`x1`|.dx1 .2d .2hd .tfd .d88 .88d .hdm .xdf .dup .tap .cmd .zip .7z|**retroarch:** x1 (default)
| |Sharp|x68000 (x68000)|1987|`x68000`|.dim .img .d88 .hdm .dup .2hd .xdf .hdf .cmd .m3u .zip .7z|**retroarch:** px68k (default)
| |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| diff --git a/packages/emulators/standalone/mednafen/config/common/mednafen.template b/packages/emulators/standalone/mednafen/config/common/mednafen.template index 8d1a4b4e2..c1debb3d0 100644 --- a/packages/emulators/standalone/mednafen/config/common/mednafen.template +++ b/packages/emulators/standalone/mednafen/config/common/mednafen.template @@ -9897,7 +9897,7 @@ ss.input.port1.3dpad.start joystick @GUID1@ @DEVICE_BTN_START@ ss.input.port1.3dpad.up joystick @GUID1@ @DEVICE_BTN_DPAD_UP@ -ss.input.port1.3dpad.x joystick @GUID1@ @DEVICE_BTN_WEST@ +ss.input.port1.3dpad.x joystick @GUID1@ @DEVICE_BTN_EAST@ ss.input.port1.3dpad.y joystick @GUID1@ @DEVICE_BTN_NORTH@ @@ -10001,15 +10001,15 @@ ss.input.port1.gamepad.start joystick @GUID1@ @DEVICE_BTN_START@ ss.input.port1.gamepad.up joystick @GUID1@ @DEVICE_BTN_DPAD_UP@ -ss.input.port1.gamepad.x joystick @GUID1@ @DEVICE_BTN_WEST@ +ss.input.port1.gamepad.x joystick @GUID1@ @DEVICE_BTN_EAST@ ss.input.port1.gamepad.y joystick @GUID1@ @DEVICE_BTN_NORTH@ ss.input.port1.gamepad.z joystick @GUID1@ @DEVICE_BTN_TL@ -ss.input.port1.gun.offscreen_shot mouse 0x0 button_right +ss.input.port1.gun.offscreen_shot joystick @GUID1@ @DEVICE_BTN_SOUTH@ -ss.input.port1.gun.start mouse 0x0 button_middle +ss.input.port1.gun.start joystick @GUID1@ @DEVICE_BTN_EAST@ ss.input.port1.gun.trigger mouse 0x0 button_left diff --git a/packages/emulators/standalone/mednafen/package.mk b/packages/emulators/standalone/mednafen/package.mk index c0d69f725..a3e502ba8 100644 --- a/packages/emulators/standalone/mednafen/package.mk +++ b/packages/emulators/standalone/mednafen/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="mednafen" -PKG_VERSION="1.32.0-UNSTABLE" +PKG_VERSION="1.32.1" PKG_LICENSE="mixed" PKG_SITE="https://mednafen.github.io/" PKG_URL="${PKG_SITE}/releases/files/${PKG_NAME}-${PKG_VERSION}.tar.xz" diff --git a/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh b/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh index 55a2077d5..96b990be4 100644 --- a/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh +++ b/packages/emulators/standalone/mednafen/scripts/mednafen_gen_config.sh @@ -129,10 +129,10 @@ DEVICE_BTN_TL2_MINUS=${DEVICE_BTN_TL2} DEVICE_BTN_TR2_MINUS=${DEVICE_BTN_TR2} # Left analog -DEVICE_BTN_AL_DOWN="abs_1+_" -DEVICE_BTN_AL_UP="abs_1-" -DEVICE_BTN_AL_LEFT="abs_0+" -DEVICE_BTN_AL_RIGHT="abs_0-" +DEVICE_BTN_AL_DOWN="abs_0-" +DEVICE_BTN_AL_UP="abs_0+" +DEVICE_BTN_AL_LEFT="abs_1-" +DEVICE_BTN_AL_RIGHT="abs_1+" # Right analog DEVICE_BTN_AR_DOWN="abs_4+" diff --git a/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh b/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh index 6e77e814b..35b66e524 100644 --- a/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh +++ b/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh @@ -3,6 +3,8 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) . /etc/profile +. /etc/os-release + set -x set_kill set "-9 mednafen" @@ -28,12 +30,17 @@ SHADER=$(get_setting shader "${PLATFORM}" "${GAME}") #Set the cores to use CORES=$(get_setting "cores" "${PLATFORM}" "${GAME}") +FEATURES_CMDLINE="" if [ "${CORES}" = "little" ] then EMUPERF="${SLOW_CORES}" elif [ "${CORES}" = "big" ] then EMUPERF="${FAST_CORES}" + if [ "${HW_DEVICE}" = "RK3588" ]; then + FEATURES_CMDLINE+=" -affinity.emu 0x30 " + FEATURES_CMDLINE+=" -ss.affinity.vdp2 0xc0 " + fi else ### All.. unset EMUPERF @@ -45,7 +52,6 @@ sed -i "s/filesys.path_savbackup.*/filesys.path_savbackup \/storage\/roms\/${PLA sed -i "s/filesys.path_state.*/filesys.path_state \/storage\/roms\/savestates\/${PLATFORM}/g" $MEDNAFEN_HOME/mednafen.cfg # Get command line switches -FEATURES_CMDLINE="" CORRECT_ASPECT=$(get_setting correct_aspect ${PLATFORM} "${GAME}") CR="" if [ ! -z "${CORRECT_ASPECT}" ] diff --git a/packages/hardware/quirks/platforms/RK3588/060-game_settings b/packages/hardware/quirks/platforms/RK3588/060-game_settings index c807ca4e4..5f060285d 100755 --- a/packages/hardware/quirks/platforms/RK3588/060-game_settings +++ b/packages/hardware/quirks/platforms/RK3588/060-game_settings @@ -20,6 +20,15 @@ do fi done +for SYSTEM in saturn st-v +do + CORES=$(get_setting ${SYSTEM}.cores) + if [ -z "${CORES}" ] + then + set_setting ${SYSTEM}.cores big + fi +done + for SYSTEM in gb gbc gba snes nes sms gamegear genesis mastersystem sega32x megadrive segacd megacd do CPU_SETTING=$(get_setting ${SYSTEM}.cpugovernor) diff --git a/packages/virtual/emulators/package.mk b/packages/virtual/emulators/package.mk index f0a69db37..fc8b16d58 100644 --- a/packages/virtual/emulators/package.mk +++ b/packages/virtual/emulators/package.mk @@ -1002,12 +1002,10 @@ makeinstall_target() { ### Sega ST-V case ${DEVICE} in RK358*) - add_emu_core st-v retroarch beetle_saturn true add_emu_core st-v mednafen ss false ;; AMD64) add_emu_core saturn kronos kronos-sa true - add_emu_core st-v retroarch beetle_saturn false add_emu_core st-v retroarch kronos false add_emu_core st-v mednafen ss false ;; From f5a9f739d4e52ed79628b12cbcb220e52dc7be58 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:03:15 +0000 Subject: [PATCH 092/184] Start AetherSX2 UI in big picture mode --- packages/virtual/emulators/sources/Start AetherSX2.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/virtual/emulators/sources/Start AetherSX2.sh b/packages/virtual/emulators/sources/Start AetherSX2.sh index 555e8bb39..f18305c26 100755 --- a/packages/virtual/emulators/sources/Start AetherSX2.sh +++ b/packages/virtual/emulators/sources/Start AetherSX2.sh @@ -7,4 +7,11 @@ source /etc/profile set_kill set "aethersx2-sa" -/usr/bin/aethersx2-sa >/dev/null 2>&1 +#Set OpenGL 3.3 on panfrost + export MESA_GL_VERSION_OVERRIDE=3.3 + export MESA_GLSL_VERSION_OVERRIDE=330 + +#Set QT enviornment to wayland + export QT_QPA_PLATFORM=wayland + +/usr/bin/aethersx2-sa -bigpicture -fullscreen >/dev/null 2>&1 From f5aadb7d93eed528b44af132a21a51d0516c6d63 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Sun, 21 Apr 2024 15:26:25 +0400 Subject: [PATCH 093/184] bluez: update to 5.75 post ver 5.75: - shared/uhid: Fix crash if bt_uhid_destroy free replay structure ver 5.75: - Fix issue with build system and header inclusion. ver 5.74: - Fix issue with not enabling Wideband Speech when available. - Fix issue with UserspaceHID and Bluetooth Classic devices. - Fix issue with checking for services being connected. - Fix issue with GATT client connection creation. - Fix issue with OBEX and small file transfers. - Fix issue with handling pairing with Apple AirPods. log: - https://git.kernel.org/pub/scm/bluetooth/bluez.git/log/ --- packages/network/bluez/package.mk | 2 +- ...ixaxis-fix-PID-navigation-controller.patch | 1 + .../bluez-12-fix-obexd-after-5_50.patch | 40 --------------- .../bluez-12-fix-obexd-after-5_73.patch | 41 +++++++++++++++ .../bluez-22-Revert-build-Fix-distcheck.patch | 50 +++++++++++++++++++ ...crash-if-bt_uhid_destroy-free-replay.patch | 45 +++++++++++++++++ 6 files changed, 138 insertions(+), 41 deletions(-) delete mode 100644 packages/network/bluez/patches/bluez-12-fix-obexd-after-5_50.patch create mode 100644 packages/network/bluez/patches/bluez-12-fix-obexd-after-5_73.patch create mode 100644 packages/network/bluez/patches/bluez-22-Revert-build-Fix-distcheck.patch create mode 100644 packages/network/bluez/patches/bluez-50-shared-uhid--Fix-crash-if-bt_uhid_destroy-free-replay.patch diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index a738d5e17..c937571dc 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) PKG_NAME="bluez" -PKG_VERSION="5.72" +PKG_VERSION="5.75" PKG_LICENSE="GPL" PKG_SITE="http://www.bluez.org/" PKG_URL="https://www.kernel.org/pub/linux/bluetooth/${PKG_NAME}-${PKG_VERSION}.tar.xz" diff --git a/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch b/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch index e1fe3ef66..12cf6a8b5 100644 --- a/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch +++ b/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch @@ -54,3 +54,4 @@ index 8e6f3cc..321a918 100644 { -- 2.7.4 + diff --git a/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_50.patch b/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_50.patch deleted file mode 100644 index 24311aac0..000000000 --- a/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_50.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/Makefile.obexd b/Makefile.obexd -index cd3ace4..89f1609 100644 ---- a/Makefile.obexd -+++ b/Makefile.obexd -@@ -8,8 +8,6 @@ endif - - EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service - --if OBEX -- - obex_plugindir = $(libdir)/obex/plugins - - obexd_builtin_modules = -@@ -33,6 +31,8 @@ obexd_builtin_sources += obexd/plugins/opp.c - obexd_builtin_modules += ftp - obexd_builtin_sources += obexd/plugins/ftp.c obexd/plugins/ftp.h - -+if OBEX -+ - obexd_builtin_modules += irmc - obexd_builtin_sources += obexd/plugins/irmc.c - -@@ -47,6 +47,8 @@ obexd_builtin_sources += obexd/plugins/mas.c obexd/src/map_ap.h \ - obexd/plugins/messages.h \ - obexd/plugins/messages-dummy.c - -+endif -+ - obexd_builtin_modules += mns - obexd_builtin_sources += obexd/client/mns.c obexd/src/map_ap.h \ - obexd/client/map-event.h -@@ -90,8 +92,6 @@ obexd_src_obexd_CFLAGS = $(AM_CFLAGS) @GLIB_CFLAGS@ @DBUS_CFLAGS@ \ - - obexd_src_obexd_CPPFLAGS = -I$(builddir)/lib -I$(builddir)/obexd/src - --endif -- - obexd_src_obexd_SHORTNAME = obexd - - obexd_builtin_files = obexd/src/builtin.h $(obexd_builtin_nodist) diff --git a/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_73.patch b/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_73.patch new file mode 100644 index 000000000..8b2e0e52f --- /dev/null +++ b/packages/network/bluez/patches/bluez-12-fix-obexd-after-5_73.patch @@ -0,0 +1,41 @@ +diff --git a/Makefile.obexd b/Makefile.obexd +index b7e9f2d33..9a9e9a0a0 100644 +--- a/Makefile.obexd ++++ b/Makefile.obexd +@@ -1,6 +1,4 @@ + # SPDX-License-Identifier: GPL-2.0 +-if OBEX +- + if SYSTEMD + systemduserunitdir = $(SYSTEMD_USERUNITDIR) + systemduserunit_DATA = obexd/src/obex.service +@@ -41,6 +39,8 @@ obexd_builtin_sources += obexd/plugins/opp.c + obexd_builtin_modules += ftp + obexd_builtin_sources += obexd/plugins/ftp.c obexd/plugins/ftp.h + ++if OBEX ++ + obexd_builtin_modules += irmc + obexd_builtin_sources += obexd/plugins/irmc.c + +@@ -57,6 +57,8 @@ obexd_builtin_sources += obexd/plugins/mas.c obexd/src/map_ap.h \ + obexd/plugins/messages.h \ + obexd/plugins/messages-dummy.c + ++endif ++ + obexd_builtin_modules += mns + obexd_builtin_sources += obexd/client/mns.c obexd/src/map_ap.h \ + obexd/client/map-event.h +@@ -103,11 +105,6 @@ obexd_src_obexd_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS) $(DBUS_CFLAGS) \ + -D_FILE_OFFSET_BITS=64 \ + -I$(builddir)/obexd/src + +-else +-obexd-add-service-symlink: +-obexd-remove-service-symlink: +-endif +- + obexd_src_obexd_SHORTNAME = obexd + + obexd_builtin_files = obexd/src/builtin.h $(obexd_builtin_nodist) diff --git a/packages/network/bluez/patches/bluez-22-Revert-build-Fix-distcheck.patch b/packages/network/bluez/patches/bluez-22-Revert-build-Fix-distcheck.patch new file mode 100644 index 000000000..532a16701 --- /dev/null +++ b/packages/network/bluez/patches/bluez-22-Revert-build-Fix-distcheck.patch @@ -0,0 +1,50 @@ +From e679b29bcf4890d61294e4110bace5f783632e5a Mon Sep 17 00:00:00 2001 +From: Rudi Heitbaum +Date: Sat, 9 Mar 2024 08:55:24 +0000 +Subject: [PATCH] Revert "build: Fix distcheck" + +This reverts commit d5a9195a6269e703c6e3a47c40982ec94d8cc838. +--- + Makefile.tools | 6 +----- + configure.ac | 8 +------- + 2 files changed, 2 insertions(+), 12 deletions(-) + +diff --git a/Makefile.tools b/Makefile.tools +index 27a753762..c17244677 100644 +--- a/Makefile.tools ++++ b/Makefile.tools +@@ -539,11 +539,7 @@ endif + + if CUPS + +-if CUPS_SERVERBIN +-cupsdir = $(CUPS_SERVERBIN)/backend +-else +-cupsdir = $(libdir)/cups/backend +-endif ++cupsdir = $(CUPSDIR) + + cups_PROGRAMS = profiles/cups/bluetooth + +diff --git a/configure.ac b/configure.ac +index 9ebc250cf..0190e8271 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -247,13 +247,7 @@ AC_ARG_ENABLE(cups, AS_HELP_STRING([--disable-cups], + [disable CUPS printer support]), [enable_cups=${enableval}]) + AM_CONDITIONAL(CUPS, test "${enable_cups}" != "no") + if (test "${enable_cups}" != "no"); then +- AC_MSG_CHECKING([cups directory]) +- cups_serverbin=`$PKG_CONFIG cups --variable=cups_serverbin` +- AM_CONDITIONAL(CUPS_SERVERBIN, test "${cups_serverbin}" != "") +- if (test "${cups_serverbin}" != ""); then +- AC_SUBST(CUPS_SERVERBIN, ${cups_serverbin}) +- fi +- AC_MSG_RESULT([${cups_serverbin}]) ++ AC_SUBST(CUPSDIR, `$PKG_CONFIG cups --variable=cups_serverbin`/backend) + fi + + AC_ARG_ENABLE(mesh, AS_HELP_STRING([--enable-mesh], +-- +2.43.0 + diff --git a/packages/network/bluez/patches/bluez-50-shared-uhid--Fix-crash-if-bt_uhid_destroy-free-replay.patch b/packages/network/bluez/patches/bluez-50-shared-uhid--Fix-crash-if-bt_uhid_destroy-free-replay.patch new file mode 100644 index 000000000..129c7b045 --- /dev/null +++ b/packages/network/bluez/patches/bluez-50-shared-uhid--Fix-crash-if-bt_uhid_destroy-free-replay.patch @@ -0,0 +1,45 @@ +From b94f1be656f34ea1363f5566ef63b847234c6dea Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Mon, 15 Apr 2024 10:48:58 -0400 +Subject: [PATCH] shared/uhid: Fix crash if bt_uhid_destroy free replay + structure + +Id replay structured has been allocated it shall be set back to NULL +after calling uhid_replay_free otherwise it may cause the following +crash: + +Invalid read of size 1 + at 0x1D8FC4: bt_uhid_record (uhid.c:116) + by 0x1D912C: uhid_read_handler (uhid.c:158) + by 0x201A64: watch_callback (io-glib.c:157) + by 0x48D4198: g_main_dispatch.lto_priv.0 (gmain.c:3344) + by 0x49333BE: UnknownInlinedFun (gmain.c:4152) + by 0x49333BE: g_main_context_iterate_unlocked.isra.0 (gmain.c:4217) + by 0x48D4DC6: g_main_loop_run (gmain.c:4419) + by 0x2020F4: mainloop_run (mainloop-glib.c:66) + by 0x20254B: mainloop_run_with_signal (mainloop-notify.c:188) + by 0x12D6D4: main (main.c:1456) + Address 0x53ae9c0 is 0 bytes inside a block of size 40 free'd + at 0x48468CF: free (vg_replace_malloc.c:985) + by 0x1D8E19: uhid_replay_free (uhid.c:68) + by 0x1D8E19: uhid_replay_free (uhid.c:59) + by 0x1D8E19: bt_uhid_destroy (uhid.c:509) + by 0x1591F5: uhid_disconnect (device.c:183) + +Fixes: https://github.com/bluez/bluez/issues/815 +--- + src/shared/uhid.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/shared/uhid.c b/src/shared/uhid.c +index c1092b707..1f071b958 100644 +--- a/src/shared/uhid.c ++++ b/src/shared/uhid.c +@@ -507,6 +507,7 @@ int bt_uhid_destroy(struct bt_uhid *uhid) + + uhid->created = false; + uhid_replay_free(uhid->replay); ++ uhid->replay = NULL; + + return err; + } From 493770f256446d667b58aaec9223891a25533029 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sat, 20 Apr 2024 04:00:00 +0400 Subject: [PATCH 094/184] bluez: fix bt_uhid_new_default crash * https://github.com/bluez/bluez/issues/777 * This should fix issues talking to gamepads (DS4) --- packages/network/bluez/package.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index c937571dc..d738d2086 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -74,6 +74,7 @@ post_makeinstall_target() { cat <${INSTALL}/etc/bluetooth/input.conf [General] ClassicBondedOnly=false +UserspaceHID=false EOF mkdir -p ${INSTALL}/usr/share/services From 981350c9b35b77f228a17d035132a6b33d186252 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sat, 20 Apr 2024 22:29:56 +0400 Subject: [PATCH 095/184] blues: enable fastconnect --- packages/network/bluez/package.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index d738d2086..9bcb3dfed 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -75,6 +75,7 @@ post_makeinstall_target() { [General] ClassicBondedOnly=false UserspaceHID=false +FastConnectable=true EOF mkdir -p ${INSTALL}/usr/share/services From b7d02da8c09c2b4dc20be7522da52dc8097e5e1b Mon Sep 17 00:00:00 2001 From: "dmanlfc@gmail.com" Date: Fri, 19 Apr 2024 01:28:25 +0400 Subject: [PATCH 096/184] bluez: trust sixaxis * fixes ps3 controller not reconnecting after power-off --- .../bluez/patches/bluez-07-trust-sixaxis.patch | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/network/bluez/patches/bluez-07-trust-sixaxis.patch diff --git a/packages/network/bluez/patches/bluez-07-trust-sixaxis.patch b/packages/network/bluez/patches/bluez-07-trust-sixaxis.patch new file mode 100644 index 000000000..b63fd1297 --- /dev/null +++ b/packages/network/bluez/patches/bluez-07-trust-sixaxis.patch @@ -0,0 +1,14 @@ +diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c.new +index 544ab399ad..b68b0f46fb 100644 +--- a/plugins/sixaxis.c ++++ b/plugins/sixaxis.c.new +@@ -350,7 +350,8 @@ static bool setup_device(int fd, const char *sysfs_path, + + btd_device_device_set_name(device, cp->name); + btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); +- btd_device_set_temporary(device, true); ++ btd_device_set_temporary(device, false); ++ btd_device_set_trusted(device, true); + + closure = g_new0(struct authentication_closure, 1); + if (!closure) { From 8917b3d65e8a07ab3df5d33dea2bc7937ebbfc9d Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Fri, 19 Apr 2024 02:20:29 +0400 Subject: [PATCH 097/184] bluez: update sixaxis pid patch --- ...ixaxis-fix-PID-navigation-controller.patch | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch b/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch index 12cf6a8b5..bb7e84e1d 100644 --- a/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch +++ b/packages/network/bluez/patches/bluez-11_sixaxis-fix-PID-navigation-controller.patch @@ -9,34 +9,31 @@ Date: 2015-06-15 18:28:26 GMT (36 weeks, 4 days, 21 hours and 32 minutes ago) Navigation Controller is using PID 0x042f over USB but PID 0x0268 (same as Dualshock 3) over BT. --- - plugins/sixaxis.c | 8 +++++++- + plugins/sixaxis.c | 5 +++++ profiles/input/sixaxis.h | 2 ++ - 2 files changed, 9 insertions(+), 1 deletion(-) + 2 files changed, 7 insertions(+) diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c -index 939fed7..f6baea7 100644 +index 1653491..6330001 100644 --- a/plugins/sixaxis.c +++ b/plugins/sixaxis.c -@@ -364,7 +364,13 @@ static bool setup_device(int fd, const char *sysfs_path, - info("sixaxis: setting up new device"); +@@ -350,6 +350,11 @@ static bool setup_device(int fd, const char *sysfs_path, btd_device_device_set_name(device, cp->name); -- btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); -+ + btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); + /* if device reports different pid/vid on BT prefer those over USB */ + if (cp->bt_pid) + btd_device_set_pnpid(device, cp->source, cp->vid, cp->bt_pid, cp->version); + else + btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); -+ - btd_device_set_temporary(device, true); + btd_device_set_temporary(device, false); + btd_device_set_trusted(device, true); - closure = g_new0(struct authentication_closure, 1); diff --git a/profiles/input/sixaxis.h b/profiles/input/sixaxis.h -index 8e6f3cc..321a918 100644 +index ab88319..0fe3732 100644 --- a/profiles/input/sixaxis.h +++ b/profiles/input/sixaxis.h -@@ -38,6 +38,7 @@ struct cable_pairing { +@@ -25,6 +25,7 @@ struct cable_pairing { uint16_t vid; uint16_t pid; uint16_t version; @@ -44,7 +41,7 @@ index 8e6f3cc..321a918 100644 CablePairingType type; }; -@@ -59,6 +60,7 @@ get_pairing(uint16_t vid, uint16_t pid) +@@ -54,6 +55,7 @@ get_pairing(uint16_t vid, uint16_t pid, const char *name) .vid = 0x054c, .pid = 0x042f, .version = 0x0000, From fea0d155c2a2fca18d9f02e02281088b174dabfe Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 15:28:52 +0400 Subject: [PATCH 098/184] bluez: remove sap server RK3566-X55 bluetoothd[18236]: profiles/sap/server.c:sap_server_register() Sap driver initialization failed. RK3566-X55 bluetoothd[18236]: sap-server: Operation not permitted (1) --- packages/network/bluez/package.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index 9bcb3dfed..630632f7e 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -34,7 +34,6 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-dependency-tracking \ --disable-manpages \ --disable-experimental \ --enable-sixaxis \ - --enable-sap \ --enable-a2dp \ --enable-avrcp \ --enable-btpclient \ From bce5f807d433a5a84770e059c894e7529b8ec990 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 19 Apr 2024 01:35:28 +0400 Subject: [PATCH 099/184] RK3566: patch to fix "Align minimum encryption key size for LE and BR/EDR connections" co-author dmanlfc --- ...32-bluetooth-fix-encryption-key-size.patch | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 projects/Rockchip/patches/linux/RK3566/032-bluetooth-fix-encryption-key-size.patch diff --git a/projects/Rockchip/patches/linux/RK3566/032-bluetooth-fix-encryption-key-size.patch b/projects/Rockchip/patches/linux/RK3566/032-bluetooth-fix-encryption-key-size.patch new file mode 100644 index 000000000..ce1a1129d --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/032-bluetooth-fix-encryption-key-size.patch @@ -0,0 +1,78 @@ +From mboxrd@z Thu Jan 1 00:00:00 1970 +Return-Path: +X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on + aws-us-west-2-korg-lkml-1.web.codeaurora.org +X-Spam-Level: +X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, + INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, + URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 +Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) + by smtp.lore.kernel.org (Postfix) with ESMTP id 9B9E6C072A4 + for ; Wed, 22 May 2019 07:05:47 +0000 (UTC) +Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) + by mail.kernel.org (Postfix) with ESMTP id 7504F20863 + for ; Wed, 22 May 2019 07:05:47 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S1728185AbfEVHFq (ORCPT + ); + Wed, 22 May 2019 03:05:46 -0400 +Received: from coyote.holtmann.net ([212.227.132.17]:49582 "EHLO + mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S1725796AbfEVHFq (ORCPT + ); + Wed, 22 May 2019 03:05:46 -0400 +Received: from localhost.localdomain (p5B3D2A37.dip0.t-ipconnect.de [91.61.42.55]) + by mail.holtmann.org (Postfix) with ESMTPSA id 1D6ECCF183; + Wed, 22 May 2019 09:14:04 +0200 (CEST) +From: Marcel Holtmann +To: anarsoul@gmail.com, linux-bluetooth@vger.kernel.org +Subject: [RFC] Bluetooth: Check key sizes only when Secure Simple Pairing is enabled +Date: Wed, 22 May 2019 09:05:40 +0200 +Message-Id: <20190522070540.48895-1-marcel@holtmann.org> +X-Mailer: git-send-email 2.20.1 +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Sender: linux-bluetooth-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-bluetooth@vger.kernel.org + +The encryption is only mandatory to be enforced when both sides are using +Secure Simple Pairing and this means the key size check makes only sense +in that case. + +On legacy Bluetooth 2.0 and earlier devices like mice the encryption was +optional and thus causing an issue if the key size check is not bound to +using Secure Simple Pairing. + +Fixes: d5bb334a8e17 ("Bluetooth: Align minimum encryption key size for LE and BR/EDR connections") +Signed-off-by: Marcel Holtmann +Cc: stable@vger.kernel.org +--- + net/bluetooth/hci_conn.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c +index 3cf0764d5793..7516cdde3373 100644 +--- a/net/bluetooth/hci_conn.c ++++ b/net/bluetooth/hci_conn.c +@@ -1272,8 +1272,13 @@ int hci_conn_check_link_mode(struct hci_conn *conn) + return 0; + } + +- if (hci_conn_ssp_enabled(conn) && +- !test_bit(HCI_CONN_ENCRYPT, &conn->flags)) ++ /* If Secure Simple Pairing is not enabled, then legacy connection ++ * setup is used and no encryption or key sizes can be enforced. ++ */ ++ if (!hci_conn_ssp_enabled(conn)) ++ return 1; ++ ++ if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags)) + return 0; + + /* The minimum encryption key size needs to be enforced by the +-- +2.20.1 + + From 0ebbf5f67e9d8d96c69115b48c7a2c6419561b16 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sat, 20 Apr 2024 03:57:22 +0400 Subject: [PATCH 100/184] RK3566: bluetooth: add l2cap fix * not needed after 6.9-rc4 mainline * Fixes https://github.com/bluez/bluez/issues/804 --- .../033-bluetooth-backport-l2cap-fix.patch | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch diff --git a/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch b/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch new file mode 100644 index 000000000..cc748c6af --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch @@ -0,0 +1,31 @@ +From e6bb15dbae900b71b69fc52a9f640d699bb840b4 Mon Sep 17 00:00:00 2001 +From: Archie Pusaka +Date: Thu, 4 Apr 2024 18:50:23 +0800 +Subject: [PATCH] Bluetooth: l2cap: Don't double set the + HCI_CONN_MGMT_CONNECTED bit + +The bit is set and tested inside mgmt_device_connected(), therefore we +must not set it just outside the function. + +Fixes: eeda1bf97bb5 ("Bluetooth: hci_event: Fix not indicating new connection for BIG Sync") +Signed-off-by: Archie Pusaka +Reviewed-by: Manish Mandlik +Signed-off-by: Luiz Augusto von Dentz +--- + net/bluetooth/l2cap_core.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c +index cf3b8e9b7b3b..b0970462a689 100644 +--- a/net/bluetooth/l2cap_core.c ++++ b/net/bluetooth/l2cap_core.c +@@ -4063,8 +4063,7 @@ static int l2cap_connect_req(struct l2cap_conn *conn, + return -EPROTO; + + hci_dev_lock(hdev); +- if (hci_dev_test_flag(hdev, HCI_MGMT) && +- !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) ++ if (hci_dev_test_flag(hdev, HCI_MGMT)) + mgmt_device_connected(hdev, hcon, NULL, 0); + hci_dev_unlock(hdev); + From d3f321afba6e1933910111178fe6d0170ae65b68 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 15:53:56 +0400 Subject: [PATCH 101/184] bluez: remove AVRCP patch * Already applied --- .../patches/bluez-06-AVRCP_TG_MDI_BV-04-C.patch | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 packages/network/bluez/patches/bluez-06-AVRCP_TG_MDI_BV-04-C.patch diff --git a/packages/network/bluez/patches/bluez-06-AVRCP_TG_MDI_BV-04-C.patch b/packages/network/bluez/patches/bluez-06-AVRCP_TG_MDI_BV-04-C.patch deleted file mode 100644 index 38478f053..000000000 --- a/packages/network/bluez/patches/bluez-06-AVRCP_TG_MDI_BV-04-C.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -ru bluez-5.66.orig/profiles/audio/avrcp.c bluez-5.66/profiles/audio/avrcp.c ---- bluez-5.66.orig/profiles/audio/avrcp.c 2022-03-16 08:06:20.000000000 -0700 -+++ bluez-5.66/profiles/audio/avrcp.c 2023-07-30 08:03:17.414213611 -0700 -@@ -1210,6 +1210,10 @@ - GUINT_TO_POINTER(str_to_metadata(key))); - } - -+ if (attrs == NULL) -+ return g_list_prepend(NULL, -+ GUINT_TO_POINTER(AVRCP_MEDIA_ATTRIBUTE_TITLE)); -+ - return attrs; - } - -Only in bluez-5.66/profiles/audio: avrcp.c.orig From 63210c7aaff1eeabe8c141564b50659cbcbefc25 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 15:53:59 +0400 Subject: [PATCH 102/184] RK3566: enable HID_PLAYSTATION * update sony hid and enable dependencies --- projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index 264de84ae..106f48ec7 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -5526,6 +5526,8 @@ CONFIG_HID_PENMOUNT=y CONFIG_HID_PETALYNX=y # CONFIG_HID_PICOLCD is not set CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PLAYSTATION=y +CONFIG_PLAYSTATION_FF=y # CONFIG_HID_PXRC is not set # CONFIG_HID_RAZER is not set CONFIG_HID_PRIMAX=y @@ -5536,7 +5538,7 @@ CONFIG_HID_SAMSUNG=y # CONFIG_HID_SEMITEK is not set # CONFIG_HID_SIGMAMICRO is not set CONFIG_HID_SONY=y -# CONFIG_SONY_FF is not set +CONFIG_SONY_FF=y CONFIG_HID_SPEEDLINK=y # CONFIG_HID_STEAM is not set CONFIG_HID_STEELSERIES=y @@ -5969,8 +5971,8 @@ CONFIG_MMC_HSQ=y # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y -# CONFIG_LEDS_CLASS_FLASH is not set -# CONFIG_LEDS_CLASS_MULTICOLOR is not set +CONFIG_LEDS_CLASS_FLASH=y +CONFIG_LEDS_CLASS_MULTICOLOR=y # CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set # From 79068067e4d5fb634e4fba2a88a374d0389f043f Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 17:12:51 +0400 Subject: [PATCH 103/184] bluez: update parameters * based on libreelec --- packages/network/bluez/package.mk | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index 630632f7e..9eff038ff 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -34,14 +34,6 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-dependency-tracking \ --disable-manpages \ --disable-experimental \ --enable-sixaxis \ - --enable-a2dp \ - --enable-avrcp \ - --enable-btpclient \ - --enable-midi \ - --enable-mesh \ - --enable-hid2hci \ - --enable-experimental \ - --enable-hid \ --with-gnu-ld \ ${BLUEZ_CONFIG} \ storagedir=/storage/.cache/bluetooth" @@ -92,6 +84,6 @@ EOF post_install() { enable_service bluetooth-defaults.service - #enable_service bluetooth.service - #enable_service obex.service + enable_service bluetooth.service + enable_service obex.service } From 9218dfa052706ba81a95a630d75dbafe7ef84169 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 17:18:17 +0400 Subject: [PATCH 104/184] RK3566: linux: HIDP needs to be a module * Pre-module profiles/input/device.c:ioctl_is_connected() Can't open HIDP control socket --- projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index 106f48ec7..a64b78dd8 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -1420,7 +1420,7 @@ CONFIG_BT_RFCOMM=y # CONFIG_BT_RFCOMM_TTY is not set # CONFIG_BT_BNEP is not set # CONFIG_BT_CMTP is not set -CONFIG_BT_HIDP=y +CONFIG_BT_HIDP=m CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_LE_L2CAP_ECRED=y From 984e9b5e929961988037794da571b64516dc3d8c Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 21 Apr 2024 17:17:50 +0400 Subject: [PATCH 105/184] bluez: autostart: modprobe hidp --- packages/network/bluez/autostart/009-bluetooth | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/network/bluez/autostart/009-bluetooth b/packages/network/bluez/autostart/009-bluetooth index 60fb5bd92..3f3578905 100755 --- a/packages/network/bluez/autostart/009-bluetooth +++ b/packages/network/bluez/autostart/009-bluetooth @@ -14,7 +14,8 @@ nohup systemctl start bluetooth & nohup systemctl start bluetooth-agent & nohup systemctl start bluetoothsense & - rfkill unblock bluetooth + rfkill unblock bluetooth & + modprobe hidp else rfkill block bluetooth fi From 36c6ad69d52289db76fd622e227433d6073d4a65 Mon Sep 17 00:00:00 2001 From: sydarn Date: Fri, 26 Apr 2024 10:45:47 +0200 Subject: [PATCH 106/184] Revert some bluez package changes --- packages/network/bluez/autostart/009-bluetooth | 3 +-- packages/network/bluez/package.mk | 11 +++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/network/bluez/autostart/009-bluetooth b/packages/network/bluez/autostart/009-bluetooth index 3f3578905..60fb5bd92 100755 --- a/packages/network/bluez/autostart/009-bluetooth +++ b/packages/network/bluez/autostart/009-bluetooth @@ -14,8 +14,7 @@ nohup systemctl start bluetooth & nohup systemctl start bluetooth-agent & nohup systemctl start bluetoothsense & - rfkill unblock bluetooth & - modprobe hidp + rfkill unblock bluetooth else rfkill block bluetooth fi diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index 9eff038ff..050038836 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -34,6 +34,15 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-dependency-tracking \ --disable-manpages \ --disable-experimental \ --enable-sixaxis \ + --enable-sap \ + --enable-a2dp \ + --enable-avrcp \ + --enable-btpclient \ + --enable-midi \ + --enable-mesh \ + --enable-hid2hci \ + --enable-experimental \ + --enable-hid \ --with-gnu-ld \ ${BLUEZ_CONFIG} \ storagedir=/storage/.cache/bluetooth" @@ -65,8 +74,6 @@ post_makeinstall_target() { cat <${INSTALL}/etc/bluetooth/input.conf [General] ClassicBondedOnly=false -UserspaceHID=false -FastConnectable=true EOF mkdir -p ${INSTALL}/usr/share/services From 1b4512c2d27d9461868e2a8f7031ccafe4b8bef1 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 26 Apr 2024 22:15:17 +0000 Subject: [PATCH 107/184] Add gamepad tester util --- packages/apps/gamepadtester/package.mk | 21 +++ .../patches/000-gamepad-tester.patch | 120 ++++++++++++++++++ .../gamepadtester/scripts/Test Gamepads.sh | 10 ++ packages/misc/modules/package.mk | 9 +- packages/misc/modules/sources/gamelist.xml | 11 ++ 5 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 packages/apps/gamepadtester/package.mk create mode 100644 packages/apps/gamepadtester/patches/000-gamepad-tester.patch create mode 100644 packages/apps/gamepadtester/scripts/Test Gamepads.sh diff --git a/packages/apps/gamepadtester/package.mk b/packages/apps/gamepadtester/package.mk new file mode 100644 index 000000000..467fe70c3 --- /dev/null +++ b/packages/apps/gamepadtester/package.mk @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="gamepadtester" +PKG_VERSION="6ac49e67aa98fe3dd5c27f73306d65d4b7a82daa" +PKG_LICENSE="GPLv3" +PKG_SITE="https://github.com/timre13/GamepadTester" +PKG_URL="${PKG_SITE}.git" +PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_gfx gamecontrollerdb" +PKG_LONGDESC="A simple SDL GUI Gamepad tester" +PKG_TOOLCHAIN="cmake" + +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 + + mkdir -p ${INSTALL}/usr/config/modules + cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/config/modules + chmod 0755 ${INSTALL}/usr/config/modules/* +} diff --git a/packages/apps/gamepadtester/patches/000-gamepad-tester.patch b/packages/apps/gamepadtester/patches/000-gamepad-tester.patch new file mode 100644 index 000000000..6e87692ea --- /dev/null +++ b/packages/apps/gamepadtester/patches/000-gamepad-tester.patch @@ -0,0 +1,120 @@ +diff -rupN GamepadTester.orig/CMakeLists.txt GamepadTester/CMakeLists.txt +--- GamepadTester.orig/CMakeLists.txt 2024-04-26 21:31:53.727460671 +0000 ++++ GamepadTester/CMakeLists.txt 2024-04-26 21:30:53.862216932 +0000 +@@ -6,7 +6,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED TRUE) + project(gamepad_test VERSION 1.0) + + link_libraries(SDL2 SDL2_gfx) +-include_directories(/usr/include/SDL2) + + set(CMAKE_CXX_FLAGS "\ + -D_REENTRANT\ +diff -rupN GamepadTester.orig/src/main.cpp GamepadTester/src/main.cpp +--- GamepadTester.orig/src/main.cpp 2024-04-26 21:31:53.731460755 +0000 ++++ GamepadTester/src/main.cpp 2024-04-26 21:30:53.866217015 +0000 +@@ -38,7 +38,7 @@ int main() + SDL_Renderer* rend = SDL_CreateRenderer(window, 0, 0); + gfxPrimitivesSetFont(gfxPrimitivesFontdata, 8, 8); + +- SDL_GameControllerAddMappingsFromFile("../gamecontrollerdb.txt"); ++ SDL_GameControllerAddMappingsFromFile("/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt"); + + SDL_GameController* gcont = nullptr; + StickState leftStickState{}; +@@ -74,7 +74,6 @@ int main() + + case SDL_CONTROLLERBUTTONDOWN: + std::cout << "Controller button down: " << +event.cbutton.button << '\n'; +- SDL_GameControllerRumble(gcont, 0, 0xffff/2, 200); + buttonStates[event.cbutton.button] = true; + break; + +@@ -83,16 +82,6 @@ int main() + buttonStates[event.cbutton.button] = false; + break; + +- case SDL_JOYBUTTONDOWN: +- if (event.jbutton.button == 8) +- buttonStates[SDL_CONTROLLER_BUTTON_GUIDE] = true; +- break; +- +- case SDL_JOYBUTTONUP: +- if (event.jbutton.button == 8) +- buttonStates[SDL_CONTROLLER_BUTTON_GUIDE] = false; +- break; +- + case SDL_CONTROLLERAXISMOTION: + std::cout << "Controller axis movement\n"; + std::cout << "\tAxis: " << +event.caxis.axis << '\n'; +@@ -153,45 +142,57 @@ int main() + filledCircleColor(rend, WIN_W-300+rightStickState.x*30, WIN_H-300+rightStickState.y*30, 30, + (buttonStates[SDL_CONTROLLER_BUTTON_RIGHTSTICK] ? 0xffffffff : 0)); + +- // Y button ++ // X button + aacircleRGBA(rend, WIN_W-300, 300-40, 20, 255, 255, 0, 255); +- if (buttonStates[SDL_CONTROLLER_BUTTON_Y]) ++ if (buttonStates[SDL_CONTROLLER_BUTTON_X]) + filledCircleRGBA(rend, WIN_W-300, 300-40, 20, 255, 255, 0, 255); + +- // X button ++ // Y button + aacircleRGBA(rend, WIN_W-300-40, 300+40-40, 20, 100, 100, 255, 255); +- if (buttonStates[SDL_CONTROLLER_BUTTON_X]) ++ if (buttonStates[SDL_CONTROLLER_BUTTON_Y]) + filledCircleRGBA(rend, WIN_W-300-40, 300+40-40, 20, 100, 100, 255, 255); + +- // B button ++ // A button + aacircleRGBA(rend, WIN_W-300+40, 300+40-40, 20, 255, 0, 0, 255); +- if (buttonStates[SDL_CONTROLLER_BUTTON_B]) ++ if (buttonStates[SDL_CONTROLLER_BUTTON_A]) + filledCircleRGBA(rend, WIN_W-300+40, 300+40-40, 20, 255, 0, 0, 255); + +- // A button ++ // B button + aacircleRGBA(rend, WIN_W-300, 300+80-40, 20, 0, 255, 0, 255); +- if (buttonStates[SDL_CONTROLLER_BUTTON_A]) ++ if (buttonStates[SDL_CONTROLLER_BUTTON_B]) + filledCircleRGBA(rend, WIN_W-300, 300+80-40, 20, 0, 255, 0, 255); + + // D-pad up + aatrigonRGBA(rend, 300, WIN_H-360, 280, WIN_H-320, 320, WIN_H-320, 255, 255, 255, 255); +- if (dpadState & SDL_HAT_UP) ++ if (dpadState & SDL_HAT_UP) { ++ filledTrigonRGBA(rend, 300, WIN_H-360, 280, WIN_H-320, 320, WIN_H-320, 255, 255, 255, 255); ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_UP]) { + filledTrigonRGBA(rend, 300, WIN_H-360, 280, WIN_H-320, 320, WIN_H-320, 255, 255, 255, 255); ++ } + + // D-pad down + aatrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); +- if (dpadState & SDL_HAT_DOWN) ++ if (dpadState & SDL_HAT_DOWN) { + filledTrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_DOWN]) { ++ filledTrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); ++ } + +- // D-pad left ++ // D-pad hat left + aatrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); +- if (dpadState & SDL_HAT_LEFT) ++ if (dpadState & SDL_HAT_LEFT) { ++ filledTrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_LEFT]) { + filledTrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); ++ } + +- // D-pad right ++ // D-pad hat right + aatrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); +- if (dpadState & SDL_HAT_RIGHT) ++ if (dpadState & SDL_HAT_RIGHT) { ++ filledTrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_RIGHT]) { + filledTrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); ++ } + + // Left bumper + rectangleColor(rend, 300-50, 300-150-20, 300+50, 300-150+20, 0xffffffff); diff --git a/packages/apps/gamepadtester/scripts/Test Gamepads.sh b/packages/apps/gamepadtester/scripts/Test Gamepads.sh new file mode 100644 index 000000000..fd0dd9c11 --- /dev/null +++ b/packages/apps/gamepadtester/scripts/Test Gamepads.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +source /etc/profile + +set_kill set "gamepad-tester" + +/usr/bin/gamepad-tester diff --git a/packages/misc/modules/package.mk b/packages/misc/modules/package.mk index 2c58d9e03..162f8fc96 100644 --- a/packages/misc/modules/package.mk +++ b/packages/misc/modules/package.mk @@ -10,10 +10,11 @@ PKG_DEPENDS_TARGET="toolchain rclone" PKG_LONGDESC="OS Modules Package" PKG_TOOLCHAIN="manual" -### -### Note: Start scripts for emulators have been moved to -### packages/virtual/emulators. -### +case ${DEVICE} in + RK3588|RK3399) + PKG_DEPENDS_TARGET+=" gamepadtester" + ;; +esac make_target() { : diff --git a/packages/misc/modules/sources/gamelist.xml b/packages/misc/modules/sources/gamelist.xml index b55871a76..78a2b3377 100755 --- a/packages/misc/modules/sources/gamelist.xml +++ b/packages/misc/modules/sources/gamelist.xml @@ -218,4 +218,15 @@ 1 ./images/idtech.svg
+ + ./Test Gamepad.sh + Test Gamepad + Simple SDL GUI gamepad tester + ROCKNIX + ROCKNIX + 5.0 + 2024 + tool + 1 + From 0f1922e0e89de289b5e1a4c4a746ab437569489b Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 26 Apr 2024 23:08:38 +0000 Subject: [PATCH 108/184] Gamepad tester cleanup --- packages/apps/gamepadtester/package.mk | 1 + .../patches/000-gamepad-tester.patch | 24 +++++++++---------- .../patches/RK3399/000-set-resolution.patch | 14 +++++++++++ .../patches/RK3588/000-set-resolution.patch | 14 +++++++++++ .../{Test Gamepads.sh => Test Gamepad.sh} | 0 5 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 packages/apps/gamepadtester/patches/RK3399/000-set-resolution.patch create mode 100644 packages/apps/gamepadtester/patches/RK3588/000-set-resolution.patch rename packages/apps/gamepadtester/scripts/{Test Gamepads.sh => Test Gamepad.sh} (100%) diff --git a/packages/apps/gamepadtester/package.mk b/packages/apps/gamepadtester/package.mk index 467fe70c3..e4f93c300 100644 --- a/packages/apps/gamepadtester/package.mk +++ b/packages/apps/gamepadtester/package.mk @@ -9,6 +9,7 @@ PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_gfx gamecontrollerdb" PKG_LONGDESC="A simple SDL GUI Gamepad tester" PKG_TOOLCHAIN="cmake" +PKG_PATCH_DIRS+="${DEVICE}" makeinstall_target() { mkdir -p ${INSTALL}/usr/bin diff --git a/packages/apps/gamepadtester/patches/000-gamepad-tester.patch b/packages/apps/gamepadtester/patches/000-gamepad-tester.patch index 6e87692ea..1f1fe7158 100644 --- a/packages/apps/gamepadtester/patches/000-gamepad-tester.patch +++ b/packages/apps/gamepadtester/patches/000-gamepad-tester.patch @@ -11,7 +11,7 @@ diff -rupN GamepadTester.orig/CMakeLists.txt GamepadTester/CMakeLists.txt -D_REENTRANT\ diff -rupN GamepadTester.orig/src/main.cpp GamepadTester/src/main.cpp --- GamepadTester.orig/src/main.cpp 2024-04-26 21:31:53.731460755 +0000 -+++ GamepadTester/src/main.cpp 2024-04-26 21:30:53.866217015 +0000 ++++ GamepadTester/src/main.cpp 2024-04-26 22:27:08.203425064 +0000 @@ -38,7 +38,7 @@ int main() SDL_Renderer* rend = SDL_CreateRenderer(window, 0, 0); gfxPrimitivesSetFont(gfxPrimitivesFontdata, 8, 8); @@ -83,38 +83,36 @@ diff -rupN GamepadTester.orig/src/main.cpp GamepadTester/src/main.cpp - if (dpadState & SDL_HAT_UP) + if (dpadState & SDL_HAT_UP) { + filledTrigonRGBA(rend, 300, WIN_H-360, 280, WIN_H-320, 320, WIN_H-320, 255, 255, 255, 255); -+ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_UP]) { ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_UP]) { filledTrigonRGBA(rend, 300, WIN_H-360, 280, WIN_H-320, 320, WIN_H-320, 255, 255, 255, 255); -+ } ++ } // D-pad down aatrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); - if (dpadState & SDL_HAT_DOWN) + if (dpadState & SDL_HAT_DOWN) { filledTrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); -+ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_DOWN]) { ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_DOWN]) { + filledTrigonRGBA(rend, 300, WIN_H-240, 280, WIN_H-280, 320, WIN_H-280, 255, 255, 255, 255); -+ } ++ } -- // D-pad left -+ // D-pad hat left + // D-pad left aatrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); - if (dpadState & SDL_HAT_LEFT) + if (dpadState & SDL_HAT_LEFT) { + filledTrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); -+ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_LEFT]) { ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_LEFT]) { filledTrigonRGBA(rend, 240, WIN_H-300, 280, WIN_H-320, 280, WIN_H-280, 255, 255, 255, 255); -+ } ++ } -- // D-pad right -+ // D-pad hat right + // D-pad right aatrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); - if (dpadState & SDL_HAT_RIGHT) + if (dpadState & SDL_HAT_RIGHT) { + filledTrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); -+ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_RIGHT]) { ++ } else if (buttonStates[SDL_CONTROLLER_BUTTON_DPAD_RIGHT]) { filledTrigonRGBA(rend, 360, WIN_H-300, 320, WIN_H-320, 320, WIN_H-280, 255, 255, 255, 255); -+ } ++ } // Left bumper rectangleColor(rend, 300-50, 300-150-20, 300+50, 300-150+20, 0xffffffff); diff --git a/packages/apps/gamepadtester/patches/RK3399/000-set-resolution.patch b/packages/apps/gamepadtester/patches/RK3399/000-set-resolution.patch new file mode 100644 index 000000000..8c6ffab59 --- /dev/null +++ b/packages/apps/gamepadtester/patches/RK3399/000-set-resolution.patch @@ -0,0 +1,14 @@ +diff -rupN GamepadTester.orig/src/main.cpp GamepadTester/src/main.cpp +--- GamepadTester.orig/src/main.cpp 2024-04-26 21:31:53.731460755 +0000 ++++ GamepadTester/src/main.cpp 2024-04-26 22:29:53.239175112 +0000 +@@ -5,8 +5,8 @@ + #include + + #define STICK_MAX_VAL (float(0x7fff)) +-#define WIN_W 1100 +-#define WIN_H 800 ++#define WIN_W 1920 ++#define WIN_H 1152 + + std::string cStringToStdString(const char* str, const std::string& or_="N/A") + { diff --git a/packages/apps/gamepadtester/patches/RK3588/000-set-resolution.patch b/packages/apps/gamepadtester/patches/RK3588/000-set-resolution.patch new file mode 100644 index 000000000..6ca1fc8f8 --- /dev/null +++ b/packages/apps/gamepadtester/patches/RK3588/000-set-resolution.patch @@ -0,0 +1,14 @@ +diff -rupN GamepadTester.orig/src/main.cpp GamepadTester/src/main.cpp +--- GamepadTester.orig/src/main.cpp 2024-04-26 21:31:53.731460755 +0000 ++++ GamepadTester/src/main.cpp 2024-04-26 22:30:25.679908246 +0000 +@@ -5,8 +5,8 @@ + #include + + #define STICK_MAX_VAL (float(0x7fff)) +-#define WIN_W 1100 +-#define WIN_H 800 ++#define WIN_W 1920 ++#define WIN_H 1080 + + std::string cStringToStdString(const char* str, const std::string& or_="N/A") + { diff --git a/packages/apps/gamepadtester/scripts/Test Gamepads.sh b/packages/apps/gamepadtester/scripts/Test Gamepad.sh similarity index 100% rename from packages/apps/gamepadtester/scripts/Test Gamepads.sh rename to packages/apps/gamepadtester/scripts/Test Gamepad.sh From 3f60e719969047ab3aa3100af8949787bb5ed0d8 Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sat, 27 Apr 2024 18:17:14 +0400 Subject: [PATCH 109/184] moonlight: set 60FPS as a default * Apps like sunshine allow setting outputs back to 30 for those who need it * Tested 60FPS on RK3566-X55 @ 720p [10MBPS and 15MBPS bitrates] are great. --- packages/apps/moonlight/sources/moonlight.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/moonlight/sources/moonlight.conf b/packages/apps/moonlight/sources/moonlight.conf index 9ed9d5291..e766d0c61 100644 --- a/packages/apps/moonlight/sources/moonlight.conf +++ b/packages/apps/moonlight/sources/moonlight.conf @@ -5,7 +5,7 @@ ## Video streaming configuration width = @MWIDTH@ height = @MHEIGHT@ -fps = 30 +fps = 60 ## Output rotation (independent of xrandr or framebuffer settings!) ## Allowed values: 0, 90, 180, 270 From cc2a7f8040f145e9e50e304723b2a9f3dec2ba68 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Wed, 24 Apr 2024 18:17:22 +0100 Subject: [PATCH 110/184] linux/RK3566: use rocknix-singleadc-joypad driver --- .../kernel/drivers/rocknix-joypad/package.mk | 2 +- ...t-api-changes-needed-for-joypad-driv.patch | 92 +- projects/Rockchip/devices/RK3566-X55/options | 2 +- projects/Rockchip/devices/RK3566/options | 2 +- .../linux/RK3566/005-anbernic-input.patch | 24 +- .../RK3566/018-powkiddy-wifi-input.patch | 45 +- .../linux/RK3566/019-singleadc-joypad.patch | 1703 ----------------- ...-api-changes-needed-for-joypad-driv.patch} | 119 +- .../102-input-add-input-polldev-driver.patch | 485 +++++ 9 files changed, 729 insertions(+), 1745 deletions(-) delete mode 100644 projects/Rockchip/patches/linux/RK3566/019-singleadc-joypad.patch rename projects/Rockchip/patches/linux/RK3566/{0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch => 101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch} (71%) create mode 100644 projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 1f3e43cc2..ba1608b69 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="feb34291d210c1d95842ed54b0c82fb9fbf7e018" +PKG_VERSION="66546f3e752e3fb9a732f2b63676a3427929b36f" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch b/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch index 5428878b0..5a2521681 100644 --- a/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch +++ b/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch @@ -5,16 +5,39 @@ Subject: [PATCH 09/44] gpiolib: of: revert api changes needed for joypad driver --- - drivers/gpio/gpiolib-of.c | 14 ++ + drivers/gpio/gpiolib-of.c | 29 ++-- + include/linux/of_gpio.h | 37 +++- include/linux/of_gpio_legacy.h | 304 +++++++++++++++++++++++++++++++++ - 2 files changed, 318 insertions(+) + 3 files changed, 354 insertions(+), 16 deletions(-) create mode 100644 include/linux/of_gpio_legacy.h diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index e7770eedd146..4459226f21d1 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c -@@ -408,6 +408,20 @@ static struct gpio_desc *of_get_named_gpiod_flags(const struct device_node *np, +@@ -25,21 +25,6 @@ + #include "gpiolib.h" + #include "gpiolib-of.h" + +-/* +- * This is Linux-specific flags. By default controllers' and Linux' mapping +- * match, but GPIO controllers are free to translate their own flags to +- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. +- */ +-enum of_gpio_flags { +- OF_GPIO_ACTIVE_LOW = 0x1, +- OF_GPIO_SINGLE_ENDED = 0x2, +- OF_GPIO_OPEN_DRAIN = 0x4, +- OF_GPIO_TRANSITORY = 0x8, +- OF_GPIO_PULL_UP = 0x10, +- OF_GPIO_PULL_DOWN = 0x20, +- OF_GPIO_PULL_DISABLE = 0x40, +-}; +- + /** + * of_gpio_named_count() - Count GPIOs for a device + * @np: device node to count GPIOs for +@@ -409,6 +394,20 @@ static struct gpio_desc *of_get_named_gpiod_flags(const struct device_node *np, return desc; } @@ -35,6 +58,69 @@ index e7770eedd146..4459226f21d1 100644 /** * of_get_named_gpio() - Get a GPIO number to use with GPIO API * @np: device node to get GPIO from +diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h +index d0f66a5e1b2a..5c4c7e1a307b 100644 +--- a/include/linux/of_gpio.h ++++ b/include/linux/of_gpio.h +@@ -17,8 +17,26 @@ + + struct device_node; + ++/* ++ * This is Linux-specific flags. By default controllers' and Linux' mapping ++ * match, but GPIO controllers are free to translate their own flags to ++ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. ++ */ ++enum of_gpio_flags { ++ OF_GPIO_ACTIVE_LOW = 0x1, ++ OF_GPIO_SINGLE_ENDED = 0x2, ++ OF_GPIO_OPEN_DRAIN = 0x4, ++ OF_GPIO_TRANSITORY = 0x8, ++ OF_GPIO_PULL_UP = 0x10, ++ OF_GPIO_PULL_DOWN = 0x20, ++ OF_GPIO_PULL_DISABLE = 0x40, ++}; ++ + #ifdef CONFIG_OF_GPIO + ++extern int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags); ++ + extern int of_get_named_gpio(const struct device_node *np, + const char *list_name, int index); + +@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struct device_node *np, + + #include + +-/* Drivers may not strictly depend on the GPIO support, so let them link. */ + static inline int of_get_named_gpio(const struct device_node *np, + const char *propname, int index) + { ++ return -ENOSYS; ++} ++ ++/* Drivers may not strictly depend on the GPIO support, so let them link. */ ++static inline int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags) ++{ ++ if (flags) ++ *flags = 0; ++ + return -ENOSYS; + } + + #endif /* CONFIG_OF_GPIO */ + ++static inline int of_get_gpio_flags(const struct device_node *np, int index, ++ enum of_gpio_flags *flags) ++{ ++ return of_get_named_gpio_flags(np, "gpios", index, flags); ++} ++ ++//#endif /* CONFIG_OF_GPIO */ ++ + #endif /* __LINUX_OF_GPIO_H */ diff --git a/include/linux/of_gpio_legacy.h b/include/linux/of_gpio_legacy.h new file mode 100644 index 000000000000..ce58afecb4f9 diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index 59f1f3cf2..120618e7e 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -87,7 +87,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad" + ADDITIONAL_DRIVERS="rocknix-joypad" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 00058e645..ef9779c20 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -87,7 +87,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU" + ADDITIONAL_DRIVERS="rocknix-joypad RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch index cf443d7f3..5deb125db 100644 --- a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch @@ -1,5 +1,5 @@ diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi -index a4a60e4a53d4..8b6ab9ac5c1f 100644 +index a4a60e4a53d4..91f504871860 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg-arc.dtsi @@ -8,6 +8,113 @@ @@ -327,10 +327,10 @@ index a7dc462fe21f..396fcfe265f7 100644 + }; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi -index 63a18ff36cea..b97d9c99204f 100644 +index 63a18ff36cea..7f5d7271cd85 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi -@@ -8,73 +8,161 @@ +@@ -8,73 +8,162 @@ #include "rk3566-anbernic-rgxx3.dtsi" / { @@ -341,13 +341,14 @@ index 63a18ff36cea..b97d9c99204f 100644 - <&adc_mux 2>, - <&adc_mux 3>; - pinctrl-0 = <&joy_mux_en>; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; ++ joypad: rocknix-singleadc-joypad { ++ compatible = "rocknix-singleadc-joypad"; + hw_info = <0x01>; + + joypad-name = "retrogame_joypad"; + joypad-product = <0x1101>; + joypad-revision = <0x0100>; ++ joypad-vendor = <0x484B>; + + status = "okay"; + @@ -548,7 +549,7 @@ index 63a18ff36cea..b97d9c99204f 100644 }; &cru { -@@ -126,44 +214,6 @@ mipi_in_panel: endpoint { +@@ -126,44 +215,6 @@ mipi_in_panel: endpoint { }; }; @@ -594,7 +595,7 @@ index 63a18ff36cea..b97d9c99204f 100644 /* This hardware is physically present but unused. */ power-monitor@62 { diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts -index 94e6dd61a2db..ce8a800a1465 100644 +index 94e6dd61a2db..009a9f79f4fc 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts @@ -16,62 +16,6 @@ aliases { @@ -674,17 +675,18 @@ index 94e6dd61a2db..ce8a800a1465 100644 gpio_spi: spi { compatible = "spi-gpio"; pinctrl-names = "default"; -@@ -164,6 +101,155 @@ spk_amp: audio-amplifier { +@@ -164,6 +101,156 @@ spk_amp: audio-amplifier { pinctrl-names = "default"; sound-name-prefix = "Speaker Amp"; }; + -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; ++ joypad: rocknix-singleadc-joypad { ++ compatible = "rocknix-singleadc-joypad"; + + joypad-name = "retrogame_joypad"; + joypad-product = <0x1101>; + joypad-revision = <0x0100>; ++ joypad-vendor = <0x484B>; + + status = "okay"; + @@ -830,7 +832,7 @@ index 94e6dd61a2db..ce8a800a1465 100644 }; &cru { -@@ -199,62 +285,6 @@ mipi_out_panel: endpoint { +@@ -199,62 +286,6 @@ mipi_out_panel: endpoint { }; }; diff --git a/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch b/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch index 0d5ce37c9..b9f5f50b9 100644 --- a/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch @@ -1,7 +1,8 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi linux/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi 2024-03-24 02:53:55.608797070 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi 2024-03-24 03:26:25.643228166 +0000 -@@ -16,61 +16,6 @@ +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi +index 3ab751a01cb2..91617bd6b680 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi +@@ -16,61 +16,6 @@ aliases { mmc3 = &sdmmc2; }; @@ -63,7 +64,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l backlight: backlight { compatible = "pwm-backlight"; power-supply = <&vcc_sys>; -@@ -96,108 +41,159 @@ +@@ -96,108 +41,160 @@ battery: battery { <3400000 0>; }; @@ -71,19 +72,13 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l - compatible = "gpio-keys"; - pinctrl-0 = <&btn_pins_ctrl>; - pinctrl-names = "default"; -+ joypad: singleadc-joypad { -+ compatible = "singleadc-joypad"; -+ hw_info = <0x01>; - +- - button-a { - gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; - label = "EAST"; - linux,code = ; - }; -+ joypad-name = "retrogame_joypad"; -+ joypad-product = <0x1101>; -+ joypad-revision = <0x0100>; - +- - button-b { - gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; - label = "SOUTH"; @@ -95,8 +90,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l - label = "DPAD-DOWN"; - linux,code = ; - }; -+ status = "okay"; - +- - button-l1 { - gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; - label = "TL"; @@ -138,7 +132,10 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l - label = "SELECT"; - linux,code = ; - }; -- ++ joypad: rocknix-singleadc-joypad { ++ compatible = "rocknix-singleadc-joypad"; ++ hw_info = <0x01>; + - button-start { - gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; - label = "START"; @@ -150,13 +147,18 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l - label = "THUMBL"; - linux,code = ; - }; -- ++ joypad-name = "retrogame_joypad"; ++ joypad-product = <0x1101>; ++ joypad-revision = <0x0100>; ++ joypad-vendor = <0x484B>; + - button-thumbr { - gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; - label = "THUMBR"; - linux,code = ; - }; -- ++ status = "okay"; + - button-up { - gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; - label = "DPAD-UP"; @@ -179,6 +181,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l - gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; - label = "WEST"; - linux,code = ; +- }; + /* adc mux channel count */ + amux-count = <4>; + /* adc mux select(a,b) gpio */ @@ -309,7 +312,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l + gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; + label = "GPIO BTN_THUMBR"; + linux,code = ; - }; ++ }; + }; @@ -317,7 +320,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l gpio_keys_vol: gpio-keys-vol { compatible = "gpio-keys"; autorepeat; -@@ -217,13 +213,6 @@ +@@ -217,13 +214,6 @@ button-vol-up { }; }; @@ -331,7 +334,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi l hdmi-con { compatible = "hdmi-connector"; ddc-i2c-bus = <&i2c5>; -@@ -790,6 +779,9 @@ +@@ -774,6 +764,9 @@ &sdmmc2 { pinctrl-names = "default"; vmmc-supply = <&vcc_wifi>; vqmmc-supply = <&vcca1v8_pmu>; diff --git a/projects/Rockchip/patches/linux/RK3566/019-singleadc-joypad.patch b/projects/Rockchip/patches/linux/RK3566/019-singleadc-joypad.patch deleted file mode 100644 index c8a413600..000000000 --- a/projects/Rockchip/patches/linux/RK3566/019-singleadc-joypad.patch +++ /dev/null @@ -1,1703 +0,0 @@ -diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c ---- linux.orig/drivers/gpio/gpiolib-of.c 2024-03-24 02:53:55.876805705 +0000 -+++ linux/drivers/gpio/gpiolib-of.c 2024-03-24 03:55:35.622257619 +0000 -@@ -25,21 +25,6 @@ - #include "gpiolib.h" - #include "gpiolib-of.h" - --/* -- * This is Linux-specific flags. By default controllers' and Linux' mapping -- * match, but GPIO controllers are free to translate their own flags to -- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -- */ --enum of_gpio_flags { -- OF_GPIO_ACTIVE_LOW = 0x1, -- OF_GPIO_SINGLE_ENDED = 0x2, -- OF_GPIO_OPEN_DRAIN = 0x4, -- OF_GPIO_TRANSITORY = 0x8, -- OF_GPIO_PULL_UP = 0x10, -- OF_GPIO_PULL_DOWN = 0x20, -- OF_GPIO_PULL_DISABLE = 0x40, --}; -- - /** - * of_gpio_named_count() - Count GPIOs for a device - * @np: device node to count GPIOs for -@@ -408,6 +393,20 @@ out: - return desc; - } - -+int of_get_named_gpio_flags(const struct device_node *np, const char *list_name, -+ int index, enum of_gpio_flags *flags) -+{ -+ struct gpio_desc *desc; -+ -+ desc = of_get_named_gpiod_flags(np, list_name, index, flags); -+ -+ if (IS_ERR(desc)) -+ return PTR_ERR(desc); -+ else -+ return desc_to_gpio(desc); -+} -+EXPORT_SYMBOL_GPL(of_get_named_gpio_flags); -+ - /** - * of_get_named_gpio() - Get a GPIO number to use with GPIO API - * @np: device node to get GPIO from -diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig ---- linux.orig/drivers/input/Kconfig 2024-03-24 02:53:56.212816531 +0000 -+++ linux/drivers/input/Kconfig 2024-03-24 03:55:35.622257619 +0000 -@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS - To compile this driver as a module, choose M here: the - module will be called ff-memless. - -+config INPUT_POLLDEV -+ tristate "Polled input device skeleton" -+ help -+ Say Y here if you are using a driver for an input -+ device that periodically polls hardware state. This -+ option is only useful for out-of-tree drivers since -+ in-tree drivers select it automatically. -+ -+ If unsure, say N. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called input-polldev. -+ - config INPUT_SPARSEKMAP - tristate "Sparse keymap support library" - help -diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile ---- linux.orig/drivers/input/Makefile 2024-03-24 02:53:56.212816531 +0000 -+++ linux/drivers/input/Makefile 2024-03-24 03:55:35.622257619 +0000 -@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i - input-core-y += touchscreen.o - - obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o -+obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o - obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o - obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o - obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o -diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-polldev.c ---- linux.orig/drivers/input/input-polldev.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/input-polldev.c 2024-03-24 03:55:35.622257619 +0000 -@@ -0,0 +1,362 @@ -+// SPDX-License-Identifier: GPL-2.0-only -+/* -+ * Generic implementation of a polled input device -+ -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+MODULE_AUTHOR("Dmitry Torokhov "); -+MODULE_DESCRIPTION("Generic implementation of a polled input device"); -+MODULE_LICENSE("GPL v2"); -+ -+static void input_polldev_queue_work(struct input_polled_dev *dev) -+{ -+ unsigned long delay; -+ -+ delay = msecs_to_jiffies(dev->poll_interval); -+ if (delay >= HZ) -+ delay = round_jiffies_relative(delay); -+ -+ queue_delayed_work(system_freezable_wq, &dev->work, delay); -+} -+ -+static void input_polled_device_work(struct work_struct *work) -+{ -+ struct input_polled_dev *dev = -+ container_of(work, struct input_polled_dev, work.work); -+ -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+} -+ -+static int input_open_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ if (dev->open) -+ dev->open(dev); -+ -+ /* Only start polling if polling is enabled */ -+ if (dev->poll_interval > 0) { -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+ } -+ -+ return 0; -+} -+ -+static void input_close_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ cancel_delayed_work_sync(&dev->work); -+ -+ if (dev->close) -+ dev->close(dev); -+} -+ -+/* SYSFS interface */ -+ -+static ssize_t input_polldev_get_poll(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval); -+} -+ -+static ssize_t input_polldev_set_poll(struct device *dev, -+ struct device_attribute *attr, const char *buf, -+ size_t count) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ struct input_dev *input = polldev->input; -+ unsigned int interval; -+ int err; -+ -+ err = kstrtouint(buf, 0, &interval); -+ if (err) -+ return err; -+ -+ if (interval < polldev->poll_interval_min) -+ return -EINVAL; -+ -+ if (interval > polldev->poll_interval_max) -+ return -EINVAL; -+ -+ mutex_lock(&input->mutex); -+ -+ polldev->poll_interval = interval; -+ -+ if (input->users) { -+ cancel_delayed_work_sync(&polldev->work); -+ if (polldev->poll_interval > 0) -+ input_polldev_queue_work(polldev); -+ } -+ -+ mutex_unlock(&input->mutex); -+ -+ return count; -+} -+ -+static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll, -+ input_polldev_set_poll); -+ -+ -+static ssize_t input_polldev_get_max(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_max); -+} -+ -+static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL); -+ -+static ssize_t input_polldev_get_min(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_min); -+} -+ -+static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL); -+ -+static struct attribute *sysfs_attrs[] = { -+ &dev_attr_poll.attr, -+ &dev_attr_max.attr, -+ &dev_attr_min.attr, -+ NULL -+}; -+ -+static struct attribute_group input_polldev_attribute_group = { -+ .attrs = sysfs_attrs -+}; -+ -+static const struct attribute_group *input_polldev_attribute_groups[] = { -+ &input_polldev_attribute_group, -+ NULL -+}; -+ -+/** -+ * input_allocate_polled_device - allocate memory for polled device -+ * -+ * The function allocates memory for a polled device and also -+ * for an input device associated with this polled device. -+ */ -+struct input_polled_dev *input_allocate_polled_device(void) -+{ -+ struct input_polled_dev *dev; -+ -+ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); -+ if (!dev) -+ return NULL; -+ -+ dev->input = input_allocate_device(); -+ if (!dev->input) { -+ kfree(dev); -+ return NULL; -+ } -+ -+ return dev; -+} -+EXPORT_SYMBOL(input_allocate_polled_device); -+ -+struct input_polled_devres { -+ struct input_polled_dev *polldev; -+}; -+ -+static int devm_input_polldev_match(struct device *dev, void *res, void *data) -+{ -+ struct input_polled_devres *devres = res; -+ -+ return devres->polldev == data; -+} -+ -+static void devm_input_polldev_release(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: dropping reference/freeing %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ -+ input_put_device(polldev->input); -+ kfree(polldev); -+} -+ -+static void devm_input_polldev_unregister(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: unregistering device %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ input_unregister_device(polldev->input); -+ -+ /* -+ * Note that we are still holding extra reference to the input -+ * device so it will stick around until devm_input_polldev_release() -+ * is called. -+ */ -+} -+ -+/** -+ * devm_input_allocate_polled_device - allocate managed polled device -+ * @dev: device owning the polled device being created -+ * -+ * Returns prepared &struct input_polled_dev or %NULL. -+ * -+ * Managed polled input devices do not need to be explicitly unregistered -+ * or freed as it will be done automatically when owner device unbinds -+ * from * its driver (or binding fails). Once such managed polled device -+ * is allocated, it is ready to be set up and registered in the same -+ * fashion as regular polled input devices (using -+ * input_register_polled_device() function). -+ * -+ * If you want to manually unregister and free such managed polled devices, -+ * it can be still done by calling input_unregister_polled_device() and -+ * input_free_polled_device(), although it is rarely needed. -+ * -+ * NOTE: the owner device is set up as parent of input device and users -+ * should not override it. -+ */ -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) -+{ -+ struct input_polled_dev *polldev; -+ struct input_polled_devres *devres; -+ -+ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres), -+ GFP_KERNEL); -+ if (!devres) -+ return NULL; -+ -+ polldev = input_allocate_polled_device(); -+ if (!polldev) { -+ devres_free(devres); -+ return NULL; -+ } -+ -+ polldev->input->dev.parent = dev; -+ polldev->devres_managed = true; -+ -+ devres->polldev = polldev; -+ devres_add(dev, devres); -+ -+ return polldev; -+} -+EXPORT_SYMBOL(devm_input_allocate_polled_device); -+ -+/** -+ * input_free_polled_device - free memory allocated for polled device -+ * @dev: device to free -+ * -+ * The function frees memory allocated for polling device and drops -+ * reference to the associated input device. -+ */ -+void input_free_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev) { -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_release, -+ devm_input_polldev_match, -+ dev)); -+ input_put_device(dev->input); -+ kfree(dev); -+ } -+} -+EXPORT_SYMBOL(input_free_polled_device); -+ -+/** -+ * input_register_polled_device - register polled device -+ * @dev: device to register -+ * -+ * The function registers previously initialized polled input device -+ * with input layer. The device should be allocated with call to -+ * input_allocate_polled_device(). Callers should also set up poll() -+ * method and set up capabilities (id, name, phys, bits) of the -+ * corresponding input_dev structure. -+ */ -+int input_register_polled_device(struct input_polled_dev *dev) -+{ -+ struct input_polled_devres *devres = NULL; -+ struct input_dev *input = dev->input; -+ int error; -+ -+ if (dev->devres_managed) { -+ devres = devres_alloc(devm_input_polldev_unregister, -+ sizeof(*devres), GFP_KERNEL); -+ if (!devres) -+ return -ENOMEM; -+ -+ devres->polldev = dev; -+ } -+ -+ input_set_drvdata(input, dev); -+ INIT_DELAYED_WORK(&dev->work, input_polled_device_work); -+ -+ if (!dev->poll_interval) -+ dev->poll_interval = 500; -+ if (!dev->poll_interval_max) -+ dev->poll_interval_max = dev->poll_interval; -+ -+ input->open = input_open_polled_device; -+ input->close = input_close_polled_device; -+ -+ input->dev.groups = input_polldev_attribute_groups; -+ -+ error = input_register_device(input); -+ if (error) { -+ devres_free(devres); -+ return error; -+ } -+ -+ /* -+ * Take extra reference to the underlying input device so -+ * that it survives call to input_unregister_polled_device() -+ * and is deleted only after input_free_polled_device() -+ * has been invoked. This is needed to ease task of freeing -+ * sparse keymaps. -+ */ -+ input_get_device(input); -+ -+ if (dev->devres_managed) { -+ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", -+ __func__, dev_name(&input->dev)); -+ devres_add(input->dev.parent, devres); -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(input_register_polled_device); -+ -+/** -+ * input_unregister_polled_device - unregister polled device -+ * @dev: device to unregister -+ * -+ * The function unregisters previously registered polled input -+ * device from input layer. Polling is stopped and device is -+ * ready to be freed with call to input_free_polled_device(). -+ */ -+void input_unregister_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_unregister, -+ devm_input_polldev_match, -+ dev)); -+ -+ input_unregister_device(dev->input); -+} -+EXPORT_SYMBOL(input_unregister_polled_device); -diff -rupN linux.orig/drivers/input/joystick/Kconfig linux/drivers/input/joystick/Kconfig ---- linux.orig/drivers/input/joystick/Kconfig 2024-03-24 02:53:56.212816531 +0000 -+++ linux/drivers/input/joystick/Kconfig 2024-03-24 03:59:42.593817633 +0000 -@@ -393,6 +393,11 @@ config JOYSTICK_FSIA6B - To compile this driver as a module, choose M here: the - module will be called fsia6b. - -+config JOYSTICK_SINGLEADCJOY -+ tristate "Single SARADC dual-joystick gamepad driver" -+ help -+ The 1-in 4-out SARADC joypad driver. -+ - config JOYSTICK_N64 - bool "N64 controller" - depends on MACH_NINTENDO64 -diff -rupN linux.orig/drivers/input/joystick/Makefile linux/drivers/input/joystick/Makefile ---- linux.orig/drivers/input/joystick/Makefile 2024-03-24 02:53:56.212816531 +0000 -+++ linux/drivers/input/joystick/Makefile 2024-03-24 04:00:48.251843236 +0000 -@@ -31,6 +31,7 @@ obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-j - obj-$(CONFIG_JOYSTICK_SEESAW) += adafruit-seesaw.o - obj-$(CONFIG_JOYSTICK_SENSEHAT) += sensehat-joystick.o - obj-$(CONFIG_JOYSTICK_SIDEWINDER) += sidewinder.o -+obj-$(CONFIG_JOYSTICK_SINGLEADCJOY) += singleadcjoy.o - obj-$(CONFIG_JOYSTICK_SPACEBALL) += spaceball.o - obj-$(CONFIG_JOYSTICK_SPACEORB) += spaceorb.o - obj-$(CONFIG_JOYSTICK_STINGER) += stinger.o -diff -rupN linux.orig/drivers/input/joystick/singleadcjoy.c linux/drivers/input/joystick/singleadcjoy.c ---- linux.orig/drivers/input/joystick/singleadcjoy.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/joystick/singleadcjoy.c 2024-03-24 04:14:46.986012424 +0000 -@@ -0,0 +1,1087 @@ -+/*----------------------------------------------------------------------------*/ -+ -+/* -+ * Copyright (c) 2008-2021 Anbernic -+ */ -+ -+/* -+ * Single SARADC dual-joystick gamepad driver -+ */ -+ -+/*----------------------------------------------------------------------------*/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/*----------------------------------------------------------------------------*/ -+#define DRV_NAME "retrogame_joypad" -+#define __LEFT_JOYSTICK_INVERT__ -+#define __MURMUR__ -+/*----------------------------------------------------------------------------*/ -+#define ADC_MAX_VOLTAGE 1800 -+#define ADC_DATA_TUNING(x, p) ((x * p) / 100) -+#define ADC_TUNING_DEFAULT 180 -+ -+struct bt_adc { -+ /* report value (mV) */ -+ int value; -+ /* report type */ -+ int report_type; -+ /* input device init value (mV) */ -+ int max, min; -+ /* calibrated adc value */ -+ int cal; -+ /* adc scale value */ -+ int scale; -+ /* invert report */ -+ bool invert; -+ /* amux channel */ -+ int amux_ch; -+ /* adc data tuning value([percent), p = positive, n = negative */ -+ int tuning_p, tuning_n; -+}; -+ -+struct analog_mux { -+ /* IIO ADC Channel : amux connect channel */ -+ struct iio_channel *iio_ch; -+ /* analog mux select(a,b) gpio */ -+ int sel_a_gpio, sel_b_gpio; -+ /* analog mux enable gpio */ -+ int en_gpio; -+}; -+ -+struct bt_gpio { -+ /* GPIO Request label */ -+ const char *label; -+ /* GPIO Number */ -+ int num; -+ /* report type */ -+ int report_type; -+ /* report linux code */ -+ int linux_code; -+ /* prev button value */ -+ bool old_value; -+ /* button press level */ -+ bool active_level; -+}; -+ -+struct joypad { -+ struct device *dev; -+ int poll_interval; -+ -+ /* report enable/disable */ -+ bool enable; -+ -+ /* analog mux & joystick control */ -+ struct analog_mux *amux; -+ /* analog mux max count */ -+ int amux_count; -+ /* analog button */ -+ struct bt_adc *adcs; -+ -+ /* report interval (ms) */ -+ int bt_gpio_count; -+ struct bt_gpio *gpios; -+ -+ /* button auto repeat */ -+ int auto_repeat; -+ -+ /* report threshold (mV) */ -+ int bt_adc_fuzz, bt_adc_flat; -+ /* adc read value scale */ -+ int bt_adc_scale; -+ /* joystick deadzone control */ -+ int bt_adc_deadzone; -+ -+ struct mutex lock; -+ -+ /* amux debug channel */ -+ int debug_ch; -+}; -+ -+/*----------------------------------------------------------------------------*/ -+// -+// set to the value in the boot.ini file. (if exist) -+// -+/*----------------------------------------------------------------------------*/ -+static unsigned int g_button_adc_fuzz = 0; -+static unsigned int g_button_adc_flat = 0; -+static unsigned int g_button_adc_scale = 0; -+static unsigned int g_button_adc_deadzone = 0; -+ -+static int button_adc_fuzz(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-fuzz=", button_adc_fuzz); -+ -+static int button_adc_flat(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_flat = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-flat=", button_adc_flat); -+ -+static int button_adc_scale(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_scale = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-scale=", button_adc_scale); -+ -+static int button_adc_deadzone(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-deadzone=", button_adc_deadzone); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_select(struct analog_mux *amux, int channel) -+{ -+ /* select mux channel */ -+ gpio_set_value(amux->en_gpio, 0); -+ -+ switch(channel) { -+ case 0: /* EVENT (ABS_RY) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 1: /* EVENT (ABS_RX) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ case 2: /* EVENT (ABS_Y) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 3: /* EVENT (ABS_X) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ default: -+ /* amux disanle */ -+ gpio_set_value(amux->en_gpio, 1); -+ return -1; -+ } -+ /* mux swtiching speed : 35ns(on) / 9ns(off) */ -+ usleep_range(10, 20); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_read(struct analog_mux *amux, struct bt_adc *adc) -+{ -+ int value; -+ -+ -+ if (joypad_amux_select(amux, adc->amux_ch)) -+ return 0; -+ -+ iio_read_channel_raw(amux->iio_ch, &value); -+ -+ value *= adc->scale; -+#ifdef __LEFT_JOYSTICK_INVERT__ -+ return value; -+#else -+ return (adc->invert ? (adc->max - value) : value); -+#endif -+} -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/poll_interval [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->poll_interval = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->poll_interval); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, -+ joypad_show_poll_interval, -+ joypad_store_poll_interval); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_fuzz [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_fuzz(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, -+ joypad_show_adc_fuzz, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_flat [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_flat(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_flat); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, -+ joypad_show_adc_flat, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/enable [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_enable(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->enable = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_enable(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->enable); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, -+ joypad_show_enable, -+ joypad_store_enable); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/adc_cal [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ bool calibration; -+ -+ calibration = simple_strtoul(buf, NULL, 10); -+ -+ if (calibration) { -+ int nbtn; -+ -+ mutex_lock(&joypad->lock); -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ mutex_unlock(&joypad->lock); -+ } -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ int nbtn; -+ ssize_t pos; -+ -+ for (nbtn = 0, pos = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ nbtn, adc->cal); -+ } -+ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, -+ joypad_show_adc_cal, -+ joypad_store_adc_cal); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/retrogame_joypad/amux_debug [rw] -+ * -+ * echo [debug channel] > amux_debug -+ * cat amux_debug : debug channel mux set & adc read -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ joypad->debug_ch = simple_strtoul(buf, NULL, 10); -+ -+ /* if error than default setting(debug_ch = 0) */ -+ if (joypad->debug_ch > joypad->amux_count) -+ joypad->debug_ch = 0; -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ struct analog_mux *amux = joypad->amux; -+ ssize_t pos; -+ int value; -+ -+ mutex_lock(&joypad->lock); -+ -+ /* disable poll driver */ -+ if (joypad->enable) -+ joypad->enable = false; -+ -+ if (joypad_amux_select(amux, joypad->debug_ch)) -+ goto err_out; -+ -+ if (iio_read_channel_processed(amux->iio_ch, &value)) -+ goto err_out; -+ -+ pos = sprintf(buf, "amux ch[%d], adc scale = %d, adc value = %d\n", -+ joypad->debug_ch, joypad->bt_adc_scale, -+ value * joypad->bt_adc_scale); -+ goto out; -+ -+err_out: -+ pos = sprintf(buf, "error : amux setup & adc read!\n"); -+out: -+ mutex_unlock(&joypad->lock); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(amux_debug, S_IWUSR | S_IRUGO, -+ joypad_show_amux_debug, -+ joypad_store_amux_debug); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ &dev_attr_amux_debug.attr, -+ NULL, -+}; -+ -+static struct attribute_group joypad_attr_group = { -+ .attrs = joypad_attrs, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static void joypad_gpio_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn, value; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ -+ if (gpio_get_value_cansleep(gpio->num) < 0) { -+ dev_err(joypad->dev, "failed to get gpio state\n"); -+ continue; -+ } -+ value = gpio_get_value(gpio->num); -+ if (value != gpio->old_value) { -+ input_event(poll_dev->input, -+ gpio->report_type, -+ gpio->linux_code, -+ (value == gpio->active_level) ? 1 : 0); -+ gpio->old_value = value; -+ } -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_adc_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); -+ continue; -+ } -+ adc->value = adc->value - adc->cal; -+ -+ /* Joystick Deadzone check */ -+ if (joypad->bt_adc_deadzone) { -+ if (abs(adc->value) < joypad->bt_adc_deadzone) -+ adc->value = 0; -+ } -+ -+ /* adc data tuning */ -+ if (adc->tuning_n && adc->value < 0) -+ adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_n); -+ if (adc->tuning_p && adc->value > 0) -+ adc->value = ADC_DATA_TUNING(adc->value, adc->tuning_p); -+ -+ adc->value = adc->value > adc->max ? adc->max : adc->value; -+ adc->value = adc->value < adc->min ? adc->min : adc->value; -+ -+ input_report_abs(poll_dev->input, -+ adc->report_type, -+ adc->invert ? adc->value * (-1) : adc->value); -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_poll(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ if (joypad->enable) { -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ } -+ if (poll_dev->poll_interval != joypad->poll_interval) { -+ mutex_lock(&joypad->lock); -+ poll_dev->poll_interval = joypad->poll_interval; -+ mutex_unlock(&joypad->lock); -+ } -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_open(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ gpio->old_value = gpio->active_level ? 0 : 1; -+ } -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ __func__, nbtn, adc->cal); -+ } -+ /* buttons status sync */ -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ -+ /* button report enable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = true; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : opened\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_close(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ /* button report disable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = false; -+ mutex_unlock(&joypad->lock); -+ -+ dev_info(joypad->dev, "%s : closed\n", __func__); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct analog_mux *amux; -+ enum iio_chan_type type; -+ enum of_gpio_flags flags; -+ int ret; -+ -+ /* analog mux control struct init */ -+ joypad->amux = devm_kzalloc(dev, sizeof(struct analog_mux), -+ GFP_KERNEL); -+ if (!joypad->amux) { -+ dev_err(dev, "%s amux devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ amux = joypad->amux; -+ amux->iio_ch = devm_iio_channel_get(dev, "amux_adc"); -+ if (PTR_ERR(amux->iio_ch) == -EPROBE_DEFER) -+ return -EPROBE_DEFER; -+ if (IS_ERR(amux->iio_ch)) { -+ dev_err(dev, "iio channel get error\n"); -+ return -EINVAL; -+ } -+ if (!amux->iio_ch->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(amux->iio_ch, &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel type %d\n", type); -+ return -EINVAL; -+ } -+ -+ amux->sel_a_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-a-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_a_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_a_gpio, "amux-sel-a"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-a %d\n", -+ __func__, amux->sel_a_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_a_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->sel_b_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-b-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_b_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_b_gpio, "amux-sel-b"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-b %d\n", -+ __func__, amux->sel_b_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_b_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->en_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-en-gpios", 0, &flags); -+ if (gpio_is_valid(amux->en_gpio)) { -+ ret = devm_gpio_request(dev, amux->en_gpio, "amux-en"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-en %d\n", -+ __func__, amux->en_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->en_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ return 0; -+err_out: -+ return ret; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_setup(struct device *dev, struct joypad *joypad) -+{ -+ int nbtn; -+ -+ /* adc button struct init */ -+ joypad->adcs = devm_kzalloc(dev, joypad->amux_count * -+ sizeof(struct bt_adc), GFP_KERNEL); -+ if (!joypad->adcs) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->scale = joypad->bt_adc_scale; -+ -+ adc->max = (ADC_MAX_VOLTAGE / 2); -+ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -+ if (adc->scale) { -+ adc->max *= adc->scale; -+ adc->min *= adc->scale; -+ } -+ adc->amux_ch = nbtn; -+ adc->invert = false; -+ -+ switch (nbtn) { -+ case 0: -+ adc->report_type = ABS_RY; -+ if (device_property_read_u32(dev, -+ "abs_ry-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_ry-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 1: -+ adc->report_type = ABS_RX; -+ if (device_property_read_u32(dev, -+ "abs_rx-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rx-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 2: -+ #ifdef __LEFT_JOYSTICK_INVERT__ -+ adc->invert = true; -+ #endif -+ adc->report_type = ABS_Y; -+ if (device_property_read_u32(dev, -+ "abs_y-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_y-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 3: -+ #ifdef __LEFT_JOYSTICK_INVERT__ -+ adc->invert = true; -+ #endif -+ adc->report_type = ABS_X; -+ if (device_property_read_u32(dev, -+ "abs_x-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_x-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ default : -+ dev_err(dev, "%s amux count(%d) error!", -+ __func__, nbtn); -+ return -EINVAL; -+ } -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct device_node *node, *pp; -+ int nbtn; -+ -+ node = dev->of_node; -+ if (!node) -+ return -ENODEV; -+ -+ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * -+ sizeof(struct bt_gpio), GFP_KERNEL); -+ -+ if (!joypad->gpios) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ nbtn = 0; -+ for_each_child_of_node(node, pp) { -+ enum of_gpio_flags flags; -+ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; -+ int error; -+ -+ gpio->num = of_get_gpio_flags(pp, 0, &flags); -+ if (gpio->num < 0) { -+ error = gpio->num; -+ dev_err(dev, "Failed to get gpio flags, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* gpio active level(key press level) */ -+ gpio->active_level = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; -+ -+ gpio->label = of_get_property(pp, "label", NULL); -+ -+ if (gpio_is_valid(gpio->num)) { -+ error = devm_gpio_request_one(dev, gpio->num, -+ GPIOF_IN, gpio->label); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to request GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ } -+ if (of_property_read_u32(pp, "linux,code", &gpio->linux_code)) { -+ dev_err(dev, "Button without keycode: 0x%x\n", -+ gpio->num); -+ return -EINVAL; -+ } -+ if (of_property_read_u32(pp, "linux,input-type", -+ &gpio->report_type)) -+ gpio->report_type = EV_KEY; -+ } -+ if (nbtn == 0) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+struct input_dev * joypad_input_g; -+ -+ -+void rk_send_key_f_key_up(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 1); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_up); -+ -+ -+void rk_send_key_f_key_down(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 0); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_down); -+ -+ -+static int joypad_input_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct input_polled_dev *poll_dev; -+ struct input_dev *input; -+ int nbtn, error; -+ u32 joypad_revision = 0; -+ u32 joypad_product = 0; -+ -+ poll_dev = devm_input_allocate_polled_device(dev); -+ if (!poll_dev) { -+ dev_err(dev, "no memory for polled device\n"); -+ return -ENOMEM; -+ } -+ -+ poll_dev->private = joypad; -+ poll_dev->poll = joypad_poll; -+ poll_dev->poll_interval = joypad->poll_interval; -+ poll_dev->open = joypad_open; -+ poll_dev->close = joypad_close; -+ -+ input = poll_dev->input; -+ joypad_input_g=input; -+ -+ device_property_read_string(dev, "joypad-name", &input->name); -+ input->phys = DRV_NAME"/input0"; -+ -+ device_property_read_u32(dev, "joypad-revision", &joypad_revision); -+ device_property_read_u32(dev, "joypad-product", &joypad_product); -+ input->id.bustype = BUS_HOST; -+ input->id.vendor = 0x484B; -+ input->id.product = (u16)joypad_product; -+ input->id.version = (u16)joypad_revision; -+ -+ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ -+ __set_bit(EV_ABS, input->evbit); -+ for(nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ input_set_abs_params(input, adc->report_type, -+ adc->min, adc->max, -+ joypad->bt_adc_fuzz, -+ joypad->bt_adc_flat); -+ dev_info(dev, -+ "%s : SCALE = %d, ABS min = %d, max = %d," -+ " fuzz = %d, flat = %d, deadzone = %d\n", -+ __func__, adc->scale, adc->min, adc->max, -+ joypad->bt_adc_fuzz, joypad->bt_adc_flat, -+ joypad->bt_adc_deadzone); -+ dev_info(dev, -+ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -+ __func__, adc->tuning_p, adc->tuning_n); -+ } -+ -+ /* GPIO key setup */ -+ __set_bit(EV_KEY, input->evbit); -+ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ input_set_capability(input, gpio->report_type, -+ gpio->linux_code); -+ } -+ -+ if (joypad->auto_repeat) -+ __set_bit(EV_REP, input->evbit); -+ -+ joypad->dev = dev; -+ -+ error = input_register_polled_device(poll_dev); -+ if (error) { -+ dev_err(dev, "unable to register polled device, err=%d\n", -+ error); -+ return error; -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) -+{ -+ /* -+ fuzz: specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ if (g_button_adc_fuzz) -+ joypad->bt_adc_fuzz = g_button_adc_fuzz; -+ else -+ device_property_read_u32(dev, "button-adc-fuzz", -+ &joypad->bt_adc_fuzz); -+ /* -+ flat: values that are within this value will be discarded by -+ joydev interface and reported as 0 instead. -+ */ -+ if (g_button_adc_flat) -+ joypad->bt_adc_flat = g_button_adc_flat; -+ else -+ device_property_read_u32(dev, "button-adc-flat", -+ &joypad->bt_adc_flat); -+ -+ /* Joystick report value control */ -+ if (g_button_adc_scale) -+ joypad->bt_adc_scale = g_button_adc_scale; -+ else -+ device_property_read_u32(dev, "button-adc-scale", -+ &joypad->bt_adc_scale); -+ -+ /* Joystick deadzone value control */ -+ if (g_button_adc_deadzone) -+ joypad->bt_adc_deadzone = g_button_adc_deadzone; -+ else -+ device_property_read_u32(dev, "button-adc-deadzone", -+ &joypad->bt_adc_deadzone); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_dt_parse(struct device *dev, struct joypad *joypad) -+{ -+ int error = 0; -+ -+ /* initialize value check from boot.ini */ -+ joypad_setup_value_check(dev, joypad); -+ -+ device_property_read_u32(dev, "amux-count", -+ &joypad->amux_count); -+ -+ device_property_read_u32(dev, "poll-interval", -+ &joypad->poll_interval); -+ -+ joypad->auto_repeat = device_property_present(dev, "autorepeat"); -+ -+ joypad->bt_gpio_count = device_get_child_node_count(dev); -+ -+ if ((joypad->amux_count == 0) || (joypad->bt_gpio_count == 0)) { -+ dev_err(dev, "adc key = %d, gpio key = %d error!", -+ joypad->amux_count, joypad->bt_gpio_count); -+ return -EINVAL; -+ } -+ -+ error = joypad_adc_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_amux_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_gpio_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -+ __func__, joypad->amux_count, joypad->bt_gpio_count); -+ -+ return error; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_probe(struct platform_device *pdev) -+{ -+ struct joypad *joypad; -+ struct device *dev = &pdev->dev; -+ int error; -+ -+ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); -+ if (!joypad) { -+ dev_err(dev, "joypad devm_kzmalloc error!"); -+ return -ENOMEM; -+ } -+ -+ /* device tree data parse */ -+ error = joypad_dt_parse(dev, joypad); -+ if (error) { -+ dev_err(dev, "dt parse error!(err = %d)\n", error); -+ return error; -+ } -+ -+ mutex_init(&joypad->lock); -+ platform_set_drvdata(pdev, joypad); -+ -+ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); -+ if (error) { -+ dev_err(dev, "create sysfs group fail, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* poll input device setup */ -+ error = joypad_input_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "input setup failed!(err = %d)\n", error); -+ return error; -+ } -+ dev_info(dev, "%s : probe success\n", __func__); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static const struct of_device_id joypad_of_match[] = { -+ { .compatible = "singleadc-joypad", }, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(of, joypad_of_match); -+ -+/*----------------------------------------------------------------------------*/ -+static struct platform_driver joypad_driver = { -+ .probe = joypad_probe, -+ .driver = { -+ .name = DRV_NAME, -+ .of_match_table = of_match_ptr(joypad_of_match), -+ }, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+static int __init joypad_init(void) -+{ -+ return platform_driver_register(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void __exit joypad_exit(void) -+{ -+ platform_driver_unregister(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+late_initcall(joypad_init); -+module_exit(joypad_exit); -diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-polldev.h ---- linux.orig/include/linux/input-polldev.h 1970-01-01 00:00:00.000000000 +0000 -+++ linux/include/linux/input-polldev.h 2024-03-24 03:55:35.622257619 +0000 -@@ -0,0 +1,58 @@ -+/* SPDX-License-Identifier: GPL-2.0-only */ -+#ifndef _INPUT_POLLDEV_H -+#define _INPUT_POLLDEV_H -+ -+/* -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#include -+#include -+ -+/** -+ * struct input_polled_dev - simple polled input device -+ * @private: private driver data. -+ * @open: driver-supplied method that prepares device for polling -+ * (enabled the device and maybe flushes device state). -+ * @close: driver-supplied method that is called when device is no -+ * longer being polled. Used to put device into low power mode. -+ * @poll: driver-supplied method that polls the device and posts -+ * input events (mandatory). -+ * @poll_interval: specifies how often the poll() method should be called. -+ * Defaults to 500 msec unless overridden when registering the device. -+ * @poll_interval_max: specifies upper bound for the poll interval. -+ * Defaults to the initial value of @poll_interval. -+ * @poll_interval_min: specifies lower bound for the poll interval. -+ * Defaults to 0. -+ * @input: input device structure associated with the polled device. -+ * Must be properly initialized by the driver (id, name, phys, bits). -+ * -+ * Polled input device provides a skeleton for supporting simple input -+ * devices that do not raise interrupts but have to be periodically -+ * scanned or polled to detect changes in their state. -+ */ -+struct input_polled_dev { -+ void *private; -+ -+ void (*open)(struct input_polled_dev *dev); -+ void (*close)(struct input_polled_dev *dev); -+ void (*poll)(struct input_polled_dev *dev); -+ unsigned int poll_interval; /* msec */ -+ unsigned int poll_interval_max; /* msec */ -+ unsigned int poll_interval_min; /* msec */ -+ -+ struct input_dev *input; -+ -+/* private: */ -+ struct delayed_work work; -+ -+ bool devres_managed; -+}; -+ -+struct input_polled_dev *input_allocate_polled_device(void); -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); -+void input_free_polled_device(struct input_polled_dev *dev); -+int input_register_polled_device(struct input_polled_dev *dev); -+void input_unregister_polled_device(struct input_polled_dev *dev); -+ -+#endif -diff -rupN linux.orig/include/linux/of_gpio.h linux/include/linux/of_gpio.h ---- linux.orig/include/linux/of_gpio.h 2024-03-24 02:53:56.716832771 +0000 -+++ linux/include/linux/of_gpio.h 2024-03-24 03:55:35.622257619 +0000 -@@ -17,8 +17,26 @@ - - struct device_node; - -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+ OF_GPIO_PULL_DISABLE = 0x40, -+}; -+ - #ifdef CONFIG_OF_GPIO - -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ - extern int of_get_named_gpio(const struct device_node *np, - const char *list_name, int index); - -@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struc - - #include - --/* Drivers may not strictly depend on the GPIO support, so let them link. */ - static inline int of_get_named_gpio(const struct device_node *np, - const char *propname, int index) - { -+ return -ENOSYS; -+} -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ - return -ENOSYS; - } - - #endif /* CONFIG_OF_GPIO */ - -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+//#endif /* CONFIG_OF_GPIO */ -+ - #endif /* __LINUX_OF_GPIO_H */ -diff -rupN linux.orig/include/linux/pwm.h linux/include/linux/pwm.h ---- linux.orig/include/linux/pwm.h 2024-03-24 02:53:56.724833028 +0000 -+++ linux/include/linux/pwm.h 2024-03-24 03:55:35.622257619 +0000 -@@ -110,6 +110,12 @@ static inline bool pwm_is_enabled(const - return state.enabled; - } - -+static inline void pwm_set_period(struct pwm_device *pwm, u64 period) -+{ -+ if (pwm) -+ pwm->state.period = period; -+} -+ - static inline u64 pwm_get_period(const struct pwm_device *pwm) - { - struct pwm_state state; diff --git a/projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch b/projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch similarity index 71% rename from projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch rename to projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch index bba58b880..a3bafab9a 100644 --- a/projects/Rockchip/patches/linux/RK3566/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch +++ b/projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch @@ -1,14 +1,125 @@ -From a2a47a8b3f3235dded76dfc1e10052d1ea8f89fc Mon Sep 17 00:00:00 2001 +From b4a8cb3cbc5c37fae116a4cf9df29cae6e4c84eb Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 24 Jan 2024 22:12:01 +0000 -Subject: [PATCH 09/44] gpiolib: of: revert api changes needed for joypad - driver +Subject: [PATCH] gpiolib: of: revert api changes needed for joypad driver --- + drivers/gpio/gpiolib-of.c | 29 ++-- + include/linux/of_gpio.h | 37 +++- include/linux/of_gpio_legacy.h | 304 +++++++++++++++++++++++++++++++++ - 2 files changed, 318 insertions(+) + 3 files changed, 354 insertions(+), 16 deletions(-) create mode 100644 include/linux/of_gpio_legacy.h +diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c +index cb0cefaec37e..9b80e32b87a6 100644 +--- a/drivers/gpio/gpiolib-of.c ++++ b/drivers/gpio/gpiolib-of.c +@@ -25,21 +25,6 @@ + #include "gpiolib.h" + #include "gpiolib-of.h" + +-/* +- * This is Linux-specific flags. By default controllers' and Linux' mapping +- * match, but GPIO controllers are free to translate their own flags to +- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. +- */ +-enum of_gpio_flags { +- OF_GPIO_ACTIVE_LOW = 0x1, +- OF_GPIO_SINGLE_ENDED = 0x2, +- OF_GPIO_OPEN_DRAIN = 0x4, +- OF_GPIO_TRANSITORY = 0x8, +- OF_GPIO_PULL_UP = 0x10, +- OF_GPIO_PULL_DOWN = 0x20, +- OF_GPIO_PULL_DISABLE = 0x40, +-}; +- + /** + * of_gpio_named_count() - Count GPIOs for a device + * @np: device node to count GPIOs for +@@ -409,6 +394,20 @@ static struct gpio_desc *of_get_named_gpiod_flags(const struct device_node *np, + return desc; + } + ++int of_get_named_gpio_flags(const struct device_node *np, const char *list_name, ++ int index, enum of_gpio_flags *flags) ++{ ++ struct gpio_desc *desc; ++ ++ desc = of_get_named_gpiod_flags(np, list_name, index, flags); ++ ++ if (IS_ERR(desc)) ++ return PTR_ERR(desc); ++ else ++ return desc_to_gpio(desc); ++} ++EXPORT_SYMBOL_GPL(of_get_named_gpio_flags); ++ + /** + * of_get_named_gpio() - Get a GPIO number to use with GPIO API + * @np: device node to get GPIO from +diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h +index d0f66a5e1b2a..5c4c7e1a307b 100644 +--- a/include/linux/of_gpio.h ++++ b/include/linux/of_gpio.h +@@ -17,8 +17,26 @@ + + struct device_node; + ++/* ++ * This is Linux-specific flags. By default controllers' and Linux' mapping ++ * match, but GPIO controllers are free to translate their own flags to ++ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. ++ */ ++enum of_gpio_flags { ++ OF_GPIO_ACTIVE_LOW = 0x1, ++ OF_GPIO_SINGLE_ENDED = 0x2, ++ OF_GPIO_OPEN_DRAIN = 0x4, ++ OF_GPIO_TRANSITORY = 0x8, ++ OF_GPIO_PULL_UP = 0x10, ++ OF_GPIO_PULL_DOWN = 0x20, ++ OF_GPIO_PULL_DISABLE = 0x40, ++}; ++ + #ifdef CONFIG_OF_GPIO + ++extern int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags); ++ + extern int of_get_named_gpio(const struct device_node *np, + const char *list_name, int index); + +@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struct device_node *np, + + #include + +-/* Drivers may not strictly depend on the GPIO support, so let them link. */ + static inline int of_get_named_gpio(const struct device_node *np, + const char *propname, int index) + { ++ return -ENOSYS; ++} ++ ++/* Drivers may not strictly depend on the GPIO support, so let them link. */ ++static inline int of_get_named_gpio_flags(const struct device_node *np, ++ const char *list_name, int index, enum of_gpio_flags *flags) ++{ ++ if (flags) ++ *flags = 0; ++ + return -ENOSYS; + } + + #endif /* CONFIG_OF_GPIO */ + ++static inline int of_get_gpio_flags(const struct device_node *np, int index, ++ enum of_gpio_flags *flags) ++{ ++ return of_get_named_gpio_flags(np, "gpios", index, flags); ++} ++ ++//#endif /* CONFIG_OF_GPIO */ ++ + #endif /* __LINUX_OF_GPIO_H */ diff --git a/include/linux/of_gpio_legacy.h b/include/linux/of_gpio_legacy.h new file mode 100644 index 000000000000..ce58afecb4f9 diff --git a/projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch b/projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch new file mode 100644 index 000000000..e97f4ce49 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch @@ -0,0 +1,485 @@ +From d03ac59196d7a5f38a03c20b1f8aeba5d5ba14a7 Mon Sep 17 00:00:00 2001 +From: brooksytech <1673861+brooksytech@users.noreply.github.com> +Date: Wed, 24 Jan 2024 21:50:05 +0000 +Subject: [PATCH] input: add input-polldev driver + +--- + drivers/input/Kconfig | 13 ++ + drivers/input/Makefile | 1 + + drivers/input/input-polldev.c | 362 ++++++++++++++++++++++++++++++++++ + include/linux/input-polldev.h | 58 ++++++ + 4 files changed, 434 insertions(+) + create mode 100644 drivers/input/input-polldev.c + create mode 100644 include/linux/input-polldev.h + +diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig +index 3bdbd34314b3..779daf5009c1 100644 +--- a/drivers/input/Kconfig ++++ b/drivers/input/Kconfig +@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS + To compile this driver as a module, choose M here: the + module will be called ff-memless. + ++config INPUT_POLLDEV ++ tristate "Polled input device skeleton" ++ help ++ Say Y here if you are using a driver for an input ++ device that periodically polls hardware state. This ++ option is only useful for out-of-tree drivers since ++ in-tree drivers select it automatically. ++ ++ If unsure, say N. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called input-polldev. ++ + config INPUT_SPARSEKMAP + tristate "Sparse keymap support library" + help +diff --git a/drivers/input/Makefile b/drivers/input/Makefile +index c78753274921..e92c29174c36 100644 +--- a/drivers/input/Makefile ++++ b/drivers/input/Makefile +@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o input-mt.o input-poller.o ff-core.o + input-core-y += touchscreen.o + + obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o ++obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o + obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o + obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o + obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o +diff --git a/drivers/input/input-polldev.c b/drivers/input/input-polldev.c +new file mode 100644 +index 000000000000..9bf1c9aeb4c4 +--- /dev/null ++++ b/drivers/input/input-polldev.c +@@ -0,0 +1,362 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++/* ++ * Generic implementation of a polled input device ++ ++ * Copyright (c) 2007 Dmitry Torokhov ++ */ ++ ++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++MODULE_AUTHOR("Dmitry Torokhov "); ++MODULE_DESCRIPTION("Generic implementation of a polled input device"); ++MODULE_LICENSE("GPL v2"); ++ ++static void input_polldev_queue_work(struct input_polled_dev *dev) ++{ ++ unsigned long delay; ++ ++ delay = msecs_to_jiffies(dev->poll_interval); ++ if (delay >= HZ) ++ delay = round_jiffies_relative(delay); ++ ++ queue_delayed_work(system_freezable_wq, &dev->work, delay); ++} ++ ++static void input_polled_device_work(struct work_struct *work) ++{ ++ struct input_polled_dev *dev = ++ container_of(work, struct input_polled_dev, work.work); ++ ++ dev->poll(dev); ++ input_polldev_queue_work(dev); ++} ++ ++static int input_open_polled_device(struct input_dev *input) ++{ ++ struct input_polled_dev *dev = input_get_drvdata(input); ++ ++ if (dev->open) ++ dev->open(dev); ++ ++ /* Only start polling if polling is enabled */ ++ if (dev->poll_interval > 0) { ++ dev->poll(dev); ++ input_polldev_queue_work(dev); ++ } ++ ++ return 0; ++} ++ ++static void input_close_polled_device(struct input_dev *input) ++{ ++ struct input_polled_dev *dev = input_get_drvdata(input); ++ ++ cancel_delayed_work_sync(&dev->work); ++ ++ if (dev->close) ++ dev->close(dev); ++} ++ ++/* SYSFS interface */ ++ ++static ssize_t input_polldev_get_poll(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct input_polled_dev *polldev = dev_get_drvdata(dev); ++ ++ return sprintf(buf, "%d\n", polldev->poll_interval); ++} ++ ++static ssize_t input_polldev_set_poll(struct device *dev, ++ struct device_attribute *attr, const char *buf, ++ size_t count) ++{ ++ struct input_polled_dev *polldev = dev_get_drvdata(dev); ++ struct input_dev *input = polldev->input; ++ unsigned int interval; ++ int err; ++ ++ err = kstrtouint(buf, 0, &interval); ++ if (err) ++ return err; ++ ++ if (interval < polldev->poll_interval_min) ++ return -EINVAL; ++ ++ if (interval > polldev->poll_interval_max) ++ return -EINVAL; ++ ++ mutex_lock(&input->mutex); ++ ++ polldev->poll_interval = interval; ++ ++ if (input->users) { ++ cancel_delayed_work_sync(&polldev->work); ++ if (polldev->poll_interval > 0) ++ input_polldev_queue_work(polldev); ++ } ++ ++ mutex_unlock(&input->mutex); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll, ++ input_polldev_set_poll); ++ ++ ++static ssize_t input_polldev_get_max(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct input_polled_dev *polldev = dev_get_drvdata(dev); ++ ++ return sprintf(buf, "%d\n", polldev->poll_interval_max); ++} ++ ++static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL); ++ ++static ssize_t input_polldev_get_min(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct input_polled_dev *polldev = dev_get_drvdata(dev); ++ ++ return sprintf(buf, "%d\n", polldev->poll_interval_min); ++} ++ ++static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL); ++ ++static struct attribute *sysfs_attrs[] = { ++ &dev_attr_poll.attr, ++ &dev_attr_max.attr, ++ &dev_attr_min.attr, ++ NULL ++}; ++ ++static struct attribute_group input_polldev_attribute_group = { ++ .attrs = sysfs_attrs ++}; ++ ++static const struct attribute_group *input_polldev_attribute_groups[] = { ++ &input_polldev_attribute_group, ++ NULL ++}; ++ ++/** ++ * input_allocate_polled_device - allocate memory for polled device ++ * ++ * The function allocates memory for a polled device and also ++ * for an input device associated with this polled device. ++ */ ++struct input_polled_dev *input_allocate_polled_device(void) ++{ ++ struct input_polled_dev *dev; ++ ++ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); ++ if (!dev) ++ return NULL; ++ ++ dev->input = input_allocate_device(); ++ if (!dev->input) { ++ kfree(dev); ++ return NULL; ++ } ++ ++ return dev; ++} ++EXPORT_SYMBOL(input_allocate_polled_device); ++ ++struct input_polled_devres { ++ struct input_polled_dev *polldev; ++}; ++ ++static int devm_input_polldev_match(struct device *dev, void *res, void *data) ++{ ++ struct input_polled_devres *devres = res; ++ ++ return devres->polldev == data; ++} ++ ++static void devm_input_polldev_release(struct device *dev, void *res) ++{ ++ struct input_polled_devres *devres = res; ++ struct input_polled_dev *polldev = devres->polldev; ++ ++ dev_dbg(dev, "%s: dropping reference/freeing %s\n", ++ __func__, dev_name(&polldev->input->dev)); ++ ++ input_put_device(polldev->input); ++ kfree(polldev); ++} ++ ++static void devm_input_polldev_unregister(struct device *dev, void *res) ++{ ++ struct input_polled_devres *devres = res; ++ struct input_polled_dev *polldev = devres->polldev; ++ ++ dev_dbg(dev, "%s: unregistering device %s\n", ++ __func__, dev_name(&polldev->input->dev)); ++ input_unregister_device(polldev->input); ++ ++ /* ++ * Note that we are still holding extra reference to the input ++ * device so it will stick around until devm_input_polldev_release() ++ * is called. ++ */ ++} ++ ++/** ++ * devm_input_allocate_polled_device - allocate managed polled device ++ * @dev: device owning the polled device being created ++ * ++ * Returns prepared &struct input_polled_dev or %NULL. ++ * ++ * Managed polled input devices do not need to be explicitly unregistered ++ * or freed as it will be done automatically when owner device unbinds ++ * from * its driver (or binding fails). Once such managed polled device ++ * is allocated, it is ready to be set up and registered in the same ++ * fashion as regular polled input devices (using ++ * input_register_polled_device() function). ++ * ++ * If you want to manually unregister and free such managed polled devices, ++ * it can be still done by calling input_unregister_polled_device() and ++ * input_free_polled_device(), although it is rarely needed. ++ * ++ * NOTE: the owner device is set up as parent of input device and users ++ * should not override it. ++ */ ++struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) ++{ ++ struct input_polled_dev *polldev; ++ struct input_polled_devres *devres; ++ ++ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres), ++ GFP_KERNEL); ++ if (!devres) ++ return NULL; ++ ++ polldev = input_allocate_polled_device(); ++ if (!polldev) { ++ devres_free(devres); ++ return NULL; ++ } ++ ++ polldev->input->dev.parent = dev; ++ polldev->devres_managed = true; ++ ++ devres->polldev = polldev; ++ devres_add(dev, devres); ++ ++ return polldev; ++} ++EXPORT_SYMBOL(devm_input_allocate_polled_device); ++ ++/** ++ * input_free_polled_device - free memory allocated for polled device ++ * @dev: device to free ++ * ++ * The function frees memory allocated for polling device and drops ++ * reference to the associated input device. ++ */ ++void input_free_polled_device(struct input_polled_dev *dev) ++{ ++ if (dev) { ++ if (dev->devres_managed) ++ WARN_ON(devres_destroy(dev->input->dev.parent, ++ devm_input_polldev_release, ++ devm_input_polldev_match, ++ dev)); ++ input_put_device(dev->input); ++ kfree(dev); ++ } ++} ++EXPORT_SYMBOL(input_free_polled_device); ++ ++/** ++ * input_register_polled_device - register polled device ++ * @dev: device to register ++ * ++ * The function registers previously initialized polled input device ++ * with input layer. The device should be allocated with call to ++ * input_allocate_polled_device(). Callers should also set up poll() ++ * method and set up capabilities (id, name, phys, bits) of the ++ * corresponding input_dev structure. ++ */ ++int input_register_polled_device(struct input_polled_dev *dev) ++{ ++ struct input_polled_devres *devres = NULL; ++ struct input_dev *input = dev->input; ++ int error; ++ ++ if (dev->devres_managed) { ++ devres = devres_alloc(devm_input_polldev_unregister, ++ sizeof(*devres), GFP_KERNEL); ++ if (!devres) ++ return -ENOMEM; ++ ++ devres->polldev = dev; ++ } ++ ++ input_set_drvdata(input, dev); ++ INIT_DELAYED_WORK(&dev->work, input_polled_device_work); ++ ++ if (!dev->poll_interval) ++ dev->poll_interval = 500; ++ if (!dev->poll_interval_max) ++ dev->poll_interval_max = dev->poll_interval; ++ ++ input->open = input_open_polled_device; ++ input->close = input_close_polled_device; ++ ++ input->dev.groups = input_polldev_attribute_groups; ++ ++ error = input_register_device(input); ++ if (error) { ++ devres_free(devres); ++ return error; ++ } ++ ++ /* ++ * Take extra reference to the underlying input device so ++ * that it survives call to input_unregister_polled_device() ++ * and is deleted only after input_free_polled_device() ++ * has been invoked. This is needed to ease task of freeing ++ * sparse keymaps. ++ */ ++ input_get_device(input); ++ ++ if (dev->devres_managed) { ++ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", ++ __func__, dev_name(&input->dev)); ++ devres_add(input->dev.parent, devres); ++ } ++ ++ return 0; ++} ++EXPORT_SYMBOL(input_register_polled_device); ++ ++/** ++ * input_unregister_polled_device - unregister polled device ++ * @dev: device to unregister ++ * ++ * The function unregisters previously registered polled input ++ * device from input layer. Polling is stopped and device is ++ * ready to be freed with call to input_free_polled_device(). ++ */ ++void input_unregister_polled_device(struct input_polled_dev *dev) ++{ ++ if (dev->devres_managed) ++ WARN_ON(devres_destroy(dev->input->dev.parent, ++ devm_input_polldev_unregister, ++ devm_input_polldev_match, ++ dev)); ++ ++ input_unregister_device(dev->input); ++} ++EXPORT_SYMBOL(input_unregister_polled_device); +diff --git a/include/linux/input-polldev.h b/include/linux/input-polldev.h +new file mode 100644 +index 000000000000..14821fd231c0 +--- /dev/null ++++ b/include/linux/input-polldev.h +@@ -0,0 +1,58 @@ ++/* SPDX-License-Identifier: GPL-2.0-only */ ++#ifndef _INPUT_POLLDEV_H ++#define _INPUT_POLLDEV_H ++ ++/* ++ * Copyright (c) 2007 Dmitry Torokhov ++ */ ++ ++#include ++#include ++ ++/** ++ * struct input_polled_dev - simple polled input device ++ * @private: private driver data. ++ * @open: driver-supplied method that prepares device for polling ++ * (enabled the device and maybe flushes device state). ++ * @close: driver-supplied method that is called when device is no ++ * longer being polled. Used to put device into low power mode. ++ * @poll: driver-supplied method that polls the device and posts ++ * input events (mandatory). ++ * @poll_interval: specifies how often the poll() method should be called. ++ * Defaults to 500 msec unless overridden when registering the device. ++ * @poll_interval_max: specifies upper bound for the poll interval. ++ * Defaults to the initial value of @poll_interval. ++ * @poll_interval_min: specifies lower bound for the poll interval. ++ * Defaults to 0. ++ * @input: input device structure associated with the polled device. ++ * Must be properly initialized by the driver (id, name, phys, bits). ++ * ++ * Polled input device provides a skeleton for supporting simple input ++ * devices that do not raise interrupts but have to be periodically ++ * scanned or polled to detect changes in their state. ++ */ ++struct input_polled_dev { ++ void *private; ++ ++ void (*open)(struct input_polled_dev *dev); ++ void (*close)(struct input_polled_dev *dev); ++ void (*poll)(struct input_polled_dev *dev); ++ unsigned int poll_interval; /* msec */ ++ unsigned int poll_interval_max; /* msec */ ++ unsigned int poll_interval_min; /* msec */ ++ ++ struct input_dev *input; ++ ++/* private: */ ++ struct delayed_work work; ++ ++ bool devres_managed; ++}; ++ ++struct input_polled_dev *input_allocate_polled_device(void); ++struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); ++void input_free_polled_device(struct input_polled_dev *dev); ++int input_register_polled_device(struct input_polled_dev *dev); ++void input_unregister_polled_device(struct input_polled_dev *dev); ++ ++#endif +-- +2.34.1 + From 6dcf143c36b79ea3fbb30319d982a871d521941e Mon Sep 17 00:00:00 2001 From: AnanJaser Date: Sun, 28 Apr 2024 17:11:40 +0400 Subject: [PATCH 111/184] RK3566: ppsspp: update mappings * Swap Circle and cross to be proper * Map Save and load states * LOAD : L2 * SAVE : R2 --- .../standalone/ppsspp-sa/sources/RK3566/controls.ini | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/emulators/standalone/ppsspp-sa/sources/RK3566/controls.ini b/packages/emulators/standalone/ppsspp-sa/sources/RK3566/controls.ini index 1215c4917..aedbae2cf 100644 --- a/packages/emulators/standalone/ppsspp-sa/sources/RK3566/controls.ini +++ b/packages/emulators/standalone/ppsspp-sa/sources/RK3566/controls.ini @@ -3,8 +3,8 @@ Up = 10-19 Down = 10-20 Left = 10-21 Right = 10-22 -Circle = 10-189 -Cross = 10-190 +Circle = 10-190 +Cross = 10-189 Square = 10-188 Triangle = 10-191 Start = 10-197 @@ -16,3 +16,5 @@ An.Down = 10-4002 An.Left = 10-4001 An.Right = 10-4000 Pause = 10-4,10-106 +Save State = 10-4010 +Load State = 10-4008 From 018b593be7c8057e7628fbe2da303f98e3ebe5cd Mon Sep 17 00:00:00 2001 From: sydarn Date: Sun, 28 Apr 2024 17:40:05 +0200 Subject: [PATCH 112/184] Bump emulationstation --- .../RK3566/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- packages/ui/emulationstation/package.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md index 8911cb0dd..267aae826 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3566/SUPPORTED_EMULATORS_AND_CORES.md @@ -96,7 +96,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021 (default)
**retroarch:** flycast
**flycast:** flycast-sa
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index e87f4d43c..506d83742 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="emulationstation" -PKG_VERSION="bc96b151c43f5b2604bb46f9273cbff9311c2aeb" +PKG_VERSION="742faf58fcdb6751c1bf1b4f056df58bae950866" PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From 0e05b0745401ded0f7b5e22f782bfe56fe3f6ff2 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 28 Apr 2024 16:30:55 +0100 Subject: [PATCH 113/184] kernel-firmware: fix firmware/config for rtl8723ds bluetooth --- .../extra-firmware/rtl_bt/rtl8723ds_config.bin | Bin 0 -> 47 bytes .../extra-firmware/rtl_bt/rtl8723ds_fw.bin | Bin 0 -> 48988 bytes .../kernel/firmware/kernel-firmware/package.mk | 7 ------- 3 files changed, 7 deletions(-) create mode 100644 packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_config.bin create mode 100644 packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_fw.bin diff --git a/packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_config.bin b/packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_config.bin new file mode 100644 index 0000000000000000000000000000000000000000..a08fa3a9f8f6cbab10ad4584a36703336168df07 GIT binary patch literal 47 zcmWGtt=z83@P&bq@f!nEBf~ESCZPr%1_7pqNh|?JUr9cc{<}V&aS8WL21foT42&EA DU1<)g literal 0 HcmV?d00001 diff --git a/packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_fw.bin b/packages/kernel/firmware/kernel-firmware/extra-firmware/rtl_bt/rtl8723ds_fw.bin new file mode 100644 index 0000000000000000000000000000000000000000..4c323a3d92dcd21e0481492819c656b9d4996b90 GIT binary patch literal 48988 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 literal 0 HcmV?d00001 diff --git a/packages/kernel/firmware/kernel-firmware/package.mk b/packages/kernel/firmware/kernel-firmware/package.mk index dae1d9179..d261f88c8 100644 --- a/packages/kernel/firmware/kernel-firmware/package.mk +++ b/packages/kernel/firmware/kernel-firmware/package.mk @@ -77,13 +77,6 @@ makeinstall_target() { ln -s "rtl8723bs_config-OBDA8723.bin" "${FW_TARGET_DIR}/rtl_bt/rtl8723bs_config.bin" fi - # Upstream doesn't name the files correctly so we need to symlink it - if [ -f "${FW_TARGET_DIR}/rtl_bt/rtl8723d_fw.bin" ]; then - ln -s "rtl8723d_fw.bin" "${FW_TARGET_DIR}/rtl_bt/rtl8723ds_fw.bin" - fi - if [ -f "${FW_TARGET_DIR}/rtl_bt/rtl8723d_config.bin" ]; then - ln -s "rtl8723d_config.bin" "${FW_TARGET_DIR}/rtl_bt/rtl8723ds_config.bin" - fi # The BSP kernel for RK3588 reformats the vendor firmware path for Realtek BT devices, # so symlink the firmware. if [ ${DEVICE} = "RK3588" ]; then From 6be5f3e2831ec2dd219d3c7aa764bf215b0e5216 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:55:15 +0000 Subject: [PATCH 114/184] Bump kernel, bump mesa, bump box86 --- packages/compat/box86/package.mk | 4 ++-- packages/graphics/mesa/package.mk | 4 ++-- packages/kernel/linux/package.mk | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index ae9e4e279..da737aa09 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -2,8 +2,8 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box86" -PKG_VERSION="22ee4685a18981983eb6c0031da37a8ca2b87b1f" -PKG_ARCH="arm aarch64" +PKG_VERSION="24f2c68805b3547524cfa7c0525c13f12f363ed4" +PKG_ARCH="arm" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" PKG_URL="${PKG_SITE}.git" diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index 36d4200f5..99a1f7d43 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -22,14 +22,14 @@ case ${DEVICE} in PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" else #Using upstream dev for panfrost - PKG_VERSION="acf1c7dc7377f33ff416f3c52b0be2b73a4867ad" + PKG_VERSION="0b518681938c9eeb9133972a66a91fc4ff6cf2a1" PKG_SITE="https://gitlab.freedesktop.org/mesa/mesa" PKG_URL="${PKG_SITE}.git" PKG_PATCH_DIRS+=" panfrost" fi ;; *) - PKG_VERSION="24.0.5" + PKG_VERSION="24.0.6" PKG_SITE="http://www.mesa3d.org/" PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" ;; diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 448507e48..9d30ab213 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -29,7 +29,7 @@ case ${DEVICE} in PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; *) - PKG_VERSION="6.8.7" + PKG_VERSION="6.8.8" PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" ;; esac From 49035fad35aa881b8e212f5548e31875be799889 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 29 Apr 2024 16:20:23 +0100 Subject: [PATCH 115/184] Rockchip: add RGB20SX --- .../hardware/quirks/devices/Powkiddy RGB20SX | 1 + projects/Rockchip/devices/RK3566/options | 2 +- ...gb30r2.patch => 030-rgb20sx-rgb30r2.patch} | 47 ++++++++++++++++--- 3 files changed, 43 insertions(+), 7 deletions(-) create mode 120000 packages/hardware/quirks/devices/Powkiddy RGB20SX rename projects/Rockchip/patches/linux/RK3566/{030-rgb30r2.patch => 030-rgb20sx-rgb30r2.patch} (53%) diff --git a/packages/hardware/quirks/devices/Powkiddy RGB20SX b/packages/hardware/quirks/devices/Powkiddy RGB20SX new file mode 120000 index 000000000..637202431 --- /dev/null +++ b/packages/hardware/quirks/devices/Powkiddy RGB20SX @@ -0,0 +1 @@ +Powkiddy RGB30 \ No newline at end of file diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 00058e645..673b73735 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -32,7 +32,7 @@ PARTITION_TABLE="gpt" UBOOT_LABEL="uboot" TRUST_LABEL="trust" - DEVICE_DTB=("rk3566-anbernic-rg353ps" "rk3566-anbernic-rg353vs" "rk3566-anbernic-rg503" "rk3566-anbernic-rg353p" "rk3566-anbernic-rg353v" "rk3566-powkiddy-rk2023" "rk3566-powkiddy-rgb30" "rk3566-powkiddy-rgb10max3" "rk3566-powkiddy-rgb30r2" "rk3566-anbernic-rg-arc-d" "rk3566-anbernic-rg-arc-s") + DEVICE_DTB=("rk3566-anbernic-rg353ps" "rk3566-anbernic-rg353vs" "rk3566-anbernic-rg503" "rk3566-anbernic-rg353p" "rk3566-anbernic-rg353v" "rk3566-powkiddy-rk2023" "rk3566-powkiddy-rgb20sx" "rk3566-powkiddy-rgb30" "rk3566-powkiddy-rgb10max3" "rk3566-powkiddy-rgb30r2" "rk3566-anbernic-rg-arc-d" "rk3566-anbernic-rg-arc-s") UBOOT_DTB="rk3566" UBOOT_CONFIG="anbernic-rgxx3-rk3566_defconfig" PKG_SOC="rk3568" diff --git a/projects/Rockchip/patches/linux/RK3566/030-rgb30r2.patch b/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch similarity index 53% rename from projects/Rockchip/patches/linux/RK3566/030-rgb30r2.patch rename to projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch index 84ac76ce4..d85c0143c 100644 --- a/projects/Rockchip/patches/linux/RK3566/030-rgb30r2.patch +++ b/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch @@ -1,28 +1,63 @@ diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile -index f906a868b71a..bc30125a6764 100644 +index f906a868b71a..cd52131ba4eb 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile -@@ -84,6 +84,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinetab2-v0.1.dtb +@@ -83,7 +83,9 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinenote-v1.2.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinetab2-v0.1.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinetab2-v2.0.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb10max3.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb20sx.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb30.dtb +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb30r2.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rk2023.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-x55.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-quartz64-a.dtb +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb20sx.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb20sx.dts +new file mode 100644 +index 000000000000..de15c721e17f +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb20sx.dts +@@ -0,0 +1,27 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2024 ROCKNIX (https://github.com/ROCKNIX) ++ */ ++ ++/dts-v1/; ++ ++#include "rk3566-powkiddy-rgb30r2.dts" ++ ++/ { ++ compatible = "powkiddy,rgb20sx", "rockchip,rk3566"; ++ model = "Powkiddy RGB20SX"; ++ ++ adc_keys: adc-keys { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 0>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ poll-interval = <60>; ++ ++ button-mode { ++ label = "MODE"; ++ linux,code = ; ++ press-threshold-microvolt = <1750>; ++ }; ++ }; ++}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts new file mode 100644 -index 000000000000..f584474b3eb6 +index 000000000000..4487624474d7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2024 ROCKNIX (https://github.com/ROCKNIX) ++ */ + +/dts-v1/; + -+#include -+#include -+#include +#include "rk3566-powkiddy-rgb30.dts" + +/delete-node/ &vdd_cpu; From 93fcc033243a658e2a7cefa59486016f6eb33936 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 29 Apr 2024 17:51:03 +0100 Subject: [PATCH 116/184] Rockchip: don't replace FDT with FDTDIR in extlinux.conf for Powkiddy RGB20SX and RGB30r2 --- projects/Rockchip/bootloader/update.sh | 8 ++++++++ .../patches/linux/RK3566/030-rgb20sx-rgb30r2.patch | 8 ++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/projects/Rockchip/bootloader/update.sh b/projects/Rockchip/bootloader/update.sh index cfb254909..279db4eeb 100755 --- a/projects/Rockchip/bootloader/update.sh +++ b/projects/Rockchip/bootloader/update.sh @@ -37,6 +37,14 @@ if [ -f $BOOT_ROOT/extlinux/extlinux.conf ]; then DT_ID=$($SYSTEM_ROOT/usr/bin/dtname) if [ -n "${DT_ID}" ]; then case ${DT_ID} in + *powkiddy,rgb20sx) + echo "Setting boot FDT to Powkiddy RGB20SX..." + sed -i '/FDT/c\ FDT /rk3566-powkiddy-rgb20sx.dtb' $BOOT_ROOT/extlinux/extlinux.conf + ;; + *powkiddy,rgb30r2) + echo "Setting boot FDT to Powkiddy RGB30 rev.2..." + sed -i '/FDT/c\ FDT /rk3566-powkiddy-rgb30r2.dtb' $BOOT_ROOT/extlinux/extlinux.conf + ;; *gameforce,ace) echo "Setting boot FDT to GameForce Ace..." sed -i '/FDT/c\ FDT /rk3588s-gameforce-ace.dtb' $BOOT_ROOT/extlinux/extlinux.conf diff --git a/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch b/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch index d85c0143c..cf663c085 100644 --- a/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch +++ b/projects/Rockchip/patches/linux/RK3566/030-rgb20sx-rgb30r2.patch @@ -47,10 +47,10 @@ index 000000000000..de15c721e17f +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts new file mode 100644 -index 000000000000..4487624474d7 +index 000000000000..e2a725188c75 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30r2.dts -@@ -0,0 +1,28 @@ +@@ -0,0 +1,32 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2024 ROCKNIX (https://github.com/ROCKNIX) @@ -60,6 +60,10 @@ index 000000000000..4487624474d7 + +#include "rk3566-powkiddy-rgb30.dts" + ++/ { ++ compatible = "powkiddy,rgb30r2", "rockchip,rk3566"; ++}; ++ +/delete-node/ &vdd_cpu; + +&i2c0 { From 5f58c57460752736a8729ebb19dc87be169488e1 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:25:14 +0000 Subject: [PATCH 117/184] RK3399: use GPT partition tables --- projects/Rockchip/devices/RK3399/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Rockchip/devices/RK3399/options b/projects/Rockchip/devices/RK3399/options index a33d4ebbb..d283cb133 100644 --- a/projects/Rockchip/devices/RK3399/options +++ b/projects/Rockchip/devices/RK3399/options @@ -29,7 +29,7 @@ DEVICE_NAME="RK3399" KERNEL_TARGET="Image" BOOTLOADER="u-boot" - PARTITION_TABLE="msdos" + PARTITION_TABLE="gpt" DEVICE_DTB=("rk3399-anbernic-rg552") UBOOT_DTB="${DEVICE_DTB[0]}" UBOOT_FIT_IMAGE="rk3399-uboot.bin" From b592ad508cb5e3ed62bb2e14d3c1aa87b01078f4 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 26 Apr 2024 14:51:45 +0300 Subject: [PATCH 118/184] 32bit: build meson pkgs with libdir=/usr/lib32 --- packages/compat/lib32/package.mk | 7 +++---- packages/graphics/mesa/package.mk | 26 -------------------------- scripts/build | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 32 deletions(-) diff --git a/packages/compat/lib32/package.mk b/packages/compat/lib32/package.mk index d9aa1c81c..83a5bf391 100644 --- a/packages/compat/lib32/package.mk +++ b/packages/compat/lib32/package.mk @@ -27,6 +27,7 @@ makeinstall_target() { LIBROOT="${ROOT}/build.${DISTRO}-${DEVICE}.${LIBARCH}/image/system/" mkdir -p ${INSTALL}/usr/lib32 rsync -al ${LIBROOT}/usr/lib/* ${INSTALL}/usr/lib32 >/dev/null 2>&1 + rsync -al ${LIBROOT}/usr/lib32/* ${INSTALL}/usr/lib32 >/dev/null 2>&1 chmod -f 0755 ${INSTALL}/usr/lib32/* || : mkdir -p ${INSTALL}/usr/lib ln -s /usr/lib32/${LDSO} ${INSTALL}/usr/lib/${LDSO} @@ -35,8 +36,6 @@ makeinstall_target() { echo "/usr/lib32" > "${INSTALL}/etc/ld.so.conf.d/${LIBARCH}-lib32.conf" echo "/usr/lib32/pulseaudio" >"${INSTALL}/etc/ld.so.conf.d/${LIBARCH}-lib32-pulseaudio.conf" - if [ -d "${LIBROOT}/usr/lib/dri" ] - then - echo "/usr/lib32/dri" >"${INSTALL}/etc/ld.so.conf.d/${LIBARCH}-lib32-dri.conf" - fi + mkdir -p ${INSTALL}/usr/bin + cp ${LIBROOT}/usr/bin/ldd ${INSTALL}/usr/bin/ldd32 } diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index 36d4200f5..fc29d7ba2 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -37,29 +37,6 @@ esac get_graphicdrivers -# For lib32 build Mesa needs some tweaks -# * scripts/build sets --libdir=/usr/lib -# * lib32 package moves /usr/lib into /usr/lib32 -# * in running system /usr/lib is 64-bit -# * mesa loader looks for drivers in ${libdir}/{dri,gbm} etc. -# * 32-bit mesa fails to load 64-bit drivers -# -# This may be worked around by setting LIBGL_DRIVERS_PATH=/usr/lib32/dri -# but that needs careful editing of run scripts -# -# Just setting --libdir=/usr/lib32 in scripts/build fails because libtool wants exactly /usr/lib -# -# So, for 32-bit build we set a bunch of options normally derived from libdir -# This hopefully will be not needed if libtool accepts lib32 (libtool-multilib?) -case ${ARCH} in - arm|i686) - MESA_LIBS_PATH_OPTS=" -Ddri-drivers-path=/usr/lib32/dri -Dgbm-backends-path=/usr/lib32/gbm -Dd3d-drivers-path=/usr/lib32/d3d " - ;; - *) - MESA_LIBS_PATH_OPTS="" - ;; -esac - PKG_MESON_OPTS_TARGET=" ${MESA_LIBS_PATH_OPTS} \ -Dgallium-drivers=${GALLIUM_DRIVERS// /,} \ -Dgallium-extra-hud=false \ @@ -136,9 +113,6 @@ else fi post_makeinstall_target() { - if [ -d "${INSTALL}/usr/lib32/dri" ]; then - mv "${INSTALL}/usr/lib32"/* "${INSTALL}/usr/lib/" - fi if [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ]; then rm -f ${INSTALL}/usr/lib/libvulkan_panfrost.so ${INSTALL}/usr/share/vulkan/icd.d/panfrost_icd.aarch64.json fi diff --git a/scripts/build b/scripts/build index 257d7cc1c..18d83affe 100755 --- a/scripts/build +++ b/scripts/build @@ -160,12 +160,20 @@ TARGET_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CONF} \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" +case ${ARCH} in + arm|i686) + BUILD_OPTS_TARGET_LIBDIR=/usr/lib32 + ;; + *) + BUILD_OPTS_TARGET_LIBDIR=/usr/lib + ;; +esac TARGET_MESON_OPTS="--prefix=/usr \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --sysconfdir=/etc \ - --libdir=/usr/lib \ - --libexecdir=/usr/lib \ + --libdir=${BUILD_OPTS_TARGET_LIBDIR} \ + --libexecdir=${BUILD_OPTS_TARGET_LIBDIR} \ --localstatedir=/var \ --buildtype=${MESON_BUILD_TYPE}" if [ ${BUILD_WITH_DEBUG} != yes ] && flag_enabled "strip" "yes"; then @@ -412,6 +420,10 @@ rm -rf "${SYSROOT_PREFIX}" for d in /usr/lib /usr/include /usr/bin /usr/lib/pkgconfig; do mkdir -p "${SYSROOT_PREFIX}${d}" done +# symlink lib32 -> lib to make 32-bit apps agnostic of dependencies' libdir +if [ ! -d "${SYSROOT_PREFIX}${BUILD_OPTS_TARGET_LIBDIR}" ]; then + ln -s lib "${SYSROOT_PREFIX}${BUILD_OPTS_TARGET_LIBDIR}" +fi # make install pkg_call_exists pre_makeinstall_${TARGET} && pkg_call pre_makeinstall_${TARGET} From 011b8f65f4048822f86730abcf31622b1bca128e Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 26 Apr 2024 14:53:06 +0300 Subject: [PATCH 119/184] remove lib32 env hacks --- packages/compat/box86/profile.d/098-box86.conf | 1 - packages/misc/modules/sources/Start 32bit Retroarch.sh | 1 - packages/rocknix/sources/scripts/runemu.sh | 5 ----- 3 files changed, 7 deletions(-) diff --git a/packages/compat/box86/profile.d/098-box86.conf b/packages/compat/box86/profile.d/098-box86.conf index 1750de049..c05048183 100644 --- a/packages/compat/box86/profile.d/098-box86.conf +++ b/packages/compat/box86/profile.d/098-box86.conf @@ -6,4 +6,3 @@ export BOX86_PREFER_WRAPPED=1 export BOX86_LD_LIBRARY_PATH="/usr/share/box86/lib" export BOX86_BASH="/usr/bin/bash-x86" export BOX86_LOG=0 -alias box86='LD_LIBRARY_PATH=/usr/lib32:/usr/lib32/gles:/usr/lib32/d3d /usr/bin/box86' diff --git a/packages/misc/modules/sources/Start 32bit Retroarch.sh b/packages/misc/modules/sources/Start 32bit Retroarch.sh index 6476f17b6..d9943c381 100755 --- a/packages/misc/modules/sources/Start 32bit Retroarch.sh +++ b/packages/misc/modules/sources/Start 32bit Retroarch.sh @@ -6,5 +6,4 @@ source /etc/profile set_kill set "retroarch32" -export LIBGL_DRIVERS_PATH="/usr/lib32/dri" /usr/bin/retroarch32 --appendconfig /usr/config/retroarch/retroarch32bit-append.cfg diff --git a/packages/rocknix/sources/scripts/runemu.sh b/packages/rocknix/sources/scripts/runemu.sh index 2c9ff7e8d..c509b2678 100755 --- a/packages/rocknix/sources/scripts/runemu.sh +++ b/packages/rocknix/sources/scripts/runemu.sh @@ -186,11 +186,6 @@ case ${EMULATOR} in then ### Configure for 32bit Retroarch ${VERBOSE} && log $0 "Configuring for 32bit cores." - export LIBRARY_PATH="/usr/lib32" - export LD_LIBRARY_PATH="${LIBRARY_PATH}" - export SPA_PLUGIN_DIR="${LIBRARY_PATH}/spa-0.2" - export PIPEWIRE_MODULE_DIR="${LIBRARY_PATH}/pipewire-0.3/" - export LIBGL_DRIVERS_PATH="${LIBRARY_PATH}/dri" export RABIN="retroarch32" fi ;; From 9ea0ebf39d8ab1051c9eb94610a2df73cb6320ca Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 26 Apr 2024 16:23:39 +0300 Subject: [PATCH 120/184] pulseaudio: remove /etc/ld.so.conf.d hack --- packages/audio/pulseaudio/package.mk | 6 ++++-- packages/compat/lib32/package.mk | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/audio/pulseaudio/package.mk b/packages/audio/pulseaudio/package.mk index b3005ab5c..738045dc5 100644 --- a/packages/audio/pulseaudio/package.mk +++ b/packages/audio/pulseaudio/package.mk @@ -78,8 +78,10 @@ post_makeinstall_target() { cp ${PKG_DIR}/config/system.pa ${INSTALL}/etc/pulse/ - mkdir -p ${INSTALL}/etc/ld.so.conf.d - echo "/usr/lib/pulseaudio" >${INSTALL}/etc/ld.so.conf.d/${ARCH}-lib-pulseaudio.conf + # Sometimes apps cannot load `libpulsecommon`. It is located in ${libdir}/pulseaudio and is not intended to be loaded directly. + # Application loads `libpulse.so.0`, `libpulse` has `libpulsecommon` as a dep and RPATH set to ${libdir}/pulseaudio + # So, if there is error loading `libpulsecommon`, check RPATH of `libpulse` and `libpulse-simple` + # Adding pulseaudio subdir to `/etc/ld.so.conf.d/*.conf` may be a working hack for that, but please check/fix RPATH first } # Deprecated by pipewire diff --git a/packages/compat/lib32/package.mk b/packages/compat/lib32/package.mk index 83a5bf391..26655371e 100644 --- a/packages/compat/lib32/package.mk +++ b/packages/compat/lib32/package.mk @@ -34,7 +34,6 @@ makeinstall_target() { mkdir -p "${INSTALL}/etc/ld.so.conf.d" echo "/usr/lib32" > "${INSTALL}/etc/ld.so.conf.d/${LIBARCH}-lib32.conf" - echo "/usr/lib32/pulseaudio" >"${INSTALL}/etc/ld.so.conf.d/${LIBARCH}-lib32-pulseaudio.conf" mkdir -p ${INSTALL}/usr/bin cp ${LIBROOT}/usr/bin/ldd ${INSTALL}/usr/bin/ldd32 From b8902fe25976ce5487a07540fb7111c91d94753c Mon Sep 17 00:00:00 2001 From: sydarn Date: Mon, 29 Apr 2024 22:57:37 +0200 Subject: [PATCH 121/184] Arc better panel timings * Request 26000kHz, but actually recieve 25600kHz as before. this to get around choppiness issue. Again weird "clock" behavior, albeit different than rgb30. * More visible rows, thogh 1 is still missing but noticeble better than before. * 59.96Hz refresh rate. --- .../RK3326/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../patches/linux/RK3566/034-arc-panel.patch | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 projects/Rockchip/patches/linux/RK3566/034-arc-panel.patch diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md index a6e75165c..f502ed733 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3326/SUPPORTED_EMULATORS_AND_CORES.md @@ -96,7 +96,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021
**flycast:** flycast-sa
**retroarch:** flycast (default)
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| diff --git a/projects/Rockchip/patches/linux/RK3566/034-arc-panel.patch b/projects/Rockchip/patches/linux/RK3566/034-arc-panel.patch new file mode 100644 index 000000000..e1feaa3b4 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/034-arc-panel.patch @@ -0,0 +1,26 @@ +diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7701.c b/drivers/gpu/drm/panel/panel-sitronix-st7701.c +index 421eb4592b61..334135b73873 100644 +--- a/drivers/gpu/drm/panel/panel-sitronix-st7701.c ++++ b/drivers/gpu/drm/panel/panel-sitronix-st7701.c +@@ -876,7 +876,7 @@ static const struct st7701_panel_desc kd50t048a_desc = { + }; + + static const struct drm_display_mode rg_arc_mode = { +- .clock = 25600, ++ .clock = 26000, + + .hdisplay = 480, + .hsync_start = 480 + 60, +@@ -884,9 +884,9 @@ static const struct drm_display_mode rg_arc_mode = { + .htotal = 480 + 60 + 42 + 60, + + .vdisplay = 640, +- .vsync_start = 640 + 10, +- .vsync_end = 640 + 10 + 4, +- .vtotal = 640 + 10 + 4 + 16, ++ .vsync_start = 640 + 8, ++ .vsync_end = 640 + 8 + 4, ++ .vtotal = 640 + 8 + 4 + 13, + + .width_mm = 63, + .height_mm = 84, From 182ab6e2c4587833919d9e6cced9aecebfecb54f Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:00:46 +0000 Subject: [PATCH 122/184] RK3399: Prevent input driver from spamming dmesg log --- .../RK3399/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../patches/linux/RK3399/003-singleadc-joypad.patch | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md index 901a11816..1c48ff606 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3399/SUPPORTED_EMULATORS_AND_CORES.md @@ -98,7 +98,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021
**flycast:** flycast-sa
**retroarch:** flycast (default)
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| diff --git a/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch b/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch index ad06c2f48..92b53c462 100644 --- a/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch +++ b/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch @@ -1309,8 +1309,8 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + continue; + } + adc->cal = adc->value; -+ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ __func__, nbtn, adc->cal); ++ //dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", ++ // __func__, nbtn, adc->cal); + } + /* buttons status sync */ + joypad_adc_check(poll_dev); @@ -1321,7 +1321,7 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + joypad->enable = true; + mutex_unlock(&joypad->lock); + -+ dev_info(joypad->dev, "%s : opened\n", __func__); ++ //dev_info(joypad->dev, "%s : opened\n", __func__); +} + +/*----------------------------------------------------------------------------*/ @@ -1337,7 +1337,7 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + cancel_work_sync(&joypad->play_work); + pwm_vibrator_stop(joypad); + -+ dev_info(joypad->dev, "%s : closed\n", __func__); ++ //dev_info(joypad->dev, "%s : closed\n", __func__); +} + +/*----------------------------------------------------------------------------*/ From de0a64d8dcd05041a0c21a83357a34409f886b9a Mon Sep 17 00:00:00 2001 From: spycat88 Date: Tue, 30 Apr 2024 15:07:04 +0100 Subject: [PATCH 123/184] libmali-vulkan: bump to r47p0-01eac0 --- packages/graphics/libmali-vulkan/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/libmali-vulkan/package.mk b/packages/graphics/libmali-vulkan/package.mk index fe4911305..3ecfb39e5 100644 --- a/packages/graphics/libmali-vulkan/package.mk +++ b/packages/graphics/libmali-vulkan/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="libmali-vulkan" -PKG_VERSION="r46p0-01eac1" +PKG_VERSION="r47p0-01eac0" PKG_LICENSE="mali_driver" PKG_ARCH="arm aarch64" PKG_SITE="https://developer.arm.com/downloads/-/mali-drivers/user-space" From a475ff0c323a33a7ca851d60eef4e221863a3cb6 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Tue, 30 Apr 2024 15:35:15 +0100 Subject: [PATCH 124/184] quirks: detect RGB30r2 and set correct device tree --- .../quirks/devices/Powkiddy RGB30/001-detect-device | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device diff --git a/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device b/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device new file mode 100755 index 000000000..d7aa268c7 --- /dev/null +++ b/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device @@ -0,0 +1,9 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +if [ ! -f "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors" ]; then + mount -o rw,remount /flash + sed -i "/FDT/c\ FDT /rk3566-powkiddy-rgb30r2.dtb" /flash/extlinux/extlinux.conf + reboot +fi From e702574190277974101d59a4ff67ba9c2ea46d30 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Tue, 16 Apr 2024 02:28:56 +0300 Subject: [PATCH 125/184] RK3566: build mali-bifrost driver --- .../devices/RK3566/linux/linux.aarch64.conf | 2 +- projects/Rockchip/devices/RK3566/options | 1 + .../Rockchip/packages/mali-bifrost/package.mk | 26 ++++++++++++++++ .../patches/001-single-regulator.patch | 31 +++++++++++++++++++ .../002-lowercase-interrupts-first.patch | 30 ++++++++++++++++++ .../packages/mali-bifrost/sources/Makefile | 12 +++++++ .../019-rk3566-dt-for-mali-driver.patch | 26 ++++++++++++++++ 7 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 projects/Rockchip/packages/mali-bifrost/package.mk create mode 100644 projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch create mode 100644 projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch create mode 100644 projects/Rockchip/packages/mali-bifrost/sources/Makefile create mode 100644 projects/Rockchip/patches/linux/RK3566/019-rk3566-dt-for-mali-driver.patch diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index a64b78dd8..6cb121cb0 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -5020,7 +5020,7 @@ CONFIG_DRM_PANEL_MIPI_DBI=y # CONFIG_TINYDRM_ST7735R is not set # CONFIG_DRM_PL111 is not set # CONFIG_DRM_LIMA is not set -CONFIG_DRM_PANFROST=y +CONFIG_DRM_PANFROST=m # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 673b73735..3eea66628 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -88,6 +88,7 @@ # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU" + ADDITIONAL_DRIVERS+=" mali-bifrost" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/packages/mali-bifrost/package.mk b/projects/Rockchip/packages/mali-bifrost/package.mk new file mode 100644 index 000000000..78b66a7c7 --- /dev/null +++ b/projects/Rockchip/packages/mali-bifrost/package.mk @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +PKG_NAME="mali-bifrost" +PKG_VERSION="r48p0-01eac0" +PKG_LICENSE="GPL" +PKG_SITE="https://developer.arm.com/downloads/-/mali-drivers/bifrost-kernel" +PKG_URL="https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-bifrost-gpu/BX304L01B-SW-99002-${PKG_VERSION}.tar" +PKG_LONGDESC="mali-bifrost: Linux drivers for Mali Bifrost GPUs" +PKG_ARCH="aarch64" +PKG_DEPENDS_TARGET="toolchain linux" +PKG_NEED_UNPACK="${LINUX_DEPENDS}" +PKG_TOOLCHAIN="manual" +PKG_IS_KERNEL_PKG="yes" + +make_target() { + kernel_make KDIR=$(kernel_path) -C ${PKG_BUILD} \ + CONFIG_MALI_MIDGARD=m CONFIG_MALI_PLATFORM_NAME=meson CONFIG_MALI_REAL_HW=y CONFIG_MALI_DEVFREQ=y CONFIG_MALI_GATOR_SUPPORT=y +} + +makeinstall_target() { + DRIVER_DIR=${PKG_BUILD}/product/kernel/drivers/gpu/arm/midgard + + mkdir -p ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} + cp ${DRIVER_DIR}/mali_kbase.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} +} diff --git a/projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch b/projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch new file mode 100644 index 000000000..0ebd0b68a --- /dev/null +++ b/projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch @@ -0,0 +1,31 @@ +--- a/product/kernel/drivers/gpu/arm/midgard/mali_kbase_defs.h 2024-02-19 17:24:21.000000000 +0300 ++++ b/product/kernel/drivers/gpu/arm/midgard/mali_kbase_defs.h 2024-03-18 23:51:35.201950500 +0300 +@@ -141,7 +141,7 @@ + * This is dependent on support for of_property_read_u64_array() in the + * kernel. + */ +-#define BASE_MAX_NR_CLOCKS_REGULATORS (2) ++#define BASE_MAX_NR_CLOCKS_REGULATORS (1) + + /* Forward declarations */ + struct kbase_context; +--- a/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c 2024-03-19 00:26:38.775395807 +0300 ++++ b/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c 2024-03-19 00:23:39.644058337 +0300 +@@ -4725,7 +4725,7 @@ + int err = 0; + unsigned int i; + #if defined(CONFIG_REGULATOR) +- static const char *const regulator_names[] = { "mali", "shadercores" }; ++ static const char *const regulator_names[] = { "mali", NULL }; + BUILD_BUG_ON(ARRAY_SIZE(regulator_names) < BASE_MAX_NR_CLOCKS_REGULATORS); + #endif /* CONFIG_REGULATOR */ + +@@ -4771,7 +4771,7 @@ + * operating with a partial initialization of clocks. + */ + for (i = 0; i < BASE_MAX_NR_CLOCKS_REGULATORS; i++) { +- kbdev->clocks[i] = of_clk_get(kbdev->dev->of_node, (int)i); ++ kbdev->clocks[i] = of_clk_get_by_name(kbdev->dev->of_node, "bus"); + if (IS_ERR(kbdev->clocks[i])) { + err = PTR_ERR(kbdev->clocks[i]); + kbdev->clocks[i] = NULL; diff --git a/projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch b/projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch new file mode 100644 index 000000000..dcd1e67c7 --- /dev/null +++ b/projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch @@ -0,0 +1,30 @@ +diff -ur build.ROCKNIX-RK3566.aarch64/mali-bifrost-r48p0-01eac0.orig/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c build.ROCKNIX-RK3566.aarch64/mali-bifrost-r48p0-01eac0/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c +--- mali-bifrost-r48p0-01eac0.orig/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c 2024-04-10 00:29:25.679588022 +0300 ++++ mali-bifrost-r48p0-01eac0/product/kernel/drivers/gpu/arm/midgard/mali_kbase_core_linux.c 2024-04-10 00:33:32.693922486 +0300 +@@ -548,9 +548,9 @@ + static int get_irqs(struct kbase_device *kbdev, struct platform_device *pdev) + { + int i; +- static const char *const irq_names_caps[] = { "JOB", "MMU", "GPU" }; ++ static const char *const irq_names[] = { "job", "mmu", "gpu" }; + +- for (i = 0; i < ARRAY_SIZE(irq_names_caps); i++) { ++ for (i = 0; i < ARRAY_SIZE(irq_names); i++) { + struct irq_data *irqdata; + int irq; + +@@ -560,11 +560,11 @@ + * first then try using Lower case names. If both attempts fail then + * we assume there is no IRQ resource specified for the GPU. + */ +- irq = platform_get_irq_byname(pdev, irq_names_caps[i]); ++ irq = platform_get_irq_byname(pdev, irq_names[i]); + if (irq < 0) { +- static const char *const irq_names[] = { "job", "mmu", "gpu" }; ++ static const char *const irq_names_caps[] = { "JOB", "MMU", "GPU" }; + +- irq = platform_get_irq_byname(pdev, irq_names[i]); ++ irq = platform_get_irq_byname(pdev, irq_names_caps[i]); + } + + if (irq < 0) diff --git a/projects/Rockchip/packages/mali-bifrost/sources/Makefile b/projects/Rockchip/packages/mali-bifrost/sources/Makefile new file mode 100644 index 000000000..67d89bbfd --- /dev/null +++ b/projects/Rockchip/packages/mali-bifrost/sources/Makefile @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +export + +MALI_KBASE_SRC_DIR = $(CURDIR)/product/kernel/drivers/gpu/arm/midgard + +all: + $(MAKE) -C $(MALI_KBASE_SRC_DIR) all + +clean: + $(MAKE) -C $(MALI_KBASE_SRC_DIR) clean diff --git a/projects/Rockchip/patches/linux/RK3566/019-rk3566-dt-for-mali-driver.patch b/projects/Rockchip/patches/linux/RK3566/019-rk3566-dt-for-mali-driver.patch new file mode 100644 index 000000000..9fadf0790 --- /dev/null +++ b/projects/Rockchip/patches/linux/RK3566/019-rk3566-dt-for-mali-driver.patch @@ -0,0 +1,26 @@ +--- linux-6.8-rc6/arch/arm64/boot/dts/rockchip/rk356x.dtsi.orig 2024-02-26 02:46:06.000000000 +0300 ++++ linux-6.8-rc6/arch/arm64/boot/dts/rockchip/rk356x.dtsi 2024-03-21 09:47:32.732153738 +0300 +@@ -587,10 +587,23 @@ + interrupt-names = "job", "mmu", "gpu"; + clocks = <&scmi_clk 1>, <&cru CLK_GPU>; + clock-names = "gpu", "bus"; ++ resets = <&cru SRST_GPU>; + #cooling-cells = <2>; + operating-points-v2 = <&gpu_opp_table>; + power-domains = <&power RK3568_PD_GPU>; ++ power_policy = "always_on"; + status = "disabled"; ++ power_model@0 { ++ compatible = "arm,mali-simple-power-model"; ++ static-coefficient = <100000>; ++ dynamic-coefficient = <953>; ++ ts = <(-108890) 63610 (-1355) 20>; ++ thermal-zone = "gpu-thermal"; ++ }; ++ power_model@1 { ++ compatible = "arm,mali-g52-power-model"; ++ scale = <5>; ++ }; + }; + + vpu: video-codec@fdea0400 { From 74b0d6db6ae77b9a87b6890e8f47748eec507ae2 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Thu, 28 Mar 2024 22:27:59 +0300 Subject: [PATCH 126/184] patchelf: build for host --- packages/tools/patchelf/package.mk | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/tools/patchelf/package.mk b/packages/tools/patchelf/package.mk index 6b465dad2..9ea80af63 100644 --- a/packages/tools/patchelf/package.mk +++ b/packages/tools/patchelf/package.mk @@ -14,3 +14,16 @@ PKG_TOOLCHAIN="configure" pre_configure_target() { ./bootstrap.sh } + +# "configure" toolchain does not separate host and target build dirs, so +# make a fresh unpack in a dir which later is named PKG_REAL_BUILD +# It is important to generate 'configure' script here because it affects PKG_REAL_BUILD value +pre_build_host() { + HOST_BUILD_DIR="${PKG_BUILD}/.${HOST_NAME}" + mkdir -p "${HOST_BUILD_DIR}" + cd "${HOST_BUILD_DIR}" + tar -xf ${SOURCES}/${PKG_NAME}/${PKG_SOURCE_NAME} --strip-components=1 + echo " PRE_BUILD in ${PWD}" + ./bootstrap.sh + PKG_CONFIGURE_SCRIPT="${HOST_BUILD_DIR}/configure" +} From bce218cecdf4bf743b4dfb72c1fdc16378a12289 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Sat, 27 Apr 2024 13:44:02 +0300 Subject: [PATCH 127/184] add libmali package, selectable GPU driver --- .../graphics/libmali/autostart/003-gpudriver | 5 + .../libmali/modprobe.d/mali-gpu-noauto.conf | 2 + packages/graphics/libmali/package.mk | 65 ++ .../graphics/libmali/sources/bin/gpudriver | 68 ++ packages/graphics/libmali/sources/hook/hook.c | 707 ++++++++++++++++++ .../graphics/libmali/sources/hook/meson.build | 72 ++ packages/graphics/libmali/sources/rename.syms | 5 + 7 files changed, 924 insertions(+) create mode 100755 packages/graphics/libmali/autostart/003-gpudriver create mode 100644 packages/graphics/libmali/modprobe.d/mali-gpu-noauto.conf create mode 100644 packages/graphics/libmali/package.mk create mode 100755 packages/graphics/libmali/sources/bin/gpudriver create mode 100644 packages/graphics/libmali/sources/hook/hook.c create mode 100644 packages/graphics/libmali/sources/hook/meson.build create mode 100644 packages/graphics/libmali/sources/rename.syms diff --git a/packages/graphics/libmali/autostart/003-gpudriver b/packages/graphics/libmali/autostart/003-gpudriver new file mode 100755 index 000000000..80d5bdf55 --- /dev/null +++ b/packages/graphics/libmali/autostart/003-gpudriver @@ -0,0 +1,5 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +/usr/bin/gpudriver --start diff --git a/packages/graphics/libmali/modprobe.d/mali-gpu-noauto.conf b/packages/graphics/libmali/modprobe.d/mali-gpu-noauto.conf new file mode 100644 index 000000000..062333cd5 --- /dev/null +++ b/packages/graphics/libmali/modprobe.d/mali-gpu-noauto.conf @@ -0,0 +1,2 @@ +blacklist panfrost +blacklist mali_kbase diff --git a/packages/graphics/libmali/package.mk b/packages/graphics/libmali/package.mk new file mode 100644 index 000000000..0dcd49fc0 --- /dev/null +++ b/packages/graphics/libmali/package.mk @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="libmali" +PKG_VERSION="v1.9-1-b9619b9" +PKG_LICENSE="nonfree" +PKG_SITE="https://github.com/tsukumijima/libmali-rockchip" +# zip format makes extract very fast (<1s). tgz takes 20 seconds to scan the whole file +PKG_URL="https://github.com/tsukumijima/libmali-rockchip/archive/refs/tags/${PKG_VERSION}.zip" +PKG_DEPENDS_TARGET="toolchain libdrm patchelf:host" +PKG_LONGDESC="OpenGL ES user-space binary for the ARM Mali GPU family" +PKG_TOOLCHAIN="meson" + +# patchelf is incompatible with strip, but is needed to ensure apps call wrapped functions +PKG_BUILD_FLAGS="-strip" + +case "${DISPLAYSERVER}" in + wl) + PLATFORM="wayland-gbm" + PKG_DEPENDS_TARGET+=" wayland" + ;; + x11) + PLATFORM="x11-gbm" + ;; + *) + PLATFORM="gbm" + ;; +esac + +PKG_MESON_OPTS_TARGET+=" -Darch=${ARCH} -Dgpu=${MALI_FAMILY} -Dversion=${MALI_VERSION} -Dplatform=${PLATFORM} \ + -Dkhr-header=false -Dvendor-package=true -Dwrappers=enabled -Dhooks=true" + + +unpack() { + mkdir -p "${PKG_BUILD}" + cd "${PKG_BUILD}" + pwd + # Extract only what is needed + LIBNAME="libmali-${MALI_FAMILY}-${MALI_VERSION}-${PLATFORM}.so" + unzip -q "${SOURCES}/${PKG_NAME}/${PKG_SOURCE_NAME}" "*/hook/*" "*/include/*" "*/scripts/*" "*/meson*" "*/${LIBNAME}" + mv libmali-rockchip-*/* . + rmdir libmali-rockchip-* + ln -s lib optimize_3 +} + +pre_make_target() { + patchelf --rename-dynamic-symbols "${PKG_BUILD}/rename.syms" libmali-prebuilt.so +} + +post_makeinstall_target() { + rm -rf "${SYSROOT_PREFIX}/usr/include" # all needed headers are installed by glvnd, mesa and wayland + rm -rf "${INSTALL}/etc/ld.so.conf.d" "${SYSROOT_PREFIX}/etc/ld.so.conf.d" + mkdir "${INSTALL}/etc/ld.so.conf.d" + echo "include /storage/.cache/ld.so.libmali.conf" > "${INSTALL}/etc/ld.so.conf.d/__priority__libmali.conf" + + for lib in "${INSTALL}/usr/lib*/mali/*.so"; do + echo ${lib} + patchelf --add-needed libmali-hook.so.1 ${lib} + done + + mkdir -p "${INSTALL}/usr/bin/" + cp -v "${PKG_BUILD}/bin/gpudriver" "${INSTALL}/usr/bin/" +} diff --git a/packages/graphics/libmali/sources/bin/gpudriver b/packages/graphics/libmali/sources/bin/gpudriver new file mode 100755 index 000000000..020a62d35 --- /dev/null +++ b/packages/graphics/libmali/sources/bin/gpudriver @@ -0,0 +1,68 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + + +get_current_driver() { + CONFDRIVER="panfrost" + grep -q mali ${LDCONFFILE} 2>/dev/null && CONFDRIVER="libmali" +} + +load_driver() { + case ${CONFDRIVER} in + "libmali") + modprobe -r panfrost + modprobe mali_kbase + ;; + "panfrost") + modprobe -r mali_kbase + modprobe panfrost + ;; + *) + exit 3 + ;; + esac +} + +check_ld_cache() { + LDDRIVER="panfrost" + ldconfig -p | grep libEGL.so.1 | grep -q mali && LDDRIVER="libmali" + if [ ${CONFDRIVER} != ${LDDRIVER} ]; then + ldconfig + fi +} + + +# Determine configured driver +LDCONFFILE=$(cat /etc/ld.so.conf.d/*.conf | grep mali | sed -n 's|include ||p' | head -1) + +case "$1" in + "--options") + echo "panfrost libmali" + ;; + "--start") + get_current_driver + check_ld_cache + load_driver + ;; + "libmali") + echo "/usr/lib/mali" > ${LDCONFFILE} + echo "/usr/lib32/mali" >> ${LDCONFFILE} + ;; + "panfrost") + rm ${LDCONFFILE} + ;; + "") + get_current_driver + echo ${CONFDRIVER} + ;; + *) + echo "Unexpected parameter $1" >&2 + echo "Usage:" >&2 + echo " List available drivers: $0 --options" >&2 + echo " Load configured driver and set libs: $0 --start" >&2 + echo " Get current driver: $0" >&2 + echo " Configure driver to load on next boot: $0 " >&2 + exit 1 + ;; +esac diff --git a/packages/graphics/libmali/sources/hook/hook.c b/packages/graphics/libmali/sources/hook/hook.c new file mode 100644 index 000000000..6dbacc04c --- /dev/null +++ b/packages/graphics/libmali/sources/hook/hook.c @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2020, Rockchip Electronics Co., Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAS_GBM +#include +#endif + +#ifdef HAS_EGL +#include +#include +#endif + +#ifdef HAS_X11 +#include + +#include +#include +#endif + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) +#endif + +#ifndef DRM_FORMAT_MOD_LINEAR +#define DRM_FORMAT_MOD_LINEAR 0 +#endif + +#ifndef DRM_FORMAT_MOD_INVALID +#define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1) +#endif + +/* A stub symbol to ensure that the hook library would not be removed as unused */ +int mali_injected = 0; + +/* Override libmali symbols */ +EGLAPI EGLBoolean EGLAPIENTRY _eglDestroySurface (EGLDisplay dpy, EGLSurface surface); + +#ifdef HAS_EGL +static PFNEGLGETPLATFORMDISPLAYPROC eglGetPlatformDisplay_orig = NULL; +#ifdef HAS_X11 +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY _eglGetProcAddress (const char *procname); +static PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT_orig = NULL; +#endif +#endif + + +#define PUBLIC + +__attribute__((constructor)) static void +load_mali_symbols(void) +{ + void *handle; + + /* The libmali should be already loaded */ + handle = dlopen(LIBMALI_SO, RTLD_LAZY | RTLD_NOLOAD); + if (!handle) { + /* Should not reach here */ + fprintf(stderr, "FATAL: dlopen(" LIBMALI_SO ") failed(%s)\n", dlerror()); + exit(-1); + } + +#ifdef HAS_EGL + eglGetPlatformDisplay_orig = + (PFNEGLGETPLATFORMDISPLAYPROC)eglGetProcAddress("eglGetPlatformDisplay"); +#ifdef HAS_X11 + eglGetPlatformDisplayEXT_orig = + (PFNEGLGETPLATFORMDISPLAYEXTPROC)_eglGetProcAddress("eglGetPlatformDisplayEXT"); +#endif +#endif +} + +#ifdef HAS_GBM + +/* Implement new GBM APIs */ + +__attribute__((unused)) static inline bool +can_ignore_modifiers(const uint64_t *modifiers, + const unsigned int count) +{ + for (int i = 0; i < count; i++) { + if (modifiers[i] == DRM_FORMAT_MOD_LINEAR || + modifiers[i] == DRM_FORMAT_MOD_INVALID) { + return true; + } + } + + return !count; +} + +#ifndef HAS_gbm_bo_get_offset +uint32_t +gbm_bo_get_offset(struct gbm_bo *bo, int plane) +{ + return 0; +} +#endif + +#ifndef HAS_gbm_bo_get_plane_count +int +gbm_bo_get_plane_count(struct gbm_bo *bo) +{ + return 1; +} +#endif + +#ifndef HAS_gbm_bo_get_stride_for_plane +uint32_t +gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane) +{ + if (plane) + return 0; + + return gbm_bo_get_stride(bo); +} +#endif + +#ifndef HAS_gbm_bo_get_fd_for_plane +int +gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane) +{ + if (plane) + return -1; + + return gbm_bo_get_fd(bo); +} +#endif + +#ifndef HAS_gbm_bo_get_handle_for_plane +union gbm_bo_handle +gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane) +{ + union gbm_bo_handle ret; + ret.s32 = -1; + + if (plane) + return ret; + + return gbm_bo_get_handle(bo); +} +#endif + +#ifndef HAS_gbm_device_get_format_modifier_plane_count +int +gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, + uint32_t format, + uint64_t modifier) +{ + return can_ignore_modifiers(&modifier, 1) ? 1 : 0; +} +#endif + +#ifndef HAS_gbm_bo_create_with_modifiers2 +struct gbm_bo * +gbm_bo_create_with_modifiers2(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count, + uint32_t flags) +{ +#ifdef HAS_gbm_bo_create_with_modifiers + /* flags ignored */ + return gbm_bo_create_with_modifiers(gbm, width, height, format, + modifiers, count); +#else + if (!can_ignore_modifiers(modifiers, count)) + return NULL; + + return gbm_bo_create(gbm, width, height, format, flags); +#endif +} +#endif + +#ifndef HAS_gbm_bo_create_with_modifiers +struct gbm_bo * +gbm_bo_create_with_modifiers(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count) +{ + return gbm_bo_create_with_modifiers2(gbm, width, height, format, + modifiers, count, GBM_BO_USE_SCANOUT); +} +#endif + +#ifndef HAS_gbm_surface_create_with_modifiers2 +struct gbm_surface * +gbm_surface_create_with_modifiers2(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count, + uint32_t flags) +{ +#ifdef HAS_gbm_surface_create_with_modifiers + /* flags ignored */ + return gbm_surface_create_with_modifiers(gbm, width, height, format, + modifiers, count); +#else + if (!can_ignore_modifiers(modifiers, count)) + return NULL; + + return gbm_surface_create(gbm, width, height, format, 0); +#endif +} +#endif + +#ifndef HAS_gbm_surface_create_with_modifiers +struct gbm_surface * +gbm_surface_create_with_modifiers(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count) +{ + return gbm_surface_create_with_modifiers2(gbm, width, height, format, + modifiers, count, + GBM_BO_USE_SCANOUT); +} +#endif + +#ifndef HAS_gbm_bo_map +void * +gbm_bo_map(struct gbm_bo *bo, + uint32_t x, uint32_t y, uint32_t width, uint32_t height, + uint32_t flags, uint32_t *stride, void **map_data) +{ + struct drm_mode_map_dumb arg; + struct gbm_device *gbm_dev; + void *map; + int fd, ret; + + if (!bo || !map_data || width <= 0 || width > gbm_bo_get_width(bo) || + height <= 0 || height > gbm_bo_get_height(bo)) { + errno = EINVAL; + return MAP_FAILED; + } + + gbm_dev = gbm_bo_get_device(bo); + if (!gbm_dev) + return MAP_FAILED; + + fd = gbm_device_get_fd(gbm_dev); + if (fd < 0) + return MAP_FAILED; + + memset(&arg, 0, sizeof(arg)); + arg.handle = gbm_bo_get_handle(bo).u32; + ret = drmIoctl(fd, DRM_IOCTL_MODE_MAP_DUMB, &arg); + if (ret) + return MAP_FAILED; + + map = mmap(NULL, gbm_bo_get_stride(bo) * gbm_bo_get_height(bo), + PROT_READ | PROT_WRITE, MAP_SHARED, fd, arg.offset); + if (map == MAP_FAILED) + return map; + + *map_data = map; + + if (stride) + *stride = gbm_bo_get_stride(bo); + + return map + y * gbm_bo_get_stride(bo) + x * (gbm_bo_get_bpp(bo) >> 3); +} +#endif + +#ifndef HAS_gbm_bo_unmap +void +gbm_bo_unmap(struct gbm_bo *bo, void *map_data) +{ + if (map_data) + munmap(map_data, gbm_bo_get_stride(bo) * gbm_bo_get_height(bo)); +} +#endif + +/* From mesa3d mesa-23.1.3-1 : src/gbm/main/gbm.c */ +#ifndef HAS_gbm_bo_get_bpp +uint32_t +gbm_bo_get_bpp(struct gbm_bo *bo) +{ + switch (gbm_bo_get_format(bo)) { + default: + return 0; + case GBM_FORMAT_C8: + case GBM_FORMAT_R8: + case GBM_FORMAT_RGB332: + case GBM_FORMAT_BGR233: + return 8; + case GBM_FORMAT_R16: + case GBM_FORMAT_GR88: + case GBM_FORMAT_XRGB4444: + case GBM_FORMAT_XBGR4444: + case GBM_FORMAT_RGBX4444: + case GBM_FORMAT_BGRX4444: + case GBM_FORMAT_ARGB4444: + case GBM_FORMAT_ABGR4444: + case GBM_FORMAT_RGBA4444: + case GBM_FORMAT_BGRA4444: + case GBM_FORMAT_XRGB1555: + case GBM_FORMAT_XBGR1555: + case GBM_FORMAT_RGBX5551: + case GBM_FORMAT_BGRX5551: + case GBM_FORMAT_ARGB1555: + case GBM_FORMAT_ABGR1555: + case GBM_FORMAT_RGBA5551: + case GBM_FORMAT_BGRA5551: + case GBM_FORMAT_RGB565: + case GBM_FORMAT_BGR565: + return 16; + case GBM_FORMAT_RGB888: + case GBM_FORMAT_BGR888: + return 24; + case GBM_FORMAT_RG1616: + case GBM_FORMAT_GR1616: + case GBM_FORMAT_XRGB8888: + case GBM_FORMAT_XBGR8888: + case GBM_FORMAT_RGBX8888: + case GBM_FORMAT_BGRX8888: + case GBM_FORMAT_ARGB8888: + case GBM_FORMAT_ABGR8888: + case GBM_FORMAT_RGBA8888: + case GBM_FORMAT_BGRA8888: + case GBM_FORMAT_XRGB2101010: + case GBM_FORMAT_XBGR2101010: + case GBM_FORMAT_RGBX1010102: + case GBM_FORMAT_BGRX1010102: + case GBM_FORMAT_ARGB2101010: + case GBM_FORMAT_ABGR2101010: + case GBM_FORMAT_RGBA1010102: + case GBM_FORMAT_BGRA1010102: + return 32; + case GBM_FORMAT_XBGR16161616: + case GBM_FORMAT_ABGR16161616: + case GBM_FORMAT_XBGR16161616F: + case GBM_FORMAT_ABGR16161616F: + return 64; + } +} +#endif + +/* From mesa3d mesa-23.1.3-1 : src/gbm/main/gbm.c */ +#ifndef HAS_gbm_format_get_name +static uint32_t +gbm_format_canonicalize(uint32_t gbm_format) +{ + switch (gbm_format) { + case GBM_BO_FORMAT_XRGB8888: + return GBM_FORMAT_XRGB8888; + case GBM_BO_FORMAT_ARGB8888: + return GBM_FORMAT_ARGB8888; + default: + return gbm_format; + } +} + +char * +gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc) +{ + gbm_format = gbm_format_canonicalize(gbm_format); + + desc->name[0] = gbm_format; + desc->name[1] = gbm_format >> 8; + desc->name[2] = gbm_format >> 16; + desc->name[3] = gbm_format >> 24; + desc->name[4] = 0; + + return desc->name; +} +#endif + +/* Wrappers for invalid modifier */ + +uint64_t +_gbm_bo_get_modifier(struct gbm_bo *bo); + +uint64_t +gbm_bo_get_modifier(struct gbm_bo *bo) +{ +#ifdef HAS_gbm_bo_get_modifier + uint64_t modifier = _gbm_bo_get_modifier(bo); + if (modifier != DRM_FORMAT_MOD_INVALID) + return modifier; +#endif + return DRM_FORMAT_MOD_LINEAR; +} + +/* Wrappers for unsupported flags */ + +struct gbm_surface * +_gbm_surface_create(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, uint32_t flags); +struct gbm_surface * +gbm_surface_create(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, uint32_t flags) +{ + struct gbm_surface *surface; + + surface = _gbm_surface_create(gbm, width, height, format, flags); + if (surface) + return surface; + + flags &= GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; + return _gbm_surface_create(gbm, width, height, format, flags); +} + +struct gbm_bo * +_gbm_bo_create(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, uint32_t flags); +struct gbm_bo * +gbm_bo_create(struct gbm_device *gbm, + uint32_t width, uint32_t height, + uint32_t format, uint32_t flags) +{ + struct gbm_bo *bo; + + bo = _gbm_bo_create(gbm, width, height, format, flags); + if (bo) + return bo; + + flags &= GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING | + GBM_BO_USE_WRITE | GBM_BO_USE_CURSOR_64X64; + return _gbm_bo_create(gbm, width, height, format, flags); +} + +#endif // HAS_GBM + +#ifdef HAS_EGL +#ifdef HAS_X11 + +/* Hacked displays (should not be much) */ +#define MAX_X11_DISPLAY 32 +static Display *_x11_displays[MAX_X11_DISPLAY] = { NULL, }; + +static pthread_mutex_t _x11_mutex = PTHREAD_MUTEX_INITIALIZER; + +static inline int +force_x11_threads(void) +{ + return !getenv("MALI_X11_NO_FORCE_THREADS"); +} + +__attribute__((constructor)) static void +init_x11_threads(void) +{ + if (force_x11_threads()) + XInitThreads(); +} + +__attribute__((destructor)) static void +cleanup_x11_display(void) +{ + int i; + + for (i = 0; i < MAX_X11_DISPLAY; i++) { + Display *display = _x11_displays[i]; + if (display) + XCloseDisplay(display); + } +} + +static Display * +fixup_x11_display(Display *display) +{ + int i; + + if (!force_x11_threads()) + return display; + + if (!display || display->lock_fns) + return display; + + pthread_mutex_lock(&_x11_mutex); + /* Create a new threaded display */ + display = XOpenDisplay(DisplayString(display)); + + for (i = 0; i < MAX_X11_DISPLAY; i++) { + if (!_x11_displays[i]) { + _x11_displays[i] = display; + break; + } + } + pthread_mutex_unlock(&_x11_mutex); + + return display; +} + +/* Override EGL symbols */ + +EGLAPI EGLDisplay EGLAPIENTRY +eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list) +{ + if (!eglGetPlatformDisplayEXT_orig) + return EGL_NO_DISPLAY; + + if (platform == EGL_PLATFORM_X11_KHR && native_display) { + native_display = (void *)fixup_x11_display(native_display); + if (!native_display) + return EGL_NO_DISPLAY; + } + + return eglGetPlatformDisplayEXT_orig(platform, native_display, attrib_list); +} + +PUBLIC __eglMustCastToProperFunctionPointerType EGLAPIENTRY +eglGetProcAddress(const char *procname) +{ + if (!procname) + return NULL; + + if (!strcmp(procname, __func__)) + return (__eglMustCastToProperFunctionPointerType)_eglGetProcAddress; + + if (!strcmp(procname, "eglGetDisplay")) + return (__eglMustCastToProperFunctionPointerType)eglGetDisplay; + + if (!strcmp(procname, "eglGetPlatformDisplay")) { + if (!eglGetPlatformDisplay_orig && !eglGetPlatformDisplayEXT_orig) + return NULL; + return (__eglMustCastToProperFunctionPointerType)eglGetPlatformDisplay; + } + + if (!strcmp(procname, "eglGetPlatformDisplayEXT")) { + if (!eglGetPlatformDisplayEXT_orig) + return NULL; + return (__eglMustCastToProperFunctionPointerType)eglGetPlatformDisplayEXT; + } + + if (!strcmp(procname, "eglDestroySurface")) + return (__eglMustCastToProperFunctionPointerType)eglDestroySurface; + + return _eglGetProcAddress(procname); +} + +#endif // HAS_X11 + +EGLAPI EGLDisplay EGLAPIENTRY _eglGetDisplay (EGLNativeDisplayType display_id); +PUBLIC EGLDisplay EGLAPIENTRY +eglGetDisplay (EGLNativeDisplayType display_id) +{ + const char *type = getenv("MALI_DEFAULT_WINSYS"); + +#ifdef HAS_GBM + if (type && !strcmp(type, "gbm")) + return eglGetPlatformDisplay(EGL_PLATFORM_GBM_KHR, display_id, NULL); +#endif + +#ifdef HAS_WAYLAND + if (type && !strcmp(type, "wayland")) + return eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, display_id, NULL); +#endif + +#ifdef HAS_X11 + /* Use X11 by default when avaiable */ + return eglGetPlatformDisplay(EGL_PLATFORM_X11_KHR, display_id, NULL); +#else + return _eglGetDisplay(display_id); +#endif +} + +/* Export for EGL 1.5 */ + +#define GET_PROC_ADDR(v, n) v = (typeof(v))eglGetProcAddress(n) + +/* From mesa3d mesa-23.1.3-1 : src/egl/main/egldisplay.h */ +static inline size_t +_eglNumAttribs(const EGLAttrib *attribs) +{ + size_t len = 0; + + if (attribs) { + while (attribs[len] != EGL_NONE) + len += 2; + len++; + } + return len; +} + +/* From mesa3d mesa-23.1.3-1 : src/egl/main/eglapi.c */ +static EGLint * +_eglConvertAttribsToInt(const EGLAttrib *attr_list) +{ + size_t size = _eglNumAttribs(attr_list); + EGLint *int_attribs = NULL; + + /* Convert attributes from EGLAttrib[] to EGLint[] */ + if (size) { + int_attribs = calloc(size, sizeof(int_attribs[0])); + if (!int_attribs) + return NULL; + + for (size_t i = 0; i < size; i++) + int_attribs[i] = attr_list[i]; + } + return int_attribs; +} + +EGLAPI EGLDisplay EGLAPIENTRY +eglGetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list) +{ + PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display_ext; + + GET_PROC_ADDR(get_platform_display_ext, "eglGetPlatformDisplayEXT"); + if (get_platform_display_ext) { + EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list); + if (!int_attribs == !attrib_list) { + EGLDisplay display = + get_platform_display_ext(platform, native_display, int_attribs); + free(int_attribs); + return display; + } + } + + if (!eglGetPlatformDisplay_orig) + return EGL_NO_DISPLAY; + +#ifdef HAS_X11 + if (platform == EGL_PLATFORM_X11_KHR && native_display) { + native_display = (void *)fixup_x11_display(native_display); + if (!native_display) + return EGL_NO_DISPLAY; + } +#endif + + return eglGetPlatformDisplay_orig(platform, native_display, attrib_list); +} + +EGLAPI EGLSurface EGLAPIENTRY +eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list) +{ + PFNEGLCREATEPLATFORMWINDOWSURFACEPROC create_platform_window_surface; + + GET_PROC_ADDR(create_platform_window_surface, + "eglCreatePlatformWindowSurface"); + if (!create_platform_window_surface) { + EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list); + if (!int_attribs == !attrib_list) { + EGLSurface surface = + eglCreateWindowSurface(dpy, config, native_window, int_attribs); + free(int_attribs); + return surface; + } + } + + return create_platform_window_surface(dpy, config, native_window, attrib_list); +} + +EGLAPI EGLSurface EGLAPIENTRY +eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list) +{ + PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC create_platform_pixmap_surface; + + GET_PROC_ADDR(create_platform_pixmap_surface, + "eglCreatePlatformPixmapSurface"); + if (!create_platform_pixmap_surface) { + EGLint *int_attribs = _eglConvertAttribsToInt(attrib_list); + if (!int_attribs == !attrib_list) { + EGLSurface surface = + eglCreatePixmapSurface(dpy, config, native_pixmap, int_attribs); + free(int_attribs); + return surface; + } + } + + return create_platform_pixmap_surface(dpy, config, native_pixmap, attrib_list); +} + +/* Unset current surface before destroying it */ +PUBLIC EGLBoolean +eglDestroySurface(EGLDisplay dpy, EGLSurface surface) +{ + if (eglGetCurrentSurface(EGL_DRAW) == surface || + eglGetCurrentSurface(EGL_READ) == surface) + eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + + return _eglDestroySurface(dpy, surface); +} + +#endif // HAS_EGL diff --git a/packages/graphics/libmali/sources/hook/meson.build b/packages/graphics/libmali/sources/hook/meson.build new file mode 100644 index 000000000..091cfdd71 --- /dev/null +++ b/packages/graphics/libmali/sources/hook/meson.build @@ -0,0 +1,72 @@ +# The gbm functions that might be missing +gbm_check_funcs = [ + 'gbm_bo_map', + 'gbm_bo_unmap', + 'gbm_bo_get_offset', + 'gbm_bo_get_plane_count', + 'gbm_device_get_format_modifier_plane_count', + 'gbm_bo_get_handle_for_plane', + 'gbm_bo_get_stride_for_plane', + 'gbm_bo_get_fd_for_plane', + 'gbm_bo_get_modifier', + 'gbm_bo_create_with_modifiers', + 'gbm_bo_create_with_modifiers2', + 'gbm_surface_create_with_modifiers', + 'gbm_surface_create_with_modifiers2', + 'gbm_bo_get_bpp', + 'gbm_format_get_name', +] + +libhook_cflags = [ + '-DLIBMALI_SO="libmali.so.' + mali_version.split('.')[0] + '"', +] + +libhook_dep = [ + dependency('threads'), + cc.find_library('dl', required : false), + dependency('libdrm', version : '>= 2.4.0'), +] + +libhook_inc = [] + +if cc.has_function('gbm_create_device', dependencies : mali) + # Add hooks to support new GBM APIs + libhook_inc += include_directories('..' / gbm_headers.keys()[0]) + libhook_cflags += '-DHAS_GBM' + foreach symbol : gbm_check_funcs + if cc.has_function(symbol, dependencies : mali) + libhook_cflags += '-DHAS_' + symbol + endif + endforeach +endif + +if cc.has_function('eglCreateContext', dependencies : mali) + # Add hooks to support default winsys + libhook_inc += include_directories('../include') + libhook_cflags += '-DHAS_EGL' + + if cc.has_function('wl_egl_window_create', dependencies : mali) + libhook_cflags += '-DHAS_WAYLAND' + endif + + if has_x11 + # Add hooks to init X11 threads + libhook_dep += dependency('x11') + libhook_cflags += '-DHAS_X11' + endif +endif + +vflag = '-Wl,--export-dynamic' + +libhook = shared_library( + 'mali-hook', + 'hook.c', + c_args : libhook_cflags, + link_args : [vflag, '-L.', '-lmali-prebuilt'], + include_directories : libhook_inc, + dependencies : libhook_dep, + install : true, + install_rpath : '$ORIGIN', + version : mali_version) + +libhook_ldflags = ['-L${libdir}', '-lmali-hook'] diff --git a/packages/graphics/libmali/sources/rename.syms b/packages/graphics/libmali/sources/rename.syms new file mode 100644 index 000000000..777f046ec --- /dev/null +++ b/packages/graphics/libmali/sources/rename.syms @@ -0,0 +1,5 @@ +gbm_surface_create _gbm_surface_create +gbm_bo_create _gbm_bo_create +gbm_bo_get_modifier _gbm_bo_get_modifier +eglGetDisplay _eglGetDisplay +eglDestroySurface _eglDestroySurface From a8097a851f1fae7c39113081a5c6fcccb6870a4d Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Wed, 24 Apr 2024 02:10:43 +0300 Subject: [PATCH 128/184] wlroots: add rockchip patches to work with libmali --- packages/wayland/lib/wlroots/package.mk | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/wayland/lib/wlroots/package.mk b/packages/wayland/lib/wlroots/package.mk index d6ae4b2bb..9126b2566 100644 --- a/packages/wayland/lib/wlroots/package.mk +++ b/packages/wayland/lib/wlroots/package.mk @@ -2,11 +2,11 @@ # Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv) PKG_NAME="wlroots" -PKG_VERSION="0.17.2" -PKG_SHA256="71e8f4d81bc21ddb1eee91ad2059796c49ed9cd72e35b90f6ee649e66b9665dd" +PKG_VERSION="0.17.3-rk" +PKG_SHA256="bda9d39c989f27994e6a412228ef6ac3c86d121b38fba04fe4a91eb3b1a7c118" PKG_LICENSE="MIT" PKG_SITE="https://gitlab.freedesktop.org/wlroots/wlroots/" -PKG_URL="${PKG_SITE}-/archive/${PKG_VERSION}/wlroots-${PKG_VERSION}.tar.gz" +PKG_URL="https://github.com/stolen/rockchip-wlroots/archive/refs/tags/${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain libinput libxkbcommon pixman libdrm wayland wayland-protocols seatd xwayland hwdata libxcb xcb-util-wm" PKG_LONGDESC="A modular Wayland compositor library" PKG_TOOLCHAIN="meson" @@ -24,6 +24,11 @@ PKG_MESON_OPTS_TARGET="-Dxcb-errors=disabled \ -Drenderers=gles2 \ -Dbackends=drm,libinput" +unpack() { + mkdir -p ${PKG_BUILD} + tar --strip-components=1 -xf ${SOURCES}/${PKG_NAME}/${PKG_NAME}-${PKG_VERSION}.tar.gz -C ${PKG_BUILD} +} + pre_configure_target() { # wlroots does not build without -Wno flags as all warnings being treated as errors export TARGET_CFLAGS=$(echo "${TARGET_CFLAGS} -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function") From 9c33c3c296cbec8ae25222c82697e47835c6d14a Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Sat, 27 Apr 2024 14:50:38 +0300 Subject: [PATCH 129/184] RK3566: user-selectable GPU driver panfrost/libmali --- projects/Rockchip/devices/RK3566-X55/options | 9 +++++---- projects/Rockchip/devices/RK3566/options | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index 59f1f3cf2..8b4eec93d 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -52,10 +52,11 @@ # Mali GPU family MALI_FAMILY="bifrost-g52" - GRAPHIC_DRIVERS="panfrost" + MALI_VERSION="g13p0" + GRAPHIC_DRIVERS="mali panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="mesa" + OPENGL="" # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" @@ -76,7 +77,7 @@ EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" # additional packages to install - # ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="libmali" # additional Firmware to use ( ) # Space separated list is supported, @@ -87,7 +88,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad" + ADDITIONAL_DRIVERS="rocknix-joypad mali-bifrost" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 3eea66628..46b4bb7ee 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -52,10 +52,11 @@ # Mali GPU family MALI_FAMILY="bifrost-g52" - GRAPHIC_DRIVERS="panfrost" + MALI_VERSION="g13p0" + GRAPHIC_DRIVERS="mali panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="mesa" + OPENGL="" # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" @@ -76,7 +77,7 @@ EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" # additional packages to install - ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="libmali" # additional Firmware to use ( ) # Space separated list is supported, @@ -87,8 +88,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU" - ADDITIONAL_DRIVERS+=" mali-bifrost" + ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU mali-bifrost" # Some devices have internal storage. INSTALLER_SUPPORT="no" From 6c70c84da871bf4dc3be7ac1f144ec52257a819d Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 1 May 2024 16:47:09 +0000 Subject: [PATCH 130/184] Enable NTFS support --- distributions/ROCKNIX/options | 2 +- packages/rocknix/sources/scripts/automount | 4 ++-- projects/Amlogic/devices/S922X/linux/linux.aarch64.conf | 5 +++-- projects/PC/devices/AMD64/linux/linux.x86_64.conf | 2 +- projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf | 6 +++--- projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf | 8 ++++---- projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf | 6 +++--- projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf | 5 +++-- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/distributions/ROCKNIX/options b/distributions/ROCKNIX/options index eb6602136..66e0588a8 100644 --- a/distributions/ROCKNIX/options +++ b/distributions/ROCKNIX/options @@ -111,7 +111,7 @@ EXFAT="yes" # build and install NTFS-3G fuse support (yes / no) - NTFS3G="no" + NTFS3G="yes" # build and install hfs filesystem utilities (yes / no) HFSTOOLS="no" diff --git a/packages/rocknix/sources/scripts/automount b/packages/rocknix/sources/scripts/automount index b486be527..ba92d78c3 100755 --- a/packages/rocknix/sources/scripts/automount +++ b/packages/rocknix/sources/scripts/automount @@ -115,7 +115,7 @@ function create_game_dirs() { } function load_modules() { - for MODULE in exfat vfat + for MODULE in exfat vfat ntfs ntfs3 do lsmod | grep ${MODULE} >/dev/null 2>&1 if [ ! $? = 0 ] @@ -178,7 +178,7 @@ function mount_games() { function find_games() { if /usr/bin/busybox mountpoint -q /storage then - for DEV in $(for dev in mmcblk[0-9] sd[a-z] nvme[0-9]; do blkid | grep ${dev} | awk 'BEGIN {FS=":"}; /ext4/ || /fat/ {print $1}' | sort -r; done) + for DEV in $(for dev in mmcblk[0-9] sd[a-z] nvme[0-9]; do blkid | grep ${dev} | awk 'BEGIN {FS=":"}; /ext4/ || /fat/ || /ntfs/ {print $1}' | sort -r; done) do ROOTDEV=$(echo ${DEV} | sed -e "s#^/.*/##g" -e "s#p[0-9].*\$##g") log $0 "Inspecting ${DEV}." diff --git a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf index df7d96f32..dbe7b0131 100644 --- a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf +++ b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf @@ -116,7 +116,7 @@ CONFIG_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_SCHED_AVG_IRQ=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set -# CONFIG_PSI is not set +CONFIG_PSI=y # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -6369,7 +6369,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS3_FS is not set +CONFIG_NTFS_FS=m +CONFIG_NTFS3_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # diff --git a/projects/PC/devices/AMD64/linux/linux.x86_64.conf b/projects/PC/devices/AMD64/linux/linux.x86_64.conf index 6d8ce3b9f..f2158c001 100644 --- a/projects/PC/devices/AMD64/linux/linux.x86_64.conf +++ b/projects/PC/devices/AMD64/linux/linux.x86_64.conf @@ -10500,7 +10500,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" CONFIG_FAT_DEFAULT_UTF8=y CONFIG_EXFAT_FS=m CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set +CONFIG_NTFS_FS=m CONFIG_NTFS3_FS=m # CONFIG_NTFS3_64BIT_CLUSTER is not set CONFIG_NTFS3_LZX_XPRESS=y diff --git a/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf index cadae6f9c..469714226 100644 --- a/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf @@ -120,7 +120,7 @@ CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y CONFIG_TASK_IO_ACCOUNTING=y -# CONFIG_PSI is not set +CONFIG_PSI=y # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -5776,8 +5776,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=m CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS3_FS is not set +CONFIG_NTFS_FS=m +CONFIG_NTFS3_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index 385a3db5a..e5fd7f87d 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -118,7 +118,7 @@ CONFIG_SCHED_THERMAL_PRESSURE=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set -# CONFIG_PSI is not set +CONFIG_PSI=y # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -3356,7 +3356,7 @@ CONFIG_DRM_DW_MIPI_DSI=y # CONFIG_TINYDRM_ST7735R is not set # CONFIG_DRM_PL111 is not set # CONFIG_DRM_LIMA is not set -CONFIG_DRM_PANFROST=y +CONFIG_DRM_PANFROST=m # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set @@ -5496,8 +5496,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS3_FS is not set +CONFIG_NTFS_FS=m +CONFIG_NTFS3_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index a64b78dd8..33109b22f 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -119,7 +119,7 @@ CONFIG_HAVE_SCHED_AVG_IRQ=y CONFIG_SCHED_THERMAL_PRESSURE=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set -# CONFIG_PSI is not set +CONFIG_PSI=y # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -7336,8 +7336,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS3_FS is not set +CONFIG_NTFS_FS=m +CONFIG_NTFS3_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # diff --git a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf index 674f3cfd1..6d52b8784 100644 --- a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf @@ -100,7 +100,7 @@ CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y CONFIG_TASK_IO_ACCOUNTING=y -# CONFIG_PSI is not set +CONFIG_PSI=y # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -7344,7 +7344,8 @@ CONFIG_FAT_DEFAULT_IOCHARSET="utf8" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -# CONFIG_NTFS_FS is not set +CONFIG_NTFS_FS=m +CONFIG_NTFS3_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # From c0f6a0501818eb646696f3c18226d20a9941877f Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 1 May 2024 20:58:31 +0200 Subject: [PATCH 131/184] Remove all instance of runemu.sh command and put it in one place --- config/emulators/3do.conf | 1 - config/emulators/3ds.conf | 1 - config/emulators/amiga.conf | 1 - config/emulators/amigacd32.conf | 1 - config/emulators/amstradcpc.conf | 1 - config/emulators/arcade.conf | 1 - config/emulators/arduboy.conf | 1 - config/emulators/atari2600.conf | 1 - config/emulators/atari5200.conf | 1 - config/emulators/atari7800.conf | 1 - config/emulators/atari800.conf | 1 - config/emulators/atarijaguar.conf | 1 - config/emulators/atarilynx.conf | 1 - config/emulators/atarist.conf | 1 - config/emulators/atomiswave.conf | 1 - config/emulators/c128.conf | 1 - config/emulators/c16.conf | 1 - config/emulators/c64.conf | 1 - config/emulators/cdi.conf | 1 - config/emulators/channelf.conf | 1 - config/emulators/chip-8.conf | 1 - config/emulators/colecovision.conf | 1 - config/emulators/cps1.conf | 1 - config/emulators/cps2.conf | 1 - config/emulators/cps3.conf | 1 - config/emulators/daphne.conf | 1 - config/emulators/doom.conf | 1 - config/emulators/dreamcast.conf | 1 - config/emulators/easyrpg.conf | 1 - config/emulators/famicom.conf | 1 - config/emulators/fbn.conf | 1 - config/emulators/fds.conf | 1 - config/emulators/gameandwatch.conf | 1 - config/emulators/gamecube.conf | 1 - config/emulators/gamegear.conf | 1 - config/emulators/gb.conf | 1 - config/emulators/gba.conf | 1 - config/emulators/gbah.conf | 1 - config/emulators/gbc.conf | 1 - config/emulators/gbch.conf | 1 - config/emulators/gbh.conf | 1 - config/emulators/genesis.conf | 1 - config/emulators/genh.conf | 1 - config/emulators/ggh.conf | 1 - config/emulators/idtech.conf | 1 - config/emulators/intellivision.conf | 1 - config/emulators/j2me.conf | 1 - config/emulators/macintosh.conf | 1 - config/emulators/mame.conf | 1 - config/emulators/mastersystem.conf | 1 - config/emulators/megacd.conf | 1 - config/emulators/megadrive-japan.conf | 1 - config/emulators/megadrive.conf | 1 - config/emulators/megaduck.conf | 1 - config/emulators/moto.conf | 1 - config/emulators/mplayer.conf | 1 - config/emulators/msx.conf | 1 - config/emulators/msx2.conf | 1 - config/emulators/music.conf | 1 - config/emulators/n64.conf | 1 - config/emulators/naomi.conf | 1 - config/emulators/nds.conf | 1 - config/emulators/neocd.conf | 1 - config/emulators/neogeo.conf | 1 - config/emulators/nes.conf | 1 - config/emulators/nesh.conf | 1 - config/emulators/ngp.conf | 1 - config/emulators/ngpc.conf | 1 - config/emulators/odyssey2.conf | 1 - config/emulators/openbor.conf | 1 - config/emulators/palm.conf | 1 - config/emulators/pc-8800.conf | 1 - config/emulators/pc-9800.conf | 1 - config/emulators/pc.conf | 1 - config/emulators/pcengine.conf | 1 - config/emulators/pcenginecd.conf | 1 - config/emulators/pcfx.conf | 1 - config/emulators/pet.conf | 1 - config/emulators/pico-8.conf | 1 - config/emulators/pokemini.conf | 1 - config/emulators/ports.conf | 1 - config/emulators/ps2.conf | 1 - config/emulators/ps3.conf | 1 - config/emulators/psp.conf | 1 - config/emulators/pspminis.conf | 1 - config/emulators/psvita.conf | 1 - config/emulators/psx.conf | 1 - config/emulators/satellaview.conf | 1 - config/emulators/saturn.conf | 1 - config/emulators/scummvm.conf | 1 - config/emulators/scv.conf | 1 - config/emulators/sega32x.conf | 1 - config/emulators/segacd.conf | 1 - config/emulators/segamodel3.conf | 1 - config/emulators/sfc.conf | 1 - config/emulators/sg-1000.conf | 1 - config/emulators/snes.conf | 1 - config/emulators/snesh.conf | 1 - config/emulators/snesmsu1.conf | 1 - config/emulators/st-v.conf | 1 - config/emulators/sufami.conf | 1 - config/emulators/supergrafx.conf | 1 - config/emulators/supervision.conf | 1 - config/emulators/tg16.conf | 1 - config/emulators/tg16cd.conf | 1 - config/emulators/tic-80.conf | 1 - config/emulators/uzebox.conf | 1 - config/emulators/vectrex.conf | 1 - config/emulators/vic20.conf | 1 - config/emulators/videopac.conf | 1 - config/emulators/vircon32.conf | 1 - config/emulators/virtualboy.conf | 1 - config/emulators/wii.conf | 1 - config/emulators/wiiu.conf | 1 - config/emulators/wonderswan.conf | 1 - config/emulators/wonderswancolor.conf | 1 - config/emulators/x1.conf | 1 - config/emulators/x68000.conf | 1 - config/emulators/xbox.conf | 1 - config/emulators/zmachine.conf | 1 - config/emulators/zx81.conf | 1 - config/emulators/zxspectrum.conf | 1 - config/functions | 6 +++++- 123 files changed, 5 insertions(+), 123 deletions(-) diff --git a/config/emulators/3do.conf b/config/emulators/3do.conf index 9ca0cb8e9..e5655c59c 100644 --- a/config/emulators/3do.conf +++ b/config/emulators/3do.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1993" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/3do" SYSTEM_EXTENSION=".iso .bin .chd .cue" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="3do" SYSTEM_THEME="3do" SYSTEM_WIKI_PATH="3do" \ No newline at end of file diff --git a/config/emulators/3ds.conf b/config/emulators/3ds.conf index 9ea1a9d3f..505b32c08 100644 --- a/config/emulators/3ds.conf +++ b/config/emulators/3ds.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2010" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/3ds" SYSTEM_EXTENSION=".3ds .3dsx .elf .axf .cci .cxi .app" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="3ds" SYSTEM_THEME="3ds" SYSTEM_WIKI_PATH="3ds" diff --git a/config/emulators/amiga.conf b/config/emulators/amiga.conf index 5c5fae336..9eb22d57d 100644 --- a/config/emulators/amiga.conf +++ b/config/emulators/amiga.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/amiga" SYSTEM_EXTENSION=".zip .adf .uae .ipf .dms .adz .lha .m3u .hdf .hdz" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="amiga" SYSTEM_THEME="amiga" SYSTEM_WIKI_PATH="amiga" diff --git a/config/emulators/amigacd32.conf b/config/emulators/amigacd32.conf index 01d299d65..b107e5b21 100644 --- a/config/emulators/amigacd32.conf +++ b/config/emulators/amigacd32.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/amigacd32" SYSTEM_EXTENSION=".iso .cue .lha .chd" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="amigacd32" SYSTEM_THEME="amigacd32" SYSTEM_WIKI_PATH="amigacd32" diff --git a/config/emulators/amstradcpc.conf b/config/emulators/amstradcpc.conf index 3c4c30f5d..c64a64c29 100644 --- a/config/emulators/amstradcpc.conf +++ b/config/emulators/amstradcpc.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1984" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/amstradcpc" SYSTEM_EXTENSION=".dsk .cpr .sna .tap .cdt .kcr .voc .m3u .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="amstradcpc" SYSTEM_THEME="amstradcpc" SYSTEM_WIKI_PATH="amstradcpc" diff --git a/config/emulators/arcade.conf b/config/emulators/arcade.conf index 4d9dd7550..c7cb010e2 100644 --- a/config/emulators/arcade.conf +++ b/config/emulators/arcade.conf @@ -5,6 +5,5 @@ SYSTEM_RELEASE="0000" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/arcade" SYSTEM_EXTENSION=".zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="arcade" diff --git a/config/emulators/arduboy.conf b/config/emulators/arduboy.conf index 83f0b8874..4b7526213 100644 --- a/config/emulators/arduboy.conf +++ b/config/emulators/arduboy.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2014" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/arduboy" SYSTEM_EXTENSION=".hex" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arduboy" SYSTEM_THEME="arduboy" SYSTEM_WIKI_PATH="arduboy" diff --git a/config/emulators/atari2600.conf b/config/emulators/atari2600.conf index 2583145bd..48df284a3 100644 --- a/config/emulators/atari2600.conf +++ b/config/emulators/atari2600.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1977" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/atari2600" SYSTEM_EXTENSION=".a26 .bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atari2600" SYSTEM_THEME="atari2600" SYSTEM_WIKI_PATH="atari2600" diff --git a/config/emulators/atari5200.conf b/config/emulators/atari5200.conf index 45ec094e3..94f2b2dad 100644 --- a/config/emulators/atari5200.conf +++ b/config/emulators/atari5200.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/atari5200" SYSTEM_EXTENSION=".rom .xfd .atr .atx .cdm .cas .car .bin .a52 .xex .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atari5200" SYSTEM_THEME="atari5200" SYSTEM_WIKI_PATH="atari5200" diff --git a/config/emulators/atari7800.conf b/config/emulators/atari7800.conf index 5d735a7ef..ffbac48af 100644 --- a/config/emulators/atari7800.conf +++ b/config/emulators/atari7800.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1986" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/atari7800" SYSTEM_EXTENSION=".a78 .bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atari7800" SYSTEM_THEME="atari7800" SYSTEM_WIKI_PATH="atari7800" diff --git a/config/emulators/atari800.conf b/config/emulators/atari800.conf index e7c0394e9..af91084c0 100644 --- a/config/emulators/atari800.conf +++ b/config/emulators/atari800.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1979" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/atari800" SYSTEM_EXTENSION=".rom .xfd .atr .atx .cdm .cas .car .bin .a52 .xex .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atari800" SYSTEM_THEME="atari800" SYSTEM_WIKI_PATH="atari800" diff --git a/config/emulators/atarijaguar.conf b/config/emulators/atarijaguar.conf index 91c1567ce..53ec06924 100644 --- a/config/emulators/atarijaguar.conf +++ b/config/emulators/atarijaguar.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1993" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/atarijaguar" SYSTEM_EXTENSION=".j64 .jag .rom .abs .cof .bin .prg" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atarijaguar" SYSTEM_THEME="atarijaguar" SYSTEM_WIKI_PATH="atarijaguar" diff --git a/config/emulators/atarilynx.conf b/config/emulators/atarilynx.conf index 05d8f2c8d..bbb33a0b8 100644 --- a/config/emulators/atarilynx.conf +++ b/config/emulators/atarilynx.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/atarilynx" SYSTEM_EXTENSION=".lnx .lyx .o .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atarilynx" SYSTEM_THEME="atarilynx" SYSTEM_WIKI_PATH="atarilynx" diff --git a/config/emulators/atarist.conf b/config/emulators/atarist.conf index 2d004681a..6ed1c5635 100644 --- a/config/emulators/atarist.conf +++ b/config/emulators/atarist.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/atarist" SYSTEM_EXTENSION=".st .msa .stx .dim .ipf .m3u .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atarist" SYSTEM_THEME="atarist" SYSTEM_WIKI_PATH="atarist" diff --git a/config/emulators/atomiswave.conf b/config/emulators/atomiswave.conf index 4b72fb219..b4bd9ef9c 100644 --- a/config/emulators/atomiswave.conf +++ b/config/emulators/atomiswave.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2003" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/atomiswave" SYSTEM_EXTENSION=".lst .bin .dat .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="atomiswave arcade" SYSTEM_THEME="atomiswave" SYSTEM_WIKI_PATH="atomiswave" diff --git a/config/emulators/c128.conf b/config/emulators/c128.conf index 110f42a22..b21db28ce 100644 --- a/config/emulators/c128.conf +++ b/config/emulators/c128.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/c128" SYSTEM_EXTENSION=".d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="c128" SYSTEM_THEME="c128" SYSTEM_WIKI_PATH="c128" diff --git a/config/emulators/c16.conf b/config/emulators/c16.conf index d6eabb72f..9aba9ec35 100644 --- a/config/emulators/c16.conf +++ b/config/emulators/c16.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1984" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/c16" SYSTEM_EXTENSION=".d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="c16" SYSTEM_THEME="c16" SYSTEM_WIKI_PATH="c16" diff --git a/config/emulators/c64.conf b/config/emulators/c64.conf index 6c56af47e..044a6d0e7 100644 --- a/config/emulators/c64.conf +++ b/config/emulators/c64.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/c64" SYSTEM_EXTENSION=".d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="c64" SYSTEM_THEME="c64" SYSTEM_WIKI_PATH="c64" diff --git a/config/emulators/cdi.conf b/config/emulators/cdi.conf index f8abf259f..5a2462f98 100644 --- a/config/emulators/cdi.conf +++ b/config/emulators/cdi.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/cdi" SYSTEM_EXTENSION=".chd .cue .iso" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="cdi" SYSTEM_THEME="cdi" SYSTEM_WIKI_PATH="cdi" diff --git a/config/emulators/channelf.conf b/config/emulators/channelf.conf index f5dcbb9d6..6bd25798d 100644 --- a/config/emulators/channelf.conf +++ b/config/emulators/channelf.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1976" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/channelf" SYSTEM_EXTENSION=".bin .chf .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="channelf" SYSTEM_THEME="channelf" SYSTEM_WIKI_PATH="channelf" diff --git a/config/emulators/chip-8.conf b/config/emulators/chip-8.conf index ffa670608..1a8922fc5 100644 --- a/config/emulators/chip-8.conf +++ b/config/emulators/chip-8.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1978" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/chip-8" SYSTEM_EXTENSION=".ch8 .sc8 .xo8" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="chip-8" SYSTEM_THEME="chip-8" SYSTEM_WIKI_PATH="chip-8" diff --git a/config/emulators/colecovision.conf b/config/emulators/colecovision.conf index 4f227e39d..b9065bcef 100644 --- a/config/emulators/colecovision.conf +++ b/config/emulators/colecovision.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/coleco" SYSTEM_EXTENSION=".bin .col .rom .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="colecovision" SYSTEM_THEME="colecovision" SYSTEM_WIKI_PATH="colecovision" diff --git a/config/emulators/cps1.conf b/config/emulators/cps1.conf index a4c1155b8..1dedd2bc3 100644 --- a/config/emulators/cps1.conf +++ b/config/emulators/cps1.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1988" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/cps1" SYSTEM_EXTENSION=".zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="cps1" SYSTEM_WIKI_PATH="cps1" diff --git a/config/emulators/cps2.conf b/config/emulators/cps2.conf index c4a63a22a..7c5ad82ef 100644 --- a/config/emulators/cps2.conf +++ b/config/emulators/cps2.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1993" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/cps2" SYSTEM_EXTENSION=".zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="cps2" SYSTEM_WIKI_PATH="cps2" diff --git a/config/emulators/cps3.conf b/config/emulators/cps3.conf index 9f969c253..7b80aec50 100644 --- a/config/emulators/cps3.conf +++ b/config/emulators/cps3.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1996" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/cps3" SYSTEM_EXTENSION=".zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="cps3" SYSTEM_WIKI_PATH="cps3" diff --git a/config/emulators/daphne.conf b/config/emulators/daphne.conf index 09b9fb2c7..790c98e77 100644 --- a/config/emulators/daphne.conf +++ b/config/emulators/daphne.conf @@ -4,7 +4,6 @@ SYSTEM_MANUFACTURER="Arcade" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/daphne" SYSTEM_EXTENSION=".daphne .singe" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="daphne arcade" SYSTEM_THEME="daphne" SYSTEM_WIKI_PATH="daphne" diff --git a/config/emulators/doom.conf b/config/emulators/doom.conf index 3be397a48..13d942f94 100644 --- a/config/emulators/doom.conf +++ b/config/emulators/doom.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1993" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/doom" SYSTEM_EXTENSION=".doom" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="doom" SYSTEM_THEME="doom" SYSTEM_WIKI_PATH="doom" diff --git a/config/emulators/dreamcast.conf b/config/emulators/dreamcast.conf index 74b05d0c1..b1e746024 100644 --- a/config/emulators/dreamcast.conf +++ b/config/emulators/dreamcast.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1998" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/dreamcast" SYSTEM_EXTENSION=".cdi .gdi .chd .m3u .cue" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="dreamcast" SYSTEM_THEME="dreamcast" SYSTEM_WIKI_PATH="dreamcast" diff --git a/config/emulators/easyrpg.conf b/config/emulators/easyrpg.conf index cabebb406..a4bf4151d 100644 --- a/config/emulators/easyrpg.conf +++ b/config/emulators/easyrpg.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2003" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/easyrpg" SYSTEM_EXTENSION=".zip .easyrpg .ldb" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="easyrpg" SYSTEM_THEME="easyrpg" SYSTEM_WIKI_PATH="easyrpg" diff --git a/config/emulators/famicom.conf b/config/emulators/famicom.conf index 05206b0d3..b6be64a5b 100644 --- a/config/emulators/famicom.conf +++ b/config/emulators/famicom.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1983" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/famicom" SYSTEM_EXTENSION=".nes .unif .unf .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="nes" SYSTEM_THEME="famicom" SYSTEM_WIKI_PATH="nes" diff --git a/config/emulators/fbn.conf b/config/emulators/fbn.conf index b724cc873..eaa47508b 100644 --- a/config/emulators/fbn.conf +++ b/config/emulators/fbn.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2002" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/fbneo" SYSTEM_EXTENSION=".7z .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="fbneo" SYSTEM_WIKI_PATH="fbn" diff --git a/config/emulators/fds.conf b/config/emulators/fds.conf index ebba08cb6..9f89dd441 100644 --- a/config/emulators/fds.conf +++ b/config/emulators/fds.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1986" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/fds" SYSTEM_EXTENSION=".fds .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="fds" SYSTEM_THEME="fds" SYSTEM_WIKI_PATH="fds" diff --git a/config/emulators/gameandwatch.conf b/config/emulators/gameandwatch.conf index fbc5e1b54..aa4ee9cf8 100644 --- a/config/emulators/gameandwatch.conf +++ b/config/emulators/gameandwatch.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1980" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gameandwatch" SYSTEM_EXTENSION=".mgw .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gameandwatch" SYSTEM_THEME="gameandwatch" SYSTEM_WIKI_PATH="gameandwatch" diff --git a/config/emulators/gamecube.conf b/config/emulators/gamecube.conf index aff6ae280..3611f07d5 100644 --- a/config/emulators/gamecube.conf +++ b/config/emulators/gamecube.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/gamecube" SYSTEM_EXTENSION=".gcm .iso .gcz .ciso .wbfs .rvz .dol" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gc" SYSTEM_THEME="gc" SYSTEM_WIKI_PATH="gamecube" diff --git a/config/emulators/gamegear.conf b/config/emulators/gamegear.conf index 9284d6965..1c2c0a6cd 100644 --- a/config/emulators/gamegear.conf +++ b/config/emulators/gamegear.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gamegear" SYSTEM_EXTENSION=".bin .gg .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gamegear" SYSTEM_THEME="gamegear" SYSTEM_WIKI_PATH="gamegear" diff --git a/config/emulators/gb.conf b/config/emulators/gb.conf index 0fb64e7e3..2c77b0d85 100644 --- a/config/emulators/gb.conf +++ b/config/emulators/gb.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gb" SYSTEM_EXTENSION=".gb .gbc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gb" SYSTEM_THEME="gb" SYSTEM_WIKI_PATH="gb" diff --git a/config/emulators/gba.conf b/config/emulators/gba.conf index 534a1aeeb..c17cc1f6e 100644 --- a/config/emulators/gba.conf +++ b/config/emulators/gba.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gba" SYSTEM_EXTENSION=".gba .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gba" SYSTEM_THEME="gba" SYSTEM_WIKI_PATH="gba" diff --git a/config/emulators/gbah.conf b/config/emulators/gbah.conf index 2ca2e0e06..a5de880ad 100644 --- a/config/emulators/gbah.conf +++ b/config/emulators/gbah.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gbah" SYSTEM_EXTENSION=".gba .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gba" SYSTEM_THEME="gbah" SYSTEM_WIKI_PATH="gba" diff --git a/config/emulators/gbc.conf b/config/emulators/gbc.conf index 4e8f17082..eb5407372 100644 --- a/config/emulators/gbc.conf +++ b/config/emulators/gbc.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1998" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gbc" SYSTEM_EXTENSION=".gb .gbc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gbc" SYSTEM_THEME="gbc" SYSTEM_WIKI_PATH="gbc" diff --git a/config/emulators/gbch.conf b/config/emulators/gbch.conf index 4ec0b307c..1f435c315 100644 --- a/config/emulators/gbch.conf +++ b/config/emulators/gbch.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1998" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gbch" SYSTEM_EXTENSION=".gb .gbc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gbc" SYSTEM_THEME="gbch" SYSTEM_WIKI_PATH="gbc" diff --git a/config/emulators/gbh.conf b/config/emulators/gbh.conf index fbfee2c47..5cf3e9d08 100644 --- a/config/emulators/gbh.conf +++ b/config/emulators/gbh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gbh" SYSTEM_EXTENSION=".gb .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gb" SYSTEM_THEME="gbh" SYSTEM_WIKI_PATH="gb" diff --git a/config/emulators/genesis.conf b/config/emulators/genesis.conf index ef831bcbe..afa81002b 100644 --- a/config/emulators/genesis.conf +++ b/config/emulators/genesis.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/genesis" SYSTEM_EXTENSION=".bin .gen .md .sg .smd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="genesis" SYSTEM_THEME="genesis" SYSTEM_WIKI_PATH="genesis" diff --git a/config/emulators/genh.conf b/config/emulators/genh.conf index 3748a7b0e..f39fe0e21 100644 --- a/config/emulators/genh.conf +++ b/config/emulators/genh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/genh" SYSTEM_EXTENSION=".bin .gen .md .sg .smd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="genesis" SYSTEM_THEME="genh" SYSTEM_WIKI_PATH="genesis" diff --git a/config/emulators/ggh.conf b/config/emulators/ggh.conf index f710de0ad..5c7182b7e 100644 --- a/config/emulators/ggh.conf +++ b/config/emulators/ggh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/gamegearh" SYSTEM_EXTENSION=".bin .gg .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="gamegear" SYSTEM_THEME="ggh" SYSTEM_WIKI_PATH="gamegear" diff --git a/config/emulators/idtech.conf b/config/emulators/idtech.conf index 3254f61d2..019689402 100644 --- a/config/emulators/idtech.conf +++ b/config/emulators/idtech.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/.config/idtech" SYSTEM_EXTENSION=".sh" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="idtech" SYSTEM_THEME="idtech" SYSTEM_WIKI_PATH="idtech" diff --git a/config/emulators/intellivision.conf b/config/emulators/intellivision.conf index 280e05151..99686864c 100644 --- a/config/emulators/intellivision.conf +++ b/config/emulators/intellivision.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1979" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/intellivision" SYSTEM_EXTENSION=".int .bin .rom .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="intellivision" SYSTEM_THEME="intellivision" SYSTEM_WIKI_PATH="intellivision" diff --git a/config/emulators/j2me.conf b/config/emulators/j2me.conf index b724df0d9..a53002399 100644 --- a/config/emulators/j2me.conf +++ b/config/emulators/j2me.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2002" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/j2me" SYSTEM_EXTENSION=".jar" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="j2me" SYSTEM_THEME="j2me" SYSTEM_WIKI_PATH="j2me" diff --git a/config/emulators/macintosh.conf b/config/emulators/macintosh.conf index 0fdc0dc01..39e7cfd10 100644 --- a/config/emulators/macintosh.conf +++ b/config/emulators/macintosh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1984" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/mac" SYSTEM_EXTENSION=".dsk .img .hfv .cmd .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="macintosh" SYSTEM_THEME="macintosh" SYSTEM_WIKI_PATH="macintosh" diff --git a/config/emulators/mame.conf b/config/emulators/mame.conf index d0bc8c6d7..25fe59ce1 100644 --- a/config/emulators/mame.conf +++ b/config/emulators/mame.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1997" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/mame" SYSTEM_EXTENSION=".7z .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="mame" SYSTEM_WIKI_PATH="mame" diff --git a/config/emulators/mastersystem.conf b/config/emulators/mastersystem.conf index 7d8c76e8a..f0349a87d 100644 --- a/config/emulators/mastersystem.conf +++ b/config/emulators/mastersystem.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/mastersystem" SYSTEM_EXTENSION=".bin .sms .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="mastersystem" SYSTEM_THEME="mastersystem" SYSTEM_WIKI_PATH="mastersystem" diff --git a/config/emulators/megacd.conf b/config/emulators/megacd.conf index 0b75f2a6a..9c676b724 100644 --- a/config/emulators/megacd.conf +++ b/config/emulators/megacd.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/megacd" SYSTEM_EXTENSION=".chd .cue .iso .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="segacd" SYSTEM_THEME="megacd" SYSTEM_WIKI_PATH="segacd" diff --git a/config/emulators/megadrive-japan.conf b/config/emulators/megadrive-japan.conf index 8a9e64b67..f9de561e1 100644 --- a/config/emulators/megadrive-japan.conf +++ b/config/emulators/megadrive-japan.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1988" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/megadrive-japan" SYSTEM_EXTENSION=".bin .gen .md .sg .smd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="megadrive" SYSTEM_THEME="megadrivejp" SYSTEM_WIKI_PATH="genesis" diff --git a/config/emulators/megadrive.conf b/config/emulators/megadrive.conf index 1eee05e91..14846e884 100644 --- a/config/emulators/megadrive.conf +++ b/config/emulators/megadrive.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/megadrive" SYSTEM_EXTENSION=".bin .gen .md .sg .smd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="megadrive" SYSTEM_THEME="megadrive" SYSTEM_WIKI_PATH="genesis" diff --git a/config/emulators/megaduck.conf b/config/emulators/megaduck.conf index bcdba1e7d..1d6016e9f 100644 --- a/config/emulators/megaduck.conf +++ b/config/emulators/megaduck.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1993" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/megaduck" SYSTEM_EXTENSION=".bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="megaduck" SYSTEM_THEME="megaduck" SYSTEM_WIKI_PATH="megaduck" diff --git a/config/emulators/moto.conf b/config/emulators/moto.conf index aea15fa7a..5082f67f2 100644 --- a/config/emulators/moto.conf +++ b/config/emulators/moto.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/moto" SYSTEM_EXTENSION=".fd .sap .k7 .m7 .m5 .rom" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="moto" SYSTEM_THEME="moto" SYSTEM_WIKI_PATH="moto" diff --git a/config/emulators/mplayer.conf b/config/emulators/mplayer.conf index e38dfa339..18107ffbf 100644 --- a/config/emulators/mplayer.conf +++ b/config/emulators/mplayer.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="System" SYSTEM_HARDWARE="System" SYSTEM_PATH="/storage/roms/mplayer" SYSTEM_EXTENSION=".mp4 .mkv .avi .mov .wmv .m3u .mpg .ytb .twi .sh .mp3 .aac .mka .dts .flac .ogg .m4a .ac3 .opus .wav .wv .eac33 .thd" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="mplayer" SYSTEM_THEME="mplayer" SYSTEM_WIKI_PATH="mplayer" diff --git a/config/emulators/msx.conf b/config/emulators/msx.conf index 7176bd9ef..414ca4546 100644 --- a/config/emulators/msx.conf +++ b/config/emulators/msx.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1983" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/msx" SYSTEM_EXTENSION=".dsk .mx1 .mx2 .rom .zip .7z .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="msx" SYSTEM_THEME="msx" SYSTEM_WIKI_PATH="msx" diff --git a/config/emulators/msx2.conf b/config/emulators/msx2.conf index 4f7166a34..8ad2ea755 100644 --- a/config/emulators/msx2.conf +++ b/config/emulators/msx2.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1988" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/msx2" SYSTEM_EXTENSION=".dsk .mx1 .mx2 .rom .zip .7z .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="msx" SYSTEM_THEME="msx2" SYSTEM_WIKI_PATH="msx" diff --git a/config/emulators/music.conf b/config/emulators/music.conf index 6629fd953..6657dd7bf 100644 --- a/config/emulators/music.conf +++ b/config/emulators/music.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="System" SYSTEM_HARDWARE="System" SYSTEM_PATH="/storage/.config/gmu/playlists" SYSTEM_EXTENSION=".m3u .sh" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="music" SYSTEM_THEME="music" SYSTEM_WIKI_PATH="music" diff --git a/config/emulators/n64.conf b/config/emulators/n64.conf index c5cff6120..d7135a0b5 100644 --- a/config/emulators/n64.conf +++ b/config/emulators/n64.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1996" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/n64" SYSTEM_EXTENSION=".z64 .n64 .v64 .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="n64" SYSTEM_THEME="n64" SYSTEM_WIKI_PATH="n64" diff --git a/config/emulators/naomi.conf b/config/emulators/naomi.conf index 4743bb624..0df11462b 100644 --- a/config/emulators/naomi.conf +++ b/config/emulators/naomi.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1998" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/naomi" SYSTEM_EXTENSION=".lst .bin .dat .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="naomi arcade" SYSTEM_THEME="naomi" SYSTEM_WIKI_PATH="naomi" diff --git a/config/emulators/nds.conf b/config/emulators/nds.conf index df12f40b1..f6b1ffd18 100644 --- a/config/emulators/nds.conf +++ b/config/emulators/nds.conf @@ -5,7 +5,6 @@ SYSTEM_MANUFACTURER="Nintendo" SYSTEM_RELEASE="2005" SYSTEM_HARDWARE="portable" SYSTEM_EXTENSION=".nds .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="nds" SYSTEM_THEME="nds" SYSTEM_WIKI_PATH="nds" diff --git a/config/emulators/neocd.conf b/config/emulators/neocd.conf index 29a28240a..5b806e5ab 100644 --- a/config/emulators/neocd.conf +++ b/config/emulators/neocd.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/neocd" SYSTEM_EXTENSION=".cue .iso .chd" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="neogeocd" SYSTEM_THEME="neogeocd" SYSTEM_WIKI_PATH="neogeocd" diff --git a/config/emulators/neogeo.conf b/config/emulators/neogeo.conf index 433a3d71e..8d47c83a7 100644 --- a/config/emulators/neogeo.conf +++ b/config/emulators/neogeo.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/neogeo" SYSTEM_EXTENSION=".7z .zip .neo" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="neogeo" SYSTEM_THEME="neogeo" SYSTEM_WIKI_PATH="neogeo" diff --git a/config/emulators/nes.conf b/config/emulators/nes.conf index 8196c29de..ddd66df9d 100644 --- a/config/emulators/nes.conf +++ b/config/emulators/nes.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/nes" SYSTEM_EXTENSION=".nes .unif .unf .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="nes" SYSTEM_THEME="nes" SYSTEM_WIKI_PATH="nes" diff --git a/config/emulators/nesh.conf b/config/emulators/nesh.conf index a2109b706..c6e9d36f6 100644 --- a/config/emulators/nesh.conf +++ b/config/emulators/nesh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1985" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/nesh" SYSTEM_EXTENSION=".nes .unif .unf .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="nes" SYSTEM_THEME="nesh" SYSTEM_WIKI_PATH="nes" diff --git a/config/emulators/ngp.conf b/config/emulators/ngp.conf index caf4c7869..956c23141 100644 --- a/config/emulators/ngp.conf +++ b/config/emulators/ngp.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1998" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/ngp" SYSTEM_EXTENSION=".ngp .ngc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="ngp" SYSTEM_THEME="ngp" SYSTEM_WIKI_PATH="ngp" diff --git a/config/emulators/ngpc.conf b/config/emulators/ngpc.conf index 187811f32..c43df8aa1 100644 --- a/config/emulators/ngpc.conf +++ b/config/emulators/ngpc.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1999" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/ngpc" SYSTEM_EXTENSION=".ngp .ngc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="ngpc" SYSTEM_THEME="ngpc" SYSTEM_WIKI_PATH="ngp" diff --git a/config/emulators/odyssey2.conf b/config/emulators/odyssey2.conf index 1c0843c5d..4f4dd6534 100644 --- a/config/emulators/odyssey2.conf +++ b/config/emulators/odyssey2.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1979" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/odyssey" SYSTEM_EXTENSION=".bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="odyssey2" SYSTEM_THEME="odyssey2" SYSTEM_WIKI_PATH="odyssey2" diff --git a/config/emulators/openbor.conf b/config/emulators/openbor.conf index 7ade02353..6a0d9475d 100644 --- a/config/emulators/openbor.conf +++ b/config/emulators/openbor.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2003" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/openbor" SYSTEM_EXTENSION=".pak" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="openbor" SYSTEM_THEME="openbor" SYSTEM_WIKI_PATH="openbor" diff --git a/config/emulators/palm.conf b/config/emulators/palm.conf index 076be548a..94cc171d3 100644 --- a/config/emulators/palm.conf +++ b/config/emulators/palm.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1996" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/palm" SYSTEM_EXTENSION=".prc .pqa .img .pdb .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="palm" SYSTEM_THEME="palm" SYSTEM_WIKI_PATH="palm" diff --git a/config/emulators/pc-8800.conf b/config/emulators/pc-8800.conf index 2b61bd980..5d85b3b35 100644 --- a/config/emulators/pc-8800.conf +++ b/config/emulators/pc-8800.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1981" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/pc88" SYSTEM_EXTENSION=".d88 .u88 .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pc88" SYSTEM_THEME="pc88" SYSTEM_WIKI_PATH="pc88" diff --git a/config/emulators/pc-9800.conf b/config/emulators/pc-9800.conf index aa28770d5..d864ed60f 100644 --- a/config/emulators/pc-9800.conf +++ b/config/emulators/pc-9800.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1983" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/pc98" SYSTEM_EXTENSION=".d98 .zip .fdi .fdd .2hd .tfd .d88 .hdm .xdf .dup .hdi .thd .nhd .hdd .hdn" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pc98" SYSTEM_THEME="pc98" SYSTEM_WIKI_PATH="pc98" diff --git a/config/emulators/pc.conf b/config/emulators/pc.conf index a3066b13e..2debacafb 100644 --- a/config/emulators/pc.conf +++ b/config/emulators/pc.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1981" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/pc" SYSTEM_EXTENSION=".com .bat .exe .dosz" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pc" SYSTEM_THEME="pc" SYSTEM_WIKI_PATH="dos" diff --git a/config/emulators/pcengine.conf b/config/emulators/pcengine.conf index d433f5cca..6acd0de23 100644 --- a/config/emulators/pcengine.conf +++ b/config/emulators/pcengine.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1987" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/pcengine" SYSTEM_EXTENSION=".pce .bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pcengine" SYSTEM_THEME="pcengine" SYSTEM_WIKI_PATH="pcengine" diff --git a/config/emulators/pcenginecd.conf b/config/emulators/pcenginecd.conf index ea1dae12d..f6fea470c 100644 --- a/config/emulators/pcenginecd.conf +++ b/config/emulators/pcenginecd.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1988" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/pcenginecd" SYSTEM_EXTENSION=".cue .ccd .chd .toc .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pcenginecd" SYSTEM_THEME="pce-cd" SYSTEM_WIKI_PATH="pcengine" diff --git a/config/emulators/pcfx.conf b/config/emulators/pcfx.conf index c19d08806..2c2b0d5d6 100644 --- a/config/emulators/pcfx.conf +++ b/config/emulators/pcfx.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/pcfx" SYSTEM_EXTENSION=".chd .cue .ccd .toc" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pcfx" SYSTEM_THEME="pcfx" SYSTEM_WIKI_PATH="pcfx" diff --git a/config/emulators/pet.conf b/config/emulators/pet.conf index a8964bd83..ffb7a3203 100644 --- a/config/emulators/pet.conf +++ b/config/emulators/pet.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1977" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/pet" SYSTEM_EXTENSION=".20 .a0 .b0 .d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .gz .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pet" SYSTEM_THEME="pet" SYSTEM_WIKI_PATH="pet" diff --git a/config/emulators/pico-8.conf b/config/emulators/pico-8.conf index 151d3cc9f..0b542e268 100644 --- a/config/emulators/pico-8.conf +++ b/config/emulators/pico-8.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2015" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/pico-8" SYSTEM_EXTENSION=".p8 .png" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pico-8" SYSTEM_THEME="pico8" SYSTEM_WIKI_PATH="pico-8" diff --git a/config/emulators/pokemini.conf b/config/emulators/pokemini.conf index af702fc82..eb07f8d08 100644 --- a/config/emulators/pokemini.conf +++ b/config/emulators/pokemini.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/pokemini" SYSTEM_EXTENSION=".min .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pokemini" SYSTEM_THEME="pokemini" SYSTEM_WIKI_PATH="pokemini" diff --git a/config/emulators/ports.conf b/config/emulators/ports.conf index a9554ab11..af8053461 100644 --- a/config/emulators/ports.conf +++ b/config/emulators/ports.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="System" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/ports" SYSTEM_EXTENSION=".sh" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pc" SYSTEM_THEME="ports" SYSTEM_WIKI_PATH="ports" diff --git a/config/emulators/ps2.conf b/config/emulators/ps2.conf index 9770e7bfc..d1262d7fe 100644 --- a/config/emulators/ps2.conf +++ b/config/emulators/ps2.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2000" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/ps2" SYSTEM_EXTENSION=".iso .mdf .nrg .bin .img .dump .gz .cso .chd" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="ps2" SYSTEM_THEME="ps2" SYSTEM_WIKI_PATH="ps2" diff --git a/config/emulators/ps3.conf b/config/emulators/ps3.conf index ca3716d09..fd2dc16a8 100644 --- a/config/emulators/ps3.conf +++ b/config/emulators/ps3.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2006" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/ps3" SYSTEM_EXTENSION=".ps3 .psn" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="ps3" SYSTEM_THEME="ps3" SYSTEM_WIKI_PATH="ps3" diff --git a/config/emulators/psp.conf b/config/emulators/psp.conf index fa2410bc6..d206ac662 100644 --- a/config/emulators/psp.conf +++ b/config/emulators/psp.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2004" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/psp" SYSTEM_EXTENSION=".iso .cso .pbp .chd" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="psp" SYSTEM_THEME="psp" SYSTEM_WIKI_PATH="psp" diff --git a/config/emulators/pspminis.conf b/config/emulators/pspminis.conf index 3524652b0..2152fc439 100644 --- a/config/emulators/pspminis.conf +++ b/config/emulators/pspminis.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2004" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/pspminis" SYSTEM_EXTENSION=".iso .cso .pbp" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="psp" SYSTEM_THEME="pspminis" SYSTEM_WIKI_PATH="psp" diff --git a/config/emulators/psvita.conf b/config/emulators/psvita.conf index ff5b34d21..b1a9ebd22 100644 --- a/config/emulators/psvita.conf +++ b/config/emulators/psvita.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2011" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/.config/vita3k/launcher/" SYSTEM_EXTENSION=".sh .psvita" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="psvita" SYSTEM_THEME="psvita" SYSTEM_WIKI_PATH="psvita" diff --git a/config/emulators/psx.conf b/config/emulators/psx.conf index aaadd4cb5..0b08686f1 100644 --- a/config/emulators/psx.conf +++ b/config/emulators/psx.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/psx" SYSTEM_EXTENSION=".bin .cue .img .mdf .pbp .toc .cbn .m3u .ccd .chd .iso" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="psx" SYSTEM_THEME="psx" SYSTEM_WIKI_PATH="psx" diff --git a/config/emulators/satellaview.conf b/config/emulators/satellaview.conf index cbc5091c1..46150e6a1 100644 --- a/config/emulators/satellaview.conf +++ b/config/emulators/satellaview.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1995" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/satellaview" SYSTEM_EXTENSION=".smc .fig .bs .sfc .bsx .swc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="satellaview" SYSTEM_THEME="satellaview" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/saturn.conf b/config/emulators/saturn.conf index 16b2787f1..1db2be75f 100644 --- a/config/emulators/saturn.conf +++ b/config/emulators/saturn.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/saturn" SYSTEM_EXTENSION=".cue .chd .iso .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="saturn" SYSTEM_THEME="saturn" SYSTEM_WIKI_PATH="saturn" diff --git a/config/emulators/scummvm.conf b/config/emulators/scummvm.conf index d72ee6701..3d5506f74 100644 --- a/config/emulators/scummvm.conf +++ b/config/emulators/scummvm.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/.config/scummvm/games" SYSTEM_EXTENSION=".sh .svm .scummvm" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pc" SYSTEM_THEME="scummvm" SYSTEM_WIKI_PATH="scummvm" diff --git a/config/emulators/scv.conf b/config/emulators/scv.conf index 1f2ae0ea2..4660eff07 100644 --- a/config/emulators/scv.conf +++ b/config/emulators/scv.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1984" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/scv" SYSTEM_EXTENSION=".cart .bin .rom .0 .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="scv" SYSTEM_THEME="scv" SYSTEM_WIKI_PATH="scv" diff --git a/config/emulators/sega32x.conf b/config/emulators/sega32x.conf index bc2395fc7..1e98df783 100644 --- a/config/emulators/sega32x.conf +++ b/config/emulators/sega32x.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1994" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/sega32x" SYSTEM_EXTENSION=".32x .smd .bin .md .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="sega32x" SYSTEM_THEME="sega32x" SYSTEM_WIKI_PATH="sega32x" diff --git a/config/emulators/segacd.conf b/config/emulators/segacd.conf index 6fc4bdf9d..aecaf9b61 100644 --- a/config/emulators/segacd.conf +++ b/config/emulators/segacd.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/segacd" SYSTEM_EXTENSION=".chd .cue .iso .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="segacd" SYSTEM_THEME="segacd" SYSTEM_WIKI_PATH="segacd" diff --git a/config/emulators/segamodel3.conf b/config/emulators/segamodel3.conf index 831b92a11..ffe14d749 100644 --- a/config/emulators/segamodel3.conf +++ b/config/emulators/segamodel3.conf @@ -5,6 +5,5 @@ SYSTEM_RELEASE="1996" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/segamodel3" SYSTEM_EXTENSION=".zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="arcade" SYSTEM_THEME="model3" diff --git a/config/emulators/sfc.conf b/config/emulators/sfc.conf index 772cd799b..e66e76bb0 100644 --- a/config/emulators/sfc.conf +++ b/config/emulators/sfc.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1990" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/sfc" SYSTEM_EXTENSION=".smc .fig .sfc .swc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="snes" SYSTEM_THEME="sfc" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/sg-1000.conf b/config/emulators/sg-1000.conf index 071cdf61c..492457720 100644 --- a/config/emulators/sg-1000.conf +++ b/config/emulators/sg-1000.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1983" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/sg-1000" SYSTEM_EXTENSION=".bin .sg .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="sg-1000" SYSTEM_THEME="sg-1000" SYSTEM_WIKI_PATH="sg-1000" diff --git a/config/emulators/snes.conf b/config/emulators/snes.conf index 034dbfdc1..e65a3b01c 100644 --- a/config/emulators/snes.conf +++ b/config/emulators/snes.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/snes" SYSTEM_EXTENSION=".smc .fig .sfc .swc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="snes" SYSTEM_THEME="snes" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/snesh.conf b/config/emulators/snesh.conf index a4eda3b62..108c233c8 100644 --- a/config/emulators/snesh.conf +++ b/config/emulators/snesh.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1991" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/snesh" SYSTEM_EXTENSION=".smc .fig .sfc .swc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="snes" SYSTEM_THEME="snesh" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/snesmsu1.conf b/config/emulators/snesmsu1.conf index 8e1c6b6af..e983775cf 100644 --- a/config/emulators/snesmsu1.conf +++ b/config/emulators/snesmsu1.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2012" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/snesmsu1" SYSTEM_EXTENSION=".smc .fig .sfc .swc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="snesmsu1 snes" SYSTEM_THEME="snes-msu1" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/st-v.conf b/config/emulators/st-v.conf index 209a19758..3c78e2a79 100644 --- a/config/emulators/st-v.conf +++ b/config/emulators/st-v.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1995" SYSTEM_HARDWARE="arcade" SYSTEM_PATH="/storage/roms/st-v" SYSTEM_EXTENSION=".zip .ZIP" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="st-v" SYSTEM_THEME="stv" SYSTEM_WIKI_PATH="st-v" diff --git a/config/emulators/sufami.conf b/config/emulators/sufami.conf index 3f78b5409..073726621 100644 --- a/config/emulators/sufami.conf +++ b/config/emulators/sufami.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1996" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/sufami" SYSTEM_EXTENSION=".st .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="sufami" SYSTEM_THEME="sufami" SYSTEM_WIKI_PATH="snes" diff --git a/config/emulators/supergrafx.conf b/config/emulators/supergrafx.conf index d5919c454..c52ae4ecb 100644 --- a/config/emulators/supergrafx.conf +++ b/config/emulators/supergrafx.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/sgfx" SYSTEM_EXTENSION=".pce .sgx .cue .ccd .chd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="supergrafx" SYSTEM_THEME="supergrafx" SYSTEM_WIKI_PATH="supergrafx" diff --git a/config/emulators/supervision.conf b/config/emulators/supervision.conf index 7dfd14f2c..39cd9d577 100644 --- a/config/emulators/supervision.conf +++ b/config/emulators/supervision.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1992" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/supervision" SYSTEM_EXTENSION=".sv .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="supervision" SYSTEM_THEME="supervision" SYSTEM_WIKI_PATH="supervision" diff --git a/config/emulators/tg16.conf b/config/emulators/tg16.conf index a4def1e47..6b2be777c 100644 --- a/config/emulators/tg16.conf +++ b/config/emulators/tg16.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/tg16" SYSTEM_EXTENSION=".pce .bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pcengine" SYSTEM_THEME="tg16" SYSTEM_WIKI_PATH="pcengine" diff --git a/config/emulators/tg16cd.conf b/config/emulators/tg16cd.conf index 37cfc9096..17fad539e 100644 --- a/config/emulators/tg16cd.conf +++ b/config/emulators/tg16cd.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1989" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/tg16cd" SYSTEM_EXTENSION=".cue .ccd .chd .toc .m3u" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="pcenginecd" SYSTEM_THEME="tg-cd" SYSTEM_WIKI_PATH="pcengine" diff --git a/config/emulators/tic-80.conf b/config/emulators/tic-80.conf index b6af37bfc..c99c7d407 100644 --- a/config/emulators/tic-80.conf +++ b/config/emulators/tic-80.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2017" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/tic-80" SYSTEM_EXTENSION=".tic" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="tic80" SYSTEM_THEME="tic80" SYSTEM_WIKI_PATH="tic-80" diff --git a/config/emulators/uzebox.conf b/config/emulators/uzebox.conf index 00128fc65..f40fc0f5e 100644 --- a/config/emulators/uzebox.conf +++ b/config/emulators/uzebox.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2008" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/uzebox" SYSTEM_EXTENSION=".uze" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="uzebox" SYSTEM_THEME="uzebox" SYSTEM_WIKI_PATH="uzebox" diff --git a/config/emulators/vectrex.conf b/config/emulators/vectrex.conf index cca244202..37d05af56 100644 --- a/config/emulators/vectrex.conf +++ b/config/emulators/vectrex.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/vectrex" SYSTEM_EXTENSION=".bin .gam .vec .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="vectrex" SYSTEM_THEME="vectrex" SYSTEM_WIKI_PATH="vectrex" diff --git a/config/emulators/vic20.conf b/config/emulators/vic20.conf index 24ca114fd..06cd3277e 100644 --- a/config/emulators/vic20.conf +++ b/config/emulators/vic20.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1980" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/vic20" SYSTEM_EXTENSION=".20 .a0 .b0 .d64 .d71 .d80 .d81 .d82 .g64 .g41 .x64 .t64 .tap .prg .p00 .crt .bin .gz .d6z .d7z .d8z .g6z .g4z .x6z .cmd .m3u .vsf .nib .nbz .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="vic20" SYSTEM_THEME="vic20" SYSTEM_WIKI_PATH="vic20" diff --git a/config/emulators/videopac.conf b/config/emulators/videopac.conf index 07f0d1ca1..30b6eec86 100644 --- a/config/emulators/videopac.conf +++ b/config/emulators/videopac.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1978" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/videopac" SYSTEM_EXTENSION=".bin .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="videopac" SYSTEM_THEME="videopac" SYSTEM_WIKI_PATH="videopac" diff --git a/config/emulators/vircon32.conf b/config/emulators/vircon32.conf index 56dd81369..42f82298b 100644 --- a/config/emulators/vircon32.conf +++ b/config/emulators/vircon32.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2021" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/vircon32" SYSTEM_EXTENSION=".v32" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="vircon32" SYSTEM_THEME="vircon32" SYSTEM_WIKI_PATH="vircon32" diff --git a/config/emulators/virtualboy.conf b/config/emulators/virtualboy.conf index 21d9e3c37..4c59fae43 100644 --- a/config/emulators/virtualboy.conf +++ b/config/emulators/virtualboy.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1995" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/virtualboy" SYSTEM_EXTENSION=".vb .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="virtualboy" SYSTEM_THEME="virtualboy" SYSTEM_WIKI_PATH="virtualboy" diff --git a/config/emulators/wii.conf b/config/emulators/wii.conf index edd19339d..b86dfb945 100644 --- a/config/emulators/wii.conf +++ b/config/emulators/wii.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2006" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/wii" SYSTEM_EXTENSION=".gcm .iso .gcz .ciso .wbfs .rvz .dol .wad" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="wii" SYSTEM_THEME="wii" SYSTEM_WIKI_PATH="wii" diff --git a/config/emulators/wiiu.conf b/config/emulators/wiiu.conf index ce5007325..23bf3b7c0 100644 --- a/config/emulators/wiiu.conf +++ b/config/emulators/wiiu.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2012" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/wiiu" SYSTEM_EXTENSION=".wud .wux .wua" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="wiiu" SYSTEM_THEME="wiiu" SYSTEM_WIKI_PATH="wiiu" diff --git a/config/emulators/wonderswan.conf b/config/emulators/wonderswan.conf index 85f5d2b84..b61921d6d 100644 --- a/config/emulators/wonderswan.conf +++ b/config/emulators/wonderswan.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1999" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/wonderswan" SYSTEM_EXTENSION=".ws .wsc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="wonderswan" SYSTEM_THEME="wonderswan" SYSTEM_WIKI_PATH="wonderswan" diff --git a/config/emulators/wonderswancolor.conf b/config/emulators/wonderswancolor.conf index 460571ce1..41631f79a 100644 --- a/config/emulators/wonderswancolor.conf +++ b/config/emulators/wonderswancolor.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2000" SYSTEM_HARDWARE="portable" SYSTEM_PATH="/storage/roms/wonderswancolor" SYSTEM_EXTENSION=".ws .wsc .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="wonderswancolor" SYSTEM_THEME="wonderswancolor" SYSTEM_WIKI_PATH="wonderswancolor" diff --git a/config/emulators/x1.conf b/config/emulators/x1.conf index 18c9326ea..01c16bf1d 100644 --- a/config/emulators/x1.conf +++ b/config/emulators/x1.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/x1" SYSTEM_EXTENSION=".dx1 .2d .2hd .tfd .d88 .88d .hdm .xdf .dup .tap .cmd .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="x1" SYSTEM_THEME="x1" SYSTEM_WIKI_PATH="x1" diff --git a/config/emulators/x68000.conf b/config/emulators/x68000.conf index d627c17b1..db3db6f3f 100644 --- a/config/emulators/x68000.conf +++ b/config/emulators/x68000.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1987" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/x68000" SYSTEM_EXTENSION=".dim .img .d88 .hdm .dup .2hd .xdf .hdf .cmd .m3u .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="x68000" SYSTEM_THEME="x68000" SYSTEM_WIKI_PATH="x68000" diff --git a/config/emulators/xbox.conf b/config/emulators/xbox.conf index 8045988dd..36ee74ec6 100644 --- a/config/emulators/xbox.conf +++ b/config/emulators/xbox.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="2001" SYSTEM_HARDWARE="console" SYSTEM_PATH="/storage/roms/xbox" SYSTEM_EXTENSION=".iso" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="xbox" SYSTEM_THEME="xbox" SYSTEM_WIKI_PATH="xbox" diff --git a/config/emulators/zmachine.conf b/config/emulators/zmachine.conf index 26ef4b57b..58f9e4eed 100644 --- a/config/emulators/zmachine.conf +++ b/config/emulators/zmachine.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1979" SYSTEM_HARDWARE="game engine" SYSTEM_PATH="/storage/roms/zmachine" SYSTEM_EXTENSION=".dat .z1 .z2 .z3 .z4 .z5 .z6 .zip" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="z-machine" SYSTEM_THEME="zmachine" SYSTEM_WIKI_PATH="zmachine" diff --git a/config/emulators/zx81.conf b/config/emulators/zx81.conf index 52f983163..a9c7f3a77 100644 --- a/config/emulators/zx81.conf +++ b/config/emulators/zx81.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1981" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/zx81" SYSTEM_EXTENSION=".tzx .p .t81 .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="zx81" SYSTEM_THEME="zx81" SYSTEM_WIKI_PATH="zx81" diff --git a/config/emulators/zxspectrum.conf b/config/emulators/zxspectrum.conf index 251ca6dc4..a3754f9c0 100644 --- a/config/emulators/zxspectrum.conf +++ b/config/emulators/zxspectrum.conf @@ -5,7 +5,6 @@ SYSTEM_RELEASE="1982" SYSTEM_HARDWARE="computer" SYSTEM_PATH="/storage/roms/zxspectrum" SYSTEM_EXTENSION=".tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z" -SYSTEM_COMMAND="/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers=\"%CONTROLLERSCONFIG%\"" SYSTEM_PLATFORM="zxspectrum" SYSTEM_THEME="zxspectrum" SYSTEM_WIKI_PATH="zxspectrum" diff --git a/config/functions b/config/functions index 1ad2e8fd8..e20c38a54 100644 --- a/config/functions +++ b/config/functions @@ -1885,6 +1885,7 @@ EOF } add_es_system() { + RUNCMD='/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers="%CONTROLLERSCONFIG%"' if [ -e "${ROOT}/config/emulators/${1}.conf" ] then . ${ROOT}/config/emulators/${1}.conf @@ -1894,7 +1895,10 @@ add_es_system() { then mkdir -p "${ESTMP}" fi - + if [[ -z "${SYSTEM_COMMAND}" ]]; + then + SYSTEM_COMMAND=$RUNCMD + fi if [ ! -e "${ESTMP}/${SYSTEM_NAME}.tmp" ] then cat <${ESTMP}/${SYSTEM_NAME}.tmp From 405f1be465e6572983e69f4b1b4a6a87f6b84d13 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 2 May 2024 05:26:06 +0000 Subject: [PATCH 132/184] RK3399: RG552 patch clean up --- .../patches/linux/RK3399/000-rk3399-dts.patch | 14 +- .../patches/linux/RK3399/001-rk3399-opp.patch | 158 ++++++++---------- ...dc-joypad.patch => 003-rg552-joypad.patch} | 90 +++------- .../linux/RK3399/999-clear-log-spam.patch | 40 ++++- 4 files changed, 137 insertions(+), 165 deletions(-) rename projects/Rockchip/patches/linux/RK3399/{003-singleadc-joypad.patch => 003-rg552-joypad.patch} (95%) diff --git a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch index c916c4af6..054279d9a 100644 --- a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch +++ b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch @@ -1,6 +1,6 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boot/dts/rockchip/Makefile --- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-04-12 20:11:08.853321539 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-04-23 16:40:41.368372474 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-05-01 23:32:31.908510282 +0000 @@ -30,6 +30,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-li dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-orion-r68-meta.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-px5-evb.dtb @@ -11,8 +11,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boo dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ficus.dtb diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 2024-04-24 14:55:25.961040764 +0000 -@@ -0,0 +1,1304 @@ ++++ linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 2024-05-01 23:33:30.689814365 +0000 +@@ -0,0 +1,1300 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd. @@ -27,7 +27,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin +#include +#include +#include "rk3399.dtsi" -+#include "rk3399-op1-opp.dtsi" ++#include "rk3399-opp.dtsi" + +/ { + model = "Anbernic RG552"; @@ -106,7 +106,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + }; + -+ joypad: singleadc-joypad { ++ joypad: rg552_joypad { + compatible = "rg552_joypad"; + + pwms = <&pwm3 0 200000000 0>; @@ -306,10 +306,6 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + VCC-supply = <&vcc5v0_sys>; + }; + -+ hdmi-sound { -+ status = "okay"; -+ }; -+ + fan: pwm-fan { + compatible = "pwm-fan"; + pwms = <&pwm1 0 10000 1>; diff --git a/projects/Rockchip/patches/linux/RK3399/001-rk3399-opp.patch b/projects/Rockchip/patches/linux/RK3399/001-rk3399-opp.patch index 012b7ca51..ebb1ec3bf 100644 --- a/projects/Rockchip/patches/linux/RK3399/001-rk3399-opp.patch +++ b/projects/Rockchip/patches/linux/RK3399/001-rk3399-opp.patch @@ -1,160 +1,146 @@ -diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-op1-opp.dtsi linux/arch/arm64/boot/dts/rockchip/rk3399-op1-opp.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3399-op1-opp.dtsi 2024-01-31 00:19:09.560493706 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3399-op1-opp.dtsi 2024-01-31 00:23:30.222617860 +0000 -@@ -9,34 +9,35 @@ +diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi linux/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi 2024-04-12 20:11:08.857321667 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi 2024-05-01 18:44:49.576985506 +0000 +@@ -9,30 +9,35 @@ opp-shared; opp00 { - opp-hz = /bits/ 64 <408000000>; -- opp-microvolt = <800000>; -- clock-latency-ns = <40000>; -- }; -- opp01 { - opp-hz = /bits/ 64 <600000000>; - opp-microvolt = <825000>; -+ clock-latency-ns = <40000>; ++ opp-hz = /bits/ 64 <600000000>; + opp-microvolt = <825000 825000 1250000>; + clock-latency-ns = <40000>; }; -- opp02 { -- opp-hz = /bits/ 64 <816000000>; -- opp-microvolt = <850000>; + opp01 { +- opp-hz = /bits/ 64 <600000000>; +- opp-microvolt = <825000 825000 1250000>; - }; +- opp02 { + opp-hz = /bits/ 64 <816000000>; + opp-microvolt = <850000 850000 1250000>; + }; - opp03 { -+ opp01 { ++ opp02 { opp-hz = /bits/ 64 <1008000000>; - opp-microvolt = <900000>; + opp-microvolt = <925000 925000 1250000>; }; - opp04 { -+ opp02 { ++ opp03 { opp-hz = /bits/ 64 <1200000000>; - opp-microvolt = <975000>; + opp-microvolt = <1000000 1000000 1250000>; }; - opp05 { -+ opp03 { - opp-hz = /bits/ 64 <1416000000>; - opp-microvolt = <1100000>; - }; -- opp06 { + opp04 { - opp-hz = /bits/ 64 <1512000000>; - opp-microvolt = <1150000>; + opp-hz = /bits/ 64 <1416000000>; + opp-microvolt = <1125000 1125000 1250000>; }; -+ opp05 { -+ opp-hz = /bits/ 64 <1608000000>; -+ opp-microvolt = <1200000>; -+ }; ++ opp05 { ++ opp-hz = /bits/ 64 <1608000000>; ++ opp-microvolt = <1250000 1275000 1300000>; ++ }; + opp06 { + opp-hz = /bits/ 64 <1704000000>; -+ opp-microvolt = <1225000>; ++ opp-microvolt = <1300000 1300000 1300000>; + turbo-mode; + }; }; cluster1_opp: opp-table-1 { -@@ -44,42 +45,39 @@ +@@ -40,38 +45,43 @@ opp-shared; opp00 { - opp-hz = /bits/ 64 <408000000>; -- opp-microvolt = <800000>; +- opp-microvolt = <825000 825000 1250000>; - clock-latency-ns = <40000>; - }; - opp01 { opp-hz = /bits/ 64 <600000000>; -- opp-microvolt = <800000>; -- }; + opp-microvolt = <825000 825000 1250000>; ++ clock-latency-ns = <40000>; + }; - opp02 { -- opp-hz = /bits/ 64 <816000000>; - opp-microvolt = <825000>; -+ clock-latency-ns = <40000>; ++ opp01 { + opp-hz = /bits/ 64 <816000000>; + opp-microvolt = <825000 825000 1250000>; }; - opp03 { -+ opp01 { ++ opp02 { opp-hz = /bits/ 64 <1008000000>; - opp-microvolt = <850000>; + opp-microvolt = <875000 875000 1250000>; }; - opp04 { -+ opp02 { ++ opp03 { opp-hz = /bits/ 64 <1200000000>; - opp-microvolt = <900000>; + opp-microvolt = <950000 950000 1250000>; }; - opp05 { -+ opp03 { ++ opp04 { opp-hz = /bits/ 64 <1416000000>; - opp-microvolt = <975000>; + opp-microvolt = <1025000 1025000 1250000>; }; - opp06 { -+ opp04 { ++ opp05 { opp-hz = /bits/ 64 <1608000000>; - opp-microvolt = <1050000>; + opp-microvolt = <1100000 1100000 1250000>; }; - opp07 { -+ opp05 { - opp-hz = /bits/ 64 <1800000000>; - opp-microvolt = <1150000>; - }; -- opp08 { -- opp-hz = /bits/ 64 <2016000000>; + opp06 { -+ opp-hz = /bits/ 64 <2088000000>; - opp-microvolt = <1250000>; + opp-hz = /bits/ 64 <1800000000>; + opp-microvolt = <1200000 1200000 1250000>; }; + opp07 { ++ opp-hz = /bits/ 64 <2088000000>; ++ opp-microvolt = <1275000 1300000 1300000>; ++ }; ++ opp08 { + opp-hz = /bits/ 64 <2208000000>; -+ opp-microvolt = <1350000>; ++ opp-microvolt = <1300000 1325000 1350000>; + turbo-mode; + }; }; gpu_opp_table: opp-table-2 { -@@ -90,44 +88,25 @@ - opp-microvolt = <800000>; +@@ -82,25 +92,30 @@ + opp-microvolt = <825000 825000 1150000>; }; opp01 { - opp-hz = /bits/ 64 <297000000>; -- opp-microvolt = <800000>; +- opp-microvolt = <825000 825000 1150000>; - }; - opp02 { - opp-hz = /bits/ 64 <400000000>; -- opp-microvolt = <825000>; +- opp-microvolt = <825000 825000 1150000>; - }; - opp03 { - opp-hz = /bits/ 64 <500000000>; -- opp-microvolt = <850000>; +- opp-microvolt = <875000 875000 1150000>; - }; - opp04 { opp-hz = /bits/ 64 <600000000>; - opp-microvolt = <925000>; + opp-microvolt = <925000 925000 1150000>; }; - opp05 { + opp02 { opp-hz = /bits/ 64 <800000000>; - opp-microvolt = <1075000>; + opp-microvolt = <1100000 1100000 1150000>; }; -+ opp03 { -+ opp-hz = /bits/ 64 <900000000>; -+ opp-microvolt = <1150000>; -+ }; ++ opp03 { ++ opp-hz = /bits/ 64 <900000000>; ++ opp-microvolt = <1150000 1150000 1150000>; ++ }; ++ }; ++ ++ dmc_opp_table: opp-table-3 { ++ compatible = "operating-points-v2"; + ++ opp00 { ++ opp-hz = /bits/ 64 <666000000>; ++ opp-microvolt = <900000>; ++ }; ++ opp01 { ++ opp-hz = /bits/ 64 <856000000>; ++ opp-microvolt = <900000>; ++ }; }; + }; - dmc_opp_table: opp-table-3 { - compatible = "operating-points-v2"; - - opp00 { -- opp-hz = /bits/ 64 <400000000>; -- opp-microvolt = <900000>; -- }; -- opp01 { -- opp-hz = /bits/ 64 <666000000>; -- opp-microvolt = <900000>; -- }; -- opp02 { -- opp-hz = /bits/ 64 <800000000>; -- opp-microvolt = <900000>; -- }; -- opp03 { -- opp-hz = /bits/ 64 <928000000>; -+ opp-hz = /bits/ 64 <933000000>; - opp-microvolt = <925000>; - }; - }; diff --git a/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch b/projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch similarity index 95% rename from projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch rename to projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch index 92b53c462..019043d31 100644 --- a/projects/Rockchip/patches/linux/RK3399/003-singleadc-joypad.patch +++ b/projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch @@ -1,6 +1,6 @@ diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c ---- linux.orig/drivers/gpio/gpiolib-of.c 2024-01-08 18:42:48.903867377 +0000 -+++ linux/drivers/gpio/gpiolib-of.c 2024-01-08 18:46:49.713063075 +0000 +--- linux.orig/drivers/gpio/gpiolib-of.c 2024-04-12 20:11:09.129330342 +0000 ++++ linux/drivers/gpio/gpiolib-of.c 2024-05-02 00:52:08.985482784 +0000 @@ -25,21 +25,6 @@ #include "gpiolib.h" #include "gpiolib-of.h" @@ -23,7 +23,7 @@ diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c /** * of_gpio_named_count() - Count GPIOs for a device * @np: device node to count GPIOs for -@@ -398,6 +383,20 @@ out: +@@ -408,6 +393,20 @@ out: return desc; } @@ -45,8 +45,8 @@ diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c * of_get_named_gpio() - Get a GPIO number to use with GPIO API * @np: device node to get GPIO from diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig ---- linux.orig/drivers/input/Kconfig 2024-01-08 18:42:49.679884040 +0000 -+++ linux/drivers/input/Kconfig 2024-01-08 18:43:42.593020626 +0000 +--- linux.orig/drivers/input/Kconfig 2024-04-12 20:11:09.469341185 +0000 ++++ linux/drivers/input/Kconfig 2024-05-02 00:52:08.985482784 +0000 @@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS To compile this driver as a module, choose M here: the module will be called ff-memless. @@ -68,8 +68,8 @@ diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig tristate "Sparse keymap support library" help diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile ---- linux.orig/drivers/input/Makefile 2024-01-08 18:42:49.679884040 +0000 -+++ linux/drivers/input/Makefile 2024-01-08 18:43:42.593020626 +0000 +--- linux.orig/drivers/input/Makefile 2024-04-12 20:11:09.469341185 +0000 ++++ linux/drivers/input/Makefile 2024-05-02 00:52:08.985482784 +0000 @@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i input-core-y += touchscreen.o @@ -80,7 +80,7 @@ diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-polldev.c --- linux.orig/drivers/input/input-polldev.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/input-polldev.c 2024-01-08 18:43:42.593020626 +0000 ++++ linux/drivers/input/input-polldev.c 2024-05-02 00:52:08.985482784 +0000 @@ -0,0 +1,362 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* @@ -445,8 +445,8 @@ diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-po +} +EXPORT_SYMBOL(input_unregister_polled_device); diff -rupN linux.orig/drivers/input/joystick/Kconfig linux/drivers/input/joystick/Kconfig ---- linux.orig/drivers/input/joystick/Kconfig 2024-01-08 18:42:49.679884040 +0000 -+++ linux/drivers/input/joystick/Kconfig 2024-01-08 18:43:42.593020626 +0000 +--- linux.orig/drivers/input/joystick/Kconfig 2024-04-12 20:11:09.469341185 +0000 ++++ linux/drivers/input/joystick/Kconfig 2024-05-02 00:52:08.985482784 +0000 @@ -393,6 +393,12 @@ config JOYSTICK_FSIA6B To compile this driver as a module, choose M here: the module will be called fsia6b. @@ -461,20 +461,20 @@ diff -rupN linux.orig/drivers/input/joystick/Kconfig linux/drivers/input/joystic bool "N64 controller" depends on MACH_NINTENDO64 diff -rupN linux.orig/drivers/input/joystick/Makefile linux/drivers/input/joystick/Makefile ---- linux.orig/drivers/input/joystick/Makefile 2024-01-08 18:42:49.679884040 +0000 -+++ linux/drivers/input/joystick/Makefile 2024-01-08 18:43:42.593020626 +0000 -@@ -30,6 +30,7 @@ obj-$(CONFIG_JOYSTICK_PXRC) += pxrc.o +--- linux.orig/drivers/input/joystick/Makefile 2024-04-12 20:11:09.469341185 +0000 ++++ linux/drivers/input/joystick/Makefile 2024-05-02 00:59:41.167445165 +0000 +@@ -28,6 +28,7 @@ obj-$(CONFIG_JOYSTICK_N64) += n64joy.o + obj-$(CONFIG_JOYSTICK_PSXPAD_SPI) += psxpad-spi.o + obj-$(CONFIG_JOYSTICK_PXRC) += pxrc.o obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-joystick.o ++obj-$(CONFIG_JOYSTICK_RG552) += rg552_joypad.o + obj-$(CONFIG_JOYSTICK_SEESAW) += adafruit-seesaw.o obj-$(CONFIG_JOYSTICK_SENSEHAT) += sensehat-joystick.o obj-$(CONFIG_JOYSTICK_SIDEWINDER) += sidewinder.o -+obj-$(CONFIG_JOYSTICK_RG552) += rg552_joypad.o - obj-$(CONFIG_JOYSTICK_SPACEBALL) += spaceball.o - obj-$(CONFIG_JOYSTICK_SPACEORB) += spaceorb.o - obj-$(CONFIG_JOYSTICK_STINGER) += stinger.o diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/joystick/rg552_joypad.c --- linux.orig/drivers/input/joystick/rg552_joypad.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/joystick/rg552_joypad.c 2024-01-08 18:43:54.081267482 +0000 -@@ -0,0 +1,1448 @@ ++++ linux/drivers/input/joystick/rg552_joypad.c 2024-05-02 04:17:12.276052203 +0000 +@@ -0,0 +1,1408 @@ +/*----------------------------------------------------------------------------*/ + +/* @@ -638,11 +638,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + pwm_vibrator_stop(joypad); +} + -+/*----------------------------------------------------------------------------*/ -+// -+// set to the value in the boot.ini file. (if exist) -+// -+/*----------------------------------------------------------------------------*/ +static unsigned int g_button_adc_fuzz = 0; +static unsigned int g_button_adc_flat = 0; +static unsigned int g_button_adc_scale = 0; @@ -1015,7 +1010,7 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + struct platform_device *pdev = to_platform_device(dev); + struct joypad *joypad = platform_get_drvdata(pdev); + -+ return sprintf(buf, "%d\n", pwm_get_period(joypad->pwm)); ++ return sprintf(buf, "%llu\n", pwm_get_period(joypad->pwm)); +} + +/*----------------------------------------------------------------------------*/ @@ -1124,9 +1119,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + struct device_attribute *attr, + char *buf) +{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ //int stcon; + ssize_t pos=0; + if(gpio_get_value(54)==1) + { @@ -1219,7 +1211,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + /* Read first joystick axis */ + adcx->value = joypad_adc_read(joypad->amux, adcx); + if (!adcx->value) { -+ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); + continue; + } + adcx->value = adcx->value - adcx->cal; @@ -1227,7 +1218,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + /* Read second joystick axis */ + adcy->value = joypad_adc_read(joypad->amux, adcy); + if (!adcy->value) { -+ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); + continue; + } + adcy->value = adcy->value - adcy->cal; @@ -1309,8 +1299,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + continue; + } + adc->cal = adc->value; -+ //dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", -+ // __func__, nbtn, adc->cal); + } + /* buttons status sync */ + joypad_adc_check(poll_dev); @@ -1320,8 +1308,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + mutex_lock(&joypad->lock); + joypad->enable = true; + mutex_unlock(&joypad->lock); -+ -+ //dev_info(joypad->dev, "%s : opened\n", __func__); +} + +/*----------------------------------------------------------------------------*/ @@ -1336,8 +1322,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ + + cancel_work_sync(&joypad->play_work); + pwm_vibrator_stop(joypad); -+ -+ //dev_info(joypad->dev, "%s : closed\n", __func__); +} + +/*----------------------------------------------------------------------------*/ @@ -1570,30 +1554,6 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ +} + +/*----------------------------------------------------------------------------*/ -+struct input_dev * joypad_input_g; -+ -+ -+void rk_send_key_f_key_up(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 1); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_up); -+ -+ -+void rk_send_key_f_key_down(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 0); -+ input_sync(joypad_input_g); -+} -+EXPORT_SYMBOL(rk_send_key_f_key_down); -+ +static int rumble_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect) +{ + struct joypad *joypad = data; @@ -1925,7 +1885,7 @@ diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/ +module_exit(joypad_exit); diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-polldev.h --- linux.orig/include/linux/input-polldev.h 1970-01-01 00:00:00.000000000 +0000 -+++ linux/include/linux/input-polldev.h 2024-01-08 18:43:42.593020626 +0000 ++++ linux/include/linux/input-polldev.h 2024-05-02 00:52:08.985482784 +0000 @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef _INPUT_POLLDEV_H @@ -1986,8 +1946,8 @@ diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-po + +#endif diff -rupN linux.orig/include/linux/of_gpio.h linux/include/linux/of_gpio.h ---- linux.orig/include/linux/of_gpio.h 2024-01-08 18:42:51.555924323 +0000 -+++ linux/include/linux/of_gpio.h 2024-01-08 19:08:52.942972824 +0000 +--- linux.orig/include/linux/of_gpio.h 2024-04-12 20:11:09.977357387 +0000 ++++ linux/include/linux/of_gpio.h 2024-05-02 00:52:08.985482784 +0000 @@ -17,8 +17,26 @@ struct device_node; @@ -2048,8 +2008,8 @@ diff -rupN linux.orig/include/linux/of_gpio.h linux/include/linux/of_gpio.h + #endif /* __LINUX_OF_GPIO_H */ diff -rupN linux.orig/include/linux/pwm.h linux/include/linux/pwm.h ---- linux.orig/include/linux/pwm.h 2024-01-22 21:57:30.564587413 +0000 -+++ linux/include/linux/pwm.h 2024-01-22 22:17:09.475459054 +0000 +--- linux.orig/include/linux/pwm.h 2024-04-12 20:11:09.985357642 +0000 ++++ linux/include/linux/pwm.h 2024-05-02 00:52:08.985482784 +0000 @@ -110,6 +110,12 @@ static inline bool pwm_is_enabled(const return state.enabled; } diff --git a/projects/Rockchip/patches/linux/RK3399/999-clear-log-spam.patch b/projects/Rockchip/patches/linux/RK3399/999-clear-log-spam.patch index 7477480d0..03e8c34bd 100644 --- a/projects/Rockchip/patches/linux/RK3399/999-clear-log-spam.patch +++ b/projects/Rockchip/patches/linux/RK3399/999-clear-log-spam.patch @@ -1,6 +1,6 @@ diff -rupN linux.orig/drivers/gpio/gpio-rockchip.c linux/drivers/gpio/gpio-rockchip.c ---- linux.orig/drivers/gpio/gpio-rockchip.c 2023-12-22 04:23:33.879905917 +0000 -+++ linux/drivers/gpio/gpio-rockchip.c 2023-12-22 05:08:03.636801366 +0000 +--- linux.orig/drivers/gpio/gpio-rockchip.c 2024-04-12 20:11:09.129330342 +0000 ++++ linux/drivers/gpio/gpio-rockchip.c 2024-05-01 23:09:29.557274731 +0000 @@ -335,13 +335,13 @@ static void rockchip_irq_demux(struct ir unsigned long pending; unsigned int irq; @@ -18,9 +18,9 @@ diff -rupN linux.orig/drivers/gpio/gpio-rockchip.c linux/drivers/gpio/gpio-rockc /* * Triggering IRQ on both rising and falling edge diff -rupN linux.orig/drivers/input/touchscreen/goodix.c linux/drivers/input/touchscreen/goodix.c ---- linux.orig/drivers/input/touchscreen/goodix.c 2023-12-22 04:23:34.199912947 +0000 -+++ linux/drivers/input/touchscreen/goodix.c 2023-12-22 05:08:59.121963345 +0000 -@@ -1019,7 +1019,7 @@ retry_get_irq_gpio: +--- linux.orig/drivers/input/touchscreen/goodix.c 2024-04-12 20:11:09.473341313 +0000 ++++ linux/drivers/input/touchscreen/goodix.c 2024-05-01 23:09:29.557274731 +0000 +@@ -1020,7 +1020,7 @@ retry_get_irq_gpio: default: if (ts->gpiod_int && ts->gpiod_rst) { ts->reset_controller_at_probe = true; @@ -29,3 +29,33 @@ diff -rupN linux.orig/drivers/input/touchscreen/goodix.c linux/drivers/input/tou ts->irq_pin_access_method = IRQ_PIN_ACCESS_GPIO; } } +diff -rupN linux.orig/sound/soc/codecs/hdmi-codec.c linux/sound/soc/codecs/hdmi-codec.c +--- linux.orig/sound/soc/codecs/hdmi-codec.c 2024-04-12 20:11:10.145362745 +0000 ++++ linux/sound/soc/codecs/hdmi-codec.c 2024-05-01 23:10:25.914597595 +0000 +@@ -438,7 +438,7 @@ static int hdmi_codec_startup(struct snd + + mutex_lock(&hcp->lock); + if (hcp->busy) { +- dev_err(dai->dev, "Only one simultaneous stream supported!\n"); ++ //dev_err(dai->dev, "Only one simultaneous stream supported!\n"); + mutex_unlock(&hcp->lock); + return -EINVAL; + } +diff -rupN linux.orig/sound/soc/soc-dai.c linux/sound/soc/soc-dai.c +--- linux.orig/sound/soc/soc-dai.c 2024-04-12 20:11:10.169363511 +0000 ++++ linux/sound/soc/soc-dai.c 2024-05-01 23:18:20.597488414 +0000 +@@ -23,10 +23,10 @@ static inline int _soc_dai_ret(struct sn + case -EPROBE_DEFER: + case -ENOTSUPP: + break; +- default: +- dev_err(dai->dev, +- "ASoC: error at %s on %s: %d\n", +- func, dai->name, ret); ++ //default: ++ // dev_err(dai->dev, ++ // "ASoC: error at %s on %s: %d\n", ++ // func, dai->name, ret); + } + + return ret; From 59e1a95459e6627d054492b3d2da43f2231cb585 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 2 May 2024 20:27:49 +0000 Subject: [PATCH 133/184] Bump cores / emus --- config/blocklist | 8 ++++++++ .../AMD64/SUPPORTED_EMULATORS_AND_CORES.md | 4 ++-- .../RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md | 2 +- .../S922X/SUPPORTED_EMULATORS_AND_CORES.md | 4 ++-- packages/apps/moonlight/package.mk | 2 +- packages/compat/box64/package.mk | 2 +- packages/compat/box86/package.mk | 2 +- packages/emulators/libretro/beetle-pce-fast-lr/package.mk | 2 +- packages/emulators/libretro/beetle-pce-lr/package.mk | 2 +- packages/emulators/libretro/beetle-psx-lr/package.mk | 2 +- packages/emulators/libretro/bsnes-lr/package.mk | 2 +- packages/emulators/libretro/core-info/package.mk | 2 +- packages/emulators/libretro/desmume-lr/package.mk | 2 +- packages/emulators/libretro/dolphin-lr/package.mk | 2 +- packages/emulators/libretro/fake08-lr/package.mk | 2 +- packages/emulators/libretro/fbneo-lr/package.mk | 2 +- packages/emulators/libretro/fceumm-lr/package.mk | 2 +- packages/emulators/libretro/flycast-lr/package.mk | 2 +- packages/emulators/libretro/freechaf-lr/package.mk | 2 +- packages/emulators/libretro/gearboy-lr/package.mk | 2 +- packages/emulators/libretro/gearsystem-lr/package.mk | 2 +- packages/emulators/libretro/genesis-plus-gx-lr/package.mk | 2 +- packages/emulators/libretro/gpsp-lr/package.mk | 2 +- packages/emulators/libretro/jaxe-lr/package.mk | 2 +- packages/emulators/libretro/libretro-database/package.mk | 2 +- packages/emulators/libretro/mame-lr/package.mk | 2 +- packages/emulators/libretro/mame2003-plus-lr/package.mk | 2 +- packages/emulators/libretro/minivmac-lr/package.mk | 2 +- packages/emulators/libretro/nestopia-lr/package.mk | 2 +- packages/emulators/libretro/opera-lr/package.mk | 2 +- packages/emulators/libretro/pcsx_rearmed-lr/package.mk | 2 +- packages/emulators/libretro/puae-lr/package.mk | 2 +- packages/emulators/libretro/puae2021-lr/package.mk | 2 +- .../libretro/retroarch/retroarch-assets/package.mk | 2 +- .../libretro/retroarch/retroarch-joypads/package.mk | 2 +- packages/emulators/libretro/scummvm-lr/package.mk | 2 +- packages/emulators/libretro/slang-shaders/package.mk | 2 +- packages/emulators/libretro/stella-lr/package.mk | 2 +- packages/emulators/libretro/swanstation-lr/package.mk | 2 +- packages/emulators/libretro/tic80-lr/package.mk | 4 ++-- packages/emulators/libretro/vircon32-lr/package.mk | 2 +- packages/emulators/standalone/flycast-sa/package.mk | 2 +- packages/emulators/standalone/hatarisa/package.mk | 2 +- 43 files changed, 53 insertions(+), 45 deletions(-) diff --git a/config/blocklist b/config/blocklist index 384d42904..e622e6d0c 100644 --- a/config/blocklist +++ b/config/blocklist @@ -1,8 +1,13 @@ +aethersx2-sa # package is EOL +amiberry # Updating breaks build packages +control-gen # package does not update dolphin-sa # Wayland patch is now broken upstream +drastic-sa # Package is closed source bin duckstation-lr # Libretro support removed from upstream. duckstation-sa # Patches need to be reworked. gptokeyb # Newer versions break hotkeys gzdoom-sa # Stick to release versions. +idtech-lr # Just a dummy package kronos-sa # Using the release version of kronos had better results. melonds-sa # Broken OpenGL renderer upstream mupen64plus-sa-ui-console # Causes segfaults @@ -10,8 +15,11 @@ nanoboyadvance-sa # SDL version removed after this commit np2kai # Last major commit before hiatus is broken. openbor # Newer versions break controls, needs research. pico-8 # Metapackage, doesn't need to update +portmaster # Manually update version ppsspp-sa # Manually update to release versions. retroarch # Manually update to release versions. rpcs3-sa # Need to update to llvm 16 +scummvmsa # Updating breaks build packages +vice-lr # Updating breaks build patches vice-sa # Doesn't support updating with the script. vita3k-sa # Should be manually updated. diff --git a/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md index 2caca5a7d..85ee90f18 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/AMD64/SUPPORTED_EMULATORS_AND_CORES.md @@ -100,11 +100,11 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021
**retroarch:** flycast (default)
**flycast:** flycast-sa
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**kronos:** kronos-sa
**retroarch:** yabasanshiro (default)
**retroarch:** kronos
**retroarch:** beetle_saturn
**mednafen:** ss
**kronos:** kronos-sa (default)
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**kronos:** kronos-sa
**retroarch:** yabasanshiro (default)
**retroarch:** kronos
**retroarch:** beetle_saturn
**mednafen:** ss
**kronos:** kronos-sa (default)
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| -|Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**retroarch:** beetle_saturn
**retroarch:** kronos
**mednafen:** ss
| +|Sega|ST-V (st-v)|1995|`st-v`|.zip .ZIP|**retroarch:** kronos
**mednafen:** ss
| |Sharp|X1 (x1)|1982|`x1`|.dx1 .2d .2hd .tfd .d88 .88d .hdm .xdf .dup .tap .cmd .zip .7z|**retroarch:** x1 (default)
| |Sharp|x68000 (x68000)|1987|`x68000`|.dim .img .d88 .hdm .dup .2hd .xdf .hdf .cmd .m3u .zip .7z|**retroarch:** px68k (default)
| |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md index 8911cb0dd..267aae826 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/RK3566-X55/SUPPORTED_EMULATORS_AND_CORES.md @@ -96,7 +96,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
**mednafen:** md
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021 (default)
**retroarch:** flycast
**flycast:** flycast-sa
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| diff --git a/documentation/PER_DEVICE_DOCUMENTATION/S922X/SUPPORTED_EMULATORS_AND_CORES.md b/documentation/PER_DEVICE_DOCUMENTATION/S922X/SUPPORTED_EMULATORS_AND_CORES.md index 3c08ddbfc..1e881981d 100644 --- a/documentation/PER_DEVICE_DOCUMENTATION/S922X/SUPPORTED_EMULATORS_AND_CORES.md +++ b/documentation/PER_DEVICE_DOCUMENTATION/S922X/SUPPORTED_EMULATORS_AND_CORES.md @@ -99,7 +99,7 @@ This document describes all available systems emulators and cores available for |Sega|Mega Drive (megadrive)|1990|`megadrive`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
| |Sega|Mega Drive (megadrive-japan)|1988|`megadrive-japan`|.bin .gen .md .sg .smd .zip .7z|**retroarch:** genesis_plus_gx (default)
**retroarch:** genesis_plus_gx_wide
**retroarch:** picodrive
| |Sega|Naomi (naomi)|1998|`naomi`|.lst .bin .dat .zip .7z|**retroarch:** flycast2021
**flycast:** flycast-sa (default)
**retroarch:** flycast
| -|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| +|Sega|Saturn (saturn)|1994|`saturn`|.cue .chd .iso .zip|**yabasanshiro:** yabasanshiro-sa (default)
**retroarch:** yabasanshiro
| |Sega|Sega 32X (sega32x)|1994|`sega32x`|.32x .smd .bin .md .zip .7z|**retroarch:** picodrive (default)
| |Sega|Sega CD (segacd)|1991|`segacd`|.chd .cue .iso .m3u|**retroarch:** genesis_plus_gx (default)
**retroarch:** picodrive
| |Sega|SG-1000 (sg-1000)|1983|`sg-1000`|.bin .sg .zip .7z|**retroarch:** gearsystem (default)
**retroarch:** genesis_plus_gx
**retroarch:** picodrive
| @@ -109,7 +109,7 @@ This document describes all available systems emulators and cores available for |Sinclair|ZX Spectrum (zxspectrum)|1982|`zxspectrum`|.tzx .tap .z80 .rzx .scl .trd .dsk .zip .7z|**retroarch:** fuse
| |Sinclair|ZX81 (zx81)|1981|`zx81`|.tzx .p .t81 .zip .7z|**retroarch:** 81 (default)
| |Smith Engineering|Vectrex (vectrex)|1982|`vectrex`|.bin .gam .vec .zip .7z|**retroarch:** vecx (default)
| -|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
| +|SNK|Neo Geo (neogeo)|1990|`neogeo`|.7z .zip .neo|**retroarch:** fbneo (default)
**retroarch:** mame2003_plus
**retroarch:** fbalpha2012
**retroarch:** fbalpha2019
**retroarch:** mame2010
**retroarch:** mame2015
**retroarch:** mame
**retroarch:** geolith
| |SNK|Neo Geo CD (neocd)|1994|`neocd`|.cue .iso .chd|**retroarch:** neocd (default)
**retroarch:** fbneo
| |SNK|Neo Geo Pocket (ngp)|1998|`ngp`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
| |SNK|Neo Geo Pocket Color (ngpc)|1999|`ngpc`|.ngp .ngc .zip .7z|**retroarch:** beetle_ngp (default)
**retroarch:** race
| diff --git a/packages/apps/moonlight/package.mk b/packages/apps/moonlight/package.mk index b75fb8db9..455f276f9 100644 --- a/packages/apps/moonlight/package.mk +++ b/packages/apps/moonlight/package.mk @@ -31,7 +31,7 @@ then else PKG_SITE+="embedded" PKG_URL="${PKG_SITE}.git" - PKG_VERSION="3b72f5195b6843be772a2eb6846ac10ceed39bf4" + PKG_VERSION="274d3db34da764344a7a402ee74e6080350ac0cd" PKG_TOOLCHAIN="cmake" PKG_CMAKE_OPTS_TARGET+=" -DENABLE_CEC=OFF" diff --git a/packages/compat/box64/package.mk b/packages/compat/box64/package.mk index 0aff9abd7..f4ee4cc88 100644 --- a/packages/compat/box64/package.mk +++ b/packages/compat/box64/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box64" -PKG_VERSION="d4e32fdbc0a971ce5c6f2880b38df7789b9d64a5" +PKG_VERSION="5b5723c5a50a607331787a14081c47ba8e7d9400" PKG_ARCH="aarch64" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box64" diff --git a/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index da737aa09..76945d261 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="box86" -PKG_VERSION="24f2c68805b3547524cfa7c0525c13f12f363ed4" +PKG_VERSION="f5f1e1413d167eb0c4e2aa9a65ab251ce1e142c4" PKG_ARCH="arm" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" diff --git a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk index f8d7de1c9..08f5a98cf 100644 --- a/packages/emulators/libretro/beetle-pce-fast-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-fast-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="beetle-pce-fast-lr" -PKG_VERSION="6210d0f8c262dcdaa5b76c28057cca6077f488fe" +PKG_VERSION="be9db7587571893377974575b7c9768e00833bc2" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-pce-lr/package.mk b/packages/emulators/libretro/beetle-pce-lr/package.mk index 6154c4e43..3f833b13a 100644 --- a/packages/emulators/libretro/beetle-pce-lr/package.mk +++ b/packages/emulators/libretro/beetle-pce-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="beetle-pce-lr" -PKG_VERSION="20b86372b5f490394099ee0ad06e0eb3a4fd5c2e" +PKG_VERSION="ebd9f3f003f1268142785e41943e51616c3802b0" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/beetle-pce-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/beetle-psx-lr/package.mk b/packages/emulators/libretro/beetle-psx-lr/package.mk index d45392cd7..c35808ec3 100644 --- a/packages/emulators/libretro/beetle-psx-lr/package.mk +++ b/packages/emulators/libretro/beetle-psx-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="beetle-psx-lr" -PKG_VERSION="05fda4c7e4e98392aca86198644b0c0153369771" +PKG_VERSION="866df6445c9863ba03395211cd814224a59f7511" PKG_LICENSE="GPLv2" PKG_SITE="https://git.libretro.com/libretro/beetle-psx-libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/bsnes-lr/package.mk b/packages/emulators/libretro/bsnes-lr/package.mk index 40bb3e2c7..4d2fa3c4d 100644 --- a/packages/emulators/libretro/bsnes-lr/package.mk +++ b/packages/emulators/libretro/bsnes-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="bsnes-lr" -PKG_VERSION="5f0bafa9e517d132d964e8e267316283ccd3cce0" +PKG_VERSION="8767988ec91357f4e66143525b74b5ddbdedda8d" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/bsnes-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/core-info/package.mk b/packages/emulators/libretro/core-info/package.mk index d1a855c7f..85418f1c7 100644 --- a/packages/emulators/libretro/core-info/package.mk +++ b/packages/emulators/libretro/core-info/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="core-info" -PKG_VERSION="a59bb4dfe97502d5547ee3a242f1ac01b550bfa4" +PKG_VERSION="a0a5dff2a11313ee4a757df689260300a616e38a" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-core-info" PKG_URL="https://github.com/libretro/libretro-core-info/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/desmume-lr/package.mk b/packages/emulators/libretro/desmume-lr/package.mk index 60a2975c4..229c7bebb 100644 --- a/packages/emulators/libretro/desmume-lr/package.mk +++ b/packages/emulators/libretro/desmume-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="desmume-lr" -PKG_VERSION="4ee1bb1d6a6c9695baea49d0c2dff34c10187502" +PKG_VERSION="b518fec54b79f2f71a7536715efcdcd7f60638a8" PKG_LICENSE="GPLv2" PKG_SITE="https://git.libretro.com/libretro/desmume" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/dolphin-lr/package.mk b/packages/emulators/libretro/dolphin-lr/package.mk index e216b07d5..4dc95f6f6 100644 --- a/packages/emulators/libretro/dolphin-lr/package.mk +++ b/packages/emulators/libretro/dolphin-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="dolphin-lr" -PKG_VERSION="2f4b0f7902257d40a054f60b2c670d6e314f2a04" +PKG_VERSION="89a4df725d4eb24537728f7d655cddb1add25c18" PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb" PKG_SITE="https://github.com/libretro/dolphin" diff --git a/packages/emulators/libretro/fake08-lr/package.mk b/packages/emulators/libretro/fake08-lr/package.mk index 1dd3619da..ffaf175c2 100644 --- a/packages/emulators/libretro/fake08-lr/package.mk +++ b/packages/emulators/libretro/fake08-lr/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2022-present Lakka (https://www.lakka.tv) PKG_NAME="fake08-lr" -PKG_VERSION="5a480cbf1f8ab1ef435f14d1206009f5fd56e588" +PKG_VERSION="d98376fc41c34e3cd6d3ffc25ae9c2970efd5286" PKG_LICENSE="MIT" PKG_SITE="https://github.com/jtothebell/fake-08" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/fbneo-lr/package.mk b/packages/emulators/libretro/fbneo-lr/package.mk index eeba1f56b..71a790b44 100644 --- a/packages/emulators/libretro/fbneo-lr/package.mk +++ b/packages/emulators/libretro/fbneo-lr/package.mk @@ -4,7 +4,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="fbneo-lr" -PKG_VERSION="a5c3e943d432b467110d06bf9c4cfc4143e7274e" +PKG_VERSION="24de1b83932196d1dce754a601ae07e857b5b817" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/FBNeo" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/fceumm-lr/package.mk b/packages/emulators/libretro/fceumm-lr/package.mk index 3418d8c08..d5850fbd9 100644 --- a/packages/emulators/libretro/fceumm-lr/package.mk +++ b/packages/emulators/libretro/fceumm-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="fceumm-lr" -PKG_VERSION="40969671ce9e4b1a49165d836476cd71bb960131" +PKG_VERSION="aebea8783652bc75b21b9d2dcb28cedf1fa78e8a" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-fceumm" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/flycast-lr/package.mk b/packages/emulators/libretro/flycast-lr/package.mk index 18e9e249f..1d4f8d720 100644 --- a/packages/emulators/libretro/flycast-lr/package.mk +++ b/packages/emulators/libretro/flycast-lr/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="flycast-lr" -PKG_VERSION="f4f087a6ea83a5483dedf23ad2b38763988eccc5" +PKG_VERSION="8e96590065fd23cd37a0d426d30f4aef6587d860" PKG_SITE="https://github.com/flyinghead/flycast" PKG_URL="${PKG_SITE}.git" PKG_DEPENDS_TARGET="toolchain zlib libzip" diff --git a/packages/emulators/libretro/freechaf-lr/package.mk b/packages/emulators/libretro/freechaf-lr/package.mk index b89d71c43..ff36d3aba 100644 --- a/packages/emulators/libretro/freechaf-lr/package.mk +++ b/packages/emulators/libretro/freechaf-lr/package.mk @@ -1,5 +1,5 @@ PKG_NAME="freechaf-lr" -PKG_VERSION="782739dd6988b0148f9c26ddc6ff414e76e54d7b" +PKG_VERSION="630e068c51a8027aa7222dc737575d235b9a75a1" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/FreeChaF" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/gearboy-lr/package.mk b/packages/emulators/libretro/gearboy-lr/package.mk index 66aade851..59c7267c3 100644 --- a/packages/emulators/libretro/gearboy-lr/package.mk +++ b/packages/emulators/libretro/gearboy-lr/package.mk @@ -15,7 +15,7 @@ ################################################################################ PKG_NAME="gearboy-lr" -PKG_VERSION="3b94ce2c425833f0bdf10f933e9e7c9db1621963" +PKG_VERSION="25435a844f283c2583370dc0720bef8910aad9b9" PKG_LICENSE="GPL" PKG_SITE="https://github.com/drhelius/Gearboy" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gearsystem-lr/package.mk b/packages/emulators/libretro/gearsystem-lr/package.mk index 7dfd443e5..8f1c25cd7 100644 --- a/packages/emulators/libretro/gearsystem-lr/package.mk +++ b/packages/emulators/libretro/gearsystem-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="gearsystem-lr" -PKG_VERSION="3639641ac7ad76ac45339a44792b68838a2bafc4" +PKG_VERSION="f09c8f50be9545bd20fe17a0856999c61632bdc1" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/drhelius/Gearsystem" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk index c94f9be57..c103e2246 100644 --- a/packages/emulators/libretro/genesis-plus-gx-lr/package.mk +++ b/packages/emulators/libretro/genesis-plus-gx-lr/package.mk @@ -21,7 +21,7 @@ ################################################################################ PKG_NAME="genesis-plus-gx-lr" -PKG_VERSION="667158b034ce860e345b13e1ed927fea9d155b96" +PKG_VERSION="4e359c1f9c9a77db726c702c073d82905c24da7f" PKG_LICENSE="Non-commercial" PKG_SITE="https://github.com/libretro/Genesis-Plus-GX" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/gpsp-lr/package.mk b/packages/emulators/libretro/gpsp-lr/package.mk index f4a7c7f93..84e14a6e0 100644 --- a/packages/emulators/libretro/gpsp-lr/package.mk +++ b/packages/emulators/libretro/gpsp-lr/package.mk @@ -21,7 +21,7 @@ ################################################################################ PKG_NAME="gpsp-lr" -PKG_VERSION="895fb075c3a04a0eff8c92a150e01e42df10a062" +PKG_VERSION="4caf7a167d159866479ea94d6b2d13c26ceb3e72" PKG_ARCH="arm aarch64" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/gpsp" diff --git a/packages/emulators/libretro/jaxe-lr/package.mk b/packages/emulators/libretro/jaxe-lr/package.mk index e8af4203c..20ab6b7a1 100644 --- a/packages/emulators/libretro/jaxe-lr/package.mk +++ b/packages/emulators/libretro/jaxe-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2022-present AmberELEC (https://github.com/AmberELEC) PKG_NAME="jaxe-lr" -PKG_VERSION="bf5a788993c9bf048622bab5d3c876b15af3fcf6" +PKG_VERSION="22115d58de5f80cfafbbeece19d723f4892ed75c" PKG_ARCH="aarch64" PKG_SITE="https://github.com/kurtjd/jaxe" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/libretro-database/package.mk b/packages/emulators/libretro/libretro-database/package.mk index a2d44b929..c64536e84 100644 --- a/packages/emulators/libretro/libretro-database/package.mk +++ b/packages/emulators/libretro/libretro-database/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="libretro-database" -PKG_VERSION="588356595a142fb7bc642060413c123bc9ebd7dd" +PKG_VERSION="1912eb4a4a7e9bc91394347342da5918f87064ad" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-database" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame-lr/package.mk b/packages/emulators/libretro/mame-lr/package.mk index 145b8f266..61e7dd55f 100644 --- a/packages/emulators/libretro/mame-lr/package.mk +++ b/packages/emulators/libretro/mame-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2019 Trond Haugland (trondah@gmail.com) PKG_NAME="mame-lr" -PKG_VERSION="ac9d0347f5d331eb49017cd599a5e63a668b4f22" +PKG_VERSION="90714f5cdefb2024dc34fdf3a62bd0d3815460ce" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/mame" PKG_URL="https://github.com/libretro/mame/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/mame2003-plus-lr/package.mk b/packages/emulators/libretro/mame2003-plus-lr/package.mk index fe62d5b49..a1aafd150 100644 --- a/packages/emulators/libretro/mame2003-plus-lr/package.mk +++ b/packages/emulators/libretro/mame2003-plus-lr/package.mk @@ -21,7 +21,7 @@ ################################################################################ PKG_NAME="mame2003-plus-lr" -PKG_VERSION="0d7dfa721f6362e4ea152bf710046a47710ea691" +PKG_VERSION="6c1d0f0a0aa9284389dc28486af176700d34e553" PKG_LICENSE="MAME" PKG_SITE="https://github.com/libretro/mame2003-plus-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/minivmac-lr/package.mk b/packages/emulators/libretro/minivmac-lr/package.mk index 91634ccb4..36b28e618 100644 --- a/packages/emulators/libretro/minivmac-lr/package.mk +++ b/packages/emulators/libretro/minivmac-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="minivmac-lr" -PKG_VERSION="45edc82baae906b90b67cce66761557923a6ba75" +PKG_VERSION="e7fcfefe5963aaefb039c8ece5b9072f8d3f9cb9" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/libretro-minivmac" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/nestopia-lr/package.mk b/packages/emulators/libretro/nestopia-lr/package.mk index d67315fb7..d4a093c7e 100644 --- a/packages/emulators/libretro/nestopia-lr/package.mk +++ b/packages/emulators/libretro/nestopia-lr/package.mk @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="nestopia-lr" -PKG_VERSION="efe3a052c75ad47d6e98eeffd1f3d2d4893279c2" +PKG_VERSION="b99ede358b2219602443e7f414eabf81e17da244" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/nestopia" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/opera-lr/package.mk b/packages/emulators/libretro/opera-lr/package.mk index b23ff1bff..e7b7e9414 100644 --- a/packages/emulators/libretro/opera-lr/package.mk +++ b/packages/emulators/libretro/opera-lr/package.mk @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="opera-lr" -PKG_VERSION="35e16483be900ea8aa20e87d2710b677437f73ce" +PKG_VERSION="cacba231c3bd71833f06943e230fe03d8ebec0ab" PKG_LICENSE="LGPL with additional notes" PKG_SITE="https://github.com/libretro/opera-libretro" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/pcsx_rearmed-lr/package.mk b/packages/emulators/libretro/pcsx_rearmed-lr/package.mk index 0acdaf630..86a0db186 100644 --- a/packages/emulators/libretro/pcsx_rearmed-lr/package.mk +++ b/packages/emulators/libretro/pcsx_rearmed-lr/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="pcsx_rearmed-lr" -PKG_VERSION="2fb8465594a7ffb7ccbac39fdedf7c70085d7f63" +PKG_VERSION="87a0a6318564fc171d0b576da8ea7e629aa229e7" PKG_ARCH="arm aarch64" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/pcsx_rearmed" diff --git a/packages/emulators/libretro/puae-lr/package.mk b/packages/emulators/libretro/puae-lr/package.mk index e140fabd3..aa5be10f7 100644 --- a/packages/emulators/libretro/puae-lr/package.mk +++ b/packages/emulators/libretro/puae-lr/package.mk @@ -21,7 +21,7 @@ ################################################################################ PKG_NAME="puae-lr" -PKG_VERSION="5f683ae67b998fcadd69fa8f65f2440fa8ef135f" +PKG_VERSION="4806716da70cf1f030788b43190d71aae61e2041" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/puae2021-lr/package.mk b/packages/emulators/libretro/puae2021-lr/package.mk index 2f1818a06..ca04e345b 100644 --- a/packages/emulators/libretro/puae2021-lr/package.mk +++ b/packages/emulators/libretro/puae2021-lr/package.mk @@ -21,7 +21,7 @@ ################################################################################ PKG_NAME="puae2021-lr" -PKG_VERSION="218b539d28ca3370df340f1b98fe12eab7b8fc09" +PKG_VERSION="983ef9be9302e9333206f70f7d0f11597167ff06" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/libretro-uae" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/retroarch/retroarch-assets/package.mk b/packages/emulators/libretro/retroarch/retroarch-assets/package.mk index fbf56014b..db7867934 100644 --- a/packages/emulators/libretro/retroarch/retroarch-assets/package.mk +++ b/packages/emulators/libretro/retroarch/retroarch-assets/package.mk @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="retroarch-assets" -PKG_VERSION="923b711dc6772a168d83dc8915e9260730fcf3a1" +PKG_VERSION="9c0bd0d1015889592ad4362b800ac90ff4d019e1" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/retroarch-assets" PKG_URL="https://github.com/libretro/retroarch-assets/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/retroarch/retroarch-joypads/package.mk b/packages/emulators/libretro/retroarch/retroarch-joypads/package.mk index 5ec088b34..b867eaa28 100644 --- a/packages/emulators/libretro/retroarch/retroarch-joypads/package.mk +++ b/packages/emulators/libretro/retroarch/retroarch-joypads/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="retroarch-joypads" -PKG_VERSION="2f93e8a9e08aaf274d0c222064a3064e4feb4379" +PKG_VERSION="dfb61f19d09512826b2377994f4a5f37f253bba1" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/retroarch-joypad-autoconfig" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/scummvm-lr/package.mk b/packages/emulators/libretro/scummvm-lr/package.mk index ba0279fc8..e2cf362a4 100644 --- a/packages/emulators/libretro/scummvm-lr/package.mk +++ b/packages/emulators/libretro/scummvm-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="scummvm-lr" -PKG_VERSION="8ed85326fa6215a267beb953271c4c4a30fa6d57" +PKG_VERSION="b8c5efd6224211282bf4ac1ebb566240456ed59b" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/libretro/scummvm" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/slang-shaders/package.mk b/packages/emulators/libretro/slang-shaders/package.mk index 55971d21e..d71890e70 100644 --- a/packages/emulators/libretro/slang-shaders/package.mk +++ b/packages/emulators/libretro/slang-shaders/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="slang-shaders" -PKG_VERSION="93c954798592323c8f7bd05a19c273be22e856cc" +PKG_VERSION="3378d01600fdd285c07735182dac78ecd6b2f1e7" PKG_LICENSE="GPL" PKG_SITE="https://github.com/libretro/slang-shaders" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/libretro/stella-lr/package.mk b/packages/emulators/libretro/stella-lr/package.mk index 521e37513..ba26fea9b 100644 --- a/packages/emulators/libretro/stella-lr/package.mk +++ b/packages/emulators/libretro/stella-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="stella-lr" -PKG_VERSION="8e8549c1c441e62c2bac0ae5a6489ba3e15412c6" +PKG_VERSION="4c04c4baad504b5e94367311f0061f4ad367b910" PKG_LICENSE="GPL2" PKG_SITE="https://github.com/stella-emu/stella" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/swanstation-lr/package.mk b/packages/emulators/libretro/swanstation-lr/package.mk index 45bcede0c..8459e9c0d 100644 --- a/packages/emulators/libretro/swanstation-lr/package.mk +++ b/packages/emulators/libretro/swanstation-lr/package.mk @@ -3,7 +3,7 @@ # Maintenance 2020 351ELEC team (https://github.com/fewtarius/351ELEC) PKG_NAME="swanstation-lr" -PKG_VERSION="77aeeea58a45cccae7a8be37645f8f5a27ff101b" +PKG_VERSION="6ed491d6ba46ac8ba64a580b3004a163c0725bd2" PKG_LICENSE="GPLv3" PKG_SITE="https://github.com/libretro/swanstation" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/emulators/libretro/tic80-lr/package.mk b/packages/emulators/libretro/tic80-lr/package.mk index cf942c198..1b4aa1f30 100644 --- a/packages/emulators/libretro/tic80-lr/package.mk +++ b/packages/emulators/libretro/tic80-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="tic80-lr" -PKG_VERSION="0952e91147316ea3a4b3e4fea802a94118576236" +PKG_VERSION="deae9c68a3dfbfd766f7d9d61c72dc89ce13e25b" PKG_LICENSE="MIT" PKG_SITE="https://github.com/nesbox/TIC-80" PKG_URL="${PKG_SITE}.git" @@ -21,5 +21,5 @@ PKG_CMAKE_OPTS_TARGET="-DBUILD_PLAYER=ON \ makeinstall_target() { mkdir -p ${INSTALL}/usr/lib/libretro - cp ${PKG_BUILD}/.${TARGET_NAME}/lib/tic80_libretro.so ${INSTALL}/usr/lib/libretro/tic80_libretro.so + cp ${PKG_BUILD}/.${TARGET_NAME}/bin/tic80_libretro.so ${INSTALL}/usr/lib/libretro/tic80_libretro.so } diff --git a/packages/emulators/libretro/vircon32-lr/package.mk b/packages/emulators/libretro/vircon32-lr/package.mk index 7a6835f8c..48d2540f5 100644 --- a/packages/emulators/libretro/vircon32-lr/package.mk +++ b/packages/emulators/libretro/vircon32-lr/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024-present AmberELEC (https://github.com/AmberELEC) PKG_NAME="vircon32-lr" -PKG_VERSION="da0654e72a26bce0c3f2b78efb78c4d5539199e4" +PKG_VERSION="293d0b2b0e3b996b991b7a667ec31a64d8865450" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/vircon32/vircon32-libretro" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/flycast-sa/package.mk b/packages/emulators/standalone/flycast-sa/package.mk index 0b2909775..9321f2279 100644 --- a/packages/emulators/standalone/flycast-sa/package.mk +++ b/packages/emulators/standalone/flycast-sa/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="flycast-sa" -PKG_VERSION="ed78eb4d501cf892b3177b9964883d2e3bd688b6" +PKG_VERSION="8e96590065fd23cd37a0d426d30f4aef6587d860" PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/flyinghead/flycast" PKG_URL="${PKG_SITE}.git" diff --git a/packages/emulators/standalone/hatarisa/package.mk b/packages/emulators/standalone/hatarisa/package.mk index a743955fd..383c4885a 100644 --- a/packages/emulators/standalone/hatarisa/package.mk +++ b/packages/emulators/standalone/hatarisa/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2018-present 5schatten (https://github.com/5schatten) PKG_NAME="hatarisa" -PKG_VERSION="29cf6b73df4628f2ac1d633f597705dc73ff8030" +PKG_VERSION="b35307568d35391e2fa76c8df36b7cca8050eca4" PKG_LICENSE="GPL" PKG_SITE="https://github.com/hatari/hatari" PKG_URL="https://github.com/hatari/hatari/archive/${PKG_VERSION}.tar.gz" From 6d09c647b960da91f90ba28963d488c7b187a2ff Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 3 May 2024 00:36:15 +0000 Subject: [PATCH 134/184] Bump kernel to 6.8.9 --- packages/kernel/linux/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 9d30ab213..bd96eff0a 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -29,7 +29,7 @@ case ${DEVICE} in PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; *) - PKG_VERSION="6.8.8" + PKG_VERSION="6.8.9" PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" ;; esac From d74bcc6fc0a546ac256912053e685666c4227dc7 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 3 May 2024 15:56:06 +0000 Subject: [PATCH 135/184] Enable Mali support on RK3326 --- .../devices/RK3326/linux/linux.aarch64.conf | 2 +- projects/Rockchip/devices/RK3326/options | 9 +-- .../patches/linux/RK3326/000-rk3326-dts.patch | 70 +++++++++++++------ 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf index 469714226..ff24c409e 100644 --- a/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3326/linux/linux.aarch64.conf @@ -3595,7 +3595,7 @@ CONFIG_DRM_PANEL_MIPI_DBI=m # CONFIG_TINYDRM_ST7735R is not set # CONFIG_DRM_PL111 is not set # CONFIG_DRM_LIMA is not set -CONFIG_DRM_PANFROST=y +CONFIG_DRM_PANFROST=m # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set diff --git a/projects/Rockchip/devices/RK3326/options b/projects/Rockchip/devices/RK3326/options index 15bd1e3ed..696421a13 100644 --- a/projects/Rockchip/devices/RK3326/options +++ b/projects/Rockchip/devices/RK3326/options @@ -52,10 +52,11 @@ # Mali GPU family MALI_FAMILY="bifrost-g31" - GRAPHIC_DRIVERS="panfrost" + MALI_VERSION="g13p0" + GRAPHIC_DRIVERS="mali panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="mesa" + OPENGL="" # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" @@ -70,7 +71,7 @@ EXTRA_CMDLINE="quiet rootwait console=ttyFIQ0 console=tty0 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" # additional packages to install - ADDITIONAL_PACKAGES="device-switch" + ADDITIONAL_PACKAGES="device-switch libmali" # additional Firmware to use ( ) # Space separated list is supported, @@ -81,7 +82,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU RTL8723DS" + ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU RTL8723DS mali-bifrost" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" diff --git a/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch b/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch index fe57c7651..00eb79645 100644 --- a/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch +++ b/projects/Rockchip/patches/linux/RK3326/000-rk3326-dts.patch @@ -1,6 +1,6 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boot/dts/rockchip/Makefile ---- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-03-24 22:10:14.612168667 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-05-03 13:11:59.748786213 +0000 @@ -10,9 +10,14 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-ro dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3318-a95x-z2.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3326-anbernic-rg351m.dtb @@ -17,8 +17,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/Makefile linux/arch/arm64/boo dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-evb.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-r2c.dtb diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/px30.dtsi linux/arch/arm64/boot/dts/rockchip/px30.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/px30.dtsi 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/px30.dtsi 2024-03-24 22:49:40.352367781 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/px30.dtsi 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/px30.dtsi 2024-05-03 14:47:47.003956520 +0000 @@ -20,6 +20,7 @@ #size-cells = <2>; @@ -124,9 +124,35 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/px30.dtsi linux/arch/arm64/bo }; }; +@@ -1091,10 +1096,25 @@ + ; + interrupt-names = "job", "mmu", "gpu"; + clocks = <&cru SCLK_GPU>; ++ clock-names = "bus"; ++ resets = <&cru SRST_GPU>; + #cooling-cells = <2>; + power-domains = <&power PX30_PD_GPU>; ++ power_policy = "always_on"; + operating-points-v2 = <&gpu_opp_table>; + status = "disabled"; ++ ++ power_model@0 { ++ compatible = "arm,mali-simple-power-model"; ++ static-coefficient = <100000>; ++ dynamic-coefficient = <953>; ++ ts = <(-108890) 63610 (-1355) 20>; ++ thermal-zone = "gpu-thermal"; ++ }; ++ power_model@1 { ++ compatible = "arm,mali-g31-power-model"; ++ scale = <5>; ++ }; + }; + + vpu: video-codec@ff442000 { diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts 2024-03-24 22:06:51.745764882 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts 2024-05-03 13:11:59.748786213 +0000 @@ -6,16 +6,53 @@ */ @@ -184,8 +210,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351m.dts li + monitored-battery = <&battery>; }; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts 2024-03-24 22:06:51.753765132 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts 2024-05-03 13:11:59.748786213 +0000 @@ -1,32 +1,76 @@ // SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -328,7 +354,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-anbernic-rg351v.dts li +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts 2024-03-24 22:06:51.761765381 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -449,7 +475,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r33s.dts l +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts 2024-03-24 22:06:51.761765381 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,202 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -655,7 +681,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r36s.dts l +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi 2024-03-24 22:46:19.201959013 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,545 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -1204,7 +1230,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-gameconsole-r3xs.dtsi +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts linux/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts 2024-03-24 22:06:51.765765505 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,870 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -2077,8 +2103,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-magicx-xu10.dts linux/ + }; +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi 2024-03-24 22:46:19.201959013 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi 2024-05-03 13:11:59.748786213 +0000 @@ -25,93 +25,40 @@ compatible = "pwm-backlight"; power-supply = <&vcc_bl>; @@ -2235,8 +2261,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go.dtsi linux/a #clock-cells = <1>; #sound-dai-cells = <0>; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts 2024-03-24 22:06:51.769765630 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts 2024-05-03 13:11:59.748786213 +0000 @@ -16,31 +16,187 @@ mmc1 = &sdio; }; @@ -2518,8 +2544,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2-v11.dts lin <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>, <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>, diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts 2024-03-24 22:06:51.785766128 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts 2024-05-03 13:11:59.748786213 +0000 @@ -12,30 +12,175 @@ model = "ODROID-GO Advance"; compatible = "hardkernel,rk3326-odroid-go2", "rockchip,rk3326"; @@ -2752,8 +2778,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts linux/a + }; +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts ---- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts 2024-03-24 22:02:58.858657776 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts 2024-03-24 22:06:51.789766253 +0000 +--- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts 2024-05-03 13:08:45.744162556 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts 2024-05-03 13:11:59.748786213 +0000 @@ -12,67 +12,196 @@ model = "ODROID-GO Super"; compatible = "hardkernel,rk3326-odroid-go3", "rockchip,rk3326"; @@ -3063,7 +3089,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-odroid-go3.dts linux/a }; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts 2024-03-24 22:06:51.793766378 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,280 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* @@ -3347,7 +3373,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb10.dts lin +}; diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb20s.dts linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb20s.dts --- linux.orig/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb20s.dts 1970-01-01 00:00:00.000000000 +0000 -+++ linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb20s.dts 2024-03-24 22:06:51.793766378 +0000 ++++ linux/arch/arm64/boot/dts/rockchip/rk3326-powkiddy-rgb20s.dts 2024-05-03 13:11:59.748786213 +0000 @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* From 78191b93a777510d09d216a707397fc79fa4e425 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Fri, 3 May 2024 17:45:14 +0100 Subject: [PATCH 136/184] quirks: detect RGB20SX and set correct device tree --- .../quirks/devices/Powkiddy RGB30/001-detect-device | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device b/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device index d7aa268c7..43966258d 100755 --- a/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device +++ b/packages/hardware/quirks/devices/Powkiddy RGB30/001-detect-device @@ -4,6 +4,10 @@ if [ ! -f "/sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors" ]; then mount -o rw,remount /flash - sed -i "/FDT/c\ FDT /rk3566-powkiddy-rgb30r2.dtb" /flash/extlinux/extlinux.conf + if grep -q "024C:D723" "/sys/devices/platform/fe000000.mmc/mmc_host/mmc3/mmc3:0001/mmc3:0001:1/uevent"; then + sed -i "/FDT/c\ FDT /rk3566-powkiddy-rgb20sx.dtb" /flash/extlinux/extlinux.conf + else + sed -i "/FDT/c\ FDT /rk3566-powkiddy-rgb30r2.dtb" /flash/extlinux/extlinux.conf + fi reboot fi From a95e9e5b121e07cba90d4c1477a2217dcfc76c29 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 3 May 2024 17:00:41 +0000 Subject: [PATCH 137/184] RK3326: RA driver needs to be GL for mali driver --- .../emulators/libretro/retroarch/sources/RK3326/retroarch.cfg | 2 +- packages/hardware/quirks/platforms/RK3326/060-game_settings | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/emulators/libretro/retroarch/sources/RK3326/retroarch.cfg b/packages/emulators/libretro/retroarch/sources/RK3326/retroarch.cfg index 5448eef76..099eec842 100755 --- a/packages/emulators/libretro/retroarch/sources/RK3326/retroarch.cfg +++ b/packages/emulators/libretro/retroarch/sources/RK3326/retroarch.cfg @@ -734,7 +734,7 @@ video_context_driver = "" video_crop_overscan = "true" video_ctx_scaling = "false" video_disable_composition = "false" -video_driver = "glcore" +video_driver = "gl" video_filter = "" video_filter_dir = "~/.config/retroarch/filters/video" video_font_enable = "true" diff --git a/packages/hardware/quirks/platforms/RK3326/060-game_settings b/packages/hardware/quirks/platforms/RK3326/060-game_settings index ec90c8641..0a4c09c43 100755 --- a/packages/hardware/quirks/platforms/RK3326/060-game_settings +++ b/packages/hardware/quirks/platforms/RK3326/060-game_settings @@ -18,3 +18,6 @@ do set_setting ${SYSTEM}.gpuperf profile_peak fi done + +# Need to set RA video driver to GL for libmali driver. +sed -i '/video_driver =/c\video_driver = "gl"' /storage/.config/retroarch/retroarch.cfg From 34ded20010e6aa25ff4f3a6cd695be7ce5b8c1ce Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 3 May 2024 21:42:21 +0000 Subject: [PATCH 138/184] Bump emulation station --- packages/ui/emulationstation/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index 506d83742..d0da60bed 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="emulationstation" -PKG_VERSION="742faf58fcdb6751c1bf1b4f056df58bae950866" +PKG_VERSION="7e2f7afa9656a67c9c9c1d1c33b7e89f224e8916" PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From 9f0c39f993a270a79f2977caa80d0195fe5c8551 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Sat, 4 May 2024 14:15:29 +0000 Subject: [PATCH 139/184] Set Mali as the default gpu driver on RK3326 and RK3566 --- packages/graphics/libmali/sources/bin/gpudriver | 2 ++ .../quirks/platforms/RK3326/003-set_gpu_driver | 14 ++++++++++++++ .../quirks/platforms/RK3566/003-set_gpu_driver | 14 ++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver create mode 100644 packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver diff --git a/packages/graphics/libmali/sources/bin/gpudriver b/packages/graphics/libmali/sources/bin/gpudriver index 020a62d35..961e7b69e 100755 --- a/packages/graphics/libmali/sources/bin/gpudriver +++ b/packages/graphics/libmali/sources/bin/gpudriver @@ -13,10 +13,12 @@ load_driver() { "libmali") modprobe -r panfrost modprobe mali_kbase + set_setting "gpu.driver" "libmali" ;; "panfrost") modprobe -r mali_kbase modprobe panfrost + set_setting "gpu.driver" "panfrost" ;; *) exit 3 diff --git a/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver b/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver new file mode 100644 index 000000000..f5c651f5c --- /dev/null +++ b/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +. /etc/profile.d/001-functions + +# Set GPU Driver at boot +GPU_DRIVER=$(get_setting "gpu.driver") +if [[ ! -n "${GPU_DRIVER}" ]] || [[ "${GPU_DRIVER}" = "libmali" ]]; then + gpudriver libmali + set_setting "gpu.driver" "libmali" +else + gpudriver panfrost + set_setting "gpu.driver" "panfrost" +fi diff --git a/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver b/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver new file mode 100644 index 000000000..f5c651f5c --- /dev/null +++ b/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) + +. /etc/profile.d/001-functions + +# Set GPU Driver at boot +GPU_DRIVER=$(get_setting "gpu.driver") +if [[ ! -n "${GPU_DRIVER}" ]] || [[ "${GPU_DRIVER}" = "libmali" ]]; then + gpudriver libmali + set_setting "gpu.driver" "libmali" +else + gpudriver panfrost + set_setting "gpu.driver" "panfrost" +fi From d124840d328c30a882a06b9a451f6c7f94083781 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Sun, 5 May 2024 11:13:20 +0300 Subject: [PATCH 140/184] do not use quirks for setting default gpu driver This reverts commit 9f0c39f993a270a79f2977caa80d0195fe5c8551, which used quirks, and reimplements the functionality using modifications in gpudriver script only. --- .../graphics/libmali/sources/bin/gpudriver | 51 +++++++++++-------- .../platforms/RK3326/003-set_gpu_driver | 14 ----- .../platforms/RK3566/003-set_gpu_driver | 14 ----- 3 files changed, 29 insertions(+), 50 deletions(-) delete mode 100644 packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver delete mode 100644 packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver diff --git a/packages/graphics/libmali/sources/bin/gpudriver b/packages/graphics/libmali/sources/bin/gpudriver index 961e7b69e..9a3308c37 100755 --- a/packages/graphics/libmali/sources/bin/gpudriver +++ b/packages/graphics/libmali/sources/bin/gpudriver @@ -2,23 +2,44 @@ # SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) +. /etc/profile.d/001-functions + +GPU_DRIVER_SETTING_KEY="gpu.driver" get_current_driver() { - CONFDRIVER="panfrost" - grep -q mali ${LDCONFFILE} 2>/dev/null && CONFDRIVER="libmali" + CONFDRIVER=$(get_setting ${GPU_DRIVER_SETTING_KEY}) + if [ -z ${CONFDRIVER} ]; then + CONFDRIVER="libmali" # DEFAULT + set_setting ${GPU_DRIVER_SETTING_KEY} ${CONFDRIVER} + fi +} + +check_ld_cache() { + DRIVER_CONFIGURE_FOR=$1 + LDDRIVER="panfrost" + ldconfig -p | grep libEGL.so.1 | grep -q mali && LDDRIVER="libmali" + if [ ${DRIVER_CONFIGURE_FOR} != ${LDDRIVER} ]; then + ldconfig + fi } +# When loading a driver, do two things: +# * ensure needed driver is loaded and other is not +# * ensure ldconfig is configured for a proper driver load_driver() { - case ${CONFDRIVER} in + DRIVER_TO_LOAD=$1 + case ${DRIVER_TO_LOAD} in "libmali") modprobe -r panfrost modprobe mali_kbase - set_setting "gpu.driver" "libmali" + echo -e "/usr/lib/mali\n/usr/lib32/mali" > ${LDCONFFILE} + check_ld_cache ${DRIVER_TO_LOAD} ;; "panfrost") modprobe -r mali_kbase modprobe panfrost - set_setting "gpu.driver" "panfrost" + rm -f ${LDCONFFILE} + check_ld_cache ${DRIVER_TO_LOAD} ;; *) exit 3 @@ -26,15 +47,6 @@ load_driver() { esac } -check_ld_cache() { - LDDRIVER="panfrost" - ldconfig -p | grep libEGL.so.1 | grep -q mali && LDDRIVER="libmali" - if [ ${CONFDRIVER} != ${LDDRIVER} ]; then - ldconfig - fi -} - - # Determine configured driver LDCONFFILE=$(cat /etc/ld.so.conf.d/*.conf | grep mali | sed -n 's|include ||p' | head -1) @@ -44,15 +56,10 @@ case "$1" in ;; "--start") get_current_driver - check_ld_cache - load_driver - ;; - "libmali") - echo "/usr/lib/mali" > ${LDCONFFILE} - echo "/usr/lib32/mali" >> ${LDCONFFILE} + load_driver ${CONFDRIVER} ;; - "panfrost") - rm ${LDCONFFILE} + "libmali" | "panfrost") + set_setting ${GPU_DRIVER_SETTING_KEY} $1 ;; "") get_current_driver diff --git a/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver b/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver deleted file mode 100644 index f5c651f5c..000000000 --- a/packages/hardware/quirks/platforms/RK3326/003-set_gpu_driver +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) - -. /etc/profile.d/001-functions - -# Set GPU Driver at boot -GPU_DRIVER=$(get_setting "gpu.driver") -if [[ ! -n "${GPU_DRIVER}" ]] || [[ "${GPU_DRIVER}" = "libmali" ]]; then - gpudriver libmali - set_setting "gpu.driver" "libmali" -else - gpudriver panfrost - set_setting "gpu.driver" "panfrost" -fi diff --git a/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver b/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver deleted file mode 100644 index f5c651f5c..000000000 --- a/packages/hardware/quirks/platforms/RK3566/003-set_gpu_driver +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX) - -. /etc/profile.d/001-functions - -# Set GPU Driver at boot -GPU_DRIVER=$(get_setting "gpu.driver") -if [[ ! -n "${GPU_DRIVER}" ]] || [[ "${GPU_DRIVER}" = "libmali" ]]; then - gpudriver libmali - set_setting "gpu.driver" "libmali" -else - gpudriver panfrost - set_setting "gpu.driver" "panfrost" -fi From d162c9c21871cfebe24045024515c6c5067c10bb Mon Sep 17 00:00:00 2001 From: Alex DeLorenzo <3579286+alexdelorenzo@users.noreply.github.com> Date: Sun, 5 May 2024 23:39:48 -0400 Subject: [PATCH 141/184] Set variable to container accessible value --- config/options | 1 + 1 file changed, 1 insertion(+) diff --git a/config/options b/config/options index 43f35207c..03c08a261 100644 --- a/config/options +++ b/config/options @@ -20,6 +20,7 @@ export LC_ALL=C ROOT="${PWD}" DISTRO_DIR="${ROOT}/distributions" PROJECT_DIR="${ROOT}/projects" +HOME="${ROOT}" # determines DISTRO, if not forced by user DISTRO="${DISTRO:-ROCKNIX}" From d71288657bdee2876c8c73e2ae79e1032b70bbd8 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Mon, 6 May 2024 04:04:37 +0000 Subject: [PATCH 142/184] RK3588: Enable Dragonrise HID input --- projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf index 6d52b8784..ffce2c354 100644 --- a/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3588/linux/linux.aarch64.conf @@ -5436,7 +5436,7 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_CP2112 is not set # CONFIG_HID_CREATIVE_SB0540 is not set # CONFIG_HID_CYPRESS is not set -# CONFIG_HID_DRAGONRISE is not set +CONFIG_HID_DRAGONRISE=y # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELAN is not set # CONFIG_HID_ELECOM is not set From 2cde972364450ef7cdc8bd1c562d9f34947b386c Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 6 May 2024 14:28:32 +0100 Subject: [PATCH 143/184] powertop: remove package and cleanup it's dependencies --- packages/devel/libtraceevent/package.mk | 38 -------- .../libtraceevent/patches/001-no-docs.patch | 15 ---- packages/devel/libtracefs/package.mk | 34 -------- .../libtracefs/patches/001-fix-headers.patch | 86 ------------------- .../libtracefs/patches/001-no-docs.patch | 15 ---- packages/kernel/linux/package.mk | 2 +- packages/sysutils/powertop/package.mk | 18 ---- .../powertop/patches/001-gettext.patch | 13 --- .../sysutils/powertop/patches/002-cache.patch | 30 ------- packages/virtual/image/package.mk | 2 +- projects/Rockchip/devices/RK3566-X55/options | 2 +- projects/Rockchip/devices/RK3566/options | 2 +- 12 files changed, 4 insertions(+), 253 deletions(-) delete mode 100644 packages/devel/libtraceevent/package.mk delete mode 100644 packages/devel/libtraceevent/patches/001-no-docs.patch delete mode 100644 packages/devel/libtracefs/package.mk delete mode 100644 packages/devel/libtracefs/patches/001-fix-headers.patch delete mode 100644 packages/devel/libtracefs/patches/001-no-docs.patch delete mode 100644 packages/sysutils/powertop/package.mk delete mode 100644 packages/sysutils/powertop/patches/001-gettext.patch delete mode 100644 packages/sysutils/powertop/patches/002-cache.patch diff --git a/packages/devel/libtraceevent/package.mk b/packages/devel/libtraceevent/package.mk deleted file mode 100644 index 65138b2ac..000000000 --- a/packages/devel/libtraceevent/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="libtraceevent" -PKG_VERSION="1.7.3" -PKG_LICENSE="GPL" -PKG_SITE="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/log/" -PKG_URL="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/snapshot/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="ccache:host" -PKG_DEPENDS_TARGET="toolchain libtraceevent:host" -PKG_LONGDESC="Provides APIs to access kernel tracepoint events." -#PKG_BUILD_FLAGS="+pic" - -pre_configure_host() { - LDFLAGS="${LDFLAGS} -ldl" -} - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/lib - cp src/${PKG_NAME}.a ${TOOLCHAIN}/lib - - mkdir -p ${TOOLCHAIN}/include/traceevent - cp ${PKG_BUILD}/include/traceevent/* ${TOOLCHAIN}/include/traceevent - - mkdir -p ${TOOLCHAIN}/lib/pkgconfig - cp meson-private/${PKG_NAME}.pc ${TOOLCHAIN}/lib/pkgconfig -} - -makeinstall_target() { - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp src/${PKG_NAME}.a ${SYSROOT_PREFIX}/usr/lib - - mkdir -p ${SYSROOT_PREFIX}/usr/include/traceevent - cp ${PKG_BUILD}/include/traceevent/* ${SYSROOT_PREFIX}/usr/include/traceevent - - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cp meson-private/${PKG_NAME}.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig -} diff --git a/packages/devel/libtraceevent/patches/001-no-docs.patch b/packages/devel/libtraceevent/patches/001-no-docs.patch deleted file mode 100644 index 06220dafe..000000000 --- a/packages/devel/libtraceevent/patches/001-no-docs.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -rupN libtraceevent-1.7.3.orig/meson.build libtraceevent-1.7.3/meson.build ---- libtraceevent-1.7.3.orig/meson.build 2023-08-21 13:24:13.191233221 +0000 -+++ libtraceevent-1.7.3/meson.build 2023-08-21 13:25:24.571128554 +0000 -@@ -44,11 +44,3 @@ subdir('plugins') - if cunit_dep.found() - subdir('utest') - endif --subdir('samples') --subdir('Documentation') -- --custom_target( -- 'docs', -- output: 'docs', -- depends: [html, man], -- command: ['echo']) diff --git a/packages/devel/libtracefs/package.mk b/packages/devel/libtracefs/package.mk deleted file mode 100644 index d79efe84c..000000000 --- a/packages/devel/libtracefs/package.mk +++ /dev/null @@ -1,34 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="libtracefs" -PKG_VERSION="1.7.0" -PKG_LICENSE="GPL" -PKG_SITE="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/log/" -PKG_URL="https://git.kernel.org/pub/scm/libs/libtrace/${PKG_NAME}.git/snapshot/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="ccache:host libtraceevent:host" -PKG_DEPENDS_TARGET="toolchain libtraceevent" -PKG_LONGDESC="Provides APIs to access kernel trace file system." -PKG_BUILD_FLAGS="+pic" - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/lib - cp src/${PKG_NAME}.a ${TOOLCHAIN}/lib - - mkdir -p ${TOOLCHAIN}/include - cp ${PKG_BUILD}/include/* ${TOOLCHAIN}/include - - mkdir -p ${TOOLCHAIN}/lib/pkgconfig - cp meson-private/${PKG_NAME}.pc ${TOOLCHAIN}/lib/pkgconfig -} - -makeinstall_target() { - mkdir -p ${SYSROOT_PREFIX}/usr/lib - cp src/${PKG_NAME}.a ${SYSROOT_PREFIX}/usr/lib - - mkdir -p ${SYSROOT_PREFIX}/usr/include - cp ${PKG_BUILD}/include/* ${SYSROOT_PREFIX}/usr/include - - mkdir -p ${SYSROOT_PREFIX}/usr/lib/pkgconfig - cp meson-private/${PKG_NAME}.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig -} diff --git a/packages/devel/libtracefs/patches/001-fix-headers.patch b/packages/devel/libtracefs/patches/001-fix-headers.patch deleted file mode 100644 index 93b3081cf..000000000 --- a/packages/devel/libtracefs/patches/001-fix-headers.patch +++ /dev/null @@ -1,86 +0,0 @@ -diff -rupN libtracefs-1.6.4.orig/include/tracefs.h libtracefs-1.6.4/include/tracefs.h ---- libtracefs-1.6.4.orig/include/tracefs.h 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/include/tracefs.h 2023-06-13 12:09:43.902967775 +0000 -@@ -8,7 +8,7 @@ - - #include - #include --#include -+#include - - char *tracefs_get_tracing_file(const char *name); - void tracefs_put_tracing_file(char *name); -diff -rupN libtracefs-1.6.4.orig/src/tracefs-events.c libtracefs-1.6.4/src/tracefs-events.c ---- libtracefs-1.6.4.orig/src/tracefs-events.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/src/tracefs-events.c 2023-06-13 12:10:21.580262836 +0000 -@@ -15,7 +15,7 @@ - #include - #include - --#include -+#include - - #include "tracefs.h" - #include "tracefs-local.h" -diff -rupN libtracefs-1.6.4.orig/src/tracefs-filter.c libtracefs-1.6.4/src/tracefs-filter.c ---- libtracefs-1.6.4.orig/src/tracefs-filter.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/src/tracefs-filter.c 2023-06-13 12:11:35.919870363 +0000 -@@ -6,7 +6,7 @@ - * Copyright (C) 2021, VMware, Tzvetomir Stoyanov - * - */ --#include -+#include - #include - #include - #include -diff -rupN libtracefs-1.6.4.orig/src/tracefs-record.c libtracefs-1.6.4/src/tracefs-record.c ---- libtracefs-1.6.4.orig/src/tracefs-record.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/src/tracefs-record.c 2023-06-13 12:10:28.989358796 +0000 -@@ -13,7 +13,7 @@ - #include - #include - --#include -+#include - - #include "tracefs.h" - #include "tracefs-local.h" -diff -rupN libtracefs-1.6.4.orig/src/tracefs-sqlhist.c libtracefs-1.6.4/src/tracefs-sqlhist.c ---- libtracefs-1.6.4.orig/src/tracefs-sqlhist.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/src/tracefs-sqlhist.c 2023-06-13 12:11:26.398318407 +0000 -@@ -6,7 +6,7 @@ - * Copyright (C) 2021, VMware, Tzvetomir Stoyanov - * - */ --#include -+#include - #include - #include - #include -diff -rupN libtracefs-1.6.4.orig/src/tracefs-utils.c libtracefs-1.6.4/src/tracefs-utils.c ---- libtracefs-1.6.4.orig/src/tracefs-utils.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/src/tracefs-utils.c 2023-06-13 12:09:51.235958151 +0000 -@@ -15,8 +15,8 @@ - #include - #include - --#include --#include -+#include -+#include - #include "tracefs.h" - #include "tracefs-local.h" - -diff -rupN libtracefs-1.6.4.orig/utest/tracefs-utest.c libtracefs-1.6.4/utest/tracefs-utest.c ---- libtracefs-1.6.4.orig/utest/tracefs-utest.c 2023-06-13 12:06:07.781799063 +0000 -+++ libtracefs-1.6.4/utest/tracefs-utest.c 2023-06-13 12:10:13.095028045 +0000 -@@ -12,7 +12,7 @@ - #include - #include - #include --#include -+#include - #include - - #include diff --git a/packages/devel/libtracefs/patches/001-no-docs.patch b/packages/devel/libtracefs/patches/001-no-docs.patch deleted file mode 100644 index 06220dafe..000000000 --- a/packages/devel/libtracefs/patches/001-no-docs.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -rupN libtraceevent-1.7.3.orig/meson.build libtraceevent-1.7.3/meson.build ---- libtraceevent-1.7.3.orig/meson.build 2023-08-21 13:24:13.191233221 +0000 -+++ libtraceevent-1.7.3/meson.build 2023-08-21 13:25:24.571128554 +0000 -@@ -44,11 +44,3 @@ subdir('plugins') - if cunit_dep.found() - subdir('utest') - endif --subdir('samples') --subdir('Documentation') -- --custom_target( -- 'docs', -- output: 'docs', -- depends: [html, man], -- command: ['echo']) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index bd96eff0a..ffbb8b3f9 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -44,7 +44,7 @@ fi if [ "${PKG_BUILD_PERF}" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= ${PKG_KERNEL_CFG_FILE}; then PKG_BUILD_PERF="yes" - PKG_DEPENDS_TARGET+=" binutils elfutils libunwind zlib openssl libtraceevent libtracefs" + PKG_DEPENDS_TARGET+=" binutils elfutils libunwind zlib openssl" fi if [[ "${TARGET_ARCH}" =~ i*86|x86_64 ]]; then diff --git a/packages/sysutils/powertop/package.mk b/packages/sysutils/powertop/package.mk deleted file mode 100644 index ac8060e34..000000000 --- a/packages/sysutils/powertop/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="powertop" -PKG_VERSION="4bdfba189864d699621708fea182db292edc9305" -PKG_ARCH="x86_64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/fenrus75/powertop" -PKG_URL="${PKG_SITE}.git" -PKG_DEPENDS_TARGET="toolchain ncurses libnl pciutils systemd libtracefs" -PKG_LONGDESC="Power consumption / management diagnostic utility." -PKG_BUILD_FLAGS="+pic" -PKG_TOOLCHAIN="autotools" - -pre_configure_target() { - export LDFLAGS="${LDFLAGS} -ludev" -} - diff --git a/packages/sysutils/powertop/patches/001-gettext.patch b/packages/sysutils/powertop/patches/001-gettext.patch deleted file mode 100644 index cc0552583..000000000 --- a/packages/sysutils/powertop/patches/001-gettext.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index f057463..0acb110 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -26,7 +26,7 @@ GETTEXT_PACKAGE=powertop - AC_SUBST([GETTEXT_PACKAGE]) - AM_SILENT_RULES([yes]) - AM_GNU_GETTEXT([external]) --AM_GNU_GETTEXT_VERSION([0.18.2]) -+AM_GNU_GETTEXT_VERSION([0.21.1]) - - m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) - AX_REQUIRE_DEFINED([AX_ADD_FORTIFY_SOURCE]) diff --git a/packages/sysutils/powertop/patches/002-cache.patch b/packages/sysutils/powertop/patches/002-cache.patch deleted file mode 100644 index 0ad34fe5b..000000000 --- a/packages/sysutils/powertop/patches/002-cache.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/src/main.cpp b/src/main.cpp -index 45aaa58..4607aa2 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -389,8 +389,8 @@ static void powertop_init(int auto_tune) - - srand(time(NULL)); - -- if (access("/var/cache/", W_OK) == 0) -- mkdir("/var/cache/powertop", 0600); -+ if (access("/storage/.cache/", W_OK) == 0) -+ mkdir("/storage/.cache/powertop", 0600); - else - mkdir("/data/local/powertop", 0600); - -diff --git a/src/parameters/parameters.cpp b/src/parameters/parameters.cpp -index 38e1752..c2529ec 100644 ---- a/src/parameters/parameters.cpp -+++ b/src/parameters/parameters.cpp -@@ -453,8 +453,8 @@ char* get_param_directory(const char *filename) - { - static char tempfilename[PATH_MAX]; - -- if (access("/var/cache/powertop", W_OK ) == 0) -- snprintf(tempfilename, sizeof(tempfilename), "/var/cache/powertop/%s", filename); -+ if (access("/storage/.cache/powertop", W_OK ) == 0) -+ snprintf(tempfilename, sizeof(tempfilename), "/storage/.cache/powertop/%s", filename); - if (access("/data/local/powertop", W_OK ) == 0) - snprintf(tempfilename, sizeof(tempfilename), "/data/local/powertop/%s", filename); - diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk index edc0416c6..cd337abb9 100644 --- a/packages/virtual/image/package.mk +++ b/packages/virtual/image/package.mk @@ -29,7 +29,7 @@ PKG_SOUND="espeak libao" PKG_SYNC="synctools" -PKG_TOOLS="patchelf git ectool make i2c-tools evtest powertop" +PKG_TOOLS="patchelf git ectool make i2c-tools evtest" PKG_DEBUG="debug" diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index ba64cef6f..573a78be7 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -45,7 +45,7 @@ # Additional kernel make parameters (for example to specify the u-boot loadaddress) KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "rockchip/${DTB}.dtb "; done)" - KERNEL_EXTRA_DEPENDS_TARGET="zstd libcap libtraceevent" + KERNEL_EXTRA_DEPENDS_TARGET="zstd libcap" # Define the CPU HW_CPU="Rockchip RK3566" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 7730bba4f..614fe4d8c 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -45,7 +45,7 @@ # Additional kernel make parameters (for example to specify the u-boot loadaddress) KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "rockchip/${DTB}.dtb "; done)" - KERNEL_EXTRA_DEPENDS_TARGET="zstd libcap libtraceevent" + KERNEL_EXTRA_DEPENDS_TARGET="zstd libcap" # Define the CPU HW_CPU="Rockchip RK3566" From 8aaab4285a31351ac38bf16426c739961a7123cc Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 6 May 2024 15:15:07 +0100 Subject: [PATCH 144/184] linux: cleanup package --- packages/kernel/linux/package.mk | 85 +++++++------------------------- 1 file changed, 18 insertions(+), 67 deletions(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index ffbb8b3f9..f336bd76a 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -6,7 +6,7 @@ PKG_NAME="linux" PKG_LICENSE="GPL" PKG_SITE="http://www.kernel.org" PKG_DEPENDS_HOST="ccache:host rsync:host openssl:host" -PKG_DEPENDS_TARGET="toolchain linux:host kmod:host cpio:host xz:host keyutils ncurses openssl:host ${KERNEL_EXTRA_DEPENDS_TARGET}" +PKG_DEPENDS_TARGET="linux:host kmod:host cpio:host xz:host keyutils ncurses openssl:host ${KERNEL_EXTRA_DEPENDS_TARGET}" PKG_NEED_UNPACK="${LINUX_DEPENDS} $(get_pkg_directory initramfs) $(get_pkg_variable initramfs PKG_NEED_UNPACK)" PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_KERNEL_PKG="yes" @@ -26,7 +26,7 @@ case ${DEVICE} in ;; RK3566*|S922X) PKG_VERSION="6.9-rc3" - PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" + PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" ;; *) PKG_VERSION="6.8.9" @@ -37,9 +37,10 @@ esac PKG_KERNEL_CFG_FILE=$(kernel_config_path) || die if [ -n "${KERNEL_TOOLCHAIN}" ]; then - PKG_DEPENDS_HOST+=" gcc-${KERNEL_TOOLCHAIN}:host" PKG_DEPENDS_TARGET+=" gcc-${KERNEL_TOOLCHAIN}:host" HEADERS_ARCH=${TARGET_ARCH} +else + PKG_DEPENDS_TARGET+=" toolchain" fi if [ "${PKG_BUILD_PERF}" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= ${PKG_KERNEL_CFG_FILE}; then @@ -48,13 +49,8 @@ if [ "${PKG_BUILD_PERF}" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= ${PKG_KERNEL_ fi if [[ "${TARGET_ARCH}" =~ i*86|x86_64 ]]; then - PKG_DEPENDS_TARGET+=" elfutils:host pciutils intel-ucode kernel-firmware" -elif [ "${TARGET_ARCH}" = "arm" -a "${DEVICE}" = "iMX6" ]; then - PKG_DEPENDS_TARGET+=" firmware-imx" -fi - -if [[ "${KERNEL_TARGET}" = uImage* ]]; then - PKG_DEPENDS_TARGET+=" u-boot-tools:host" + PKG_DEPENDS_TARGET+=" elfutils:host pciutils" + PKG_DEPENDS_UNPACK+=" intel-ucode kernel-firmware" fi # Ensure that the dependencies of initramfs:target are built correctly, but @@ -102,12 +98,9 @@ makeinstall_host() { } pre_make_target() { - ( cd ${ROOT} + ( cd ${ROOT} + rm -rf ${BUILD}/initramfs rm -f ${STAMPS_INSTALL}/initramfs/install_target ${STAMPS_INSTALL}/*/install_init - for INIT_PACKAGE in $(find ${PKG_BUILD}/../image/.stamps -name "*_init" | sed 's#^.*stamps/##g; s#/.*init$##g') - do - ${SCRIPTS}/install ${INIT_PACKAGE}:init - done ${SCRIPTS}/install initramfs ) pkg_lock_status "ACTIVE" "linux:target" "build" @@ -167,23 +160,20 @@ pre_make_target() { FW_LIST="$(find ${PKG_BUILD}/external-firmware \( -type f -o -type l \) \( -iname '*.bin' -o -iname '*.fw' -o -path '*/intel-ucode/*' \) | sed 's|.*external-firmware/||' | sort | xargs)" - ${PKG_BUILD}/scripts/config --set-str CONFIG_EXTRA_FIRMWARE "${FW_LIST}" - ${PKG_BUILD}/scripts/config --set-str CONFIG_EXTRA_FIRMWARE_DIR "external-firmware" - - elif [ "${TARGET_ARCH}" = "arm" -a "${DEVICE}" = "iMX6" ]; then - mkdir -p ${PKG_BUILD}/external-firmware/imx/sdma - cp -a $(get_build_dir firmware-imx)/firmware/sdma/*imx6*.bin ${PKG_BUILD}/external-firmware/imx/sdma - cp -a $(get_build_dir firmware-imx)/firmware/vpu/*imx6*.bin ${PKG_BUILD}/external-firmware - - FW_LIST="$(find ${PKG_BUILD}/external-firmware -type f | sed 's|.*external-firmware/||' | sort | xargs)" - ${PKG_BUILD}/scripts/config --set-str CONFIG_EXTRA_FIRMWARE "${FW_LIST}" ${PKG_BUILD}/scripts/config --set-str CONFIG_EXTRA_FIRMWARE_DIR "external-firmware" fi - yes "" | kernel_make oldconfig + kernel_make listnewconfig + if [ "${INTERACTIVE_CONFIG}" = "yes" ]; then + # manually answer .config changes + kernel_make oldconfig + else + # accept default answers for .config changes + yes "" | kernel_make oldconfig > /dev/null + fi - if [ -f "${ROOT}/${DISTRO}/kernel_options" ]; then + if [ -f "${DISTRO_DIR}/${DISTRO}/kernel_options" ]; then while read OPTION; do [ -z "${OPTION}" -o -n "$(echo "${OPTION}" | grep '^#')" ] && continue @@ -194,7 +184,7 @@ pre_make_target() { if [ "$(${PKG_BUILD}/scripts/config --state ${OPTION%%=*})" != "$(echo ${OPTION##*=} | tr -d '"')" ]; then MISSING_KERNEL_OPTIONS+="\t${OPTION}\n" fi - done < ${ROOT}/${DISTRO}/kernel_options + done < ${DISTRO_DIR}/${DISTRO}/kernel_options if [ -n "${MISSING_KERNEL_OPTIONS}" ]; then print_color CLR_WARNING "LINUX: kernel options not correct: \n${MISSING_KERNEL_OPTIONS%%}\nPlease run ./tools/check_kernel_config\n" @@ -203,16 +193,6 @@ pre_make_target() { } make_target() { - # arm64 target does not support creating uImage. - # Build Image first, then wrap it using u-boot's mkimage. - if [[ "${TARGET_KERNEL_ARCH}" = "arm64" && "${KERNEL_TARGET}" = uImage* ]]; then - if [ -z "${KERNEL_UIMAGE_LOADADDR}" -o -z "${KERNEL_UIMAGE_ENTRYADDR}" ]; then - die "ERROR: KERNEL_UIMAGE_LOADADDR and KERNEL_UIMAGE_ENTRYADDR have to be set to build uImage - aborting" - fi - KERNEL_UIMAGE_TARGET="${KERNEL_TARGET}" - KERNEL_TARGET="${KERNEL_TARGET/uImage/Image}" - fi - DTC_FLAGS=-@ kernel_make ${KERNEL_TARGET} ${KERNEL_MAKE_EXTRACMD} modules if [ "${PKG_BUILD_PERF}" = "yes" ]; then @@ -248,35 +228,6 @@ make_target() { cp perf ${INSTALL}/usr/bin ) fi - - if [ -n "${KERNEL_UIMAGE_TARGET}" ]; then - # determine compression used for kernel image - KERNEL_UIMAGE_COMP=${KERNEL_UIMAGE_TARGET:7} - KERNEL_UIMAGE_COMP=$(echo ${KERNEL_UIMAGE_COMP:-none} | sed 's/gz/gzip/; s/bz2/bzip2/') - - # calculate new load address to make kernel Image unpack to memory area after compressed image - if [ "${KERNEL_UIMAGE_COMP}" != "none" ]; then - COMPRESSED_SIZE=$(stat -t "arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET}" | awk '{print $2}') - # align to 1 MiB - COMPRESSED_SIZE=$(( ((${COMPRESSED_SIZE} - 1 >> 20) + 1) << 20 )) - PKG_KERNEL_UIMAGE_LOADADDR=$(printf '%X' "$(( ${KERNEL_UIMAGE_LOADADDR} + ${COMPRESSED_SIZE} ))") - PKG_KERNEL_UIMAGE_ENTRYADDR=$(printf '%X' "$(( ${KERNEL_UIMAGE_ENTRYADDR} + ${COMPRESSED_SIZE} ))") - else - PKG_KERNEL_UIMAGE_LOADADDR=${KERNEL_UIMAGE_LOADADDR} - PKG_KERNEL_UIMAGE_ENTRYADDR=${KERNEL_UIMAGE_ENTRYADDR} - fi - - mkimage -A ${TARGET_KERNEL_ARCH} \ - -O linux \ - -T kernel \ - -C ${KERNEL_UIMAGE_COMP} \ - -a ${PKG_KERNEL_UIMAGE_LOADADDR} \ - -e ${PKG_KERNEL_UIMAGE_ENTRYADDR} \ - -d arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET} \ - arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_UIMAGE_TARGET} - - KERNEL_TARGET="${KERNEL_UIMAGE_TARGET}" - fi } makeinstall_target() { From 3ac128920c53edde0ce51d6a735bdc51875cfd88 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 6 May 2024 19:06:40 +0100 Subject: [PATCH 145/184] rocknix-joypad: bump driver (add vibrate support) linux: unify duplicate patches Rockchip/RK3399: use rocknix-joypad --- .../kernel/drivers/rocknix-joypad/package.mk | 2 +- packages/kernel/linux/package.mk | 7 +- ...t-api-changes-needed-for-joypad-driv.patch | 0 .../0002-input-add-input-polldev-driver.patch | 0 .../0003-pwm-add-pwm_set_period.patch | 29 + ...t-api-changes-needed-for-joypad-driv.patch | 436 ---- .../0010-input-add-input-polldev-driver.patch | 485 ---- projects/Rockchip/devices/RK3399/options | 2 +- .../linux/RK3326/001-panel-updates.patch | 119 +- .../linux/RK3326/004-input-drivers.patch | 598 +---- .../patches/linux/RK3399/000-rk3399-dts.patch | 4 +- .../linux/RK3399/003-rg552-joypad.patch | 2025 ----------------- .../linux/RK3399/100-rk3399-cache-fix.patch | 183 -- .../linux/RK3566/005-anbernic-input.patch | 20 +- .../RK3566/018-powkiddy-wifi-input.patch | 12 +- 15 files changed, 124 insertions(+), 3798 deletions(-) rename projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch => packages/kernel/linux/patches/mainline/0001-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch (100%) rename projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch => packages/kernel/linux/patches/mainline/0002-input-add-input-polldev-driver.patch (100%) create mode 100644 packages/kernel/linux/patches/mainline/0003-pwm-add-pwm_set_period.patch delete mode 100644 projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch delete mode 100644 projects/Amlogic/patches/linux/S922X/0010-input-add-input-polldev-driver.patch delete mode 100644 projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch delete mode 100644 projects/Rockchip/patches/linux/RK3399/100-rk3399-cache-fix.patch diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index ba1608b69..008186b8d 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="66546f3e752e3fb9a732f2b63676a3427929b36f" +PKG_VERSION="69b37098b1338f716aa3b6fcaa1b7c1522d24a36" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index f336bd76a..05461486f 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -24,13 +24,10 @@ case ${DEVICE} in PKG_URL="https://github.com/armbian/linux-rockchip/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" ;; - RK3566*|S922X) + *) PKG_VERSION="6.9-rc3" PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" - ;; - *) - PKG_VERSION="6.8.9" - PKG_URL="${PKG_SITE}/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" + PKG_PATCH_DIRS+=" mainline" ;; esac diff --git a/projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch b/packages/kernel/linux/patches/mainline/0001-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch similarity index 100% rename from projects/Rockchip/patches/linux/RK3566/101-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch rename to packages/kernel/linux/patches/mainline/0001-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch diff --git a/projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch b/packages/kernel/linux/patches/mainline/0002-input-add-input-polldev-driver.patch similarity index 100% rename from projects/Rockchip/patches/linux/RK3566/102-input-add-input-polldev-driver.patch rename to packages/kernel/linux/patches/mainline/0002-input-add-input-polldev-driver.patch diff --git a/packages/kernel/linux/patches/mainline/0003-pwm-add-pwm_set_period.patch b/packages/kernel/linux/patches/mainline/0003-pwm-add-pwm_set_period.patch new file mode 100644 index 000000000..97daeee5a --- /dev/null +++ b/packages/kernel/linux/patches/mainline/0003-pwm-add-pwm_set_period.patch @@ -0,0 +1,29 @@ +From 742af2c4e58156315dd5347190cabdd40b0d0c18 Mon Sep 17 00:00:00 2001 +From: brooksytech <1673861+brooksytech@users.noreply.github.com> +Date: Mon, 6 May 2024 11:11:45 +0100 +Subject: [PATCH] pwm: add pwm_set_period + +--- + include/linux/pwm.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/include/linux/pwm.h b/include/linux/pwm.h +index 4a6568dfdf3f..f9d3bf5ac924 100644 +--- a/include/linux/pwm.h ++++ b/include/linux/pwm.h +@@ -110,6 +110,12 @@ static inline bool pwm_is_enabled(const struct pwm_device *pwm) + return state.enabled; + } + ++static inline void pwm_set_period(struct pwm_device *pwm, u64 period) ++{ ++ if (pwm) ++ pwm->state.period = period; ++} ++ + static inline u64 pwm_get_period(const struct pwm_device *pwm) + { + struct pwm_state state; +-- +2.34.1 + diff --git a/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch b/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch deleted file mode 100644 index 5a2521681..000000000 --- a/projects/Amlogic/patches/linux/S922X/0009-gpiolib-of-revert-api-changes-needed-for-joypad-driv.patch +++ /dev/null @@ -1,436 +0,0 @@ -From a2a47a8b3f3235dded76dfc1e10052d1ea8f89fc Mon Sep 17 00:00:00 2001 -From: brooksytech <1673861+brooksytech@users.noreply.github.com> -Date: Wed, 24 Jan 2024 22:12:01 +0000 -Subject: [PATCH 09/44] gpiolib: of: revert api changes needed for joypad - driver - ---- - drivers/gpio/gpiolib-of.c | 29 ++-- - include/linux/of_gpio.h | 37 +++- - include/linux/of_gpio_legacy.h | 304 +++++++++++++++++++++++++++++++++ - 3 files changed, 354 insertions(+), 16 deletions(-) - create mode 100644 include/linux/of_gpio_legacy.h - -diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c -index e7770eedd146..4459226f21d1 100644 ---- a/drivers/gpio/gpiolib-of.c -+++ b/drivers/gpio/gpiolib-of.c -@@ -25,21 +25,6 @@ - #include "gpiolib.h" - #include "gpiolib-of.h" - --/* -- * This is Linux-specific flags. By default controllers' and Linux' mapping -- * match, but GPIO controllers are free to translate their own flags to -- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -- */ --enum of_gpio_flags { -- OF_GPIO_ACTIVE_LOW = 0x1, -- OF_GPIO_SINGLE_ENDED = 0x2, -- OF_GPIO_OPEN_DRAIN = 0x4, -- OF_GPIO_TRANSITORY = 0x8, -- OF_GPIO_PULL_UP = 0x10, -- OF_GPIO_PULL_DOWN = 0x20, -- OF_GPIO_PULL_DISABLE = 0x40, --}; -- - /** - * of_gpio_named_count() - Count GPIOs for a device - * @np: device node to count GPIOs for -@@ -409,6 +394,20 @@ static struct gpio_desc *of_get_named_gpiod_flags(const struct device_node *np, - return desc; - } - -+int of_get_named_gpio_flags(const struct device_node *np, const char *list_name, -+ int index, enum of_gpio_flags *flags) -+{ -+ struct gpio_desc *desc; -+ -+ desc = of_get_named_gpiod_flags(np, list_name, index, flags); -+ -+ if (IS_ERR(desc)) -+ return PTR_ERR(desc); -+ else -+ return desc_to_gpio(desc); -+} -+EXPORT_SYMBOL_GPL(of_get_named_gpio_flags); -+ - /** - * of_get_named_gpio() - Get a GPIO number to use with GPIO API - * @np: device node to get GPIO from -diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h -index d0f66a5e1b2a..5c4c7e1a307b 100644 ---- a/include/linux/of_gpio.h -+++ b/include/linux/of_gpio.h -@@ -17,8 +17,26 @@ - - struct device_node; - -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+ OF_GPIO_PULL_DISABLE = 0x40, -+}; -+ - #ifdef CONFIG_OF_GPIO - -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ - extern int of_get_named_gpio(const struct device_node *np, - const char *list_name, int index); - -@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struct device_node *np, - - #include - --/* Drivers may not strictly depend on the GPIO support, so let them link. */ - static inline int of_get_named_gpio(const struct device_node *np, - const char *propname, int index) - { -+ return -ENOSYS; -+} -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ - return -ENOSYS; - } - - #endif /* CONFIG_OF_GPIO */ - -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+//#endif /* CONFIG_OF_GPIO */ -+ - #endif /* __LINUX_OF_GPIO_H */ -diff --git a/include/linux/of_gpio_legacy.h b/include/linux/of_gpio_legacy.h -new file mode 100644 -index 000000000000..ce58afecb4f9 ---- /dev/null -+++ b/include/linux/of_gpio_legacy.h -@@ -0,0 +1,304 @@ -+/* SPDX-License-Identifier: GPL-2.0+ */ -+/* -+ * OF helpers for the GPIO API -+ * -+ * Copyright (c) 2007-2008 MontaVista Software, Inc. -+ * -+ * Author: Anton Vorontsov -+ */ -+ -+#ifndef __LINUX_OF_GPIO_H -+#define __LINUX_OF_GPIO_H -+ -+#include -+#include -+#include /* FIXME: Shouldn't be here */ -+#include -+ -+struct device_node; -+ -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+}; -+ -+#ifdef CONFIG_OF_GPIO -+ -+#include -+ -+/* -+ * OF GPIO chip for memory mapped banks -+ */ -+struct of_mm_gpio_chip { -+ struct gpio_chip gc; -+ void (*save_regs)(struct of_mm_gpio_chip *mm_gc); -+ void __iomem *regs; -+}; -+ -+static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) -+{ -+ return container_of(gc, struct of_mm_gpio_chip, gc); -+} -+ -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ -+extern int of_mm_gpiochip_add_data(struct device_node *np, -+ struct of_mm_gpio_chip *mm_gc, -+ void *data); -+static inline int of_mm_gpiochip_add(struct device_node *np, -+ struct of_mm_gpio_chip *mm_gc) -+{ -+ return of_mm_gpiochip_add_data(np, mm_gc, NULL); -+} -+extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc); -+ -+#else /* CONFIG_OF_GPIO */ -+ -+#include -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ -+ return -ENOSYS; -+} -+ -+#endif /* CONFIG_OF_GPIO */ -+ -+/** -+ * of_gpio_named_count() - Count GPIOs for a device -+ * @np: device node to count GPIOs for -+ * @propname: property name containing gpio specifier(s) -+ * -+ * The function returns the count of GPIOs specified for a node. -+ * Note that the empty GPIO specifiers count too. Returns either -+ * Number of gpios defined in property, -+ * -EINVAL for an incorrectly formed gpios property, or -+ * -ENOENT for a missing gpios property -+ * -+ * Example: -+ * gpios = <0 -+ * &gpio1 1 2 -+ * 0 -+ * &gpio2 3 4>; -+ * -+ * The above example defines four GPIOs, two of which are not specified. -+ * This function will return '4' -+ */ -+static inline int of_gpio_named_count(const struct device_node *np, -+ const char *propname) -+{ -+ return of_count_phandle_with_args(np, propname, "#gpio-cells"); -+} -+ -+/** -+ * of_gpio_count() - Count GPIOs for a device -+ * @np: device node to count GPIOs for -+ * -+ * Same as of_gpio_named_count, but hard coded to use the 'gpios' property -+ */ -+static inline int of_gpio_count(const struct device_node *np) -+{ -+ return of_gpio_named_count(np, "gpios"); -+} -+ -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+/** -+ * of_get_named_gpio() - Get a GPIO number to use with GPIO API -+ * @np: device node to get GPIO from -+ * @propname: Name of property containing gpio specifier(s) -+ * @index: index of the GPIO -+ * -+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno -+ * value on the error condition. -+ */ -+static inline int of_get_named_gpio(const struct device_node *np, -+ const char *propname, int index) -+{ -+ return of_get_named_gpio_flags(np, propname, index, NULL); -+} -+ -+/** -+ * of_get_gpio() - Get a GPIO number to use with GPIO API -+ * @np: device node to get GPIO from -+ * @index: index of the GPIO -+ * -+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno -+ * value on the error condition. -+ */ -+static inline int of_get_gpio(const struct device_node *np, int index) -+{ -+ return of_get_gpio_flags(np, index, NULL); -+} -+ -+#endif /* __LINUX_OF_GPIO_H */ -+/* SPDX-License-Identifier: GPL-2.0+ */ -+/* -+ * OF helpers for the GPIO API -+ * -+ * Copyright (c) 2007-2008 MontaVista Software, Inc. -+ * -+ * Author: Anton Vorontsov -+ */ -+ -+#ifndef __LINUX_OF_GPIO_H -+#define __LINUX_OF_GPIO_H -+ -+#include -+#include -+#include /* FIXME: Shouldn't be here */ -+#include -+ -+struct device_node; -+ -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+}; -+ -+#ifdef CONFIG_OF_GPIO -+ -+#include -+ -+/* -+ * OF GPIO chip for memory mapped banks -+ */ -+struct of_mm_gpio_chip { -+ struct gpio_chip gc; -+ void (*save_regs)(struct of_mm_gpio_chip *mm_gc); -+ void __iomem *regs; -+}; -+ -+static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) -+{ -+ return container_of(gc, struct of_mm_gpio_chip, gc); -+} -+ -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ -+extern int of_mm_gpiochip_add_data(struct device_node *np, -+ struct of_mm_gpio_chip *mm_gc, -+ void *data); -+static inline int of_mm_gpiochip_add(struct device_node *np, -+ struct of_mm_gpio_chip *mm_gc) -+{ -+ return of_mm_gpiochip_add_data(np, mm_gc, NULL); -+} -+extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc); -+ -+#else /* CONFIG_OF_GPIO */ -+ -+#include -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ -+ return -ENOSYS; -+} -+ -+#endif /* CONFIG_OF_GPIO */ -+ -+/** -+ * of_gpio_named_count() - Count GPIOs for a device -+ * @np: device node to count GPIOs for -+ * @propname: property name containing gpio specifier(s) -+ * -+ * The function returns the count of GPIOs specified for a node. -+ * Note that the empty GPIO specifiers count too. Returns either -+ * Number of gpios defined in property, -+ * -EINVAL for an incorrectly formed gpios property, or -+ * -ENOENT for a missing gpios property -+ * -+ * Example: -+ * gpios = <0 -+ * &gpio1 1 2 -+ * 0 -+ * &gpio2 3 4>; -+ * -+ * The above example defines four GPIOs, two of which are not specified. -+ * This function will return '4' -+ */ -+static inline int of_gpio_named_count(const struct device_node *np, -+ const char *propname) -+{ -+ return of_count_phandle_with_args(np, propname, "#gpio-cells"); -+} -+ -+/** -+ * of_gpio_count() - Count GPIOs for a device -+ * @np: device node to count GPIOs for -+ * -+ * Same as of_gpio_named_count, but hard coded to use the 'gpios' property -+ */ -+static inline int of_gpio_count(const struct device_node *np) -+{ -+ return of_gpio_named_count(np, "gpios"); -+} -+ -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+/** -+ * of_get_named_gpio() - Get a GPIO number to use with GPIO API -+ * @np: device node to get GPIO from -+ * @propname: Name of property containing gpio specifier(s) -+ * @index: index of the GPIO -+ * -+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno -+ * value on the error condition. -+ */ -+static inline int of_get_named_gpio(const struct device_node *np, -+ const char *propname, int index) -+{ -+ return of_get_named_gpio_flags(np, propname, index, NULL); -+} -+ -+/** -+ * of_get_gpio() - Get a GPIO number to use with GPIO API -+ * @np: device node to get GPIO from -+ * @index: index of the GPIO -+ * -+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno -+ * value on the error condition. -+ */ -+static inline int of_get_gpio(const struct device_node *np, int index) -+{ -+ return of_get_gpio_flags(np, index, NULL); -+} -+ -+#endif /* __LINUX_OF_GPIO_H */ --- -2.34.1 - diff --git a/projects/Amlogic/patches/linux/S922X/0010-input-add-input-polldev-driver.patch b/projects/Amlogic/patches/linux/S922X/0010-input-add-input-polldev-driver.patch deleted file mode 100644 index cf06685e2..000000000 --- a/projects/Amlogic/patches/linux/S922X/0010-input-add-input-polldev-driver.patch +++ /dev/null @@ -1,485 +0,0 @@ -From 2f3e05182321bd7e6b8ad2335f1ed0751f006918 Mon Sep 17 00:00:00 2001 -From: brooksytech <1673861+brooksytech@users.noreply.github.com> -Date: Wed, 24 Jan 2024 21:50:05 +0000 -Subject: [PATCH 10/44] input: add input-polldev driver - ---- - drivers/input/Kconfig | 13 ++ - drivers/input/Makefile | 1 + - drivers/input/input-polldev.c | 362 ++++++++++++++++++++++++++++++++++ - include/linux/input-polldev.h | 58 ++++++ - 4 files changed, 434 insertions(+) - create mode 100644 drivers/input/input-polldev.c - create mode 100644 include/linux/input-polldev.h - -diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig -index 3bdbd34314b3..779daf5009c1 100644 ---- a/drivers/input/Kconfig -+++ b/drivers/input/Kconfig -@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS - To compile this driver as a module, choose M here: the - module will be called ff-memless. - -+config INPUT_POLLDEV -+ tristate "Polled input device skeleton" -+ help -+ Say Y here if you are using a driver for an input -+ device that periodically polls hardware state. This -+ option is only useful for out-of-tree drivers since -+ in-tree drivers select it automatically. -+ -+ If unsure, say N. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called input-polldev. -+ - config INPUT_SPARSEKMAP - tristate "Sparse keymap support library" - help -diff --git a/drivers/input/Makefile b/drivers/input/Makefile -index c78753274921..e92c29174c36 100644 ---- a/drivers/input/Makefile -+++ b/drivers/input/Makefile -@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o input-mt.o input-poller.o ff-core.o - input-core-y += touchscreen.o - - obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o -+obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o - obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o - obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o - obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o -diff --git a/drivers/input/input-polldev.c b/drivers/input/input-polldev.c -new file mode 100644 -index 000000000000..9bf1c9aeb4c4 ---- /dev/null -+++ b/drivers/input/input-polldev.c -@@ -0,0 +1,362 @@ -+// SPDX-License-Identifier: GPL-2.0-only -+/* -+ * Generic implementation of a polled input device -+ -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+MODULE_AUTHOR("Dmitry Torokhov "); -+MODULE_DESCRIPTION("Generic implementation of a polled input device"); -+MODULE_LICENSE("GPL v2"); -+ -+static void input_polldev_queue_work(struct input_polled_dev *dev) -+{ -+ unsigned long delay; -+ -+ delay = msecs_to_jiffies(dev->poll_interval); -+ if (delay >= HZ) -+ delay = round_jiffies_relative(delay); -+ -+ queue_delayed_work(system_freezable_wq, &dev->work, delay); -+} -+ -+static void input_polled_device_work(struct work_struct *work) -+{ -+ struct input_polled_dev *dev = -+ container_of(work, struct input_polled_dev, work.work); -+ -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+} -+ -+static int input_open_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ if (dev->open) -+ dev->open(dev); -+ -+ /* Only start polling if polling is enabled */ -+ if (dev->poll_interval > 0) { -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+ } -+ -+ return 0; -+} -+ -+static void input_close_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ cancel_delayed_work_sync(&dev->work); -+ -+ if (dev->close) -+ dev->close(dev); -+} -+ -+/* SYSFS interface */ -+ -+static ssize_t input_polldev_get_poll(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval); -+} -+ -+static ssize_t input_polldev_set_poll(struct device *dev, -+ struct device_attribute *attr, const char *buf, -+ size_t count) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ struct input_dev *input = polldev->input; -+ unsigned int interval; -+ int err; -+ -+ err = kstrtouint(buf, 0, &interval); -+ if (err) -+ return err; -+ -+ if (interval < polldev->poll_interval_min) -+ return -EINVAL; -+ -+ if (interval > polldev->poll_interval_max) -+ return -EINVAL; -+ -+ mutex_lock(&input->mutex); -+ -+ polldev->poll_interval = interval; -+ -+ if (input->users) { -+ cancel_delayed_work_sync(&polldev->work); -+ if (polldev->poll_interval > 0) -+ input_polldev_queue_work(polldev); -+ } -+ -+ mutex_unlock(&input->mutex); -+ -+ return count; -+} -+ -+static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll, -+ input_polldev_set_poll); -+ -+ -+static ssize_t input_polldev_get_max(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_max); -+} -+ -+static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL); -+ -+static ssize_t input_polldev_get_min(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_min); -+} -+ -+static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL); -+ -+static struct attribute *sysfs_attrs[] = { -+ &dev_attr_poll.attr, -+ &dev_attr_max.attr, -+ &dev_attr_min.attr, -+ NULL -+}; -+ -+static struct attribute_group input_polldev_attribute_group = { -+ .attrs = sysfs_attrs -+}; -+ -+static const struct attribute_group *input_polldev_attribute_groups[] = { -+ &input_polldev_attribute_group, -+ NULL -+}; -+ -+/** -+ * input_allocate_polled_device - allocate memory for polled device -+ * -+ * The function allocates memory for a polled device and also -+ * for an input device associated with this polled device. -+ */ -+struct input_polled_dev *input_allocate_polled_device(void) -+{ -+ struct input_polled_dev *dev; -+ -+ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); -+ if (!dev) -+ return NULL; -+ -+ dev->input = input_allocate_device(); -+ if (!dev->input) { -+ kfree(dev); -+ return NULL; -+ } -+ -+ return dev; -+} -+EXPORT_SYMBOL(input_allocate_polled_device); -+ -+struct input_polled_devres { -+ struct input_polled_dev *polldev; -+}; -+ -+static int devm_input_polldev_match(struct device *dev, void *res, void *data) -+{ -+ struct input_polled_devres *devres = res; -+ -+ return devres->polldev == data; -+} -+ -+static void devm_input_polldev_release(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: dropping reference/freeing %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ -+ input_put_device(polldev->input); -+ kfree(polldev); -+} -+ -+static void devm_input_polldev_unregister(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: unregistering device %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ input_unregister_device(polldev->input); -+ -+ /* -+ * Note that we are still holding extra reference to the input -+ * device so it will stick around until devm_input_polldev_release() -+ * is called. -+ */ -+} -+ -+/** -+ * devm_input_allocate_polled_device - allocate managed polled device -+ * @dev: device owning the polled device being created -+ * -+ * Returns prepared &struct input_polled_dev or %NULL. -+ * -+ * Managed polled input devices do not need to be explicitly unregistered -+ * or freed as it will be done automatically when owner device unbinds -+ * from * its driver (or binding fails). Once such managed polled device -+ * is allocated, it is ready to be set up and registered in the same -+ * fashion as regular polled input devices (using -+ * input_register_polled_device() function). -+ * -+ * If you want to manually unregister and free such managed polled devices, -+ * it can be still done by calling input_unregister_polled_device() and -+ * input_free_polled_device(), although it is rarely needed. -+ * -+ * NOTE: the owner device is set up as parent of input device and users -+ * should not override it. -+ */ -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) -+{ -+ struct input_polled_dev *polldev; -+ struct input_polled_devres *devres; -+ -+ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres), -+ GFP_KERNEL); -+ if (!devres) -+ return NULL; -+ -+ polldev = input_allocate_polled_device(); -+ if (!polldev) { -+ devres_free(devres); -+ return NULL; -+ } -+ -+ polldev->input->dev.parent = dev; -+ polldev->devres_managed = true; -+ -+ devres->polldev = polldev; -+ devres_add(dev, devres); -+ -+ return polldev; -+} -+EXPORT_SYMBOL(devm_input_allocate_polled_device); -+ -+/** -+ * input_free_polled_device - free memory allocated for polled device -+ * @dev: device to free -+ * -+ * The function frees memory allocated for polling device and drops -+ * reference to the associated input device. -+ */ -+void input_free_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev) { -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_release, -+ devm_input_polldev_match, -+ dev)); -+ input_put_device(dev->input); -+ kfree(dev); -+ } -+} -+EXPORT_SYMBOL(input_free_polled_device); -+ -+/** -+ * input_register_polled_device - register polled device -+ * @dev: device to register -+ * -+ * The function registers previously initialized polled input device -+ * with input layer. The device should be allocated with call to -+ * input_allocate_polled_device(). Callers should also set up poll() -+ * method and set up capabilities (id, name, phys, bits) of the -+ * corresponding input_dev structure. -+ */ -+int input_register_polled_device(struct input_polled_dev *dev) -+{ -+ struct input_polled_devres *devres = NULL; -+ struct input_dev *input = dev->input; -+ int error; -+ -+ if (dev->devres_managed) { -+ devres = devres_alloc(devm_input_polldev_unregister, -+ sizeof(*devres), GFP_KERNEL); -+ if (!devres) -+ return -ENOMEM; -+ -+ devres->polldev = dev; -+ } -+ -+ input_set_drvdata(input, dev); -+ INIT_DELAYED_WORK(&dev->work, input_polled_device_work); -+ -+ if (!dev->poll_interval) -+ dev->poll_interval = 500; -+ if (!dev->poll_interval_max) -+ dev->poll_interval_max = dev->poll_interval; -+ -+ input->open = input_open_polled_device; -+ input->close = input_close_polled_device; -+ -+ input->dev.groups = input_polldev_attribute_groups; -+ -+ error = input_register_device(input); -+ if (error) { -+ devres_free(devres); -+ return error; -+ } -+ -+ /* -+ * Take extra reference to the underlying input device so -+ * that it survives call to input_unregister_polled_device() -+ * and is deleted only after input_free_polled_device() -+ * has been invoked. This is needed to ease task of freeing -+ * sparse keymaps. -+ */ -+ input_get_device(input); -+ -+ if (dev->devres_managed) { -+ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", -+ __func__, dev_name(&input->dev)); -+ devres_add(input->dev.parent, devres); -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(input_register_polled_device); -+ -+/** -+ * input_unregister_polled_device - unregister polled device -+ * @dev: device to unregister -+ * -+ * The function unregisters previously registered polled input -+ * device from input layer. Polling is stopped and device is -+ * ready to be freed with call to input_free_polled_device(). -+ */ -+void input_unregister_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_unregister, -+ devm_input_polldev_match, -+ dev)); -+ -+ input_unregister_device(dev->input); -+} -+EXPORT_SYMBOL(input_unregister_polled_device); -diff --git a/include/linux/input-polldev.h b/include/linux/input-polldev.h -new file mode 100644 -index 000000000000..14821fd231c0 ---- /dev/null -+++ b/include/linux/input-polldev.h -@@ -0,0 +1,58 @@ -+/* SPDX-License-Identifier: GPL-2.0-only */ -+#ifndef _INPUT_POLLDEV_H -+#define _INPUT_POLLDEV_H -+ -+/* -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#include -+#include -+ -+/** -+ * struct input_polled_dev - simple polled input device -+ * @private: private driver data. -+ * @open: driver-supplied method that prepares device for polling -+ * (enabled the device and maybe flushes device state). -+ * @close: driver-supplied method that is called when device is no -+ * longer being polled. Used to put device into low power mode. -+ * @poll: driver-supplied method that polls the device and posts -+ * input events (mandatory). -+ * @poll_interval: specifies how often the poll() method should be called. -+ * Defaults to 500 msec unless overridden when registering the device. -+ * @poll_interval_max: specifies upper bound for the poll interval. -+ * Defaults to the initial value of @poll_interval. -+ * @poll_interval_min: specifies lower bound for the poll interval. -+ * Defaults to 0. -+ * @input: input device structure associated with the polled device. -+ * Must be properly initialized by the driver (id, name, phys, bits). -+ * -+ * Polled input device provides a skeleton for supporting simple input -+ * devices that do not raise interrupts but have to be periodically -+ * scanned or polled to detect changes in their state. -+ */ -+struct input_polled_dev { -+ void *private; -+ -+ void (*open)(struct input_polled_dev *dev); -+ void (*close)(struct input_polled_dev *dev); -+ void (*poll)(struct input_polled_dev *dev); -+ unsigned int poll_interval; /* msec */ -+ unsigned int poll_interval_max; /* msec */ -+ unsigned int poll_interval_min; /* msec */ -+ -+ struct input_dev *input; -+ -+/* private: */ -+ struct delayed_work work; -+ -+ bool devres_managed; -+}; -+ -+struct input_polled_dev *input_allocate_polled_device(void); -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); -+void input_free_polled_device(struct input_polled_dev *dev); -+int input_register_polled_device(struct input_polled_dev *dev); -+void input_unregister_polled_device(struct input_polled_dev *dev); -+ -+#endif --- -2.34.1 - diff --git a/projects/Rockchip/devices/RK3399/options b/projects/Rockchip/devices/RK3399/options index d283cb133..b0cc9bb6c 100644 --- a/projects/Rockchip/devices/RK3399/options +++ b/projects/Rockchip/devices/RK3399/options @@ -83,7 +83,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="" + ADDITIONAL_DRIVERS="rocknix-joypad" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" diff --git a/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch b/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch index 76d589cf8..e9e39f27c 100644 --- a/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch +++ b/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch @@ -1,6 +1,7 @@ -diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers/gpu/drm/panel/panel-elida-kd35t133.c ---- linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c 2024-03-24 22:31:45.518700301 +0000 -+++ linux/drivers/gpu/drm/panel/panel-elida-kd35t133.c 2024-03-24 22:35:50.122871690 +0000 +diff --git a/drivers/gpu/drm/panel/panel-elida-kd35t133.c b/drivers/gpu/drm/panel/panel-elida-kd35t133.c +index 00791ea81e90..80813df2b015 100644 +--- a/drivers/gpu/drm/panel/panel-elida-kd35t133.c ++++ b/drivers/gpu/drm/panel/panel-elida-kd35t133.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* @@ -17,7 +18,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers }; static inline struct kd35t133 *panel_to_kd35t133(struct drm_panel *panel) -@@ -90,6 +91,9 @@ static int kd35t133_unprepare(struct drm +@@ -90,6 +91,9 @@ static int kd35t133_unprepare(struct drm_panel *panel) struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); int ret; @@ -27,7 +28,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers ret = mipi_dsi_dcs_set_display_off(dsi); if (ret < 0) dev_err(ctx->dev, "failed to set display off: %d\n", ret); -@@ -105,6 +109,10 @@ static int kd35t133_unprepare(struct drm +@@ -105,6 +109,10 @@ static int kd35t133_unprepare(struct drm_panel *panel) regulator_disable(ctx->iovcc); regulator_disable(ctx->vdd); @@ -38,7 +39,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers return 0; } -@@ -114,6 +122,9 @@ static int kd35t133_prepare(struct drm_p +@@ -114,6 +122,9 @@ static int kd35t133_prepare(struct drm_panel *panel) struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); int ret; @@ -48,7 +49,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers dev_dbg(ctx->dev, "Resetting the panel\n"); ret = regulator_enable(ctx->vdd); if (ret < 0) { -@@ -157,6 +168,8 @@ static int kd35t133_prepare(struct drm_p +@@ -157,6 +168,8 @@ static int kd35t133_prepare(struct drm_panel *panel) msleep(50); @@ -57,7 +58,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers return 0; disable_iovcc: -@@ -200,6 +213,11 @@ static int kd35t133_get_modes(struct drm +@@ -200,6 +213,11 @@ static int kd35t133_get_modes(struct drm_panel *panel, connector->display_info.width_mm = mode->width_mm; connector->display_info.height_mm = mode->height_mm; drm_mode_probed_add(connector, mode); @@ -69,7 +70,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers return 1; } -@@ -285,11 +303,27 @@ static int kd35t133_probe(struct mipi_ds +@@ -285,11 +303,27 @@ static int kd35t133_probe(struct mipi_dsi_device *dsi) return 0; } @@ -97,7 +98,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers ret = mipi_dsi_detach(dsi); if (ret < 0) dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); -@@ -310,6 +344,7 @@ static struct mipi_dsi_driver kd35t133_d +@@ -310,6 +344,7 @@ static struct mipi_dsi_driver kd35t133_driver = { }, .probe = kd35t133_probe, .remove = kd35t133_remove, @@ -105,10 +106,11 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-elida-kd35t133.c linux/drivers }; module_mipi_dsi_driver(kd35t133_driver); -diff -rupN linux.orig/drivers/gpu/drm/panel/panel-newvision-nv3051d.c linux/drivers/gpu/drm/panel/panel-newvision-nv3051d.c ---- linux.orig/drivers/gpu/drm/panel/panel-newvision-nv3051d.c 2024-03-24 22:31:45.518700301 +0000 -+++ linux/drivers/gpu/drm/panel/panel-newvision-nv3051d.c 2024-03-24 22:36:35.760177192 +0000 -@@ -477,18 +477,18 @@ static const struct drm_display_mode nv3 +diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3051d.c b/drivers/gpu/drm/panel/panel-newvision-nv3051d.c +index 94d89ffd596b..561a77abd2c9 100644 +--- a/drivers/gpu/drm/panel/panel-newvision-nv3051d.c ++++ b/drivers/gpu/drm/panel/panel-newvision-nv3051d.c +@@ -477,18 +477,18 @@ static const struct drm_display_mode nv3051d_rgxx3_modes[] = { }; static const struct drm_display_mode nv3051d_rk2023_modes[] = { @@ -136,7 +138,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-newvision-nv3051d.c linux/driv }; static const struct nv3051d_panel_info nv3051d_rg351v_info = { -@@ -519,7 +519,8 @@ static const struct nv3051d_panel_info n +@@ -519,7 +519,8 @@ static const struct nv3051d_panel_info nv3051d_rk2023_info = { .height_mm = 57, .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE, .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | @@ -146,9 +148,10 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-newvision-nv3051d.c linux/driv }; static const struct of_device_id newvision_nv3051d_of_match[] = { -diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/drivers/gpu/drm/panel/panel-sitronix-st7703.c ---- linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c 2024-03-24 22:31:45.522700434 +0000 -+++ linux/drivers/gpu/drm/panel/panel-sitronix-st7703.c 2024-03-24 23:06:31.765308941 +0000 +diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c +index a3e142f156d5..04cc2aef01f1 100644 +--- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c ++++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c @@ -13,8 +13,9 @@ #include #include @@ -168,7 +171,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver #define ST7703_CMD_SETGAMMA 0xE0 #define ST7703_CMD_SETEQ 0xE3 #define ST7703_CMD_SETGIP1 0xE9 -@@ -77,6 +79,14 @@ static inline struct st7703 *panel_to_st +@@ -78,6 +80,14 @@ static inline struct st7703 *panel_to_st7703(struct drm_panel *panel) return container_of(panel, struct st7703, panel); } @@ -183,7 +186,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver static int jh057n_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -86,27 +96,27 @@ static int jh057n_init_sequence(struct s +@@ -87,27 +97,27 @@ static int jh057n_init_sequence(struct st7703 *ctx) * resemble the ST7703 but the number of parameters often don't match * so it's likely a clone. */ @@ -223,7 +226,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x82, 0x10, 0x06, 0x05, 0x9E, 0x0A, 0xA5, 0x12, 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -@@ -115,7 +125,7 @@ static int jh057n_init_sequence(struct s +@@ -116,7 +126,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -232,7 +235,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -@@ -124,7 +134,7 @@ static int jh057n_init_sequence(struct s +@@ -125,7 +135,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0A, 0xA5, 0x00, 0x00, 0x00, 0x00); @@ -241,7 +244,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41, 0x37, 0x07, 0x0B, 0x0D, 0x10, 0x11, 0x0F, 0x10, 0x11, 0x18, 0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41, -@@ -159,6 +169,15 @@ static const struct st7703_panel_desc jh +@@ -160,6 +170,15 @@ static const struct st7703_panel_desc jh057n00900_panel_desc = { .init_sequence = jh057n_init_sequence, }; @@ -257,7 +260,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver static int xbd599_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -168,9 +187,9 @@ static int xbd599_init_sequence(struct s +@@ -169,9 +188,9 @@ static int xbd599_init_sequence(struct st7703 *ctx) */ /* Magic sequence to unlock user commands below. */ @@ -269,7 +272,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x33, /* VC_main = 0, Lane_Number = 3 (4 lanes) */ 0x81, /* DSI_LDO_SEL = 1.7V, RTERM = 90 Ohm */ 0x05, /* IHSRX = x6 (Low High Speed driving ability) */ -@@ -182,14 +201,14 @@ static int xbd599_init_sequence(struct s +@@ -183,14 +202,14 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x44, 0x25, 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, 0x00, 0x00, 0x37); @@ -286,7 +289,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x10, /* VBP_RGB_GEN */ 0x10, /* VFP_RGB_GEN */ 0x05, /* DE_BP_RGB_GEN */ -@@ -200,7 +219,7 @@ static int xbd599_init_sequence(struct s +@@ -201,7 +220,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00, 0x00); /* Source driving settings. */ @@ -295,7 +298,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x73, /* N_POPON */ 0x73, /* N_NOPON */ 0x50, /* I_POPON */ -@@ -212,19 +231,19 @@ static int xbd599_init_sequence(struct s +@@ -213,19 +232,19 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00 /* Undocumented */); /* NVDDD_SEL = -1.8V, VDDD_SEL = out of range (possibly 1.9V?) */ @@ -319,7 +322,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0xF0, /* NL = 240 */ 0x12, /* RES_V_LSB = 0, BLK_CON = VSSD, * RESO_SEL = 720RGB -@@ -234,7 +253,7 @@ static int xbd599_init_sequence(struct s +@@ -235,7 +254,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) * ISC = 0 frames */); @@ -328,7 +331,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x00, /* PNOEQ */ 0x00, /* NNOEQ */ 0x0B, /* PEQGND */ -@@ -254,9 +273,10 @@ static int xbd599_init_sequence(struct s +@@ -255,9 +274,10 @@ static int xbd599_init_sequence(struct st7703 *ctx) * ESD_DET_TIME_SEL = 0 frames */); @@ -341,7 +344,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x74, /* VBTHS, VBTLS: VGH = 17V, VBL = -11V */ 0x00, /* FBOFF_VGH = 0, FBOFF_VGL = 0 */ 0x32, /* VRP */ -@@ -274,19 +294,20 @@ static int xbd599_init_sequence(struct s +@@ -275,19 +295,20 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x77 /* VGH3_R_DIV, VGL3_R_DIV (4.5MHz) */); /* Reference voltage. */ @@ -366,7 +369,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -@@ -297,7 +318,7 @@ static int xbd599_init_sequence(struct s +@@ -298,7 +319,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); /* This command is to set backward GIP timing. */ @@ -375,7 +378,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -@@ -308,7 +329,7 @@ static int xbd599_init_sequence(struct s +@@ -309,7 +330,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0xA5, 0x00, 0x00, 0x00, 0x00); /* Adjust the gamma characteristics of the panel. */ @@ -384,7 +387,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -@@ -341,7 +362,15 @@ static const struct st7703_panel_desc xb +@@ -342,7 +363,15 @@ static const struct st7703_panel_desc xbd599_desc = { .init_sequence = xbd599_init_sequence, }; @@ -401,7 +404,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -349,44 +378,44 @@ static int rg353v2_init_sequence(struct +@@ -350,44 +379,44 @@ static int rg353v2_init_sequence(struct st7703 *ctx) * Init sequence was supplied by the panel vendor. */ @@ -466,7 +469,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x00, 0xb0, 0xb1, 0x11, 0x31, 0x23, 0x28, 0x80, 0xb0, 0xb1, 0x27, 0x08, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, -@@ -395,7 +424,7 @@ static int rg353v2_init_sequence(struct +@@ -396,7 +425,7 @@ static int rg353v2_init_sequence(struct st7703 *ctx) 0x18, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -475,7 +478,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x88, 0xba, 0x17, 0x53, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0xba, 0x06, 0x42, -@@ -404,12 +433,12 @@ static int rg353v2_init_sequence(struct +@@ -405,12 +434,12 @@ static int rg353v2_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -490,7 +493,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver .hdisplay = 640, .hsync_start = 640 + 40, .hsync_end = 640 + 40 + 2, -@@ -424,15 +453,210 @@ static const struct drm_display_mode rg3 +@@ -425,15 +454,210 @@ static const struct drm_display_mode rg353v2_mode = { .height_mm = 57, }; @@ -498,10 +501,11 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver - .mode = &rg353v2_mode, +static const struct st7703_panel_desc rg351v2_desc = { + .mode = &rg351v2_mode, -+ .lanes = 4, -+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | -+ MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, -+ .format = MIPI_DSI_FMT_RGB888, + .lanes = 4, + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | + MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, + .format = MIPI_DSI_FMT_RGB888, +- .init_sequence = rg353v2_init_sequence, + .init_sequence = rg351v2_init_sequence, +}; + @@ -588,18 +592,17 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, + .width_mm = 52, + .height_mm = 70, -+}; -+ + }; + +static const struct st7703_panel_desc xu10_desc = { + .mode = &xu10_mode, - .lanes = 4, - .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | - MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, - .format = MIPI_DSI_FMT_RGB888, -- .init_sequence = rg353v2_init_sequence, ++ .lanes = 4, ++ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | ++ MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, ++ .format = MIPI_DSI_FMT_RGB888, + .init_sequence = xu10_init_sequence, - }; - ++}; ++ +static int r36s_init_sequence(struct st7703 *ctx) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); @@ -704,7 +707,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver static int rgb30panel_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -446,31 +670,31 @@ static int rgb30panel_init_sequence(stru +@@ -447,31 +671,31 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) mipi_dsi_dcs_exit_sleep_mode(dsi); msleep(250); @@ -751,7 +754,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86, 0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, -@@ -479,7 +703,7 @@ static int rgb30panel_init_sequence(stru +@@ -480,7 +704,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -760,7 +763,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88, 0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20, -@@ -488,7 +712,7 @@ static int rgb30panel_init_sequence(stru +@@ -489,7 +713,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00, 0x00); @@ -769,7 +772,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a, 0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, -@@ -667,7 +891,7 @@ static int allpixelson_set(void *data, u +@@ -766,7 +990,7 @@ static int allpixelson_set(void *data, u64 val) struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); dev_dbg(ctx->dev, "Setting all pixels on\n"); @@ -778,7 +781,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver msleep(val * 1000); /* Reset the panel to get video back */ drm_panel_disable(&ctx->panel); -@@ -712,7 +936,7 @@ static int st7703_probe(struct mipi_dsi_ +@@ -811,7 +1035,7 @@ static int st7703_probe(struct mipi_dsi_device *dsi) mipi_dsi_set_drvdata(dsi, ctx); ctx->dev = dev; @@ -787,7 +790,7 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver dsi->mode_flags = ctx->desc->mode_flags; dsi->format = ctx->desc->format; -@@ -783,7 +1007,9 @@ static void st7703_remove(struct mipi_ds +@@ -886,7 +1110,9 @@ static void st7703_remove(struct mipi_dsi_device *dsi) } static const struct of_device_id st7703_of_match[] = { @@ -795,10 +798,10 @@ diff -rupN linux.orig/drivers/gpu/drm/panel/panel-sitronix-st7703.c linux/driver + { .compatible = "gameconsole,r36s-panel", .data = &r36s_desc }, + { .compatible = "magicx,xu10-panel", .data = &xu10_desc }, + { .compatible = "anbernic,rg351v-panel-v2", .data = &rg351v2_desc }, + { .compatible = "powkiddy,rgb10max3-panel", .data = &rgb10max3_panel_desc }, { .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc }, { .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc }, - { .compatible = "xingbangda,xbd599", .data = &xbd599_desc }, -@@ -802,6 +1028,6 @@ static struct mipi_dsi_driver st7703_dri +@@ -906,6 +1132,6 @@ static struct mipi_dsi_driver st7703_driver = { }; module_mipi_dsi_driver(st7703_driver); diff --git a/projects/Rockchip/patches/linux/RK3326/004-input-drivers.patch b/projects/Rockchip/patches/linux/RK3326/004-input-drivers.patch index 8f4ddb8a1..939cf0811 100644 --- a/projects/Rockchip/patches/linux/RK3326/004-input-drivers.patch +++ b/projects/Rockchip/patches/linux/RK3326/004-input-drivers.patch @@ -1,449 +1,3 @@ -diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c ---- linux.orig/drivers/gpio/gpiolib-of.c 2024-02-15 14:44:50.566334442 +0000 -+++ linux/drivers/gpio/gpiolib-of.c 2024-02-15 15:26:39.682128004 +0000 -@@ -25,21 +25,6 @@ - #include "gpiolib.h" - #include "gpiolib-of.h" - --/* -- * This is Linux-specific flags. By default controllers' and Linux' mapping -- * match, but GPIO controllers are free to translate their own flags to -- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -- */ --enum of_gpio_flags { -- OF_GPIO_ACTIVE_LOW = 0x1, -- OF_GPIO_SINGLE_ENDED = 0x2, -- OF_GPIO_OPEN_DRAIN = 0x4, -- OF_GPIO_TRANSITORY = 0x8, -- OF_GPIO_PULL_UP = 0x10, -- OF_GPIO_PULL_DOWN = 0x20, -- OF_GPIO_PULL_DISABLE = 0x40, --}; -- - /** - * of_gpio_named_count() - Count GPIOs for a device - * @np: device node to count GPIOs for -@@ -408,6 +393,20 @@ out: - return desc; - } - -+int of_get_named_gpio_flags(const struct device_node *np, const char *list_name, -+ int index, enum of_gpio_flags *flags) -+{ -+ struct gpio_desc *desc; -+ -+ desc = of_get_named_gpiod_flags(np, list_name, index, flags); -+ -+ if (IS_ERR(desc)) -+ return PTR_ERR(desc); -+ else -+ return desc_to_gpio(desc); -+} -+EXPORT_SYMBOL_GPL(of_get_named_gpio_flags); -+ - /** - * of_get_named_gpio() - Get a GPIO number to use with GPIO API - * @np: device node to get GPIO from -diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig ---- linux.orig/drivers/input/Kconfig 2024-02-15 14:44:51.830362270 +0000 -+++ linux/drivers/input/Kconfig 2024-02-15 15:26:39.682128004 +0000 -@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS - To compile this driver as a module, choose M here: the - module will be called ff-memless. - -+config INPUT_POLLDEV -+ tristate "Polled input device skeleton" -+ help -+ Say Y here if you are using a driver for an input -+ device that periodically polls hardware state. This -+ option is only useful for out-of-tree drivers since -+ in-tree drivers select it automatically. -+ -+ If unsure, say N. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called input-polldev. -+ - config INPUT_SPARSEKMAP - tristate "Sparse keymap support library" - help -diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile ---- linux.orig/drivers/input/Makefile 2024-02-15 14:44:51.830362270 +0000 -+++ linux/drivers/input/Makefile 2024-02-15 15:26:39.682128004 +0000 -@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i - input-core-y += touchscreen.o - - obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o -+obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o - obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o - obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o - obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o -diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-polldev.c ---- linux.orig/drivers/input/input-polldev.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/input-polldev.c 2024-02-15 15:26:39.682128004 +0000 -@@ -0,0 +1,362 @@ -+// SPDX-License-Identifier: GPL-2.0-only -+/* -+ * Generic implementation of a polled input device -+ -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+MODULE_AUTHOR("Dmitry Torokhov "); -+MODULE_DESCRIPTION("Generic implementation of a polled input device"); -+MODULE_LICENSE("GPL v2"); -+ -+static void input_polldev_queue_work(struct input_polled_dev *dev) -+{ -+ unsigned long delay; -+ -+ delay = msecs_to_jiffies(dev->poll_interval); -+ if (delay >= HZ) -+ delay = round_jiffies_relative(delay); -+ -+ queue_delayed_work(system_freezable_wq, &dev->work, delay); -+} -+ -+static void input_polled_device_work(struct work_struct *work) -+{ -+ struct input_polled_dev *dev = -+ container_of(work, struct input_polled_dev, work.work); -+ -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+} -+ -+static int input_open_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ if (dev->open) -+ dev->open(dev); -+ -+ /* Only start polling if polling is enabled */ -+ if (dev->poll_interval > 0) { -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+ } -+ -+ return 0; -+} -+ -+static void input_close_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ cancel_delayed_work_sync(&dev->work); -+ -+ if (dev->close) -+ dev->close(dev); -+} -+ -+/* SYSFS interface */ -+ -+static ssize_t input_polldev_get_poll(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval); -+} -+ -+static ssize_t input_polldev_set_poll(struct device *dev, -+ struct device_attribute *attr, const char *buf, -+ size_t count) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ struct input_dev *input = polldev->input; -+ unsigned int interval; -+ int err; -+ -+ err = kstrtouint(buf, 0, &interval); -+ if (err) -+ return err; -+ -+ if (interval < polldev->poll_interval_min) -+ return -EINVAL; -+ -+ if (interval > polldev->poll_interval_max) -+ return -EINVAL; -+ -+ mutex_lock(&input->mutex); -+ -+ polldev->poll_interval = interval; -+ -+ if (input->users) { -+ cancel_delayed_work_sync(&polldev->work); -+ if (polldev->poll_interval > 0) -+ input_polldev_queue_work(polldev); -+ } -+ -+ mutex_unlock(&input->mutex); -+ -+ return count; -+} -+ -+static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll, -+ input_polldev_set_poll); -+ -+ -+static ssize_t input_polldev_get_max(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_max); -+} -+ -+static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL); -+ -+static ssize_t input_polldev_get_min(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_min); -+} -+ -+static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL); -+ -+static struct attribute *sysfs_attrs[] = { -+ &dev_attr_poll.attr, -+ &dev_attr_max.attr, -+ &dev_attr_min.attr, -+ NULL -+}; -+ -+static struct attribute_group input_polldev_attribute_group = { -+ .attrs = sysfs_attrs -+}; -+ -+static const struct attribute_group *input_polldev_attribute_groups[] = { -+ &input_polldev_attribute_group, -+ NULL -+}; -+ -+/** -+ * input_allocate_polled_device - allocate memory for polled device -+ * -+ * The function allocates memory for a polled device and also -+ * for an input device associated with this polled device. -+ */ -+struct input_polled_dev *input_allocate_polled_device(void) -+{ -+ struct input_polled_dev *dev; -+ -+ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); -+ if (!dev) -+ return NULL; -+ -+ dev->input = input_allocate_device(); -+ if (!dev->input) { -+ kfree(dev); -+ return NULL; -+ } -+ -+ return dev; -+} -+EXPORT_SYMBOL(input_allocate_polled_device); -+ -+struct input_polled_devres { -+ struct input_polled_dev *polldev; -+}; -+ -+static int devm_input_polldev_match(struct device *dev, void *res, void *data) -+{ -+ struct input_polled_devres *devres = res; -+ -+ return devres->polldev == data; -+} -+ -+static void devm_input_polldev_release(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: dropping reference/freeing %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ -+ input_put_device(polldev->input); -+ kfree(polldev); -+} -+ -+static void devm_input_polldev_unregister(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: unregistering device %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ input_unregister_device(polldev->input); -+ -+ /* -+ * Note that we are still holding extra reference to the input -+ * device so it will stick around until devm_input_polldev_release() -+ * is called. -+ */ -+} -+ -+/** -+ * devm_input_allocate_polled_device - allocate managed polled device -+ * @dev: device owning the polled device being created -+ * -+ * Returns prepared &struct input_polled_dev or %NULL. -+ * -+ * Managed polled input devices do not need to be explicitly unregistered -+ * or freed as it will be done automatically when owner device unbinds -+ * from * its driver (or binding fails). Once such managed polled device -+ * is allocated, it is ready to be set up and registered in the same -+ * fashion as regular polled input devices (using -+ * input_register_polled_device() function). -+ * -+ * If you want to manually unregister and free such managed polled devices, -+ * it can be still done by calling input_unregister_polled_device() and -+ * input_free_polled_device(), although it is rarely needed. -+ * -+ * NOTE: the owner device is set up as parent of input device and users -+ * should not override it. -+ */ -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) -+{ -+ struct input_polled_dev *polldev; -+ struct input_polled_devres *devres; -+ -+ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres), -+ GFP_KERNEL); -+ if (!devres) -+ return NULL; -+ -+ polldev = input_allocate_polled_device(); -+ if (!polldev) { -+ devres_free(devres); -+ return NULL; -+ } -+ -+ polldev->input->dev.parent = dev; -+ polldev->devres_managed = true; -+ -+ devres->polldev = polldev; -+ devres_add(dev, devres); -+ -+ return polldev; -+} -+EXPORT_SYMBOL(devm_input_allocate_polled_device); -+ -+/** -+ * input_free_polled_device - free memory allocated for polled device -+ * @dev: device to free -+ * -+ * The function frees memory allocated for polling device and drops -+ * reference to the associated input device. -+ */ -+void input_free_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev) { -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_release, -+ devm_input_polldev_match, -+ dev)); -+ input_put_device(dev->input); -+ kfree(dev); -+ } -+} -+EXPORT_SYMBOL(input_free_polled_device); -+ -+/** -+ * input_register_polled_device - register polled device -+ * @dev: device to register -+ * -+ * The function registers previously initialized polled input device -+ * with input layer. The device should be allocated with call to -+ * input_allocate_polled_device(). Callers should also set up poll() -+ * method and set up capabilities (id, name, phys, bits) of the -+ * corresponding input_dev structure. -+ */ -+int input_register_polled_device(struct input_polled_dev *dev) -+{ -+ struct input_polled_devres *devres = NULL; -+ struct input_dev *input = dev->input; -+ int error; -+ -+ if (dev->devres_managed) { -+ devres = devres_alloc(devm_input_polldev_unregister, -+ sizeof(*devres), GFP_KERNEL); -+ if (!devres) -+ return -ENOMEM; -+ -+ devres->polldev = dev; -+ } -+ -+ input_set_drvdata(input, dev); -+ INIT_DELAYED_WORK(&dev->work, input_polled_device_work); -+ -+ if (!dev->poll_interval) -+ dev->poll_interval = 500; -+ if (!dev->poll_interval_max) -+ dev->poll_interval_max = dev->poll_interval; -+ -+ input->open = input_open_polled_device; -+ input->close = input_close_polled_device; -+ -+ input->dev.groups = input_polldev_attribute_groups; -+ -+ error = input_register_device(input); -+ if (error) { -+ devres_free(devres); -+ return error; -+ } -+ -+ /* -+ * Take extra reference to the underlying input device so -+ * that it survives call to input_unregister_polled_device() -+ * and is deleted only after input_free_polled_device() -+ * has been invoked. This is needed to ease task of freeing -+ * sparse keymaps. -+ */ -+ input_get_device(input); -+ -+ if (dev->devres_managed) { -+ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", -+ __func__, dev_name(&input->dev)); -+ devres_add(input->dev.parent, devres); -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(input_register_polled_device); -+ -+/** -+ * input_unregister_polled_device - unregister polled device -+ * @dev: device to unregister -+ * -+ * The function unregisters previously registered polled input -+ * device from input layer. Polling is stopped and device is -+ * ready to be freed with call to input_free_polled_device(). -+ */ -+void input_unregister_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_unregister, -+ devm_input_polldev_match, -+ dev)); -+ -+ input_unregister_device(dev->input); -+} -+EXPORT_SYMBOL(input_unregister_polled_device); diff -rupN linux.orig/drivers/input/joystick/Kconfig linux/drivers/input/joystick/Kconfig --- linux.orig/drivers/input/joystick/Kconfig 2024-02-15 14:44:51.834362359 +0000 +++ linux/drivers/input/joystick/Kconfig 2024-02-16 13:56:59.646751062 +0000 @@ -553,7 +107,7 @@ diff -rupN linux.orig/drivers/input/joystick/gameforce-joypad.c linux/drivers/in +#include +#include +#include -+#include ++#include + +#define RIGHT_ADC_JOYSTICK +#define VOLUME_ADC_KEYS @@ -1887,7 +1441,7 @@ diff -rupN linux.orig/drivers/input/joystick/odroidgo2-joypad.c linux/drivers/in +#include +#include +#include -+#include ++#include + +/*----------------------------------------------------------------------------*/ +#define DRV_NAME "odroidgo2_joypad" @@ -2769,7 +2323,7 @@ diff -rupN linux.orig/drivers/input/joystick/odroidgo2-v11-joypad.c linux/driver +#include +#include +#include -+#include ++#include + +/*----------------------------------------------------------------------------*/ +#define DRV_NAME "odroidgo2_v11_joypad" @@ -3651,7 +3205,7 @@ diff -rupN linux.orig/drivers/input/joystick/odroidgo3-joypad.c linux/drivers/in +#include +#include +#include -+#include ++#include +#include + +/*----------------------------------------------------------------------------*/ @@ -4763,7 +4317,7 @@ diff -rupN linux.orig/drivers/input/joystick/rgb20s-joypad.c linux/drivers/input +#include +#include +#include -+#include ++#include +#include +#include + @@ -6140,7 +5694,7 @@ diff -rupN linux.orig/drivers/input/joystick/xu10-joypad.c linux/drivers/input/j +#include +#include +#include -+#include ++#include +#include + +/*----------------------------------------------------------------------------*/ @@ -7234,143 +6788,3 @@ diff -rupN linux.orig/drivers/power/supply/rk817_charger.c linux/drivers/power/s .type = POWER_SUPPLY_TYPE_BATTERY, .properties = rk817_bat_props, .num_properties = ARRAY_SIZE(rk817_bat_props), -diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-polldev.h ---- linux.orig/include/linux/input-polldev.h 1970-01-01 00:00:00.000000000 +0000 -+++ linux/include/linux/input-polldev.h 2024-02-15 15:26:39.682128004 +0000 -@@ -0,0 +1,58 @@ -+/* SPDX-License-Identifier: GPL-2.0-only */ -+#ifndef _INPUT_POLLDEV_H -+#define _INPUT_POLLDEV_H -+ -+/* -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#include -+#include -+ -+/** -+ * struct input_polled_dev - simple polled input device -+ * @private: private driver data. -+ * @open: driver-supplied method that prepares device for polling -+ * (enabled the device and maybe flushes device state). -+ * @close: driver-supplied method that is called when device is no -+ * longer being polled. Used to put device into low power mode. -+ * @poll: driver-supplied method that polls the device and posts -+ * input events (mandatory). -+ * @poll_interval: specifies how often the poll() method should be called. -+ * Defaults to 500 msec unless overridden when registering the device. -+ * @poll_interval_max: specifies upper bound for the poll interval. -+ * Defaults to the initial value of @poll_interval. -+ * @poll_interval_min: specifies lower bound for the poll interval. -+ * Defaults to 0. -+ * @input: input device structure associated with the polled device. -+ * Must be properly initialized by the driver (id, name, phys, bits). -+ * -+ * Polled input device provides a skeleton for supporting simple input -+ * devices that do not raise interrupts but have to be periodically -+ * scanned or polled to detect changes in their state. -+ */ -+struct input_polled_dev { -+ void *private; -+ -+ void (*open)(struct input_polled_dev *dev); -+ void (*close)(struct input_polled_dev *dev); -+ void (*poll)(struct input_polled_dev *dev); -+ unsigned int poll_interval; /* msec */ -+ unsigned int poll_interval_max; /* msec */ -+ unsigned int poll_interval_min; /* msec */ -+ -+ struct input_dev *input; -+ -+/* private: */ -+ struct delayed_work work; -+ -+ bool devres_managed; -+}; -+ -+struct input_polled_dev *input_allocate_polled_device(void); -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); -+void input_free_polled_device(struct input_polled_dev *dev); -+int input_register_polled_device(struct input_polled_dev *dev); -+void input_unregister_polled_device(struct input_polled_dev *dev); -+ -+#endif -diff -rupN linux.orig/include/linux/of_gpio.h linux/include/linux/of_gpio.h ---- linux.orig/include/linux/of_gpio.h 2024-02-15 14:44:54.398418804 +0000 -+++ linux/include/linux/of_gpio.h 2024-02-15 15:26:39.682128004 +0000 -@@ -17,8 +17,26 @@ - - struct device_node; - -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+ OF_GPIO_PULL_DISABLE = 0x40, -+}; -+ - #ifdef CONFIG_OF_GPIO - -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ - extern int of_get_named_gpio(const struct device_node *np, - const char *list_name, int index); - -@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struc - - #include - --/* Drivers may not strictly depend on the GPIO support, so let them link. */ - static inline int of_get_named_gpio(const struct device_node *np, - const char *propname, int index) - { -+ return -ENOSYS; -+} -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ - return -ENOSYS; - } - - #endif /* CONFIG_OF_GPIO */ - -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+//#endif /* CONFIG_OF_GPIO */ -+ - #endif /* __LINUX_OF_GPIO_H */ -diff -rupN linux.orig/include/linux/pwm.h linux/include/linux/pwm.h ---- linux.orig/include/linux/pwm.h 2024-01-22 21:57:30.564587413 +0000 -+++ linux/include/linux/pwm.h 2024-01-22 22:17:09.475459054 +0000 -@@ -110,6 +110,12 @@ static inline bool pwm_is_enabled(const - return state.enabled; - } - -+static inline void pwm_set_period(struct pwm_device *pwm, u64 period) -+{ -+ if (pwm) -+ pwm->state.period = period; -+} -+ - static inline u64 pwm_get_period(const struct pwm_device *pwm) - { - struct pwm_state state; diff --git a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch index 054279d9a..75ad223a4 100644 --- a/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch +++ b/projects/Rockchip/patches/linux/RK3399/000-rk3399-dts.patch @@ -106,8 +106,8 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin + }; + }; + -+ joypad: rg552_joypad { -+ compatible = "rg552_joypad"; ++ joypad: rocknix-singleadc-joypad { ++ compatible = "rocknix-singleadc-joypad"; + + pwms = <&pwm3 0 200000000 0>; + pwm-names = "enable"; diff --git a/projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch b/projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch deleted file mode 100644 index 019043d31..000000000 --- a/projects/Rockchip/patches/linux/RK3399/003-rg552-joypad.patch +++ /dev/null @@ -1,2025 +0,0 @@ -diff -rupN linux.orig/drivers/gpio/gpiolib-of.c linux/drivers/gpio/gpiolib-of.c ---- linux.orig/drivers/gpio/gpiolib-of.c 2024-04-12 20:11:09.129330342 +0000 -+++ linux/drivers/gpio/gpiolib-of.c 2024-05-02 00:52:08.985482784 +0000 -@@ -25,21 +25,6 @@ - #include "gpiolib.h" - #include "gpiolib-of.h" - --/* -- * This is Linux-specific flags. By default controllers' and Linux' mapping -- * match, but GPIO controllers are free to translate their own flags to -- * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -- */ --enum of_gpio_flags { -- OF_GPIO_ACTIVE_LOW = 0x1, -- OF_GPIO_SINGLE_ENDED = 0x2, -- OF_GPIO_OPEN_DRAIN = 0x4, -- OF_GPIO_TRANSITORY = 0x8, -- OF_GPIO_PULL_UP = 0x10, -- OF_GPIO_PULL_DOWN = 0x20, -- OF_GPIO_PULL_DISABLE = 0x40, --}; -- - /** - * of_gpio_named_count() - Count GPIOs for a device - * @np: device node to count GPIOs for -@@ -408,6 +393,20 @@ out: - return desc; - } - -+int of_get_named_gpio_flags(const struct device_node *np, const char *list_name, -+ int index, enum of_gpio_flags *flags) -+{ -+ struct gpio_desc *desc; -+ -+ desc = of_get_named_gpiod_flags(np, list_name, index, flags); -+ -+ if (IS_ERR(desc)) -+ return PTR_ERR(desc); -+ else -+ return desc_to_gpio(desc); -+} -+EXPORT_SYMBOL_GPL(of_get_named_gpio_flags); -+ - /** - * of_get_named_gpio() - Get a GPIO number to use with GPIO API - * @np: device node to get GPIO from -diff -rupN linux.orig/drivers/input/Kconfig linux/drivers/input/Kconfig ---- linux.orig/drivers/input/Kconfig 2024-04-12 20:11:09.469341185 +0000 -+++ linux/drivers/input/Kconfig 2024-05-02 00:52:08.985482784 +0000 -@@ -51,6 +51,19 @@ config INPUT_FF_MEMLESS - To compile this driver as a module, choose M here: the - module will be called ff-memless. - -+config INPUT_POLLDEV -+ tristate "Polled input device skeleton" -+ help -+ Say Y here if you are using a driver for an input -+ device that periodically polls hardware state. This -+ option is only useful for out-of-tree drivers since -+ in-tree drivers select it automatically. -+ -+ If unsure, say N. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called input-polldev. -+ - config INPUT_SPARSEKMAP - tristate "Sparse keymap support library" - help -diff -rupN linux.orig/drivers/input/Makefile linux/drivers/input/Makefile ---- linux.orig/drivers/input/Makefile 2024-04-12 20:11:09.469341185 +0000 -+++ linux/drivers/input/Makefile 2024-05-02 00:52:08.985482784 +0000 -@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i - input-core-y += touchscreen.o - - obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o -+obj-$(CONFIG_INPUT_POLLDEV) += input-polldev.o - obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o - obj-$(CONFIG_INPUT_MATRIXKMAP) += matrix-keymap.o - obj-$(CONFIG_INPUT_VIVALDIFMAP) += vivaldi-fmap.o -diff -rupN linux.orig/drivers/input/input-polldev.c linux/drivers/input/input-polldev.c ---- linux.orig/drivers/input/input-polldev.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/input-polldev.c 2024-05-02 00:52:08.985482784 +0000 -@@ -0,0 +1,362 @@ -+// SPDX-License-Identifier: GPL-2.0-only -+/* -+ * Generic implementation of a polled input device -+ -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+MODULE_AUTHOR("Dmitry Torokhov "); -+MODULE_DESCRIPTION("Generic implementation of a polled input device"); -+MODULE_LICENSE("GPL v2"); -+ -+static void input_polldev_queue_work(struct input_polled_dev *dev) -+{ -+ unsigned long delay; -+ -+ delay = msecs_to_jiffies(dev->poll_interval); -+ if (delay >= HZ) -+ delay = round_jiffies_relative(delay); -+ -+ queue_delayed_work(system_freezable_wq, &dev->work, delay); -+} -+ -+static void input_polled_device_work(struct work_struct *work) -+{ -+ struct input_polled_dev *dev = -+ container_of(work, struct input_polled_dev, work.work); -+ -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+} -+ -+static int input_open_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ if (dev->open) -+ dev->open(dev); -+ -+ /* Only start polling if polling is enabled */ -+ if (dev->poll_interval > 0) { -+ dev->poll(dev); -+ input_polldev_queue_work(dev); -+ } -+ -+ return 0; -+} -+ -+static void input_close_polled_device(struct input_dev *input) -+{ -+ struct input_polled_dev *dev = input_get_drvdata(input); -+ -+ cancel_delayed_work_sync(&dev->work); -+ -+ if (dev->close) -+ dev->close(dev); -+} -+ -+/* SYSFS interface */ -+ -+static ssize_t input_polldev_get_poll(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval); -+} -+ -+static ssize_t input_polldev_set_poll(struct device *dev, -+ struct device_attribute *attr, const char *buf, -+ size_t count) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ struct input_dev *input = polldev->input; -+ unsigned int interval; -+ int err; -+ -+ err = kstrtouint(buf, 0, &interval); -+ if (err) -+ return err; -+ -+ if (interval < polldev->poll_interval_min) -+ return -EINVAL; -+ -+ if (interval > polldev->poll_interval_max) -+ return -EINVAL; -+ -+ mutex_lock(&input->mutex); -+ -+ polldev->poll_interval = interval; -+ -+ if (input->users) { -+ cancel_delayed_work_sync(&polldev->work); -+ if (polldev->poll_interval > 0) -+ input_polldev_queue_work(polldev); -+ } -+ -+ mutex_unlock(&input->mutex); -+ -+ return count; -+} -+ -+static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_poll, -+ input_polldev_set_poll); -+ -+ -+static ssize_t input_polldev_get_max(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_max); -+} -+ -+static DEVICE_ATTR(max, S_IRUGO, input_polldev_get_max, NULL); -+ -+static ssize_t input_polldev_get_min(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct input_polled_dev *polldev = dev_get_drvdata(dev); -+ -+ return sprintf(buf, "%d\n", polldev->poll_interval_min); -+} -+ -+static DEVICE_ATTR(min, S_IRUGO, input_polldev_get_min, NULL); -+ -+static struct attribute *sysfs_attrs[] = { -+ &dev_attr_poll.attr, -+ &dev_attr_max.attr, -+ &dev_attr_min.attr, -+ NULL -+}; -+ -+static struct attribute_group input_polldev_attribute_group = { -+ .attrs = sysfs_attrs -+}; -+ -+static const struct attribute_group *input_polldev_attribute_groups[] = { -+ &input_polldev_attribute_group, -+ NULL -+}; -+ -+/** -+ * input_allocate_polled_device - allocate memory for polled device -+ * -+ * The function allocates memory for a polled device and also -+ * for an input device associated with this polled device. -+ */ -+struct input_polled_dev *input_allocate_polled_device(void) -+{ -+ struct input_polled_dev *dev; -+ -+ dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); -+ if (!dev) -+ return NULL; -+ -+ dev->input = input_allocate_device(); -+ if (!dev->input) { -+ kfree(dev); -+ return NULL; -+ } -+ -+ return dev; -+} -+EXPORT_SYMBOL(input_allocate_polled_device); -+ -+struct input_polled_devres { -+ struct input_polled_dev *polldev; -+}; -+ -+static int devm_input_polldev_match(struct device *dev, void *res, void *data) -+{ -+ struct input_polled_devres *devres = res; -+ -+ return devres->polldev == data; -+} -+ -+static void devm_input_polldev_release(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: dropping reference/freeing %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ -+ input_put_device(polldev->input); -+ kfree(polldev); -+} -+ -+static void devm_input_polldev_unregister(struct device *dev, void *res) -+{ -+ struct input_polled_devres *devres = res; -+ struct input_polled_dev *polldev = devres->polldev; -+ -+ dev_dbg(dev, "%s: unregistering device %s\n", -+ __func__, dev_name(&polldev->input->dev)); -+ input_unregister_device(polldev->input); -+ -+ /* -+ * Note that we are still holding extra reference to the input -+ * device so it will stick around until devm_input_polldev_release() -+ * is called. -+ */ -+} -+ -+/** -+ * devm_input_allocate_polled_device - allocate managed polled device -+ * @dev: device owning the polled device being created -+ * -+ * Returns prepared &struct input_polled_dev or %NULL. -+ * -+ * Managed polled input devices do not need to be explicitly unregistered -+ * or freed as it will be done automatically when owner device unbinds -+ * from * its driver (or binding fails). Once such managed polled device -+ * is allocated, it is ready to be set up and registered in the same -+ * fashion as regular polled input devices (using -+ * input_register_polled_device() function). -+ * -+ * If you want to manually unregister and free such managed polled devices, -+ * it can be still done by calling input_unregister_polled_device() and -+ * input_free_polled_device(), although it is rarely needed. -+ * -+ * NOTE: the owner device is set up as parent of input device and users -+ * should not override it. -+ */ -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) -+{ -+ struct input_polled_dev *polldev; -+ struct input_polled_devres *devres; -+ -+ devres = devres_alloc(devm_input_polldev_release, sizeof(*devres), -+ GFP_KERNEL); -+ if (!devres) -+ return NULL; -+ -+ polldev = input_allocate_polled_device(); -+ if (!polldev) { -+ devres_free(devres); -+ return NULL; -+ } -+ -+ polldev->input->dev.parent = dev; -+ polldev->devres_managed = true; -+ -+ devres->polldev = polldev; -+ devres_add(dev, devres); -+ -+ return polldev; -+} -+EXPORT_SYMBOL(devm_input_allocate_polled_device); -+ -+/** -+ * input_free_polled_device - free memory allocated for polled device -+ * @dev: device to free -+ * -+ * The function frees memory allocated for polling device and drops -+ * reference to the associated input device. -+ */ -+void input_free_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev) { -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_release, -+ devm_input_polldev_match, -+ dev)); -+ input_put_device(dev->input); -+ kfree(dev); -+ } -+} -+EXPORT_SYMBOL(input_free_polled_device); -+ -+/** -+ * input_register_polled_device - register polled device -+ * @dev: device to register -+ * -+ * The function registers previously initialized polled input device -+ * with input layer. The device should be allocated with call to -+ * input_allocate_polled_device(). Callers should also set up poll() -+ * method and set up capabilities (id, name, phys, bits) of the -+ * corresponding input_dev structure. -+ */ -+int input_register_polled_device(struct input_polled_dev *dev) -+{ -+ struct input_polled_devres *devres = NULL; -+ struct input_dev *input = dev->input; -+ int error; -+ -+ if (dev->devres_managed) { -+ devres = devres_alloc(devm_input_polldev_unregister, -+ sizeof(*devres), GFP_KERNEL); -+ if (!devres) -+ return -ENOMEM; -+ -+ devres->polldev = dev; -+ } -+ -+ input_set_drvdata(input, dev); -+ INIT_DELAYED_WORK(&dev->work, input_polled_device_work); -+ -+ if (!dev->poll_interval) -+ dev->poll_interval = 500; -+ if (!dev->poll_interval_max) -+ dev->poll_interval_max = dev->poll_interval; -+ -+ input->open = input_open_polled_device; -+ input->close = input_close_polled_device; -+ -+ input->dev.groups = input_polldev_attribute_groups; -+ -+ error = input_register_device(input); -+ if (error) { -+ devres_free(devres); -+ return error; -+ } -+ -+ /* -+ * Take extra reference to the underlying input device so -+ * that it survives call to input_unregister_polled_device() -+ * and is deleted only after input_free_polled_device() -+ * has been invoked. This is needed to ease task of freeing -+ * sparse keymaps. -+ */ -+ input_get_device(input); -+ -+ if (dev->devres_managed) { -+ dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", -+ __func__, dev_name(&input->dev)); -+ devres_add(input->dev.parent, devres); -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(input_register_polled_device); -+ -+/** -+ * input_unregister_polled_device - unregister polled device -+ * @dev: device to unregister -+ * -+ * The function unregisters previously registered polled input -+ * device from input layer. Polling is stopped and device is -+ * ready to be freed with call to input_free_polled_device(). -+ */ -+void input_unregister_polled_device(struct input_polled_dev *dev) -+{ -+ if (dev->devres_managed) -+ WARN_ON(devres_destroy(dev->input->dev.parent, -+ devm_input_polldev_unregister, -+ devm_input_polldev_match, -+ dev)); -+ -+ input_unregister_device(dev->input); -+} -+EXPORT_SYMBOL(input_unregister_polled_device); -diff -rupN linux.orig/drivers/input/joystick/Kconfig linux/drivers/input/joystick/Kconfig ---- linux.orig/drivers/input/joystick/Kconfig 2024-04-12 20:11:09.469341185 +0000 -+++ linux/drivers/input/joystick/Kconfig 2024-05-02 00:52:08.985482784 +0000 -@@ -393,6 +393,12 @@ config JOYSTICK_FSIA6B - To compile this driver as a module, choose M here: the - module will be called fsia6b. - -+config JOYSTICK_RG552 -+ tristate "Anbernic RG552 gamepad driver" -+ select INPUT_POLLDEV -+ help -+ The 1-in 4-out SARADC joypad driver. -+ - config JOYSTICK_N64 - bool "N64 controller" - depends on MACH_NINTENDO64 -diff -rupN linux.orig/drivers/input/joystick/Makefile linux/drivers/input/joystick/Makefile ---- linux.orig/drivers/input/joystick/Makefile 2024-04-12 20:11:09.469341185 +0000 -+++ linux/drivers/input/joystick/Makefile 2024-05-02 00:59:41.167445165 +0000 -@@ -28,6 +28,7 @@ obj-$(CONFIG_JOYSTICK_N64) += n64joy.o - obj-$(CONFIG_JOYSTICK_PSXPAD_SPI) += psxpad-spi.o - obj-$(CONFIG_JOYSTICK_PXRC) += pxrc.o - obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-joystick.o -+obj-$(CONFIG_JOYSTICK_RG552) += rg552_joypad.o - obj-$(CONFIG_JOYSTICK_SEESAW) += adafruit-seesaw.o - obj-$(CONFIG_JOYSTICK_SENSEHAT) += sensehat-joystick.o - obj-$(CONFIG_JOYSTICK_SIDEWINDER) += sidewinder.o -diff -rupN linux.orig/drivers/input/joystick/rg552_joypad.c linux/drivers/input/joystick/rg552_joypad.c ---- linux.orig/drivers/input/joystick/rg552_joypad.c 1970-01-01 00:00:00.000000000 +0000 -+++ linux/drivers/input/joystick/rg552_joypad.c 2024-05-02 04:17:12.276052203 +0000 -@@ -0,0 +1,1408 @@ -+/*----------------------------------------------------------------------------*/ -+ -+/* -+ * Copyright (c) 2008-2021 Anbernic -+ */ -+ -+/* -+ * Anbernic RG552 gamepad driver -+ */ -+ -+/*----------------------------------------------------------------------------*/ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/*----------------------------------------------------------------------------*/ -+#define DRV_NAME "rg552_joypad" -+ -+/*----------------------------------------------------------------------------*/ -+#define ADC_MAX_VOLTAGE 1800 -+#define ADC_DATA_TUNING(x, p) ((x * p) / 100) -+#define ADC_TUNING_DEFAULT 180 -+#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) -+ -+struct bt_adc { -+ /* report value (mV) */ -+ int value; -+ /* report type */ -+ int report_type; -+ /* input device init value (mV) */ -+ int max, min; -+ /* calibrated adc value */ -+ int cal; -+ /* adc scale value */ -+ int scale; -+ /* invert report */ -+ bool invert; -+ /* amux channel */ -+ int amux_ch; -+ /* adc data tuning value([percent), p = positive, n = negative */ -+ int tuning_p, tuning_n; -+}; -+ -+struct analog_mux { -+ /* IIO ADC Channel : amux connect channel */ -+ struct iio_channel *iio_ch; -+ /* analog mux select(a,b) gpio */ -+ int sel_a_gpio, sel_b_gpio; -+ /* analog mux enable gpio */ -+ int en_gpio; -+}; -+ -+struct bt_gpio { -+ /* GPIO Request label */ -+ const char *label; -+ /* GPIO Number */ -+ int num; -+ /* report type */ -+ int report_type; -+ /* report linux code */ -+ int linux_code; -+ /* prev button value */ -+ bool old_value; -+ /* button press level */ -+ bool active_level; -+}; -+ -+struct joypad { -+ struct device *dev; -+ int poll_interval; -+ -+ /* report enable/disable */ -+ bool enable; -+ -+ /* analog mux & joystick control */ -+ struct analog_mux *amux; -+ /* analog mux max count */ -+ int amux_count; -+ /* analog button */ -+ struct bt_adc *adcs; -+ -+ /* report reference point */ -+ bool invert_absx; -+ bool invert_absy; -+ bool invert_absrx; -+ bool invert_absry; -+ -+ /* report interval (ms) */ -+ int bt_gpio_count; -+ struct bt_gpio *gpios; -+ -+ /* button auto repeat */ -+ int auto_repeat; -+ -+ /* report threshold (mV) */ -+ int bt_adc_fuzz, bt_adc_flat; -+ /* adc read value scale */ -+ int bt_adc_scale; -+ /* joystick deadzone control */ -+ int bt_adc_deadzone; -+ -+ struct mutex lock; -+ -+ /* amux debug channel */ -+ int debug_ch; -+ -+ /* pwm device for rumble*/ -+ struct input_dev *input; -+ struct pwm_device *pwm; -+ struct work_struct play_work; -+ u16 level; -+ u16 boost_weak; -+ u16 boost_strong; -+}; -+ -+static int pwm_vibrator_start(struct joypad *joypad) -+{ -+ struct device *pdev = joypad->input->dev.parent; -+ struct pwm_state state; -+ int err; -+ -+ pwm_get_state(joypad->pwm, &state); -+ pwm_set_relative_duty_cycle(&state, joypad->level, 0xffff); -+ state.enabled = true; -+ -+ err = pwm_apply_state(joypad->pwm, &state); -+ if (err) { -+ dev_err(pdev, "failed to apply pwm state: %d", err); -+ return err; -+ } -+ -+ return 0; -+} -+ -+static void pwm_vibrator_stop(struct joypad *joypad) -+{ -+ pwm_disable(joypad->pwm); -+} -+ -+static void pwm_vibrator_play_work(struct work_struct *work) -+{ -+ struct joypad *joypad = container_of(work, -+ struct joypad, play_work); -+ -+ if (joypad->level) -+ pwm_vibrator_start(joypad); -+ else -+ pwm_vibrator_stop(joypad); -+} -+ -+static unsigned int g_button_adc_fuzz = 0; -+static unsigned int g_button_adc_flat = 0; -+static unsigned int g_button_adc_scale = 0; -+static unsigned int g_button_adc_deadzone = 0; -+ -+static int button_adc_fuzz(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-fuzz=", button_adc_fuzz); -+ -+static int button_adc_flat(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_flat = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-flat=", button_adc_flat); -+ -+static int button_adc_scale(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_scale = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-scale=", button_adc_scale); -+ -+static int button_adc_deadzone(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); -+ return 0; -+} -+__setup("button-adc-deadzone=", button_adc_deadzone); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_select(struct analog_mux *amux, int channel) -+{ -+ /* select mux channel */ -+ gpio_set_value(amux->en_gpio, 0); -+ -+ switch(channel) { -+ case 0: /* EVENT (ABS_RY) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 1: /* EVENT (ABS_RX) */ -+ gpio_set_value(amux->sel_a_gpio, 0); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ case 2: /* EVENT (ABS_Y) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 0); -+ break; -+ case 3: /* EVENT (ABS_X) */ -+ gpio_set_value(amux->sel_a_gpio, 1); -+ gpio_set_value(amux->sel_b_gpio, 1); -+ break; -+ default: -+ /* amux disanle */ -+ gpio_set_value(amux->en_gpio, 1); -+ return -1; -+ } -+ /* mux swtiching speed : 35ns(on) / 9ns(off) */ -+ usleep_range(10, 20); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_read(struct analog_mux *amux, struct bt_adc *adc) -+{ -+ int value; -+ -+ -+ if (joypad_amux_select(amux, adc->amux_ch)) -+ return 0; -+ -+ iio_read_channel_raw(amux->iio_ch, &value); -+ -+ value *= adc->scale; -+ -+ return value; -+} -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/poll_interval [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->poll_interval = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_poll_interval(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->poll_interval); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, -+ joypad_show_poll_interval, -+ joypad_store_poll_interval); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/adc_fuzz [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_fuzz(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, -+ joypad_show_adc_fuzz, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/adc_flat [r] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_flat(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->bt_adc_flat); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, -+ joypad_show_adc_flat, -+ NULL); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/enable [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_enable(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->enable = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_enable(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->enable); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, -+ joypad_show_enable, -+ joypad_store_enable); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/adc_cal [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ bool calibration; -+ -+ calibration = simple_strtoul(buf, NULL, 10); -+ -+ if (calibration) { -+ int nbtn; -+ -+ mutex_lock(&joypad->lock); -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ mutex_unlock(&joypad->lock); -+ } -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_adc_cal(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ int nbtn; -+ ssize_t pos; -+ -+ for (nbtn = 0, pos = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", -+ nbtn, adc->cal); -+ } -+ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, -+ joypad_show_adc_cal, -+ joypad_store_adc_cal); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/amux_debug [rw] -+ * -+ * echo [debug channel] > amux_debug -+ * cat amux_debug : debug channel mux set & adc read -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ joypad->debug_ch = simple_strtoul(buf, NULL, 10); -+ -+ /* if error than default setting(debug_ch = 0) */ -+ if (joypad->debug_ch > joypad->amux_count) -+ joypad->debug_ch = 0; -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_amux_debug(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ struct analog_mux *amux = joypad->amux; -+ ssize_t pos; -+ int value; -+ -+ mutex_lock(&joypad->lock); -+ -+ /* disable poll driver */ -+ if (joypad->enable) -+ joypad->enable = false; -+ -+ if (joypad_amux_select(amux, joypad->debug_ch)) -+ goto err_out; -+ -+ if (iio_read_channel_processed(amux->iio_ch, &value)) -+ goto err_out; -+ -+ pos = sprintf(buf, "amux ch[%d], adc scale = %d, adc value = %d\n", -+ joypad->debug_ch, joypad->bt_adc_scale, -+ value * joypad->bt_adc_scale); -+ goto out; -+ -+err_out: -+ pos = sprintf(buf, "error : amux setup & adc read!\n"); -+out: -+ mutex_unlock(&joypad->lock); -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(amux_debug, S_IWUSR | S_IRUGO, -+ joypad_show_amux_debug, -+ joypad_store_amux_debug); -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo2_joypad/rumble_period [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_period(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ pwm_set_period(joypad->pwm, simple_strtoul(buf, NULL, 21)); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_period(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%llu\n", pwm_get_period(joypad->pwm)); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(rumble_period, S_IWUSR | S_IRUGO, -+ joypad_show_period, -+ joypad_store_period); -+ -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo2_joypad/rumble_boost_strong [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_boost_strong(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->boost_strong = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_boost_strong(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->boost_strong); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(rumble_boost_strong, S_IWUSR | S_IRUGO, -+ joypad_show_boost_strong, -+ joypad_store_boost_strong); -+ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/odroidgo2_joypad/rumble_boost_weak [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_boost_weak(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ mutex_lock(&joypad->lock); -+ joypad->boost_weak = simple_strtoul(buf, NULL, 10); -+ mutex_unlock(&joypad->lock); -+ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_boost_weak(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ return sprintf(buf, "%d\n", joypad->boost_weak); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(rumble_boost_weak, S_IWUSR | S_IRUGO, -+ joypad_show_boost_weak, -+ joypad_store_boost_weak); -+ -+#define __HDMI__ -+ -+#ifdef __HDMI__ -+/*----------------------------------------------------------------------------*/ -+/* -+ * ATTRIBUTES: -+ * -+ * /sys/devices/platform/rg552_joypad/hdst [rw] -+ */ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_store_hdst(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t count) -+{ -+ return count; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static ssize_t joypad_show_hdst(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ ssize_t pos=0; -+ if(gpio_get_value(54)==1) -+ { -+ pos += sprintf(&buf[pos], "disconnected\n"); -+ }else{ -+ pos += sprintf(&buf[pos], "connected\n"); -+ } -+ return pos; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static DEVICE_ATTR(hdst, S_IWUSR | S_IRUGO, -+ joypad_show_hdst, -+ joypad_store_hdst); -+#endif -+ -+#ifdef __HDMI__ -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ &dev_attr_amux_debug.attr, -+ &dev_attr_hdst.attr, -+ &dev_attr_rumble_period.attr, -+ &dev_attr_rumble_boost_strong.attr, -+ &dev_attr_rumble_boost_weak.attr, -+ NULL, -+}; -+#else -+/*----------------------------------------------------------------------------*/ -+static struct attribute *joypad_attrs[] = { -+ &dev_attr_poll_interval.attr, -+ &dev_attr_adc_fuzz.attr, -+ &dev_attr_adc_flat.attr, -+ &dev_attr_enable.attr, -+ &dev_attr_adc_cal.attr, -+ &dev_attr_amux_debug.attr, -+ &dev_attr_rumble_period.attr, -+ &dev_attr_rumble_boost_strong.attr, -+ &dev_attr_rumble_boost_weak.attr, -+ NULL, -+}; -+#endif -+static struct attribute_group joypad_attr_group = { -+ .attrs = joypad_attrs, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+/*----------------------------------------------------------------------------*/ -+static void joypad_gpio_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn, value; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ -+ if (gpio_get_value_cansleep(gpio->num) < 0) { -+ dev_err(joypad->dev, "failed to get gpio state\n"); -+ continue; -+ } -+ value = gpio_get_value(gpio->num); -+ if (value != gpio->old_value) { -+ input_event(poll_dev->input, -+ gpio->report_type, -+ gpio->linux_code, -+ (value == gpio->active_level) ? 1 : 0); -+ gpio->old_value = value; -+ } -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_adc_check(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ int mag; -+ -+ /* Assumes an even number of axes and that joystick axis pairs are sequential */ -+ /* e.g. left stick Y immediately follows left stick X */ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn+=2) { -+ struct bt_adc *adcx = &joypad->adcs[nbtn]; -+ struct bt_adc *adcy = &joypad->adcs[nbtn + 1]; -+ -+ /* Read first joystick axis */ -+ adcx->value = joypad_adc_read(joypad->amux, adcx); -+ if (!adcx->value) { -+ continue; -+ } -+ adcx->value = adcx->value - adcx->cal; -+ -+ /* Read second joystick axis */ -+ adcy->value = joypad_adc_read(joypad->amux, adcy); -+ if (!adcy->value) { -+ continue; -+ } -+ adcy->value = adcy->value - adcy->cal; -+ -+ /* Joystick Deadzone check */ -+ mag = int_sqrt((adcx->value * adcx->value) + (adcy->value * adcy->value)); -+ if (joypad->bt_adc_deadzone) { -+ if (mag <= joypad->bt_adc_deadzone) { -+ adcx->value = 0; -+ adcy->value = 0; -+ } -+ else { -+ /* Assumes adcx->max == -adcx->min == adcy->max == -adcy->min */ -+ /* Order of operations is critical to avoid integer overflow */ -+ adcx->value = (((adcx->max * adcx->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcx->max - joypad->bt_adc_deadzone); -+ adcy->value = (((adcy->max * adcy->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcy->max - joypad->bt_adc_deadzone); -+ } -+ } -+ -+ /* adc data tuning */ -+ if (adcx->tuning_n && adcx->value < 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_n); -+ if (adcx->tuning_p && adcx->value > 0) -+ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_p); -+ if (adcy->tuning_n && adcy->value < 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_n); -+ if (adcy->tuning_p && adcy->value > 0) -+ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_p); -+ -+ /* Clamp to [min, max] */ -+ adcx->value = adcx->value > adcx->max ? adcx->max : adcx->value; -+ adcx->value = adcx->value < adcx->min ? adcx->min : adcx->value; -+ adcy->value = adcy->value > adcy->max ? adcy->max : adcy->value; -+ adcy->value = adcy->value < adcy->min ? adcy->min : adcy->value; -+ -+ input_report_abs(poll_dev->input, -+ adcx->report_type, -+ adcx->invert ? adcx->value * (-1) : adcx->value); -+ input_report_abs(poll_dev->input, -+ adcy->report_type, -+ adcy->invert ? adcy->value * (-1) : adcy->value); -+ } -+ input_sync(poll_dev->input); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_poll(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ if (joypad->enable) { -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ } -+ if (poll_dev->poll_interval != joypad->poll_interval) { -+ mutex_lock(&joypad->lock); -+ poll_dev->poll_interval = joypad->poll_interval; -+ mutex_unlock(&joypad->lock); -+ } -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_open(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ int nbtn; -+ -+ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ gpio->old_value = gpio->active_level ? 0 : 1; -+ } -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->value = joypad_adc_read(joypad->amux, adc); -+ if (!adc->value) { -+ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", -+ __func__, nbtn); -+ continue; -+ } -+ adc->cal = adc->value; -+ } -+ /* buttons status sync */ -+ joypad_adc_check(poll_dev); -+ joypad_gpio_check(poll_dev); -+ -+ /* button report enable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = true; -+ mutex_unlock(&joypad->lock); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_close(struct input_polled_dev *poll_dev) -+{ -+ struct joypad *joypad = poll_dev->private; -+ -+ /* button report disable */ -+ mutex_lock(&joypad->lock); -+ joypad->enable = false; -+ mutex_unlock(&joypad->lock); -+ -+ cancel_work_sync(&joypad->play_work); -+ pwm_vibrator_stop(joypad); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_amux_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct analog_mux *amux; -+ enum iio_chan_type type; -+ enum of_gpio_flags flags; -+ int ret; -+ -+ /* analog mux control struct init */ -+ joypad->amux = devm_kzalloc(dev, sizeof(struct analog_mux), -+ GFP_KERNEL); -+ if (!joypad->amux) { -+ dev_err(dev, "%s amux devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ amux = joypad->amux; -+ amux->iio_ch = devm_iio_channel_get(dev, "amux_adc"); -+ if (IS_ERR(amux->iio_ch)) { -+ dev_err(dev, "iio channel get error\n"); -+ return -EINVAL; -+ } -+ if (!amux->iio_ch->indio_dev) -+ return -ENXIO; -+ -+ if (iio_get_channel_type(amux->iio_ch, &type)) -+ return -EINVAL; -+ -+ if (type != IIO_VOLTAGE) { -+ dev_err(dev, "Incompatible channel type %d\n", type); -+ return -EINVAL; -+ } -+ -+ amux->sel_a_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-a-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_a_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_a_gpio, "amux-sel-a"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-a %d\n", -+ __func__, amux->sel_a_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_a_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->sel_b_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-b-gpios", 0, &flags); -+ if (gpio_is_valid(amux->sel_b_gpio)) { -+ ret = devm_gpio_request(dev, amux->sel_b_gpio, "amux-sel-b"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-sel-b %d\n", -+ __func__, amux->sel_b_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->sel_b_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ -+ amux->en_gpio = of_get_named_gpio_flags(dev->of_node, -+ "amux-en-gpios", 0, &flags); -+ if (gpio_is_valid(amux->en_gpio)) { -+ ret = devm_gpio_request(dev, amux->en_gpio, "amux-en"); -+ if (ret < 0) { -+ dev_err(dev, "%s : failed to request amux-en %d\n", -+ __func__, amux->en_gpio); -+ goto err_out; -+ } -+ ret = gpio_direction_output(amux->en_gpio, 0); -+ if (ret < 0) -+ goto err_out; -+ } -+ return 0; -+err_out: -+ return ret; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_adc_setup(struct device *dev, struct joypad *joypad) -+{ -+ int nbtn; -+ -+ /* adc button struct init */ -+ joypad->adcs = devm_kzalloc(dev, joypad->amux_count * -+ sizeof(struct bt_adc), GFP_KERNEL); -+ if (!joypad->adcs) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ -+ adc->scale = joypad->bt_adc_scale; -+ -+ adc->max = (ADC_MAX_VOLTAGE / 2); -+ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); -+ if (adc->scale) { -+ adc->max *= adc->scale; -+ adc->min *= adc->scale; -+ } -+ adc->amux_ch = nbtn; -+ adc->invert = false; -+ -+ switch (nbtn) { -+ case 0: -+ if (joypad->invert_absry) -+ adc->invert = true; -+ adc->report_type = ABS_RY; -+ if (device_property_read_u32(dev, -+ "abs_ry-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_ry-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 1: -+ if (joypad->invert_absrx) -+ adc->invert = true; -+ adc->report_type = ABS_RX; -+ if (device_property_read_u32(dev, -+ "abs_rx-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_rx-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 2: -+ if (joypad->invert_absy) -+ adc->invert = true; -+ adc->report_type = ABS_Y; -+ if (device_property_read_u32(dev, -+ "abs_y-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_y-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ case 3: -+ if (joypad->invert_absx) -+ adc->invert = true; -+ adc->report_type = ABS_X; -+ if (device_property_read_u32(dev, -+ "abs_x-p-tuning", -+ &adc->tuning_p)) -+ adc->tuning_p = ADC_TUNING_DEFAULT; -+ if (device_property_read_u32(dev, -+ "abs_x-n-tuning", -+ &adc->tuning_n)) -+ adc->tuning_n = ADC_TUNING_DEFAULT; -+ break; -+ default : -+ dev_err(dev, "%s amux count(%d) error!", -+ __func__, nbtn); -+ return -EINVAL; -+ } -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct device_node *node, *pp; -+ int nbtn; -+ -+ node = dev->of_node; -+ if (!node) -+ return -ENODEV; -+ -+ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * -+ sizeof(struct bt_gpio), GFP_KERNEL); -+ -+ if (!joypad->gpios) { -+ dev_err(dev, "%s devm_kzmalloc error!", __func__); -+ return -ENOMEM; -+ } -+ -+ nbtn = 0; -+ for_each_child_of_node(node, pp) { -+ enum of_gpio_flags flags; -+ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; -+ int error; -+ -+ gpio->num = of_get_gpio_flags(pp, 0, &flags); -+ if (gpio->num < 0) { -+ error = gpio->num; -+ dev_err(dev, "Failed to get gpio flags, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* gpio active level(key press level) */ -+ gpio->active_level = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; -+ -+ gpio->label = of_get_property(pp, "label", NULL); -+ -+ if (gpio_is_valid(gpio->num)) { -+ error = devm_gpio_request_one(dev, gpio->num, -+ GPIOF_IN, gpio->label); -+ if (error < 0) { -+ dev_err(dev, -+ "Failed to request GPIO %d, error %d\n", -+ gpio->num, error); -+ return error; -+ } -+ } -+ if (of_property_read_u32(pp, "linux,code", &gpio->linux_code)) { -+ dev_err(dev, "Button without keycode: 0x%x\n", -+ gpio->num); -+ return -EINVAL; -+ } -+ if (of_property_read_u32(pp, "linux,input-type", -+ &gpio->report_type)) -+ gpio->report_type = EV_KEY; -+ } -+ if (nbtn == 0) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int rumble_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect) -+{ -+ struct joypad *joypad = data; -+ u32 boosted_level; -+ if (effect->type != FF_RUMBLE) -+ return 0; -+ -+ if (effect->u.rumble.strong_magnitude) -+ boosted_level = effect->u.rumble.strong_magnitude + joypad->boost_strong; -+ else -+ boosted_level = effect->u.rumble.weak_magnitude + joypad->boost_weak; -+ -+ joypad->level = (u16)CLAMP(boosted_level, 0, 0xffff); -+ -+ dev_info(joypad->dev,"joypad->level = %d", joypad->level); -+ schedule_work(&joypad->play_work); -+ return 0; -+} -+/*----------------------------------------------------------------------------*/ -+static int joypad_rumble_setup(struct device *dev, struct joypad *joypad) -+{ -+ int err; -+ struct pwm_state state; -+ -+ joypad->pwm = devm_pwm_get(dev, "enable"); -+ if (IS_ERR(joypad->pwm)) -+ { -+ dev_err(dev, "rumble get error\n"); -+ return -EINVAL; -+ } -+ -+ INIT_WORK(&joypad->play_work, pwm_vibrator_play_work); -+ -+ /* Sync up PWM state and ensure it is off. */ -+ pwm_init_state(joypad->pwm, &state); -+ state.enabled = false; -+ err = pwm_apply_state(joypad->pwm, &state); -+ if (err) { -+ dev_err(dev, "failed to apply initial PWM state: %d", -+ err); -+ return err; -+ } -+ dev_info(dev, "rumble setup success!\n"); -+ return 0; -+} -+ -+static int joypad_input_setup(struct device *dev, struct joypad *joypad) -+{ -+ struct input_polled_dev *poll_dev; -+ struct input_dev *input; -+ int nbtn, error; -+ u32 joypad_revision = 0; -+ u32 joypad_product = 0; -+ u32 boost_weak = 0; -+ u32 boost_strong = 0; -+ poll_dev = devm_input_allocate_polled_device(dev); -+ if (!poll_dev) { -+ dev_err(dev, "no memory for polled device\n"); -+ return -ENOMEM; -+ } -+ -+ poll_dev->private = joypad; -+ poll_dev->poll = joypad_poll; -+ poll_dev->poll_interval = joypad->poll_interval; -+ poll_dev->open = joypad_open; -+ poll_dev->close = joypad_close; -+ -+ input = poll_dev->input; -+ joypad->input = poll_dev->input; -+ -+ device_property_read_string(dev, "joypad-name", &input->name); -+ input->phys = DRV_NAME"/input0"; -+ -+ device_property_read_u32(dev, "joypad-revision", &joypad_revision); -+ device_property_read_u32(dev, "joypad-product", &joypad_product); -+ input->id.bustype = BUS_HOST; -+ input->id.vendor = 0x484B; -+ input->id.product = (u16)joypad_product; -+ input->id.version = (u16)joypad_revision; -+ -+ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ -+ __set_bit(EV_ABS, input->evbit); -+ for(nbtn = 0; nbtn < joypad->amux_count; nbtn++) { -+ struct bt_adc *adc = &joypad->adcs[nbtn]; -+ input_set_abs_params(input, adc->report_type, -+ adc->min, adc->max, -+ joypad->bt_adc_fuzz, -+ joypad->bt_adc_flat); -+ dev_info(dev, -+ "%s : SCALE = %d, ABS min = %d, max = %d," -+ " fuzz = %d, flat = %d, deadzone = %d\n", -+ __func__, adc->scale, adc->min, adc->max, -+ joypad->bt_adc_fuzz, joypad->bt_adc_flat, -+ joypad->bt_adc_deadzone); -+ dev_info(dev, -+ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", -+ __func__, adc->tuning_p, adc->tuning_n); -+ } -+ -+ /* Rumble setip*/ -+ device_property_read_u32(dev, "rumble-boost-weak", &boost_weak); -+ device_property_read_u32(dev, "rumble-boost-strong", &boost_strong); -+ joypad->boost_weak = boost_weak; -+ joypad->boost_strong = boost_strong; -+ dev_info(dev, "Boost = %d, %d",boost_weak, boost_strong); -+ input_set_capability(input, EV_FF, FF_RUMBLE); -+ error = input_ff_create_memless(input, joypad, rumble_play_effect); -+ if (error) { -+ dev_err(dev, "unable to register rumble, err=%d\n", -+ error); -+ return error; -+ } -+ -+ -+ /* GPIO key setup */ -+ __set_bit(EV_KEY, input->evbit); -+ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { -+ struct bt_gpio *gpio = &joypad->gpios[nbtn]; -+ input_set_capability(input, gpio->report_type, -+ gpio->linux_code); -+ } -+ -+ if (joypad->auto_repeat) -+ __set_bit(EV_REP, input->evbit); -+ -+ joypad->dev = dev; -+ -+ error = input_register_polled_device(poll_dev); -+ if (error) { -+ dev_err(dev, "unable to register polled device, err=%d\n", -+ error); -+ return error; -+ } -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) -+{ -+ /* -+ fuzz: specifies fuzz value that is used to filter noise from -+ the event stream. -+ */ -+ if (g_button_adc_fuzz) -+ joypad->bt_adc_fuzz = g_button_adc_fuzz; -+ else -+ device_property_read_u32(dev, "button-adc-fuzz", -+ &joypad->bt_adc_fuzz); -+ /* -+ flat: values that are within this value will be discarded by -+ joydev interface and reported as 0 instead. -+ */ -+ if (g_button_adc_flat) -+ joypad->bt_adc_flat = g_button_adc_flat; -+ else -+ device_property_read_u32(dev, "button-adc-flat", -+ &joypad->bt_adc_flat); -+ -+ /* Joystick report value control */ -+ if (g_button_adc_scale) -+ joypad->bt_adc_scale = g_button_adc_scale; -+ else -+ device_property_read_u32(dev, "button-adc-scale", -+ &joypad->bt_adc_scale); -+ -+ /* Joystick deadzone value control */ -+ if (g_button_adc_deadzone) -+ joypad->bt_adc_deadzone = g_button_adc_deadzone; -+ else -+ device_property_read_u32(dev, "button-adc-deadzone", -+ &joypad->bt_adc_deadzone); -+ -+} -+ -+/*----------------------------------------------------------------------------*/ -+static int joypad_dt_parse(struct device *dev, struct joypad *joypad) -+{ -+ int error = 0; -+ -+ /* initialize value check from boot.ini */ -+ joypad_setup_value_check(dev, joypad); -+ -+ device_property_read_u32(dev, "amux-count", -+ &joypad->amux_count); -+ -+ device_property_read_u32(dev, "poll-interval", -+ &joypad->poll_interval); -+ -+ joypad->auto_repeat = device_property_present(dev, "autorepeat"); -+ -+ /* change the report reference point? (ADC MAX - read value) */ -+ joypad->invert_absx = device_property_present(dev, "invert-absx"); -+ joypad->invert_absy = device_property_present(dev, "invert-absy"); -+ joypad->invert_absrx = device_property_present(dev, "invert-absrx"); -+ joypad->invert_absry = device_property_present(dev, "invert-absry"); -+ dev_info(dev, "%s : invert-absx = %d, inveret-absy = %d, invert-absrx = %d, inveret-absry = %d\n", -+ __func__, joypad->invert_absx, joypad->invert_absy, joypad->invert_absrx, joypad->invert_absry); -+ -+ joypad->bt_gpio_count = device_get_child_node_count(dev); -+ -+ if ((joypad->amux_count == 0) || (joypad->bt_gpio_count == 0)) { -+ dev_err(dev, "adc key = %d, gpio key = %d error!", -+ joypad->amux_count, joypad->bt_gpio_count); -+ return -EINVAL; -+ } -+ -+ error = joypad_adc_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_amux_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ error = joypad_gpio_setup(dev, joypad); -+ if (error) -+ return error; -+ -+ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", -+ __func__, joypad->amux_count, joypad->bt_gpio_count); -+ -+ return error; -+} -+static int __maybe_unused joypad_suspend(struct device *dev) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ cancel_work_sync(&joypad->play_work); -+ if (joypad->level) -+ pwm_vibrator_stop(joypad); -+ -+ return 0; -+} -+ -+static int __maybe_unused joypad_resume(struct device *dev) -+{ -+ struct platform_device *pdev = to_platform_device(dev); -+ struct joypad *joypad = platform_get_drvdata(pdev); -+ -+ if (joypad->level) -+ pwm_vibrator_start(joypad); -+ -+ return 0; -+} -+ -+static SIMPLE_DEV_PM_OPS(joypad_pm_ops, -+ joypad_suspend, joypad_resume); -+/*----------------------------------------------------------------------------*/ -+static int joypad_probe(struct platform_device *pdev) -+{ -+ struct joypad *joypad; -+ struct device *dev = &pdev->dev; -+ int error; -+ -+ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); -+ if (!joypad) { -+ dev_err(dev, "joypad devm_kzmalloc error!"); -+ return -ENOMEM; -+ } -+ -+ /* device tree data parse */ -+ error = joypad_dt_parse(dev, joypad); -+ if (error) { -+ dev_err(dev, "dt parse error!(err = %d)\n", error); -+ return error; -+ } -+ -+ mutex_init(&joypad->lock); -+ platform_set_drvdata(pdev, joypad); -+ -+ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); -+ if (error) { -+ dev_err(dev, "create sysfs group fail, error: %d\n", -+ error); -+ return error; -+ } -+ -+ /* poll input device setup */ -+ error = joypad_input_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "input setup failed!(err = %d)\n", error); -+ return error; -+ } -+ -+ /* rumble setup */ -+ error = joypad_rumble_setup(dev, joypad); -+ if (error) { -+ dev_err(dev, "rumble setup failed!(err = %d)\n", error); -+ return error; -+ } -+ -+ dev_info(dev, "%s : probe success\n", __func__); -+ return 0; -+} -+ -+/*----------------------------------------------------------------------------*/ -+static const struct of_device_id joypad_of_match[] = { -+ { .compatible = "rg552_joypad", }, -+ {}, -+}; -+ -+MODULE_DEVICE_TABLE(of, joypad_of_match); -+ -+/*----------------------------------------------------------------------------*/ -+static struct platform_driver joypad_driver = { -+ .probe = joypad_probe, -+ .driver = { -+ .name = DRV_NAME, -+ .pm = &joypad_pm_ops, -+ .of_match_table = of_match_ptr(joypad_of_match), -+ }, -+}; -+ -+/*----------------------------------------------------------------------------*/ -+static int __init joypad_init(void) -+{ -+ return platform_driver_register(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+static void __exit joypad_exit(void) -+{ -+ platform_driver_unregister(&joypad_driver); -+} -+ -+/*----------------------------------------------------------------------------*/ -+late_initcall(joypad_init); -+module_exit(joypad_exit); -diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-polldev.h ---- linux.orig/include/linux/input-polldev.h 1970-01-01 00:00:00.000000000 +0000 -+++ linux/include/linux/input-polldev.h 2024-05-02 00:52:08.985482784 +0000 -@@ -0,0 +1,58 @@ -+/* SPDX-License-Identifier: GPL-2.0-only */ -+#ifndef _INPUT_POLLDEV_H -+#define _INPUT_POLLDEV_H -+ -+/* -+ * Copyright (c) 2007 Dmitry Torokhov -+ */ -+ -+#include -+#include -+ -+/** -+ * struct input_polled_dev - simple polled input device -+ * @private: private driver data. -+ * @open: driver-supplied method that prepares device for polling -+ * (enabled the device and maybe flushes device state). -+ * @close: driver-supplied method that is called when device is no -+ * longer being polled. Used to put device into low power mode. -+ * @poll: driver-supplied method that polls the device and posts -+ * input events (mandatory). -+ * @poll_interval: specifies how often the poll() method should be called. -+ * Defaults to 500 msec unless overridden when registering the device. -+ * @poll_interval_max: specifies upper bound for the poll interval. -+ * Defaults to the initial value of @poll_interval. -+ * @poll_interval_min: specifies lower bound for the poll interval. -+ * Defaults to 0. -+ * @input: input device structure associated with the polled device. -+ * Must be properly initialized by the driver (id, name, phys, bits). -+ * -+ * Polled input device provides a skeleton for supporting simple input -+ * devices that do not raise interrupts but have to be periodically -+ * scanned or polled to detect changes in their state. -+ */ -+struct input_polled_dev { -+ void *private; -+ -+ void (*open)(struct input_polled_dev *dev); -+ void (*close)(struct input_polled_dev *dev); -+ void (*poll)(struct input_polled_dev *dev); -+ unsigned int poll_interval; /* msec */ -+ unsigned int poll_interval_max; /* msec */ -+ unsigned int poll_interval_min; /* msec */ -+ -+ struct input_dev *input; -+ -+/* private: */ -+ struct delayed_work work; -+ -+ bool devres_managed; -+}; -+ -+struct input_polled_dev *input_allocate_polled_device(void); -+struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); -+void input_free_polled_device(struct input_polled_dev *dev); -+int input_register_polled_device(struct input_polled_dev *dev); -+void input_unregister_polled_device(struct input_polled_dev *dev); -+ -+#endif -diff -rupN linux.orig/include/linux/of_gpio.h linux/include/linux/of_gpio.h ---- linux.orig/include/linux/of_gpio.h 2024-04-12 20:11:09.977357387 +0000 -+++ linux/include/linux/of_gpio.h 2024-05-02 00:52:08.985482784 +0000 -@@ -17,8 +17,26 @@ - - struct device_node; - -+/* -+ * This is Linux-specific flags. By default controllers' and Linux' mapping -+ * match, but GPIO controllers are free to translate their own flags to -+ * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended. -+ */ -+enum of_gpio_flags { -+ OF_GPIO_ACTIVE_LOW = 0x1, -+ OF_GPIO_SINGLE_ENDED = 0x2, -+ OF_GPIO_OPEN_DRAIN = 0x4, -+ OF_GPIO_TRANSITORY = 0x8, -+ OF_GPIO_PULL_UP = 0x10, -+ OF_GPIO_PULL_DOWN = 0x20, -+ OF_GPIO_PULL_DISABLE = 0x40, -+}; -+ - #ifdef CONFIG_OF_GPIO - -+extern int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags); -+ - extern int of_get_named_gpio(const struct device_node *np, - const char *list_name, int index); - -@@ -26,13 +44,30 @@ extern int of_get_named_gpio(const struc - - #include - --/* Drivers may not strictly depend on the GPIO support, so let them link. */ - static inline int of_get_named_gpio(const struct device_node *np, - const char *propname, int index) - { -+ return -ENOSYS; -+} -+ -+/* Drivers may not strictly depend on the GPIO support, so let them link. */ -+static inline int of_get_named_gpio_flags(const struct device_node *np, -+ const char *list_name, int index, enum of_gpio_flags *flags) -+{ -+ if (flags) -+ *flags = 0; -+ - return -ENOSYS; - } - - #endif /* CONFIG_OF_GPIO */ - -+static inline int of_get_gpio_flags(const struct device_node *np, int index, -+ enum of_gpio_flags *flags) -+{ -+ return of_get_named_gpio_flags(np, "gpios", index, flags); -+} -+ -+//#endif /* CONFIG_OF_GPIO */ -+ - #endif /* __LINUX_OF_GPIO_H */ -diff -rupN linux.orig/include/linux/pwm.h linux/include/linux/pwm.h ---- linux.orig/include/linux/pwm.h 2024-04-12 20:11:09.985357642 +0000 -+++ linux/include/linux/pwm.h 2024-05-02 00:52:08.985482784 +0000 -@@ -110,6 +110,12 @@ static inline bool pwm_is_enabled(const - return state.enabled; - } - -+static inline void pwm_set_period(struct pwm_device *pwm, u64 period) -+{ -+ if (pwm) -+ pwm->state.period = period; -+} -+ - static inline u64 pwm_get_period(const struct pwm_device *pwm) - { - struct pwm_state state; diff --git a/projects/Rockchip/patches/linux/RK3399/100-rk3399-cache-fix.patch b/projects/Rockchip/patches/linux/RK3399/100-rk3399-cache-fix.patch deleted file mode 100644 index 4a42a457e..000000000 --- a/projects/Rockchip/patches/linux/RK3399/100-rk3399-cache-fix.patch +++ /dev/null @@ -1,183 +0,0 @@ -cgit logo index : kernel/git/next/linux-next.git - -master - -The linux-next integration testing tree Linux Next Group -aboutsummaryrefslogtreecommitdiffstats - -log msg - - -diff options -context: -3 -space: -include -mode: -unified -author Dragan Simic 2023-12-15 06:00:33 +0100 -committer Heiko Stuebner 2024-01-25 21:41:36 +0100 -commit b72633ba5cfa932405832de25d0f0a11716903b4 (patch) -tree ff597f345d9b6ef8948e1c34ada6ad3fb5ffd9bb -parent 82d40b141a4c7ab6608a84a5ce0c58b747cb7163 (diff) -download linux-next-b72633ba5cfa932405832de25d0f0a11716903b4.tar.gz -arm64: dts: rockchip: Add cache information to the SoC dtsi for RK3399 -Add missing cache information to the Rockchip RK3399 SoC dtsi. The specified -values were derived by hand from the cache size specifications available from -the RK3399 datasheet; for future reference, here's a brief summary: - - - Each Cortex-A72 core has 48 KB of L1 instruction cache and - 32 KB of L1 data cache available, four-way set associative - - Each Cortex-A53 core core has 32 KB of instruction cache and - 32 KB of L1 data cache available, four-way set associative - - The big (A72) cluster has 1 MB of unified L2 cache available - - The little (A53) cluster has 512 KB of unified L2 cache available - -This patch allows /proc/cpuinfo and lscpu(1) to display proper RK3399 cache -information, and it eliminates the following error in the kernel log: - - cacheinfo: Unable to detect cache hierarchy for CPU 0 - -While there, add a couple of somewhat useful comments, which may help a bit -anyone going through the RK3399 SoC dtsi. - -Co-developed-by: Kyle Copperfield -Signed-off-by: Kyle Copperfield -Signed-off-by: Dragan Simic -Link: https://lore.kernel.org/r/be3cbcae5c40fa72a52845d30dcc66c847a98cfa.1702616304.git.dsimic@manjaro.org -Signed-off-by: Heiko Stuebner -Diffstat --rw-r--r-- arch/arm64/boot/dts/rockchip/rk3399.dtsi 64 -1 files changed, 62 insertions, 2 deletions -diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -index 6e12c5a920cab..33d38d653a0a3 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -@@ -45,7 +45,7 @@ - #size-cells = <0>; - - cpu-map { -- cluster0 { -+ cluster0 { /* Cortex-A53 */ - core0 { - cpu = <&cpu_l0>; - }; -@@ -60,7 +60,7 @@ - }; - }; - -- cluster1 { -+ cluster1 { /* Cortex-A72 */ - core0 { - cpu = <&cpu_b0>; - }; -@@ -80,6 +80,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <100>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0x8000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <128>; -+ next-level-cache = <&l2_cache_l>; - }; - - cpu_l1: cpu@1 { -@@ -92,6 +99,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <100>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0x8000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <128>; -+ next-level-cache = <&l2_cache_l>; - }; - - cpu_l2: cpu@2 { -@@ -104,6 +118,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <100>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0x8000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <128>; -+ next-level-cache = <&l2_cache_l>; - }; - - cpu_l3: cpu@3 { -@@ -116,6 +137,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <100>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0x8000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <128>; -+ next-level-cache = <&l2_cache_l>; - }; - - cpu_b0: cpu@100 { -@@ -128,6 +156,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <436>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0xC000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <256>; -+ next-level-cache = <&l2_cache_b>; - - thermal-idle { - #cooling-cells = <2>; -@@ -146,6 +181,13 @@ - #cooling-cells = <2>; /* min followed by max */ - dynamic-power-coefficient = <436>; - cpu-idle-states = <&CPU_SLEEP &CLUSTER_SLEEP>; -+ i-cache-size = <0xC000>; -+ i-cache-line-size = <64>; -+ i-cache-sets = <256>; -+ d-cache-size = <0x8000>; -+ d-cache-line-size = <64>; -+ d-cache-sets = <256>; -+ next-level-cache = <&l2_cache_b>; - - thermal-idle { - #cooling-cells = <2>; -@@ -154,6 +196,24 @@ - }; - }; - -+ l2_cache_l: l2-cache-cluster0 { -+ compatible = "cache"; -+ cache-level = <2>; -+ cache-unified; -+ cache-size = <0x80000>; -+ cache-line-size = <64>; -+ cache-sets = <512>; -+ }; -+ -+ l2_cache_b: l2-cache-cluster1 { -+ compatible = "cache"; -+ cache-level = <2>; -+ cache-unified; -+ cache-size = <0x100000>; -+ cache-line-size = <64>; -+ cache-sets = <1024>; -+ }; -+ - idle-states { - entry-method = "psci"; - -generated by cgit 1.2.3-korg (git 2.39.0) at 2024-01-31 17:40:57 +0000 diff --git a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch index 5deb125db..c814f9397 100644 --- a/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/005-anbernic-input.patch @@ -327,10 +327,10 @@ index a7dc462fe21f..396fcfe265f7 100644 + }; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi -index 63a18ff36cea..7f5d7271cd85 100644 +index 63a18ff36cea..f42b727c38cc 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi -@@ -8,73 +8,162 @@ +@@ -8,73 +8,166 @@ #include "rk3566-anbernic-rgxx3.dtsi" / { @@ -416,6 +416,10 @@ index 63a18ff36cea..7f5d7271cd85 100644 + + /* poll device interval (ms), adc read interval */ + poll-interval = <10>; ++ ++ /* required to invert x/y */ ++ invert-absx; ++ invert-absy; + + /* gpio button auto repeat set value : default disable */ + /* @@ -549,7 +553,7 @@ index 63a18ff36cea..7f5d7271cd85 100644 }; &cru { -@@ -126,44 +215,6 @@ mipi_in_panel: endpoint { +@@ -126,44 +219,6 @@ mipi_in_panel: endpoint { }; }; @@ -595,7 +599,7 @@ index 63a18ff36cea..7f5d7271cd85 100644 /* This hardware is physically present but unused. */ power-monitor@62 { diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts -index 94e6dd61a2db..009a9f79f4fc 100644 +index 94e6dd61a2db..0b20a54a3f08 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts @@ -16,62 +16,6 @@ aliases { @@ -675,7 +679,7 @@ index 94e6dd61a2db..009a9f79f4fc 100644 gpio_spi: spi { compatible = "spi-gpio"; pinctrl-names = "default"; -@@ -164,6 +101,156 @@ spk_amp: audio-amplifier { +@@ -164,6 +101,160 @@ spk_amp: audio-amplifier { pinctrl-names = "default"; sound-name-prefix = "Speaker Amp"; }; @@ -739,6 +743,10 @@ index 94e6dd61a2db..009a9f79f4fc 100644 + /* poll device interval (ms), adc read interval */ + poll-interval = <10>; + ++ /* required to invert x/y */ ++ invert-absx; ++ invert-absy; ++ + /* gpio button auto repeat set value : default disable */ + /* + autorepeat; @@ -832,7 +840,7 @@ index 94e6dd61a2db..009a9f79f4fc 100644 }; &cru { -@@ -199,62 +286,6 @@ mipi_out_panel: endpoint { +@@ -199,62 +290,6 @@ mipi_out_panel: endpoint { }; }; diff --git a/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch b/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch index b9f5f50b9..2a26571d0 100644 --- a/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch +++ b/projects/Rockchip/patches/linux/RK3566/018-powkiddy-wifi-input.patch @@ -1,5 +1,5 @@ diff --git a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi -index 3ab751a01cb2..91617bd6b680 100644 +index 3ab751a01cb2..9358816cfd2a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rk2023.dtsi @@ -16,61 +16,6 @@ aliases { @@ -64,7 +64,7 @@ index 3ab751a01cb2..91617bd6b680 100644 backlight: backlight { compatible = "pwm-backlight"; power-supply = <&vcc_sys>; -@@ -96,108 +41,160 @@ battery: battery { +@@ -96,108 +41,164 @@ battery: battery { <3400000 0>; }; @@ -224,6 +224,10 @@ index 3ab751a01cb2..91617bd6b680 100644 + /* poll device interval (ms), adc read interval */ + poll-interval = <10>; + ++ /* required to invert x/y */ ++ invert-absx; ++ invert-absy; ++ + /* gpio button auto repeat set value : default disable */ + /* + autorepeat; @@ -320,7 +324,7 @@ index 3ab751a01cb2..91617bd6b680 100644 gpio_keys_vol: gpio-keys-vol { compatible = "gpio-keys"; autorepeat; -@@ -217,13 +214,6 @@ button-vol-up { +@@ -217,13 +218,6 @@ button-vol-up { }; }; @@ -334,7 +338,7 @@ index 3ab751a01cb2..91617bd6b680 100644 hdmi-con { compatible = "hdmi-connector"; ddc-i2c-bus = <&i2c5>; -@@ -774,6 +764,9 @@ &sdmmc2 { +@@ -774,6 +768,9 @@ &sdmmc2 { pinctrl-names = "default"; vmmc-supply = <&vcc_wifi>; vqmmc-supply = <&vcca1v8_pmu>; From 03129a2b19251833bdce42756560912245b528aa Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 6 May 2024 21:14:01 +0100 Subject: [PATCH 146/184] rocknix-joypad: bump driver --- packages/kernel/drivers/rocknix-joypad/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 008186b8d..92584ce87 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="69b37098b1338f716aa3b6fcaa1b7c1522d24a36" +PKG_VERSION="38ec995c8516ad39544b85026876b0215fb16544" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" From c5e432f597dc25f252e64d81d98e3474975893b9 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 6 May 2024 21:24:41 +0100 Subject: [PATCH 147/184] mali-bifrost: unify Amlogic/Rockchip packages --- .../kernel/drivers}/mali-bifrost/package.mk | 0 .../drivers}/mali-bifrost/sources/Makefile | 0 .../Rockchip/packages/mali-bifrost/package.mk | 26 ------------------- .../packages/mali-bifrost/sources/Makefile | 12 --------- .../mali-bifrost}/001-single-regulator.patch | 0 .../002-lowercase-interrupts-first.patch | 0 6 files changed, 38 deletions(-) rename {projects/Amlogic/packages => packages/kernel/drivers}/mali-bifrost/package.mk (100%) rename {projects/Amlogic/packages => packages/kernel/drivers}/mali-bifrost/sources/Makefile (100%) delete mode 100644 projects/Rockchip/packages/mali-bifrost/package.mk delete mode 100644 projects/Rockchip/packages/mali-bifrost/sources/Makefile rename projects/Rockchip/{packages/mali-bifrost/patches => patches/mali-bifrost}/001-single-regulator.patch (100%) rename projects/Rockchip/{packages/mali-bifrost/patches => patches/mali-bifrost}/002-lowercase-interrupts-first.patch (100%) diff --git a/projects/Amlogic/packages/mali-bifrost/package.mk b/packages/kernel/drivers/mali-bifrost/package.mk similarity index 100% rename from projects/Amlogic/packages/mali-bifrost/package.mk rename to packages/kernel/drivers/mali-bifrost/package.mk diff --git a/projects/Amlogic/packages/mali-bifrost/sources/Makefile b/packages/kernel/drivers/mali-bifrost/sources/Makefile similarity index 100% rename from projects/Amlogic/packages/mali-bifrost/sources/Makefile rename to packages/kernel/drivers/mali-bifrost/sources/Makefile diff --git a/projects/Rockchip/packages/mali-bifrost/package.mk b/projects/Rockchip/packages/mali-bifrost/package.mk deleted file mode 100644 index 78b66a7c7..000000000 --- a/projects/Rockchip/packages/mali-bifrost/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="mali-bifrost" -PKG_VERSION="r48p0-01eac0" -PKG_LICENSE="GPL" -PKG_SITE="https://developer.arm.com/downloads/-/mali-drivers/bifrost-kernel" -PKG_URL="https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-bifrost-gpu/BX304L01B-SW-99002-${PKG_VERSION}.tar" -PKG_LONGDESC="mali-bifrost: Linux drivers for Mali Bifrost GPUs" -PKG_ARCH="aarch64" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="${LINUX_DEPENDS}" -PKG_TOOLCHAIN="manual" -PKG_IS_KERNEL_PKG="yes" - -make_target() { - kernel_make KDIR=$(kernel_path) -C ${PKG_BUILD} \ - CONFIG_MALI_MIDGARD=m CONFIG_MALI_PLATFORM_NAME=meson CONFIG_MALI_REAL_HW=y CONFIG_MALI_DEVFREQ=y CONFIG_MALI_GATOR_SUPPORT=y -} - -makeinstall_target() { - DRIVER_DIR=${PKG_BUILD}/product/kernel/drivers/gpu/arm/midgard - - mkdir -p ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} - cp ${DRIVER_DIR}/mali_kbase.ko ${INSTALL}/$(get_full_module_dir)/${PKG_NAME} -} diff --git a/projects/Rockchip/packages/mali-bifrost/sources/Makefile b/projects/Rockchip/packages/mali-bifrost/sources/Makefile deleted file mode 100644 index 67d89bbfd..000000000 --- a/projects/Rockchip/packages/mali-bifrost/sources/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -export - -MALI_KBASE_SRC_DIR = $(CURDIR)/product/kernel/drivers/gpu/arm/midgard - -all: - $(MAKE) -C $(MALI_KBASE_SRC_DIR) all - -clean: - $(MAKE) -C $(MALI_KBASE_SRC_DIR) clean diff --git a/projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch b/projects/Rockchip/patches/mali-bifrost/001-single-regulator.patch similarity index 100% rename from projects/Rockchip/packages/mali-bifrost/patches/001-single-regulator.patch rename to projects/Rockchip/patches/mali-bifrost/001-single-regulator.patch diff --git a/projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch b/projects/Rockchip/patches/mali-bifrost/002-lowercase-interrupts-first.patch similarity index 100% rename from projects/Rockchip/packages/mali-bifrost/patches/002-lowercase-interrupts-first.patch rename to projects/Rockchip/patches/mali-bifrost/002-lowercase-interrupts-first.patch From 76c3a7d4da91c070b09a1f2ae5d7c9cc03bc267f Mon Sep 17 00:00:00 2001 From: John Williams Date: Tue, 7 May 2024 12:21:03 +1000 Subject: [PATCH 148/184] Fix docker GLOBAL_SETTINGS --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 814f34a2a..b9537eee0 100644 --- a/Makefile +++ b/Makefile @@ -90,8 +90,8 @@ docker-%: DOCKER_IMAGE := "rocknix/rocknix-build:latest" # Anytime this directory changes, you must run `make clean` similarly to moving the distribution directory docker-%: DOCKER_WORK_DIR := $(shell if [ -n "${DOCKER_WORK_DIR}" ]; then echo ${DOCKER_WORK_DIR}; else echo "$$(pwd)" ; fi) -# ${HOME}/.${DISTRONAME}/options is a global options file containing developer and build settings. -docker-%: GLOBAL_SETTINGS := $(shell if [ -f "${HOME}/.${DISTRONAME}/options" ]; then echo "-v \"${HOME}/.${DISTRONAME}/options:${HOME}/.${DISTRONAME}/options\""; else echo ""; fi) +# ${HOME}/.ROCKNIX/options is a global options file containing developer and build settings. +docker-%: GLOBAL_SETTINGS := $(shell if [ -f "${HOME}/.ROCKNIX/options" ]; then echo "-v \"${HOME}/.ROCKNIX/options:${HOME}/.ROCKNIX/options\""; else echo ""; fi) # LOCAL_SSH_KEYS_FILE is a variable that contains the location of the authorized keys file for development build use. It will be mounted into the container if it exists. docker-%: LOCAL_SSH_KEYS_FILE := $(shell if [ -n "${LOCAL_SSH_KEYS_FILE}" ]; then echo "-v \"${LOCAL_SSH_KEYS_FILE}:${LOCAL_SSH_KEYS_FILE}\""; else echo ""; fi) From 9dacc67fa6e2b3a9b9474219c9c35109d07dd8fe Mon Sep 17 00:00:00 2001 From: sydarn Date: Tue, 7 May 2024 21:57:59 +0200 Subject: [PATCH 149/184] Fix rk3566 governor, it didn't resolve at runtime, so hard code path Tested with both libmali and panfrost --- packages/hardware/quirks/platforms/RK3566/010-governors | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hardware/quirks/platforms/RK3566/010-governors b/packages/hardware/quirks/platforms/RK3566/010-governors index 64a383e66..3ac5684a8 100755 --- a/packages/hardware/quirks/platforms/RK3566/010-governors +++ b/packages/hardware/quirks/platforms/RK3566/010-governors @@ -5,5 +5,5 @@ cat </storage/.config/profile.d/010-governors # FREQ governors CPU_FREQ=("/sys/devices/system/cpu/cpufreq/policy0") -GPU_FREQ="$(find /sys/devices/platform/*gpu/devfreq -name '*.gpu')" +GPU_FREQ=("/sys/devices/platform/fde60000.gpu/devfreq/fde60000.gpu") EOF From 2a4b28537d3c6a5b7270bc52b11c6ebc308bb060 Mon Sep 17 00:00:00 2001 From: sydarn Date: Tue, 7 May 2024 21:59:14 +0200 Subject: [PATCH 150/184] include glmark2 even if only gles is supported --- packages/virtual/image/package.mk | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk index cd337abb9..125108c02 100644 --- a/packages/virtual/image/package.mk +++ b/packages/virtual/image/package.mk @@ -42,7 +42,10 @@ else PKG_DEPENDS_TARGET+=" ${PKG_TOOLS} ${PKG_FONTS} ${PKG_SOUND} ${PKG_SYNC} ${PKG_GRAPHICS} ${PKG_UI} ${PKG_UI_TOOLS} ${PKG_MULTIMEDIA} misc-packages" # GL demos and tools - [ "${OPENGL_SUPPORT}" = "yes" ] && PKG_DEPENDS_TARGET+=" mesa-demos glmark2" + [ "${OPENGL_SUPPORT}" = "yes" ] && PKG_DEPENDS_TARGET+=" mesa-demos" + + # GLmark2 + [[ ! -z "${OPENGLES_SUPPORT}" ]] && PKG_DEPENDS_TARGET+=" glmark2" # Weston kiosk shell dpms support. [ "${WINDOWMANAGER}" = "weston" ] && PKG_DEPENDS_TARGET+=" weston-kiosk-shell-dpms" From 4f8e3b610750235025bf527278ad9f1c369b271b Mon Sep 17 00:00:00 2001 From: sydarn Date: Tue, 7 May 2024 22:45:05 +0200 Subject: [PATCH 151/184] Introduce PREFER_GLES device build var, and remove S922X build checks This needs to be tested on S922X primarliy with mali blob --- packages/emulators/libretro/retroarch/package.mk | 2 +- packages/emulators/standalone/flycast-sa/package.mk | 2 +- packages/emulators/standalone/ppsspp-sa/package.mk | 2 +- packages/graphics/glu/package.mk | 2 +- packages/wayland/weston11/package.mk | 2 +- projects/Amlogic/devices/S922X/options | 6 +++++- projects/Rockchip/devices/RK3326/options | 5 ++++- projects/Rockchip/devices/RK3566/options | 5 ++++- 8 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/emulators/libretro/retroarch/package.mk b/packages/emulators/libretro/retroarch/package.mk index 3feeae1ca..dfd3d09a2 100644 --- a/packages/emulators/libretro/retroarch/package.mk +++ b/packages/emulators/libretro/retroarch/package.mk @@ -88,7 +88,7 @@ else PKG_CONFIGURE_OPTS_TARGET+=" --disable-opengles --disable-opengles3 --disable-opengles3_1 --disable-opengles3_2" fi -if [[ "${OPENGL_SUPPORT}" = "yes" ]] && [[ ! "${DEVICE}" = "S922X" ]]; then +if [[ "${OPENGL_SUPPORT}" = "yes" ]]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" PKG_CONFIGURE_OPTS_TARGET+=" --enable-opengl" else diff --git a/packages/emulators/standalone/flycast-sa/package.mk b/packages/emulators/standalone/flycast-sa/package.mk index 9321f2279..8a6560d3b 100644 --- a/packages/emulators/standalone/flycast-sa/package.mk +++ b/packages/emulators/standalone/flycast-sa/package.mk @@ -12,7 +12,7 @@ PKG_LONGDESC="Flycast is a multiplatform Sega Dreamcast, Naomi and Atomiswave em PKG_TOOLCHAIN="cmake" PKG_PATCH_DIRS+="${DEVICE}" -if [[ "${OPENGL_SUPPORT}" = "yes" && ( ! "${DEVICE}" = "S922X" || ( "${DEVICE}" = "S922X" && "${USE_MALI}" = "no" ) ) ]]; then +if [ "${OPENGL_SUPPORT}" = "yes" ] && [ ! "${PREFER_GLES}" = "yes" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" PKG_CMAKE_OPTS_TARGET+=" -USE_OPENGL=ON -DUSE_GLES=OFF" diff --git a/packages/emulators/standalone/ppsspp-sa/package.mk b/packages/emulators/standalone/ppsspp-sa/package.mk index 8eea8b1e8..b60e2a239 100644 --- a/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/packages/emulators/standalone/ppsspp-sa/package.mk @@ -34,7 +34,7 @@ PKG_CMAKE_OPTS_TARGET=" -DUSE_SYSTEM_FFMPEG=OFF \ -DHEADLESS=OFF \ -DUSE_DISCORD=OFF" -if [[ "${OPENGL_SUPPORT}" = "yes" ]] && [[ ! "${DEVICE}" = "S922X" ]]; then +if [ "${OPENGL_SUPPORT}" = "yes" ] && [ ! "${PREFER_GLES}" = "yes" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd glew" PKG_CMAKE_OPTS_TARGET+=" -DUSING_FBDEV=OFF \ -DUSING_GLES2=OFF" diff --git a/packages/graphics/glu/package.mk b/packages/graphics/glu/package.mk index 37c3bb9e9..c92c15d8e 100644 --- a/packages/graphics/glu/package.mk +++ b/packages/graphics/glu/package.mk @@ -7,6 +7,6 @@ PKG_VERSION="9.0.3" PKG_LICENSE="OSS" PKG_SITE="https://gitlab.freedesktop.org/mesa/glu/" PKG_URL="${PKG_SITE}-/archive/glu-${PKG_VERSION}/glu-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain ${OPENGL}" +PKG_DEPENDS_TARGET="toolchain mesa" PKG_NEED_UNPACK="$(get_pkg_directory mesa)" PKG_LONGDESC="libglu is the The OpenGL utility library" diff --git a/packages/wayland/weston11/package.mk b/packages/wayland/weston11/package.mk index a23782b43..89188bad9 100644 --- a/packages/wayland/weston11/package.mk +++ b/packages/wayland/weston11/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="11.0.3" PKG_LICENSE="MIT" PKG_SITE="https://wayland.freedesktop.org/" PKG_URL="https://gitlab.freedesktop.org/wayland/weston/-/archive/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain wayland wayland-protocols libdrm libxkbcommon libxcb-cursor libinput pipewire cairo pango libjpeg-turbo dbus seatd glu ${OPENGL} libX11 xwayland libXcursor xkbcomp setxkbmap cairo xterm" +PKG_DEPENDS_TARGET="toolchain wayland wayland-protocols libdrm libxkbcommon libxcb-cursor libinput pipewire cairo pango libjpeg-turbo dbus seatd glu mesa libX11 xwayland libXcursor xkbcomp setxkbmap cairo xterm" PKG_LONGDESC="Reference implementation of a Wayland compositor" PKG_PATCH_DIRS+="${DEVICE}" diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index 0edde3f0d..1023d9bf4 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -47,7 +47,11 @@ GRAPHIC_DRIVERS="panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="mesa" + if [ "${USE_MALI}" != "no" ]; then + OPENGL="" + else + OPENGL="mesa" + fi # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" diff --git a/projects/Rockchip/devices/RK3326/options b/projects/Rockchip/devices/RK3326/options index 696421a13..ce35e1efc 100644 --- a/projects/Rockchip/devices/RK3326/options +++ b/projects/Rockchip/devices/RK3326/options @@ -56,7 +56,10 @@ GRAPHIC_DRIVERS="mali panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="" + OPENGL="mesa" + + # For maximum cross compatbility + PREFER_GLES="yes" # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 614fe4d8c..09ae4b7ee 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -56,11 +56,14 @@ GRAPHIC_DRIVERS="mali panfrost" # OpenGL(X) implementation to use (mesa / no) - OPENGL="" + OPENGL="mesa" # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" + # For maximum cross compatbility + PREFER_GLES="yes" + # Displayserver to use (weston / x11 / no) DISPLAYSERVER="wl" From 8070d23e2b8d0c086dd6b63a16479c2c8ba3584d Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 8 May 2024 11:00:05 +0200 Subject: [PATCH 152/184] Disable gl4es scrubbing rk3326 and rk3566 --- .../scripts/portmaster_compatibility.sh | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/apps/portmaster/scripts/portmaster_compatibility.sh b/packages/apps/portmaster/scripts/portmaster_compatibility.sh index 2326544a8..6efac2099 100644 --- a/packages/apps/portmaster/scripts/portmaster_compatibility.sh +++ b/packages/apps/portmaster/scripts/portmaster_compatibility.sh @@ -7,16 +7,18 @@ if [[ "${UI_SERVICE}" =~ "weston.service"|"*sway*" ]]; then if [[ $(glxinfo | grep -i "opengl renderer") =~ "Panfrost" ]]; then - #Remove gl4es libs on devices that support OpenGL and sed any port that references it - rm -rf /storage/roms/ports/*/lib*/libEGL* - rm -rf /storage/roms/ports/*/lib*/libGL* - for port in /storage/roms/ports/*.sh; do - if grep -q SDL_VIDEO_GL_DRIVER "$port"; then - sed -i '/^export SDL_VIDEO_GL_DRIVER/c\#export SDL_VIDEO_GL_DRIVER' "$port" - sed -i '/^export SDL_VIDEO_EGL_DRIVER/c\#export SDL_VIDEO_EGL_DRIVER' "$port" - echo Fixing: "$port"; - fi - done; + if [[ "${HW_DEVICE}" =~ "RK3399"|"RK3588" ]]; then + #Remove gl4es libs on devices that support OpenGL and sed any port that references it + rm -rf /storage/roms/ports/*/lib*/libEGL* + rm -rf /storage/roms/ports/*/lib*/libGL* + for port in /storage/roms/ports/*.sh; do + if grep -q SDL_VIDEO_GL_DRIVER "$port"; then + sed -i '/^export SDL_VIDEO_GL_DRIVER/c\#export SDL_VIDEO_GL_DRIVER' "$port" + sed -i '/^export SDL_VIDEO_EGL_DRIVER/c\#export SDL_VIDEO_EGL_DRIVER' "$port" + echo Fixing: "$port"; + fi + done; + fi #Remove S922X fix if exists for port in /storage/roms/ports/*.sh; do From 62ea8c66a64cf36e3992e91cd0cba9050966e12a Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 8 May 2024 14:36:00 +0200 Subject: [PATCH 153/184] Include S922X panfrost for the gl4es scrubbing in portmaster --- packages/apps/portmaster/scripts/portmaster_compatibility.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/portmaster/scripts/portmaster_compatibility.sh b/packages/apps/portmaster/scripts/portmaster_compatibility.sh index 6efac2099..e0b4f6bbe 100644 --- a/packages/apps/portmaster/scripts/portmaster_compatibility.sh +++ b/packages/apps/portmaster/scripts/portmaster_compatibility.sh @@ -7,7 +7,7 @@ if [[ "${UI_SERVICE}" =~ "weston.service"|"*sway*" ]]; then if [[ $(glxinfo | grep -i "opengl renderer") =~ "Panfrost" ]]; then - if [[ "${HW_DEVICE}" =~ "RK3399"|"RK3588" ]]; then + if [[ "${HW_DEVICE}" =~ "RK3399"|"RK3588"|"S922X" ]]; then #Remove gl4es libs on devices that support OpenGL and sed any port that references it rm -rf /storage/roms/ports/*/lib*/libEGL* rm -rf /storage/roms/ports/*/lib*/libGL* From e612c0a7e81e0317450780bea0da480ca48768c4 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 8 May 2024 16:15:26 +0200 Subject: [PATCH 154/184] Only build qt5 with GL --- packages/graphics/qt5/package.mk | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/graphics/qt5/package.mk b/packages/graphics/qt5/package.mk index 7ba9fb84f..bd35e015b 100644 --- a/packages/graphics/qt5/package.mk +++ b/packages/graphics/qt5/package.mk @@ -136,12 +136,8 @@ pre_configure_target() { -skip qtwinextras -skip qtx11extras" - # Build with OpenGL or OpenGLES support - if [ "${OPENGL_SUPPORT}" = "yes" ]; then - PKG_CONFIGURE_OPTS_TARGET+=" -opengl -no-eglfs" - elif [ "${OPENGLES_SUPPORT}" = "yes" ]; then - PKG_CONFIGURE_OPTS_TARGET+=" -opengl es2" - fi + # Build with OpenGL always + PKG_CONFIGURE_OPTS_TARGET+=" -opengl -no-eglfs" # Wayland support if [ ! "${DISPLAYSERVER}" = "wl" ]; then From ee13c582fe62e84d34824ed39831299dc086f22b Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 8 May 2024 18:40:16 +0000 Subject: [PATCH 155/184] Initial Allwinner device support --- Makefile | 5 + packages/kernel/linux/package.mk | 4 + .../atf/patches/H700/000-h700-pmic.patch | 281 + projects/Allwinner/bootloader/install | 24 + projects/Allwinner/bootloader/mkimage | 35 + projects/Allwinner/bootloader/release | 19 + projects/Allwinner/bootloader/update.sh | 47 + .../devices/H700/linux/linux.aarch64.conf | 7212 +++++++++++++++++ projects/Allwinner/devices/H700/options | 83 + projects/Allwinner/options | 62 + projects/Allwinner/packages/u-boot/package.mk | 80 + 11 files changed, 7852 insertions(+) create mode 100644 packages/tools/atf/patches/H700/000-h700-pmic.patch create mode 100755 projects/Allwinner/bootloader/install create mode 100755 projects/Allwinner/bootloader/mkimage create mode 100755 projects/Allwinner/bootloader/release create mode 100755 projects/Allwinner/bootloader/update.sh create mode 100644 projects/Allwinner/devices/H700/linux/linux.aarch64.conf create mode 100644 projects/Allwinner/devices/H700/options create mode 100755 projects/Allwinner/options create mode 100644 projects/Allwinner/packages/u-boot/package.mk diff --git a/Makefile b/Makefile index b9537eee0..aeb13912e 100644 --- a/Makefile +++ b/Makefile @@ -70,6 +70,11 @@ RK3399: PROJECT=Rockchip DEVICE=RK3399 ARCH=arm ./scripts/build_distro PROJECT=Rockchip DEVICE=RK3399 ARCH=aarch64 ./scripts/build_distro +H700: + unset DEVICE_ROOT + PROJECT=Allwinner DEVICE=H700 ARCH=arm ./scripts/build_distro + PROJECT=Allwinner DEVICE=H700 ARCH=aarch64 ./scripts/build_dist + update: PROJECT=Rockchip DEVICE=RK3588 ARCH=aarch64 ./scripts/update_packages diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 05461486f..40d5d79d5 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -24,6 +24,10 @@ case ${DEVICE} in PKG_URL="https://github.com/armbian/linux-rockchip/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" ;; + H700) + PKG_VERSION="4e92998c4f95a56578b4aa2c55b02e97381c8773" + PKG_URL="https://git.sr.ht/~tokyovigilante/linux/archive/${PKG_VERSION}.tar.gz" + ;; *) PKG_VERSION="6.9-rc3" PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" diff --git a/packages/tools/atf/patches/H700/000-h700-pmic.patch b/packages/tools/atf/patches/H700/000-h700-pmic.patch new file mode 100644 index 000000000..355ebe5c1 --- /dev/null +++ b/packages/tools/atf/patches/H700/000-h700-pmic.patch @@ -0,0 +1,281 @@ +diff -rupN arm-trusted-firmware.orig/plat/allwinner/sun50i_h616/platform.mk arm-trusted-firmware/plat/allwinner/sun50i_h616/platform.mk +--- arm-trusted-firmware.orig/plat/allwinner/sun50i_h616/platform.mk 2024-05-07 15:03:38.476193636 +0000 ++++ arm-trusted-firmware/plat/allwinner/sun50i_h616/platform.mk 2024-05-07 15:12:30.047065542 +0000 +@@ -18,5 +18,7 @@ ifeq (${SUNXI_PSCI_USE_SCPI}, 1) + $(error "H616 does not support SCPI PSCI ops") + endif + +-BL31_SOURCES += drivers/allwinner/axp/axp805.c \ ++BL31_SOURCES += common/fdt_wrappers.c \ ++ drivers/allwinner/axp/axp805.c \ + drivers/allwinner/sunxi_rsb.c \ ++ drivers/mentor/i2c/mi2cv.c +diff -rupN arm-trusted-firmware.orig/plat/allwinner/sun50i_h616/sunxi_power.c arm-trusted-firmware/plat/allwinner/sun50i_h616/sunxi_power.c +--- arm-trusted-firmware.orig/plat/allwinner/sun50i_h616/sunxi_power.c 2024-05-07 15:03:38.476193636 +0000 ++++ arm-trusted-firmware/plat/allwinner/sun50i_h616/sunxi_power.c 2024-05-07 15:13:52.420752617 +0000 +@@ -12,7 +12,9 @@ + #include + #include + #include ++#include + #include ++#include + + #include + #include +@@ -22,85 +24,230 @@ + #define AXP305_I2C_ADDR 0x36 + #define AXP305_HW_ADDR 0x745 + #define AXP305_RT_ADDR 0x3a ++#define AXP313_I2C_ADDR 0x36 ++#define AXP717_I2C_ADDR 0x34 ++#define AXP717_HW_ADDR 0x3a3 ++#define AXP717_RT_ADDR 0x2d ++ ++static uint8_t i2c_addr; ++static uint8_t rsb_rt_addr; + + static enum pmic_type { + UNKNOWN, + AXP305, ++ AXP313, ++ AXP717, + } pmic; + + int axp_read(uint8_t reg) + { +- return rsb_read(AXP305_RT_ADDR, reg); ++ uint8_t val; ++ int ret; ++ ++ if (rsb_rt_addr != 0) { ++ return rsb_read(rsb_rt_addr, reg); ++ } ++ ++ ret = i2c_write(i2c_addr, 0, 0, ®, 1); ++ if (ret == 0) { ++ ret = i2c_read(i2c_addr, 0, 0, &val, 1); ++ } ++ if (ret) { ++ ERROR("PMIC: Cannot read PMIC register %02x\n", reg); ++ return ret; ++ } ++ ++ return val; + } + + int axp_write(uint8_t reg, uint8_t val) + { +- return rsb_write(AXP305_RT_ADDR, reg, val); ++ int ret; ++ ++ if (rsb_rt_addr != 0) { ++ return rsb_write(rsb_rt_addr, reg, val); ++ } ++ ++ ret = i2c_write(i2c_addr, reg, 1, &val, 1); ++ if (ret) { ++ ERROR("PMIC: Cannot write PMIC register %02x\n", reg); ++ } ++ ++ return ret; + } + +-static int rsb_init(void) ++static int rsb_init(int rsb_hw_addr) + { + int ret; + + ret = rsb_init_controller(); +- if (ret) ++ if (ret) { + return ret; ++ } + + /* Switch to the recommended 3 MHz bus clock. */ + ret = rsb_set_bus_speed(SUNXI_OSC24M_CLK_IN_HZ, 3000000); +- if (ret) ++ if (ret) { + return ret; ++ } + + /* Initiate an I2C transaction to switch the PMIC to RSB mode. */ + ret = rsb_set_device_mode(AXP20X_MODE_RSB << 16 | AXP20X_MODE_REG << 8); +- if (ret) ++ if (ret) { + return ret; ++ } + + /* Associate the 8-bit runtime address with the 12-bit bus address. */ +- ret = rsb_assign_runtime_address(AXP305_HW_ADDR, AXP305_RT_ADDR); +- if (ret) ++ ret = rsb_assign_runtime_address(rsb_hw_addr, rsb_rt_addr); ++ if (ret) { + return ret; ++ } + +- return axp_check_id(); ++ return 0; + } + +-int sunxi_pmic_setup(uint16_t socid, const void *fdt) ++static int pmic_bus_init(uint16_t socid) + { + int ret; ++ uint16_t rsb_hw_addr; + +- INFO("PMIC: Probing AXP305 on RSB\n"); +- +- ret = sunxi_init_platform_r_twi(socid, true); ++ ret = sunxi_init_platform_r_twi(socid, !!rsb_rt_addr); + if (ret) { + INFO("Could not init platform bus: %d\n", ret); ++ pmic = UNKNOWN; + return ret; + } + +- ret = rsb_init(); ++ switch(pmic) { ++ case AXP305: ++ rsb_hw_addr = AXP305_HW_ADDR; ++ break; ++ case AXP717: ++ rsb_hw_addr = AXP717_HW_ADDR; ++ break; ++ default: ++ rsb_hw_addr = 0; ++ break; ++ } ++ ++ if (rsb_hw_addr != 0) { ++ ret = rsb_init(rsb_hw_addr); ++ if (ret) { ++ pmic = UNKNOWN; ++ return ret; ++ } ++ } else { ++ /* initialise mi2cv driver */ ++ i2c_init((void *)SUNXI_R_I2C_BASE); ++ } ++ ++ return 0; ++} ++ ++int sunxi_pmic_setup(uint16_t socid, const void *fdt) ++{ ++ int node, ret; ++ ++ node = fdt_node_offset_by_compatible(fdt, 0, "x-powers,axp806"); ++ if (node >= 0) { ++ rsb_rt_addr = AXP305_RT_ADDR; ++ pmic = AXP305; ++ } ++ ++ if (pmic == UNKNOWN) { ++ node = fdt_node_offset_by_compatible(fdt, 0, "x-powers,axp313a"); ++ if (node >= 0) { ++ i2c_addr = AXP313_I2C_ADDR; ++ pmic = AXP313; ++ } ++ } ++ ++ if (pmic == UNKNOWN) { ++ node = fdt_node_offset_by_compatible(fdt, 0, "x-powers,axp717"); ++ if (node >= 0) { ++ rsb_rt_addr = AXP717_RT_ADDR; ++ pmic = AXP717; ++ } ++ } ++ ++ if (pmic == UNKNOWN) { ++ INFO("PMIC: No known PMIC in DT, skipping setup.\n"); ++ return 0; ++ } ++ ++ INFO("Probing for PMIC on %s:\n", rsb_rt_addr ? "RSB" : "I2C"); ++ ++ ret = pmic_bus_init(socid); + if (ret) { +- INFO("Could not init RSB: %d\n", ret); + return ret; + } + +- pmic = AXP305; +- axp_setup_regulators(fdt); ++ ret = axp_read(0x03); ++ switch (ret & 0xcf) { ++ case 0x40: /* AXP305 */ ++ if (pmic == AXP305) { ++ INFO("PMIC: found AXP305, setting up regulators\n"); ++ axp_setup_regulators(fdt); ++ } else { ++ pmic = UNKNOWN; ++ } ++ break; ++ case 0x48: /* AXP1530 */ ++ case 0x4b: /* AXP313A */ ++ case 0x4c: /* AXP313B */ ++ if (pmic == AXP313) { ++ INFO("PMIC: found AXP313\n"); ++ /* no regulators to set up */ ++ } else { ++ pmic = UNKNOWN; ++ } ++ break; ++ case 0xcf: /* version reg not implemented on AXP717 */ ++ if (pmic == AXP717) { ++ INFO("PMIC: found AXP717\n"); ++ /* no regulators to set up, U-Boot takes care of this */ ++ } else { ++ pmic = UNKNOWN; ++ } ++ break; ++ } + +- /* Switch the PMIC back to I2C mode. */ +- ret = axp_write(AXP20X_MODE_REG, AXP20X_MODE_I2C); +- if (ret) +- return ret; ++ if (rsb_rt_addr != 0) { ++ /* Switch the PMIC back to I2C mode. */ ++ return rsb_write(rsb_rt_addr, AXP20X_MODE_REG, AXP20X_MODE_I2C); ++ } ++ ++ if (pmic == UNKNOWN) { ++ INFO("Incompatible or unknown PMIC found.\n"); ++ return -ENODEV; ++ } + + return 0; + } + + void sunxi_power_down(void) + { ++ int ret; ++ ++ if (pmic == UNKNOWN) { ++ return; ++ } ++ ++ /* Re-initialise after rich OS might have used it. */ ++ ret = pmic_bus_init(SUNXI_SOC_H616); ++ if (ret) { ++ return; ++ } ++ + switch (pmic) { + case AXP305: +- /* Re-initialise after rich OS might have used it. */ +- sunxi_init_platform_r_twi(SUNXI_SOC_H616, true); +- rsb_init(); +- axp_power_off(); ++ axp_setbits(0x32, BIT(7)); ++ break; ++ case AXP313: ++ axp_setbits(0x1a, BIT(7)); ++ break; ++ case AXP717: ++ axp_setbits(0x27, BIT(0)); + break; + default: + break; diff --git a/projects/Allwinner/bootloader/install b/projects/Allwinner/bootloader/install new file mode 100755 index 000000000..d3057e6ff --- /dev/null +++ b/projects/Allwinner/bootloader/install @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +PKG_UBOOT="$(get_build_dir u-boot)" +source ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options + +case "${PKG_SOC}" in + h700) + echo "uboot: build u-boot-sunxi-with-spl.bin..." + cp -av u-boot-sunxi-with-spl.bin ${INSTALL}/usr/share/bootloader + ;; +esac + +if [ "${EXT_LINUX_CONF}" == true ]; then + echo "boot: create extlinux.conf..." + mkdir -p "${INSTALL}/usr/share/bootloader/extlinux" + FDTMODE="FDT /${DEVICE_DTB[0]}.dtb" + cat << EOF > "${INSTALL}/usr/share/bootloader/extlinux/extlinux.conf" +LABEL ${DISTRO} + LINUX /${KERNEL_NAME} + ${FDTMODE} + APPEND boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} ${EXTRA_CMDLINE} +EOF +fi diff --git a/projects/Allwinner/bootloader/mkimage b/projects/Allwinner/bootloader/mkimage new file mode 100755 index 000000000..7c3d34d68 --- /dev/null +++ b/projects/Allwinner/bootloader/mkimage @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2017-2020 Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +source ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options + +if [ -f "${RELEASE_DIR}/3rdparty/bootloader/u-boot-sunxi-with-spl.bin" ]; then + echo "image: writing u-boot to $(basename ${DISK})..." + dd if="${RELEASE_DIR}/3rdparty/bootloader/u-boot-sunxi-with-spl.bin" of="${DISK}" bs=1k seek=8 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error +fi + +# copy device trees to part1 +for DTB in ${DEVICE_DTB[@]}; do + if [ -e "${DTB}.dtb" ]; then + echo "image: copy device trees to image..." + mcopy -o "${DTB}.dtb" :: + fi +done + +if [ "${EXT_LINUX_CONF}" == true ]; then + mkdir -p "${LE_TMP}/extlinux" + + echo "image: Set FDT to ${DEVICE_DTB}..." + FDTMODE="FDT /${DEVICE_DTB}.dtb" + + echo "image: Set extlinux.conf..." + cat << EOF > "${LE_TMP}/extlinux/extlinux.conf" +LABEL ${DISTRO} + LINUX /${KERNEL_NAME} + ${FDTMODE} + APPEND boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} ${EXTRA_CMDLINE} +EOF + + mcopy -so "${LE_TMP}/extlinux" :: +fi diff --git a/projects/Allwinner/bootloader/release b/projects/Allwinner/bootloader/release new file mode 100755 index 000000000..a4241bb5f --- /dev/null +++ b/projects/Allwinner/bootloader/release @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2017-2021 Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +mkdir -p ${RELEASE_DIR}/3rdparty/bootloader +if [ -n "${UBOOT_CONFIG}" ]; then + BOOTLOADER_DIR=$(get_build_dir ${BOOTLOADER}) + KERNEL_DIR=$(get_build_dir linux) + if [ -f ${BOOTLOADER_DIR}/u-boot-sunxi-with-spl.bin ]; then + cp -a ${BOOTLOADER_DIR}/u-boot-sunxi-with-spl.bin ${RELEASE_DIR}/3rdparty/bootloader + fi +fi + +LINUX_DTS_DIR=$(get_build_dir linux)/arch/${TARGET_KERNEL_ARCH}/boot/dts/ +for dtb in $(find ${LINUX_DTS_DIR} -name "*.dtb"); do + if [ -f $dtb ]; then + cp -a $dtb ${RELEASE_DIR}/3rdparty/bootloader + fi +done diff --git a/projects/Allwinner/bootloader/update.sh b/projects/Allwinner/bootloader/update.sh new file mode 100755 index 000000000..098ae19c6 --- /dev/null +++ b/projects/Allwinner/bootloader/update.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2017-2021 Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +[ -z "$SYSTEM_ROOT" ] && SYSTEM_ROOT="" +[ -z "$BOOT_ROOT" ] && BOOT_ROOT="/flash" +[ -z "$BOOT_PART" ] && BOOT_PART=$(df "$BOOT_ROOT" | tail -1 | awk {' print $1 '}) + +# identify the boot device +if [ -z "$BOOT_DISK" ]; then + case $BOOT_PART in + /dev/mmcblk*) + BOOT_DISK=$(echo $BOOT_PART | sed -e "s,p[0-9]*,,g") + ;; + esac +fi + +# mount $BOOT_ROOT rw +mount -o remount,rw $BOOT_ROOT + +for all_dtb in $BOOT_ROOT/*.dtb; do + dtb=$(basename $all_dtb) + if [ -f $SYSTEM_ROOT/usr/share/bootloader/$dtb ]; then + echo "Updating $dtb..." + cp -p $SYSTEM_ROOT/usr/share/bootloader/$dtb $BOOT_ROOT + fi +done + +if [ -f $BOOT_ROOT/extlinux/extlinux.conf ]; then + if [ -f $SYSTEM_ROOT/usr/share/bootloader/extlinux/extlinux.conf ]; then + echo "Updating extlinux.conf..." + cp -p $SYSTEM_ROOT/usr/share/bootloader/extlinux/extlinux.conf $BOOT_ROOT/extlinux + fi +fi + +# update bootloader +if [ -f $SYSTEM_ROOT/usr/share/bootloader/idbloader.img ]; then + echo -n "Updating u-boot.bin on $BOOT_DISK... " + dd if=$SYSTEM_ROOT/usr/share/bootloader/u-boot-sunxi-with-spl.bin of=$BOOT_DISK bs=1k seek=8 conv=fsync &>/dev/null +fi + +# mount $BOOT_ROOT ro +sync +mount -o remount,ro $BOOT_ROOT + +echo "UPDATE" > /storage/.boot.hint diff --git a/projects/Allwinner/devices/H700/linux/linux.aarch64.conf b/projects/Allwinner/devices/H700/linux/linux.aarch64.conf new file mode 100644 index 000000000..83aa94f38 --- /dev/null +++ b/projects/Allwinner/devices/H700/linux/linux.aarch64.conf @@ -0,0 +1,7212 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm64 6.9.0-rc4 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=120301 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=24100 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=24100 +CONFIG_LLD_VERSION=0 +CONFIG_CC_CAN_LINK=y +CONFIG_CC_CAN_LINK_STATIC=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_PAHOLE_VERSION=0 +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_BUILD_SALT="" +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="H700" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_WATCH_QUEUE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +# CONFIG_USELIB is not set +CONFIG_AUDIT=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y +CONFIG_GENERIC_IRQ_IPI=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_IRQ_MSI_IOMMU=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +# end of IRQ subsystem + +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_CONTEXT_TRACKING=y +CONFIG_CONTEXT_TRACKING_IDLE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +# CONFIG_BPF_JIT_ALWAYS_ON is not set +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_BPF_UNPRIV_DEFAULT_OFF=y +# CONFIG_BPF_PRELOAD is not set +# end of BPF subsystem + +CONFIG_PREEMPT_BUILD=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_PREEMPTION=y +# CONFIG_PREEMPT_DYNAMIC is not set +# CONFIG_SCHED_CORE is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_SCHED_AVG_IRQ=y +CONFIG_SCHED_THERMAL_PRESSURE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +# CONFIG_TASK_DELAY_ACCT is not set +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +# CONFIG_PSI is not set +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_TASKS_RCU=y +CONFIG_TASKS_TRACE_RCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +# end of RCU Subsystem + +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +# CONFIG_IKHEADERS is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +# CONFIG_PRINTK_INDEX is not set +CONFIG_GENERIC_SCHED_CLOCK=y + +# +# Scheduler features +# +# CONFIG_UCLAMP_TASK is not set +# end of Scheduler features + +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_CC_HAS_INT128=y +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_GCC10_NO_ARRAY_BOUNDS=y +CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_CGROUPS=y +CONFIG_PAGE_COUNTER=y +# CONFIG_CGROUP_FAVOR_DYNMODS is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_KMEM=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_SCHED_MM_CID=y +CONFIG_CGROUP_PIDS=y +# CONFIG_CGROUP_RDMA is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +# CONFIG_CGROUP_MISC is not set +# CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_TIME_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +# CONFIG_CHECKPOINT_RESTORE is not set +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="/media/storage/ROCKNIX/rg28xx/packages/virtual/initramfs/config/initramfs.conf /media/storage/ROCKNIX/rg28xx/build.ROCKNIX-H700.aarch64/initramfs" +CONFIG_INITRAMFS_ROOT_UID=0 +CONFIG_INITRAMFS_ROOT_GID=0 +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y +CONFIG_INITRAMFS_COMPRESSION_GZIP=y +# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set +# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set +# CONFIG_INITRAMFS_COMPRESSION_XZ is not set +# CONFIG_INITRAMFS_COMPRESSION_LZO is not set +# CONFIG_INITRAMFS_COMPRESSION_LZ4 is not set +# CONFIG_INITRAMFS_COMPRESSION_ZSTD is not set +# CONFIG_INITRAMFS_COMPRESSION_NONE is not set +# CONFIG_BOOT_CONFIG is not set +CONFIG_INITRAMFS_PRESERVE_MTIME=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_LD_ORPHAN_WARN_LEVEL="warn" +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_MULTIUSER=y +# CONFIG_SGETMASK_SYSCALL is not set +CONFIG_SYSFS_SYSCALL=y +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +CONFIG_ADVISE_SYSCALLS=y +CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_SELFTEST is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_BASE_RELATIVE=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_GUEST_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_PROFILING=y + +# +# Kexec and crash features +# +# CONFIG_KEXEC is not set +# CONFIG_KEXEC_FILE is not set +# end of Kexec and crash features +# end of General setup + +CONFIG_ARM64=y +CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_64BIT=y +CONFIG_MMU=y +CONFIG_ARM64_CONT_PTE_SHIFT=4 +CONFIG_ARM64_CONT_PMD_SHIFT=4 +CONFIG_ARCH_MMAP_RND_BITS_MIN=18 +CONFIG_ARCH_MMAP_RND_BITS_MAX=33 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CSUM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_SMP=y +CONFIG_KERNEL_MODE_NEON=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y + +# +# Platform selection +# +# CONFIG_ARCH_ACTIONS is not set +CONFIG_ARCH_SUNXI=y +# CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_APPLE is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BERLIN is not set +# CONFIG_ARCH_BITMAIN is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_SPARX5 is not set +# CONFIG_ARCH_K3 is not set +# CONFIG_ARCH_LG1K is not set +# CONFIG_ARCH_HISI is not set +# CONFIG_ARCH_KEEMBAY is not set +# CONFIG_ARCH_MEDIATEK is not set +# CONFIG_ARCH_MESON is not set +# CONFIG_ARCH_MVEBU is not set +# CONFIG_ARCH_NXP is not set +# CONFIG_ARCH_MA35 is not set +# CONFIG_ARCH_NPCM is not set +# CONFIG_ARCH_PENSANDO is not set +# CONFIG_ARCH_QCOM is not set +# CONFIG_ARCH_REALTEK is not set +# CONFIG_ARCH_RENESAS is not set +# CONFIG_ARCH_ROCKCHIP is not set +# CONFIG_ARCH_SEATTLE is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set +# CONFIG_ARCH_STM32 is not set +# CONFIG_ARCH_SYNQUACER is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_SPRD is not set +# CONFIG_ARCH_THUNDER is not set +# CONFIG_ARCH_THUNDER2 is not set +# CONFIG_ARCH_UNIPHIER is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_VISCONTI is not set +# CONFIG_ARCH_XGENE is not set +# CONFIG_ARCH_ZYNQMP is not set +# end of Platform selection + +# +# Kernel Features +# + +# +# ARM errata workarounds via the alternatives framework +# +CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y +CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y +CONFIG_ARM64_ERRATUM_826319=y +CONFIG_ARM64_ERRATUM_827319=y +CONFIG_ARM64_ERRATUM_824069=y +CONFIG_ARM64_ERRATUM_819472=y +CONFIG_ARM64_ERRATUM_832075=y +CONFIG_ARM64_ERRATUM_834220=y +CONFIG_ARM64_ERRATUM_1742098=y +CONFIG_ARM64_ERRATUM_845719=y +CONFIG_ARM64_ERRATUM_843419=y +CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y +CONFIG_ARM64_ERRATUM_1024718=y +CONFIG_ARM64_ERRATUM_1418040=y +CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y +CONFIG_ARM64_ERRATUM_1165522=y +CONFIG_ARM64_ERRATUM_1319367=y +CONFIG_ARM64_ERRATUM_1530923=y +CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y +CONFIG_ARM64_ERRATUM_2441007=y +CONFIG_ARM64_ERRATUM_1286807=y +CONFIG_ARM64_ERRATUM_1463225=y +CONFIG_ARM64_ERRATUM_1542419=y +CONFIG_ARM64_ERRATUM_1508412=y +CONFIG_ARM64_ERRATUM_2051678=y +CONFIG_ARM64_ERRATUM_2077057=y +CONFIG_ARM64_ERRATUM_2658417=y +CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE=y +CONFIG_ARM64_ERRATUM_2054223=y +CONFIG_ARM64_ERRATUM_2067961=y +CONFIG_ARM64_ERRATUM_2441009=y +CONFIG_ARM64_ERRATUM_2457168=y +CONFIG_ARM64_ERRATUM_2645198=y +CONFIG_ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD=y +CONFIG_ARM64_ERRATUM_2966298=y +CONFIG_ARM64_ERRATUM_3117295=y +CONFIG_CAVIUM_ERRATUM_22375=y +CONFIG_CAVIUM_ERRATUM_23144=y +CONFIG_CAVIUM_ERRATUM_23154=y +CONFIG_CAVIUM_ERRATUM_27456=y +CONFIG_CAVIUM_ERRATUM_30115=y +CONFIG_CAVIUM_TX2_ERRATUM_219=y +CONFIG_FUJITSU_ERRATUM_010001=y +CONFIG_HISILICON_ERRATUM_161600802=y +CONFIG_QCOM_FALKOR_ERRATUM_1003=y +CONFIG_QCOM_FALKOR_ERRATUM_1009=y +CONFIG_QCOM_QDF2400_ERRATUM_0065=y +CONFIG_QCOM_FALKOR_ERRATUM_E1041=y +CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y +CONFIG_ROCKCHIP_ERRATUM_3588001=y +CONFIG_SOCIONEXT_SYNQUACER_PREITS=y +# end of ARM errata workarounds via the alternatives framework + +CONFIG_ARM64_4K_PAGES=y +# CONFIG_ARM64_16K_PAGES is not set +# CONFIG_ARM64_64K_PAGES is not set +# CONFIG_ARM64_VA_BITS_39 is not set +CONFIG_ARM64_VA_BITS_48=y +# CONFIG_ARM64_VA_BITS_52 is not set +CONFIG_ARM64_VA_BITS=48 +CONFIG_ARM64_PA_BITS_48=y +CONFIG_ARM64_PA_BITS=48 +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_SCHED_MC=y +# CONFIG_SCHED_CLUSTER is not set +CONFIG_SCHED_SMT=y +CONFIG_NR_CPUS=256 +CONFIG_HOTPLUG_CPU=y +CONFIG_NUMA=y +CONFIG_NODES_SHIFT=4 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +CONFIG_HZ_300=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=300 +CONFIG_SCHED_HRTICK=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_CC_HAVE_SHADOW_CALL_STACK=y +CONFIG_PARAVIRT=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_ARCH_SUPPORTS_KEXEC=y +CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG=y +CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y +CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_TRANS_TABLE=y +CONFIG_XEN_DOM0=y +CONFIG_XEN=y +CONFIG_ARCH_FORCE_MAX_ORDER=10 +CONFIG_UNMAP_KERNEL_AT_EL0=y +CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y +CONFIG_RODATA_FULL_DEFAULT_ENABLED=y +# CONFIG_ARM64_SW_TTBR0_PAN is not set +CONFIG_ARM64_TAGGED_ADDR_ABI=y +CONFIG_COMPAT=y +CONFIG_KUSER_HELPERS=y +# CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set +# CONFIG_ARMV8_DEPRECATED is not set + +# +# ARMv8.1 architectural features +# +CONFIG_ARM64_HW_AFDBM=y +CONFIG_ARM64_PAN=y +CONFIG_AS_HAS_LSE_ATOMICS=y +CONFIG_ARM64_LSE_ATOMICS=y +CONFIG_ARM64_USE_LSE_ATOMICS=y +# end of ARMv8.1 architectural features + +# +# ARMv8.2 architectural features +# +CONFIG_AS_HAS_ARMV8_2=y +CONFIG_AS_HAS_SHA3=y +# CONFIG_ARM64_PMEM is not set +CONFIG_ARM64_RAS_EXTN=y +CONFIG_ARM64_CNP=y +# end of ARMv8.2 architectural features + +# +# ARMv8.3 architectural features +# +CONFIG_ARM64_PTR_AUTH=y +CONFIG_ARM64_PTR_AUTH_KERNEL=y +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y +CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y +CONFIG_AS_HAS_ARMV8_3=y +CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y +CONFIG_AS_HAS_LDAPR=y +# end of ARMv8.3 architectural features + +# +# ARMv8.4 architectural features +# +CONFIG_ARM64_AMU_EXTN=y +CONFIG_AS_HAS_ARMV8_4=y +CONFIG_ARM64_TLB_RANGE=y +# end of ARMv8.4 architectural features + +# +# ARMv8.5 architectural features +# +CONFIG_AS_HAS_ARMV8_5=y +CONFIG_ARM64_BTI=y +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y +CONFIG_ARM64_E0PD=y +CONFIG_ARM64_AS_HAS_MTE=y +CONFIG_ARM64_MTE=y +# end of ARMv8.5 architectural features + +# +# ARMv8.7 architectural features +# +CONFIG_ARM64_EPAN=y +# end of ARMv8.7 architectural features + +CONFIG_ARM64_SVE=y +CONFIG_ARM64_SME=y +# CONFIG_ARM64_PSEUDO_NMI is not set +CONFIG_RELOCATABLE=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_RANDOMIZE_MODULE_REGION_FULL=y +CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y +CONFIG_STACKPROTECTOR_PER_TASK=y +CONFIG_ARM64_CONTPTE=y +# end of Kernel Features + +# +# Boot options +# +CONFIG_CMDLINE="" +# CONFIG_EFI is not set +# end of Boot options + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_HIBERNATION_SNAPSHOT_DEV=y +CONFIG_HIBERNATION_COMP_LZO=y +CONFIG_HIBERNATION_DEF_COMP="lzo" +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_GENERIC_DOMAINS_OF=y +CONFIG_CPU_PM=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# end of Power management options + +# +# CPU Power Management +# + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +# CONFIG_CPU_IDLE_GOV_LADDER is not set +CONFIG_CPU_IDLE_GOV_MENU=y +# CONFIG_CPU_IDLE_GOV_TEO is not set +CONFIG_DT_IDLE_STATES=y +CONFIG_DT_IDLE_GENPD=y + +# +# ARM CPU Idle Drivers +# +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y +# end of ARM CPU Idle Drivers +# end of CPU Idle + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_CPUFREQ_DT=y +CONFIG_CPUFREQ_DT_PLATDEV=y +CONFIG_ARM_ALLWINNER_SUN50I_CPUFREQ_NVMEM=y +CONFIG_ARM_SCPI_CPUFREQ=y +CONFIG_ARM_SCMI_CPUFREQ=y +# end of CPU Frequency scaling +# end of CPU Power Management + +CONFIG_KVM_COMMON=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_DIRTY_RING=y +CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y +CONFIG_NEED_KVM_DIRTY_RING_WITH_BITMAP=y +CONFIG_KVM_MMIO=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_READONLY_MEM=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y +CONFIG_KVM_XFER_TO_GUEST_WORK=y +CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y +CONFIG_KVM_GENERIC_MMU_NOTIFIER=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y +# CONFIG_NVHE_EL2_DEBUG is not set + +# +# General architecture-dependent options +# +CONFIG_ARCH_HAS_SUBPAGE_FAULTS=y +CONFIG_HOTPLUG_CORE_SYNC=y +CONFIG_HOTPLUG_CORE_SYNC_DEAD=y +# CONFIG_KPROBES is not set +CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y +CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_IDLE_POLL_SETUP=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_KEEPINITRD=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SET_DIRECT_MAP=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_NO_INSTR=y +CONFIG_HAVE_ASM_MODVERSIONS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y +CONFIG_MMU_GATHER_TABLE_FREE=y +CONFIG_MMU_GATHER_RCU_TABLE_FREE=y +CONFIG_MMU_LAZY_TLB_REFCOUNT=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_ARCH_STACKLEAK=y +CONFIG_HAVE_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y +# CONFIG_SHADOW_CALL_STACK is not set +CONFIG_ARCH_SUPPORTS_LTO_CLANG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y +CONFIG_HAVE_CONTEXT_TRACKING_USER=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOVE_PUD=y +CONFIG_HAVE_MOVE_PMD=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_PMD_MKWRITE=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_ARCH_MMAP_RND_BITS=18 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 +CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_HAVE_ARCH_COMPILER_H=y +CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_RELR=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y +CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +CONFIG_FUNCTION_ALIGNMENT_4B=y +CONFIG_FUNCTION_ALIGNMENT=4 +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_DEBUG is not set +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set +CONFIG_MODVERSIONS=y +CONFIG_ASM_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_CGROUP_RWSTAT=y +CONFIG_BLK_CGROUP_PUNT_BIO=y +CONFIG_BLK_DEV_BSG_COMMON=y +CONFIG_BLK_ICQ=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_INTEGRITY_T10=y +CONFIG_BLK_DEV_WRITE_MOUNTED=y +# CONFIG_BLK_DEV_ZONED is not set +# CONFIG_BLK_DEV_THROTTLING is not set +# CONFIG_BLK_WBT is not set +# CONFIG_BLK_CGROUP_IOLATENCY is not set +# CONFIG_BLK_CGROUP_IOCOST is not set +# CONFIG_BLK_CGROUP_IOPRIO is not set +CONFIG_BLK_DEBUG_FS=y +# CONFIG_BLK_SED_OPAL is not set +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set +# end of Partition Types + +CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_PM=y +CONFIG_BLOCK_HOLDER_DEPRECATED=y +CONFIG_BLK_MQ_STACKING=y + +# +# IO Schedulers +# +CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_KYBER=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_BFQ_CGROUP_DEBUG is not set +# end of IO Schedulers + +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PADATA=y +CONFIG_ASN1=y +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_STATE=y +CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y +CONFIG_ARCH_HAVE_ELF_PROT=y +CONFIG_ARCH_USE_GNU_PROPERTY=y +CONFIG_ELFCORE=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_BINFMT_SCRIPT=y +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y +# end of Executable file formats + +# +# Memory Management options +# +CONFIG_SWAP=y +# CONFIG_ZSWAP is not set + +# +# Slab allocator options +# +CONFIG_SLUB=y +# CONFIG_SLUB_TINY is not set +CONFIG_SLAB_MERGE_DEFAULT=y +# CONFIG_SLAB_FREELIST_RANDOM is not set +# CONFIG_SLAB_FREELIST_HARDENED is not set +# CONFIG_SLUB_STATS is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_RANDOM_KMALLOC_CACHES is not set +# end of Slab allocator options + +# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_HAVE_FAST_GUP=y +CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_NUMA_KEEP_MEMINFO=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_EXCLUSIVE_SYSTEM_RAM=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_HOTPLUG=y +# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MHP_MEMMAP_ON_MEMORY=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 +CONFIG_PAGE_REPORTING=y +CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_PCP_BATCH_SCALE_MAX=5 +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_MEMORY_FAILURE=y +# CONFIG_HWPOISON_INJECT is not set +CONFIG_ARCH_WANTS_THP_SWAP=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y +# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set +CONFIG_THP_SWAP=y +# CONFIG_READ_ONLY_THP_FOR_FS is not set +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMA_SYSFS is not set +CONFIG_CMA_AREAS=19 +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y +CONFIG_ARCH_HAS_PTE_DEVMAP=y +CONFIG_ARCH_HAS_ZONE_DMA_SET=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +# CONFIG_ZONE_DEVICE is not set +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_USES_PG_ARCH_X=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +# CONFIG_DMAPOOL_TEST is not set +CONFIG_ARCH_HAS_PTE_SPECIAL=y +CONFIG_MEMFD_CREATE=y +CONFIG_SECRETMEM=y +# CONFIG_ANON_VMA_NAME is not set +# CONFIG_USERFAULTFD is not set +# CONFIG_LRU_GEN is not set +CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y +CONFIG_PER_VMA_LOCK=y +CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_IOMMU_MM_DATA=y + +# +# Data Access Monitoring +# +# CONFIG_DAMON is not set +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y +CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y +CONFIG_NET_XGRESS=y +CONFIG_SKB_EXTENSIONS=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +CONFIG_AF_UNIX_OOB=y +# CONFIG_UNIX_DIAG is not set +# CONFIG_TLS is not set +# CONFIG_XFRM_USER is not set +# CONFIG_NET_KEY is not set +# CONFIG_XDP_SOCKETS is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_IP_MROUTE is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_NET_IPVTI is not set +# CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +CONFIG_INET_TABLE_PERTURB_ORDER=16 +CONFIG_INET_TUNNEL=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_INET_UDP_DIAG is not set +# CONFIG_INET_RAW_DIAG is not set +# CONFIG_INET_DIAG_DESTROY is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_AO is not set +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_IPV6_ILA is not set +# CONFIG_IPV6_VTI is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_IPV6_SEG6_LWTUNNEL is not set +# CONFIG_IPV6_SEG6_HMAC is not set +# CONFIG_IPV6_RPL_LWTUNNEL is not set +# CONFIG_IPV6_IOAM6_LWTUNNEL is not set +# CONFIG_NETLABEL is not set +# CONFIG_MPTCP is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NET_PTP_CLASSIFY=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_EGRESS=y +CONFIG_NETFILTER_SKIP_EGRESS=y +CONFIG_NETFILTER_FAMILY_BRIDGE=y +CONFIG_NETFILTER_BPF_LINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE is not set +# CONFIG_NETFILTER_NETLINK_LOG is not set +# CONFIG_NETFILTER_NETLINK_OSF is not set +CONFIG_NF_CONNTRACK=y +CONFIG_NF_LOG_SYSLOG=y +# CONFIG_NF_CONNTRACK_MARK is not set +# CONFIG_NF_CONNTRACK_ZONES is not set +# CONFIG_NF_CONNTRACK_PROCFS is not set +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +# CONFIG_NF_CONNTRACK_LABELS is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +# CONFIG_NF_CONNTRACK_AMANDA is not set +# CONFIG_NF_CONNTRACK_FTP is not set +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_SNMP is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +# CONFIG_NF_CONNTRACK_SIP is not set +# CONFIG_NF_CONNTRACK_TFTP is not set +# CONFIG_NF_CT_NETLINK is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_MASQUERADE=y +# CONFIG_NF_TABLES is not set +CONFIG_NETFILTER_XTABLES=y +# CONFIG_NETFILTER_XTABLES_COMPAT is not set + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +# CONFIG_NETFILTER_XT_CONNMARK is not set + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set +# CONFIG_NETFILTER_XT_TARGET_LED is not set +CONFIG_NETFILTER_XT_TARGET_LOG=y +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +CONFIG_NETFILTER_XT_NAT=y +# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set +CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ECN is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +# CONFIG_NETFILTER_XT_MATCH_HL is not set +# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +CONFIG_NETFILTER_XT_MATCH_IPVS=y +# CONFIG_NETFILTER_XT_MATCH_L2TP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set +# CONFIG_NETFILTER_XT_MATCH_STATE is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# end of Core Netfilter Configuration + +# CONFIG_IP_SET is not set +CONFIG_IP_VS=y +# CONFIG_IP_VS_IPV6 is not set +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +# CONFIG_IP_VS_PROTO_TCP is not set +# CONFIG_IP_VS_PROTO_UDP is not set +# CONFIG_IP_VS_PROTO_ESP is not set +# CONFIG_IP_VS_PROTO_AH is not set +# CONFIG_IP_VS_PROTO_SCTP is not set + +# +# IPVS scheduler +# +# CONFIG_IP_VS_RR is not set +# CONFIG_IP_VS_WRR is not set +# CONFIG_IP_VS_LC is not set +# CONFIG_IP_VS_WLC is not set +# CONFIG_IP_VS_FO is not set +# CONFIG_IP_VS_OVF is not set +# CONFIG_IP_VS_LBLC is not set +# CONFIG_IP_VS_LBLCR is not set +# CONFIG_IP_VS_DH is not set +# CONFIG_IP_VS_SH is not set +# CONFIG_IP_VS_MH is not set +# CONFIG_IP_VS_SED is not set +# CONFIG_IP_VS_NQ is not set +# CONFIG_IP_VS_TWOS is not set + +# +# IPVS SH scheduler +# +CONFIG_IP_VS_SH_TAB_BITS=8 + +# +# IPVS MH scheduler +# +CONFIG_IP_VS_MH_TAB_INDEX=12 + +# +# IPVS application helper +# +# CONFIG_IP_VS_NFCT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_IP_NF_IPTABLES_LEGACY=y +# CONFIG_NF_SOCKET_IPV4 is not set +# CONFIG_NF_TPROXY_IPV4 is not set +# CONFIG_NF_DUP_IPV4 is not set +# CONFIG_NF_LOG_ARP is not set +# CONFIG_NF_LOG_IPV4 is not set +CONFIG_NF_REJECT_IPV4=y +CONFIG_IP_NF_IPTABLES=y +# CONFIG_IP_NF_MATCH_AH is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_RPFILTER is not set +# CONFIG_IP_NF_MATCH_TTL is not set +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +# CONFIG_IP_NF_TARGET_SYNPROXY is not set +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +# CONFIG_IP_NF_TARGET_NETMAP is not set +# CONFIG_IP_NF_TARGET_REDIRECT is not set +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_SECURITY is not set +# CONFIG_IP_NF_ARPFILTER is not set +# end of IP: Netfilter Configuration + +# +# IPv6: Netfilter Configuration +# +CONFIG_IP6_NF_IPTABLES_LEGACY=y +# CONFIG_NF_SOCKET_IPV6 is not set +# CONFIG_NF_TPROXY_IPV6 is not set +# CONFIG_NF_DUP_IPV6 is not set +CONFIG_NF_REJECT_IPV6=y +CONFIG_NF_LOG_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_MATCH_SRH is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +# CONFIG_IP6_NF_TARGET_SYNPROXY is not set +CONFIG_IP6_NF_MANGLE=y +# CONFIG_IP6_NF_RAW is not set +# CONFIG_IP6_NF_SECURITY is not set +CONFIG_IP6_NF_NAT=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +# CONFIG_IP6_NF_TARGET_NPT is not set +# end of IPv6: Netfilter Configuration + +CONFIG_NF_DEFRAG_IPV6=y +# CONFIG_NF_CONNTRACK_BRIDGE is not set +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +CONFIG_STP=y +CONFIG_GARP=y +CONFIG_MRP=y +CONFIG_BRIDGE=y +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y +# CONFIG_BRIDGE_MRP is not set +# CONFIG_BRIDGE_CFM is not set +CONFIG_NET_DSA=y +CONFIG_NET_DSA_TAG_NONE=y +# CONFIG_NET_DSA_TAG_AR9331 is not set +CONFIG_NET_DSA_TAG_BRCM_COMMON=y +CONFIG_NET_DSA_TAG_BRCM=y +CONFIG_NET_DSA_TAG_BRCM_LEGACY=y +CONFIG_NET_DSA_TAG_BRCM_PREPEND=y +# CONFIG_NET_DSA_TAG_HELLCREEK is not set +# CONFIG_NET_DSA_TAG_GSWIP is not set +# CONFIG_NET_DSA_TAG_DSA is not set +# CONFIG_NET_DSA_TAG_EDSA is not set +# CONFIG_NET_DSA_TAG_MTK is not set +# CONFIG_NET_DSA_TAG_KSZ is not set +CONFIG_NET_DSA_TAG_OCELOT=y +CONFIG_NET_DSA_TAG_OCELOT_8021Q=y +# CONFIG_NET_DSA_TAG_QCA is not set +# CONFIG_NET_DSA_TAG_RTL4_A is not set +# CONFIG_NET_DSA_TAG_RTL8_4 is not set +# CONFIG_NET_DSA_TAG_RZN1_A5PSW is not set +# CONFIG_NET_DSA_TAG_LAN9303 is not set +# CONFIG_NET_DSA_TAG_SJA1105 is not set +# CONFIG_NET_DSA_TAG_TRAILER is not set +# CONFIG_NET_DSA_TAG_XRS700X is not set +CONFIG_VLAN_8021Q=y +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_LLC=y +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_6LOWPAN is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_HTB is not set +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +CONFIG_NET_SCH_CBS=y +CONFIG_NET_SCH_ETF=y +CONFIG_NET_SCH_MQPRIO_LIB=y +CONFIG_NET_SCH_TAPRIO=y +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +CONFIG_NET_SCH_MQPRIO=y +# CONFIG_NET_SCH_SKBPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_CAKE is not set +# CONFIG_NET_SCH_FQ is not set +# CONFIG_NET_SCH_HHF is not set +# CONFIG_NET_SCH_PIE is not set +CONFIG_NET_SCH_INGRESS=y +# CONFIG_NET_SCH_PLUG is not set +# CONFIG_NET_SCH_ETS is not set +# CONFIG_NET_SCH_DEFAULT is not set + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=y +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +# CONFIG_NET_CLS_U32 is not set +# CONFIG_NET_CLS_FLOW is not set +# CONFIG_NET_CLS_CGROUP is not set +# CONFIG_NET_CLS_BPF is not set +CONFIG_NET_CLS_FLOWER=y +# CONFIG_NET_CLS_MATCHALL is not set +# CONFIG_NET_EMATCH is not set +CONFIG_NET_CLS_ACT=y +# CONFIG_NET_ACT_POLICE is not set +CONFIG_NET_ACT_GACT=y +# CONFIG_GACT_PROB is not set +CONFIG_NET_ACT_MIRRED=y +# CONFIG_NET_ACT_SAMPLE is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_ACT_MPLS is not set +# CONFIG_NET_ACT_VLAN is not set +# CONFIG_NET_ACT_BPF is not set +# CONFIG_NET_ACT_SKBMOD is not set +# CONFIG_NET_ACT_IFE is not set +# CONFIG_NET_ACT_TUNNEL_KEY is not set +CONFIG_NET_ACT_GATE=y +# CONFIG_NET_TC_SKB_EXT is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +# CONFIG_DNS_RESOLVER is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +CONFIG_NET_SWITCHDEV=y +# CONFIG_NET_L3_MASTER_DEV is not set +CONFIG_QRTR=y +CONFIG_QRTR_TUN=y +CONFIG_QRTR_MHI=y +# CONFIG_NET_NCSI is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_MAX_SKB_FRAGS=17 +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +# CONFIG_CGROUP_NET_PRIO is not set +# CONFIG_CGROUP_NET_CLASSID is not set +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +# CONFIG_BPF_STREAM_PARSER is not set +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +CONFIG_BT=y +CONFIG_BT_BREDR=y +# CONFIG_BT_RFCOMM is not set +# CONFIG_BT_BNEP is not set +CONFIG_BT_HIDP=y +# CONFIG_BT_LE is not set +CONFIG_BT_LEDS=y +CONFIG_BT_MSFTEXT=y +CONFIG_BT_AOSPEXT=y +# CONFIG_BT_DEBUGFS is not set +# CONFIG_BT_SELFTEST is not set +# CONFIG_BT_FEATURE_DEBUG is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_RTL=y +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_SERDEV=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_NOKIA is not set +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_ATH3K is not set +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +# CONFIG_BT_HCIUART_INTEL is not set +# CONFIG_BT_HCIUART_BCM is not set +CONFIG_BT_HCIUART_RTL=y +# CONFIG_BT_HCIUART_QCA is not set +# CONFIG_BT_HCIUART_AG6XX is not set +# CONFIG_BT_HCIUART_MRVL is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBCM4377 is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_BT_MRVL is not set +# CONFIG_BT_MTKSDIO is not set +# CONFIG_BT_MTKUART is not set +# CONFIG_BT_VIRTIO is not set +# CONFIG_BT_NXPUART is not set +# end of Bluetooth device drivers + +# CONFIG_AF_RXRPC is not set +# CONFIG_AF_KCM is not set +# CONFIG_MCTP is not set +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +# CONFIG_CFG80211_WEXT is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +# CONFIG_RFKILL_INPUT is not set +# CONFIG_RFKILL_GPIO is not set +CONFIG_NET_9P=y +CONFIG_NET_9P_FD=y +CONFIG_NET_9P_VIRTIO=y +# CONFIG_NET_9P_XEN is not set +# CONFIG_NET_9P_DEBUG is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_NET_SELFTESTS=y +CONFIG_NET_SOCK_MSG=y +CONFIG_NET_DEVLINK=y +CONFIG_PAGE_POOL=y +CONFIG_PAGE_POOL_STATS=y +CONFIG_FAILOVER=y +CONFIG_ETHTOOL_NETLINK=y + +# +# Device Drivers +# +CONFIG_ARM_AMBA=y +CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_DOMAINS_GENERIC=y +CONFIG_PCI_SYSCALL=y +CONFIG_PCIEPORTBUS=y +# CONFIG_HOTPLUG_PCI_PCIE is not set +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y +# CONFIG_PCIE_DPC is not set +# CONFIG_PCIE_PTM is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_PF_STUB is not set +CONFIG_PCI_ATS=y +CONFIG_PCI_ECAM=y +CONFIG_PCI_IOV=y +# CONFIG_PCI_PRI is not set +CONFIG_PCI_PASID=y +# CONFIG_PCI_DYNAMIC_OF_NODES is not set +# CONFIG_PCIE_BUS_TUNE_OFF is not set +CONFIG_PCIE_BUS_DEFAULT=y +# CONFIG_PCIE_BUS_SAFE is not set +# CONFIG_PCIE_BUS_PERFORMANCE is not set +# CONFIG_PCIE_BUS_PEER2PEER is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_HOTPLUG_PCI=y +# CONFIG_HOTPLUG_PCI_CPCI is not set +# CONFIG_HOTPLUG_PCI_SHPC is not set + +# +# PCI controller drivers +# +# CONFIG_PCIE_ALTERA is not set +# CONFIG_PCI_HOST_THUNDER_PEM is not set +# CONFIG_PCI_HOST_THUNDER_ECAM is not set +# CONFIG_PCI_FTPCI100 is not set +CONFIG_PCI_HOST_COMMON=y +CONFIG_PCI_HOST_GENERIC=y +# CONFIG_PCIE_MICROCHIP_HOST is not set +# CONFIG_PCI_XGENE is not set +# CONFIG_PCIE_XILINX is not set + +# +# Cadence-based PCIe controllers +# +# CONFIG_PCIE_CADENCE_PLAT_HOST is not set +# CONFIG_PCIE_CADENCE_PLAT_EP is not set +# end of Cadence-based PCIe controllers + +# +# DesignWare-based PCIe controllers +# +# CONFIG_PCIE_AL is not set +# CONFIG_PCI_MESON is not set +# CONFIG_PCI_HISI is not set +# CONFIG_PCIE_KIRIN is not set +# CONFIG_PCIE_DW_PLAT_HOST is not set +# CONFIG_PCIE_DW_PLAT_EP is not set +# end of DesignWare-based PCIe controllers + +# +# Mobiveil-based PCIe controllers +# +# end of Mobiveil-based PCIe controllers +# end of PCI controller drivers + +# +# PCI Endpoint +# +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +# CONFIG_PCI_EPF_TEST is not set +# CONFIG_PCI_EPF_NTB is not set +# end of PCI Endpoint + +# +# PCI switch controller drivers +# +# CONFIG_PCI_SW_SWITCHTEC is not set +# end of PCI switch controller drivers + +# CONFIG_CXL_BUS is not set +# CONFIG_PCCARD is not set +# CONFIG_RAPIDIO is not set + +# +# Generic Driver Options +# +# CONFIG_UEVENT_HELPER is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_DEVTMPFS_SAFE is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_FW_LOADER_SYSFS=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +# CONFIG_FW_LOADER_COMPRESS is not set +CONFIG_FW_CACHE=y +# CONFIG_FW_UPLOAD is not set +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_SOC_BUS=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_IRQ=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +CONFIG_GENERIC_ARCH_TOPOLOGY=y +CONFIG_GENERIC_ARCH_NUMA=y +# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set +# end of Generic Driver Options + +# +# Bus devices +# +CONFIG_ARM_CCI=y +CONFIG_ARM_CCI400_COMMON=y +# CONFIG_MOXTET is not set +CONFIG_SUN50I_DE2_BUS=y +CONFIG_SUNXI_RSB=y +# CONFIG_VEXPRESS_CONFIG is not set +CONFIG_MHI_BUS=y +# CONFIG_MHI_BUS_DEBUG is not set +# CONFIG_MHI_BUS_PCI_GENERIC is not set +# CONFIG_MHI_BUS_EP is not set +# end of Bus devices + +# +# Cache Drivers +# +# end of Cache Drivers + +# CONFIG_CONNECTOR is not set + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +CONFIG_ARM_SCMI_PROTOCOL=y +# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set +CONFIG_ARM_SCMI_HAVE_TRANSPORT=y +CONFIG_ARM_SCMI_HAVE_SHMEM=y +CONFIG_ARM_SCMI_HAVE_MSG=y +CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y +CONFIG_ARM_SCMI_TRANSPORT_OPTEE=y +CONFIG_ARM_SCMI_TRANSPORT_SMC=y +# CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE is not set +# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set +CONFIG_ARM_SCMI_POWER_CONTROL=y +# end of ARM System Control and Management Interface Protocol + +CONFIG_ARM_SCPI_PROTOCOL=y +# CONFIG_FIRMWARE_MEMMAP is not set +# CONFIG_FW_CFG_SYSFS is not set +CONFIG_ARM_FFA_TRANSPORT=y +CONFIG_ARM_FFA_SMCCC=y +# CONFIG_GOOGLE_FIRMWARE is not set +CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PSCI_CHECKER is not set + +# +# Qualcomm firmware drivers +# +# end of Qualcomm firmware drivers + +CONFIG_HAVE_ARM_SMCCC=y +CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y +CONFIG_ARM_SMCCC_SOC_ID=y + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +# CONFIG_GNSS is not set +CONFIG_MTD=y +# CONFIG_MTD_TESTS is not set + +# +# Partition parsers +# +# CONFIG_MTD_CMDLINE_PARTS is not set +CONFIG_MTD_OF_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# end of Partition parsers + +# +# User Modules And Translation Layers +# +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y + +# +# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. +# +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +# CONFIG_MTD_OOPS is not set +# CONFIG_MTD_SWAP is not set +# CONFIG_MTD_PARTITIONED_MASTER is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# end of RAM/ROM/Flash chip drivers + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_OF=y +# CONFIG_MTD_PHYSMAP_VERSATILE is not set +# CONFIG_MTD_PHYSMAP_GEMINI is not set +# CONFIG_MTD_PLATRAM is not set +# end of Mapping drivers for chip access + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +CONFIG_MTD_DATAFLASH=y +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DATAFLASH_OTP is not set +# CONFIG_MTD_MCHP23K256 is not set +# CONFIG_MTD_MCHP48L640 is not set +CONFIG_MTD_SST25L=y +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +# end of Self-contained MTD device drivers + +# +# NAND +# +CONFIG_MTD_NAND_CORE=y +# CONFIG_MTD_ONENAND is not set +CONFIG_MTD_RAW_NAND=y + +# +# Raw/parallel NAND flash controllers +# +# CONFIG_MTD_NAND_DENALI_PCI is not set +# CONFIG_MTD_NAND_DENALI_DT is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_BRCMNAND is not set +CONFIG_MTD_NAND_SUNXI=y +# CONFIG_MTD_NAND_MXIC is not set +# CONFIG_MTD_NAND_GPIO is not set +CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_NAND_CADENCE is not set +# CONFIG_MTD_NAND_ARASAN is not set +# CONFIG_MTD_NAND_INTEL_LGM is not set + +# +# Misc +# +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_RICOH is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_SPI_NAND=y + +# +# ECC engine support +# +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_ECC_SW_HAMMING=y +CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y +CONFIG_MTD_NAND_ECC_SW_BCH=y +# CONFIG_MTD_NAND_ECC_MXIC is not set +# end of ECC engine support +# end of NAND + +# +# LPDDR & LPDDR2 PCM memory drivers +# +# CONFIG_MTD_LPDDR is not set +# end of LPDDR & LPDDR2 PCM memory drivers + +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set +CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y +# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_MTD_UBI_BLOCK=y +# CONFIG_MTD_UBI_NVMEM is not set +# CONFIG_MTD_HYPERBUS is not set +CONFIG_DTC=y +CONFIG_OF=y +# CONFIG_OF_UNITTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_KOBJ=y +CONFIG_OF_DYNAMIC=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y +CONFIG_OF_NUMA=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set +CONFIG_CDROM=y +# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +# CONFIG_ZRAM is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_DRBD is not set +CONFIG_BLK_DEV_NBD=y +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_VIRTIO_BLK=y +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_BLK_DEV_UBLK is not set + +# +# NVME Support +# +# CONFIG_BLK_DEV_NVME is not set +# CONFIG_NVME_FC is not set +# CONFIG_NVME_TCP is not set +# CONFIG_NVME_TARGET is not set +# end of NVME Support + +# +# Misc devices +# +# CONFIG_AD525X_DPOT is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_PHANTOM is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HI6421V600_IRQ is not set +# CONFIG_HP_ILO is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set +CONFIG_SRAM=y +# CONFIG_DW_XDATA_PCIE is not set +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_XILINX_SDFEC is not set +# CONFIG_HISI_HIKEY_USB is not set +# CONFIG_OPEN_DICE is not set +# CONFIG_VCPU_STALL_DETECTOR is not set +# CONFIG_NSM is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EEPROM_93XX46 is not set +# CONFIG_EEPROM_IDT_89HPESX is not set +# CONFIG_EEPROM_EE1004 is not set +# end of EEPROM support + +# CONFIG_CB710_CORE is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# end of Texas Instruments shared transport line discipline + +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set +# CONFIG_ALTERA_STAPL is not set +# CONFIG_VMWARE_VMCI is not set +# CONFIG_GENWQE is not set +# CONFIG_ECHO is not set +# CONFIG_BCM_VK is not set +# CONFIG_MISC_ALCOR_PCI is not set +# CONFIG_MISC_RTSX_PCI is not set +# CONFIG_MISC_RTSX_USB is not set +# CONFIG_UACCE is not set +# CONFIG_PVPANIC is not set +# CONFIG_GP_PCI1XXXX is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +CONFIG_RAID_ATTRS=y +CONFIG_SCSI_COMMON=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +CONFIG_SCSI_SAS_ATTRS=y +CONFIG_SCSI_SAS_LIBSAS=y +CONFIG_SCSI_SAS_HOST_SMP=y +# CONFIG_SCSI_SRP_ATTRS is not set +# end of SCSI Transports + +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_ISCSI_BOOT_SYSFS is not set +# CONFIG_SCSI_CXGB3_ISCSI is not set +# CONFIG_SCSI_CXGB4_ISCSI is not set +# CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_BE2ISCSI is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_HPSA is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_MVSAS is not set +# CONFIG_SCSI_MVUMI is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_SCSI_ESAS2R is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_MPT3SAS is not set +# CONFIG_SCSI_MPT2SAS is not set +# CONFIG_SCSI_MPI3MR is not set +# CONFIG_SCSI_SMARTPQI is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_MYRB is not set +# CONFIG_SCSI_MYRS is not set +# CONFIG_XEN_SCSI_FRONTEND is not set +# CONFIG_SCSI_SNIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FDOMAIN_PCI is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_WD719X is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_PM8001 is not set +# CONFIG_SCSI_VIRTIO is not set +# CONFIG_SCSI_DH is not set +# end of SCSI device support + +# CONFIG_ATA is not set +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_AUTODETECT=y +CONFIG_MD_BITMAP_FILE=y +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID10 is not set +# CONFIG_MD_RAID456 is not set +# CONFIG_BCACHE is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=y +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_UNSTRIPED is not set +# CONFIG_DM_CRYPT is not set +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_THIN_PROVISIONING is not set +# CONFIG_DM_CACHE is not set +# CONFIG_DM_WRITECACHE is not set +# CONFIG_DM_EBS is not set +# CONFIG_DM_ERA is not set +# CONFIG_DM_CLONE is not set +CONFIG_DM_MIRROR=y +# CONFIG_DM_LOG_USERSPACE is not set +# CONFIG_DM_RAID is not set +CONFIG_DM_ZERO=y +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_DUST is not set +# CONFIG_DM_INIT is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +# CONFIG_DM_VERITY is not set +# CONFIG_DM_SWITCH is not set +# CONFIG_DM_LOG_WRITES is not set +# CONFIG_DM_INTEGRITY is not set +# CONFIG_DM_AUDIT is not set +# CONFIG_DM_VDO is not set +# CONFIG_TARGET_CORE is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_FIREWIRE_NOSY is not set +# end of IEEE 1394 (FireWire) support + +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_WIREGUARD is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_FC is not set +# CONFIG_IFB is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_IPVLAN is not set +# CONFIG_VXLAN is not set +# CONFIG_GENEVE is not set +# CONFIG_BAREUDP is not set +# CONFIG_GTP is not set +# CONFIG_AMT is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_VIRTIO_NET is not set +# CONFIG_NLMON is not set +# CONFIG_NETKIT is not set +# CONFIG_MHI_NET is not set +# CONFIG_ARCNET is not set + +# +# Distributed Switch Architecture drivers +# +# CONFIG_B53 is not set +# CONFIG_NET_DSA_BCM_SF2 is not set +# CONFIG_NET_DSA_LOOP is not set +# CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK is not set +# CONFIG_NET_DSA_LANTIQ_GSWIP is not set +# CONFIG_NET_DSA_MT7530 is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON is not set +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_AR9331 is not set +# CONFIG_NET_DSA_QCA8K is not set +# CONFIG_NET_DSA_SJA1105 is not set +# CONFIG_NET_DSA_XRS700X_I2C is not set +# CONFIG_NET_DSA_XRS700X_MDIO is not set +# CONFIG_NET_DSA_REALTEK is not set +# CONFIG_NET_DSA_SMSC_LAN9303_I2C is not set +# CONFIG_NET_DSA_SMSC_LAN9303_MDIO is not set +# CONFIG_NET_DSA_VITESSE_VSC73XX_SPI is not set +# CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM is not set +# end of Distributed Switch Architecture drivers + +CONFIG_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_AGERE is not set +# CONFIG_NET_VENDOR_ALACRITECH is not set +CONFIG_NET_VENDOR_ALLWINNER=y +CONFIG_SUN4I_EMAC=y +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_ALTERA_TSE is not set +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_AQUANTIA is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ASIX is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CADENCE is not set +# CONFIG_NET_VENDOR_CAVIUM is not set +# CONFIG_NET_VENDOR_CHELSIO is not set +# CONFIG_NET_VENDOR_CISCO is not set +# CONFIG_NET_VENDOR_CORTINA is not set +# CONFIG_NET_VENDOR_DAVICOM is not set +# CONFIG_DNET is not set +# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_ENGLEDER is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_FUNGIBLE is not set +# CONFIG_NET_VENDOR_GOOGLE is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_HUAWEI is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_JME is not set +# CONFIG_NET_VENDOR_ADI is not set +# CONFIG_NET_VENDOR_LITEX is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_MICROSEMI is not set +# CONFIG_NET_VENDOR_MICROSOFT is not set +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_FEALNX is not set +# CONFIG_NET_VENDOR_NI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NETERION is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI is not set +# CONFIG_ETHOC is not set +# CONFIG_NET_VENDOR_PACKET_ENGINES is not set +# CONFIG_NET_VENDOR_PENSANDO is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +# CONFIG_NET_VENDOR_BROCADE is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_REALTEK is not set +# CONFIG_NET_VENDOR_RENESAS is not set +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_NET_VENDOR_SOLARFLARE is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_SOCIONEXT is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VERTEXCOM is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WANGXUN is not set +# CONFIG_NET_VENDOR_WIZNET is not set +# CONFIG_NET_VENDOR_XILINX is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PHYLINK=y +CONFIG_PHYLIB=y +CONFIG_SWPHY=y +# CONFIG_LED_TRIGGER_PHY is not set +CONFIG_PHYLIB_LEDS=y +CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set + +# +# MII PHY device drivers +# +# CONFIG_AMD_PHY is not set +# CONFIG_ADIN_PHY is not set +# CONFIG_ADIN1100_PHY is not set +# CONFIG_AQUANTIA_PHY is not set +CONFIG_AX88796B_PHY=y +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_BCM84881_PHY is not set +# CONFIG_BCM87XX_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_CORTINA_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_INTEL_XWAY_PHY is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_MARVELL_PHY is not set +# CONFIG_MARVELL_10G_PHY is not set +# CONFIG_MARVELL_88Q2XXX_PHY is not set +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +# CONFIG_MICREL_PHY is not set +# CONFIG_MICROCHIP_T1S_PHY is not set +# CONFIG_MICROCHIP_PHY is not set +# CONFIG_MICROCHIP_T1_PHY is not set +# CONFIG_MICROSEMI_PHY is not set +# CONFIG_MOTORCOMM_PHY is not set +# CONFIG_NATIONAL_PHY is not set +# CONFIG_NXP_CBTX_PHY is not set +# CONFIG_NXP_C45_TJA11XX_PHY is not set +# CONFIG_NXP_TJA11XX_PHY is not set +# CONFIG_NCN26000_PHY is not set +# CONFIG_AT803X_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QCA807X_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_RENESAS_PHY is not set +# CONFIG_ROCKCHIP_PHY is not set +CONFIG_SMSC_PHY=y +# CONFIG_STE10XP is not set +# CONFIG_TERANETICS_PHY is not set +# CONFIG_DP83822_PHY is not set +# CONFIG_DP83TC811_PHY is not set +# CONFIG_DP83848_PHY is not set +# CONFIG_DP83867_PHY is not set +# CONFIG_DP83869_PHY is not set +# CONFIG_DP83TD510_PHY is not set +# CONFIG_DP83TG720_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_XILINX_GMII2RGMII is not set +# CONFIG_MICREL_KS8995MA is not set +# CONFIG_PSE_CONTROLLER is not set +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_BUS=y +CONFIG_FWNODE_MDIO=y +CONFIG_OF_MDIO=y +CONFIG_MDIO_DEVRES=y +CONFIG_MDIO_SUN4I=y +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +# CONFIG_MDIO_HISI_FEMAC is not set +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_MSCC_MIIM is not set +# CONFIG_MDIO_OCTEON is not set +# CONFIG_MDIO_IPQ4019 is not set +# CONFIG_MDIO_IPQ8064 is not set +# CONFIG_MDIO_THUNDER is not set + +# +# MDIO Multiplexers +# +CONFIG_MDIO_BUS_MUX=y +# CONFIG_MDIO_BUS_MUX_GPIO is not set +CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y +CONFIG_MDIO_BUS_MUX_MMIOREG=y + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +CONFIG_USB_NET_DRIVERS=m +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +# CONFIG_USB_LAN78XX is not set +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_CDC_EEM is not set +CONFIG_USB_NET_CDC_NCM=m +# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set +CONFIG_USB_NET_CDC_MBIM=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SR9700 is not set +# CONFIG_USB_NET_SR9800 is not set +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +# CONFIG_USB_NET_GL620A is not set +# CONFIG_USB_NET_NET1080 is not set +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +CONFIG_USB_NET_RNDIS_HOST=m +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +# CONFIG_USB_NET_CX82310_ETH is not set +# CONFIG_USB_NET_KALMIA is not set +# CONFIG_USB_NET_QMI_WWAN is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_USB_SIERRA_NET is not set +# CONFIG_USB_VL600 is not set +# CONFIG_USB_NET_CH9200 is not set +# CONFIG_USB_NET_AQC111 is not set +CONFIG_USB_RTL8153_ECM=m +CONFIG_WLAN=y +# CONFIG_WLAN_VENDOR_ADMTEK is not set +CONFIG_ATH_COMMON=m +CONFIG_WLAN_VENDOR_ATH=y +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K=m +# CONFIG_ATH9K_AHB is not set +# CONFIG_ATH9K_DYNACK is not set +# CONFIG_ATH9K_WOW is not set +CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_CHANNEL_CONTEXT=y +CONFIG_ATH9K_PCOEM=y +CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set +CONFIG_ATH9K_HWRNG=y +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +CONFIG_CARL9170_WPC=y +CONFIG_CARL9170_HWRNG=y +CONFIG_ATH6KL=m +# CONFIG_ATH6KL_SDIO is not set +CONFIG_ATH6KL_USB=m +# CONFIG_ATH6KL_DEBUG is not set +CONFIG_AR5523=m +CONFIG_ATH10K=m +CONFIG_ATH10K_CE=y +# CONFIG_ATH10K_SDIO is not set +CONFIG_ATH10K_USB=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set +# CONFIG_ATH11K is not set +CONFIG_WLAN_VENDOR_ATMEL=y +CONFIG_AT76C50X_USB=m +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_B43=m +CONFIG_B43_BCMA=y +CONFIG_B43_SSB=y +CONFIG_B43_BUSES_BCMA_AND_SSB=y +# CONFIG_B43_BUSES_BCMA is not set +# CONFIG_B43_BUSES_SSB is not set +# CONFIG_B43_SDIO is not set +CONFIG_B43_BCMA_PIO=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_G=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +# CONFIG_B43LEGACY is not set +CONFIG_BRCMUTIL=m +# CONFIG_BRCMSMAC is not set +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set +CONFIG_WLAN_VENDOR_INTEL=y +CONFIG_WLAN_VENDOR_INTERSIL=y +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +# CONFIG_P54_SPI is not set +CONFIG_P54_LEDS=y +CONFIG_WLAN_VENDOR_MARVELL=y +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_SDIO is not set +# CONFIG_LIBERTAS_SPI is not set +# CONFIG_LIBERTAS_DEBUG is not set +# CONFIG_LIBERTAS_MESH is not set +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_MWIFIEX=m +# CONFIG_MWIFIEX_SDIO is not set +CONFIG_MWIFIEX_USB=m +CONFIG_WLAN_VENDOR_MEDIATEK=y +CONFIG_MT7601U=m +CONFIG_MT76_CORE=m +CONFIG_MT76_LEDS=y +CONFIG_MT76_USB=m +CONFIG_MT76_SDIO=m +CONFIG_MT76x02_LIB=m +CONFIG_MT76x02_USB=m +CONFIG_MT76_CONNAC_LIB=m +CONFIG_MT76x0_COMMON=m +CONFIG_MT76x0U=m +CONFIG_MT76x2_COMMON=m +CONFIG_MT76x2U=m +CONFIG_MT7615_COMMON=m +CONFIG_MT7663_USB_SDIO_COMMON=m +CONFIG_MT7663U=m +CONFIG_MT7663S=m +# CONFIG_MT7921S is not set +# CONFIG_MT7921U is not set +# CONFIG_MT7925U is not set +CONFIG_WLAN_VENDOR_MICROCHIP=y +# CONFIG_WILC1000_SDIO is not set +# CONFIG_WILC1000_SPI is not set +CONFIG_WLAN_VENDOR_PURELIFI=y +# CONFIG_PLFXLC is not set +CONFIG_WLAN_VENDOR_RALINK=y +CONFIG_RT2X00=m +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WLAN_VENDOR_REALTEK=y +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8XXXU=m +# CONFIG_RTL8XXXU_UNTESTED is not set +CONFIG_RTW88=m +# CONFIG_RTW88_8822BS is not set +# CONFIG_RTW88_8822BU is not set +# CONFIG_RTW88_8822CS is not set +# CONFIG_RTW88_8822CU is not set +# CONFIG_RTW88_8723DS is not set +# CONFIG_RTW88_8723DU is not set +# CONFIG_RTW88_8821CS is not set +# CONFIG_RTW88_8821CU is not set +CONFIG_RTW89=m +CONFIG_WLAN_VENDOR_RSI=y +# CONFIG_RSI_91X is not set +CONFIG_WLAN_VENDOR_SILABS=y +# CONFIG_WFX is not set +CONFIG_WLAN_VENDOR_ST=y +# CONFIG_CW1200 is not set +CONFIG_WLAN_VENDOR_TI=y +# CONFIG_WL1251 is not set +CONFIG_WL12XX=m +CONFIG_WL18XX=m +CONFIG_WLCORE=m +# CONFIG_WLCORE_SPI is not set +# CONFIG_WLCORE_SDIO is not set +# CONFIG_WLAN_VENDOR_ZYDAS is not set +CONFIG_WLAN_VENDOR_QUANTENNA=y +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_VIRT_WIFI is not set +# CONFIG_WAN is not set + +# +# Wireless WAN +# +# CONFIG_WWAN is not set +# end of Wireless WAN + +# CONFIG_XEN_NETDEV_FRONTEND is not set +# CONFIG_VMXNET3 is not set +# CONFIG_NETDEVSIM is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_MATRIXKMAP=y +CONFIG_INPUT_VIVALDIFMAP=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ADC=y +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ADP5589 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1050 is not set +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_DLINK_DIR685 is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_PINEPHONE is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_SUN4I_LRADC is not set +# CONFIG_KEYBOARD_OMAP4 is not set +# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_CAP11XX is not set +# CONFIG_KEYBOARD_BCM is not set +# CONFIG_KEYBOARD_CYPRESS_SF is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_FOCALTECH=y +CONFIG_MOUSE_PS2_SMBUS=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_CYAPA is not set +# CONFIG_MOUSE_ELAN_I2C is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +# CONFIG_MOUSE_SYNAPTICS_USB is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +CONFIG_JOYSTICK_ADC=y +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_AS5011 is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +# CONFIG_JOYSTICK_XPAD is not set +# CONFIG_JOYSTICK_PSXPAD_SPI is not set +# CONFIG_JOYSTICK_PXRC is not set +# CONFIG_JOYSTICK_QWIIC is not set +# CONFIG_JOYSTICK_FSIA6B is not set +# CONFIG_JOYSTICK_SENSEHAT is not set +# CONFIG_JOYSTICK_SEESAW is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_ATMEL_CAPTOUCH is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_GPIO_BEEPER is not set +# CONFIG_INPUT_GPIO_DECODER is not set +# CONFIG_INPUT_GPIO_VIBRA is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +# CONFIG_INPUT_REGULATOR_HAPTIC is not set +CONFIG_INPUT_AXP20X_PEK=y +# CONFIG_INPUT_UINPUT is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +CONFIG_INPUT_PWM_VIBRA=y +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_DA7280_HAPTICS is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IBM_PANEL is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_IQS269A is not set +# CONFIG_INPUT_IQS626A is not set +# CONFIG_INPUT_IQS7222 is not set +# CONFIG_INPUT_CMA3000 is not set +# CONFIG_INPUT_XEN_KBDDEV_FRONTEND is not set +# CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set +# CONFIG_INPUT_DRV2667_HAPTICS is not set +# CONFIG_RMI4_CORE is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +# CONFIG_SERIO_APBPS2 is not set +# CONFIG_SERIO_SUN4I_PS2 is not set +# CONFIG_SERIO_GPIO_PS2 is not set +# CONFIG_USERIO is not set +# CONFIG_GAMEPORT is not set +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_LEGACY_TIOCSTI=y +CONFIG_LDISC_AUTOLOAD=y + +# +# Serial drivers +# +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y +CONFIG_SERIAL_8250_16550A_VARIANTS=y +# CONFIG_SERIAL_8250_FINTEK is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCILIB=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_EXAR=y +CONFIG_SERIAL_8250_NR_UARTS=8 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_PCI1XXXX is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_RSA is not set +CONFIG_SERIAL_8250_DWLIB=y +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_8250_DW=y +# CONFIG_SERIAL_8250_RT288X is not set +CONFIG_SERIAL_8250_PERICOM=y +CONFIG_SERIAL_OF_PLATFORM=y + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_AMBA_PL010 is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +# CONFIG_SERIAL_EARLYCON_SEMIHOST is not set +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_SIFIVE is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +# CONFIG_SERIAL_ARC is not set +# CONFIG_SERIAL_RP2 is not set +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +CONFIG_SERIAL_FSL_LINFLEXUART=y +CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y +# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_MCTRL_GPIO=y +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set +# CONFIG_NULL_TTY is not set +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +# CONFIG_HVC_DCC is not set +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +# CONFIG_TTY_PRINTK is not set +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_IPMI_HANDLER is not set +# CONFIG_SSIF_IPMI_BMC is not set +# CONFIG_IPMB_DEVICE_INTERFACE is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_BA431 is not set +# CONFIG_HW_RANDOM_VIRTIO is not set +CONFIG_HW_RANDOM_OPTEE=y +# CONFIG_HW_RANDOM_CCTRNG is not set +# CONFIG_HW_RANDOM_XIPHERA is not set +CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=y +# CONFIG_HW_RANDOM_CN10K is not set +# CONFIG_APPLICOM is not set +CONFIG_DEVMEM=y +CONFIG_DEVPORT=y +# CONFIG_TCG_TPM is not set +# CONFIG_XILLYBUS is not set +# CONFIG_XILLYUSB is not set +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_GPMUX is not set +# CONFIG_I2C_MUX_LTC4306 is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set +# CONFIG_I2C_MUX_PINCTRL is not set +# CONFIG_I2C_MUX_REG is not set +# CONFIG_I2C_DEMUX_PINCTRL is not set +# CONFIG_I2C_MUX_MLXCPLD is not set +# end of Multiplexer I2C Chip support + +CONFIG_I2C_HELPER_AUTO=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_NVIDIA_GPU is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CADENCE is not set +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_DESIGNWARE_PCI is not set +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_HISI is not set +CONFIG_I2C_MV64XXX=y +# CONFIG_I2C_NOMADIK is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_RK3X is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_THUNDERX is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_CP2615 is not set +# CONFIG_I2C_PCI1XXXX is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +# CONFIG_I2C_STUB is not set +CONFIG_I2C_SLAVE=y +# CONFIG_I2C_SLAVE_EEPROM is not set +# CONFIG_I2C_SLAVE_TESTUNIT is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +# CONFIG_I3C is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y +CONFIG_SPI_MEM=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_AXI_SPI_ENGINE is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPI_CADENCE_QUADSPI is not set +# CONFIG_SPI_CADENCE_XSPI is not set +# CONFIG_SPI_DESIGNWARE is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_MICROCHIP_CORE is not set +# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PCI1XXXX is not set +# CONFIG_SPI_PL022 is not set +# CONFIG_SPI_PXA2XX is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_SIFIVE is not set +# CONFIG_SPI_SN_F_OSPI is not set +# CONFIG_SPI_SUN4I is not set +CONFIG_SPI_SUN6I=y +# CONFIG_SPI_MXIC is not set +# CONFIG_SPI_THUNDERX is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set +# CONFIG_SPI_AMD is not set + +# +# SPI Multiplexer support +# +# CONFIG_SPI_MUX is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_LOOPBACK_TEST is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_SPI_SLAVE is not set +CONFIG_SPI_DYNAMIC=y +CONFIG_SPMI=y +# CONFIG_SPMI_HISI3670 is not set +# CONFIG_HSI is not set +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +CONFIG_PTP_1588_CLOCK_KVM=y +# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set +# CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_FC3W is not set +# CONFIG_PTP_1588_CLOCK_MOCK is not set +# CONFIG_PTP_1588_CLOCK_OCP is not set +# end of PTP clock support + +CONFIG_PINCTRL=y +CONFIG_GENERIC_PINCTRL_GROUPS=y +CONFIG_PINMUX=y +CONFIG_GENERIC_PINMUX_FUNCTIONS=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AXP209 is not set +# CONFIG_PINCTRL_AW9523 is not set +# CONFIG_PINCTRL_CY8C95X0 is not set +# CONFIG_PINCTRL_MCP23S08 is not set +# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set +# CONFIG_PINCTRL_OCELOT is not set +CONFIG_PINCTRL_SINGLE=y +# CONFIG_PINCTRL_STMFX is not set +# CONFIG_PINCTRL_SX150X is not set + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_PINCTRL_SUNXI=y +# CONFIG_PINCTRL_SUN4I_A10 is not set +# CONFIG_PINCTRL_SUN5I is not set +# CONFIG_PINCTRL_SUN6I_A31 is not set +# CONFIG_PINCTRL_SUN6I_A31_R is not set +# CONFIG_PINCTRL_SUN8I_A23 is not set +# CONFIG_PINCTRL_SUN8I_A33 is not set +# CONFIG_PINCTRL_SUN8I_A83T is not set +# CONFIG_PINCTRL_SUN8I_A83T_R is not set +# CONFIG_PINCTRL_SUN8I_A23_R is not set +# CONFIG_PINCTRL_SUN8I_H3 is not set +# CONFIG_PINCTRL_SUN8I_H3_R is not set +# CONFIG_PINCTRL_SUN8I_V3S is not set +# CONFIG_PINCTRL_SUN9I_A80 is not set +# CONFIG_PINCTRL_SUN9I_A80_R is not set +# CONFIG_PINCTRL_SUN20I_D1 is not set +# CONFIG_PINCTRL_SUN50I_A64 is not set +# CONFIG_PINCTRL_SUN50I_A64_R is not set +# CONFIG_PINCTRL_SUN50I_A100 is not set +# CONFIG_PINCTRL_SUN50I_A100_R is not set +# CONFIG_PINCTRL_SUN50I_H5 is not set +# CONFIG_PINCTRL_SUN50I_H6 is not set +# CONFIG_PINCTRL_SUN50I_H6_R is not set +CONFIG_PINCTRL_SUN50I_H616=y +CONFIG_PINCTRL_SUN50I_H616_R=y +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_FASTPATH_LIMIT=512 +CONFIG_OF_GPIO=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y +CONFIG_GPIO_GENERIC=y + +# +# Memory mapped GPIO drivers +# +# CONFIG_GPIO_74XX_MMIO is not set +# CONFIG_GPIO_ALTERA is not set +# CONFIG_GPIO_CADENCE is not set +# CONFIG_GPIO_DWAPB is not set +# CONFIG_GPIO_EXAR is not set +# CONFIG_GPIO_FTGPIO010 is not set +CONFIG_GPIO_GENERIC_PLATFORM=y +# CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_HISI is not set +# CONFIG_GPIO_HLWD is not set +# CONFIG_GPIO_LOGICVC is not set +# CONFIG_GPIO_MB86S7X is not set +# CONFIG_GPIO_PL061 is not set +# CONFIG_GPIO_SIFIVE is not set +CONFIG_GPIO_SYSCON=y +# CONFIG_GPIO_XGENE is not set +# CONFIG_GPIO_XILINX is not set +# CONFIG_GPIO_AMD_FCH is not set +# end of Memory mapped GPIO drivers + +# +# I2C GPIO expanders +# +# CONFIG_GPIO_ADNP is not set +# CONFIG_GPIO_FXL6408 is not set +# CONFIG_GPIO_DS4520 is not set +# CONFIG_GPIO_GW_PLD is not set +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCA9570 is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_TPIC2810 is not set +# end of I2C GPIO expanders + +# +# MFD GPIO expanders +# +# end of MFD GPIO expanders + +# +# PCI GPIO expanders +# +# CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_PCI_IDIO_16 is not set +# CONFIG_GPIO_PCIE_IDIO_24 is not set +# CONFIG_GPIO_RDC321X is not set +# end of PCI GPIO expanders + +# +# SPI GPIO expanders +# +# CONFIG_GPIO_74X164 is not set +# CONFIG_GPIO_MAX3191X is not set +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_PISOSR is not set +# CONFIG_GPIO_XRA1403 is not set +# end of SPI GPIO expanders + +# +# USB GPIO expanders +# +# end of USB GPIO expanders + +# +# Virtual GPIO drivers +# +# CONFIG_GPIO_AGGREGATOR is not set +# CONFIG_GPIO_LATCH is not set +# CONFIG_GPIO_MOCKUP is not set +# CONFIG_GPIO_VIRTIO is not set +# CONFIG_GPIO_SIM is not set +# end of Virtual GPIO drivers + +# CONFIG_W1 is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +# CONFIG_POWER_RESET_GPIO_RESTART is not set +# CONFIG_POWER_RESET_LTC2952 is not set +# CONFIG_POWER_RESET_REGULATOR is not set +# CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_XGENE is not set +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_REBOOT_MODE=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_NVMEM_REBOOT_MODE=y +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_POWER_SUPPLY_HWMON=y +# CONFIG_GENERIC_ADC_BATTERY is not set +# CONFIG_IP5XXX_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_CHARGER_ADP5061 is not set +# CONFIG_BATTERY_CW2015 is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SAMSUNG_SDI is not set +# CONFIG_BATTERY_SBS is not set +# CONFIG_CHARGER_SBS is not set +# CONFIG_MANAGER_SBS is not set +# CONFIG_BATTERY_BQ27XXX is not set +# CONFIG_CHARGER_AXP20X is not set +# CONFIG_BATTERY_AXP20X is not set +CONFIG_AXP20X_POWER=y +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_LT3651 is not set +# CONFIG_CHARGER_LTC4162L is not set +# CONFIG_CHARGER_DETECTOR_MAX14656 is not set +# CONFIG_CHARGER_MAX77976 is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24257 is not set +# CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ2515X is not set +# CONFIG_CHARGER_BQ25890 is not set +# CONFIG_CHARGER_BQ25980 is not set +# CONFIG_CHARGER_BQ256XX is not set +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_GOLDFISH is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_CHARGER_RT9455 is not set +# CONFIG_CHARGER_RT9467 is not set +# CONFIG_CHARGER_RT9471 is not set +# CONFIG_CHARGER_UCS1002 is not set +# CONFIG_CHARGER_BD99954 is not set +# CONFIG_BATTERY_UG3105 is not set +# CONFIG_FUEL_GAUGE_MM8013 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_AD7314 is not set +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM1177 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7310 is not set +# CONFIG_SENSORS_ADT7410 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_AHT10 is not set +# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set +# CONFIG_SENSORS_AS370 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +CONFIG_SENSORS_ARM_SCMI=y +CONFIG_SENSORS_ARM_SCPI=y +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set +# CONFIG_SENSORS_CORSAIR_CPRO is not set +# CONFIG_SENSORS_CORSAIR_PSU is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_GPIO_FAN is not set +# CONFIG_SENSORS_HIH6130 is not set +# CONFIG_SENSORS_HS3001 is not set +# CONFIG_SENSORS_IIO_HWMON is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_POWERZ is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2947_SPI is not set +# CONFIG_SENSORS_LTC2990 is not set +# CONFIG_SENSORS_LTC2991 is not set +# CONFIG_SENSORS_LTC2992 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4222 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4260 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX127 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX31722 is not set +# CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX31760 is not set +# CONFIG_MAX31827 is not set +# CONFIG_SENSORS_MAX6620 is not set +# CONFIG_SENSORS_MAX6621 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6642 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MAX31790 is not set +# CONFIG_SENSORS_MC34VR500 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_TC654 is not set +# CONFIG_SENSORS_TPS23861 is not set +# CONFIG_SENSORS_MR75203 is not set +# CONFIG_SENSORS_ADCXX is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM73 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_LM95234 is not set +# CONFIG_SENSORS_LM95241 is not set +# CONFIG_SENSORS_LM95245 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_NCT6683 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NCT6775_I2C is not set +# CONFIG_SENSORS_NCT7802 is not set +# CONFIG_SENSORS_NCT7904 is not set +# CONFIG_SENSORS_NPCM7XX is not set +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set +# CONFIG_SENSORS_NZXT_SMART2 is not set +# CONFIG_SENSORS_OCC_P8_I2C is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set +# CONFIG_SENSORS_PWM_FAN is not set +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SBRMI is not set +# CONFIG_SENSORS_SHT15 is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SHT3x is not set +# CONFIG_SENSORS_SHT4x is not set +# CONFIG_SENSORS_SHTC1 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC2305 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_STTS751 is not set +# CONFIG_SENSORS_ADC128D818 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_ADS7871 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_INA238 is not set +# CONFIG_SENSORS_INA3221 is not set +# CONFIG_SENSORS_TC74 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_SENSORS_TMP108 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_TMP464 is not set +# CONFIG_SENSORS_TMP513 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83773G is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +CONFIG_THERMAL=y +# CONFIG_THERMAL_NETLINK is not set +# CONFIG_THERMAL_STATISTICS is not set +# CONFIG_THERMAL_DEBUGFS is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_CPU_THERMAL=y +CONFIG_CPU_FREQ_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_THERMAL_EMULATION=y +CONFIG_THERMAL_MMIO=y +CONFIG_SUN8I_THERMAL=y +CONFIG_GENERIC_ADC_THERMAL=y +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +# CONFIG_WATCHDOG_SYSFS is not set +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set + +# +# Watchdog Pretimeout Governors +# +# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_GPIO_WATCHDOG is not set +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_XILINX_WINDOW_WATCHDOG is not set +# CONFIG_ZIIRAVE_WATCHDOG is not set +# CONFIG_ARM_SP805_WATCHDOG is not set +# CONFIG_ARM_SBSA_WATCHDOG is not set +# CONFIG_CADENCE_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +CONFIG_SUNXI_WATCHDOG=y +# CONFIG_MAX63XX_WATCHDOG is not set +# CONFIG_ARM_SMC_WATCHDOG is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_I6300ESB_WDT is not set +# CONFIG_HP_WATCHDOG is not set +# CONFIG_MEN_A21_WDT is not set +# CONFIG_XEN_WDT is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_ACT8945A is not set +# CONFIG_MFD_SUN4I_GPADC is not set +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_SMPRO is not set +# CONFIG_MFD_AS3722 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_FLEXCOM is not set +# CONFIG_MFD_ATMEL_HLCDC is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_BD9571MWV is not set +# CONFIG_MFD_AC100 is not set +CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X_I2C=y +CONFIG_MFD_AXP20X_RSB=y +# CONFIG_MFD_CS42L43_I2C is not set +# CONFIG_MFD_MADERA is not set +# CONFIG_MFD_MAX5970 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_GATEWORKS_GSC is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set +# CONFIG_MFD_HI6421_PMIC is not set +# CONFIG_MFD_HI6421_SPMI is not set +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH is not set +# CONFIG_MFD_IQS62X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77541 is not set +# CONFIG_MFD_MAX77620 is not set +# CONFIG_MFD_MAX77650 is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77714 is not set +# CONFIG_MFD_MAX77843 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_OCELOT is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_MFD_CPCAP is not set +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_NTXEC is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_SY7636A is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_RT4831 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_RK8XX_I2C is not set +# CONFIG_MFD_RK8XX_SPI is not set +# CONFIG_MFD_RN5T618 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SUN6I_PRCM is not set +CONFIG_MFD_SYSCON=y +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65086 is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TPS65217 is not set +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TI_LP87565 is not set +# CONFIG_MFD_TPS65218 is not set +# CONFIG_MFD_TPS65219 is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS6594_I2C is not set +# CONFIG_MFD_TPS6594_SPI is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_MFD_LOCHNAGAR is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_ROHM_BD718XX is not set +# CONFIG_MFD_ROHM_BD71828 is not set +# CONFIG_MFD_ROHM_BD957XMUF is not set +# CONFIG_MFD_STPMIC1 is not set +# CONFIG_MFD_STMFX is not set +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_QCOM_PM8008 is not set +# CONFIG_RAVE_SP_CORE is not set +# CONFIG_MFD_INTEL_M10_BMC_SPI is not set +# CONFIG_MFD_RSMU_I2C is not set +# CONFIG_MFD_RSMU_SPI is not set +# end of Multifunction device drivers + +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_NETLINK_EVENTS is not set +# CONFIG_REGULATOR_88PG86X is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_REGULATOR_ARM_SCMI=y +# CONFIG_REGULATOR_AW37503 is not set +CONFIG_REGULATOR_AXP20X=y +# CONFIG_REGULATOR_DA9121 is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_FAN53880 is not set +CONFIG_REGULATOR_GPIO=y +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_LTC3676 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX77503 is not set +# CONFIG_REGULATOR_MAX77857 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8893 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MAX20086 is not set +# CONFIG_REGULATOR_MAX20411 is not set +# CONFIG_REGULATOR_MAX77826 is not set +# CONFIG_REGULATOR_MCP16502 is not set +# CONFIG_REGULATOR_MP5416 is not set +# CONFIG_REGULATOR_MP8859 is not set +# CONFIG_REGULATOR_MP886X is not set +# CONFIG_REGULATOR_MPQ7920 is not set +# CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_MT6315 is not set +# CONFIG_REGULATOR_PCA9450 is not set +# CONFIG_REGULATOR_PF8X00 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_PV88060 is not set +# CONFIG_REGULATOR_PV88080 is not set +# CONFIG_REGULATOR_PV88090 is not set +# CONFIG_REGULATOR_PWM is not set +# CONFIG_REGULATOR_QCOM_SPMI is not set +# CONFIG_REGULATOR_QCOM_USB_VBUS is not set +# CONFIG_REGULATOR_RAA215300 is not set +# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set +# CONFIG_REGULATOR_RT4801 is not set +# CONFIG_REGULATOR_RT4803 is not set +# CONFIG_REGULATOR_RT5190A is not set +# CONFIG_REGULATOR_RT5739 is not set +# CONFIG_REGULATOR_RT5759 is not set +# CONFIG_REGULATOR_RT6160 is not set +# CONFIG_REGULATOR_RT6190 is not set +# CONFIG_REGULATOR_RT6245 is not set +# CONFIG_REGULATOR_RTQ2134 is not set +# CONFIG_REGULATOR_RTMV20 is not set +# CONFIG_REGULATOR_RTQ6752 is not set +# CONFIG_REGULATOR_RTQ2208 is not set +# CONFIG_REGULATOR_SLG51000 is not set +# CONFIG_REGULATOR_SY8106A is not set +# CONFIG_REGULATOR_SY8824X is not set +# CONFIG_REGULATOR_SY8827N is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS6286X is not set +# CONFIG_REGULATOR_TPS6287X is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS65132 is not set +# CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_REGULATOR_VCTRL is not set +# CONFIG_REGULATOR_QCOM_LABIBB is not set +# CONFIG_RC_CORE is not set +CONFIG_CEC_CORE=y +CONFIG_CEC_NOTIFIER=y +CONFIG_CEC_PIN=y + +# +# CEC support +# +# CONFIG_CEC_PIN_ERROR_INJ is not set +CONFIG_MEDIA_CEC_SUPPORT=y +# CONFIG_CEC_CH7322 is not set +CONFIG_CEC_GPIO=y +# CONFIG_USB_PULSE8_CEC is not set +# CONFIG_USB_RAINSHADOW_CEC is not set +# end of CEC support + +CONFIG_MEDIA_SUPPORT=y +# CONFIG_MEDIA_SUPPORT_FILTER is not set +# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set + +# +# Media device types +# +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 +# end of Media device types + +# +# Media core support +# +CONFIG_VIDEO_DEV=y +CONFIG_MEDIA_CONTROLLER=y +# CONFIG_DVB_CORE is not set +# end of Media core support + +# +# Video4Linux options +# +CONFIG_VIDEO_V4L2_I2C=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_V4L2_MEM2MEM_DEV=y +CONFIG_V4L2_FWNODE=y +CONFIG_V4L2_ASYNC=y +# end of Video4Linux options + +# +# Media controller options +# +# end of Media controller options + +# +# Media drivers +# + +# +# Media drivers +# +# CONFIG_MEDIA_USB_SUPPORT is not set +# CONFIG_MEDIA_PCI_SUPPORT is not set +# CONFIG_RADIO_ADAPTERS is not set +CONFIG_MEDIA_PLATFORM_DRIVERS=y +CONFIG_V4L_PLATFORM_DRIVERS=y +# CONFIG_SDR_PLATFORM_DRIVERS is not set +# CONFIG_DVB_PLATFORM_DRIVERS is not set +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_MEM2MEM_DEINTERLACE=y +CONFIG_VIDEO_MUX=y + +# +# Allegro DVT media platform drivers +# + +# +# Amlogic media platform drivers +# + +# +# Amphion drivers +# + +# +# Aspeed media platform drivers +# + +# +# Atmel media platform drivers +# + +# +# Cadence media platform drivers +# +# CONFIG_VIDEO_CADENCE_CSI2RX is not set +# CONFIG_VIDEO_CADENCE_CSI2TX is not set + +# +# Chips&Media media platform drivers +# + +# +# Intel media platform drivers +# + +# +# Marvell media platform drivers +# +# CONFIG_VIDEO_CAFE_CCIC is not set + +# +# Mediatek media platform drivers +# + +# +# Microchip Technology, Inc. media platform drivers +# + +# +# Nuvoton media platform drivers +# + +# +# NVidia media platform drivers +# + +# +# NXP media platform drivers +# + +# +# Qualcomm media platform drivers +# + +# +# Renesas media platform drivers +# + +# +# Rockchip media platform drivers +# + +# +# Samsung media platform drivers +# + +# +# STMicroelectronics media platform drivers +# + +# +# Sunxi media platform drivers +# +# CONFIG_VIDEO_SUN4I_CSI is not set +# CONFIG_VIDEO_SUN6I_CSI is not set +# CONFIG_VIDEO_SUN6I_MIPI_CSI2 is not set +# CONFIG_VIDEO_SUN8I_A83T_MIPI_CSI2 is not set +CONFIG_VIDEO_SUN8I_DEINTERLACE=y +CONFIG_VIDEO_SUN8I_ROTATE=y + +# +# Texas Instruments drivers +# + +# +# Verisilicon media platform drivers +# +# CONFIG_VIDEO_HANTRO is not set + +# +# VIA media platform drivers +# + +# +# Xilinx media platform drivers +# +# CONFIG_VIDEO_XILINX is not set +# CONFIG_V4L_TEST_DRIVERS is not set +CONFIG_UVC_COMMON=y +CONFIG_VIDEOBUF2_CORE=y +CONFIG_VIDEOBUF2_V4L2=y +CONFIG_VIDEOBUF2_MEMOPS=y +CONFIG_VIDEOBUF2_DMA_CONTIG=y +CONFIG_VIDEOBUF2_VMALLOC=y +CONFIG_VIDEOBUF2_DMA_SG=y +# end of Media drivers + +# +# Media ancillary drivers +# +CONFIG_MEDIA_ATTACH=y +# CONFIG_VIDEO_CAMERA_SENSOR is not set + +# +# Camera ISPs +# +# CONFIG_VIDEO_THP7312 is not set +# end of Camera ISPs + +# +# Lens drivers +# +# CONFIG_VIDEO_AD5820 is not set +# CONFIG_VIDEO_AK7375 is not set +# CONFIG_VIDEO_DW9714 is not set +# CONFIG_VIDEO_DW9719 is not set +# CONFIG_VIDEO_DW9768 is not set +# CONFIG_VIDEO_DW9807_VCM is not set +# end of Lens drivers + +# +# Flash devices +# +# CONFIG_VIDEO_ADP1653 is not set +# CONFIG_VIDEO_LM3560 is not set +# CONFIG_VIDEO_LM3646 is not set +# end of Flash devices + +# +# Audio decoders, processors and mixers +# +# CONFIG_VIDEO_CS3308 is not set +# CONFIG_VIDEO_CS5345 is not set +# CONFIG_VIDEO_CS53L32A is not set +# CONFIG_VIDEO_MSP3400 is not set +# CONFIG_VIDEO_SONY_BTF_MPX is not set +# CONFIG_VIDEO_TDA7432 is not set +# CONFIG_VIDEO_TDA9840 is not set +# CONFIG_VIDEO_TEA6415C is not set +# CONFIG_VIDEO_TEA6420 is not set +# CONFIG_VIDEO_TLV320AIC23B is not set +# CONFIG_VIDEO_TVAUDIO is not set +# CONFIG_VIDEO_UDA1342 is not set +# CONFIG_VIDEO_VP27SMPX is not set +# CONFIG_VIDEO_WM8739 is not set +# CONFIG_VIDEO_WM8775 is not set +# end of Audio decoders, processors and mixers + +# +# RDS decoders +# +# CONFIG_VIDEO_SAA6588 is not set +# end of RDS decoders + +# +# Video decoders +# +# CONFIG_VIDEO_ADV7180 is not set +# CONFIG_VIDEO_ADV7183 is not set +# CONFIG_VIDEO_ADV748X is not set +# CONFIG_VIDEO_ADV7604 is not set +# CONFIG_VIDEO_ADV7842 is not set +# CONFIG_VIDEO_BT819 is not set +# CONFIG_VIDEO_BT856 is not set +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_ISL7998X is not set +# CONFIG_VIDEO_KS0127 is not set +# CONFIG_VIDEO_MAX9286 is not set +# CONFIG_VIDEO_ML86V7667 is not set +# CONFIG_VIDEO_SAA7110 is not set +# CONFIG_VIDEO_SAA711X is not set +# CONFIG_VIDEO_TC358743 is not set +# CONFIG_VIDEO_TC358746 is not set +# CONFIG_VIDEO_TVP514X is not set +# CONFIG_VIDEO_TVP5150 is not set +# CONFIG_VIDEO_TVP7002 is not set +# CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9900 is not set +# CONFIG_VIDEO_TW9903 is not set +# CONFIG_VIDEO_TW9906 is not set +# CONFIG_VIDEO_TW9910 is not set +# CONFIG_VIDEO_VPX3220 is not set + +# +# Video and audio decoders +# +# CONFIG_VIDEO_SAA717X is not set +# CONFIG_VIDEO_CX25840 is not set +# end of Video decoders + +# +# Video encoders +# +# CONFIG_VIDEO_ADV7170 is not set +# CONFIG_VIDEO_ADV7175 is not set +# CONFIG_VIDEO_ADV7343 is not set +# CONFIG_VIDEO_ADV7393 is not set +# CONFIG_VIDEO_ADV7511 is not set +# CONFIG_VIDEO_AK881X is not set +# CONFIG_VIDEO_SAA7127 is not set +# CONFIG_VIDEO_SAA7185 is not set +# CONFIG_VIDEO_THS8200 is not set +# end of Video encoders + +# +# Video improvement chips +# +# CONFIG_VIDEO_UPD64031A is not set +# CONFIG_VIDEO_UPD64083 is not set +# end of Video improvement chips + +# +# Audio/Video compression chips +# +# CONFIG_VIDEO_SAA6752HS is not set +# end of Audio/Video compression chips + +# +# SDR tuner chips +# +# CONFIG_SDR_MAX2175 is not set +# end of SDR tuner chips + +# +# Miscellaneous helper chips +# +# CONFIG_VIDEO_I2C is not set +# CONFIG_VIDEO_M52790 is not set +# CONFIG_VIDEO_ST_MIPID02 is not set +# CONFIG_VIDEO_THS7303 is not set +# end of Miscellaneous helper chips + +# +# Video serializers and deserializers +# +# CONFIG_VIDEO_DS90UB913 is not set +# CONFIG_VIDEO_DS90UB953 is not set +# CONFIG_VIDEO_DS90UB960 is not set +# end of Video serializers and deserializers + +# +# Media SPI Adapters +# +# CONFIG_VIDEO_GS1662 is not set +# end of Media SPI Adapters + +CONFIG_MEDIA_TUNER=y + +# +# Customize TV tuners +# +# CONFIG_MEDIA_TUNER_E4000 is not set +# CONFIG_MEDIA_TUNER_FC0011 is not set +# CONFIG_MEDIA_TUNER_FC0012 is not set +# CONFIG_MEDIA_TUNER_FC0013 is not set +# CONFIG_MEDIA_TUNER_FC2580 is not set +# CONFIG_MEDIA_TUNER_IT913X is not set +# CONFIG_MEDIA_TUNER_M88RS6000T is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MSI001 is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2063 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MXL301RF is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set +# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_R820T is not set +# CONFIG_MEDIA_TUNER_SI2157 is not set +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA18212 is not set +# CONFIG_MEDIA_TUNER_TDA18218 is not set +# CONFIG_MEDIA_TUNER_TDA18250 is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_TUA9001 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC4000 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# end of Customize TV tuners + +# +# Customise DVB Frontends +# +# end of Customise DVB Frontends + +# +# Tools to develop new frontends +# +# end of Media ancillary drivers + +# +# Graphics support +# +CONFIG_VIDEO=y +# CONFIG_AUXDISPLAY is not set +CONFIG_DRM=y +CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_DEBUG_MM is not set +CONFIG_DRM_KMS_HELPER=y +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +CONFIG_DRM_DISPLAY_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_HELPER=y +# CONFIG_DRM_DP_AUX_CHARDEV is not set +# CONFIG_DRM_DP_CEC is not set +CONFIG_DRM_GEM_DMA_HELPER=y +CONFIG_DRM_GEM_SHMEM_HELPER=y +CONFIG_DRM_SCHED=y + +# +# I2C encoder or helper chips +# +# CONFIG_DRM_I2C_CH7006 is not set +# CONFIG_DRM_I2C_SIL164 is not set +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_I2C_NXP_TDA9950 is not set +# end of I2C encoder or helper chips + +# +# ARM devices +# +# CONFIG_DRM_HDLCD is not set +# CONFIG_DRM_MALI_DISPLAY is not set +# CONFIG_DRM_KOMEDA is not set +# end of ARM devices + +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_AMDGPU is not set +# CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_XE is not set +# CONFIG_DRM_VGEM is not set +# CONFIG_DRM_VKMS is not set +# CONFIG_DRM_VMWGFX is not set +# CONFIG_DRM_UDL is not set +# CONFIG_DRM_AST is not set +# CONFIG_DRM_MGAG200 is not set +CONFIG_DRM_SUN4I=y +CONFIG_DRM_SUN6I_DSI=y +CONFIG_DRM_SUN8I_DW_HDMI=y +CONFIG_DRM_SUN8I_MIXER=y +CONFIG_DRM_SUN8I_TCON_TOP=y +# CONFIG_DRM_QXL is not set +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set +# CONFIG_DRM_PANEL_ARM_VERSATILE is not set +# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set +# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set +# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set +# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set +# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set +# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set +# CONFIG_DRM_PANEL_EBBG_FT8719 is not set +# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set +# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set +# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set +# CONFIG_DRM_PANEL_DSI_CM is not set +# CONFIG_DRM_PANEL_LVDS is not set +# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set +# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set +# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set +# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set +# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set +# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set +# CONFIG_DRM_PANEL_JDI_LPM102A188A is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set +# CONFIG_DRM_PANEL_JDI_R63452 is not set +# CONFIG_DRM_PANEL_KHADAS_TS050 is not set +# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set +# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set +# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set +# CONFIG_DRM_PANEL_LG_LB035Q02 is not set +# CONFIG_DRM_PANEL_LG_LG4573 is not set +# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set +# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set +# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set +# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set +# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set +# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set +# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set +# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set +# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set +# CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set +# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set +# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set +# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set +# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set +# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set +# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set +# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set +# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set +# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set +# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set +# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set +# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set +# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set +# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set +# CONFIG_DRM_PANEL_EDP is not set +CONFIG_DRM_PANEL_SIMPLE=y +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set +# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set +# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set +# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_DRM_PANEL_TPO_TPG110 is not set +# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set +# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set +# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set +# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set +# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_CHIPONE_ICN6211 is not set +# CONFIG_DRM_CHRONTEL_CH7033 is not set +CONFIG_DRM_DISPLAY_CONNECTOR=y +# CONFIG_DRM_ITE_IT6505 is not set +# CONFIG_DRM_LONTIUM_LT8912B is not set +# CONFIG_DRM_LONTIUM_LT9211 is not set +# CONFIG_DRM_LONTIUM_LT9611 is not set +# CONFIG_DRM_LONTIUM_LT9611UXC is not set +# CONFIG_DRM_ITE_IT66121 is not set +# CONFIG_DRM_LVDS_CODEC is not set +# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set +# CONFIG_DRM_NWL_MIPI_DSI is not set +# CONFIG_DRM_NXP_PTN3460 is not set +# CONFIG_DRM_PARADE_PS8622 is not set +# CONFIG_DRM_PARADE_PS8640 is not set +# CONFIG_DRM_SAMSUNG_DSIM is not set +# CONFIG_DRM_SIL_SII8620 is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_SII9234 is not set +CONFIG_DRM_SIMPLE_BRIDGE=y +# CONFIG_DRM_THINE_THC63LVD1024 is not set +# CONFIG_DRM_TOSHIBA_TC358762 is not set +# CONFIG_DRM_TOSHIBA_TC358764 is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_TOSHIBA_TC358768 is not set +# CONFIG_DRM_TOSHIBA_TC358775 is not set +# CONFIG_DRM_TI_DLPC3433 is not set +# CONFIG_DRM_TI_TFP410 is not set +# CONFIG_DRM_TI_SN65DSI83 is not set +# CONFIG_DRM_TI_SN65DSI86 is not set +# CONFIG_DRM_TI_TPD12S015 is not set +# CONFIG_DRM_ANALOGIX_ANX6345 is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# CONFIG_DRM_ANALOGIX_ANX7625 is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_CDNS_DSI is not set +# CONFIG_DRM_CDNS_MHDP8546 is not set +CONFIG_DRM_DW_HDMI=y +# CONFIG_DRM_DW_HDMI_CEC is not set +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_HISI_HIBMC is not set +# CONFIG_DRM_HISI_KIRIN is not set +# CONFIG_DRM_LOGICVC is not set +# CONFIG_DRM_ARCPGU is not set +# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_PANEL_MIPI_DBI is not set +# CONFIG_DRM_SIMPLEDRM is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9163 is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_ILI9486 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_ST7586 is not set +# CONFIG_TINYDRM_ST7735R is not set +# CONFIG_DRM_PL111 is not set +# CONFIG_DRM_XEN_FRONTEND is not set +# CONFIG_DRM_LIMA is not set +CONFIG_DRM_PANFROST=y +# CONFIG_DRM_TIDSS is not set +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_SSD130X is not set +# CONFIG_DRM_POWERVR is not set +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y + +# +# Frame buffer Devices +# +CONFIG_FB=y +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I740 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_XEN_FBDEV_FRONTEND=y +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_SIMPLE is not set +# CONFIG_FB_SSD1307 is not set +# CONFIG_FB_SM712 is not set +CONFIG_FB_CORE=y +CONFIG_FB_NOTIFY=y +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB_DEVICE=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYSMEM_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_DMAMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set +# CONFIG_BACKLIGHT_KTZ8866 is not set +CONFIG_BACKLIGHT_PWM=y +# CONFIG_BACKLIGHT_QCOM_WLED is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_MP3309C is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +CONFIG_BACKLIGHT_LED=y +# end of Backlight & LCD device support + +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_HDMI=y + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set +# end of Console display driver support + +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y +# end of Graphics support + +# CONFIG_DRM_ACCEL is not set +# CONFIG_SOUND is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +# CONFIG_HIDRAW is not set +# CONFIG_UHID is not set +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACCUTOUCH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_ASUS is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_BETOP_FF is not set +# CONFIG_HID_BIGBEN_FF is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_CORSAIR is not set +# CONFIG_HID_COUGAR is not set +# CONFIG_HID_MACALLY is not set +# CONFIG_HID_CMEDIA is not set +# CONFIG_HID_CREATIVE_SB0540 is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELAN is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set +# CONFIG_HID_EVISION is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set +# CONFIG_HID_GLORIOUS is not set +# CONFIG_HID_HOLTEK is not set +# CONFIG_HID_GOOGLE_STADIA_FF is not set +# CONFIG_HID_VIVALDI is not set +# CONFIG_HID_GT683R is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_VIEWSONIC is not set +# CONFIG_HID_VRC2 is not set +# CONFIG_HID_XIAOMI is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_ITE is not set +# CONFIG_HID_JABRA is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LED is not set +# CONFIG_HID_LENOVO is not set +# CONFIG_HID_LETSKETCH is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MALTRON is not set +# CONFIG_HID_MAYFLASH is not set +# CONFIG_HID_MEGAWORLD_FF is not set +# CONFIG_HID_REDRAGON is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NINTENDO is not set +# CONFIG_HID_NTI is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_NVIDIA_SHIELD is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PENMOUNT is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PLANTRONICS is not set +# CONFIG_HID_PLAYSTATION is not set +# CONFIG_HID_PXRC is not set +# CONFIG_HID_RAZER is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_RETRODE is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SEMITEK is not set +# CONFIG_HID_SIGMAMICRO is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEAM is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_RMI is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_TOPRE is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_UDRAW_PS3 is not set +# CONFIG_HID_U2FZERO is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set +# CONFIG_HID_ALPS is not set +# CONFIG_HID_MCP2200 is not set +# CONFIG_HID_MCP2221 is not set +# end of Special HID drivers + +# +# HID-BPF support +# +# end of HID-BPF support + +# +# USB HID support +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set +# end of USB HID support + +# CONFIG_I2C_HID is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +# CONFIG_USB_LED_TRIG is not set +CONFIG_USB_ULPI_BUS=y +CONFIG_USB_CONN_GPIO=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_PCI=y +# CONFIG_USB_PCI_AMD is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +CONFIG_USB_FEW_INIT_RETRIES=y +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +# CONFIG_USB_OTG_FSM is not set +# CONFIG_USB_LEDS_TRIGGER_USBPORT is not set +CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 +CONFIG_USB_MON=y + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +# CONFIG_USB_EHCI_FSL is not set +CONFIG_USB_EHCI_HCD_PLATFORM=y +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_MAX3421_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_TEST_MODE is not set +# CONFIG_USB_XEN_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +CONFIG_USB_UAS=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USBIP_CORE is not set + +# +# USB dual-mode controller drivers +# +# CONFIG_USB_CDNS_SUPPORT is not set +CONFIG_USB_MUSB_HDRC=y +# CONFIG_USB_MUSB_HOST is not set +# CONFIG_USB_MUSB_GADGET is not set +CONFIG_USB_MUSB_DUAL_ROLE=y + +# +# Platform Glue Layer +# +CONFIG_USB_MUSB_SUNXI=y + +# +# MUSB DMA mode +# +# CONFIG_MUSB_PIO_ONLY is not set +# CONFIG_USB_DWC3 is not set +# CONFIG_USB_DWC2 is not set +# CONFIG_USB_CHIPIDEA is not set +# CONFIG_USB_ISP1760 is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_APPLE_MFI_FASTCHARGE is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HUB_USB251XB is not set +# CONFIG_USB_HSIC_USB3503 is not set +# CONFIG_USB_HSIC_USB4604 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set +# CONFIG_USB_ONBOARD_HUB is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +CONFIG_NOP_USB_XCEIV=y +# CONFIG_USB_ISP1301 is not set +CONFIG_USB_ULPI=y +CONFIG_USB_ULPI_VIEWPORT=y +# end of USB Physical Layer drivers + +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +# CONFIG_U_SERIAL_CONSOLE is not set + +# +# USB Peripheral Controller +# +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set +CONFIG_USB_SNP_CORE=y +CONFIG_USB_SNP_UDC_PLAT=y +# CONFIG_USB_M66592 is not set +CONFIG_USB_BDC_UDC=y +# CONFIG_USB_AMD5536UDC is not set +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_NET2280 is not set +# CONFIG_USB_GOKU is not set +# CONFIG_USB_EG20T is not set +# CONFIG_USB_GADGET_XILINX is not set +# CONFIG_USB_MAX3420_UDC is not set +# CONFIG_USB_DUMMY_HCD is not set +# end of USB Peripheral Controller + +CONFIG_USB_LIBCOMPOSITE=y +CONFIG_USB_F_ACM=y +CONFIG_USB_U_SERIAL=y +CONFIG_USB_U_ETHER=y +CONFIG_USB_F_SERIAL=y +CONFIG_USB_F_OBEX=y +CONFIG_USB_F_NCM=y +CONFIG_USB_F_ECM=y +CONFIG_USB_F_EEM=y +CONFIG_USB_F_SUBSET=y +CONFIG_USB_F_RNDIS=y +CONFIG_USB_F_MASS_STORAGE=y +CONFIG_USB_F_FS=y +CONFIG_USB_F_UVC=y +CONFIG_USB_F_HID=y +CONFIG_USB_F_PRINTER=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +# CONFIG_USB_CONFIGFS_F_LB_SS is not set +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_CONFIGFS_F_PRINTER=y + +# +# USB Gadget precomposed configurations +# +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_ETH_EEM=y +CONFIG_USB_G_NCM=y +CONFIG_USB_GADGETFS=y +CONFIG_USB_FUNCTIONFS=y +# CONFIG_USB_FUNCTIONFS_ETH is not set +# CONFIG_USB_FUNCTIONFS_RNDIS is not set +CONFIG_USB_FUNCTIONFS_GENERIC=y +CONFIG_USB_MASS_STORAGE=y +CONFIG_USB_G_SERIAL=y +CONFIG_USB_G_PRINTER=y +CONFIG_USB_CDC_COMPOSITE=y +CONFIG_USB_G_ACM_MS=y +CONFIG_USB_G_MULTI=y +CONFIG_USB_G_MULTI_RNDIS=y +CONFIG_USB_G_MULTI_CDC=y +CONFIG_USB_G_HID=y +# CONFIG_USB_G_DBGP is not set +CONFIG_USB_G_WEBCAM=y +CONFIG_USB_RAW_GADGET=y +# end of USB Gadget precomposed configurations + +CONFIG_TYPEC=y +CONFIG_TYPEC_TCPM=y +CONFIG_TYPEC_TCPCI=y +# CONFIG_TYPEC_RT1711H is not set +# CONFIG_TYPEC_TCPCI_MAXIM is not set +# CONFIG_TYPEC_FUSB302 is not set +CONFIG_TYPEC_UCSI=y +# CONFIG_UCSI_CCG is not set +# CONFIG_UCSI_STM32G0 is not set +# CONFIG_TYPEC_TPS6598X is not set +# CONFIG_TYPEC_ANX7411 is not set +# CONFIG_TYPEC_RT1719 is not set +# CONFIG_TYPEC_HD3SS3220 is not set +# CONFIG_TYPEC_STUSB160X is not set +# CONFIG_TYPEC_WUSB3801 is not set + +# +# USB Type-C Multiplexer/DeMultiplexer Switch support +# +# CONFIG_TYPEC_MUX_FSA4480 is not set +CONFIG_TYPEC_MUX_GPIO_SBU=y +# CONFIG_TYPEC_MUX_PI3USB30532 is not set +# CONFIG_TYPEC_MUX_IT5205 is not set +# CONFIG_TYPEC_MUX_NB7VPQ904M is not set +# CONFIG_TYPEC_MUX_PTN36502 is not set +# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set +# end of USB Type-C Multiplexer/DeMultiplexer Switch support + +# +# USB Type-C Alternate Mode drivers +# +# CONFIG_TYPEC_DP_ALTMODE is not set +# end of USB Type-C Alternate Mode drivers + +CONFIG_USB_ROLE_SWITCH=y +CONFIG_MMC=y +CONFIG_PWRSEQ_EMMC=y +CONFIG_PWRSEQ_SIMPLE=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=32 +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_STM32_SDMMC=y +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_TIFM_SD is not set +# CONFIG_MMC_SPI is not set +# CONFIG_MMC_CB710 is not set +# CONFIG_MMC_VIA_SDMMC is not set +# CONFIG_MMC_DW is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MMC_USDHI6ROL0 is not set +CONFIG_MMC_SUNXI=y +CONFIG_MMC_CQHCI=y +CONFIG_MMC_HSQ=y +# CONFIG_MMC_TOSHIBA_PCI is not set +# CONFIG_MMC_MTK is not set +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +# CONFIG_LEDS_CLASS_FLASH is not set +CONFIG_LEDS_CLASS_MULTICOLOR=y +# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set + +# +# LED drivers +# +# CONFIG_LEDS_AN30259A is not set +# CONFIG_LEDS_AW200XX is not set +# CONFIG_LEDS_AW2013 is not set +# CONFIG_LEDS_BCM6328 is not set +# CONFIG_LEDS_BCM6358 is not set +# CONFIG_LEDS_CR0014114 is not set +# CONFIG_LEDS_EL15203000 is not set +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_LM3692X is not set +CONFIG_LEDS_SUN50I_A100=y +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=y +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP3952 is not set +# CONFIG_LEDS_LP50XX is not set +# CONFIG_LEDS_LP55XX_COMMON is not set +# CONFIG_LEDS_LP8860 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA995X is not set +# CONFIG_LEDS_DAC124S085 is not set +CONFIG_LEDS_PWM=y +CONFIG_LEDS_REGULATOR=y +# CONFIG_LEDS_BD2606MVV is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_IS31FL319X is not set +# CONFIG_LEDS_IS31FL32XX is not set + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +# CONFIG_LEDS_BLINKM is not set +CONFIG_LEDS_SYSCON=y +# CONFIG_LEDS_MLXREG is not set +CONFIG_LEDS_USER=y +# CONFIG_LEDS_SPI_BYTE is not set +# CONFIG_LEDS_LM3697 is not set + +# +# Flash and Torch LED drivers +# + +# +# RGB LED drivers +# +# CONFIG_LEDS_GROUP_MULTICOLOR is not set +# CONFIG_LEDS_KTD202X is not set +# CONFIG_LEDS_NCP5623 is not set +# CONFIG_LEDS_PWM_MULTICOLOR is not set +# CONFIG_LEDS_QCOM_LPG is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +# CONFIG_LEDS_TRIGGER_MTD is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_ACTIVITY=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_CAMERA=y +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_LEDS_TRIGGER_NETDEV=y +CONFIG_LEDS_TRIGGER_PATTERN=y +CONFIG_LEDS_TRIGGER_AUDIO=y +CONFIG_LEDS_TRIGGER_TTY=y + +# +# Simple LED drivers +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_EDAC_SUPPORT=y +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set +# CONFIG_RTC_DRV_ABX80X is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_HYM8563 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set +# CONFIG_RTC_DRV_NCT3018Y is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_ISL12026 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_PCF85363 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8010 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set +# CONFIG_RTC_DRV_EM3027 is not set +# CONFIG_RTC_DRV_RV3028 is not set +# CONFIG_RTC_DRV_RV3032 is not set +# CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_SD3078 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1302 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1343 is not set +# CONFIG_RTC_DRV_DS1347 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6916 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RX4581 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +# CONFIG_RTC_DRV_MCP795 is not set +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_PCF2127 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set +# CONFIG_RTC_DRV_RX6110 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_OPTEE is not set +# CONFIG_RTC_DRV_ZYNQMP is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_PL030 is not set +# CONFIG_RTC_DRV_PL031 is not set +CONFIG_RTC_DRV_SUN6I=y +# CONFIG_RTC_DRV_CADENCE is not set +# CONFIG_RTC_DRV_FTRTC010 is not set +# CONFIG_RTC_DRV_R7301 is not set + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_GOLDFISH is not set +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y +# CONFIG_ALTERA_MSGDMA is not set +# CONFIG_AMBA_PL08X is not set +# CONFIG_BCM_SBA_RAID is not set +CONFIG_DMA_SUN6I=y +# CONFIG_DW_AXI_DMAC is not set +# CONFIG_FSL_EDMA is not set +# CONFIG_FSL_QDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_MV_XOR_V2 is not set +CONFIG_PL330_DMA=y +# CONFIG_PLX_DMA is not set +# CONFIG_XILINX_DMA is not set +# CONFIG_XILINX_XDMA is not set +# CONFIG_XILINX_ZYNQMP_DMA is not set +# CONFIG_XILINX_ZYNQMP_DPDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +# CONFIG_DW_DMAC is not set +# CONFIG_DW_DMAC_PCI is not set +# CONFIG_DW_EDMA is not set +# CONFIG_SF_PDMA is not set + +# +# DMA Clients +# +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +CONFIG_SW_SYNC=y +CONFIG_UDMABUF=y +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +CONFIG_DMABUF_HEAPS=y +# CONFIG_DMABUF_SYSFS_STATS is not set +CONFIG_DMABUF_HEAPS_SYSTEM=y +CONFIG_DMABUF_HEAPS_CMA=y +# end of DMABUF options + +# CONFIG_UIO is not set +# CONFIG_VFIO is not set +CONFIG_IRQ_BYPASS_MANAGER=y +# CONFIG_VIRT_DRIVERS is not set +CONFIG_VIRTIO_ANCHOR=y +CONFIG_VIRTIO=y +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set +# CONFIG_VHOST_MENU is not set + +# +# Microsoft Hyper-V guest support +# +# end of Microsoft Hyper-V guest support + +# +# Xen driver support +# +# CONFIG_XEN_BALLOON is not set +# CONFIG_XEN_DEV_EVTCHN is not set +# CONFIG_XEN_BACKEND is not set +# CONFIG_XENFS is not set +# CONFIG_XEN_SYS_HYPERVISOR is not set +CONFIG_XEN_XENBUS_FRONTEND=y +# CONFIG_XEN_GNTDEV is not set +# CONFIG_XEN_GRANT_DEV_ALLOC is not set +# CONFIG_XEN_GRANT_DMA_ALLOC is not set +CONFIG_SWIOTLB_XEN=y +# CONFIG_XEN_PVCALLS_FRONTEND is not set +# CONFIG_XEN_PRIVCMD is not set +CONFIG_XEN_AUTO_XLATE=y +# CONFIG_XEN_VIRTIO is not set +# end of Xen driver support + +# CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set +CONFIG_STAGING=y +# CONFIG_PRISM2_USB is not set +# CONFIG_RTLLIB is not set +# CONFIG_RTL8723BS is not set +# CONFIG_R8712U is not set +# CONFIG_RTS5208 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set + +# +# IIO staging drivers +# + +# +# Accelerometers +# +# CONFIG_ADIS16203 is not set +# CONFIG_ADIS16240 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD7816 is not set +# end of Analog to digital converters + +# +# Analog digital bi-direction converters +# +# CONFIG_ADT7316 is not set +# end of Analog digital bi-direction converters + +# +# Direct Digital Synthesis +# +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# end of Direct Digital Synthesis + +# +# Network Analyzer, Impedance Converters +# +# CONFIG_AD5933 is not set +# end of Network Analyzer, Impedance Converters +# end of IIO staging drivers + +# CONFIG_FB_SM750 is not set +CONFIG_STAGING_MEDIA=y +# CONFIG_VIDEO_MAX96712 is not set + +# +# StarFive media platform drivers +# +CONFIG_VIDEO_SUNXI=y +CONFIG_VIDEO_SUNXI_CEDRUS=y +CONFIG_VIDEO_SUN6I_ISP=y +# CONFIG_STAGING_MEDIA_DEPRECATED is not set +# CONFIG_LTE_GDM724X is not set +# CONFIG_FB_TFT is not set +# CONFIG_KS7010 is not set +# CONFIG_PI433 is not set +# CONFIG_XIL_AXIS_FIFO is not set +# CONFIG_FIELDBUS_DEV is not set +# CONFIG_VME_BUS is not set +# CONFIG_GOLDFISH is not set +# CONFIG_CHROME_PLATFORMS is not set +# CONFIG_MELLANOX_PLATFORM is not set +# CONFIG_SURFACE_PLATFORMS is not set +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Clock driver for ARM Reference designs +# +# CONFIG_CLK_ICST is not set +# CONFIG_CLK_SP810 is not set +# end of Clock driver for ARM Reference designs + +# CONFIG_LMK04832 is not set +# CONFIG_COMMON_CLK_MAX9485 is not set +CONFIG_COMMON_CLK_SCMI=y +CONFIG_COMMON_CLK_SCPI=y +# CONFIG_COMMON_CLK_SI5341 is not set +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI514 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_COMMON_CLK_AXI_CLKGEN is not set +# CONFIG_COMMON_CLK_XGENE is not set +CONFIG_COMMON_CLK_PWM=y +# CONFIG_COMMON_CLK_RS9_PCIE is not set +# CONFIG_COMMON_CLK_SI521XX is not set +CONFIG_COMMON_CLK_VC3=y +CONFIG_COMMON_CLK_VC5=y +# CONFIG_COMMON_CLK_VC7 is not set +# CONFIG_COMMON_CLK_FIXED_MMIO is not set +CONFIG_SUNXI_CCU=y +CONFIG_SUN50I_A64_CCU=y +CONFIG_SUN50I_A100_CCU=y +CONFIG_SUN50I_A100_R_CCU=y +CONFIG_SUN50I_H6_CCU=y +CONFIG_SUN50I_H616_CCU=y +CONFIG_SUN50I_H6_R_CCU=y +CONFIG_SUN6I_RTC_CCU=y +CONFIG_SUN8I_H3_CCU=y +CONFIG_SUN8I_DE2_CCU=y +CONFIG_SUN8I_R_CCU=y +# CONFIG_XILINX_VCU is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_SUN6I=y + +# +# Clock Source drivers +# +CONFIG_TIMER_OF=y +CONFIG_TIMER_PROBE=y +CONFIG_CLKSRC_MMIO=y +CONFIG_SUN4I_TIMER=y +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y +CONFIG_FSL_ERRATUM_A008585=y +CONFIG_HISILICON_ERRATUM_161010101=y +CONFIG_ARM64_ERRATUM_858921=y +CONFIG_SUN50I_ERRATUM_UNKNOWN1=y +# end of Clock Source drivers + +CONFIG_MAILBOX=y +CONFIG_ARM_MHU=y +CONFIG_ARM_MHU_V2=y +CONFIG_PLATFORM_MHU=y +CONFIG_PL320_MBOX=y +# CONFIG_ALTERA_MBOX is not set +# CONFIG_MAILBOX_TEST is not set +CONFIG_SUN6I_MSGBOX=y +CONFIG_IOMMU_IOVA=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IO_PGTABLE=y +CONFIG_IOMMU_IO_PGTABLE_LPAE=y +# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set +CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y +# CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST is not set +CONFIG_IOMMU_IO_PGTABLE_DART=y +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +CONFIG_IOMMU_DEFAULT_DMA_STRICT=y +# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set +# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set +CONFIG_OF_IOMMU=y +CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_SVA=y +CONFIG_IOMMU_IOPF=y +CONFIG_IOMMUFD=y +CONFIG_SUN50I_IOMMU=y +CONFIG_ARM_SMMU=y +# CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set +CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y +CONFIG_ARM_SMMU_V3=y +CONFIG_ARM_SMMU_V3_SVA=y +# CONFIG_VIRTIO_IOMMU is not set + +# +# Remoteproc drivers +# +# CONFIG_REMOTEPROC is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +# CONFIG_RPMSG_QCOM_GLINK_RPM is not set +# CONFIG_RPMSG_VIRTIO is not set +# end of Rpmsg drivers + +# CONFIG_SOUNDWIRE is not set + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# CONFIG_QUICC_ENGINE is not set +# CONFIG_FSL_RCPM is not set +# end of NXP/Freescale QorIQ SoC drivers + +# +# fujitsu SoC drivers +# +# end of fujitsu SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# CONFIG_LITEX_SOC_CONTROLLER is not set +# end of Enable LiteX SoC Builder specific drivers + +# CONFIG_WPCM450_SOC is not set + +# +# Qualcomm SoC drivers +# +# CONFIG_QCOM_PBS is not set +# end of Qualcomm SoC drivers + +CONFIG_SUNXI_MBUS=y +CONFIG_SUNXI_SRAM=y +# CONFIG_SOC_TI is not set + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +# +# PM Domains +# + +# +# Amlogic PM Domains +# +# end of Amlogic PM Domains + +CONFIG_ARM_SCMI_PERF_DOMAIN=y +CONFIG_ARM_SCMI_POWER_DOMAIN=y +CONFIG_ARM_SCPI_POWER_DOMAIN=y + +# +# Broadcom PM Domains +# +# end of Broadcom PM Domains + +# +# i.MX PM Domains +# +# end of i.MX PM Domains + +# +# Qualcomm PM Domains +# +# end of Qualcomm PM Domains + +CONFIG_SUN20I_PPU=y +# end of PM Domains + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=y + +# +# DEVFREQ Drivers +# +CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_EXTCON=y + +# +# Extcon Device Drivers +# +CONFIG_EXTCON_ADC_JACK=y +# CONFIG_EXTCON_FSA9480 is not set +CONFIG_EXTCON_GPIO=y +# CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_PTN5150 is not set +# CONFIG_EXTCON_RT8973A is not set +# CONFIG_EXTCON_SM5502 is not set +CONFIG_EXTCON_USB_GPIO=y +# CONFIG_EXTCON_USBC_TUSB320 is not set +CONFIG_MEMORY=y +CONFIG_ARM_PL172_MPMC=y +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_BUFFER_DMA=y +CONFIG_IIO_BUFFER_DMAENGINE=y +CONFIG_IIO_BUFFER_HW_CONSUMER=y +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGERED_BUFFER=y +CONFIG_IIO_CONFIGFS=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_SW_DEVICE=y +CONFIG_IIO_SW_TRIGGER=y +CONFIG_IIO_TRIGGERED_EVENT=y + +# +# Accelerometers +# +# CONFIG_ADIS16201 is not set +# CONFIG_ADIS16209 is not set +# CONFIG_ADXL313_I2C is not set +# CONFIG_ADXL313_SPI is not set +# CONFIG_ADXL345_I2C is not set +# CONFIG_ADXL345_SPI is not set +# CONFIG_ADXL355_I2C is not set +# CONFIG_ADXL355_SPI is not set +# CONFIG_ADXL367_SPI is not set +# CONFIG_ADXL367_I2C is not set +# CONFIG_ADXL372_SPI is not set +# CONFIG_ADXL372_I2C is not set +# CONFIG_BMA180 is not set +# CONFIG_BMA220 is not set +# CONFIG_BMA400 is not set +# CONFIG_BMC150_ACCEL is not set +# CONFIG_BMI088_ACCEL is not set +# CONFIG_DA280 is not set +# CONFIG_DA311 is not set +# CONFIG_DMARD06 is not set +# CONFIG_DMARD09 is not set +# CONFIG_DMARD10 is not set +# CONFIG_FXLS8962AF_I2C is not set +# CONFIG_FXLS8962AF_SPI is not set +# CONFIG_IIO_ST_ACCEL_3AXIS is not set +# CONFIG_IIO_KX022A_SPI is not set +# CONFIG_IIO_KX022A_I2C is not set +# CONFIG_KXSD9 is not set +# CONFIG_KXCJK1013 is not set +# CONFIG_MC3230 is not set +# CONFIG_MMA7455_I2C is not set +# CONFIG_MMA7455_SPI is not set +# CONFIG_MMA7660 is not set +# CONFIG_MMA8452 is not set +# CONFIG_MMA9551 is not set +# CONFIG_MMA9553 is not set +# CONFIG_MSA311 is not set +# CONFIG_MXC4005 is not set +# CONFIG_MXC6255 is not set +# CONFIG_SCA3000 is not set +# CONFIG_SCA3300 is not set +# CONFIG_STK8312 is not set +# CONFIG_STK8BA50 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD4130 is not set +# CONFIG_AD7091R5 is not set +# CONFIG_AD7091R8 is not set +# CONFIG_AD7124 is not set +# CONFIG_AD7192 is not set +# CONFIG_AD7266 is not set +# CONFIG_AD7280 is not set +# CONFIG_AD7291 is not set +# CONFIG_AD7292 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7606_IFACE_PARALLEL is not set +# CONFIG_AD7606_IFACE_SPI is not set +# CONFIG_AD7766 is not set +# CONFIG_AD7768_1 is not set +# CONFIG_AD7780 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7887 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7949 is not set +# CONFIG_AD799X is not set +# CONFIG_AD9467 is not set +# CONFIG_ADI_AXI_ADC is not set +CONFIG_AXP20X_ADC=y +CONFIG_AXP288_ADC=y +# CONFIG_CC10001_ADC is not set +# CONFIG_ENVELOPE_DETECTOR is not set +# CONFIG_HI8435 is not set +# CONFIG_HX711 is not set +# CONFIG_INA2XX_ADC is not set +# CONFIG_LTC2309 is not set +# CONFIG_LTC2471 is not set +# CONFIG_LTC2485 is not set +# CONFIG_LTC2496 is not set +# CONFIG_LTC2497 is not set +# CONFIG_MAX1027 is not set +# CONFIG_MAX11100 is not set +# CONFIG_MAX1118 is not set +# CONFIG_MAX11205 is not set +# CONFIG_MAX11410 is not set +# CONFIG_MAX1241 is not set +# CONFIG_MAX1363 is not set +# CONFIG_MAX34408 is not set +# CONFIG_MAX9611 is not set +# CONFIG_MCP320X is not set +# CONFIG_MCP3422 is not set +# CONFIG_MCP3564 is not set +# CONFIG_MCP3911 is not set +# CONFIG_NAU7802 is not set +# CONFIG_PAC1934 is not set +# CONFIG_QCOM_SPMI_IADC is not set +# CONFIG_QCOM_SPMI_VADC is not set +# CONFIG_QCOM_SPMI_ADC5 is not set +# CONFIG_RICHTEK_RTQ6056 is not set +# CONFIG_SD_ADC_MODULATOR is not set +CONFIG_SUN20I_GPADC=y +# CONFIG_TI_ADC081C is not set +# CONFIG_TI_ADC0832 is not set +# CONFIG_TI_ADC084S021 is not set +# CONFIG_TI_ADC12138 is not set +# CONFIG_TI_ADC108S102 is not set +# CONFIG_TI_ADC128S052 is not set +# CONFIG_TI_ADC161S626 is not set +# CONFIG_TI_ADS1015 is not set +# CONFIG_TI_ADS7924 is not set +# CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1298 is not set +# CONFIG_TI_ADS7950 is not set +# CONFIG_TI_ADS8344 is not set +# CONFIG_TI_ADS8688 is not set +# CONFIG_TI_ADS124S08 is not set +# CONFIG_TI_ADS131E08 is not set +# CONFIG_TI_LMP92064 is not set +# CONFIG_TI_TLC4541 is not set +# CONFIG_TI_TSC2046 is not set +# CONFIG_VF610_ADC is not set +# CONFIG_XILINX_XADC is not set +# end of Analog to digital converters + +# +# Analog to digital and digital to analog converters +# +# CONFIG_AD74115 is not set +# CONFIG_AD74413R is not set +# end of Analog to digital and digital to analog converters + +# +# Analog Front Ends +# +# CONFIG_IIO_RESCALE is not set +# end of Analog Front Ends + +# +# Amplifiers +# +# CONFIG_AD8366 is not set +# CONFIG_ADA4250 is not set +# CONFIG_HMC425 is not set +# end of Amplifiers + +# +# Capacitance to digital converters +# +# CONFIG_AD7150 is not set +# CONFIG_AD7746 is not set +# end of Capacitance to digital converters + +# +# Chemical Sensors +# +# CONFIG_AOSONG_AGS02MA is not set +# CONFIG_ATLAS_PH_SENSOR is not set +# CONFIG_ATLAS_EZO_SENSOR is not set +# CONFIG_BME680 is not set +# CONFIG_CCS811 is not set +# CONFIG_IAQCORE is not set +# CONFIG_PMS7003 is not set +# CONFIG_SCD30_CORE is not set +# CONFIG_SCD4X is not set +# CONFIG_SENSIRION_SGP30 is not set +# CONFIG_SENSIRION_SGP40 is not set +# CONFIG_SPS30_I2C is not set +# CONFIG_SPS30_SERIAL is not set +# CONFIG_SENSEAIR_SUNRISE_CO2 is not set +# CONFIG_VZ89X is not set +# end of Chemical Sensors + +# +# Hid Sensor IIO Common +# +# end of Hid Sensor IIO Common + +# +# IIO SCMI Sensors +# +# CONFIG_IIO_SCMI is not set +# end of IIO SCMI Sensors + +# +# SSP Sensor Common +# +# CONFIG_IIO_SSP_SENSORHUB is not set +# end of SSP Sensor Common + +# +# Digital to analog converters +# +# CONFIG_AD3552R is not set +# CONFIG_AD5064 is not set +# CONFIG_AD5360 is not set +# CONFIG_AD5380 is not set +# CONFIG_AD5421 is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5592R is not set +# CONFIG_AD5593R is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5624R_SPI is not set +# CONFIG_LTC2688 is not set +# CONFIG_AD5686_SPI is not set +# CONFIG_AD5696_I2C is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5758 is not set +# CONFIG_AD5761 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5766 is not set +# CONFIG_AD5770R is not set +# CONFIG_AD5791 is not set +# CONFIG_AD7293 is not set +# CONFIG_AD7303 is not set +# CONFIG_AD8801 is not set +# CONFIG_DPOT_DAC is not set +# CONFIG_DS4424 is not set +# CONFIG_LTC1660 is not set +# CONFIG_LTC2632 is not set +# CONFIG_M62332 is not set +# CONFIG_MAX517 is not set +# CONFIG_MAX5522 is not set +# CONFIG_MAX5821 is not set +# CONFIG_MCP4725 is not set +# CONFIG_MCP4728 is not set +# CONFIG_MCP4821 is not set +# CONFIG_MCP4922 is not set +# CONFIG_TI_DAC082S085 is not set +# CONFIG_TI_DAC5571 is not set +# CONFIG_TI_DAC7311 is not set +# CONFIG_TI_DAC7612 is not set +# CONFIG_VF610_DAC is not set +# end of Digital to analog converters + +# +# IIO dummy driver +# +# CONFIG_IIO_SIMPLE_DUMMY is not set +# end of IIO dummy driver + +# +# Filters +# +# CONFIG_ADMV8818 is not set +# end of Filters + +# +# Frequency Synthesizers DDS/PLL +# + +# +# Clock Generator/Distribution +# +# CONFIG_AD9523 is not set +# end of Clock Generator/Distribution + +# +# Phase-Locked Loop (PLL) frequency synthesizers +# +# CONFIG_ADF4350 is not set +# CONFIG_ADF4371 is not set +# CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set +# CONFIG_ADMV1013 is not set +# CONFIG_ADMV1014 is not set +# CONFIG_ADMV4420 is not set +# CONFIG_ADRF6780 is not set +# end of Phase-Locked Loop (PLL) frequency synthesizers +# end of Frequency Synthesizers DDS/PLL + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16080 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16136 is not set +# CONFIG_ADIS16260 is not set +# CONFIG_ADXRS290 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_BMG160 is not set +# CONFIG_FXAS21002C is not set +# CONFIG_MPU3050_I2C is not set +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set +# end of Digital gyroscope sensors + +# +# Health Sensors +# + +# +# Heart Rate Monitors +# +# CONFIG_AFE4403 is not set +# CONFIG_AFE4404 is not set +# CONFIG_MAX30100 is not set +# CONFIG_MAX30102 is not set +# end of Heart Rate Monitors +# end of Health Sensors + +# +# Humidity sensors +# +# CONFIG_AM2315 is not set +# CONFIG_DHT11 is not set +# CONFIG_HDC100X is not set +# CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set +# CONFIG_HTS221 is not set +# CONFIG_HTU21 is not set +# CONFIG_SI7005 is not set +# CONFIG_SI7020 is not set +# end of Humidity sensors + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16460 is not set +# CONFIG_ADIS16475 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_BMI160_I2C is not set +# CONFIG_BMI160_SPI is not set +# CONFIG_BMI323_I2C is not set +# CONFIG_BMI323_SPI is not set +# CONFIG_BOSCH_BNO055_SERIAL is not set +# CONFIG_BOSCH_BNO055_I2C is not set +# CONFIG_FXOS8700_I2C is not set +# CONFIG_FXOS8700_SPI is not set +# CONFIG_KMX61 is not set +# CONFIG_INV_ICM42600_I2C is not set +# CONFIG_INV_ICM42600_SPI is not set +# CONFIG_INV_MPU6050_I2C is not set +# CONFIG_INV_MPU6050_SPI is not set +# CONFIG_IIO_ST_LSM6DSX is not set +# CONFIG_IIO_ST_LSM9DS0 is not set +# end of Inertial measurement units + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_ADUX1020 is not set +# CONFIG_AL3010 is not set +# CONFIG_AL3320A is not set +# CONFIG_APDS9300 is not set +# CONFIG_APDS9960 is not set +# CONFIG_AS73211 is not set +# CONFIG_BH1750 is not set +# CONFIG_BH1780 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM3232 is not set +# CONFIG_CM3323 is not set +# CONFIG_CM3605 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP002 is not set +# CONFIG_GP2AP020A00F is not set +# CONFIG_SENSORS_ISL29018 is not set +# CONFIG_SENSORS_ISL29028 is not set +# CONFIG_ISL29125 is not set +# CONFIG_ISL76682 is not set +# CONFIG_JSA1212 is not set +# CONFIG_ROHM_BU27008 is not set +# CONFIG_ROHM_BU27034 is not set +# CONFIG_RPR0521 is not set +# CONFIG_LTR390 is not set +# CONFIG_LTR501 is not set +# CONFIG_LTRF216A is not set +# CONFIG_LV0104CS is not set +# CONFIG_MAX44000 is not set +# CONFIG_MAX44009 is not set +# CONFIG_NOA1305 is not set +# CONFIG_OPT3001 is not set +# CONFIG_OPT4001 is not set +# CONFIG_PA12203001 is not set +# CONFIG_SI1133 is not set +# CONFIG_SI1145 is not set +# CONFIG_STK3310 is not set +# CONFIG_ST_UVIS25 is not set +# CONFIG_TCS3414 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL2583 is not set +# CONFIG_TSL2591 is not set +# CONFIG_TSL2772 is not set +# CONFIG_TSL4531 is not set +# CONFIG_US5182D is not set +# CONFIG_VCNL4000 is not set +# CONFIG_VCNL4035 is not set +# CONFIG_VEML6030 is not set +# CONFIG_VEML6070 is not set +# CONFIG_VEML6075 is not set +# CONFIG_VL6180 is not set +# CONFIG_ZOPT2201 is not set +# end of Light sensors + +# +# Magnetometer sensors +# +# CONFIG_AF8133J is not set +# CONFIG_AK8974 is not set +# CONFIG_AK8975 is not set +# CONFIG_AK09911 is not set +# CONFIG_BMC150_MAGN_I2C is not set +# CONFIG_BMC150_MAGN_SPI is not set +# CONFIG_MAG3110 is not set +# CONFIG_MMC35240 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_SENSORS_HMC5843_I2C is not set +# CONFIG_SENSORS_HMC5843_SPI is not set +# CONFIG_SENSORS_RM3100_I2C is not set +# CONFIG_SENSORS_RM3100_SPI is not set +# CONFIG_TI_TMAG5273 is not set +# CONFIG_YAMAHA_YAS530 is not set +# end of Magnetometer sensors + +# +# Multiplexers +# +CONFIG_IIO_MUX=y +# end of Multiplexers + +# +# Inclinometer sensors +# +# end of Inclinometer sensors + +# +# Triggers - standalone +# +# CONFIG_IIO_HRTIMER_TRIGGER is not set +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set +# end of Triggers - standalone + +# +# Linear and angular position sensors +# +# end of Linear and angular position sensors + +# +# Digital potentiometers +# +# CONFIG_AD5110 is not set +# CONFIG_AD5272 is not set +# CONFIG_DS1803 is not set +# CONFIG_MAX5432 is not set +# CONFIG_MAX5481 is not set +# CONFIG_MAX5487 is not set +# CONFIG_MCP4018 is not set +# CONFIG_MCP4131 is not set +# CONFIG_MCP4531 is not set +# CONFIG_MCP41010 is not set +# CONFIG_TPL0102 is not set +# CONFIG_X9250 is not set +# end of Digital potentiometers + +# +# Digital potentiostats +# +# CONFIG_LMP91000 is not set +# end of Digital potentiostats + +# +# Pressure sensors +# +# CONFIG_ABP060MG is not set +# CONFIG_ROHM_BM1390 is not set +# CONFIG_BMP280 is not set +# CONFIG_DLHL60D is not set +# CONFIG_DPS310 is not set +# CONFIG_HP03 is not set +# CONFIG_HSC030PA is not set +# CONFIG_ICP10100 is not set +# CONFIG_MPL115_I2C is not set +# CONFIG_MPL115_SPI is not set +# CONFIG_MPL3115 is not set +# CONFIG_MPRLS0025PA is not set +# CONFIG_MS5611 is not set +# CONFIG_MS5637 is not set +# CONFIG_IIO_ST_PRESS is not set +# CONFIG_T5403 is not set +# CONFIG_HP206C is not set +# CONFIG_ZPA2326 is not set +# end of Pressure sensors + +# +# Lightning sensors +# +# CONFIG_AS3935 is not set +# end of Lightning sensors + +# +# Proximity and distance sensors +# +# CONFIG_IRSD200 is not set +# CONFIG_ISL29501 is not set +# CONFIG_LIDAR_LITE_V2 is not set +# CONFIG_MB1232 is not set +# CONFIG_PING is not set +# CONFIG_RFD77402 is not set +# CONFIG_SRF04 is not set +# CONFIG_SX9310 is not set +# CONFIG_SX9324 is not set +# CONFIG_SX9360 is not set +# CONFIG_SX9500 is not set +# CONFIG_SRF08 is not set +# CONFIG_VCNL3020 is not set +# CONFIG_VL53L0X_I2C is not set +# end of Proximity and distance sensors + +# +# Resolver to digital converters +# +# CONFIG_AD2S90 is not set +# CONFIG_AD2S1200 is not set +# CONFIG_AD2S1210 is not set +# end of Resolver to digital converters + +# +# Temperature sensors +# +# CONFIG_LTC2983 is not set +# CONFIG_MAXIM_THERMOCOUPLE is not set +# CONFIG_MLX90614 is not set +# CONFIG_MLX90632 is not set +# CONFIG_MLX90635 is not set +# CONFIG_TMP006 is not set +# CONFIG_TMP007 is not set +# CONFIG_TMP117 is not set +# CONFIG_TSYS01 is not set +# CONFIG_TSYS02D is not set +# CONFIG_MAX30208 is not set +# CONFIG_MAX31856 is not set +# CONFIG_MAX31865 is not set +# CONFIG_MCP9600 is not set +# end of Temperature sensors + +# CONFIG_NTB is not set +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_DEBUG is not set +# CONFIG_PWM_ATMEL_TCB is not set +# CONFIG_PWM_CLK is not set +# CONFIG_PWM_DWC is not set +# CONFIG_PWM_FSL_FTM is not set +# CONFIG_PWM_PCA9685 is not set +CONFIG_PWM_SUN4I=y +# CONFIG_PWM_XILINX is not set + +# +# IRQ chip support +# +CONFIG_IRQCHIP=y +CONFIG_ARM_GIC=y +CONFIG_ARM_GIC_MAX_NR=1 +CONFIG_ARM_GIC_V2M=y +CONFIG_ARM_GIC_V3=y +CONFIG_ARM_GIC_V3_ITS=y +CONFIG_ARM_GIC_V3_ITS_PCI=y +# CONFIG_AL_FIC is not set +CONFIG_SUN6I_R_INTC=y +CONFIG_SUNXI_NMI_INTC=y +# CONFIG_XILINX_INTC is not set +CONFIG_PARTITION_PERCPU=y +# end of IRQ chip support + +# CONFIG_IPACK_BUS is not set +CONFIG_ARCH_HAS_RESET_CONTROLLER=y +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set +CONFIG_RESET_SCMI=y +CONFIG_RESET_SIMPLE=y +CONFIG_RESET_SUNXI=y +# CONFIG_RESET_TI_SYSCON is not set +# CONFIG_RESET_TI_TPS380X is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +CONFIG_GENERIC_PHY_MIPI_DPHY=y +# CONFIG_PHY_CAN_TRANSCEIVER is not set +CONFIG_PHY_SUN4I_USB=y +CONFIG_PHY_SUN6I_MIPI_DPHY=y +CONFIG_PHY_SUN9I_USB=y +CONFIG_PHY_SUN50I_USB3=y + +# +# PHY drivers for Broadcom platforms +# +# CONFIG_BCM_KONA_USB2_PHY is not set +# end of PHY drivers for Broadcom platforms + +# CONFIG_PHY_CADENCE_TORRENT is not set +# CONFIG_PHY_CADENCE_DPHY is not set +# CONFIG_PHY_CADENCE_DPHY_RX is not set +# CONFIG_PHY_CADENCE_SIERRA is not set +# CONFIG_PHY_CADENCE_SALVO is not set +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PHY_LAN966X_SERDES is not set +# CONFIG_PHY_CPCAP_USB is not set +# CONFIG_PHY_MAPPHONE_MDM6600 is not set +# CONFIG_PHY_OCELOT_SERDES is not set +# CONFIG_PHY_QCOM_USB_HS is not set +# CONFIG_PHY_QCOM_USB_HSIC is not set +# CONFIG_PHY_TUSB1210 is not set +# end of PHY Subsystem + +# CONFIG_POWERCAP is not set +# CONFIG_MCB is not set + +# +# Performance monitor support +# +CONFIG_ARM_CCI_PMU=y +CONFIG_ARM_CCI400_PMU=y +CONFIG_ARM_CCI5xx_PMU=y +CONFIG_ARM_CCN=y +CONFIG_ARM_CMN=y +CONFIG_ARM_PMU=y +CONFIG_ARM_SMMU_V3_PMU=y +CONFIG_ARM_PMUV3=y +CONFIG_ARM_DSU_PMU=y +CONFIG_ARM_SPE_PMU=y +# CONFIG_HISI_PCIE_PMU is not set +# CONFIG_HNS3_PMU is not set +CONFIG_DWC_PCIE_PMU=y +CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU=y +# CONFIG_NVIDIA_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set +# CONFIG_AMPERE_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set +# end of Performance monitor support + +CONFIG_RAS=y +# CONFIG_USB4 is not set + +# +# Android +# +# CONFIG_ANDROID_BINDER_IPC is not set +# end of Android + +# CONFIG_LIBNVDIMM is not set +# CONFIG_DAX is not set +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +CONFIG_NVMEM_LAYOUTS=y + +# +# Layout Types +# +# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set +# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set +# end of Layout Types + +CONFIG_NVMEM_RMEM=y +CONFIG_NVMEM_SPMI_SDAM=y +CONFIG_NVMEM_SUNXI_SID=y +CONFIG_NVMEM_U_BOOT_ENV=y + +# +# HW tracing support +# +CONFIG_STM=y +# CONFIG_STM_PROTO_BASIC is not set +# CONFIG_STM_PROTO_SYS_T is not set +# CONFIG_STM_DUMMY is not set +# CONFIG_STM_SOURCE_CONSOLE is not set +# CONFIG_STM_SOURCE_HEARTBEAT is not set +# CONFIG_INTEL_TH is not set +# CONFIG_HISI_PTT is not set +# end of HW tracing support + +# CONFIG_FPGA is not set +# CONFIG_FSI is not set +CONFIG_TEE=y +CONFIG_OPTEE=y +# CONFIG_OPTEE_INSECURE_LOAD_IMAGE is not set +CONFIG_MULTIPLEXER=y + +# +# Multiplexer drivers +# +# CONFIG_MUX_ADG792A is not set +# CONFIG_MUX_ADGS1408 is not set +CONFIG_MUX_GPIO=y +CONFIG_MUX_MMIO=y +# end of Multiplexer drivers + +CONFIG_PM_OPP=y +# CONFIG_SIOX is not set +# CONFIG_SLIMBUS is not set +# CONFIG_INTERCONNECT is not set +# CONFIG_COUNTER is not set +# CONFIG_MOST is not set +# CONFIG_PECI is not set +# CONFIG_HTE is not set +# CONFIG_CDX_BUS is not set +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_VALIDATE_FS_PARSER is not set +CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y +CONFIG_BUFFER_HEAD=y +CONFIG_LEGACY_DIRECT_IO=y +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_FS_REF_VERIFY is not set +# CONFIG_NILFS2_FS is not set +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +CONFIG_F2FS_FS_COMPRESSION=y +CONFIG_F2FS_FS_LZO=y +CONFIG_F2FS_FS_LZORLE=y +CONFIG_F2FS_FS_LZ4=y +CONFIG_F2FS_FS_LZ4HC=y +CONFIG_F2FS_FS_ZSTD=y +CONFIG_F2FS_IOSTAT=y +# CONFIG_F2FS_UNFAIR_RWSEM is not set +# CONFIG_BCACHEFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +# CONFIG_EXPORTFS_BLOCK_OPS is not set +CONFIG_FILE_LOCKING=y +# CONFIG_FS_ENCRYPTION is not set +# CONFIG_FS_VERITY is not set +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +# CONFIG_QUOTA_DEBUG is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +CONFIG_QUOTACTL=y +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=y +CONFIG_CUSE=y +# CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y +CONFIG_OVERLAY_FS=y +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_INDEX is not set +# CONFIG_OVERLAY_FS_XINO_AUTO is not set +# CONFIG_OVERLAY_FS_METACOPY is not set +# CONFIG_OVERLAY_FS_DEBUG is not set + +# +# Caches +# +CONFIG_NETFS_SUPPORT=y +# CONFIG_NETFS_STATS is not set +# CONFIG_FSCACHE is not set +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +CONFIG_EXFAT_FS=y +CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS3_FS=y +# CONFIG_NTFS3_64BIT_CLUSTER is not set +CONFIG_NTFS3_LZX_XPRESS=y +# CONFIG_NTFS3_FS_POSIX_ACL is not set +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +# CONFIG_PROC_CHILDREN is not set +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +# CONFIG_TMPFS_INODE64 is not set +# CONFIG_TMPFS_QUOTA is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_CONFIGFS_FS=y +# end of Pseudo filesystems + +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ORANGEFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_UBIFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_CACHE=y +# CONFIG_SQUASHFS_FILE_DIRECT is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT is not set +CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU is not set +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y +CONFIG_SQUASHFS_EMBEDDED=y +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_PSTORE=y +CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 +CONFIG_PSTORE_COMPRESS=y +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_PMSG is not set +# CONFIG_PSTORE_RAM is not set +# CONFIG_PSTORE_BLK is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_EROFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_CEPH_FS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_SERVER is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +CONFIG_9P_FS=y +# CONFIG_9P_FS_POSIX_ACL is not set +# CONFIG_9P_FS_SECURITY is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set +# CONFIG_UNICODE is not set +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_REQUEST_CACHE is not set +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_TRUSTED_KEYS is not set +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEY_DH_OPERATIONS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +# CONFIG_SECURITY_NETWORK is not set +# CONFIG_SECURITY_PATH is not set +# CONFIG_HARDENED_USERCOPY is not set +# CONFIG_FORTIFY_SOURCE is not set +# CONFIG_STATIC_USERMODEHELPER is not set +# CONFIG_SECURITY_SMACK is not set +# CONFIG_SECURITY_TOMOYO is not set +# CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_LOADPIN is not set +# CONFIG_SECURITY_YAMA is not set +# CONFIG_SECURITY_SAFESETID is not set +# CONFIG_SECURITY_LOCKDOWN_LSM is not set +# CONFIG_SECURITY_LANDLOCK is not set +CONFIG_INTEGRITY=y +# CONFIG_INTEGRITY_SIGNATURE is not set +CONFIG_INTEGRITY_AUDIT=y +# CONFIG_IMA is not set +# CONFIG_EVM is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y +# CONFIG_INIT_STACK_NONE is not set +# CONFIG_INIT_STACK_ALL_PATTERN is not set +CONFIG_INIT_STACK_ALL_ZERO=y +# CONFIG_GCC_PLUGIN_STACKLEAK is not set +# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization + +# +# Hardening of kernel data structures +# +# CONFIG_LIST_HARDENED is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +# end of Hardening of kernel data structures + +CONFIG_RANDSTRUCT_NONE=y +# CONFIG_RANDSTRUCT_FULL is not set +# CONFIG_RANDSTRUCT_PERFORMANCE is not set +# end of Kernel hardening options +# end of Security options + +CONFIG_XOR_BLOCKS=y +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SIG2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_NULL2=y +# CONFIG_CRYPTO_PCRYPT is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=y +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_ENGINE=y +# end of Crypto core or helper + +# +# Public-key cryptography +# +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_DH=y +# CONFIG_CRYPTO_DH_RFC7919_GROUPS is not set +CONFIG_CRYPTO_ECC=y +CONFIG_CRYPTO_ECDH=y +# CONFIG_CRYPTO_ECDSA is not set +# CONFIG_CRYPTO_ECRDSA is not set +# CONFIG_CRYPTO_SM2 is not set +CONFIG_CRYPTO_CURVE25519=y +# end of Public-key cryptography + +# +# Block ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_TI is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_ARIA is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_SM4=y +CONFIG_CRYPTO_SM4_GENERIC=y +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_TWOFISH is not set +# end of Block ciphers + +# +# Length-preserving ciphers and modes +# +# CONFIG_CRYPTO_ADIANTUM is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_CHACHA20 is not set +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_HCTR2 is not set +# CONFIG_CRYPTO_KEYWRAP is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +CONFIG_CRYPTO_XTS=y +# end of Length-preserving ciphers and modes + +# +# AEAD (authenticated encryption with associated data) ciphers +# +# CONFIG_CRYPTO_AEGIS128 is not set +# CONFIG_CRYPTO_CHACHA20POLY1305 is not set +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_GENIV=y +# CONFIG_CRYPTO_SEQIV is not set +CONFIG_CRYPTO_ECHAINIV=y +# CONFIG_CRYPTO_ESSIV is not set +# end of AEAD (authenticated encryption with associated data) ciphers + +# +# Hashes, digests, and MACs +# +CONFIG_CRYPTO_BLAKE2B=y +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +# CONFIG_CRYPTO_POLY1305 is not set +# CONFIG_CRYPTO_RMD160 is not set +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA3=y +CONFIG_CRYPTO_SM3=y +CONFIG_CRYPTO_SM3_GENERIC=y +# CONFIG_CRYPTO_STREEBOG is not set +# CONFIG_CRYPTO_VMAC is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_XXHASH=y +# end of Hashes, digests, and MACs + +# +# CRCs (cyclic redundancy checks) +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CRC64_ROCKSOFT=y +# end of CRCs (cyclic redundancy checks) + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_LZO=y +# CONFIG_CRYPTO_842 is not set +# CONFIG_CRYPTO_LZ4 is not set +# CONFIG_CRYPTO_LZ4HC is not set +CONFIG_CRYPTO_ZSTD=y +# end of Compression + +# +# Random number generation +# +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +# CONFIG_CRYPTO_DRBG_HASH is not set +# CONFIG_CRYPTO_DRBG_CTR is not set +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 +CONFIG_CRYPTO_JITTERENTROPY_OSR=1 +# end of Random number generation + +# +# Userspace interface +# +CONFIG_CRYPTO_USER_API=y +# CONFIG_CRYPTO_USER_API_HASH is not set +# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +CONFIG_CRYPTO_USER_API_RNG=y +# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set +# CONFIG_CRYPTO_USER_API_AEAD is not set +CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y +# CONFIG_CRYPTO_STATS is not set +# end of Userspace interface + +CONFIG_CRYPTO_HASH_INFO=y +# CONFIG_CRYPTO_NHPOLY1305_NEON is not set +CONFIG_CRYPTO_CHACHA20_NEON=y + +# +# Accelerated Cryptographic Algorithms for CPU (arm64) +# +CONFIG_CRYPTO_GHASH_ARM64_CE=y +# CONFIG_CRYPTO_POLY1305_NEON is not set +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA256_ARM64=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_SHA512_ARM64=y +CONFIG_CRYPTO_SHA512_ARM64_CE=y +CONFIG_CRYPTO_SHA3_ARM64=y +# CONFIG_CRYPTO_SM3_NEON is not set +CONFIG_CRYPTO_SM3_ARM64_CE=y +# CONFIG_CRYPTO_POLYVAL_ARM64_CE is not set +# CONFIG_CRYPTO_AES_ARM64 is not set +CONFIG_CRYPTO_AES_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y +CONFIG_CRYPTO_AES_ARM64_BS=y +# CONFIG_CRYPTO_SM4_ARM64_CE is not set +# CONFIG_CRYPTO_SM4_ARM64_CE_BLK is not set +# CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +# CONFIG_CRYPTO_SM4_ARM64_CE_CCM is not set +# CONFIG_CRYPTO_SM4_ARM64_CE_GCM is not set +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=y +# end of Accelerated Cryptographic Algorithms for CPU (arm64) + +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_ALLWINNER=y +# CONFIG_CRYPTO_DEV_SUN4I_SS is not set +CONFIG_CRYPTO_DEV_SUN8I_CE=y +CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG=y +CONFIG_CRYPTO_DEV_SUN8I_CE_HASH=y +CONFIG_CRYPTO_DEV_SUN8I_CE_PRNG=y +CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG=y +# CONFIG_CRYPTO_DEV_SUN8I_SS is not set +# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set +# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set +# CONFIG_CRYPTO_DEV_CCP is not set +# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set +# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set +# CONFIG_CRYPTO_DEV_QAT_C62X is not set +# CONFIG_CRYPTO_DEV_QAT_4XXX is not set +# CONFIG_CRYPTO_DEV_QAT_420XX is not set +# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set +# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set +# CONFIG_CRYPTO_DEV_CAVIUM_ZIP is not set +# CONFIG_CRYPTO_DEV_VIRTIO is not set +# CONFIG_CRYPTO_DEV_SAFEXCEL is not set +CONFIG_CRYPTO_DEV_CCREE=y +# CONFIG_CRYPTO_DEV_HISI_SEC is not set +# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +# CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set +CONFIG_PKCS7_MESSAGE_PARSER=y +# CONFIG_PKCS7_TEST_KEY is not set +# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set +# CONFIG_FIPS_SIGNATURE_SELFTEST is not set + +# +# Certificates for signature checking +# +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set +# CONFIG_SECONDARY_TRUSTED_KEYRING is not set +# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set +# end of Certificates for signature checking + +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=y +CONFIG_RAID6_PQ_BENCHMARK=y +CONFIG_LINEAR_RANGES=y +CONFIG_PACKING=y +CONFIG_BITREVERSE=y +CONFIG_HAVE_ARCH_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +# CONFIG_CORDIC is not set +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y +CONFIG_INDIRECT_PIO=y + +# +# Crypto library routines +# +CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_ARC4=y +CONFIG_CRYPTO_LIB_GF128MUL=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y +CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y +# CONFIG_CRYPTO_LIB_CHACHA is not set +CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y +# CONFIG_CRYPTO_LIB_CURVE25519 is not set +CONFIG_CRYPTO_LIB_DES=y +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 +# CONFIG_CRYPTO_LIB_POLY1305 is not set +# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_SHA256=y +# end of Crypto library routines + +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC64_ROCKSOFT=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +CONFIG_CRC64=y +# CONFIG_CRC4 is not set +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y +CONFIG_CRC8=y +CONFIG_XXHASH=y +CONFIG_AUDIT_GENERIC=y +CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y +CONFIG_AUDIT_COMPAT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=y +CONFIG_LZ4HC_COMPRESS=y +CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMMON=y +CONFIG_ZSTD_COMPRESS=y +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +# CONFIG_XZ_DEC_MICROLZMA is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_BCH=y +CONFIG_INTERVAL_TREE=y +CONFIG_INTERVAL_TREE_SPAN_ITER=y +CONFIG_XARRAY_MULTI=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS=y +CONFIG_NEED_SG_DMA_FLAGS=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_DMA_DECLARE_COHERENT=y +CONFIG_ARCH_HAS_SETUP_DMA_OPS=y +CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y +CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y +CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y +CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y +CONFIG_SWIOTLB=y +# CONFIG_SWIOTLB_DYNAMIC is not set +CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y +CONFIG_DMA_RESTRICTED_POOL=y +CONFIG_DMA_NONCOHERENT_MMAP=y +CONFIG_DMA_COHERENT_POOL=y +CONFIG_DMA_DIRECT_REMAP=y +CONFIG_DMA_CMA=y +# CONFIG_DMA_NUMA_CMA is not set + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=32 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +# CONFIG_FORCE_NR_CPUS is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +CONFIG_CLZ_TAB=y +CONFIG_IRQ_POLL=y +CONFIG_MPILIB=y +CONFIG_LIBFDT=y +CONFIG_OID_REGISTRY=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_SG_POOL=y +CONFIG_ARCH_STACKWALK=y +CONFIG_STACKDEPOT=y +CONFIG_STACKDEPOT_MAX_FRAMES=64 +CONFIG_SBITMAP=y +# CONFIG_LWQ_TEST is not set +# end of Library routines + +CONFIG_GENERIC_IOREMAP=y +CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DYNAMIC_DEBUG_CORE is not set +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# end of printk and dmesg options + +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_INFO=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y +# CONFIG_DEBUG_INFO_NONE is not set +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +# CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set +CONFIG_DEBUG_INFO_REDUCED=y +CONFIG_DEBUG_INFO_COMPRESSED_NONE=y +# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +# CONFIG_GDB_SCRIPTS is not set +CONFIG_FRAME_WARN=2048 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +CONFIG_ARCH_HAS_UBSAN=y +# CONFIG_UBSAN is not set +CONFIG_HAVE_ARCH_KCSAN=y +CONFIG_HAVE_KCSAN_COMPILER=y +# CONFIG_KCSAN is not set +# end of Generic Kernel Debugging Instruments + +# +# Networking Debugging +# +# CONFIG_NET_DEV_REFCNT_TRACKER is not set +# CONFIG_NET_NS_REFCNT_TRACKER is not set +# CONFIG_DEBUG_NET is not set +# end of Networking Debugging + +# +# Memory Debugging +# +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_TABLE_CHECK is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_ARCH_HAS_DEBUG_WX=y +# CONFIG_DEBUG_WX is not set +CONFIG_GENERIC_PTDUMP=y +# CONFIG_PTDUMP_DEBUGFS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_PER_VMA_LOCK_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SHRINKER_DEBUG is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_SCHED_STACK_END_CHECK is not set +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VM_PGTABLE is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y +CONFIG_HAVE_ARCH_KASAN_HW_TAGS=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_KASAN_SW_TAGS=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +# CONFIG_KFENCE is not set +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +# CONFIG_SOFTLOCKUP_DETECTOR is not set +CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +# CONFIG_SCHED_DEBUG is not set +CONFIG_SCHED_INFO=y +# CONFIG_SCHEDSTATS is not set +# end of Scheduler Debugging + +# CONFIG_DEBUG_TIMEKEEPING is not set +# CONFIG_DEBUG_PREEMPT is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# CONFIG_CSD_LOCK_WAIT_DEBUG is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_MAPLE_TREE is not set +# end of Debug kernel data structures + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 +# CONFIG_RCU_CPU_STALL_CPUTIME is not set +CONFIG_RCU_TRACE=y +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_LATENCYTOP is not set +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACE_CLOCK=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_FTRACE is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_IO_STRICT_DEVMEM is not set + +# +# arm64 Debugging +# +# CONFIG_PID_IN_CONTEXTIDR is not set +# CONFIG_ARM64_RELOC_TEST is not set +# CONFIG_CORESIGHT is not set +# end of arm64 Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +CONFIG_CC_HAS_SANCOV_TRACE_PC=y +# CONFIG_KCOV is not set +CONFIG_RUNTIME_TESTING_MENU=y +# CONFIG_TEST_DHRY is not set +# CONFIG_LKDTM is not set +# CONFIG_TEST_MIN_HEAP is not set +# CONFIG_TEST_DIV64 is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_TEST_REF_TRACKER is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_REED_SOLOMON_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_SCANF is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set +# CONFIG_TEST_MAPLE_TREE is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_IDA is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BITOPS is not set +# CONFIG_TEST_VMALLOC is not set +# CONFIG_TEST_USER_COPY is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set +# CONFIG_FIND_BIT_BENCHMARK is not set +# CONFIG_TEST_FIRMWARE is not set +# CONFIG_TEST_SYSCTL is not set +# CONFIG_TEST_UDELAY is not set +# CONFIG_TEST_STATIC_KEYS is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_MEMINIT is not set +# CONFIG_TEST_FREE_PAGES is not set +# CONFIG_TEST_OBJPOOL is not set +CONFIG_ARCH_USE_MEMTEST=y +CONFIG_MEMTEST=y +# end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking +# end of Kernel hacking diff --git a/projects/Allwinner/devices/H700/options b/projects/Allwinner/devices/H700/options new file mode 100644 index 000000000..456485b79 --- /dev/null +++ b/projects/Allwinner/devices/H700/options @@ -0,0 +1,83 @@ +################################################################################ +# setup device defaults +################################################################################ + + # The TARGET_CPU variable controls which processor should be targeted for + # generated code. + case $TARGET_ARCH in + aarch64) + TARGET_KERNEL_ARCH="arm64" + TARGET_PATCH_ARCH="aarch64" + TARGET_FLOAT="hard" + TARGET_CPU="cortex-a53" + TARGET_CPU_FLAGS="+crc+fp+simd" + TARGET_FPU="fp-armv8" + TARGET_FEATURES="64bit" + ;; + arm) + TARGET_KERNEL_ARCH="arm64" + TARGET_PATCH_ARCH="aarch64" + TARGET_FLOAT="hard" + TARGET_CPU="cortex-a53" + TARGET_CPU_FLAGS="+crc" + TARGET_FPU="crypto-neon-fp-armv8" + TARGET_FEATURES="32bit" + ;; + esac + + # Kernel target + DEVICE_NAME="H700" + KERNEL_TARGET="Image" + BOOTLOADER="u-boot" + PARTITION_TABLE="msdos" + DEVICE_DTB=("sun50i-h700-anbernic-rg35xx-plus") + UBOOT_DTB="${DEVICE_DTB[0]}" + UBOOT_CONFIG="anbernic_rg35xxplus_defconfig" + PKG_SOC="h700" + EXT_LINUX_CONF=true + ATF_PLATFORM="sun50i_h616" + ATF_BL31_BINARY="bl31.bin" + + + # Additional kernel make parameters (for example to specify the u-boot loadaddress) + KERNEL_MAKE_EXTRACMD="" + KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "allwinner/${DTB}.dtb "; done)" + + # Define the CPU + HW_CPU="Allwinner H700" + + # Mali GPU family + MALI_FAMILY="bifrost-g31" + GRAPHIC_DRIVERS="panfrost" + + # OpenGL(X) implementation to use (mesa / no) + OPENGL="mesa" + + # OpenGL-ES implementation to use (mesa / no) + OPENGLES="mesa" + + # Displayserver to use (weston / x11 / no) + DISPLAYSERVER="wl" + + # Windowmanager to use (weston / swaywm-env / no) + WINDOWMANAGER="swaywm-env" + + # kernel serial console + EXTRA_CMDLINE="rootwait earlycon=uart,mmio32,0x5000000 console=ttyS0,115200" + + # additional packages to install + ADDITIONAL_PACKAGES="" + + # additional Firmware to use ( ) + # Space separated list is supported, + # e.g. FIRMWARE="" + FIRMWARE="" + + # additional drivers to install: + # for a list of additional drivers see packages/linux-drivers + # Space separated list is supported, + # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" + ADDITIONAL_DRIVERS="" + + # debug tty path + DEBUG_TTY="/dev/ttyFIQ0" diff --git a/projects/Allwinner/options b/projects/Allwinner/options new file mode 100755 index 000000000..fa82f1751 --- /dev/null +++ b/projects/Allwinner/options @@ -0,0 +1,62 @@ +################################################################################ +# setup system defaults +################################################################################ + + # Bootloader to use (syslinux / u-boot) + BOOTLOADER="u-boot" + + # Kernel extra targets to build + KERNEL_UBOOT_EXTRA_TARGET="" + + # Kernel to use. values can be: + # default: default mainline kernel + LINUX="" + +################################################################################ +# setup build defaults +################################################################################ + + # Project FLAGS + PROJECT_CFLAGS="" + + # SquashFS compression method (gzip / lzo / xz) + SQUASHFS_COMPRESSION="lzo" + +################################################################################ +# setup project defaults +################################################################################ + + # OpenGL(X) implementation to use (no / mesa) + OPENGL="mesa" + + # OpenGL-ES implementation to use (no / mesa) + OPENGLES="mesa" + + # Displayserver to use (no / wl) + DISPLAYSERVER="no" + + # Windowmanager to use (none / weston) + WINDOWMANAGER="none" + + # Xorg Graphic drivers to use (all / i915,i965,r200,r300,r600,nvidia) + # Space separated list is supported, + # e.g. GRAPHIC_DRIVERS="i915 i965 r300 r600 radeonsi nvidia" + GRAPHIC_DRIVERS="" + + # additional Firmware to use ( ) + # Space separated list is supported, + # e.g. FIRMWARE="" + FIRMWARE="" + + # additional packages to install + # ADDITIONAL_PACKAGES="" + + # Start boot partition at 16MiB, same as https://github.com/rockchip-linux/build images + SYSTEM_PART_START=32768 + + # debug tty path + DEBUG_TTY="/dev/ttyS2" + + # build with entware installer + ENTWARE_SUPPORT="yes" + ENTWARE_ARCH="aarch64-k3.10" diff --git a/projects/Allwinner/packages/u-boot/package.mk b/projects/Allwinner/packages/u-boot/package.mk new file mode 100644 index 000000000..c3409d3b3 --- /dev/null +++ b/projects/Allwinner/packages/u-boot/package.mk @@ -0,0 +1,80 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) + +PKG_NAME="u-boot" +PKG_ARCH="arm aarch64" +PKG_SITE="https://github.com/ROCKNIX" +PKG_LICENSE="GPL" +PKG_DEPENDS_TARGET="toolchain Python3 swig:host atf glibc pyelftools:host" +PKG_LONGDESC="Allwinner U-Boot is a bootloader for embedded systems." +PKG_PATCH_DIRS+="${DEVICE}" + +PKG_NEED_UNPACK="$PROJECT_DIR/$PROJECT/bootloader" + +case ${DEVICE} in + H700*) + PKG_VERSION="24aafd7efc6827dc44cae0bfc28c08d989b34869" + PKG_URL="https://git.sr.ht/~tokyovigilante/u-boot/archive/24aafd7efc6827dc44cae0bfc28c08d989b34869.tar.gz" + ;; +esac + +PKG_IS_KERNEL_PKG="yes" +PKG_STAMP="${UBOOT_CONFIG}" + +[ -n "${ATF_PLATFORM}" ] && PKG_DEPENDS_TARGET+=" atf" + +PKG_NEED_UNPACK="${PROJECT}_DIR/${PROJECT}/bootloader" +[ -n "${DEVICE}" ] && PKG_NEED_UNPACK+=" ${PROJECT}_DIR/${PROJECT}/devices/${DEVICE}/bootloader" + +post_patch() { + if [ -n "${UBOOT_CONFIG}" ] && find_file_path bootloader/config; then + PKG_CONFIG_FILE="${UBOOT_CONFIG}" + if [ -f "${PKG_CONFIG_FILE}" ]; then + cat ${FOUND_PATH} >> "${PKG_CONFIG_FILE}" + fi + fi +} + +make_target() { + setup_pkg_config_host + . ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options + if [ -z "${UBOOT_CONFIG}" ]; then + echo "UBOOT_CONFIG must be set to build an image" + else + if [ -e "${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/u-boot/${UBOOT_CONFIG}" ]; then + cp ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/u-boot/${UBOOT_CONFIG} configs + fi + [ "${BUILD_WITH_DEBUG}" = "yes" ] && PKG_DEBUG=1 || PKG_DEBUG=0 + + if [[ "${PKG_SOC}" =~ "h700" ]]; then + # H700 + echo "Building for GPT (${UBOOT_DTB})..." + if [[ "${ATF_PLATFORM}" =~ "sun50i_h616" ]]; then + export BL31="$(get_build_dir atf)/build/${ATF_PLATFORM}/release/bl31.bin" + fi + DEBUG=${PKG_DEBUG} CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" ARCH=arm make mrproper + DEBUG=${PKG_DEBUG} CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" ARCH=arm make ${UBOOT_CONFIG} + DEBUG=${PKG_DEBUG} CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" ARCH=arm _python_sysroot="${TOOLCHAIN}" _python_prefix=/ _python_exec_prefix=/ make HOSTCC="${HOST_CC}" HOSTCFLAGS="-I${TOOLCHAIN}/include" HOSTLDFLAGS="${HOST_LDFLAGS}" CONFIG_MKIMAGE_DTC_PATH="scripts/dtc/dtc" + fi + fi +} + +makeinstall_target() { + mkdir -p ${INSTALL}/usr/share/bootloader + # Only install u-boot et al when building a board specific image + if [ -n "${UBOOT_CONFIG}" ]; then + find_file_path bootloader/install && . ${FOUND_PATH} + fi + + # Always install the update script + find_file_path bootloader/update.sh && cp -av ${FOUND_PATH} ${INSTALL}/usr/share/bootloader + + # Always install the canupdate script + if find_file_path bootloader/canupdate.sh; then + cp -av ${FOUND_PATH} ${INSTALL}/usr/share/bootloader + sed -e "s/@PROJECT@/${DEVICE:-${PROJECT}}/g" \ + -i ${INSTALL}/usr/share/bootloader/canupdate.sh + fi +} From f49c5ee2a080dd7d55543bd9716ff1c17b3f599d Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Thu, 9 May 2024 17:03:58 +0300 Subject: [PATCH 156/184] rocknix-joypad: bump driver --- packages/kernel/drivers/rocknix-joypad/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 92584ce87..2b195ada2 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="38ec995c8516ad39544b85026876b0215fb16544" +PKG_VERSION="df031f47f2762643f52ac5d64cb4bd9f928cb049" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" From f0224774072ee49c4739e90ce9e52beb1f65dc7f Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Thu, 9 May 2024 08:32:56 -0700 Subject: [PATCH 157/184] EmulationStation: bump update Signed-off-by: Paul Reioux --- packages/ui/emulationstation/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/emulationstation/package.mk b/packages/ui/emulationstation/package.mk index d0da60bed..e3b168146 100644 --- a/packages/ui/emulationstation/package.mk +++ b/packages/ui/emulationstation/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="emulationstation" -PKG_VERSION="7e2f7afa9656a67c9c9c1d1c33b7e89f224e8916" +PKG_VERSION="02e858d50722374a98e26bcb566ee6a08a81b845" PKG_GIT_CLONE_BRANCH="main" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/emulationstation" From 645364577509f057780c72682ae0e5b11edf1389 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Tue, 7 May 2024 22:19:30 +0100 Subject: [PATCH 158/184] projects: change how rocknix-joypad is sourced into the buildroot --- config/show_config | 1 + distributions/ROCKNIX/options | 5 ++++- packages/kernel/linux/package.mk | 14 ++++++++++++++ projects/Amlogic/devices/S922X/options | 7 +++++-- projects/PC/devices/AMD64/options | 2 +- projects/Rockchip/devices/RK3399/options | 5 ++++- projects/Rockchip/devices/RK3566-X55/options | 5 ++++- projects/Rockchip/devices/RK3566/options | 5 ++++- projects/Rockchip/devices/RK3588/options | 7 +++++-- 9 files changed, 42 insertions(+), 9 deletions(-) diff --git a/config/show_config b/config/show_config index 4fb4da187..10c8edde4 100644 --- a/config/show_config +++ b/config/show_config @@ -57,6 +57,7 @@ show_config() { config_message="${config_message}\n\n Input device configuration:" config_message="${config_message}\n ${dashes}${dashes}" + config_message="${config_message}\n - ROCKNIX joypad support:\t\t\t $ROCKNIX_JOYPAD" # Misc. hardware configuration diff --git a/distributions/ROCKNIX/options b/distributions/ROCKNIX/options index 66e0588a8..b466182ad 100644 --- a/distributions/ROCKNIX/options +++ b/distributions/ROCKNIX/options @@ -55,11 +55,14 @@ CLEAN_S922X+=" gmu gzdoom-sa libplacebo lime3ds-sa linux mali-bifrost mesa moonlight parallel-n64-lr" CLEAN_S922X+=" pipewire portmaster ppsspp-sa qt5 retroarch SDL2" +# build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="no" + # additional drivers to install: # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" -# ADDITIONAL_DRIVERS="" + ADDITIONAL_DRIVERS="" # build and install driver addons (yes / no) DRIVER_ADDONS_SUPPORT="no" diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 05461486f..0fe7bc9fb 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -57,6 +57,20 @@ for pkg in $(get_pkg_variable initramfs PKG_DEPENDS_TARGET); do ! listcontains "${PKG_DEPENDS_TARGET}" "${pkg}" && PKG_DEPENDS_TARGET+=" ${pkg}" || true done +if [ "${ROCKNIX_JOYPAD}" = "yes" ]; then + PKG_DEPENDS_UNPACK+=" rocknix-joypad" +fi + +post_unpack() { + if [ "${ROCKNIX_JOYPAD}" = "yes" ]; then + cp $(get_build_dir rocknix-joypad)/rocknix-joypad.c \ + $(get_build_dir rocknix-joypad)/rocknix-joypad.h \ + $(get_build_dir rocknix-joypad)/rocknix-singleadc-joypad.c \ + ${PKG_BUILD}/drivers/input/joystick + echo "obj-m += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile + fi +} + post_patch() { # linux was already built and its build dir autoremoved - prepare it again for kernel packages if [ -d ${PKG_INSTALL}/.image ]; then diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index 1023d9bf4..85a4ef202 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -79,8 +79,11 @@ # kernel serial console EXTRA_CMDLINE="rootwait quiet systemd.debug_shell=ttyAML0 console=ttyAML0,115200n8 console=tty0 no_console_suspend net.ifnames=0 consoleblank=0 video=HDMI-A-1:1920x1080@60" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install - # ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="" # additional Firmware to use ( ) # Space separated list is supported, @@ -95,7 +98,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU rocknix-joypad" + ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU" if [ "${USE_MALI}" != "no" ]; then ADDITIONAL_DRIVERS+=" mali-bifrost" diff --git a/projects/PC/devices/AMD64/options b/projects/PC/devices/AMD64/options index b9ee96784..45209da7d 100644 --- a/projects/PC/devices/AMD64/options +++ b/projects/PC/devices/AMD64/options @@ -46,7 +46,7 @@ GRAPHIC_DRIVERS="crocus i915 iris r300 r600 radeonsi virtio" # additional packages to install - # ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="" # additional Firmware to use ( ) # Space separated list is supported, diff --git a/projects/Rockchip/devices/RK3399/options b/projects/Rockchip/devices/RK3399/options index b0cc9bb6c..edd7c6769 100644 --- a/projects/Rockchip/devices/RK3399/options +++ b/projects/Rockchip/devices/RK3399/options @@ -71,6 +71,9 @@ # kernel serial console EXTRA_CMDLINE="quiet rootwait console=tty0 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install ADDITIONAL_PACKAGES="" @@ -83,7 +86,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad" + ADDITIONAL_DRIVERS="" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index 573a78be7..1d9181ecd 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -76,6 +76,9 @@ # kernel serial console EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install ADDITIONAL_PACKAGES="libmali" @@ -88,7 +91,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad mali-bifrost" + ADDITIONAL_DRIVERS=" mali-bifrost" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 09ae4b7ee..49bb54d5d 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -79,6 +79,9 @@ # kernel serial console EXTRA_CMDLINE="quiet rootwait earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 console=tty1 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install ADDITIONAL_PACKAGES="libmali" @@ -91,7 +94,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU mali-bifrost" + ADDITIONAL_DRIVERS="RTL8812AU RTL8814AU RTL8821AU RTL8821CU RTL88x2BU mali-bifrost" # Some devices have internal storage. INSTALLER_SUPPORT="no" diff --git a/projects/Rockchip/devices/RK3588/options b/projects/Rockchip/devices/RK3588/options index bede3e4b6..7f2b25a7a 100755 --- a/projects/Rockchip/devices/RK3588/options +++ b/projects/Rockchip/devices/RK3588/options @@ -71,8 +71,11 @@ # kernel serial console EXTRA_CMDLINE="rootwait quiet systemd.debug_shell=ttyFIQ0 earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 console=tty0 coherent_pool=2M fbcon=rotate:1" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install - # ADDITIONAL_PACKAGES="" + ADDITIONAL_PACKAGES="" # additional Firmware to use ( ) # Space separated list is supported, @@ -83,7 +86,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="rocknix-joypad" + ADDITIONAL_DRIVERS="" # debug tty path DEBUG_TTY="/dev/ttyFIQ0" From 6a856445c5aa1b5d8e4fa89f0f9fd33e165ae9c0 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Thu, 9 May 2024 20:24:09 +0100 Subject: [PATCH 159/184] systemd: add keyboard flag if devices advertise btn_mode --- ...d-flag-if-device-advertises-btn_mode.patch | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 packages/sysutils/systemd/patches/systemd-0004-udev-set-keyboard-flag-if-device-advertises-btn_mode.patch diff --git a/packages/sysutils/systemd/patches/systemd-0004-udev-set-keyboard-flag-if-device-advertises-btn_mode.patch b/packages/sysutils/systemd/patches/systemd-0004-udev-set-keyboard-flag-if-device-advertises-btn_mode.patch new file mode 100644 index 000000000..23bb96ab5 --- /dev/null +++ b/packages/sysutils/systemd/patches/systemd-0004-udev-set-keyboard-flag-if-device-advertises-btn_mode.patch @@ -0,0 +1,27 @@ +From 0c7198aa324727f4b62ddd8e003b61e50449ce9a Mon Sep 17 00:00:00 2001 +From: spycat88 +Date: Thu, 9 May 2024 19:55:56 +0100 +Subject: [PATCH] udev: set keyboard flag, if device advertises btn_mode + +--- + src/udev/udev-builtin-input_id.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c +index 540f390530..62ec41a4c1 100644 +--- a/src/udev/udev-builtin-input_id.c ++++ b/src/udev/udev-builtin-input_id.c +@@ -340,6 +340,10 @@ static bool test_key(sd_device *dev, + return false; + } + ++ /* if BTN_MODE is found, set device as keyboard (needed for adc-keys/input_sense */ ++ if(test_bit(BTN_MODE, bitmask_key)) ++ found = true; ++ + /* only consider KEY_* here, not BTN_* */ + for (size_t i = 0; i < BTN_MISC/BITS_PER_LONG && !found; i++) { + if (bitmask_key[i]) +-- +2.34.1 + From 94b8a390e9b508999ec8782c3bdd87d11890ed57 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Thu, 9 May 2024 20:24:39 +0100 Subject: [PATCH 160/184] linux: fix the btn_mode via joypad driver bsp>mainline casualty --- ...edirect-keycode-316-to-rocknix-joypa.patch | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch diff --git a/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch new file mode 100644 index 000000000..2484963ec --- /dev/null +++ b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch @@ -0,0 +1,52 @@ +From df39cfef26162e24609213021be1010c627be394 Mon Sep 17 00:00:00 2001 +From: spycat88 +Date: Tue, 7 May 2024 20:15:51 +0100 +Subject: [PATCH] input: adc-keys: redirect keycode 316 to rocknix-joypad + +--- + drivers/input/keyboard/adc-keys.c | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) + +diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c +index bf72ab8df817..aaee32a17627 100644 +--- a/drivers/input/keyboard/adc-keys.c ++++ b/drivers/input/keyboard/adc-keys.c +@@ -16,6 +16,9 @@ + #include + #include + ++extern void rk_send_key_f_key_up(void); ++extern void rk_send_key_f_key_down(void); ++ + struct adc_keys_button { + u32 voltage; + u32 keycode; +@@ -53,11 +56,21 @@ static void adc_keys_poll(struct input_dev *input) + if (abs(st->keyup_voltage - value) < closest) + keycode = 0; + +- if (st->last_key && st->last_key != keycode) +- input_report_key(input, st->last_key, 0); ++ if (st->last_key && st->last_key != keycode) { ++ if (st->last_key = 316) { ++ rk_send_key_f_key_down(); ++ } else { ++ input_report_key(input, st->last_key, 0); ++ } ++ } + +- if (keycode) +- input_report_key(input, keycode, 1); ++ if (keycode) { ++ if (keycode = 316) { ++ rk_send_key_f_key_up(); ++ } else { ++ input_report_key(input, keycode, 1); ++ } ++ } + + input_sync(input); + st->last_key = keycode; +-- +2.34.1 + From 4f388c8dfd26815c2a663562a0aad5349d245804 Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Fri, 10 May 2024 01:34:11 -0700 Subject: [PATCH 161/184] kernel: quick fix for kernel compilation errors for now, rocknix joypad drivers need to be in kernel rather than modules --- packages/kernel/linux/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 0fe7bc9fb..f86f6691e 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -67,7 +67,7 @@ post_unpack() { $(get_build_dir rocknix-joypad)/rocknix-joypad.h \ $(get_build_dir rocknix-joypad)/rocknix-singleadc-joypad.c \ ${PKG_BUILD}/drivers/input/joystick - echo "obj-m += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile + echo "obj-y += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile fi } From 1c6e5526e4e50e4d0ed11f29228c5f9526fe1d69 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Fri, 10 May 2024 13:57:32 +0000 Subject: [PATCH 162/184] H700 bring up --- Makefile | 2 +- .../quirks/platforms/H700/090-ui_service | 9 ++ packages/kernel/linux/package.mk | 2 +- .../devices/H700/linux/linux.aarch64.conf | 109 +++++++++++++++--- projects/Allwinner/devices/H700/options | 3 +- .../linux/H700/000-temp-build-fixes.patch | 38 ++++++ .../linux/H700/001-fix-panfrost-crash.patch | 11 ++ 7 files changed, 152 insertions(+), 22 deletions(-) create mode 100755 packages/hardware/quirks/platforms/H700/090-ui_service create mode 100644 projects/Allwinner/patches/linux/H700/000-temp-build-fixes.patch create mode 100644 projects/Allwinner/patches/linux/H700/001-fix-panfrost-crash.patch diff --git a/Makefile b/Makefile index aeb13912e..418d4e0cd 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ RK3399: H700: unset DEVICE_ROOT PROJECT=Allwinner DEVICE=H700 ARCH=arm ./scripts/build_distro - PROJECT=Allwinner DEVICE=H700 ARCH=aarch64 ./scripts/build_dist + PROJECT=Allwinner DEVICE=H700 ARCH=aarch64 ./scripts/build_distro update: PROJECT=Rockchip DEVICE=RK3588 ARCH=aarch64 ./scripts/update_packages diff --git a/packages/hardware/quirks/platforms/H700/090-ui_service b/packages/hardware/quirks/platforms/H700/090-ui_service new file mode 100755 index 000000000..e8843f746 --- /dev/null +++ b/packages/hardware/quirks/platforms/H700/090-ui_service @@ -0,0 +1,9 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +### Set the default device configuration +cat </storage/.config/profile.d/090-ui_service +UI_SERVICE="sway.service essway.service" +EOF diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 40d5d79d5..81031605e 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -25,7 +25,7 @@ case ${DEVICE} in PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" ;; H700) - PKG_VERSION="4e92998c4f95a56578b4aa2c55b02e97381c8773" + PKG_VERSION="6c522e1c85a07e2e0db113a979c0a404eb692de1" PKG_URL="https://git.sr.ht/~tokyovigilante/linux/archive/${PKG_VERSION}.tar.gz" ;; *) diff --git a/projects/Allwinner/devices/H700/linux/linux.aarch64.conf b/projects/Allwinner/devices/H700/linux/linux.aarch64.conf index 83aa94f38..a2464debd 100644 --- a/projects/Allwinner/devices/H700/linux/linux.aarch64.conf +++ b/projects/Allwinner/devices/H700/linux/linux.aarch64.conf @@ -1513,6 +1513,8 @@ CONFIG_CFG80211_DEFAULT_PS=y # CONFIG_CFG80211_DEBUGFS is not set CONFIG_CFG80211_CRDA_SUPPORT=y # CONFIG_CFG80211_WEXT is not set +CONFIG_LIB80211=m +# CONFIG_LIB80211_DEBUG is not set CONFIG_MAC80211=y CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y @@ -1989,7 +1991,7 @@ CONFIG_SRAM=y CONFIG_EEPROM_AT24=y CONFIG_EEPROM_AT25=y # CONFIG_EEPROM_MAX6875 is not set -# CONFIG_EEPROM_93CX6 is not set +CONFIG_EEPROM_93CX6=m # CONFIG_EEPROM_93XX46 is not set # CONFIG_EEPROM_IDT_89HPESX is not set # CONFIG_EEPROM_EE1004 is not set @@ -2427,16 +2429,20 @@ CONFIG_WLAN=y CONFIG_ATH_COMMON=m CONFIG_WLAN_VENDOR_ATH=y # CONFIG_ATH_DEBUG is not set +# CONFIG_ATH5K is not set +# CONFIG_ATH5K_PCI is not set CONFIG_ATH9K_HW=m CONFIG_ATH9K_COMMON=m CONFIG_ATH9K_BTCOEX_SUPPORT=y CONFIG_ATH9K=m +CONFIG_ATH9K_PCI=y # CONFIG_ATH9K_AHB is not set # CONFIG_ATH9K_DYNACK is not set # CONFIG_ATH9K_WOW is not set CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_CHANNEL_CONTEXT=y CONFIG_ATH9K_PCOEM=y +# CONFIG_ATH9K_PCI_NO_EEPROM is not set CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_ATH9K_HWRNG=y @@ -2449,8 +2455,10 @@ CONFIG_ATH6KL=m CONFIG_ATH6KL_USB=m # CONFIG_ATH6KL_DEBUG is not set CONFIG_AR5523=m +# CONFIG_WIL6210 is not set CONFIG_ATH10K=m CONFIG_ATH10K_CE=y +# CONFIG_ATH10K_PCI is not set # CONFIG_ATH10K_SDIO is not set CONFIG_ATH10K_USB=m # CONFIG_ATH10K_DEBUG is not set @@ -2458,6 +2466,7 @@ CONFIG_ATH10K_USB=m CONFIG_WCN36XX=m # CONFIG_WCN36XX_DEBUGFS is not set # CONFIG_ATH11K is not set +# CONFIG_ATH12K is not set CONFIG_WLAN_VENDOR_ATMEL=y CONFIG_AT76C50X_USB=m CONFIG_WLAN_VENDOR_BROADCOM=y @@ -2467,6 +2476,8 @@ CONFIG_B43_SSB=y CONFIG_B43_BUSES_BCMA_AND_SSB=y # CONFIG_B43_BUSES_BCMA is not set # CONFIG_B43_BUSES_SSB is not set +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y # CONFIG_B43_SDIO is not set CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y @@ -2484,12 +2495,19 @@ CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_PROTO_BCDC=y CONFIG_BRCMFMAC_SDIO=y CONFIG_BRCMFMAC_USB=y +# CONFIG_BRCMFMAC_PCIE is not set # CONFIG_BRCM_TRACING is not set # CONFIG_BRCMDBG is not set CONFIG_WLAN_VENDOR_INTEL=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_IWL4965 is not set +# CONFIG_IWL3945 is not set +# CONFIG_IWLWIFI is not set CONFIG_WLAN_VENDOR_INTERSIL=y CONFIG_P54_COMMON=m CONFIG_P54_USB=m +# CONFIG_P54_PCI is not set # CONFIG_P54_SPI is not set CONFIG_P54_LEDS=y CONFIG_WLAN_VENDOR_MARVELL=y @@ -2504,7 +2522,9 @@ CONFIG_LIBERTAS_THINFIRM=m CONFIG_LIBERTAS_THINFIRM_USB=m CONFIG_MWIFIEX=m # CONFIG_MWIFIEX_SDIO is not set +# CONFIG_MWIFIEX_PCIE is not set CONFIG_MWIFIEX_USB=m +# CONFIG_MWL8K is not set CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_MT7601U=m CONFIG_MT76_CORE=m @@ -2516,14 +2536,22 @@ CONFIG_MT76x02_USB=m CONFIG_MT76_CONNAC_LIB=m CONFIG_MT76x0_COMMON=m CONFIG_MT76x0U=m +# CONFIG_MT76x0E is not set CONFIG_MT76x2_COMMON=m +# CONFIG_MT76x2E is not set CONFIG_MT76x2U=m +# CONFIG_MT7603E is not set CONFIG_MT7615_COMMON=m +# CONFIG_MT7615E is not set CONFIG_MT7663_USB_SDIO_COMMON=m CONFIG_MT7663U=m CONFIG_MT7663S=m +# CONFIG_MT7915E is not set +# CONFIG_MT7921E is not set # CONFIG_MT7921S is not set # CONFIG_MT7921U is not set +# CONFIG_MT7996E is not set +# CONFIG_MT7925E is not set # CONFIG_MT7925U is not set CONFIG_WLAN_VENDOR_MICROCHIP=y # CONFIG_WILC1000_SDIO is not set @@ -2532,6 +2560,10 @@ CONFIG_WLAN_VENDOR_PURELIFI=y # CONFIG_PLFXLC is not set CONFIG_WLAN_VENDOR_RALINK=y CONFIG_RT2X00=m +# CONFIG_RT2400PCI is not set +# CONFIG_RT2500PCI is not set +# CONFIG_RT61PCI is not set +# CONFIG_RT2800PCI is not set CONFIG_RT2500USB=m CONFIG_RT73USB=m CONFIG_RT2800USB=m @@ -2549,9 +2581,18 @@ CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set CONFIG_WLAN_VENDOR_REALTEK=y +# CONFIG_RTL8180 is not set CONFIG_RTL8187=m CONFIG_RTL8187_LEDS=y CONFIG_RTL_CARDS=m +# CONFIG_RTL8192CE is not set +# CONFIG_RTL8192SE is not set +# CONFIG_RTL8192DE is not set +# CONFIG_RTL8723AE is not set +# CONFIG_RTL8723BE is not set +# CONFIG_RTL8188EE is not set +# CONFIG_RTL8192EE is not set +# CONFIG_RTL8821AE is not set CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m CONFIG_RTLWIFI_USB=m @@ -2560,15 +2601,23 @@ CONFIG_RTL8192C_COMMON=m CONFIG_RTL8XXXU=m # CONFIG_RTL8XXXU_UNTESTED is not set CONFIG_RTW88=m +# CONFIG_RTW88_8822BE is not set # CONFIG_RTW88_8822BS is not set # CONFIG_RTW88_8822BU is not set +# CONFIG_RTW88_8822CE is not set # CONFIG_RTW88_8822CS is not set # CONFIG_RTW88_8822CU is not set +# CONFIG_RTW88_8723DE is not set # CONFIG_RTW88_8723DS is not set # CONFIG_RTW88_8723DU is not set +# CONFIG_RTW88_8821CE is not set # CONFIG_RTW88_8821CS is not set # CONFIG_RTW88_8821CU is not set CONFIG_RTW89=m +# CONFIG_RTW89_8851BE is not set +# CONFIG_RTW89_8852AE is not set +# CONFIG_RTW89_8852BE is not set +# CONFIG_RTW89_8852CE is not set CONFIG_WLAN_VENDOR_RSI=y # CONFIG_RSI_91X is not set CONFIG_WLAN_VENDOR_SILABS=y @@ -2584,6 +2633,7 @@ CONFIG_WLCORE=m # CONFIG_WLCORE_SDIO is not set # CONFIG_WLAN_VENDOR_ZYDAS is not set CONFIG_WLAN_VENDOR_QUANTENNA=y +# CONFIG_QTNFMAC_PCIE is not set # CONFIG_MAC80211_HWSIM is not set # CONFIG_VIRT_WIFI is not set # CONFIG_WAN is not set @@ -3075,14 +3125,14 @@ CONFIG_PINCTRL_SUNXI=y # CONFIG_PINCTRL_SUN5I is not set # CONFIG_PINCTRL_SUN6I_A31 is not set # CONFIG_PINCTRL_SUN6I_A31_R is not set -# CONFIG_PINCTRL_SUN8I_A23 is not set -# CONFIG_PINCTRL_SUN8I_A33 is not set -# CONFIG_PINCTRL_SUN8I_A83T is not set -# CONFIG_PINCTRL_SUN8I_A83T_R is not set -# CONFIG_PINCTRL_SUN8I_A23_R is not set -# CONFIG_PINCTRL_SUN8I_H3 is not set -# CONFIG_PINCTRL_SUN8I_H3_R is not set -# CONFIG_PINCTRL_SUN8I_V3S is not set +CONFIG_PINCTRL_SUN8I_A23=y +CONFIG_PINCTRL_SUN8I_A33=y +CONFIG_PINCTRL_SUN8I_A83T=y +CONFIG_PINCTRL_SUN8I_A83T_R=y +CONFIG_PINCTRL_SUN8I_A23_R=y +CONFIG_PINCTRL_SUN8I_H3 is=y +CONFIG_PINCTRL_SUN8I_H3_R=y +CONFIG_PINCTRL_SUN8I_V3S=y # CONFIG_PINCTRL_SUN9I_A80 is not set # CONFIG_PINCTRL_SUN9I_A80_R is not set # CONFIG_PINCTRL_SUN20I_D1 is not set @@ -3486,9 +3536,27 @@ CONFIG_SUNXI_WATCHDOG=y # # CONFIG_USBPCWATCHDOG is not set CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +# CONFIG_SSB_SDIOHOST is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_SSB_DRIVER_GPIO is not set CONFIG_BCMA_POSSIBLE=y -# CONFIG_BCMA is not set +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +# CONFIG_BCMA_HOST_SOC is not set +CONFIG_BCMA_DRIVER_PCI=y +# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +# CONFIG_BCMA_DRIVER_GPIO is not set +# CONFIG_BCMA_DEBUG is not set # # Multifunction device drivers @@ -3859,10 +3927,10 @@ CONFIG_VIDEO_MUX=y # # Sunxi media platform drivers # -# CONFIG_VIDEO_SUN4I_CSI is not set -# CONFIG_VIDEO_SUN6I_CSI is not set -# CONFIG_VIDEO_SUN6I_MIPI_CSI2 is not set -# CONFIG_VIDEO_SUN8I_A83T_MIPI_CSI2 is not set +CONFIG_VIDEO_SUN4I_CSI=y +CONFIG_VIDEO_SUN6I_CSI=y +CONFIG_VIDEO_SUN6I_MIPI_CSI2=y +CONFIG_VIDEO_SUN8I_A83T_MIPI_CSI2=y CONFIG_VIDEO_SUN8I_DEINTERLACE=y CONFIG_VIDEO_SUN8I_ROTATE=y @@ -4132,7 +4200,7 @@ CONFIG_DRM_SCHED=y # ARM devices # # CONFIG_DRM_HDLCD is not set -# CONFIG_DRM_MALI_DISPLAY is not set +CONFIG_DRM_MALI_DISPLAY=y # CONFIG_DRM_KOMEDA is not set # end of ARM devices @@ -4294,7 +4362,7 @@ CONFIG_DRM_SIMPLE_BRIDGE=y # CONFIG_DRM_I2C_ADV7511 is not set # CONFIG_DRM_CDNS_DSI is not set # CONFIG_DRM_CDNS_MHDP8546 is not set -CONFIG_DRM_DW_HDMI=y +# CONFIG_DRM_DW_HDMI is not set # CONFIG_DRM_DW_HDMI_CEC is not set # end of Display Interface Bridges @@ -4606,6 +4674,8 @@ CONFIG_USB_OHCI_HCD_PLATFORM=y # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_SL811_HCD is not set # CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set # CONFIG_USB_HCD_TEST_MODE is not set # CONFIG_USB_XEN_HCD is not set @@ -4614,7 +4684,7 @@ CONFIG_USB_OHCI_HCD_PLATFORM=y # # CONFIG_USB_ACM is not set # CONFIG_USB_PRINTER is not set -# CONFIG_USB_WDM is not set +CONFIG_USB_WDM=m # CONFIG_USB_TMC is not set # @@ -4842,6 +4912,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=y CONFIG_USB_ROLE_SWITCH=y CONFIG_MMC=y CONFIG_PWRSEQ_EMMC=y +# CONFIG_PWRSEQ_SD8787 is not set CONFIG_PWRSEQ_SIMPLE=y CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_MINORS=32 @@ -6783,7 +6854,7 @@ CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y -# CONFIG_CORDIC is not set +CONFIG_CORDIC=m # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y diff --git a/projects/Allwinner/devices/H700/options b/projects/Allwinner/devices/H700/options index 456485b79..9779e1e92 100644 --- a/projects/Allwinner/devices/H700/options +++ b/projects/Allwinner/devices/H700/options @@ -30,7 +30,7 @@ KERNEL_TARGET="Image" BOOTLOADER="u-boot" PARTITION_TABLE="msdos" - DEVICE_DTB=("sun50i-h700-anbernic-rg35xx-plus") + DEVICE_DTB=("sun50i-h700-anbernic-rg35xx-2024") UBOOT_DTB="${DEVICE_DTB[0]}" UBOOT_CONFIG="anbernic_rg35xxplus_defconfig" PKG_SOC="h700" @@ -48,6 +48,7 @@ # Mali GPU family MALI_FAMILY="bifrost-g31" +# MALI_VERSION="g13p0" GRAPHIC_DRIVERS="panfrost" # OpenGL(X) implementation to use (mesa / no) diff --git a/projects/Allwinner/patches/linux/H700/000-temp-build-fixes.patch b/projects/Allwinner/patches/linux/H700/000-temp-build-fixes.patch new file mode 100644 index 000000000..6af13bc09 --- /dev/null +++ b/projects/Allwinner/patches/linux/H700/000-temp-build-fixes.patch @@ -0,0 +1,38 @@ +diff -rupN linux.orig/arch/arm64/boot/dts/allwinner/sun50i-h700-anbernic-rg35xx-2024.dts linux/arch/arm64/boot/dts/allwinner/sun50i-h700-anbernic-rg35xx-2024.dts +--- linux.orig/arch/arm64/boot/dts/allwinner/sun50i-h700-anbernic-rg35xx-2024.dts 2024-05-10 12:36:52.097707251 +0000 ++++ linux/arch/arm64/boot/dts/allwinner/sun50i-h700-anbernic-rg35xx-2024.dts 2024-05-10 12:40:41.366968088 +0000 +@@ -204,10 +204,10 @@ + }; + }; + +-&codec { +- allwinner,audio-routing = "Line Out", "LINEOUT"; +- status = "okay"; +-}; ++//&codec { ++// allwinner,audio-routing = "Line Out", "LINEOUT"; ++// status = "okay"; ++//}; + + &cpu0 { + cpu-supply = <®_dcdc1>; +@@ -221,6 +221,7 @@ + mali-supply = <®_dcdc2>; + power-domains = <&r_ccu 0>; + status = "okay"; ++}; + + &hdmi { + hvcc-supply = <®_bldo1>; +diff -rupN linux.orig/drivers/iommu/sun50i-iommu.c linux/drivers/iommu/sun50i-iommu.c +--- linux.orig/drivers/iommu/sun50i-iommu.c 2024-05-10 12:36:52.757722451 +0000 ++++ linux/drivers/iommu/sun50i-iommu.c 2024-05-10 12:46:20.350459373 +0000 +@@ -1049,7 +1049,7 @@ err_unregister: + err_remove_sysfs: + iommu_device_sysfs_remove(&iommu->iommu); + +-err_free_group: ++err_free_cache: + iommu_group_put(iommu->group); + + return ret; diff --git a/projects/Allwinner/patches/linux/H700/001-fix-panfrost-crash.patch b/projects/Allwinner/patches/linux/H700/001-fix-panfrost-crash.patch new file mode 100644 index 000000000..889d1f946 --- /dev/null +++ b/projects/Allwinner/patches/linux/H700/001-fix-panfrost-crash.patch @@ -0,0 +1,11 @@ +diff -rupN linux.orig/drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c linux/drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c +--- linux.orig/drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c 2024-05-08 19:56:00.776486511 +0000 ++++ linux/drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c 2024-05-09 21:53:32.229470725 +0000 +@@ -295,6 +295,7 @@ static int sun50i_h616_register_ppu(stru + ret = of_genpd_add_provider_onecell(dev->of_node, ppu); + if (ret) + dev_warn(dev, "Failed to add provider: %d\n", ret); ++ sun50i_h616_ppu_pd_power_on(&pd->genpd); + + return 0; + } From efeaca72d996e93155429d7a44bedf61685ce299 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Fri, 10 May 2024 13:47:40 +0300 Subject: [PATCH 163/184] reduce host package dependencies --- packages/compress/cpio/package.mk | 11 ---------- packages/devel/xa/package.mk | 2 +- packages/graphics/SDL2/package.mk | 1 - packages/graphics/libjpeg-turbo/package.mk | 2 +- .../firmware/kernel-firmware/package.mk | 2 +- packages/kernel/linux/package.mk | 2 +- packages/sysutils/e2fsprogs/package.mk | 2 +- packages/sysutils/file/package.mk | 2 +- packages/sysutils/kmod/package.mk | 2 +- packages/textproc/bdf2psf/package.mk | 2 +- packages/textproc/dos2unix/package.mk | 2 +- packages/virtual/initramfs/package.mk | 21 +------------------ packages/x11/font/font-util/package.mk | 2 +- packages/x11/util/util-macros/package.mk | 2 +- 14 files changed, 12 insertions(+), 43 deletions(-) delete mode 100644 packages/compress/cpio/package.mk diff --git a/packages/compress/cpio/package.mk b/packages/compress/cpio/package.mk deleted file mode 100644 index 0321292e2..000000000 --- a/packages/compress/cpio/package.mk +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) - -PKG_NAME="cpio" -PKG_VERSION="2.14" -PKG_LICENSE="GPL" -PKG_SITE="http://www.gnu.org/software/cpio/" -PKG_URL="http://ftp.gnu.org/gnu/cpio/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain" -PKG_LONGDESC="A program to manage archives of files." diff --git a/packages/devel/xa/package.mk b/packages/devel/xa/package.mk index 42db3f6d3..d35f522b3 100644 --- a/packages/devel/xa/package.mk +++ b/packages/devel/xa/package.mk @@ -7,7 +7,7 @@ PKG_LICENSE="GPL" PKG_SITE="https://www.floodgap.com/retrotech/xa/" PKG_URL="${PKG_SITE}/dists/xa-${PKG_VERSION}.tar.gz" PKG_DEPENDS_TARGET="toolchain" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="ccache:host" PKG_LONGDESC="xa is a high-speed, two-pass portable cross-assembler." makeinstall_host() { diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index a2f617cc8..3727761c1 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -7,7 +7,6 @@ PKG_VERSION="2.30.2" PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://www.libsdl.org/release/SDL2-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain" PKG_DEPENDS_TARGET="toolchain alsa-lib systemd dbus pulseaudio libdrm SDL2:host" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware." PKG_DEPENDS_HOST="toolchain:host distutilscross:host" diff --git a/packages/graphics/libjpeg-turbo/package.mk b/packages/graphics/libjpeg-turbo/package.mk index f9ba6170b..d414f2381 100644 --- a/packages/graphics/libjpeg-turbo/package.mk +++ b/packages/graphics/libjpeg-turbo/package.mk @@ -8,7 +8,7 @@ PKG_VERSION="3.0.1" PKG_LICENSE="GPL" PKG_SITE="https://libjpeg-turbo.org/" PKG_URL="https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="toolchain:host" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A high-speed version of libjpeg for x86 and x86-64 processors which uses SIMD." PKG_BUILD_FLAGS="+pic +pic:host" diff --git a/packages/kernel/firmware/kernel-firmware/package.mk b/packages/kernel/firmware/kernel-firmware/package.mk index d261f88c8..3d3a3d9d2 100644 --- a/packages/kernel/firmware/kernel-firmware/package.mk +++ b/packages/kernel/firmware/kernel-firmware/package.mk @@ -8,7 +8,7 @@ PKG_SITE="https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmwar PKG_URL="https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-${PKG_VERSION}.tar.gz" PKG_NEED_UNPACK="${PROJECT_DIR}/${PROJECT}/packages/${PKG_NAME} ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/packages/${PKG_NAME}" PKG_LONGDESC="kernel-firmware: kernel related firmware" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="" PKG_TOOLCHAIN="manual" configure_package() { diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index f86f6691e..9b4d375fd 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -6,7 +6,7 @@ PKG_NAME="linux" PKG_LICENSE="GPL" PKG_SITE="http://www.kernel.org" PKG_DEPENDS_HOST="ccache:host rsync:host openssl:host" -PKG_DEPENDS_TARGET="linux:host kmod:host cpio:host xz:host keyutils ncurses openssl:host ${KERNEL_EXTRA_DEPENDS_TARGET}" +PKG_DEPENDS_TARGET="linux:host kmod:host xz:host keyutils ncurses openssl:host ${KERNEL_EXTRA_DEPENDS_TARGET}" PKG_NEED_UNPACK="${LINUX_DEPENDS} $(get_pkg_directory initramfs) $(get_pkg_variable initramfs PKG_NEED_UNPACK)" PKG_LONGDESC="This package contains a precompiled kernel image and the modules." PKG_IS_KERNEL_PKG="yes" diff --git a/packages/sysutils/e2fsprogs/package.mk b/packages/sysutils/e2fsprogs/package.mk index e02387a9a..3a7456926 100644 --- a/packages/sysutils/e2fsprogs/package.mk +++ b/packages/sysutils/e2fsprogs/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="1.47.0" PKG_LICENSE="GPL" PKG_SITE="http://e2fsprogs.sourceforge.net/" PKG_URL="https://www.kernel.org/pub/linux/kernel/people/tytso/${PKG_NAME}/v${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_HOST="gcc:host" +PKG_DEPENDS_HOST="ccache:host" PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_INIT="toolchain" PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others." diff --git a/packages/sysutils/file/package.mk b/packages/sysutils/file/package.mk index 3418e22ad..25ea7f803 100644 --- a/packages/sysutils/file/package.mk +++ b/packages/sysutils/file/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="c5eb6d6" PKG_LICENSE="BSD" PKG_SITE="http://www.darwinsys.com/file/" PKG_URL="https://github.com/file/file/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="ccache:host autotools:host" PKG_DEPENDS_TARGET="toolchain file:host zlib" PKG_LONGDESC="The file utility is used to determine the types of various files." PKG_TOOLCHAIN="autotools" diff --git a/packages/sysutils/kmod/package.mk b/packages/sysutils/kmod/package.mk index e32dfc3ef..09dd6370a 100644 --- a/packages/sysutils/kmod/package.mk +++ b/packages/sysutils/kmod/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="30" PKG_LICENSE="GPL" PKG_SITE="http://git.profusion.mobi/cgit.cgi/kmod.git/" PKG_URL="https://www.kernel.org/pub/linux/utils/kernel/kmod/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="ccache:host" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="kmod offers the needed flexibility and fine grained control over insertion, removal, configuration and listing of kernel modules." diff --git a/packages/textproc/bdf2psf/package.mk b/packages/textproc/bdf2psf/package.mk index 637e5959f..f596e0998 100644 --- a/packages/textproc/bdf2psf/package.mk +++ b/packages/textproc/bdf2psf/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="1.226" PKG_LICENSE="GPLv2" PKG_SITE="https://packages.debian.org/unstable/${PKG_NAME}" PKG_URL="https://deb.debian.org/debian/pool/main/c/console-setup/${PKG_NAME}_${PKG_VERSION}_all.deb" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="" PKG_LONGDESC="Utility to convert BDF font files to PSF format" PKG_TOOLCHAIN="manual" diff --git a/packages/textproc/dos2unix/package.mk b/packages/textproc/dos2unix/package.mk index 0580adf97..667a994af 100644 --- a/packages/textproc/dos2unix/package.mk +++ b/packages/textproc/dos2unix/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="7.5.1" PKG_LICENSE="GPLv3" PKG_SITE="https://sourceforge.net/projects/dos2unix" PKG_URL="https://downloads.sourceforge.net/project/${PKG_NAME}/${PKG_NAME}/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain" +PKG_DEPENDS_HOST="ccache:host" PKG_LONGDESC="Dos2Unix / Unix2Dos - Text file format converters" post_unpack() { diff --git a/packages/virtual/initramfs/package.mk b/packages/virtual/initramfs/package.mk index 49aa5421d..2f4c75441 100644 --- a/packages/virtual/initramfs/package.mk +++ b/packages/virtual/initramfs/package.mk @@ -7,7 +7,7 @@ PKG_VERSION="" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" -PKG_DEPENDS_TARGET="libc:init glibc:init busybox:init util-linux:init e2fsprogs:init dosfstools:init exfat:init fakeroot:host spleen-font:init" +PKG_DEPENDS_TARGET="libc:init glibc:init busybox:init util-linux:init e2fsprogs:init dosfstools:init exfat:init spleen-font:init" PKG_SECTION="virtual" PKG_LONGDESC="debug is a Metapackage for installing initramfs" @@ -18,22 +18,3 @@ fi if [ "${INITRAMFS_PARTED_SUPPORT}" = yes ]; then PKG_DEPENDS_TARGET="${PKG_DEPENDS_TARGET} parted:init" fi - -post_install() { - ( - cd ${BUILD}/initramfs - if [ "${TARGET_ARCH}" = "x86_64" ]; then - ln -sfn /usr/lib ${BUILD}/initramfs/lib64 - mkdir -p ${BUILD}/initramfs/usr - ln -sfn /usr/lib ${BUILD}/initramfs/usr/lib64 - fi - - ln -sfn /usr/lib ${BUILD}/initramfs/lib - ln -sfn /usr/bin ${BUILD}/initramfs/bin - ln -sfn /usr/sbin ${BUILD}/initramfs/sbin - - mkdir -p ${BUILD}/image/ - fakeroot -- sh -c \ - "mkdir -p dev; mknod -m 600 dev/console c 5 1; find . | cpio -H newc -ov -R 0:0 > ${BUILD}/image/initramfs.cpio" - ) -} diff --git a/packages/x11/font/font-util/package.mk b/packages/x11/font/font-util/package.mk index 1aeee0a77..d711aad24 100644 --- a/packages/x11/font/font-util/package.mk +++ b/packages/x11/font/font-util/package.mk @@ -9,7 +9,7 @@ PKG_LICENSE="OSS" PKG_SITE="https://www.X.org" PKG_URL="https://xorg.freedesktop.org/archive/individual/font/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_DEPENDS_TARGET="toolchain util-macros" -PKG_DEPENDS_HOST="util-macros" +PKG_DEPENDS_HOST="ccache:host util-macros:host" PKG_LONGDESC="X.org font utilities." PKG_CONFIGURE_OPTS_TARGET="--with-fontrootdir=/usr/share/fonts \ diff --git a/packages/x11/util/util-macros/package.mk b/packages/x11/util/util-macros/package.mk index bc7c94e17..d0091540f 100644 --- a/packages/x11/util/util-macros/package.mk +++ b/packages/x11/util/util-macros/package.mk @@ -8,7 +8,7 @@ PKG_SHA256="0b86b262dbe971edb4ff233bc370dfad9f241d09f078a3f6d5b7f4b8ea4430db" PKG_LICENSE="OSS" PKG_SITE="https://www.X.org" PKG_URL="https://xorg.freedesktop.org/archive/individual/util/${PKG_NAME}-${PKG_VERSION}.tar.xz" -PKG_DEPENDS_TARGET="toolchain" +PKG_DEPENDS_TARGET="" PKG_LONGDESC="X.org autoconf utilities such as M4 macros." post_makeinstall_target() { From 93fe57020bf431c42fb898584f429e502d2badc7 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sat, 11 May 2024 13:14:36 +0100 Subject: [PATCH 164/184] linux: bump package --- packages/kernel/linux/package.mk | 15 ++++++--- .../033-bluetooth-backport-l2cap-fix.patch | 31 ------------------- 2 files changed, 10 insertions(+), 36 deletions(-) delete mode 100644 projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 8fa6e10b5..249267183 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -19,20 +19,25 @@ if [ "${DEVICE}" = "S922X" -a "${USE_MALI}" = "no" ]; then fi case ${DEVICE} in - RK3588*) + RK3326) + PKG_VERSION="6.8.9" + PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" + PKG_PATCH_DIRS+=" mainline" + ;; + RK3588) PKG_VERSION="494c0a303537c55971421b5552d98eb55e652cf3" PKG_URL="https://github.com/armbian/linux-rockchip/archive/${PKG_VERSION}.tar.gz" PKG_GIT_CLONE_BRANCH="rk-5.10-rkr6" - ;; + ;; H700) PKG_VERSION="6c522e1c85a07e2e0db113a979c0a404eb692de1" PKG_URL="https://git.sr.ht/~tokyovigilante/linux/archive/${PKG_VERSION}.tar.gz" - ;; + ;; *) - PKG_VERSION="6.9-rc3" + PKG_VERSION="6.9-rc7" PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" PKG_PATCH_DIRS+=" mainline" - ;; + ;; esac PKG_KERNEL_CFG_FILE=$(kernel_config_path) || die diff --git a/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch b/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch deleted file mode 100644 index cc748c6af..000000000 --- a/projects/Rockchip/patches/linux/RK3566/033-bluetooth-backport-l2cap-fix.patch +++ /dev/null @@ -1,31 +0,0 @@ -From e6bb15dbae900b71b69fc52a9f640d699bb840b4 Mon Sep 17 00:00:00 2001 -From: Archie Pusaka -Date: Thu, 4 Apr 2024 18:50:23 +0800 -Subject: [PATCH] Bluetooth: l2cap: Don't double set the - HCI_CONN_MGMT_CONNECTED bit - -The bit is set and tested inside mgmt_device_connected(), therefore we -must not set it just outside the function. - -Fixes: eeda1bf97bb5 ("Bluetooth: hci_event: Fix not indicating new connection for BIG Sync") -Signed-off-by: Archie Pusaka -Reviewed-by: Manish Mandlik -Signed-off-by: Luiz Augusto von Dentz ---- - net/bluetooth/l2cap_core.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c -index cf3b8e9b7b3b..b0970462a689 100644 ---- a/net/bluetooth/l2cap_core.c -+++ b/net/bluetooth/l2cap_core.c -@@ -4063,8 +4063,7 @@ static int l2cap_connect_req(struct l2cap_conn *conn, - return -EPROTO; - - hci_dev_lock(hdev); -- if (hci_dev_test_flag(hdev, HCI_MGMT) && -- !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) -+ if (hci_dev_test_flag(hdev, HCI_MGMT)) - mgmt_device_connected(hdev, hcon, NULL, 0); - hci_dev_unlock(hdev); - From 65a16c10f9f192ec100a590ad3d7f83acdd248ac Mon Sep 17 00:00:00 2001 From: John Williams Date: Sun, 12 May 2024 20:55:45 +1000 Subject: [PATCH 165/184] S922X - use RTL8821CU driver package. Bump RTL8821CU package. --- packages/kernel/drivers/RTL8821CU/package.mk | 2 +- projects/Amlogic/devices/S922X/linux/linux.aarch64.conf | 2 +- projects/Amlogic/devices/S922X/options | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kernel/drivers/RTL8821CU/package.mk b/packages/kernel/drivers/RTL8821CU/package.mk index 2e32350d2..03e1da4cb 100644 --- a/packages/kernel/drivers/RTL8821CU/package.mk +++ b/packages/kernel/drivers/RTL8821CU/package.mk @@ -4,7 +4,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="RTL8821CU" -PKG_VERSION="4f6004af4c4171882f37e2e5d8fb3609fe260617" +PKG_VERSION="3eacc28b721950b51b0249508cc31e6e54988a0c" PKG_ARCH="aarch64 x86_64" PKG_LICENSE="GPL" PKG_SITE="https://github.com/morrownr/8821cu-20210916" diff --git a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf index dbe7b0131..70876107f 100644 --- a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf +++ b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf @@ -2483,7 +2483,7 @@ CONFIG_RTW88_8723DE=m # CONFIG_RTW88_8723DU is not set CONFIG_RTW88_8821CE=m # CONFIG_RTW88_8821CS is not set -CONFIG_RTW88_8821CU=m +# CONFIG_RTW88_8821CU is not set # CONFIG_RTW88_DEBUG is not set # CONFIG_RTW88_DEBUGFS is not set CONFIG_RTW89=m diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index 85a4ef202..b8885a422 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -98,7 +98,7 @@ # for a list of additional drivers see packages/linux-drivers # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="DRIVER1 DRIVER2" - ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU" + ADDITIONAL_DRIVERS="RTL8812AU RTL8821AU RTL8821CU" if [ "${USE_MALI}" != "no" ]; then ADDITIONAL_DRIVERS+=" mali-bifrost" From fc195bf18d40fe501eca36f7f08a65ee0a6bdc65 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Sun, 12 May 2024 22:36:04 +0100 Subject: [PATCH 166/184] linux: fix building on RK3326 --- packages/kernel/linux/package.mk | 2 +- projects/Rockchip/devices/RK3326/options | 3 + .../linux/RK3326/001-panel-updates.patch | 82 +++++++++---------- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 249267183..8755f451f 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -21,7 +21,7 @@ fi case ${DEVICE} in RK3326) PKG_VERSION="6.8.9" - PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" + PKG_URL="https://www.kernel.org/pub/linux/kernel/v${PKG_VERSION/.*/}.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_PATCH_DIRS+=" mainline" ;; RK3588) diff --git a/projects/Rockchip/devices/RK3326/options b/projects/Rockchip/devices/RK3326/options index ce35e1efc..d11ac65d2 100644 --- a/projects/Rockchip/devices/RK3326/options +++ b/projects/Rockchip/devices/RK3326/options @@ -73,6 +73,9 @@ # kernel serial console EXTRA_CMDLINE="quiet rootwait console=ttyFIQ0 console=tty0 ssh consoleblank=0 systemd.show_status=0 loglevel=0 panic=20" + # build and install rocknix joypad driver (yes / no) + ROCKNIX_JOYPAD="yes" + # additional packages to install ADDITIONAL_PACKAGES="device-switch libmali" diff --git a/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch b/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch index e9e39f27c..c0df9ea94 100644 --- a/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch +++ b/projects/Rockchip/patches/linux/RK3326/001-panel-updates.patch @@ -149,7 +149,7 @@ index 94d89ffd596b..561a77abd2c9 100644 static const struct of_device_id newvision_nv3051d_of_match[] = { diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c -index a3e142f156d5..04cc2aef01f1 100644 +index b55bafd1a8be..c65d9e459f01 100644 --- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c +++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c @@ -13,8 +13,9 @@ @@ -171,7 +171,7 @@ index a3e142f156d5..04cc2aef01f1 100644 #define ST7703_CMD_SETGAMMA 0xE0 #define ST7703_CMD_SETEQ 0xE3 #define ST7703_CMD_SETGIP1 0xE9 -@@ -78,6 +80,14 @@ static inline struct st7703 *panel_to_st7703(struct drm_panel *panel) +@@ -77,6 +79,14 @@ static inline struct st7703 *panel_to_st7703(struct drm_panel *panel) return container_of(panel, struct st7703, panel); } @@ -186,7 +186,7 @@ index a3e142f156d5..04cc2aef01f1 100644 static int jh057n_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -87,27 +97,27 @@ static int jh057n_init_sequence(struct st7703 *ctx) +@@ -86,27 +96,27 @@ static int jh057n_init_sequence(struct st7703 *ctx) * resemble the ST7703 but the number of parameters often don't match * so it's likely a clone. */ @@ -226,7 +226,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x82, 0x10, 0x06, 0x05, 0x9E, 0x0A, 0xA5, 0x12, 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -@@ -116,7 +126,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) +@@ -115,7 +125,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -235,7 +235,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -@@ -125,7 +135,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) +@@ -124,7 +134,7 @@ static int jh057n_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0A, 0xA5, 0x00, 0x00, 0x00, 0x00); @@ -244,7 +244,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41, 0x37, 0x07, 0x0B, 0x0D, 0x10, 0x11, 0x0F, 0x10, 0x11, 0x18, 0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41, -@@ -160,6 +170,15 @@ static const struct st7703_panel_desc jh057n00900_panel_desc = { +@@ -159,6 +169,15 @@ static const struct st7703_panel_desc jh057n00900_panel_desc = { .init_sequence = jh057n_init_sequence, }; @@ -260,7 +260,7 @@ index a3e142f156d5..04cc2aef01f1 100644 static int xbd599_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -169,9 +188,9 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -168,9 +187,9 @@ static int xbd599_init_sequence(struct st7703 *ctx) */ /* Magic sequence to unlock user commands below. */ @@ -272,7 +272,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x33, /* VC_main = 0, Lane_Number = 3 (4 lanes) */ 0x81, /* DSI_LDO_SEL = 1.7V, RTERM = 90 Ohm */ 0x05, /* IHSRX = x6 (Low High Speed driving ability) */ -@@ -183,14 +202,14 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -182,14 +201,14 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x44, 0x25, 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, 0x00, 0x00, 0x37); @@ -289,7 +289,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x10, /* VBP_RGB_GEN */ 0x10, /* VFP_RGB_GEN */ 0x05, /* DE_BP_RGB_GEN */ -@@ -201,7 +220,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -200,7 +219,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00, 0x00); /* Source driving settings. */ @@ -298,7 +298,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x73, /* N_POPON */ 0x73, /* N_NOPON */ 0x50, /* I_POPON */ -@@ -213,19 +232,19 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -212,19 +231,19 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00 /* Undocumented */); /* NVDDD_SEL = -1.8V, VDDD_SEL = out of range (possibly 1.9V?) */ @@ -322,7 +322,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0xF0, /* NL = 240 */ 0x12, /* RES_V_LSB = 0, BLK_CON = VSSD, * RESO_SEL = 720RGB -@@ -235,7 +254,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -234,7 +253,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) * ISC = 0 frames */); @@ -331,7 +331,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x00, /* PNOEQ */ 0x00, /* NNOEQ */ 0x0B, /* PEQGND */ -@@ -255,9 +274,10 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -254,9 +273,10 @@ static int xbd599_init_sequence(struct st7703 *ctx) * ESD_DET_TIME_SEL = 0 frames */); @@ -344,7 +344,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x74, /* VBTHS, VBTLS: VGH = 17V, VBL = -11V */ 0x00, /* FBOFF_VGH = 0, FBOFF_VGL = 0 */ 0x32, /* VRP */ -@@ -275,19 +295,20 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -274,19 +294,20 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x77 /* VGH3_R_DIV, VGL3_R_DIV (4.5MHz) */); /* Reference voltage. */ @@ -369,7 +369,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -@@ -298,7 +319,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -297,7 +318,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); /* This command is to set backward GIP timing. */ @@ -378,7 +378,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -@@ -309,7 +330,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) +@@ -308,7 +329,7 @@ static int xbd599_init_sequence(struct st7703 *ctx) 0xA5, 0x00, 0x00, 0x00, 0x00); /* Adjust the gamma characteristics of the panel. */ @@ -387,7 +387,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -@@ -342,7 +363,15 @@ static const struct st7703_panel_desc xbd599_desc = { +@@ -341,7 +362,15 @@ static const struct st7703_panel_desc xbd599_desc = { .init_sequence = xbd599_init_sequence, }; @@ -404,7 +404,7 @@ index a3e142f156d5..04cc2aef01f1 100644 { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -350,44 +379,44 @@ static int rg353v2_init_sequence(struct st7703 *ctx) +@@ -349,44 +378,44 @@ static int rg353v2_init_sequence(struct st7703 *ctx) * Init sequence was supplied by the panel vendor. */ @@ -469,7 +469,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x00, 0xb0, 0xb1, 0x11, 0x31, 0x23, 0x28, 0x80, 0xb0, 0xb1, 0x27, 0x08, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, -@@ -396,7 +425,7 @@ static int rg353v2_init_sequence(struct st7703 *ctx) +@@ -395,7 +424,7 @@ static int rg353v2_init_sequence(struct st7703 *ctx) 0x18, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -478,7 +478,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x88, 0xba, 0x17, 0x53, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, 0x88, 0xba, 0x06, 0x42, -@@ -405,12 +434,12 @@ static int rg353v2_init_sequence(struct st7703 *ctx) +@@ -404,12 +433,12 @@ static int rg353v2_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -493,7 +493,7 @@ index a3e142f156d5..04cc2aef01f1 100644 .hdisplay = 640, .hsync_start = 640 + 40, .hsync_end = 640 + 40 + 2, -@@ -425,15 +454,210 @@ static const struct drm_display_mode rg353v2_mode = { +@@ -424,15 +453,210 @@ static const struct drm_display_mode rg353v2_mode = { .height_mm = 57, }; @@ -501,11 +501,10 @@ index a3e142f156d5..04cc2aef01f1 100644 - .mode = &rg353v2_mode, +static const struct st7703_panel_desc rg351v2_desc = { + .mode = &rg351v2_mode, - .lanes = 4, - .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | - MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, - .format = MIPI_DSI_FMT_RGB888, -- .init_sequence = rg353v2_init_sequence, ++ .lanes = 4, ++ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | ++ MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, ++ .format = MIPI_DSI_FMT_RGB888, + .init_sequence = rg351v2_init_sequence, +}; + @@ -592,17 +591,18 @@ index a3e142f156d5..04cc2aef01f1 100644 + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, + .width_mm = 52, + .height_mm = 70, - }; - ++}; ++ +static const struct st7703_panel_desc xu10_desc = { + .mode = &xu10_mode, -+ .lanes = 4, -+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | -+ MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, -+ .format = MIPI_DSI_FMT_RGB888, + .lanes = 4, + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | + MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, + .format = MIPI_DSI_FMT_RGB888, +- .init_sequence = rg353v2_init_sequence, + .init_sequence = xu10_init_sequence, -+}; -+ + }; + +static int r36s_init_sequence(struct st7703 *ctx) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); @@ -707,7 +707,7 @@ index a3e142f156d5..04cc2aef01f1 100644 static int rgb30panel_init_sequence(struct st7703 *ctx) { struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -@@ -447,31 +671,31 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) +@@ -446,31 +670,31 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) mipi_dsi_dcs_exit_sleep_mode(dsi); msleep(250); @@ -754,7 +754,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86, 0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, -@@ -480,7 +704,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) +@@ -479,7 +703,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); @@ -763,7 +763,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88, 0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20, -@@ -489,7 +713,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) +@@ -488,7 +712,7 @@ static int rgb30panel_init_sequence(struct st7703 *ctx) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00, 0x00); @@ -772,7 +772,7 @@ index a3e142f156d5..04cc2aef01f1 100644 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a, 0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, -@@ -766,7 +990,7 @@ static int allpixelson_set(void *data, u64 val) +@@ -667,7 +891,7 @@ static int allpixelson_set(void *data, u64 val) struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); dev_dbg(ctx->dev, "Setting all pixels on\n"); @@ -781,7 +781,7 @@ index a3e142f156d5..04cc2aef01f1 100644 msleep(val * 1000); /* Reset the panel to get video back */ drm_panel_disable(&ctx->panel); -@@ -811,7 +1035,7 @@ static int st7703_probe(struct mipi_dsi_device *dsi) +@@ -712,7 +936,7 @@ static int st7703_probe(struct mipi_dsi_device *dsi) mipi_dsi_set_drvdata(dsi, ctx); ctx->dev = dev; @@ -790,7 +790,7 @@ index a3e142f156d5..04cc2aef01f1 100644 dsi->mode_flags = ctx->desc->mode_flags; dsi->format = ctx->desc->format; -@@ -886,7 +1110,9 @@ static void st7703_remove(struct mipi_dsi_device *dsi) +@@ -783,7 +1007,9 @@ static void st7703_remove(struct mipi_dsi_device *dsi) } static const struct of_device_id st7703_of_match[] = { @@ -798,10 +798,10 @@ index a3e142f156d5..04cc2aef01f1 100644 + { .compatible = "gameconsole,r36s-panel", .data = &r36s_desc }, + { .compatible = "magicx,xu10-panel", .data = &xu10_desc }, + { .compatible = "anbernic,rg351v-panel-v2", .data = &rg351v2_desc }, - { .compatible = "powkiddy,rgb10max3-panel", .data = &rgb10max3_panel_desc }, { .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc }, { .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc }, -@@ -906,6 +1132,6 @@ static struct mipi_dsi_driver st7703_driver = { + { .compatible = "xingbangda,xbd599", .data = &xbd599_desc }, +@@ -802,6 +1028,6 @@ static struct mipi_dsi_driver st7703_driver = { }; module_mipi_dsi_driver(st7703_driver); From d758051a38755dc4d4b85fa3493ee21668a8ba12 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 13 May 2024 12:50:55 +0100 Subject: [PATCH 167/184] linux: bump to 6.9 for RK3566/RK3399/S922X --- packages/kernel/linux/package.mk | 4 +- .../devices/S922X/linux/linux.aarch64.conf | 12 +- .../devices/RK3399/linux/linux.aarch64.conf | 94 +++++++----- .../devices/RK3566/linux/linux.aarch64.conf | 136 ++++++++++++------ 4 files changed, 162 insertions(+), 84 deletions(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 8755f451f..116225c09 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -34,8 +34,8 @@ case ${DEVICE} in PKG_URL="https://git.sr.ht/~tokyovigilante/linux/archive/${PKG_VERSION}.tar.gz" ;; *) - PKG_VERSION="6.9-rc7" - PKG_URL="https://git.kernel.org/torvalds/t/linux-${PKG_VERSION}.tar.gz" + PKG_VERSION="6.9" + PKG_URL="https://www.kernel.org/pub/linux/kernel/v${PKG_VERSION/.*/}.x/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_PATCH_DIRS+=" mainline" ;; esac diff --git a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf index dbe7b0131..57da4e78e 100644 --- a/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf +++ b/projects/Amlogic/devices/S922X/linux/linux.aarch64.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.9.0-rc3 Kernel Configuration +# Linux/arm64 6.9.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y @@ -117,6 +117,7 @@ CONFIG_HAVE_SCHED_AVG_IRQ=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -605,6 +606,7 @@ CONFIG_ARM_SCPI_CPUFREQ=y # end of CPU Power Management # CONFIG_VIRTUALIZATION is not set +CONFIG_CPU_MITIGATIONS=y # # General architecture-dependent options @@ -2266,7 +2268,7 @@ CONFIG_USB_RTL8152=y CONFIG_USB_LAN78XX=m CONFIG_USB_USBNET=y CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_AX88179_178A=y +CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m # CONFIG_USB_NET_CDC_EEM is not set # CONFIG_USB_NET_CDC_NCM is not set @@ -2609,7 +2611,6 @@ CONFIG_JOYSTICK_ADC=y CONFIG_JOYSTICK_XPAD=m CONFIG_JOYSTICK_XPAD_FF=y CONFIG_JOYSTICK_XPAD_LEDS=y -CONFIG_JOYSTICK_ODROID_GOU=y CONFIG_JOYSTICK_PSXPAD_SPI=m CONFIG_JOYSTICK_PSXPAD_SPI_FF=y # CONFIG_JOYSTICK_PXRC is not set @@ -6369,8 +6370,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m CONFIG_NTFS3_FS=m +# CONFIG_NTFS3_64BIT_CLUSTER is not set +# CONFIG_NTFS3_LZX_XPRESS is not set +# CONFIG_NTFS3_FS_POSIX_ACL is not set +CONFIG_NTFS_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index e5fd7f87d..3b09be030 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.8.7 Kernel Configuration +# Linux/arm64 6.9.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y @@ -119,6 +119,7 @@ CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -269,7 +270,6 @@ CONFIG_PROFILING=y # # CONFIG_KEXEC is not set # CONFIG_KEXEC_FILE is not set -# CONFIG_CRASH_DUMP is not set # end of Kexec and crash features # end of General setup @@ -277,7 +277,6 @@ CONFIG_ARM64=y CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_64BIT=y CONFIG_MMU=y -CONFIG_ARM64_PAGE_SHIFT=12 CONFIG_ARM64_CONT_PTE_SHIFT=4 CONFIG_ARM64_CONT_PMD_SHIFT=4 CONFIG_ARCH_MMAP_RND_BITS_MIN=18 @@ -403,6 +402,7 @@ CONFIG_ARM64_4K_PAGES=y # CONFIG_ARM64_64K_PAGES is not set # CONFIG_ARM64_VA_BITS_39 is not set CONFIG_ARM64_VA_BITS_48=y +# CONFIG_ARM64_VA_BITS_52 is not set CONFIG_ARM64_VA_BITS=48 CONFIG_ARM64_PA_BITS_48=y CONFIG_ARM64_PA_BITS=48 @@ -521,6 +521,9 @@ CONFIG_SUSPEND_FREEZER=y CONFIG_HIBERNATE_CALLBACKS=y CONFIG_HIBERNATION=y # CONFIG_HIBERNATION_SNAPSHOT_DEV is not set +CONFIG_HIBERNATION_COMP_LZO=y +# CONFIG_HIBERNATION_COMP_LZ4 is not set +CONFIG_HIBERNATION_DEF_COMP="lzo" CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y @@ -593,8 +596,8 @@ CONFIG_ARM_SCPI_CPUFREQ=y # end of CPU Frequency scaling # end of CPU Power Management -CONFIG_HAVE_KVM=y # CONFIG_VIRTUALIZATION is not set +CONFIG_CPU_MITIGATIONS=y # # General architecture-dependent options @@ -626,6 +629,7 @@ CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_PERF_REGS=y @@ -673,8 +677,11 @@ CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -937,7 +944,6 @@ CONFIG_SKB_EXTENSIONS=y CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set CONFIG_UNIX=y -CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y # CONFIG_UNIX_DIAG is not set # CONFIG_TLS is not set @@ -1125,6 +1131,7 @@ CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=m +CONFIG_IP_NF_IPTABLES_LEGACY=y # CONFIG_NF_SOCKET_IPV4 is not set # CONFIG_NF_TPROXY_IPV4 is not set # CONFIG_NF_DUP_IPV4 is not set @@ -1147,7 +1154,7 @@ CONFIG_IP_NF_MANGLE=m # CONFIG_IP_NF_TARGET_ECN is not set # CONFIG_IP_NF_TARGET_TTL is not set # CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_ARPFILTER is not set # end of IP: Netfilter Configuration # @@ -1327,6 +1334,7 @@ CONFIG_PAGE_POOL=y # CONFIG_ARM_AMBA=y CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y # CONFIG_PCI is not set # CONFIG_PCCARD is not set @@ -1630,6 +1638,9 @@ CONFIG_AX88796B_PHY=y # CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_NCN26000_PHY is not set # CONFIG_AT803X_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QCA807X_PHY is not set # CONFIG_QSEMI_PHY is not set # CONFIG_REALTEK_PHY is not set # CONFIG_RENESAS_PHY is not set @@ -1871,7 +1882,6 @@ CONFIG_JOYSTICK_XPAD_LEDS=y # CONFIG_JOYSTICK_PXRC is not set # CONFIG_JOYSTICK_QWIIC is not set # CONFIG_JOYSTICK_FSIA6B is not set -CONFIG_JOYSTICK_RG552=y # CONFIG_JOYSTICK_SENSEHAT is not set # CONFIG_JOYSTICK_SEESAW is not set # CONFIG_INPUT_TABLET is not set @@ -1899,6 +1909,8 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_EXC3000 is not set # CONFIG_TOUCHSCREEN_FUJITSU 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 # CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set # CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set @@ -2022,7 +2034,6 @@ CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y -CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set @@ -2245,6 +2256,7 @@ CONFIG_PTP_1588_CLOCK_OPTIONAL=y # CONFIG_PTP_1588_CLOCK_KVM is not set # CONFIG_PTP_1588_CLOCK_IDT82P33 is not set # CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_FC3W is not set # CONFIG_PTP_1588_CLOCK_MOCK is not set # end of PTP clock support @@ -2255,6 +2267,7 @@ CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AW9523 is not set # CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set @@ -2434,9 +2447,11 @@ CONFIG_HWMON=y # CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set # CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set # CONFIG_SENSORS_AXI_FAN_CONTROL is not set # CONFIG_SENSORS_ARM_SCPI is not set # CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set # CONFIG_SENSORS_CORSAIR_PSU is not set # CONFIG_SENSORS_DS620 is not set @@ -2471,6 +2486,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_LTC4245 is not set # CONFIG_SENSORS_LTC4260 is not set # CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set # CONFIG_SENSORS_MAX1111 is not set # CONFIG_SENSORS_MAX127 is not set # CONFIG_SENSORS_MAX16065 is not set @@ -2520,10 +2536,12 @@ CONFIG_HWMON=y # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_NPCM7XX is not set # CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set # CONFIG_SENSORS_NZXT_SMART2 is not set # CONFIG_SENSORS_OCC_P8_I2C is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set CONFIG_SENSORS_PWM_FAN=y # CONFIG_SENSORS_SBTSI is not set # CONFIG_SENSORS_SBRMI is not set @@ -2578,7 +2596,6 @@ CONFIG_THERMAL=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y -CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set @@ -3138,8 +3155,7 @@ CONFIG_VIDEO_MSP3400=m # # Graphics support # -CONFIG_VIDEO_CMDLINE=y -CONFIG_VIDEO_NOMODESET=y +CONFIG_VIDEO=y # CONFIG_AUXDISPLAY is not set CONFIG_DRM=y CONFIG_DRM_MIPI_DSI=y @@ -3156,8 +3172,8 @@ CONFIG_DRM_DISPLAY_HDMI_HELPER=y # CONFIG_DRM_DP_AUX_CHARDEV is not set # CONFIG_DRM_DP_CEC is not set CONFIG_DRM_GEM_DMA_HELPER=y -CONFIG_DRM_GEM_SHMEM_HELPER=y -CONFIG_DRM_SCHED=y +CONFIG_DRM_GEM_SHMEM_HELPER=m +CONFIG_DRM_SCHED=m # # I2C encoder or helper chips @@ -3201,15 +3217,15 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_AUO_A030JTN01 is not set # CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set # CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set +# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set -# CONFIG_DRM_PANEL_DSI_CM is not set -# CONFIG_DRM_PANEL_LVDS is not set -# CONFIG_DRM_PANEL_SIMPLE is not set -# CONFIG_DRM_PANEL_EDP is not set # CONFIG_DRM_PANEL_EBBG_FT8719 is not set # CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set # CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set +# CONFIG_DRM_PANEL_DSI_CM is not set +# CONFIG_DRM_PANEL_LVDS is not set +# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set # CONFIG_DRM_PANEL_HIMAX_HX8394 is not set # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set @@ -3219,17 +3235,17 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set # CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set -# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_LPM102A188A is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_R63452 is not set # CONFIG_DRM_PANEL_KHADAS_TS050 is not set # CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set # CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set # CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set -# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_LG_LB035Q02 is not set # CONFIG_DRM_PANEL_LG_LG4573 is not set # CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set +# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set # CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set # CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set @@ -3238,8 +3254,8 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set # CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set -# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set # CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set # CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set @@ -3250,39 +3266,41 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set # CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set # CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set # CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set # CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set # CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set # CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set -CONFIG_DRM_PANEL_SHARP_LS054B3SX01=y # CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set -# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_SONY_ACX565AKM is not set # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set # CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set # CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set +# CONFIG_DRM_PANEL_EDP is not set +# CONFIG_DRM_PANEL_SIMPLE is not set +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set # CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set # CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DRM_PANEL_TPO_TPG110 is not set # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set -# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set # end of Display Panels @@ -3399,6 +3417,7 @@ CONFIG_FB_MODE_HELPERS=y # CONFIG_LCD_CLASS_DEVICE is not set CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set # CONFIG_BACKLIGHT_KTZ8866 is not set CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_QCOM_WLED is not set @@ -3899,6 +3918,7 @@ CONFIG_USB_OTG_PRODUCTLIST=y CONFIG_USB_OTG_FSM=y CONFIG_USB_LEDS_TRIGGER_USBPORT=y CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 CONFIG_USB_MON=y # @@ -4103,6 +4123,7 @@ CONFIG_TYPEC_FUSB302=y # CONFIG_TYPEC_MUX_FSA4480 is not set # CONFIG_TYPEC_MUX_GPIO_SBU is not set # CONFIG_TYPEC_MUX_PI3USB30532 is not set +# CONFIG_TYPEC_MUX_IT5205 is not set # CONFIG_TYPEC_MUX_NB7VPQ904M is not set # CONFIG_TYPEC_MUX_PTN36502 is not set # CONFIG_TYPEC_MUX_WCD939X_USBSS is not set @@ -4143,6 +4164,7 @@ CONFIG_MMC_DW_PLTFM=y # CONFIG_MMC_DW_BLUEFIELD is not set # CONFIG_MMC_DW_EXYNOS is not set # CONFIG_MMC_DW_HI3798CV200 is not set +# CONFIG_MMC_DW_HI3798MV200 is not set # CONFIG_MMC_DW_K3 is not set CONFIG_MMC_DW_ROCKCHIP=y # CONFIG_MMC_VUB300 is not set @@ -4178,8 +4200,6 @@ CONFIG_LEDS_CLASS=y CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_LP3952 is not set -# CONFIG_LEDS_LP50XX is not set -# CONFIG_LEDS_LP55XX_COMMON is not set # CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set @@ -4470,7 +4490,6 @@ CONFIG_STAGING_MEDIA_DEPRECATED=y # # Atmel media platform drivers # -# CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set # CONFIG_FB_TFT is not set # CONFIG_KS7010 is not set @@ -4708,7 +4727,7 @@ CONFIG_MEMORY=y # CONFIG_ARM_PL172_MPMC is not set CONFIG_IIO=y CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=m +CONFIG_IIO_BUFFER_CB=y # CONFIG_IIO_BUFFER_DMA is not set # CONFIG_IIO_BUFFER_DMAENGINE is not set # CONFIG_IIO_BUFFER_HW_CONSUMER is not set @@ -4795,6 +4814,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_AD7923 is not set # CONFIG_AD7949 is not set # CONFIG_AD799X is not set +# CONFIG_AD9467 is not set # CONFIG_ADI_AXI_ADC is not set # CONFIG_CC10001_ADC is not set # CONFIG_ENVELOPE_DETECTOR is not set @@ -4820,6 +4840,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_MCP3564 is not set # CONFIG_MCP3911 is not set # CONFIG_NAU7802 is not set +# CONFIG_PAC1934 is not set CONFIG_ROCKCHIP_SARADC=y # CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_SD_ADC_MODULATOR is not set @@ -4833,6 +4854,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_TI_ADS1015 is not set # CONFIG_TI_ADS7924 is not set # CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1298 is not set # CONFIG_TI_ADS7950 is not set # CONFIG_TI_ADS8344 is not set # CONFIG_TI_ADS8688 is not set @@ -4959,7 +4981,6 @@ CONFIG_ROCKCHIP_SARADC=y # # IIO dummy driver # -# CONFIG_IIO_SIMPLE_DUMMY is not set # end of IIO dummy driver # @@ -4984,6 +5005,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_ADF4350 is not set # CONFIG_ADF4371 is not set # CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set # CONFIG_ADMV1013 is not set # CONFIG_ADMV1014 is not set # CONFIG_ADMV4420 is not set @@ -5124,6 +5146,7 @@ CONFIG_ROCKCHIP_SARADC=y # # Magnetometer sensors # +# CONFIG_AF8133J is not set # CONFIG_AK8974 is not set # CONFIG_AK8975 is not set # CONFIG_AK09911 is not set @@ -5157,9 +5180,7 @@ CONFIG_IIO_MUX=y # # Triggers - standalone # -CONFIG_IIO_HRTIMER_TRIGGER=y # CONFIG_IIO_INTERRUPT_TRIGGER is not set -# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set CONFIG_IIO_SYSFS_TRIGGER=y # end of Triggers - standalone @@ -5295,6 +5316,7 @@ CONFIG_PARTITION_PERCPU=y # CONFIG_IPACK_BUS is not set CONFIG_ARCH_HAS_RESET_CONTROLLER=y CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set # CONFIG_RESET_SIMPLE is not set # CONFIG_RESET_TI_SYSCON is not set # CONFIG_RESET_TI_TPS380X is not set @@ -5332,6 +5354,7 @@ CONFIG_PHY_ROCKCHIP_INNO_USB2=y # CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY is not set # CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY is not set CONFIG_PHY_ROCKCHIP_PCIE=y +# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set # CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set CONFIG_PHY_ROCKCHIP_TYPEC=y CONFIG_PHY_ROCKCHIP_USB=y @@ -5463,6 +5486,7 @@ CONFIG_INOTIFY_USER=y CONFIG_FUSE_FS=y # CONFIG_CUSE is not set # CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y CONFIG_OVERLAY_FS=y CONFIG_OVERLAY_FS_REDIRECT_DIR=y CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y @@ -5496,8 +5520,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m CONFIG_NTFS3_FS=m +# CONFIG_NTFS3_64BIT_CLUSTER is not set +# CONFIG_NTFS3_LZX_XPRESS is not set +# CONFIG_NTFS3_FS_POSIX_ACL is not set +CONFIG_NTFS_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # @@ -5930,7 +5957,6 @@ CONFIG_GENERIC_NET_UTILS=y CONFIG_CORDIC=y # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y -CONFIG_GENERIC_PCI_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_ARCH_USE_SYM_ANNOTATIONS=y @@ -6112,7 +6138,7 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y # CONFIG_DEBUG_FS_ALLOW_NONE is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_UBSAN=y # CONFIG_UBSAN is not set CONFIG_HAVE_ARCH_KCSAN=y CONFIG_HAVE_KCSAN_COMPILER=y diff --git a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf index b58abed95..b37bd06a0 100644 --- a/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3566/linux/linux.aarch64.conf @@ -1,8 +1,8 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.8.0-rc3 Kernel Configuration +# Linux/arm64 6.9.0 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" +CONFIG_CC_VERSION_TEXT="aarch64-rocknix-linux-gnueabi-gcc-12.3.1 (GCC) 12.3.1 20240103" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=120301 CONFIG_CLANG_VERSION=0 @@ -15,6 +15,7 @@ CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=0 @@ -120,6 +121,7 @@ CONFIG_SCHED_THERMAL_PRESSURE=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y @@ -156,7 +158,7 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y +CONFIG_GCC10_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_GCC_NO_STRINGOP_OVERFLOW=y CONFIG_CC_NO_STRINGOP_OVERFLOW=y @@ -195,7 +197,7 @@ CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_SCHED_AUTOGROUP=y CONFIG_RELAY=y -# CONFIG_BLK_DEV_INITRD is not set +CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="@INITRAMFS_SOURCE@" CONFIG_INITRAMFS_ROOT_UID=0 CONFIG_INITRAMFS_ROOT_GID=0 @@ -274,7 +276,6 @@ CONFIG_PROFILING=y # # CONFIG_KEXEC is not set # CONFIG_KEXEC_FILE is not set -# CONFIG_CRASH_DUMP is not set # end of Kexec and crash features # end of General setup @@ -282,7 +283,6 @@ CONFIG_ARM64=y CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_64BIT=y CONFIG_MMU=y -CONFIG_ARM64_PAGE_SHIFT=12 CONFIG_ARM64_CONT_PTE_SHIFT=4 CONFIG_ARM64_CONT_PMD_SHIFT=4 CONFIG_ARCH_MMAP_RND_BITS_MIN=18 @@ -410,6 +410,7 @@ CONFIG_ARM64_4K_PAGES=y # CONFIG_ARM64_64K_PAGES is not set CONFIG_ARM64_VA_BITS_39=y # CONFIG_ARM64_VA_BITS_48 is not set +# CONFIG_ARM64_VA_BITS_52 is not set CONFIG_ARM64_VA_BITS=39 CONFIG_ARM64_PA_BITS_48=y CONFIG_ARM64_PA_BITS=48 @@ -605,8 +606,8 @@ CONFIG_ARM_SCMI_CPUFREQ=y # end of CPU Frequency scaling # end of CPU Power Management -CONFIG_HAVE_KVM=y # CONFIG_VIRTUALIZATION is not set +CONFIG_CPU_MITIGATIONS=y # # General architecture-dependent options @@ -638,6 +639,7 @@ CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_PERF_REGS=y @@ -686,8 +688,11 @@ CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -924,7 +929,6 @@ CONFIG_SKB_EXTENSIONS=y CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set CONFIG_UNIX=y -CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y CONFIG_UNIX_DIAG=m # CONFIG_TLS is not set @@ -1239,6 +1243,7 @@ CONFIG_IP_VS_NFCT=y # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=m +CONFIG_IP_NF_IPTABLES_LEGACY=y CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m # CONFIG_NF_TABLES_IPV4 is not set @@ -1275,6 +1280,7 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m # CONFIG_NF_CONNTRACK_BRIDGE is not set +CONFIG_BRIDGE_NF_EBTABLES_LEGACY=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -1421,7 +1427,6 @@ CONFIG_BT_RFCOMM=y # CONFIG_BT_BNEP is not set # CONFIG_BT_CMTP is not set CONFIG_BT_HIDP=m -CONFIG_BT_HS=y CONFIG_BT_LE=y CONFIG_BT_LE_L2CAP_ECRED=y # CONFIG_BT_LEDS is not set @@ -1450,7 +1455,7 @@ CONFIG_BT_HCIUART_H4=y # CONFIG_BT_HCIUART_BCSP is not set CONFIG_BT_HCIUART_ATH3K=y # CONFIG_BT_HCIUART_LL is not set -# CONFIG_BT_HCIUART_3WIRE is not set +CONFIG_BT_HCIUART_3WIRE=y # CONFIG_BT_HCIUART_INTEL is not set # CONFIG_BT_HCIUART_BCM is not set CONFIG_BT_HCIUART_RTL=y @@ -1528,6 +1533,7 @@ CONFIG_PAGE_POOL=y # CONFIG_ARM_AMBA=y CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_DOMAINS_GENERIC=y @@ -1772,7 +1778,6 @@ CONFIG_MTD_CFI_I2=y # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set # end of Mapping drivers for chip access @@ -2161,6 +2166,7 @@ CONFIG_DM_RAID=y # CONFIG_DM_SWITCH is not set # CONFIG_DM_LOG_WRITES is not set # CONFIG_DM_INTEGRITY is not set +# CONFIG_DM_VDO is not set # CONFIG_TARGET_CORE is not set # CONFIG_FUSION is not set @@ -2291,6 +2297,9 @@ CONFIG_NET_VENDOR_PENSANDO=y # CONFIG_NET_VENDOR_QUALCOMM is not set # CONFIG_NET_VENDOR_RDC is not set CONFIG_NET_VENDOR_REALTEK=y +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_R8169 is not set # CONFIG_NET_VENDOR_RENESAS is not set # CONFIG_NET_VENDOR_ROCKER is not set # CONFIG_NET_VENDOR_SAMSUNG is not set @@ -2374,6 +2383,9 @@ CONFIG_AX88796B_PHY=y # CONFIG_NXP_TJA11XX_PHY is not set # CONFIG_NCN26000_PHY is not set # CONFIG_AT803X_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QCA807X_PHY is not set # CONFIG_QSEMI_PHY is not set # CONFIG_REALTEK_PHY is not set # CONFIG_RENESAS_PHY is not set @@ -2407,6 +2419,7 @@ CONFIG_CAN_CALC_BITTIMING=y # CONFIG_CAN_CC770 is not set # CONFIG_CAN_CTUCANFD_PCI is not set # CONFIG_CAN_CTUCANFD_PLATFORM is not set +# CONFIG_CAN_ESD_402_PCI is not set # CONFIG_CAN_IFI_CANFD is not set # CONFIG_CAN_M_CAN is not set # CONFIG_CAN_PEAK_PCIEFD is not set @@ -2825,8 +2838,6 @@ CONFIG_INPUT_JOYSTICK=y # CONFIG_JOYSTICK_ANALOG is not set # CONFIG_JOYSTICK_A3D is not set CONFIG_JOYSTICK_ADC=y -CONFIG_JOYSTICK_SINGLEADCJOY=y -CONFIG_JOYSTICK_SINGLEADC_QUADSAR_JOY=y # CONFIG_JOYSTICK_ADI is not set # CONFIG_JOYSTICK_COBRA is not set # CONFIG_JOYSTICK_GF2K is not set @@ -2887,6 +2898,8 @@ CONFIG_TOUCHSCREEN_ATMEL_MXT=y # CONFIG_TOUCHSCREEN_EXC3000 is not set # CONFIG_TOUCHSCREEN_FUJITSU 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 # CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX=y @@ -3032,7 +3045,6 @@ CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y -CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set @@ -3049,6 +3061,7 @@ CONFIG_SERIAL_8250_16550A_VARIANTS=y # CONFIG_SERIAL_8250_FINTEK is not set CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCILIB=y # CONFIG_SERIAL_8250_PCI is not set CONFIG_SERIAL_8250_EXAR=y CONFIG_SERIAL_8250_NR_UARTS=5 @@ -3301,6 +3314,7 @@ CONFIG_PTP_1588_CLOCK_OPTIONAL=y CONFIG_PTP_1588_CLOCK_KVM=y # CONFIG_PTP_1588_CLOCK_IDT82P33 is not set # CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_FC3W is not set # CONFIG_PTP_1588_CLOCK_MOCK is not set # CONFIG_PTP_1588_CLOCK_OCP is not set # end of PTP clock support @@ -3312,6 +3326,7 @@ CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AW9523 is not set # CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set @@ -3502,10 +3517,12 @@ CONFIG_HWMON=y # CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set # CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set # CONFIG_SENSORS_AXI_FAN_CONTROL is not set # CONFIG_SENSORS_ARM_SCMI is not set # CONFIG_SENSORS_ARM_SCPI is not set # CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set # CONFIG_SENSORS_CORSAIR_PSU is not set # CONFIG_SENSORS_DRIVETEMP is not set @@ -3542,6 +3559,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_LTC4245 is not set # CONFIG_SENSORS_LTC4260 is not set # CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set # CONFIG_SENSORS_MAX1111 is not set # CONFIG_SENSORS_MAX127 is not set # CONFIG_SENSORS_MAX16065 is not set @@ -3591,10 +3609,12 @@ CONFIG_HWMON=y # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_NPCM7XX is not set # CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set # CONFIG_SENSORS_NZXT_SMART2 is not set # CONFIG_SENSORS_OCC_P8_I2C is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set CONFIG_SENSORS_PWM_FAN=y # CONFIG_SENSORS_SBTSI is not set # CONFIG_SENSORS_SBRMI is not set @@ -3652,11 +3672,9 @@ CONFIG_THERMAL=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y -CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_BANG_BANG is not set @@ -4019,6 +4037,7 @@ CONFIG_VIDEO_TUNER=m CONFIG_V4L2_H264=y CONFIG_V4L2_VP9=y CONFIG_V4L2_MEM2MEM_DEV=y +# CONFIG_V4L2_FLASH_LED_CLASS is not set CONFIG_V4L2_FWNODE=y CONFIG_V4L2_ASYNC=y CONFIG_V4L2_CCI=y @@ -4791,8 +4810,7 @@ CONFIG_DVB_SP2=m # # Graphics support # -CONFIG_VIDEO_CMDLINE=y -CONFIG_VIDEO_NOMODESET=y +CONFIG_VIDEO=y # CONFIG_AUXDISPLAY is not set CONFIG_DRM=y CONFIG_DRM_MIPI_DBI=y @@ -4810,8 +4828,8 @@ CONFIG_DRM_DISPLAY_HDMI_HELPER=y # CONFIG_DRM_DP_AUX_CHARDEV is not set # CONFIG_DRM_DP_CEC is not set CONFIG_DRM_GEM_DMA_HELPER=y -CONFIG_DRM_GEM_SHMEM_HELPER=y -CONFIG_DRM_SCHED=y +CONFIG_DRM_GEM_SHMEM_HELPER=m +CONFIG_DRM_SCHED=m # # I2C encoder or helper chips @@ -4863,15 +4881,15 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_AUO_A030JTN01 is not set # CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set # CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set +# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set -# CONFIG_DRM_PANEL_DSI_CM is not set -# CONFIG_DRM_PANEL_LVDS is not set -# CONFIG_DRM_PANEL_SIMPLE is not set -# CONFIG_DRM_PANEL_EDP is not set # CONFIG_DRM_PANEL_EBBG_FT8719 is not set CONFIG_DRM_PANEL_ELIDA_KD35T133=y # CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set # CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set +# CONFIG_DRM_PANEL_DSI_CM is not set +# CONFIG_DRM_PANEL_LVDS is not set +# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set CONFIG_DRM_PANEL_HIMAX_HX8394=y # CONFIG_DRM_PANEL_ILITEK_IL9322 is not set # CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set @@ -4881,17 +4899,17 @@ CONFIG_DRM_PANEL_HIMAX_HX8394=y # CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set # CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set # CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set -# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_LPM102A188A is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set # CONFIG_DRM_PANEL_JDI_R63452 is not set # CONFIG_DRM_PANEL_KHADAS_TS050 is not set # CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set # CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set # CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set -# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_LG_LB035Q02 is not set # CONFIG_DRM_PANEL_LG_LG4573 is not set CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=y +# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set CONFIG_DRM_PANEL_NEWVISION_NV3051D=y # CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set @@ -4900,8 +4918,8 @@ CONFIG_DRM_PANEL_NEWVISION_NV3051D=y # CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set # CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set -# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set # CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set # CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set # CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set @@ -4912,15 +4930,16 @@ CONFIG_DRM_PANEL_NEWVISION_NV3051D=y # CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set # CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set # CONFIG_DRM_PANEL_RONBO_RB070D30 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set # CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set # CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set # CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set @@ -4931,19 +4950,21 @@ CONFIG_DRM_PANEL_NEWVISION_NV3051D=y CONFIG_DRM_PANEL_SITRONIX_ST7701=y CONFIG_DRM_PANEL_SITRONIX_ST7703=y # CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set -# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_SONY_ACX565AKM is not set # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set # CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set # CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set +# CONFIG_DRM_PANEL_EDP is not set +# CONFIG_DRM_PANEL_SIMPLE is not set +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set # CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set # CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set # CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set # CONFIG_DRM_PANEL_TPO_TPG110 is not set # CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set -# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set # CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set # end of Display Panels @@ -5090,6 +5111,7 @@ CONFIG_FB_MODE_HELPERS=y # CONFIG_LCD_CLASS_DEVICE is not set CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set # CONFIG_BACKLIGHT_KTZ8866 is not set CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_QCOM_WLED is not set @@ -5611,6 +5633,7 @@ CONFIG_USB_OTG_PRODUCTLIST=y CONFIG_USB_OTG_FSM=y CONFIG_USB_LEDS_TRIGGER_USBPORT=y CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 CONFIG_USB_MON=y # @@ -5839,14 +5862,16 @@ CONFIG_U_SERIAL_CONSOLE=y # CONFIG_USB_DUMMY_HCD is not set # end of USB Peripheral Controller -CONFIG_USB_LIBCOMPOSITE=y -CONFIG_USB_F_ACM=y -CONFIG_USB_U_SERIAL=y +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_F_ACM=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_U_ETHER=m CONFIG_USB_F_SERIAL=m CONFIG_USB_F_OBEX=m -CONFIG_USB_F_MASS_STORAGE=y -CONFIG_USB_F_FS=y -CONFIG_USB_F_UVC=y +CONFIG_USB_F_ECM=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_UVC=m CONFIG_USB_CONFIGFS=m # CONFIG_USB_CONFIGFS_SERIAL is not set CONFIG_USB_CONFIGFS_ACM=y @@ -5911,6 +5936,7 @@ CONFIG_TYPEC_FUSB302=y # CONFIG_TYPEC_MUX_FSA4480 is not set # CONFIG_TYPEC_MUX_GPIO_SBU is not set # CONFIG_TYPEC_MUX_PI3USB30532 is not set +# CONFIG_TYPEC_MUX_IT5205 is not set # CONFIG_TYPEC_MUX_NB7VPQ904M is not set # CONFIG_TYPEC_MUX_PTN36502 is not set # CONFIG_TYPEC_MUX_WCD939X_USBSS is not set @@ -5956,6 +5982,7 @@ CONFIG_MMC_DW_PLTFM=y # CONFIG_MMC_DW_BLUEFIELD is not set # CONFIG_MMC_DW_EXYNOS is not set # CONFIG_MMC_DW_HI3798CV200 is not set +# CONFIG_MMC_DW_HI3798MV200 is not set # CONFIG_MMC_DW_K3 is not set # CONFIG_MMC_DW_PCI is not set CONFIG_MMC_DW_ROCKCHIP=y @@ -6024,10 +6051,21 @@ CONFIG_LEDS_SYSCON=y # # Flash and Torch LED drivers # +# CONFIG_LEDS_AAT1290 is not set +# CONFIG_LEDS_AS3645A is not set +# CONFIG_LEDS_KTD2692 is not set +# CONFIG_LEDS_LM3601X is not set +# CONFIG_LEDS_RT4505 is not set +# CONFIG_LEDS_RT8515 is not set +# CONFIG_LEDS_SGM3140 is not set # # RGB LED drivers # +# CONFIG_LEDS_GROUP_MULTICOLOR is not set +# CONFIG_LEDS_KTD202X is not set +# CONFIG_LEDS_NCP5623 is not set +# CONFIG_LEDS_PWM_MULTICOLOR is not set # # LED Triggers @@ -6293,7 +6331,6 @@ CONFIG_VIDEO_ROCKCHIP_VDEC=y # StarFive media platform drivers # # CONFIG_STAGING_MEDIA_DEPRECATED is not set -# CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set # CONFIG_FB_TFT is not set # CONFIG_KS7010 is not set @@ -6624,6 +6661,7 @@ CONFIG_IIO_TRIGGERED_EVENT=y # CONFIG_AD7923 is not set # CONFIG_AD7949 is not set # CONFIG_AD799X is not set +# CONFIG_AD9467 is not set # CONFIG_ADI_AXI_ADC is not set # CONFIG_CC10001_ADC is not set # CONFIG_ENVELOPE_DETECTOR is not set @@ -6649,6 +6687,7 @@ CONFIG_IIO_TRIGGERED_EVENT=y # CONFIG_MCP3564 is not set # CONFIG_MCP3911 is not set # CONFIG_NAU7802 is not set +# CONFIG_PAC1934 is not set CONFIG_ROCKCHIP_SARADC=y # CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_SD_ADC_MODULATOR is not set @@ -6662,6 +6701,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_TI_ADS1015 is not set # CONFIG_TI_ADS7924 is not set # CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1298 is not set # CONFIG_TI_ADS7950 is not set # CONFIG_TI_ADS8344 is not set # CONFIG_TI_ADS8688 is not set @@ -6814,6 +6854,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_ADF4350 is not set # CONFIG_ADF4371 is not set # CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set # CONFIG_ADMV1013 is not set # CONFIG_ADMV1014 is not set # CONFIG_ADMV4420 is not set @@ -6859,6 +6900,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_DHT11 is not set # CONFIG_HDC100X is not set # CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set # CONFIG_HID_SENSOR_HUMIDITY is not set # CONFIG_HTS221 is not set # CONFIG_HTU21 is not set @@ -6953,6 +6995,7 @@ CONFIG_TSL2583=y # # Magnetometer sensors # +# CONFIG_AF8133J is not set # CONFIG_AK8974 is not set # CONFIG_AK8975 is not set # CONFIG_AK09911 is not set @@ -7128,6 +7171,7 @@ CONFIG_PARTITION_PERCPU=y # CONFIG_IPACK_BUS is not set CONFIG_ARCH_HAS_RESET_CONTROLLER=y CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set CONFIG_RESET_SCMI=y # CONFIG_RESET_SIMPLE is not set # CONFIG_RESET_TI_SYSCON is not set @@ -7166,6 +7210,7 @@ CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y CONFIG_PHY_ROCKCHIP_PCIE=y +# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y CONFIG_PHY_ROCKCHIP_TYPEC=y CONFIG_PHY_ROCKCHIP_USB=y @@ -7303,6 +7348,7 @@ CONFIG_AUTOFS_FS=y CONFIG_FUSE_FS=y # CONFIG_CUSE is not set # CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y CONFIG_OVERLAY_FS=y # CONFIG_OVERLAY_FS_REDIRECT_DIR is not set CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y @@ -7336,8 +7382,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m CONFIG_NTFS3_FS=m +# CONFIG_NTFS3_64BIT_CLUSTER is not set +# CONFIG_NTFS3_LZX_XPRESS is not set +# CONFIG_NTFS3_FS_POSIX_ACL is not set +CONFIG_NTFS_FS=m # end of DOS/FAT/EXFAT/NT Filesystems # @@ -7374,11 +7423,11 @@ CONFIG_MISC_FILESYSTEMS=y # CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_SQUASHFS=y -# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_CACHE=y # CONFIG_SQUASHFS_FILE_DIRECT is not set -# CONFIG_SQUASHFS_DECOMP_SINGLE is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y # CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT is not set -# CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE is not set +CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE=y # CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI is not set # CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU is not set # CONFIG_SQUASHFS_XATTR is not set @@ -7389,7 +7438,7 @@ CONFIG_SQUASHFS_XZ=y CONFIG_SQUASHFS_ZSTD=y # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set # CONFIG_SQUASHFS_EMBEDDED is not set -# CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_VXFS_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_OMFS_FS is not set @@ -7804,7 +7853,6 @@ CONFIG_GENERIC_NET_UTILS=y CONFIG_CORDIC=y # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y -CONFIG_GENERIC_PCI_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_ARCH_USE_SYM_ANNOTATIONS=y @@ -7998,7 +8046,7 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y # CONFIG_DEBUG_FS_ALLOW_NONE is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_UBSAN=y # CONFIG_UBSAN is not set CONFIG_HAVE_ARCH_KCSAN=y CONFIG_HAVE_KCSAN_COMPILER=y From 5ad53b1e447d0b558aaa3c91f63185c8f0f6d3a5 Mon Sep 17 00:00:00 2001 From: John Williams Date: Mon, 13 May 2024 23:04:51 +1000 Subject: [PATCH 168/184] S922X - fix panfrost memory shrinker patch for 6.9-rc7 kernel --- .../100-panfrost-memory-shrinker.patch | 92 ------------------- 1 file changed, 92 deletions(-) diff --git a/projects/Amlogic/patches/linux/S922X-PANFROST/100-panfrost-memory-shrinker.patch b/projects/Amlogic/patches/linux/S922X-PANFROST/100-panfrost-memory-shrinker.patch index eab599967..67deb83d0 100644 --- a/projects/Amlogic/patches/linux/S922X-PANFROST/100-panfrost-memory-shrinker.patch +++ b/projects/Amlogic/patches/linux/S922X-PANFROST/100-panfrost-memory-shrinker.patch @@ -1140,19 +1140,6 @@ index 3d9f51bd48b6..02b60ea1433a 100644 ret = true; dma_resv_unlock(shmem->base.resv); -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index f38385fe76bb..1ab081bd81a8 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -538,7 +538,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - err_map: - sg_free_table(sgt); - err_pages: -- drm_gem_shmem_put_pages(&bo->base); -+ drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h index bf0c31aa8fbe..9e83212becbb 100644 --- a/include/drm/drm_gem_shmem_helper.h @@ -2280,85 +2267,6 @@ index 2a97aa85416b..9c3e34a7fbed 100644 2.43.0 -^ permalink raw reply related [flat|nested] 31+ messages in thread -* [PATCH v19 17/30] drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr() - 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko - ` (15 preceding siblings ...) - 2024-01-05 18:46 ` [PATCH v19 16/30] drm/lima: Explicitly get and put drm-shmem pages Dmitry Osipenko -@ 2024-01-05 18:46 ` Dmitry Osipenko - 2024-01-05 18:46 ` [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages Dmitry Osipenko - ` (12 subsequent siblings) - 29 siblings, 0 replies; 31+ messages in thread -From: Dmitry Osipenko @ 2024-01-05 18:46 UTC (permalink / raw) - To: David Airlie, Gerd Hoffmann, Gurchetan Singh, Chia-I Wu, - Daniel Vetter, Maarten Lankhorst, Maxime Ripard, - Thomas Zimmermann, Christian König, Qiang Yu, Steven Price, - Boris Brezillon, Emma Anholt, Melissa Wen - Cc: dri-devel, linux-kernel, kernel, virtualization - -From: Boris Brezillon - -If some the pages or sgt allocation failed, we shouldn't release the -pages ref we got earlier, otherwise we will end up with unbalanced -get/put_pages() calls. We should instead leave everything in place -and let the BO release function deal with extra cleanup when the object -is destroyed, or let the fault handler try again next time it's called. - -Fixes: 187d2929206e ("drm/panfrost: Add support for GPU heap allocations") -Cc: -Signed-off-by: Boris Brezillon -Co-developed-by: Dmitry Osipenko -Signed-off-by: Dmitry Osipenko ---- - drivers/gpu/drm/panfrost/panfrost_mmu.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c -index bd5a0073009d..4a0b4bf03f1a 100644 ---- a/drivers/gpu/drm/panfrost/panfrost_mmu.c -+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c -@@ -502,11 +502,18 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - mapping_set_unevictable(mapping); - - for (i = page_offset; i < page_offset + NUM_FAULT_PAGES; i++) { -+ /* Can happen if the last fault only partially filled this -+ * section of the pages array before failing. In that case -+ * we skip already filled pages. -+ */ -+ if (pages[i]) -+ continue; -+ - pages[i] = shmem_read_mapping_page(mapping, i); - if (IS_ERR(pages[i])) { - ret = PTR_ERR(pages[i]); - pages[i] = NULL; -- goto err_pages; -+ goto err_unlock; - } - } - -@@ -514,7 +521,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - ret = sg_alloc_table_from_pages(sgt, pages + page_offset, - NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL); - if (ret) -- goto err_pages; -+ goto err_unlock; - - ret = dma_map_sgtable(pfdev->dev, sgt, DMA_BIDIRECTIONAL, 0); - if (ret) -@@ -537,8 +544,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, - - err_map: - sg_free_table(sgt); --err_pages: -- drm_gem_shmem_put_pages_locked(&bo->base); - err_unlock: - dma_resv_unlock(obj->resv); - err_bo: --- -2.43.0 - - ^ permalink raw reply related [flat|nested] 31+ messages in thread * [PATCH v19 18/30] drm/panfrost: Explicitly get and put drm-shmem pages 2024-01-05 18:45 [PATCH v19 00/30] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko From 7a700fa4779bffca5f7661a1c9b8372cb654f388 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Mon, 13 May 2024 20:15:21 +0100 Subject: [PATCH 169/184] linux: fix-up panel on RG552/RK3399 --- projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index 3b09be030..a705e9ae8 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -3282,6 +3282,7 @@ CONFIG_DRM_PANEL=y # CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set # CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set # CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set +CONFIG_DRM_PANEL_SHARP_LS054B3SX01=y # CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set From 777dbd3fc1da958789f0984c5f81efd37c4ceb37 Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Mon, 13 May 2024 16:36:39 -0700 Subject: [PATCH 170/184] bump rocknix-joypad driver update Signed-off-by: Paul Reioux --- packages/kernel/drivers/rocknix-joypad/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 2b195ada2..5b29f1b0d 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="df031f47f2762643f52ac5d64cb4bd9f928cb049" +PKG_VERSION="b7b874fdb37fdc88a7e89b6e2ccc93eb9b27c5d2" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" From 25609862c1f1a3b10b5798efd113b9299b7051c6 Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Mon, 13 May 2024 15:51:40 -0700 Subject: [PATCH 171/184] Revert rocknix-joypad in tree build back to module build also add patches to move the rk_send key functions to adc-key driver --- packages/kernel/linux/package.mk | 2 +- ...edirect-keycode-316-to-rocknix-joypa.patch | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 8755f451f..3eba15265 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -76,7 +76,7 @@ post_unpack() { $(get_build_dir rocknix-joypad)/rocknix-joypad.h \ $(get_build_dir rocknix-joypad)/rocknix-singleadc-joypad.c \ ${PKG_BUILD}/drivers/input/joystick - echo "obj-y += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile + echo "obj-m += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile fi } diff --git a/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch index 2484963ec..2691688de 100644 --- a/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch +++ b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch @@ -50,3 +50,45 @@ index bf72ab8df817..aaee32a17627 100644 -- 2.34.1 +diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c +index aaee32a17627..ca51b1b15850 100644 +--- a/drivers/input/keyboard/adc-keys.c ++++ b/drivers/input/keyboard/adc-keys.c +@@ -16,9 +16,6 @@ + #include + #include + +-extern void rk_send_key_f_key_up(void); +-extern void rk_send_key_f_key_down(void); +- + struct adc_keys_button { + u32 voltage; + u32 keycode; +@@ -32,6 +29,27 @@ struct adc_keys_state { + const struct adc_keys_button *map; + }; + ++struct input_dev * joypad_input_g; ++EXPORT_SYMBOL(joypad_input_g); ++ ++void rk_send_key_f_key_up(void) ++{ ++ if (!joypad_input_g) ++ return; ++ ++ input_report_key(joypad_input_g, BTN_MODE, 1); ++ input_sync(joypad_input_g); ++} ++ ++void rk_send_key_f_key_down(void) ++{ ++ if (!joypad_input_g) ++ return; ++ ++ input_report_key(joypad_input_g, BTN_MODE, 0); ++ input_sync(joypad_input_g); ++} ++ + static void adc_keys_poll(struct input_dev *input) + { + struct adc_keys_state *st = input_get_drvdata(input); From 1c78547280408202f626d65f90799ede43aa2365 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Tue, 14 May 2024 01:04:45 +0100 Subject: [PATCH 172/184] linux: cleanup how joypad is sourced --- packages/kernel/linux/package.mk | 14 -------------- packages/virtual/linux-drivers/package.mk | 4 ++++ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/packages/kernel/linux/package.mk b/packages/kernel/linux/package.mk index 61948fa12..3e5ff9d7b 100644 --- a/packages/kernel/linux/package.mk +++ b/packages/kernel/linux/package.mk @@ -66,20 +66,6 @@ for pkg in $(get_pkg_variable initramfs PKG_DEPENDS_TARGET); do ! listcontains "${PKG_DEPENDS_TARGET}" "${pkg}" && PKG_DEPENDS_TARGET+=" ${pkg}" || true done -if [ "${ROCKNIX_JOYPAD}" = "yes" ]; then - PKG_DEPENDS_UNPACK+=" rocknix-joypad" -fi - -post_unpack() { - if [ "${ROCKNIX_JOYPAD}" = "yes" ]; then - cp $(get_build_dir rocknix-joypad)/rocknix-joypad.c \ - $(get_build_dir rocknix-joypad)/rocknix-joypad.h \ - $(get_build_dir rocknix-joypad)/rocknix-singleadc-joypad.c \ - ${PKG_BUILD}/drivers/input/joystick - echo "obj-m += rocknix-joypad.o rocknix-singleadc-joypad.o" >> ${PKG_BUILD}/drivers/input/joystick/Makefile - fi -} - post_patch() { # linux was already built and its build dir autoremoved - prepare it again for kernel packages if [ -d ${PKG_INSTALL}/.image ]; then diff --git a/packages/virtual/linux-drivers/package.mk b/packages/virtual/linux-drivers/package.mk index 8ab632d1e..9c9489e15 100644 --- a/packages/virtual/linux-drivers/package.mk +++ b/packages/virtual/linux-drivers/package.mk @@ -13,3 +13,7 @@ PKG_LONGDESC="linux-drivers is a Meta package to install additional drivers" if [ "$DRIVER_ADDONS_SUPPORT" = "yes" ]; then PKG_DEPENDS_TARGET="${PKG_DEPENDS_TARGET} $DRIVER_ADDONS driverselect" fi + +if [ "${ROCKNIX_JOYPAD}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" rocknix-joypad" +fi From cc4803e5f9eace4a8c39bebad6ba00a04b8e03ca Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 15 May 2024 10:12:46 +0200 Subject: [PATCH 173/184] fix drastic for rk3326 and rk3566 Pack in a SDL2 version compiled with device option OPENGL="" --- .../drastic-sa/config/RK3326/libSDL2-2.0.so.0 | Bin 0 -> 1996824 bytes .../drastic-sa/config/RK3566/libSDL2-2.0.so.0 | Bin 0 -> 1996824 bytes .../standalone/drastic-sa/package.mk | 7 ++++++- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 create mode 100644 packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 diff --git a/packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 b/packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..7711fa8c0eacd3fd5d936e922686b08da5712d37 GIT binary patch literal 1996824 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%0A6{{uR5OV*LYMjbv*=egGC)Z10ZZvUbqw{1G@ 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%0D}Bgm2OxIS)d4hffpx%1J%m(e~iq%zpF+ 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

@WLa7cy65Xk=bG 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

    i9zsv$-JzWH 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 zno�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

    %Rv^TPZJ}%pu^Wvs?$ZM?rKY-Z^dt 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

    !gv~kZHtdYU%6^;r&tcWD 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

    ^II#-YB7hR)wWSdIHVaDmYw?vo}na#`~$ylK*ON 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 literal 0 HcmV?d00001 diff --git a/packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 b/packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..3ec61003faaa33d0476d61ed33d61764c06520d9 GIT binary patch literal 1996824 zcmeFad0-P&_xL?61;Qo)S}3>>7NMd*K$fCN)6zmwme3Zcpf;gRX`pRFl0v~PY+76( zxIk5qxS$pBF>Y9RT!JFhJ&Iyg)QDSA@d++iH+avTb0(QNbe`Y$&-agKp65C3MXO6hXm_VFuc9>mT$ zSBA=7qSD1PIzS3I@p{0Coe{D?330Pr@ZXq;8Nb zra(@PH8(%I_n1I(O3H%<$<)#_#UNQzq=%CYev{NQY3(3ucHg8VOE4vOU^r>8lsr2} zG8>C7N|H<|wj`+mN|B^a0}Mu^At}W$I6W*SuRC9AC#|+XXY}lpA_*Bq{kcYKm-f4S zNlD2)>sC)OBnL7igGEX*4!FgzJ}0C7X9JVW!P!>CI#@>V5Fxsw0v6n}%!VCb1V-_l8v+JQ{djrH(f zQ@SLrg;XacC*{J!l9Pu){%pzUPclmDQq~4KCnvR+l1zqu&`hX?KPkm;kX~;#pVuYu zptK4kDjAY3#^jVvP{kx`Z_tu-V{nLHO17A6QK=%3UT5kOT(uU8HYRnurCpN6lqB^_ zPF>ZI5|rA%(k?YWwP#MJ4Tkn6Yd7hsq`~Vfc1!1dQn0T(C3&sXu1@N@D(O0-#b|+! zw^#;P+FLV%Qc|#Zsw90j#gOv#T8kysU>ulYO0q};QgSS!>+)0l5_IH%jwwCD*-3B+ znsRN+h$;Q>ta`RwN*<`Dflq6**x9?=Ibx!uDq_$6%{6L+!rGo=Kqrd3iqzacpt^vIYaC9iI0 z8f+}K_@QtZM#<7-Xoba)(>1Vqa$UGcO19*rq$Ek<$teZN=YYIG_>j*4|1&)d2gW3u zQ8K20_@ToL(g5i(e`rN=T`<`=Py)T%bcYlGfo7!IKm$#Z33^VFdUTegXZ^`iTG#Ys zVGCLz{Q>DuNPj~T+bKw=AwfGqm!UHu86b6r)CE#kNZlZv1*tovUXaot^?{TQsV}5{ zkj{Z5w)0@$ACd{uKuG69f?*|Z8MMC;_Fz@yZ6xf?kVZio4e4S?;~-^1659mYUrPIl zu)hq_Bsv%E1W8I$AWemIIV7=N0sHBYX3)7{v*@^h_Jy#Y3uzvm7t{Vq*e`%|6{M>n zl|U+mR0e4gBqyXLkSZaGZ7J-1bc_W5yA0S0NY_HT9@34F#O8b`!#gD7WOwm zs)KY3q}w5h4fIXA3({stTZnCi{WeHJNDo4K7}5?%k3te#1MGLw@#C<60@A-Ag&;iz zNo-HU{uw%Mg#BJf|EBYoV80L2D|CJU_6H#~(Yd()bvk|n_U}N7(E0nYKSaleVgC`N zk0Bj_^ckejAw?mH?I`WPg?$U8A0Yh*=>(*oA^i&JB&0teoq}{4Qc5!33!_o$07>{d zv2~_>7ua`&1inDtdci&wQXe`OurC~+4e2~c{UHs2Gzil9kTM`$010fmbRi_M4X6D` z*pGrV7ScFK;~`CebP1$OAx(rd2~rj$v1QX<9Ouw+9_*(;x&qQnNLENiki<3*_E$oh z4`~6UYaofu275as2c*T2mO!e4R1L`m$pdK_B(W`r{k3#_1MI;BNUI^OfwT^i*lwo1 zIIe@^^^k6bbUX14u-`<-cffu#q%`;K(n3HDtfodu~oBqO9Aka|H%g`{k~;W!=A*^thK)E|-w(m+UJ8wC3y zkcL9K0Mal>7eX2iX#}LvkS>NKwz06!gfxN91-lfEC((Hh>~kSag)|M)Oh{sz1^d~M z3L(vdv;fjokgkSw4I~?+g^Yk{goPJh1mcS_bJ_NH;*b5t7*av|k1L zHFUfV_BTVi4btt9HbJ@*(q>5aK)M&w{g8r?9)h$3lGq-B{bP`JLV5zylaQW)v>TGx z8ezYOj*;Mh_Y!-7_AkSJAEZ|x9U%5P?B9g+Hl%kTy$dM<=@2Bb9ftiUkUoX>;tJUq_ZKN3&{j&Af&;NhCmYA1+c#e(r`#- zNTVQK3~4N+@sKhhiERSxFNL)A+m7phSk`XvyX*6^p5Lj)w9O&mi3-jv*xFpiZ;G<-?EnDDbKAq z@L<0SKHZdd?&p`U9&dT)^*??nf8qMzCE*Tvk2fEFbzJ8A`}Sm=Ui7bb8{b+m`LbW5 zhpSy_k8HE#W&M%z`Qz(fZGLf7tZQEGYbS^HD7JUczj^TS>qnP$JNwp|uXViSy?^^_ z|0&5H`_RCr)33Z?ZR@WKrY`?7ZAF*b?4O@5zTt<1yT>0+-}Au3IW?}r^uMPVM_wHFO2tjXddx51cYNlzUwm4cwq5=0;`POit-&x*| z>ONaJZ^77Cwoe(;=j9E)U)ncUM3mM{BPhk$<%7rs8?2CD&Iyc2=muysYfI zyIsfM?Dp)RPj@;P>=V4nwesn=``Jo99sX8_^TN;W`C#9cboYsK&;E5m;pjbA%y*32 zke4-ZbKl>qQkJ$0Cgp!K^v4e`Ip@mXKDqzc6C0iy@zyo-?|XB^s&hVFTQRfQd+Fx0 zpSkzo=sVvld-bg^$L4Q%ec0h{7uGeces}qALnr^ZFRS3r$&Ra=7r)x!KixXtxh_0& zLw(8{9$?Sjn}{Zz9Hw~cY;&b{B?5t#aB!^U@W-i`mU*`Cft;l z_5K@svtItQ>E^dn=3Q~>+SP9tTK?END|X`2{+`p%o*sJRuHLQ94o{y|pHsS|s z&g-{%=9nk_HshDCW>r~dXFb{Ya#nWNy3hKKc&o#OwSUHLyKnX76;lfLKXR`n@TvK_ z#~-%V?3=pX>-peba-}vg~&-W}HV@`T^eCC0P z#$WHZ)js8o4C{O4KhdX8d_3r`yEe{fT2p#_>fBc+roQ>W)S@3ZJwK?TGIsKVLHpM1 z_;y%U&cf%$4`^PO86NiJebrz0c=!1`KN~ato67T+Z96pj;Q=+B4=g`CxjFm1Yi@n5 zf6<`!eeRt3PUZFQbx7M)R`^K%$mshoy)z{1#SW<}$Ip1%@|oez^clUALx;}0`1gJL zw>-P2fAJ3^S8Ted$0vUO(3K;qc20kI;lQ7Fz4HCY51+dIP|JgMG&yMHKdv1Ev_2u@D_it!-;ZVl|OTOOdntAC9sS6j@_1Rx}bKaP@ADHv2#tAGx!{e8+B?5LHK)hZ2Rhty z^9!!b4iDeHak055C5|6`p;%MH(d7aiE~%< za7{}u^9855bDezJ68(efv+$ZZgj!T+1psu?u z^wczOM``Sks<%J?we`K)_wzQrwsFK?eNT1S(d+!a8HH)vu1I+*EA+~%Lk1+xI(px@ z+fKcH>F>w(Ltmt}COvrFwPSDj&y-(=e)V?8H!fHna2ZDq>o#qUG-73Hd$Y;2fA<&3 z?@ro$w{*++v)|jda(Cdm=H~|Wo_($JcC+uJc@G)0L!TZUll8Cu zcUL@AGG@X0b4pJ}7u*}2_(IE~i+Z;Honmv{=P$ea+9UN{`IVw1>>$;p?4-WhM=LysAyE|vpsTs!i0^c3|W%b%V|1ozn z9$NZD(?6TpQplZH1_w{7pUtG;J(yJvz`o((g4tjPZE zaQownkKbRv?zgLNNZGzOtMb^f{YxUJdmKG9edOLd`?|wxlQ;a5J8k@i`v+xKefY?* zt8$(^_{NckA6oSMq<$^?f4u12rr*yk`#H1A$}7fvJ#%g4w-J!*@s#iP4$8lM)?2xg zV#mv0$Qt(8{772L<gK?YkE)e&MNhw`}hl z{(bcMNv_E7zF(}d9_lgWwXD%6^2Zl_zhlrjJ^bFkGlvf?Xqaj z-2ctXzd7AH=G>WipEXR`G3op(2X4E!CHakiA1y4%@AduBPsjcE?+=#!o_G0UFAOaE z`HB6P{B}d~GdYJdpD6qHbuSgHOg7nF^N&nf_|=CMd08(EOxyPQz(XbJL&n@{>X>EN z@~=L>BnLjc?Z=DKwjHYd{F>pb9((qbb4*U<&4$ZvOI!XKN9wo@D?7cAHDd6PTfa!}^7-$*zT7$Dwhq2)ZmJ4A z`RB^~)Ns>R-6Ee|(R=HuIc0y2-23DC&*eYV@1F@1Pe&Jn%O zZQIuGFCW~o@S1|B!~dR~Gx~+BEzOps4s%)#_Fqz5(fYw_*F9Q&;UC|;xMu(QvEiP_ zR(|@($*r%lVM) zJmcDq=RJ9@_2TMJKXYF9!Iw@wm}V>A`re+S52Zc6;p2IAQ}VK|e5dm2jJpn` zEqMR!F9KaA47{f5BXj9DX}_oEA3JKPn`__jSBYuFx8D!?W=TQ!k#)(gC3r}eq^(?1_kc=MmKV>g+v8~DMgN6Y@{xn*bS zj%oKjv;Ky1TlcNq{x~)3iGsVge{6^2{Sg1pv@Xnirs&4khTXUS>9t>-{G@y8{GV>W zVNcfkCr7Mpd~Z_hiAP87JoMMO`zDs9ZTk@R2Vk!AUF4rR^IQ6_n^5T+Sd-La{~D^_P|9Qk*cc|F(lg+Gb^eLUpa3lqUH*^j8sBgUE$>oQB}Z zV>y$H3r=D5)Z9n%Co$`n4$hpsmw#!+rQ=fNro_oCx4`jDpezp#O{_M8%!!oL5 zLe6gEBBxDD4xe{P+vUvHu>=3;$g@O8 zo&$CA*Xzi6wT_(U>y)!gr<_4L!{dM|frcQeo>gesY zI`w=?N1ngx@O?V<3F!3W8l8Szt5g32I`zCwN3Ra)l%K6rpER9uSETdYbe;ZsM#o>j zq{Aob=+9vtdETL;4|zIzyHTgVM(LDat;287X>V7Z{Ht~3mZzit4Lb5!qSIevbjoR` zQ_e*?cJd~j@>55*J?@U_=+$L9_Tf7nIh>=T=WBKPvA0e?KB!ZlUOLa6tJB_xb;>W( zDQB#XJWuK9Nk5%(B09W6r#>(0lz%{{K40kg_kZc+@1P@}Z94hy(W(DloqoAlC;#6% zWfW`+2919ER!iZ-q|&H+1TAy-xl?I(oiUr=0tB{A_`ae5UEh;T9b^ch{-UcAb7a zsWUDn=sef0Q+}O}oypLdrySO)e^95tc3sl89-gOT2j0-p&sTKv->ox#=je>1e{}ly zCLO*;=ehUj=+z0Ga=K3xa_B5YhO~z};oCR)zwkXG90(pr*7Bg-znvv(S1q4D7V}33 zX!$d+Y%a%zIB#j-L!l#wJXHhwUhEoXKC{_zTJqn7_}Mjkj%%l8nsG2V3u=J)s3=D)fta?5G0 zd~SuG-N^mR`pZH35M%m~N#zGw`57c16O-r0kyQV4we?v;dT3&L*jKiPouv?K*MHKm z921l0C@Lq|MO*%@q;JwWT3*o&%P~q?{?moX-Tk!uaVp=&>Uom-OJd_GD3V@%hU z^B2`K!0LZXZ_FQH{j!VXZ)Ea6kMt_U$}!S-ck}U1a<;K?agfGW(4ehnE!ES+%9m)I z23WtGp#JhR{%11D`FHJjIiKvRmD$w-($7!_ZGBqEURhbYKBM*;Q?>bzcE{(MSoxEC zAvd?z=6^DkID4-6Ze5IPGpm2S>_@;~bk>#=qxzUweF~_(ZdRXXO<2B-+2QW6$Sj^~ zOwpEK)dhLrlvbXz$o{yQ{rR*b=8ycP&3||j@eFPG6RAE%R-Z}aU;NC!3>}Q+NNL(~ z#P7>Q{iApr2J-#)LG?7V`kzg4f}h19X*4d(Y+P*Z zkL3qg{BQ%=PdBrl%`_e@Y&`x<&keKqqz-;_DD*S(kG6j!)ZPGVZw+w^_CBVjum+V7~$>9^~uL$d}y`WA)uiSrV^=d20!N}zBQ!3`SvH0X+ ziu0|^k8~tC#F#zVK>8M7`nHndgaFwY$R=+`X?#W4_`03s6JqlDfZ~uC>zCyhVEv=a zu0BcjB*yH?*EHTEY`ot|acq#qvE|giG1kA=Q9XmKo_Sy{9aMkD>kn4Nj_mFpM^Bv z^t1V^>uR5Hy6&1^onfb3z6#hK?)eC}p`EuZ8QWb)Z1~YZ zZ9T<%=JPQ>sGqzUX};!XcIk5RvtefEFQWN!l*I$zlOJ(2`}qpR)o#|_-lQiI)02^d zuw7Obca5O9E6nt{n(Voi+4CQvbz&SvncY4{em27VY)2ZuLAKuV>LplCjLEH##$$wy z$4@Po-)z?QOFhLQQRWA)AU&}$J!z(ThFLws_PK`UO_3z6 zKHN|CImGPqgA^CJSzPok^;eknSLchVA6XpxBk8}5$zd~%Ya1KaAD)lp*q9!+o<-%e z`oBbRc$oRkIW$gR;Q1D7RX96v5wBAbl{h`15h9r;*k3 z)L^WCklEo!$R7omKl+jSCC2(CmGsli^z(gsu9-bIN`6OTaoxRS2cpal*r;DDtY0o9 zJL6||W+1Jf_?dq0q_`r?;)>Omp&X(^wR(6v*~1XChXoXO#n`+rME1?X<3eKdk)7lp{mehM zl6;KJp3EbEZDRiVAkAMa%s$*o_9x87-CmNL#Qb9gjXMh)cS+^Mebhze23PJ|_DRWA@f!1`+*&F}ndTpT1jV_|XE&m;#6mjlVo&*V0U{HBGCuVoY$8QHwx6>3+M zwM!y7o0*))QhS4}z5Bb8-DBhEQqs358!r#ic(JkZvX=DL!t`eu#aDh7Uo}!cy4iUD zoaO}~HZQo19Ae#=oa{EX?#_3Hkjn8`n;fzr^@SDks9q*-G>MAe-;+B6$W_d&S>ak^L<5cMC~R z!c0#_Q~YCL_Ud0051UxLaUt2mFf0FCvR6h{pB$R+gjk&U0>x1#7Du%w{WmfFUrqMb z#>Vf<)L$khw?0&UP}2H^i)p;O*?8Yd_94jPho@*9`Pn!+LH;hn{M`}q;}Pb^v#35{ zR-boF*k5io|IMOtXJq3pmE<5XIc%r-qlJ}kqx$$+eTqp>jI1BWlfMqL@hkqem>fqj zyS+lpkf|eKFZ3GqXztWCz?VeppTZBEtNI zkK(!@TlZK>_Sw(ub2i22W)`16O?EHD?A{uR|AWa|eQSbti*|+Ce0e9uhc*@;K2PzU zo5g!((oYl9&+497zKz9c_mi9@Cg*?A_=>RcSqi!Ef&P0XHepy!&|bMr{gC0757$R7n*`KKwKmzW+Nqj=cD^t_zn5EF|-z9apK zGW|J0@(i)~_DhndiS_S&7hu1{SbYXj`9@a$P>P4Gten9#PW`O@-N|kQnV!^Lwq@^LfyRMEOYi23nvXgb_V`h zsXR{o%r12hOdV4j+u@Z~Z#NPlF<@=fc z73N*=D0^-y=}(N!@9HVe3^2L%qVZ^B<8cbbKV}yHTt#w=GQB-PdKF=M)k@>qItu#> z)J)#QbVk%a%2~v!DD|kom6^s=t-h|2rzj#L5|J!skkCd<~%SXku~2y`)!W zHjhZ9{mSY}-@`P&0+wD~UFsuJm z(i0=|v)7Z|3oyI)0qLQY>ET5rhZvLRF5(s@pJ}8IW~L9H(D*eoJ^Y>O8DjOkjN+LP zE8k7?AUB(L>?Z$cV*2n2)hER2bISzM2U>4|@K4@uptv!_;>K3EDvx&-*S$#NE6Cc_ zo8oXAvwKN2t|d0Ef2DqxnB7}TAV@mcd$m=tX*EVtVy0jo%QndqJ|dLH68l zNpB-eZ~vnA9cHHgS5ZHjSU+Y`{oSnohv>Nx_S|>LFGQJN*gpo_Ya5_#?@lT|#LB;l z=Fv7bkACkG>UX9;qp07_tlzs*JYZt+zyykKO)PF1OZ{kN0|0N^`3zNeEl4qF7(@uJ5VtTlk>{5W) zrIBQ}18kfwB)tl=^?@E#pD5|AGEPrW{f$h{H&DDGF@1=Ve-AMK-ihM#Fq?;-B75j& z_AsB;RYHt^MfSu-_C&GIw~^hpF}uCye9}XTSCw`xpg79H;;8pYo+jphKc@MJmHD0H zBsVLY9|cLyF(&742V;E#EM9tn;ueXmL++#aKg{C)Zd9KztG{g&mLFsDlwB0hn^{~` z-W&6~J8H*!A;rCtq~(8-U5zrknnrRnGCkZxdSYaHVkUi#vi@?C{+OBmY#{p+WaXG> z+?m<96MyGd_>mBs4?akCFU;&-64fWf>hn64<7aWyf5^W_nSZ~KQ&-l#_yuICC1{Gr^xR_nSCfDKkH_G z_HnZRQD*-yqj6_u<1Rq*k6wiGzm4R-istnZW(WGvxc0MgH-!9`rJZ(srITGUvT;3Z z0O>P}t9O&X2r+-*Cp|Q>=jJN*ius*PvR6T7uQrk%n%R7RAHDZ9Ge3Kn+G}KXZ0My} ze+%=cJt&?GvGp_?>6MA;)r+Lhex}cFkbc^jett>v3^IATsh(jbpUWt&v#_}C2+7UD z`u8!iKVfEn2GhDkfXVF=8g~&EUp0_E8<`x2fx{Bx*Tn2YF7>;W_4_Ka|0Xu>3?%0u zE8k?s@?)%=rCpI*nH_kU{I8XbuVduLZOmT}OT%&kY`nik`esbl>VF>9Kf?T15!ufO z>))HGo;Frb@o#O&_MiEwY#OHl){j2YXNl=^DUG`*8+X+-E@I3+zefFQW_C4;*2ipY zee6o|M*-%K29Y0>m>)Sp^6|6&^-%c%R{qlz&s&+kZ6x`)nS3s#c+bZA1^z^%EYB#( z2h5|qeE{7j`xiDJ8AJLOVfxlgcFD@d-4W6gBlBNoYHyh7LtpZD7MA~k9$23+v#X~l zo-{Lmokio<%EoUK#RGm8Z@)qQLSla8Mw+Lam_IU-ej1s6K1_Zp!p6}CvNI88pUWxU zaI^aNqIUV&xSL7iG{WjXpW=-OvnL;t{jswC>P7t(W_s9{#zl~gi$bz{5oY&BlifBl zyS7UoAL5VtXYAI&sUS)2ASUa$zNNUzrL5+wGHtY5ZLJa1+FXdI3G8)9~~fW}3bjq84-Z#JfHODKPYD87ZTO5XO6 z9}F@-xRm0JD6>n~k=?K`yYT_VjbRoyb|QNlWcKzc>MtAXuW}R0+05E?!Nnwh6Lb)4 z%DTryl5>pd$xw<9Ev#RLQ@cW}T?JIWo0Z>@^w!Mu_8N+xL(GqVM)t(a>`aRV>mN2_ z{gruZ71iI&^kftH5sAe`_mF*vGW&2P*?B*+^HXSCN12=-02#`03tMMiLgfco`InO2 z4lujjN_IHL?C`B5=NOao0FtML$@50C8&PIAib$`lOs_gnoEcohCi8 zF+KU3{IA5~x*teyO-xTR$uC5hecMIln^^hpll`$UeV9aXY>>@&UWNfH^exKbY9Ga) zepb&yiuY{HKmI}E%gV-AXYvaY^9#F3KSNAE`_sC*k*%wjQG25-e*1>>*+TYHu|F@7 zJ#@2v*+%6UncU{4qa3VkUF9gn118qq0$MMMv3C6e23#J$%&tx)|6*hQHFoSf3zU-`Gv#J;=%*M&sJd#&!5Yk`J>38|b-F_T28I z=N1-c-bwy6%KYgwWZ#U8ClQaZ_g0f={KnY$^;5qXnVyS(`%d(WiH)Oo$ey^FJ^7sc zPKf!P;pCT1%rBR8!17}(J{i-8o@>zhM>F-KmGxtLiid4%9POsK%g_92Hq~EZ^ALHZgzwJo&W946to%2~KU$fbmr*$;R?ckFXCv2V(kmOSZ`VScB(_gSV0$H|pAz}O z0E<_9P(Q}l_-!To9A);ozhakI+_jeMc7)lPB^1v{EUw#5@q>-&!)lU)naSZMdTy9K zcO&Juu>28a9?k6JPO?iTHt*O)emund+UCJ1Pb>4AR+?W2&ez(9Wi(DBOh0cRyWwa3 zGMUQpvvP_kjt#Q7#YcA7&+M>NQnIMZRbArs**(6J5~*Zb(TtKZhsUwV>Ge50MKdN> zx~d&T_Jx%Wyw>)WlG0jxNx8GyUg=y38S`qLKFRBYay(+^td`1`dz?OpR9;?LxR{P2&?+S0JtGZk&t8}>?)v)ufsDl5NR=T_nsW5kX$z+ei?sF7Xz^+UN z1@oqOTvb!7^2xMnc$mm04hm})7OsGrSIJ~{4JY&L-gtg-6^nDYT^?Vy*X!{3oUUq_ z6*>|i-(Fo->F~&Ws)`rL_fZkvwl8G+Tvg7}BF~EHuF@rPRwV3nPIaaB`sD0FRc@$_ z>I~|jI?FCYpE>ufk4`-JHO|U1`S!_ki)1p{RSgotHp*az zvo=w_ax%r`sj_4Dh%QcKh@YvRkG-DAqdHgRf+47GN#azM2YPvOrPIC8W%ra7Icl*2 zqGQg0`F8J_P~^1Ene3{mPTUFS_RgCZ#Ng(F+@iwC%1L&m&pFpos+`W4 zQLG$ZoIBICTsbK$%u^kXRvllgIvz7heS*25VmO`)vS-Lw0pxi+F4XYJl@7Znahf=? z)>OIkmVrj1l2{!M^(nMMzNkD-m2--)Pl=0(Q!2<+S(&&x&+hcKaaQE4a=2S^XILZ^}F!DgheI96|!vmF=VRyTo)r+v2nu~M=bbacaX}S6tQ#CiY zkzEXWC~R7FnWMIi%fb}2f#aq^TRyZa+vgLii+1shtCzdLLpaGAYp*gXYA?=lmnq`a zUJy^Lb$W$QD)fO*YfEI12d_apMdmiz16gvM)n)%R!+*K8#^-ZY|DWrSBWM4wwfL`D z^lq1}lU!_pqtxXoo9giTYCNcvh4y8R?8?eqP%yiv$Wi641bLz)#3e14%Mb=yi!nR+ zk$k%wIuTFtIIa(P8rPb{DQN_PgtpCafvcG2MJzuzaf=YBd|l>>>in0?N)}Z)37KHI zQ2V^{az`myCl0NZ_7#c};kDT{4$lfzfx?Z}lH@Q4mRDHg7LkmmnKK>B@uKQ})Z{a8 zK~41;tkCCjp8<2BQ$4N~XK>J9WGX+5^#jW{)ednWIuX%xK(cFmu2QglWC}5-?5I`w z=2W|dCsz?sB~T+3DX6J}0JW{wef{#Eb#C&EMP__)AdifBY&U5-ItRANeqF2mJ zT+Rc{6?x=iu$SU^vc0l$p`C0CnC&x|?6L%nE3%?62$ZukOrmljuGR{OtGxoCS{NC` zjkD^C9#a`EmYbOr)m4p|Rrs`Oug_jx>L9=nrr&DUG z;psFh69F>Iu}Bz_%1X^3o$eBpBajY91rBcQiy7j`bn8)#Z)no@=kHK`E0kUDX(n(xV{O#&dB{=v)MgC-Q^DX^scf zywpyG2@-#>a-x1RNZ9JEbyPy=2$RqFpjNTG>YAz|*9^ON37Sy(sK~`~$j^ttO2pxgPs+xhJ(v(_&3-Z6CxnP28cqgb$FzUsW|kK6!w(#n50RY8D@E zTEw$4k%&hKq|OG*CzULlg4Ee2yWHr&sq%1|hwdAJ@bI$jQ{M!ODqfh>$PFS>uhuR? zSb#EUr6lj(Wm#;ES0lX+s1pGuaG<3-D7@v`X}6;9XGXYu0c z8kLX6sj$NCc9f~Y8;B=40v*K+@)fzJpquJ!aeGo_7YT~%xaZ6bZI#a+N2es1Y zsc~Z+Mds!4!_tcQp+|KLndFK&eJ;Cv0Iyi+s8TtA$WKA>qngV2q21?l%D2KnxqJYH zg0K>YHL7EptjSrRkVGbQM8FlX!C|%P7=kN@>a<#YzRX+g##d8fh}cVA*sFFgEnwJT zf=gAjSC5vDN*zvocq!NjF9dT)=}ssCn^LZ5NO`4;0_#c_E*H8fR`-GuF2viF=fR#N zv6K|eSqd*BN?gjiD4xpEiu_#pJaGhX_u{LP6kSZsDOCA&4u#*BZx_LuIwK4#I#q{o z!lkNnp-WX0F_FueVO3tVh}AyzX}r{e>3Q;V;W@G!QcZR>=ZSjoxPzXm!HL|O07DoA z6oLjPa%&w}BD{5i1t@JPzdzLOieR^l@;+?@%$QJlf59Gt}WDzI%;NEbvrW`G*)#el<(yAP+p( zOt$68QsND6u0yQQV?McQMbisW3zajdiE;=f%7=i8VBH>D4<}ZKM@0N$wMl+;rFc`# z6;R=&HIC|1bmXukN2`9YU?-+fXs-$!!qO(rp>T-ji(ECO6}XfZf2N8lby9Lpfkj)@ zD^xirG9~9+xU9@R;1LDzX0xqxC~#q-EpRs1S?1txXjM!uUOta6bjoLKyrJcHVMCER zy|5s^BHq$mJdbxeWF?dX?+MG|`JjHpg-eZN6;qlIq0bUnK5F9%O!hqxGqrU^Ou@Wu zT|qsiTM~=;pe&jzaX%0B|9@OiO=IOMqe9|MXMnhkjF+1j4|t2naR#fjFG3N;>sjRV zQ9KtfDS_g-rh&zm>kuco;D!{*Qo|Gy&jafb&iH&cUc83J^TsDB@qBR-&ojeW?X0S) zieHFlD+d_EBYuKYI$q5Z+R7dMN97^VG&0XO(#O|AQx{9q}hj_1G6`do51ld2&3?MHRkk zScKH(WIUe#jI|J~oEFo(L)B_!8CG~>PhPe7#s`It$GCngUzDo>BTZ!C7$z#hyH9s6 z^w{Yo6(EqD)#EA!BMY-3YKEB6h~-#&$7R2SmK!)RNmnJbDeMaPzFohE0CztTZv zk=G5UJC->xp4awXRTX%~HFdFi7uAKsNSK*7YbL6*<|`VAy67t$vaXt|bO|~k z5g4i3EZ&8RP|*oXlkrc6RM%19MJwEBc2!s643?N&o)tNEkH_io6o5g4`LyQkm?lGZ z>CzgfN1H)aDn5_BIaXFH$QKJI1Ct?#GKYlq4rTs6*;VC+C~W2a z^h#KTpcwf^6-un_s$ljqyR$NGDa3k$>LM>e{@hN6V$lU%iCA@^qqut!3oxS*iiHcoM*M_H#Kj_RVo%y8y zT8%an_0|vtm zt8z-zs`O1<_TuX&@qSd%4OIqyN!#I20?&ZjoEW@#9)GoiD#f6eQ}J@AEp|pmF{$Di z<%yOWD$8bVF-?i$6^}ZTIM1s^0!>vd_aqcy+KgPdlwAqSyj9Bdq7a~LROO){&V;R# zPYUKiuoORZIF=CgIcUMUU>+D!Ah2j|$?QH92mT6`y%g`5q6nNB)+7h8N$B$S)XFeuQ2ys0a=TxG&*L{oaa-DQ7w*_dP?d2?-|c6ba-H%qERP!mWpcc5Pc#m2KK7v*&tB7re506 z-VTdm^4u@Hd16G%N2qR<35th^Rqt(tL$sqA#^_+C<~tT> z3$6($Us#^Gjwmmy#4*%c=Z5$d?G3QrCqC1W`p$0=gN}-j0Owc^g|-?Do88?(Cg@UL$fQF!|RDz)kXA) z_LNGyw*s4l#j(DI$XWi%UcRV|59nPr)^@(8YYP;!4;3J9F$aDj81Hq++!j_sd$7Vj zS`XEt0y{cvq)_w@iX00w-}MBB~Of z>X%pwjMvKR@Rd}%suxy5h@?1fk;w}hQc?~}R6|FXqkaXiTzBK5Ra=)p&%oxDfDqtCU|SjB!yrek11g(%vmYNP@+cM&F^&pl*lRIr zAC8_P*L3_&O}+uI5Giu02ADF2z{INNcxO=GQ;ARCwJ6OZ|DMVgSeh%T-?J1?x_~@6!rG{37qagx2vN>?wjjBft8B{451%Vm z2qW>kT-9qX?Kf6xzXzsAz7zKJ+X&?pRB|CK^eU&hj)gVxta0hXZDKB_WJ)|7E=-2W zwfG=czLp zuUzet%0c)(siqnnDf~$Vr`J_F`r;C5tK77;g2MU z>34}os#*wZ*bqQUau5k00>Y0@ypprp<#U#=kX`Jk_?f*7oSys}VQ^)lSn)R+;?Ks9 z=4#+uL5ExNh!^E>vD62X@{)z367e%1ew4_VJW(X3G)EK(AK$TOa3DUzi)T?@Y>L01 zAd3ycMQAQ~Sa)evNyTz-;U0UHw?wRvz~_F-1+U%(>>DMU?DC!QyF~va&Ju;&tD%4C zksg>I!(wjyJdq28D2FK34){e{B0FID47v!Lpj^`43BBobfj@?Jl*nBRQO2US zgrvQ^um+-T2wKFNm-2vkf5u7to;Zo;fe6e8fsOcsBtH0J%v<5AER%Cl94Q8w9Env3 zV|~UWN=oUizj9@{_z914f(@v$yW>QO0pmbh5xaPSq3Mg#3b?&Q4%Fp))YXbtNe$(Q z7O#kpP@&_Y78USQA=zAbE2_$%eic>1O27`Ti5-{|w-a8#iQ2oJW#SgG6FOe$gxQzS zt1_oY24XLd3~?Y^ro;#=7m*W;EaxKl!L@INtj=KT%F4u%TL>5eWw=@ezYP+(M9f?! zi%dLzv;?mp+)`Cdwb;QcfYB1fou$j%QhAxI*;S6J^0JarCkrR0hnY+>)AVsEYWmx}>Dixv*5}KT#=cd?iMIl{9 zVs`j21*be30(Y0mpEe4A;E3lY`S7fe3FdKPpeR?o4tSfDIPt+#OC6QMYR9S4EUGm8 z@f?tG{OV%(wNm^9s}eu0s_{8$&#ZU?L+v$>lCNl6iKt9O3oh_Zq(4Z-Oo}0Jt!+@~ zcy-oN_CO(!Bm3#$;$ za%XA$<|U35ih3)K`+^E#@q>f%7Du{eg7qv3($_(7r)A`3hYJ|BV~35pXKFFt7* zSoS6I2&;raw?rr$HO5t51|P0g+pAsZ(ZQF)pIibR6BBJ1HdQ0Mt`XzJk=-j+kj3d} zaatO`0Mqf&!$*%W3t*O}PM?-Dxn%T+i!&wBaXAQ|cWX8F9mbT*ueElKJi zeL?rS;T*4bm9HD&{24iaCus=XkI(BEf8Nvb^$yY~x{l9>xP{K2m9MvxCdQwaEJf&f z;`ynacf-F((OH^G`Bw~G4u3&8S(-!n15WruavznT&^W;SUAFW?|ec{(*bg@)-{kw=!;>g87RXj}f;q9+-;x zD;PKDBX=_%A?|0~It}yJF&-lxU_5X+=C5bmas~1r<1yk5j0dM<{t)BV8OR$Mmu4bw zVmv}T!gzQV=5J;^U_~Bf+&vq43**)T|@84>2BcAa7(mP>wvzcxVywCdMNb$RmtP zi;*`oZd!u8g>h>o@)+Z`D&(z#n zXK>@NWilQnZecvy3-jkQ?lvH|GVbq$yqIwlm2YD_+y(PjFdplU+|9UTL|)6dk+`4n z0M)aO@gVU4<3=0$qk6{cE0G5o4-#)+yn%R#@euJw#>2!TjHge7e-H$=X2x3vV|}8G zo5v$>Vcc4XJjQtA?O1**;}X?Js?zGMfw+NjBXJ|+CgSOgn~9qkw-C=@+)CWccro!z z#%;tcj8_oPXWUKP%6KjDV#fW%ZH(6uuV6et+|77|xS#Q$3;U~%@dn}n#zVyG8E+&W zWIRl~f$=8dA;z1DH!>b29%j6ScoXBT#3PIw+}Pe`#?y&M8P6cz!gwa}7~{4oEWefU zAmx{;wR#?1iunzUr+bkb887xBPiNdxgWSY;#xmp?jJua3H#6Q?i#(HYX(e(Ch*uVp-Q4RSx@wQG^rF&*ofT3c>W&b8H_g*H!~jFi}^DdH@tw{!g$7u$nzP`e+jvj@rsv`7c=e;BeyXg z+=sk^@yu6{yBW8>ioBNb;{C||j9XqqUdOoY0P+CibqA5xGv3gIJji(Q>&P1zcfWx= z#CYwS$Qv0iehYb+aogL-n;7@MgFM1`{kzDU8E=Rnk22o$9`Y8(Ti!<=V_fK{XUHv# zTR%sh&v@+@$gPYAqsWUH4}Xc=#(4B7@(RYKuaUbs{|0$2=iegtGoJn(@;b)NEyx3m z=O05}&$#V-lJn$p(5aZV4$Qv0i{t0=Qaoc~8H!<#yA&)R#e*$?kgzkhd~!NJlPtwff&k+`xE6U(9c0 zysjVebjBObMs8xf=^W%4jJKSN+|0PtA9*I@=_ceB#?1qe=QEx$5V@6c%OK>%jJFWC zF>W{?^H(sQJ_Na&ar02*wTxRbkoy_8UVyxgaoaHD0md^gL|)Ih@gn3w#*2p|Z(uw) z0(pq>*hu7!j9W$_4>O)V8hI1rG2#)%^Tj_<3tKbe!Li7rj7#H@w=izYL>^;2JOOzt zC!vXG}U9g!y*XRJqVVcc*F@_fcKZbfcoJpVT2#f(?n zj@-t$Z3FTO#@!o{yBQAzkk>L^zX`dY@y0ul*D>CFC-MN}vAdAhGj80BJjl3V3-SiW zP4&n_j9czO-pF|Iy~x9i*WQP`iSfFv$Rmt5Y(w76c;tTMQN~-hBX40`dH{Khar1-7 zTN%%M2)VRetN#@bBR4Sa-htf6c<>SA>5PXSMQ&oeu>pAoNqe-^o)@xXJ)>lkm? zjXc13_<7{@j7J-h2N^f)Mc%-8=D(4L7%zSSc_ZV77mubmjj8_~$Ze-kl5P3S|^-ai4j5ofH zJcIGb8_3O!$KFJq$++=typ{2M;?fGOo-6qcj2BaWBjXjs(;2TNZelz@ zJcIEdaWmuLOj_q;ypi%-7;h$?&v=x$mGKzyV#ZsE+Zb2!S1@k)0{g|yxKe-9YOS1O zM=-xxhg%p=KZ^NnI^3$sjf@A0n-~uhH!~h3 zZehHYxRvqruSh1I5ixL=0{Zqk-x zQ_8tT%MD~V{5m|qcrBF^WIRAT#JG|_tivOWEA@#o9-{JNI$XL{+pY-ZH|lT`<1xx_ z*5MY$m3CPfSDtHQT&cgGapTvhhXKYjh=&-r5)U(8K|I2^pLmq<2I4Wsn}|!dY312M z+{n1}4c6bpxQV!#@l4_t#;wGyj8_o1F@$~P=PBN}M*Ufk) zmE&i;n0SEkTH-;*GwHb@#v3VrnDJ)f5yo4IM;TYz6=S@f@=F`E@>j;Gk?~@xrf@+E93dZZH(K9yLGsq@mk6sV7#7qknync+yIk< z@?0J6*Wm#j9@OC>9Uj)<5gi`Y;V~U9ZECx{MjdX_;bt9f(cxAdZqwmz9q!lR0UaLH z;i3PJuKSLj->d699syyf1`7_mmZ+eE3I>#QM3ew311JPU9V<~32L%Z~0fPvHqC{mS z^r1(j4AqE~P?R8+0bA5{&05xA9R(#K=t$kO-}meNJ7=Ef{J#Ip$>V#^``+C9&dp7k z`M`sJvV890k$i@4Ui~A8kIvvmZ8J zya40=So07*JkERx45*{maZF?VrCF(cI5G zh5LS$*WfMO_iMTa57pmZua{4*!E?B`vw z&e!06Fhvs`3au> zvw856%l(=Ze*>{=~**37_Q= ze7c+6=Ul}>M&*1gVto#lh$a8qEI0bxCdrEkt@)f+4*YH-y(H>r_ zd;@P({s50OjxD^@aoxeE&$fQ(;myMQ2v6h#JktCy!b7!Zg7<3w30^CIW_Tk%!*j(6 zUUr%PrF;Rezryw_ga@Ag@ZmOAK7#k3XTE~RiXX#s<;fb}YJ3xTFW58+3k1w(~8Qh<%?%>`Y-*4ZqmFg{6US87Go(i6* zd=2;h*~7g(4ScIO2e`*+;U1@h=ZbTLPuliR?}tj|Pbh!5rH$_lkJS%nc%wKA<*&z2 zwY`K#+V)Q`zxX~I-xbPxKg96lg_dt?c&GLxaLyaFo<7RFhc}PY zJPD7UXgh0RrTh$!)Xv~=IZsZicLA>zC#0+V65gwP1aIXlc&+`4;rUZ- zzt-?tYBYb$3`2e5Po)JFFCwQs-I>CdNTKpNlS3d`@yv)N`+aY|ZZU6N7 zq*a^<<$WGl!E?>qUXRD=A8q-wMtPqH61d0N!28PLY~i`K{gd?;DDU-_aId$5_v(il z?&q&Pyih+h@KJGE_)**b$@UK@@9iJqwd$SV$0u9A&G5ymEI<5{^@jTYt6lHKE#Y2o z1fR9PE4cSt4EH!|_~PfS{Tq0#?JYdhwtss2W5wB_y!U4gZ`7X!e62Vo+~ZVmkK^t2 z_V{tJM|qFaz&*|ZzSsD6@Il-D$$CeW_j)I|*L#9*)DJT}lb_)pCwTScytGsK5WdxR z1Yc>}KYhPS#feeg_iIhp_$KgLaW-&|lhPH(+w1M|@y%FX$I*_iI61sgdkT0fFX5|u z+IqEucPhV!Puf1fTW$NN@7JI>9m;$E^mOgl5k4x;0QWc}U2(j<-X8Dg6U(cgXS(8? z;U~2xc+F*gE}mlZ&jQ{nP6+q$TEcz2B6y_nTEPn)*K2sHZU1CHY*F6(Go!2hJ9w!5 z&Eb)}fDejO!dEI^!97k5KP%22zE+$AeAadc@3rlp-aoaj>yIdZ`c}IR9pJIXWrT0l zo(b;#e1dx%Z?Cs!@odYhGs>rrHxFKWnTH-{0r&h5>3+V3dz=Wq(|*P9Oxp>3qiz4> zex)ey`?ZC8d%PZxQ>i^Wl=tz<;U1@ed;gSl^-l%&I5oUhdm8vj+bz7)wtxD5wTjcD z{P|Wk?nn4ec{sp(#Tnr~&rI-KalF0Wo--fw(YAkj`%h};2Iaj!Q+T5GZ{cUf$>6?T-N84Clf%6q3cC8CgnK_!@P&RCcMm^m z`v7mX?VsL1k>YeHAIp1qsr~YLJdW?zfbu@?jc|`M!MA=r0$=>H<&%H1-cbL4wfp=A z_j)7vTKl_#`}oH2R{gMsr;4+IN3FGg3(vIepWgnR;_Oh~^EQWXzS-7w1^oPSn>R|h z&$ku4*M8OTTf%1`iGeuAg! z=NZ0N`7^wc2O9sY$5(L{@Po>SaPOZbUH#+v-gHx6(@xs zRc{7g{E8hHIlR!efBJrT9+oKYze8TZecWsK{4&d*J=~A42ENvK9pIDptA%@<4xT7Z z4?ii+5$?y=0QdbG;eLEgaL=C;UE?*wXSL@H_v0(jxcRtvdwe{vcI8jV@;*P)J)hyh zFW7j+@PoD!_(t3Q>Fvq&-cgG3-p^aO?^gzo_ST*q+~eeMk5j;x+OHDs<5khsKQ%m3 zoITvz)4;tw2e{80EqtZ;9o*yebdCFwu5lme+OH8FtKJhld%evYXLum@PmcRS|L^Yo z6T*GJmhj?cHtrF8`9XWHeg*e9G2F*}4fk zQ_wZ;C0*lQ(LJBx8;yGdkAKz1y@hw$_D>(*_v;AvI0M}CXN3E>Pjrpf3GVqb!#&QKt~kLPY&?CuTJ6^YUTYl^!XvGtmhfJ2 zBD(T$MfZG$4~nyfdp{>|@8=DCRGbv<{j;U3JsEsboE?0j`w}_a+f%?#ic`XUzbd%L zso`hE*~2|f1NS%w_~NNHueNmUR|oevJv>yLBizr+1Ki_`@JMkcxWE5%f_t19zEYes zJeCKV&piJ<&I0b&xgp%w;Y+y3iQtjOYX$f5is2r|=Us2-TJ29zek0$&10AO++|L(V zx{lL~uH#|{PgQRLAGKYEV^)9N`{k zpev5=x9^wt^Mvv~|D5QGGs8>WcMaZjId3nu?Vn!nUhR)i-tVWa;G^n|;okl=-PaX# z#o53Ee?J7CYui7){a$Z@^4@PHyi}f7@PqoHrtAI2J-k(%2HtsI!MAU=@#x`4ZTqM1 zSEcjmfbz}#wZ5gRJrmsTcb(uKXNDgX=L{dTUxD_++d0V>aPQ|3ep2}*{49^)9%ls) zYU_s>?(4KQ+~Xv0UtewDKHsKrkK^O%{or|+p}gne4(@Ss_)_~-z&%b0_c#?iQk)v@ zarSVJ)4*4XbATuE7VdF6_(tV>xcBoB?r{cqrZ^+q$9;l(oD;lIoEcur&v1_ubeHq$ zUgZ~X@8=NiahC8#aaQm|+y2RX+n~JHo6>b$Z{e-#&EUO!M^~I2epLAaKFUjYuQ(OF z)%?GwYrBQ}ao5px-s$P8_XwZV&H?V{!4WUqOZcpM zBY5yMn-5oT@BbL?an|rqaT2(nFE;S;-u65zg-43Bg?pR~J}J%)9xF}`_dGA)zF#Fg zQJf0yaca27*~3%CIly~u`{&i;==WDyUgJB!z1|VNQ@s=1-_tw6d-dlGFBB(u>*YMQ z)V6=J{SnH0zpdcj{usXaK79`e?(=N|_c$APrS_+AkF$k)oD9Cu^XnYGe4F)439q#6 zpWZ)vwWmh;gM1J7_B8O}=63uZ;GN>MaF5f$eLd5|^PR;%!adFa?^W*zKguV#$2r0M zzU~Yk6z2^0IDy8&`*~FP1>EC=aF65T>2Xeq6QTT4=baVYj z?KM2nwtsrPTgBO+d?ruf-kvSouUj+tPH}d0&u6$_w-#`JPospFic`TipKZrc4bRn{ zJ>2)Jffp)&fLHPs?r}PJt@1s*kssk6$H&vh%kyVMdC#8-?r~1=gX%rQgJ0Kr_17-f z38A+A)7#_YzC`&>@gw+Jr3UFCat@C>at;2vjyFI0Yn zFXa>5{qw9Jzhx@v&fNvDPg!_JZd%ZoW%GW6G_s{q6K>ggnGsQW; zJx&W>C{72@6{m-LoFhC`oB{6RKEnMto#5U-CwQs$oZ-nkG(YRp`!m$Gf4W~iKcl=~ zk4NzNUUpr-f?qv9!#&O#epVcBueZnV+iXzY*L5k}`)3QU)jt`0FWs8hEDi2e{`?3->s_-@aeD z;`A)9-?cc>wO<3gP@EB7$|v|r$HfU=sr(GDae{YV=JQ_V7jW;N5bpi6gdY?q zf_L&2JXL#Qc(3wn_#jWd#VO#yvuu7S;r?D< z1^0fg;i2N};U1@fdz=G2Qk)JxXxl$M|6`ROQQn_ZOz@@p;RKI#zv~PSf5Y<9KfT_K z>Rsyp-Tk~4!2{L1f@g{o!@d1$_(E|Kc&<1p{H*N^zSFjUdi(u*d^yVdeiiWJx7fO< zg!}rcf|qJ%4IdO|5BK#|1NV900QbCV;eP$w!TtKThkKkOyi)rIxVLA7dz=aG-*Y^{ z{rH{XXZ6n+UaLL9yDsO?M!taW6(@xI_a&Eb|Gs1d?-XYR_jP^@_xtT@xc5&2KdAjF z{H*N^zSFjUdOmlGlcT)9Us1rlJtf?~XI;Vld%HE<I zNB3}#bA*qIGr&F02=_P>Jl6O1PVkfB&v1`(hWq!&gWtT&XFrcD;2tN0`}Ne4uIG#q z+~ch1YJUv({aV94P67|~z4#Q~YCD7PwC$gs&)z>d%6tD5aBoiu57nLu?)z24JTOzh6JV{Wu-r9%q7k{+#H_pBe6P&hS|64}R-1 zpZ)k+z&%b#R~|0mYsHV?9%ltlRDKQLX?p`twe6oiUOvxnQQqgV4DRjmdOVKzbB^*J zr+|B$5}xXQU=8oJ-M|mp_D^q5^8x$*MT_!&o!HTJJ>~UyoK*dMMEOiUz)PJ^NBBn&7%q5pTUd{mqj-1jS{Yrnj`-ky`1y(D&~uxc5&D4^@5-_x@?<+AnXfwdz7Gc{|aSCnxw`ac1~Ieuf7cm*Cx(>%CUxLwKU? z2)@#`e|rD;{pT3veSTQOW3|WY@i^Yk8#!8Qj~mgL|ADJ}FKC_x6-< zk5j=je_tBjYTG~A4;{*Ty*=FPJ;GYcexG56m+#T}TA$wjg|_|E zeW^Gh%KQ7zOL(gGMDSQ~R&b9K!#&O#?(=p6_kP~MJx&Vu=j>a!KWES29%l#l_a}3> z$0^_*$H&3@*^i?N<$b?uxX0PU_sZJ?yw|pWvfd-hYknT!UhfD`G`a4EN`2Yq*a~0{1u@c&7bI;eLN(3->s_ z-@ad-Cp(n)_T+GnQ_$6(67J9GDtL4sTesBkLUH!+O5VU@#W}!hmG9ue?^zxk;e)pQ z)BDHAeMI?2@h7P7Jm++?dOJ<9ujHE@q}fG66o7Vg(U9sHo1^``F^N@J!`9c%t_7@J4=w z*NQX1gSFK=!ke!$pWwOToZzMW3=iIL^DFrf{?TPVoPX7P1)t;zd@0{vgXh=a75t<) z4ZPdfb?X6M$Xobc-odx>9v{#R>lSvY&&S+4qtb@bsqU zAw0T~`4S%A*gS$aUv2GN!4r85kJnZ{fp6|^zJVwDdlo6YQu!@>t^Uv8OZg6dR=<_- z#Sd9~DtIHW;rpGH-@}Ionm6#Z`~ctmu$6D&f#P@Y_(4{_hacrfc=jV!et@qYY(B#4 zA2pxgXT>?ed&QaI+lN@3Gklf@e{z|()sI>E;7>38^nCLLJpI(`*gONzi%+}aOL+J! zixbiRO*Q$31 zuU=sLo5Rz+c>y1uZC=9LH`?FJtKi|otvxk-N&-{{GjDLE{U>;)ahc)sy>D`*{2AW9-P#%a@5_9SpJDA> zz=LO4dqVi|DRy37!h>J5dL#JsKh0P0;oB^4V|e+W)}A#ydyMr%0uO%Dd;?EDVR2G; z|4FNN3lE-a;d#XL&>4+3|jW z*Eg{JZQ;|uTlo&2yvO#dr$5sA`3UcxX6+o{jgIRPK0L$9pWw~4tlwt%tmE`df1bq& z{_HZJPgj{Q;DhGj5MC;;mhh>zI1xPgcFoW5<1?*%3@`6t$IF`j>*1B-G@-AoA2x9R z`=BX2dW((M7T)}*c?J*fZoY%p8pj;oYrhJ3{6Ncx65ij`&Qle<{%z$s{a0^l^D{iT zmaX?1`hO_T;i>Yug=fEJ{oKI=oyU84{W@#^5$?aUIne*{T36aX!l!%NI8N~F!{#S= zuk+mupYCDv&lz6-i1mLkUgm%OQ|1f$2dv*h_(8|f5+2;q@+5+nAGQ5m!JD75{fgny z@7TDn;Vb1;0RkuZ#VGhy*B?G;C^4Cg~yMv{ORENzgph* z@bt?p50CKt@fK%*H{WOdHp267v^W#Iyp#C}zVZ1VUOmT->odIk9;-L_^UM5Cb-l2F z_m8*y3E^9<)0Xg9?TO&I*4rz1{Wu%P7#{1mSi_H+KNEQNENkZmo_^5AD}|Sjw0gJj z@Ds{^`0z11esg%N>y!c>?yWr~JlA=rf(Ng(ajD_cb?i9Z!-r>C`37Ep#O9v^y#H(4 zuNI!YS=XoVTK5fl`1}#;&m;V(^U(nJzyCMFgRi&tPw?o**3J{WQohab;knkHGrUy3 z1%Gjw=kr@F{sP|Vyb!|Yk6HO8Jo-{Qt|NH-_vS13aDUt17~Ve8+P|iMiN#6a;azN9 zv4O{Ge+sW(YjL*lDKgLCneuZ7-}pKoK5T5i3V5JADdEWztUoJwtMy3@pFhRQH}EF1 zb^ZZfKFp507Vh`4JNT5@aoxkyyV`yo;koBIe9(L~!biwJ;I&+4}=ywvqw1`l-H?cl@5KkLeMSq_ixVCUZgKIhiX5+2{z@~48A|8DD$ z8ou)NJUsiPwWoonkFz{Kz?1t~y)8UWHP6HIM_T{)@aX9l{|Mjcx^IB{_gF^w!Sf&9 zE6xeN)Ah>?5A>e*8NPg-<$ds1m-!#*{>cK~7q-74eCU<`^l!IukKq2CXayhs$l}EC zv-WolkF`!q;Mqr&|L|1(lfnzd*}`+J^E3FM`!G9r`8eyJ9Nv7y^0uIV$j)CSywmx* zf}hp?8r~^S_V8BE3mW)5TmKyBceL|k3ojpS`_;j7&D%XZ)%<*f51(Q22l)K^)(<1R zxv8~tf@kWV6MWD*e1^vlw)4~(K0V*^Gx)!k`9Ek}7VzZLt^FZ9)Vh5M&mLy&kKpa~ ztUp)qS>qeSmp^XTBWw8l9E+2{%U?0yz;n%?DLlH9&3jw;LhZ@m`J3&$xr0Y9(K?@g zExR9Ez(ZYMm+<8Jwr;QB3-xmiukT>vvWJK7x8tsXM_TV4;JNNgx9~{ow+`Mb4}18m z`-De$t2hI^xwEx@gtyAu2_Alzjn@f2jh1gSyndmTKf`0)R}B98GXM9Q4;S!8?GNGQ z4_o{tJk|9=1W$fd`48`(Z}UJ5?{q(H4G(mFPw1+517GMqPYO@3YyH24$Dd}N!BgEI z+ri@(TKOD4tN#ml`KLBsB|Lb9tsg3Q^ib=!8Xi8+`hO3fG_N-B=qjtXg}0xu^->St zDj$yU<{zv*1HAoFYySujeLVvo-eTi^g8O?lGu+=lIm7!0S)5?H%;!?`%mN*9Wgx7eb+Vo;OiN9_>ETY2A=BrB84CQ{Q-EI+Wefs z=cDFxc=Rx{zdaiMV=Q^$jc(3)|2%jEn?VsSeo+F>&^LJbS&+uO3dxkff--7pE=KrLA zSin=g*B-(Xt)rIkKye~?{2I%v6+CV2IEvxm3|zcoBkd-m}3_Ex@uXMbqzJiw#RvU)ps z9xSe0kN5Cd^X-wY_51)YbbUR-gO}U*PVh$Su@k&ke$Mbv_Z!df>?u)C2X!9?-u$TT*B%~!*!r!3=dZKl_W+M| zzHZ_EzH0|hwEpSg>2F)TM|k3S4sRBAoif7ff46o{@THE66FmEb)jPwt8kaM?)_NfL z+si!9^gMR~Z=PrILwNl^Y~EPHn~z%g2%bGn^EQ0Gmw8Ord2kI+w606w?W2_c@cDh# zo)n(G$>z5$ynednRR$kkXXoo3Jk<4j4xjZrtAN*m-48F}!7pkZ4&Q4YtKrk@ZQj_! z6Sb#-4ysQlKiKxGfKPhfSHk;H>lS!-Y`;c$srMBp z_;f$Zs}nr?R%_=BA9Nq`43FPp^#=cNna^jvr?h}aKWY6I!h`!*zb)a7=79*_tN&N< zQu!IfqpNJc*6{F|)}90&f85G%;H%fzex~r~FB+aTjlcz z4|leXn&5%%|D52l*7-C2_I6yK;rYugesH?X+y2|F{R{X?{Sd;_*IW4|yz}=J;e*y` zEBK^5kKwiAtl@ioe=~unFR*;rz+->D2_Ll%-@>EkTbvBOQ$OtBz49}s>$ofEv&{n~ ze7J$tTfr00e|W3oWe+d?z6w0j`_%_{sr$MeeE31jlO7)5*N&qjJk)VLz#CnUjPUjy zb{?7F(-+uv_X(bAUYg;(=DjmKQa=R$beZST+w6KFgwMKPv4ofEw+No;`!6f{ci4W# z@T1O0Yj}LNd`RHK%aqUX#gE%_{}evl$i`(0&o<^6yij{~@Of?Jb9k@sm@cvV5eE0BF_j?<;GwPub9k)x2MTzr{wd*!o`Y2I zM(2wf9(}})_dR^Lv8{U>`rq1q9pJg1FSqbP^Lz(C==km7^M|ZIkMNDoUjw|?`wSzz ze1PTE1W*6c_V)yj^?vmX5B&Z%yn40eeek}^{0~0Gj>iSOeX7+P!prxVFX6MkXC1-A zPqqD8!Pn~N7(RU1`g0Ah{kc4RuQ(fccwMVEg->s@_HW^>);}41(s^(PpI>b4%<1}` zT>+moFO~5629~!KJin#oZ4FO#A7BsP>Ue43{a@Jl9^jMS`)%Qk-skDy?N@2uhDW;3 zIlveC-K!Da>wGc6m!0M12_F1`jn_=q`;cdNtnZ-&@4w9R@W-t`7x31<9|ZTm>#(Hz zdK;d<(auvV_~dyG&-H%78lHW?+L^#x{Z7IL-hY$UC-7SJZsEC}XJzp4qqa`l!IP&b z&*7n-rx)-^&&5jkaJ2rZ;IZy^)$lB~diU`5zuS7Ip+8FVJbZet%>ymGxrd!MJNTsU z+xGDM4VH&Tc&+DC13cIBrV(B$e!Wl{l3Z!pLHMR49{O=`y2erW&S7r{b+de zN-Gz_W8Ftu!o#1oag5-(u76kX;ayffhOacAui=6ECxJ&gPE&aHV%y&>eAf3MGI-+a zaQLj}#W}ous~r~wy#EjL628~^t%8T@{~Eq|llA`|KI{7z4Ls3v*aN)KdZVT5I;(^C zIxc#6r0bm{JiL|l^8n9&Q}@H+sn7H9=uUPXInmFW=i#m1-#)`v+OObWFY`Rm`&tWl zqWcmdywZ3r;lnrD{zmZh$84Ti!DHR$jN$nY+jYbmp6EI#f%h-4d2a&`u4nz0!q+;E zw(#sG)}I-?)O&zC_)g=M!&6N>Q7r@GHj!*jKN51+J-ZQ!lG4|RY~ z@33)c;i=X|9bLau(Zl1|;vC`Ums_3Y%bzp- zqn0PZ2QKr!xu@mr0^Z-=JcPHJ50~)7-&djQe#;78Y8+$utnYWM;r(lE-bmo}wJfhT z@LAu>OX0olr)}YZo)>5EN!L3&c&hKE=I}!Vj8i-tL_W2*4=yxr8c-d*418)^)fFJyM5IoTL`zE^QKfKocff?Sa zKhN;#7nJ|=W&Tgkw)QXJh1SC%eE4}Qzl8VN-w2+4((-l%k98i2;gQap30>dw+Q3__ z6H@rB`EUy#epB;2JooEXc%%0rbNKKAoA(NM_DRdz5*}X1j?)UBKi$Tqh7Wo_d=GDL zVC(RPzOdus0FQLN+`{L;+TXzgeSffrZ?x_`!uy9jHiU;SwE1dDe}?UE1g~#swJ;ZKdJX};nB}ndrEkw^Gikl ze!DKH;gPR%;CsJs15fq-%mE(h{!9yRo^1Wl!Sf$8@8R+F&5!U<`8mK_J%1VDx!(Vo z;LXb{A5QQ|@9E9(__u5xIKvCw#|}Ptng4-~(*-=&_d7!PXa1b>AHMf_9=?8+)whC& z`u%|zo*iu-Si?(Qk0kK3j-w6S|IS$oKj}T644&oI&pUYYcxz7%kN(TNfVXA)9>uX#2CA`$S zB7)C)FK7i1^m~{w{H)_;4KLJh2|Rm)<7xe!>m0Ux~^YRc&+<;TX>@TEg5`%zs29dYwd3i4}Zbt znF5|@{w(34o`YBLqw=|iFO{Ercstnf)xi4)T0bA)8^3Oaw?AcZI`}YKKlJcKzw>#7 z=P$AH1H9M!HX~in=_YvjILn_CeAaWB8Q%Po)q92?bR8Oe_%i=XJ@;I|>sMO6Av{-{ zC48;Cjo|4+mH+TW*NHK_@p&E|-Nxc1@RRa<1JCbo{gA@rH<@qY2jz1HPu{8b5a6xa zpTomXYMzHrT5pu_@{g@O6@0p(#i`-#!OHL9v5wyc9zN6J9N_U)cAU2Gh0Yfpywp70 z!|TqjJC5+Uvvv;fvyR^hK7XB^H&1k3ug&mI$8Yc-$Y(ugU%(TMZwQa|yR1w2r1y>@ zy4Eu*c=;M@e+-XL)(>lVqw`$?Pjnn@;M1!uP72Te!`7=?c&7OzgU9;b!4975dyYB0 zSHBhTQ1f{OkDqSGX$_CwW&N{HszK1u;^CLXg zdSHML8kY$^>w9M>c&z&dGrZOB+nnk5web!9^D>`vod*~2>00*wMhK7YZ~ME1XL^nq z!RwdU{IG(T&$sr(@Ic@DTf+y%PvA?x-h}(#c}?Mi?jvpCi9c6`FEx%kc&zv6a`;~D zDd4^4^AbMm_bMy+PWe#7W97ph9_cxL1J8RqzZ~GHuTS8m>h0jeOKrS*c%$R@2v2^{ z@?@a@vH3_>9!~I9-zz-9gRii8X@;kNWchZ6xB6Y3;Cz|?vF6DIJW_i?czH*gf0pn> z>y`)}>iwb>d{SP;@Lu1~UBd(2$4KCz=93LPeX8|O3NN*u+`_}B*!enxx3975+#Njf zzn1~eUS)Yw!2R#Um+(x#4_3j`ztj2zUjDlI9-iyCYv6%?=lKB7^*yo{Ug|zZ2S4e0 zxreWnCr5a$>$?HoD^EuF@G(0sCiq7Cb%GCfvpk&P@m}{~;0N7j2>uKCujhaZ`1vZk zuNcB7^}`aLex;p%Blz$%Yv&3+YMzPV`43vXYk2bwb{{o?XTNE_fd}g66h3HuwS~v( z=M3Jf{0^S^`W&8qt+l6sA9Wp3!nbN?1<#&o$8Qbq_55NF&);nM)4=C{Ge5v5-Is3R zf!1{$y#JuJr-#@2yBH9||JiV2jFDm$?_t+yEF@UuKfz(q2{Y4yw&d)Mes()%L*Ro_hVyt_)a@c*YHy3 zwS=yAZs5&#S^uZ-mGWc@uYCT8Pp{Yd2cGHvPYypR-wJr7^ORsQp6Y$12A-)u5Aa0ywOV+p=cgTfc#h?5PuK7HAK|gyuNdH|-uoTl z95xHFMOr`3_gCD|Gn-TEZ{56^C7&}^XMgf>F*oBYyGav z3LfeE6fu0z_k-5(Q19I(bRCZyc=HC$|L{QToGpCg_vhicj-wqs)AuEFc>j1i9t(K+ zBFmo=9(|{cV+GG2WXD|%AN=_gypuQZoyPG1Z$97Fhb=tP-?Ql8rN+01XF7h5@U7HgaQuU~8VbArcTZS~IZ@W*Yx&hYv+)<3}~FY|N$I=i2+pufk;h44xFwuH~R{)*t8 z=C>8Re7UthhBtbTeGMP{y?1!~skUDmczQeQw-mnC@wbDGD>$-afpY*&VhiCV; z{w(2nZtbk#f&LCl4bQHl`;hS68*N+~c&^`_JHSK#yGZcqqxO609X!$XV-L@?J~_f; zeSdI(2m1R3BfQb^RbJQfRLh~jxA*Y&mUbRFz&m*d@8w7MQ9i;4`2=s({u6wRrHFc?hrNOL!)a;IVuK z59Bet|7UB@8eYm1cq-q(LwO1x{>kER;k7)2XYw69k>~JGUcjf5)my@Qc?ECeH9V8= z;jz4d&;Mxk9^kdSh3E1Pp2&N6C_lo7f3SK7crG8|iF|?&e{XS4@J2qvQ~4P_|DDAN zu8;heFW`+lgqQLqJe5cASiXV>@)$n+t+jIvZ{-QRmT%y>JcXz7Ej*TI@KC;k&wpd> z%;AH)fVc7zUdtPz zQhtIb@);h=&+zH5t=`}Um-*kw7w}vj!ejXoKL1~fAHiGs3ZBbjcr0JT=fAS}3A~qY z;EgPWjfJgEWKK+r!U&32?1kdFwcr1_Mp?nRW2dg)M_wo(AmZ$JczJeGNSiNib zAWz_}d;>4#DLj*J;juh}2l5@ff48+Whu87~p2X*F8lK1#cqre%r*~Ob@%Tbwn#mnZO2zJVw56duU8 z@cwO9ZwAlhJ9sG1;qzN9P62P_B|Mc^@K9dEr?*)AJ-n4S@LYa?$MP0FbQZsZ*YX}7 z%a8Es%@${X*YXjb$|razKf#ALS^ODZ%g^vc9)y?q-@nn~Ea163geUSPJd{W9;SCml z1#jdrJd>~CkvxG=$SZjNN~^bqm-0P4kvH%_et`D}i{HXic?XZ=J$!nF#W}(o`2f%5 zBRrN*@cHEy{{-*lGrX3c;i)|M^vnDYRrQY zc>+)68+a&B;nOc!{4KnZXYfqEgU9k5KEK4`7w}eI!gF~APvkW`l<(owFIv3~ypUTHeDm`4Jw=2l%|V_#?cRPw-5Bf`{@M zUO&g;pW%T#_)O&gv#tCBUduyxCSSs1c?6%IW${<=RvyE1`5GR}6Zrg0i@$+4@)VxR zxA0J&!G~v9{2jcO=kQcsz(aWnAD(XUD|juh;i-HNAD(7$8h9-~z!P~3pKFWL!5euG zPvu8=ARplEQ!V}o&*c+5k)Pm^e1^}zVDZoJULJhbW&W4)1w569@L0Zt2l5Es|4(br z3f{b@{S^PD;mnZN> zzJZtW6rRer@JOD)1Nja%l2`EQF&4ju_wqfwkvH&6et^gF79Pqw z`1DiOo*v%HkMK-Bz$5tx59AYkdbHJhg7@+nUdzw$Odc#R^FNX=;PX#fy&=4pFX6R3 zf@ks-Jd(%o=}}hi8s5tjcq!k&Q+W!HR0^5}wE-cqm`Nr>m^q7~ad*@J61%bNL1y%TstD-@=E7S$i^g zE8oFuc@EFy1w59Q@Hw}7D|jof;fZ_?59JMfdZ@)ez}V(~M0FWKM)56|QcJeD8efxLwe-(~f7@LJx( zGx-r7$p`rKofdzDH}VNy%1`i2KEo6F86L@l&%Mn5K)!%aTWed<75W zF?{$At9K2rOCA^nc@J3$4Gx;7K z%NuwgKfs6kS$kS|DevH^yoU$!BfR}qi$B0K`3R5X6MVX_#W}%S`3%qHXLukFKJPOB z`}P=xfT!{h9?F;S>FyRkg6HxTeArm|7+%ZQ@cv({ zd;(8YeghBWDSWz{#o59ec?QqqJ9s3|;eot>Pv2zqmhfI)!Ap4!Pvv`fC~x4yH(I?1 zcr9OZfm#qqS#%H}Vml$|ravKfwd} z44=N%>OI37dGH07`Jc)c@K_$g=Q~*ZCA^nM@LIltXYv>x$=C4dYpmV`p367zM4rMU z`4%3?GkCMMdUx0K;-3XfEN3*TSg;%D&g=H@&2>HVL5Wn6OjO7RQ$^7$60gzsmI zQ^8}!sp0e2+J5cfYn5-{?X|7m13cfExA0|U-oX>a@8KKy5uVBi_*Oo`Gx-GH$xrb1 zvDVHRo~!&BUdV$ly3GGlzJS;A5Wbf$;f*|kALJ`|E05vndo3T<@J{6ucrV|;kMa~g z$hYuOp24fy+Ovaq53~Ny;roZ07w}2(OZY6W;AeRa558IX4`0X|cql)>m+}@K$vgN; z-os=05x$lW@I*esH}VOd%1`i2KEreQ8D7YPTOj}C3wR|D;kA4T-^(L-BVWN=c?|F5 zYxw4VHtq?0E8oC-#Yy2u`4&FPGx$lqgP-L&eDN*T&H}!am++Omg0JN@d?Vk(xAF$Q zlON!PyoFct4!)Q7@Pqsa@8l!=D4*b?`~;umGklhx;b(bp%ga0u?q%b$fG^}BJd`it zOL+v3Zh#8orh%@I=0WZ{#UFm2cr&c?QqqJNQnX!*h87-`v~!xr7%gU%^Xx z4X@;Tcr9<>d-(z0$Xob9-oZQh2tUdv_$V*F_%h#Sc?l2HKNWl-ui>G54`0d~c&_v2 z0UoJ*3yxkH6%ye=_+Rp34(>Dc`{N@)X|6xA0z`!3X&cKFM?V zEHB_es{DtC@(LcwYxr8ehi~K!d@Db|ck&iq$UAr?@8Ns-5q^*l@J>F$kMapV%1`i< ze1@OpXZYei*8jokGT)Z+1$-qB;cNL4zL7`pt$YRF$zymSU&AYT0&nCScq>ogy?hHF zo3~KFTNf zNq&N#<=w3=^K+s5Dm{EDKf+h?0lt=x@Qr+eZ{;WWPCmm6`59iygD<_@uS&jv@8u!< zAYZ~ec?9p}EBH|!!$!&7+y&*UY1C$HeS zyoML@J-n1R@LGO=ALK2(lXvi=yoV3&x4q1(=KeM>9pSBffOql{p63=Py4_{`jXb#h zr6+%F_d}NOOumMfio1c&lf}v4OWpq|;pJCZJ8F2UI0twkKf?2`v^XQYQu}B4K_32( z%YIlZP6R)w-ZlIv-@=9`ObqeAvdlfv1_3Kfv3MSoy{Jvfk4t%wu@^IrewE*6`qyR=$R(`a55Hcp`7$ zvHSp!$bKGS@0hs%B#Ze||A+nbxO;pKlbPvObunD5~6=b4xA z{0q(Z@cE0(TlnMZvxBz} zFfZY~d=JkaXysdY@*wjgJe5!IOn!#v54Jer*I)KSc5BPe6}*0^l~3T=RpwjzBg}Jn z{uuKLK0MC6fd@}C@8HSLm=Eyq$>t|`^Rwo`oi6vce2V#!UYp18`Dx}Gc=#;y3?A>z z3wZck^BUeh-~0ftUu53H+n1P+@aU!HGdzBU`69XOhxAqE5j=Xe`5HdG);y)R<~w-y z7V{E5zs-CPkKSS4!n5BnKf-hQ1P^}8%AeuW@0f>ozU+rtzJdowE1$rl-!yIU(rfR(rlv3-hn}8CfYBT~_Me=z+XXa#| zjKp8<_m8mWd7U{k&pb2p%rkRl7ny#&#&eI6JgoC$CGXaF=s3xv8V^sBd`ROxsgnEV zjkZH*vgFwsuTGQP(D@0HFV=YOEXk`i9-S?DqsIL?l1CPd)+aJw%H0|_6z|cvP<*$> zqpG~9#(Na+*Lb($0~(JgKBVyu#l?3=>mOF!r}5B<^4vn2#lHUNUj08ZpAwBXwMf2LuDTPmNh#?6Oi`VNgpRDB~F52^gSH9ny7@6ouS z?7Um&VOefe<4vmEevSK7`T>piC_4{neDTS$ABu&e`>m;XlEy=SlKQ0S-08O(Z&dkY zYuw4FK;r`{y`gcDBlTRU@#vFMpT!!lK2@eSHD055mBu66WIi<-kDey;u{0j}mgJ2Z z_x)YwvtHw(P^J%Q+^6^!jT`UFd^$94<;eZRh{pYf%)eXX0~b!R{YF&d>o1b&2Qo~pT@ft_iKE&;<*~{SKQF}km3t9E>4homT26(RPx0dADAfr-)&RlO})|% z)f(TjOy*;0yhHIujrXsR>6O5zO#!ISG?0&dd&@n;I9t zlKEF@+^2Yr#s{`YJuQv*KPh>W#zU==uh+PfKBV!2Hkp2l#+~$GjpwRzdo>n3PRWNfE>!;F{L$_1l+A7mWHSXxyukogbWcmS(FML?? zA&nROLGq*vj^19`8h7%~)wt8X1sdP|N14B&alhgVHC_^y=@)CyYXDHSXw{`yZq29C}u!FVJ{YaYN%yJ_|MOjF%FPXFntJ zw=}+6@%0)vo|frD8h6UwG6wI^xRXz}&bQ0_cWd0qe?a4gN+73ZybY% z#^4c+N0lGw*0`f*&lr677(6-#AJX{l=cIj-N;EsGcpy#VPQUVN+|jc@cvPjY(zw%4nlzsDlFVnl#!LPpc}U}qo?A5T=o8lX!1FSn4vjncM>Ou})2(qQ z{~nDy_8b_4i;G6Li<3T0Q%}b?RrSrv-SL^%|$!m08rqVB! zpC0+OLDBzv87EsBH~u5lj<*{%UcE^2CXJV<^y@WlDjw3g%4dtlt5y22#x2D=G#)OI z`b0Dyxk&PEjW?-$dNiJUp-jJ9<2{N;HEw=irtjBySd}}Vai7w2NaMLGy|{dIyMz=^ z()i*BWP7D)Jp7+hAHT+P%Oua%c#le-t8uYdrZ3QVZn@-!#x2#33pE~9yhP)c%73xO zLl?{ZO^ugaB6*d@dsMxuH6B&GM&l91Escj2Z`625@g|K|E52Ui1FF6ujn_OV+bgW` z@D;LN9U5;^Jfd+^@otTa%Vj=2I#=m;Yuu;OM>XzOykFzil`{VUjfYkGA&vK_a>W%| ze^%*}G@h%tPvcFBr)k_$+^_L!#j`bDqIj;xO~nf|UiAmrUJEr|a*eb@iNg_pFxb({z55pq!JRO8hupMH%GC_4;j+^5nH zXyjt<7#{GYj`S)u)tn?Ys zc<8S({gB3cRQ}>eqx-X^c#_5=iu*L~-zD=;(|A~=_iMaK@obHU6wlRo_>XdY85*zN zC(B)^@e;*LH11b?vBu3_nUAS)>n+KvG+wRJS8Lo-yhh_@pUlV7xKHs$jW;Phn=~#| z`t=%bQsss;KA`v(jYky^YrIGC4vmKuk7zuic(=xr)bG9Q)_Cqa(hgCL`xNijxKMmR z;{$KYe1mp5%))o~!aPHNO5~IlihjZh0o#`x`YHHx;)uo~wAH#{G&n zX*{I(dX49PD)kR(+)#Xr#zRMB`mo0Rig#!{qVkDoJgj)P#!D3M(RfJl-5PIFJgRY1 z@qUe0D?XrcOYtF%``TrDB`wqX`8e5LK8=?oN}i^1OQrW~Jd!NaXKP%fN}j9naDwCo z8jq$)ZfLw`w&V*n?w>AsiN=j-k}uYHSk=qactq(_rSXtTU#;;b#cMQPJyDixX*@JR z@)?InIZx<5PZm85Z}y?h#X+AB@tPJ8(^?zC67#=BK}6=*!7 z+QrbgPw|Bs_pA0Q(ResX^=FMc?PY4*X|F1cJMC4iai_g%H14#QrE#ad8a3{;SCht_ z_FAuTr@cZNciL-<#+~*GYustC4vjnQ714P35$O+mG+tdK?Yvv#h9P-W<4r1kzs9YA zOh2IU$b89%bUs&d@srX0+5EobNg8kZFUfrx_kBwaSlKVAoD*dxH-lO!%)p&_Y zU!ZYAaYN%x{~^m=sPO@ne~HGUiZ9mqK&Nc4DxEKt`B!T^SMeH+hZVOpo?9jJY1DZ1 zO39lv-cu?0dX0yFBzZ{VxtB}6MdKw`NgmdCSn1QD@sQF#qVcHGr(5GqDt(W}EyZ_h zyjt<7#)abj8Xr*Q4rn~>G1*??r=$CG^vANkNg5wmCb>`JO)7nw#!FOszs8N9$b7Oj z9#ZLZHSYVFOkbe!NVVjK#=|Q8LX8ioa!WLBDg75~JgoFFHD0aKS83c-yjtTWiq~ko zN9Av6Jfe7`#v4_8t=D+yI%$WH#;dQDe2d0=elB@f=hsNyq4B87KcaJ$zFXr1iuY(d ze51^Nx5fvQo>7g5ZjtHxHE!K1`GCfS%4bOD*UR+cXQTUhM5RyCcvx|t#!D1W)3~8{ zw#Fk5$#QcwZr&z&fyN_Y$qkKL>m*;O@gBuXG+wRpU#xN8?J^%zynyiz#?NBh=#8g8kMS_$=QEzx7f*i?;{$u*{0EFj z_Qv@V#>Ja)ZZe+Dcm?CWeev{HF<#C1PZ)1x{AY}Z`{Vgs!+6r$asG40EyimYk1~D( zZ~n@g1&qsYs!DD!emu)(A>;C!T=HfKzvMNHOHVGj#kl;%9?2USS1T<0Mib-HWK#Rz^^B)89%B3i z# zjL&5}%(%gL2jfMIM;H$<-pzP1<2{VeV|+K`^BIpazJT$5#=pz>0OJc8A7cD_j0<&3HZZKZP_(H}nX1s*)OBi3w z_gE85f>-|6jp) z664o0?qmEq#?u(To^e0pH!_~h_%9gGW&9?_3mC6s++f^dd?DlYjF&Lp!1!XuS2Aug zzKZcG#&2f4n(@_)*D(G|#x2Gh8E<6#SBy6?zJ~GjjNi(5i1GiA@hyzs#(0?VUo+mp zcoX9h#)FJ^GrpGb9>&)(zMJve8ILl42jl&W|Az4a#@91G#Q2?z3vayt-^F+m<99Re zWBeY*(-{9B#{G={mho)HH!z;d_(sMH7;jVSE?kVaET;cn9OV8ILgjH^#de ze~s}T#{bUvZpL3{Jj(e0G2YMkKNufi{0+v37>_b8665{9m+>UV`xy5zzK8KN#`iMr zXZ%gZvl)Mj@m$9DF5Wgde(Djy^F5;Z(;K&KiFlUm8UXVhCwe9w`EJbDH#g{aXY8W1&L8d# zOmZ7BpIg}XY&j8f7L&(A4lwyR$Q4XZhTOp9DUe&3oDR8*$ul7LF*yse+Z8W=HsmZO z=RgiH`J0d{n0z|q1}4ve+`{CuAa^nOT*!S)4nTIh;}smqKn} z@+FX4n0zVZE+$_FxsS;eklmhm`By;BV)9jx15ExYmau<`3A^cOuh+n zACns(yS?%9S3}NX@-2`9Ouh|r1(Vl8Zea2qkXx917vwG`{}yr|lUpFW6XNCH4>^m; zZIA;@eh_j6lOKZIz~o0Dw=nrJ$X!f+5^^7tyCAz0bGfXT-}u3&O9;}smqKn} z@+FX4n0zVZE+$_FxsS;eklhpFLPRCf@=%z~tK?S1@@k1UmGTQ%KP-jC+#)d-~prIruMZDTb*}02$nhCNYw(=ID6dRB z?`ll!B>e{$J=yw^N8}tq`Kj)jIiy25tsTxb3N4q&%kYY;P1HZrZ**=HBJagMSF?%x zg6>0JLDyb!k$J8tO!Zd9pU=a6kM_J<@5Ds2u++QD}3@pO-&J6u#nF7%v~s8Cv<}D1SQgx63cU^IG{-KmWZ#){pM&qlr7X1v_oqvyNh8I>>H=X#$`di&$g`;M-6-_+07`@@zm&>Q)VDmR(R&5oCw zdh~K@PWF7Ry?QM(c@)s(G#r)e&A|7Kw}_9#5#@<&37k==KG7h%}>1KZO%Vl zmU#{OU;SA|A#}@MMrBMMI+J9|KhrBF<)P0`!CyJbxp<_0#di7=P#5F4p)<=-pM##% z97>NqSa`8p+MoKf3wA2PxObsmu8AU#(zwv)gs^s8d8((`m^gH%la9*V9J@-HAly( zJdj4_F;(V)v5@bsvfIecBTwalboEIp4~*YaUKh=g1eFKU$UIVH9&<$D?JhZyZ@d3s2j=^AUG)avu2YgX89`h5xkuZQ}y?NAx|k>CfSdB7?(u8nK;cXKh{iSeS$jrp$Y7|g@yyA{X_dR_qdYNS5>Gwn;2qt|+wAVH}R6o2b%FVCj4+U1~fX{tG~RKF&;H=~Ag4 z#de-i)RW2$CCYT=iKqw7(eOETneZ`AnNhDyv(d})g5SC0FWzPvHwA{b`Df!qbCz2) z{~}2=yS>&97i=2!q_jP;*VXL%r>nURw&lLH?kzUQkC(dmCy25v*tBoF$j`!0>bSlfk zf?Y=133a4)7qDyez;ON_k=HR(K7Wp#_CE`{3v2mH0(@!3O5L!}&i! zUQfgK*}77ndT%&?IhY?djQn%h9*2I|trG0b1D{{!+o8BUbz4v$H&7<^og&sg2HMBf zKb#*x{sy@JZCR#)G8ceZ9??FCcMgbgdjkIS;Gjpe8IhHxMd%}@TU>8=jn4A%_PEKn z$8c&XoPB3l=k%^Qwzbc5 zOj|vk*|YAr);*r2wm0uSzIER(MNAZl2Ts8_I^r>6D0@V2(v|*(i<4fqeY62vE^@V! zJrDfA-MSTX!qzNb@KB|v^$}d}a{Gd@W!~19#}gbvK1aSKVvm9!3iyJFuz8*Z=M2tt2i@c1KC5XD^j{=mEyyQeCI@NWx|iA({;YSME4X)!=sYmtnASbN6P>Xi zh}gnYkk@e{k8J+vc+qpHVpgyd*M;|{1b1PN2mc*YQ*%WiHh8Zq_{k|EhW}Qn>Bd9z zV&A|#*bCcGzFE-YmbWqQctu{XXW9t687zu9XB+aRbeW;VAf>INwBQ?2j?E(}HoqR+ z&v{hx72pxXdMn*VEGyC4k%>GIr?kEK$?$J1u%CTA{F@5&H_FR}`koNO8uF9jt)HA? z#Hbyp-(3s4MLm<-=1uc7Q(O55hwZkCV!pfsVyt=KhQp(hr-GjgZoRM4i)1^GYrqSrZtp4Xm%JJLba42>yr0^-rH}NH ziA=Y0rJMi#;dZK%_(ay}cc{~=cb-aM9yx%(`03&=+p6@S-l0+YVyS;83Nz^^nKiHstZ-963S6 z60p_?B^ohfoM?B_O;_x~r@hT4##IC{1lgT!+#{C(ZFcaf`ByByn{F zbA84{Ip+)Xy^Z6I*u&#RjGnzN(cS8Yj?VKx2d6x0kcX4cKR+EVGuitu*t;+itkRdzmmT|(T`iPJ zHcWwUTbC%>;WNY0;o$)hIX##Oz3qLQ1W`t7yW5Wu19#wW7xw73R!oKub+_&wFT!cX z2|?Rux@QJ0+=tnMwTSKQYb!N)J+7;!7$=ji<+mBFPr=?5u+2VxGX(%t89a=BA36H9WkP?!&e* zvKQITv8Rdj+hH^G&)5-W$3?1~GcbnVQvHr>Lw{680QSLuTNf_6N5sr(PmJb6hhdK0 z;n<1acb>-_-GtSI{R}aB&M-e;{{ZeUf&NsEleaSmThONnd1T&W#9XK|^(%q)aqiRl z8~aafX!jk|Ry0mr@L{wT|5X$|1n~v=^$l+Efv~I{yAs9A7^`>P;hyrl_GA$oJafZc zyT-qA*Co`q+?dDQqP@971hL@QO8V2BwIWdjE09+Rx@6Rf){VzO7w8*0PQ>1Dr|j>? zI)m1O)Xvlf&bm;bAJQDM!6ll9U}w5d^4-Xb`Yh!iL3wHqt&P?jDVR@j{tdn~rELYq zU=z~9Pi$R>GC99RaSQ(WeCST`GwDkE6Dy;xRL4G60_FciYo1rUtoA9|$TlrBMg{rr z)ZZP14VuSy-BpBq9>zF)7&Z$f7PV3xpE@F1-+=9wjyFDj81;Q>3fcf;nEHXV59S@r z?WAiR(q;L|K1M7_J|z}{ZWmCVtUfhdV+-6UG;;NL=!sV}6U9^?nL zTaU~n|M~2eBT$0!>BqBV`=g~H+as1}BL9^sGJ?XI8eE0vs85j2R36Pw)Q_f+-QhoJ ze93u9w0(rOp>`NTyF5tc;5iz1_oW*j8|X6!VgEji0g5d);@+ZFMMEpxt`~}gYfT+& zwqkAbU47{HyWA;jPKQ0WqF&7yU-Wzt#@H@*+6z(C;ZfwR<_LSdao+xn(?Qr0ArzV4J4 zC|#yVSyPYp?LylJM9K?YXnQNsXr(zNgg%%5>G0MF(xrK(zTih6i=a*os$Hl|svED9 z1v_AVjz!Q{E%e1#&=)4dchf!)UE6u0p8I+Iv9?M9i=w~S{R{2$U6f^_Oqy$! z;+lMovxYK}j@pp=0{X}f$B&Rrq&=}bk0c1%Xx;*Y=E6ySZmA`?)@tf zTQtC40od1qtqb9!D0Vi)++Apcb}Ea?p?s(u%9qNq-V&{pzmvBYc~iZq{9j>DjAEE$ z(1y-jOJhu6FHerMSM4~Z0p(G8#I6IGmOEI7b*LJ1$)m@mOz+s1KIwhSm9T|N7@gQF z#`@fd9T`_NMD0MIc3dE4j;#AA{SS~nLtqa@rQ`XLz7g1hbhhI=`b6xt4WD+L5}6iU zgZ^TnEL%3xg1;o$j%U(>tDI|NTCjfPIz4!ka~(+w-iT|bOgWdia;U9oKFd>e*@k^@ z%nyas*Z5wK3-xQb$yi7HX815UkD))RefA{+b5ELa!+&7EtP-(eWvwfva+1g!H{H7^ zaiU0m6LHvm)|6l!Vyjr8UrY=gnz_+LlvG2%z?3pdVewab`Yo{+t{Bhc%I@oOFej4si7loKF%EsNZbZ6qN z=FYlQcHfWt*!RGis%+fjKi--6`>LIFY3zPB?w=|O#j&{m`ZYTfU##9)H=W(b-rfT2 zkC@oc6NhVd*7?QNR98{!T}1V>y3GOu`%eqbh7Kqrg!<3I{S#r6x>;DScP}kS=)SyQ zz99-4^a=g4?D~vJLIwZChjjqJ+R++BJ41W>`=h&SKWrBH7_=slNw0 z&Z`!M#n<4kMg;xnubHq#u_f%fX2KR!2inUuYLHK@D6B)f(>N*47D2lH6#a4!d^}x$ zjO*eg$!UHl_Q`9C!-~`7HN_moetAu6iQ-&&P5!jFKwi`Sda)s|DPAdFD6jkIx

    n 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%0DtC0qST`N=v~cMfS0|Iak{&q> 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∈$(W&g32>oWHm#ZhM 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≠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

    V!msxt>WyacC0q%= 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

  1. -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%0D}Bgm2OxIS)d4hffpx%1J%m(e~iq%zpF+ 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

    @WLa7cy65Xk=bG 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

      i9zsv$-JzWH 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 zno�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

      %Rv^TPZJ}%pu^Wvs?$ZM?rKY-Z^dt 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

      !gv~kZHtdYU%6^;r&tcWD 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

      ^II#-YB7hR)wWSdIHVaDmYw?vo}na#`~$ylK*ON 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 diff --git a/packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 b/packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 deleted file mode 100644 index 3ec61003faaa33d0476d61ed33d61764c06520d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1996824 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

      n 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%0DtC0qST`N=v~cMfS0|Iak{&q> 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∈$(W&g32>oWHm#ZhM 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≠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

      V!msxt>WyacC0q%= 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

    1. -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 Un|g1%-l-*)|LfjC@_UE=7wrOpng9R* diff --git a/packages/emulators/standalone/drastic-sa/package.mk b/packages/emulators/standalone/drastic-sa/package.mk index 90920edbc..ccc69b4e0 100644 --- a/packages/emulators/standalone/drastic-sa/package.mk +++ b/packages/emulators/standalone/drastic-sa/package.mk @@ -38,14 +38,9 @@ post_install() { else LIBEGL="" fi + HOTKEY="" ;; - RK3566|RK3326) - LIBEGL="" - HOTKEY="" - patchelf --replace-needed libSDL2-2.0.so.0 /usr/config/drastic/config/libSDL2-2.0.so.0 \ - ${INSTALL}/usr/config/drastic/drastic - ;; RK3588) LIBEGL="" HOTKEY="export HOTKEY="guide"" From 3685146d9d5e4e8765d7237b75e7dc7347c7484f Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 16 May 2024 22:05:26 +0200 Subject: [PATCH 184/184] Revert "Clean drastic on rk3326/rk3566 when updating" This reverts commit f7bdef905d7ab822cead5eb8836dcbb5db0fe6b1. --- packages/rocknix/sources/post-update | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/rocknix/sources/post-update b/packages/rocknix/sources/post-update index f53ea01a6..b74210d8f 100644 --- a/packages/rocknix/sources/post-update +++ b/packages/rocknix/sources/post-update @@ -91,9 +91,3 @@ fi # Move PSP saves to new directories /usr/bin/psp_save_mover.sh - -# 2024-05-15: clean drastic on rk3326, rk3566 -if echo ${HW_DEVICE} | grep -e "RK3326\|RK3566"; then - echo "Cleaning drastic" - rm -rf /storage/.config/drastic -fi

    2. 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 $o`EdL>WHH23oaG8Mq*DTsX!t81 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�j~Rj;9%S5;U4uvAwqUsY3kb*-ibs#Voi!By4K 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%0A^l<BV~F}+=qEa; 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 Un|g1%-l-*)|LfjC@_UE=7wrOpng9R* literal 0 HcmV?d00001 diff --git a/packages/emulators/standalone/drastic-sa/package.mk b/packages/emulators/standalone/drastic-sa/package.mk index ccc69b4e0..90920edbc 100644 --- a/packages/emulators/standalone/drastic-sa/package.mk +++ b/packages/emulators/standalone/drastic-sa/package.mk @@ -38,9 +38,14 @@ post_install() { else LIBEGL="" fi - HOTKEY="" ;; + RK3566|RK3326) + LIBEGL="" + HOTKEY="" + patchelf --replace-needed libSDL2-2.0.so.0 /usr/config/drastic/config/libSDL2-2.0.so.0 \ + ${INSTALL}/usr/config/drastic/drastic + ;; RK3588) LIBEGL="" HOTKEY="export HOTKEY="guide"" From 7e7a8a050ec82c03252aebac0181b70292934956 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 15 May 2024 10:18:01 +0200 Subject: [PATCH 174/184] Fix typ in SDL2 package --- packages/graphics/SDL2/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index 3727761c1..95de7649c 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -11,7 +11,7 @@ PKG_DEPENDS_TARGET="toolchain alsa-lib systemd dbus pulseaudio libdrm SDL2:host" PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware." PKG_DEPENDS_HOST="toolchain:host distutilscross:host" -if [ ! "${OPENGL}" = "no" ]; then +if [ ! "${OPENGL_SUPPORT}" = "no" ]; then PKG_DEPENDS_TARGET+=" ${OPENGL} glu" PKG_CMAKE_OPTS_TARGET+=" -DSDL_OPENGL=ON \ -DVIDEO_OPENGL=ON \ From 11071be6d5a468f9b6a78311f4a2fb7e64167db9 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Wed, 15 May 2024 13:04:22 +0000 Subject: [PATCH 175/184] Severl fixes, bump SDL2, bump Mesa --- .../apps/gamecontrollerdb/config/gamecontrollerdb.txt | 2 +- .../aethersx2-sa/config/RK3588/aethersx2/inis/PCSX2.ini | 8 ++++---- packages/graphics/SDL2/package.mk | 2 +- packages/graphics/mesa/package.mk | 6 +++--- packages/kernel/drivers/rocknix-joypad/package.mk | 1 + .../patches/RK3588/000-dont-build-singleadc.patch | 8 ++++++++ .../patches/S922X/000-dont-build-singleadc.patch | 8 ++++++++ projects/Allwinner/devices/H700/options | 2 +- projects/Amlogic/devices/S922X/options | 2 +- projects/PC/devices/AMD64/options | 2 +- projects/Rockchip/devices/RK3326/options | 2 +- projects/Rockchip/devices/RK3399/options | 2 +- projects/Rockchip/devices/RK3566-X55/options | 2 +- projects/Rockchip/devices/RK3566/options | 2 +- projects/Rockchip/devices/RK3588/options | 2 +- 15 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch create mode 100644 packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch diff --git a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt index 29f08e7d7..c8d69dfb2 100644 --- a/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt +++ b/packages/apps/gamecontrollerdb/config/gamecontrollerdb.txt @@ -9,7 +9,7 @@ 190014b3010000009178000000050000,r33s_joypad,platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b8,start:b9,dpleft:b12,dpdown:b11,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7, 1900e5914b4800007711000077010000,RGB20S Gamepad,platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b12,start:b13,dpleft:b10,dpdown:b9,dpright:b11,dpup:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b14,rightstick:b15,leftx:a0,lefty:a1,rightx:a2,righty:a3, 1900e7444b4800000111000034020000,rg552_joypad,platform:Linux,x:b2,a:b1,b:b0,y:b3,back:b8,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3, -03001a3447616d65466f726365204100,GameForce ACE Gamepad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:-a1,-leftx:-a0,+leftx:+a0,-lefty:+a1,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux, +03001a3447616d65466f726365204100,GameForce ACE Gamepad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:-a0,-leftx:-a1,+leftx:+a1,-lefty:+a0,leftshoulder:b5,leftstick:b10,lefttrigger:-a2,dpright:b15,+righty:+a4,-rightx:-a3,+rightx:+a3,-righty:-a4,rightshoulder:b6,rightstick:b11,righttrigger:-a5,back:b7,guide:b9,start:b8,dpup:b12,x:b3,y:b4,platform:Linux, 1900c3ea010000000100000001010000,odroidgo3_joypad,a:b1,b:b0,dpdown:b13,dpleft:b14,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,dpright:b15,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b5,rightstick:b11,righttrigger:b7,back:b8,start:b9,dpup:b12,x:b2,y:b3,platform:Linux, 03001354474f2d556c74726120476100,GO-Ultra Gamepad,platform:Linux,a:b1,b:b0,dpdown:b15,dpleft:b16,guide:b11,+lefty:+a1,-leftx:-a0,+leftx:+a0,-lefty:-a1,leftshoulder:b5,leftstick:b12,lefttrigger:b7,dpright:b17,+righty:+a3,-rightx:-a2,+rightx:+a2,-righty:-a3,rightshoulder:b6,rightstick:b13,righttrigger:b8,back:b9,start:b10,dpup:b14,x:b3,y:b4, 1900d632010000000100000000010000,rg_arc_joypad,platform:Linux,x:b4,a:b0,b:b1,y:b3,back:b10,start:b11,dpleft:b14,dpdown:b13,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,rightstick:b2,leftstick:b5,platform:Linux, diff --git a/packages/emulators/standalone/aethersx2-sa/config/RK3588/aethersx2/inis/PCSX2.ini b/packages/emulators/standalone/aethersx2-sa/config/RK3588/aethersx2/inis/PCSX2.ini index 690ab382a..cb6eef04c 100644 --- a/packages/emulators/standalone/aethersx2-sa/config/RK3588/aethersx2/inis/PCSX2.ini +++ b/packages/emulators/standalone/aethersx2-sa/config/RK3588/aethersx2/inis/PCSX2.ini @@ -355,10 +355,10 @@ R1 = SDL-0/RightShoulder R2 = SDL-0/+RightTrigger L3 = SDL-0/LeftStick R3 = SDL-0/RightStick -LUp = SDL-0/+LeftX -LRight = SDL-0/-LeftY -LDown = SDL-0/-LeftX -LLeft = SDL-0/+LeftY +LUp = SDL-0/-LeftY +LRight = SDL-0/+LeftX +LDown = SDL-0/+LeftY +LLeft = SDL-0/-LeftX RUp = SDL-0/-RightY RRight = SDL-0/+RightX RDown = SDL-0/+RightY diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index 3727761c1..c1842c233 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -3,7 +3,7 @@ # Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS) PKG_NAME="SDL2" -PKG_VERSION="2.30.2" +PKG_VERSION="2.30.3" PKG_LICENSE="GPL" PKG_SITE="https://www.libsdl.org/" PKG_URL="https://www.libsdl.org/release/SDL2-${PKG_VERSION}.tar.gz" diff --git a/packages/graphics/mesa/package.mk b/packages/graphics/mesa/package.mk index de8437f86..1ed962aa5 100644 --- a/packages/graphics/mesa/package.mk +++ b/packages/graphics/mesa/package.mk @@ -17,19 +17,19 @@ case ${DEVICE} in ;; RK3*|S922X) if [ "${DEVICE}" = "S922X" -a "${USE_MALI}" != "no" ]; then - PKG_VERSION="24.0.5" + PKG_VERSION="24.0.7" PKG_SITE="http://www.mesa3d.org/" PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" else #Using upstream dev for panfrost - PKG_VERSION="0b518681938c9eeb9133972a66a91fc4ff6cf2a1" + PKG_VERSION="aa9244c8f6bfa3fb33cf233104b00fc44fc9459f" PKG_SITE="https://gitlab.freedesktop.org/mesa/mesa" PKG_URL="${PKG_SITE}.git" PKG_PATCH_DIRS+=" panfrost" fi ;; *) - PKG_VERSION="24.0.6" + PKG_VERSION="24.0.7" PKG_SITE="http://www.mesa3d.org/" PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz" ;; diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 5b29f1b0d..4f5b480e1 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -11,6 +11,7 @@ PKG_DEPENDS_TARGET="toolchain linux" PKG_NEED_UNPACK="${LINUX_DEPENDS}" PKG_TOOLCHAIN="manual" PKG_IS_KERNEL_PKG="yes" +PKG_PATCH_DIRS="${DEVICE}" pre_make_target() { unset LDFLAGS diff --git a/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch b/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch new file mode 100644 index 000000000..6dc45d858 --- /dev/null +++ b/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch @@ -0,0 +1,8 @@ +diff -rupN rocknix-joypad.orig/Makefile rocknix-joypad/Makefile +--- rocknix-joypad.orig/Makefile 2024-05-14 14:42:30.961192626 +0000 ++++ rocknix-joypad/Makefile 2024-05-14 15:04:27.647507817 +0000 +@@ -1,4 +1,3 @@ + EXTRA_CFLAGS += -w + + obj-m += rocknix-joypad.o +-obj-m += rocknix-singleadc-joypad.o diff --git a/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch b/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch new file mode 100644 index 000000000..6dc45d858 --- /dev/null +++ b/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch @@ -0,0 +1,8 @@ +diff -rupN rocknix-joypad.orig/Makefile rocknix-joypad/Makefile +--- rocknix-joypad.orig/Makefile 2024-05-14 14:42:30.961192626 +0000 ++++ rocknix-joypad/Makefile 2024-05-14 15:04:27.647507817 +0000 +@@ -1,4 +1,3 @@ + EXTRA_CFLAGS += -w + + obj-m += rocknix-joypad.o +-obj-m += rocknix-singleadc-joypad.o diff --git a/projects/Allwinner/devices/H700/options b/projects/Allwinner/devices/H700/options index 9779e1e92..7a29e6fad 100644 --- a/projects/Allwinner/devices/H700/options +++ b/projects/Allwinner/devices/H700/options @@ -57,7 +57,7 @@ # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Amlogic/devices/S922X/options b/projects/Amlogic/devices/S922X/options index b8885a422..6f3eca6e4 100644 --- a/projects/Amlogic/devices/S922X/options +++ b/projects/Amlogic/devices/S922X/options @@ -70,7 +70,7 @@ VULKAN_SUPPORT="no" fi - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / x11 / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/PC/devices/AMD64/options b/projects/PC/devices/AMD64/options index 45209da7d..55f8d038c 100644 --- a/projects/PC/devices/AMD64/options +++ b/projects/PC/devices/AMD64/options @@ -31,7 +31,7 @@ # VULKAN_SUPPORT VULKAN_SUPPORT="yes" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / x11 / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Rockchip/devices/RK3326/options b/projects/Rockchip/devices/RK3326/options index d11ac65d2..26b4045e0 100644 --- a/projects/Rockchip/devices/RK3326/options +++ b/projects/Rockchip/devices/RK3326/options @@ -64,7 +64,7 @@ # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Rockchip/devices/RK3399/options b/projects/Rockchip/devices/RK3399/options index edd7c6769..00dd5ca72 100644 --- a/projects/Rockchip/devices/RK3399/options +++ b/projects/Rockchip/devices/RK3399/options @@ -59,7 +59,7 @@ # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Rockchip/devices/RK3566-X55/options b/projects/Rockchip/devices/RK3566-X55/options index 1d9181ecd..686630888 100644 --- a/projects/Rockchip/devices/RK3566-X55/options +++ b/projects/Rockchip/devices/RK3566-X55/options @@ -61,7 +61,7 @@ # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Rockchip/devices/RK3566/options b/projects/Rockchip/devices/RK3566/options index 49bb54d5d..2c3a9870c 100644 --- a/projects/Rockchip/devices/RK3566/options +++ b/projects/Rockchip/devices/RK3566/options @@ -64,7 +64,7 @@ # For maximum cross compatbility PREFER_GLES="yes" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) diff --git a/projects/Rockchip/devices/RK3588/options b/projects/Rockchip/devices/RK3588/options index 7f2b25a7a..6c5ce7edb 100755 --- a/projects/Rockchip/devices/RK3588/options +++ b/projects/Rockchip/devices/RK3588/options @@ -62,7 +62,7 @@ # OpenGL-ES implementation to use (mesa / no) OPENGLES="mesa" - # Displayserver to use (weston / x11 / no) + # Displayserver to use (wl / no) DISPLAYSERVER="wl" # Windowmanager to use (weston / swaywm-env / no) From f7bdef905d7ab822cead5eb8836dcbb5db0fe6b1 Mon Sep 17 00:00:00 2001 From: sydarn Date: Wed, 15 May 2024 16:37:17 +0200 Subject: [PATCH 176/184] Clean drastic on rk3326/rk3566 when updating --- packages/rocknix/sources/post-update | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/rocknix/sources/post-update b/packages/rocknix/sources/post-update index b74210d8f..f53ea01a6 100644 --- a/packages/rocknix/sources/post-update +++ b/packages/rocknix/sources/post-update @@ -91,3 +91,9 @@ fi # Move PSP saves to new directories /usr/bin/psp_save_mover.sh + +# 2024-05-15: clean drastic on rk3326, rk3566 +if echo ${HW_DEVICE} | grep -e "RK3326\|RK3566"; then + echo "Cleaning drastic" + rm -rf /storage/.config/drastic +fi From d633fd7eafa4bf2c26873b12430f4924df1ac940 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Wed, 15 May 2024 22:14:33 +0100 Subject: [PATCH 177/184] rocknix-joypad: update package --- .../kernel/drivers/rocknix-joypad/package.mk | 3 +- .../RK3588/000-dont-build-singleadc.patch | 8 -- .../S922X/000-dont-build-singleadc.patch | 8 -- ...edirect-keycode-316-to-rocknix-joypa.patch | 87 +++++++------------ 4 files changed, 33 insertions(+), 73 deletions(-) delete mode 100644 packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch delete mode 100644 packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 4f5b480e1..f10b7328b 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="b7b874fdb37fdc88a7e89b6e2ccc93eb9b27c5d2" +PKG_VERSION="761790b34915480c64d19451a77bce860830cb52" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" @@ -11,7 +11,6 @@ PKG_DEPENDS_TARGET="toolchain linux" PKG_NEED_UNPACK="${LINUX_DEPENDS}" PKG_TOOLCHAIN="manual" PKG_IS_KERNEL_PKG="yes" -PKG_PATCH_DIRS="${DEVICE}" pre_make_target() { unset LDFLAGS diff --git a/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch b/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch deleted file mode 100644 index 6dc45d858..000000000 --- a/packages/kernel/drivers/rocknix-joypad/patches/RK3588/000-dont-build-singleadc.patch +++ /dev/null @@ -1,8 +0,0 @@ -diff -rupN rocknix-joypad.orig/Makefile rocknix-joypad/Makefile ---- rocknix-joypad.orig/Makefile 2024-05-14 14:42:30.961192626 +0000 -+++ rocknix-joypad/Makefile 2024-05-14 15:04:27.647507817 +0000 -@@ -1,4 +1,3 @@ - EXTRA_CFLAGS += -w - - obj-m += rocknix-joypad.o --obj-m += rocknix-singleadc-joypad.o diff --git a/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch b/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch deleted file mode 100644 index 6dc45d858..000000000 --- a/packages/kernel/drivers/rocknix-joypad/patches/S922X/000-dont-build-singleadc.patch +++ /dev/null @@ -1,8 +0,0 @@ -diff -rupN rocknix-joypad.orig/Makefile rocknix-joypad/Makefile ---- rocknix-joypad.orig/Makefile 2024-05-14 14:42:30.961192626 +0000 -+++ rocknix-joypad/Makefile 2024-05-14 15:04:27.647507817 +0000 -@@ -1,4 +1,3 @@ - EXTRA_CFLAGS += -w - - obj-m += rocknix-joypad.o --obj-m += rocknix-singleadc-joypad.o diff --git a/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch index 2691688de..9c5a2958f 100644 --- a/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch +++ b/packages/kernel/linux/patches/mainline/0004-input-adc-keys-redirect-keycode-316-to-rocknix-joypa.patch @@ -1,27 +1,46 @@ -From df39cfef26162e24609213021be1010c627be394 Mon Sep 17 00:00:00 2001 +From a810ab7012cfe8b4703a3eb0b32a2fdd4aaa26d2 Mon Sep 17 00:00:00 2001 From: spycat88 Date: Tue, 7 May 2024 20:15:51 +0100 Subject: [PATCH] input: adc-keys: redirect keycode 316 to rocknix-joypad +Co-authored-by: Paul Reioux --- - drivers/input/keyboard/adc-keys.c | 21 +++++++++++++++++---- - 1 file changed, 17 insertions(+), 4 deletions(-) + drivers/input/keyboard/adc-keys.c | 39 +++++++++++++++++++++++++++---- + 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c -index bf72ab8df817..aaee32a17627 100644 +index bf72ab8df817..ca51b1b15850 100644 --- a/drivers/input/keyboard/adc-keys.c +++ b/drivers/input/keyboard/adc-keys.c -@@ -16,6 +16,9 @@ - #include - #include +@@ -29,6 +29,27 @@ struct adc_keys_state { + const struct adc_keys_button *map; + }; -+extern void rk_send_key_f_key_up(void); -+extern void rk_send_key_f_key_down(void); ++struct input_dev * joypad_input_g; ++EXPORT_SYMBOL(joypad_input_g); ++ ++void rk_send_key_f_key_up(void) ++{ ++ if (!joypad_input_g) ++ return; ++ ++ input_report_key(joypad_input_g, BTN_MODE, 1); ++ input_sync(joypad_input_g); ++} ++ ++void rk_send_key_f_key_down(void) ++{ ++ if (!joypad_input_g) ++ return; ++ ++ input_report_key(joypad_input_g, BTN_MODE, 0); ++ input_sync(joypad_input_g); ++} + - struct adc_keys_button { - u32 voltage; - u32 keycode; -@@ -53,11 +56,21 @@ static void adc_keys_poll(struct input_dev *input) + static void adc_keys_poll(struct input_dev *input) + { + struct adc_keys_state *st = input_get_drvdata(input); +@@ -53,11 +74,21 @@ static void adc_keys_poll(struct input_dev *input) if (abs(st->keyup_voltage - value) < closest) keycode = 0; @@ -50,45 +69,3 @@ index bf72ab8df817..aaee32a17627 100644 -- 2.34.1 -diff --git a/drivers/input/keyboard/adc-keys.c b/drivers/input/keyboard/adc-keys.c -index aaee32a17627..ca51b1b15850 100644 ---- a/drivers/input/keyboard/adc-keys.c -+++ b/drivers/input/keyboard/adc-keys.c -@@ -16,9 +16,6 @@ - #include - #include - --extern void rk_send_key_f_key_up(void); --extern void rk_send_key_f_key_down(void); -- - struct adc_keys_button { - u32 voltage; - u32 keycode; -@@ -32,6 +29,27 @@ struct adc_keys_state { - const struct adc_keys_button *map; - }; - -+struct input_dev * joypad_input_g; -+EXPORT_SYMBOL(joypad_input_g); -+ -+void rk_send_key_f_key_up(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 1); -+ input_sync(joypad_input_g); -+} -+ -+void rk_send_key_f_key_down(void) -+{ -+ if (!joypad_input_g) -+ return; -+ -+ input_report_key(joypad_input_g, BTN_MODE, 0); -+ input_sync(joypad_input_g); -+} -+ - static void adc_keys_poll(struct input_dev *input) - { - struct adc_keys_state *st = input_get_drvdata(input); From bc3f1591231dfda9a9a857cda1647fbba63d028e Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Thu, 16 May 2024 02:27:48 +0300 Subject: [PATCH 178/184] SDL2: build GLES-only variant to use with libmali --- .../graphics/SDL2/SDL2_glesonly/package.mk | 17 +++++++++++++ packages/graphics/SDL2/SDL2_glesonly/patches | 1 + packages/graphics/SDL2/package.mk | 3 +++ packages/graphics/libmali/package.mk | 4 +-- .../graphics/libmali/sources/bin/gpudriver | 25 ++++++++----------- 5 files changed, 32 insertions(+), 18 deletions(-) create mode 100644 packages/graphics/SDL2/SDL2_glesonly/package.mk create mode 120000 packages/graphics/SDL2/SDL2_glesonly/patches diff --git a/packages/graphics/SDL2/SDL2_glesonly/package.mk b/packages/graphics/SDL2/SDL2_glesonly/package.mk new file mode 100644 index 000000000..be5d3e4ad --- /dev/null +++ b/packages/graphics/SDL2/SDL2_glesonly/package.mk @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) + +# Inherit nearly everything +OPENGL_SUPPORT=no +. $(get_pkg_directory SDL2)/package.mk + +PKG_NAME="SDL2_glesonly" + +makeinstall_target() { + mkdir -p "${INSTALL}/usr/lib/glesonly" + cp -a libSDL2-2.0.so.0.* "${INSTALL}/usr/lib/glesonly/" +} + +post_makeinstall_target() { + : +} diff --git a/packages/graphics/SDL2/SDL2_glesonly/patches b/packages/graphics/SDL2/SDL2_glesonly/patches new file mode 120000 index 000000000..b263e782b --- /dev/null +++ b/packages/graphics/SDL2/SDL2_glesonly/patches @@ -0,0 +1 @@ +../patches \ No newline at end of file diff --git a/packages/graphics/SDL2/package.mk b/packages/graphics/SDL2/package.mk index e0e697dc7..148774f81 100644 --- a/packages/graphics/SDL2/package.mk +++ b/packages/graphics/SDL2/package.mk @@ -16,6 +16,9 @@ if [ ! "${OPENGL_SUPPORT}" = "no" ]; then PKG_CMAKE_OPTS_TARGET+=" -DSDL_OPENGL=ON \ -DVIDEO_OPENGL=ON \ -DVIDEO_KMSDRM=OFF" + if [ "${PREFER_GLES}" = "yes" ] && [ "${OPENGLES_SUPPORT}" = "yes" ]; then + PKG_DEPENDS_TARGET+=" SDL2_glesonly " + fi else PKG_CMAKE_OPTS_TARGET+=" -DSDL_OPENGL=OFF \ -DVIDEO_OPENGL=OFF \ diff --git a/packages/graphics/libmali/package.mk b/packages/graphics/libmali/package.mk index 0dcd49fc0..ad2fdad1c 100644 --- a/packages/graphics/libmali/package.mk +++ b/packages/graphics/libmali/package.mk @@ -51,9 +51,7 @@ pre_make_target() { post_makeinstall_target() { rm -rf "${SYSROOT_PREFIX}/usr/include" # all needed headers are installed by glvnd, mesa and wayland - rm -rf "${INSTALL}/etc/ld.so.conf.d" "${SYSROOT_PREFIX}/etc/ld.so.conf.d" - mkdir "${INSTALL}/etc/ld.so.conf.d" - echo "include /storage/.cache/ld.so.libmali.conf" > "${INSTALL}/etc/ld.so.conf.d/__priority__libmali.conf" + rm -rf "${INSTALL}/etc/ld.so.conf.d" "${SYSROOT_PREFIX}/etc/ld.so.conf.d" # upstream installs ld.so config and we don't need it for lib in "${INSTALL}/usr/lib*/mali/*.so"; do echo ${lib} diff --git a/packages/graphics/libmali/sources/bin/gpudriver b/packages/graphics/libmali/sources/bin/gpudriver index 9a3308c37..0783ed299 100755 --- a/packages/graphics/libmali/sources/bin/gpudriver +++ b/packages/graphics/libmali/sources/bin/gpudriver @@ -14,32 +14,29 @@ get_current_driver() { fi } -check_ld_cache() { - DRIVER_CONFIGURE_FOR=$1 - LDDRIVER="panfrost" - ldconfig -p | grep libEGL.so.1 | grep -q mali && LDDRIVER="libmali" - if [ ${DRIVER_CONFIGURE_FOR} != ${LDDRIVER} ]; then - ldconfig - fi -} # When loading a driver, do two things: # * ensure needed driver is loaded and other is not -# * ensure ldconfig is configured for a proper driver +# * ensure graphics related libs are overridden (or not) load_driver() { DRIVER_TO_LOAD=$1 case ${DRIVER_TO_LOAD} in "libmali") modprobe -r panfrost modprobe mali_kbase - echo -e "/usr/lib/mali\n/usr/lib32/mali" > ${LDCONFFILE} - check_ld_cache ${DRIVER_TO_LOAD} + grep -q /usr/lib/libEGL.so /proc/mounts || find /usr/{lib,lib32}/mali -type f -exec bash -c 'lib={}; mount --bind $lib ${lib/\/mali\//\/}' ';' + # Portmaster is not ready for SDL in glesonly subdir, so override libs the dirty way + if [ -d /usr/lib/glesonly ]; then + grep -q /usr/lib/libSDL2-2.0.so /proc/mounts || find /usr/{lib,lib32}/glesonly -type f -exec bash -c 'lib={}; mount --bind $lib ${lib/\/glesonly\//\/}' ';' + fi ;; "panfrost") modprobe -r mali_kbase modprobe panfrost - rm -f ${LDCONFFILE} - check_ld_cache ${DRIVER_TO_LOAD} + grep -q /usr/lib/libEGL.so /proc/mounts && find /usr/{lib,lib32}/mali -type f -exec bash -c 'lib={}; umount ${lib/\/mali\//\/}' ';' + if [ -d /usr/lib/glesonly ]; then + grep -q /usr/lib/libSDL2-2.0.so /proc/mounts && find /usr/{lib,lib32}/glesonly -type f -exec bash -c 'lib={}; umount ${lib/\/glesonly\//\/}' ';' + fi ;; *) exit 3 @@ -47,8 +44,6 @@ load_driver() { esac } -# Determine configured driver -LDCONFFILE=$(cat /etc/ld.so.conf.d/*.conf | grep mali | sed -n 's|include ||p' | head -1) case "$1" in "--options") From b8c4768a335121f90f191a0f7a17b949980f4188 Mon Sep 17 00:00:00 2001 From: Danil Zagoskin Date: Thu, 16 May 2024 02:28:26 +0300 Subject: [PATCH 179/184] box86: fix install to 64-bit image --- packages/compat/box86/package.mk | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/compat/box86/package.mk b/packages/compat/box86/package.mk index 76945d261..63373fa07 100644 --- a/packages/compat/box86/package.mk +++ b/packages/compat/box86/package.mk @@ -3,7 +3,6 @@ PKG_NAME="box86" PKG_VERSION="f5f1e1413d167eb0c4e2aa9a65ab251ce1e142c4" -PKG_ARCH="arm" PKG_LICENSE="MIT" PKG_SITE="https://github.com/ptitSeb/box86" PKG_URL="${PKG_SITE}.git" @@ -16,6 +15,13 @@ PKG_CMAKE_OPTS_TARGET+=" -DCMAKE_BUILD_TYPE=Release \ case ${TARGET_ARCH} in aarch64) + PKG_DEPENDS_TARGET="" + unpack() { + true + } + configure_target() { + true + } make_target() { true } @@ -66,3 +72,9 @@ makeinstall_target() { mkdir -p ${INSTALL}/etc/binfmt.d cp -f ${PKG_DIR}/config/box86.conf ${INSTALL}/etc/binfmt.d/box86.conf } + +if [ ! "${ENABLE_32BIT}" == "true" ]; then + makeinstall_target() { + true + } +fi From 6ead60998c7b0a3339b3b3a398a194313ee5242e Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 16 May 2024 14:01:34 +0000 Subject: [PATCH 180/184] RK3399: build panfrost as built in, module appears to break sleep --- projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf index a705e9ae8..4d3adf696 100644 --- a/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf +++ b/projects/Rockchip/devices/RK3399/linux/linux.aarch64.conf @@ -3375,7 +3375,7 @@ CONFIG_DRM_DW_MIPI_DSI=y # CONFIG_TINYDRM_ST7735R is not set # CONFIG_DRM_PL111 is not set # CONFIG_DRM_LIMA is not set -CONFIG_DRM_PANFROST=m +CONFIG_DRM_PANFROST=y # CONFIG_DRM_TIDSS is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set From 301278fcbefc704d9fba877e2720783272fb54e3 Mon Sep 17 00:00:00 2001 From: brooksytech <1673861+brooksytech@users.noreply.github.com> Date: Thu, 16 May 2024 15:08:42 +0000 Subject: [PATCH 181/184] Bump rocknix joypad --- packages/kernel/drivers/rocknix-joypad/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kernel/drivers/rocknix-joypad/package.mk b/packages/kernel/drivers/rocknix-joypad/package.mk index 4f5b480e1..22b95b9f7 100644 --- a/packages/kernel/drivers/rocknix-joypad/package.mk +++ b/packages/kernel/drivers/rocknix-joypad/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="rocknix-joypad" -PKG_VERSION="b7b874fdb37fdc88a7e89b6e2ccc93eb9b27c5d2" +PKG_VERSION="72072b2079094fa7cce5aba651826e9c6ae90de0" PKG_LICENSE="GPL" PKG_SITE="https://github.com/ROCKNIX/rocknix-joypad" PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz" From eb54cf8f5c8b40d74afe3f4b20fb8da4850b09e8 Mon Sep 17 00:00:00 2001 From: Paul Reioux Date: Thu, 16 May 2024 12:43:46 -0700 Subject: [PATCH 182/184] mainline kernel: fix bad battery reading from RK817 PMIC chips this is a copy from macromorgan's upstream patch --- ...ix-bad-PMIC-read-for-current-voltage.patch | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 packages/kernel/linux/patches/mainline/0005-rk817-charger-fix-bad-PMIC-read-for-current-voltage.patch diff --git a/packages/kernel/linux/patches/mainline/0005-rk817-charger-fix-bad-PMIC-read-for-current-voltage.patch b/packages/kernel/linux/patches/mainline/0005-rk817-charger-fix-bad-PMIC-read-for-current-voltage.patch new file mode 100644 index 000000000..e0f06816f --- /dev/null +++ b/packages/kernel/linux/patches/mainline/0005-rk817-charger-fix-bad-PMIC-read-for-current-voltage.patch @@ -0,0 +1,76 @@ +diff --git a/drivers/power/supply/rk817_charger.c b/drivers/power/supply/rk817_charger.c +index 7ca91739c6cc..658683d625db 100644 +--- a/drivers/power/supply/rk817_charger.c ++++ b/drivers/power/supply/rk817_charger.c +@@ -240,9 +240,29 @@ static int rk817_record_battery_nvram_values(struct rk817_charger *charger) + static int rk817_bat_calib_cap(struct rk817_charger *charger) + { + struct rk808 *rk808 = charger->rk808; +- int tmp, charge_now, charge_now_adc, volt_avg; ++ int charge_now, charge_now_adc; + u8 bulk_reg[4]; + ++ /* ++ * When resuming from suspend, sometimes the voltage value would be ++ * incorrect. BSP would simply wait two seconds and try reading the ++ * values again. Do not do any sort of calibration activity when the ++ * reported value is incorrect. The next scheduled update of battery ++ * vaules should then return valid data and the driver can continue. ++ * Use 2.7v as the sanity value because per the datasheet the PMIC ++ * can in no way support a battery voltage lower than this. BSP only ++ * checked for values too low, but I'm adding in a check for values ++ * too high just in case; again the PMIC can in no way support ++ * voltages above 4.45v, so this seems like a good value. ++ */ ++ if ((charger->volt_avg_uv < 2700000) || (charger->volt_avg_uv > 4450000)) { ++ dev_warn(charger->dev, ++ "Battery voltage of %d is invalid, ignoring.\n", ++ charger->volt_avg_uv); ++ return -EINVAL; ++ } ++ ++ + /* Calibrate the soc and fcc on a fully charged battery */ + + if (charger->charge_status == CHARGE_FINISH && (!charger->soc_cal)) { +@@ -312,11 +332,7 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger) + * counter is negative add that to our fcc (but not to exceed our + * design capacity). + */ +- regmap_bulk_read(charger->rk808->regmap, RK817_GAS_GAUGE_BAT_VOL_H, +- bulk_reg, 2); +- tmp = get_unaligned_be16(bulk_reg); +- volt_avg = (charger->voltage_k * tmp) + 1000 * charger->voltage_b; +- if (volt_avg <= charger->bat_voltage_min_design_uv && ++ if (charger->volt_avg_uv <= charger->bat_voltage_min_design_uv && + charger->soc_cal) { + regmap_bulk_read(rk808->regmap, RK817_GAS_GAUGE_Q_PRES_H3, + bulk_reg, 4); +@@ -338,7 +354,7 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger) + /* + * Set the SOC to 0 if we are below the minimum system voltage. + */ +- if (volt_avg <= charger->bat_voltage_min_design_uv) { ++ if (charger->volt_avg_uv <= charger->bat_voltage_min_design_uv) { + charger->soc = 0; + charge_now_adc = CHARGE_TO_ADC(0, charger->res_div); + put_unaligned_be32(charge_now_adc, bulk_reg); +@@ -346,7 +362,8 @@ static int rk817_bat_calib_cap(struct rk817_charger *charger) + RK817_GAS_GAUGE_Q_INIT_H3, bulk_reg, 4); + dev_warn(charger->dev, + "Battery voltage %d below minimum voltage %d\n", +- volt_avg, charger->bat_voltage_min_design_uv); ++ charger->volt_avg_uv, ++ charger->bat_voltage_min_design_uv); + } + + rk817_record_battery_nvram_values(charger); +@@ -715,7 +732,7 @@ static int rk817_read_battery_nvram_values(struct rk817_charger *charger) + * correct it. + */ + if ((charger->fcc_mah < 500) || +- ((charger->fcc_mah * 1000) > charger->bat_charge_full_design_uah)) { ++ (charger->fcc_mah > (charger->bat_charge_full_design_uah / 1000))) { + dev_info(charger->dev, + "Invalid NVRAM max charge, setting to %u uAH\n", + charger->bat_charge_full_design_uah); From 68bbc39311f8b25dcb5f7204e685c1c807ede324 Mon Sep 17 00:00:00 2001 From: sydarn Date: Thu, 16 May 2024 22:05:10 +0200 Subject: [PATCH 183/184] Revert "fix drastic for rk3326 and rk3566" This reverts commit cc4803e5f9eace4a8c39bebad6ba00a04b8e03ca. --- .../drastic-sa/config/RK3326/libSDL2-2.0.so.0 | Bin 1996824 -> 0 bytes .../drastic-sa/config/RK3566/libSDL2-2.0.so.0 | Bin 1996824 -> 0 bytes .../standalone/drastic-sa/package.mk | 7 +------ 3 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 delete mode 100644 packages/emulators/standalone/drastic-sa/config/RK3566/libSDL2-2.0.so.0 diff --git a/packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 b/packages/emulators/standalone/drastic-sa/config/RK3326/libSDL2-2.0.so.0 deleted file mode 100644 index 7711fa8c0eacd3fd5d936e922686b08da5712d37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1996824 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%0A6{{uR5OV*LYMjbv*=egGC)Z10ZZvUbqw{1G@ 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

  2. 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 $o`EdL>WHH23oaG8Mq*DTsX!t81 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�j~Rj;9%S5;U4uvAwqUsY3kb*-ibs#Voi!By4K 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%0A^l<BV~F}+=qEa; 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