+ /*
+ * Prepare formats mask for valid/allowed sample types. If the dma does
+ * not have support for the given physical word size, it needs to be
+ * masked out so user space can not use the format which produces
+ * corrupted audio.
+ * In case the dma driver does not implement the slave_caps the default
+ * assumption is that it supports 1, 2 and 4 bytes widths.
+ */
+ for (i = 0; i <= SNDRV_PCM_FORMAT_LAST; i++) {
+ int bits = snd_pcm_format_physical_width(i);
Better to add a negative value check. Some formats return -EINVAL.
+
+ /* Enable only samples with DMA supported physical widths */
+ if (addr_widths & BIT(bits / 8))
Just nitpicking: Using BIT() for 32bit int isn't always a wise choice
since BIT() is defined as unsigned long. This is a generic problem,
though, as we see many codes using BIT() wrongly (and thus get
compiler warnings on 64bit machines). We should introduce a new macro
for 32bit int...