Re: Call for testers: New acpi_ibm driver

Nate Lawson <[email protected]>
Newsgroups gmane.os.freebsd.devel.acpi,gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
Markus Brueffer wrote:
> On Tuesday 31 May 2005 03:55, [email protected] wrote:
> 
>>In message <[email protected]>, 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
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.