mirror of https://github.com/thesofproject/sof.git
topology: intel: add generic Bluetooth audio offload pipeline
Make BT offload m4 generic for platforms that supports it. User needs to provide id number for pipe/link/pcm and hw config. I2S config for BT SCO: 16 bit samples, 1 slot TDM, no padding 19.2Mhz MCLK, 256/128kHz BCLK, 16/8kHz fsync Frame-sync length 1 cycle ("DSP_A" mode) Codec clk in primary mode For BT A2DP: 16 bit samples, DSP_A protocol 2 slot TDM, no padding 38.4Mhz MCLK, 1.536Mhz BCLK, 48kHz fsync Codec clk in secondary mode Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Signed-off-by: Jaska Uimonen <jaska.uimonen@linux.intel.com> Signed-off-by: Yong Zhi <yong.zhi@intel.com>
This commit is contained in:
parent
e81c25eab7
commit
5fc21b6fb7
|
@ -0,0 +1,80 @@
|
|||
#
|
||||
# Bluetooth Audio Offload support
|
||||
#
|
||||
|
||||
include(`ssp.m4')
|
||||
|
||||
# define default SSP port
|
||||
ifdef(`SSP_INDEX',`',
|
||||
`define(SSP_INDEX, `2')')
|
||||
|
||||
define(`SCO_MCLK', 19200000)
|
||||
define(`SSP_NAME', concat(concat(`SSP', SSP_INDEX),`-BT'))
|
||||
|
||||
# variable that need to be defined in upper m4
|
||||
ifdef(`BT_PIPELINE_PB_ID',`',`fatal_error(note: Need to define playback pcm id for intel-generic-bt
|
||||
)')
|
||||
ifdef(`BT_PIPELINE_CP_ID',`',`fatal_error(note: Need to define capture pcm id for intel-generic-bt
|
||||
)')
|
||||
ifdef(`BT_DAI_LINK_ID',`',`fatal_error(note: Need to define DAI link id for intel-generic-bt
|
||||
)')
|
||||
ifdef(`BT_PCM_ID',`',`fatal_error(note: Need to define pipeline PCM dev id for intel-generic-bt
|
||||
)')
|
||||
ifdef(`HW_CONFIG_ID',`',`fatal_error(note: Need to define hw_conf_id for intel-generic-bt
|
||||
)')
|
||||
|
||||
define(`CHANNELS_MIN', 1)
|
||||
|
||||
# Support 8K/16K mono and 48K stereo playback
|
||||
PIPELINE_PCM_ADD(sof/pipe-passthrough-playback.m4,
|
||||
BT_PIPELINE_PB_ID, BT_PCM_ID, 2, s16le,
|
||||
1000, 0, 0,
|
||||
8000, 48000, 48000)
|
||||
|
||||
# We are done
|
||||
undefine(`CHANNELS_MIN')
|
||||
|
||||
# Support 8K/16K mono capture only
|
||||
PIPELINE_PCM_ADD(sof/pipe-passthrough-capture.m4,
|
||||
BT_PIPELINE_CP_ID, BT_PCM_ID, 1, s16le,
|
||||
1000, 0, 0,
|
||||
8000, 16000, 48000)
|
||||
|
||||
# playback DAI is SSP2 using 2 periods
|
||||
# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
|
||||
DAI_ADD(sof/pipe-dai-playback.m4,
|
||||
BT_PIPELINE_PB_ID, SSP, SSP_INDEX, SSP_NAME,
|
||||
concat(`PIPELINE_SOURCE_', BT_PIPELINE_PB_ID), 2, s16le,
|
||||
1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
|
||||
|
||||
# capture DAI is SSP2 using 2 periods
|
||||
# Buffers use s16le format, with 48 frame per 1000us on core 0 with priority 0
|
||||
DAI_ADD(sof/pipe-dai-capture.m4,
|
||||
BT_PIPELINE_CP_ID, SSP, SSP_INDEX, SSP_NAME,
|
||||
concat(`PIPELINE_SINK_', BT_PIPELINE_CP_ID), 1, s16le,
|
||||
1000, 0, 0, SCHEDULE_TIME_DOMAIN_TIMER)
|
||||
|
||||
PCM_DUPLEX_ADD(Bluetooth, BT_PCM_ID, concat(`PIPELINE_PCM_', BT_PIPELINE_PB_ID), concat(`PIPELINE_PCM_', BT_PIPELINE_CP_ID))
|
||||
|
||||
define(`hwconfig_names', HW_CONFIG_NAMES(LIST(` ', "hw_config1", "hw_config2", "hw_config3")))
|
||||
define(`data_names', DAI_DATA_NAMES(LIST(` ', "ssp_data1", "ssp_data2", "ssp_data3")))
|
||||
|
||||
# Note WB is put as default in the list
|
||||
define(`ssp_config_list_1', LIST(`',
|
||||
`MULTI_SSP_CONFIG(hw_config1, HW_CONFIG_ID, DSP_A, SSP_CLOCK(mclk, SCO_MCLK, codec_mclk_in),'
|
||||
`SSP_CLOCK(bclk, 256000, codec_master, inverted),'
|
||||
`SSP_CLOCK(fsync, 16000, codec_master),'
|
||||
`SSP_TDM(1, 16, 1, 1),'
|
||||
`SSP_MULTI_CONFIG_DATA(ssp_data1, 16))',
|
||||
`MULTI_SSP_CONFIG(hw_config2, eval(HW_CONFIG_ID + 1), DSP_A, SSP_CLOCK(mclk, SCO_MCLK, codec_mclk_in),'
|
||||
`SSP_CLOCK(bclk, 128000, codec_master, inverted),'
|
||||
`SSP_CLOCK(fsync, 8000, codec_master),'
|
||||
`SSP_TDM(1, 16, 1, 1),'
|
||||
`SSP_MULTI_CONFIG_DATA(ssp_data2, 16))',
|
||||
`MULTI_SSP_CONFIG(hw_config3, eval(HW_CONFIG_ID + 2), DSP_A, SSP_CLOCK(mclk, eval(SCO_MCLK * 2), codec_mclk_in),'
|
||||
`SSP_CLOCK(bclk, 1536000, codec_slave),'
|
||||
`SSP_CLOCK(fsync, 48000, codec_slave),'
|
||||
`SSP_TDM(2, 16, 3, 0),'
|
||||
`SSP_MULTI_CONFIG_DATA(ssp_data3, 16))'))
|
||||
|
||||
MULTI_DAI_CONFIG(SSP, SSP_INDEX, BT_DAI_LINK_ID, SSP_NAME, ssp_config_list_1, hwconfig_names, data_names)
|
Loading…
Reference in New Issue