[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

usb driver fpr personal jukebox (pjb-100) doesn't work



  I've read what I've found on usb, reviewed&fixed my settings, tried
various version of cpqpjb driver and I still get exactly the same
results - the driver registers but that's it, it doesn't even probe for
devices. I have reports that the same driver works with 2.4.14 for other
people. Here are the details of my current setup as well as all the
diagnostics I could come up with.

  basically: the driver registers, pjb_probe is never called, the device
doesn't work (cat /dev/cpgpjb says "No such device"). Could it be that I
am missing something in kernel config? I have all the needed modules
(usbcore and usb-uhci) but there might be some funny setting I didn't
notice. Also, should alternate uhci driver work better?

  I checked how the cpqpjb works, added some debug messages and here's
what I have found:

  the following structure is used to register the driver using
usb_register (&pjb_driver):

static struct usb_driver pjb_driver = {
	name:       "cpqpjb",
	probe:      pjb_probe,
	disconnect: pjb_disconnect,
};

  so I guess that the pjb_probe should be called by kernel but it's
never called, there is a message:

printk(KERN_INFO "pjb_probe: looking for devices\n");

  printed right in the beginning of the function but I never see it in
syslog (I see other messages from cpqpjb printed using the same
function).

  this is what happens when I try to open the /dev/cpqpjb for reading:

  pjb_open sets the static (on file level) variable static_pjb_state as
file->private_data.

  pjb_read gets the above mentioned file (I guess it's the same one,
otherwise it all wouldn't make any sense), casts file->private_data to
pjb (pjb = (struct pjb_state *) file->private_data;) and checks for
pjb->device, which is unfortunately 0, so -ENODEV is returned (and cat
/dev/cpqpjb prints out the No such device message)
[=static_pjb_state->device is 0]

  the static_pjb_state should have been set by pjb_probe, but pjb_probe
is never called!

  this is where I hit the wall, who is supposed to call pjb_probe (well,
kernel, but how exactly)? what are possible reasons it wasn't called?
any ideas?

------------------------------------------------------------
  settings & messages
------------------------------------------------------------

  here are my kernel config settings related to usb:

jojda:/usr/src/linux# grep -i usb ./.config | grep -v '^#'
CONFIG_USB=m
CONFIG_USB_DEBUG=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_UHCI=m
CONFIG_USB_AUDIO=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_HID=m
CONFIG_USB_HIDDEV=y
CONFIG_USB_DC2XX=m
CONFIG_USB_SCANNER=m
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_VISOR=m

  I have tried the following versions of cpqpjb, all with exactly the
same results:

jojda:/home/erik/skusobna/pjb# find . -name cpqpjb.o
./pjbmanager-0.2.1/usbdrv/cpqpjb.o
./cpqpjb.240t6/cpqpjb.o
./pjbsdk-3.1.3/usbdrv/cpqpjb.o

  the last one is at:
http://www.kolumbus.fi/toni.tammisalo/pjbsdk-3.1.3.tar.gz

  these are my settings:

debian unstable

jojda:~>uname -a
Linux jojda 2.4.14 #1 Fri Nov 23 16:28:37 PST 2001 i686 unknown

jojda:~>grep cpqpjb /etc/modules.conf
### update-modules: start processing /etc/modutils/erik.cpqpjb
alias char-major-10-176 cpqpjb
### update-modules: end processing /etc/modutils/erik.cpqpjb

jojda:~>ls -l /dev/cpqpjb 
crw-rw-rw-    1 root     root      10, 176 Dec 20 04:43 /dev/cpqpjb

jojda:/home/erik# lsmod | egrep '(usb)|(cpqpjb)'
cpqpjb                  2688   0 
usb-uhci               20932   0  (unused)
usbcore                50848   1  [cpqpjb usb-uhci]

jojda:/home/erik# lspci|grep -i usb
00:07.2 USB Controller: VIA Technologies, Inc. UHCI USB (rev 16)
00:07.3 USB Controller: VIA Technologies, Inc. UHCI USB (rev 16)

jojda:~>mount | grep usb
usb on /proc/bus/usb type usbdevfs (rw,noexec,nosuid,nodev)

  running cat /dev/cpqpjb and watching the syslog (I enabled PJB_DEBUG
in currently used driver, which is btw the one from Toni Tammisalo's
page, see the link above):

jojda:/home/erik# date;cat /dev/cpqpjb 
Sat Dec 22 01:41:52 PST 2001
cat: /dev/cpqpjb: No such device

  there are following lines in /var/log/syslog (same time):

Dec 22 01:41:52 localhost kernel: pjb.open
Dec 22 01:41:52 localhost kernel: pjb.close

  as far as I can see the crucial part is that I never get the pjb_probe
message when I insert cpqpjb module:

jojda:/home/erik/skusobna/pjb/pjbsdk-3.1.3/usbdrv# date;insmod
./cpqpjb.o
Sat Dec 22 01:44:41 PST 2001
Warning: loading ./cpqpjb.o will taint the kernel: no license

  and the syslog messages:

Dec 22 01:44:41 localhost kernel: Initializing PJB driver
Dec 22 01:44:41 localhost kernel: usb.c: registered new driver cpqpjb

  per docs there should have been another message or two, first one of
them from pjb_probe.

  when I unplug usb cable the syslog says:

Dec 22 01:46:26 localhost kernel: hub.c: port 1 connection change
Dec 22 01:46:26 localhost kernel: hub.c: port 1, portstatus 301, change
1, 1.5 Mb/s
Dec 22 01:46:27 localhost kernel: hub.c: port 1, portstatus 300, change
0, 1.5 Mb/s

  when I plug it back in:

Dec 22 01:46:55 localhost kernel: hub.c: port 1 connection change
Dec 22 01:46:55 localhost kernel: hub.c: port 1, portstatus 301, change
1, 1.5 Mb/s
Dec 22 01:46:55 localhost kernel: hub.c: port 1, portstatus 300, change
0, 1.5 Mb/s

  when I plug in/out another device (logitech optical wireless mouse) I
get the same messages (it just says port 1 or port 2 depending on which
port I use), I don't have drivers for mouse though.

  this is what /proc thinks I have:

---------------------------------------------------------
jojda:/home/erik# ls -lR /proc/bus/usb/
/proc/bus/usb/:
total 0
dr-xr-xr-x    1 root     root            0 Dec 21 16:43 001
dr-xr-xr-x    1 root     root            0 Dec 21 16:43 002
-r--r--r--    1 root     root            0 Dec 21 16:43 devices
-r--r--r--    1 root     root            0 Dec 21 16:43 drivers

/proc/bus/usb/001:
total 1
-rw-r--r--    1 root     root           18 Dec 22 01:48 001

/proc/bus/usb/002:
total 1
-rw-r--r--    1 root     root           18 Dec 22 01:48 001

---------------------------------------------------------
jojda:/home/erik# cat /proc/bus/usb/devices 
T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c800
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c400
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms

---------------------------------------------------------
jojda:/home/erik# cat /proc/bus/usb/drivers 
         usbdevfs
         hub
         cpqpjb

---------------------------------------------------------
  lsusb (usbview show the same info) output:

Bus 002 Device 001: ID 0000:0000 Virtual Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0000 Virtual
  idProduct          0x0000 Hub
  bcdDevice            0.00
  iManufacturer           0 
  iProduct                2 USB UHCI Root Hub
  iSerial                 1 c800
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x40
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               none
        wMaxPacketSize          8
        bInterval             255
  Language IDs: (length=4)
     0000 (null)((null))

Bus 001 Device 001: ID 0000:0000 Virtual Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0000 Virtual
  idProduct          0x0000 Hub
  bcdDevice            0.00
  iManufacturer           0 
  iProduct                2 USB UHCI Root Hub
  iSerial                 1 c400
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x40
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               none
        wMaxPacketSize          8
        bInterval             255
  Language IDs: (length=4)
     0000 (null)((null))

  any ideas? TIA

	erik



Reply to: