]> err.no Git - linux-2.6/blobdiff - drivers/acpi/video.c
Pull bugzilla-9747 into release branch
[linux-2.6] / drivers / acpi / video.c
index 36b64a7516761c9f2fbe25306bc9b6f6b2872df4..bd77e81e81c1ed00827db379766faae1485fe17d 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/list.h>
+#include <linux/mutex.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/input.h>
@@ -135,8 +136,8 @@ struct acpi_video_bus {
        u8 attached_count;
        struct acpi_video_bus_cap cap;
        struct acpi_video_bus_flags flags;
-       struct semaphore sem;
        struct list_head video_device_list;
+       struct mutex device_list_lock;  /* protects video_device_list */
        struct proc_dir_entry *dir;
        struct input_dev *input;
        char phys[32];  /* for input device */
@@ -576,7 +577,7 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
        struct acpi_video_device_brightness *br = NULL;
 
 
-       memset(&device->cap, 0, 4);
+       memset(&device->cap, 0, sizeof(device->cap));
 
        if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_ADR", &h_dummy1))) {
                device->cap._ADR = 1;
@@ -696,7 +697,7 @@ static void acpi_video_bus_find_cap(struct acpi_video_bus *video)
 {
        acpi_handle h_dummy1;
 
-       memset(&video->cap, 0, 4);
+       memset(&video->cap, 0, sizeof(video->cap));
        if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_DOS", &h_dummy1))) {
                video->cap._DOS = 1;
        }
@@ -896,7 +897,7 @@ acpi_video_device_write_brightness(struct file *file,
 {
        struct seq_file *m = file->private_data;
        struct acpi_video_device *dev = m->private;
-       char str[4] = { 0 };
+       char str[5] = { 0 };
        unsigned int level = 0;
        int i;
 
@@ -1436,9 +1437,9 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
                        return -ENODEV;
                }
 
-               down(&video->sem);
+               mutex_lock(&video->device_list_lock);
                list_add_tail(&data->entry, &video->video_device_list);
-               up(&video->sem);
+               mutex_unlock(&video->device_list_lock);
 
                acpi_video_device_add_fs(device);
 
@@ -1464,12 +1465,12 @@ static void acpi_video_device_rebind(struct acpi_video_bus *video)
 {
        struct acpi_video_device *dev;
 
-       down(&video->sem);
+       mutex_lock(&video->device_list_lock);
 
        list_for_each_entry(dev, &video->video_device_list, entry)
                acpi_video_device_bind(video, dev);
 
-       up(&video->sem);
+       mutex_unlock(&video->device_list_lock);
 }
 
 /*
@@ -1601,7 +1602,7 @@ static int acpi_video_switch_output(struct acpi_video_bus *video, int event)
        unsigned long state;
        int status = 0;
 
-       down(&video->sem);
+       mutex_lock(&video->device_list_lock);
 
        list_for_each(node, &video->video_device_list) {
                dev = container_of(node, struct acpi_video_device, entry);
@@ -1619,7 +1620,7 @@ static int acpi_video_switch_output(struct acpi_video_bus *video, int event)
        dev_prev = container_of(node->prev, struct acpi_video_device, entry);
 
  out:
-       up(&video->sem);
+       mutex_unlock(&video->device_list_lock);
 
        switch (event) {
        case ACPI_VIDEO_NOTIFY_CYCLE:
@@ -1738,7 +1739,7 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
        int status;
        struct acpi_video_device *dev, *next;
 
-       down(&video->sem);
+       mutex_lock(&video->device_list_lock);
 
        list_for_each_entry_safe(dev, next, &video->video_device_list, entry) {
 
@@ -1755,7 +1756,7 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
                kfree(dev);
        }
 
-       up(&video->sem);
+       mutex_unlock(&video->device_list_lock);
 
        return 0;
 }
@@ -1779,9 +1780,6 @@ static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
        struct input_dev *input;
        int keycode;
 
-
-       printk("video bus notify\n");
-
        if (!video)
                return;
 
@@ -1924,7 +1922,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
        if (error)
                goto err_free_video;
 
-       init_MUTEX(&video->sem);
+       mutex_init(&video->device_list_lock);
        INIT_LIST_HEAD(&video->video_device_list);
 
        acpi_video_bus_get_devices(video, device);