Skip to content

Commit

Permalink
ASoC: SigmaDSP: Provide diagnostic error messages
Browse files Browse the repository at this point in the history
Provide some error messages when loading the firmware fails, so it is possible
to diagnose the reason for the failure.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Lars-Peter Clausen authored and Mark Brown committed Nov 29, 2011
1 parent 40216ce commit 48afc52
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions sound/soc/codecs/sigmadsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,18 +124,25 @@ int process_sigma_firmware(struct i2c_client *client, const char *name)
* purposes and having the limit makes it easier to avoid integer
* overflows later in the loading process.
*/
if (fw->size < sizeof(*ssfw_head) || fw->size >= 0x4000000)
if (fw->size < sizeof(*ssfw_head) || fw->size >= 0x4000000) {
dev_err(&client->dev, "Failed to load firmware: Invalid size\n");
goto done;
}

ssfw_head = (void *)fw->data;
if (memcmp(ssfw_head->magic, SIGMA_MAGIC, ARRAY_SIZE(ssfw_head->magic)))
if (memcmp(ssfw_head->magic, SIGMA_MAGIC, ARRAY_SIZE(ssfw_head->magic))) {
dev_err(&client->dev, "Failed to load firmware: Invalid magic\n");
goto done;
}

crc = crc32(0, fw->data + sizeof(*ssfw_head),
fw->size - sizeof(*ssfw_head));
pr_debug("%s: crc=%x\n", __func__, crc);
if (crc != le32_to_cpu(ssfw_head->crc))
if (crc != le32_to_cpu(ssfw_head->crc)) {
dev_err(&client->dev, "Failed to load firmware: Wrong crc checksum: expected %x got %x\n",
le32_to_cpu(ssfw_head->crc), crc);
goto done;
}

ssfw.pos = sizeof(*ssfw_head);

Expand Down

0 comments on commit 48afc52

Please sign in to comment.