On Mar 10, 2008, Darren Kenny wrote:

> Karl Rossing wrote:
> > Darren Kenny wrote:
> >> And to top it off, the [Apple MacBook Pro] built-in keyboard  doesn't work 
> >> in Solaris.
> >>
> >> With the keyboard, I've no idea where to start.
> >>   
> > Does a USB keyboard work?
> 
> And external USB keyboard works perfectly...

Yep, same here.
 
> The Internal Keyboard / Trackpad combo on the MBP appear to be USB devices 
> too...

Yes.


I suspect the MacBook's internal USB keyboard doesn't work because Solaris'
USB keyboard driver is using/expecting a more or less hardcoded USB keyboard
report format; but the Apple MacBook USB keyboard seems to use a more
complicated USB keyboard report format.

E.g. it seems that Apple is using "report id" bytes in their keyboard
data, but Solaris' usbkbm driver has no code to handle these
"report id" bytes.


Here are USB report descriptors extracted with "::prtusb -t" from "mdb -k":


e       usb_mid     2     device          05ac.0231   
Apple Internal Keyboard / Trackpad

usba_device: 0xd2cd7800
mfg_prod_sn: Apple, Inc. - Apple Internal Keyboard / Trackpad - NULL

device, instance #2 (driver name: usb_mid)
  /pci at 0,0/pci106b,a3 at 1d,2/device at 2
  dip: 0xd10aa730
  usb_mid_statep: 0xd237a080
  usb_mid_errlevel: 0x4

{
    keyboard, instance #4 (driver name: hid)
      /pci at 0,0/pci106b,a3 at 1d,2/device at 2/keyboard at 0
      dip: 0xd3416e28
      hid_statep: 0xd224f740
      hid_errlevel: 0x4
      
      usage page ( 0x01 )
      usage ( 0x06 )
      COLLECTION ( 0x01 )
          report id ( 0x01 )
          usage page ( 0x07 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x08 )
          usage min ( 0xe0 )
          usage max ( 0xe7 )
          INPUT ( 0x02 )
          report id ( 0x01 )
          usage page ( 0x07 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report count ( 0x01 )
          report size ( 0x08 )
          INPUT ( 0x01 )
          report id ( 0x01 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report count ( 0x05 )
          report size ( 0x01 )
          usage page ( 0x08 )
          usage min ( 0x01 )
          usage max ( 0x05 )
          OUTPUT ( 0x02 )
          report id ( 0x01 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          usage page ( 0x08 )
          report count ( 0x01 )
          report size ( 0x03 )
          OUTPUT ( 0x01 )
          report id ( 0x01 )
          report count ( 0x06 )
          report size ( 0x08 )
          logical minimum ( 0x00 )
          logical maximum ( 0xff 0x00 )
          usage page ( 0x07 )
          usage min ( 0x00 )
          usage max ( 0xff )
          INPUT ( 0x00 )
          report id ( 0x01 )
          usage page ( 0x0c )
          report size ( 0x01 )
          report count ( 0x01 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          usage ( 0xb8 )
          INPUT ( 0x02 )
          report id ( 0x01 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          usage page ( 0xff )
          report size ( 0x07 )
          report count ( 0x01 )
          usage ( 0x03 )
          INPUT ( 0x02 )
      END_COLLECTION ( )
      report id ( 0x01 )
      logical minimum ( 0x00 )
      logical maximum ( 0x01 )
      report size ( 0x07 )
      report count ( 0x01 )
      usage page ( 0x0c )
      usage ( 0x01 )
      COLLECTION ( 0x01 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          usage ( 0xcd )
          INPUT ( 0x02 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          usage ( 0xb3 )
          INPUT ( 0x02 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          usage ( 0xb4 )
          INPUT ( 0x02 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          usage ( 0xb5 )
          INPUT ( 0x02 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          usage ( 0xb6 )
          INPUT ( 0x02 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          INPUT ( 0x01 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          INPUT ( 0x01 )
          usage page ( 0x0c )
          report id ( 0x52 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x01 )
          report count ( 0x01 )
          INPUT ( 0x01 )
          report id ( 0x09 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          report size ( 0x08 )
          report count ( 0x01 )
          usage page ( 0x01 0xff )
          usage ( 0x0b )
          FEATURE ( 0x02 )
          report id ( 0x09 )
          logical minimum ( 0x00 )
          logical maximum ( 0x01 )
          usage page ( 0x01 0xff )
          report size ( 0x08 )
          report count ( 0x02 )
          FEATURE ( 0x01 )
      END_COLLECTION ( )
    
    input, instance #5 (driver name: hid)
      /pci at 0,0/pci106b,a3 at 1d,2/device at 2/input at 1
      dip: 0xd2b69060
      hid_statep: 0xd341ed80
      hid_errlevel: 0x4
      
      usage page ( 0x00 0xff )
      usage ( 0x01 )
      COLLECTION ( 0x03 )
          usage page ( 0x00 0xff )
          logical minimum ( 0x00 )
          logical maximum ( 0xff 0x00 )
          report id ( 0x44 )
          report size ( 0x08 )
          report count ( 0xff 0x01 )
          usage ( 0x01 )
          INPUT ( 0x00 )
      END_COLLECTION ( )
    
    mouse, instance #6 (driver name: hid)
      /pci at 0,0/pci106b,a3 at 1d,2/device at 2/mouse at 2
      dip: 0xd3416a08
      hid_statep: 0xd341ec80
      hid_errlevel: 0x4
      
      usage page ( 0x01 )
      usage ( 0x02 )
      COLLECTION ( 0x01 )
          usage page ( 0x01 )
          usage ( 0x01 )
          COLLECTION ( 0x00 )
              usage page ( 0x09 )
              logical minimum ( 0x00 )
              logical maximum ( 0x01 )
              report id ( 0x02 )
              report count ( 0x03 )
              report size ( 0x01 )
              usage min ( 0x01 )
              usage max ( 0x03 )
              INPUT ( 0x02 )
              usage page ( 0x09 )
              logical minimum ( 0x00 )
              logical maximum ( 0x01 )
              report id ( 0x02 )
              report count ( 0x01 )
              report size ( 0x05 )
              INPUT ( 0x01 )
              report id ( 0x02 )
              usage page ( 0x01 )
              logical minimum ( 0x81 )
              logical maximum ( 0x7f )
              report size ( 0x08 )
              report count ( 0x02 )
              usage ( 0x30 )
              usage ( 0x31 )
              INPUT ( 0x06 )
          END_COLLECTION ( )
      END_COLLECTION ( )
    
}
--
This message posted from opensolaris.org


Reply via email to