Commit d0103ceb authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Tomi Valkeinen

drm/omap: dsi: use MIPI_DSI_FMT_* instead of OMAP_DSS_DSI_FMT_*

This replaces OMAP specific enum for pixel format with
common implementation.
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-4-tomi.valkeinen@ti.com
parent a29cc43c
...@@ -595,7 +595,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata) ...@@ -595,7 +595,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
int r; int r;
struct omap_dss_dsi_config dsi_config = { struct omap_dss_dsi_config dsi_config = {
.mode = OMAP_DSS_DSI_CMD_MODE, .mode = OMAP_DSS_DSI_CMD_MODE,
.pixel_format = OMAP_DSS_DSI_FMT_RGB888, .pixel_format = MIPI_DSI_FMT_RGB888,
.vm = &ddata->vm, .vm = &ddata->vm,
.hs_clk_min = 150000000, .hs_clk_min = 150000000,
.hs_clk_max = 300000000, .hs_clk_max = 300000000,
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/component.h> #include <linux/component.h>
#include <linux/sys_soc.h> #include <linux/sys_soc.h>
#include <drm/drm_mipi_dsi.h>
#include <video/mipi_display.h> #include <video/mipi_display.h>
#include "omapdss.h" #include "omapdss.h"
...@@ -410,7 +411,7 @@ struct dsi_data { ...@@ -410,7 +411,7 @@ struct dsi_data {
struct dss_lcd_mgr_config mgr_config; struct dss_lcd_mgr_config mgr_config;
struct videomode vm; struct videomode vm;
enum omap_dss_dsi_pixel_format pix_fmt; enum mipi_dsi_pixel_format pix_fmt;
enum omap_dss_dsi_mode mode; enum omap_dss_dsi_mode mode;
struct omap_dss_dsi_videomode_timings vm_timings; struct omap_dss_dsi_videomode_timings vm_timings;
...@@ -514,22 +515,6 @@ static inline bool wait_for_bit_change(struct dsi_data *dsi, ...@@ -514,22 +515,6 @@ static inline bool wait_for_bit_change(struct dsi_data *dsi,
return false; return false;
} }
static u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt)
{
switch (fmt) {
case OMAP_DSS_DSI_FMT_RGB888:
case OMAP_DSS_DSI_FMT_RGB666:
return 24;
case OMAP_DSS_DSI_FMT_RGB666_PACKED:
return 18;
case OMAP_DSS_DSI_FMT_RGB565:
return 16;
default:
BUG();
return 0;
}
}
#ifdef DSI_PERF_MEASURE #ifdef DSI_PERF_MEASURE
static void dsi_perf_mark_setup(struct dsi_data *dsi) static void dsi_perf_mark_setup(struct dsi_data *dsi)
{ {
...@@ -3241,7 +3226,7 @@ static void dsi_config_vp_num_line_buffers(struct dsi_data *dsi) ...@@ -3241,7 +3226,7 @@ static void dsi_config_vp_num_line_buffers(struct dsi_data *dsi)
int num_line_buffers; int num_line_buffers;
if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) { if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
int bpp = dsi_get_pixel_size(dsi->pix_fmt); int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
const struct videomode *vm = &dsi->vm; const struct videomode *vm = &dsi->vm;
/* /*
* Don't use line buffers if width is greater than the video * Don't use line buffers if width is greater than the video
...@@ -3372,7 +3357,7 @@ static void dsi_config_cmd_mode_interleaving(struct dsi_data *dsi) ...@@ -3372,7 +3357,7 @@ static void dsi_config_cmd_mode_interleaving(struct dsi_data *dsi)
int tclk_trail, ths_exit, exiths_clk; int tclk_trail, ths_exit, exiths_clk;
bool ddr_alwon; bool ddr_alwon;
const struct videomode *vm = &dsi->vm; const struct videomode *vm = &dsi->vm;
int bpp = dsi_get_pixel_size(dsi->pix_fmt); int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
int ndl = dsi->num_lanes_used - 1; int ndl = dsi->num_lanes_used - 1;
int dsi_fclk_hsdiv = dsi->user_dsi_cinfo.mX[HSDIV_DSI] + 1; int dsi_fclk_hsdiv = dsi->user_dsi_cinfo.mX[HSDIV_DSI] + 1;
int hsa_interleave_hs = 0, hsa_interleave_lp = 0; int hsa_interleave_hs = 0, hsa_interleave_lp = 0;
...@@ -3500,7 +3485,7 @@ static int dsi_proto_config(struct dsi_data *dsi) ...@@ -3500,7 +3485,7 @@ static int dsi_proto_config(struct dsi_data *dsi)
dsi_set_lp_rx_timeout(dsi, 0x1fff, true, true); dsi_set_lp_rx_timeout(dsi, 0x1fff, true, true);
dsi_set_hs_tx_timeout(dsi, 0x1fff, true, true); dsi_set_hs_tx_timeout(dsi, 0x1fff, true, true);
switch (dsi_get_pixel_size(dsi->pix_fmt)) { switch (mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt)) {
case 16: case 16:
buswidth = 0; buswidth = 0;
break; break;
...@@ -3621,7 +3606,7 @@ static void dsi_proto_timings(struct dsi_data *dsi) ...@@ -3621,7 +3606,7 @@ static void dsi_proto_timings(struct dsi_data *dsi)
int window_sync = dsi->vm_timings.window_sync; int window_sync = dsi->vm_timings.window_sync;
bool hsync_end; bool hsync_end;
const struct videomode *vm = &dsi->vm; const struct videomode *vm = &dsi->vm;
int bpp = dsi_get_pixel_size(dsi->pix_fmt); int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
int tl, t_he, width_bytes; int tl, t_he, width_bytes;
hsync_end = dsi->vm_timings.trans_mode == OMAP_DSS_DSI_PULSE_MODE; hsync_end = dsi->vm_timings.trans_mode == OMAP_DSS_DSI_PULSE_MODE;
...@@ -3728,7 +3713,7 @@ static int dsi_configure_pins(struct omap_dss_device *dssdev, ...@@ -3728,7 +3713,7 @@ static int dsi_configure_pins(struct omap_dss_device *dssdev,
static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel) static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
{ {
struct dsi_data *dsi = to_dsi_data(dssdev); struct dsi_data *dsi = to_dsi_data(dssdev);
int bpp = dsi_get_pixel_size(dsi->pix_fmt); int bpp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
u8 data_type; u8 data_type;
u16 word_count; u16 word_count;
int r; int r;
...@@ -3739,16 +3724,16 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel) ...@@ -3739,16 +3724,16 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) { if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
switch (dsi->pix_fmt) { switch (dsi->pix_fmt) {
case OMAP_DSS_DSI_FMT_RGB888: case MIPI_DSI_FMT_RGB888:
data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24; data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
break; break;
case OMAP_DSS_DSI_FMT_RGB666: case MIPI_DSI_FMT_RGB666:
data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18; data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
break; break;
case OMAP_DSS_DSI_FMT_RGB666_PACKED: case MIPI_DSI_FMT_RGB666_PACKED:
data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18; data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
break; break;
case OMAP_DSS_DSI_FMT_RGB565: case MIPI_DSI_FMT_RGB565:
data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16; data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
break; break;
default: default:
...@@ -3826,7 +3811,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi) ...@@ -3826,7 +3811,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi)
dsi_vc_config_source(dsi, channel, DSI_VC_SOURCE_VP); dsi_vc_config_source(dsi, channel, DSI_VC_SOURCE_VP);
bytespp = dsi_get_pixel_size(dsi->pix_fmt) / 8; bytespp = mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) / 8;
bytespl = w * bytespp; bytespl = w * bytespp;
bytespf = bytespl * h; bytespf = bytespl * h;
...@@ -3952,7 +3937,7 @@ static int dsi_update(struct omap_dss_device *dssdev, int channel, ...@@ -3952,7 +3937,7 @@ static int dsi_update(struct omap_dss_device *dssdev, int channel,
#ifdef DSI_PERF_MEASURE #ifdef DSI_PERF_MEASURE
dsi->update_bytes = dsi->vm.hactive * dsi->vm.vactive * dsi->update_bytes = dsi->vm.hactive * dsi->vm.vactive *
dsi_get_pixel_size(dsi->pix_fmt) / 8; mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) / 8;
#endif #endif
dsi_update_screen_dispc(dsi); dsi_update_screen_dispc(dsi);
...@@ -4013,7 +3998,7 @@ static int dsi_display_init_dispc(struct dsi_data *dsi) ...@@ -4013,7 +3998,7 @@ static int dsi_display_init_dispc(struct dsi_data *dsi)
dsi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS; dsi->mgr_config.io_pad_mode = DSS_IO_PAD_MODE_BYPASS;
dsi->mgr_config.video_port_width = dsi->mgr_config.video_port_width =
dsi_get_pixel_size(dsi->pix_fmt); mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt);
dsi->mgr_config.lcden_sig_polarity = 0; dsi->mgr_config.lcden_sig_polarity = 0;
dss_mgr_set_lcd_config(&dsi->output, &dsi->mgr_config); dss_mgr_set_lcd_config(&dsi->output, &dsi->mgr_config);
...@@ -4351,7 +4336,7 @@ static bool dsi_cm_calc(struct dsi_data *dsi, ...@@ -4351,7 +4336,7 @@ static bool dsi_cm_calc(struct dsi_data *dsi,
unsigned long pck, txbyteclk; unsigned long pck, txbyteclk;
clkin = clk_get_rate(dsi->pll.clkin); clkin = clk_get_rate(dsi->pll.clkin);
bitspp = dsi_get_pixel_size(cfg->pixel_format); bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
ndl = dsi->num_lanes_used - 1; ndl = dsi->num_lanes_used - 1;
/* /*
...@@ -4384,7 +4369,7 @@ static bool dsi_vm_calc_blanking(struct dsi_clk_calc_ctx *ctx) ...@@ -4384,7 +4369,7 @@ static bool dsi_vm_calc_blanking(struct dsi_clk_calc_ctx *ctx)
{ {
struct dsi_data *dsi = ctx->dsi; struct dsi_data *dsi = ctx->dsi;
const struct omap_dss_dsi_config *cfg = ctx->config; const struct omap_dss_dsi_config *cfg = ctx->config;
int bitspp = dsi_get_pixel_size(cfg->pixel_format); int bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
int ndl = dsi->num_lanes_used - 1; int ndl = dsi->num_lanes_used - 1;
unsigned long hsclk = ctx->dsi_cinfo.clkdco / 4; unsigned long hsclk = ctx->dsi_cinfo.clkdco / 4;
unsigned long byteclk = hsclk / 4; unsigned long byteclk = hsclk / 4;
...@@ -4651,7 +4636,7 @@ static bool dsi_vm_calc(struct dsi_data *dsi, ...@@ -4651,7 +4636,7 @@ static bool dsi_vm_calc(struct dsi_data *dsi,
unsigned long pll_min; unsigned long pll_min;
unsigned long pll_max; unsigned long pll_max;
int ndl = dsi->num_lanes_used - 1; int ndl = dsi->num_lanes_used - 1;
int bitspp = dsi_get_pixel_size(cfg->pixel_format); int bitspp = mipi_dsi_pixel_format_to_bpp(cfg->pixel_format);
unsigned long byteclk_min; unsigned long byteclk_min;
clkin = clk_get_rate(dsi->pll.clkin); clkin = clk_get_rate(dsi->pll.clkin);
...@@ -4697,6 +4682,12 @@ static int dsi_set_config(struct omap_dss_device *dssdev, ...@@ -4697,6 +4682,12 @@ static int dsi_set_config(struct omap_dss_device *dssdev,
dsi->pix_fmt = config->pixel_format; dsi->pix_fmt = config->pixel_format;
dsi->mode = config->mode; dsi->mode = config->mode;
if (mipi_dsi_pixel_format_to_bpp(dsi->pix_fmt) < 0) {
DSSERR("invalid pixel format\n");
r = -EINVAL;
goto err;
}
if (config->mode == OMAP_DSS_DSI_VIDEO_MODE) if (config->mode == OMAP_DSS_DSI_VIDEO_MODE)
ok = dsi_vm_calc(dsi, config, &ctx); ok = dsi_vm_calc(dsi, config, &ctx);
else else
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <drm/drm_color_mgmt.h> #include <drm/drm_color_mgmt.h>
#include <drm/drm_crtc.h> #include <drm/drm_crtc.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_mode.h> #include <drm/drm_mode.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -117,13 +118,6 @@ enum omap_dss_venc_type { ...@@ -117,13 +118,6 @@ enum omap_dss_venc_type {
OMAP_DSS_VENC_TYPE_SVIDEO, OMAP_DSS_VENC_TYPE_SVIDEO,
}; };
enum omap_dss_dsi_pixel_format {
OMAP_DSS_DSI_FMT_RGB888,
OMAP_DSS_DSI_FMT_RGB666,
OMAP_DSS_DSI_FMT_RGB666_PACKED,
OMAP_DSS_DSI_FMT_RGB565,
};
enum omap_dss_dsi_mode { enum omap_dss_dsi_mode {
OMAP_DSS_DSI_CMD_MODE = 0, OMAP_DSS_DSI_CMD_MODE = 0,
OMAP_DSS_DSI_VIDEO_MODE, OMAP_DSS_DSI_VIDEO_MODE,
...@@ -211,7 +205,7 @@ struct omap_dss_dsi_videomode_timings { ...@@ -211,7 +205,7 @@ struct omap_dss_dsi_videomode_timings {
struct omap_dss_dsi_config { struct omap_dss_dsi_config {
enum omap_dss_dsi_mode mode; enum omap_dss_dsi_mode mode;
enum omap_dss_dsi_pixel_format pixel_format; enum mipi_dsi_pixel_format pixel_format;
const struct videomode *vm; const struct videomode *vm;
unsigned long hs_clk_min, hs_clk_max; unsigned long hs_clk_min, hs_clk_max;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment