unsigned int data_width;
unsigned int mclk_rate;
unsigned int dma_bus_width;
+ int channels;
int ret;
dev->samplerate = params_rate(params);
}
data_width = params_width(params);
-
- dev->pcmclk = 2 * dev->samplerate * data_width;
+ channels = params_channels(params);
+ dev->pcmclk = channels * dev->samplerate * data_width;
switch (params_format(params)) {
-/*
- case SNDRV_PCM_FORMAT_S8:
- chan_wl = TDM_8BIT_WORD_LEN;
- chan_sl = TDM_8BIT_SLOT_LEN;
- dma_bus_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
- break;
-*/
-
case SNDRV_PCM_FORMAT_S16_LE:
chan_wl = TDM_16BIT_WORD_LEN;
chan_sl = TDM_16BIT_SLOT_LEN;
dma_bus_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
break;
- /* There is a issue with 24-bit */
+ /* There are some issue with 24-bit and 32-bit */
/*
case SNDRV_PCM_FORMAT_S24_LE:
chan_wl = TDM_24BIT_WORD_LEN;
chan_sl = TDM_32BIT_SLOT_LEN;
dma_bus_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
break;
-*/
case SNDRV_PCM_FORMAT_S32_LE:
chan_wl = TDM_32BIT_WORD_LEN;
chan_sl = TDM_32BIT_SLOT_LEN;
dma_bus_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
break;
+*/
default:
dev_err(dev->dev, "tdm: unsupported PCM fmt");
chan_nr = params_channels(params);
switch (chan_nr) {
+ case ONE_CHANNEL_SUPPORT:
case TWO_CHANNEL_SUPPORT:
case FOUR_CHANNEL_SUPPORT:
case SIX_CHANNEL_SUPPORT:
.id = 0,
.playback = {
.stream_name = "Playback",
- .channels_min = 2,
+ .channels_min = 1,
.channels_max = 8,
.rates = SF_TDM_RATES,
- .formats = SF_TDM_FORMATS,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
},
.capture = {
.stream_name = "Capture",
- .channels_min = 2,
+ .channels_min = 1,
.channels_max = 8,
.rates = SF_TDM_RATES,
- .formats = SF_TDM_FORMATS,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
},
.ops = &sf_tdm_dai_ops,
.probe = sf_tdm_dai_probe,