Merge pull request #2653 from brooksytech/552_6.7

RK3399: update Kernel to 6.7 & update U-boot to mainline w/ Arm Trusted Firmware
This commit is contained in:
Brooksytech 2024-01-09 21:30:25 -08:00 committed by GitHub
commit a23e28636e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 1199 additions and 11369 deletions

32
licenses/pyelftools.txt Normal file
View file

@ -0,0 +1,32 @@
pyelftools is in the public domain (see below if you need more details).
pyelftools uses the construct library for structured parsing of a binary
stream. construct is packaged in pyelftools/construct - see its LICENSE
file for the license.
-------------------------------------------------------------------------------
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>

View file

@ -4,7 +4,7 @@
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
PKG_NAME="binutils-arm-none-eabi"
PKG_VERSION=""
PKG_VERSION="$(get_pkg_version binutils)"
PKG_LICENSE="GPL"
PKG_URL=""
PKG_DEPENDS_HOST="toolchain:host"
@ -31,7 +31,7 @@ PKG_CONFIGURE_OPTS_HOST="--target=arm-none-eabi \
unpack() {
mkdir -p ${PKG_BUILD}
tar --strip-components=1 -xf ${SOURCES}/binutils/binutils-${PKG_VERSION}.tar.xz -C ${PKG_BUILD}
tar --strip-components=1 -xf sources/binutils/binutils-${PKG_VERSION}.tar.xz -C ${PKG_BUILD}
}
pre_configure_host() {

View file

@ -0,0 +1,23 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023-present Fewtarius
PKG_NAME="pyelftools"
PKG_VERSION="b5840ce" # 0.30
PKG_LICENSE="public domain"
PKG_SITE="https://github.com/eliben/pyelftools"
PKG_URL="${PKG_SITE}.git"
PKG_DEPENDS_HOST="toolchain Python3:host"
PKG_LONGDESC="A pure-Python library for parsing and analyzing ELF files"
PKG_TOOLCHAIN="manual"
make_host() {
python3 setup.py build
}
makeinstall_host() {
exec_thread_safe python3 setup.py install --prefix=${TOOLCHAIN} --skip-build
# Avoid using full path to python3 that may exceed 128 byte limit.
# Instead use PATH as we know our toolchain is first.
sed -e '1 s/^#!.*$/#!\/usr\/bin\/env python3/' -i ${TOOLCHAIN}/bin/meson
}

View file

@ -0,0 +1,31 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2018-present Team LibreELEC
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
PKG_NAME="atf"
PKG_VERSION="2.10.0"
PKG_SHA256="696b8e53923aac4474532da7dd681f0bd044b329732facd65aeabea3e61adca9"
PKG_ARCH="arm aarch64"
PKG_LICENSE="BSD-3c"
PKG_SITE="https://github.com/ARM-software/arm-trusted-firmware"
PKG_URL="https://github.com/ARM-software/arm-trusted-firmware/archive/v${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain"
PKG_LONGDESC="ARM Trusted Firmware is a reference implementation of secure world software, including a Secure Monitor executing at Exception Level 3 and various Arm interface standards."
PKG_TOOLCHAIN="manual"
PKG_PATCH_DIRS+="${DEVICE}"
[ -n "${KERNEL_TOOLCHAIN}" ] && PKG_DEPENDS_TARGET+=" gcc-${KERNEL_TOOLCHAIN}:host"
if [ "${ATF_PLATFORM}" = "rk3399" ]; then
PKG_DEPENDS_TARGET+=" gcc-arm-none-eabi:host"
export M0_CROSS_COMPILE="${TOOLCHAIN}/bin/arm-none-eabi-"
fi
make_target() {
CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" CFLAGS="" make PLAT=${ATF_PLATFORM} bl31
}
makeinstall_target() {
mkdir -p ${INSTALL}/usr/share/bootloader
cp -a build/${ATF_PLATFORM}/release/${ATF_BL31_BINARY} ${INSTALL}/usr/share/bootloader
}

View file

@ -0,0 +1,13 @@
diff --git a/plat/rockchip/rk3399/rk3399_def.h b/plat/rockchip/rk3399/rk3399_def.h
index ba83242ebe..8d6ecfbe66 100644
--- a/plat/rockchip/rk3399/rk3399_def.h
+++ b/plat/rockchip/rk3399/rk3399_def.h
@@ -17,7 +17,7 @@
/**************************************************************************
* UART related constants
**************************************************************************/
-#define RK3399_BAUDRATE 115200
+#define RK3399_BAUDRATE 1500000
#define RK3399_UART_CLOCK 24000000
/******************************************************************************

View file

@ -27,12 +27,17 @@ generate_rkspi_loader() {
dd if=${PKG_BUILD}/u-boot.itb of=$RKSPI_LOADER seek=16384 conv=notrunc
}
if [ -n "${PKG_DATAFILE}" -a -n "${PKG_LOADER}" ]; then
echo "loader: Make idbloader.img from ${PKG_DATAFILE}:${PKG_LOADER}..."
case "${PKG_SOC}" in
rk35*|rk3399)
rk35*)
tools/mkimage -n ${PKG_SOC} -T rksd -d ${PKG_DATAFILE}:${PKG_LOADER} -C bzip2 idbloader.img
;;
rk3399)
${PKG_RKBIN}/tools/mkimage -n "${PKG_SOC}" -T rksd -d ${PKG_DATAFILE}:${PKG_LOADER} idbloader.img.rk || exit 1
;;
*)
tools/mkimage -n ${PKG_SOC} -T rksd -d "${PKG_DATAFILE}" -C bzip2 idbloader.img
cat "${PKG_LOADER}" >> idbloader.img
@ -40,8 +45,12 @@ if [ -n "${PKG_DATAFILE}" -a -n "${PKG_LOADER}" ]; then
esac
fi
echo "uboot: copy idbloader.img image to ${INSTALL}/usr/share/bootloader..."
cp -av idbloader.img ${INSTALL}/usr/share/bootloader
case "${PKG_SOC}" in
rk35*|px30)
echo "uboot: copy idbloader.img image to ${INSTALL}/usr/share/bootloader..."
cp -av idbloader.img ${INSTALL}/usr/share/bootloader
;;
esac
if [ ! -n "${PKG_LOAD_ADDR}" ]; then
PKG_LOAD_ADDR="0x00200000"
@ -53,6 +62,18 @@ case "${PKG_SOC}" in
cp -av u-boot.itb ${INSTALL}/usr/share/bootloader/u-boot.itb
generate_rkspi_loader
;;
rk3399)
PKG_ATF_INI="${PKG_RKBIN}"/RKTRUST/"${DEVICE}"TRUST.ini
echo "uboot: building ${UBOOT_FIT_IMAGE}..."
${PKG_RKBIN}/tools/loaderimage --pack --uboot u-boot-dtb.bin uboot.img.rk "${PKG_LOAD_ADDR}" || exit 1
dd if=idbloader.img.rk of="${UBOOT_FIT_IMAGE}" seek=0 conv=fsync,notrunc > /dev/null 2>&1 || exit 1
dd if=uboot.img.rk of="${UBOOT_FIT_IMAGE}" seek=16320 conv=fsync,notrunc > /dev/null 2>&1 || exit 1
"${PKG_RKBIN}"/tools/trust_merger --ignore-bl32 --prepath "${PKG_RKBIN}"/ "${PKG_ATF_INI}" || exit 1
dd if=trust.img of="${UBOOT_FIT_IMAGE}" seek=24512 conv=fsync,notrunc > /dev/null 2>&1 || exit 1
echo "uboot: copy ${UBOOT_FIT_IMAGE} to ${INSTALL}/usr/share/bootloader..."
cp -av ${UBOOT_FIT_IMAGE} ${INSTALL}/usr/share/bootloader
;;
*)
echo "uboot: build loader image uboot.img at ${PKG_LOAD_ADDR}..."
${PKG_UBOOT}/tools/loaderimage --pack --uboot u-boot-dtb.bin uboot.img ${PKG_LOAD_ADDR} ||:
@ -61,7 +82,7 @@ case "${PKG_SOC}" in
esac
case "${DEVICE}" in
RK33*)
RK3326)
if [ -n "${PKG_BL31}" ]; then
echo "trust: create trust.ini..."
cat >trust.ini <<EOF

View file

@ -22,17 +22,23 @@ fi
case "${PKG_SOC}" in
rk35*)
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/u-boot.itb" ]; then
echo "image: burn uboot.itb to image... (${PKG_SOC})"
dd if="${RELEASE_DIR}/3rdparty/bootloader/u-boot.itb" of="${DISK}" bs=512 seek=16384 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
fi
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/trust.img" ]; then
echo "image: burn trust.img to image..."
dd if="${RELEASE_DIR}/3rdparty/bootloader/trust.img" of="${DISK}" bs=512 seek=24576 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
elif [ -f "${RELEASE_DIR}/3rdparty/bootloader/resource.img" ]; then
echo "image: burn resource.img to image..."
dd if="${RELEASE_DIR}/3rdparty/bootloader/resource.img" of="${DISK}" bs=512 seek=24576 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
fi
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/u-boot.itb" ]; then
echo "image: burn uboot.itb to image... (${PKG_SOC})"
dd if="${RELEASE_DIR}/3rdparty/bootloader/u-boot.itb" of="${DISK}" bs=512 seek=16384 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
fi
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/trust.img" ]; then
echo "image: burn trust.img to image..."
dd if="${RELEASE_DIR}/3rdparty/bootloader/trust.img" of="${DISK}" bs=512 seek=24576 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
elif [ -f "${RELEASE_DIR}/3rdparty/bootloader/resource.img" ]; then
echo "image: burn resource.img to image..."
dd if="${RELEASE_DIR}/3rdparty/bootloader/resource.img" of="${DISK}" bs=512 seek=24576 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
fi
;;
rk3399)
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/rk3399-uboot.bin" ]; then
echo "image: burn u-boot.bin to image..."
dd if="${RELEASE_DIR}/3rdparty/bootloader/rk3399-uboot.bin" of="${DISK}" bs=512 seek=64 conv=sync,noerror,notrunc >"${SAVE_ERROR}" 2>&1 || show_error
fi
;;
*)
if [ -f "${RELEASE_DIR}/3rdparty/bootloader/uboot.img" ]; then

View file

@ -18,6 +18,11 @@ if [ -n "${UBOOT_CONFIG}" ]; then
cp -a ${KERNEL_DIR}/resource.img ${RELEASE_DIR}/3rdparty/bootloader
fi
;;
rk3399)
if [ -f ${BOOTLOADER_DIR}/rk3399-uboot.bin ]; then
cp -a ${BOOTLOADER_DIR}/rk3399-uboot.bin ${RELEASE_DIR}/3rdparty/bootloader
fi
;;
*)
if [ -f ${BOOTLOADER_DIR}/uboot.img ]; then
cp -a ${BOOTLOADER_DIR}/uboot.img ${RELEASE_DIR}/3rdparty/bootloader

View file

@ -105,6 +105,11 @@ if [ -f $SYSTEM_ROOT/usr/share/bootloader/uboot.img ]; then
dd if=$SYSTEM_ROOT/usr/share/bootloader/uboot.img of=$BOOT_DISK bs=512 seek=16384 conv=fsync &>/dev/null
echo "done"
fi
if [ -f $SYSTEM_ROOT/usr/share/bootloader/rk3399-uboot.bin ]; then
echo -n "Updating uboot.bin... "
dd if=$SYSTEM_ROOT/usr/share/bootloader/rk3399-uboot.bin of=$BOOT_DISK bs=512 seek=64 conv=fsync &>/dev/null
echo "done"
fi
if [ -f $SYSTEM_ROOT/usr/share/bootloader/u-boot.itb ]; then
echo -n "Updating uboot.itb... "
dd if=$SYSTEM_ROOT/usr/share/bootloader/u-boot.itb of=$BOOT_DISK bs=512 seek=16384 conv=fsync &>/dev/null

File diff suppressed because it is too large Load diff

View file

@ -32,11 +32,13 @@
PARTITION_TABLE="msdos"
DEVICE_DTB=("rk3399-anbernic-rg552")
UBOOT_DTB="${DEVICE_DTB[0]}"
UBOOT_FIT_IMAGE="rk3399-uboot.bin"
UBOOT_CONFIG="evb-rk3399_defconfig"
PKG_SOC="rk3399"
ATF_PLATFORM="${PKG_SOC}"
PKG_DATAFILE="$PKG_RKBIN/bin/rk33/rk3399_ddr_933MHz_v1.30.bin"
PKG_LOADER="$PKG_RKBIN/bin/rk33/rk3399_miniloader_v1.26.bin"
PKG_BL31="$PKG_RKBIN/bin/rk33/rk3399_bl31_v1.36.elf"
ATF_BL31_BINARY="bl31/bl31.elf"
BOOT_INI=false
EXT_LINUX_CONF=true

View file

@ -35,7 +35,11 @@ case ${DEVICE} in
GET_HANDLER_SUPPORT="git"
PKG_GIT_CLONE_BRANCH="main"
;;
RK33*)
RK3399)
PKG_VERSION="6.7"
PKG_URL="https://www.kernel.org/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz"
;;
RK3326)
PKG_VERSION="6.1.70"
PKG_URL="https://www.kernel.org/pub/linux/kernel/v6.x/${PKG_NAME}-${PKG_VERSION}.tar.xz"
;;
@ -182,6 +186,7 @@ make_target() {
NO_GTK2=1 \
NO_LIBNUMA=1 \
NO_LIBAUDIT=1 \
NO_LIBTRACEEVENT=1 \
NO_LZMA=1 \
NO_SDT=1 \
CROSS_COMPILE="${TARGET_PREFIX}" \

View file

@ -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-02 16:20:12.766155041 +0000
+++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-01-02 21:22:52.154473211 +0000
@@ -21,6 +21,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-li
--- linux.orig/arch/arm64/boot/dts/rockchip/Makefile 2024-01-09 14:07:11.858381650 +0000
+++ linux/arch/arm64/boot/dts/rockchip/Makefile 2024-01-09 18:09:58.589953944 +0000
@@ -29,6 +29,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,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-01-02 22:48:46.115043990 +0000
@@ -0,0 +1,1329 @@
+++ linux/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts 2024-01-09 18:09:58.589953944 +0000
@@ -0,0 +1,1336 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd.
@ -265,7 +265,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+ };
+
+ };
+
+
+ es8316-sound {
+ compatible = "simple-audio-card";
+ pinctrl-names = "default";
@ -310,7 +310,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+ hdmi-sound {
+ status = "okay";
+ };
+
+
+ fan: pwm-fan {
+ compatible = "pwm-fan";
+ pwms = <&pwm1 0 10000 1>;
@ -408,6 +408,17 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+ vin-supply = <&vcc12v_dcin>;
+ };
+
+ /* switched by pmic_sleep */
+ vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v8_s3";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ vin-supply = <&vcc_1v8>;
+ };
+
+ vcc3v3_sys: vcc3v3-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3_sys";
@ -617,10 +628,6 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&saradc {
+ status = "okay";
+};
+
+&sdio0 {
+ clock-frequency = <150000000>;
+ clock-freq-min-max = <100000 150000000>;
@ -684,7 +691,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+};
+
+&saradc {
+ vref-supply = <&vcc_1v8>;
+ vref-supply = <&vcca1v8_s3>;
+ status = "okay";
+};
+
@ -1196,7 +1203,7 @@ diff -rupN linux.orig/arch/arm64/boot/dts/rockchip/rk3399-anbernic-rg552.dts lin
+
+ btns {
+ btn_pins: btn-pins {
+ rockchip,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>,

View file

@ -1,6 +1,52 @@
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
@@ -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
@@ -398,6 +383,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 2023-12-15 19:18:57.320911751 +0000
+++ linux/drivers/input/Kconfig 2023-12-15 19:20:05.987107578 +0000
--- 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
@@ -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.
@ -22,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 2023-12-15 19:18:57.320911751 +0000
+++ linux/drivers/input/Makefile 2023-12-15 19:20:05.987107578 +0000
--- 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
@@ -10,6 +10,7 @@ input-core-y := input.o input-compat.o i
input-core-y += touchscreen.o
@ -34,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 2023-12-15 19:20:05.987107578 +0000
+++ linux/drivers/input/input-polldev.c 2024-01-08 18:43:42.593020626 +0000
@@ -0,0 +1,362 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
@ -399,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 2023-12-15 19:18:57.324911879 +0000
+++ linux/drivers/input/joystick/Kconfig 2023-12-15 19:20:05.987107578 +0000
--- 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
@@ -393,6 +393,12 @@ config JOYSTICK_FSIA6B
To compile this driver as a module, choose M here: the
module will be called fsia6b.
@ -415,8 +461,8 @@ 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 2023-12-15 19:18:57.324911879 +0000
+++ linux/drivers/input/joystick/Makefile 2023-12-15 19:20:05.987107578 +0000
--- 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
obj-$(CONFIG_JOYSTICK_QWIIC) += qwiic-joystick.o
obj-$(CONFIG_JOYSTICK_SENSEHAT) += sensehat-joystick.o
@ -427,8 +473,8 @@ diff -rupN linux.orig/drivers/input/joystick/Makefile linux/drivers/input/joysti
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 2023-12-15 19:36:26.739762439 +0000
@@ -0,0 +1,1416 @@
+++ linux/drivers/input/joystick/singleadcjoy.c 2024-01-08 18:43:54.081267482 +0000
@@ -0,0 +1,1448 @@
+/*----------------------------------------------------------------------------*/
+
+/*
@ -1162,35 +1208,67 @@ diff -rupN linux.orig/drivers/input/joystick/singleadcjoy.c linux/drivers/input/
+{
+ struct joypad *joypad = poll_dev->private;
+ int nbtn;
+ int mag;
+
+ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) {
+ struct bt_adc *adc = &joypad->adcs[nbtn];
+ /* 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];
+
+ adc->value = joypad_adc_read(joypad->amux, adc);
+ if (!adc->value) {
+ /* 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;
+ }
+ adc->value = adc->value - adc->cal;
+ adcx->value = adcx->value - adcx->cal;
+
+ /* 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;
+
+ /* Joystick Deadzone check */
+ mag = int_sqrt((adcx->value * adcx->value) + (adcy->value * adcy->value));
+ if (joypad->bt_adc_deadzone) {
+ if (abs(adc->value) < joypad->bt_adc_deadzone)
+ adc->value = 0;
+ 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 (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);
+ 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);
+
+ adc->value = adc->value > adc->max ? adc->max : adc->value;
+ adc->value = adc->value < adc->min ? adc->min : adc->value;
+ /* 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,
+ adc->report_type,
+ adc->invert ? adc->value * (-1) : adc->value);
+ 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);
+}
@ -1847,7 +1925,7 @@ diff -rupN linux.orig/drivers/input/joystick/singleadcjoy.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 2023-12-15 19:20:05.987107578 +0000
+++ linux/include/linux/input-polldev.h 2024-01-08 18:43:42.593020626 +0000
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _INPUT_POLLDEV_H
@ -1907,3 +1985,65 @@ diff -rupN linux.orig/include/linux/input-polldev.h linux/include/linux/input-po
+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-01-08 18:42:51.555924323 +0000
+++ linux/include/linux/of_gpio.h 2024-01-08 19:08:52.942972824 +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 <linux/errno.h>
-/* 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 */

View file

@ -1,100 +0,0 @@
From c731e0b23383c8b451932331f22122afe04348bd Mon Sep 17 00:00:00 2001
From: Johnny on Flame <johnnyonflame@hotmail.com>
Date: Fri, 3 Nov 2023 04:53:33 +0000
Subject: [PATCH] Port radial thresholding from @littleguy77.
---
drivers/input/joystick/singleadcjoy.c | 64 ++++++++++++++++++++-------
1 file changed, 48 insertions(+), 16 deletions(-)
diff --git a/drivers/input/joystick/singleadcjoy.c b/drivers/input/joystick/singleadcjoy.c
index f0a24a24a..455e11121 100644
--- a/drivers/input/joystick/singleadcjoy.c
+++ b/drivers/input/joystick/singleadcjoy.c
@@ -580,35 +580,67 @@ static void joypad_adc_check(struct input_polled_dev *poll_dev)
{
struct joypad *joypad = poll_dev->private;
int nbtn;
+ int mag;
- for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) {
- struct bt_adc *adc = &joypad->adcs[nbtn];
+ /* 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];
- adc->value = joypad_adc_read(joypad->amux, adc);
- if (!adc->value) {
+ /* 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;
+
+ /* 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;
}
- adc->value = adc->value - adc->cal;
+ 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 (abs(adc->value) < joypad->bt_adc_deadzone)
- adc->value = 0;
+ 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 (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;
+ 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,
- adc->report_type,
- adc->invert ? adc->value * (-1) : adc->value);
+ 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);
}
--
2.34.1

View file

@ -0,0 +1,403 @@
diff -rupN linux.orig/drivers/iio/adc/rockchip_saradc.c linux/drivers/iio/adc/rockchip_saradc.c
--- linux.orig/drivers/iio/adc/rockchip_saradc.c 2024-01-09 14:07:12.430393829 +0000
+++ linux/drivers/iio/adc/rockchip_saradc.c 2024-01-09 16:30:43.561613614 +0000
@@ -4,13 +4,13 @@
* Copyright (C) 2014 ROCKCHIP, Inc.
*/
-#include <linux/bitfield.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/of.h>
+#include <linux/of_device.h>
#include <linux/clk.h>
#include <linux/completion.h>
#include <linux/delay.h>
@@ -38,31 +38,10 @@
#define SARADC_TIMEOUT msecs_to_jiffies(100)
#define SARADC_MAX_CHANNELS 8
-/* v2 registers */
-#define SARADC2_CONV_CON 0x000
-#define SARADC_T_PD_SOC 0x004
-#define SARADC_T_DAS_SOC 0x00c
-#define SARADC2_END_INT_EN 0x104
-#define SARADC2_ST_CON 0x108
-#define SARADC2_STATUS 0x10c
-#define SARADC2_END_INT_ST 0x110
-#define SARADC2_DATA_BASE 0x120
-
-#define SARADC2_EN_END_INT BIT(0)
-#define SARADC2_START BIT(4)
-#define SARADC2_SINGLE_MODE BIT(5)
-
-#define SARADC2_CONV_CHANNELS GENMASK(15, 0)
-
-struct rockchip_saradc;
-
struct rockchip_saradc_data {
const struct iio_chan_spec *channels;
int num_channels;
unsigned long clk_rate;
- void (*start)(struct rockchip_saradc *info, int chn);
- int (*read)(struct rockchip_saradc *info);
- void (*power_down)(struct rockchip_saradc *info);
};
struct rockchip_saradc {
@@ -81,81 +60,27 @@ struct rockchip_saradc {
struct notifier_block nb;
};
-static void rockchip_saradc_reset_controller(struct reset_control *reset);
-
-static void rockchip_saradc_start_v1(struct rockchip_saradc *info, int chn)
-{
- /* 8 clock periods as delay between power up and start cmd */
- writel_relaxed(8, info->regs + SARADC_DLY_PU_SOC);
- /* Select the channel to be used and trigger conversion */
- writel(SARADC_CTRL_POWER_CTRL | (chn & SARADC_CTRL_CHN_MASK) |
- SARADC_CTRL_IRQ_ENABLE, info->regs + SARADC_CTRL);
-}
-
-static void rockchip_saradc_start_v2(struct rockchip_saradc *info, int chn)
-{
- int val;
-
- if (info->reset)
- rockchip_saradc_reset_controller(info->reset);
-
- writel_relaxed(0xc, info->regs + SARADC_T_DAS_SOC);
- writel_relaxed(0x20, info->regs + SARADC_T_PD_SOC);
- val = FIELD_PREP(SARADC2_EN_END_INT, 1);
- val |= val << 16;
- writel_relaxed(val, info->regs + SARADC2_END_INT_EN);
- val = FIELD_PREP(SARADC2_START, 1) |
- FIELD_PREP(SARADC2_SINGLE_MODE, 1) |
- FIELD_PREP(SARADC2_CONV_CHANNELS, chn);
- val |= val << 16;
- writel(val, info->regs + SARADC2_CONV_CON);
-}
-
-static void rockchip_saradc_start(struct rockchip_saradc *info, int chn)
-{
- info->data->start(info, chn);
-}
-
-static int rockchip_saradc_read_v1(struct rockchip_saradc *info)
-{
- return readl_relaxed(info->regs + SARADC_DATA);
-}
-
-static int rockchip_saradc_read_v2(struct rockchip_saradc *info)
-{
- int offset;
-
- /* Clear irq */
- writel_relaxed(0x1, info->regs + SARADC2_END_INT_ST);
-
- offset = SARADC2_DATA_BASE + info->last_chan->channel * 0x4;
-
- return readl_relaxed(info->regs + offset);
-}
-
-static int rockchip_saradc_read(struct rockchip_saradc *info)
-{
- return info->data->read(info);
-}
-
-static void rockchip_saradc_power_down_v1(struct rockchip_saradc *info)
-{
- writel_relaxed(0, info->regs + SARADC_CTRL);
-}
-
static void rockchip_saradc_power_down(struct rockchip_saradc *info)
{
- if (info->data->power_down)
- info->data->power_down(info);
+ /* Clear irq & power down adc */
+ writel_relaxed(0, info->regs + SARADC_CTRL);
}
static int rockchip_saradc_conversion(struct rockchip_saradc *info,
- struct iio_chan_spec const *chan)
+ struct iio_chan_spec const *chan)
{
reinit_completion(&info->completion);
+ /* 8 clock periods as delay between power up and start cmd */
+ writel_relaxed(8, info->regs + SARADC_DLY_PU_SOC);
+
info->last_chan = chan;
- rockchip_saradc_start(info, chan->channel);
+
+ /* Select the channel to be used and trigger conversion */
+ writel(SARADC_CTRL_POWER_CTRL
+ | (chan->channel & SARADC_CTRL_CHN_MASK)
+ | SARADC_CTRL_IRQ_ENABLE,
+ info->regs + SARADC_CTRL);
if (!wait_for_completion_timeout(&info->completion, SARADC_TIMEOUT))
return -ETIMEDOUT;
@@ -198,7 +123,7 @@ static irqreturn_t rockchip_saradc_isr(i
struct rockchip_saradc *info = dev_id;
/* Read value */
- info->last_val = rockchip_saradc_read(info);
+ info->last_val = readl_relaxed(info->regs + SARADC_DATA);
info->last_val &= GENMASK(info->last_chan->scan_type.realbits - 1, 0);
rockchip_saradc_power_down(info);
@@ -238,9 +163,6 @@ static const struct rockchip_saradc_data
.channels = rockchip_saradc_iio_channels,
.num_channels = ARRAY_SIZE(rockchip_saradc_iio_channels),
.clk_rate = 1000000,
- .start = rockchip_saradc_start_v1,
- .read = rockchip_saradc_read_v1,
- .power_down = rockchip_saradc_power_down_v1,
};
static const struct iio_chan_spec rockchip_rk3066_tsadc_iio_channels[] = {
@@ -252,9 +174,6 @@ static const struct rockchip_saradc_data
.channels = rockchip_rk3066_tsadc_iio_channels,
.num_channels = ARRAY_SIZE(rockchip_rk3066_tsadc_iio_channels),
.clk_rate = 50000,
- .start = rockchip_saradc_start_v1,
- .read = rockchip_saradc_read_v1,
- .power_down = rockchip_saradc_power_down_v1,
};
static const struct iio_chan_spec rockchip_rk3399_saradc_iio_channels[] = {
@@ -270,9 +189,6 @@ static const struct rockchip_saradc_data
.channels = rockchip_rk3399_saradc_iio_channels,
.num_channels = ARRAY_SIZE(rockchip_rk3399_saradc_iio_channels),
.clk_rate = 1000000,
- .start = rockchip_saradc_start_v1,
- .read = rockchip_saradc_read_v1,
- .power_down = rockchip_saradc_power_down_v1,
};
static const struct iio_chan_spec rockchip_rk3568_saradc_iio_channels[] = {
@@ -290,28 +206,6 @@ static const struct rockchip_saradc_data
.channels = rockchip_rk3568_saradc_iio_channels,
.num_channels = ARRAY_SIZE(rockchip_rk3568_saradc_iio_channels),
.clk_rate = 1000000,
- .start = rockchip_saradc_start_v1,
- .read = rockchip_saradc_read_v1,
- .power_down = rockchip_saradc_power_down_v1,
-};
-
-static const struct iio_chan_spec rockchip_rk3588_saradc_iio_channels[] = {
- SARADC_CHANNEL(0, "adc0", 12),
- SARADC_CHANNEL(1, "adc1", 12),
- SARADC_CHANNEL(2, "adc2", 12),
- SARADC_CHANNEL(3, "adc3", 12),
- SARADC_CHANNEL(4, "adc4", 12),
- SARADC_CHANNEL(5, "adc5", 12),
- SARADC_CHANNEL(6, "adc6", 12),
- SARADC_CHANNEL(7, "adc7", 12),
-};
-
-static const struct rockchip_saradc_data rk3588_saradc_data = {
- .channels = rockchip_rk3588_saradc_iio_channels,
- .num_channels = ARRAY_SIZE(rockchip_rk3588_saradc_iio_channels),
- .clk_rate = 1000000,
- .start = rockchip_saradc_start_v2,
- .read = rockchip_saradc_read_v2,
};
static const struct of_device_id rockchip_saradc_match[] = {
@@ -327,9 +221,6 @@ static const struct of_device_id rockchi
}, {
.compatible = "rockchip,rk3568-saradc",
.data = &rk3568_saradc_data,
- }, {
- .compatible = "rockchip,rk3588-saradc",
- .data = &rk3588_saradc_data,
},
{},
};
@@ -345,6 +236,20 @@ static void rockchip_saradc_reset_contro
reset_control_deassert(reset);
}
+static void rockchip_saradc_clk_disable(void *data)
+{
+ struct rockchip_saradc *info = data;
+
+ clk_disable_unprepare(info->clk);
+}
+
+static void rockchip_saradc_pclk_disable(void *data)
+{
+ struct rockchip_saradc *info = data;
+
+ clk_disable_unprepare(info->pclk);
+}
+
static void rockchip_saradc_regulator_disable(void *data)
{
struct rockchip_saradc *info = data;
@@ -393,7 +298,8 @@ out:
}
static int rockchip_saradc_volt_notify(struct notifier_block *nb,
- unsigned long event, void *data)
+ unsigned long event,
+ void *data)
{
struct rockchip_saradc *info =
container_of(nb, struct rockchip_saradc, nb);
@@ -413,10 +319,10 @@ static void rockchip_saradc_regulator_un
static int rockchip_saradc_probe(struct platform_device *pdev)
{
- const struct rockchip_saradc_data *match_data;
struct rockchip_saradc *info = NULL;
struct device_node *np = pdev->dev.of_node;
struct iio_dev *indio_dev = NULL;
+ const struct of_device_id *match;
int ret;
int irq;
@@ -424,23 +330,25 @@ static int rockchip_saradc_probe(struct
return -ENODEV;
indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info));
- if (!indio_dev)
- return dev_err_probe(&pdev->dev, -ENOMEM,
- "failed allocating iio device\n");
-
+ if (!indio_dev) {
+ dev_err(&pdev->dev, "failed allocating iio device\n");
+ return -ENOMEM;
+ }
info = iio_priv(indio_dev);
- match_data = of_device_get_match_data(&pdev->dev);
- if (!match_data)
- return dev_err_probe(&pdev->dev, -ENODEV,
- "failed to match device\n");
+ match = of_match_device(rockchip_saradc_match, &pdev->dev);
+ if (!match) {
+ dev_err(&pdev->dev, "failed to match device\n");
+ return -ENODEV;
+ }
- info->data = match_data;
+ info->data = match->data;
/* Sanity check for possible later IP variants with more channels */
- if (info->data->num_channels > SARADC_MAX_CHANNELS)
- return dev_err_probe(&pdev->dev, -EINVAL,
- "max channels exceeded");
+ if (info->data->num_channels > SARADC_MAX_CHANNELS) {
+ dev_err(&pdev->dev, "max channels exceeded");
+ return -EINVAL;
+ }
info->regs = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(info->regs))
@@ -466,7 +374,7 @@ static int rockchip_saradc_probe(struct
irq = platform_get_irq(pdev, 0);
if (irq < 0)
- return irq;
+ return dev_err_probe(&pdev->dev, irq, "failed to get irq\n");
ret = devm_request_irq(&pdev->dev, irq, rockchip_saradc_isr,
0, dev_name(&pdev->dev), info);
@@ -475,6 +383,16 @@ static int rockchip_saradc_probe(struct
return ret;
}
+ info->pclk = devm_clk_get(&pdev->dev, "apb_pclk");
+ if (IS_ERR(info->pclk))
+ return dev_err_probe(&pdev->dev, PTR_ERR(info->pclk),
+ "failed to get pclk\n");
+
+ info->clk = devm_clk_get(&pdev->dev, "saradc");
+ if (IS_ERR(info->clk))
+ return dev_err_probe(&pdev->dev, PTR_ERR(info->clk),
+ "failed to get adc clock\n");
+
info->vref = devm_regulator_get(&pdev->dev, "vref");
if (IS_ERR(info->vref))
return dev_err_probe(&pdev->dev, PTR_ERR(info->vref),
@@ -488,20 +406,23 @@ static int rockchip_saradc_probe(struct
* This may become user-configurable in the future.
*/
ret = clk_set_rate(info->clk, info->data->clk_rate);
- if (ret < 0)
- return dev_err_probe(&pdev->dev, ret,
- "failed to set adc clk rate\n");
+ if (ret < 0) {
+ dev_err(&pdev->dev, "failed to set adc clk rate, %d\n", ret);
+ return ret;
+ }
ret = regulator_enable(info->vref);
- if (ret < 0)
- return dev_err_probe(&pdev->dev, ret,
- "failed to enable vref regulator\n");
-
+ if (ret < 0) {
+ dev_err(&pdev->dev, "failed to enable vref regulator\n");
+ return ret;
+ }
ret = devm_add_action_or_reset(&pdev->dev,
rockchip_saradc_regulator_disable, info);
- if (ret)
- return dev_err_probe(&pdev->dev, ret,
- "failed to register devm action\n");
+ if (ret) {
+ dev_err(&pdev->dev, "failed to register devm action, %d\n",
+ ret);
+ return ret;
+ }
ret = regulator_get_voltage(info->vref);
if (ret < 0)
@@ -509,15 +430,31 @@ static int rockchip_saradc_probe(struct
info->uv_vref = ret;
- info->pclk = devm_clk_get_enabled(&pdev->dev, "apb_pclk");
- if (IS_ERR(info->pclk))
- return dev_err_probe(&pdev->dev, PTR_ERR(info->pclk),
- "failed to get pclk\n");
+ ret = clk_prepare_enable(info->pclk);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "failed to enable pclk\n");
+ return ret;
+ }
+ ret = devm_add_action_or_reset(&pdev->dev,
+ rockchip_saradc_pclk_disable, info);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to register devm action, %d\n",
+ ret);
+ return ret;
+ }
- info->clk = devm_clk_get_enabled(&pdev->dev, "saradc");
- if (IS_ERR(info->clk))
- return dev_err_probe(&pdev->dev, PTR_ERR(info->clk),
- "failed to get adc clock\n");
+ ret = clk_prepare_enable(info->clk);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "failed to enable converter clock\n");
+ return ret;
+ }
+ ret = devm_add_action_or_reset(&pdev->dev,
+ rockchip_saradc_clk_disable, info);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to register devm action, %d\n",
+ ret);
+ return ret;
+ }
platform_set_drvdata(pdev, indio_dev);

