struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec);
unsigned long flags;
int ret;
------ const struct firmware *fw;
struct spi_message m;
struct spi_transfer t;
struct dfw_pllrec pll_rec;
wm0010->state = WM0010_OUT_OF_RESET;
spin_unlock_irqrestore(&wm0010->irq_lock, flags);
------ /* First the bootloader */
------ ret = request_firmware(&fw, "wm0010_stage2.bin", codec->dev);
------ if (ret != 0) {
------ dev_err(codec->dev, "Failed to request stage2 loader: %d\n",
------ ret);
------ goto abort;
------ }
------
if (!wait_for_completion_timeout(&wm0010->boot_completion,
msecs_to_jiffies(20)))
dev_err(codec->dev, "Failed to get interrupt from DSP\n");
img_swap = kzalloc(len, GFP_KERNEL | GFP_DMA);
if (!img_swap)
------ goto abort;
++++++ goto abort_out;
/* We need to re-order for 0010 */
byte_swap_64((u64 *)&pll_rec, img_swap, len);
spi_message_add_tail(&t, &m);
ret = spi_sync(spi, &m);
------ if (ret != 0) {
++++++ if (ret) {
dev_err(codec->dev, "First PLL write failed: %d\n", ret);
------ goto abort;
++++++ goto abort_swap;
}
/* Use a second send of the message to get the return status */
ret = spi_sync(spi, &m);
------ if (ret != 0) {
++++++ if (ret) {
dev_err(codec->dev, "Second PLL write failed: %d\n", ret);
------ goto abort;
++++++ goto abort_swap;
}
p = (u32 *)out;
return 0;
++++++ abort_swap:
++++++ kfree(img_swap);
++++++ abort_out:
++++++ kfree(out);
abort:
/* Put the chip back into reset */
wm0010_halt(codec);
trigger = IRQF_TRIGGER_FALLING;
trigger |= IRQF_ONESHOT;
- ret = request_threaded_irq(irq, NULL, wm0010_irq, trigger | IRQF_ONESHOT,
+ ret = request_threaded_irq(irq, NULL, wm0010_irq, trigger,
"wm0010", wm0010);
if (ret) {
dev_err(wm0010->dev, "Failed to request IRQ %d: %d\n",
static struct spi_driver wm0010_spi_driver = {
.driver = {
.name = "wm0010",
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = wm0010_spi_probe,