git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
drivers
/
usb
/
image
/
microtek.c
diff --git
a/drivers/usb/image/microtek.c
b/drivers/usb/image/microtek.c
index
7d21a4f
..
2a0e18a
100644
(file)
--- a/
drivers/usb/image/microtek.c
+++ b/
drivers/usb/image/microtek.c
@@
-160,7
+160,6
@@
static void mts_usb_disconnect(struct usb_interface *intf);
static struct usb_device_id mts_usb_ids [];
static struct usb_driver mts_usb_driver = {
static struct usb_device_id mts_usb_ids [];
static struct usb_driver mts_usb_driver = {
- .owner = THIS_MODULE,
.name = "microtekX6",
.probe = mts_usb_probe,
.disconnect = mts_usb_disconnect,
.name = "microtekX6",
.probe = mts_usb_probe,
.disconnect = mts_usb_disconnect,
@@
-327,6
+326,18
@@
static inline void mts_urb_abort(struct mts_desc* desc) {
usb_kill_urb( desc->urb );
}
usb_kill_urb( desc->urb );
}
+static int mts_slave_alloc (struct scsi_device *s)
+{
+ s->inquiry_len = 0x24;
+ return 0;
+}
+
+static int mts_slave_configure (struct scsi_device *s)
+{
+ blk_queue_dma_alignment(s->request_queue, (512 - 1));
+ return 0;
+}
+
static int mts_scsi_abort (Scsi_Cmnd *srb)
{
struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]);
static int mts_scsi_abort (Scsi_Cmnd *srb)
{
struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]);
@@
-349,7
+360,7
@@
static int mts_scsi_host_reset (Scsi_Cmnd *srb)
rc = usb_lock_device_for_reset(desc->usb_dev, desc->usb_intf);
if (rc < 0)
return FAILED;
rc = usb_lock_device_for_reset(desc->usb_dev, desc->usb_intf);
if (rc < 0)
return FAILED;
- result = usb_reset_device(desc->usb_dev);
;
+ result = usb_reset_device(desc->usb_dev);
if (rc)
usb_unlock_device(desc->usb_dev);
return result ? FAILED : SUCCESS;
if (rc)
usb_unlock_device(desc->usb_dev);
return result ? FAILED : SUCCESS;
@@
-361,8
+372,7
@@
int mts_scsi_queuecommand (Scsi_Cmnd *srb, mts_scsi_cmnd_callback callback );
static void mts_transfer_cleanup( struct urb *transfer );
static void mts_do_sg(struct urb * transfer, struct pt_regs *regs);
static void mts_transfer_cleanup( struct urb *transfer );
static void mts_do_sg(struct urb * transfer, struct pt_regs *regs);
-
-inline static
+static inline
void mts_int_submit_urb (struct urb* transfer,
int pipe,
void* data,
void mts_int_submit_urb (struct urb* transfer,
int pipe,
void* data,
@@
-412,7
+422,7
@@
static void mts_transfer_done( struct urb *transfer, struct pt_regs *regs )
MTS_INT_INIT();
context->srb->result &= MTS_SCSI_ERR_MASK;
MTS_INT_INIT();
context->srb->result &= MTS_SCSI_ERR_MASK;
- context->srb->result |= (unsigned)
context->status
<<1;
+ context->srb->result |= (unsigned)
(*context->scsi_status)
<<1;
mts_transfer_cleanup(transfer);
mts_transfer_cleanup(transfer);
@@
-428,7
+438,7
@@
static void mts_get_status( struct urb *transfer )
mts_int_submit_urb(transfer,
usb_rcvbulkpipe(context->instance->usb_dev,
context->instance->ep_response),
mts_int_submit_urb(transfer,
usb_rcvbulkpipe(context->instance->usb_dev,
context->instance->ep_response),
-
&context->
status,
+
context->scsi_
status,
1,
mts_transfer_done );
}
1,
mts_transfer_done );
}
@@
-482,7
+492,7
@@
static void mts_command_done( struct urb *transfer, struct pt_regs *regs )
context->data_pipe,
context->data,
context->data_length,
context->data_pipe,
context->data,
context->data_length,
- context->srb->use_sg ? mts_do_sg : mts_data_done);
+ context->srb->use_sg
> 1
? mts_do_sg : mts_data_done);
} else {
mts_get_status(transfer);
}
} else {
mts_get_status(transfer);
}
@@
-628,12
+638,11
@@
int mts_scsi_queuecommand( Scsi_Cmnd *srb, mts_scsi_cmnd_callback callback )
callback(srb);
}
callback(srb);
}
-
out:
return err;
}
out:
return err;
}
-static
Scsi_Host_T
emplate mts_scsi_host_template = {
+static
struct scsi_host_t
emplate mts_scsi_host_template = {
.module = THIS_MODULE,
.name = "microtekX6",
.proc_name = "microtekX6",
.module = THIS_MODULE,
.name = "microtekX6",
.proc_name = "microtekX6",
@@
-646,6
+655,9
@@
static Scsi_Host_Template mts_scsi_host_template = {
.cmd_per_lun = 1,
.use_clustering = 1,
.emulated = 1,
.cmd_per_lun = 1,
.use_clustering = 1,
.emulated = 1,
+ .slave_alloc = mts_slave_alloc,
+ .slave_configure = mts_slave_configure,
+ .max_sectors= 256, /* 128 K */
};
struct vendor_product
};
struct vendor_product
@@
-662,7
+674,7
@@
struct vendor_product
/* These are taken from the msmUSB.inf file on the Windows driver CD */
/* These are taken from the msmUSB.inf file on the Windows driver CD */
-
const static
struct vendor_product mts_supported_products[] =
+
static const
struct vendor_product mts_supported_products[] =
{
{ "Phantom 336CX", mts_sup_unknown},
{ "Phantom 336CX", mts_sup_unknown},
{
{ "Phantom 336CX", mts_sup_unknown},
{ "Phantom 336CX", mts_sup_unknown},
@@
-772,17
+784,20
@@
static int mts_usb_probe(struct usb_interface *intf,
MTS_WARNING( "couldn't find an output bulk endpoint. Bailing out.\n" );
return -ENODEV;
}
MTS_WARNING( "couldn't find an output bulk endpoint. Bailing out.\n" );
return -ENODEV;
}
-
-
- new_desc = k
m
alloc(sizeof(struct mts_desc), GFP_KERNEL);
+
+
+ new_desc = k
z
alloc(sizeof(struct mts_desc), GFP_KERNEL);
if (!new_desc)
goto out;
if (!new_desc)
goto out;
- memset(new_desc, 0, sizeof(*new_desc));
new_desc->urb = usb_alloc_urb(0, GFP_KERNEL);
if (!new_desc->urb)
goto out_kfree;
new_desc->urb = usb_alloc_urb(0, GFP_KERNEL);
if (!new_desc->urb)
goto out_kfree;
+ new_desc->context.scsi_status = kmalloc(1, GFP_KERNEL);
+ if (!new_desc->context.scsi_status)
+ goto out_kfree2;
+
new_desc->usb_dev = dev;
new_desc->usb_intf = intf;
init_MUTEX(&new_desc->lock);
new_desc->usb_dev = dev;
new_desc->usb_intf = intf;
init_MUTEX(&new_desc->lock);
@@
-819,6
+834,8
@@
static int mts_usb_probe(struct usb_interface *intf,
usb_set_intfdata(intf, new_desc);
return 0;
usb_set_intfdata(intf, new_desc);
return 0;
+ out_kfree2:
+ kfree(new_desc->context.scsi_status);
out_free_urb:
usb_free_urb(new_desc->urb);
out_kfree:
out_free_urb:
usb_free_urb(new_desc->urb);
out_kfree:
@@
-838,6
+855,7
@@
static void mts_usb_disconnect (struct usb_interface *intf)
scsi_host_put(desc->host);
usb_free_urb(desc->urb);
scsi_host_put(desc->host);
usb_free_urb(desc->urb);
+ kfree(desc->context.scsi_status);
kfree(desc);
}
kfree(desc);
}
@@
-858,5
+876,3
@@
module_exit(microtek_drv_exit);
MODULE_AUTHOR( DRIVER_AUTHOR );
MODULE_DESCRIPTION( DRIVER_DESC );
MODULE_LICENSE("GPL");
MODULE_AUTHOR( DRIVER_AUTHOR );
MODULE_DESCRIPTION( DRIVER_DESC );
MODULE_LICENSE("GPL");
-
-