-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

And now this. The computer doesn't hang all the time, but it does register the
device incorrectly:

When I put the drive back it, sometimes I get the right message (the first
message), but after a while I almost certainly get the second (wrong)
        Instead of:     input: Maxtor OneTouch on usb-0000:00:02.2-1
        I get:          input: <NULL> on usb-0000:00:02.2-1

        


Other times when unpluging the device I get this:

This is just a warning.  Your computer is OK
function=0x00000000, data=0x0
 [<c011add2>] check_timer_failed+0x3e/0x4a
 [<c011afa2>] del_timer+0x15/0x60
 [<c020e361>] input_unregister_device+0x1c/0xc1
 [<e0c3c6ca>] onetouch_release_input+0x1c/0x4e [usb_storage]
 [<e0c3be2a>] usb_stor_release_resources+0x4d/0x75 [usb_storage]
 [<e0c3c1d5>] storage_disconnect+0x74/0x80 [usb_storage]
 [<c02011b6>] usb_unbind_interface+0x36/0x65
 [<c01dd070>] device_release_driver+0x50/0x5c
 [<c01dd25d>] bus_remove_device+0x58/0x94
 [<c01dc4b6>] device_del+0x56/0x7a
 [<c0206a6e>] usb_disable_device+0x7a/0xec
 [<c0202c48>] usb_disconnect+0x93/0xec
 [<c02038a1>] hub_port_connect_change+0x56/0x2bf
 [<c0203d1f>] hub_events+0x215/0x2c1
 [<c0203dcb>] hub_thread+0x0/0xe4
 [<c0203de8>] hub_thread+0x1d/0xe4
 [<c0123c1d>] autoremove_wake_function+0x0/0x3a
 [<c01029a2>] ret_from_fork+0x6/0x14
 [<c0203dcb>] hub_thread+0x0/0xe4
 [<c0123c1d>] autoremove_wake_function+0x0/0x3a
 [<c010126d>] kernel_thread_helper+0x5/0xb
Unable to handle kernel NULL pointer dereference at virtual address 00000000
 printing eip:
