Resent this because of losing attached file. On Fri, Jan 10, 2014 at 10:32:52AM +0800, Nicolin Chen wrote: > On Thu, Jan 09, 2014 at 06:44:53PM +0000, Mark Brown wrote: > > On Thu, Jan 09, 2014 at 06:57:58PM +0800, Nicolin Chen wrote: > > > > > +/** > > > + * This function configures the ratio between MCLK (HCK) and BCLK (SCK) > > > + * (For DAI Master Mode only) > > > + * > > > + * Note: Machine driver should calculate the ratio to call this function. > > > + * Only effective after calling set_dai_sysclk() to set HCK direction. > > > + */ > > > +static int fsl_esai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio) > > > > Why does the machine driver have to do this by hand, being able to > > override is fine but having sensible defaults is easier? Or does it > > actually do that and the comment just needs updating? > > The divider part of ESAI is pretty complicated due to caring about three > configure bits - ETO, ETI, HCKD. (I've attached a diagram to this mail.) > So setting sysclk() alone is not enough to take care all the configurations. > That's why I designed these two interfaces at the first place. And it should > be hard to find a default situation. > > But there is one approach to omit this calling for machine driver is to do > the set_bclk_ratio() at this CPU DAI driver. And this might be a good idea > because we can then separate the settings between PLAYBACK and CAPTURE, even > though we might then need to check the Master or Slave state to apply the > settings accordingly. > > I'll try this idea in v3 if you feel it's plausible. > > > > + ret = devm_snd_soc_register_component(&pdev->dev, &fsl_esai_component, > > > + &fsl_esai_dai, 1); > > > + if (ret) { > > > + dev_err(&pdev->dev, "failed to register DAI: %d\n", ret); > > > + return ret; > > > + } > > > + > > > + ret = imx_pcm_dma_init(pdev); > > > + if (ret) > > > + dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret); > > > + > > > + /* Reset ESAI unit */ > > > + regmap_write(esai_priv->regmap, REG_ESAI_ECR, ESAI_ECR_ERST); > > > + > > > + /* > > > + * We need to enable ESAI so as to access some of its registers. > > > + * Otherwise, we would fail to dump regmap from user space. > > > + */ > > > + regmap_write(esai_priv->regmap, REG_ESAI_ECR, ESAI_ECR_ESAIEN); > > > > I would expect to see the hardware initialisation before we start > > registering with the core otherwise the core might start trying to run > > prior to the hardware being initialised. > > Will switch this initial code in v3 as your suggestion. > > Thank you, > Nicolin Chen
Attachment:
esai_div.jpg
Description: JPEG image