Re: ThinkPad X61s functions keys

Ian Smith <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
On Sun, 13 Apr 2008, Dan Langille wrote:
 > Elsewhere in this thread I had stated I'd solved the problem.  I'm 
 > posting the details here.

We've been waiting with bated breath :)

 > Alberto Rizzi wrote:
 > > Dan Langille ha scritto:
 > >> Hi,
 > >>
 > >> Running FreeBSD 7.0-RELEASE on a ThinkPad X61s.
 > >>
 > >> Some keys do not work:
 > >>
 > >> - volume adjustment
 > >> - screen brightness (FN HOME, FN END)
 > >>
 > >> The keyboard light does work (FN-PgUp) as does
 > >> Numeric Lock (FN ScrLk).
 > >>
 > >> What can I do to help diagnose the issue so we can get these
 > >> functions working?
 > >>
 > > Have the same problem with a Thinkpad T61
 > > If you read man acpi_ibm there is a partial solution
 > > 
 > > You have to load acpi_ibm at boot. Add
 > > acpi_ibm_load="YES"
 > > to /boot/loader.conf
 > 
 > This is loaded:
 > 
 > $ kldstat
 > Id Refs Address            Size     Name
 >   1   15 0xffffffff80100000 ac6c08   kernel
 >   2    1 0xffffffff80bc7000 39138    linux.ko
 >   3    1 0xffffffff80c01000 7108     if_tap.ko
 >   4    1 0xffffffff80c09000 1a670    snd_hda.ko
 >   5    2 0xffffffff80c24000 673b8    sound.ko
 >   6    1 0xffffffff80c8c000 53d0     acpi_ibm.ko
 >   7    1 0xffffffffb16e4000 4b61     i915.ko
 >   8    1 0xffffffffb16e9000 d5d8     drm.ko
 > 
 > 
 > > 
 > > Then activate event passing to devd. Add
 > > dev.acpi_ibm.0.events=1
 > > to /etc/sysctl.conf
 > 
 > I cannot get this set to 1 after boot:
 > 
 > $ grep ibm /etc/sysctl.conf
 > dev.acpi_ibm.0.events=1

Strange if that doesn't work.  Can you check your /var/log/console.log
(assuming you've got 'console.info /var/log/console.log' in syslog.conf) 
which should show the transition, or at least the attempt, eg:

Apr  1 02:51:32 paqi kernel: vfs.usermount:
Apr  1 02:51:32 paqi kernel: 0
Apr  1 02:51:32 paqi kernel: ->
Apr  1 02:51:32 paqi kernel: 1
Apr  1 02:51:32 paqi kernel:
Apr  1 02:51:32 paqi kernel: hw.snd.verbose:
Apr  1 02:51:32 paqi kernel: 1
Apr  1 02:51:32 paqi kernel: ->
Apr  1 02:51:32 paqi kernel: 2

 > $ sysctl dev.acpi_ibm.0.events
 > dev.acpi_ibm.0.events: 0
 > 
 > Under these circumstances, the keys will not work.  If I manually set 
 > the events flag:
 > 
 > $ sudo sysctl dev.acpi_ibm.0.events=1
 > Password:
 > dev.acpi_ibm.0.events: 0 -> 1
 > $ sysctl dev.acpi_ibm.0.events
 > dev.acpi_ibm.0.events: 1
 > 
 > 
 > Then the brightness keys start working

You could, if maybe sysctl.conf is being run too early (?), try adding
'sysctl dev.acpi_ibm.0.events=1' to /etc/rc.local, which, as I recall,
also reports into console.log

 > > Then tell devd that you want to get events. Add
 > > notify 10 {
 > >     match "system"        "ACPI";
 > >     match "subsystem"     "IBM";
 > >     action "/usr/local/sbin/acpi_oem_exec.sh $notify ibm";
 > > }
 > 
 > This was the missing key.  The last line needs a trailing ;
 > 
 > Once I added that in, things started working.

Fussy, ain't it.

 > > to /etc/devd.conf
 > > 
 > > Now you have to create that script
 > > ----------
 > > #!/bin/sh
 > > NOTIFY=`echo $1`
 > > ECHO="echo"
 > > CALC="bc"
 > > 
 > > case ${NOTIFY} in
 > >     0x10)
 > >         LEVEL=`sysctl -n dev.acpi_ibm.0.lcd_brightness`
 > >         PERCENT=`${ECHO} "${LEVEL} + 1" | ${CALC}`
 > >         MESSAGE="brightness level ${PERCENT}"
 > >         sysctl dev.acpi_ibm.0.lcd_brightness=${PERCENT}
 > >         ;;
 > >     0x11)
 > >         LEVEL=`sysctl -n dev.acpi_ibm.0.lcd_brightness`
 > >         PERCENT=`${ECHO} "${LEVEL} - 1" | ${CALC}`
 > >         MESSAGE="brightness level ${PERCENT}"
 > >         sysctl dev.acpi_ibm.0.lcd_brightness=${PERCENT}
 > >         ;;
 > >     *)
 > >         ;;
 > > esac
 > > echo `date` >> /tmp/prova
 > > ${ECHO} ${LEVEL} ${NOTIFY} ${MESSAGE} >> /tmp/prova
 > > exit 0   
 > > 
 > > -------
 > > If you leave the last two debug line, with a tail -f /tmp/prova you can 
 > > check the events sent to devd.
 > > 
 > > With this script you can change the brightness both under console and 
 > > under xorg but you are bound to 8 levels (0 - 7)
 > > If you want 100 levels you can use xbacklight under xorg only and modify 
 > > the script to use xbacklight instead of sysctl
 > > 
 > > Mute and volume keys don't send events to devd: I don't know why but if 
 > > I press mute it works and dev.acpi_ibm.0.mute becomes 1
 > > If I press volume up or down, dev.acpi_ibm.0.mute becomes 0

