Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 870e19d5 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen
Browse files

drm/omap: Expose DRM modes instead of timings in display devices



omap_dss_device operations expose fixed video timings through a
.get_timings() operation that return a single timing for the device. To
prepare for the move to drm_bridge, modify the API to instead add DRM
modes directly to the connector.

As this puts more burden on display devices, we also create a helper
function for panels to add a single DRM mode from the panel video
timings.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent d17eb453
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -68,12 +68,12 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
	regulator_disable(ddata->vcc_supply);
}

static void panel_dpi_get_timings(struct omap_dss_device *dssdev,
				  struct videomode *vm)
static int panel_dpi_get_modes(struct omap_dss_device *dssdev,
			       struct drm_connector *connector)
{
	struct panel_drv_data *ddata = to_panel_data(dssdev);

	*vm = ddata->vm;
	return omapdss_display_get_modes(connector, &ddata->vm);
}

static const struct omap_dss_device_ops panel_dpi_ops = {
@@ -83,7 +83,7 @@ static const struct omap_dss_device_ops panel_dpi_ops = {
	.enable		= panel_dpi_enable,
	.disable	= panel_dpi_disable,

	.get_timings	= panel_dpi_get_timings,
	.get_modes	= panel_dpi_get_modes,
};

static int panel_dpi_probe_of(struct platform_device *pdev)
+6 −4
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
#include <linux/of_device.h>
#include <linux/regulator/consumer.h>

#include <drm/drm_connector.h>

#include <video/mipi_display.h>
#include <video/of_display_timing.h>

@@ -1110,12 +1112,12 @@ static void dsicm_ulps_work(struct work_struct *work)
	mutex_unlock(&ddata->lock);
}

static void dsicm_get_timings(struct omap_dss_device *dssdev,
			      struct videomode *vm)
static int dsicm_get_modes(struct omap_dss_device *dssdev,
			   struct drm_connector *connector)
{
	struct panel_drv_data *ddata = to_panel_data(dssdev);

	*vm = ddata->vm;
	return omapdss_display_get_modes(connector, &ddata->vm);
}

static int dsicm_check_timings(struct omap_dss_device *dssdev,
@@ -1156,7 +1158,7 @@ static const struct omap_dss_device_ops dsicm_ops = {
	.enable		= dsicm_enable,
	.disable	= dsicm_disable,

	.get_timings	= dsicm_get_timings,
	.get_modes	= dsicm_get_modes,
	.check_timings	= dsicm_check_timings,
};

+4 −4
Original line number Diff line number Diff line
@@ -139,12 +139,12 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
		gpiod_set_value_cansleep(ddata->enable_gpio, 0);
}

static void lb035q02_get_timings(struct omap_dss_device *dssdev,
				 struct videomode *vm)
static int lb035q02_get_modes(struct omap_dss_device *dssdev,
			      struct drm_connector *connector)
{
	struct panel_drv_data *ddata = to_panel_data(dssdev);

	*vm = ddata->vm;
	return omapdss_display_get_modes(connector, &ddata->vm);
}

static const struct omap_dss_device_ops lb035q02_ops = {
@@ -154,7 +154,7 @@ static const struct omap_dss_device_ops lb035q02_ops = {
	.enable		= lb035q02_enable,
	.disable	= lb035q02_disable,

	.get_timings	= lb035q02_get_timings,
	.get_modes	= lb035q02_get_modes,
};

static int lb035q02_probe_of(struct spi_device *spi)
+4 −4
Original line number Diff line number Diff line
@@ -132,12 +132,12 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
	gpiod_set_value_cansleep(ddata->res_gpio, 0);
}

static void nec_8048_get_timings(struct omap_dss_device *dssdev,
				 struct videomode *vm)
static int nec_8048_get_modes(struct omap_dss_device *dssdev,
			      struct drm_connector *connector)
{
	struct panel_drv_data *ddata = to_panel_data(dssdev);

	*vm = ddata->vm;
	return omapdss_display_get_modes(connector, &ddata->vm);
}

static const struct omap_dss_device_ops nec_8048_ops = {
@@ -147,7 +147,7 @@ static const struct omap_dss_device_ops nec_8048_ops = {
	.enable		= nec_8048_enable,
	.disable	= nec_8048_disable,

	.get_timings	= nec_8048_get_timings,
	.get_modes	= nec_8048_get_modes,
};

static int nec_8048_probe(struct spi_device *spi)
+4 −4
Original line number Diff line number Diff line
@@ -111,12 +111,12 @@ static void sharp_ls_post_disable(struct omap_dss_device *dssdev)
		regulator_disable(ddata->vcc);
}

static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
				 struct videomode *vm)
static int sharp_ls_get_modes(struct omap_dss_device *dssdev,
			      struct drm_connector *connector)
{
	struct panel_drv_data *ddata = to_panel_data(dssdev);

	*vm = ddata->vm;
	return omapdss_display_get_modes(connector, &ddata->vm);
}

static const struct omap_dss_device_ops sharp_ls_ops = {
@@ -128,7 +128,7 @@ static const struct omap_dss_device_ops sharp_ls_ops = {
	.disable	= sharp_ls_disable,
	.post_disable	= sharp_ls_post_disable,

	.get_timings	= sharp_ls_get_timings,
	.get_modes	= sharp_ls_get_modes,
};

static  int sharp_ls_get_gpio_of(struct device *dev, int index, int val,
Loading