[media] drxk: Improve the scu_command error message
authorMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 10 Jul 2011 16:25:48 +0000 (13:25 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 27 Jul 2011 20:55:51 +0000 (17:55 -0300)
Now, it outputs:

[10927.639641] drxk: SCU_RESULT_INVPAR while sending cmd 0x0203 with params:
[10927.646283] drxk: 02 00 00 00 10 00 07 00 03 02                    ..........

Better than ERROR -3. This happens with Terratec H5 firmware.

It adds 2 new error conditions, and something useful to track
what the heck is that.

I suspect that the scu_command is dependent on the firmware
revision.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/drxk_hard.c
drivers/media/dvb/frontends/drxk_hard.h

index bb8627ffae73edcd13d53058ae5a152fa64bcf75..5745f526f39165f17d2e611a1210b696cb17877e 100644 (file)
@@ -1521,6 +1521,8 @@ static int scu_command(struct drxk_state *state,
        unsigned long end;
        u8 buffer[34];
        int cnt = 0, ii;
+       const char *p;
+       char errname[30];
 
        dprintk(1, "\n");
 
@@ -1567,31 +1569,36 @@ static int scu_command(struct drxk_state *state,
 
                /* Check if an error was reported by SCU */
                err = (s16)result[0];
+               if (err >= 0)
+                       goto error;
 
-               /* check a few fixed error codes */
-               if (err == SCU_RESULT_UNKSTD) {
-                       printk(KERN_ERR "drxk: SCU_RESULT_UNKSTD\n");
-                       status = -EINVAL;
-                       goto error2;
-               } else if (err == SCU_RESULT_UNKCMD) {
-                       printk(KERN_ERR "drxk: SCU_RESULT_UNKCMD\n");
-                       status = -EINVAL;
-                       goto error2;
-               } else if (err < 0) {
-                       /*
-                        * here it is assumed that a nagative result means
-                        *  error, and positive no error
-                        */
-                       printk(KERN_ERR "drxk: %s ERROR: %d\n", __func__, err);
-                       status = -EINVAL;
-                       goto error2;
+               /* check for the known error codes */
+               switch (err) {
+               case SCU_RESULT_UNKCMD:
+                       p = "SCU_RESULT_UNKCMD";
+                       break;
+               case SCU_RESULT_UNKSTD:
+                       p = "SCU_RESULT_UNKSTD";
+                       break;
+               case SCU_RESULT_SIZE:
+                       p = "SCU_RESULT_SIZE";
+                       break;
+               case SCU_RESULT_INVPAR:
+                       p = "SCU_RESULT_INVPAR";
+                       break;
+               default: /* Other negative values are errors */
+                       sprintf(errname, "ERROR: %d\n", err);
+                       p = errname;
                }
+               printk(KERN_ERR "drxk: %s while sending cmd 0x%04x with params:", p, cmd);
+               print_hex_dump_bytes("drxk: ", DUMP_PREFIX_NONE, buffer, cnt);
+               status = -EINVAL;
+               goto error2;
        }
 
 error:
        if (status < 0)
                printk(KERN_ERR "drxk: Error %d on %s\n", status, __func__);
-
 error2:
        mutex_unlock(&state->mutex);
        return status;
index a20a19d9aff6d2a5df3718f10d1e6fd7c6a27d30..a05c32eecdcc7de893a297c6faf53b54324a040c 100644 (file)
@@ -20,6 +20,8 @@
 #define DRX_SCU_READY   0
 #define DRXK_MAX_WAITTIME (200)
 #define SCU_RESULT_OK      0
+#define SCU_RESULT_SIZE   -4
+#define SCU_RESULT_INVPAR -3
 #define SCU_RESULT_UNKSTD -2
 #define SCU_RESULT_UNKCMD -1