Merge tag 'omap-for-v3.17/soc-fixes' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / drivers / scsi / ch.c
index 2a32374..ef5ae0d 100644 (file)
@@ -84,15 +84,19 @@ static const char * vendor_labels[CH_TYPES-4] = {
 };
 // module_param_string_array(vendor_labels, NULL, 0444);
 
+#define ch_printk(prefix, ch, fmt, a...) \
+       sdev_printk(prefix, (ch)->device, "[%s] " fmt, \
+                   (ch)->name, ##a)
+
 #define DPRINTK(fmt, arg...)                                           \
 do {                                                                   \
        if (debug)                                                      \
-               printk(KERN_DEBUG "%s: " fmt, ch->name, ##arg);         \
+               ch_printk(KERN_DEBUG, ch, fmt, ##arg);                  \
 } while (0)
 #define VPRINTK(level, fmt, arg...)                                    \
 do {                                                                   \
        if (verbose)                                                    \
-               printk(level "%s: " fmt, ch->name, ##arg);              \
+               ch_printk(level, ch, fmt, ##arg);                       \
 } while (0)
 
 /* ------------------------------------------------------------------- */
@@ -196,7 +200,7 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd,
                __scsi_print_command(cmd);
        }
 
-        result = scsi_execute_req(ch->device, cmd, direction, buffer,
+       result = scsi_execute_req(ch->device, cmd, direction, buffer,
                                  buflength, &sshdr, timeout * HZ,
                                  MAX_RETRIES, NULL);
 
@@ -247,7 +251,7 @@ ch_read_element_status(scsi_changer *ch, u_int elem, char *data)
  retry:
        memset(cmd,0,sizeof(cmd));
        cmd[0] = READ_ELEMENT_STATUS;
-       cmd[1] = (ch->device->lun << 5) |
+       cmd[1] = ((ch->device->lun & 0x7) << 5) |
                (ch->voltags ? 0x10 : 0) |
                ch_elem_to_typecode(ch,elem);
        cmd[2] = (elem >> 8) & 0xff;
@@ -283,7 +287,7 @@ ch_init_elem(scsi_changer *ch)
        VPRINTK(KERN_INFO, "INITIALIZE ELEMENT STATUS, may take some time ...\n");
        memset(cmd,0,sizeof(cmd));
        cmd[0] = INITIALIZE_ELEMENT_STATUS;
-       cmd[1] = ch->device->lun << 5;
+       cmd[1] = (ch->device->lun & 0x7) << 5;
        err = ch_do_scsi(ch, cmd, NULL, 0, DMA_NONE);
        VPRINTK(KERN_INFO, "... finished\n");
        return err;
@@ -303,7 +307,7 @@ ch_readconfig(scsi_changer *ch)
 
        memset(cmd,0,sizeof(cmd));
        cmd[0] = MODE_SENSE;
-       cmd[1] = ch->device->lun << 5;
+       cmd[1] = (ch->device->lun & 0x7) << 5;
        cmd[2] = 0x1d;
        cmd[4] = 255;
        result = ch_do_scsi(ch, cmd, buffer, 255, DMA_FROM_DEVICE);
@@ -428,7 +432,7 @@ ch_position(scsi_changer *ch, u_int trans, u_int elem, int rotate)
                trans = ch->firsts[CHET_MT];
        memset(cmd,0,sizeof(cmd));
        cmd[0]  = POSITION_TO_ELEMENT;
-       cmd[1]  = ch->device->lun << 5;
+       cmd[1]  = (ch->device->lun & 0x7) << 5;
        cmd[2]  = (trans >> 8) & 0xff;
        cmd[3]  =  trans       & 0xff;
        cmd[4]  = (elem  >> 8) & 0xff;
@@ -447,7 +451,7 @@ ch_move(scsi_changer *ch, u_int trans, u_int src, u_int dest, int rotate)
                trans = ch->firsts[CHET_MT];
        memset(cmd,0,sizeof(cmd));
        cmd[0]  = MOVE_MEDIUM;
-       cmd[1]  = ch->device->lun << 5;
+       cmd[1]  = (ch->device->lun & 0x7) << 5;
        cmd[2]  = (trans >> 8) & 0xff;
        cmd[3]  =  trans       & 0xff;
        cmd[4]  = (src   >> 8) & 0xff;
@@ -470,7 +474,7 @@ ch_exchange(scsi_changer *ch, u_int trans, u_int src,
                trans = ch->firsts[CHET_MT];
        memset(cmd,0,sizeof(cmd));
        cmd[0]  = EXCHANGE_MEDIUM;
-       cmd[1]  = ch->device->lun << 5;
+       cmd[1]  = (ch->device->lun & 0x7) << 5;
        cmd[2]  = (trans >> 8) & 0xff;
        cmd[3]  =  trans       & 0xff;
        cmd[4]  = (src   >> 8) & 0xff;
@@ -518,7 +522,7 @@ ch_set_voltag(scsi_changer *ch, u_int elem,
                elem, tag);
        memset(cmd,0,sizeof(cmd));
        cmd[0]  = SEND_VOLUME_TAG;
-       cmd[1] = (ch->device->lun << 5) |
+       cmd[1] = ((ch->device->lun & 0x7) << 5) |
                ch_elem_to_typecode(ch,elem);
        cmd[2] = (elem >> 8) & 0xff;
        cmd[3] = elem        & 0xff;
@@ -754,7 +758,7 @@ static long ch_ioctl(struct file *file,
        voltag_retry:
                memset(ch_cmd, 0, sizeof(ch_cmd));
                ch_cmd[0] = READ_ELEMENT_STATUS;
-               ch_cmd[1] = (ch->device->lun << 5) |
+               ch_cmd[1] = ((ch->device->lun & 0x7) << 5) |
                        (ch->voltags ? 0x10 : 0) |
                        ch_elem_to_typecode(ch,elem);
                ch_cmd[2] = (elem >> 8) & 0xff;
@@ -924,8 +928,8 @@ static int ch_probe(struct device *dev)
                                  MKDEV(SCSI_CHANGER_MAJOR, ch->minor), ch,
                                  "s%s", ch->name);
        if (IS_ERR(class_dev)) {
-               printk(KERN_WARNING "ch%d: device_create failed\n",
-                      ch->minor);
+               sdev_printk(KERN_WARNING, sd, "ch%d: device_create failed\n",
+                           ch->minor);
                ret = PTR_ERR(class_dev);
                goto remove_idr;
        }