((((cmd) & CMD_ID_MASK) << CMD_ID_SHIFT) | \
(((sender) & CMD_SENDER_ID_MASK) << CMD_SENDER_ID_SHIFT) | \
(((txsz) & CMD_DATA_SIZE_MASK) << CMD_DATA_SIZE_SHIFT))
+#define SCPI_CMD_DEFAULT_TIMEOUT_MS 1000
#define MAX_DVFS_DOMAINS 3
#define MAX_DVFS_OPPS 8
int client_id;
struct rockchip_mbox_msg *data;
struct completion complete;
+ int timeout_ms;
};
static int high_priority_cmds[] = {
struct rockchip_mbox_msg *data = scpi_buf->data;
u32 status;
int ret;
+ int timeout = msecs_to_jiffies(scpi_buf->timeout_ms);
if (!the_scpi_device) {
pr_err("Scpi initializes unsuccessfully\n");
goto free_channel;
}
- ret = wait_for_completion_timeout(&scpi_buf->complete,
- msecs_to_jiffies(1000));
+ ret = wait_for_completion_timeout(&scpi_buf->complete, timeout);
if (ret == 0) {
status = SCPI_ERR_TIMEOUT;
goto free_channel;
pdata->rx_size = sizeof(_rx_buf); \
scpi_buf.client_id = _client_id; \
scpi_buf.data = pdata; \
+ scpi_buf.timeout_ms = SCPI_CMD_DEFAULT_TIMEOUT_MS; \
} while (0)
static int scpi_execute_cmd(struct scpi_data_buf *scpi_buf)
return ret;
}
-int scpi_ddr_init(u32 dram_speed_bin, u32 freq)
+int scpi_sys_set_mcu_state_suspend(void)
+{
+ struct scpi_data_buf sdata;
+ struct rockchip_mbox_msg mdata;
+ struct __packed1 {
+ u32 status;
+ } tx_buf;
+ struct __packed2 {
+ u32 status;
+ } rx_buf;
+
+ tx_buf.status = 0;
+ SCPI_SETUP_DBUF(sdata, mdata, SCPI_CL_SYS,
+ SCPI_SYS_SET_MCU_STATE_SUSPEND, tx_buf, rx_buf);
+ return scpi_execute_cmd(&sdata);
+}
+EXPORT_SYMBOL_GPL(scpi_sys_set_mcu_state_suspend);
+
+int scpi_sys_set_mcu_state_resume(void)
+{
+ struct scpi_data_buf sdata;
+ struct rockchip_mbox_msg mdata;
+ struct __packed1 {
+ u32 status;
+ } tx_buf;
+ struct __packed2 {
+ u32 status;
+ } rx_buf;
+
+ tx_buf.status = 0;
+
+ SCPI_SETUP_DBUF(sdata, mdata, SCPI_CL_SYS,
+ SCPI_SYS_SET_MCU_STATE_RESUME, tx_buf, rx_buf);
+ return scpi_execute_cmd(&sdata);
+}
+EXPORT_SYMBOL_GPL(scpi_sys_set_mcu_state_resume);
+
+int scpi_ddr_init(u32 dram_speed_bin, u32 freq, u32 lcdc_type)
{
struct scpi_data_buf sdata;
struct rockchip_mbox_msg mdata;
struct __packed1 {
u32 dram_speed_bin;
u32 freq;
+ u32 lcdc_type;
} tx_buf;
struct __packed2 {
u32 status;
tx_buf.dram_speed_bin = (u32)dram_speed_bin;
tx_buf.freq = (u32)freq;
+ tx_buf.lcdc_type = (u32)lcdc_type;
SCPI_SETUP_DBUF(sdata, mdata, SCPI_CL_DDR,
SCPI_DDR_INIT, tx_buf, rx_buf);