diff --git a/src/drivers/mipi/panel.c b/src/drivers/mipi/panel.c index 7279d17b9a..0182a8594a 100644 --- a/src/drivers/mipi/panel.c +++ b/src/drivers/mipi/panel.c @@ -5,7 +5,8 @@ #include #include -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; diff --git a/src/include/mipi/panel.h b/src/include/mipi/panel.h index 938f87dc3b..d306f06fb4 100644 --- a/src/include/mipi/panel.h +++ b/src/include/mipi/panel.h @@ -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, \ diff --git a/src/soc/mediatek/common/dsi_common.c b/src/soc/mediatek/common/dsi_common.c index 5ee8985dfd..2298aa0ace 100644 --- a/src/soc/mediatek/common/dsi_common.c +++ b/src/soc/mediatek/common/dsi_common.c @@ -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(); diff --git a/src/soc/qualcomm/sc7180/display/dsi.c b/src/soc/qualcomm/sc7180/display/dsi.c index 9e6977ca7b..c1e75e1090 100644 --- a/src/soc/qualcomm/sc7180/display/dsi.c +++ b/src/soc/qualcomm/sc7180/display/dsi.c @@ -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();