diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index 3c9bb85..14385ed 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c @@ -223,6 +223,14 @@ static struct file_operations acpi_video_bus_DOS_fops = { .release = single_release, }; +static int acpi_video_bus_DOD_open_fs(struct inode *inode, struct file *file); +static struct file_operations acpi_video_bus_DOD_fops = { + .open = acpi_video_bus_DOD_open_fs, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + /* device */ static int acpi_video_device_info_open_fs(struct inode *inode, struct file *file); @@ -554,6 +562,22 @@ acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag) return status; } +static acpi_buffer +acpi_video_bus_DOD(struct acpi_video_bus *video) +{ + acpi_status status = 0; + union acpi_object ret0 = { ACPI_TYPE_ACPI_TYPE_BUFFER }; + + status = acpi_evaluate_object(video->device->handle, "_DOD", NULL, + &ret0); + if (ACPI_FAILURE(status)) { + ACPI_EXCEPTION((AE_INFO, status, "Evaluating _DOD")); + return -ENODEV; + } + + return 0; +} + /* * Arg: * device : video output device (LCD, CRT, ..) @@ -1169,6 +1193,16 @@ static int acpi_video_bus_DOS_seq_show(struct seq_file *seq, void *offset) return 0; } +static int acpi_video_bus_DOD_seq_show(struct seq_file *seq, void *offset) +{ + struct acpi_video_bus *video = seq->private; + + + seq_printf(seq, "DOD values\n"); + + return 0; +} + static int acpi_video_bus_POST_open_fs(struct inode *inode, struct file *file) { return single_open(file, acpi_video_bus_POST_seq_show, @@ -1180,6 +1214,11 @@ static int acpi_video_bus_DOS_open_fs(struct inode *inode, struct file *file) return single_open(file, acpi_video_bus_DOS_seq_show, PDE(inode)->data); } +static int acpi_video_bus_DOD_open_fs(struct inode *inode, struct file *file) +{ + return single_open(file, acpi_video_bus_DOD_seq_show, PDE(inode)->data); +} + static ssize_t acpi_video_bus_write_POST(struct file *file, const char __user * buffer, @@ -1325,6 +1364,18 @@ static int acpi_video_bus_add_fs(struct acpi_device *device) entry->owner = THIS_MODULE; } + /* 'DOD' [R] */ + entry = + create_proc_entry("DOD", S_IFREG | S_IRUGO | S_IRUSR, + acpi_device_dir(device)); + if (!entry) + return -ENODEV; + else { + entry->proc_fops = &acpi_video_bus_DOD_fops; + entry->data = acpi_driver_data(device); + entry->owner = THIS_MODULE; + } + return 0; } @@ -1341,6 +1392,7 @@ static int acpi_video_bus_remove_fs(struct acpi_device *device) remove_proc_entry("POST_info", acpi_device_dir(device)); remove_proc_entry("POST", acpi_device_dir(device)); remove_proc_entry("DOS", acpi_device_dir(device)); + remove_proc_entry("DOD", acpi_device_dir(device)); remove_proc_entry(acpi_device_bid(device), acpi_video_dir); acpi_device_dir(device) = NULL; }