The patch I posted leaves SND_CS46XX_NEW_DSP broken. Because I have neither rear speakers nor an S/PDIF capable amplifier, and the newer firmware consists of multiple structures and so is more difficult to load, I don't currently intend to work on that.
One trap with the patch is that it converts the endianness in place. With Linux 2.6.24, this works because request_firmware() always makes a fresh copy. However if a reference count is later added to struct firmware, this scheme will break. I see that <linux/firmware.h> makes the struct firmware const but not the bytes to which its "data" member points; might it be inferred From this that the data is intended to be modified by drivers? When testing the patch, I had linux-image-2.6.24-1-686 2.6.24-3 running. I then unpacked the corresponding sources, made the changes, ran make -f debian/rules.gen binary-arch_i386_none_686, and loaded the generated cs46xx.ko without rebooting; the interfaces between modules remain compatible. With earlier versions of the linux-2.6 source, building all the binary packages has taken 11 to 22 hours here, so calling debian/rules.gen directly was a huge timesaver. If this shortcut is documented, I don't know where. The patch assumes the binary firmware image is little-endian, and converts it to host byte order. Personally, I prefer to have a fixed format for each data file so that they can be freely shared between architectures. I chose little-endian u32 here because that was easiest for me to output. I did not bother to implement the proper conversions in the write_images program though. If that source code is going to be added to an Architecture: any package, then both word-size and endianness conversions should be implemented. The original cwcealdr1.zip/cwcimage.h does not include the definition of struct BA1struct, so I suppose there wouldn't be any problem in ripping it out again and instead providing (in the #including file) a definition that has u32 in the place of unsigned long. Alternatively, the driver could be changed to assume that the firmware is already in a host-specific format. If Cirrus Logic grants permission to distribute the cs46xx firmware included in the upstream Linux sources, will that suffice for SND_CS46XX_NEW_DSP too, or will separate permission be needed from the author of sound/pci/cs46xx/imgs/cwcdma.asp?
pgpFrbkI7pDaU.pgp
Description: PGP signature