[lkml]   [2009]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: [PATCH 2/2] Fix a bug on appledisplay.c regarding signedness

    bug description: If the brightness level on the apple display is 128 or
    higher, the driver will complain on startup:

    "Error while getting initial brightness: -128"

    Actual Driver
    Brightness level Reported value
    0 0
    ... ...
    126 126
    127 127
    128 -128 (aha! :-)
    129 -127
    ... ...
    255 -1

    Also, the reported brightness via /sys interface will present the same

    I realized that this was simply because the monitor transmits its data
    as an unsigned char (uint8_t), and in the code it is treated as a signed

    I consulted Caskey L. Dickson's acdctl sources to ascertain this. He
    used uint8_t there. I also checked the usb_* functions definitions to be
    sure that I was not second-guessing them. Yep, they accept (void *) in
    the relevant parameters, so it's up to us to decide the type of the

    I've tested it and works like a charm now.

    I have emailed the author of the driver, Michael Hanselmann, and he said:
    On Wed, Dec 02, 2009 at 05:14:26PM +0000, Michael Hanselmann wrote:
    > If I remember correctly, Linux on PowerPC uses unsigned chars by
    > default. I never tested the driver on a non-PowerPC platform and hence
    > may never have seen this.

    Please, review and push the patch, if you deem it adequate.

    Thanks a bunch!

    Signed-off-by: pancho horrillo <>

    diff -purN a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
    --- a/drivers/usb/misc/appledisplay.c 2009-11-10 01:32:31.000000000 +0100
    +++ b/drivers/usb/misc/appledisplay.c 2009-12-02 20:05:00.000000000 +0100
    @@ -72,8 +72,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 */
    + uint8_t *urbdata; /* interrupt URB data buffer */
    + uint8_t *msgdata; /* control message data buffer */

    struct delayed_work work;
    int button_pressed;
    pancho horrillo

    To be conscious that
    you are ignorant is a great step
    to knowledge.

    Benjamin Disraeli

     \ /
      Last update: 2009-12-02 20:33    [W:0.030 / U:12.340 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site