Are the bits for these keys set in .availmask, or posted to .eventmask?

 > Using the Fn key and pressing the F1-F12 keys, I get the following log 
 > entrys in /tmp/prova:
 > Sun Apr 13 11:39:48 EDT 2008
 > 0x01
 > Sun Apr 13 11:39:48 EDT 2008
 > 0x02
 > Sun Apr 13 11:39:49 EDT 2008
 > 0x03
 > Sun Apr 13 11:39:50 EDT 2008
 > 0x05
 > Sun Apr 13 11:39:50 EDT 2008
 > 0x06
 > Sun Apr 13 11:39:50 EDT 2008
 > 0x07
 > Sun Apr 13 11:39:54 EDT 2008
 > 0x08
 > Sun Apr 13 11:39:54 EDT 2008
 > 0x09
 > Sun Apr 13 11:39:55 EDT 2008
 > 0x0b
 > Sun Apr 13 11:39:55 EDT 2008
 > 0x0c
 > 
 > 
 > Note the following exceptions which can be observed from the above log 
 > entries:
 > 
 > Fn-F4 - sleep: does not give any log entry
 > Fn-F10 - unlabelled on the keyboard, gives no log entry

Does Fn-F4 (still?) act as sleep (suspend-to-RAM)?  ie does/did STR
work on your X61s, and does dev.acpi_ibm.0.events=1 affect that at all?

You might like to compare your results with Beto's Z60m at:

  http://lists.freebsd.org/mailman/htdig/freebsd-mobile/2006-August/008959.html

and also his earlier reference:

  http://lists.freebsd.org/pipermail/freebsd-mobile/2006-August/008948.html

where a) he gets to use Fn-F4 for a custom sleep script, b) also found
that Fn-F10 does nothing, but c) gets events from volume and mute keys.

 > Other Fn key results:
 > 
 > SysReq - no log entry, no effect seen
 > NumLk - no log entry but system goes into NumLock mode
 > Pause - no log entry, no effect seen

On my T23, Pause does nothing in X, but (same as NumLk/ScrollLock key
pressed without Fn) works as the scroll lock in a vty.  Also on mine,
Fn-F7 switches between LCD/Monitor/both.

 > ThinkLight - works, and creates a log entry 0x12
 > Spacebar - create log entry 0x14

Weird about the sysctl not getting set from sysctl.conf though ..

cheers, Ian

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.