Add new panel driver Samsung S6E88A0-AMS427AP24
Subsystems (4)
v4 cover Add new panel driver Samsung S6E88A0-AMS427AP24
The patchset adds a new driver for Samsung AMS427AP24 panel with S6E88A0 controller. Patches are based on current branch drm-misc-next.
The discussion in v3 was not finished. I send v4 nonetheless as a new base to continue the discussion. I hope that's ok.
Changes in v4:
Patch 3
- Removed include <linux/of.h>, it's not needed.
- Added comments to the mipi_dsi_dcs_write_seq_multi() lines in function s6e88a0_ams427ap24_on().
Patch 4
- New defines for payload data length, thereof a fixed and a variable part.
- In the array s6e88a0_ams427ap24_br_to_cd[] made the comment about the columns more clear and added an additional column "brightness from".
- Array s6e88a0_ams427ap24_aid[] reduced from five to two columns and s6e88a0_ams427ap24_elvss[] from two to one column. Now they hold the variable data only. I kept s6e88a0_ams427ap24_elvss[] as a two-dimensional array to allow using the same memcopy procedure for all three buffers aid, elvss and gamma in function s6e88a0_ams427ap24_set_brightness().
- In function s6e88a0_ams427ap24_set_brightness() initialized prototype payload array for b2 and b6 commands. And in the memcpy commands below used the new defines for the fixed and variable data length.
Patch 5
- Added a comment to the mipi_dsi_dcs_write_seq_multi() line, according to the other lines before and after.
v1: https://lore.kernel.org/dri-devel/[email protected]/T/#t
v2: https://lore.kernel.org/dri-devel/[email protected]/T/#t
v3: https://lore.kernel.org/dri-devel/[email protected]/T/#t
Jakob Hauser (5):
dt-bindings: display: panel: Move flip properties to panel-common
dt-bindings: display: panel: Add Samsung S6E88A0-AMS427AP24 drm/panel: samsung-s6e88a0-ams427ap24: Add initial driver drm/panel: samsung-s6e88a0-ams427ap24: Add brightness control drm/panel: samsung-s6e88a0-ams427ap24: Add flip option
.../bindings/display/panel/panel-common.yaml | 8 + .../panel/samsung,s6e88a0-ams427ap24.yaml | 65 ++ .../display/panel/samsung,s6e8aa0.yaml | 10 +- drivers/gpu/drm/panel/Kconfig | 10 + drivers/gpu/drm/panel/Makefile | 1 + .../panel/panel-samsung-s6e88a0-ams427ap24.c | 766 ++++++++++++++++++ 6 files changed, 852 insertions(+), 8 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/panel/samsung,s6e88a0-ams427ap24.yaml create mode 100644 drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c
Signature · 1 line
2.39.5
PATCH v4 1/5 dt-bindings: display: panel: Move flip properties to panel-common
The flip properties were used by "samsung,s6e8aa0.yaml" only so far. By introducing "samsung,s6e88a0-ams427ap24.yaml" they become more common.
---
Patch is based on current branch drm-misc-next.
--- .../bindings/display/panel/panel-common.yaml | 8 ++++++++ .../bindings/display/panel/samsung,s6e8aa0.yaml | 10 ++-------- 2 files changed, 10 insertions(+), 8 deletions(-)
Documentation/devicetree/bindings/display/panel/panel-common.yaml +8 -0
@@ -51,6 +51,14 @@ properties: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 90, 180, 270] + flip-horizontal: + description: boolean to flip image horizontally + type: boolean + + flip-vertical: + description: boolean to flip image vertically + type: boolean + # Display Timings panel-timing: description:
Documentation/devicetree/bindings/display/panel/samsung,s6e8aa0.yaml +2 -8
@@ -21,6 +21,8 @@ properties: reset-gpios: true display-timings: true + flip-horizontal: true + flip-vertical: true vdd3-supply: description: core voltage supply
@@ -46,14 +48,6 @@ properties: panel-height-mm: description: physical panel height [mm] - flip-horizontal: - description: boolean to flip image horizontally - type: boolean - - flip-vertical: - description: boolean to flip image vertically - type: boolean - required: - compatible - reg
Signature · 1 line
2.39.5
PATCH v4 2/5 dt-bindings: display: panel: Add Samsung S6E88A0-AMS427AP24
In reply to Jakob HauserAdd bindings for Samsung AMS427AP24 panel with S6E88A0 controller.
---
Patch is based on current branch drm-misc-next.
--- .../panel/samsung,s6e88a0-ams427ap24.yaml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/samsung,s6e88a0-ams427ap24.yaml
Documentation/devicetree/bindings/display/panel/samsung,s6e88a0-ams427ap24.yaml new file +65 -0
@@ -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/samsung,s6e88a0-ams427ap24.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Samsung AMS427AP24 panel with S6E88A0 controller + +maintainers: + - Jakob Hauser <[email protected]> + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + const: samsung,s6e88a0-ams427ap24 + + reg: + maxItems: 1 + + port: true + reset-gpios: true + flip-horizontal: true + + vdd3-supply: + description: core voltage supply + + vci-supply: + description: voltage supply for analog circuits + +required: + - compatible + - reg + - port + - reset-gpios + - vdd3-supply + - vci-supply + +additionalProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + + dsi { + #address-cells = <1>; + #size-cells = <0>; + + panel@0 { + compatible = "samsung,s6e88a0-ams427ap24"; + reg = <0>; + + vdd3-supply = <&pm8916_l17>; + vci-supply = <&pm8916_l6>; + reset-gpios = <&tlmm 25 GPIO_ACTIVE_LOW>; + flip-horizontal; + + port { + panel_in: endpoint { + remote-endpoint = <&mdss_dsi0_out>; + }; + }; + }; + };
Signature · 1 line
2.39.5
PATCH v4 3/5 drm/panel: samsung-s6e88a0-ams427ap24: Add initial driver
In reply to Jakob HauserThis initial part of the panel driver was mostly generated by the "linux-mdss-dsi-panel-driver-generator" tool [1], reading downstream Android kernel file "dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [2].
On top of the generic output of the tool, there were a couple of changes applied:
- Added mipi_dsi_dcs_set_display_on() to function s6e88a0_ams427ap24_on(), otherwise the display does not show up.
- In functions s6e88a0_ams427ap24_on() and s6e88a0_ams427ap24_off() changed DSI commands to multi context and used "accum_err" returns.
- In functions s6e88a0_ams427ap24_on() and s6e88a0_ams427ap24_off() replaced msleep() by mipi_dsi_msleep().
- The function s6e88a0_ams427ap24_get_modes() was changed to make use of drm_connector_helper_get_modes_fixed(). This also required to include drm/drm_probe_helper.h.
- In function s6e88a0_ams427ap24_probe() registring the regulators was changed to devm_regulator_bulk_get_const(). This required to change supplies in struct s6e88a0_ams427ap24 to a pointer.
- Removed bool "prepared" from struct s6e88a0_ams427ap24 and according parts in functions s6e88a0_ams427ap24_prepare() and s6e88a0_ams427ap24_unprepare().
- Removed include <linux/of.h>, it's not needed.
- Added comments to the mipi_dsi_dcs_write_seq_multi() lines in function s6e88a0_ams427ap24_on().
[1] https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generator
[2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi
---
Changes in v4:
- Removed include <linux/of.h>, it's not needed.
- Added comments to the mipi_dsi_dcs_write_seq_multi() lines in function s6e88a0_ams427ap24_on().
--- drivers/gpu/drm/panel/Kconfig | 9 + drivers/gpu/drm/panel/Makefile | 1 + .../panel/panel-samsung-s6e88a0-ams427ap24.c | 251 ++++++++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c
drivers/gpu/drm/panel/Kconfig +9 -0
@@ -632,6 +632,15 @@ config DRM_PANEL_SAMSUNG_AMS639RQ08 Say Y or M here if you want to enable support for the Samsung AMS639RQ08 FHD Plus (2340x1080@60Hz) CMD mode panel. +config DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 + tristate "Samsung AMS427AP24 panel with S6E88A0 controller" + depends on GPIOLIB && OF && REGULATOR + depends on DRM_MIPI_DSI + help + Say Y here if you want to enable support for Samsung AMS427AP24 panel + with S6E88A0 controller (found in Samsung Galaxy S4 Mini Value Edition + GT-I9195I). To compile this driver as a module, choose M here. + config DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 tristate "Samsung AMS452EF01 panel with S6E88A0 DSI video mode controller" depends on OF
drivers/gpu/drm/panel/Makefile +1 -0
@@ -77,6 +77,7 @@ obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03) += panel-samsung-s6e63j0x03.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63M0) += panel-samsung-s6e63m0.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI) += panel-samsung-s6e63m0-spi.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI) += panel-samsung-s6e63m0-dsi.o +obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24) += panel-samsung-s6e88a0-ams427ap24.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01) += panel-samsung-s6e88a0-ams452ef01.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0) += panel-samsung-s6e8aa0.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_SOFEF00) += panel-samsung-sofef00.o
drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c new file +251 -0
251 lines not on this page · raw message
Signature · 1 line
2.39.5
Re: [PATCH v4 3/5] drm/panel: samsung-s6e88a0-ams427ap24: Add initial driver
Quoted 24 lines · Jakob Hauser
This initial part of the panel driver was mostly generated by the "linux-mdss-dsi-panel-driver-generator" tool [1], reading downstream Android kernel file "
dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [2].On top of the generic output of the tool, there were a couple of changes applied:
- Addedmipi_dsi_dcs_set_display_on()to functions6e88a0_ams427ap24_on(), otherwise the display does not show up.
- In functionss6e88a0_ams427ap24_on()ands6e88a0_ams427ap24_off()changed DSI commands to multi context and used "accum_err" returns.
- In functionss6e88a0_ams427ap24_on()ands6e88a0_ams427ap24_off()replacedmsleep()bymipi_dsi_msleep().
- The functions6e88a0_ams427ap24_get_modes()was changed to make use ofdrm_connector_helper_get_modes_fixed(). This also required to includedrm/drm_probe_helper.h.
- In functions6e88a0_ams427ap24_probe()registring the regulators was changed todevm_regulator_bulk_get_const(). This required to change supplies in structs6e88a0_ams427ap24to a pointer.
- Removed bool "prepared" from structs6e88a0_ams427ap24and according parts in functionss6e88a0_ams427ap24_prepare()ands6e88a0_ams427ap24_unprepare().
- Removed include <linux/of.h>, it's not needed.
- Added comments to themipi_dsi_dcs_write_seq_multi()lines in functions6e88a0_ams427ap24_on().
Quoted 4 lines
[1] https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generator
[2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsiSigned-off-by Jakob Hauser <[email protected]>
Comments instead of #defines?
OK then, it's readable too.
Yours,
Linus Walleij
PATCH v4 4/5 drm/panel: samsung-s6e88a0-ams427ap24: Add brightness control
In reply to Jakob HauserThe tables for brightness to candela, aid and elvss were taken from downstream kernel file "dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [1][2][3].
The gamma table gets generated in "ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c" [4] with hard-coded starting values. The function smart_dimming_init() [5] goes through the v{*}_adjustments, generate_gray_scale and gamma_init procedure. Instead of calculating it manually, it's easier to compile a custom downstream kernel with SMART_DIMMING_DEBUG enabled and read out dmesg early at boot.
Selection of the values for aid and elvss are again according to downstream file "dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [6][7].
The set of write commands is guided by downstream file "ss_dsi_panel_common.c" [8] followed by "ss_dsi_panel_S6E88A0_AMS427AP24.c" [9].
The dsi mode flag MIPI_DSI_MODE_VIDEO_NO_HFP prevents screen flickering while changing the brightness.
[1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L341-L397
[2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L214-L254
[3] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L301-L320
[4] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c
[5] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c#L1816-L1900
[6] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L256-L268
[7] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L322-L334
[8] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/ss_dsi_panel_common.c#L1389-L1517
[9] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_panel_S6E88A0_AMS427AP24.c#L666-L678
---
Changes in v4:
- New defines for payload data length, thereof a fixed and a variable part.
- In the array s6e88a0_ams427ap24_br_to_cd[] made the comment about the columns more clear and added an additional column "brightness from".
- Array s6e88a0_ams427ap24_aid[] reduced from five to two columns and s6e88a0_ams427ap24_elvss[] from two to one column. Now they hold the variable data only. I kept s6e88a0_ams427ap24_elvss[] as a two-dimensional array to allow using the same memcopy procedure for all three buffers aid, elvss and gamma in function s6e88a0_ams427ap24_set_brightness().
- In function s6e88a0_ams427ap24_set_brightness() initialized prototype payload array for b2 and b6 commands. And in the memcpy commands below used the new defines for the fixed and variable data length.
--- drivers/gpu/drm/panel/Kconfig | 1 + .../panel/panel-samsung-s6e88a0-ams427ap24.c | 532 +++++++++++++++++- 2 files changed, 521 insertions(+), 12 deletions(-)
drivers/gpu/drm/panel/Kconfig +1 -0
@@ -636,6 +636,7 @@ config DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 tristate "Samsung AMS427AP24 panel with S6E88A0 controller" depends on GPIOLIB && OF && REGULATOR depends on DRM_MIPI_DSI + depends on BACKLIGHT_CLASS_DEVICE help Say Y here if you want to enable support for Samsung AMS427AP24 panel with S6E88A0 controller (found in Samsung Galaxy S4 Mini Value Edition
drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c +520 -12
584 lines not on this page · raw message
Signature · 1 line
2.39.5
Re: [PATCH v4 4/5] drm/panel: samsung-s6e88a0-ams427ap24: Add brightness control
Quoted 28 lines · Jakob Hauser
The tables for brightness to candela, aid and elvss were taken from downstream kernel file "
dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [1][2][3].The gamma table gets generated in "
ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c" [4] with hard-coded starting values. The functionsmart_dimming_init()[5] goes through the v{*}_adjustments,generate_gray_scaleandgamma_initprocedure. Instead of calculating it manually, it's easier to compile a custom downstream kernel withSMART_DIMMING_DEBUGenabled and read out dmesg early at boot.Selection of the values for aid and elvss are again according to downstream file "
dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi" [6][7].The set of write commands is guided by downstream file "
ss_dsi_panel_common.c" [8] followed by "ss_dsi_panel_S6E88A0_AMS427AP24.c" [9].The dsi mode flag
MIPI_DSI_MODE_VIDEO_NO_HFPprevents screen flickering while changing the brightness.[1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L341-L397
[2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L214-L254
[3] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L301-L320
[4] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c
[5] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_smart_dimming_S6E88A0_AMS427AP24.c#L1816-L1900
[6] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L256-L268
[7] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/dsi_panel_S6E88A0_AMS427AP24_qhd_octa_video.dtsi#L322-L334
[8] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/ss_dsi_panel_common.c#L1389-L1517
[9] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/video/msm/mdss/samsung/S6E88A0_AMS427AP24/ss_dsi_panel_S6E88A0_AMS427AP24.c#L666-L678
Quoted 2 lines
Signed-off-by Jakob Hauser <[email protected]>Reviewed-by Neil Armstrong <[email protected]>
Yours,
Linus Walleij
PATCH v4 5/5 drm/panel: samsung-s6e88a0-ams427ap24: Add flip option
In reply to Jakob HauserThe way of implementing a flip option follows the existing panel-samsung-s6e8aa0.c [1][2][3].
The value to flip the screen is taken from a downstream kernel file of a similar but older panel [4]. The mipi clock [5] for the new panel samsung-s6e88a0-ams427ap24 matches 461 MHz and a hardware read-out of the 0xcb values corresponds to revision R01 of that older panel [6]. Although for samsung-s6e88a0-ams427ap24 that's in non-flipped state while in this older driver it seems to be the other way around. Further up there is a hint [7] basically saying for revision R01 to change the first word of the 0xcb command from 0x06 to 0x0e, which is actually setting BIT(3) of that word. This causes a horizontal flip.
[1] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L103
[2] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L207-L211
[3] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L954-L974
[4] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c
[5] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L2027-L2028
[6] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L137-L151
[7] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L66-L74
---
Changes in v4:
- Added a comment to the mipi_dsi_dcs_write_seq_multi() line, according to the other lines before and after.
--- drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/gpu/drm/panel/panel-samsung-s6e88a0-ams427ap24.c +7 -0
@@ -38,6 +38,7 @@ struct s6e88a0_ams427ap24 {struct mipi_dsi_device *dsi;struct regulator_bulk_data *supplies;struct gpio_desc *reset_gpio; +bool flip_horizontal; };static const struct regulator_bulk_data s6e88a0_ams427ap24_supplies[] = {
@@ -550,6 +551,10 @@ static int s6e88a0_ams427ap24_on(struct s6e88a0_ams427ap24 *ctx)mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xcc ,0x4c );// pixel clock divider pol. mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xf2 ,0x03 ,0x0d );// unknown mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xf1 ,0xa5 ,0xa5 );// level 3 key off + +if (ctx->flip_horizontal) +mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xcb ,0x0e );// flip display +mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xf0 ,0xa5 ,0xa5 );// level 1 key off mipi_dsi_dcs_write_seq_multi (&dsi_ctx,0xfc ,0xa5 ,0xa5 );// level 2 key off
@@ -710,6 +715,8 @@ static int s6e88a0_ams427ap24_probe(struct mipi_dsi_device *dsi) DRM_MODE_CONNECTOR_DSI); ctx->panel.prepare_prev_first = true; + ctx->flip_horizontal =device_property_read_bool (dev,"flip-horizontal" ); + ret =s6e88a0_ams427ap24_register_backlight (ctx);if (ret <0 )return ret;
Signature · 1 line
2.39.5
Re: [PATCH v4 5/5] drm/panel: samsung-s6e88a0-ams427ap24: Add flip option
Quoted 21 lines · Jakob Hauser
The way of implementing a flip option follows the existing
panel-samsung-s6e8aa0.c[1][2][3].The value to flip the screen is taken from a downstream kernel file of a similar but older panel [4]. The mipi clock [5] for the new panel samsung-s6e88a0-ams427ap24 matches 461 MHz and a hardware read-out of the
0xcbvalues corresponds to revision R01 of that older panel [6]. Although for samsung-s6e88a0-ams427ap24 that's in non-flipped state while in this older driver it seems to be the other way around. Further up there is a hint [7] basically saying for revision R01 to change the first word of the0xcbcommand from0x06to0x0e, which is actually setting BIT(3) of that word. This causes a horizontal flip.[1] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L103
[2] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L207-L211
[3] https://github.com/torvalds/linux/blob/v6.11/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c#L954-L974
[4] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c
[5] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L2027-L2028
[6] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L137-L151
[7] https://github.com/LineageOS/android_kernel_samsung_msm8930-common/blob/lineage-15.1/drivers/video/msm/mipi_samsung_oled_video_qhd_pt-8930.c#L66-L74
Quoted 2 lines
Signed-off-by Jakob Hauser <[email protected]>Reviewed-by Neil Armstrong <[email protected]>
Yours,
Linus Walleij
Hi,
Quoted 9 lines · Jakob Hauser
The patchset adds a new driver for Samsung AMS427AP24 panel with S6E88A0 controller. Patches are based on current branch drm-misc-next.
The discussion in v3 was not finished. I send v4 nonetheless as a new base to continue the discussion. I hope that's ok.
Changes in v4:
[...]
Thanks, Applied to https://gitlab.freedesktop.org/drm/misc/kernel.git (drm-misc-next)
[1/5] dt-bindings: display: panel: Move flip properties to panel-common
https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/3c0ecd83eee9b8584588f629e01d209f2c3a632b [2/5] dt-bindings: display: panel: Add Samsung S6E88A0-AMS427AP24 https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/4998d53df6753c3dbb6e960291715027518c61df [3/5] drm/panel: samsung-s6e88a0-ams427ap24: Add initial driver https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/d5658db2a0768a73a862f8b5fe6daae10d3abfec [4/5] drm/panel: samsung-s6e88a0-ams427ap24: Add brightness control https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/5b67fdf1668fc373b1e492e33ce7d17f7056a609 [5/5] drm/panel: samsung-s6e88a0-ams427ap24: Add flip option https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/e70d4f8e242bbc4fd39f3a867dc3e33122d7e559
Signature · 1 line
Neil