+++ /dev/null
-From 5fe1fd91a3d857c6dc833234974e2b3405f8959f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 6 Sep 2024 08:38:56 +0200
-Subject: drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency
-
-From: Alexander Stein <alexander.stein@ew.tq-group.com>
-
-[ Upstream commit f673055a46784ccea04465b9213e999f7bc5187e ]
-
-When drm/bridge-connector was moved to DRM_DISPLAY_HELPER not all
-users were updated. Add missing Kconfig selections.
-
-Fixes: 9da7ec9b19d8 ("drm/bridge-connector: move to DRM_DISPLAY_HELPER module")
-Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
-Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
-Link: https://patchwork.freedesktop.org/patch/msgid/20240906063857.2223442-1-alexander.stein@ew.tq-group.com
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index f083d313d1d3a..7a427551f4341 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -13,6 +13,7 @@ config DRM_IMX_PARALLEL_DISPLAY
- tristate "Support for parallel displays"
- depends on DRM_IMX
- select DRM_BRIDGE
-+ select DRM_BRIDGE_CONNECTOR
- select DRM_PANEL_BRIDGE
- select VIDEOMODE_HELPERS
-
-@@ -31,6 +32,7 @@ config DRM_IMX_LDB
- depends on COMMON_CLK
- select MFD_SYSCON
- select DRM_BRIDGE
-+ select DRM_BRIDGE_CONNECTOR
- select DRM_PANEL_BRIDGE
- help
- Choose this to enable the internal LVDS Display Bridge (LDB)
---
-2.43.0
-
+++ /dev/null
-From fa50925e7146fa5eb1dc6b9c17bd5f84536e855f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:46 +0300
-Subject: drm/imx: ldb: drop custom DDC bus support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit b2f3418b516e3485a14f10bfc09f20211dedc156 ]
-
-None of the boards ever supported by the upstream kernel used the custom
-DDC bus support with the LDB connector. If a need arises to do so, one
-should use panel-simple and its DDC bus code. Drop ddc-i2c-bus support
-from the imx-ldb driver.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-6-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 73 ++++-------------------------
- 1 file changed, 10 insertions(+), 63 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 1924d8921c620..3f669604377e7 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -25,7 +25,6 @@
- #include <drm/drm_atomic.h>
- #include <drm/drm_atomic_helper.h>
- #include <drm/drm_bridge.h>
--#include <drm/drm_edid.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
- #include <drm/drm_panel.h>
-@@ -70,7 +69,6 @@ struct imx_ldb_channel {
- struct drm_bridge *bridge;
-
- struct device_node *child;
-- struct i2c_adapter *ddc;
- int chno;
- struct drm_display_mode mode;
- int mode_valid;
-@@ -141,18 +139,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (imx_ldb_ch->ddc) {
-- const struct drm_edid *edid = drm_edid_read_ddc(connector,
-- imx_ldb_ch->ddc);
--
-- if (edid) {
-- drm_edid_connector_update(connector, edid);
-- drm_edid_free(edid);
--
-- return drm_edid_connector_add_modes(connector);
-- }
-- }
--
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-
-@@ -481,10 +467,9 @@ static int imx_ldb_register(struct drm_device *drm,
- */
- drm_connector_helper_add(connector,
- &imx_ldb_connector_helper_funcs);
-- drm_connector_init_with_ddc(drm, connector,
-- &imx_ldb_connector_funcs,
-- DRM_MODE_CONNECTOR_LVDS,
-- imx_ldb_ch->ddc);
-+ drm_connector_init(drm, connector,
-+ &imx_ldb_connector_funcs,
-+ DRM_MODE_CONNECTOR_LVDS);
- drm_connector_attach_encoder(connector, encoder);
- }
-
-@@ -551,39 +536,6 @@ static const struct of_device_id imx_ldb_dt_ids[] = {
- };
- MODULE_DEVICE_TABLE(of, imx_ldb_dt_ids);
-
--static int imx_ldb_panel_ddc(struct device *dev,
-- struct imx_ldb_channel *channel, struct device_node *child)
--{
-- struct device_node *ddc_node;
-- int ret;
--
-- ddc_node = of_parse_phandle(child, "ddc-i2c-bus", 0);
-- if (ddc_node) {
-- channel->ddc = of_find_i2c_adapter_by_node(ddc_node);
-- of_node_put(ddc_node);
-- if (!channel->ddc) {
-- dev_warn(dev, "failed to get ddc i2c adapter\n");
-- return -EPROBE_DEFER;
-- }
-- }
--
-- if (!channel->ddc) {
-- /* if no DDC available, fallback to hardcoded EDID */
-- dev_dbg(dev, "no ddc available\n");
--
-- if (!channel->panel) {
-- /* fallback to display-timings node */
-- ret = of_get_drm_display_mode(child,
-- &channel->mode,
-- &channel->bus_flags,
-- OF_USE_NATIVE_MODE);
-- if (!ret)
-- channel->mode_valid = 1;
-- }
-- }
-- return 0;
--}
--
- static int imx_ldb_bind(struct device *dev, struct device *master, void *data)
- {
- struct drm_device *drm = data;
-@@ -694,11 +646,15 @@ static int imx_ldb_probe(struct platform_device *pdev)
- if (ret && ret != -ENODEV)
- goto free_child;
-
-- /* panel ddc only if there is no bridge */
-- if (!channel->bridge) {
-- ret = imx_ldb_panel_ddc(dev, channel, child);
-+ if (!channel->bridge && !channel->panel) {
-+ ret = of_get_drm_display_mode(child,
-+ &channel->mode,
-+ &channel->bus_flags,
-+ OF_USE_NATIVE_MODE);
- if (ret)
- goto free_child;
-+
-+ channel->mode_valid = 1;
- }
-
- bus_format = of_get_bus_format(dev, child);
-@@ -732,15 +688,6 @@ static int imx_ldb_probe(struct platform_device *pdev)
-
- static void imx_ldb_remove(struct platform_device *pdev)
- {
-- struct imx_ldb *imx_ldb = platform_get_drvdata(pdev);
-- int i;
--
-- for (i = 0; i < 2; i++) {
-- struct imx_ldb_channel *channel = &imx_ldb->channel[i];
--
-- i2c_put_adapter(channel->ddc);
-- }
--
- component_del(&pdev->dev, &imx_ldb_ops);
- }
-
---
-2.43.0
-
+++ /dev/null
-From f1406791ede0f09f4623afbe1b68902b3e490aea Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:45 +0300
-Subject: drm/imx: ldb: drop custom EDID support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit aed7b500315004a917463d571fa9cd12e0e94370 ]
-
-Bindings for the imx-ldb never allowed specifying the EDID in DT. None
-of the existing DT files use it. Drop it now in favour of using debugfs
-overrides or the drm.edid_firmware support.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-5-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 29 +++++++++++------------------
- 1 file changed, 11 insertions(+), 18 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 793dfb1a3ed00..1924d8921c620 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -72,7 +72,6 @@ struct imx_ldb_channel {
- struct device_node *child;
- struct i2c_adapter *ddc;
- int chno;
-- const struct drm_edid *drm_edid;
- struct drm_display_mode mode;
- int mode_valid;
- u32 bus_format;
-@@ -142,14 +141,17 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (!imx_ldb_ch->drm_edid && imx_ldb_ch->ddc) {
-- imx_ldb_ch->drm_edid = drm_edid_read_ddc(connector,
-- imx_ldb_ch->ddc);
-- drm_edid_connector_update(connector, imx_ldb_ch->drm_edid);
-- }
-+ if (imx_ldb_ch->ddc) {
-+ const struct drm_edid *edid = drm_edid_read_ddc(connector,
-+ imx_ldb_ch->ddc);
-
-- if (imx_ldb_ch->drm_edid)
-- num_modes = drm_edid_connector_add_modes(connector);
-+ if (edid) {
-+ drm_edid_connector_update(connector, edid);
-+ drm_edid_free(edid);
-+
-+ return drm_edid_connector_add_modes(connector);
-+ }
-+ }
-
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-@@ -566,18 +568,10 @@ static int imx_ldb_panel_ddc(struct device *dev,
- }
-
- if (!channel->ddc) {
-- const void *edidp;
-- int edid_len;
--
- /* if no DDC available, fallback to hardcoded EDID */
- dev_dbg(dev, "no ddc available\n");
-
-- edidp = of_get_property(child, "edid", &edid_len);
-- if (edidp) {
-- channel->drm_edid = drm_edid_alloc(edidp, edid_len);
-- if (!channel->drm_edid)
-- return -ENOMEM;
-- } else if (!channel->panel) {
-+ if (!channel->panel) {
- /* fallback to display-timings node */
- ret = of_get_drm_display_mode(child,
- &channel->mode,
-@@ -744,7 +738,6 @@ static void imx_ldb_remove(struct platform_device *pdev)
- for (i = 0; i < 2; i++) {
- struct imx_ldb_channel *channel = &imx_ldb->channel[i];
-
-- drm_edid_free(channel->drm_edid);
- i2c_put_adapter(channel->ddc);
- }
-
---
-2.43.0
-
+++ /dev/null
-From 46a3e7a41f394e5fb9357f7ae5994cfa79cba8d0 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:47 +0300
-Subject: drm/imx: ldb: switch to drm_panel_bridge
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit 5c5843b20bbb1e4b4de2359573c20e416b41cb48 ]
-
-Defer panel handling to drm_panel_bridge, unifying codepaths for the
-panel and bridge cases. The MFD_SYSCON symbol is moved to select to
-prevent Kconfig symbol loops.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-7-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 6 ++--
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 44 +++++++++--------------------
- 2 files changed, 18 insertions(+), 32 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index bacf0655ebaf3..6abcf9c833d44 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -26,9 +26,11 @@ config DRM_IMX_TVE
-
- config DRM_IMX_LDB
- tristate "Support for LVDS displays"
-- depends on DRM_IMX && MFD_SYSCON
-+ depends on DRM_IMX
- depends on COMMON_CLK
-- select DRM_PANEL
-+ select MFD_SYSCON
-+ select DRM_BRIDGE
-+ select DRM_PANEL_BRIDGE
- help
- Choose this to enable the internal LVDS Display Bridge (LDB)
- found on i.MX53 and i.MX6 processors.
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 3f669604377e7..bc7ad96971308 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -27,7 +27,6 @@
- #include <drm/drm_bridge.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
--#include <drm/drm_panel.h>
- #include <drm/drm_print.h>
- #include <drm/drm_probe_helper.h>
- #include <drm/drm_simple_kms_helper.h>
-@@ -64,8 +63,6 @@ struct imx_ldb;
- struct imx_ldb_channel {
- struct imx_ldb *ldb;
-
-- /* Defines what is connected to the ldb, only one at a time */
-- struct drm_panel *panel;
- struct drm_bridge *bridge;
-
- struct device_node *child;
-@@ -135,10 +132,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector);
- int num_modes;
-
-- num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector);
-- if (num_modes > 0)
-- return num_modes;
--
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-
-@@ -193,8 +186,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
- return;
- }
-
-- drm_panel_prepare(imx_ldb_ch->panel);
--
- if (dual) {
- clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]);
- clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]);
-@@ -233,8 +224,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
- }
-
- regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
--
-- drm_panel_enable(imx_ldb_ch->panel);
- }
-
- static void
-@@ -311,8 +300,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
- int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
- int mux, ret;
-
-- drm_panel_disable(imx_ldb_ch->panel);
--
- if (imx_ldb_ch == &ldb->channel[0] || dual)
- ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
- if (imx_ldb_ch == &ldb->channel[1] || dual)
-@@ -346,8 +333,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
- dev_err(ldb->dev,
- "unable to set di%d parent clock to original parent\n",
- mux);
--
-- drm_panel_unprepare(imx_ldb_ch->panel);
- }
-
- static int imx_ldb_encoder_atomic_check(struct drm_encoder *encoder,
-@@ -640,13 +625,15 @@ static int imx_ldb_probe(struct platform_device *pdev)
- * The output port is port@4 with an external 4-port mux or
- * port@2 with the internal 2-port mux.
- */
-- ret = drm_of_find_panel_or_bridge(child,
-- imx_ldb->lvds_mux ? 4 : 2, 0,
-- &channel->panel, &channel->bridge);
-- if (ret && ret != -ENODEV)
-- goto free_child;
-+ channel->bridge = devm_drm_of_get_bridge(dev, child,
-+ imx_ldb->lvds_mux ? 4 : 2, 0);
-+ if (IS_ERR(channel->bridge)) {
-+ ret = PTR_ERR(channel->bridge);
-+ if (ret != -ENODEV)
-+ goto free_child;
-+
-+ channel->bridge = NULL;
-
-- if (!channel->bridge && !channel->panel) {
- ret = of_get_drm_display_mode(child,
- &channel->mode,
- &channel->bus_flags,
-@@ -658,15 +645,12 @@ static int imx_ldb_probe(struct platform_device *pdev)
- }
-
- bus_format = of_get_bus_format(dev, child);
-- if (bus_format == -EINVAL) {
-- /*
-- * If no bus format was specified in the device tree,
-- * we can still get it from the connected panel later.
-- */
-- if (channel->panel && channel->panel->funcs &&
-- channel->panel->funcs->get_modes)
-- bus_format = 0;
-- }
-+ /*
-+ * If no bus format was specified in the device tree,
-+ * we can still get it from the connected panel later.
-+ */
-+ if (bus_format == -EINVAL && channel->bridge)
-+ bus_format = 0;
- if (bus_format < 0) {
- dev_err(dev, "could not determine data mapping: %d\n",
- bus_format);
---
-2.43.0
-
+++ /dev/null
-From ac5b9f2d40acf8ae5f84ea69d2c3d866a4763567 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:44 +0300
-Subject: drm/imx: parallel-display: drop edid override support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit fe30fabf229f7542a10dd249079fdb83844a7dba ]
-
-None of the in-kernel DT files ever used edid override with the
-fsl-imx-drm driver. In case the EDID needs to be specified manually, DRM
-core allows one to either override it via the debugfs or to load it via
-request_firmware by using DRM_LOAD_EDID_FIRMWARE. In all other cases
-EDID and/or modes are to be provided as a part of the panel driver.
-
-Drop support for the edid property.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Acked-by: Rob Herring <robh@kernel.org>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-4-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 17 -----------------
- 1 file changed, 17 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-index 91d7808a2d8d3..4d17fb96e77c5 100644
---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-@@ -16,7 +16,6 @@
-
- #include <drm/drm_atomic_helper.h>
- #include <drm/drm_bridge.h>
--#include <drm/drm_edid.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
- #include <drm/drm_panel.h>
-@@ -34,7 +33,6 @@ struct imx_parallel_display_encoder {
-
- struct imx_parallel_display {
- struct device *dev;
-- const struct drm_edid *drm_edid;
- u32 bus_format;
- u32 bus_flags;
- struct drm_display_mode mode;
-@@ -62,11 +60,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (imxpd->drm_edid) {
-- drm_edid_connector_update(connector, imxpd->drm_edid);
-- num_modes = drm_edid_connector_add_modes(connector);
-- }
--
- if (np) {
- struct drm_display_mode *mode = drm_mode_create(connector->dev);
- int ret;
-@@ -312,9 +305,7 @@ static int imx_pd_probe(struct platform_device *pdev)
- {
- struct device *dev = &pdev->dev;
- struct device_node *np = dev->of_node;
-- const u8 *edidp;
- struct imx_parallel_display *imxpd;
-- int edid_len;
- int ret;
- u32 bus_format = 0;
- const char *fmt;
-@@ -329,10 +320,6 @@ static int imx_pd_probe(struct platform_device *pdev)
- if (ret && ret != -ENODEV)
- return ret;
-
-- edidp = of_get_property(np, "edid", &edid_len);
-- if (edidp)
-- imxpd->drm_edid = drm_edid_alloc(edidp, edid_len);
--
- ret = of_property_read_string(np, "interface-pix-fmt", &fmt);
- if (!ret) {
- if (!strcmp(fmt, "rgb24"))
-@@ -355,11 +342,7 @@ static int imx_pd_probe(struct platform_device *pdev)
-
- static void imx_pd_remove(struct platform_device *pdev)
- {
-- struct imx_parallel_display *imxpd = platform_get_drvdata(pdev);
--
- component_del(&pdev->dev, &imx_pd_ops);
--
-- drm_edid_free(imxpd->drm_edid);
- }
-
- static const struct of_device_id imx_pd_dt_ids[] = {
---
-2.43.0
-
+++ /dev/null
-From cfabc9ef646af77071a2c28f4a2a089519b6c385 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:48 +0300
-Subject: drm/imx: parallel-display: switch to drm_panel_bridge
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit 5f6e56d3319d2fd20d4c81b4f0212f4d09d7c1f1 ]
-
-Defer panel handling to drm_panel_bridge, unifying codepaths for the
-panel and bridge cases.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-8-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 3 +-
- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 36 +++++---------------
- 2 files changed, 10 insertions(+), 29 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index 6abcf9c833d44..f083d313d1d3a 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -11,8 +11,9 @@ config DRM_IMX
-
- config DRM_IMX_PARALLEL_DISPLAY
- tristate "Support for parallel displays"
-- select DRM_PANEL
- depends on DRM_IMX
-+ select DRM_BRIDGE
-+ select DRM_PANEL_BRIDGE
- select VIDEOMODE_HELPERS
-
- config DRM_IMX_TVE
-diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-index 4d17fb96e77c5..9ac2a94fa62be 100644
---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-@@ -18,7 +18,6 @@
- #include <drm/drm_bridge.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
--#include <drm/drm_panel.h>
- #include <drm/drm_probe_helper.h>
- #include <drm/drm_simple_kms_helper.h>
-
-@@ -36,7 +35,6 @@ struct imx_parallel_display {
- u32 bus_format;
- u32 bus_flags;
- struct drm_display_mode mode;
-- struct drm_panel *panel;
- struct drm_bridge *next_bridge;
- };
-
-@@ -56,10 +54,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- struct device_node *np = imxpd->dev->of_node;
- int num_modes;
-
-- num_modes = drm_panel_get_modes(imxpd->panel, connector);
-- if (num_modes > 0)
-- return num_modes;
--
- if (np) {
- struct drm_display_mode *mode = drm_mode_create(connector->dev);
- int ret;
-@@ -84,22 +78,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- return num_modes;
- }
-
--static void imx_pd_bridge_enable(struct drm_bridge *bridge)
--{
-- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge);
--
-- drm_panel_prepare(imxpd->panel);
-- drm_panel_enable(imxpd->panel);
--}
--
--static void imx_pd_bridge_disable(struct drm_bridge *bridge)
--{
-- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge);
--
-- drm_panel_disable(imxpd->panel);
-- drm_panel_unprepare(imxpd->panel);
--}
--
- static const u32 imx_pd_bus_fmts[] = {
- MEDIA_BUS_FMT_RGB888_1X24,
- MEDIA_BUS_FMT_BGR888_1X24,
-@@ -237,8 +215,6 @@ static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
- };
-
- static const struct drm_bridge_funcs imx_pd_bridge_funcs = {
-- .enable = imx_pd_bridge_enable,
-- .disable = imx_pd_bridge_disable,
- .atomic_reset = drm_atomic_helper_bridge_reset,
- .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
- .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
-@@ -315,10 +291,14 @@ static int imx_pd_probe(struct platform_device *pdev)
- return -ENOMEM;
-
- /* port@1 is the output port */
-- ret = drm_of_find_panel_or_bridge(np, 1, 0, &imxpd->panel,
-- &imxpd->next_bridge);
-- if (ret && ret != -ENODEV)
-- return ret;
-+ imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0);
-+ if (IS_ERR(imxpd->next_bridge)) {
-+ ret = PTR_ERR(imxpd->next_bridge);
-+ if (ret != -ENODEV)
-+ return ret;
-+
-+ imxpd->next_bridge = NULL;
-+ }
-
- ret = of_property_read_string(np, "interface-pix-fmt", &fmt);
- if (!ret) {
---
-2.43.0
-
+++ /dev/null
-From 10938cfb9b39cc1e591f1ac2b90297a4305f6d53 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 22 Aug 2024 20:42:51 +0300
-Subject: drm/ipuv3/parallel: convert to struct drm_edid
-
-From: Jani Nikula <jani.nikula@intel.com>
-
-[ Upstream commit 42e08287a3185409a7a1923374a557e04fc36e48 ]
-
-Prefer the struct drm_edid based functions for storing the EDID and
-updating the connector.
-
-Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-Link: https://patchwork.freedesktop.org/patch/msgid/a1698044d556072e79041d69b8702099fd17bd90.1724348429.git.jani.nikula@intel.com
-Signed-off-by: Jani Nikula <jani.nikula@intel.com>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-index 55dedd73f528c..91d7808a2d8d3 100644
---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-@@ -34,7 +34,7 @@ struct imx_parallel_display_encoder {
-
- struct imx_parallel_display {
- struct device *dev;
-- void *edid;
-+ const struct drm_edid *drm_edid;
- u32 bus_format;
- u32 bus_flags;
- struct drm_display_mode mode;
-@@ -62,9 +62,9 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (imxpd->edid) {
-- drm_connector_update_edid_property(connector, imxpd->edid);
-- num_modes = drm_add_edid_modes(connector, imxpd->edid);
-+ if (imxpd->drm_edid) {
-+ drm_edid_connector_update(connector, imxpd->drm_edid);
-+ num_modes = drm_edid_connector_add_modes(connector);
- }
-
- if (np) {
-@@ -331,7 +331,7 @@ static int imx_pd_probe(struct platform_device *pdev)
-
- edidp = of_get_property(np, "edid", &edid_len);
- if (edidp)
-- imxpd->edid = devm_kmemdup(dev, edidp, edid_len, GFP_KERNEL);
-+ imxpd->drm_edid = drm_edid_alloc(edidp, edid_len);
-
- ret = of_property_read_string(np, "interface-pix-fmt", &fmt);
- if (!ret) {
-@@ -355,7 +355,11 @@ static int imx_pd_probe(struct platform_device *pdev)
-
- static void imx_pd_remove(struct platform_device *pdev)
- {
-+ struct imx_parallel_display *imxpd = platform_get_drvdata(pdev);
-+
- component_del(&pdev->dev, &imx_pd_ops);
-+
-+ drm_edid_free(imxpd->drm_edid);
- }
-
- static const struct of_device_id imx_pd_dt_ids[] = {
---
-2.43.0
-
udmabuf-fix-vmap_udmabuf-error-page-set.patch
drm-imx-dcss-use-irqf_no_autoen-flag-in-request_irq.patch
drm-imx-ipuv3-use-irqf_no_autoen-flag-in-request_irq.patch
-drm-ipuv3-parallel-convert-to-struct-drm_edid.patch
-drm-imx-parallel-display-drop-edid-override-support.patch
-drm-imx-ldb-drop-custom-edid-support.patch
-drm-imx-ldb-drop-custom-ddc-bus-support.patch
-drm-imx-ldb-switch-to-drm_panel_bridge.patch
-drm-imx-parallel-display-switch-to-drm_panel_bridge.patch
-drm-imx-add-missing-drm_bridge_connector-dependency.patch
drm-panel-nt35510-make-new-commands-optional.patch
drm-v3d-address-race-condition-in-mmu-flush.patch
drm-v3d-flush-the-mmu-before-we-supply-more-memory-t.patch
+++ /dev/null
-From 6e6dc43aa7317c932ac4cf44e9cd58fa8375a6db Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 6 Sep 2024 08:38:56 +0200
-Subject: drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency
-
-From: Alexander Stein <alexander.stein@ew.tq-group.com>
-
-[ Upstream commit f673055a46784ccea04465b9213e999f7bc5187e ]
-
-When drm/bridge-connector was moved to DRM_DISPLAY_HELPER not all
-users were updated. Add missing Kconfig selections.
-
-Fixes: 9da7ec9b19d8 ("drm/bridge-connector: move to DRM_DISPLAY_HELPER module")
-Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
-Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
-Link: https://patchwork.freedesktop.org/patch/msgid/20240906063857.2223442-1-alexander.stein@ew.tq-group.com
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index f083d313d1d3a..7a427551f4341 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -13,6 +13,7 @@ config DRM_IMX_PARALLEL_DISPLAY
- tristate "Support for parallel displays"
- depends on DRM_IMX
- select DRM_BRIDGE
-+ select DRM_BRIDGE_CONNECTOR
- select DRM_PANEL_BRIDGE
- select VIDEOMODE_HELPERS
-
-@@ -31,6 +32,7 @@ config DRM_IMX_LDB
- depends on COMMON_CLK
- select MFD_SYSCON
- select DRM_BRIDGE
-+ select DRM_BRIDGE_CONNECTOR
- select DRM_PANEL_BRIDGE
- help
- Choose this to enable the internal LVDS Display Bridge (LDB)
---
-2.43.0
-
+++ /dev/null
-From f8525b6c29db9357ffe2d73533cd0cc66b9deefc Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:46 +0300
-Subject: drm/imx: ldb: drop custom DDC bus support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit b2f3418b516e3485a14f10bfc09f20211dedc156 ]
-
-None of the boards ever supported by the upstream kernel used the custom
-DDC bus support with the LDB connector. If a need arises to do so, one
-should use panel-simple and its DDC bus code. Drop ddc-i2c-bus support
-from the imx-ldb driver.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-6-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 73 ++++-------------------------
- 1 file changed, 10 insertions(+), 63 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 1924d8921c620..3f669604377e7 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -25,7 +25,6 @@
- #include <drm/drm_atomic.h>
- #include <drm/drm_atomic_helper.h>
- #include <drm/drm_bridge.h>
--#include <drm/drm_edid.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
- #include <drm/drm_panel.h>
-@@ -70,7 +69,6 @@ struct imx_ldb_channel {
- struct drm_bridge *bridge;
-
- struct device_node *child;
-- struct i2c_adapter *ddc;
- int chno;
- struct drm_display_mode mode;
- int mode_valid;
-@@ -141,18 +139,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (imx_ldb_ch->ddc) {
-- const struct drm_edid *edid = drm_edid_read_ddc(connector,
-- imx_ldb_ch->ddc);
--
-- if (edid) {
-- drm_edid_connector_update(connector, edid);
-- drm_edid_free(edid);
--
-- return drm_edid_connector_add_modes(connector);
-- }
-- }
--
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-
-@@ -481,10 +467,9 @@ static int imx_ldb_register(struct drm_device *drm,
- */
- drm_connector_helper_add(connector,
- &imx_ldb_connector_helper_funcs);
-- drm_connector_init_with_ddc(drm, connector,
-- &imx_ldb_connector_funcs,
-- DRM_MODE_CONNECTOR_LVDS,
-- imx_ldb_ch->ddc);
-+ drm_connector_init(drm, connector,
-+ &imx_ldb_connector_funcs,
-+ DRM_MODE_CONNECTOR_LVDS);
- drm_connector_attach_encoder(connector, encoder);
- }
-
-@@ -551,39 +536,6 @@ static const struct of_device_id imx_ldb_dt_ids[] = {
- };
- MODULE_DEVICE_TABLE(of, imx_ldb_dt_ids);
-
--static int imx_ldb_panel_ddc(struct device *dev,
-- struct imx_ldb_channel *channel, struct device_node *child)
--{
-- struct device_node *ddc_node;
-- int ret;
--
-- ddc_node = of_parse_phandle(child, "ddc-i2c-bus", 0);
-- if (ddc_node) {
-- channel->ddc = of_find_i2c_adapter_by_node(ddc_node);
-- of_node_put(ddc_node);
-- if (!channel->ddc) {
-- dev_warn(dev, "failed to get ddc i2c adapter\n");
-- return -EPROBE_DEFER;
-- }
-- }
--
-- if (!channel->ddc) {
-- /* if no DDC available, fallback to hardcoded EDID */
-- dev_dbg(dev, "no ddc available\n");
--
-- if (!channel->panel) {
-- /* fallback to display-timings node */
-- ret = of_get_drm_display_mode(child,
-- &channel->mode,
-- &channel->bus_flags,
-- OF_USE_NATIVE_MODE);
-- if (!ret)
-- channel->mode_valid = 1;
-- }
-- }
-- return 0;
--}
--
- static int imx_ldb_bind(struct device *dev, struct device *master, void *data)
- {
- struct drm_device *drm = data;
-@@ -694,11 +646,15 @@ static int imx_ldb_probe(struct platform_device *pdev)
- if (ret && ret != -ENODEV)
- goto free_child;
-
-- /* panel ddc only if there is no bridge */
-- if (!channel->bridge) {
-- ret = imx_ldb_panel_ddc(dev, channel, child);
-+ if (!channel->bridge && !channel->panel) {
-+ ret = of_get_drm_display_mode(child,
-+ &channel->mode,
-+ &channel->bus_flags,
-+ OF_USE_NATIVE_MODE);
- if (ret)
- goto free_child;
-+
-+ channel->mode_valid = 1;
- }
-
- bus_format = of_get_bus_format(dev, child);
-@@ -732,15 +688,6 @@ static int imx_ldb_probe(struct platform_device *pdev)
-
- static void imx_ldb_remove(struct platform_device *pdev)
- {
-- struct imx_ldb *imx_ldb = platform_get_drvdata(pdev);
-- int i;
--
-- for (i = 0; i < 2; i++) {
-- struct imx_ldb_channel *channel = &imx_ldb->channel[i];
--
-- i2c_put_adapter(channel->ddc);
-- }
--
- component_del(&pdev->dev, &imx_ldb_ops);
- }
-
---
-2.43.0
-
+++ /dev/null
-From 88b0e939aca406bfd89f9af70eb1b1d87b6914d6 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:45 +0300
-Subject: drm/imx: ldb: drop custom EDID support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit aed7b500315004a917463d571fa9cd12e0e94370 ]
-
-Bindings for the imx-ldb never allowed specifying the EDID in DT. None
-of the existing DT files use it. Drop it now in favour of using debugfs
-overrides or the drm.edid_firmware support.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-5-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 29 +++++++++++------------------
- 1 file changed, 11 insertions(+), 18 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 793dfb1a3ed00..1924d8921c620 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -72,7 +72,6 @@ struct imx_ldb_channel {
- struct device_node *child;
- struct i2c_adapter *ddc;
- int chno;
-- const struct drm_edid *drm_edid;
- struct drm_display_mode mode;
- int mode_valid;
- u32 bus_format;
-@@ -142,14 +141,17 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (!imx_ldb_ch->drm_edid && imx_ldb_ch->ddc) {
-- imx_ldb_ch->drm_edid = drm_edid_read_ddc(connector,
-- imx_ldb_ch->ddc);
-- drm_edid_connector_update(connector, imx_ldb_ch->drm_edid);
-- }
-+ if (imx_ldb_ch->ddc) {
-+ const struct drm_edid *edid = drm_edid_read_ddc(connector,
-+ imx_ldb_ch->ddc);
-
-- if (imx_ldb_ch->drm_edid)
-- num_modes = drm_edid_connector_add_modes(connector);
-+ if (edid) {
-+ drm_edid_connector_update(connector, edid);
-+ drm_edid_free(edid);
-+
-+ return drm_edid_connector_add_modes(connector);
-+ }
-+ }
-
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-@@ -566,18 +568,10 @@ static int imx_ldb_panel_ddc(struct device *dev,
- }
-
- if (!channel->ddc) {
-- const void *edidp;
-- int edid_len;
--
- /* if no DDC available, fallback to hardcoded EDID */
- dev_dbg(dev, "no ddc available\n");
-
-- edidp = of_get_property(child, "edid", &edid_len);
-- if (edidp) {
-- channel->drm_edid = drm_edid_alloc(edidp, edid_len);
-- if (!channel->drm_edid)
-- return -ENOMEM;
-- } else if (!channel->panel) {
-+ if (!channel->panel) {
- /* fallback to display-timings node */
- ret = of_get_drm_display_mode(child,
- &channel->mode,
-@@ -744,7 +738,6 @@ static void imx_ldb_remove(struct platform_device *pdev)
- for (i = 0; i < 2; i++) {
- struct imx_ldb_channel *channel = &imx_ldb->channel[i];
-
-- drm_edid_free(channel->drm_edid);
- i2c_put_adapter(channel->ddc);
- }
-
---
-2.43.0
-
+++ /dev/null
-From 85ce007c2e40611b1823b5e8406c69f97b8d0f9e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:47 +0300
-Subject: drm/imx: ldb: switch to drm_panel_bridge
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit 5c5843b20bbb1e4b4de2359573c20e416b41cb48 ]
-
-Defer panel handling to drm_panel_bridge, unifying codepaths for the
-panel and bridge cases. The MFD_SYSCON symbol is moved to select to
-prevent Kconfig symbol loops.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-7-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 6 ++--
- drivers/gpu/drm/imx/ipuv3/imx-ldb.c | 44 +++++++++--------------------
- 2 files changed, 18 insertions(+), 32 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index bacf0655ebaf3..6abcf9c833d44 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -26,9 +26,11 @@ config DRM_IMX_TVE
-
- config DRM_IMX_LDB
- tristate "Support for LVDS displays"
-- depends on DRM_IMX && MFD_SYSCON
-+ depends on DRM_IMX
- depends on COMMON_CLK
-- select DRM_PANEL
-+ select MFD_SYSCON
-+ select DRM_BRIDGE
-+ select DRM_PANEL_BRIDGE
- help
- Choose this to enable the internal LVDS Display Bridge (LDB)
- found on i.MX53 and i.MX6 processors.
-diff --git a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-index 3f669604377e7..bc7ad96971308 100644
---- a/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-+++ b/drivers/gpu/drm/imx/ipuv3/imx-ldb.c
-@@ -27,7 +27,6 @@
- #include <drm/drm_bridge.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
--#include <drm/drm_panel.h>
- #include <drm/drm_print.h>
- #include <drm/drm_probe_helper.h>
- #include <drm/drm_simple_kms_helper.h>
-@@ -64,8 +63,6 @@ struct imx_ldb;
- struct imx_ldb_channel {
- struct imx_ldb *ldb;
-
-- /* Defines what is connected to the ldb, only one at a time */
-- struct drm_panel *panel;
- struct drm_bridge *bridge;
-
- struct device_node *child;
-@@ -135,10 +132,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
- struct imx_ldb_channel *imx_ldb_ch = con_to_imx_ldb_ch(connector);
- int num_modes;
-
-- num_modes = drm_panel_get_modes(imx_ldb_ch->panel, connector);
-- if (num_modes > 0)
-- return num_modes;
--
- if (imx_ldb_ch->mode_valid) {
- struct drm_display_mode *mode;
-
-@@ -193,8 +186,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
- return;
- }
-
-- drm_panel_prepare(imx_ldb_ch->panel);
--
- if (dual) {
- clk_set_parent(ldb->clk_sel[mux], ldb->clk[0]);
- clk_set_parent(ldb->clk_sel[mux], ldb->clk[1]);
-@@ -233,8 +224,6 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
- }
-
- regmap_write(ldb->regmap, IOMUXC_GPR2, ldb->ldb_ctrl);
--
-- drm_panel_enable(imx_ldb_ch->panel);
- }
-
- static void
-@@ -311,8 +300,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
- int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
- int mux, ret;
-
-- drm_panel_disable(imx_ldb_ch->panel);
--
- if (imx_ldb_ch == &ldb->channel[0] || dual)
- ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;
- if (imx_ldb_ch == &ldb->channel[1] || dual)
-@@ -346,8 +333,6 @@ static void imx_ldb_encoder_disable(struct drm_encoder *encoder)
- dev_err(ldb->dev,
- "unable to set di%d parent clock to original parent\n",
- mux);
--
-- drm_panel_unprepare(imx_ldb_ch->panel);
- }
-
- static int imx_ldb_encoder_atomic_check(struct drm_encoder *encoder,
-@@ -640,13 +625,15 @@ static int imx_ldb_probe(struct platform_device *pdev)
- * The output port is port@4 with an external 4-port mux or
- * port@2 with the internal 2-port mux.
- */
-- ret = drm_of_find_panel_or_bridge(child,
-- imx_ldb->lvds_mux ? 4 : 2, 0,
-- &channel->panel, &channel->bridge);
-- if (ret && ret != -ENODEV)
-- goto free_child;
-+ channel->bridge = devm_drm_of_get_bridge(dev, child,
-+ imx_ldb->lvds_mux ? 4 : 2, 0);
-+ if (IS_ERR(channel->bridge)) {
-+ ret = PTR_ERR(channel->bridge);
-+ if (ret != -ENODEV)
-+ goto free_child;
-+
-+ channel->bridge = NULL;
-
-- if (!channel->bridge && !channel->panel) {
- ret = of_get_drm_display_mode(child,
- &channel->mode,
- &channel->bus_flags,
-@@ -658,15 +645,12 @@ static int imx_ldb_probe(struct platform_device *pdev)
- }
-
- bus_format = of_get_bus_format(dev, child);
-- if (bus_format == -EINVAL) {
-- /*
-- * If no bus format was specified in the device tree,
-- * we can still get it from the connected panel later.
-- */
-- if (channel->panel && channel->panel->funcs &&
-- channel->panel->funcs->get_modes)
-- bus_format = 0;
-- }
-+ /*
-+ * If no bus format was specified in the device tree,
-+ * we can still get it from the connected panel later.
-+ */
-+ if (bus_format == -EINVAL && channel->bridge)
-+ bus_format = 0;
- if (bus_format < 0) {
- dev_err(dev, "could not determine data mapping: %d\n",
- bus_format);
---
-2.43.0
-
+++ /dev/null
-From 8446ec5be2445171bb392c4d51ad46e10b17013d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:44 +0300
-Subject: drm/imx: parallel-display: drop edid override support
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit fe30fabf229f7542a10dd249079fdb83844a7dba ]
-
-None of the in-kernel DT files ever used edid override with the
-fsl-imx-drm driver. In case the EDID needs to be specified manually, DRM
-core allows one to either override it via the debugfs or to load it via
-request_firmware by using DRM_LOAD_EDID_FIRMWARE. In all other cases
-EDID and/or modes are to be provided as a part of the panel driver.
-
-Drop support for the edid property.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Acked-by: Rob Herring <robh@kernel.org>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-4-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 17 -----------------
- 1 file changed, 17 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-index 91d7808a2d8d3..4d17fb96e77c5 100644
---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-@@ -16,7 +16,6 @@
-
- #include <drm/drm_atomic_helper.h>
- #include <drm/drm_bridge.h>
--#include <drm/drm_edid.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
- #include <drm/drm_panel.h>
-@@ -34,7 +33,6 @@ struct imx_parallel_display_encoder {
-
- struct imx_parallel_display {
- struct device *dev;
-- const struct drm_edid *drm_edid;
- u32 bus_format;
- u32 bus_flags;
- struct drm_display_mode mode;
-@@ -62,11 +60,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- if (num_modes > 0)
- return num_modes;
-
-- if (imxpd->drm_edid) {
-- drm_edid_connector_update(connector, imxpd->drm_edid);
-- num_modes = drm_edid_connector_add_modes(connector);
-- }
--
- if (np) {
- struct drm_display_mode *mode = drm_mode_create(connector->dev);
- int ret;
-@@ -312,9 +305,7 @@ static int imx_pd_probe(struct platform_device *pdev)
- {
- struct device *dev = &pdev->dev;
- struct device_node *np = dev->of_node;
-- const u8 *edidp;
- struct imx_parallel_display *imxpd;
-- int edid_len;
- int ret;
- u32 bus_format = 0;
- const char *fmt;
-@@ -329,10 +320,6 @@ static int imx_pd_probe(struct platform_device *pdev)
- if (ret && ret != -ENODEV)
- return ret;
-
-- edidp = of_get_property(np, "edid", &edid_len);
-- if (edidp)
-- imxpd->drm_edid = drm_edid_alloc(edidp, edid_len);
--
- ret = of_property_read_string(np, "interface-pix-fmt", &fmt);
- if (!ret) {
- if (!strcmp(fmt, "rgb24"))
-@@ -355,11 +342,7 @@ static int imx_pd_probe(struct platform_device *pdev)
-
- static void imx_pd_remove(struct platform_device *pdev)
- {
-- struct imx_parallel_display *imxpd = platform_get_drvdata(pdev);
--
- component_del(&pdev->dev, &imx_pd_ops);
--
-- drm_edid_free(imxpd->drm_edid);
- }
-
- static const struct of_device_id imx_pd_dt_ids[] = {
---
-2.43.0
-
+++ /dev/null
-From 5033af6707f6d993fcd65b3b24d84829edc7fb53 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sun, 2 Jun 2024 15:04:48 +0300
-Subject: drm/imx: parallel-display: switch to drm_panel_bridge
-
-From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-
-[ Upstream commit 5f6e56d3319d2fd20d4c81b4f0212f4d09d7c1f1 ]
-
-Defer panel handling to drm_panel_bridge, unifying codepaths for the
-panel and bridge cases.
-
-Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
-Tested-by: Chris Healy <cphealy@gmail.com>
-Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # on imx6q-nitrogen6x
-Link: https://patchwork.freedesktop.org/patch/msgid/20240602-drm-imx-cleanup-v3-8-e549e2a43100@linaro.org
-Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
-Stable-dep-of: f673055a4678 ("drm/imx: Add missing DRM_BRIDGE_CONNECTOR dependency")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpu/drm/imx/ipuv3/Kconfig | 3 +-
- drivers/gpu/drm/imx/ipuv3/parallel-display.c | 36 +++++---------------
- 2 files changed, 10 insertions(+), 29 deletions(-)
-
-diff --git a/drivers/gpu/drm/imx/ipuv3/Kconfig b/drivers/gpu/drm/imx/ipuv3/Kconfig
-index 6abcf9c833d44..f083d313d1d3a 100644
---- a/drivers/gpu/drm/imx/ipuv3/Kconfig
-+++ b/drivers/gpu/drm/imx/ipuv3/Kconfig
-@@ -11,8 +11,9 @@ config DRM_IMX
-
- config DRM_IMX_PARALLEL_DISPLAY
- tristate "Support for parallel displays"
-- select DRM_PANEL
- depends on DRM_IMX
-+ select DRM_BRIDGE
-+ select DRM_PANEL_BRIDGE
- select VIDEOMODE_HELPERS
-
- config DRM_IMX_TVE
-diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-index 4d17fb96e77c5..9ac2a94fa62be 100644
---- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-+++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
-@@ -18,7 +18,6 @@
- #include <drm/drm_bridge.h>
- #include <drm/drm_managed.h>
- #include <drm/drm_of.h>
--#include <drm/drm_panel.h>
- #include <drm/drm_probe_helper.h>
- #include <drm/drm_simple_kms_helper.h>
-
-@@ -36,7 +35,6 @@ struct imx_parallel_display {
- u32 bus_format;
- u32 bus_flags;
- struct drm_display_mode mode;
-- struct drm_panel *panel;
- struct drm_bridge *next_bridge;
- };
-
-@@ -56,10 +54,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- struct device_node *np = imxpd->dev->of_node;
- int num_modes;
-
-- num_modes = drm_panel_get_modes(imxpd->panel, connector);
-- if (num_modes > 0)
-- return num_modes;
--
- if (np) {
- struct drm_display_mode *mode = drm_mode_create(connector->dev);
- int ret;
-@@ -84,22 +78,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
- return num_modes;
- }
-
--static void imx_pd_bridge_enable(struct drm_bridge *bridge)
--{
-- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge);
--
-- drm_panel_prepare(imxpd->panel);
-- drm_panel_enable(imxpd->panel);
--}
--
--static void imx_pd_bridge_disable(struct drm_bridge *bridge)
--{
-- struct imx_parallel_display *imxpd = bridge_to_imxpd(bridge);
--
-- drm_panel_disable(imxpd->panel);
-- drm_panel_unprepare(imxpd->panel);
--}
--
- static const u32 imx_pd_bus_fmts[] = {
- MEDIA_BUS_FMT_RGB888_1X24,
- MEDIA_BUS_FMT_BGR888_1X24,
-@@ -237,8 +215,6 @@ static const struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
- };
-
- static const struct drm_bridge_funcs imx_pd_bridge_funcs = {
-- .enable = imx_pd_bridge_enable,
-- .disable = imx_pd_bridge_disable,
- .atomic_reset = drm_atomic_helper_bridge_reset,
- .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
- .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
-@@ -315,10 +291,14 @@ static int imx_pd_probe(struct platform_device *pdev)
- return -ENOMEM;
-
- /* port@1 is the output port */
-- ret = drm_of_find_panel_or_bridge(np, 1, 0, &imxpd->panel,
-- &imxpd->next_bridge);
-- if (ret && ret != -ENODEV)
-- return ret;
-+ imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0);
-+ if (IS_ERR(imxpd->next_bridge)) {
-+ ret = PTR_ERR(imxpd->next_bridge);
-+ if (ret != -ENODEV)
-+ return ret;
-+
-+ imxpd->next_bridge = NULL;
-+ }
-
- ret = of_property_read_string(np, "interface-pix-fmt", &fmt);
- if (!ret) {
---
-2.43.0
-
udmabuf-fix-vmap_udmabuf-error-page-set.patch
drm-imx-dcss-use-irqf_no_autoen-flag-in-request_irq.patch
drm-imx-ipuv3-use-irqf_no_autoen-flag-in-request_irq.patch
-drm-imx-parallel-display-drop-edid-override-support.patch
-drm-imx-ldb-drop-custom-edid-support.patch
-drm-imx-ldb-drop-custom-ddc-bus-support.patch
-drm-imx-ldb-switch-to-drm_panel_bridge.patch
-drm-imx-parallel-display-switch-to-drm_panel_bridge.patch
-drm-imx-add-missing-drm_bridge_connector-dependency.patch
drm-panel-nt35510-make-new-commands-optional.patch
drm-v3d-address-race-condition-in-mmu-flush.patch
drm-v3d-flush-the-mmu-before-we-supply-more-memory-t.patch