mirror of https://github.com/thesofproject/sof.git
comp: default function to set comp state
This patch adds a the comp_set_state() used for the mandatory pipeline commands, START, STOP, PAUSE and RELEASE. It also updates the cmd method in existing components to use comp_set_state(). Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
parent
a57a7b1ec8
commit
6200408cd7
|
@ -117,6 +117,44 @@ void comp_unregister(struct comp_driver *drv)
|
|||
spin_unlock(&cd->lock);
|
||||
}
|
||||
|
||||
int comp_set_state(struct comp_dev *dev, int cmd)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case COMP_CMD_START:
|
||||
case COMP_CMD_RELEASE:
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED) {
|
||||
comp_buffer_reset(dev);
|
||||
dev->state = COMP_STATE_SETUP;
|
||||
} else {
|
||||
trace_comp_error("CEs");
|
||||
ret = -EINVAL;
|
||||
}
|
||||
break;
|
||||
case COMP_CMD_PAUSE:
|
||||
/* only support pausing for running */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
else {
|
||||
trace_comp_error("CEp");
|
||||
ret = -EINVAL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
trace_comp_error("CEd");
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void sys_comp_init(void)
|
||||
{
|
||||
cd = rzalloc(RZONE_SYS, RFLAGS_NONE, sizeof(*cd));
|
||||
|
|
|
@ -382,32 +382,11 @@ static int eq_fir_cmd(struct comp_dev *dev, int cmd, void *data)
|
|||
ret = fir_cmd(dev, cdata);
|
||||
break;
|
||||
case COMP_CMD_START:
|
||||
trace_src("EFs");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
trace_src("ESp");
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED) {
|
||||
comp_buffer_reset(dev);
|
||||
dev->state = COMP_STATE_SETUP;
|
||||
}
|
||||
break;
|
||||
case COMP_CMD_PAUSE:
|
||||
trace_src("EPe");
|
||||
/* only support pausing for running */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
|
||||
break;
|
||||
case COMP_CMD_RELEASE:
|
||||
trace_src("ERl");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
default:
|
||||
trace_src("EDf");
|
||||
ret = -EINVAL;
|
||||
ret = comp_set_state(dev, cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -551,28 +551,20 @@ static int host_cmd(struct comp_dev *dev, int cmd, void *data)
|
|||
|
||||
// TODO: align cmd macros.
|
||||
switch (cmd) {
|
||||
case COMP_CMD_PAUSE:
|
||||
/* only support pausing for running, channel is paused by DAI */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED)
|
||||
ret = host_stop(dev);
|
||||
break;
|
||||
case COMP_CMD_RELEASE:
|
||||
/* channel is released by DAI */
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_START:
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_SUSPEND:
|
||||
case COMP_CMD_RESUME:
|
||||
break;
|
||||
case COMP_CMD_START:
|
||||
case COMP_CMD_PAUSE:
|
||||
case COMP_CMD_RELEASE:
|
||||
default:
|
||||
ret = comp_set_state(dev, cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -435,6 +435,7 @@ static int src_ctrl_cmd(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata)
|
|||
static int src_cmd(struct comp_dev *dev, int cmd, void *data)
|
||||
{
|
||||
struct sof_ipc_ctrl_data *cdata = data;
|
||||
int ret = 0;
|
||||
|
||||
trace_src("SCm");
|
||||
|
||||
|
@ -442,35 +443,15 @@ static int src_cmd(struct comp_dev *dev, int cmd, void *data)
|
|||
case COMP_CMD_SET_VALUE:
|
||||
return src_ctrl_cmd(dev, cdata);
|
||||
case COMP_CMD_START:
|
||||
trace_src("SSt");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
trace_src("SSp");
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED) {
|
||||
comp_buffer_reset(dev);
|
||||
dev->state = COMP_STATE_SETUP;
|
||||
}
|
||||
break;
|
||||
case COMP_CMD_PAUSE:
|
||||
trace_src("SPe");
|
||||
/* only support pausing for running */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
|
||||
break;
|
||||
case COMP_CMD_RELEASE:
|
||||
trace_src("SRl");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
default:
|
||||
trace_src("SDf");
|
||||
ret = comp_set_state(dev, cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* copy and process stream data from source to sink buffers */
|
||||
|
|
|
@ -434,6 +434,8 @@ static int tone_ctrl_cmd(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata)
|
|||
{
|
||||
struct comp_data *cd = comp_get_drvdata(dev);
|
||||
|
||||
trace_tone("tri");
|
||||
|
||||
switch (cdata->cmd) {
|
||||
case SOF_CTRL_CMD_MUTE:
|
||||
trace_tone("TMu");
|
||||
|
@ -468,6 +470,7 @@ static int tone_ctrl_cmd(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata)
|
|||
static int tone_cmd(struct comp_dev *dev, int cmd, void *data)
|
||||
{
|
||||
struct sof_ipc_ctrl_data *cdata = data;
|
||||
int ret = 0;
|
||||
|
||||
trace_tone("tri");
|
||||
|
||||
|
@ -475,36 +478,15 @@ static int tone_cmd(struct comp_dev *dev, int cmd, void *data)
|
|||
case COMP_CMD_SET_VALUE:
|
||||
return tone_ctrl_cmd(dev, cdata);
|
||||
case COMP_CMD_START:
|
||||
trace_tone("TSt");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
trace_tone("TSp");
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED) {
|
||||
comp_buffer_reset(dev);
|
||||
dev->state = COMP_STATE_SETUP;
|
||||
}
|
||||
break;
|
||||
case COMP_CMD_PAUSE:
|
||||
trace_tone("TPe");
|
||||
/* only support pausing for running */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
|
||||
break;
|
||||
case COMP_CMD_RELEASE:
|
||||
trace_tone("TRl");
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
default:
|
||||
trace_tone("TDf");
|
||||
|
||||
ret = comp_set_state(dev, cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* copy and process stream data from source to sink buffers */
|
||||
|
|
|
@ -429,6 +429,7 @@ static int volume_ctrl_cmd(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata
|
|||
static int volume_cmd(struct comp_dev *dev, int cmd, void *data)
|
||||
{
|
||||
struct sof_ipc_ctrl_data *cdata = data;
|
||||
int ret = 0;
|
||||
|
||||
trace_volume("cmd");
|
||||
|
||||
|
@ -436,29 +437,15 @@ static int volume_cmd(struct comp_dev *dev, int cmd, void *data)
|
|||
case COMP_CMD_SET_VALUE:
|
||||
return volume_ctrl_cmd(dev, cdata);
|
||||
case COMP_CMD_START:
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
case COMP_CMD_STOP:
|
||||
if (dev->state == COMP_STATE_RUNNING ||
|
||||
dev->state == COMP_STATE_DRAINING ||
|
||||
dev->state == COMP_STATE_PAUSED) {
|
||||
comp_buffer_reset(dev);
|
||||
dev->state = COMP_STATE_SETUP;
|
||||
}
|
||||
break;
|
||||
case COMP_CMD_PAUSE:
|
||||
/* only support pausing for running */
|
||||
if (dev->state == COMP_STATE_RUNNING)
|
||||
dev->state = COMP_STATE_PAUSED;
|
||||
break;
|
||||
case COMP_CMD_RELEASE:
|
||||
dev->state = COMP_STATE_RUNNING;
|
||||
break;
|
||||
default:
|
||||
ret = comp_set_state(dev, cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* copy and process stream data from source to sink buffers */
|
||||
|
|
|
@ -214,6 +214,9 @@ static inline void comp_free(struct comp_dev *dev)
|
|||
dev->drv->ops.free(dev);
|
||||
}
|
||||
|
||||
/* component state set */
|
||||
int comp_set_state(struct comp_dev *dev, int cmd);
|
||||
|
||||
/* component parameter init - mandatory */
|
||||
static inline int comp_params(struct comp_dev *dev)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue