Commit e83967c3 authored by Aradhya Bhatia's avatar Aradhya Bhatia Committed by Dmitry Baryshkov
Browse files

drm/mipi-dsi: Add helper to find input format



Add a helper API that can be used by the DSI hosts to find the required
input bus format for the given output dsi pixel format.

Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Tested-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: default avatarAradhya Bhatia <a-bhatia1@ti.com>
Signed-off-by: default avatarAradhya Bhatia <aradhya.bhatia@linux.dev>
Link: https://lore.kernel.org/r/20250329113925.68204-8-aradhya.bhatia@linux.dev


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
parent 7ad8b344
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_print.h>

#include <linux/media-bus-format.h>

#include <video/mipi_display.h>

/**
@@ -870,6 +872,41 @@ ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
}
EXPORT_SYMBOL(mipi_dsi_generic_read);

/**
 * drm_mipi_dsi_get_input_bus_fmt() - Get the required MEDIA_BUS_FMT_* based
 *				      input pixel format for a given DSI output
 *				      pixel format
 * @dsi_format: pixel format that a DSI host needs to output
 *
 * Various DSI hosts can use this function during their
 * &drm_bridge_funcs.atomic_get_input_bus_fmts operation to ascertain
 * the MEDIA_BUS_FMT_* pixel format required as input.
 *
 * RETURNS:
 * a 32-bit MEDIA_BUS_FMT_* value on success or 0 in case of failure.
 */
u32 drm_mipi_dsi_get_input_bus_fmt(enum mipi_dsi_pixel_format dsi_format)
{
	switch (dsi_format) {
	case MIPI_DSI_FMT_RGB888:
		return MEDIA_BUS_FMT_RGB888_1X24;

	case MIPI_DSI_FMT_RGB666:
		return MEDIA_BUS_FMT_RGB666_1X24_CPADHI;

	case MIPI_DSI_FMT_RGB666_PACKED:
		return MEDIA_BUS_FMT_RGB666_1X18;

	case MIPI_DSI_FMT_RGB565:
		return MEDIA_BUS_FMT_RGB565_1X16;

	default:
		/* Unsupported DSI Format */
		return 0;
	}
}
EXPORT_SYMBOL(drm_mipi_dsi_get_input_bus_fmt);

/**
 * mipi_dsi_dcs_write_buffer() - transmit a DCS command with payload
 * @dsi: DSI peripheral device
+1 −0
Original line number Diff line number Diff line
@@ -293,6 +293,7 @@ void mipi_dsi_generic_write_multi(struct mipi_dsi_multi_context *ctx,
				  const void *payload, size_t size);
ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
			      size_t num_params, void *data, size_t size);
u32 drm_mipi_dsi_get_input_bus_fmt(enum mipi_dsi_pixel_format dsi_format);

#define mipi_dsi_msleep(ctx, delay)	\
	do {				\