c020e370
*pde = 00000000
Oops: 0000 [#1]
Modules linked in: usb_storage isofs udf binfmt_misc pcmcia firmware_class video
hotkey button battery container ac nvidia ipv6 yenta_socket rsrc_nonstatic
pcmcia_core 8139cp 8139too mii crc32 shpchp pci_hotplug sata_nv libata usbhid
snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd
soundcore snd_page_alloc ehci_hcd ohci_hcd dm_mod eeprom i2c_sensor i2c_nforce2
i2c_core parport_pc lp parport ide_cd psmouse ext3 jbd ide_disk ide_generic
via82cxxx trm290 triflex slc90e66 sis5513 siimage serverworks sc1200 rz1000 piix
pdc202xx_old opti621 ns87415 hpt366 hpt34x generic cy82c693 cs5530 cs5520 cmd64x
atiixp amd74xx alim15x3 aec62xx pdc202xx_new ide_core unix thermal processor fan
CPU:    0
EIP:    0060:[<c020e370>]    Tainted: P      VLI
EFLAGS: 00010213   (2.6.12-rc1-mm1.22032005)
EIP is at input_unregister_device+0x2b/0xc1
eax: cd49bf08   ebx: cd49b800   ecx: c02d2fd8   edx: 00000000
esi: 00000000   edi: cd49b8c0   ebp: de09a5e4   esp: dfef3e90
ds: 007b   es: 007b   ss: 0068
Process khubd (pid: 129, threadinfo=dfef2000 task=df99a540)
Stack: cd49b800 e0c41b00 e0c41b20 de09a5e4 e0c3c6ca cd49b8c0 c97f6340 ce3acec0
       e0c3be2a cd49b800 ce3acec0 e0c3c1d5 ce3acec0 cdc36cb8 cdc36c80 c02011b6
       cdc36c80 cdc36cb8 cdc36c94 c01dd070 cdc36c94 cdc36c94 c9f00c64 c9f00c00
Call Trace:
 [<e0c3c6ca>] onetouch_release_input+0x1c/0x4e [usb_storage]
 [<e0c3be2a>] usb_stor_release_resources+0x4d/0x75 [usb_storage]
 [<e0c3c1d5>] storage_disconnect+0x74/0x80 [usb_storage]
 [<c02011b6>] usb_unbind_interface+0x36/0x65
 [<c01dd070>] device_release_driver+0x50/0x5c
 [<c01dd25d>] bus_remove_device+0x58/0x94
 [<c01dc4b6>] device_del+0x56/0x7a
 [<c0206a6e>] usb_disable_device+0x7a/0xec
 [<c0202c48>] usb_disconnect+0x93/0xec
 [<c02038a1>] hub_port_connect_change+0x56/0x2bf
 [<c0203d1f>] hub_events+0x215/0x2c1
 [<c0203dcb>] hub_thread+0x0/0xe4
 [<c0203de8>] hub_thread+0x1d/0xe4
 [<c0123c1d>] autoremove_wake_function+0x0/0x3a
 [<c01029a2>] ret_from_fork+0x6/0x14
 [<c0203dcb>] hub_thread+0x0/0xe4
 [<c0123c1d>] autoremove_wake_function+0x0/0x3a
 [<c010126d>] kernel_thread_helper+0x5/0xb
Code: 55 57 56 53 8b 7c 24 14 85 ff 0f 84 ac 00 00 00 8d 87 98 00 00 00 50 e8 2c
cc f0 ff 8b b7 48 06 00 00 58 8d 87 48 06 00 00 39 c6 <8b> 2e 74 3d 8b 56 04 8b
06 8d 5e ec 89 50 04 89 02 89 76 04 8d

I'm a little lost... Any help?

Nick Sillik
[EMAIL PROTECTED]

Nick Sillik wrote:
> Well, I have a problem. This patch hangs the computer when the drive is 
> plugged
> in then unplugged.
> 
> Any Ideas where this is coming from?
> 
> Nick Sillik
> [EMAIL PROTECTED]
> 
> Nick Sillik wrote:
> 
>>>Here's the patch with those two changes, as well as the change to the min and
>>>max in unusual_devs.h that Sergey suggested. I also eliminated the encoding
>>>problem from the patch.
>>>
>>>Signed-off-by: Nick Sillik <[EMAIL PROTECTED]>
>>>
>>>Alan Stern wrote:
>>>
>>>
>>>>>On Tue, 22 Mar 2005, Nick Sillik wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>Well, I have attached the diff for linux-2.6.12-rc1-mm1 to this message. 
>>>>>>This
>>>>>>patch does cleanly compile. Take a look at it, if you like it apply it. 
>>>>>>If not,
>>>>>>I'll keep hacking. (I'll keep this bottle of champagne - which has been 
>>>>>>waiting
>>>>>>for a while - on ice.)
>>>>>
>>>>>
>>>>>This is looking pretty good.  There are still a few small items to clean
>>>>>up:
>>>>>
>>>>>
>>>>>+int onetouch_connect_input(struct us_data *ss)
>>>>>+{
>>>>>+  struct usb_device *udev = ss->pusb_dev;
>>>>>+  struct usb_onetouch *onetouch;
>>>>>+  char path[64];
>>>>>+
>>>>>+  if (udev->descriptor.idVendor != VENDOR_MAXTOR
>>>>>+      || udev->descriptor.idProduct != PRODUCT_ONETOUCH) {
>>>>>+          /* Not a onetouch device, nothing to see here */
>>>>>+          return 1;
>>>>>+  }
>>>>>
>>>>>This check isn't needed any more.  The function won't get called at all 
>>>>>unless the descriptors match as specified in the unusual_devs entry.
>>>>>
>>>>>
>>>>>+void onetouch_release_input(void *onetouch_)
>>>>>+{
>>>>>+  struct usb_onetouch *onetouch = (struct usb_onetouch *) onetouch_;
>>>>>+
>>>>>+  US_DEBUGP("device found: %s. Releasing\n", onetouch->phys);
>>>>>+  usb_unlink_urb(onetouch->irq);
>>>>>
>>>>>For the sake of thoroughness this call should be usb_kill_urb.
>>>>>
>>>>>
>>>>>--- linux-2.6.12-rc1-mm1/drivers/usb/storage/onetouch.h    1969-12-31 
>>>>>19:00:00.000000000 -0500
>>>>>+++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/onetouch.h   
>>>>>2005-03-22 20:00:03.000000000 -0500
>>>>>@@ -0,0 +1,12 @@
>>>>>+#ifndef _ONETOUCH_H_
>>>>>+#define _ONETOUCH_H_
>>>>>+
>>>>>+#define ONETOUCH_PKT_LEN        0x02
>>>>>+#define ONETOUCH_BUTTON         KEY_PROG1
>>>>>+#define VENDOR_MAXTOR           0x0d49
>>>>>+#define PRODUCT_ONETOUCH        0x7010
>>>>>name, 128, "Maxtor OneTouch");
> +
> +     set_bit(EV_KEY, onetouch->dev.evbit);
> +     set_bit(ONETOUCH_BUTTON, onetouch->dev.keybit);
> +     clear_bit(0, onetouch->dev.keybit);
> +
> +     input_register_device(&onetouch->dev);
> +
> +     printk(KERN_INFO "input: %s on %s\n", onetouch->dev.name, path);
> +
> +     return 0;
> +}
> +
> +void onetouch_release_input(void *onetouch_)
> +{
> +     struct usb_onetouch *onetouch = (struct usb_onetouch *) onetouch_;
kkkkkMkk  )
kkkkkPkk 
0)hkkk
kkSkk h k
kkk  
k     8
kk        /&
kk        r)
kk        R
kk               
kk        k
kk        %:
kk        
kk        R
kk        _     s,
kk        q@ -133,3 +133,16 @@
>         Say Y here to include additional code to support the Lexar Jumpshot
>         USB CompactFlash reader.
> 
> +config USB_STORAGE_ONETOUCH
> +        bool "Support OneTouch Button on Maxtor Hard Drives (EXPERIMENTAL)"
> +        depends on USB_STORAGE && INPUT_EVDEV && EXPERIMENTAL
> +        help
> +          Say Y here to include additional code to support the Maxtor 
> OneTouch
> +          USB hard drive's onetouch button.
> +
> +       This code registers the button on the front of Maxtor OneTouch USB
> +       hard drive's as an input device. An action can be associated with
> +       this input in any keybinding software. (e.g. gnome's keyboard short-
> +       cuts)
> +
> +
> diff -urN -X dontdiff linux-2.6.12-rc1-mm1/drivers/usb/storage/Makefile
> linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/Makefile
> --- linux-2.6.12-rc1-mm1/drivers/usb/storage/Makefile 2005-03-22
> 18:27:15.000000000 -0500
> +++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/Makefile        
> 2005-03-22
> 19:59:13.000000000 -0500
> @@ -18,6 +18,7 @@
>  usb-storage-obj-$(CONFIG_USB_STORAGE_ISD200) += isd200.o
>  usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB)        += datafab.o
>  usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT)       += jumpshot.o
> +usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH)       += onetouch.o
> 
>  usb-storage-objs :=  scsiglue.o protocol.o transport.o usb.o \
>                       initializers.o $(usb-storage-obj-y)
> diff -urN -X dontdiff linux-2.6.12-rc1-mm1/drivers/usb/storage/onetouch.c
> linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/onetouch.c
> --- linux-2.6.12-rc1-mm1/drivers/usb/storage/onetouch.c       1969-12-31
> 19:00:00.000000000 -0500
> +++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/onetouch.c      
> 2005-03-23
> 15:57:19.000000000 -0500
> @@ -0,0 +1,202 @@
> +/*
> + * Support for the Maxtor OneTouch USB hard drive's button
> + *
> + * Current development and maintenance by:
> + *   Copyright (c) 2005 Nick Sillik <[EMAIL PROTECTED]>
> + *
> + * Initial work by:
> + *   Copyright (c) 2003 Erik Thyrén <[EMAIL PROTECTED]>
> + *
> + * Based on usbmouse.c (Vojtech Pavlik) and xpad.c (Marko Friedemann)
> + *
> + */
> +
> +/*
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + *
> + */
> +
> +#include <linux/config.h>
> +#include <linux/kernel.h>
> +#include <linux/input.h>
> +#include <linux/init.h>
> +#include <linux/slab.h>
> +#include <linux/module.h>
> +#include <linux/usb.h>
> +#include "usb.h"
> +#include "onetouch.h"
> +#include "debug.h"
> +
> +void onetouch_release_input(void *onetouch_);
> +
> +struct usb_onetouch {
> +     char name[128];
> +     char phys[64];
> +     struct input_dev dev;   /* input device interface */
> +     struct usb_device *udev;        /* usb device */
> +
> +     struct urb *irq;        /* urb for interrupt in report */
> +     unsigned char *data;    /* input data */
> +     dma_addr_t data_dma;
> +
> +     int open_count;         /* reference count */
> +};
> +
> +static void onetouch_irq(struct urb *urb, struct pt_regs *regs)
> +{
> +     struct usb_onetouch *onetouch = urb->context;
> +     int retval;
> +
> +     switch (urb->status) {
> +     case 0:
> +             /* success */
> +             break;
> +     case -ECONNRESET:
> +     case -ENOENT:
> +     case -ESHUTDOWN:
> +             /* this urb is terminated, clean up */
> +             dbg("%s - urb shutting down with status: %d", __FUNCTION__,
> +                 urb->status);
> +             return;
> +     default:
> +             dbg("%s - nonzero urb status received: %d", __FUNCTION__,
> +                 urb->status);
> +             goto resubmit;
> +     }
> +
> +     input_regs(&onetouch->dev, regs);
> +     /*printk(KERN_INFO "input: %02x %02x\n", onetouch->data[0], 
> onetouch->data[1]); */
> +     input_report_key(&onetouch->dev, ONETOUCH_BUTTON,
> +                      onetouch->data[0] & 0x02);
> +
> +     input_sync(&onetouch->dev);
> +
> +      resubmit:
> +     retval = usb_submit_urb(urb, GFP_ATOMIC);
> +     if (retval)
> +             err("%s - usb_submit_urb failed with result %d",
> +                 __FUNCTION__, retval);
> +}
> +
> +static int onetouch_open(struct input_dev *dev)
> +{
> +     struct usb_onetouch *onetouch = dev->private;
> +
> +     if (onetouch->open_count++)
> +             return 0;
> +
> +     onetouch->irq->dev = onetouch->udev;
> +     if (usb_submit_urb(onetouch->irq, GFP_KERNEL)) {
> +             onetouch->open_count--;
> +             return -EIO;
> +     }
> +
> +     return 0;
> +}
> +
> +static void onetouch_close(struct input_dev *dev)
> +{
> +     struct usb_onetouch *onetouch = dev->private;
> +
> +     if (!--onetouch->open_count)
> +             usb_kill_urb(onetouch->irq);
> +}
> +
> +int onetouch_connect_input(struct us_data *ss)
> +{
> +     struct usb_device *udev = ss->pusb_dev;
> +     struct usb_onetouch *onetouch;
> +     char path[64];
> +
> +
> +     US_DEBUGP("Connecting OneTouch device\n");
> +
> +     onetouch = kmalloc(sizeof(struct usb_onetouch), GFP_KERNEL);
> +
> +     if (onetouch == NULL) {
> +             err("cannot allocate memory for new onetouch");
> +             return 1;
> +     }
> +     memset(onetouch, 0, sizeof(struct usb_onetouch));
> +
> +     onetouch->data = usb_buffer_alloc(udev, ONETOUCH_PKT_LEN,
> +                                       SLAB_ATOMIC,
> +                                       &onetouch->data_dma);
> +     if (!onetouch->data) {
> +             kfree(onetouch);
> +             return 1;
> +     }
> +
> +     onetouch->irq = usb_alloc_urb(0, GFP_KERNEL);
> +     if (!onetouch->irq) {
> +             err("cannot allocate memory for new onetouch interrupt urb");
> +             usb_buffer_free(udev, ONETOUCH_PKT_LEN, onetouch->data,
> +                             onetouch->data_dma);
> +             kfree(onetouch);
> +             return 1;
> +     }
> +
> +     ss->extra_destructor = onetouch_release_input;
> +     ss->extra = onetouch;
> +
> +     usb_fill_int_urb(onetouch->irq, udev,
> +                      ss->recv_intr_pipe,
> +                      onetouch->data, ONETOUCH_PKT_LEN, onetouch_irq,
> +                      onetouch, ss->ep_bInterval);
> +     onetouch->irq->transfer_dma = onetouch->data_dma;
> +     onetouch->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
> +
> +     onetouch->udev = udev;
> +
> +     onetouch->dev.id.bustype = BUS_USB;
> +     onetouch->dev.id.vendor = udev->descriptor.idVendor;
> +     onetouch->dev.id.product = udev->descriptor.idProduct;
> +     onetouch->dev.id.version = udev->descriptor.bcdDevice;
> +     onetouch->dev.private = onetouch;
> +     onetouch->dev.name = onetouch->name;
> +     onetouch->dev.phys = onetouch->phys;
> +     onetouch->dev.open = onetouch_open;
> +     onetouch->dev.close = onetouch_close;
> +
> +     usb_make_path(udev, path, 64);
> +     snprintf(onetouch->phys, 64, "%s/input0", path);
> +     snprintf(onetouch->name, 128,
> +              "%s %s", udev->manufacturer, udev->product);
> +     if (!strlen(onetouch->name))
> +             snprintf(onetouch->name, 128, "Maxtor OneTouch");
> +
> +     set_bit(EV_KEY, onetouch->dev.evbit);
> +     set_bit(ONETOUCH_BUTTON, onetouch->dev.keybit);
> +     clear_bit(0, onetouch->dev.keybit);
> +
> +     input_register_device(&onetouch->dev);
> +
> +     printk(KERN_INFO "input: %s on %s\n", onetouch->dev.name, path);
> +
> +     return 0;
> +}
> +
> +void onetouch_release_input(void *onetouch_)
> +{
> +     struct usb_onetouch *onetouch = (struct usb_onetouch *) onetouch_;
> +
> +     US_DEBUGP("device found: %s. Releasing\n", onetouch->phys);
> +     usb_kill_urb(onetouch->irq);
> +     input_unregister_device(&onetouch->dev);
> +     usb_free_urb(onetouch->irq);
> +     usb_buffer_free(onetouch->udev, ONETOUCH_PKT_LEN,
> +                     onetouch->data, onetouch->data_dma);
> +     kfree(onetouch);
> +}
> diff -urN -X dontdiff linux-2.6.12-rc1-mm1/drivers/usb/storage/onetouch.h
> linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/onetouch.h
> --- linux-2.6.12-rc1-mm1/drivers/usb/storage/onetouch.h       1969-12-31
> 19:00:00.000000000 -0500
> +++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/onetouch.h      
> 2005-03-23
> 15:51:51.000000000 -0500
> @@ -0,0 +1,9 @@
> +#ifndef _ONETOUCH_H_
> +#define _ONETOUCH_H_
> +
> +#define ONETOUCH_PKT_LEN        0x02
> +#define ONETOUCH_BUTTON         KEY_PROG1
> +
> +int onetouch_connect_input(struct us_data *ss);
> +
> +#endif
> diff -urN -X dontdiff linux-2.6.12-rc1-mm1/drivers/usb/storage/unusual_devs.h
> linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/unusual_devs.h
> --- linux-2.6.12-rc1-mm1/drivers/usb/storage/unusual_devs.h   2005-03-22
> 18:27:55.000000000 -0500
> +++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/unusual_devs.h  
> 2005-03-23
> 15:57:44.000000000 -0500
> @@ -991,3 +991,16 @@
>               US_SC_SCSI, US_PR_SDDR55, NULL,
>               US_FL_SINGLE_LUN),
>  #endif
> +
> +/* Submitted by: Nick Sillik <[EMAIL PROTECTED]>
> + * Needed for OneTouch extension to usb-storage
> + *
> + */
> +#ifdef CONFIG_USB_STORAGE_ONETOUCH
> +     UNUSUAL_DEV(  0x0d49, 0x7010, 0x0000, 0x0002,
> +                     "Maxtor",
> +                     "OneTouch External Harddrive",
> +                     US_SC_DEVICE, US_PR_DEVICE, onetouch_connect_input,
> +                     0),
> +#endif
> +     
> diff -urN -X dontdiff linux-2.6.12-rc1-mm1/drivers/usb/storage/usb.c
> linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/usb.c
> --- linux-2.6.12-rc1-mm1/drivers/usb/storage/usb.c    2005-03-22 
> 18:27:55.000000000
> -0500
> +++ linux-2.6.12-rc1-mm1-onetouch/drivers/usb/storage/usb.c   2005-03-22
> 19:59:13.000000000 -0500
> @@ -90,7 +90,9 @@
>  #ifdef CONFIG_USB_STORAGE_JUMPSHOT
>  #include "jumpshot.h"
>  #endif
> -
> +#ifdef CONFIG_USB_STORAGE_ONETOUCH
> +#include "onetouch.h"
> +#endif
> 
>  /* Some informational data */
>  MODULE_AUTHOR("Matthew Dharm <[EMAIL PROTECTED]>");
> 

- -------------------------------------------------------
This SF.net email is sponsored by Microsoft Mobile & Embedded DevCon 2005
Attend MEDC 2005 May 9-12 in Vegas. Learn more about the latest Windows
Embedded(r) & Windows Mobile(tm) platforms, applications & content.  Register
by 3/29 & save $300 http://ads.osdn.com/?ad_idh83&alloc_id149&op=click
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD8DBQFCQj462hKwjhIv2aMRAj18AKCknNAXLc4AfQuS4s3Xr4XoNR5fIwCfeGKV
3BzMAmKQ0l59k3GtkubWIzo=
=9gbt
-----END PGP SIGNATURE-----


-------------------------------------------------------
This SF.net email is sponsored by Microsoft Mobile & Embedded DevCon 2005
Attend MEDC 2005 May 9-12 in Vegas. Learn more about the latest Windows
Embedded(r) & Windows Mobile(tm) platforms, applications & content.  Register
by 3/29 & save $300 http://ads.osdn.com/?ad_idh83&alloc_id149&op=click
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to