* [PATCH 0/2] Support non-default LVDS data mapping for simple
@ 2023-04-14 16:11 Johannes Zink
2023-04-14 16:11 ` [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
2023-04-14 16:11 ` [PATCH 2/2] drm/panel-simple: allow LVDS format override Johannes Zink
0 siblings, 2 replies; 7+ messages in thread
From: Johannes Zink @ 2023-04-14 16:11 UTC (permalink / raw)
To: thierry.reding, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, dri-devel, devicetree, linux-kernel,
kernel
Some LVDS panels, such as the innolux,g101ice-l01 support multiple LVDS
data mapping modes, which can be configured by strapping a dataformat
pin on the display to a specific voltage.
This can be particularly useful for using the jeida-18 format, which
requires only 3 instead of 4 LVDS lanes.
This series adds an optional data-mapping property, analogously to the
property on lvds-panel, which overrides the default data mapping set in
the panel description in simple-panel.
Best regards
Johannes
Johannes Zink (2):
dt-bindings: display: simple: support non-default data-mapping
drm/panel-simple: allow LVDS format override
.../bindings/display/panel/panel-simple.yaml | 51 +++++++++++++++++++
drivers/gpu/drm/panel/panel-simple.c | 37 +++++++++++++-
2 files changed, 87 insertions(+), 1 deletion(-)
--
2.39.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping
2023-04-14 16:11 [PATCH 0/2] Support non-default LVDS data mapping for simple Johannes Zink
@ 2023-04-14 16:11 ` Johannes Zink
2023-04-18 21:20 ` Rob Herring
2023-04-14 16:11 ` [PATCH 2/2] drm/panel-simple: allow LVDS format override Johannes Zink
1 sibling, 1 reply; 7+ messages in thread
From: Johannes Zink @ 2023-04-14 16:11 UTC (permalink / raw)
To: thierry.reding, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, dri-devel, devicetree, linux-kernel,
kernel
Cc: Johannes Zink
Some Displays support more than just a single default lvds data mapping,
which can be used to run displays on only 3 LVDS lanes in the jeida-18
data-mapping mode.
Add an optional data-mapping property, analogously to panel-lvds, to
allow overriding the default data mapping.
Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
---
.../bindings/display/panel/panel-simple.yaml | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
index 18241f4051d2..6e219f67dd67 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
+++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
@@ -349,6 +349,57 @@ properties:
power-supply: true
no-hpd: true
hpd-gpios: true
+ data-mapping:
+ enum:
+ - jeida-18
+ - jeida-24
+ - vesa-24
+ description: |
+ The color signals mapping order.
+
+ LVDS data mappings are defined as follows.
+
+ - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
+ [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
+
+ Slot 0 1 2 3 4 5 6
+ ________________ _________________
+ Clock \_______________________/
+ ______ ______ ______ ______ ______ ______ ______
+ DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
+ DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
+ DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
+
+ - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
+ specifications. Data are transferred as follows on 4 LVDS lanes.
+
+ Slot 0 1 2 3 4 5 6
+ ________________ _________________
+ Clock \_______________________/
+ ______ ______ ______ ______ ______ ______ ______
+ DATA0 ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
+ DATA1 ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
+ DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
+ DATA3 ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
+
+ - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
+ Data are transferred as follows on 4 LVDS lanes.
+
+ Slot 0 1 2 3 4 5 6
+ ________________ _________________
+ Clock \_______________________/
+ ______ ______ ______ ______ ______ ______ ______
+ DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
+ DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
+ DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
+ DATA3 ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
+
+ Control signals are mapped as follows.
+
+ CTL0: HSync
+ CTL1: VSync
+ CTL2: Data Enable
+ CTL3: 0
additionalProperties: false
--
2.39.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] drm/panel-simple: allow LVDS format override
2023-04-14 16:11 [PATCH 0/2] Support non-default LVDS data mapping for simple Johannes Zink
2023-04-14 16:11 ` [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
@ 2023-04-14 16:11 ` Johannes Zink
2023-04-17 4:46 ` Dan Carpenter
1 sibling, 1 reply; 7+ messages in thread
From: Johannes Zink @ 2023-04-14 16:11 UTC (permalink / raw)
To: thierry.reding, sam, airlied, daniel, robh+dt,
krzysztof.kozlowski+dt, dri-devel, devicetree, linux-kernel,
kernel
Cc: Johannes Zink
Some panels support multiple LVDS data mapping formats, which can be
used e.g. run displays on jeida-18 format when only 3 LVDS lanes are
available.
Add parsing of an optional data-mapping devicetree property, which also
touches up the bits per color to match the bus format.
Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
---
drivers/gpu/drm/panel/panel-simple.c | 37 +++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 065f378bba9d..7366ad13b3f1 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -40,6 +40,7 @@
#include <drm/drm_edid.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h>
+#include <drm/drm_of.h>
/**
* struct panel_desc - Describes a simple panel.
@@ -559,7 +560,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
struct device_node *ddc;
int connector_type;
u32 bus_flags;
- int err;
+ int err, ret;
panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
if (!panel)
@@ -605,6 +606,40 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
panel_simple_parse_panel_timing_node(dev, panel, &dt);
}
+
+ /* optional data-mapping property for overriding bus format */
+ ret = drm_of_lvds_get_data_mapping(dev->of_node);
+ if (ret == -EINVAL) {
+ dev_warn(dev, "Ignore invalid data-mapping property");
+ } else if (ret != -ENODEV) {
+ int bpc;
+
+ switch (ret) {
+ default:
+ WARN_ON(1);
+ fallthrough;
+ case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
+ fallthrough;
+ case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
+ bpc = 8;
+ break;
+ case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
+ bpc = 6;
+ }
+
+ if (desc->bpc != bpc || desc->bus_format != ret) {
+ struct panel_desc *override_desc;
+
+ override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
+ if (!override_desc)
+ return -ENOMEM;
+
+ override_desc->bus_format = ret;
+ override_desc->bpc = bpc;
+ panel->desc = override_desc;
+ }
+ }
+
connector_type = desc->connector_type;
/* Catch common mistakes for panels. */
switch (connector_type) {
--
2.39.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] drm/panel-simple: allow LVDS format override
2023-04-14 16:11 ` [PATCH 2/2] drm/panel-simple: allow LVDS format override Johannes Zink
@ 2023-04-17 4:46 ` Dan Carpenter
0 siblings, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2023-04-17 4:46 UTC (permalink / raw)
To: oe-kbuild, Johannes Zink, thierry.reding, sam, airlied, daniel,
robh+dt, krzysztof.kozlowski+dt, dri-devel, devicetree,
linux-kernel, kernel
Cc: lkp, oe-kbuild-all, Johannes Zink
Hi Johannes,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Johannes-Zink/dt-bindings-display-simple-support-non-default-data-mapping/20230415-001256
base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link: https://lore.kernel.org/r/20230414161116.3673911-3-j.zink%40pengutronix.de
patch subject: [PATCH 2/2] drm/panel-simple: allow LVDS format override
config: loongarch-randconfig-m031-20230415 (https://download.01.org/0day-ci/archive/20230416/202304160359.4LHmFOlU-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Link: https://lore.kernel.org/r/202304160359.4LHmFOlU-lkp@intel.com/
smatch warnings:
drivers/gpu/drm/panel/panel-simple.c:635 panel_simple_probe() warn: missing unwind goto?
vim +635 drivers/gpu/drm/panel/panel-simple.c
5f04e7ce392db9 Douglas Anderson 2021-09-14 556 static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
280921de7241ee Thierry Reding 2013-08-30 557 {
280921de7241ee Thierry Reding 2013-08-30 558 struct panel_simple *panel;
b8a2948fa2b3a5 Sean Paul 2019-07-11 559 struct display_timing dt;
0fe1564bd61642 Sam Ravnborg 2019-12-07 560 struct device_node *ddc;
9f069c6fbc7266 Sam Ravnborg 2020-07-26 561 int connector_type;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 562 u32 bus_flags;
fad6396eea4946 Johannes Zink 2023-04-14 563 int err, ret;
280921de7241ee Thierry Reding 2013-08-30 564
280921de7241ee Thierry Reding 2013-08-30 565 panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
280921de7241ee Thierry Reding 2013-08-30 566 if (!panel)
280921de7241ee Thierry Reding 2013-08-30 567 return -ENOMEM;
280921de7241ee Thierry Reding 2013-08-30 568
280921de7241ee Thierry Reding 2013-08-30 569 panel->enabled = false;
4beb04beb24afe Douglas Anderson 2020-11-09 570 panel->prepared_time = 0;
280921de7241ee Thierry Reding 2013-08-30 571 panel->desc = desc;
280921de7241ee Thierry Reding 2013-08-30 572
280921de7241ee Thierry Reding 2013-08-30 573 panel->supply = devm_regulator_get(dev, "power");
280921de7241ee Thierry Reding 2013-08-30 574 if (IS_ERR(panel->supply))
280921de7241ee Thierry Reding 2013-08-30 575 return PTR_ERR(panel->supply);
280921de7241ee Thierry Reding 2013-08-30 576
a61400d85c3ba4 Alexandre Courbot 2014-10-23 577 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
a61400d85c3ba4 Alexandre Courbot 2014-10-23 578 GPIOD_OUT_LOW);
c9b48b91e2fbb7 Yuan Can 2022-09-29 579 if (IS_ERR(panel->enable_gpio))
c9b48b91e2fbb7 Yuan Can 2022-09-29 580 return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
c9b48b91e2fbb7 Yuan Can 2022-09-29 581 "failed to request GPIO\n");
280921de7241ee Thierry Reding 2013-08-30 582
5759c9674c20ff Dmitry Osipenko 2020-08-14 583 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
5759c9674c20ff Dmitry Osipenko 2020-08-14 584 if (err) {
5759c9674c20ff Dmitry Osipenko 2020-08-14 585 dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
5759c9674c20ff Dmitry Osipenko 2020-08-14 586 return err;
5759c9674c20ff Dmitry Osipenko 2020-08-14 587 }
5759c9674c20ff Dmitry Osipenko 2020-08-14 588
280921de7241ee Thierry Reding 2013-08-30 589 ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
280921de7241ee Thierry Reding 2013-08-30 590 if (ddc) {
280921de7241ee Thierry Reding 2013-08-30 591 panel->ddc = of_find_i2c_adapter_by_node(ddc);
280921de7241ee Thierry Reding 2013-08-30 592 of_node_put(ddc);
280921de7241ee Thierry Reding 2013-08-30 593
0fe1564bd61642 Sam Ravnborg 2019-12-07 594 if (!panel->ddc)
0fe1564bd61642 Sam Ravnborg 2019-12-07 595 return -EPROBE_DEFER;
280921de7241ee Thierry Reding 2013-08-30 596 }
280921de7241ee Thierry Reding 2013-08-30 597
4a1d0dbc833223 Sam Ravnborg 2020-02-16 598 if (desc == &panel_dpi) {
4a1d0dbc833223 Sam Ravnborg 2020-02-16 599 /* Handle the generic panel-dpi binding */
4a1d0dbc833223 Sam Ravnborg 2020-02-16 600 err = panel_dpi_probe(dev, panel);
4a1d0dbc833223 Sam Ravnborg 2020-02-16 601 if (err)
4a1d0dbc833223 Sam Ravnborg 2020-02-16 602 goto free_ddc;
6df4432a5eca10 Christoph Niedermaier 2022-02-01 603 desc = panel->desc;
4a1d0dbc833223 Sam Ravnborg 2020-02-16 604 } else {
b8a2948fa2b3a5 Sean Paul 2019-07-11 605 if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
e362cc6a247551 Douglas Anderson 2019-07-12 606 panel_simple_parse_panel_timing_node(dev, panel, &dt);
4a1d0dbc833223 Sam Ravnborg 2020-02-16 607 }
b8a2948fa2b3a5 Sean Paul 2019-07-11 608
fad6396eea4946 Johannes Zink 2023-04-14 609
fad6396eea4946 Johannes Zink 2023-04-14 610 /* optional data-mapping property for overriding bus format */
fad6396eea4946 Johannes Zink 2023-04-14 611 ret = drm_of_lvds_get_data_mapping(dev->of_node);
fad6396eea4946 Johannes Zink 2023-04-14 612 if (ret == -EINVAL) {
fad6396eea4946 Johannes Zink 2023-04-14 613 dev_warn(dev, "Ignore invalid data-mapping property");
fad6396eea4946 Johannes Zink 2023-04-14 614 } else if (ret != -ENODEV) {
fad6396eea4946 Johannes Zink 2023-04-14 615 int bpc;
fad6396eea4946 Johannes Zink 2023-04-14 616
fad6396eea4946 Johannes Zink 2023-04-14 617 switch (ret) {
fad6396eea4946 Johannes Zink 2023-04-14 618 default:
fad6396eea4946 Johannes Zink 2023-04-14 619 WARN_ON(1);
fad6396eea4946 Johannes Zink 2023-04-14 620 fallthrough;
fad6396eea4946 Johannes Zink 2023-04-14 621 case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
fad6396eea4946 Johannes Zink 2023-04-14 622 fallthrough;
fad6396eea4946 Johannes Zink 2023-04-14 623 case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
fad6396eea4946 Johannes Zink 2023-04-14 624 bpc = 8;
fad6396eea4946 Johannes Zink 2023-04-14 625 break;
fad6396eea4946 Johannes Zink 2023-04-14 626 case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
fad6396eea4946 Johannes Zink 2023-04-14 627 bpc = 6;
fad6396eea4946 Johannes Zink 2023-04-14 628 }
fad6396eea4946 Johannes Zink 2023-04-14 629
fad6396eea4946 Johannes Zink 2023-04-14 630 if (desc->bpc != bpc || desc->bus_format != ret) {
fad6396eea4946 Johannes Zink 2023-04-14 631 struct panel_desc *override_desc;
fad6396eea4946 Johannes Zink 2023-04-14 632
fad6396eea4946 Johannes Zink 2023-04-14 633 override_desc = devm_kmemdup(dev, desc, sizeof(*desc), GFP_KERNEL);
fad6396eea4946 Johannes Zink 2023-04-14 634 if (!override_desc)
fad6396eea4946 Johannes Zink 2023-04-14 @635 return -ENOMEM;
goto free_ddc;
fad6396eea4946 Johannes Zink 2023-04-14 636
fad6396eea4946 Johannes Zink 2023-04-14 637 override_desc->bus_format = ret;
fad6396eea4946 Johannes Zink 2023-04-14 638 override_desc->bpc = bpc;
fad6396eea4946 Johannes Zink 2023-04-14 639 panel->desc = override_desc;
fad6396eea4946 Johannes Zink 2023-04-14 640 }
fad6396eea4946 Johannes Zink 2023-04-14 641 }
fad6396eea4946 Johannes Zink 2023-04-14 642
9f069c6fbc7266 Sam Ravnborg 2020-07-26 643 connector_type = desc->connector_type;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 644 /* Catch common mistakes for panels. */
9f069c6fbc7266 Sam Ravnborg 2020-07-26 645 switch (connector_type) {
ddb8e853dc8507 Sam Ravnborg 2020-07-26 646 case 0:
ddb8e853dc8507 Sam Ravnborg 2020-07-26 647 dev_warn(dev, "Specify missing connector_type\n");
9f069c6fbc7266 Sam Ravnborg 2020-07-26 648 connector_type = DRM_MODE_CONNECTOR_DPI;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 649 break;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 650 case DRM_MODE_CONNECTOR_LVDS:
c4715837b02393 Laurent Pinchart 2020-06-30 651 WARN_ON(desc->bus_flags &
c4715837b02393 Laurent Pinchart 2020-06-30 652 ~(DRM_BUS_FLAG_DE_LOW |
c4715837b02393 Laurent Pinchart 2020-06-30 653 DRM_BUS_FLAG_DE_HIGH |
c4715837b02393 Laurent Pinchart 2020-06-30 654 DRM_BUS_FLAG_DATA_MSB_TO_LSB |
c4715837b02393 Laurent Pinchart 2020-06-30 655 DRM_BUS_FLAG_DATA_LSB_TO_MSB));
1185c406f11a49 Laurent Pinchart 2020-06-30 656 WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
1185c406f11a49 Laurent Pinchart 2020-06-30 657 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG &&
1185c406f11a49 Laurent Pinchart 2020-06-30 658 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA);
1185c406f11a49 Laurent Pinchart 2020-06-30 659 WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
1185c406f11a49 Laurent Pinchart 2020-06-30 660 desc->bpc != 6);
1185c406f11a49 Laurent Pinchart 2020-06-30 661 WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG ||
1185c406f11a49 Laurent Pinchart 2020-06-30 662 desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) &&
1185c406f11a49 Laurent Pinchart 2020-06-30 663 desc->bpc != 8);
ddb8e853dc8507 Sam Ravnborg 2020-07-26 664 break;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 665 case DRM_MODE_CONNECTOR_eDP:
5f04e7ce392db9 Douglas Anderson 2021-09-14 666 dev_warn(dev, "eDP panels moved to panel-edp\n");
5f04e7ce392db9 Douglas Anderson 2021-09-14 667 err = -EINVAL;
5f04e7ce392db9 Douglas Anderson 2021-09-14 668 goto free_ddc;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 669 case DRM_MODE_CONNECTOR_DSI:
ddb8e853dc8507 Sam Ravnborg 2020-07-26 670 if (desc->bpc != 6 && desc->bpc != 8)
ddb8e853dc8507 Sam Ravnborg 2020-07-26 671 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
ddb8e853dc8507 Sam Ravnborg 2020-07-26 672 break;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 673 case DRM_MODE_CONNECTOR_DPI:
ddb8e853dc8507 Sam Ravnborg 2020-07-26 674 bus_flags = DRM_BUS_FLAG_DE_LOW |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 675 DRM_BUS_FLAG_DE_HIGH |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 676 DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 677 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 678 DRM_BUS_FLAG_DATA_MSB_TO_LSB |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 679 DRM_BUS_FLAG_DATA_LSB_TO_MSB |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 680 DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE |
ddb8e853dc8507 Sam Ravnborg 2020-07-26 681 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 682 if (desc->bus_flags & ~bus_flags)
ddb8e853dc8507 Sam Ravnborg 2020-07-26 683 dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags);
ddb8e853dc8507 Sam Ravnborg 2020-07-26 684 if (!(desc->bus_flags & bus_flags))
ddb8e853dc8507 Sam Ravnborg 2020-07-26 685 dev_warn(dev, "Specify missing bus_flags\n");
ddb8e853dc8507 Sam Ravnborg 2020-07-26 686 if (desc->bus_format == 0)
ddb8e853dc8507 Sam Ravnborg 2020-07-26 687 dev_warn(dev, "Specify missing bus_format\n");
ddb8e853dc8507 Sam Ravnborg 2020-07-26 688 if (desc->bpc != 6 && desc->bpc != 8)
ddb8e853dc8507 Sam Ravnborg 2020-07-26 689 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
ddb8e853dc8507 Sam Ravnborg 2020-07-26 690 break;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 691 default:
ddb8e853dc8507 Sam Ravnborg 2020-07-26 692 dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type);
9f069c6fbc7266 Sam Ravnborg 2020-07-26 693 connector_type = DRM_MODE_CONNECTOR_DPI;
ddb8e853dc8507 Sam Ravnborg 2020-07-26 694 break;
1185c406f11a49 Laurent Pinchart 2020-06-30 695 }
c4715837b02393 Laurent Pinchart 2020-06-30 696
3235b0f20a0a41 Douglas Anderson 2021-04-16 697 dev_set_drvdata(dev, panel);
3235b0f20a0a41 Douglas Anderson 2021-04-16 698
3235b0f20a0a41 Douglas Anderson 2021-04-16 699 /*
3235b0f20a0a41 Douglas Anderson 2021-04-16 700 * We use runtime PM for prepare / unprepare since those power the panel
3235b0f20a0a41 Douglas Anderson 2021-04-16 701 * on and off and those can be very slow operations. This is important
3235b0f20a0a41 Douglas Anderson 2021-04-16 702 * to optimize powering the panel on briefly to read the EDID before
3235b0f20a0a41 Douglas Anderson 2021-04-16 703 * fully enabling the panel.
3235b0f20a0a41 Douglas Anderson 2021-04-16 704 */
3235b0f20a0a41 Douglas Anderson 2021-04-16 705 pm_runtime_enable(dev);
3235b0f20a0a41 Douglas Anderson 2021-04-16 706 pm_runtime_set_autosuspend_delay(dev, 1000);
3235b0f20a0a41 Douglas Anderson 2021-04-16 707 pm_runtime_use_autosuspend(dev);
3235b0f20a0a41 Douglas Anderson 2021-04-16 708
9f069c6fbc7266 Sam Ravnborg 2020-07-26 709 drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type);
280921de7241ee Thierry Reding 2013-08-30 710
0fe1564bd61642 Sam Ravnborg 2019-12-07 711 err = drm_panel_of_backlight(&panel->base);
d9e74da2f1fc42 Alexander Stein 2022-06-21 712 if (err) {
d9e74da2f1fc42 Alexander Stein 2022-06-21 713 dev_err_probe(dev, err, "Could not find backlight\n");
70e12560126685 Douglas Anderson 2021-04-23 714 goto disable_pm_runtime;
d9e74da2f1fc42 Alexander Stein 2022-06-21 715 }
0fe1564bd61642 Sam Ravnborg 2019-12-07 716
c3ee8c65f63799 Bernard Zhao 2020-08-01 717 drm_panel_add(&panel->base);
280921de7241ee Thierry Reding 2013-08-30 718
280921de7241ee Thierry Reding 2013-08-30 719 return 0;
280921de7241ee Thierry Reding 2013-08-30 720
70e12560126685 Douglas Anderson 2021-04-23 721 disable_pm_runtime:
a596fcd9cbc781 Douglas Anderson 2021-05-17 722 pm_runtime_dont_use_autosuspend(dev);
70e12560126685 Douglas Anderson 2021-04-23 723 pm_runtime_disable(dev);
280921de7241ee Thierry Reding 2013-08-30 724 free_ddc:
5f04e7ce392db9 Douglas Anderson 2021-09-14 725 if (panel->ddc)
280921de7241ee Thierry Reding 2013-08-30 726 put_device(&panel->ddc->dev);
280921de7241ee Thierry Reding 2013-08-30 727
280921de7241ee Thierry Reding 2013-08-30 728 return err;
280921de7241ee Thierry Reding 2013-08-30 729 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping
2023-04-14 16:11 ` [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
@ 2023-04-18 21:20 ` Rob Herring
2023-04-19 6:29 ` Johannes Zink
0 siblings, 1 reply; 7+ messages in thread
From: Rob Herring @ 2023-04-18 21:20 UTC (permalink / raw)
To: Johannes Zink
Cc: thierry.reding, sam, airlied, daniel, krzysztof.kozlowski+dt,
dri-devel, devicetree, linux-kernel, kernel
On Fri, Apr 14, 2023 at 06:11:15PM +0200, Johannes Zink wrote:
> Some Displays support more than just a single default lvds data mapping,
> which can be used to run displays on only 3 LVDS lanes in the jeida-18
> data-mapping mode.
>
> Add an optional data-mapping property, analogously to panel-lvds, to
> allow overriding the default data mapping.
>
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> .../bindings/display/panel/panel-simple.yaml | 51 +++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> index 18241f4051d2..6e219f67dd67 100644
> --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> +++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
> @@ -349,6 +349,57 @@ properties:
> power-supply: true
> no-hpd: true
> hpd-gpios: true
> + data-mapping:
> + enum:
> + - jeida-18
> + - jeida-24
> + - vesa-24
> + description: |
> + The color signals mapping order.
> +
> + LVDS data mappings are defined as follows.
> +
> + - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
> + [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
> +
> + Slot 0 1 2 3 4 5 6
> + ________________ _________________
> + Clock \_______________________/
> + ______ ______ ______ ______ ______ ______ ______
> + DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> + DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> +
> + - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
> + specifications. Data are transferred as follows on 4 LVDS lanes.
> +
> + Slot 0 1 2 3 4 5 6
> + ________________ _________________
> + Clock \_______________________/
> + ______ ______ ______ ______ ______ ______ ______
> + DATA0 ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
> + DATA1 ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
> + DATA3 ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
> +
> + - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
> + Data are transferred as follows on 4 LVDS lanes.
> +
> + Slot 0 1 2 3 4 5 6
> + ________________ _________________
> + Clock \_______________________/
> + ______ ______ ______ ______ ______ ______ ______
> + DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
> + DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
> + DATA3 ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
> +
> + Control signals are mapped as follows.
> +
> + CTL0: HSync
> + CTL1: VSync
> + CTL2: Data Enable
> + CTL3: 0
Why do you duplicate what's in display/lvds.yaml?
This also just made 'data-mapping' valid on non-LVDS panels.
Rob
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping
2023-04-18 21:20 ` Rob Herring
@ 2023-04-19 6:29 ` Johannes Zink
2023-05-04 7:35 ` Johannes Zink
0 siblings, 1 reply; 7+ messages in thread
From: Johannes Zink @ 2023-04-19 6:29 UTC (permalink / raw)
To: Rob Herring
Cc: thierry.reding, sam, airlied, daniel, krzysztof.kozlowski+dt,
dri-devel, devicetree, linux-kernel, kernel
Hi Rob,
On 4/18/23 23:20, Rob Herring wrote:
> On Fri, Apr 14, 2023 at 06:11:15PM +0200, Johannes Zink wrote:
>> Some Displays support more than just a single default lvds data mapping,
>> which can be used to run displays on only 3 LVDS lanes in the jeida-18
>> data-mapping mode.
>>
>> Add an optional data-mapping property, analogously to panel-lvds, to
>> allow overriding the default data mapping.
>>
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>> ---
>> .../bindings/display/panel/panel-simple.yaml | 51 +++++++++++++++++++
>> 1 file changed, 51 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> index 18241f4051d2..6e219f67dd67 100644
>> --- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> +++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
>> @@ -349,6 +349,57 @@ properties:
>> power-supply: true
>> no-hpd: true
>> hpd-gpios: true
>> + data-mapping:
>> + enum:
>> + - jeida-18
>> + - jeida-24
>> + - vesa-24
>> + description: |
>> + The color signals mapping order.
>> +
>> + LVDS data mappings are defined as follows.
>> +
>> + - "jeida-18" - 18-bit data mapping compatible with the [JEIDA], [LDI] and
>> + [VESA] specifications. Data are transferred as follows on 3 LVDS lanes.
>> +
>> + Slot 0 1 2 3 4 5 6
>> + ________________ _________________
>> + Clock \_______________________/
>> + ______ ______ ______ ______ ______ ______ ______
>> + DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> + DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> +
>> + - "jeida-24" - 24-bit data mapping compatible with the [DSIM] and [LDI]
>> + specifications. Data are transferred as follows on 4 LVDS lanes.
>> +
>> + Slot 0 1 2 3 4 5 6
>> + ________________ _________________
>> + Clock \_______________________/
>> + ______ ______ ______ ______ ______ ______ ______
>> + DATA0 ><__G2__><__R7__><__R6__><__R5__><__R4__><__R3__><__R2__><
>> + DATA1 ><__B3__><__B2__><__G7__><__G6__><__G5__><__G4__><__G3__><
>> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B7__><__B6__><__B5__><__B4__><
>> + DATA3 ><_CTL3_><__B1__><__B0__><__G1__><__G0__><__R1__><__R0__><
>> +
>> + - "vesa-24" - 24-bit data mapping compatible with the [VESA] specification.
>> + Data are transferred as follows on 4 LVDS lanes.
>> +
>> + Slot 0 1 2 3 4 5 6
>> + ________________ _________________
>> + Clock \_______________________/
>> + ______ ______ ______ ______ ______ ______ ______
>> + DATA0 ><__G0__><__R5__><__R4__><__R3__><__R2__><__R1__><__R0__><
>> + DATA1 ><__B1__><__B0__><__G5__><__G4__><__G3__><__G2__><__G1__><
>> + DATA2 ><_CTL2_><_CTL1_><_CTL0_><__B5__><__B4__><__B3__><__B2__><
>> + DATA3 ><_CTL3_><__B7__><__B6__><__G7__><__G6__><__R7__><__R6__><
>> +
>> + Control signals are mapped as follows.
>> +
>> + CTL0: HSync
>> + CTL1: VSync
>> + CTL2: Data Enable
>> + CTL3: 0
>
> Why do you duplicate what's in display/lvds.yaml?
I don't think any of the other properties from display/lvds.yaml
currently make any sense to be put into simple-panel, thus I selectively
picked this one.
If there is a way to selectively pick only the data_mapping, please let
me know and I send a V2
>
> This also just made 'data-mapping' valid on non-LVDS panels.
what is the canonical way of restricting the data-mapping property to
LVDS panels only? Or ist the proper way to go to move the panel I use
(innolux,g101ice-l01) to its own yaml file, include panel-simple.yaml
and leave the others alone? I think other LVDS panels might benefit from
this series though, which is why I think it makes sense to add the
property to all LVDS panels.
Best regards
Johannes
>
> Rob
>
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping
2023-04-19 6:29 ` Johannes Zink
@ 2023-05-04 7:35 ` Johannes Zink
0 siblings, 0 replies; 7+ messages in thread
From: Johannes Zink @ 2023-05-04 7:35 UTC (permalink / raw)
To: Rob Herring
Cc: devicetree, daniel, sam, linux-kernel, dri-devel, thierry.reding,
krzysztof.kozlowski+dt, airlied, kernel, patchwork-jzi
Hi Rob,
On 4/19/23 08:29, Johannes Zink wrote:
[snip]
>>
>> Why do you duplicate what's in display/lvds.yaml?
>
> I don't think any of the other properties from display/lvds.yaml
> currently make any sense to be put into simple-panel, thus I selectively
> picked this one.
>
> If there is a way to selectively pick only the data_mapping, please let
> me know and I send a V2
>
>>
>> This also just made 'data-mapping' valid on non-LVDS panels.
>
> what is the canonical way of restricting the data-mapping property to
> LVDS panels only? Or ist the proper way to go to move the panel I use
> (innolux,g101ice-l01) to its own yaml file, include panel-simple.yaml
> and leave the others alone? I think other LVDS panels might benefit from
> this series though, which is why I think it makes sense to add the
> property to all LVDS panels.
>
gentle ping. How do you suggest should I proceed here? Maybe pulling the
data-mapping definition in a separate file and include it in both files?
Can I enable the property selectively, e.g. only on the
innolux,g101ice-l01 panel, in order not to enable it on non-LVDS panels
or on LVDS-panels which might not support it?
Best regards
Johannes
[snip]
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-05-04 7:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-14 16:11 [PATCH 0/2] Support non-default LVDS data mapping for simple Johannes Zink
2023-04-14 16:11 ` [PATCH 1/2] dt-bindings: display: simple: support non-default data-mapping Johannes Zink
2023-04-18 21:20 ` Rob Herring
2023-04-19 6:29 ` Johannes Zink
2023-05-04 7:35 ` Johannes Zink
2023-04-14 16:11 ` [PATCH 2/2] drm/panel-simple: allow LVDS format override Johannes Zink
2023-04-17 4:46 ` Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).