Commit 5e430754 authored by Tomi Valkeinen's avatar Tomi Valkeinen

drm/omap: dsi: pass vc and channel to various functions

To start fixing the issues related to channels and vcs described in the
previous commit, pass vc and/or channel to various functions which will
need it do properly handle different DSI channels and VCs.

No functional changes.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215104657.802264-67-tomi.valkeinen@ti.com
parent d8171145
...@@ -214,9 +214,9 @@ static void dsi_set_ulps_auto(struct dsi_data *dsi, bool enable); ...@@ -214,9 +214,9 @@ static void dsi_set_ulps_auto(struct dsi_data *dsi, bool enable);
static int dsi_display_init_dispc(struct dsi_data *dsi); static int dsi_display_init_dispc(struct dsi_data *dsi);
static void dsi_display_uninit_dispc(struct dsi_data *dsi); static void dsi_display_uninit_dispc(struct dsi_data *dsi);
static int dsi_vc_send_null(struct dsi_data *dsi, int vc); static int dsi_vc_send_null(struct dsi_data *dsi, int vc, int channel);
static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, int vc,
const struct mipi_dsi_msg *msg); const struct mipi_dsi_msg *msg);
static void dsi_display_disable(struct omap_dss_device *dssdev); static void dsi_display_disable(struct omap_dss_device *dssdev);
...@@ -2457,7 +2457,7 @@ static void dsi_vc_enable_hs(struct omap_dss_device *dssdev, int vc, ...@@ -2457,7 +2457,7 @@ static void dsi_vc_enable_hs(struct omap_dss_device *dssdev, int vc,
/* start the DDR clock by sending a NULL packet */ /* start the DDR clock by sending a NULL packet */
if (dsi->vm_timings.ddr_clk_always_on && enable) if (dsi->vm_timings.ddr_clk_always_on && enable)
dsi_vc_send_null(dsi, vc); dsi_vc_send_null(dsi, vc, dsi->dsidev->channel);
dsi->in_lp_mode = !enable; dsi->in_lp_mode = !enable;
} }
...@@ -2607,7 +2607,8 @@ static int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int vc) ...@@ -2607,7 +2607,8 @@ static int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int vc)
} }
static inline void dsi_vc_write_long_header(struct dsi_data *dsi, int vc, static inline void dsi_vc_write_long_header(struct dsi_data *dsi, int vc,
u8 data_type, u16 len, u8 ecc) int channel, u8 data_type, u16 len,
u8 ecc)
{ {
u32 val; u32 val;
u8 data_id; u8 data_id;
...@@ -2635,7 +2636,7 @@ static inline void dsi_vc_write_long_payload(struct dsi_data *dsi, int vc, ...@@ -2635,7 +2636,7 @@ static inline void dsi_vc_write_long_payload(struct dsi_data *dsi, int vc,
dsi_write_reg(dsi, DSI_VC_LONG_PACKET_PAYLOAD(vc), val); dsi_write_reg(dsi, DSI_VC_LONG_PACKET_PAYLOAD(vc), val);
} }
static int dsi_vc_send_long(struct dsi_data *dsi, static int dsi_vc_send_long(struct dsi_data *dsi, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
/*u32 val; */ /*u32 val; */
...@@ -2655,7 +2656,7 @@ static int dsi_vc_send_long(struct dsi_data *dsi, ...@@ -2655,7 +2656,7 @@ static int dsi_vc_send_long(struct dsi_data *dsi,
dsi_vc_config_source(dsi, msg->channel, DSI_VC_SOURCE_L4); dsi_vc_config_source(dsi, msg->channel, DSI_VC_SOURCE_L4);
dsi_vc_write_long_header(dsi, msg->channel, msg->type, msg->tx_len, 0); dsi_vc_write_long_header(dsi, vc, msg->channel, msg->type, msg->tx_len, 0);
p = msg->tx_buf; p = msg->tx_buf;
for (i = 0; i < msg->tx_len >> 2; i++) { for (i = 0; i < msg->tx_len >> 2; i++) {
...@@ -2698,7 +2699,7 @@ static int dsi_vc_send_long(struct dsi_data *dsi, ...@@ -2698,7 +2699,7 @@ static int dsi_vc_send_long(struct dsi_data *dsi,
return r; return r;
} }
static int dsi_vc_send_short(struct dsi_data *dsi, static int dsi_vc_send_short(struct dsi_data *dsi, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
struct mipi_dsi_packet pkt; struct mipi_dsi_packet pkt;
...@@ -2729,26 +2730,26 @@ static int dsi_vc_send_short(struct dsi_data *dsi, ...@@ -2729,26 +2730,26 @@ static int dsi_vc_send_short(struct dsi_data *dsi,
return 0; return 0;
} }
static int dsi_vc_send_null(struct dsi_data *dsi, int vc) static int dsi_vc_send_null(struct dsi_data *dsi, int vc, int channel)
{ {
const struct mipi_dsi_msg msg = { const struct mipi_dsi_msg msg = {
.channel = vc, .channel = vc,
.type = MIPI_DSI_NULL_PACKET, .type = MIPI_DSI_NULL_PACKET,
}; };
return dsi_vc_send_long(dsi, &msg); return dsi_vc_send_long(dsi, vc, &msg);
} }
static int dsi_vc_write_common(struct omap_dss_device *dssdev, static int dsi_vc_write_common(struct omap_dss_device *dssdev, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
struct dsi_data *dsi = to_dsi_data(dssdev); struct dsi_data *dsi = to_dsi_data(dssdev);
int r; int r;
if (mipi_dsi_packet_format_is_short(msg->type)) if (mipi_dsi_packet_format_is_short(msg->type))
r = dsi_vc_send_short(dsi, msg); r = dsi_vc_send_short(dsi, vc, msg);
else else
r = dsi_vc_send_long(dsi, msg); r = dsi_vc_send_long(dsi, vc, msg);
if (r < 0) if (r < 0)
return r; return r;
...@@ -2884,7 +2885,7 @@ static int dsi_vc_read_rx_fifo(struct dsi_data *dsi, int vc, u8 *buf, ...@@ -2884,7 +2885,7 @@ static int dsi_vc_read_rx_fifo(struct dsi_data *dsi, int vc, u8 *buf,
return r; return r;
} }
static int dsi_vc_dcs_read(struct omap_dss_device *dssdev, static int dsi_vc_dcs_read(struct omap_dss_device *dssdev, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
struct dsi_data *dsi = to_dsi_data(dssdev); struct dsi_data *dsi = to_dsi_data(dssdev);
...@@ -2895,7 +2896,7 @@ static int dsi_vc_dcs_read(struct omap_dss_device *dssdev, ...@@ -2895,7 +2896,7 @@ static int dsi_vc_dcs_read(struct omap_dss_device *dssdev,
if (dsi->debug_read) if (dsi->debug_read)
DSSDBG("%s(ch %d, cmd %x)\n", __func__, channel, cmd); DSSDBG("%s(ch %d, cmd %x)\n", __func__, channel, cmd);
r = dsi_vc_send_short(dsi, msg); r = dsi_vc_send_short(dsi, vc, msg);
if (r) if (r)
goto err; goto err;
...@@ -2919,13 +2920,13 @@ static int dsi_vc_dcs_read(struct omap_dss_device *dssdev, ...@@ -2919,13 +2920,13 @@ static int dsi_vc_dcs_read(struct omap_dss_device *dssdev,
return r; return r;
} }
static int dsi_vc_generic_read(struct omap_dss_device *dssdev, static int dsi_vc_generic_read(struct omap_dss_device *dssdev, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
struct dsi_data *dsi = to_dsi_data(dssdev); struct dsi_data *dsi = to_dsi_data(dssdev);
int r; int r;
r = dsi_vc_send_short(dsi, msg); r = dsi_vc_send_short(dsi, vc, msg);
if (r) if (r)
goto err; goto err;
...@@ -3674,7 +3675,7 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc) ...@@ -3674,7 +3675,7 @@ static void dsi_enable_video_output(struct omap_dss_device *dssdev, int vc)
word_count = DIV_ROUND_UP(dsi->vm.hactive * bpp, 8); word_count = DIV_ROUND_UP(dsi->vm.hactive * bpp, 8);
dsi_vc_write_long_header(dsi, vc, data_type, dsi_vc_write_long_header(dsi, vc, dsi->dsidev->channel, data_type,
word_count, 0); word_count, 0);
dsi_vc_enable(dsi, vc, true); dsi_vc_enable(dsi, vc, true);
...@@ -3772,7 +3773,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi) ...@@ -3772,7 +3773,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi)
l = FLD_VAL(total_len, 23, 0); /* TE_SIZE */ l = FLD_VAL(total_len, 23, 0); /* TE_SIZE */
dsi_write_reg(dsi, DSI_VC_TE(vc), l); dsi_write_reg(dsi, DSI_VC_TE(vc), l);
dsi_vc_write_long_header(dsi, vc, MIPI_DSI_DCS_LONG_WRITE, dsi_vc_write_long_header(dsi, vc, dsi->dsidev->channel, MIPI_DSI_DCS_LONG_WRITE,
packet_len, 0); packet_len, 0);
if (dsi->te_enabled) if (dsi->te_enabled)
...@@ -3879,7 +3880,7 @@ static int _dsi_update(struct dsi_data *dsi) ...@@ -3879,7 +3880,7 @@ static int _dsi_update(struct dsi_data *dsi)
return 0; return 0;
} }
static int _dsi_send_nop(struct dsi_data *dsi, int channel) static int _dsi_send_nop(struct dsi_data *dsi, int vc, int channel)
{ {
const u8 payload[] = { MIPI_DCS_NOP }; const u8 payload[] = { MIPI_DCS_NOP };
const struct mipi_dsi_msg msg = { const struct mipi_dsi_msg msg = {
...@@ -3891,7 +3892,7 @@ static int _dsi_send_nop(struct dsi_data *dsi, int channel) ...@@ -3891,7 +3892,7 @@ static int _dsi_send_nop(struct dsi_data *dsi, int channel)
WARN_ON(!dsi_bus_is_locked(dsi)); WARN_ON(!dsi_bus_is_locked(dsi));
return _omap_dsi_host_transfer(dsi, &msg); return _omap_dsi_host_transfer(dsi, vc, &msg);
} }
static int dsi_update_channel(struct omap_dss_device *dssdev, int vc) static int dsi_update_channel(struct omap_dss_device *dssdev, int vc)
...@@ -3920,7 +3921,7 @@ static int dsi_update_channel(struct omap_dss_device *dssdev, int vc) ...@@ -3920,7 +3921,7 @@ static int dsi_update_channel(struct omap_dss_device *dssdev, int vc)
* updates stop working. This is probably related to DSI spec stating * updates stop working. This is probably related to DSI spec stating
* that the DSI host should transition to LP at least once per frame. * that the DSI host should transition to LP at least once per frame.
*/ */
r = _dsi_send_nop(dsi, vc); r = _dsi_send_nop(dsi, vc, dsi->dsidev->channel);
if (r < 0) { if (r < 0) {
DSSWARN("failed to send nop between frames: %d\n", r); DSSWARN("failed to send nop between frames: %d\n", r);
goto err; goto err;
...@@ -4882,7 +4883,7 @@ static enum omap_channel dsi_get_dispc_channel(struct dsi_data *dsi) ...@@ -4882,7 +4883,7 @@ static enum omap_channel dsi_get_dispc_channel(struct dsi_data *dsi)
} }
} }
static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, int vc,
const struct mipi_dsi_msg *msg) const struct mipi_dsi_msg *msg)
{ {
struct omap_dss_device *dssdev = &dsi->output; struct omap_dss_device *dssdev = &dsi->output;
...@@ -4902,15 +4903,15 @@ static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi, ...@@ -4902,15 +4903,15 @@ static ssize_t _omap_dsi_host_transfer(struct dsi_data *dsi,
case MIPI_DSI_DCS_LONG_WRITE: case MIPI_DSI_DCS_LONG_WRITE:
case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE: case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
case MIPI_DSI_NULL_PACKET: case MIPI_DSI_NULL_PACKET:
r = dsi_vc_write_common(dssdev, msg); r = dsi_vc_write_common(dssdev, vc, msg);
break; break;
case MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM: case MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM:
case MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM: case MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM:
case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM: case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
r = dsi_vc_generic_read(dssdev, msg); r = dsi_vc_generic_read(dssdev, vc, msg);
break; break;
case MIPI_DSI_DCS_READ: case MIPI_DSI_DCS_READ:
r = dsi_vc_dcs_read(dssdev, msg); r = dsi_vc_dcs_read(dssdev, vc, msg);
break; break;
default: default:
r = -EINVAL; r = -EINVAL;
...@@ -4938,12 +4939,13 @@ static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host, ...@@ -4938,12 +4939,13 @@ static ssize_t omap_dsi_host_transfer(struct mipi_dsi_host *host,
{ {
struct dsi_data *dsi = host_to_omap(host); struct dsi_data *dsi = host_to_omap(host);
int r; int r;
int vc = VC_DEFAULT;
dsi_bus_lock(dsi); dsi_bus_lock(dsi);
if (dsi->video_enabled) { if (dsi->video_enabled) {
dsi_set_ulps_auto(dsi, false); dsi_set_ulps_auto(dsi, false);
r = _omap_dsi_host_transfer(dsi, msg); r = _omap_dsi_host_transfer(dsi, vc, msg);
dsi_set_ulps_auto(dsi, true); dsi_set_ulps_auto(dsi, true);
} else { } else {
r = -EIO; r = -EIO;
......
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