On 02/05/2014 07:07 PM, Jean-Francois Moine wrote:
On Wed, 05 Feb 2014 10:19:22 +0100
Lars-Peter Clausen <lars@xxxxxxxxxx> 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
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel