Re: [PATCH v3 2/4] drm: panel: Add Himax HX8394 panel controller driver

2022-12-29 Thread Tom Fitzhenry

On 27/12/22 22:03, Javier Martinez Canillas wrote:

From: Kamil Trzciński 

The driver is for panels based on the Himax HX8394 controller, such as the
HannStar HSD060BHW4 720x1440 TFT LCD panel that uses a MIPI-DSI interface.

Signed-off-by: Kamil Trzciński 
Co-developed-by: Ondrej Jirman 
Signed-off-by: Ondrej Jirman 
Co-developed-by: Javier Martinez Canillas 
Signed-off-by: Javier Martinez Canillas 
Reviewed-by: Sam Ravnborg 


Tested-by: Tom Fitzhenry 

Tested to boot on my Pinephone Pro, thanks for the mainlining!


[PATCH v3 2/4] drm: panel: Add Himax HX8394 panel controller driver

2022-12-27 Thread Javier Martinez Canillas
From: Kamil Trzciński 

The driver is for panels based on the Himax HX8394 controller, such as the
HannStar HSD060BHW4 720x1440 TFT LCD panel that uses a MIPI-DSI interface.

Signed-off-by: Kamil Trzciński 
Co-developed-by: Ondrej Jirman 
Signed-off-by: Ondrej Jirman 
Co-developed-by: Javier Martinez Canillas 
Signed-off-by: Javier Martinez Canillas 
Reviewed-by: Sam Ravnborg 
---

Changes in v3:
- Add Sam Ravnborg's reviwed-by tag.
- Move driver patch after one introducing the DT binding (Sam Ravnborg).

Changes in v2:
- Add year to driver's copyright notice (Sam Ravnborg)
- Remove unused  header include (Sam Ravnborg).
- Use mipi_dsi_dcs_write_seq() helper and drop custom macro (Sam Ravnborg).
- Drop unnecessary info messages and move useful one to debug (Sam Ravnborg).

 drivers/gpu/drm/panel/Kconfig  |  12 +
 drivers/gpu/drm/panel/Makefile |   1 +
 drivers/gpu/drm/panel/panel-himax-hx8394.c | 446 +
 3 files changed, 459 insertions(+)
 create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8394.c

diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 737edcdf9eef..7ee9c83f09a7 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -154,6 +154,18 @@ config DRM_PANEL_FEIYANG_FY07024DI26A30D
  Say Y if you want to enable support for panels based on the
  Feiyang FY07024DI26A30-D MIPI-DSI interface.
 
+config DRM_PANEL_HIMAX_HX8394
+   tristate "HIMAX HX8394 MIPI-DSI LCD panels"
+   depends on OF
+   depends on DRM_MIPI_DSI
+   depends on BACKLIGHT_CLASS_DEVICE
+   help
+ Say Y if you want to enable support for panels based on the
+ Himax HX8394 controller, such as the HannStar HSD060BHW4
+ 720x1440 TFT LCD panel that uses a MIPI-DSI interface.
+
+ If M is selected the module will be called panel-himax-hx8394.
+
 config DRM_PANEL_ILITEK_IL9322
tristate "Ilitek ILI9322 320x240 QVGA panels"
depends on OF && SPI
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index f8f9d9f6a307..84c01adafd4c 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o
 obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.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
 obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o
diff --git a/drivers/gpu/drm/panel/panel-himax-hx8394.c 
b/drivers/gpu/drm/panel/panel-himax-hx8394.c
new file mode 100644
index ..fc7a2c299f8d
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-himax-hx8394.c
@@ -0,0 +1,446 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver for panels based on Himax HX8394 controller, such as:
+ *
+ * - HannStar HSD060BHW4 5.99" MIPI-DSI panel
+ *
+ * Copyright (C) 2021 Kamil Trzciński
+ *
+ * Based on drivers/gpu/drm/panel/panel-sitronix-st7703.c
+ * Copyright (C) Purism SPC 2019
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+#include 
+
+#define DRV_NAME "panel-himax-hx8394"
+
+/* Manufacturer specific commands sent via DSI, listed in HX8394-F datasheet */
+#define HX8394_CMD_SETSEQUENCE   0xb0
+#define HX8394_CMD_SETPOWER  0xb1
+#define HX8394_CMD_SETDISP   0xb2
+#define HX8394_CMD_SETCYC0xb4
+#define HX8394_CMD_SETVCOM   0xb6
+#define HX8394_CMD_SETTE 0xb7
+#define HX8394_CMD_SETSENSOR 0xb8
+#define HX8394_CMD_SETEXTC   0xb9
+#define HX8394_CMD_SETMIPI   0xba
+#define HX8394_CMD_SETOTP0xbb
+#define HX8394_CMD_SETREGBANK0xbd
+#define HX8394_CMD_UNKNOWN1  0xc0
+#define HX8394_CMD_SETDGCLUT 0xc1
+#define HX8394_CMD_SETID 0xc3
+#define HX8394_CMD_SETDDB0xc4
+#define HX8394_CMD_UNKNOWN2  0xc6
+#define HX8394_CMD_SETCABC   0xc9
+#define HX8394_CMD_SETCABCGAIN   0xca
+#define HX8394_CMD_SETPANEL  0xcc
+#define HX8394_CMD_SETOFFSET 0xd2
+#define HX8394_CMD_SETGIP0   0xd3
+#define HX8394_CMD_UNKNOWN3  0xd4
+#define HX8394_CMD_SETGIP1   0xd5
+#define HX8394_CMD_SETGIP2   0xd6
+#define HX8394_CMD_SETGPO0xd6
+#define HX8394_CMD_SETSCALING0xdd
+#define HX8394_CMD_SETIDLE   0xdf
+#define HX8394_CMD_SETGAMMA  0xe0
+#define HX8394_CMD_SETCHEMODE_DYN 0xe4
+#define HX8394_CMD_SETCHE0xe5
+#define HX8394_CMD_SETCESEL  0xe6
+#define HX8394_CMD_SET_SP_CMD0xe9
+#define HX8394_CMD_SETREADINDEX  0xfe
+#define HX8394_CMD_GETSPIREAD0xff
+
+struct hx8394 {
+   struct device *dev;
+   struct drm_panel panel;
+   struct