summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sre@kernel.org>2023-07-14 03:37:45 +0200
committerNeil Armstrong <neil.armstrong@linaro.org>2023-08-01 10:29:55 +0200
commit9b4454fa2528c617b5986517c9c73e50e30d237d (patch)
treea2b6ebd5eacd6bde0f7d59a99347f44be512ee61
parentbc2aa99b2306bc9d91586bc9187bfef4e61d3882 (diff)
downloadlinux-stable-9b4454fa2528c617b5986517c9c73e50e30d237d.tar.gz
linux-stable-9b4454fa2528c617b5986517c9c73e50e30d237d.tar.bz2
linux-stable-9b4454fa2528c617b5986517c9c73e50e30d237d.zip
drm/panel: sitronix-st7789v: avoid hardcoding mode info
Avoid hard-coding the default_mode and supply it from match data. One additional layer of abstraction has been introduced, which will be needed for specifying other panel information (e.g. bus flags) in the next steps. Reviewed-by: Michael Riesch <michael.riesch@wolfvision.net> Signed-off-by: Sebastian Reichel <sre@kernel.org> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20230714013756.1546769-9-sre@kernel.org
-rw-r--r--drivers/gpu/drm/panel/panel-sitronix-st7789v.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
index a6d6155ef45c..24c5bec6ce31 100644
--- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
+++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
@@ -108,8 +108,13 @@
return val; \
} while (0)
+struct st7789_panel_info {
+ const struct drm_display_mode *mode;
+};
+
struct st7789v {
struct drm_panel panel;
+ const struct st7789_panel_info *info;
struct spi_device *spi;
struct gpio_desc *reset;
struct regulator *power;
@@ -160,16 +165,21 @@ static const struct drm_display_mode default_mode = {
.vtotal = 320 + 8 + 4 + 4,
};
+static const struct st7789_panel_info default_panel = {
+ .mode = &default_mode,
+};
+
static int st7789v_get_modes(struct drm_panel *panel,
struct drm_connector *connector)
{
+ struct st7789v *ctx = panel_to_st7789v(panel);
struct drm_display_mode *mode;
- mode = drm_mode_duplicate(connector->dev, &default_mode);
+ mode = drm_mode_duplicate(connector->dev, ctx->info->mode);
if (!mode) {
- dev_err(panel->dev, "failed to add mode %ux%ux@%u\n",
- default_mode.hdisplay, default_mode.vdisplay,
- drm_mode_vrefresh(&default_mode));
+ dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
+ ctx->info->mode->hdisplay, ctx->info->mode->vdisplay,
+ drm_mode_vrefresh(ctx->info->mode));
return -ENOMEM;
}
@@ -359,6 +369,8 @@ static int st7789v_probe(struct spi_device *spi)
spi_set_drvdata(spi, ctx);
ctx->spi = spi;
+ ctx->info = device_get_match_data(&spi->dev);
+
drm_panel_init(&ctx->panel, dev, &st7789v_drm_funcs,
DRM_MODE_CONNECTOR_DPI);
@@ -389,13 +401,13 @@ static void st7789v_remove(struct spi_device *spi)
}
static const struct spi_device_id st7789v_spi_id[] = {
- { "st7789v" },
+ { "st7789v", (unsigned long) &default_panel },
{ }
};
MODULE_DEVICE_TABLE(spi, st7789v_spi_id);
static const struct of_device_id st7789v_of_match[] = {
- { .compatible = "sitronix,st7789v" },
+ { .compatible = "sitronix,st7789v", .data = &default_panel },
{ }
};
MODULE_DEVICE_TABLE(of, st7789v_of_match);