RK3399: Update Kernel to 6.7.0

This commit is contained in:
brooksytech 2024-01-09 22:53:16 +00:00
parent f9555a73d0
commit a0c9538218
No known key found for this signature in database
12 changed files with 1034 additions and 11333 deletions

File diff suppressed because it is too large Load diff

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;
}