View file

@ -1,12 +0,0 @@
diff -rupN linux.orig/drivers/input/touchscreen/goodix.c linux/drivers/input/touchscreen/goodix.c
--- linux.orig/drivers/input/touchscreen/goodix.c 2024-01-02 16:20:16.170247325 +0000
+++ linux/drivers/input/touchscreen/goodix.c 2024-01-03 15:28:50.457334216 +0000
@@ -1007,6 +1007,8 @@ retry_get_irq_gpio:
/* Get the reset line GPIO pin number */
gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, ts->gpiod_rst_flags);
+ if (IS_ERR(gpiod))
+ gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, GPIOD_OUT_LOW);
if (IS_ERR(gpiod)) {
error = PTR_ERR(gpiod);
if (error != -EPROBE_DEFER)

View file

@ -0,0 +1,31 @@
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
@@ -335,13 +335,13 @@ static void rockchip_irq_demux(struct ir
unsigned long pending;
unsigned int irq;
- dev_dbg(bank->dev, "got irq for bank %s\n", bank->name);
+ //dev_dbg(bank->dev, "got irq for bank %s\n", bank->name);
chained_irq_enter(chip, desc);
pending = readl_relaxed(bank->reg_base + bank->gpio_regs->int_status);
for_each_set_bit(irq, &pending, 32) {
- dev_dbg(bank->dev, "handling irq %d\n", irq);
+ //dev_dbg(bank->dev, "handling irq %d\n", irq);
/*
* 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:
default:
if (ts->gpiod_int && ts->gpiod_rst) {
ts->reset_controller_at_probe = true;
- ts->load_cfg_from_disk = true;
+ ts->load_cfg_from_disk = false;
ts->irq_pin_access_method = IRQ_PIN_ACCESS_GPIO;
}
}

View file

@ -1,54 +0,0 @@
diff -rupN linux.orig/drivers/input/touchscreen/goodix.c linux/drivers/input/touchscreen/goodix.c
--- linux.orig/drivers/input/touchscreen/goodix.c 2023-12-15 19:18:57.364913158 +0000
+++ linux/drivers/input/touchscreen/goodix.c 2023-12-15 19:20:05.987107578 +0000
@@ -1037,7 +1037,7 @@ retry_get_irq_gpio:
default:
if (ts->gpiod_int && ts->gpiod_rst) {
ts->reset_controller_at_probe = true;
- ts->load_cfg_from_disk = true;
+ ts->load_cfg_from_disk = false;
ts->irq_pin_access_method = IRQ_PIN_ACCESS_GPIO;
}
}
diff -rupN linux.orig/drivers/gpio/gpio-rockchip.c linux/drivers/gpio/gpio-rockchip.c
--- linux.orig/drivers/gpio/gpio-rockchip.c 2023-12-15 19:18:55.020838176 +0000
+++ linux/drivers/gpio/gpio-rockchip.c 2023-12-15 19:20:05.987107578 +0000
@@ -335,13 +335,13 @@ static void rockchip_irq_demux(struct ir
unsigned long pending;
unsigned int irq;
- dev_dbg(bank->dev, "got irq for bank %s\n", bank->name);
+ //dev_dbg(bank->dev, "got irq for bank %s\n", bank->name);
chained_irq_enter(chip, desc);
pending = readl_relaxed(bank->reg_base + bank->gpio_regs->int_status);
for_each_set_bit(irq, &pending, 32) {
- dev_dbg(bank->dev, "handling irq %d\n", irq);
+ //dev_dbg(bank->dev, "handling irq %d\n", irq);
/*
* Triggering IRQ on both rising and falling edge
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index f3964060a044..dc1ffb3a098b 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -41,9 +41,6 @@ static inline int _soc_pcm_ret(struct snd_soc_pcm_runtime *rtd,
case -ENOTSUPP:
break;
default:
- dev_err(rtd->dev,
- "ASoC: error at %s on %s: %d\n",
- func, rtd->dai_link->name, ret);
}
return ret;
@@ -2438,8 +2435,6 @@ static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
/* there is no point preparing this FE if there are no BEs */
if (list_empty(&fe->dpcm[stream].be_clients)) {
- dev_err(fe->dev, "ASoC: no backend DAIs enabled for %s\n",
- fe->dai_link->name);
ret = -EINVAL;
goto out;
}

View file

@ -7,9 +7,8 @@ PKG_NAME="u-boot"
PKG_ARCH="arm aarch64"
PKG_SITE="https://github.com/JustEnoughLinuxOS"
PKG_LICENSE="GPL"
PKG_DEPENDS_TARGET="toolchain swig:host rkbin"
PKG_DEPENDS_TARGET="toolchain swig:host rkbin glibc pyelftools:host"
PKG_LONGDESC="Rockchip U-Boot is a bootloader for embedded systems."
GET_HANDLER_SUPPORT="git"
PKG_PATCH_DIRS+="${DEVICE}"
case ${DEVICE} in
@ -23,10 +22,11 @@ case ${DEVICE} in
PKG_VERSION="88b2f26"
;;
RK3399)
PKG_URL="${PKG_SITE}/rk3399-uboot.git"
PKG_VERSION="bb226439ac676a75b87a555e8741ac3c0b3e11b1"
PKG_DEPENDS_TARGET+=" atf"
PKG_VERSION="2024.01"
PKG_URL="https://ftp.denx.de/pub/u-boot/${PKG_NAME}-${PKG_VERSION}.tar.bz2"
;;
RK332*)
RK3326)
PKG_URL="https://github.com/hardkernel/u-boot.git"
PKG_VERSION="0e26e35cb18a80005b7de45c95858c86a2f7f41e"
PKG_GIT_CLONE_BRANCH="odroidgoA-v2017.09"
@ -51,6 +51,7 @@ post_patch() {
}
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"
@ -75,7 +76,9 @@ make_target() {
DEBUG=${PKG_DEBUG} CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" ARCH=arm64 _python_sysroot="${TOOLCHAIN}" _python_prefix=/ _python_exec_prefix=/ make HOSTCC="${HOST_CC}" HOSTLDFLAGS="-L${TOOLCHAIN}/lib" HOSTSTRIP="true" CONFIG_MKIMAGE_DTC_PATH="scripts/dtc/dtc"
else
echo "Building for MBR (${UBOOT_DTB})..."
[ -n "${ATF_PLATFORM}" ] && cp -av $(get_build_dir atf)/bl31.bin .
if [[ "${ATF_PLATFORM}" =~ "rk3399" ]]; then
export BL31="$(get_build_dir atf)/.install_pkg/usr/share/bootloader/bl31.elf"
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" HOSTLDFLAGS="-L${TOOLCHAIN}/lib" HOSTSTRIP="true" CONFIG_MKIMAGE_DTC_PATH="scripts/dtc/dtc"

View file

@ -1,12 +0,0 @@
diff --git a/Makefile b/Makefile
index ff76e8559..3ebe059b9 100644
--- a/Makefile
+++ b/Makefile
@@ -606,6 +606,7 @@ endif
KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
+KBUILD_CFLAGS += $(call cc-disable-warning, enum-int-mismatch)
# turn jbsr into jsr for m68k
ifeq ($(ARCH),m68k)