* [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL
@ 2025-11-25 20:29 David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 1/8] dt-bindings: arm: qcom: Add Pixel 3 and " David Heidelberg via B4 Relay
` (7 more replies)
0 siblings, 8 replies; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg, Krzysztof Kozlowski,
Dmitry Baryshkov, Amit Pundir, Casey Connolly, Joel Selvaraj,
Bjorn Andersson
This adds initial device tree support for the following phones:
- Google Pixel 3 (blueline)
- Google Pixel 3 XL (crosshatch)
Both phone boards use the same identifiers and differ only slightly
in their connected peripherals.
This is mainly focused to get the base functionality of the board and
being able to use the upstream DTS within Linux and u-boot.
Booting
-------
For older Pixel 3 bootloaders, bootloader-compatible board and MSM IDs are
required for the kernel to boot, so these have been added.
For recent Pixel 3 bootloaders,
a) you want chainloaded proper bootloader (f.e. u-boot),
b) you can also boot kernel when adding back TEXT_OFFSET
(partial revert of 120dc60d).
This series is a beggining of cleaning up and transitioning support from
sdm845 close to mainline tree to the mainline.
Until merged, available at:
https://gitlab.com/sdm845/sdm845-next/-/commits/b4/pixel-3
Signed-off-by: David Heidelberg <david@ixit.cz>
---
Changes in v4:
- Updated panel device-tree example to contain the both compatibles.
- Put panel pins into the panel-default-state and drop the suspend state
as it's not yet used.
- Also, sort the pins. (Konrad)
- Move the framebuffer format to common, as it's UEFI standard. (Konrad)
- Improve commit descriptions and add Fixes tag. (Dmitry)
- Link to v3: https://lore.kernel.org/r/20251118-pixel-3-v3-0-317a2b400d8a@ixit.cz
Changes in v3:
- dropped Documentaion: prefix from 1st commit (Krzysztof)
- Extended the compatible for panel driver.
- Document reserved GPIOs.
- Drop some useless statuses, sort pinctrl. (Konrad)
- Add placeholders for the known i2c devices.
- Link to v2: https://lore.kernel.org/r/20251030-pixel-3-v2-0-8caddbe072c9@ixit.cz
Changes in v2:
- rebased on next-20251030
- generalize chosen to -common (Dmitry)
- demystify rmtfs_mem qcom,vmid
- use qcom,use-guard-pages instead of lower/upper guard block
- merge port@1 endpoint into label mdss_dsi0_out
- sort pinctrl
- sorted the nodes inside root
- put status as a last property into mdss_dsi0 block
- rename volume-keys to gpio-keys
- removed LS-UART1 label
- removed gmu block, already enabled
- removed accidentally introduced WIP crosshatch panel support
- removed useless panel_pmgpio_pins (Dmitry)
- removed usb_2 as it's unused on production units (only devkit)
- move mdss node into the -common and disable in crosshatch (Dmitry)
- move battery node into the -commonm
- move framebuffer into the -common (Dmitry)
- add all firmwares (Dmitry)
- add Wi-Fi support
- add Bluetooth support
- add missing gpi_dma1 node
- renamed regulators to follow regulator-foo-bar BCP (Dmitry)
- adapt to recent cleanup GPU's zap-shader node
- Link to v1: https://lore.kernel.org/r/20251005-pixel-3-v1-0-ab8b85f6133f@ixit.cz
---
David Heidelberg (8):
dt-bindings: arm: qcom: Add Pixel 3 and 3 XL
dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used
drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible
drm/panel: sw43408: Add enable/disable and reset functions
drm/panel: sw43408: Remove manual invocation of unprepare at remove
drm/panel: sw43408: Switch to devm_regulator_bulk_get_const
drm/panel: sw43408: Improve wording when reset-gpios aren't available
arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL
Documentation/devicetree/bindings/arm/qcom.yaml | 2 +
.../bindings/display/panel/lg,sw43408.yaml | 13 +-
arch/arm64/boot/dts/qcom/Makefile | 2 +
.../arm64/boot/dts/qcom/sdm845-google-blueline.dts | 77 +++
arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 528 +++++++++++++++++++++
.../boot/dts/qcom/sdm845-google-crosshatch.dts | 28 ++
drivers/gpu/drm/panel/panel-lg-sw43408.c | 124 +++--
7 files changed, 719 insertions(+), 55 deletions(-)
---
base-commit: 31b46a54c8d266c0dc68cfbefca22a671d1e5783
change-id: 20250419-pixel-3-511edc2a4607
Best regards,
--
David Heidelberg <david@ixit.cz>
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 1/8] dt-bindings: arm: qcom: Add Pixel 3 and 3 XL
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used David Heidelberg via B4 Relay
` (6 subsequent siblings)
7 siblings, 0 replies; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg, Krzysztof Kozlowski
From: David Heidelberg <david@ixit.cz>
Document the bindings for the Pixel 3 and 3 XL.
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index d84bd3bca2010..760b6633b7a55 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -900,6 +900,8 @@ properties:
- items:
- enum:
+ - google,blueline
+ - google,crosshatch
- huawei,planck
- lenovo,yoga-c630
- lg,judyln
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 1/8] dt-bindings: arm: qcom: Add Pixel 3 and " David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-12-03 7:53 ` Krzysztof Kozlowski
2025-11-25 20:29 ` [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible David Heidelberg via B4 Relay
` (5 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
Add compatible for used LG panel.
SW43408 is not panel, but DDIC. The panel itself is the
LG LH546WF1-ED01, so introduce combined compatible for it.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
.../devicetree/bindings/display/panel/lg,sw43408.yaml | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/panel/lg,sw43408.yaml b/Documentation/devicetree/bindings/display/panel/lg,sw43408.yaml
index 2219d3d4ac43b..f641efaeb8b36 100644
--- a/Documentation/devicetree/bindings/display/panel/lg,sw43408.yaml
+++ b/Documentation/devicetree/bindings/display/panel/lg,sw43408.yaml
@@ -4,14 +4,16 @@
$id: http://devicetree.org/schemas/display/panel/lg,sw43408.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
-title: LG SW43408 1080x2160 DSI panel
+title: LG SW43408 AMOLED DDIC
maintainers:
- Casey Connolly <casey.connolly@linaro.org>
description:
- This panel is used on the Pixel 3, it is a 60hz OLED panel which
- required DSC (Display Stream Compression) and has rounded corners.
+ The SW43408 is display driver IC with connected panel.
+
+ LG LH546WF1-ED01 panel is used on the Pixel 3, it is a 60hz OLED panel
+ which required DSC (Display Stream Compression) and has rounded corners.
allOf:
- $ref: panel-common.yaml#
@@ -19,6 +21,9 @@ allOf:
properties:
compatible:
items:
+ - enum:
+ # LG 5.46 inch, 1080x2160 pixels, 18:9 ratio
+ - lg,sw43408-lh546wf1-ed01
- const: lg,sw43408
reg:
@@ -46,7 +51,7 @@ examples:
#size-cells = <0>;
panel@0 {
- compatible = "lg,sw43408";
+ compatible = "lg,sw43408-lh546wf1-ed01", "lg,sw43408";
reg = <0>;
vddi-supply = <&vreg_l14a_1p88>;
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 1/8] dt-bindings: arm: qcom: Add Pixel 3 and " David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-12-06 4:21 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions David Heidelberg via B4 Relay
` (4 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
The supported panel is LH546WF1-ED01, add compatible and adjust the
struct name to reflect that.
The standalone compatible lg,sw43408 will continue to work, even thou
there are no users yet.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/gpu/drm/panel/panel-lg-sw43408.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
index 46a56ea92ad9f..dcca7873acf8e 100644
--- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
+++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
@@ -149,7 +149,7 @@ static int sw43408_prepare(struct drm_panel *panel)
return ret;
}
-static const struct drm_display_mode sw43408_mode = {
+static const struct drm_display_mode lh546wf1_ed01_mode = {
.clock = (1080 + 20 + 32 + 20) * (2160 + 20 + 4 + 20) * 60 / 1000,
.hdisplay = 1080,
@@ -171,7 +171,7 @@ static const struct drm_display_mode sw43408_mode = {
static int sw43408_get_modes(struct drm_panel *panel,
struct drm_connector *connector)
{
- return drm_connector_helper_get_modes_fixed(connector, &sw43408_mode);
+ return drm_connector_helper_get_modes_fixed(connector, &lh546wf1_ed01_mode);
}
static int sw43408_backlight_update_status(struct backlight_device *bl)
@@ -214,7 +214,8 @@ static const struct drm_panel_funcs sw43408_funcs = {
};
static const struct of_device_id sw43408_of_match[] = {
- { .compatible = "lg,sw43408", },
+ { .compatible = "lg,sw43408", }, /* legacy */
+ { .compatible = "lg,sw43408-lh546wf1-ed01", },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, sw43408_of_match);
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
` (2 preceding siblings ...)
2025-11-25 20:29 ` [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-12-06 4:25 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove David Heidelberg via B4 Relay
` (3 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
Introduce enable(), disable() and reset() functions.
The enable() and disable() callbacks keep the symmetry in the commands
sent to the panel and also make a clearer distinction between panel
initialization and configuration.
Splitting reset() from prepare() follows clean coding practices and lets
us potentially make reset optional in the future for flicker-less
takeover from a bootloader or framebuffer driver where the panel is
already configured.
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/gpu/drm/panel/panel-lg-sw43408.c | 83 ++++++++++++++++++++------------
1 file changed, 53 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
index dcca7873acf8e..20217877e107f 100644
--- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
+++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
@@ -38,11 +38,10 @@ static inline struct sw43408_panel *to_panel_info(struct drm_panel *panel)
return container_of(panel, struct sw43408_panel, base);
}
-static int sw43408_unprepare(struct drm_panel *panel)
+static int sw43408_disable(struct drm_panel *panel)
{
struct sw43408_panel *sw43408 = to_panel_info(panel);
struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
- int ret;
mipi_dsi_dcs_set_display_off_multi(&ctx);
@@ -50,19 +49,55 @@ static int sw43408_unprepare(struct drm_panel *panel)
mipi_dsi_msleep(&ctx, 100);
+ return ctx.accum_err;
+}
+
+static int sw43408_unprepare(struct drm_panel *panel)
+{
+ struct sw43408_panel *sw43408 = to_panel_info(panel);
+ int ret;
+
gpiod_set_value(sw43408->reset_gpio, 1);
ret = regulator_bulk_disable(ARRAY_SIZE(sw43408->supplies), sw43408->supplies);
- return ret ? : ctx.accum_err;
+ return ret;
}
-static int sw43408_program(struct drm_panel *panel)
+static int sw43408_enable(struct drm_panel *panel)
{
struct sw43408_panel *sw43408 = to_panel_info(panel);
struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
struct drm_dsc_picture_parameter_set pps;
+ mipi_dsi_dcs_set_display_on_multi(&ctx);
+
+ mipi_dsi_msleep(&ctx, 50);
+
+ sw43408->link->mode_flags &= ~MIPI_DSI_MODE_LPM;
+
+ drm_dsc_pps_payload_pack(&pps, sw43408->link->dsc);
+
+ mipi_dsi_picture_parameter_set_multi(&ctx, &pps);
+
+ sw43408->link->mode_flags |= MIPI_DSI_MODE_LPM;
+
+ /*
+ * This panel uses PPS selectors with offset:
+ * PPS 1 if pps_identifier is 0
+ * PPS 2 if pps_identifier is 1
+ */
+ mipi_dsi_compression_mode_ext_multi(&ctx, true,
+ MIPI_DSI_COMPRESSION_DSC, 1);
+
+ return ctx.accum_err;
+}
+
+static int sw43408_program(struct drm_panel *panel)
+{
+ struct sw43408_panel *sw43408 = to_panel_info(panel);
+ struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
+
mipi_dsi_dcs_write_seq_multi(&ctx, MIPI_DCS_SET_GAMMA_CURVE, 0x02);
mipi_dsi_dcs_set_tear_on_multi(&ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
@@ -97,26 +132,19 @@ static int sw43408_program(struct drm_panel *panel)
mipi_dsi_dcs_write_seq_multi(&ctx, 0x55, 0x04, 0x61, 0xdb, 0x04, 0x70, 0xdb);
mipi_dsi_dcs_write_seq_multi(&ctx, 0xb0, 0xca);
- mipi_dsi_dcs_set_display_on_multi(&ctx);
-
- mipi_dsi_msleep(&ctx, 50);
-
- sw43408->link->mode_flags &= ~MIPI_DSI_MODE_LPM;
-
- drm_dsc_pps_payload_pack(&pps, sw43408->link->dsc);
-
- mipi_dsi_picture_parameter_set_multi(&ctx, &pps);
+ return ctx.accum_err;
+}
- sw43408->link->mode_flags |= MIPI_DSI_MODE_LPM;
+static void sw43408_reset(struct sw43408_panel *ctx)
+{
+ usleep_range(5000, 6000);
- /*
- * This panel uses PPS selectors with offset:
- * PPS 1 if pps_identifier is 0
- * PPS 2 if pps_identifier is 1
- */
- mipi_dsi_compression_mode_ext_multi(&ctx, true,
- MIPI_DSI_COMPRESSION_DSC, 1);
- return ctx.accum_err;
+ gpiod_set_value(ctx->reset_gpio, 0);
+ usleep_range(9000, 10000);
+ gpiod_set_value(ctx->reset_gpio, 1);
+ usleep_range(1000, 2000);
+ gpiod_set_value(ctx->reset_gpio, 0);
+ usleep_range(9000, 10000);
}
static int sw43408_prepare(struct drm_panel *panel)
@@ -128,14 +156,7 @@ static int sw43408_prepare(struct drm_panel *panel)
if (ret < 0)
return ret;
- usleep_range(5000, 6000);
-
- gpiod_set_value(ctx->reset_gpio, 0);
- usleep_range(9000, 10000);
- gpiod_set_value(ctx->reset_gpio, 1);
- usleep_range(1000, 2000);
- gpiod_set_value(ctx->reset_gpio, 0);
- usleep_range(9000, 10000);
+ sw43408_reset(ctx);
ret = sw43408_program(panel);
if (ret)
@@ -208,6 +229,8 @@ static int sw43408_backlight_init(struct sw43408_panel *ctx)
}
static const struct drm_panel_funcs sw43408_funcs = {
+ .disable = sw43408_disable,
+ .enable = sw43408_enable,
.unprepare = sw43408_unprepare,
.prepare = sw43408_prepare,
.get_modes = sw43408_get_modes,
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
` (3 preceding siblings ...)
2025-11-25 20:29 ` [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-12-06 4:26 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 6/8] drm/panel: sw43408: Switch to devm_regulator_bulk_get_const David Heidelberg via B4 Relay
` (2 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg
From: David Heidelberg <david@ixit.cz>
The drm_panel_remove should take care of disable/unprepare. Remove the
manual call from the sw43408_remove function.
Fixes: 069a6c0e94f9 ("drm: panel: Add LG sw43408 panel driver")
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/gpu/drm/panel/panel-lg-sw43408.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
index 20217877e107f..b46599a0b957b 100644
--- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
+++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
@@ -318,10 +318,6 @@ static void sw43408_remove(struct mipi_dsi_device *dsi)
struct sw43408_panel *ctx = mipi_dsi_get_drvdata(dsi);
int ret;
- ret = sw43408_unprepare(&ctx->base);
- if (ret < 0)
- dev_err(&dsi->dev, "failed to unprepare panel: %d\n", ret);
-
ret = mipi_dsi_detach(dsi);
if (ret < 0)
dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret);
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 6/8] drm/panel: sw43408: Switch to devm_regulator_bulk_get_const
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
` (4 preceding siblings ...)
2025-11-25 20:29 ` [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 7/8] drm/panel: sw43408: Improve wording when reset-gpios aren't available David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
7 siblings, 0 replies; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg, Dmitry Baryshkov
From: David Heidelberg <david@ixit.cz>
Switch to devm_regulator_bulk_get_const() to stop setting the supplies
list in probe(), and move the regulator_bulk_data struct in static const.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/gpu/drm/panel/panel-lg-sw43408.c | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
index b46599a0b957b..b147f337a7861 100644
--- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
+++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
@@ -20,13 +20,18 @@
#include <drm/display/drm_dsc.h>
#include <drm/display/drm_dsc_helper.h>
-#define NUM_SUPPLIES 2
+static const struct regulator_bulk_data sw43408_supplies[] = {
+ { .supply = "vddi", /* 1.88V */
+ .init_load_uA = 62000 },
+ { .supply = "vpnl", /* 3.0 V */
+ .init_load_uA = 857000 },
+};
struct sw43408_panel {
struct drm_panel base;
struct mipi_dsi_device *link;
- struct regulator_bulk_data supplies[NUM_SUPPLIES];
+ struct regulator_bulk_data *supplies;
struct gpio_desc *reset_gpio;
@@ -59,7 +64,7 @@ static int sw43408_unprepare(struct drm_panel *panel)
gpiod_set_value(sw43408->reset_gpio, 1);
- ret = regulator_bulk_disable(ARRAY_SIZE(sw43408->supplies), sw43408->supplies);
+ ret = regulator_bulk_disable(ARRAY_SIZE(sw43408_supplies), sw43408->supplies);
return ret;
}
@@ -152,7 +157,7 @@ static int sw43408_prepare(struct drm_panel *panel)
struct sw43408_panel *ctx = to_panel_info(panel);
int ret;
- ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
+ ret = regulator_bulk_enable(ARRAY_SIZE(sw43408_supplies), ctx->supplies);
if (ret < 0)
return ret;
@@ -166,7 +171,7 @@ static int sw43408_prepare(struct drm_panel *panel)
poweroff:
gpiod_set_value(ctx->reset_gpio, 1);
- regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
+ regulator_bulk_disable(ARRAY_SIZE(sw43408_supplies), ctx->supplies);
return ret;
}
@@ -248,13 +253,10 @@ static int sw43408_add(struct sw43408_panel *ctx)
struct device *dev = &ctx->link->dev;
int ret;
- ctx->supplies[0].supply = "vddi"; /* 1.88 V */
- ctx->supplies[0].init_load_uA = 62000;
- ctx->supplies[1].supply = "vpnl"; /* 3.0 V */
- ctx->supplies[1].init_load_uA = 857000;
-
- ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies),
- ctx->supplies);
+ ret = devm_regulator_bulk_get_const(dev,
+ ARRAY_SIZE(sw43408_supplies),
+ sw43408_supplies,
+ &ctx->supplies);
if (ret < 0)
return ret;
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 7/8] drm/panel: sw43408: Improve wording when reset-gpios aren't available
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
` (5 preceding siblings ...)
2025-11-25 20:29 ` [PATCH v4 6/8] drm/panel: sw43408: Switch to devm_regulator_bulk_get_const David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
7 siblings, 0 replies; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg, Dmitry Baryshkov
From: David Heidelberg <david@ixit.cz>
Choose better wording.
Cosmetic: also inline PTR_ERR.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
drivers/gpu/drm/panel/panel-lg-sw43408.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
index b147f337a7861..c6384b02ad6e0 100644
--- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
+++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
@@ -262,8 +262,8 @@ static int sw43408_add(struct sw43408_panel *ctx)
ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(ctx->reset_gpio)) {
- ret = PTR_ERR(ctx->reset_gpio);
- return dev_err_probe(dev, ret, "cannot get reset gpio\n");
+ return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
+ "Failed to get reset-gpios\n");
}
ret = sw43408_backlight_init(ctx);
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
` (6 preceding siblings ...)
2025-11-25 20:29 ` [PATCH v4 7/8] drm/panel: sw43408: Improve wording when reset-gpios aren't available David Heidelberg via B4 Relay
@ 2025-11-25 20:29 ` David Heidelberg via B4 Relay
2025-11-27 11:21 ` Konrad Dybcio
2025-12-06 16:56 ` Bjorn Andersson
7 siblings, 2 replies; 19+ messages in thread
From: David Heidelberg via B4 Relay @ 2025-11-25 20:29 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, David Heidelberg, Amit Pundir, Casey Connolly,
Joel Selvaraj, Bjorn Andersson
From: David Heidelberg <david@ixit.cz>
This adds initial device tree support for the following phones:
- Google Pixel 3 (blueline)
- Google Pixel 3 XL (crosshatch)
Both phone boards use the same identifiers and differ only slightly
in their connected peripherals.
Supported functionality includes:
- Debug UART
- UFS
- USB-C (peripheral mode)
- Display (Pixel 3 only, and the driver needs improvements)
- GPU
- Bluetooth
- Wi-Fi
The rmtfs region is allocated using UIO, making it technically "dynamic."
Its address and size can be read from sysfs:
$ cat /sys/class/uio/uio0/name
/sys/class/uio/uio0/maps/map0/addr
0x00000000f2701000
$ cat /sys/class/uio/uio0/maps/map0/size
0x0000000000200000
Like the OnePlus 6, the Pixel 3 requires 1 kB of reserved memory on either
side of the rmtfs region to work around an XPU bug that would otherwise
cause erroneous violations when accessing the rmtfs_mem region.
Co-developed-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Co-developed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Co-developed-by: Casey Connolly <casey@connolly.tech>
Signed-off-by: Casey Connolly <casey@connolly.tech>
Co-developed-by: Joel Selvaraj <foss@joelselvaraj.com>
Signed-off-by: Joel Selvaraj <foss@joelselvaraj.com>
Co-developed-by: Sumit Semwal <sumit.semwal@linaro.org>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Co-developed-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: David Heidelberg <david@ixit.cz>
---
arch/arm64/boot/dts/qcom/Makefile | 2 +
.../arm64/boot/dts/qcom/sdm845-google-blueline.dts | 77 +++
arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 528 +++++++++++++++++++++
.../boot/dts/qcom/sdm845-google-crosshatch.dts | 28 ++
4 files changed, 635 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 6f34d5ed331c4..c853b28b3b198 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -250,6 +250,8 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm845-db845c.dtb
sdm845-db845c-navigation-mezzanine-dtbs := sdm845-db845c.dtb sdm845-db845c-navigation-mezzanine.dtbo
dtb-$(CONFIG_ARCH_QCOM) += sdm845-db845c-navigation-mezzanine.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sdm845-google-crosshatch.dtb
+dtb-$(CONFIG_ARCH_QCOM) += sdm845-google-blueline.dtb
dtb-$(CONFIG_ARCH_QCOM) += sdm845-lg-judyln.dtb
dtb-$(CONFIG_ARCH_QCOM) += sdm845-lg-judyp.dtb
dtb-$(CONFIG_ARCH_QCOM) += sdm845-mtp.dtb
diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts b/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts
new file mode 100644
index 0000000000000..94252c3fcf638
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/dts-v1/;
+
+#include "sdm845-google-common.dtsi"
+
+/ {
+ model = "Google Pixel 3";
+ compatible = "google,blueline", "qcom,sdm845";
+};
+
+&battery {
+ charge-full-design-microamp-hours = <2970000>;
+ voltage-min-design-microvolt = <3600000>;
+ voltage-max-design-microvolt = <4400000>;
+};
+
+&framebuffer0 {
+ width = <1080>;
+ height = <2160>;
+ stride = <(1080 * 4)>;
+};
+
+&mdss_dsi0 {
+ vdda-supply = <&vdda_mipi_dsi0_1p2>;
+
+ status = "okay";
+
+ panel@0 {
+ compatible = "lg,sw43408-lh546wf1-ed01", "lg,sw43408";
+ reg = <0>;
+
+ vddi-supply = <&vreg_l14a_1p88>;
+ vpnl-supply = <&vreg_l28a_3p0>;
+
+ reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&panel_default>;
+ pinctrl-names = "default";
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&mdss_dsi0_out>;
+ };
+ };
+ };
+};
+
+&mdss_dsi0_out {
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&panel_in>;
+ qcom,te-source = "mdp_vsync_e";
+};
+
+&mdss_dsi0_phy {
+ vdds-supply = <&vdda_mipi_dsi0_pll>;
+
+ status = "okay";
+};
+
+&tlmm {
+ panel_default: panel-default-state {
+ reset-pins {
+ pins = "gpio6";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ te-pins {
+ pins = "gpio12";
+ function = "mdp_vsync";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
new file mode 100644
index 0000000000000..ad3bfc5b761f2
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
@@ -0,0 +1,528 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/dts-v1/;
+
+#include <dt-bindings/arm/qcom,ids.h>
+#include <dt-bindings/dma/qcom-gpi.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+
+#include "sdm845.dtsi"
+#include "pm8998.dtsi"
+#include "pmi8998.dtsi"
+
+/delete-node/ &mpss_region;
+/delete-node/ &venus_mem;
+/delete-node/ &cdsp_mem;
+/delete-node/ &mba_region;
+/delete-node/ &slpi_mem;
+/delete-node/ &spss_mem;
+/delete-node/ &rmtfs_mem;
+
+/ {
+ chassis-type = "handset";
+ qcom,board-id = <0x00021505 0>;
+ qcom,msm-id = <QCOM_ID_SDM845 0x20001>;
+
+ aliases {
+ serial0 = &uart9;
+ serial1 = &uart6;
+ };
+
+ battery: battery {
+ compatible = "simple-battery";
+ };
+
+ chosen {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ stdout-path = "serial0:115200n8";
+
+ /* Use display framebuffer as setup by bootloader */
+ framebuffer0: framebuffer-0 {
+ compatible = "simple-framebuffer";
+ memory-region = <&cont_splash_mem>;
+
+ format = "a8r8g8b8";
+ };
+ };
+
+ reserved-memory {
+ cont_splash_mem: splash@9d400000 {
+ reg = <0 0x9d400000 0 0x02400000>;
+ no-map;
+ };
+
+ mpss_region: memory@8e000000 {
+ reg = <0 0x8e000000 0 0x9800000>;
+ no-map;
+ };
+
+ venus_mem: venus@97800000 {
+ reg = <0 0x97800000 0 0x500000>;
+ no-map;
+ };
+
+ cdsp_mem: cdsp-mem@97D00000 {
+ reg = <0 0x97D00000 0 0x800000>;
+ no-map;
+ };
+
+ mba_region: mba@98500000 {
+ reg = <0 0x98500000 0 0x200000>;
+ no-map;
+ };
+
+ slpi_mem: slpi@98700000 {
+ reg = <0 0x98700000 0 0x1400000>;
+ no-map;
+ };
+
+ spss_mem: spss@99B00000 {
+ reg = <0 0x99B00000 0 0x100000>;
+ no-map;
+ };
+
+ rmtfs_mem: rmtfs-region@f2700000 {
+ compatible = "qcom,rmtfs-mem";
+ reg = <0 0xf2700000 0 0x202000>;
+ qcom,use-guard-pages;
+ no-map;
+
+ qcom,client-id = <1>;
+ qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>;
+ };
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ label = "Volume keys";
+ autorepeat;
+
+ pinctrl-0 = <&volume_up_gpio>;
+ pinctrl-names = "default";
+
+ key-vol-up {
+ label = "Volume Up";
+ linux,code = <KEY_VOLUMEUP>;
+ gpios = <&pm8998_gpios 6 GPIO_ACTIVE_LOW>;
+ debounce-interval = <15>;
+ };
+ };
+
+ vph_pwr: regulator-vph-pwr {
+ compatible = "regulator-fixed";
+ regulator-name = "vph_pwr";
+ regulator-min-microvolt = <3700000>;
+ regulator-max-microvolt = <3700000>;
+ };
+
+ vreg_s4a_1p8: regulator-vreg-s4a-1p8 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_s4a_1p8";
+
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+ regulator-boot-on;
+
+ vin-supply = <&vph_pwr>;
+ };
+};
+
+&adsp_pas {
+ firmware-name = "qcom/sdm845/Google/blueline/adsp.mbn";
+
+ status = "okay";
+};
+
+&apps_rsc {
+ regulators-0 {
+ compatible = "qcom,pm8998-rpmh-regulators";
+ qcom,pmic-id = "a";
+
+ vdd-s1-supply = <&vph_pwr>;
+ vdd-s2-supply = <&vph_pwr>;
+ vdd-s3-supply = <&vph_pwr>;
+ vdd-s4-supply = <&vph_pwr>;
+ vdd-s5-supply = <&vph_pwr>;
+ vdd-s6-supply = <&vph_pwr>;
+ vdd-s7-supply = <&vph_pwr>;
+ vdd-s8-supply = <&vph_pwr>;
+ vdd-s9-supply = <&vph_pwr>;
+ vdd-s10-supply = <&vph_pwr>;
+ vdd-s11-supply = <&vph_pwr>;
+ vdd-s12-supply = <&vph_pwr>;
+ vdd-s13-supply = <&vph_pwr>;
+ vdd-l1-l27-supply = <&vreg_s7a_1p025>;
+ vdd-l2-l8-l17-supply = <&vreg_s3a_1p35>;
+ vdd-l3-l11-supply = <&vreg_s7a_1p025>;
+ vdd-l4-l5-supply = <&vreg_s7a_1p025>;
+ vdd-l6-supply = <&vph_pwr>;
+ vdd-l7-l12-l14-l15-supply = <&vreg_s5a_2p04>;
+ vdd-l9-supply = <&vreg_bob>;
+ vdd-l10-l23-l25-supply = <&vreg_bob>;
+ vdd-l13-l19-l21-supply = <&vreg_bob>;
+ vdd-l16-l28-supply = <&vreg_bob>;
+ vdd-l18-l22-supply = <&vreg_bob>;
+ vdd-l20-l24-supply = <&vreg_bob>;
+ vdd-l26-supply = <&vreg_s3a_1p35>;
+ vin-lvs-1-2-supply = <&vreg_s4a_1p8>;
+
+ vreg_s3a_1p35: smps3 {
+ regulator-min-microvolt = <1352000>;
+ regulator-max-microvolt = <1352000>;
+ };
+
+ vreg_s5a_2p04: smps5 {
+ regulator-min-microvolt = <1904000>;
+ regulator-max-microvolt = <2040000>;
+ };
+
+ vreg_s7a_1p025: smps7 {
+ regulator-min-microvolt = <900000>;
+ regulator-max-microvolt = <1028000>;
+ };
+
+ vdda_mipi_dsi0_pll:
+ vreg_l1a_0p875: ldo1 {
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <880000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-boot-on;
+ };
+
+ vreg_l5a_0p8: ldo5 {
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l12a_1p8: ldo12 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l7a_1p8: ldo7 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l13a_2p95: ldo13 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <2960000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l14a_1p88: ldo14 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-boot-on;
+ /*
+ * We can't properly bring the panel back if it gets turned off
+ * so keep it's regulators always on for now.
+ */
+ regulator-always-on;
+ };
+
+ vreg_l17a_1p3: ldo17 {
+ regulator-min-microvolt = <1304000>;
+ regulator-max-microvolt = <1304000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l19a_3p3: ldo19 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3312000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ /*
+ * The touchscreen needs this to be 3.3v, which is apparently
+ * quite close to the hardware limit for this LDO (3.312v)
+ * It must be kept in high power mode to prevent TS brownouts
+ */
+ regulator-allowed-modes = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l20a_2p95: ldo20 {
+ regulator-min-microvolt = <2960000>;
+ regulator-max-microvolt = <2968000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l21a_2p95: ldo21 {
+ regulator-min-microvolt = <2960000>;
+ regulator-max-microvolt = <2968000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l24a_3p075: ldo24 {
+ regulator-min-microvolt = <3088000>;
+ regulator-max-microvolt = <3088000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vreg_l25a_3p3: ldo25 {
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3312000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ };
+
+ vdda_mipi_dsi0_1p2:
+ vreg_l26a_1p2: ldo26 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+ regulator-boot-on;
+ };
+
+ vreg_l28a_3p0: ldo28 {
+ regulator-min-microvolt = <2856000>;
+ regulator-max-microvolt = <3008000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_LPM>;
+ regulator-boot-on;
+ /*
+ * We can't properly bring the panel back if it gets turned off
+ * so keep it's regulators always on for now.
+ */
+ regulator-always-on;
+ };
+ };
+
+ regulators-1 {
+ compatible = "qcom,pmi8998-rpmh-regulators";
+ qcom,pmic-id = "b";
+
+ vdd-bob-supply = <&vph_pwr>;
+
+ vreg_bob: bob {
+ regulator-min-microvolt = <3312000>;
+ regulator-max-microvolt = <3600000>;
+ regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
+ regulator-allow-bypass;
+ };
+ };
+
+ regulators-2 {
+ compatible = "qcom,pm8005-rpmh-regulators";
+ qcom,pmic-id = "c";
+
+ vdd-s1-supply = <&vph_pwr>;
+ vdd-s2-supply = <&vph_pwr>;
+ vdd-s3-supply = <&vph_pwr>;
+ vdd-s4-supply = <&vph_pwr>;
+
+ vreg_s3c_0p6: smps3 {
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <600000>;
+ };
+ };
+};
+
+&cdsp_pas {
+ firmware-name = "qcom/sdm845/Google/blueline/cdsp.mbn";
+
+ status = "okay";
+};
+
+&gcc {
+ protected-clocks = <GCC_QSPI_CORE_CLK>,
+ <GCC_QSPI_CORE_CLK_SRC>,
+ <GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
+};
+
+&gpi_dma0 {
+ status = "okay";
+};
+
+&gpi_dma1 {
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/sdm845/Google/blueline/a630_zap.mbn";
+};
+
+&i2c2 {
+ /* ST,FTS @ 49 */
+};
+
+&i2c12 {
+ /* Bottom spkr (right) CS35L36 @ 40 */
+
+ /* Top spkr (left) CS35L36 @ 41 */
+};
+
+&ipa {
+ firmware-name = "qcom/sdm845/Google/blueline/ipa_fws.mbn";
+ memory-region = <&ipa_fw_mem>;
+
+ status = "okay";
+};
+
+&mdss {
+ status = "okay";
+};
+
+&mss_pil {
+ firmware-name = "qcom/sdm845/Google/blueline/mba.mbn",
+ "qcom/sdm845/Google/blueline/modem.mbn";
+
+ status = "okay";
+};
+
+&pm8998_gpios {
+ volume_up_gpio: vol-up-active-state {
+ pins = "gpio6";
+ function = "normal";
+ input-enable;
+ bias-pull-up;
+ qcom,drive-strength = <0>;
+ };
+};
+
+&pm8998_resin {
+ linux,code = <KEY_VOLUMEDOWN>;
+
+ status = "okay";
+};
+
+&pmi8998_charger {
+ monitored-battery = <&battery>;
+
+ status = "okay";
+};
+
+&qupv3_id_0 {
+ status = "okay";
+};
+
+&qupv3_id_1 {
+ status = "okay";
+};
+
+&qup_uart9_rx {
+ drive-strength = <2>;
+ bias-pull-up;
+};
+
+&qup_uart9_tx {
+ drive-strength = <2>;
+ bias-disable;
+};
+
+&tlmm {
+ gpio-reserved-ranges = < 0 4>, /* SPI (Intel MNH Pixel Visual Core) */
+ <81 4>; /* SPI (most likely Fingerprint Cards FPC1075) */
+
+ touchscreen_reset: ts-reset-state {
+ pins = "gpio99";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+
+ touchscreen_pins: ts-pins-gpio-state {
+ pins = "gpio125";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ touchscreen_i2c_pins: qup-i2c2-gpio-state {
+ pins = "gpio27", "gpio28";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+};
+
+&uart6 {
+ pinctrl-0 = <&qup_uart6_4pin>;
+
+ status = "okay";
+
+ bluetooth {
+ compatible = "qcom,wcn3990-bt";
+
+ vddio-supply = <&vreg_s4a_1p8>;
+ vddxo-supply = <&vreg_l7a_1p8>;
+ vddrf-supply = <&vreg_l17a_1p3>;
+ vddch0-supply = <&vreg_l25a_3p3>;
+ max-speed = <3200000>;
+ };
+};
+
+&uart9 {
+ status = "okay";
+};
+
+&ufs_mem_hc {
+ reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>;
+
+ vcc-supply = <&vreg_l20a_2p95>;
+ vcc-max-microamp = <800000>;
+
+ status = "okay";
+};
+
+&ufs_mem_phy {
+ vdda-phy-supply = <&vreg_l1a_0p875>;
+ vdda-pll-supply = <&vreg_l26a_1p2>;
+
+ status = "okay";
+};
+
+&usb_1 {
+ status = "okay";
+};
+
+&usb_1_dwc3 {
+ dr_mode = "peripheral";
+};
+
+&usb_1_hsphy {
+ vdd-supply = <&vreg_l1a_0p875>;
+ vdda-pll-supply = <&vreg_l12a_1p8>;
+ vdda-phy-dpdm-supply = <&vreg_l24a_3p075>;
+
+ qcom,imp-res-offset-value = <8>;
+ qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>;
+ qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>;
+ qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>;
+
+ status = "okay";
+};
+
+&usb_1_qmpphy {
+ vdda-phy-supply = <&vreg_l26a_1p2>;
+ vdda-pll-supply = <&vreg_l1a_0p875>;
+
+ status = "okay";
+};
+
+&venus {
+ firmware-name = "qcom/sdm845/Google/blueline/venus.mbn";
+
+ status = "okay";
+};
+
+&wifi {
+ vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>;
+ vdd-1.8-xo-supply = <&vreg_l7a_1p8>;
+ vdd-1.3-rfa-supply = <&vreg_l17a_1p3>;
+ vdd-3.3-ch0-supply = <&vreg_l25a_3p3>;
+
+ qcom,snoc-host-cap-8bit-quirk;
+
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts b/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts
new file mode 100644
index 0000000000000..5cb0aa8b37fda
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/dts-v1/;
+
+#include "sdm845-google-common.dtsi"
+
+/ {
+ model = "Google Pixel 3 XL";
+ compatible = "google,crosshatch", "qcom,sdm845";
+};
+
+&battery {
+ charge-full-design-microamp-hours = <3480000>;
+ voltage-min-design-microvolt = <3600000>;
+ voltage-max-design-microvolt = <4400000>;
+};
+
+&framebuffer0 {
+ width = <1440>;
+ height = <2960>;
+ stride = <(1440 * 4)>;
+};
+
+&mdss {
+ /* until the panel is prepared */
+ status = "disabled";
+};
+
--
2.51.0
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL
2025-11-25 20:29 ` [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
@ 2025-11-27 11:21 ` Konrad Dybcio
2025-12-06 16:56 ` Bjorn Andersson
1 sibling, 0 replies; 19+ messages in thread
From: Konrad Dybcio @ 2025-11-27 11:21 UTC (permalink / raw)
To: david, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sumit Semwal, Casey Connolly,
Neil Armstrong, Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul
Cc: phodina, linux-arm-msm, devicetree, linux-kernel, phone-devel,
dri-devel, Amit Pundir, Casey Connolly, Joel Selvaraj
On 11/25/25 9:29 PM, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> This adds initial device tree support for the following phones:
>
> - Google Pixel 3 (blueline)
> - Google Pixel 3 XL (crosshatch)
>
> Both phone boards use the same identifiers and differ only slightly
> in their connected peripherals.
>
> Supported functionality includes:
> - Debug UART
> - UFS
> - USB-C (peripheral mode)
> - Display (Pixel 3 only, and the driver needs improvements)
> - GPU
> - Bluetooth
> - Wi-Fi
>
> The rmtfs region is allocated using UIO, making it technically "dynamic."
>
> Its address and size can be read from sysfs:
>
> $ cat /sys/class/uio/uio0/name
> /sys/class/uio/uio0/maps/map0/addr
> 0x00000000f2701000
>
> $ cat /sys/class/uio/uio0/maps/map0/size
> 0x0000000000200000
>
> Like the OnePlus 6, the Pixel 3 requires 1 kB of reserved memory on either
> side of the rmtfs region to work around an XPU bug that would otherwise
> cause erroneous violations when accessing the rmtfs_mem region.
>
> Co-developed-by: Amit Pundir <amit.pundir@linaro.org>
> Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
> Co-developed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> Co-developed-by: Casey Connolly <casey@connolly.tech>
> Signed-off-by: Casey Connolly <casey@connolly.tech>
> Co-developed-by: Joel Selvaraj <foss@joelselvaraj.com>
> Signed-off-by: Joel Selvaraj <foss@joelselvaraj.com>
> Co-developed-by: Sumit Semwal <sumit.semwal@linaro.org>
> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
> Co-developed-by: Vinod Koul <vkoul@kernel.org>
> Signed-off-by: Vinod Koul <vkoul@kernel.org>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used
2025-11-25 20:29 ` [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used David Heidelberg via B4 Relay
@ 2025-12-03 7:53 ` Krzysztof Kozlowski
0 siblings, 0 replies; 19+ messages in thread
From: Krzysztof Kozlowski @ 2025-12-03 7:53 UTC (permalink / raw)
To: David Heidelberg
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On Tue, Nov 25, 2025 at 09:29:37PM +0100, David Heidelberg wrote:
> Add compatible for used LG panel.
> SW43408 is not panel, but DDIC. The panel itself is the
> LG LH546WF1-ED01, so introduce combined compatible for it.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> .../devicetree/bindings/display/panel/lg,sw43408.yaml | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible
2025-11-25 20:29 ` [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible David Heidelberg via B4 Relay
@ 2025-12-06 4:21 ` Dmitry Baryshkov
0 siblings, 0 replies; 19+ messages in thread
From: Dmitry Baryshkov @ 2025-12-06 4:21 UTC (permalink / raw)
To: david
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On Tue, Nov 25, 2025 at 09:29:38PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> The supported panel is LH546WF1-ED01, add compatible and adjust the
> struct name to reflect that.
>
> The standalone compatible lg,sw43408 will continue to work, even thou
> there are no users yet.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/gpu/drm/panel/panel-lg-sw43408.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions
2025-11-25 20:29 ` [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions David Heidelberg via B4 Relay
@ 2025-12-06 4:25 ` Dmitry Baryshkov
2025-12-06 13:27 ` David Heidelberg
2026-02-23 13:39 ` David Heidelberg
0 siblings, 2 replies; 19+ messages in thread
From: Dmitry Baryshkov @ 2025-12-06 4:25 UTC (permalink / raw)
To: david
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On Tue, Nov 25, 2025 at 09:29:39PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Introduce enable(), disable() and reset() functions.
>
> The enable() and disable() callbacks keep the symmetry in the commands
> sent to the panel and also make a clearer distinction between panel
> initialization and configuration.
This also makes those to to be executed after starting the DSI stream.
Is it fine?
>
> Splitting reset() from prepare() follows clean coding practices and lets
> us potentially make reset optional in the future for flicker-less
> takeover from a bootloader or framebuffer driver where the panel is
> already configured.
>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/gpu/drm/panel/panel-lg-sw43408.c | 83 ++++++++++++++++++++------------
> 1 file changed, 53 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-lg-sw43408.c b/drivers/gpu/drm/panel/panel-lg-sw43408.c
> index dcca7873acf8e..20217877e107f 100644
> --- a/drivers/gpu/drm/panel/panel-lg-sw43408.c
> +++ b/drivers/gpu/drm/panel/panel-lg-sw43408.c
> @@ -38,11 +38,10 @@ static inline struct sw43408_panel *to_panel_info(struct drm_panel *panel)
> return container_of(panel, struct sw43408_panel, base);
> }
>
> -static int sw43408_unprepare(struct drm_panel *panel)
> +static int sw43408_disable(struct drm_panel *panel)
> {
> struct sw43408_panel *sw43408 = to_panel_info(panel);
> struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
> - int ret;
>
> mipi_dsi_dcs_set_display_off_multi(&ctx);
>
> @@ -50,19 +49,55 @@ static int sw43408_unprepare(struct drm_panel *panel)
>
> mipi_dsi_msleep(&ctx, 100);
>
> + return ctx.accum_err;
> +}
> +
> +static int sw43408_unprepare(struct drm_panel *panel)
> +{
> + struct sw43408_panel *sw43408 = to_panel_info(panel);
> + int ret;
> +
> gpiod_set_value(sw43408->reset_gpio, 1);
>
> ret = regulator_bulk_disable(ARRAY_SIZE(sw43408->supplies), sw43408->supplies);
>
> - return ret ? : ctx.accum_err;
> + return ret;
> }
>
> -static int sw43408_program(struct drm_panel *panel)
> +static int sw43408_enable(struct drm_panel *panel)
Please move it below sw43408_program() to ease code review.
> {
> struct sw43408_panel *sw43408 = to_panel_info(panel);
> struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
> struct drm_dsc_picture_parameter_set pps;
>
> + mipi_dsi_dcs_set_display_on_multi(&ctx);
> +
> + mipi_dsi_msleep(&ctx, 50);
> +
> + sw43408->link->mode_flags &= ~MIPI_DSI_MODE_LPM;
> +
> + drm_dsc_pps_payload_pack(&pps, sw43408->link->dsc);
> +
> + mipi_dsi_picture_parameter_set_multi(&ctx, &pps);
> +
> + sw43408->link->mode_flags |= MIPI_DSI_MODE_LPM;
> +
> + /*
> + * This panel uses PPS selectors with offset:
> + * PPS 1 if pps_identifier is 0
> + * PPS 2 if pps_identifier is 1
> + */
> + mipi_dsi_compression_mode_ext_multi(&ctx, true,
> + MIPI_DSI_COMPRESSION_DSC, 1);
> +
> + return ctx.accum_err;
> +}
> +
> +static int sw43408_program(struct drm_panel *panel)
> +{
> + struct sw43408_panel *sw43408 = to_panel_info(panel);
> + struct mipi_dsi_multi_context ctx = { .dsi = sw43408->link };
> +
> mipi_dsi_dcs_write_seq_multi(&ctx, MIPI_DCS_SET_GAMMA_CURVE, 0x02);
>
> mipi_dsi_dcs_set_tear_on_multi(&ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
> @@ -97,26 +132,19 @@ static int sw43408_program(struct drm_panel *panel)
> mipi_dsi_dcs_write_seq_multi(&ctx, 0x55, 0x04, 0x61, 0xdb, 0x04, 0x70, 0xdb);
> mipi_dsi_dcs_write_seq_multi(&ctx, 0xb0, 0xca);
>
> - mipi_dsi_dcs_set_display_on_multi(&ctx);
> -
> - mipi_dsi_msleep(&ctx, 50);
> -
> - sw43408->link->mode_flags &= ~MIPI_DSI_MODE_LPM;
> -
> - drm_dsc_pps_payload_pack(&pps, sw43408->link->dsc);
> -
> - mipi_dsi_picture_parameter_set_multi(&ctx, &pps);
> + return ctx.accum_err;
> +}
>
> - sw43408->link->mode_flags |= MIPI_DSI_MODE_LPM;
> +static void sw43408_reset(struct sw43408_panel *ctx)
> +{
> + usleep_range(5000, 6000);
>
> - /*
> - * This panel uses PPS selectors with offset:
> - * PPS 1 if pps_identifier is 0
> - * PPS 2 if pps_identifier is 1
> - */
> - mipi_dsi_compression_mode_ext_multi(&ctx, true,
> - MIPI_DSI_COMPRESSION_DSC, 1);
> - return ctx.accum_err;
> + gpiod_set_value(ctx->reset_gpio, 0);
> + usleep_range(9000, 10000);
> + gpiod_set_value(ctx->reset_gpio, 1);
> + usleep_range(1000, 2000);
> + gpiod_set_value(ctx->reset_gpio, 0);
> + usleep_range(9000, 10000);
> }
>
> static int sw43408_prepare(struct drm_panel *panel)
> @@ -128,14 +156,7 @@ static int sw43408_prepare(struct drm_panel *panel)
> if (ret < 0)
> return ret;
>
> - usleep_range(5000, 6000);
> -
> - gpiod_set_value(ctx->reset_gpio, 0);
> - usleep_range(9000, 10000);
> - gpiod_set_value(ctx->reset_gpio, 1);
> - usleep_range(1000, 2000);
> - gpiod_set_value(ctx->reset_gpio, 0);
> - usleep_range(9000, 10000);
> + sw43408_reset(ctx);
>
> ret = sw43408_program(panel);
> if (ret)
> @@ -208,6 +229,8 @@ static int sw43408_backlight_init(struct sw43408_panel *ctx)
> }
>
> static const struct drm_panel_funcs sw43408_funcs = {
> + .disable = sw43408_disable,
> + .enable = sw43408_enable,
> .unprepare = sw43408_unprepare,
> .prepare = sw43408_prepare,
> .get_modes = sw43408_get_modes,
>
> --
> 2.51.0
>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove
2025-11-25 20:29 ` [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove David Heidelberg via B4 Relay
@ 2025-12-06 4:26 ` Dmitry Baryshkov
0 siblings, 0 replies; 19+ messages in thread
From: Dmitry Baryshkov @ 2025-12-06 4:26 UTC (permalink / raw)
To: david
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On Tue, Nov 25, 2025 at 09:29:40PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> The drm_panel_remove should take care of disable/unprepare. Remove the
> manual call from the sw43408_remove function.
>
> Fixes: 069a6c0e94f9 ("drm: panel: Add LG sw43408 panel driver")
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/gpu/drm/panel/panel-lg-sw43408.c | 4 ----
> 1 file changed, 4 deletions(-)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions
2025-12-06 4:25 ` Dmitry Baryshkov
@ 2025-12-06 13:27 ` David Heidelberg
2026-02-23 13:39 ` David Heidelberg
1 sibling, 0 replies; 19+ messages in thread
From: David Heidelberg @ 2025-12-06 13:27 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On 06/12/2025 05:25, Dmitry Baryshkov wrote:
> On Tue, Nov 25, 2025 at 09:29:39PM +0100, David Heidelberg via B4 Relay wrote:
>> From: David Heidelberg <david@ixit.cz>
>>
>> Introduce enable(), disable() and reset() functions.
>>
>> The enable() and disable() callbacks keep the symmetry in the commands
>> sent to the panel and also make a clearer distinction between panel
>> initialization and configuration.
>
> This also makes those to to be executed after starting the DSI stream.
> Is it fine?
>
Yes, the panel works same way as before without patchset.
Still not recovering from panel off, we tried to debug, not there yet,
but the sequences are verified to work fine).
Reset sequence or/and regulators may not be correct enough to recover.
I'm sending another series with moved _enable function and all R-Bs.
David
[...]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL
2025-11-25 20:29 ` [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
2025-11-27 11:21 ` Konrad Dybcio
@ 2025-12-06 16:56 ` Bjorn Andersson
2025-12-06 17:20 ` David Heidelberg
1 sibling, 1 reply; 19+ messages in thread
From: Bjorn Andersson @ 2025-12-06 16:56 UTC (permalink / raw)
To: david
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Sumit Semwal, Casey Connolly, Neil Armstrong, Jessica Zhang,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Marijn Suijten, Dmitry Baryshkov,
Vinod Koul, phodina, linux-arm-msm, devicetree, linux-kernel,
phone-devel, dri-devel, Amit Pundir, Casey Connolly,
Joel Selvaraj
On Tue, Nov 25, 2025 at 09:29:43PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> This adds initial device tree support for the following phones:
>
> - Google Pixel 3 (blueline)
> - Google Pixel 3 XL (crosshatch)
>
> Both phone boards use the same identifiers and differ only slightly
> in their connected peripherals.
>
> Supported functionality includes:
> - Debug UART
> - UFS
> - USB-C (peripheral mode)
> - Display (Pixel 3 only, and the driver needs improvements)
> - GPU
> - Bluetooth
> - Wi-Fi
>
> The rmtfs region is allocated using UIO, making it technically "dynamic."
>
> Its address and size can be read from sysfs:
>
> $ cat /sys/class/uio/uio0/name
> /sys/class/uio/uio0/maps/map0/addr
> 0x00000000f2701000
>
> $ cat /sys/class/uio/uio0/maps/map0/size
> 0x0000000000200000
>
> Like the OnePlus 6, the Pixel 3 requires 1 kB of reserved memory on either
> side of the rmtfs region to work around an XPU bug that would otherwise
> cause erroneous violations when accessing the rmtfs_mem region.
>
> Co-developed-by: Amit Pundir <amit.pundir@linaro.org>
> Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
> Co-developed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Did I really co-author this patch? Perhaps I contributed parts to it?
Perhaps I've just forgotten?
Either way, I don't think I can say that I certify origin of the whole
patch.
Any parts that I did contribute, would have met the criteria, so you're
free to use those.
Regards,
Bjorn
> Co-developed-by: Casey Connolly <casey@connolly.tech>
> Signed-off-by: Casey Connolly <casey@connolly.tech>
> Co-developed-by: Joel Selvaraj <foss@joelselvaraj.com>
> Signed-off-by: Joel Selvaraj <foss@joelselvaraj.com>
> Co-developed-by: Sumit Semwal <sumit.semwal@linaro.org>
> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
> Co-developed-by: Vinod Koul <vkoul@kernel.org>
> Signed-off-by: Vinod Koul <vkoul@kernel.org>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 2 +
> .../arm64/boot/dts/qcom/sdm845-google-blueline.dts | 77 +++
> arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 528 +++++++++++++++++++++
> .../boot/dts/qcom/sdm845-google-crosshatch.dts | 28 ++
> 4 files changed, 635 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 6f34d5ed331c4..c853b28b3b198 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -250,6 +250,8 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm845-db845c.dtb
> sdm845-db845c-navigation-mezzanine-dtbs := sdm845-db845c.dtb sdm845-db845c-navigation-mezzanine.dtbo
>
> dtb-$(CONFIG_ARCH_QCOM) += sdm845-db845c-navigation-mezzanine.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += sdm845-google-crosshatch.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += sdm845-google-blueline.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sdm845-lg-judyln.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sdm845-lg-judyp.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sdm845-mtp.dtb
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts b/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts
> new file mode 100644
> index 0000000000000..94252c3fcf638
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts
> @@ -0,0 +1,77 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +
> +/dts-v1/;
> +
> +#include "sdm845-google-common.dtsi"
> +
> +/ {
> + model = "Google Pixel 3";
> + compatible = "google,blueline", "qcom,sdm845";
> +};
> +
> +&battery {
> + charge-full-design-microamp-hours = <2970000>;
> + voltage-min-design-microvolt = <3600000>;
> + voltage-max-design-microvolt = <4400000>;
> +};
> +
> +&framebuffer0 {
> + width = <1080>;
> + height = <2160>;
> + stride = <(1080 * 4)>;
> +};
> +
> +&mdss_dsi0 {
> + vdda-supply = <&vdda_mipi_dsi0_1p2>;
> +
> + status = "okay";
> +
> + panel@0 {
> + compatible = "lg,sw43408-lh546wf1-ed01", "lg,sw43408";
> + reg = <0>;
> +
> + vddi-supply = <&vreg_l14a_1p88>;
> + vpnl-supply = <&vreg_l28a_3p0>;
> +
> + reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
> +
> + pinctrl-0 = <&panel_default>;
> + pinctrl-names = "default";
> +
> + port {
> + panel_in: endpoint {
> + remote-endpoint = <&mdss_dsi0_out>;
> + };
> + };
> + };
> +};
> +
> +&mdss_dsi0_out {
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&panel_in>;
> + qcom,te-source = "mdp_vsync_e";
> +};
> +
> +&mdss_dsi0_phy {
> + vdds-supply = <&vdda_mipi_dsi0_pll>;
> +
> + status = "okay";
> +};
> +
> +&tlmm {
> + panel_default: panel-default-state {
> + reset-pins {
> + pins = "gpio6";
> + function = "gpio";
> + drive-strength = <8>;
> + bias-disable;
> + };
> +
> + te-pins {
> + pins = "gpio12";
> + function = "mdp_vsync";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
> new file mode 100644
> index 0000000000000..ad3bfc5b761f2
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
> @@ -0,0 +1,528 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/arm/qcom,ids.h>
> +#include <dt-bindings/dma/qcom-gpi.h>
> +#include <dt-bindings/input/linux-event-codes.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +
> +#include "sdm845.dtsi"
> +#include "pm8998.dtsi"
> +#include "pmi8998.dtsi"
> +
> +/delete-node/ &mpss_region;
> +/delete-node/ &venus_mem;
> +/delete-node/ &cdsp_mem;
> +/delete-node/ &mba_region;
> +/delete-node/ &slpi_mem;
> +/delete-node/ &spss_mem;
> +/delete-node/ &rmtfs_mem;
> +
> +/ {
> + chassis-type = "handset";
> + qcom,board-id = <0x00021505 0>;
> + qcom,msm-id = <QCOM_ID_SDM845 0x20001>;
> +
> + aliases {
> + serial0 = &uart9;
> + serial1 = &uart6;
> + };
> +
> + battery: battery {
> + compatible = "simple-battery";
> + };
> +
> + chosen {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> +
> + stdout-path = "serial0:115200n8";
> +
> + /* Use display framebuffer as setup by bootloader */
> + framebuffer0: framebuffer-0 {
> + compatible = "simple-framebuffer";
> + memory-region = <&cont_splash_mem>;
> +
> + format = "a8r8g8b8";
> + };
> + };
> +
> + reserved-memory {
> + cont_splash_mem: splash@9d400000 {
> + reg = <0 0x9d400000 0 0x02400000>;
> + no-map;
> + };
> +
> + mpss_region: memory@8e000000 {
> + reg = <0 0x8e000000 0 0x9800000>;
> + no-map;
> + };
> +
> + venus_mem: venus@97800000 {
> + reg = <0 0x97800000 0 0x500000>;
> + no-map;
> + };
> +
> + cdsp_mem: cdsp-mem@97D00000 {
> + reg = <0 0x97D00000 0 0x800000>;
> + no-map;
> + };
> +
> + mba_region: mba@98500000 {
> + reg = <0 0x98500000 0 0x200000>;
> + no-map;
> + };
> +
> + slpi_mem: slpi@98700000 {
> + reg = <0 0x98700000 0 0x1400000>;
> + no-map;
> + };
> +
> + spss_mem: spss@99B00000 {
> + reg = <0 0x99B00000 0 0x100000>;
> + no-map;
> + };
> +
> + rmtfs_mem: rmtfs-region@f2700000 {
> + compatible = "qcom,rmtfs-mem";
> + reg = <0 0xf2700000 0 0x202000>;
> + qcom,use-guard-pages;
> + no-map;
> +
> + qcom,client-id = <1>;
> + qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>;
> + };
> + };
> +
> + gpio-keys {
> + compatible = "gpio-keys";
> + label = "Volume keys";
> + autorepeat;
> +
> + pinctrl-0 = <&volume_up_gpio>;
> + pinctrl-names = "default";
> +
> + key-vol-up {
> + label = "Volume Up";
> + linux,code = <KEY_VOLUMEUP>;
> + gpios = <&pm8998_gpios 6 GPIO_ACTIVE_LOW>;
> + debounce-interval = <15>;
> + };
> + };
> +
> + vph_pwr: regulator-vph-pwr {
> + compatible = "regulator-fixed";
> + regulator-name = "vph_pwr";
> + regulator-min-microvolt = <3700000>;
> + regulator-max-microvolt = <3700000>;
> + };
> +
> + vreg_s4a_1p8: regulator-vreg-s4a-1p8 {
> + compatible = "regulator-fixed";
> + regulator-name = "vreg_s4a_1p8";
> +
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-always-on;
> + regulator-boot-on;
> +
> + vin-supply = <&vph_pwr>;
> + };
> +};
> +
> +&adsp_pas {
> + firmware-name = "qcom/sdm845/Google/blueline/adsp.mbn";
> +
> + status = "okay";
> +};
> +
> +&apps_rsc {
> + regulators-0 {
> + compatible = "qcom,pm8998-rpmh-regulators";
> + qcom,pmic-id = "a";
> +
> + vdd-s1-supply = <&vph_pwr>;
> + vdd-s2-supply = <&vph_pwr>;
> + vdd-s3-supply = <&vph_pwr>;
> + vdd-s4-supply = <&vph_pwr>;
> + vdd-s5-supply = <&vph_pwr>;
> + vdd-s6-supply = <&vph_pwr>;
> + vdd-s7-supply = <&vph_pwr>;
> + vdd-s8-supply = <&vph_pwr>;
> + vdd-s9-supply = <&vph_pwr>;
> + vdd-s10-supply = <&vph_pwr>;
> + vdd-s11-supply = <&vph_pwr>;
> + vdd-s12-supply = <&vph_pwr>;
> + vdd-s13-supply = <&vph_pwr>;
> + vdd-l1-l27-supply = <&vreg_s7a_1p025>;
> + vdd-l2-l8-l17-supply = <&vreg_s3a_1p35>;
> + vdd-l3-l11-supply = <&vreg_s7a_1p025>;
> + vdd-l4-l5-supply = <&vreg_s7a_1p025>;
> + vdd-l6-supply = <&vph_pwr>;
> + vdd-l7-l12-l14-l15-supply = <&vreg_s5a_2p04>;
> + vdd-l9-supply = <&vreg_bob>;
> + vdd-l10-l23-l25-supply = <&vreg_bob>;
> + vdd-l13-l19-l21-supply = <&vreg_bob>;
> + vdd-l16-l28-supply = <&vreg_bob>;
> + vdd-l18-l22-supply = <&vreg_bob>;
> + vdd-l20-l24-supply = <&vreg_bob>;
> + vdd-l26-supply = <&vreg_s3a_1p35>;
> + vin-lvs-1-2-supply = <&vreg_s4a_1p8>;
> +
> + vreg_s3a_1p35: smps3 {
> + regulator-min-microvolt = <1352000>;
> + regulator-max-microvolt = <1352000>;
> + };
> +
> + vreg_s5a_2p04: smps5 {
> + regulator-min-microvolt = <1904000>;
> + regulator-max-microvolt = <2040000>;
> + };
> +
> + vreg_s7a_1p025: smps7 {
> + regulator-min-microvolt = <900000>;
> + regulator-max-microvolt = <1028000>;
> + };
> +
> + vdda_mipi_dsi0_pll:
> + vreg_l1a_0p875: ldo1 {
> + regulator-min-microvolt = <880000>;
> + regulator-max-microvolt = <880000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + regulator-boot-on;
> + };
> +
> + vreg_l5a_0p8: ldo5 {
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <800000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l12a_1p8: ldo12 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l7a_1p8: ldo7 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l13a_2p95: ldo13 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <2960000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l14a_1p88: ldo14 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + regulator-boot-on;
> + /*
> + * We can't properly bring the panel back if it gets turned off
> + * so keep it's regulators always on for now.
> + */
> + regulator-always-on;
> + };
> +
> + vreg_l17a_1p3: ldo17 {
> + regulator-min-microvolt = <1304000>;
> + regulator-max-microvolt = <1304000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l19a_3p3: ldo19 {
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3312000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + /*
> + * The touchscreen needs this to be 3.3v, which is apparently
> + * quite close to the hardware limit for this LDO (3.312v)
> + * It must be kept in high power mode to prevent TS brownouts
> + */
> + regulator-allowed-modes = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l20a_2p95: ldo20 {
> + regulator-min-microvolt = <2960000>;
> + regulator-max-microvolt = <2968000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l21a_2p95: ldo21 {
> + regulator-min-microvolt = <2960000>;
> + regulator-max-microvolt = <2968000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l24a_3p075: ldo24 {
> + regulator-min-microvolt = <3088000>;
> + regulator-max-microvolt = <3088000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vreg_l25a_3p3: ldo25 {
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3312000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + };
> +
> + vdda_mipi_dsi0_1p2:
> + vreg_l26a_1p2: ldo26 {
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1200000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
> + regulator-boot-on;
> + };
> +
> + vreg_l28a_3p0: ldo28 {
> + regulator-min-microvolt = <2856000>;
> + regulator-max-microvolt = <3008000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_LPM>;
> + regulator-boot-on;
> + /*
> + * We can't properly bring the panel back if it gets turned off
> + * so keep it's regulators always on for now.
> + */
> + regulator-always-on;
> + };
> + };
> +
> + regulators-1 {
> + compatible = "qcom,pmi8998-rpmh-regulators";
> + qcom,pmic-id = "b";
> +
> + vdd-bob-supply = <&vph_pwr>;
> +
> + vreg_bob: bob {
> + regulator-min-microvolt = <3312000>;
> + regulator-max-microvolt = <3600000>;
> + regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
> + regulator-allow-bypass;
> + };
> + };
> +
> + regulators-2 {
> + compatible = "qcom,pm8005-rpmh-regulators";
> + qcom,pmic-id = "c";
> +
> + vdd-s1-supply = <&vph_pwr>;
> + vdd-s2-supply = <&vph_pwr>;
> + vdd-s3-supply = <&vph_pwr>;
> + vdd-s4-supply = <&vph_pwr>;
> +
> + vreg_s3c_0p6: smps3 {
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <600000>;
> + };
> + };
> +};
> +
> +&cdsp_pas {
> + firmware-name = "qcom/sdm845/Google/blueline/cdsp.mbn";
> +
> + status = "okay";
> +};
> +
> +&gcc {
> + protected-clocks = <GCC_QSPI_CORE_CLK>,
> + <GCC_QSPI_CORE_CLK_SRC>,
> + <GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
> +};
> +
> +&gpi_dma0 {
> + status = "okay";
> +};
> +
> +&gpi_dma1 {
> + status = "okay";
> +};
> +
> +&gpu {
> + status = "okay";
> +};
> +
> +&gpu_zap_shader {
> + firmware-name = "qcom/sdm845/Google/blueline/a630_zap.mbn";
> +};
> +
> +&i2c2 {
> + /* ST,FTS @ 49 */
> +};
> +
> +&i2c12 {
> + /* Bottom spkr (right) CS35L36 @ 40 */
> +
> + /* Top spkr (left) CS35L36 @ 41 */
> +};
> +
> +&ipa {
> + firmware-name = "qcom/sdm845/Google/blueline/ipa_fws.mbn";
> + memory-region = <&ipa_fw_mem>;
> +
> + status = "okay";
> +};
> +
> +&mdss {
> + status = "okay";
> +};
> +
> +&mss_pil {
> + firmware-name = "qcom/sdm845/Google/blueline/mba.mbn",
> + "qcom/sdm845/Google/blueline/modem.mbn";
> +
> + status = "okay";
> +};
> +
> +&pm8998_gpios {
> + volume_up_gpio: vol-up-active-state {
> + pins = "gpio6";
> + function = "normal";
> + input-enable;
> + bias-pull-up;
> + qcom,drive-strength = <0>;
> + };
> +};
> +
> +&pm8998_resin {
> + linux,code = <KEY_VOLUMEDOWN>;
> +
> + status = "okay";
> +};
> +
> +&pmi8998_charger {
> + monitored-battery = <&battery>;
> +
> + status = "okay";
> +};
> +
> +&qupv3_id_0 {
> + status = "okay";
> +};
> +
> +&qupv3_id_1 {
> + status = "okay";
> +};
> +
> +&qup_uart9_rx {
> + drive-strength = <2>;
> + bias-pull-up;
> +};
> +
> +&qup_uart9_tx {
> + drive-strength = <2>;
> + bias-disable;
> +};
> +
> +&tlmm {
> + gpio-reserved-ranges = < 0 4>, /* SPI (Intel MNH Pixel Visual Core) */
> + <81 4>; /* SPI (most likely Fingerprint Cards FPC1075) */
> +
> + touchscreen_reset: ts-reset-state {
> + pins = "gpio99";
> + function = "gpio";
> + drive-strength = <8>;
> + bias-pull-up;
> + };
> +
> + touchscreen_pins: ts-pins-gpio-state {
> + pins = "gpio125";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +
> + touchscreen_i2c_pins: qup-i2c2-gpio-state {
> + pins = "gpio27", "gpio28";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +};
> +
> +&uart6 {
> + pinctrl-0 = <&qup_uart6_4pin>;
> +
> + status = "okay";
> +
> + bluetooth {
> + compatible = "qcom,wcn3990-bt";
> +
> + vddio-supply = <&vreg_s4a_1p8>;
> + vddxo-supply = <&vreg_l7a_1p8>;
> + vddrf-supply = <&vreg_l17a_1p3>;
> + vddch0-supply = <&vreg_l25a_3p3>;
> + max-speed = <3200000>;
> + };
> +};
> +
> +&uart9 {
> + status = "okay";
> +};
> +
> +&ufs_mem_hc {
> + reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>;
> +
> + vcc-supply = <&vreg_l20a_2p95>;
> + vcc-max-microamp = <800000>;
> +
> + status = "okay";
> +};
> +
> +&ufs_mem_phy {
> + vdda-phy-supply = <&vreg_l1a_0p875>;
> + vdda-pll-supply = <&vreg_l26a_1p2>;
> +
> + status = "okay";
> +};
> +
> +&usb_1 {
> + status = "okay";
> +};
> +
> +&usb_1_dwc3 {
> + dr_mode = "peripheral";
> +};
> +
> +&usb_1_hsphy {
> + vdd-supply = <&vreg_l1a_0p875>;
> + vdda-pll-supply = <&vreg_l12a_1p8>;
> + vdda-phy-dpdm-supply = <&vreg_l24a_3p075>;
> +
> + qcom,imp-res-offset-value = <8>;
> + qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>;
> + qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>;
> + qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>;
> +
> + status = "okay";
> +};
> +
> +&usb_1_qmpphy {
> + vdda-phy-supply = <&vreg_l26a_1p2>;
> + vdda-pll-supply = <&vreg_l1a_0p875>;
> +
> + status = "okay";
> +};
> +
> +&venus {
> + firmware-name = "qcom/sdm845/Google/blueline/venus.mbn";
> +
> + status = "okay";
> +};
> +
> +&wifi {
> + vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>;
> + vdd-1.8-xo-supply = <&vreg_l7a_1p8>;
> + vdd-1.3-rfa-supply = <&vreg_l17a_1p3>;
> + vdd-3.3-ch0-supply = <&vreg_l25a_3p3>;
> +
> + qcom,snoc-host-cap-8bit-quirk;
> +
> + status = "okay";
> +};
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts b/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts
> new file mode 100644
> index 0000000000000..5cb0aa8b37fda
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/sdm845-google-crosshatch.dts
> @@ -0,0 +1,28 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +
> +/dts-v1/;
> +
> +#include "sdm845-google-common.dtsi"
> +
> +/ {
> + model = "Google Pixel 3 XL";
> + compatible = "google,crosshatch", "qcom,sdm845";
> +};
> +
> +&battery {
> + charge-full-design-microamp-hours = <3480000>;
> + voltage-min-design-microvolt = <3600000>;
> + voltage-max-design-microvolt = <4400000>;
> +};
> +
> +&framebuffer0 {
> + width = <1440>;
> + height = <2960>;
> + stride = <(1440 * 4)>;
> +};
> +
> +&mdss {
> + /* until the panel is prepared */
> + status = "disabled";
> +};
> +
>
> --
> 2.51.0
>
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL
2025-12-06 16:56 ` Bjorn Andersson
@ 2025-12-06 17:20 ` David Heidelberg
0 siblings, 0 replies; 19+ messages in thread
From: David Heidelberg @ 2025-12-06 17:20 UTC (permalink / raw)
To: Bjorn Andersson
Cc: Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Sumit Semwal, Casey Connolly, Neil Armstrong, Jessica Zhang,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Marijn Suijten, Dmitry Baryshkov,
Vinod Koul, phodina, linux-arm-msm, devicetree, linux-kernel,
phone-devel, dri-devel, Amit Pundir, Casey Connolly,
Joel Selvaraj
On 06/12/2025 17:56, Bjorn Andersson wrote:
> On Tue, Nov 25, 2025 at 09:29:43PM +0100, David Heidelberg via B4 Relay wrote:
>> From: David Heidelberg <david@ixit.cz>
>>
>> This adds initial device tree support for the following phones:
>>
>> - Google Pixel 3 (blueline)
>> - Google Pixel 3 XL (crosshatch)
>>
>> Both phone boards use the same identifiers and differ only slightly
>> in their connected peripherals.
>>
>> Supported functionality includes:
>> - Debug UART
>> - UFS
>> - USB-C (peripheral mode)
>> - Display (Pixel 3 only, and the driver needs improvements)
>> - GPU
>> - Bluetooth
>> - Wi-Fi
>>
>> The rmtfs region is allocated using UIO, making it technically "dynamic."
>>
>> Its address and size can be read from sysfs:
>>
>> $ cat /sys/class/uio/uio0/name
>> /sys/class/uio/uio0/maps/map0/addr
>> 0x00000000f2701000
>>
>> $ cat /sys/class/uio/uio0/maps/map0/size
>> 0x0000000000200000
>>
>> Like the OnePlus 6, the Pixel 3 requires 1 kB of reserved memory on either
>> side of the rmtfs region to work around an XPU bug that would otherwise
>> cause erroneous violations when accessing the rmtfs_mem region.
>>
>> Co-developed-by: Amit Pundir <amit.pundir@linaro.org>
>> Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
>> Co-developed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
>> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
>
> Did I really co-author this patch? Perhaps I contributed parts to it?
> Perhaps I've just forgotten?
The patch and it's parts I used contained your S-off-by, so I added
Co-developed-by as I assumed parts of it was written by you.
That's hard about seeing patches downstream, as the history is not so clear.
>
> Either way, I don't think I can say that I certify origin of the whole
> patch.
Should I drop your the Signed-off-by then (and eventually all people who
didn't worked on the series I sent to upstream)?
>
>
> Any parts that I did contribute, would have met the criteria, so you're
> free to use those.
Thanks!
David
>
> Regards,
> Bjorn
>
>> Co-developed-by: Casey Connolly <casey@connolly.tech>
>> Signed-off-by: Casey Connolly <casey@connolly.tech>
>> Co-developed-by: Joel Selvaraj <foss@joelselvaraj.com>
>> Signed-off-by: Joel Selvaraj <foss@joelselvaraj.com>
>> Co-developed-by: Sumit Semwal <sumit.semwal@linaro.org>
>> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
>> Co-developed-by: Vinod Koul <vkoul@kernel.org>
>> Signed-off-by: Vinod Koul <vkoul@kernel.org>
>> Signed-off-by: David Heidelberg <david@ixit.cz>
>> ---
>> arch/arm64/boot/dts/qcom/Makefile | 2 +
>> .../arm64/boot/dts/qcom/sdm845-google-blueline.dts | 77 +++
>> arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 528 +++++++++++++++++++++
>> .../boot/dts/qcom/sdm845-google-crosshatch.dts | 28 ++
>> 4 files changed, 635 insertions(+)
>>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions
2025-12-06 4:25 ` Dmitry Baryshkov
2025-12-06 13:27 ` David Heidelberg
@ 2026-02-23 13:39 ` David Heidelberg
2026-02-23 17:09 ` Dmitry Baryshkov
1 sibling, 1 reply; 19+ messages in thread
From: David Heidelberg @ 2026-02-23 13:39 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On 06/12/2025 05:25, Dmitry Baryshkov wrote:
> On Tue, Nov 25, 2025 at 09:29:39PM +0100, David Heidelberg via B4 Relay wrote:
>> From: David Heidelberg <david@ixit.cz>
>>
>> Introduce enable(), disable() and reset() functions.
>>
>> The enable() and disable() callbacks keep the symmetry in the commands
>> sent to the panel and also make a clearer distinction between panel
>> initialization and configuration.
>
> This also makes those to to be executed after starting the DSI stream.
> Is it fine?
>
Hello Dmitry,
I was wondering how the exact workflow looks, does this snippet reflect
real world?
- The path ordering should be :
- prepare()
- (host/controller sets up link & starts sending video / enables bridge,
etc.)
- enable()
- disable()
- (host/controller stops video / disables bridge, etc.)
- unprepare()
-
- So: prepare happens before the display pipeline is driving, and enable
happens after the pipeline is ready and stable.
I assume in case of poorly written host or bridge drive it may not work
like this, but in general it should?
If this workflow is correct, would it make sense I would incorporate the
phases between into the prepare/unprepare kernel docs?
Thanks
David
[...]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions
2026-02-23 13:39 ` David Heidelberg
@ 2026-02-23 17:09 ` Dmitry Baryshkov
0 siblings, 0 replies; 19+ messages in thread
From: Dmitry Baryshkov @ 2026-02-23 17:09 UTC (permalink / raw)
To: David Heidelberg
Cc: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Sumit Semwal, Casey Connolly, Neil Armstrong,
Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Marijn Suijten,
Dmitry Baryshkov, Vinod Koul, phodina, linux-arm-msm, devicetree,
linux-kernel, phone-devel, dri-devel
On Mon, 23 Feb 2026 at 15:40, David Heidelberg <david@ixit.cz> wrote:
>
> On 06/12/2025 05:25, Dmitry Baryshkov wrote:
> > On Tue, Nov 25, 2025 at 09:29:39PM +0100, David Heidelberg via B4 Relay wrote:
> >> From: David Heidelberg <david@ixit.cz>
> >>
> >> Introduce enable(), disable() and reset() functions.
> >>
> >> The enable() and disable() callbacks keep the symmetry in the commands
> >> sent to the panel and also make a clearer distinction between panel
> >> initialization and configuration.
> >
> > This also makes those to to be executed after starting the DSI stream.
> > Is it fine?
> >
>
> Hello Dmitry,
>
> I was wondering how the exact workflow looks, does this snippet reflect
> real world?
>
> - The path ordering should be :
> - prepare()
> - (host/controller sets up link & starts sending video / enables bridge,
> etc.)
> - enable()
> - disable()
> - (host/controller stops video / disables bridge, etc.)
> - unprepare()
> -
> - So: prepare happens before the display pipeline is driving, and enable
> happens after the pipeline is ready and stable.
> I assume in case of poorly written host or bridge drive it may not work
> like this, but in general it should?
>
> If this workflow is correct, would it make sense I would incorporate the
> phases between into the prepare/unprepare kernel docs?
There is a very precise definition of the DSI host lifecycle. Please
take a look and notice that for DSI hosts there are two different
points:
- the DSI link is started in LP mode, letting the host send commands
to the DSI sink.
- the video / CMD stream is started
For multiple reasons those two stages are separate.
>
> Thanks
> David
>
> [...]
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2026-02-23 17:09 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-25 20:29 [PATCH v4 0/8] Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 1/8] dt-bindings: arm: qcom: Add Pixel 3 and " David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 2/8] dt-bindings: panel: sw43408: adjust to reflect the DDIC and panel used David Heidelberg via B4 Relay
2025-12-03 7:53 ` Krzysztof Kozlowski
2025-11-25 20:29 ` [PATCH v4 3/8] drm/panel: sw43408: Introduce LH546WF1-ED01 panel compatible David Heidelberg via B4 Relay
2025-12-06 4:21 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 4/8] drm/panel: sw43408: Add enable/disable and reset functions David Heidelberg via B4 Relay
2025-12-06 4:25 ` Dmitry Baryshkov
2025-12-06 13:27 ` David Heidelberg
2026-02-23 13:39 ` David Heidelberg
2026-02-23 17:09 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 5/8] drm/panel: sw43408: Remove manual invocation of unprepare at remove David Heidelberg via B4 Relay
2025-12-06 4:26 ` Dmitry Baryshkov
2025-11-25 20:29 ` [PATCH v4 6/8] drm/panel: sw43408: Switch to devm_regulator_bulk_get_const David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 7/8] drm/panel: sw43408: Improve wording when reset-gpios aren't available David Heidelberg via B4 Relay
2025-11-25 20:29 ` [PATCH v4 8/8] arm64: dts: qcom: Add support for Pixel 3 and Pixel 3 XL David Heidelberg via B4 Relay
2025-11-27 11:21 ` Konrad Dybcio
2025-12-06 16:56 ` Bjorn Andersson
2025-12-06 17:20 ` David Heidelberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®