drm/dsi: Add DSI transfer helper

A common pattern is starting to emerge for higher level transfer
helpers. Create a new helper that encapsulates this pattern and avoids
code duplication.

Acked-by: Andrzej Hajda <a.hajda@samsung.com>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
Thierry Reding 2014-10-14 11:12:32 +02:00
parent a52879e8d7
commit 9eb491f3ee

View File

@ -198,6 +198,20 @@ int mipi_dsi_detach(struct mipi_dsi_device *dsi)
} }
EXPORT_SYMBOL(mipi_dsi_detach); EXPORT_SYMBOL(mipi_dsi_detach);
static ssize_t mipi_dsi_device_transfer(struct mipi_dsi_device *dsi,
struct mipi_dsi_msg *msg)
{
const struct mipi_dsi_host_ops *ops = dsi->host->ops;
if (!ops || !ops->transfer)
return -ENOSYS;
if (dsi->mode_flags & MIPI_DSI_MODE_LPM)
msg->flags |= MIPI_DSI_MSG_USE_LPM;
return ops->transfer(dsi->host, msg);
}
/** /**
* mipi_dsi_packet_format_is_short - check if a packet is of the short format * mipi_dsi_packet_format_is_short - check if a packet is of the short format
* @type: MIPI DSI data type of the packet * @type: MIPI DSI data type of the packet
@ -327,16 +341,12 @@ EXPORT_SYMBOL(mipi_dsi_create_packet);
ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, const void *data, ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, const void *data,
size_t len) size_t len)
{ {
const struct mipi_dsi_host_ops *ops = dsi->host->ops;
struct mipi_dsi_msg msg = { struct mipi_dsi_msg msg = {
.channel = dsi->channel, .channel = dsi->channel,
.tx_buf = data, .tx_buf = data,
.tx_len = len .tx_len = len
}; };
if (!ops || !ops->transfer)
return -ENOSYS;
switch (len) { switch (len) {
case 0: case 0:
return -EINVAL; return -EINVAL;
@ -351,10 +361,7 @@ ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, const void *data,
break; break;
} }
if (dsi->mode_flags & MIPI_DSI_MODE_LPM) return mipi_dsi_device_transfer(dsi, &msg);
msg.flags = MIPI_DSI_MSG_USE_LPM;
return ops->transfer(dsi->host, &msg);
} }
EXPORT_SYMBOL(mipi_dsi_dcs_write); EXPORT_SYMBOL(mipi_dsi_dcs_write);
@ -370,7 +377,6 @@ EXPORT_SYMBOL(mipi_dsi_dcs_write);
ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data,
size_t len) size_t len)
{ {
const struct mipi_dsi_host_ops *ops = dsi->host->ops;
struct mipi_dsi_msg msg = { struct mipi_dsi_msg msg = {
.channel = dsi->channel, .channel = dsi->channel,
.type = MIPI_DSI_DCS_READ, .type = MIPI_DSI_DCS_READ,
@ -380,13 +386,7 @@ ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data,
.rx_len = len .rx_len = len
}; };
if (!ops || !ops->transfer) return mipi_dsi_device_transfer(dsi, &msg);
return -ENOSYS;
if (dsi->mode_flags & MIPI_DSI_MODE_LPM)
msg.flags = MIPI_DSI_MSG_USE_LPM;
return ops->transfer(dsi->host, &msg);
} }
EXPORT_SYMBOL(mipi_dsi_dcs_read); EXPORT_SYMBOL(mipi_dsi_dcs_read);