* [PATCH 0/2] drm/panel: add fannal c3004 panel
@ 2023-05-19 14:24 Paulo Pavacic
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw)
To: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic
Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required.
In previous discussions for device tree [1] [2] and device driver [3] were named mipi-dsi-bringup.
[1] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn3t-giVipb5oH_3mzQZbnXbDqqz0WEg8uAmo-1W2uKzFg@mail.gmail.com/
[2] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn18KsR0c+U8EEY1=xnmsKMxy6SEArMUic0z=aYJDVwWCQ@mail.gmail.com/
[3] https://lists.freedesktop.org/archives/dri-devel/2023-May/404775.html
Paulo Pavacic (2):
dt-bindings: display: panel: add fannal,c3004
drm/panel-fannal-c3004: Add fannal c3004 DSI panel
.../bindings/display/panel/fannal,c3004.yaml | 75 ++++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 7 +
drivers/gpu/drm/panel/Kconfig | 11 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 ++++++++++++++++++
6 files changed, 501 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c
--
2.40.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic
@ 2023-05-19 14:24 ` Paulo Pavacic
2023-05-19 16:41 ` Conor Dooley
2023-05-20 13:58 ` kernel test robot
2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic
2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong
2 siblings, 2 replies; 13+ messages in thread
From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw)
To: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic
Added fannal to vendor-prefixes and dt bindings for Fannal C3004.
Fannal C3004 is a 480x800 MIPI DSI Panel which requires
DCS initialization sequences with certain delays between certain
commands.
Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
---
v3 changelog:
- renamed yml file
- refactored yml file to describe fannal,c3004
- added matrix URI to MAINTAINERS
v2 changelog:
- revised driver title, now describes purpose
- revised description, now describes hw
- revised maintainers, now has only 1 mail
- removed diacritics from commit/commit author
- properties/compatible is now enum
- compatible using only lowercase
- revised dts example
- modified MAINTAINERS in this commit (instead of driver commit)
- dt_bindings_check checked yml
- checkpatch warning fixed
---
.../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 6 ++
3 files changed, 83 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
new file mode 100644
index 000000000000..a86b5ce02aa2
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
@@ -0,0 +1,75 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Fannal C3004 MIPI-DSI
+
+maintainers:
+ - Paulo Pavacic <pavacic.p@gmail.com>
+
+description: |
+ Fannal C3004 is a 480x800 panel which requires DSI DCS
+ initialization sequences.
+
+allOf:
+ - $ref: panel-common.yaml#
+
+properties:
+ compatible:
+ items:
+ - const: fannal,c3004
+
+ reg: true
+ reset-gpios: true
+
+ vdd-supply:
+ description: power supply voltage
+ vddio-supply:
+ description: power supply voltage for IO
+
+ width-mm:
+ description: physical panel width [mm]
+ height-mm:
+ description: physical panel height [mm]
+
+ panel-timing: true
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ dsi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ panel@0 {
+ compatible = "fannal,c3004";
+ reg = <0>;
+ pinctrl-0 = <&pinctrl_mipi_dsi_rst>;
+ pinctrl-names = "default";
+ reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+ vdd-supply = <®1>;
+ vddio-supply = <®2>;
+ width-mm = <93>;
+ height-mm = <56>;
+ panel-timing {
+ clock-frequency = <27000000>;
+ hactive = <480>;
+ vactive = <800>;
+ hfront-porch = <30>;
+ hback-porch = <30>;
+ hsync-len = <8>;
+ vback-porch = <30>;
+ vfront-porch = <30>;
+ vsync-len = <8>;
+ };
+ };
+ };
+...
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 82d39ab0231b..f962750f630a 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -462,6 +462,8 @@ patternProperties:
description: Facebook
"^fairphone,.*":
description: Fairphone B.V.
+ "^fannal,.*":
+ description: Fannal Electronics Co., Ltd
"^faraday,.*":
description: Faraday Technology Corporation
"^fastrax,.*":
diff --git a/MAINTAINERS b/MAINTAINERS
index 5c22c828ab46..62374c8424b9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc
F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml
F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c
+DRM DRIVER FOR FANNAL C3004373132019A
+M: Paulo Pavacic <pavacic.p@gmail.com>
+S: Maintained
+C: matrix:r/mipi-dsi-bringup:matrix.org
+F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
+
DRM DRIVER FOR FARADAY TVE200 TV ENCODER
M: Linus Walleij <linus.walleij@linaro.org>
S: Maintained
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel
2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
@ 2023-05-19 14:24 ` Paulo Pavacic
2023-05-22 8:55 ` neil.armstrong
2023-05-23 17:33 ` Linus Walleij
2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong
2 siblings, 2 replies; 13+ messages in thread
From: Paulo Pavacic @ 2023-05-19 14:24 UTC (permalink / raw)
To: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: dri-devel, linux-kernel, devicetree, Paulo Pavacic
Fannal C3004 is a 480x800 display made by fannal that requires
DCS initialization sequences.
Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
---
v2 changelog:
- renamed from panel-mipi-dsi-bringup
- only one MAINTAINER e-mail
---
MAINTAINERS | 1 +
drivers/gpu/drm/panel/Kconfig | 11 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 +++++++++++++++++++++
4 files changed, 418 insertions(+)
create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 62374c8424b9..93fc1ae6832f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6432,6 +6432,7 @@ M: Paulo Pavacic <pavacic.p@gmail.com>
S: Maintained
C: matrix:r/mipi-dsi-bringup:matrix.org
F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
+F: drivers/gpu/drm/panel/panel-fannal-c3004.c
DRM DRIVER FOR FARADAY TVE200 TV ENCODER
M: Linus Walleij <linus.walleij@linaro.org>
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 2b9d6db7860b..a1041c1e6bf6 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -144,6 +144,17 @@ config DRM_PANEL_ELIDA_KD35T133
KD35T133 controller for 320x480 LCD panels with MIPI-DSI
system interfaces.
+config DRM_PANEL_FANNAL_C3004
+ tristate "Fannal C3004 panel"
+ depends on OF
+ depends on DRM_MIPI_DSI
+ help
+ Say Y here if you want to enable support for the Fannal C3004
+ 2-lane 480x800 MIPI DSI panel which requires initialization
+ sequence.
+
+ If M is selected the module will be called panel-fannal-c3004.
+
config DRM_PANEL_FEIXIN_K101_IM2BA02
tristate "Feixin K101 IM2BA02 panel"
depends on OF
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index ff169781e82d..13c0f00038b5 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
obj-$(CONFIG_DRM_PANEL_EDP) += panel-edp.o
obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o
obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o
+obj-$(CONFIG_DRM_PANEL_FANNAL_C3004) += panel-fannal-c3004.o
obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o
obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o
obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
diff --git a/drivers/gpu/drm/panel/panel-fannal-c3004.c b/drivers/gpu/drm/panel/panel-fannal-c3004.c
new file mode 100644
index 000000000000..decbd0c59093
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-fannal-c3004.c
@@ -0,0 +1,405 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MIPI DSI driver for Fannal C3004.
+ * Copyright (C) 2023, Zenitel
+ * Author: Paulo Pavacic <pavacic.p@gmail.com>
+ */
+
+// ↓ include headers, static values, static functions ↓
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/media-bus-format.h>
+
+#include <video/mipi_display.h>
+#include <video/of_videomode.h>
+#include <video/videomode.h>
+
+#include <drm/drm_crtc.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_panel.h>
+
+static const struct fann_panel_info fann_c3004_panel_info;
+
+struct fann_panel_info {
+ const struct drm_display_mode *display_mode;
+ u32 num_of_dsi_lanes;
+ u32 mipi_dsi_format;
+ u32 mipi_dsi_mode_flags;
+ u32 bus_flags;
+ u32 video_mode;
+ void (*panel_enable_function)(struct mipi_dsi_device *dsi);
+};
+
+struct fann_panel_data {
+ const struct fann_panel_info *panel_info;
+ struct drm_panel panel;
+ struct gpio_desc *reset;
+};
+
+static struct fann_panel_data *
+get_fann_panel_data_from_panel(struct drm_panel *panel)
+{
+ return container_of(panel, struct fann_panel_data, panel);
+}
+
+static const struct fann_panel_info *
+get_fann_panel_info_from_panel(struct drm_panel *panel)
+{
+ return get_fann_panel_data_from_panel(panel)->panel_info;
+}
+
+enum FANN_VIDEO_MODES_ENUM {
+ FANN_BURST,
+ FANN_SYNC_EVENT,
+ FANN_SYNC_PULSE,
+ FANN_COMMAND,
+};
+
+static const u32 FANN_VIDEO_MODES[] = {
+ MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO, //BURST
+ MIPI_DSI_MODE_VIDEO, //SYNC_EVENT
+ MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO, //SYNC_PULSE
+ MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH //COMMAND MODE
+};
+
+//macro for writing to DSI
+#define WRITE_DSI(dsi, seq...) \
+ { \
+ const u8 d[] = { seq }; \
+ int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \
+ if (ret < 0) { \
+ dev_err(&dsi->dev, \
+ "Error (%d) occurred while trying to" \
+ " write MIPI DSI command: %s (decimal value)\n", \
+ ret, d); \
+ } \
+ }
+
+// ↑ include headers, static values, static functions ↑
+// ↓ INTERACTION whole section: panel specific values, add panel as is shown ↓
+
+/**
+ * @brief Adding new panel
+ * Includes but isn't limited to following steps:
+ * 1. define new `fann__yourpanel_display_mode` with correct timings
+ * 2. define new `fann_panel_yourpanel_enable_function`
+ * 3. glue everything with fann_yourpanel_panel_info and set that srtucts values
+ * 4. add .compatible = "you,yourpanel", .data = &fann_yourpanel_panel_info }
+ */
+
+static const u32 fann_bus_formats[] = {
+ MEDIA_BUS_FMT_RGB888_1X24,
+};
+
+// resolution 480p x 800p, 56mmx93mm
+static const struct drm_display_mode fann_c3004_display_mode = {
+ .clock = 27000,
+ .hdisplay = 480, // display height pixels
+ .hsync_start = 480 + 30, // hdisplay + HBP
+ .hsync_end = 480 + 30 + 8, // hdisplay + HBP + HSync
+ .htotal = 480 + 30 + 8 + 30, // hdisplay + HBP + HSync + HFP
+ .vdisplay = 800, // display width pixels
+ .vsync_start = 800 + 20, // vdisplay + VBP
+ .vsync_end = 800 + 20 + 8, // vdisplay + VBP + VSync
+ .vtotal = 800 + 20 + 8 + 20, // vdisplay + VBP + VSync + VFP
+ .width_mm = 93,
+ .height_mm = 56,
+ .flags = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
+};
+
+static void fann_panel_fannal_c3004_enable_function(struct mipi_dsi_device *dsi)
+{
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
+ WRITE_DSI(dsi, 0xEF, 0x08);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x10);
+ WRITE_DSI(dsi, 0xC0, 0x63, 0x00);
+ WRITE_DSI(dsi, 0xC1, 0x0A, 0x0C);
+ WRITE_DSI(dsi, 0xC2, 0x31, 0x08);
+ WRITE_DSI(dsi, 0xCC, 0x18);
+
+ WRITE_DSI(dsi, 0xB0, 0x00, 0x08, 0x10, 0x0E, 0x11, 0x07, 0x08, 0x08,
+ 0x08, 0x25, 0x04, 0x12, 0x0F, 0x2C, 0x30, 0x1F);
+ WRITE_DSI(dsi, 0xB1, 0x00, 0x11, 0x18, 0x0C, 0x10, 0x05, 0x07, 0x09,
+ 0x08, 0x24, 0x04, 0x11, 0x10, 0x2B, 0x30, 0x1F);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x11);
+ WRITE_DSI(dsi, 0xB0, 0x4D);
+ WRITE_DSI(dsi, 0xB1, 0x39);
+ WRITE_DSI(dsi, 0xB2, 0x87);
+ WRITE_DSI(dsi, 0xB3, 0x80);
+ WRITE_DSI(dsi, 0xB5, 0x47);
+ WRITE_DSI(dsi, 0xB7, 0x8A);
+ WRITE_DSI(dsi, 0xB8, 0x20);
+ WRITE_DSI(dsi, 0xB9, 0x10, 0x13);
+ WRITE_DSI(dsi, 0xC1, 0x78);
+ WRITE_DSI(dsi, 0xC2, 0x78);
+ WRITE_DSI(dsi, 0xD0, 0x88);
+
+ //PANEL
+ WRITE_DSI(dsi, 0xE0, 0x00, 0x00, 0x02);
+ WRITE_DSI(dsi, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x20);
+ WRITE_DSI(dsi, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0xE3, 0x00, 0x00, 0x33, 0x00);
+ WRITE_DSI(dsi, 0xE4, 0x22, 0x00);
+ WRITE_DSI(dsi, 0xE5, 0x04, 0x34, 0xAA, 0xAA, 0x06, 0x34, 0xAA, 0xAA,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0xE6, 0x00, 0x00, 0x33, 0x00);
+ WRITE_DSI(dsi, 0xE7, 0x22, 0x00);
+ WRITE_DSI(dsi, 0xE8, 0x05, 0x34, 0xAA, 0xAA, 0x07, 0x34, 0xAA, 0xAA,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0xEB, 0x02, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0xEC, 0x00, 0x00);
+ WRITE_DSI(dsi, 0xED, 0xFA, 0x45, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x54, 0xAF);
+ WRITE_DSI(dsi, 0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
+ WRITE_DSI(dsi, 0xE8, 0x00, 0x0E);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0x11); //MIPI_DCS_EXIT_SLEEP_MODE
+
+ msleep(600);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
+ WRITE_DSI(dsi, 0xE8, 0x00, 0x0C);
+ msleep(50);
+ WRITE_DSI(dsi, 0xE8, 0x00, 0x00);
+
+ WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00);
+ WRITE_DSI(dsi, 0x29); //MIPI_DCS_SET_DISPLAY_ON
+ msleep(100);
+}
+
+static const struct fann_panel_info fann_c3004_panel_info = {
+ .display_mode = &fann_c3004_display_mode,
+ .num_of_dsi_lanes = 2, //how many wires are connected to the panel
+ .video_mode = FANN_VIDEO_MODES[FANN_SYNC_PULSE],
+ .mipi_dsi_format = MIPI_DSI_FMT_RGB888,
+ .mipi_dsi_mode_flags =
+ MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH |
+ MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_NO_EOT_PACKET,
+ .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
+ .panel_enable_function = &fann_panel_fannal_c3004_enable_function
+};
+
+// ↑ INTERACTION: panel specific values, add panel as is show in the example ↑
+// ↓ remove driver/cleanup ↓
+static void fann_panel_remove(struct mipi_dsi_device *dsi)
+{
+ struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi);
+ struct device *dev = &dsi->dev;
+ int ret;
+
+ ret = mipi_dsi_detach(dsi);
+ if (ret)
+ dev_err(dev, "error: disable: mipi detach (%d)\n", ret);
+
+ drm_panel_remove(&panel_data->panel);
+}
+
+static int fann_panel_disable(struct drm_panel *panel)
+{
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev);
+ struct device *dev = panel->dev;
+ int ret;
+
+ dsi->mode_flags |= MIPI_DSI_MODE_LPM;
+
+ ret = mipi_dsi_dcs_set_display_off(dsi);
+ if (ret < 0) {
+ dev_err(dev, "error: disable: turn display OFF (%d)\n", ret);
+ return ret;
+ }
+
+ usleep_range(5000, 10000);
+
+ ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
+ if (ret < 0) {
+ dev_err(dev, "error: disable: enter sleep mode (%d)\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int fann_panel_unprepare(struct drm_panel *panel)
+{
+ struct fann_panel_data *panel_data =
+ get_fann_panel_data_from_panel(panel);
+
+ if (panel_data->reset) {
+ gpiod_set_value_cansleep(panel_data->reset, 1);
+ usleep_range(15000, 17000);
+ gpiod_set_value_cansleep(panel_data->reset, 0);
+ }
+
+ return 0;
+}
+
+static void fann_panel_shutdown(struct mipi_dsi_device *dsi)
+{
+ struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi);
+
+ fann_panel_disable(&panel_data->panel);
+ fann_panel_unprepare(&panel_data->panel);
+}
+
+// ↑ remove driver/cleanup ↑
+// ↓ probe/create functions ↓
+
+static int fann_panel_get_modes(struct drm_panel *panel,
+ struct drm_connector *connector)
+{
+ struct drm_display_mode *mode;
+ const struct fann_panel_info *panel_info =
+ get_fann_panel_info_from_panel(panel);
+ const struct drm_display_mode *panel_display_mode =
+ panel_info->display_mode;
+
+ mode = drm_mode_duplicate(connector->dev, panel_display_mode);
+ if (!mode) {
+ dev_err(panel->dev, "error: get_modes: add drm mode %ux%u@%u\n",
+ panel_display_mode->hdisplay,
+ panel_display_mode->vdisplay,
+ drm_mode_vrefresh(panel_display_mode));
+ return -ENOMEM;
+ }
+
+ drm_mode_set_name(mode);
+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
+ drm_mode_probed_add(connector, mode);
+
+ connector->display_info.width_mm = mode->width_mm;
+ connector->display_info.height_mm = mode->height_mm;
+ connector->display_info.bus_flags = panel_info->bus_flags;
+
+ drm_display_info_set_bus_formats(&connector->display_info,
+ fann_bus_formats,
+ ARRAY_SIZE(fann_bus_formats));
+ return 1;
+}
+
+static const struct of_device_id fann_of_match[] = {
+ { .compatible = "fannal,c3004", .data = &fann_c3004_panel_info },
+ { /* sentinel */ }
+};
+
+static int fann_panel_enable(struct drm_panel *panel)
+{
+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev);
+ const struct fann_panel_info *panel_info =
+ get_fann_panel_info_from_panel(panel);
+ panel_info->panel_enable_function(dsi);
+
+ return 0;
+}
+
+static int fann_panel_prepare(struct drm_panel *panel)
+{
+ struct fann_panel_data *panel_data =
+ get_fann_panel_data_from_panel(panel);
+
+ /* At lest 10ms needed between power-on and reset-out as RM specifies */
+ usleep_range(10000, 12000);
+
+ if (panel_data->reset) {
+ gpiod_set_value_cansleep(panel_data->reset, 0);
+ /*
+ * 50ms delay after reset-out, as per manufacturer initalization
+ * sequence.
+ */
+ msleep(50);
+ }
+
+ return 0;
+}
+
+static const struct drm_panel_funcs fann_panel_funcs = {
+ .prepare = fann_panel_prepare,
+ .unprepare = fann_panel_unprepare,
+ .enable = fann_panel_enable,
+ .disable = fann_panel_disable,
+ .get_modes = fann_panel_get_modes,
+};
+
+static int fann_panel_probe(struct mipi_dsi_device *dsi)
+{
+ struct device *dev = &dsi->dev;
+ const struct of_device_id *of_id = of_match_device(fann_of_match, dev);
+ const struct fann_panel_info *panel_info = of_id->data;
+ struct fann_panel_data *panel_data;
+ int ret;
+
+ dev_notice(dev, "probe driver called\n");
+ if (!panel_info) {
+ dev_err(dev, "error: probe: get panel_data!\n");
+ return -ENODEV;
+ }
+
+ panel_data = devm_kzalloc(&dsi->dev, sizeof(*panel_data), GFP_KERNEL);
+
+ if (!panel_data)
+ return -ENOMEM;
+
+ panel_data->panel_info = panel_info;
+ panel_data->reset = devm_gpiod_get_optional(
+ dev, "reset", GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
+
+ if (IS_ERR(panel_data->reset)) {
+ ret = PTR_ERR(panel_data->reset);
+ dev_err(dev,
+ "error: probe: get reset GPIO: (%d) Check the fdt\n",
+ ret);
+ return ret;
+ }
+
+ mipi_dsi_set_drvdata(dsi, panel_data);
+
+ dsi->format = panel_info->mipi_dsi_format;
+ dsi->mode_flags = panel_info->mipi_dsi_mode_flags |
+ panel_info->video_mode;
+ dsi->lanes = panel_info->num_of_dsi_lanes;
+
+ gpiod_set_value_cansleep(panel_data->reset, 1);
+
+ drm_panel_init(&panel_data->panel, dev, &fann_panel_funcs,
+ DRM_MODE_CONNECTOR_DSI);
+ dev_set_drvdata(dev, panel_data);
+
+ drm_panel_add(&panel_data->panel);
+
+ ret = mipi_dsi_attach(dsi);
+ if (ret) {
+ drm_panel_remove(&panel_data->panel);
+ dev_err(dev, "error: probe fail: can't attach mipi_dsi!\n");
+ } else
+ dev_notice(dev, "probe driver success. Good job!\n");
+
+ return ret;
+}
+
+// ↑ probe/create functions ↑
+// ↓ generic driver stuff ↓
+
+static struct mipi_dsi_driver fann_panel_driver = {
+ .driver = {
+ .name = "panel-fannal-c3004",
+ .of_match_table = fann_of_match,
+ },
+ .probe = fann_panel_probe,
+ .remove = fann_panel_remove,
+ .shutdown = fann_panel_shutdown,
+};
+
+module_mipi_dsi_driver(fann_panel_driver);
+
+MODULE_AUTHOR("Paulo Pavacic <pavacic.p@gmail.com>");
+MODULE_DESCRIPTION("Fannal C3004 panel driver");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(of, fann_of_match);
--
2.40.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
@ 2023-05-19 16:41 ` Conor Dooley
2023-06-05 14:33 ` Paulo Pavacic
2023-05-20 13:58 ` kernel test robot
1 sibling, 1 reply; 13+ messages in thread
From: Conor Dooley @ 2023-05-19 16:41 UTC (permalink / raw)
To: Paulo Pavacic
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
[-- Attachment #1: Type: text/plain, Size: 3992 bytes --]
Hey Paulo,
On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote:
>
> Added fannal to vendor-prefixes and dt bindings for Fannal C3004.
> Fannal C3004 is a 480x800 MIPI DSI Panel which requires
> DCS initialization sequences with certain delays between certain
> commands.
>
> Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
> ---
> v3 changelog:
> - renamed yml file
> - refactored yml file to describe fannal,c3004
> - added matrix URI to MAINTAINERS
> v2 changelog:
> - revised driver title, now describes purpose
> - revised description, now describes hw
> - revised maintainers, now has only 1 mail
> - removed diacritics from commit/commit author
> - properties/compatible is now enum
> - compatible using only lowercase
> - revised dts example
> - modified MAINTAINERS in this commit (instead of driver commit)
> - dt_bindings_check checked yml
> - checkpatch warning fixed
> ---
> .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++
> .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> MAINTAINERS | 6 ++
> 3 files changed, 83 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
>
> diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> new file mode 100644
> index 000000000000..a86b5ce02aa2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> @@ -0,0 +1,75 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Fannal C3004 MIPI-DSI
> +
> +maintainers:
> + - Paulo Pavacic <pavacic.p@gmail.com>
> +
> +description: |
> + Fannal C3004 is a 480x800 panel which requires DSI DCS
> + initialization sequences.
> +
> +allOf:
> + - $ref: panel-common.yaml#
> +
> +properties:
> + compatible:
> + items:
> + - const: fannal,c3004
> +
> + reg: true
Are there no restrictions on the number of reg entries?
> + reset-gpios: true
Can you put a blank line between properties please?
> +
> + vdd-supply:
> + description: power supply voltage
> + vddio-supply:
> + description: power supply voltage for IO
> +
> + width-mm:
> + description: physical panel width [mm]
> + height-mm:
> + description: physical panel height [mm]
Here and for the supplies too.
> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> index 82d39ab0231b..f962750f630a 100644
> --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
> +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> @@ -462,6 +462,8 @@ patternProperties:
> description: Facebook
> "^fairphone,.*":
> description: Fairphone B.V.
> + "^fannal,.*":
> + description: Fannal Electronics Co., Ltd
This needs to be split into a commit of its own.
Thanks,
Conor.
> "^faraday,.*":
> description: Faraday Technology Corporation
> "^fastrax,.*":
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 5c22c828ab46..62374c8424b9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc
> F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml
> F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c
>
> +DRM DRIVER FOR FANNAL C3004373132019A
> +M: Paulo Pavacic <pavacic.p@gmail.com>
> +S: Maintained
> +C: matrix:r/mipi-dsi-bringup:matrix.org
> +F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
> +
> DRM DRIVER FOR FARADAY TVE200 TV ENCODER
> M: Linus Walleij <linus.walleij@linaro.org>
> S: Maintained
> --
> 2.40.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
2023-05-19 16:41 ` Conor Dooley
@ 2023-05-20 13:58 ` kernel test robot
1 sibling, 0 replies; 13+ messages in thread
From: kernel test robot @ 2023-05-20 13:58 UTC (permalink / raw)
To: Paulo Pavacic, neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: oe-kbuild-all, dri-devel, linux-kernel, devicetree, Paulo Pavacic
[-- Attachment #1: Type: text/plain, Size: 1709 bytes --]
Hi Paulo,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-misc/drm-misc-next]
[also build test WARNING on robh/for-next linus/master v6.4-rc2 next-20230519]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Paulo-Pavacic/dt-bindings-display-panel-add-fannal-c3004/20230519-230337
base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link: https://lore.kernel.org/r/20230519142456.2588145-2-pavacic.p%40gmail.com
patch subject: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
reproduce:
# https://github.com/intel-lab-lkp/linux/commit/bb04b236f1d090bd2f7c5780db6ce4f64d83e3b4
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Paulo-Pavacic/dt-bindings-display-panel-add-fannal-c3004/20230519-230337
git checkout bb04b236f1d090bd2f7c5780db6ce4f64d83e3b4
make menuconfig
# enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS
make htmldocs
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202305202129.6nESZs8s-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> Warning: MAINTAINERS references a file that doesn't exist: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
[-- Attachment #2: config --]
[-- Type: text/plain, Size: 39612 bytes --]
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 6.4.0-rc1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc-11 (Debian 11.3.0-12) 11.3.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=110300
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=24000
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=24000
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
CONFIG_TOOLS_SUPPORT_RELR=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=125
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y
#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_HAVE_KERNEL_ZSTD=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_ZSTD is not set
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
# CONFIG_WATCH_QUEUE is not set
# CONFIG_CROSS_MEMORY_ATTACH is not set
# CONFIG_USELIB is not set
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# end of IRQ subsystem
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
#
# Timers subsystem
#
CONFIG_HZ_PERIODIC=y
# CONFIG_NO_HZ_IDLE is not set
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125
# end of Timers subsystem
CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
#
# BPF subsystem
#
# CONFIG_BPF_SYSCALL is not set
# end of BPF subsystem
CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_DYNAMIC is not set
#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_PSI is not set
# end of CPU/Task time and stats accounting
CONFIG_CPU_ISOLATION=y
#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_TINY_SRCU=y
# end of RCU Subsystem
# CONFIG_IKCONFIG is not set
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=17
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
#
# Scheduler features
#
# end of Scheduler features
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_ARCH_SUPPORTS_INT128=y
# CONFIG_CGROUPS is not set
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_TIME_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_RELAY is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BOOT_CONFIG is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_LD_ORPHAN_WARN=y
CONFIG_LD_ORPHAN_WARN_LEVEL="warn"
CONFIG_SYSCTL=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
# CONFIG_EXPERT is not set
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
CONFIG_RSEQ=y
# CONFIG_EMBEDDED is not set
CONFIG_HAVE_PERF_EVENTS=y
#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# end of Kernel Performance Events And Counters
# CONFIG_PROFILING is not set
# end of General setup
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_MMU=y
CONFIG_ARCH_MMAP_RND_BITS_MIN=28
CONFIG_ARCH_MMAP_RND_BITS_MAX=32
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_AUDIT_ARCH=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=4
CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
#
# Processor type and features
#
# CONFIG_SMP is not set
CONFIG_X86_FEATURE_NAMES=y
CONFIG_X86_MPPARSE=y
# CONFIG_GOLDFISH is not set
# CONFIG_X86_CPU_RESCTRL is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
# CONFIG_SCHED_OMIT_FRAME_POINTER is not set
# CONFIG_HYPERVISOR_GUEST is not set
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
CONFIG_GENERIC_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_IA32_FEAT_CTL=y
CONFIG_X86_VMX_FEATURE_NAMES=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_HYGON=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_ZHAOXIN=y
CONFIG_HPET_TIMER=y
CONFIG_DMI=y
CONFIG_NR_CPUS_RANGE_BEGIN=1
CONFIG_NR_CPUS_RANGE_END=1
CONFIG_NR_CPUS_DEFAULT=1
CONFIG_NR_CPUS=1
CONFIG_UP_LATE_INIT=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
# CONFIG_X86_MCE is not set
#
# Performance monitoring
#
# CONFIG_PERF_EVENTS_AMD_POWER is not set
# CONFIG_PERF_EVENTS_AMD_UNCORE is not set
# CONFIG_PERF_EVENTS_AMD_BRS is not set
# end of Performance monitoring
CONFIG_X86_16BIT=y
CONFIG_X86_ESPFIX64=y
CONFIG_X86_VSYSCALL_EMULATION=y
# CONFIG_X86_IOPL_IOPERM is not set
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not set
# CONFIG_X86_CPUID is not set
# CONFIG_X86_5LEVEL is not set
CONFIG_X86_DIRECT_GBPAGES=y
# CONFIG_AMD_MEM_ENCRYPT is not set
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_X86_UMIP=y
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
# CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set
CONFIG_X86_INTEL_TSX_MODE_OFF=y
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
# CONFIG_ADDRESS_MASKING is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
# CONFIG_LEGACY_VSYSCALL_NONE is not set
# CONFIG_CMDLINE_BOOL is not set
CONFIG_MODIFY_LDT_SYSCALL=y
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
CONFIG_HAVE_LIVEPATCH=y
# end of Processor type and features
CONFIG_CC_HAS_SLS=y
CONFIG_CC_HAS_RETURN_THUNK=y
CONFIG_CC_HAS_ENTRY_PADDING=y
CONFIG_FUNCTION_PADDING_CFI=11
CONFIG_FUNCTION_PADDING_BYTES=16
# CONFIG_SPECULATION_MITIGATIONS is not set
CONFIG_ARCH_HAS_ADD_PAGES=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
#
# Power management and ACPI options
#
# CONFIG_SUSPEND is not set
# CONFIG_PM is not set
CONFIG_ARCH_SUPPORTS_ACPI=y
# CONFIG_ACPI is not set
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# end of CPU Frequency scaling
#
# CPU Idle
#
# CONFIG_CPU_IDLE is not set
# end of CPU Idle
# end of Power management and ACPI options
#
# Bus options (PCI etc.)
#
CONFIG_ISA_DMA_API=y
# end of Bus options (PCI etc.)
#
# Binary Emulations
#
# CONFIG_IA32_EMULATION is not set
# CONFIG_X86_X32_ABI is not set
# end of Binary Emulations
CONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not set
CONFIG_AS_AVX512=y
CONFIG_AS_SHA1_NI=y
CONFIG_AS_SHA256_NI=y
CONFIG_AS_TPAUSE=y
CONFIG_AS_GFNI=y
#
# General architecture-dependent options
#
CONFIG_GENERIC_ENTRY=y
# CONFIG_JUMP_LABEL is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_RUST=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_HAVE_ARCH_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_SECCOMP is not set
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_HAVE_STACKPROTECTOR=y
# CONFIG_STACKPROTECTOR is not set
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_LTO_NONE=y
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
CONFIG_HAVE_CONTEXT_TRACKING_USER=y
CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_MOVE_PUD=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_EXIT_THREAD=y
CONFIG_ARCH_MMAP_RND_BITS=28
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_OBJTOOL=y
CONFIG_HAVE_JUMP_LABEL_HACK=y
CONFIG_HAVE_NOINSTR_HACK=y
CONFIG_HAVE_NOINSTR_VALIDATION=y
CONFIG_HAVE_UACCESS_VALIDATION=y
CONFIG_HAVE_STACK_VALIDATION=y
CONFIG_HAVE_RELIABLE_STACKTRACE=y
# CONFIG_COMPAT_32BIT_TIME is not set
CONFIG_HAVE_ARCH_VMAP_STACK=y
# CONFIG_VMAP_STACK is not set
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
CONFIG_ARCH_HAS_MEM_ENCRYPT=y
CONFIG_HAVE_STATIC_CALL=y
CONFIG_HAVE_STATIC_CALL_INLINE=y
CONFIG_HAVE_PREEMPT_DYNAMIC=y
CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
CONFIG_DYNAMIC_SIGFRAME=y
CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y
#
# GCOV-based kernel profiling
#
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling
CONFIG_HAVE_GCC_PLUGINS=y
# CONFIG_GCC_PLUGINS is not set
CONFIG_FUNCTION_ALIGNMENT_4B=y
CONFIG_FUNCTION_ALIGNMENT_16B=y
CONFIG_FUNCTION_ALIGNMENT=16
# end of General architecture-dependent options
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
# CONFIG_MODULES is not set
CONFIG_BLOCK=y
# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set
# CONFIG_BLK_DEV_BSGLIB is not set
# CONFIG_BLK_DEV_INTEGRITY is not set
# CONFIG_BLK_DEV_ZONED is not set
# CONFIG_BLK_WBT is not set
# CONFIG_BLK_SED_OPAL is not set
# CONFIG_BLK_INLINE_ENCRYPTION is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_EFI_PARTITION=y
# end of Partition Types
#
# IO Schedulers
#
# CONFIG_MQ_IOSCHED_DEADLINE is not set
# CONFIG_MQ_IOSCHED_KYBER is not set
# CONFIG_IOSCHED_BFQ is not set
# end of IO Schedulers
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
CONFIG_INLINE_READ_UNLOCK=y
CONFIG_INLINE_READ_UNLOCK_IRQ=y
CONFIG_INLINE_WRITE_UNLOCK=y
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
#
# Executable file formats
#
# CONFIG_BINFMT_ELF is not set
# CONFIG_BINFMT_SCRIPT is not set
# CONFIG_BINFMT_MISC is not set
CONFIG_COREDUMP=y
# end of Executable file formats
#
# Memory Management options
#
# CONFIG_SWAP is not set
#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SLUB_STATS is not set
# end of SLAB allocator options
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
# CONFIG_COMPAT_BRK is not set
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
# CONFIG_SPARSEMEM_VMEMMAP is not set
CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
# CONFIG_COMPACTION is not set
# CONFIG_PAGE_REPORTING is not set
CONFIG_PHYS_ADDR_T_64BIT=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_WANTS_THP_SWAP=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
CONFIG_NEED_PER_CPU_KM=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
# CONFIG_CMA is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_IDLE_PAGE_TRACKING is not set
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ARCH_HAS_PTE_DEVMAP=y
CONFIG_ZONE_DMA=y
CONFIG_ZONE_DMA32=y
CONFIG_VM_EVENT_COUNTERS=y
# CONFIG_PERCPU_STATS is not set
#
# GUP_TEST needs to have DEBUG_FS enabled
#
# CONFIG_DMAPOOL_TEST is not set
CONFIG_ARCH_HAS_PTE_SPECIAL=y
CONFIG_SECRETMEM=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_USERFAULTFD is not set
# CONFIG_LRU_GEN is not set
CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y
#
# Data Access Monitoring
#
# CONFIG_DAMON is not set
# end of Data Access Monitoring
# end of Memory Management options
# CONFIG_NET is not set
#
# Device Drivers
#
CONFIG_HAVE_EISA=y
# CONFIG_EISA is not set
CONFIG_HAVE_PCI=y
# CONFIG_PCI is not set
# CONFIG_PCCARD is not set
#
# Generic Driver Options
#
# CONFIG_UEVENT_HELPER is not set
# CONFIG_DEVTMPFS is not set
# CONFIG_STANDALONE is not set
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_FW_LOADER_USER_HELPER is not set
# CONFIG_FW_LOADER_COMPRESS is not set
# CONFIG_FW_UPLOAD is not set
# end of Firmware loader
CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set
# end of Generic Driver Options
#
# Bus devices
#
# CONFIG_ARM_INTEGRATOR_LM is not set
# CONFIG_BT1_APB is not set
# CONFIG_BT1_AXI is not set
# CONFIG_HISILICON_LPC is not set
# CONFIG_INTEL_IXP4XX_EB is not set
# CONFIG_QCOM_EBI2 is not set
# CONFIG_MHI_BUS is not set
# CONFIG_MHI_BUS_EP is not set
# end of Bus devices
#
# Firmware Drivers
#
#
# ARM System Control and Management Interface Protocol
#
# CONFIG_ARM_SCMI_PROTOCOL is not set
# end of ARM System Control and Management Interface Protocol
# CONFIG_EDD is not set
CONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DMIID is not set
# CONFIG_DMI_SYSFS is not set
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
# CONFIG_FW_CFG_SYSFS is not set
# CONFIG_SYSFB_SIMPLEFB is not set
# CONFIG_BCM47XX_NVRAM is not set
# CONFIG_GOOGLE_FIRMWARE is not set
#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers
# CONFIG_GNSS is not set
# CONFIG_MTD is not set
# CONFIG_OF is not set
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
# CONFIG_PARPORT is not set
# CONFIG_BLK_DEV is not set
#
# NVME Support
#
# CONFIG_NVME_FC is not set
# end of NVME Support
#
# Misc devices
#
# CONFIG_DUMMY_IRQ is not set
# CONFIG_ATMEL_SSC is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_SMPRO_ERRMON is not set
# CONFIG_SMPRO_MISC is not set
# CONFIG_QCOM_COINCELL is not set
# CONFIG_SRAM is not set
# CONFIG_XILINX_SDFEC is not set
# CONFIG_C2PORT is not set
#
# EEPROM support
#
# CONFIG_EEPROM_93CX6 is not set
# end of EEPROM support
#
# Texas Instruments shared transport line discipline
#
# end of Texas Instruments shared transport line discipline
#
# Altera FPGA firmware download module (requires I2C)
#
# CONFIG_ECHO is not set
# CONFIG_PVPANIC is not set
# end of Misc devices
#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
# end of SCSI device support
# CONFIG_ATA is not set
# CONFIG_MD is not set
# CONFIG_TARGET_CORE is not set
#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# end of IEEE 1394 (FireWire) support
# CONFIG_MACINTOSH_DRIVERS is not set
#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_SPARSEKMAP is not set
# CONFIG_INPUT_MATRIXKMAP is not set
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# CONFIG_RMI4_CORE is not set
#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
# CONFIG_GAMEPORT is not set
# end of Hardware I/O ports
# end of Input device support
#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_LEGACY_TIOCSTI is not set
# CONFIG_LDISC_AUTOLOAD is not set
#
# Serial drivers
#
# CONFIG_SERIAL_8250 is not set
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_AMBA_PL010 is not set
# CONFIG_SERIAL_MESON is not set
# CONFIG_SERIAL_CLPS711X is not set
# CONFIG_SERIAL_SAMSUNG is not set
# CONFIG_SERIAL_TEGRA is not set
# CONFIG_SERIAL_IMX is not set
# CONFIG_SERIAL_UARTLITE is not set
# CONFIG_SERIAL_SH_SCI is not set
# CONFIG_SERIAL_MSM is not set
# CONFIG_SERIAL_VT8500 is not set
# CONFIG_SERIAL_OMAP is not set
# CONFIG_SERIAL_LANTIQ is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_BCM63XX is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_MXS_AUART is not set
# CONFIG_SERIAL_MPS2_UART is not set
# CONFIG_SERIAL_ARC is not set
# CONFIG_SERIAL_FSL_LPUART is not set
# CONFIG_SERIAL_FSL_LINFLEXUART is not set
# CONFIG_SERIAL_ST_ASC is not set
# CONFIG_SERIAL_STM32 is not set
# CONFIG_SERIAL_OWL is not set
# CONFIG_SERIAL_RDA is not set
# CONFIG_SERIAL_SUNPLUS is not set
# end of Serial drivers
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NULL_TTY is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_VIRTIO_CONSOLE is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_ASPEED_KCS_IPMI_BMC is not set
# CONFIG_NPCM7XX_KCS_IPMI_BMC is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_MWAVE is not set
# CONFIG_DEVMEM is not set
# CONFIG_NVRAM is not set
# CONFIG_HANGCHECK_TIMER is not set
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
# end of Character devices
#
# I2C support
#
# CONFIG_I2C is not set
# end of I2C support
# CONFIG_I3C is not set
# CONFIG_SPI is not set
# CONFIG_SPMI is not set
# CONFIG_HSI is not set
# CONFIG_PPS is not set
#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# end of PTP clock support
# CONFIG_PINCTRL is not set
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
# CONFIG_POWER_RESET is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
# CONFIG_BCMA is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_SUN4I_GPADC is not set
# CONFIG_MFD_AT91_USART is not set
# CONFIG_MFD_MADERA is not set
# CONFIG_MFD_EXYNOS_LPASS is not set
# CONFIG_MFD_MXS_LRADC is not set
# CONFIG_MFD_MX25_TSADC is not set
# CONFIG_MFD_KEMPLD is not set
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_PM8XXX is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_RZ_MTU3 is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_MFD_SUN6I_PRCM is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_TI_AM335X_TSCADC is not set
# CONFIG_MFD_TQMX86 is not set
# CONFIG_MFD_STM32_LPTIMER is not set
# CONFIG_MFD_STM32_TIMERS is not set
# end of Multifunction device drivers
# CONFIG_REGULATOR is not set
# CONFIG_RC_CORE is not set
#
# CEC support
#
# CONFIG_MEDIA_CEC_SUPPORT is not set
# end of CEC support
# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#
# CONFIG_TEGRA_HOST1X is not set
# CONFIG_IMX_IPUV3_CORE is not set
# CONFIG_DRM is not set
#
# ARM devices
#
# end of ARM devices
#
# Frame buffer Devices
#
# CONFIG_FB is not set
# CONFIG_MMP_DISP is not set
# end of Frame buffer Devices
#
# Backlight & LCD device support
#
# CONFIG_LCD_CLASS_DEVICE is not set
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
# end of Backlight & LCD device support
#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
# end of Console display driver support
# end of Graphics support
# CONFIG_SOUND is not set
# CONFIG_HID_SUPPORT is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_DMABUF_HEAPS is not set
# end of DMABUF options
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
# CONFIG_VFIO is not set
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support
# CONFIG_GREYBUS is not set
# CONFIG_COMEDI is not set
# CONFIG_STAGING is not set
# CONFIG_CHROME_PLATFORMS is not set
# CONFIG_MELLANOX_PLATFORM is not set
# CONFIG_OLPC_XO175 is not set
# CONFIG_SURFACE_PLATFORMS is not set
# CONFIG_X86_PLATFORM_DEVICES is not set
# CONFIG_COMMON_CLK is not set
# CONFIG_HWSPINLOCK is not set
#
# Clock Source drivers
#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
# CONFIG_BCM2835_TIMER is not set
# CONFIG_BCM_KONA_TIMER is not set
# CONFIG_DAVINCI_TIMER is not set
# CONFIG_DIGICOLOR_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not set
# CONFIG_DW_APB_TIMER is not set
# CONFIG_FTTMR010_TIMER is not set
# CONFIG_IXP4XX_TIMER is not set
# CONFIG_MESON6_TIMER is not set
# CONFIG_OWL_TIMER is not set
# CONFIG_RDA_TIMER is not set
# CONFIG_SUN4I_TIMER is not set
# CONFIG_TEGRA_TIMER is not set
# CONFIG_VT8500_TIMER is not set
# CONFIG_NPCM7XX_TIMER is not set
# CONFIG_ASM9260_TIMER is not set
# CONFIG_CLKSRC_DBX500_PRCMU is not set
# CONFIG_CLPS711X_TIMER is not set
# CONFIG_MXS_TIMER is not set
# CONFIG_NSPIRE_TIMER is not set
# CONFIG_INTEGRATOR_AP_TIMER is not set
# CONFIG_CLKSRC_PISTACHIO is not set
# CONFIG_CLKSRC_STM32_LP is not set
# CONFIG_ARMV7M_SYSTICK is not set
# CONFIG_ATMEL_PIT is not set
# CONFIG_ATMEL_ST is not set
# CONFIG_CLKSRC_SAMSUNG_PWM is not set
# CONFIG_FSL_FTM_TIMER is not set
# CONFIG_OXNAS_RPS_TIMER is not set
# CONFIG_MTK_TIMER is not set
# CONFIG_MTK_CPUX_TIMER is not set
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_RENESAS_OSTM is not set
# CONFIG_SH_TIMER_TMU is not set
# CONFIG_EM_TIMER_STI is not set
# CONFIG_CLKSRC_PXA is not set
# CONFIG_TIMER_IMX_SYS_CTR is not set
# CONFIG_CLKSRC_ST_LPC is not set
# CONFIG_GXP_TIMER is not set
# CONFIG_MSC313E_TIMER is not set
# end of Clock Source drivers
# CONFIG_MAILBOX is not set
# CONFIG_IOMMU_SUPPORT is not set
#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set
# end of Remoteproc drivers
#
# Rpmsg drivers
#
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers
#
# SOC (System On Chip) specific Drivers
#
#
# Amlogic SoC drivers
#
# CONFIG_MESON_CANVAS is not set
# CONFIG_MESON_CLK_MEASURE is not set
# CONFIG_MESON_GX_SOCINFO is not set
# CONFIG_MESON_MX_SOCINFO is not set
# end of Amlogic SoC drivers
#
# Apple SoC drivers
#
# CONFIG_APPLE_SART is not set
# end of Apple SoC drivers
#
# ASPEED SoC drivers
#
# CONFIG_ASPEED_LPC_CTRL is not set
# CONFIG_ASPEED_LPC_SNOOP is not set
# CONFIG_ASPEED_UART_ROUTING is not set
# CONFIG_ASPEED_P2A_CTRL is not set
# CONFIG_ASPEED_SOCINFO is not set
# end of ASPEED SoC drivers
# CONFIG_AT91_SOC_ID is not set
# CONFIG_AT91_SOC_SFR is not set
#
# Broadcom SoC drivers
#
# CONFIG_SOC_BCM63XX is not set
# CONFIG_SOC_BRCMSTB is not set
# end of Broadcom SoC drivers
#
# NXP/Freescale QorIQ SoC drivers
#
# end of NXP/Freescale QorIQ SoC drivers
#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers
#
# i.MX SoC drivers
#
# CONFIG_SOC_IMX8M is not set
# CONFIG_SOC_IMX9 is not set
# end of i.MX SoC drivers
#
# IXP4xx SoC drivers
#
# CONFIG_IXP4XX_QMGR is not set
# CONFIG_IXP4XX_NPE is not set
# end of IXP4xx SoC drivers
#
# Enable LiteX SoC Builder specific drivers
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers
# CONFIG_LOONGSON2_GUTS is not set
#
# MediaTek SoC drivers
#
# CONFIG_MTK_CMDQ is not set
# CONFIG_MTK_DEVAPC is not set
# CONFIG_MTK_INFRACFG is not set
# CONFIG_MTK_MMSYS is not set
# end of MediaTek SoC drivers
# CONFIG_WPCM450_SOC is not set
#
# Qualcomm SoC drivers
#
# CONFIG_QCOM_GENI_SE is not set
# CONFIG_QCOM_GSBI is not set
# CONFIG_QCOM_LLCC is not set
# CONFIG_QCOM_RAMP_CTRL is not set
# CONFIG_QCOM_RPMH is not set
# CONFIG_QCOM_SPM is not set
# CONFIG_QCOM_ICC_BWMON is not set
# end of Qualcomm SoC drivers
# CONFIG_SOC_RENESAS is not set
# CONFIG_ROCKCHIP_GRF is not set
# CONFIG_SOC_SAMSUNG is not set
# CONFIG_SOC_TI is not set
# CONFIG_UX500_SOC_ID is not set
#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers
# CONFIG_PM_DEVFREQ is not set
# CONFIG_EXTCON is not set
# CONFIG_MEMORY is not set
# CONFIG_IIO is not set
# CONFIG_PWM is not set
#
# IRQ chip support
#
# CONFIG_RENESAS_INTC_IRQPIN is not set
# CONFIG_RENESAS_IRQC is not set
# CONFIG_RENESAS_RZA1_IRQC is not set
# CONFIG_RENESAS_RZG2L_IRQC is not set
# CONFIG_SL28CPLD_INTC is not set
# CONFIG_TS4800_IRQ is not set
# CONFIG_INGENIC_TCU_IRQ is not set
# CONFIG_IRQ_UNIPHIER_AIDET is not set
# CONFIG_MESON_IRQ_GPIO is not set
# CONFIG_IMX_IRQSTEER is not set
# CONFIG_IMX_INTMUX is not set
# CONFIG_EXYNOS_IRQ_COMBINER is not set
# CONFIG_MST_IRQ is not set
# CONFIG_MCHP_EIC is not set
# CONFIG_SUNPLUS_SP7021_INTC is not set
# end of IRQ chip support
# CONFIG_IPACK_BUS is not set
# CONFIG_RESET_CONTROLLER is not set
#
# PHY Subsystem
#
# CONFIG_GENERIC_PHY is not set
# CONFIG_PHY_PISTACHIO_USB is not set
# CONFIG_PHY_CAN_TRANSCEIVER is not set
#
# PHY drivers for Broadcom platforms
#
# CONFIG_PHY_BCM63XX_USBH is not set
# CONFIG_BCM_KONA_USB2_PHY is not set
# end of PHY drivers for Broadcom platforms
# CONFIG_PHY_HI6220_USB is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HISTB_COMBPHY is not set
# CONFIG_PHY_HISI_INNO_USB2 is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
# CONFIG_PHY_PXA_USB is not set
# CONFIG_PHY_MMP3_USB is not set
# CONFIG_PHY_MMP3_HSIC is not set
# CONFIG_PHY_MT7621_PCI is not set
# CONFIG_PHY_RALINK_USB is not set
# CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set
# CONFIG_PHY_RCAR_GEN3_USB3 is not set
# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set
# CONFIG_PHY_ROCKCHIP_PCIE is not set
# CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set
# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
# CONFIG_PHY_SAMSUNG_USB2 is not set
# CONFIG_PHY_ST_SPEAR1310_MIPHY is not set
# CONFIG_PHY_ST_SPEAR1340_MIPHY is not set
# CONFIG_PHY_TEGRA194_P2U is not set
# CONFIG_PHY_DA8XX_USB is not set
# CONFIG_OMAP_CONTROL_PHY is not set
# CONFIG_TI_PIPE3 is not set
# CONFIG_PHY_INTEL_KEEMBAY_EMMC is not set
# CONFIG_PHY_INTEL_KEEMBAY_USB is not set
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# CONFIG_PHY_XILINX_ZYNQMP is not set
# end of PHY Subsystem
# CONFIG_POWERCAP is not set
# CONFIG_MCB is not set
#
# Performance monitor support
#
# CONFIG_ARM_CCN is not set
# CONFIG_ARM_CMN is not set
# CONFIG_FSL_IMX8_DDR_PMU is not set
# CONFIG_XGENE_PMU is not set
# CONFIG_ARM_DMC620_PMU is not set
# CONFIG_MARVELL_CN10K_TAD_PMU is not set
# CONFIG_ALIBABA_UNCORE_DRW_PMU is not set
# CONFIG_MARVELL_CN10K_DDR_PMU is not set
# CONFIG_MESON_DDR_PMU is not set
# end of Performance monitor support
# CONFIG_RAS is not set
#
# Android
#
# CONFIG_ANDROID_BINDER_IPC is not set
# end of Android
# CONFIG_DAX is not set
# CONFIG_NVMEM is not set
#
# HW tracing support
#
# CONFIG_STM is not set
# CONFIG_INTEL_TH is not set
# end of HW tracing support
# CONFIG_FPGA is not set
# CONFIG_TEE is not set
# CONFIG_SIOX is not set
# CONFIG_SLIMBUS is not set
# CONFIG_INTERCONNECT is not set
# CONFIG_COUNTER is not set
# CONFIG_PECI is not set
# CONFIG_HTE is not set
# end of Device Drivers
#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
# CONFIG_VALIDATE_FS_PARSER is not set
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_EXT4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
# CONFIG_F2FS_FS is not set
CONFIG_EXPORTFS=y
# CONFIG_EXPORTFS_BLOCK_OPS is not set
CONFIG_FILE_LOCKING=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FS_VERITY is not set
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY_USER is not set
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_FUSE_FS is not set
# CONFIG_OVERLAY_FS is not set
#
# Caches
#
# CONFIG_FSCACHE is not set
# end of Caches
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
# end of CD-ROM/DVD Filesystems
#
# DOS/FAT/EXFAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EXFAT_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS3_FS is not set
# end of DOS/FAT/EXFAT/NT Filesystems
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_PROC_KCORE is not set
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
# CONFIG_PROC_CHILDREN is not set
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
# CONFIG_TMPFS is not set
# CONFIG_HUGETLBFS is not set
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
# CONFIG_CONFIGFS_FS is not set
# end of Pseudo filesystems
# CONFIG_MISC_FILESYSTEMS is not set
# CONFIG_NLS is not set
# CONFIG_UNICODE is not set
CONFIG_IO_WQ=y
# end of File systems
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_FORTIFY_SOURCE is not set
# CONFIG_STATIC_USERMODEHELPER is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf"
#
# Kernel hardening options
#
#
# Memory initialization
#
CONFIG_INIT_STACK_NONE=y
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization
CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options
# CONFIG_CRYPTO is not set
#
# Library routines
#
# CONFIG_PACKING is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
# CONFIG_CORDIC is not set
# CONFIG_PRIME_NUMBERS is not set
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y
#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CRYPTO_LIB_CHACHA is not set
# CONFIG_CRYPTO_LIB_CURVE25519 is not set
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
# CONFIG_CRYPTO_LIB_POLY1305 is not set
# end of Crypto library routines
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC64_ROCKSOFT is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC64 is not set
# CONFIG_CRC4 is not set
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
# CONFIG_CRC8 is not set
# CONFIG_RANDOM32_SELFTEST is not set
# CONFIG_XZ_DEC is not set
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_SWIOTLB=y
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_IRQ_POLL is not set
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_TIME_NS=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y
CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
CONFIG_ARCH_HAS_COPY_MC=y
CONFIG_ARCH_STACKWALK=y
CONFIG_STACKDEPOT=y
CONFIG_SBITMAP=y
# CONFIG_PARMAN is not set
# CONFIG_OBJAGG is not set
# end of Library routines
#
# Kernel hacking
#
#
# printk and dmesg options
#
# CONFIG_PRINTK_TIME is not set
# CONFIG_PRINTK_CALLER is not set
# CONFIG_STACKTRACE_BUILD_ID is not set
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_DYNAMIC_DEBUG_CORE is not set
# CONFIG_SYMBOLIC_ERRNAME is not set
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options
# CONFIG_DEBUG_KERNEL is not set
#
# Compile-time checks and compiler options
#
CONFIG_AS_HAS_NON_CONST_LEB128=y
CONFIG_FRAME_WARN=2048
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_HEADERS_INSTALL is not set
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_OBJTOOL=y
# end of Compile-time checks and compiler options
#
# Generic Kernel Debugging Instruments
#
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_FS is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
# CONFIG_UBSAN is not set
CONFIG_HAVE_ARCH_KCSAN=y
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments
#
# Networking Debugging
#
# end of Networking Debugging
#
# Memory Debugging
#
# CONFIG_PAGE_EXTENSION is not set
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_PAGE_TABLE_CHECK is not set
# CONFIG_PAGE_POISONING is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
# CONFIG_DEBUG_WX is not set
CONFIG_GENERIC_PTDUMP=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
# CONFIG_DEBUG_VM_PGTABLE is not set
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y
CONFIG_HAVE_ARCH_KASAN=y
CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# CONFIG_KASAN is not set
CONFIG_HAVE_ARCH_KFENCE=y
# CONFIG_KFENCE is not set
CONFIG_HAVE_ARCH_KMSAN=y
# end of Memory Debugging
#
# Debug Oops, Lockups and Hangs
#
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y
# end of Debug Oops, Lockups and Hangs
#
# Scheduler Debugging
#
# end of Scheduler Debugging
# CONFIG_DEBUG_TIMEKEEPING is not set
#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)
# CONFIG_DEBUG_IRQFLAGS is not set
CONFIG_STACKTRACE=y
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
#
# Debug kernel data structures
#
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
# end of Debug kernel data structures
#
# RCU Debugging
#
# end of RCU Debugging
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_HAVE_RETHOOK=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_FENTRY=y
CONFIG_HAVE_OBJTOOL_MCOUNT=y
CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y
CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
#
# x86 Debugging
#
# CONFIG_X86_VERBOSE_BOOTUP is not set
CONFIG_EARLY_PRINTK=y
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_UNWINDER_ORC=y
# CONFIG_UNWINDER_FRAME_POINTER is not set
# end of x86 Debugging
#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
CONFIG_ARCH_HAS_KCOV=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
# CONFIG_KCOV is not set
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_ARCH_USE_MEMTEST=y
# CONFIG_MEMTEST is not set
# end of Kernel Testing and Coverage
#
# Rust hacking
#
# end of Rust hacking
# end of Kernel hacking
#
# Documentation
#
CONFIG_WARN_MISSING_DOCUMENTS=y
CONFIG_WARN_ABI_ERRORS=y
# end of Documentation
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel
2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic
@ 2023-05-22 8:55 ` neil.armstrong
2023-05-23 17:33 ` Linus Walleij
1 sibling, 0 replies; 13+ messages in thread
From: neil.armstrong @ 2023-05-22 8:55 UTC (permalink / raw)
To: Paulo Pavacic, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: dri-devel, linux-kernel, devicetree
Hi,
On 19/05/2023 16:24, Paulo Pavacic wrote:
>
> Fannal C3004 is a 480x800 display made by fannal that requires
> DCS initialization sequences.
>
> Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
> ---
> v2 changelog:
> - renamed from panel-mipi-dsi-bringup
> - only one MAINTAINER e-mail
> ---
> MAINTAINERS | 1 +
> drivers/gpu/drm/panel/Kconfig | 11 +
> drivers/gpu/drm/panel/Makefile | 1 +
> drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 +++++++++++++++++++++
> 4 files changed, 418 insertions(+)
> create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 62374c8424b9..93fc1ae6832f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -6432,6 +6432,7 @@ M: Paulo Pavacic <pavacic.p@gmail.com>
> S: Maintained
> C: matrix:r/mipi-dsi-bringup:matrix.org
> F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
> +F: drivers/gpu/drm/panel/panel-fannal-c3004.c
>
> DRM DRIVER FOR FARADAY TVE200 TV ENCODER
> M: Linus Walleij <linus.walleij@linaro.org>
> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
> index 2b9d6db7860b..a1041c1e6bf6 100644
> --- a/drivers/gpu/drm/panel/Kconfig
> +++ b/drivers/gpu/drm/panel/Kconfig
> @@ -144,6 +144,17 @@ config DRM_PANEL_ELIDA_KD35T133
> KD35T133 controller for 320x480 LCD panels with MIPI-DSI
> system interfaces.
>
> +config DRM_PANEL_FANNAL_C3004
> + tristate "Fannal C3004 panel"
> + depends on OF
> + depends on DRM_MIPI_DSI
> + help
> + Say Y here if you want to enable support for the Fannal C3004
> + 2-lane 480x800 MIPI DSI panel which requires initialization
> + sequence.
> +
> + If M is selected the module will be called panel-fannal-c3004.
> +
> config DRM_PANEL_FEIXIN_K101_IM2BA02
> tristate "Feixin K101 IM2BA02 panel"
> depends on OF
> diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
> index ff169781e82d..13c0f00038b5 100644
> --- a/drivers/gpu/drm/panel/Makefile
> +++ b/drivers/gpu/drm/panel/Makefile
> @@ -12,6 +12,7 @@ obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
> obj-$(CONFIG_DRM_PANEL_EDP) += panel-edp.o
> obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o
> obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o
> +obj-$(CONFIG_DRM_PANEL_FANNAL_C3004) += panel-fannal-c3004.o
> obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o
> obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o
> obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
> diff --git a/drivers/gpu/drm/panel/panel-fannal-c3004.c b/drivers/gpu/drm/panel/panel-fannal-c3004.c
> new file mode 100644
> index 000000000000..decbd0c59093
> --- /dev/null
> +++ b/drivers/gpu/drm/panel/panel-fannal-c3004.c
> @@ -0,0 +1,405 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * MIPI DSI driver for Fannal C3004.
> + * Copyright (C) 2023, Zenitel
> + * Author: Paulo Pavacic <pavacic.p@gmail.com>
> + */
> +
> +// ↓ include headers, static values, static functions ↓
This comment is unneeded, please remove it
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> +#include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
> +#include <linux/media-bus-format.h>
> +
> +#include <video/mipi_display.h>
> +#include <video/of_videomode.h>
> +#include <video/videomode.h>
> +
> +#include <drm/drm_crtc.h>
> +#include <drm/drm_mipi_dsi.h>
> +#include <drm/drm_panel.h>
> +
> +static const struct fann_panel_info fann_c3004_panel_info;
Please use fannal everywhere instead of fann
> +
> +struct fann_panel_info {
> + const struct drm_display_mode *display_mode;
> + u32 num_of_dsi_lanes;
> + u32 mipi_dsi_format;
> + u32 mipi_dsi_mode_flags;
> + u32 bus_flags;
> + u32 video_mode;
> + void (*panel_enable_function)(struct mipi_dsi_device *dsi);
> +};
> +
> +struct fann_panel_data {
> + const struct fann_panel_info *panel_info;
> + struct drm_panel panel;
> + struct gpio_desc *reset;
> +};
> +
> +static struct fann_panel_data *
> +get_fann_panel_data_from_panel(struct drm_panel *panel)
> +{
> + return container_of(panel, struct fann_panel_data, panel);
> +}
> +
> +static const struct fann_panel_info *
> +get_fann_panel_info_from_panel(struct drm_panel *panel)
> +{
> + return get_fann_panel_data_from_panel(panel)->panel_info;
> +}
> +
> +enum FANN_VIDEO_MODES_ENUM {
> + FANN_BURST,
> + FANN_SYNC_EVENT,
> + FANN_SYNC_PULSE,
> + FANN_COMMAND,
> +};
> +
> +static const u32 FANN_VIDEO_MODES[] = {
> + MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO, //BURST
> + MIPI_DSI_MODE_VIDEO, //SYNC_EVENT
> + MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO, //SYNC_PULSE
> + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH //COMMAND MODE
> +};
Do not use this, please use "MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO" directly instead
of this table and enums.
> +
> +//macro for writing to DSI
> +#define WRITE_DSI(dsi, seq...) \
> + { \
> + const u8 d[] = { seq }; \
> + int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \
> + if (ret < 0) { \
> + dev_err(&dsi->dev, \
> + "Error (%d) occurred while trying to" \
> + " write MIPI DSI command: %s (decimal value)\n", \
> + ret, d); \
> + } \
> + }
Please use mipi_dsi_generic_write_seq() instead of this macro.
> +
> +// ↑ include headers, static values, static functions ↑
> +// ↓ INTERACTION whole section: panel specific values, add panel as is shown ↓
Remove all those comments
> +
> +/**
> + * @brief Adding new panel
> + * Includes but isn't limited to following steps:
> + * 1. define new `fann__yourpanel_display_mode` with correct timings
> + * 2. define new `fann_panel_yourpanel_enable_function`
> + * 3. glue everything with fann_yourpanel_panel_info and set that srtucts values
> + * 4. add .compatible = "you,yourpanel", .data = &fann_yourpanel_panel_info }
> + */
> +
> +static const u32 fann_bus_formats[] = {
> + MEDIA_BUS_FMT_RGB888_1X24,
> +};
> +
> +// resolution 480p x 800p, 56mmx93mm
> +static const struct drm_display_mode fann_c3004_display_mode = {
> + .clock = 27000,
> + .hdisplay = 480, // display height pixels
> + .hsync_start = 480 + 30, // hdisplay + HBP
> + .hsync_end = 480 + 30 + 8, // hdisplay + HBP + HSync
> + .htotal = 480 + 30 + 8 + 30, // hdisplay + HBP + HSync + HFP
> + .vdisplay = 800, // display width pixels
> + .vsync_start = 800 + 20, // vdisplay + VBP
> + .vsync_end = 800 + 20 + 8, // vdisplay + VBP + VSync
> + .vtotal = 800 + 20 + 8 + 20, // vdisplay + VBP + VSync + VFP
> + .width_mm = 93,
> + .height_mm = 56,
> + .flags = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
> +};
> +
> +static void fann_panel_fannal_c3004_enable_function(struct mipi_dsi_device *dsi)
> +{
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
> + WRITE_DSI(dsi, 0xEF, 0x08);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x10);
> + WRITE_DSI(dsi, 0xC0, 0x63, 0x00);
> + WRITE_DSI(dsi, 0xC1, 0x0A, 0x0C);
> + WRITE_DSI(dsi, 0xC2, 0x31, 0x08);
> + WRITE_DSI(dsi, 0xCC, 0x18);
> +
> + WRITE_DSI(dsi, 0xB0, 0x00, 0x08, 0x10, 0x0E, 0x11, 0x07, 0x08, 0x08,
> + 0x08, 0x25, 0x04, 0x12, 0x0F, 0x2C, 0x30, 0x1F);
> + WRITE_DSI(dsi, 0xB1, 0x00, 0x11, 0x18, 0x0C, 0x10, 0x05, 0x07, 0x09,
> + 0x08, 0x24, 0x04, 0x11, 0x10, 0x2B, 0x30, 0x1F);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x11);
> + WRITE_DSI(dsi, 0xB0, 0x4D);
> + WRITE_DSI(dsi, 0xB1, 0x39);
> + WRITE_DSI(dsi, 0xB2, 0x87);
> + WRITE_DSI(dsi, 0xB3, 0x80);
> + WRITE_DSI(dsi, 0xB5, 0x47);
> + WRITE_DSI(dsi, 0xB7, 0x8A);
> + WRITE_DSI(dsi, 0xB8, 0x20);
> + WRITE_DSI(dsi, 0xB9, 0x10, 0x13);
> + WRITE_DSI(dsi, 0xC1, 0x78);
> + WRITE_DSI(dsi, 0xC2, 0x78);
> + WRITE_DSI(dsi, 0xD0, 0x88);
> +
> + //PANEL
> + WRITE_DSI(dsi, 0xE0, 0x00, 0x00, 0x02);
> + WRITE_DSI(dsi, 0xE1, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
> + 0x00, 0x20, 0x20);
> + WRITE_DSI(dsi, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + 0x00, 0x00, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0xE3, 0x00, 0x00, 0x33, 0x00);
> + WRITE_DSI(dsi, 0xE4, 0x22, 0x00);
> + WRITE_DSI(dsi, 0xE5, 0x04, 0x34, 0xAA, 0xAA, 0x06, 0x34, 0xAA, 0xAA,
> + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0xE6, 0x00, 0x00, 0x33, 0x00);
> + WRITE_DSI(dsi, 0xE7, 0x22, 0x00);
> + WRITE_DSI(dsi, 0xE8, 0x05, 0x34, 0xAA, 0xAA, 0x07, 0x34, 0xAA, 0xAA,
> + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0xEB, 0x02, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0xEC, 0x00, 0x00);
> + WRITE_DSI(dsi, 0xED, 0xFA, 0x45, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
> + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x54, 0xAF);
> + WRITE_DSI(dsi, 0xEF, 0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
> + WRITE_DSI(dsi, 0xE8, 0x00, 0x0E);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0x11); //MIPI_DCS_EXIT_SLEEP_MODE
> +
> + msleep(600);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
> + WRITE_DSI(dsi, 0xE8, 0x00, 0x0C);
> + msleep(50);
> + WRITE_DSI(dsi, 0xE8, 0x00, 0x00);
> +
> + WRITE_DSI(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00);
> + WRITE_DSI(dsi, 0x29); //MIPI_DCS_SET_DISPLAY_ON
> + msleep(100);
> +}
> +
> +static const struct fann_panel_info fann_c3004_panel_info = {
> + .display_mode = &fann_c3004_display_mode,
> + .num_of_dsi_lanes = 2, //how many wires are connected to the panel
> + .video_mode = FANN_VIDEO_MODES[FANN_SYNC_PULSE],
> + .mipi_dsi_format = MIPI_DSI_FMT_RGB888,
> + .mipi_dsi_mode_flags =
> + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_VSYNC_FLUSH |
> + MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_NO_EOT_PACKET,
> + .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> + .panel_enable_function = &fann_panel_fannal_c3004_enable_function
> +};
If you handle a single panel, this isn't necessary and you should set all those
values into probe and panel ops
> +
> +// ↑ INTERACTION: panel specific values, add panel as is show in the example ↑
> +// ↓ remove driver/cleanup ↓
> +static void fann_panel_remove(struct mipi_dsi_device *dsi)
> +{
> + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi);
> + struct device *dev = &dsi->dev;
> + int ret;
> +
> + ret = mipi_dsi_detach(dsi);
> + if (ret)
> + dev_err(dev, "error: disable: mipi detach (%d)\n", ret);
> +
> + drm_panel_remove(&panel_data->panel);
> +}
> +
> +static int fann_panel_disable(struct drm_panel *panel)
> +{
> + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev);
> + struct device *dev = panel->dev;
> + int ret;
> +
> + dsi->mode_flags |= MIPI_DSI_MODE_LPM;
> +
> + ret = mipi_dsi_dcs_set_display_off(dsi);
> + if (ret < 0) {
> + dev_err(dev, "error: disable: turn display OFF (%d)\n", ret);
> + return ret;
> + }
> +
> + usleep_range(5000, 10000);
> +
> + ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
> + if (ret < 0) {
> + dev_err(dev, "error: disable: enter sleep mode (%d)\n", ret);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static int fann_panel_unprepare(struct drm_panel *panel)
> +{
> + struct fann_panel_data *panel_data =
> + get_fann_panel_data_from_panel(panel);
> +
> + if (panel_data->reset) {
> + gpiod_set_value_cansleep(panel_data->reset, 1);
> + usleep_range(15000, 17000);
> + gpiod_set_value_cansleep(panel_data->reset, 0);
> + }
> +
> + return 0;
> +}
> +
> +static void fann_panel_shutdown(struct mipi_dsi_device *dsi)
> +{
> + struct fann_panel_data *panel_data = mipi_dsi_get_drvdata(dsi);
> +
> + fann_panel_disable(&panel_data->panel);
> + fann_panel_unprepare(&panel_data->panel);
> +}
> +
> +// ↑ remove driver/cleanup ↑
> +// ↓ probe/create functions ↓
> +
> +static int fann_panel_get_modes(struct drm_panel *panel,
> + struct drm_connector *connector)
> +{
> + struct drm_display_mode *mode;
> + const struct fann_panel_info *panel_info =
> + get_fann_panel_info_from_panel(panel);
> + const struct drm_display_mode *panel_display_mode =
> + panel_info->display_mode;
Using this panel_display_mode makes it complex for nothing, please
directly use fann_c3004_display_mode here.
> +
> + mode = drm_mode_duplicate(connector->dev, panel_display_mode);
> + if (!mode) {
> + dev_err(panel->dev, "error: get_modes: add drm mode %ux%u@%u\n",
> + panel_display_mode->hdisplay,
> + panel_display_mode->vdisplay,
> + drm_mode_vrefresh(panel_display_mode));
> + return -ENOMEM;
> + }
> +
> + drm_mode_set_name(mode);
> + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
> + drm_mode_probed_add(connector, mode);
> +
> + connector->display_info.width_mm = mode->width_mm;
> + connector->display_info.height_mm = mode->height_mm;
> + connector->display_info.bus_flags = panel_info->bus_flags;
Set the bus flasg directly here
> +
> + drm_display_info_set_bus_formats(&connector->display_info,
> + fann_bus_formats,
> + ARRAY_SIZE(fann_bus_formats)); > + return 1;
> +}
> +
> +static const struct of_device_id fann_of_match[] = {
> + { .compatible = "fannal,c3004", .data = &fann_c3004_panel_info },
Please introduce such data when you'll need to handle multiple panels,
for now it's mostly unnecessary code.
> + { /* sentinel */ }
> +};
> +
> +static int fann_panel_enable(struct drm_panel *panel)
> +{
> + struct mipi_dsi_device *dsi = to_mipi_dsi_device(panel->dev);
> + const struct fann_panel_info *panel_info =
> + get_fann_panel_info_from_panel(panel);
> + panel_info->panel_enable_function(dsi);
> +
> + return 0;
> +}
> +
> +static int fann_panel_prepare(struct drm_panel *panel)
> +{
> + struct fann_panel_data *panel_data =
> + get_fann_panel_data_from_panel(panel);
> +
> + /* At lest 10ms needed between power-on and reset-out as RM specifies */
> + usleep_range(10000, 12000);
> +
> + if (panel_data->reset) {
> + gpiod_set_value_cansleep(panel_data->reset, 0);
> + /*
> + * 50ms delay after reset-out, as per manufacturer initalization
> + * sequence.
> + */
> + msleep(50);
> + }
> +
> + return 0;
> +}
> +
> +static const struct drm_panel_funcs fann_panel_funcs = {
> + .prepare = fann_panel_prepare,
> + .unprepare = fann_panel_unprepare,
> + .enable = fann_panel_enable,
> + .disable = fann_panel_disable,
> + .get_modes = fann_panel_get_modes,
> +};
> +
> +static int fann_panel_probe(struct mipi_dsi_device *dsi)
> +{
> + struct device *dev = &dsi->dev;
> + const struct of_device_id *of_id = of_match_device(fann_of_match, dev);
> + const struct fann_panel_info *panel_info = of_id->data;
> + struct fann_panel_data *panel_data;
> + int ret;
> +
> + dev_notice(dev, "probe driver called\n");
Drop those prints.
> + if (!panel_info) {
> + dev_err(dev, "error: probe: get panel_data!\n");
> + return -ENODEV;
> + }
> +
> + panel_data = devm_kzalloc(&dsi->dev, sizeof(*panel_data), GFP_KERNEL);
> +
> + if (!panel_data)
> + return -ENOMEM;
> +
> + panel_data->panel_info = panel_info;
> + panel_data->reset = devm_gpiod_get_optional(
> + dev, "reset", GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
> +
> + if (IS_ERR(panel_data->reset)) {
> + ret = PTR_ERR(panel_data->reset);
> + dev_err(dev,
> + "error: probe: get reset GPIO: (%d) Check the fdt\n",
> + ret);
> + return ret;
> + }
> +
> + mipi_dsi_set_drvdata(dsi, panel_data);
> +
> + dsi->format = panel_info->mipi_dsi_format;
> + dsi->mode_flags = panel_info->mipi_dsi_mode_flags |
> + panel_info->video_mode;
> + dsi->lanes = panel_info->num_of_dsi_lanes;
> +
> + gpiod_set_value_cansleep(panel_data->reset, 1);
> +
> + drm_panel_init(&panel_data->panel, dev, &fann_panel_funcs,
> + DRM_MODE_CONNECTOR_DSI);
> + dev_set_drvdata(dev, panel_data);
> +
> + drm_panel_add(&panel_data->panel);
> +
> + ret = mipi_dsi_attach(dsi);
> + if (ret) {
> + drm_panel_remove(&panel_data->panel);
> + dev_err(dev, "error: probe fail: can't attach mipi_dsi!\n");
> + } else
> + dev_notice(dev, "probe driver success. Good job!\n");
> +
> + return ret;
> +}
> +
> +// ↑ probe/create functions ↑
> +// ↓ generic driver stuff ↓
> +
> +static struct mipi_dsi_driver fann_panel_driver = {
> + .driver = {
> + .name = "panel-fannal-c3004",
> + .of_match_table = fann_of_match,
> + },
> + .probe = fann_panel_probe,
> + .remove = fann_panel_remove,
> + .shutdown = fann_panel_shutdown,
> +};
> +
> +module_mipi_dsi_driver(fann_panel_driver);
> +
> +MODULE_AUTHOR("Paulo Pavacic <pavacic.p@gmail.com>");
> +MODULE_DESCRIPTION("Fannal C3004 panel driver");
> +MODULE_LICENSE("GPL");
> +MODULE_DEVICE_TABLE(of, fann_of_match);
I understand you want to write a clean panel driver for learning purposes,
but having unnecessary code isn't appreciated in the Linux codebase,
instead make a simple and readble driver with the state-of-the-art architecture
and helpers.
Thanks,
Neil
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/2] drm/panel: add fannal c3004 panel
2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic
@ 2023-05-22 8:55 ` neil.armstrong
2023-05-23 13:15 ` Paulo Pavacic
2 siblings, 1 reply; 13+ messages in thread
From: neil.armstrong @ 2023-05-22 8:55 UTC (permalink / raw)
To: Paulo Pavacic, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt
Cc: dri-devel, linux-kernel, devicetree
On 19/05/2023 16:24, Paulo Pavacic wrote:
> Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required.
By curiosity, on which board is this panel used ?
Neil
>
> In previous discussions for device tree [1] [2] and device driver [3] were named mipi-dsi-bringup.
>
> [1] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn3t-giVipb5oH_3mzQZbnXbDqqz0WEg8uAmo-1W2uKzFg@mail.gmail.com/
> [2] https://patchwork.ozlabs.org/project/devicetree-bindings/patch/CAO9szn18KsR0c+U8EEY1=xnmsKMxy6SEArMUic0z=aYJDVwWCQ@mail.gmail.com/
> [3] https://lists.freedesktop.org/archives/dri-devel/2023-May/404775.html
>
> Paulo Pavacic (2):
> dt-bindings: display: panel: add fannal,c3004
> drm/panel-fannal-c3004: Add fannal c3004 DSI panel
>
> .../bindings/display/panel/fannal,c3004.yaml | 75 ++++
> .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> MAINTAINERS | 7 +
> drivers/gpu/drm/panel/Kconfig | 11 +
> drivers/gpu/drm/panel/Makefile | 1 +
> drivers/gpu/drm/panel/panel-fannal-c3004.c | 405 ++++++++++++++++++
> 6 files changed, 501 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> create mode 100644 drivers/gpu/drm/panel/panel-fannal-c3004.c
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/2] drm/panel: add fannal c3004 panel
2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong
@ 2023-05-23 13:15 ` Paulo Pavacic
0 siblings, 0 replies; 13+ messages in thread
From: Paulo Pavacic @ 2023-05-23 13:15 UTC (permalink / raw)
To: neil.armstrong
Cc: sam, airlied, daniel, robh+dt, krzysztof.kozlowski+dt, conor+dt,
dri-devel, linux-kernel, devicetree
Hello,
pon, 22. svi 2023. u 10:55 <neil.armstrong@linaro.org> napisao je:
>
> On 19/05/2023 16:24, Paulo Pavacic wrote:
> > Fannal C3004 is a 2 lane MIPI DSI 480x800 panel which requires initialization with DSI DCS commands. After some commands delay is required.
>
> By curiosity, on which board is this panel used ?
>
We are using custom board with IMX8MM.
> Neil
Paulo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel
2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic
2023-05-22 8:55 ` neil.armstrong
@ 2023-05-23 17:33 ` Linus Walleij
1 sibling, 0 replies; 13+ messages in thread
From: Linus Walleij @ 2023-05-23 17:33 UTC (permalink / raw)
To: Paulo Pavacic
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
On Fri, May 19, 2023 at 4:25 PM Paulo Pavacic <pavacic.p@gmail.com> wrote:
> +//macro for writing to DSI
> +#define WRITE_DSI(dsi, seq...) \
> + { \
> + const u8 d[] = { seq }; \
> + int ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \
> + if (ret < 0) { \
> + dev_err(&dsi->dev, \
> + "Error (%d) occurred while trying to" \
> + " write MIPI DSI command: %s (decimal value)\n", \
> + ret, d); \
> + } \
> + }
As said for the other patch, this reinvents mipi_dsi_dcs_write_seq()
so use that instead.
mipi_dsi_dcs_write_seq(dsi, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x13);
etc.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-05-19 16:41 ` Conor Dooley
@ 2023-06-05 14:33 ` Paulo Pavacic
2023-06-05 14:43 ` Conor Dooley
0 siblings, 1 reply; 13+ messages in thread
From: Paulo Pavacic @ 2023-06-05 14:33 UTC (permalink / raw)
To: Conor Dooley
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
Hello Conor,
pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je:
>
> Hey Paulo,
>
> On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote:
> >
> > Added fannal to vendor-prefixes and dt bindings for Fannal C3004.
> > Fannal C3004 is a 480x800 MIPI DSI Panel which requires
> > DCS initialization sequences with certain delays between certain
> > commands.
> >
> > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
> > ---
> > v3 changelog:
> > - renamed yml file
> > - refactored yml file to describe fannal,c3004
> > - added matrix URI to MAINTAINERS
> > v2 changelog:
> > - revised driver title, now describes purpose
> > - revised description, now describes hw
> > - revised maintainers, now has only 1 mail
> > - removed diacritics from commit/commit author
> > - properties/compatible is now enum
> > - compatible using only lowercase
> > - revised dts example
> > - modified MAINTAINERS in this commit (instead of driver commit)
> > - dt_bindings_check checked yml
> > - checkpatch warning fixed
> > ---
> > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++
> > .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> > MAINTAINERS | 6 ++
> > 3 files changed, 83 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > new file mode 100644
> > index 000000000000..a86b5ce02aa2
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > @@ -0,0 +1,75 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Fannal C3004 MIPI-DSI
> > +
> > +maintainers:
> > + - Paulo Pavacic <pavacic.p@gmail.com>
> > +
> > +description: |
> > + Fannal C3004 is a 480x800 panel which requires DSI DCS
> > + initialization sequences.
> > +
> > +allOf:
> > + - $ref: panel-common.yaml#
> > +
> > +properties:
> > + compatible:
> > + items:
> > + - const: fannal,c3004
> > +
> > + reg: true
>
> Are there no restrictions on the number of reg entries?
What do you mean by this? May I have some example if possible?
>
> > + reset-gpios: true
>
> Can you put a blank line between properties please?
>
> > +
> > + vdd-supply:
> > + description: power supply voltage
> > + vddio-supply:
> > + description: power supply voltage for IO
> > +
> > + width-mm:
> > + description: physical panel width [mm]
> > + height-mm:
> > + description: physical panel height [mm]
>
> Here and for the supplies too.
>
> > diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> > index 82d39ab0231b..f962750f630a 100644
> > --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
> > +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
> > @@ -462,6 +462,8 @@ patternProperties:
> > description: Facebook
> > "^fairphone,.*":
> > description: Fairphone B.V.
> > + "^fannal,.*":
> > + description: Fannal Electronics Co., Ltd
>
> This needs to be split into a commit of its own.
>
> Thanks,
> Conor.
>
> > "^faraday,.*":
> > description: Faraday Technology Corporation
> > "^fastrax,.*":
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 5c22c828ab46..62374c8424b9 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -6427,6 +6427,12 @@ T: git git://anongit.freedesktop.org/drm/drm-misc
> > F: Documentation/devicetree/bindings/display/panel/ebbg,ft8719.yaml
> > F: drivers/gpu/drm/panel/panel-ebbg-ft8719.c
> >
> > +DRM DRIVER FOR FANNAL C3004373132019A
> > +M: Paulo Pavacic <pavacic.p@gmail.com>
> > +S: Maintained
> > +C: matrix:r/mipi-dsi-bringup:matrix.org
> > +F: Documentation/devicetree/bindings/display/panel/panel-fannal,c3004.yaml
> > +
> > DRM DRIVER FOR FARADAY TVE200 TV ENCODER
> > M: Linus Walleij <linus.walleij@linaro.org>
> > S: Maintained
> > --
> > 2.40.1
> >
Thanks,
Paulo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-06-05 14:33 ` Paulo Pavacic
@ 2023-06-05 14:43 ` Conor Dooley
2023-06-05 14:56 ` Paulo Pavacic
0 siblings, 1 reply; 13+ messages in thread
From: Conor Dooley @ 2023-06-05 14:43 UTC (permalink / raw)
To: Paulo Pavacic
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
[-- Attachment #1: Type: text/plain, Size: 2816 bytes --]
On Mon, Jun 05, 2023 at 04:33:15PM +0200, Paulo Pavacic wrote:
> Hello Conor,
>
> pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je:
> >
> > Hey Paulo,
> >
> > On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote:
> > >
> > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004.
> > > Fannal C3004 is a 480x800 MIPI DSI Panel which requires
> > > DCS initialization sequences with certain delays between certain
> > > commands.
> > >
> > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
> > > ---
> > > v3 changelog:
> > > - renamed yml file
> > > - refactored yml file to describe fannal,c3004
> > > - added matrix URI to MAINTAINERS
> > > v2 changelog:
> > > - revised driver title, now describes purpose
> > > - revised description, now describes hw
> > > - revised maintainers, now has only 1 mail
> > > - removed diacritics from commit/commit author
> > > - properties/compatible is now enum
> > > - compatible using only lowercase
> > > - revised dts example
> > > - modified MAINTAINERS in this commit (instead of driver commit)
> > > - dt_bindings_check checked yml
> > > - checkpatch warning fixed
> > > ---
> > > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++
> > > .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> > > MAINTAINERS | 6 ++
> > > 3 files changed, 83 insertions(+)
> > > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > >
> > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > > new file mode 100644
> > > index 000000000000..a86b5ce02aa2
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > > @@ -0,0 +1,75 @@
> > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: Fannal C3004 MIPI-DSI
> > > +
> > > +maintainers:
> > > + - Paulo Pavacic <pavacic.p@gmail.com>
> > > +
> > > +description: |
> > > + Fannal C3004 is a 480x800 panel which requires DSI DCS
> > > + initialization sequences.
> > > +
> > > +allOf:
> > > + - $ref: panel-common.yaml#
> > > +
> > > +properties:
> > > + compatible:
> > > + items:
> > > + - const: fannal,c3004
> > > +
> > > + reg: true
> >
> > Are there no restrictions on the number of reg entries?
>
> What do you mean by this? May I have some example if possible?
I was commenting on the lack of minItems and/or maxItems.
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-06-05 14:43 ` Conor Dooley
@ 2023-06-05 14:56 ` Paulo Pavacic
2023-06-05 15:08 ` Conor Dooley
0 siblings, 1 reply; 13+ messages in thread
From: Paulo Pavacic @ 2023-06-05 14:56 UTC (permalink / raw)
To: Conor Dooley
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
Hello Conor,
pon, 5. lip 2023. u 16:43 Conor Dooley <conor@kernel.org> napisao je:
>
> On Mon, Jun 05, 2023 at 04:33:15PM +0200, Paulo Pavacic wrote:
> > Hello Conor,
> >
> > pet, 19. svi 2023. u 18:41 Conor Dooley <conor@kernel.org> napisao je:
> > >
> > > Hey Paulo,
> > >
> > > On Fri, May 19, 2023 at 04:24:55PM +0200, Paulo Pavacic wrote:
> > > >
> > > > Added fannal to vendor-prefixes and dt bindings for Fannal C3004.
> > > > Fannal C3004 is a 480x800 MIPI DSI Panel which requires
> > > > DCS initialization sequences with certain delays between certain
> > > > commands.
> > > >
> > > > Signed-off-by: Paulo Pavacic <pavacic.p@gmail.com>
> > > > ---
> > > > v3 changelog:
> > > > - renamed yml file
> > > > - refactored yml file to describe fannal,c3004
> > > > - added matrix URI to MAINTAINERS
> > > > v2 changelog:
> > > > - revised driver title, now describes purpose
> > > > - revised description, now describes hw
> > > > - revised maintainers, now has only 1 mail
> > > > - removed diacritics from commit/commit author
> > > > - properties/compatible is now enum
> > > > - compatible using only lowercase
> > > > - revised dts example
> > > > - modified MAINTAINERS in this commit (instead of driver commit)
> > > > - dt_bindings_check checked yml
> > > > - checkpatch warning fixed
> > > > ---
> > > > .../bindings/display/panel/fannal,c3004.yaml | 75 +++++++++++++++++++
> > > > .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> > > > MAINTAINERS | 6 ++
> > > > 3 files changed, 83 insertions(+)
> > > > create mode 100644 Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > > > new file mode 100644
> > > > index 000000000000..a86b5ce02aa2
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/display/panel/fannal,c3004.yaml
> > > > @@ -0,0 +1,75 @@
> > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > > +%YAML 1.2
> > > > +---
> > > > +$id: http://devicetree.org/schemas/display/panel/fannal,c3004.yaml#
> > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > +
> > > > +title: Fannal C3004 MIPI-DSI
> > > > +
> > > > +maintainers:
> > > > + - Paulo Pavacic <pavacic.p@gmail.com>
> > > > +
> > > > +description: |
> > > > + Fannal C3004 is a 480x800 panel which requires DSI DCS
> > > > + initialization sequences.
> > > > +
> > > > +allOf:
> > > > + - $ref: panel-common.yaml#
> > > > +
> > > > +properties:
> > > > + compatible:
> > > > + items:
> > > > + - const: fannal,c3004
> > > > +
> > > > + reg: true
> > >
> > > Are there no restrictions on the number of reg entries?
> >
> > What do you mean by this? May I have some example if possible?
>
> I was commenting on the lack of minItems and/or maxItems.
Sorry this is my first patch, I still don't understand, why should I
add `maxItems: 1` to the 'reg:' ?
Isn't part of the code:
> required:
> - compatible
> - reg
> - reset-gpios
making `minItems: 1` redundant for reg properties?
>
> Cheers,
> Conor.
Thanks,
Paulo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004
2023-06-05 14:56 ` Paulo Pavacic
@ 2023-06-05 15:08 ` Conor Dooley
0 siblings, 0 replies; 13+ messages in thread
From: Conor Dooley @ 2023-06-05 15:08 UTC (permalink / raw)
To: Paulo Pavacic
Cc: neil.armstrong, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, conor+dt, dri-devel, linux-kernel,
devicetree
[-- Attachment #1: Type: text/plain, Size: 577 bytes --]
On Mon, Jun 05, 2023 at 04:56:13PM +0200, Paulo Pavacic wrote:
> Hello Conor,
>
> pon, 5. lip 2023. u 16:43 Conor Dooley <conor@kernel.org> napisao je:
> Sorry this is my first patch, I still don't understand, why should I
> add `maxItems: 1` to the 'reg:' ?
> Isn't part of the code:
> > required:
> > - compatible
> > - reg
> > - reset-gpios
>
> making `minItems: 1` redundant for reg properties?
I went and had another look, and you get enforcement of this from the
dsi-controller binding if extra reg entries are added.
Sorry for the noise.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-06-05 15:08 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-19 14:24 [PATCH 0/2] drm/panel: add fannal c3004 panel Paulo Pavacic
2023-05-19 14:24 ` [PATCH 1/2] dt-bindings: display: panel: add fannal,c3004 Paulo Pavacic
2023-05-19 16:41 ` Conor Dooley
2023-06-05 14:33 ` Paulo Pavacic
2023-06-05 14:43 ` Conor Dooley
2023-06-05 14:56 ` Paulo Pavacic
2023-06-05 15:08 ` Conor Dooley
2023-05-20 13:58 ` kernel test robot
2023-05-19 14:24 ` [PATCH 2/2] drm/panel-fannal-c3004: Add fannal c3004 DSI panel Paulo Pavacic
2023-05-22 8:55 ` neil.armstrong
2023-05-23 17:33 ` Linus Walleij
2023-05-22 8:55 ` [PATCH 0/2] drm/panel: add fannal c3004 panel neil.armstrong
2023-05-23 13:15 ` Paulo Pavacic
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).