backlight: Allow properties to be passed at registration
[safe/jmp/linux-2.6] / drivers / usb / misc / appledisplay.c
index b09c835..3adab04 100644 (file)
@@ -29,7 +29,6 @@
 #include <linux/timer.h>
 #include <linux/workqueue.h>
 #include <asm/atomic.h>
-#include <asm/semaphore.h>
 
 #define APPLE_VENDOR_ID                0x05AC
 
        .bInterfaceProtocol = 0x00
 
 /* table of devices that work with this driver */
-static struct usb_device_id appledisplay_table [] = {
+static const struct usb_device_id appledisplay_table[] = {
        { APPLEDISPLAY_DEVICE(0x9218) },
        { APPLEDISPLAY_DEVICE(0x9219) },
+       { APPLEDISPLAY_DEVICE(0x921c) },
        { APPLEDISPLAY_DEVICE(0x921d) },
 
        /* Terminating entry */
@@ -73,8 +73,8 @@ struct appledisplay {
        struct usb_device *udev;        /* usb device */
        struct urb *urb;                /* usb request block */
        struct backlight_device *bd;    /* backlight device */
-       char *urbdata;                  /* interrupt URB data buffer */
-       char *msgdata;                  /* control message data buffer */
+       u8 *urbdata;                    /* interrupt URB data buffer */
+       u8 *msgdata;                    /* control message data buffer */
 
        struct delayed_work work;
        int button_pressed;
@@ -104,11 +104,11 @@ static void appledisplay_complete(struct urb *urb)
        case -ESHUTDOWN:
                /* This urb is terminated, clean up */
                dbg("%s - urb shuttingdown with status: %d",
-                       __FUNCTION__, status);
+                       __func__, status);
                return;
        default:
                dbg("%s - nonzero urb status received: %d",
-                       __FUNCTION__, status);
+                       __func__, status);
                goto exit;
        }
 
