summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattia Dongili <malattia@linux.it>2007-01-13 23:04:40 +0100
committerLen Brown <len.brown@intel.com>2007-02-13 03:06:35 -0500
commit57ede701af3bc0c153070133e7831332ffa1d761 (patch)
treeb4fc837ae7adce11dc8b9681f4a208da55bac740
parent4465857d5f99079bae00621626adf74ed8256296 (diff)
downloadlinux-57ede701af3bc0c153070133e7831332ffa1d761.tar.gz
linux-57ede701af3bc0c153070133e7831332ffa1d761.tar.xz
sony_acpi: Allow multiple sony_acpi_values for the same .name
The acpi handles are kept _only_ if both the requested .acpiget and .acpiset are available in the DSDT. Currently only the SCDP/CDPW dualism is known. Signed-off-by: Mattia Dongili <malattia@linux.it> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/sony_acpi.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/drivers/acpi/sony_acpi.c b/drivers/acpi/sony_acpi.c
index 1f7dca337025..c65f5893e0e2 100644
--- a/drivers/acpi/sony_acpi.c
+++ b/drivers/acpi/sony_acpi.c
@@ -68,7 +68,7 @@ static struct backlight_properties sony_backlight_properties = {
static struct sony_acpi_value {
char *name; /* name of the entry */
- struct proc_dir_entry *proc; /* /proc entry */
+ struct proc_dir_entry *proc; /* /proc entry */
char *acpiget;/* name of the ACPI get function */
char *acpiset;/* name of the ACPI get function */
int min; /* minimum allowed value or -1 */
@@ -78,6 +78,7 @@ static struct sony_acpi_value {
int debug; /* active only in debug mode ? */
} sony_acpi_values[] = {
{
+ /* for backward compatibility only */
.name = "brightness",
.acpiget = "GBRT",
.acpiset = "SBRT",
@@ -107,6 +108,14 @@ static struct sony_acpi_value {
.debug = 0,
},
{
+ .name = "cdpower",
+ .acpiget = "GCDP",
+ .acpiset = "CDPW",
+ .min = 0,
+ .max = 1,
+ .debug = 0,
+ },
+ {
.name = "audiopower",
.acpiget = "GAZP",
.acpiset = "AZPW",
@@ -356,27 +365,24 @@ static int sony_acpi_add(struct acpi_device *device)
if (!debug && item->debug)
continue;
- if (item->acpiget &&
- ACPI_SUCCESS(acpi_get_handle(sony_acpi_handle,
- item->acpiget, &handle)))
- proc_file_mode = S_IRUSR;
- else
- printk(LOG_PFX "unable to get ACPI handle for %s (get)\n",
- item->name);
-
- if (item->acpiset &&
- ACPI_SUCCESS(acpi_get_handle(sony_acpi_handle,
- item->acpiset, &handle)))
- proc_file_mode |= S_IWUSR;
- else
- printk(LOG_PFX "unable to get ACPI handle for %s (set)\n",
- item->name);
+ if (item->acpiget) {
+ if (ACPI_FAILURE(acpi_get_handle(sony_acpi_handle,
+ item->acpiget, &handle)))
+ continue;
- if (proc_file_mode == 0)
- continue;
+ proc_file_mode |= S_IRUSR;
+ }
+
+ if (item->acpiset) {
+ if (ACPI_FAILURE(acpi_get_handle(sony_acpi_handle,
+ item->acpiset, &handle)))
+ continue;
+
+ proc_file_mode |= S_IWUSR;
+ }
item->proc = create_proc_entry(item->name, proc_file_mode,
- acpi_device_dir(device));
+ acpi_device_dir(device));
if (!item->proc) {
printk(LOG_PFX "unable to create proc entry\n");
result = -EIO;