Other Parts Discussed in Thread:TAS5805M
你好:
我正在使用tas5805m,平台是MTK8516. 现在5805m已经可以驱动喇叭发出声音了。我想在驱动中加上设置I2S采样率和数据长度的接口。但加上后PA输出没有声音。想知道从哪方面查找原因。
我加的代码如下:
1.增加hw_params接口。
static const struct snd_soc_dai_ops tas5805m_dai_ops = {
.digital_mute = tas5805m_mute,
.hw_params = tas5808m_hw_params,
};
static struct snd_soc_dai_driver tas5805m_dai = {
.name = "tas5805m ASI1",
.playback = {
.stream_name = "Playback",
.channels_min = 2,
.channels_max = 2,
.rates = TAS5805M_RATES,
.formats = TAS5805M_FORMATS,
},
.ops = &tas5805m_dai_ops,
};
2. 再 tas5808m_hw_params实现设置数据宽度和I2S采样率
static int tas5808m_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{
……
tas5805m_set_bitwidth(….)
……
tas5805m_set_samplerate(….)
……
}
3.设置数据宽度函数的实现
static int tas5805m_set_bitwidth(struct tas5805m_priv *tas5805m, int bitwidth)
{
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_00, 0xFF, TAS5805M_PAGE_00);
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_7F, 0xFF, TAS5805M_BOOK_00);
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_00, 0xFF, TAS5805M_PAGE_00);
switch (bitwidth) {
case SNDRV_PCM_FORMAT_S32_LE:
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_33, \
TAS5808M_REG33_WORDLEN32_Mask, TAS5808M_IIS_DATA_32BIT);
break;
……
default:
printk("Not supported params format\n");
return -EINVAL;
}
return 0;
}
4.设置采样率函数的实现
static int tas5805m_set_samplerate(struct tas5805m_priv *tas5805m, int samplerate)
{
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_00, 0xFF, TAS5805M_PAGE_00);
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_7F, 0xFF, TAS5805M_BOOK_00);
regmap_update_bits(tas5805m->regmap, TAS5805M_REG_00, 0xFF, TAS5805M_PAGE_00);
switch (samplerate) {
case 48000:
regmap_update_bits(tas5805m->regmap,\
TAS5805M_REG_28,\
TAS5808M_REG28_FS_MODE_Mask,\
TAS5808M_REG28_FS_MODE_48K);
break;
……
}
Amy Luo:
您好,
感谢您对TI产品的关注!TAS5805M的采样率和数据长度分别可以在Register 40和Register 51设置,关于增加设置接口的功能,我想您应该寻求MTK公司的技术支持