Lines Matching defs:pipe
352 struct skl_pipe_params *params = m_cfg->pipe->p_params;
353 int p_conn_type = m_cfg->pipe->conn_type;
457 static int skl_tplg_module_prepare(struct skl_dev *skl, struct skl_pipe *pipe,
462 return skl_pcm_host_dma_prepare(skl->dev, pipe->p_params);
465 return skl_pcm_link_dma_prepare(skl->dev, pipe->p_params);
472 * Inside a pipe instance, we can have various modules. These modules need
477 skl_tplg_init_pipe_modules(struct skl_dev *skl, struct skl_pipe *pipe)
485 list_for_each_entry(w_module, &pipe->w_list, node) {
498 cfg_idx = mconfig->pipe->cur_config_idx;
510 ret = skl_tplg_module_prepare(skl, pipe, w, mconfig);
554 struct skl_pipe *pipe)
560 list_for_each_entry(w_module, &pipe->w_list, node) {
585 static void skl_tplg_set_pipe_config_idx(struct skl_pipe *pipe, int idx)
587 pipe->cur_config_idx = idx;
588 pipe->memory_pages = pipe->configs[idx].mem_pages;
592 * Here, we select pipe format based on the pipe type and pipe
601 struct skl_pipe *pipe = mconfig->pipe;
602 struct skl_pipe_params *params = pipe->p_params;
603 struct skl_path_config *pconfig = &pipe->configs[0];
608 if (pipe->nr_cfgs == 0) {
609 skl_tplg_set_pipe_config_idx(pipe, 0);
613 if (pipe->conn_type == SKL_PIPE_CONN_TYPE_NONE || pipe->nr_cfgs == 1) {
615 pipe->ppl_id);
616 skl_tplg_set_pipe_config_idx(pipe, 0);
620 if ((pipe->conn_type == SKL_PIPE_CONN_TYPE_FE &&
621 pipe->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
622 (pipe->conn_type == SKL_PIPE_CONN_TYPE_BE &&
623 pipe->direction == SNDRV_PCM_STREAM_CAPTURE))
626 for (i = 0; i < pipe->nr_cfgs; i++) {
627 pconfig = &pipe->configs[i];
635 skl_tplg_set_pipe_config_idx(pipe, i);
636 dev_dbg(skl->dev, "Using pipe config: %d\n", i);
641 dev_err(skl->dev, "Invalid pipe config: %d %d %d for pipe: %d\n",
642 params->ch, params->s_freq, params->s_fmt, pipe->ppl_id);
659 struct skl_pipe *s_pipe = mconfig->pipe;
668 * Create a list of modules for pipe.
671 ret = skl_create_pipeline(skl, mconfig->pipe);
675 /* Init all pipe modules from source to sink */
997 /* Start sinks pipe first */
998 if (sink_mconfig->pipe->state != SKL_PIPE_STARTED) {
999 if (sink_mconfig->pipe->conn_type !=
1002 sink_mconfig->pipe);
1023 * - Then run current pipe
1035 * if sink is not started, start sink pipe first, then start
1036 * this pipe
1042 /* Start source pipe last after starting all sinks */
1043 if (src_mconfig->pipe->conn_type != SKL_PIPE_CONN_TYPE_FE)
1044 return skl_run_pipe(skl, src_mconfig->pipe);
1082 * - Check if this pipe is running
1085 * if source pipe is already running, this means it is a dynamic
1086 * connection and we need to bind only to that pipe
1101 * If source pipe is already started, that means source is driving
1103 * started, bind this sink to source and start this pipe.
1112 * check pipe state, then no need to bind or start the
1113 * pipe
1115 if (src_mconfig->pipe->state != SKL_PIPE_STARTED)
1128 if (sink_mconfig->pipe->conn_type != SKL_PIPE_CONN_TYPE_FE)
1129 ret = skl_run_pipe(skl, sink_mconfig->pipe);
1137 * - Stop the pipe
1149 /* Stop the pipe */
1150 ret = skl_stop_pipe(skl, sink_mconfig->pipe);
1180 struct skl_pipe *s_pipe = mconfig->pipe;
1227 skl_delete_pipe(skl, mconfig->pipe);
1240 * - In source pipe is connected, unbind with source pipelines
1250 /* Stop the pipe since this is a mixin module */
1251 ret = skl_stop_pipe(skl, src_mconfig->pipe);
1274 * second one is required that is created as another pipe entity.
1275 * The mixer is responsible for pipe management and represent a pipeline
1334 struct skl_pipe *pipe = NULL;
1347 if (ppl->pipe->ppl_id == *pipe_id) {
1348 pipe = ppl->pipe;
1352 if (!pipe)
1356 skl_tplg_set_pipe_config_idx(pipe, ucontrol->value.enumerated.item[0]);
1358 ucontrol->value.enumerated.item[0] = pipe->cur_config_idx;
1563 struct skl_pipe *pipe = mcfg->pipe;
1565 if (pipe->passthru) {
1568 pipe->p_params->link_dma_id = params->link_dma_id;
1569 pipe->p_params->link_index = params->link_index;
1570 pipe->p_params->link_bps = params->link_bps;
1574 pipe->p_params->host_dma_id = params->host_dma_id;
1575 pipe->p_params->host_bps = params->host_bps;
1581 pipe->p_params->s_fmt = params->s_fmt;
1582 pipe->p_params->ch = params->ch;
1583 pipe->p_params->s_freq = params->s_freq;
1584 pipe->p_params->stream = params->stream;
1585 pipe->p_params->format = params->format;
1588 memcpy(pipe->p_params, params, sizeof(*params));
1605 u8 cfg_idx = mconfig->pipe->cur_config_idx;
1640 dev_err(dev, "Invalid bit depth %x for pipe\n",
1797 struct skl_pipe *pipe = mconfig->pipe;
1798 struct skl_pipe_params save = *pipe->p_params;
1810 *pipe->p_params = *params;
1815 dev_dbg(skl->dev, "%s using pipe config: %d\n", __func__, pipe->cur_config_idx);
1816 if (pipe->direction == SNDRV_PCM_STREAM_PLAYBACK)
1817 pipe_fmt = &pipe->configs[pipe->cur_config_idx].out_fmt;
1819 pipe_fmt = &pipe->configs[pipe->cur_config_idx].in_fmt;
1826 pipe->direction, dev_type);
1841 *pipe->p_params = save;
1943 struct skl_pipe *pipe, u32 tkn,
1951 fmt = &pipe->configs[conf_idx].in_fmt;
1955 fmt = &pipe->configs[conf_idx].out_fmt;
1963 config = &pipe->configs[conf_idx];
1991 struct skl_pipe *pipe, u32 tkn,
1997 pipe->conn_type = tkn_val;
2001 pipe->pipe_priority = tkn_val;
2005 pipe->memory_pages = tkn_val;
2009 pipe->lp_mode = tkn_val;
2013 pipe->direction = tkn_val;
2017 pipe->nr_cfgs = tkn_val;
2030 * Return an existing pipe if the pipe already exists.
2037 struct skl_pipe *pipe;
2041 if (ppl->pipe->ppl_id == tkn_elem->value) {
2042 mconfig->pipe = ppl->pipe;
2051 pipe = devm_kzalloc(dev, sizeof(*pipe), GFP_KERNEL);
2052 if (!pipe)
2059 pipe->p_params = params;
2060 pipe->ppl_id = tkn_elem->value;
2061 INIT_LIST_HEAD(&pipe->w_list);
2063 ppl->pipe = pipe;
2066 mconfig->pipe = pipe;
2067 mconfig->pipe->state = SKL_PIPE_INVALID;
2476 ret = skl_tplg_fill_pipe_tkn(dev, mconfig->pipe,
2488 if (mconfig->pipe->nr_cfgs) {
2489 ret = skl_tplg_fill_pipe_cfg(dev, mconfig->pipe,
2698 struct skl_pipe *pipe;
2702 if (ppl->pipe->ppl_id == dfw_pipe->pipe_id) {
2703 mconfig->pipe = ppl->pipe;
2712 pipe = devm_kzalloc(dev, sizeof(*pipe), GFP_KERNEL);
2713 if (!pipe)
2720 pipe->ppl_id = dfw_pipe->pipe_id;
2721 pipe->memory_pages = dfw_pipe->memory_pages;
2722 pipe->pipe_priority = dfw_pipe->pipe_priority;
2723 pipe->conn_type = dfw_pipe->conn_type;
2724 pipe->state = SKL_PIPE_INVALID;
2725 pipe->p_params = params;
2726 INIT_LIST_HEAD(&pipe->w_list);
2728 ppl->pipe = pipe;
2731 mconfig->pipe = pipe;
2804 ret = skl_tplg_add_pipe_v4(dev, mconfig, skl, &dfw->pipe);
2941 struct skl_pipe *pipe;
2946 pipe = mconfig->pipe;
2955 pipe->state = SKL_PIPE_INVALID;
3655 * A pipe can have multiple modules, each of them will be a DAPM widget as
3665 struct skl_pipe *pipe;
3670 pipe = mcfg->pipe;
3678 list_add_tail(&p_module->node, &pipe->w_list);
3685 static void skl_tplg_set_pipe_type(struct skl_dev *skl, struct skl_pipe *pipe)
3692 list_for_each_entry(w_module, &pipe->w_list, node) {
3703 pipe->passthru = true;
3705 pipe->passthru = false;
3751 dev_err(bus->dev, "tplg create pipe widget list failed%d\n",
3757 skl_tplg_set_pipe_type(skl, ppl->pipe);