ACPI Sony Notebook Control Driver (SNC) Readme
----------------------------------------------
	Copyright (C) 2004- 2005 Stelian Pop <stelian@popies.net>

This mini-driver drives the ACPI SNC device present in the
ACPI BIOS of the Sony Vaio laptops.

It gives access to some extra laptop functionalities. In
its current form, this driver is mainly useful for controlling the
screen brightness, but it may do more in the future.

You should probably start by trying the sonypi driver, and try
sony_acpi only if sonypi doesn't work for you.

Usage:
------

Loading the sony_acpi module will create a /proc/acpi/sony/
directory populated with a couple of files.

You then read/write integer values from/to those files by using
standard UNIX tools.

The files are:
	brightness		current screen brightness
	brightness_default	screen brightness which will be set
				when the laptop will be rebooted
	cdpower			power on/off the internal CD drive

Note that some files may be missing if they are not supported
by your particular laptop model.

Example usage:
	# echo "1" > /proc/acpi/sony/brightness
sets the lowest screen brightness,
	# echo "8" > /proc/acpi/sony/brightness
sets the highest screen brightness,
	# cat /proc/acpi/sony/brightness
retrieves the current screen brightness.

Development:
------------

If you want to help with the development of this driver (and
you are not afraid of any side effects doing strange things with
your ACPI BIOS could have on your laptop), load the driver and
pass the option 'debug=1'.

REPEAT: DON'T DO THIS IF YOU DON'T LIKE RISKY BUSINESS.

In your kernel logs you will find the list of all ACPI methods
the SNC device has on your laptop. You can see the GBRT/SBRT methods
used to get/set the brightness, but there are others.

I HAVE NO IDEA WHAT THOSE METHODS DO.

The sony_acpi driver creates, for some of those methods (the most
current ones found on several Vaio models), an entry under
/proc/acpi/sony/, just like the 'brightness' one. You can create
other entries corresponding to your own laptop methods by further
editing the source (see the 'sony_acpi_values' table, and add a new
structure to this table with your get/set method names).

Your mission, should you accept it, is to try finding out what
those entries are for, by reading/writing random values from/to those
files and find out what is the impact on your laptop.

Should you find anything interesting, please report it back to me,
I will not disavow all knowledge of your actions :)

Bugs/Limitations:
-----------------

* This driver is not based on official documentation from Sony
  (because there is none), so there is no guarantee this driver
  will work at all, or do the right thing. Although this hasn't
  happened to me, this driver could do very bad things to your
  laptop, including permanent damage.

* The sony_acpi and sonypi drivers do not interact at all. In the
  future, sonypi could use sony_acpi to do (part of) its business.

* spicctrl, which is the userspace tool used to communicate with the
  sonypi driver (through /dev/sonypi) does not try to use the
  sony_acpi driver. In the future, spicctrl could try sonypi first,
  and if it isn't present, try sony_acpi instead.

