>-----Original Message-----
>From: Robin Getz [mailto:[email protected]] 
>Sent: Tuesday, September 29, 2009 1:04 AM
>To: Cai, Cliff
>Cc: [email protected]
>Subject: Re: [Linux-kernel-commits] [7448] trunk/sound/soc: 
>task[#5443]addADAU1371 support
>
>On Sun 27 Sep 2009 04:56, Cai, Cliff pondered:
>> >-----Original Message-----
>> >From: Robin Getz [mailto:[email protected]]
>
>[snip] - thanks for the feedback.
>
>> >> +/* PLL settings coefficients, add more here... */ static
>> >const struct
>> >> +_pll_settings pll_settings[] = {
>> >> + /* 96k */
>> >> + /* {12288000, 96000, 0, 0, 0x0, 0x8, 0x0}, */
>> >> + /* 88.2k */
>> >> + /* {12288000, 88200, 20, 7, 0x0, 0x7, 0x1}, */
>> >> + /* 48k */
>> >> + {12288000, 48000, 0, 0, 0x0, 0x4, 0x0},
>> >> + /* 44.1k */
>> >> + {12288000, 44100,  40, 27, 0x0, 0x3, 0x1},
>> >> + {11289600, 44100, 0, 0, 0x0, 0x4, 0x0},
>> >> + /* 22.050k */
>> >> + {12288000, 22050,  40, 27, 0x1, 0x3, 0x1},
>> >> + {11289600, 22050, 0, 0, 0x0, 0x2, 0x0},
>> >> + /* 8k */
>> >> + /* {12288000, 8000, 3, 2, 0x3, 0x2, 0x1}, */
>> >> +
>> >> +};
>> >
>> >Don't these need to be calculated - as they depend on the crystal 
>> >input?
>> >
>> 
>> The rates commented can't be got through PLL Currently,and Yao Wei 
>> said he will check it with me once he is free.
>
>I wasn't concerned about the commented out versions - my 
>comment was that the pll_settings[] are used to directly write 
>into the codec (in
>adau1371_hw_params() ).
>
>struct _pll_settings {
>        u32 mclk;
>        u32 rate;
>        u16 n;  /* N and M registers are inverted on REVB */
>        u16 m;
>        u8 input_div:2;
>        u8 integer:4;
>        u8 type:1;
>
>The value for 48k:
>
>{12288000, 48000, 0, 0, 0x0, 0x4, 0x0}
>
>mclk changes depending on what CLKIN (clk) is - doesn't it?
>
>It appears that in:
>
>../blackfin/bf5xx-adau1371.c:bf5xx_adau1371_hw_params it does:
>
> /* Change input crystal source here */
>        unsigned int clk = 12288000;
>        snd_soc_dai_set_sysclk(codec_dai, 0, clk, 0);
>
>which is:
>     dai->ops->set_sysclk(codec_dai, 0, clk, 0);
>
>which is (based on the fops)
>
>adau1371_set_dai_sysclk(codec_dai, 0, clk, 0);
>
>which sets adau1371->sysclk
>
>which is used in adau1371_hw_params():
>
>  get_coeff(adau1371->sysclk, params_rate(params));
>
>so, rather than calculate things based on the sysclk at run 
>time, it is doing a lookup on static/pre-calculated values....???
>
>doesn't n and m need to be determined at run time?

There maybe several parameter sets (m,n,input_div,integer,type) suited
for one combination of mclk and rate.
And I'm not sure if any one of these parameter sets would work,the safe
way is setting up a lookup table
And fill in the parameter set that is proven to work.  

Cliff
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to