2012年5月23日 星期三

tlv320aic3110 codec driver 完成~~

花費了好久時間 , 終於完成 TLV320AIC3110 Codec Driver 了 !! 
整個結構很亂 , 不過按照下列的 Function 動作 , 把相對應的 Code  填寫完畢 , 
差不多就完成了 , 剩下的 DAPM 部分 , 我還不是很了解 , 我只將會用到的 Register 
用 amixer 的方式完成 , 其他進階的 Wadge 部份 , 我都先不去實作 , 等有需要再來
修補 !! 

 

 
soc_pcm_open()
{
    cpu_dai->driver->ops->startup()     => dabinci_mcaps_startup();
    platform->driver->ops->open()       => davinci_pcm_open();
    codec_dai->driver->ops->startup()   => aic3110_startup();
    rtd->dai_link->ops->startup()       =>
}

soc_pcm_hw_params()
{
    rtd->dai_link->ops->hw_params()     => evm_aic3110_hw_params()
                                            snd_soc_dai_set_fmt(codec_dai)          => aic3110_set_dai_fmt()
                                            snd_soc_dai_set_fmt(cpu_dai)            => davinci_mcasp_set_dai_fmt()
                                            snd_soc_dai_set_sysclk(codec_sysclk)    => aic3110_set_dai_sysclk()
                                       ???  snd_soc_dai_set_sysclk(cpu_sysclk)      =>

    codec_dai->driver->ops->hw_params() => aic3110_hw_params()
    cpu_dai->driver->ops->hw_params()   => davinci_mcasp_hw_params()
    platform->driver->ops->hw_params()  =>
}

soc_pcm_trigger()
{

    codec_dai->driver->ops->trigger()   => None.
    platform->driver->ops->trigger()    => davinci_pcm_trigger()
    cpu_dai->driver->ops->trigger()     => davinci_mcasp_trigger()
}


soc_pcm_prepare()
{
    rtd->dai_link->ops->prepare()       =>
    platform->driver->ops->prepare()    => davinci_pcm_prepare();
    codec_dai->driver->ops->prepare()   => None
    cpu_dai->driver->ops->prepare()     => None

}

soc_pcm_pointer()
{
    platform->driver->ops->pointer()    =>

    cpu_dai->driver->ops->delay()       =>
    codec_dai->driver->ops->delay       =>
    platform->driver->delay             =>
}