]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - sound/pci/asihpi/hpidspcd.c
Merge git://git.infradead.org/users/willy/linux-nvme
[karo-tx-linux.git] / sound / pci / asihpi / hpidspcd.c
index 71d32c868c9244e19160687922fb7c7fa86ca97c..456a758f04f6112ee7c75bf2a9c842cc711b70c3 100644 (file)
@@ -25,6 +25,7 @@ hotplug firmware loader from individual dsp code files
 #define SOURCEFILE_NAME "hpidspcd.c"
 #include "hpidspcd.h"
 #include "hpidebug.h"
+#include "hpi_version.h"
 
 struct dsp_code_private {
        /**  Firmware descriptor */
@@ -32,9 +33,6 @@ struct dsp_code_private {
        struct pci_dev *dev;
 };
 
-#define HPI_VER_DECIMAL ((int)(HPI_VER_MAJOR(HPI_VER) * 10000 + \
-           HPI_VER_MINOR(HPI_VER) * 100 + HPI_VER_RELEASE(HPI_VER)))
-
 /*-------------------------------------------------------------------*/
 short hpi_dsp_code_open(u32 adapter, void *os_data, struct dsp_code *dsp_code,
        u32 *os_error_code)
@@ -66,22 +64,25 @@ short hpi_dsp_code_open(u32 adapter, void *os_data, struct dsp_code *dsp_code,
        if ((header.type != 0x45444F43) ||      /* "CODE" */
                (header.adapter != adapter)
                || (header.size != firmware->size)) {
-               dev_printk(KERN_ERR, &dev->dev, "Invalid firmware file\n");
+               dev_printk(KERN_ERR, &dev->dev,
+                       "Invalid firmware header size %d != file %zd\n",
+                       header.size, firmware->size);
                goto error2;
        }
 
-       if ((header.version / 100 & ~1) != (HPI_VER_DECIMAL / 100 & ~1)) {
+       if ((header.version >> 9) != (HPI_VER >> 9)) {
+               /* Consider even and subsequent odd minor versions to be compatible */
                dev_printk(KERN_ERR, &dev->dev,
                        "Incompatible firmware version "
-                       "DSP image %d != Driver %d\n", header.version,
-                       HPI_VER_DECIMAL);
+                       "DSP image %X != Driver %X\n", header.version,
+                       HPI_VER);
                goto error2;
        }
 
-       if (header.version != HPI_VER_DECIMAL) {
-               dev_printk(KERN_WARNING, &dev->dev,
-                       "Firmware: release version mismatch  DSP image %d != Driver %d\n",
-                       header.version, HPI_VER_DECIMAL);
+       if (header.version != HPI_VER) {
+               dev_printk(KERN_INFO, &dev->dev,
+                       "Firmware: release version mismatch  DSP image %X != Driver %X\n",
+                       header.version, HPI_VER);
        }
 
        HPI_DEBUG_LOG(DEBUG, "dsp code %s opened\n", fw_name);
@@ -108,11 +109,8 @@ error1:
 /*-------------------------------------------------------------------*/
 void hpi_dsp_code_close(struct dsp_code *dsp_code)
 {
-       if (dsp_code->pvt->firmware) {
-               HPI_DEBUG_LOG(DEBUG, "dsp code closed\n");
-               release_firmware(dsp_code->pvt->firmware);
-               dsp_code->pvt->firmware = NULL;
-       }
+       HPI_DEBUG_LOG(DEBUG, "dsp code closed\n");
+       release_firmware(dsp_code->pvt->firmware);
        kfree(dsp_code->pvt);
 }