mipi: Support passing user data to mipi_cmd_func_t
The mipi_cmd_func_t callback for mipi_panel_parse_init_commands() currently doesn't support passing additional data for storing context. Therefore user code would need to store any extra data in global variables. For example, in the upcoming DSI dual channel support for MediaTek platforms, the callback needs to know whether the MIPI panel supports dual channel or not. To support that use case, pass an extra `user_data` argument to mipi_cmd_func_t. BUG=b:424782827 TEST=util/abuild/abuild -x -t GOOGLE_SAPPHIRE -a BRANCH=none Change-Id: Id5d7b168cdcadfe8d8435c29d7e855a535815057 Signed-off-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/90519 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Subrata Banik <subratabanik@google.com> Reviewed-by: Hung-Te Lin <hungte@chromium.org> Reviewed-by: Yidi Lin <yidilin@google.com>
This commit is contained in:
parent
42c1947d99
commit
1dc3e45f7c
4 changed files with 20 additions and 8 deletions
|
|
@ -5,7 +5,8 @@
|
|||
#include <mipi/panel.h>
|
||||
#include <types.h>
|
||||
|
||||
enum cb_err mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_func)
|
||||
enum cb_err mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_func,
|
||||
void *user_data)
|
||||
{
|
||||
const struct panel_init_command *init = buf;
|
||||
enum mipi_dsi_transaction type;
|
||||
|
|
@ -69,7 +70,7 @@ enum cb_err mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_
|
|||
return CB_ERR;
|
||||
}
|
||||
|
||||
enum cb_err ret = cmd_func(type, init->data, len);
|
||||
enum cb_err ret = cmd_func(type, init->data, len, user_data);
|
||||
if (ret != CB_SUCCESS)
|
||||
return ret;
|
||||
buf += len;
|
||||
|
|
|
|||
|
|
@ -223,10 +223,19 @@ struct panel_serializable_data {
|
|||
u8 init[]; /* A packed array of panel_init_command */
|
||||
};
|
||||
|
||||
typedef enum cb_err (*mipi_cmd_func_t)(enum mipi_dsi_transaction type, const u8 *data, u8 len);
|
||||
/*
|
||||
* Callback function type for mipi_panel_parse_init_commands().
|
||||
* @param type MIPI DSI transaction type.
|
||||
* @param data panel_init_command data.
|
||||
* @param len panel_init_command len.
|
||||
* @param user_data Arbitrary user data passed from mipi_panel_parse_init_commands().
|
||||
*/
|
||||
typedef enum cb_err (*mipi_cmd_func_t)(enum mipi_dsi_transaction type, const u8 *data, u8 len,
|
||||
void *user_data);
|
||||
|
||||
/* Parse a command array and call cmd_func() for each entry. Delays get handled internally. */
|
||||
enum cb_err mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_func);
|
||||
enum cb_err mipi_panel_parse_init_commands(const void *buf, mipi_cmd_func_t cmd_func,
|
||||
void *user_data);
|
||||
|
||||
#define PANEL_DCS(...) \
|
||||
PANEL_CMD_DCS, \
|
||||
|
|
|
|||
|
|
@ -313,7 +313,8 @@ static bool mtk_dsi_is_read_command(enum mipi_dsi_transaction type)
|
|||
}
|
||||
}
|
||||
|
||||
static enum cb_err mtk_dsi_cmdq(enum mipi_dsi_transaction type, const u8 *data, u8 len)
|
||||
static enum cb_err mtk_dsi_cmdq(enum mipi_dsi_transaction type, const u8 *data, u8 len,
|
||||
void *user_data)
|
||||
{
|
||||
const u8 *tx_buf = data;
|
||||
u32 config;
|
||||
|
|
@ -399,7 +400,7 @@ int mtk_dsi_init(u32 mode_flags, u32 format, u32 lanes, const struct edid *edid,
|
|||
mtk_dsi_config_vdo_timing(mode_flags, format, lanes, edid, &phy_timing);
|
||||
mtk_dsi_clk_hs_mode_enable();
|
||||
if (init_commands)
|
||||
mipi_panel_parse_init_commands(init_commands, mtk_dsi_cmdq);
|
||||
mipi_panel_parse_init_commands(init_commands, mtk_dsi_cmdq, NULL);
|
||||
mtk_dsi_set_mode(mode_flags);
|
||||
mtk_dsi_start();
|
||||
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ static int mdss_dsi_cmd_dma_trigger_for_panel(void)
|
|||
}
|
||||
|
||||
static enum cb_err mdss_dsi_send_init_cmd(enum mipi_dsi_transaction type, const u8 *body,
|
||||
u8 len)
|
||||
u8 len, void *user_data)
|
||||
{
|
||||
uint8_t *pload = _dma_coherent;
|
||||
uint32_t size;
|
||||
|
|
@ -287,7 +287,8 @@ enum cb_err mdss_dsi_panel_initialize(const u8 *init_cmds)
|
|||
/* Enable command mode before sending the commands */
|
||||
write32(&dsi0->ctrl, ctrl_mode | 0x04);
|
||||
|
||||
enum cb_err ret = mipi_panel_parse_init_commands(init_cmds, mdss_dsi_send_init_cmd);
|
||||
enum cb_err ret = mipi_panel_parse_init_commands(init_cmds, mdss_dsi_send_init_cmd,
|
||||
NULL);
|
||||
write32(&dsi0->ctrl, ctrl_mode);
|
||||
mdss_dsi_clear_intr();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue