Call for testers: New acpi_ibm driver

Nate Lawson nate at root.org
Tue May 31 10:25:08 PDT 2005


Markus Brueffer wrote:
> On Tuesday 31 May 2005 03:55, takawata at jp.freebsd.org wrote:
> 
>>In message <200505301857.20346.markus at FreeBSD.org>, Markus Brueffer wrote:
>>>Changes:
>>>
>>>Relocation of the sysctl tree to hw.acpi.ibm and renaming of some
>>>sysctls
>>
>>I don't think it a good thing. New device specific tree
>>should not be introduced.
>
> 
> I tried to get the sysctls more in line with our other ACPI extras drivers, 
> which all reside under hw.acpi.<brand> and hence the rename of e.g. 
> brightness->lcd_brightness and the relocation of the tree. Is there some 
> policy where such stuff belongs to?

I do not have a problem with this matching other drivers.  However, 
takawata-san is the author so perhaps he has a reason for this opinion.

>>>Support for more hotkeys by the hotkey sysctl (see manpage)
>>>Improved support of ACPI events, disabled by default. You can enable it
>>>by setting the events sysctl to 1 (on my T41p there are now 24
>>>different keypress events that get reported)
>>>write support for: volume, mute, brightness and thinklight
>>
>>Is it ok to  touch EC? I know the two way of impliment it.
>>One is modifying RTC register, another is using SMI interface
>>via ACPI control method.
> 
> Writing to the EC directly is nothing more that accessing the locations via 
> acpi_SetInteger. While I would highly prefer the latter method, the problem 
> is, that several places of the EC in the DSDT aren't even named or only 
> named on some models.

Please do not read/write directly from EC space.  A better way is to use 
the EC device methods I added recently.  This uses proper locking for 
requests and will work concurrently with other EC users (say, cmbat):

     device_t dev;

     dev = devclass_get_device(devclass_find("acpi_ec"), 0);
     if (dev == NULL)
         error, EC not present -- check this during probe and fail
         if error

     error = ACPI_EC_WRITE(dev, address, buffer, len);

or ACPI_EC_READ().  "address" is from 0-255 (8 bit addresses in EC 
space) and buffer is a pointer to data to write or read.

> Consider e.g. setting volume and mute. Here is a 
> snippet of a T41p DSDT:
> 
>                 Device (EC)
>                 {
> [...]
>                     OperationRegion (ECOR, EmbeddedControl, 0x00, 0x0100)
>                     Field (ECOR, ByteAcc, NoLock, Preserve)
>                     {
>                         HDBM,   1,
>                             ,   1,
>                             ,   1,
> [...]
>                         HFSP,   8,
>                             ,   6,    <-- Volume
>                         HMUT,   1,    <-- Mute
>                         Offset (0x31),
>                         HBRV,   8,    <-- Brightness
>                         HWPM,   1,
> 
> Volume doesn't have a name on any Thinkpad I have seen so far, Mute and 
> Brightness only on some. But the offset for directly accessing the EC is 
> always the same.

The above method handles this.

-- 
Nate


More information about the freebsd-mobile mailing list