* [PATCH v2 0/4] Add PinePhone Pro display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Daniel Vetter, David Airlie, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel, linux-arm-kernel, linux-rockchip This series add support for the display present in the PinePhone Pro. Patch #1 adds a driver for panels using the Himax HX8394 panel controller, such as the HSD060BHW4 720x1440 TFT LCD panel present in the PinePhone Pro. Patch #2 adds a devicetree binding schema for this driver and patch #3 adds an entry for the driver in the MAINTAINERS file. Finally patch #4 adds the needed devicetree nodes in the PinePhone Pro DTS, to enable both the display and the touchscreen. This makes the upstream DTS much more usable and will allow for example to enable support for the phone in the Fedora distribution. I only added myself as the maintainer for the driver because I don't know if Kamil and Ondrej that worked in the driver would be interested. Please let me know folks if you are, and I can add you too in the next revision. This is a v2 of the patch-set that addresses issues pointed out in v1: https://lore.kernel.org/all/20221222223830.2494900-1-javierm@redhat.com/T/#m692655a06093fe8df0d8748b3df338e57494af2a The patches were tested on a PinePhone Pro Explorer Edition using a Fedora 37 Workstation image. Best regards, Javier Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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). - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). Javier Martinez Canillas (2): dt-bindings: display: Add Himax HX8394 panel controller MAINTAINERS: Add entry for Himax HX8394 panel controller driver Kamil Trzciński (1): drm: panel: Add Himax HX8394 panel controller driver Ondrej Jirman (1): arm64: dts: rk3399-pinephone-pro: Add internal display support .../bindings/display/panel/himax,hx8394.yaml | 65 +++ MAINTAINERS | 7 + .../dts/rockchip/rk3399-pinephone-pro.dts | 123 +++++ drivers/gpu/drm/panel/Kconfig | 12 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-himax-hx8394.c | 446 ++++++++++++++++++ 6 files changed, 654 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8394.c -- 2.38.1 ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 0/4] Add PinePhone Pro display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Daniel Vetter, David Airlie, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel, linux-arm-kernel, linux-rockchip This series add support for the display present in the PinePhone Pro. Patch #1 adds a driver for panels using the Himax HX8394 panel controller, such as the HSD060BHW4 720x1440 TFT LCD panel present in the PinePhone Pro. Patch #2 adds a devicetree binding schema for this driver and patch #3 adds an entry for the driver in the MAINTAINERS file. Finally patch #4 adds the needed devicetree nodes in the PinePhone Pro DTS, to enable both the display and the touchscreen. This makes the upstream DTS much more usable and will allow for example to enable support for the phone in the Fedora distribution. I only added myself as the maintainer for the driver because I don't know if Kamil and Ondrej that worked in the driver would be interested. Please let me know folks if you are, and I can add you too in the next revision. This is a v2 of the patch-set that addresses issues pointed out in v1: https://lore.kernel.org/all/20221222223830.2494900-1-javierm@redhat.com/T/#m692655a06093fe8df0d8748b3df338e57494af2a The patches were tested on a PinePhone Pro Explorer Edition using a Fedora 37 Workstation image. Best regards, Javier Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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). - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). Javier Martinez Canillas (2): dt-bindings: display: Add Himax HX8394 panel controller MAINTAINERS: Add entry for Himax HX8394 panel controller driver Kamil Trzciński (1): drm: panel: Add Himax HX8394 panel controller driver Ondrej Jirman (1): arm64: dts: rk3399-pinephone-pro: Add internal display support .../bindings/display/panel/himax,hx8394.yaml | 65 +++ MAINTAINERS | 7 + .../dts/rockchip/rk3399-pinephone-pro.dts | 123 +++++ drivers/gpu/drm/panel/Kconfig | 12 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-himax-hx8394.c | 446 ++++++++++++++++++ 6 files changed, 654 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8394.c -- 2.38.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 0/4] Add PinePhone Pro display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: devicetree, Krzysztof Kozlowski, Robert Mader, Javier Martinez Canillas, dri-devel, Tom Fitzhenry, Martijn Braam, linux-rockchip, Krzysztof Kozlowski, Rob Herring, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Thierry Reding, Sam Ravnborg, linux-arm-kernel, Maya Matuszczyk This series add support for the display present in the PinePhone Pro. Patch #1 adds a driver for panels using the Himax HX8394 panel controller, such as the HSD060BHW4 720x1440 TFT LCD panel present in the PinePhone Pro. Patch #2 adds a devicetree binding schema for this driver and patch #3 adds an entry for the driver in the MAINTAINERS file. Finally patch #4 adds the needed devicetree nodes in the PinePhone Pro DTS, to enable both the display and the touchscreen. This makes the upstream DTS much more usable and will allow for example to enable support for the phone in the Fedora distribution. I only added myself as the maintainer for the driver because I don't know if Kamil and Ondrej that worked in the driver would be interested. Please let me know folks if you are, and I can add you too in the next revision. This is a v2 of the patch-set that addresses issues pointed out in v1: https://lore.kernel.org/all/20221222223830.2494900-1-javierm@redhat.com/T/#m692655a06093fe8df0d8748b3df338e57494af2a The patches were tested on a PinePhone Pro Explorer Edition using a Fedora 37 Workstation image. Best regards, Javier Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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). - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). Javier Martinez Canillas (2): dt-bindings: display: Add Himax HX8394 panel controller MAINTAINERS: Add entry for Himax HX8394 panel controller driver Kamil Trzciński (1): drm: panel: Add Himax HX8394 panel controller driver Ondrej Jirman (1): arm64: dts: rk3399-pinephone-pro: Add internal display support .../bindings/display/panel/himax,hx8394.yaml | 65 +++ MAINTAINERS | 7 + .../dts/rockchip/rk3399-pinephone-pro.dts | 123 +++++ drivers/gpu/drm/panel/Kconfig | 12 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-himax-hx8394.c | 446 ++++++++++++++++++ 6 files changed, 654 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8394.c -- 2.38.1 ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 0/4] Add PinePhone Pro display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Daniel Vetter, David Airlie, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel, linux-arm-kernel, linux-rockchip This series add support for the display present in the PinePhone Pro. Patch #1 adds a driver for panels using the Himax HX8394 panel controller, such as the HSD060BHW4 720x1440 TFT LCD panel present in the PinePhone Pro. Patch #2 adds a devicetree binding schema for this driver and patch #3 adds an entry for the driver in the MAINTAINERS file. Finally patch #4 adds the needed devicetree nodes in the PinePhone Pro DTS, to enable both the display and the touchscreen. This makes the upstream DTS much more usable and will allow for example to enable support for the phone in the Fedora distribution. I only added myself as the maintainer for the driver because I don't know if Kamil and Ondrej that worked in the driver would be interested. Please let me know folks if you are, and I can add you too in the next revision. This is a v2 of the patch-set that addresses issues pointed out in v1: https://lore.kernel.org/all/20221222223830.2494900-1-javierm@redhat.com/T/#m692655a06093fe8df0d8748b3df338e57494af2a The patches were tested on a PinePhone Pro Explorer Edition using a Fedora 37 Workstation image. Best regards, Javier Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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). - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). Javier Martinez Canillas (2): dt-bindings: display: Add Himax HX8394 panel controller MAINTAINERS: Add entry for Himax HX8394 panel controller driver Kamil Trzciński (1): drm: panel: Add Himax HX8394 panel controller driver Ondrej Jirman (1): arm64: dts: rk3399-pinephone-pro: Add internal display support .../bindings/display/panel/himax,hx8394.yaml | 65 +++ MAINTAINERS | 7 + .../dts/rockchip/rk3399-pinephone-pro.dts | 123 +++++ drivers/gpu/drm/panel/Kconfig | 12 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-himax-hx8394.c | 446 ++++++++++++++++++ 6 files changed, 654 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml create mode 100644 drivers/gpu/drm/panel/panel-himax-hx8394.c -- 2.38.1 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver 2022-12-26 13:49 ` Javier Martinez Canillas @ 2022-12-26 13:49 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Daniel Vetter, David Airlie, Thierry Reding, dri-devel From: Kamil Trzciński <ayufan@ayufan.eu> 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 <ayufan@ayufan.eu> Co-developed-by: Ondrej Jirman <megi@xff.cz> Signed-off-by: Ondrej Jirman <megi@xff.cz> Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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 000000000000..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 <linux/delay.h> +#include <linux/gpio/consumer.h> +#include <linux/media-bus-format.h> +#include <linux/mod_devicetable.h> +#include <linux/module.h> +#include <linux/of_device.h> +#include <linux/regulator/consumer.h> + +#include <video/mipi_display.h> + +#include <drm/drm_mipi_dsi.h> +#include <drm/drm_modes.h> +#include <drm/drm_panel.h> + +#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_SETCYC 0xb4 +#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_SETOTP 0xbb +#define HX8394_CMD_SETREGBANK 0xbd +#define HX8394_CMD_UNKNOWN1 0xc0 +#define HX8394_CMD_SETDGCLUT 0xc1 +#define HX8394_CMD_SETID 0xc3 +#define HX8394_CMD_SETDDB 0xc4 +#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_SETGPO 0xd6 +#define HX8394_CMD_SETSCALING 0xdd +#define HX8394_CMD_SETIDLE 0xdf +#define HX8394_CMD_SETGAMMA 0xe0 +#define HX8394_CMD_SETCHEMODE_DYN 0xe4 +#define HX8394_CMD_SETCHE 0xe5 +#define HX8394_CMD_SETCESEL 0xe6 +#define HX8394_CMD_SET_SP_CMD 0xe9 +#define HX8394_CMD_SETREADINDEX 0xfe +#define HX8394_CMD_GETSPIREAD 0xff + +struct hx8394 { + struct device *dev; + struct drm_panel panel; + struct gpio_desc *reset_gpio; + struct regulator *vcc; + struct regulator *iovcc; + bool prepared; + + const struct hx8394_panel_desc *desc; +}; + +struct hx8394_panel_desc { + const struct drm_display_mode *mode; + unsigned int lanes; + unsigned long mode_flags; + enum mipi_dsi_pixel_format format; + int (*init_sequence)(struct hx8394 *ctx); +}; + +static inline struct hx8394 *panel_to_hx8394(struct drm_panel *panel) +{ + return container_of(panel, struct hx8394, panel); +} + +static int hsd060bhw4_init_sequence(struct hx8394 *ctx) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + + /* 5.19.8 SETEXTC: Set extension command (B9h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC, + 0xff, 0x83, 0x94); + + /* 5.19.2 SETPOWER: Set power (B1h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER, + 0x48, 0x11, 0x71, 0x09, 0x32, 0x24, 0x71, 0x31, 0x55, 0x30); + + /* 5.19.9 SETMIPI: Set MIPI control (BAh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETMIPI, + 0x63, 0x03, 0x68, 0x6b, 0xb2, 0xc0); + + /* 5.19.3 SETDISP: Set display related register (B2h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP, + 0x00, 0x80, 0x78, 0x0c, 0x07); + + /* 5.19.4 SETCYC: Set display waveform cycles (B4h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC, + 0x12, 0x63, 0x12, 0x63, 0x12, 0x63, 0x01, 0x0c, 0x7c, 0x55, + 0x00, 0x3f, 0x12, 0x6b, 0x12, 0x6b, 0x12, 0x6b, 0x01, 0x0c, + 0x7c); + + /* 5.19.19 SETGIP0: Set GIP Option0 (D3h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0x32, 0x10, + 0x09, 0x00, 0x09, 0x32, 0x15, 0xad, 0x05, 0xad, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x37, 0x03, 0x0b, 0x0b, 0x37, 0x00, 0x00, + 0x00, 0x0c, 0x40); + + /* 5.19.20 Set GIP Option1 (D5h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1, + 0x19, 0x19, 0x18, 0x18, 0x1b, 0x1b, 0x1a, 0x1a, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x20, 0x21, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x24, 0x25, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18); + + /* 5.19.21 Set GIP Option2 (D6h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2, + 0x18, 0x18, 0x19, 0x19, 0x1b, 0x1b, 0x1a, 0x1a, 0x07, 0x06, + 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x25, 0x24, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18); + + /* 5.19.25 SETGAMMA: Set gamma curve related setting (E0h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA, + 0x00, 0x04, 0x0c, 0x12, 0x14, 0x18, 0x1a, 0x18, 0x31, 0x3f, + 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, 0x82, 0x7e, 0x8a, + 0x99, 0x4a, 0x48, 0x49, 0x4b, 0x4a, 0x4c, 0x4b, 0x7f, 0x00, + 0x04, 0x0c, 0x11, 0x13, 0x17, 0x1a, 0x18, 0x31, + 0x3f, 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, + 0x82, 0x7e, 0x8a, 0x99, 0x4a, 0x48, 0x49, 0x4b, + 0x4a, 0x4c, 0x4b, 0x7f); + + /* 5.19.17 SETPANEL (CCh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL, 0x0b); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN1, 0x1f, 0x31); + + /* 5.19.5 SETVCOM: Set VCOM voltage (B6h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM, + 0x7d, 0x7d); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3, + 0x02); + + /* 5.19.11 Set register bank (BDh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK, 0x01); + + /* 5.19.2 SETPOWER: Set power (B1h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER, 0x00); + + /* 5.19.11 Set register bank (BDh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK, 0x00); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3, + 0xed); + + return 0; +} + +static const struct drm_display_mode hsd060bhw4_mode = { + .hdisplay = 720, + .hsync_start = 720 + 40, + .hsync_end = 720 + 40 + 46, + .htotal = 720 + 40 + 46 + 40, + .vdisplay = 1440, + .vsync_start = 1440 + 9, + .vsync_end = 1440 + 9 + 7, + .vtotal = 1440 + 9 + 7 + 7, + .clock = 74250, + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, + .width_mm = 68, + .height_mm = 136, +}; + +static const struct hx8394_panel_desc hsd060bhw4_desc = { + .mode = &hsd060bhw4_mode, + .lanes = 4, + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST, + .format = MIPI_DSI_FMT_RGB888, + .init_sequence = hsd060bhw4_init_sequence, +}; + +static int hx8394_enable(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + int ret; + + ret = ctx->desc->init_sequence(ctx); + if (ret) { + dev_err(ctx->dev, "Panel init sequence failed: %d\n", ret); + return ret; + } + + ret = mipi_dsi_dcs_exit_sleep_mode(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to exit sleep mode: %d\n", ret); + return ret; + } + + /* Panel is operational 120 msec after reset */ + msleep(120); + + ret = mipi_dsi_dcs_set_display_on(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to turn on the display: %d\n", ret); + goto sleep_in; + } + + return 0; + +sleep_in: + /* This will probably fail, but let's try orderly power off anyway. */ + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); + if (!ret) + msleep(50); + + return ret; +} + +static int hx8394_disable(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + int ret; + + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to enter sleep mode: %d\n", ret); + return ret; + } + + msleep(50); /* about 3 frames */ + + return 0; +} + +static int hx8394_unprepare(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + + if (!ctx->prepared) + return 0; + + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + + regulator_disable(ctx->iovcc); + regulator_disable(ctx->vcc); + + ctx->prepared = false; + + return 0; +} + +static int hx8394_prepare(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + int ret; + + if (ctx->prepared) + return 0; + + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + + ret = regulator_enable(ctx->vcc); + if (ret) { + dev_err(ctx->dev, "Failed to enable vcc supply: %d\n", ret); + return ret; + } + + ret = regulator_enable(ctx->iovcc); + if (ret) { + dev_err(ctx->dev, "Failed to enable iovcc supply: %d\n", ret); + goto disable_vcc; + } + + gpiod_set_value_cansleep(ctx->reset_gpio, 0); + + msleep(180); + + ctx->prepared = true; + + return 0; + +disable_vcc: + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + regulator_disable(ctx->vcc); + return ret; +} + +static int hx8394_get_modes(struct drm_panel *panel, + struct drm_connector *connector) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct drm_display_mode *mode; + + mode = drm_mode_duplicate(connector->dev, ctx->desc->mode); + if (!mode) { + dev_err(ctx->dev, "Failed to add mode %ux%u@%u\n", + ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay, + drm_mode_vrefresh(ctx->desc->mode)); + return -ENOMEM; + } + + drm_mode_set_name(mode); + + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + connector->display_info.width_mm = mode->width_mm; + connector->display_info.height_mm = mode->height_mm; + drm_mode_probed_add(connector, mode); + + return 1; +} + +static const struct drm_panel_funcs hx8394_drm_funcs = { + .disable = hx8394_disable, + .unprepare = hx8394_unprepare, + .prepare = hx8394_prepare, + .enable = hx8394_enable, + .get_modes = hx8394_get_modes, +}; + +static int hx8394_probe(struct mipi_dsi_device *dsi) +{ + struct device *dev = &dsi->dev; + struct hx8394 *ctx; + int ret; + + ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(ctx->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), + "Failed to get reset gpio\n"); + + mipi_dsi_set_drvdata(dsi, ctx); + + ctx->dev = dev; + ctx->desc = of_device_get_match_data(dev); + + dsi->mode_flags = ctx->desc->mode_flags; + dsi->format = ctx->desc->format; + dsi->lanes = ctx->desc->lanes; + + ctx->vcc = devm_regulator_get(dev, "vcc"); + if (IS_ERR(ctx->vcc)) + return dev_err_probe(dev, PTR_ERR(ctx->vcc), + "Failed to request vcc regulator\n"); + + ctx->iovcc = devm_regulator_get(dev, "iovcc"); + if (IS_ERR(ctx->iovcc)) + return dev_err_probe(dev, PTR_ERR(ctx->iovcc), + "Failed to request iovcc regulator\n"); + + drm_panel_init(&ctx->panel, dev, &hx8394_drm_funcs, + DRM_MODE_CONNECTOR_DSI); + + ret = drm_panel_of_backlight(&ctx->panel); + if (ret) + return ret; + + drm_panel_add(&ctx->panel); + + ret = mipi_dsi_attach(dsi); + if (ret < 0) { + dev_err_probe(dev, ret, "mipi_dsi_attach failed\n"); + drm_panel_remove(&ctx->panel); + return ret; + } + + dev_dbg(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", + ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay, + drm_mode_vrefresh(ctx->desc->mode), + mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); + + return 0; +} + +static void hx8394_shutdown(struct mipi_dsi_device *dsi) +{ + struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi); + int ret; + + ret = drm_panel_disable(&ctx->panel); + if (ret < 0) + dev_err(&dsi->dev, "Failed to disable panel: %d\n", ret); + + ret = drm_panel_unprepare(&ctx->panel); + if (ret < 0) + dev_err(&dsi->dev, "Failed to unprepare panel: %d\n", ret); +} + +static void hx8394_remove(struct mipi_dsi_device *dsi) +{ + struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi); + int ret; + + hx8394_shutdown(dsi); + + ret = mipi_dsi_detach(dsi); + if (ret < 0) + dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); + + drm_panel_remove(&ctx->panel); +} + +static const struct of_device_id hx8394_of_match[] = { + { .compatible = "hannstar,hsd060bhw4", .data = &hsd060bhw4_desc }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, hx8394_of_match); + +static struct mipi_dsi_driver hx8394_driver = { + .probe = hx8394_probe, + .remove = hx8394_remove, + .shutdown = hx8394_shutdown, + .driver = { + .name = DRV_NAME, + .of_match_table = hx8394_of_match, + }, +}; +module_mipi_dsi_driver(hx8394_driver); + +MODULE_AUTHOR("Kamil Trzciński <ayufan@ayufan.eu>"); +MODULE_DESCRIPTION("DRM driver for Himax HX8394 based MIPI DSI panels"); +MODULE_LICENSE("GPL"); -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Robert Mader, Javier Martinez Canillas, dri-devel, Tom Fitzhenry, Martijn Braam, Krzysztof Kozlowski, Thierry Reding, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Sam Ravnborg, Maya Matuszczyk From: Kamil Trzciński <ayufan@ayufan.eu> 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 <ayufan@ayufan.eu> Co-developed-by: Ondrej Jirman <megi@xff.cz> Signed-off-by: Ondrej Jirman <megi@xff.cz> Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- Changes in v2: - Add year to driver's copyright notice (Sam Ravnborg) - Remove unused <video/display_timing.h> 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 000000000000..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 <linux/delay.h> +#include <linux/gpio/consumer.h> +#include <linux/media-bus-format.h> +#include <linux/mod_devicetable.h> +#include <linux/module.h> +#include <linux/of_device.h> +#include <linux/regulator/consumer.h> + +#include <video/mipi_display.h> + +#include <drm/drm_mipi_dsi.h> +#include <drm/drm_modes.h> +#include <drm/drm_panel.h> + +#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_SETCYC 0xb4 +#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_SETOTP 0xbb +#define HX8394_CMD_SETREGBANK 0xbd +#define HX8394_CMD_UNKNOWN1 0xc0 +#define HX8394_CMD_SETDGCLUT 0xc1 +#define HX8394_CMD_SETID 0xc3 +#define HX8394_CMD_SETDDB 0xc4 +#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_SETGPO 0xd6 +#define HX8394_CMD_SETSCALING 0xdd +#define HX8394_CMD_SETIDLE 0xdf +#define HX8394_CMD_SETGAMMA 0xe0 +#define HX8394_CMD_SETCHEMODE_DYN 0xe4 +#define HX8394_CMD_SETCHE 0xe5 +#define HX8394_CMD_SETCESEL 0xe6 +#define HX8394_CMD_SET_SP_CMD 0xe9 +#define HX8394_CMD_SETREADINDEX 0xfe +#define HX8394_CMD_GETSPIREAD 0xff + +struct hx8394 { + struct device *dev; + struct drm_panel panel; + struct gpio_desc *reset_gpio; + struct regulator *vcc; + struct regulator *iovcc; + bool prepared; + + const struct hx8394_panel_desc *desc; +}; + +struct hx8394_panel_desc { + const struct drm_display_mode *mode; + unsigned int lanes; + unsigned long mode_flags; + enum mipi_dsi_pixel_format format; + int (*init_sequence)(struct hx8394 *ctx); +}; + +static inline struct hx8394 *panel_to_hx8394(struct drm_panel *panel) +{ + return container_of(panel, struct hx8394, panel); +} + +static int hsd060bhw4_init_sequence(struct hx8394 *ctx) +{ + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + + /* 5.19.8 SETEXTC: Set extension command (B9h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC, + 0xff, 0x83, 0x94); + + /* 5.19.2 SETPOWER: Set power (B1h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER, + 0x48, 0x11, 0x71, 0x09, 0x32, 0x24, 0x71, 0x31, 0x55, 0x30); + + /* 5.19.9 SETMIPI: Set MIPI control (BAh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETMIPI, + 0x63, 0x03, 0x68, 0x6b, 0xb2, 0xc0); + + /* 5.19.3 SETDISP: Set display related register (B2h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP, + 0x00, 0x80, 0x78, 0x0c, 0x07); + + /* 5.19.4 SETCYC: Set display waveform cycles (B4h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC, + 0x12, 0x63, 0x12, 0x63, 0x12, 0x63, 0x01, 0x0c, 0x7c, 0x55, + 0x00, 0x3f, 0x12, 0x6b, 0x12, 0x6b, 0x12, 0x6b, 0x01, 0x0c, + 0x7c); + + /* 5.19.19 SETGIP0: Set GIP Option0 (D3h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0x32, 0x10, + 0x09, 0x00, 0x09, 0x32, 0x15, 0xad, 0x05, 0xad, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x37, 0x03, 0x0b, 0x0b, 0x37, 0x00, 0x00, + 0x00, 0x0c, 0x40); + + /* 5.19.20 Set GIP Option1 (D5h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1, + 0x19, 0x19, 0x18, 0x18, 0x1b, 0x1b, 0x1a, 0x1a, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x20, 0x21, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x24, 0x25, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18); + + /* 5.19.21 Set GIP Option2 (D6h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2, + 0x18, 0x18, 0x19, 0x19, 0x1b, 0x1b, 0x1a, 0x1a, 0x07, 0x06, + 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x25, 0x24, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18); + + /* 5.19.25 SETGAMMA: Set gamma curve related setting (E0h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA, + 0x00, 0x04, 0x0c, 0x12, 0x14, 0x18, 0x1a, 0x18, 0x31, 0x3f, + 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, 0x82, 0x7e, 0x8a, + 0x99, 0x4a, 0x48, 0x49, 0x4b, 0x4a, 0x4c, 0x4b, 0x7f, 0x00, + 0x04, 0x0c, 0x11, 0x13, 0x17, 0x1a, 0x18, 0x31, + 0x3f, 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, + 0x82, 0x7e, 0x8a, 0x99, 0x4a, 0x48, 0x49, 0x4b, + 0x4a, 0x4c, 0x4b, 0x7f); + + /* 5.19.17 SETPANEL (CCh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL, 0x0b); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN1, 0x1f, 0x31); + + /* 5.19.5 SETVCOM: Set VCOM voltage (B6h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM, + 0x7d, 0x7d); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3, + 0x02); + + /* 5.19.11 Set register bank (BDh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK, 0x01); + + /* 5.19.2 SETPOWER: Set power (B1h) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER, 0x00); + + /* 5.19.11 Set register bank (BDh) */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK, 0x00); + + /* Unknown command, not listed in the HX8394-F datasheet */ + mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3, + 0xed); + + return 0; +} + +static const struct drm_display_mode hsd060bhw4_mode = { + .hdisplay = 720, + .hsync_start = 720 + 40, + .hsync_end = 720 + 40 + 46, + .htotal = 720 + 40 + 46 + 40, + .vdisplay = 1440, + .vsync_start = 1440 + 9, + .vsync_end = 1440 + 9 + 7, + .vtotal = 1440 + 9 + 7 + 7, + .clock = 74250, + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, + .width_mm = 68, + .height_mm = 136, +}; + +static const struct hx8394_panel_desc hsd060bhw4_desc = { + .mode = &hsd060bhw4_mode, + .lanes = 4, + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST, + .format = MIPI_DSI_FMT_RGB888, + .init_sequence = hsd060bhw4_init_sequence, +}; + +static int hx8394_enable(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + int ret; + + ret = ctx->desc->init_sequence(ctx); + if (ret) { + dev_err(ctx->dev, "Panel init sequence failed: %d\n", ret); + return ret; + } + + ret = mipi_dsi_dcs_exit_sleep_mode(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to exit sleep mode: %d\n", ret); + return ret; + } + + /* Panel is operational 120 msec after reset */ + msleep(120); + + ret = mipi_dsi_dcs_set_display_on(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to turn on the display: %d\n", ret); + goto sleep_in; + } + + return 0; + +sleep_in: + /* This will probably fail, but let's try orderly power off anyway. */ + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); + if (!ret) + msleep(50); + + return ret; +} + +static int hx8394_disable(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); + int ret; + + ret = mipi_dsi_dcs_enter_sleep_mode(dsi); + if (ret) { + dev_err(ctx->dev, "Failed to enter sleep mode: %d\n", ret); + return ret; + } + + msleep(50); /* about 3 frames */ + + return 0; +} + +static int hx8394_unprepare(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + + if (!ctx->prepared) + return 0; + + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + + regulator_disable(ctx->iovcc); + regulator_disable(ctx->vcc); + + ctx->prepared = false; + + return 0; +} + +static int hx8394_prepare(struct drm_panel *panel) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + int ret; + + if (ctx->prepared) + return 0; + + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + + ret = regulator_enable(ctx->vcc); + if (ret) { + dev_err(ctx->dev, "Failed to enable vcc supply: %d\n", ret); + return ret; + } + + ret = regulator_enable(ctx->iovcc); + if (ret) { + dev_err(ctx->dev, "Failed to enable iovcc supply: %d\n", ret); + goto disable_vcc; + } + + gpiod_set_value_cansleep(ctx->reset_gpio, 0); + + msleep(180); + + ctx->prepared = true; + + return 0; + +disable_vcc: + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + regulator_disable(ctx->vcc); + return ret; +} + +static int hx8394_get_modes(struct drm_panel *panel, + struct drm_connector *connector) +{ + struct hx8394 *ctx = panel_to_hx8394(panel); + struct drm_display_mode *mode; + + mode = drm_mode_duplicate(connector->dev, ctx->desc->mode); + if (!mode) { + dev_err(ctx->dev, "Failed to add mode %ux%u@%u\n", + ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay, + drm_mode_vrefresh(ctx->desc->mode)); + return -ENOMEM; + } + + drm_mode_set_name(mode); + + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + connector->display_info.width_mm = mode->width_mm; + connector->display_info.height_mm = mode->height_mm; + drm_mode_probed_add(connector, mode); + + return 1; +} + +static const struct drm_panel_funcs hx8394_drm_funcs = { + .disable = hx8394_disable, + .unprepare = hx8394_unprepare, + .prepare = hx8394_prepare, + .enable = hx8394_enable, + .get_modes = hx8394_get_modes, +}; + +static int hx8394_probe(struct mipi_dsi_device *dsi) +{ + struct device *dev = &dsi->dev; + struct hx8394 *ctx; + int ret; + + ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(ctx->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), + "Failed to get reset gpio\n"); + + mipi_dsi_set_drvdata(dsi, ctx); + + ctx->dev = dev; + ctx->desc = of_device_get_match_data(dev); + + dsi->mode_flags = ctx->desc->mode_flags; + dsi->format = ctx->desc->format; + dsi->lanes = ctx->desc->lanes; + + ctx->vcc = devm_regulator_get(dev, "vcc"); + if (IS_ERR(ctx->vcc)) + return dev_err_probe(dev, PTR_ERR(ctx->vcc), + "Failed to request vcc regulator\n"); + + ctx->iovcc = devm_regulator_get(dev, "iovcc"); + if (IS_ERR(ctx->iovcc)) + return dev_err_probe(dev, PTR_ERR(ctx->iovcc), + "Failed to request iovcc regulator\n"); + + drm_panel_init(&ctx->panel, dev, &hx8394_drm_funcs, + DRM_MODE_CONNECTOR_DSI); + + ret = drm_panel_of_backlight(&ctx->panel); + if (ret) + return ret; + + drm_panel_add(&ctx->panel); + + ret = mipi_dsi_attach(dsi); + if (ret < 0) { + dev_err_probe(dev, ret, "mipi_dsi_attach failed\n"); + drm_panel_remove(&ctx->panel); + return ret; + } + + dev_dbg(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", + ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay, + drm_mode_vrefresh(ctx->desc->mode), + mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); + + return 0; +} + +static void hx8394_shutdown(struct mipi_dsi_device *dsi) +{ + struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi); + int ret; + + ret = drm_panel_disable(&ctx->panel); + if (ret < 0) + dev_err(&dsi->dev, "Failed to disable panel: %d\n", ret); + + ret = drm_panel_unprepare(&ctx->panel); + if (ret < 0) + dev_err(&dsi->dev, "Failed to unprepare panel: %d\n", ret); +} + +static void hx8394_remove(struct mipi_dsi_device *dsi) +{ + struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi); + int ret; + + hx8394_shutdown(dsi); + + ret = mipi_dsi_detach(dsi); + if (ret < 0) + dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); + + drm_panel_remove(&ctx->panel); +} + +static const struct of_device_id hx8394_of_match[] = { + { .compatible = "hannstar,hsd060bhw4", .data = &hsd060bhw4_desc }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, hx8394_of_match); + +static struct mipi_dsi_driver hx8394_driver = { + .probe = hx8394_probe, + .remove = hx8394_remove, + .shutdown = hx8394_shutdown, + .driver = { + .name = DRV_NAME, + .of_match_table = hx8394_of_match, + }, +}; +module_mipi_dsi_driver(hx8394_driver); + +MODULE_AUTHOR("Kamil Trzciński <ayufan@ayufan.eu>"); +MODULE_DESCRIPTION("DRM driver for Himax HX8394 based MIPI DSI panels"); +MODULE_LICENSE("GPL"); -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver 2022-12-26 13:49 ` Javier Martinez Canillas @ 2022-12-26 15:05 ` Sam Ravnborg -1 siblings, 0 replies; 22+ messages in thread From: Sam Ravnborg @ 2022-12-26 15:05 UTC (permalink / raw) To: Javier Martinez Canillas Cc: Robert Mader, linux-kernel, dri-devel, Tom Fitzhenry, Martijn Braam, Krzysztof Kozlowski, Thierry Reding, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Maya Matuszczyk Hi Javier. On Mon, Dec 26, 2022 at 02:49:05PM +0100, Javier Martinez Canillas wrote: > From: Kamil Trzciński <ayufan@ayufan.eu> > > 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 <ayufan@ayufan.eu> > Co-developed-by: Ondrej Jirman <megi@xff.cz> > Signed-off-by: Ondrej Jirman <megi@xff.cz> > Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Strictly speaking the binding should be applied before the driver. Sam ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver @ 2022-12-26 15:05 ` Sam Ravnborg 0 siblings, 0 replies; 22+ messages in thread From: Sam Ravnborg @ 2022-12-26 15:05 UTC (permalink / raw) To: Javier Martinez Canillas Cc: linux-kernel, Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Daniel Vetter, David Airlie, Thierry Reding, dri-devel Hi Javier. On Mon, Dec 26, 2022 at 02:49:05PM +0100, Javier Martinez Canillas wrote: > From: Kamil Trzciński <ayufan@ayufan.eu> > > 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 <ayufan@ayufan.eu> > Co-developed-by: Ondrej Jirman <megi@xff.cz> > Signed-off-by: Ondrej Jirman <megi@xff.cz> > Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Strictly speaking the binding should be applied before the driver. Sam ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver 2022-12-26 15:05 ` Sam Ravnborg @ 2022-12-26 16:43 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 16:43 UTC (permalink / raw) To: Sam Ravnborg Cc: Robert Mader, linux-kernel, dri-devel, Tom Fitzhenry, Martijn Braam, Krzysztof Kozlowski, Thierry Reding, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Maya Matuszczyk Hello Sam, On 12/26/22 16:05, Sam Ravnborg wrote: > Hi Javier. > > On Mon, Dec 26, 2022 at 02:49:05PM +0100, Javier Martinez Canillas wrote: >> From: Kamil Trzciński <ayufan@ayufan.eu> >> >> 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 <ayufan@ayufan.eu> >> Co-developed-by: Ondrej Jirman <megi@xff.cz> >> Signed-off-by: Ondrej Jirman <megi@xff.cz> >> Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> >> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Sam Ravnborg <sam@ravnborg.org> > Thanks! > Strictly speaking the binding should be applied before the driver. > Indeed. I'll change the order of the patches in the next iteration. Funny that I added to Documentation/devicetree/bindings/submitting-patches.rst that info in commit ef0b97e3daea ("Documentation: dt-bindings: Explain order in patch series"), but didn't follow my own advice :) -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver @ 2022-12-26 16:43 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 16:43 UTC (permalink / raw) To: Sam Ravnborg Cc: linux-kernel, Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Daniel Vetter, David Airlie, Thierry Reding, dri-devel Hello Sam, On 12/26/22 16:05, Sam Ravnborg wrote: > Hi Javier. > > On Mon, Dec 26, 2022 at 02:49:05PM +0100, Javier Martinez Canillas wrote: >> From: Kamil Trzciński <ayufan@ayufan.eu> >> >> 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 <ayufan@ayufan.eu> >> Co-developed-by: Ondrej Jirman <megi@xff.cz> >> Signed-off-by: Ondrej Jirman <megi@xff.cz> >> Co-developed-by: Javier Martinez Canillas <javierm@redhat.com> >> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Sam Ravnborg <sam@ravnborg.org> > Thanks! > Strictly speaking the binding should be applied before the driver. > Indeed. I'll change the order of the patches in the next iteration. Funny that I added to Documentation/devicetree/bindings/submitting-patches.rst that info in commit ef0b97e3daea ("Documentation: dt-bindings: Explain order in patch series"), but didn't follow my own advice :) -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller 2022-12-26 13:49 ` Javier Martinez Canillas @ 2022-12-26 13:49 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Daniel Vetter, David Airlie, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel Add device tree bindings for panels based on the Himax HX8394 controller, such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected through a MIPI-DSI video interface. Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- Changes in v2: - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml new file mode 100644 index 000000000000..bead3f0b05c5 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/panel/himax,hx8394.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Himax HX8394 MIPI-DSI LCD panel controller + +maintainers: + - Javier Martinez Canillas <javierm@redhat.com> + +description: + Device tree bindings for panels based on the Himax HX8394 controller, + such as the HannStar HSD060BHW4 720x1440 TFT LCD panel connected with + a MIPI-DSI video interface. + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + enum: + # HannStar HSD060BHW4 5.99" 720x1440 TFT LCD panel + - hannstar,hsd060bhw4 + + vcc-supply: + description: Panel power supply + + iovcc-supply: + description: I/O voltage supply + + port: true + + reset-gpios: true + + backlight: true + +required: + - compatible + - vcc-supply + - iovcc-supply + - port + - reset-gpios + - backlight + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + + dsi { + #address-cells = <1>; + #size-cells = <0>; + panel@0 { + compatible = "hannstar,hsd060bhw4"; + reg = <0>; + vcc-supply = <®_2v8_p>; + iovcc-supply = <®_1v8_p>; + reset-gpios = <&gpio3 13 GPIO_ACTIVE_LOW>; + backlight = <&backlight>; + }; + }; + +... -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: devicetree, Krzysztof Kozlowski, Robert Mader, Javier Martinez Canillas, dri-devel, Tom Fitzhenry, Martijn Braam, Krzysztof Kozlowski, Rob Herring, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Thierry Reding, Sam Ravnborg, Maya Matuszczyk Add device tree bindings for panels based on the Himax HX8394 controller, such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected through a MIPI-DSI video interface. Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- Changes in v2: - Drop redundant "bindings" in subject (Krzysztof Kozlowski). - Drop "device tree bindings" in title (Krzysztof Kozlowski). - Put port next to other "true" properties (Krzysztof Kozlowski). - Add Krzysztof Kozlowski's Reviewed-by tag. .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml new file mode 100644 index 000000000000..bead3f0b05c5 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/panel/himax,hx8394.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Himax HX8394 MIPI-DSI LCD panel controller + +maintainers: + - Javier Martinez Canillas <javierm@redhat.com> + +description: + Device tree bindings for panels based on the Himax HX8394 controller, + such as the HannStar HSD060BHW4 720x1440 TFT LCD panel connected with + a MIPI-DSI video interface. + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + enum: + # HannStar HSD060BHW4 5.99" 720x1440 TFT LCD panel + - hannstar,hsd060bhw4 + + vcc-supply: + description: Panel power supply + + iovcc-supply: + description: I/O voltage supply + + port: true + + reset-gpios: true + + backlight: true + +required: + - compatible + - vcc-supply + - iovcc-supply + - port + - reset-gpios + - backlight + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + + dsi { + #address-cells = <1>; + #size-cells = <0>; + panel@0 { + compatible = "hannstar,hsd060bhw4"; + reg = <0>; + vcc-supply = <®_2v8_p>; + iovcc-supply = <®_1v8_p>; + reset-gpios = <&gpio3 13 GPIO_ACTIVE_LOW>; + backlight = <&backlight>; + }; + }; + +... -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller 2022-12-26 13:49 ` Javier Martinez Canillas @ 2022-12-26 18:23 ` Rob Herring -1 siblings, 0 replies; 22+ messages in thread From: Rob Herring @ 2022-12-26 18:23 UTC (permalink / raw) To: Javier Martinez Canillas Cc: devicetree, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, linux-kernel, dri-devel, Tom Fitzhenry, Martijn Braam, Rob Herring, Krzysztof Kozlowski, Thierry Reding, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Maya Matuszczyk On Mon, 26 Dec 2022 14:49:06 +0100, Javier Martinez Canillas wrote: > Add device tree bindings for panels based on the Himax HX8394 controller, > such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected > through a MIPI-DSI video interface. > > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > > Changes in v2: > - Drop redundant "bindings" in subject (Krzysztof Kozlowski). > - Drop "device tree bindings" in title (Krzysztof Kozlowski). > - Put port next to other "true" properties (Krzysztof Kozlowski). > - Add Krzysztof Kozlowski's Reviewed-by tag. > > .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13): yamllint warnings/errors: dtschema/dtc warnings/errors: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb: panel@0: 'port' is a required property From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb: panel@0: 'reg' does not match any of the regexes: 'pinctrl-[0-9]+' From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20221226134909.2822179-3-javierm@redhat.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller @ 2022-12-26 18:23 ` Rob Herring 0 siblings, 0 replies; 22+ messages in thread From: Rob Herring @ 2022-12-26 18:23 UTC (permalink / raw) To: Javier Martinez Canillas Cc: Maya Matuszczyk, Krzysztof Kozlowski, Krzysztof Kozlowski, Martijn Braam, Daniel Vetter, Tom Fitzhenry, David Airlie, Thierry Reding, Kamil Trzciński, Sam Ravnborg, linux-kernel, Peter Robinson, devicetree, dri-devel, Ondrej Jirman, Robert Mader, Rob Herring On Mon, 26 Dec 2022 14:49:06 +0100, Javier Martinez Canillas wrote: > Add device tree bindings for panels based on the Himax HX8394 controller, > such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected > through a MIPI-DSI video interface. > > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > > Changes in v2: > - Drop redundant "bindings" in subject (Krzysztof Kozlowski). > - Drop "device tree bindings" in title (Krzysztof Kozlowski). > - Put port next to other "true" properties (Krzysztof Kozlowski). > - Add Krzysztof Kozlowski's Reviewed-by tag. > > .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13): yamllint warnings/errors: dtschema/dtc warnings/errors: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb: panel@0: 'port' is a required property From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb: panel@0: 'reg' does not match any of the regexes: 'pinctrl-[0-9]+' From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20221226134909.2822179-3-javierm@redhat.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller 2022-12-26 13:49 ` Javier Martinez Canillas @ 2022-12-27 7:44 ` Krzysztof Kozlowski -1 siblings, 0 replies; 22+ messages in thread From: Krzysztof Kozlowski @ 2022-12-27 7:44 UTC (permalink / raw) To: Javier Martinez Canillas, linux-kernel Cc: Ondrej Jirman, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Daniel Vetter, David Airlie, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel On 26/12/2022 14:49, Javier Martinez Canillas wrote: > Add device tree bindings for panels based on the Himax HX8394 controller, > such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected > through a MIPI-DSI video interface. > > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > > Changes in v2: > - Drop redundant "bindings" in subject (Krzysztof Kozlowski). > - Drop "device tree bindings" in title (Krzysztof Kozlowski). > - Put port next to other "true" properties (Krzysztof Kozlowski). > - Add Krzysztof Kozlowski's Reviewed-by tag. > > .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > > diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > new file mode 100644 > index 000000000000..bead3f0b05c5 > --- /dev/null > +++ b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > @@ -0,0 +1,65 @@ > +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/display/panel/himax,hx8394.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Himax HX8394 MIPI-DSI LCD panel controller > + > +maintainers: > + - Javier Martinez Canillas <javierm@redhat.com> > + > +description: > + Device tree bindings for panels based on the Himax HX8394 controller, > + such as the HannStar HSD060BHW4 720x1440 TFT LCD panel connected with > + a MIPI-DSI video interface. > + > +allOf: > + - $ref: panel-common.yaml# > + > +properties: > + compatible: > + enum: > + # HannStar HSD060BHW4 5.99" 720x1440 TFT LCD panel > + - hannstar,hsd060bhw4 > + > + vcc-supply: > + description: Panel power supply > + > + iovcc-supply: > + description: I/O voltage supply > + > + port: true > + > + reset-gpios: true > + > + backlight: true > + > +required: > + - compatible > + - vcc-supply > + - iovcc-supply > + - port Does not look like you tested the bindings. Please run `make dt_binding_check` (see Documentation/devicetree/bindings/writing-schema.rst for instructions). Best regards, Krzysztof ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller @ 2022-12-27 7:44 ` Krzysztof Kozlowski 0 siblings, 0 replies; 22+ messages in thread From: Krzysztof Kozlowski @ 2022-12-27 7:44 UTC (permalink / raw) To: Javier Martinez Canillas, linux-kernel Cc: devicetree, Krzysztof Kozlowski, Robert Mader, dri-devel, Tom Fitzhenry, Martijn Braam, Rob Herring, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Thierry Reding, Sam Ravnborg, Maya Matuszczyk On 26/12/2022 14:49, Javier Martinez Canillas wrote: > Add device tree bindings for panels based on the Himax HX8394 controller, > such as the HannStar HSD060BHW4 720x1440 TFT LCD panel that is connected > through a MIPI-DSI video interface. > > Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > > Changes in v2: > - Drop redundant "bindings" in subject (Krzysztof Kozlowski). > - Drop "device tree bindings" in title (Krzysztof Kozlowski). > - Put port next to other "true" properties (Krzysztof Kozlowski). > - Add Krzysztof Kozlowski's Reviewed-by tag. > > .../bindings/display/panel/himax,hx8394.yaml | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > > diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > new file mode 100644 > index 000000000000..bead3f0b05c5 > --- /dev/null > +++ b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml > @@ -0,0 +1,65 @@ > +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/display/panel/himax,hx8394.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Himax HX8394 MIPI-DSI LCD panel controller > + > +maintainers: > + - Javier Martinez Canillas <javierm@redhat.com> > + > +description: > + Device tree bindings for panels based on the Himax HX8394 controller, > + such as the HannStar HSD060BHW4 720x1440 TFT LCD panel connected with > + a MIPI-DSI video interface. > + > +allOf: > + - $ref: panel-common.yaml# > + > +properties: > + compatible: > + enum: > + # HannStar HSD060BHW4 5.99" 720x1440 TFT LCD panel > + - hannstar,hsd060bhw4 > + > + vcc-supply: > + description: Panel power supply > + > + iovcc-supply: > + description: I/O voltage supply > + > + port: true > + > + reset-gpios: true > + > + backlight: true > + > +required: > + - compatible > + - vcc-supply > + - iovcc-supply > + - port Does not look like you tested the bindings. Please run `make dt_binding_check` (see Documentation/devicetree/bindings/writing-schema.rst for instructions). Best regards, Krzysztof ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller 2022-12-27 7:44 ` Krzysztof Kozlowski @ 2022-12-27 10:46 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-27 10:46 UTC (permalink / raw) To: Krzysztof Kozlowski, linux-kernel Cc: Ondrej Jirman, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Daniel Vetter, David Airlie, Krzysztof Kozlowski, Rob Herring, Thierry Reding, devicetree, dri-devel Hello Krzysztof, On 12/27/22 08:44, Krzysztof Kozlowski wrote: [...] >> +required: >> + - compatible >> + - vcc-supply >> + - iovcc-supply >> + - port > > Does not look like you tested the bindings. Please run `make > dt_binding_check` (see > Documentation/devicetree/bindings/writing-schema.rst for instructions). > Indeed. I did test in v1 but forgot to do it after addressing your comments for v2. I have fixed the example snippet now and done it: $ make dt_binding_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml LINT Documentation/devicetree/bindings CHKDT Documentation/devicetree/bindings/processed-schema.json SCHEMA Documentation/devicetree/bindings/processed-schema.json DTEX Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dts DTC_CHK Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller @ 2022-12-27 10:46 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-27 10:46 UTC (permalink / raw) To: Krzysztof Kozlowski, linux-kernel Cc: devicetree, Krzysztof Kozlowski, Robert Mader, dri-devel, Tom Fitzhenry, Martijn Braam, Rob Herring, Ondrej Jirman, Peter Robinson, Kamil Trzciński, Thierry Reding, Sam Ravnborg, Maya Matuszczyk Hello Krzysztof, On 12/27/22 08:44, Krzysztof Kozlowski wrote: [...] >> +required: >> + - compatible >> + - vcc-supply >> + - iovcc-supply >> + - port > > Does not look like you tested the bindings. Please run `make > dt_binding_check` (see > Documentation/devicetree/bindings/writing-schema.rst for instructions). > Indeed. I did test in v1 but forgot to do it after addressing your comments for v2. I have fixed the example snippet now and done it: $ make dt_binding_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml LINT Documentation/devicetree/bindings CHKDT Documentation/devicetree/bindings/processed-schema.json SCHEMA Documentation/devicetree/bindings/processed-schema.json DTEX Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dts DTC_CHK Documentation/devicetree/bindings/display/panel/himax,hx8394.example.dtb -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v2 3/4] MAINTAINERS: Add entry for Himax HX8394 panel controller driver 2022-12-26 13:49 ` Javier Martinez Canillas ` (4 preceding siblings ...) (?) @ 2022-12-26 13:49 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas Add myself as maintainer for the driver and devicetree bindings schema. Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- (no changes since v1) MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 2e832cf29bec..175d72203fb6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6480,6 +6480,13 @@ S: Maintained T: git git://anongit.freedesktop.org/drm/drm-misc F: drivers/gpu/drm/tiny/gm12u320.c +DRM DRIVER FOR HIMAX HX8394 MIPI-DSI LCD panels +M: Javier Martinez Canillas <javierm@redhat.com> +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml +F: drivers/gpu/drm/panel/panel-himax-hx8394.c + DRM DRIVER FOR HX8357D PANELS M: Emma Anholt <emma@anholt.net> S: Maintained -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH v2 4/4] arm64: dts: rk3399-pinephone-pro: Add internal display support 2022-12-26 13:49 ` Javier Martinez Canillas (?) @ 2022-12-26 13:49 ` Javier Martinez Canillas -1 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, devicetree, linux-arm-kernel, linux-rockchip From: Ondrej Jirman <megi@xff.cz> The phone's display is using Hannstar LCD panel, and Goodix based touchscreen. Support it. Signed-off-by: Ondrej Jirman <megi@xff.cz> Co-developed-by: Martijn Braam <martijn@brixit.nl> Signed-off-by: Martijn Braam <martijn@brixit.nl> Co-developed-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- Changes in v2: - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). .../dts/rockchip/rk3399-pinephone-pro.dts | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts index 0e4442b59a55..55048236eef7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts @@ -29,6 +29,12 @@ chosen { stdout-path = "serial2:1500000n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm0 0 1000000 0>; + pwm-delay-us = <10000>; + }; + gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; @@ -81,6 +87,32 @@ vcc1v8_codec: vcc1v8-codec-regulator { regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; }; + + /* MIPI DSI panel 1.8v supply */ + vcc1v8_lcd: vcc1v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc1v8_lcd"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren1>; + }; + + /* MIPI DSI panel 2.8v supply */ + vcc2v8_lcd: vcc2v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc2v8_lcd"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren>; + }; }; &cpu_l0 { @@ -111,6 +143,11 @@ &emmc_phy { status = "okay"; }; +&gpu { + mali-supply = <&vdd_gpu>; + status = "okay"; +}; + &i2c0 { clock-frequency = <400000>; i2c-scl-rising-time-ns = <168>; @@ -193,6 +230,9 @@ vcc3v0_touch: LDO_REG2 { regulator-name = "vcc3v0_touch"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; + regulator-state-mem { + regulator-off-in-suspend; + }; }; vcca1v8_codec: LDO_REG3 { @@ -326,6 +366,25 @@ opp07 { }; }; +&i2c3 { + i2c-scl-rising-time-ns = <450>; + i2c-scl-falling-time-ns = <15>; + status = "okay"; + + touchscreen@14 { + compatible = "goodix,gt917s"; + reg = <0x14>; + interrupt-parent = <&gpio3>; + interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>; + irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>; + AVDD28-supply = <&vcc3v0_touch>; + VDDIO-supply = <&vcc3v0_touch>; + touchscreen-size-x = <720>; + touchscreen-size-y = <1440>; + }; +}; + &io_domains { bt656-supply = <&vcc1v8_dvp>; audio-supply = <&vcca1v8_codec>; @@ -334,6 +393,40 @@ &io_domains { status = "okay"; }; +&mipi_dsi { + status = "okay"; + clock-master; + + ports { + mipi_out: port@1 { + #address-cells = <0>; + #size-cells = <0>; + reg = <1>; + + mipi_out_panel: endpoint { + remote-endpoint = <&mipi_in_panel>; + }; + }; + }; + + panel@0 { + compatible = "hannstar,hsd060bhw4"; + reg = <0>; + backlight = <&backlight>; + reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>; + vcc-supply = <&vcc2v8_lcd>; + iovcc-supply = <&vcc1v8_lcd>; + pinctrl-names = "default"; + pinctrl-0 = <&display_rst_l>; + + port { + mipi_in_panel: endpoint { + remote-endpoint = <&mipi_out_panel>; + }; + }; + }; +}; + &pmu_io_domains { pmu1830-supply = <&vcc_1v8>; status = "okay"; @@ -360,6 +453,20 @@ vsel2_pin: vsel2-pin { }; }; + dsi { + display_rst_l: display-rst-l { + rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren: display-pwren { + rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren1: display-pwren1 { + rockchip,pins = <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>; + }; + }; + sound { vcc1v8_codec_en: vcc1v8-codec-en { rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; @@ -367,6 +474,10 @@ vcc1v8_codec_en: vcc1v8-codec-en { }; }; +&pwm0 { + status = "okay"; +}; + &sdmmc { bus-width = <4>; cap-sd-highspeed; @@ -396,3 +507,15 @@ &tsadc { &uart2 { status = "okay"; }; + +&vopb { + status = "okay"; + assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>, + <&cru ACLK_VOP0>, <&cru HCLK_VOP0>; + assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; + assigned-clock-parents = <&cru PLL_CPLL>, <&cru DCLK_VOP0_FRAC>; +}; + +&vopb_mmu { + status = "okay"; +}; -- 2.38.1 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH v2 4/4] arm64: dts: rk3399-pinephone-pro: Add internal display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, devicetree, linux-arm-kernel, linux-rockchip From: Ondrej Jirman <megi@xff.cz> The phone's display is using Hannstar LCD panel, and Goodix based touchscreen. Support it. Signed-off-by: Ondrej Jirman <megi@xff.cz> Co-developed-by: Martijn Braam <martijn@brixit.nl> Signed-off-by: Martijn Braam <martijn@brixit.nl> Co-developed-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- Changes in v2: - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). .../dts/rockchip/rk3399-pinephone-pro.dts | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts index 0e4442b59a55..55048236eef7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts @@ -29,6 +29,12 @@ chosen { stdout-path = "serial2:1500000n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm0 0 1000000 0>; + pwm-delay-us = <10000>; + }; + gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; @@ -81,6 +87,32 @@ vcc1v8_codec: vcc1v8-codec-regulator { regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; }; + + /* MIPI DSI panel 1.8v supply */ + vcc1v8_lcd: vcc1v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc1v8_lcd"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren1>; + }; + + /* MIPI DSI panel 2.8v supply */ + vcc2v8_lcd: vcc2v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc2v8_lcd"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren>; + }; }; &cpu_l0 { @@ -111,6 +143,11 @@ &emmc_phy { status = "okay"; }; +&gpu { + mali-supply = <&vdd_gpu>; + status = "okay"; +}; + &i2c0 { clock-frequency = <400000>; i2c-scl-rising-time-ns = <168>; @@ -193,6 +230,9 @@ vcc3v0_touch: LDO_REG2 { regulator-name = "vcc3v0_touch"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; + regulator-state-mem { + regulator-off-in-suspend; + }; }; vcca1v8_codec: LDO_REG3 { @@ -326,6 +366,25 @@ opp07 { }; }; +&i2c3 { + i2c-scl-rising-time-ns = <450>; + i2c-scl-falling-time-ns = <15>; + status = "okay"; + + touchscreen@14 { + compatible = "goodix,gt917s"; + reg = <0x14>; + interrupt-parent = <&gpio3>; + interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>; + irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>; + AVDD28-supply = <&vcc3v0_touch>; + VDDIO-supply = <&vcc3v0_touch>; + touchscreen-size-x = <720>; + touchscreen-size-y = <1440>; + }; +}; + &io_domains { bt656-supply = <&vcc1v8_dvp>; audio-supply = <&vcca1v8_codec>; @@ -334,6 +393,40 @@ &io_domains { status = "okay"; }; +&mipi_dsi { + status = "okay"; + clock-master; + + ports { + mipi_out: port@1 { + #address-cells = <0>; + #size-cells = <0>; + reg = <1>; + + mipi_out_panel: endpoint { + remote-endpoint = <&mipi_in_panel>; + }; + }; + }; + + panel@0 { + compatible = "hannstar,hsd060bhw4"; + reg = <0>; + backlight = <&backlight>; + reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>; + vcc-supply = <&vcc2v8_lcd>; + iovcc-supply = <&vcc1v8_lcd>; + pinctrl-names = "default"; + pinctrl-0 = <&display_rst_l>; + + port { + mipi_in_panel: endpoint { + remote-endpoint = <&mipi_out_panel>; + }; + }; + }; +}; + &pmu_io_domains { pmu1830-supply = <&vcc_1v8>; status = "okay"; @@ -360,6 +453,20 @@ vsel2_pin: vsel2-pin { }; }; + dsi { + display_rst_l: display-rst-l { + rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren: display-pwren { + rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren1: display-pwren1 { + rockchip,pins = <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>; + }; + }; + sound { vcc1v8_codec_en: vcc1v8-codec-en { rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; @@ -367,6 +474,10 @@ vcc1v8_codec_en: vcc1v8-codec-en { }; }; +&pwm0 { + status = "okay"; +}; + &sdmmc { bus-width = <4>; cap-sd-highspeed; @@ -396,3 +507,15 @@ &tsadc { &uart2 { status = "okay"; }; + +&vopb { + status = "okay"; + assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>, + <&cru ACLK_VOP0>, <&cru HCLK_VOP0>; + assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; + assigned-clock-parents = <&cru PLL_CPLL>, <&cru DCLK_VOP0_FRAC>; +}; + +&vopb_mmu { + status = "okay"; +}; -- 2.38.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH v2 4/4] arm64: dts: rk3399-pinephone-pro: Add internal display support @ 2022-12-26 13:49 ` Javier Martinez Canillas 0 siblings, 0 replies; 22+ messages in thread From: Javier Martinez Canillas @ 2022-12-26 13:49 UTC (permalink / raw) To: linux-kernel Cc: Ondrej Jirman, Krzysztof Kozlowski, Robert Mader, Sam Ravnborg, Maya Matuszczyk, Kamil Trzciński, Martijn Braam, Peter Robinson, Tom Fitzhenry, Javier Martinez Canillas, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring, devicetree, linux-arm-kernel, linux-rockchip From: Ondrej Jirman <megi@xff.cz> The phone's display is using Hannstar LCD panel, and Goodix based touchscreen. Support it. Signed-off-by: Ondrej Jirman <megi@xff.cz> Co-developed-by: Martijn Braam <martijn@brixit.nl> Signed-off-by: Martijn Braam <martijn@brixit.nl> Co-developed-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Kamil Trzciński <ayufan@ayufan.eu> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> --- Changes in v2: - Fix regulator node names (Maya Matuszczyk). - Drop non-existent "poweroff-in-suspend" property (Maya Matuszczyk). - Remove unnecessary comments in panel node (Maya Matuszczyk). .../dts/rockchip/rk3399-pinephone-pro.dts | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts index 0e4442b59a55..55048236eef7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts @@ -29,6 +29,12 @@ chosen { stdout-path = "serial2:1500000n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm0 0 1000000 0>; + pwm-delay-us = <10000>; + }; + gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; @@ -81,6 +87,32 @@ vcc1v8_codec: vcc1v8-codec-regulator { regulator-max-microvolt = <1800000>; vin-supply = <&vcc3v3_sys>; }; + + /* MIPI DSI panel 1.8v supply */ + vcc1v8_lcd: vcc1v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc1v8_lcd"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren1>; + }; + + /* MIPI DSI panel 2.8v supply */ + vcc2v8_lcd: vcc2v8-lcd-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc2v8_lcd"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + vin-supply = <&vcc3v3_sys>; + gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&display_pwren>; + }; }; &cpu_l0 { @@ -111,6 +143,11 @@ &emmc_phy { status = "okay"; }; +&gpu { + mali-supply = <&vdd_gpu>; + status = "okay"; +}; + &i2c0 { clock-frequency = <400000>; i2c-scl-rising-time-ns = <168>; @@ -193,6 +230,9 @@ vcc3v0_touch: LDO_REG2 { regulator-name = "vcc3v0_touch"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; + regulator-state-mem { + regulator-off-in-suspend; + }; }; vcca1v8_codec: LDO_REG3 { @@ -326,6 +366,25 @@ opp07 { }; }; +&i2c3 { + i2c-scl-rising-time-ns = <450>; + i2c-scl-falling-time-ns = <15>; + status = "okay"; + + touchscreen@14 { + compatible = "goodix,gt917s"; + reg = <0x14>; + interrupt-parent = <&gpio3>; + interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>; + irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>; + AVDD28-supply = <&vcc3v0_touch>; + VDDIO-supply = <&vcc3v0_touch>; + touchscreen-size-x = <720>; + touchscreen-size-y = <1440>; + }; +}; + &io_domains { bt656-supply = <&vcc1v8_dvp>; audio-supply = <&vcca1v8_codec>; @@ -334,6 +393,40 @@ &io_domains { status = "okay"; }; +&mipi_dsi { + status = "okay"; + clock-master; + + ports { + mipi_out: port@1 { + #address-cells = <0>; + #size-cells = <0>; + reg = <1>; + + mipi_out_panel: endpoint { + remote-endpoint = <&mipi_in_panel>; + }; + }; + }; + + panel@0 { + compatible = "hannstar,hsd060bhw4"; + reg = <0>; + backlight = <&backlight>; + reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>; + vcc-supply = <&vcc2v8_lcd>; + iovcc-supply = <&vcc1v8_lcd>; + pinctrl-names = "default"; + pinctrl-0 = <&display_rst_l>; + + port { + mipi_in_panel: endpoint { + remote-endpoint = <&mipi_out_panel>; + }; + }; + }; +}; + &pmu_io_domains { pmu1830-supply = <&vcc_1v8>; status = "okay"; @@ -360,6 +453,20 @@ vsel2_pin: vsel2-pin { }; }; + dsi { + display_rst_l: display-rst-l { + rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren: display-pwren { + rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + display_pwren1: display-pwren1 { + rockchip,pins = <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>; + }; + }; + sound { vcc1v8_codec_en: vcc1v8-codec-en { rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; @@ -367,6 +474,10 @@ vcc1v8_codec_en: vcc1v8-codec-en { }; }; +&pwm0 { + status = "okay"; +}; + &sdmmc { bus-width = <4>; cap-sd-highspeed; @@ -396,3 +507,15 @@ &tsadc { &uart2 { status = "okay"; }; + +&vopb { + status = "okay"; + assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>, + <&cru ACLK_VOP0>, <&cru HCLK_VOP0>; + assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; + assigned-clock-parents = <&cru PLL_CPLL>, <&cru DCLK_VOP0_FRAC>; +}; + +&vopb_mmu { + status = "okay"; +}; -- 2.38.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
end of thread, other threads:[~2022-12-27 10:47 UTC | newest] Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-12-26 13:49 [PATCH v2 0/4] Add PinePhone Pro display support Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 13:49 ` [PATCH v2 1/4] drm: panel: Add Himax HX8394 panel controller driver Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 15:05 ` Sam Ravnborg 2022-12-26 15:05 ` Sam Ravnborg 2022-12-26 16:43 ` Javier Martinez Canillas 2022-12-26 16:43 ` Javier Martinez Canillas 2022-12-26 13:49 ` [PATCH v2 2/4] dt-bindings: display: Add Himax HX8394 panel controller Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 18:23 ` Rob Herring 2022-12-26 18:23 ` Rob Herring 2022-12-27 7:44 ` Krzysztof Kozlowski 2022-12-27 7:44 ` Krzysztof Kozlowski 2022-12-27 10:46 ` Javier Martinez Canillas 2022-12-27 10:46 ` Javier Martinez Canillas 2022-12-26 13:49 ` [PATCH v2 3/4] MAINTAINERS: Add entry for Himax HX8394 panel controller driver Javier Martinez Canillas 2022-12-26 13:49 ` [PATCH v2 4/4] arm64: dts: rk3399-pinephone-pro: Add internal display support Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas 2022-12-26 13:49 ` Javier Martinez Canillas
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.