mirror of https://github.com/thesofproject/sof.git
dai: overwrite hardware frame_fmt parameter with private frame_fmt
Overwrite frame_fmt hardware parameters with DAI private frame_fmt in dai_comp_get_hw_params() function as DAI component is able to convert stream with different frame_fmt's Signed-off-by: Bartosz Kokoszko <bartoszx.kokoszko@linux.intel.com>
This commit is contained in:
parent
3609fa6fc6
commit
01b41286fd
|
@ -171,6 +171,7 @@ static struct comp_dev *dai_new(const struct comp_driver *drv,
|
||||||
}
|
}
|
||||||
|
|
||||||
dma_sg_init(&dd->config.elem_array);
|
dma_sg_init(&dd->config.elem_array);
|
||||||
|
dd->frame_fmt = ipc_dai->config.frame_fmt;
|
||||||
dd->dai_pos = NULL;
|
dd->dai_pos = NULL;
|
||||||
dd->dai_pos_blks = 0;
|
dd->dai_pos_blks = 0;
|
||||||
dd->xrun = 0;
|
dd->xrun = 0;
|
||||||
|
@ -202,8 +203,9 @@ static void dai_free(struct comp_dev *dev)
|
||||||
rfree(dev);
|
rfree(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dai_comp_get_hw_params(struct comp_dev *dev,
|
static inline int dai_comp_get_hw_params(struct comp_dev *dev,
|
||||||
struct sof_ipc_stream_params *params, int dir)
|
struct sof_ipc_stream_params *params,
|
||||||
|
int dir)
|
||||||
{
|
{
|
||||||
struct dai_data *dd = comp_get_drvdata(dev);
|
struct dai_data *dd = comp_get_drvdata(dev);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -217,6 +219,15 @@ static int dai_comp_get_hw_params(struct comp_dev *dev,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dai_comp_get_hw_params() function fetches hardware dai parameters,
|
||||||
|
* which then are propagating back through the pipeline, so that any
|
||||||
|
* component can convert specific stream parameter. Here, we overwrite
|
||||||
|
* frame_fmt hardware parameter as DAI component is able to convert
|
||||||
|
* stream with different frame_fmt's (using pcm converter)
|
||||||
|
*/
|
||||||
|
if (dd->frame_fmt)
|
||||||
|
params->frame_fmt = dd->frame_fmt;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +373,6 @@ static int dai_capture_params(struct comp_dev *dev, uint32_t period_bytes,
|
||||||
static int dai_params(struct comp_dev *dev,
|
static int dai_params(struct comp_dev *dev,
|
||||||
struct sof_ipc_stream_params *params)
|
struct sof_ipc_stream_params *params)
|
||||||
{
|
{
|
||||||
struct sof_ipc_comp_config *dconfig = dev_comp_config(dev);
|
|
||||||
struct dai_data *dd = comp_get_drvdata(dev);
|
struct dai_data *dd = comp_get_drvdata(dev);
|
||||||
uint32_t frame_size;
|
uint32_t frame_size;
|
||||||
uint32_t period_count;
|
uint32_t period_count;
|
||||||
|
@ -424,8 +434,6 @@ static int dai_params(struct comp_dev *dev,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
dd->frame_fmt = dconfig->frame_fmt;
|
|
||||||
|
|
||||||
/* calculate frame size */
|
/* calculate frame size */
|
||||||
frame_size = frame_bytes(dd->frame_fmt,
|
frame_size = frame_bytes(dd->frame_fmt,
|
||||||
dd->local_buffer->stream.channels);
|
dd->local_buffer->stream.channels);
|
||||||
|
@ -757,6 +765,7 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config)
|
||||||
* all formats, such as 8/16/24/32 bits.
|
* all formats, such as 8/16/24/32 bits.
|
||||||
*/
|
*/
|
||||||
dconfig->frame_fmt = SOF_IPC_FRAME_S32_LE;
|
dconfig->frame_fmt = SOF_IPC_FRAME_S32_LE;
|
||||||
|
dd->frame_fmt = dconfig->frame_fmt;
|
||||||
|
|
||||||
dd->config.burst_elems =
|
dd->config.burst_elems =
|
||||||
dd->dai->plat_data.fifo[dai->direction].depth;
|
dd->dai->plat_data.fifo[dai->direction].depth;
|
||||||
|
|
Loading…
Reference in New Issue