mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
ASoC: rockchip: multicodecs: add tdm support
Signed-off-by: XiaoTan Luo <lxt@rock-chips.com> Change-Id: I7fccc0ad5214399b0354899f2a5f81b2f16161b7
This commit is contained in:
@@ -76,6 +76,10 @@ struct multicodecs_data {
|
||||
const struct adc_keys_button *map;
|
||||
struct input_dev *input;
|
||||
struct input_dev_poller *poller;
|
||||
int slots;
|
||||
int slot_width;
|
||||
unsigned int tx_slot_mask;
|
||||
unsigned int rx_slot_mask;
|
||||
};
|
||||
|
||||
static const unsigned int headset_extcon_cable[] = {
|
||||
@@ -399,7 +403,9 @@ static int rk_dailink_init(struct snd_soc_pcm_runtime *rtd)
|
||||
struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(rtd->card);
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
struct snd_soc_jack *jack_headset;
|
||||
int ret, irq;
|
||||
struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
|
||||
struct snd_soc_dai *codec_dai;
|
||||
int ret, irq, i;
|
||||
struct snd_soc_jack_pin *pins;
|
||||
struct snd_soc_jack_zone *zones;
|
||||
struct snd_soc_jack_pin jack_pins[] = {
|
||||
@@ -427,6 +433,30 @@ static int rk_dailink_init(struct snd_soc_pcm_runtime *rtd)
|
||||
}
|
||||
};
|
||||
|
||||
if (mc_data->slots) {
|
||||
ret = snd_soc_dai_set_tdm_slot(cpu_dai,
|
||||
mc_data->tx_slot_mask,
|
||||
mc_data->rx_slot_mask,
|
||||
mc_data->slots,
|
||||
mc_data->slot_width);
|
||||
if (ret && ret != -EOPNOTSUPP) {
|
||||
dev_err(card->dev, "cpu_dai: set_tdm_slot error\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
for_each_rtd_codec_dais(rtd, i, codec_dai) {
|
||||
ret = snd_soc_dai_set_tdm_slot(codec_dai,
|
||||
mc_data->tx_slot_mask,
|
||||
mc_data->rx_slot_mask,
|
||||
mc_data->slots,
|
||||
mc_data->slot_width);
|
||||
if (ret && ret != -EOPNOTSUPP) {
|
||||
dev_err(card->dev, "codec_dai: set_tdm_slot error\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((!mc_data->codec_hp_det) && (gpiod_to_irq(mc_data->hp_det_gpio) < 0)) {
|
||||
dev_info(card->dev, "Don't need to map headset detect gpio to irq\n");
|
||||
return 0;
|
||||
@@ -804,6 +834,15 @@ static int rk_multicodecs_probe(struct platform_device *pdev)
|
||||
|
||||
mc_data->dai_link[0].platforms->of_node = mc_data->dai_link[0].cpus->of_node;
|
||||
|
||||
ret = snd_soc_of_parse_tdm_slot(np,
|
||||
&mc_data->tx_slot_mask,
|
||||
&mc_data->rx_slot_mask,
|
||||
&mc_data->slots,
|
||||
&mc_data->slot_width);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "snd_soc_of_parse_tdm_slot failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
asrc_np = of_parse_phandle(np, "rockchip,asrc", 0);
|
||||
if (asrc_np) {
|
||||
mc_data->dai_link[1].cpus->of_node = asrc_np;
|
||||
|
||||
Reference in New Issue
Block a user