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