unsigned long overclock_pll;
unsigned long overclock_dac;
unsigned long overclock_dsp;
+ int lrclk_div;
};
/*
int fssp;
int gpio;
- lrclk_div = snd_soc_params_to_frame_size(params);
+ if (pcm512x->lrclk_div)
+ lrclk_div = pcm512x->lrclk_div;
+ else
+ lrclk_div = snd_soc_params_to_frame_size(params);
if (lrclk_div == 0) {
dev_err(dev, "No LRCLK?\n");
return -EINVAL;
return 0;
}
+static int pcm512x_set_tdm_slot(struct snd_soc_dai *dai,
+ unsigned int tx_mask, unsigned int rx_mask,
+ int slots, int width)
+{
+ struct snd_soc_component *component = dai->component;
+ struct pcm512x_priv *pcm512x = snd_soc_component_get_drvdata(component);
+
+ switch (slots) {
+ case 0:
+ pcm512x->lrclk_div = 0;
+ return 0;
+ case 2:
+ if (tx_mask != 0x03 || rx_mask != 0x03)
+ return -EINVAL;
+ pcm512x->lrclk_div = slots * width;
+ return 0;
+ default:
+ return -EINVAL;
+ }
+}
+
static const struct snd_soc_dai_ops pcm512x_dai_ops = {
.startup = pcm512x_dai_startup,
.hw_params = pcm512x_hw_params,
.set_fmt = pcm512x_set_fmt,
+ .set_tdm_slot = pcm512x_set_tdm_slot,
};
static struct snd_soc_dai_driver pcm512x_dai = {