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             =>
}

2012年4月26日 星期四

mDDR2 Problem .... Solved

之前,我們的mDDR 200 一直有問題沒有辦法Initial ,今天終於在FAE幫忙下解決了!!
有兩個Register 設定值不對,這兩個值在所有文件上還找不到說明,真是.......

2012年4月3日 星期二

tlv320aic3110 codec driver potting!!

解決USB問題後,下—個困難的是CODEC...
目前先找找看有沒有現有的driver 然後用修改的方式比較容易:-)

2012年4月2日 星期一

g_mass_storage driver for windows 7 !!

上星期 ㄊㄨ、 了一個星期,還是沒有辦法法解決 win 7 下 Luns=2 卻只連接ㄧ個Device 的問題!
今天總算被我解開了!!
先解釋ㄧ下 bug 狀況, 使用 BSP Build 出來的g_mass_storage.ko 和 modprobe g_mass_storage luns=2 remoable=1 stall=0 file=/dev/mmc/mmcblk1p1,/dev/mmc/mmcblk0p1
指令來掛載 kernel module !
結果,在Fedora Host 兩個都可以正確Access ! 但是,如果換成Windows 7 的時候,嘿嘿,就是只能看到 第一個Device (mmcblk1p1 ) !!
首先可以到 Win7 的 Mass Driver 中去觀看Driver的訊息 , 例如下圖 可以看到 USB/PID/VID & VER , 和 sub class 狀態 !! 確定 Device descriptor 都沒有傳輸錯誤 !!

重點是下列的圖 ,可發現 "裝置例項路徑" , "匯流排關係" , "上層" & "下層" 中最後一段都是亂碼 (紅色圈起部分 ) !!

發現 , Win 7 對於這樣亂碼的內容好像沒有辦法支援Luns=2 的狀況 , 所以更改 modprobe 指令為
modprobe g_mass_storage iSerialNumber=12345 luns=2 remoable=1 stall=0 file=/dev/mmc/mmcblk1p1,/dev/mmc/mmcblk0p1
得到結果如下 :

上圖 , 可以發現 VID/PID , Class type 都沒有更動 !!

上圖可以發現 , "裝置例項路徑" , "匯流排關係" & "下層" 資料中 , 都用標準的字元 "12345" 來取代 , 並且在最後用 "&1" or "&0" 來標示 device 0 & 1 !!
所以.....給Win 7 的序號需要標準的字元 , 不要含代一些其他字元 , 這樣就可以解決這個 bug 了 !!
這個 bog bug花費我... 一星期多的時間 , 一直懷疑 SCSI Command 傳輸有問題 , 在要放棄修正這個 bug 前...想到 , 會不會是 win 7 沒有正確收到 Luns=2 這個 參數 , 才找到原來是不起眼的Serial Number格式問題 !!




2012年3月24日 星期六

Project Starting .......

農曆過完年後開使進行AM335X  CPU 的 Porting !
之前 Samsung Porting 過程都沒有記錄,所以這次我想記錄在Bolgger中 。