@@ -131,14 +131,15 @@ static void appledisplay_complete(struct urb *urb)
 exit:
        retval = usb_submit_urb(pdata->urb, GFP_ATOMIC);
        if (retval) {
-               err("%s - usb_submit_urb failed with result %d",
-                       __FUNCTION__, retval);
+               dev_err(&pdata->udev->dev,
+                       "%s - usb_submit_urb failed with result %d\n",
+                       __func__, retval);
        }
 }
 
 static int appledisplay_bl_update_status(struct backlight_device *bd)
 {
-       struct appledisplay *pdata = class_get_devdata(&bd->class_dev);
+       struct appledisplay *pdata = bl_get_data(bd);
        int retval;
 
        pdata->msgdata[0] = 0x10;
@@ -159,7 +160,7 @@ static int appledisplay_bl_update_status(struct backlight_device *bd)
 
 static int appledisplay_bl_get_brightness(struct backlight_device *bd)
 {
-       struct appledisplay *pdata = class_get_devdata(&bd->class_dev);
+       struct appledisplay *pdata = bl_get_data(bd);
        int retval;
 
        retval = usb_control_msg(
@@ -178,7 +179,7 @@ static int appledisplay_bl_get_brightness(struct backlight_device *bd)
                return pdata->msgdata[1];
 }
 
-static struct backlight_ops appledisplay_bl_data = {
+static const struct backlight_ops appledisplay_bl_data = {
        .get_brightness = appledisplay_bl_get_brightness,
        .update_status  = appledisplay_bl_update_status,
 };
@@ -201,6 +202,7 @@ static void appledisplay_work(struct work_struct *work)
 static int appledisplay_probe(struct usb_interface *iface,
        const struct usb_device_id *id)
 {
+       struct backlight_properties props;
        struct appledisplay *pdata;
        struct usb_device *udev = interface_to_usbdev(iface);
        struct usb_host_interface *iface_desc;
@@ -221,7 +223,7 @@ static int appledisplay_probe(struct usb_interface *iface,
                }
        }
        if (!int_in_endpointAddr) {
-               err("Could not find int-in endpoint");
+               dev_err(&iface->dev, "Could not find int-in endpoint\n");
                return -EIO;
        }
 
@@ -229,7 +231,7 @@ static int appledisplay_probe(struct usb_interface *iface,
        pdata = kzalloc(sizeof(struct appledisplay), GFP_KERNEL);
        if (!pdata) {
                retval = -ENOMEM;
-               err("Out of memory");
+               dev_err(&iface->dev, "Out of memory\n");
                goto error;
        }
 
@@ -242,8 +244,8 @@ static int appledisplay_probe(struct usb_interface *iface,
        pdata->msgdata = kmalloc(ACD_MSG_BUFFER_LEN, GFP_KERNEL);
        if (!pdata->msgdata) {
                retval = -ENOMEM;
-               err("appledisplay: Allocating buffer for control messages "
-                       "failed");
+               dev_err(&iface->dev,
+                       "Allocating buffer for control messages failed\n");
                goto error;
        }
 
@@ -251,7 +253,7 @@ static int appledisplay_probe(struct usb_interface *iface,
        pdata->urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!pdata->urb) {
                retval = -ENOMEM;
-               err("appledisplay: Allocating URB failed");
+               dev_err(&iface->dev, "Allocating URB failed\n");
                goto error;
        }
 
@@ -260,7 +262,7 @@ static int appledisplay_probe(struct usb_interface *iface,
                GFP_KERNEL, &pdata->urb->transfer_dma);
        if (!pdata->urbdata) {
                retval = -ENOMEM;
-               err("appledisplay: Allocating URB buffer failed");
+               dev_err(&iface->dev, "Allocating URB buffer failed\n");
                goto error;
        }
 
@@ -271,28 +273,30 @@ static int appledisplay_probe(struct usb_interface *iface,
                pdata, 1);
        if (usb_submit_urb(pdata->urb, GFP_KERNEL)) {
                retval = -EIO;
-               err("appledisplay: Submitting URB failed");
+               dev_err(&iface->dev, "Submitting URB failed\n");
                goto error;
        }
 
        /* Register backlight device */
        snprintf(bl_name, sizeof(bl_name), "appledisplay%d",
                atomic_inc_return(&count_displays) - 1);
+       memset(&props, 0, sizeof(struct backlight_properties));
+       props.max_brightness = 0xff;
        pdata->bd = backlight_device_register(bl_name, NULL, pdata,
-                                               &appledisplay_bl_data);
+                                             &appledisplay_bl_data, &props);
        if (IS_ERR(pdata->bd)) {
-               err("appledisplay: Backlight registration failed");
+               dev_err(&iface->dev, "Backlight registration failed\n");
+               retval = PTR_ERR(pdata->bd);
                goto error;
        }
 
-       pdata->bd->props.max_brightness = 0xff;
-
        /* Try to get brightness */
        brightness = appledisplay_bl_get_brightness(pdata->bd);
 
        if (brightness < 0) {
                retval = brightness;
-               err("appledisplay: Error while getting initial brightness: %d", retval);
+               dev_err(&iface->dev,
+                       "Error while getting initial brightness: %d\n", retval);
                goto error;
        }
 
@@ -315,7 +319,7 @@ error:
                                        pdata->urbdata, pdata->urb->transfer_dma);
                        usb_free_urb(pdata->urb);
                }
-               if (pdata->bd)
+               if (pdata->bd && !IS_ERR(pdata->bd))
                        backlight_device_unregister(pdata->bd);
                kfree(pdata->msgdata);
        }
@@ -353,7 +357,7 @@ static int __init appledisplay_init(void)
 {
        wq = create_singlethread_workqueue("appledisplay");
        if (!wq) {
-               err("Could not create work queue\n");
+               printk(KERN_ERR "appledisplay: Could not create work queue\n");
                return -ENOMEM;
        }