* Fixes in intel8x0.c
@ 2009-05-25 23:19 Pavel Hofman
2009-05-26 6:01 ` Takashi Iwai
0 siblings, 1 reply; 6+ messages in thread
From: Pavel Hofman @ 2009-05-25 23:19 UTC (permalink / raw)
To: alsa-devel; +Cc: Takashi Iwai
Hi,
while trying to dive into complexities of intel8x0.c I found the following:
static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
.....
Is it really supposed to be 41000, instead of 44100?
In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
struct ichdev *ichdev)
...
runtime->hw.rates = ichdev->pcm->rates;
The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
is defined
unsigned int rates[6]; /* see AC97_RATES_* defines */
I guess this way always rates[0] from the list is taken, unlike e.g. in
via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
It seems a bug to me, though I may be wrong of course.
Thanks and regards,
Pavel
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Fixes in intel8x0.c
2009-05-25 23:19 Fixes in intel8x0.c Pavel Hofman
@ 2009-05-26 6:01 ` Takashi Iwai
2009-05-26 8:09 ` Pavel Hofman
0 siblings, 1 reply; 6+ messages in thread
From: Takashi Iwai @ 2009-05-26 6:01 UTC (permalink / raw)
To: Pavel Hofman; +Cc: alsa-devel
At Tue, 26 May 2009 01:19:06 +0200,
Pavel Hofman wrote:
>
> Hi,
>
> while trying to dive into complexities of intel8x0.c I found the following:
>
> static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
> SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
> SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
> .....
>
> Is it really supposed to be 41000, instead of 44100?
Looks like so, judging from the patch Jaroslav wrote.
> In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
> struct ichdev *ichdev)
> ...
> runtime->hw.rates = ichdev->pcm->rates;
>
> The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
> is defined
>
> unsigned int rates[6]; /* see AC97_RATES_* defines */
>
> I guess this way always rates[0] from the list is taken, unlike e.g. in
> via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
41000 is the base clock. The actual rate written is
rate * clock / 48000
Normally the base clock is 48000. But some boards have a different
base clock and the rate has to be adjusted to match with that.
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Fixes in intel8x0.c
2009-05-26 6:01 ` Takashi Iwai
@ 2009-05-26 8:09 ` Pavel Hofman
2009-05-26 8:26 ` Takashi Iwai
0 siblings, 1 reply; 6+ messages in thread
From: Pavel Hofman @ 2009-05-26 8:09 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Takashi Iwai wrote:
> At Tue, 26 May 2009 01:19:06 +0200,
> Pavel Hofman wrote:
>> Hi,
>>
>> while trying to dive into complexities of intel8x0.c I found the following:
>>
>> static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
>> SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
>> SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
>> .....
>>
>> Is it really supposed to be 41000, instead of 44100?
>
> Looks like so, judging from the patch Jaroslav wrote.
>
>> In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
>> struct ichdev *ichdev)
>> ...
>> runtime->hw.rates = ichdev->pcm->rates;
>>
>> The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
>> is defined
>>
>> unsigned int rates[6]; /* see AC97_RATES_* defines */
>>
>> I guess this way always rates[0] from the list is taken, unlike e.g. in
>> via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
>
> 41000 is the base clock. The actual rate written is
>
> rate * clock / 48000
>
> Normally the base clock is 48000. But some boards have a different
> base clock and the rate has to be adjusted to match with that.
>
Takashi, thanks for your answer, 41000 is OK.
How about the second question regarding the assignment of rates field
being an array? I am remotely troubleshooting SPDIF output of Dell D600
which seems to be stuck at 48kHz (plughw always resamples to 48kHz, even
though the analog PCM accepts 44.1kHz. The above mentioned code is
related to this (not exactly the cause though.
Thanks a lot,
Pavel.
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Fixes in intel8x0.c
2009-05-26 8:09 ` Pavel Hofman
@ 2009-05-26 8:26 ` Takashi Iwai
2009-05-26 9:55 ` Pavel Hofman
0 siblings, 1 reply; 6+ messages in thread
From: Takashi Iwai @ 2009-05-26 8:26 UTC (permalink / raw)
To: Pavel Hofman; +Cc: alsa-devel
At Tue, 26 May 2009 10:09:57 +0200,
Pavel Hofman wrote:
>
> Takashi Iwai wrote:
> > At Tue, 26 May 2009 01:19:06 +0200,
> > Pavel Hofman wrote:
> >> Hi,
> >>
> >> while trying to dive into complexities of intel8x0.c I found the following:
> >>
> >> static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
> >> SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
> >> SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
> >> .....
> >>
> >> Is it really supposed to be 41000, instead of 44100?
> >
> > Looks like so, judging from the patch Jaroslav wrote.
> >
> >> In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
> >> struct ichdev *ichdev)
> >> ...
> >> runtime->hw.rates = ichdev->pcm->rates;
> >>
> >> The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
> >> is defined
> >>
> >> unsigned int rates[6]; /* see AC97_RATES_* defines */
> >>
> >> I guess this way always rates[0] from the list is taken, unlike e.g. in
> >> via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
> >
> > 41000 is the base clock. The actual rate written is
> >
> > rate * clock / 48000
> >
> > Normally the base clock is 48000. But some boards have a different
> > base clock and the rate has to be adjusted to match with that.
> >
>
> Takashi, thanks for your answer, 41000 is OK.
>
> How about the second question regarding the assignment of rates field
> being an array? I am remotely troubleshooting SPDIF output of Dell D600
> which seems to be stuck at 48kHz (plughw always resamples to 48kHz, even
> though the analog PCM accepts 44.1kHz. The above mentioned code is
> related to this (not exactly the cause though.
I don't see any problem in the code. Are you sure that it's really related?
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Fixes in intel8x0.c
2009-05-26 8:26 ` Takashi Iwai
@ 2009-05-26 9:55 ` Pavel Hofman
2009-05-26 9:57 ` Takashi Iwai
0 siblings, 1 reply; 6+ messages in thread
From: Pavel Hofman @ 2009-05-26 9:55 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
Takashi Iwai wrote:
> At Tue, 26 May 2009 10:09:57 +0200,
> Pavel Hofman wrote:
>> Takashi Iwai wrote:
>>> At Tue, 26 May 2009 01:19:06 +0200,
>>> Pavel Hofman wrote:
>>>> Hi,
>>>>
>>>> while trying to dive into complexities of intel8x0.c I found the following:
>>>>
>>>> static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
>>>> SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
>>>> SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
>>>> .....
>>>>
>>>> Is it really supposed to be 41000, instead of 44100?
>>> Looks like so, judging from the patch Jaroslav wrote.
>>>
>>>> In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
>>>> struct ichdev *ichdev)
>>>> ...
>>>> runtime->hw.rates = ichdev->pcm->rates;
>>>>
>>>> The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
>>>> is defined
>>>>
>>>> unsigned int rates[6]; /* see AC97_RATES_* defines */
>>>>
>>>> I guess this way always rates[0] from the list is taken, unlike e.g. in
>>>> via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
>>> 41000 is the base clock. The actual rate written is
>>>
>>> rate * clock / 48000
>>>
>>> Normally the base clock is 48000. But some boards have a different
>>> base clock and the rate has to be adjusted to match with that.
>>>
>> Takashi, thanks for your answer, 41000 is OK.
>>
>> How about the second question regarding the assignment of rates field
>> being an array? I am remotely troubleshooting SPDIF output of Dell D600
>> which seems to be stuck at 48kHz (plughw always resamples to 48kHz, even
>> though the analog PCM accepts 44.1kHz. The above mentioned code is
>> related to this (not exactly the cause though.
>
> I don't see any problem in the code. Are you sure that it's really related?
Sorry, my fault, I confused ac97_pcm with snd_ac97.
Thanks,
Pavel.
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: Fixes in intel8x0.c
2009-05-26 9:55 ` Pavel Hofman
@ 2009-05-26 9:57 ` Takashi Iwai
0 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2009-05-26 9:57 UTC (permalink / raw)
To: Pavel Hofman; +Cc: alsa-devel
At Tue, 26 May 2009 11:55:05 +0200,
Pavel Hofman wrote:
>
> Takashi Iwai wrote:
> > At Tue, 26 May 2009 10:09:57 +0200,
> > Pavel Hofman wrote:
> >> Takashi Iwai wrote:
> >>> At Tue, 26 May 2009 01:19:06 +0200,
> >>> Pavel Hofman wrote:
> >>>> Hi,
> >>>>
> >>>> while trying to dive into complexities of intel8x0.c I found the following:
> >>>>
> >>>> static struct snd_pci_quirk intel8x0_clock_list[] __devinitdata = {
> >>>> SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000),
> >>>> SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100),
> >>>> .....
> >>>>
> >>>> Is it really supposed to be 41000, instead of 44100?
> >>> Looks like so, judging from the patch Jaroslav wrote.
> >>>
> >>>> In static int snd_intel8x0_pcm_open(struct snd_pcm_substream *substream,
> >>>> struct ichdev *ichdev)
> >>>> ...
> >>>> runtime->hw.rates = ichdev->pcm->rates;
> >>>>
> >>>> The pcm field in ichdev is snd_ac97, while the rates field in snd_ac97
> >>>> is defined
> >>>>
> >>>> unsigned int rates[6]; /* see AC97_RATES_* defines */
> >>>>
> >>>> I guess this way always rates[0] from the list is taken, unlike e.g. in
> >>>> via82xx.c: runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
> >>> 41000 is the base clock. The actual rate written is
> >>>
> >>> rate * clock / 48000
> >>>
> >>> Normally the base clock is 48000. But some boards have a different
> >>> base clock and the rate has to be adjusted to match with that.
> >>>
> >> Takashi, thanks for your answer, 41000 is OK.
> >>
> >> How about the second question regarding the assignment of rates field
> >> being an array? I am remotely troubleshooting SPDIF output of Dell D600
> >> which seems to be stuck at 48kHz (plughw always resamples to 48kHz, even
> >> though the analog PCM accepts 44.1kHz. The above mentioned code is
> >> related to this (not exactly the cause though.
> >
> > I don't see any problem in the code. Are you sure that it's really related?
>
> Sorry, my fault, I confused ac97_pcm with snd_ac97.
Well, actually it's a part of snd_ac97_codec module.
The logic in ac97_pcm.c is somewhat different from via82xx.c and others,
and is more complex due to the slog assignment mechanism.
(And actually SPDIF is limited only to 48k on many codecs, and the driver
behaves intentionally so.)
Takashi
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-05-26 9:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-25 23:19 Fixes in intel8x0.c Pavel Hofman
2009-05-26 6:01 ` Takashi Iwai
2009-05-26 8:09 ` Pavel Hofman
2009-05-26 8:26 ` Takashi Iwai
2009-05-26 9:55 ` Pavel Hofman
2009-05-26 9:57 ` Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.