Re: [alsa-devel] [PATCH v3 4/5] ASoC: tda998x: adjust the audio hwparameters from EDID

From: Lars-Peter Clausen
Date: Wed Feb 05 2014 - 13:21:29 EST


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


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/