On Sat, 03 Oct 2015 04:34:24 +0200, Takashi Sakamoto wrote:
Hi,
On Oct 13 2015 03:47, Clemens Ladisch wrote:
Takashi Iwai wrote:
kbuild test robot wrote:
sound/firewire/tascam/tascam.c:23:16: sparse: cast to restricted __be32
23 data = be32_to_cpu(fw_dev->config_rom[28]);
The code itself looks correct. data is CPU endian. The problem looks rather like that fw_dev->config_rom[] is u32.
Stefan, can it be changed to __be32 instead?
config_rom[] is CPU endian, too.
Strings should be read with fw_csr_string().
The function is designed for IEEE 1212 compliant config ROM. On the other hand, config ROMs of these models are not fully compliant. See:
http://sourceforge.net/p/linux1394/mailman/message/33899800/
Currently, this driver supports just two models. These two models have similar structure in their config ROM, fortunately. Thus, it's reasonable for the driver to get information in hard-coded position of config ROM.
About using 'be32_to_cpu()', the 'config_rom' member actually has 'const u32 *', while in the member caracters in the textual leaf are aligned in big-endian. I selected the simplest way to pick it up.
If it's preferrable to suppress the sparse warnings, I don't mind to replace these codes with the other ways.
Maybe introducing a macro would make things clearer. It's better than open-coding at each place, in anyway.
Takashi