[PATCH 07/39] drm/imx: dc: cf: Pass struct dc_subdev_info via OF match data
Marek Vasut
marek.vasut at mailbox.org
Sat Oct 11 09:51:22 PDT 2025
Pass the struct dc_subdev_info as OF match data into the driver,
so the driver can use the match data to correct map addresses to
IDs. This is a preparatory patch for i.MX95 addition. No functional
change.
Signed-off-by: Marek Vasut <marek.vasut at mailbox.org>
---
Cc: Abel Vesa <abelvesa at kernel.org>
Cc: Conor Dooley <conor+dt at kernel.org>
Cc: Fabio Estevam <festevam at gmail.com>
Cc: Krzysztof Kozlowski <krzk+dt at kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
Cc: Liu Ying <victor.liu at nxp.com>
Cc: Lucas Stach <l.stach at pengutronix.de>
Cc: Peng Fan <peng.fan at nxp.com>
Cc: Pengutronix Kernel Team <kernel at pengutronix.de>
Cc: Rob Herring <robh at kernel.org>
Cc: Shawn Guo <shawnguo at kernel.org>
Cc: Thomas Zimmermann <tzimmermann at suse.de>
Cc: devicetree at vger.kernel.org
Cc: dri-devel at lists.freedesktop.org
Cc: imx at lists.linux.dev
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-clk at vger.kernel.org
---
drivers/gpu/drm/imx/dc/dc-cf.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/imx/dc/dc-cf.c b/drivers/gpu/drm/imx/dc/dc-cf.c
index 6cb83182a3668..1d3602c5d4230 100644
--- a/drivers/gpu/drm/imx/dc/dc-cf.c
+++ b/drivers/gpu/drm/imx/dc/dc-cf.c
@@ -10,6 +10,7 @@
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include "dc-drv.h"
@@ -24,7 +25,13 @@
#define CONSTANTCOLOR 0x10
#define BLUE(x) FIELD_PREP(GENMASK(15, 8), (x))
-static const struct dc_subdev_info dc_cf_info[] = {
+struct dc_cf_subdev_match_data {
+ enum dc_link_id link_cf4;
+ enum dc_link_id link_cf5;
+ const struct dc_subdev_info *info;
+};
+
+static const struct dc_subdev_info dc_cf_info_imx8qxp[] = {
{ .reg_start = 0x56180960, .id = 0, },
{ .reg_start = 0x561809e0, .id = 1, },
{ .reg_start = 0x561809a0, .id = 4, },
@@ -32,6 +39,12 @@ static const struct dc_subdev_info dc_cf_info[] = {
{ /* sentinel */ },
};
+static const struct dc_cf_subdev_match_data dc_cf_match_data_imx8qxp = {
+ .link_cf4 = LINK_ID_CONSTFRAME4_MX8QXP,
+ .link_cf5 = LINK_ID_CONSTFRAME5_MX8QXP,
+ .info = dc_cf_info_imx8qxp,
+};
+
static const struct regmap_range dc_cf_regmap_ranges[] = {
regmap_reg_range(STATICCONTROL, CONSTANTCOLOR),
};
@@ -85,6 +98,8 @@ void dc_cf_init(struct dc_cf *cf)
static int dc_cf_bind(struct device *dev, struct device *master, void *data)
{
+ const struct dc_cf_subdev_match_data *dc_cf_match_data = device_get_match_data(dev);
+ const struct dc_subdev_info *dc_cf_info = dc_cf_match_data->info;
struct platform_device *pdev = to_platform_device(dev);
struct dc_drm_device *dc_drm = data;
struct resource *res_pec;
@@ -123,11 +138,11 @@ static int dc_cf_bind(struct device *dev, struct device *master, void *data)
dc_drm->cf_cont[1] = cf;
break;
case 4:
- cf->link = LINK_ID_CONSTFRAME4_MX8QXP;
+ cf->link = dc_cf_match_data->link_cf4;
dc_drm->cf_safe[0] = cf;
break;
case 5:
- cf->link = LINK_ID_CONSTFRAME5_MX8QXP;
+ cf->link = dc_cf_match_data->link_cf5;
dc_drm->cf_safe[1] = cf;
break;
}
@@ -157,7 +172,7 @@ static void dc_cf_remove(struct platform_device *pdev)
}
static const struct of_device_id dc_cf_dt_ids[] = {
- { .compatible = "fsl,imx8qxp-dc-constframe" },
+ { .compatible = "fsl,imx8qxp-dc-constframe", .data = &dc_cf_match_data_imx8qxp },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, dc_cf_dt_ids);
--
2.51.0
More information about the linux-arm-kernel
mailing list