Merge pull request #2913 from sydarn/rgb10max3-linux-patches
Update rk3566 linux patches, rgb10max3 and adc joystick invert
This commit is contained in:
commit
dd4033362c
11 changed files with 520 additions and 359 deletions
|
@ -1,71 +0,0 @@
|
|||
From: Chris Morgan <macroalpha82@gmail.com>
|
||||
To: linux-input@vger.kernel.org
|
||||
Cc: dmitry.torokhov@gmail.com, hdegoede@redhat.com,
|
||||
paul@crapouillou.net, peter.hutterer@who-t.net, svv@google.com,
|
||||
biswarupp@google.com, contact@artur-rojek.eu,
|
||||
Chris Morgan <macromorgan@hotmail.com>
|
||||
Subject: [PATCH 1/2] Input: add input_invert_abs()
|
||||
Date: Sun, 31 Dec 2023 14:56:42 -0600 [thread overview]
|
||||
Message-ID: <20231231205643.129435-2-macroalpha82@gmail.com> (raw)
|
||||
In-Reply-To: <20231231205643.129435-1-macroalpha82@gmail.com>
|
||||
|
||||
From: Chris Morgan <macromorgan@hotmail.com>
|
||||
|
||||
Add a helper function to make it easier for a driver to invert abs
|
||||
values when needed. It is up to the driver itself to track axes that
|
||||
need to be inverted and normalize the data before it is passed on.
|
||||
|
||||
This function assumes that drivers will set the min and max values
|
||||
so that min < max and then will simply call this function each time
|
||||
the values need to be inverted.
|
||||
|
||||
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
|
||||
---
|
||||
drivers/input/input.c | 19 +++++++++++++++++++
|
||||
include/linux/input.h | 1 +
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/input.c b/drivers/input/input.c
|
||||
index 8c5fdb0f858a..f135aed165a1 100644
|
||||
--- a/drivers/input/input.c
|
||||
+++ b/drivers/input/input.c
|
||||
@@ -552,6 +552,25 @@ void input_copy_abs(struct input_dev *dst, unsigned int dst_axis,
|
||||
}
|
||||
EXPORT_SYMBOL(input_copy_abs);
|
||||
|
||||
+/**
|
||||
+ * input_invert_abs - Invert the abs value for an inverted axis.
|
||||
+ * @dev: Input device with absolute events
|
||||
+ * @axis: ABS_* value selecting the destination axis for the event to
|
||||
+ * invert.
|
||||
+ * @val: Value to be inverted based on min and max values of the axis.
|
||||
+ *
|
||||
+ * Return an inverted value for a given ABS axis based on its min and
|
||||
+ * max values.
|
||||
+ */
|
||||
+int input_invert_abs(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;
|
||||
+}
|
||||
+EXPORT_SYMBOL(input_invert_abs);
|
||||
+
|
||||
/**
|
||||
* input_grab_device - grabs device for exclusive use
|
||||
* @handle: input handle that wants to own the device
|
||||
diff --git a/include/linux/input.h b/include/linux/input.h
|
||||
index de6503c0edb8..deb5f8bb0ec7 100644
|
||||
--- a/include/linux/input.h
|
||||
+++ b/include/linux/input.h
|
||||
@@ -477,6 +477,7 @@ void input_set_abs_params(struct input_dev *dev, unsigned int axis,
|
||||
int min, int max, int fuzz, int flat);
|
||||
void input_copy_abs(struct input_dev *dst, unsigned int dst_axis,
|
||||
const struct input_dev *src, unsigned int src_axis);
|
||||
+int input_invert_abs(struct input_dev *dev, unsigned int axis, int val);
|
||||
|
||||
#define INPUT_GENERATE_ABS_ACCESSORS(_suffix, _item) \
|
||||
static inline int input_abs_get_##_suffix(struct input_dev *dev, \
|
||||
--
|
||||
2.34.1
|
|
@ -1,19 +1,17 @@
|
|||
From: Chris Morgan <macroalpha82@gmail.com>
|
||||
iiFrom: Chris Morgan <macroalpha82@gmail.com>
|
||||
To: linux-input@vger.kernel.org
|
||||
Cc: dmitry.torokhov@gmail.com, hdegoede@redhat.com,
|
||||
Cc: contact@artur-rojek.eu, hdegoede@redhat.com,
|
||||
paul@crapouillou.net, peter.hutterer@who-t.net, svv@google.com,
|
||||
biswarupp@google.com, contact@artur-rojek.eu,
|
||||
Chris Morgan <macromorgan@hotmail.com>
|
||||
Subject: [PATCH 2/2] Input: adc-joystick: Handle inverted axes
|
||||
Date: Sun, 31 Dec 2023 14:56:43 -0600 [thread overview]
|
||||
Message-ID: <20231231205643.129435-3-macroalpha82@gmail.com> (raw)
|
||||
In-Reply-To: <20231231205643.129435-1-macroalpha82@gmail.com>
|
||||
biswarupp@google.com, Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
|
||||
When one or more axes are inverted, (where min > max), normalize the
|
||||
data so that min < max and call a helper function to invert the
|
||||
values reported to the input stack.
|
||||
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
|
||||
|
@ -21,14 +19,34 @@ always less than max.
|
|||
|
||||
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
|
||||
---
|
||||
drivers/input/joystick/adc-joystick.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
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..4e8d446987b6 100644
|
||||
index c0deff5d4282..3b05b2e413d0 100644
|
||||
--- a/drivers/input/joystick/adc-joystick.c
|
||||
+++ b/drivers/input/joystick/adc-joystick.c
|
||||
@@ -18,6 +18,7 @@ struct adc_joystick_axis {
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/consumer.h>
|
||||
+#include <linux/minmax.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/property.h>
|
||||
@@ -18,6 +19,7 @@ struct adc_joystick_axis {
|
||||
s32 range[2];
|
||||
s32 fuzz;
|
||||
s32 flat;
|
||||
|
@ -36,42 +54,52 @@ index c0deff5d4282..4e8d446987b6 100644
|
|||
};
|
||||
|
||||
struct adc_joystick {
|
||||
@@ -38,6 +39,8 @@ static void adc_joystick_poll(struct input_dev *input)
|
||||
@@ -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 = input_invert_abs(input, i, val);
|
||||
+ val = adc_joystick_invert(input, i, val);
|
||||
input_report_abs(input, joy->axes[i].code, val);
|
||||
}
|
||||
input_sync(input);
|
||||
@@ -86,6 +89,8 @@ static int adc_joystick_handle(const void *data, void *private)
|
||||
@@ -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 = input_invert_abs(joy->input, i, val);
|
||||
+ val = adc_joystick_invert(joy->input, i, val);
|
||||
input_report_abs(joy->input, joy->axes[i].code, val);
|
||||
}
|
||||
|
||||
@@ -168,11 +173,17 @@ static int adc_joystick_set_axes(struct device *dev, struct adc_joystick *joy)
|
||||
@@ -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 = 1;
|
||||
+ 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);
|
||||
|
||||
input_set_abs_params(joy->input, axes[i].code,
|
||||
- axes[i].range[0], axes[i].range[1],
|
||||
+ min_array(axes[i].range, 2),
|
||||
+ max_array(axes[i].range, 2),
|
||||
axes[i].fuzz, axes[i].flat);
|
||||
input_set_capability(joy->input, EV_ABS, axes[i].code);
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
|
|
@ -1,261 +0,0 @@
|
|||
diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
index b7371afb6227..2ee31fc6bd8e 100644
|
||||
--- a/arch/arm64/boot/dts/rockchip/Makefile
|
||||
+++ b/arch/arm64/boot/dts/rockchip/Makefile
|
||||
@@ -79,6 +79,7 @@ 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-rgb30.dtb
|
||||
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb10max3.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rk2023.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-quartz64-a.dtb
|
||||
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-quartz64-b.dtb
|
||||
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..26884dfda818
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb10max3.dts
|
||||
@@ -0,0 +1,40 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/linux-event-codes.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#include "rk3566-powkiddy-rk2023.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Powkiddy RGB10 Max 3";
|
||||
+ compatible = "powkiddy,rgb10max3", "rockchip,rk3566";
|
||||
+};
|
||||
+
|
||||
+&cru {
|
||||
+ assigned-clocks = <&pmucru CLK_RTC_32K>, <&cru PLL_GPLL>,
|
||||
+ <&pmucru PLL_PPLL>, <&cru PLL_VPLL>;
|
||||
+ assigned-clock-rates = <32768>, <1200000000>,
|
||||
+ <200000000>, <292500000>;
|
||||
+};
|
||||
+
|
||||
+&dsi0 {
|
||||
+ panel: panel@0 {
|
||||
+ compatible = "powkiddy,rgb10max3-panel";
|
||||
+ reg = <0>;
|
||||
+ backlight = <&backlight>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&lcd_rst>;
|
||||
+ reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
|
||||
+ vcc-supply = <&vcc3v3_lcd0_n>;
|
||||
+ iovcc-supply = <&vcc3v3_lcd0_n>;
|
||||
+ rotation = <270>;
|
||||
+
|
||||
+ port {
|
||||
+ mipi_in_panel: endpoint {
|
||||
+ remote-endpoint = <&mipi_out_panel>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
index b55bafd1a8be..e8d1730241b4 100644
|
||||
--- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
+++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
@@ -58,7 +58,7 @@ struct st7703 {
|
||||
struct gpio_desc *reset_gpio;
|
||||
struct regulator *vcc;
|
||||
struct regulator *iovcc;
|
||||
- bool prepared;
|
||||
+ enum drm_panel_orientation orientation;
|
||||
|
||||
struct dentry *debugfs;
|
||||
const struct st7703_panel_desc *desc;
|
||||
@@ -493,6 +493,76 @@ static int rgb30panel_init_sequence(struct st7703 *ctx)
|
||||
0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a,
|
||||
0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d,
|
||||
0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int rgb10max3_init_sequence(struct st7703 *ctx)
|
||||
+{
|
||||
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
|
||||
+
|
||||
+ /*
|
||||
+ * Init sequence was supplied by the panel vendor.
|
||||
+ */
|
||||
+
|
||||
+ 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;
|
||||
}
|
||||
@@ -512,6 +582,21 @@ static const struct drm_display_mode rgb30panel_mode = {
|
||||
.height_mm = 76,
|
||||
};
|
||||
|
||||
+static const struct drm_display_mode rgb10max3panel_mode = {
|
||||
+ .hdisplay = 720,
|
||||
+ .hsync_start = 720 + 60,
|
||||
+ .hsync_end = 720 + 60 + 10,
|
||||
+ .htotal = 720 + 60 + 10 + 20,
|
||||
+ .vdisplay = 1280,
|
||||
+ .vsync_start = 1280 + 16,
|
||||
+ .vsync_end = 1280 + 16 + 4,
|
||||
+ .vtotal = 1280 + 16 + 4 + 14,
|
||||
+ .clock = 60000,
|
||||
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
|
||||
+ .width_mm = 63,
|
||||
+ .height_mm = 111,
|
||||
+};
|
||||
+
|
||||
static const struct st7703_panel_desc rgb30panel_desc = {
|
||||
.mode = &rgb30panel_mode,
|
||||
.lanes = 4,
|
||||
@@ -521,6 +606,15 @@ static const struct st7703_panel_desc rgb30panel_desc = {
|
||||
.init_sequence = rgb30panel_init_sequence,
|
||||
};
|
||||
|
||||
+static const struct st7703_panel_desc rgb10max3panel_desc = {
|
||||
+ .mode = &rgb10max3panel_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_init_sequence,
|
||||
+};
|
||||
+
|
||||
static int st7703_enable(struct drm_panel *panel)
|
||||
{
|
||||
struct st7703 *ctx = panel_to_st7703(panel);
|
||||
@@ -575,13 +669,9 @@ static int st7703_unprepare(struct drm_panel *panel)
|
||||
{
|
||||
struct st7703 *ctx = panel_to_st7703(panel);
|
||||
|
||||
- if (!ctx->prepared)
|
||||
- return 0;
|
||||
-
|
||||
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
|
||||
regulator_disable(ctx->iovcc);
|
||||
regulator_disable(ctx->vcc);
|
||||
- ctx->prepared = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -591,9 +681,6 @@ static int st7703_prepare(struct drm_panel *panel)
|
||||
struct st7703 *ctx = panel_to_st7703(panel);
|
||||
int ret;
|
||||
|
||||
- if (ctx->prepared)
|
||||
- return 0;
|
||||
-
|
||||
dev_dbg(ctx->dev, "Resetting the panel\n");
|
||||
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
|
||||
|
||||
@@ -616,8 +703,6 @@ static int st7703_prepare(struct drm_panel *panel)
|
||||
gpiod_set_value_cansleep(ctx->reset_gpio, 0);
|
||||
usleep_range(15000, 20000);
|
||||
|
||||
- ctx->prepared = true;
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -653,12 +738,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 *ctx = panel_to_st7703(panel);
|
||||
+
|
||||
+ return ctx->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)
|
||||
@@ -709,6 +802,12 @@ static int st7703_probe(struct mipi_dsi_device *dsi)
|
||||
if (IS_ERR(ctx->reset_gpio))
|
||||
return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), "Failed to get reset gpio\n");
|
||||
|
||||
+ ret = of_drm_get_panel_orientation(dev->of_node, &ctx->orientation);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
mipi_dsi_set_drvdata(dsi, ctx);
|
||||
|
||||
ctx->dev = dev;
|
||||
@@ -785,6 +884,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,rgb30-panel", .data = &rgb30panel_desc },
|
||||
+ { .compatible = "powkiddy,rgb10max3-panel", .data = &rgb10max3panel_desc },
|
||||
{ .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc },
|
||||
{ .compatible = "xingbangda,xbd599", .data = &xbd599_desc },
|
||||
{ /* sentinel */ }
|
|
@ -0,0 +1,29 @@
|
|||
commit 9913a60f318b6c88ea8385048952e3557464bb84
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Reviewed-by: Guido Günther <agx@sigxcpu.org>
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
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
|
|
@ -0,0 +1,125 @@
|
|||
commit e0c732291250e205fb834881ad7ecf9ee3ffef45
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Reviewed-by: Guido Günther <agx@sigxcpu.org>
|
||||
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
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 },
|
|
@ -0,0 +1,57 @@
|
|||
commit 762195e5c26936b891fb54ba0183aa3ef366b41e
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Reviewed-by: Guido Günther <agx@sigxcpu.org>
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
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);
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
commit 039a03c377d64ec832a8fb1b8f8b5badd404989f
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Link: https://lore.kernel.org/r/20240212184950.52210-6-macroalpha82@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
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>;
|
|
@ -0,0 +1,26 @@
|
|||
commit fbe7823623a8c02759afdfb521709f4fa216849a
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20240212184950.52210-7-macroalpha82@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
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
|
|
@ -0,0 +1,12 @@
|
|||
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
|
|
@ -0,0 +1,110 @@
|
|||
commit 4b325c0d4f539b553a4529f16476f08757779293
|
||||
Author: Chris Morgan <macromorgan@hotmail.com>
|
||||
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 <macromorgan@hotmail.com>
|
||||
Link: https://lore.kernel.org/r/20240212184950.52210-8-macroalpha82@gmail.com
|
||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
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 <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/input/linux-event-codes.h>
|
||||
+#include <dt-bindings/pinctrl/rockchip.h>
|
||||
+#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 = <LED_COLOR_ID_AMBER>;
|
||||
+ 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;
|
||||
+};
|
Loading…
Reference in a new issue