Messages in this thread | | | Date | Wed, 05 Feb 2014 19:21:23 +0100 | From | Lars-Peter Clausen <> | Subject | Re: [alsa-devel] [PATCH v3 4/5] ASoC: tda998x: adjust the audio hw parameters from EDID |
| |
On 02/05/2014 07:07 PM, Jean-Francois Moine wrote: > On Wed, 05 Feb 2014 10:19:22 +0100 > Lars-Peter Clausen <lars@metafoo.de> wrote: > >>> So, in the CODEC, I don't see how I could update the parameters >>> dictated by the EDID otherwise in changing the DAI driver parameters. >>> >> >> The startup function is the right place. But instead of modifying the DAI >> use snd_pcm_hw_constraint_mask64(), snd_pcm_hw_constraint_list(), etc. to >> setup the additional constraints that come from the EDID. > > It is more complicated, but it works. Nevertheless, I have 2 problems: > > - snd_pcm_hw_constraint_list() keeps a pointer to the list, so, it > cannot be in the stack. It fix this with static struct and rate array. >
Right. If the struct is modified though it should be per device and not global. I think the best way to implement this is to make the array static and specify a mask for the constraint based on the EDID. E.g.
static unsigned int hdmi_rates[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, };
rate_mask = 0;
while (...) { ... rate_mask |= 1 << sad[1]; }
rate_constraints->list = hdmi_rates; rate_constraints->count = ARRAY_SIZE(hdmi_rates); rate_constraints->mask = rate_mask;
> - snd_pcm_hw_constraint_mask64() is not exported. > Is there an other way to set constraints on the formats/sample widths?
I think that's a bug. Both snd_pcm_hw_constraint_mask() and snd_pcm_hw_constraint_mask64() should be exported. Can you send a patch?
- Lars
| |