|  | /* | 
|  | * Copyright (c) 2020 Teslabs Engineering S.L. | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #include <errno.h> | 
|  |  | 
|  | #include <zephyr/drivers/mipi_dsi.h> | 
|  |  | 
|  | ssize_t mipi_dsi_generic_read(const struct device *dev, uint8_t channel, | 
|  | const void *params, size_t nparams, | 
|  | void *buf, size_t len) | 
|  | { | 
|  | struct mipi_dsi_msg msg = { | 
|  | .tx_len = nparams, | 
|  | .tx_buf = params, | 
|  | .rx_len = len, | 
|  | .rx_buf = buf | 
|  | }; | 
|  |  | 
|  | switch (nparams) { | 
|  | case 0U: | 
|  | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM; | 
|  | break; | 
|  |  | 
|  | case 1U: | 
|  | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM; | 
|  | break; | 
|  |  | 
|  | case 2U: | 
|  | msg.type = MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM; | 
|  | break; | 
|  |  | 
|  | default: | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return mipi_dsi_transfer(dev, channel, &msg); | 
|  | } | 
|  |  | 
|  | ssize_t mipi_dsi_generic_write(const struct device *dev, uint8_t channel, | 
|  | const void *buf, size_t len) | 
|  | { | 
|  | struct mipi_dsi_msg msg = { | 
|  | .tx_buf = buf, | 
|  | .tx_len = len | 
|  | }; | 
|  |  | 
|  | switch (len) { | 
|  | case 0U: | 
|  | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM; | 
|  | break; | 
|  |  | 
|  | case 1U: | 
|  | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM; | 
|  | break; | 
|  |  | 
|  | case 2U: | 
|  | msg.type = MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM; | 
|  | break; | 
|  |  | 
|  | default: | 
|  | msg.type = MIPI_DSI_GENERIC_LONG_WRITE; | 
|  | break; | 
|  | } | 
|  |  | 
|  | return mipi_dsi_transfer(dev, channel, &msg); | 
|  | } | 
|  |  | 
|  | ssize_t mipi_dsi_dcs_read(const struct device *dev, uint8_t channel, | 
|  | uint8_t cmd, void *buf, size_t len) | 
|  | { | 
|  | struct mipi_dsi_msg msg = { | 
|  | .type = MIPI_DSI_DCS_READ, | 
|  | .cmd = cmd, | 
|  | .rx_buf = buf, | 
|  | .rx_len = len | 
|  | }; | 
|  |  | 
|  | return mipi_dsi_transfer(dev, channel, &msg); | 
|  | } | 
|  |  | 
|  | ssize_t mipi_dsi_dcs_write(const struct device *dev, uint8_t channel, | 
|  | uint8_t cmd, const void *buf, size_t len) | 
|  | { | 
|  | struct mipi_dsi_msg msg = { | 
|  | .cmd = cmd, | 
|  | .tx_buf = buf, | 
|  | .tx_len = len | 
|  | }; | 
|  |  | 
|  | switch (len) { | 
|  | case 0U: | 
|  | msg.type = MIPI_DSI_DCS_SHORT_WRITE; | 
|  | break; | 
|  |  | 
|  | case 1U: | 
|  | msg.type = MIPI_DSI_DCS_SHORT_WRITE_PARAM; | 
|  | break; | 
|  |  | 
|  | default: | 
|  | msg.type = MIPI_DSI_DCS_LONG_WRITE; | 
|  | break; | 
|  | } | 
|  |  | 
|  | return mipi_dsi_transfer(dev, channel, &msg); | 
|  | } |