lkml.org 
[lkml]   [2012]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] toshiba_acpi: Add support for transflective LCD
    Thank you for commenting again!
    Please Cc me on the patch, then I'll test your patch.


    Seth Forshee wrote:
    > On Sat, Feb 18, 2012 at 07:04:29AM +0900, Akio Idehara wrote:
    >> Some Toshiba laptops have the transflective LCD and toshset
    >> can control its backlight state. I brought this feature to the
    >> mainline. It was tested on a Toshiba Portege R500.
    >>
    >> Signed-off-by: Akio Idehara<zbe64533@gmail.com>
    >
    > This looks okay in general, although see one comment below.
    >
    > I've got some patches pending for toshiba_acpi that may conflict with
    > these a bit, but that should be easy to sort out. However I'm also
    > working on some backlight changes (currently waiting for test feedback,
    > as I don't have affected hardware for some of the changes) that are
    > likely to require some coordination to ensure nothing gets broken. I'll
    > Cc you on the patch when it's finished so that you can test it.
    >
    >> ---
    >> drivers/platform/x86/toshiba_acpi.c | 43 ++++++++++++++++++++++++++++++++++-
    >> 1 files changed, 42 insertions(+), 1 deletions(-)
    >>
    >> diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
    >> index dcdc1f4..af3979c 100644
    >> --- a/drivers/platform/x86/toshiba_acpi.c
    >> +++ b/drivers/platform/x86/toshiba_acpi.c
    >> @@ -51,6 +51,7 @@
    >> #include<linux/input.h>
    >> #include<linux/input/sparse-keymap.h>
    >> #include<linux/leds.h>
    >> +#include<linux/fb.h>
    >> #include<linux/slab.h>
    >>
    >> #include<asm/uaccess.h>
    >> @@ -88,6 +89,7 @@ MODULE_LICENSE("GPL");
    >>
    >> /* registers */
    >> #define HCI_FAN 0x0004
    >> +#define HCI_TR_BACKLIGHT 0x0005
    >> #define HCI_SYSTEM_EVENT 0x0016
    >> #define HCI_VIDEO_OUT 0x001c
    >> #define HCI_HOTKEY_EVENT 0x001e
    >> @@ -122,6 +124,7 @@ struct toshiba_acpi_dev {
    >> int video_supported:1;
    >> int fan_supported:1;
    >> int system_event_supported:1;
    >> + int tr_backlight_supported:1;
    >>
    >> struct mutex mutex;
    >> };
    >> @@ -461,6 +464,22 @@ static const struct rfkill_ops toshiba_rfk_ops = {
    >> .poll = bt_rfkill_poll,
    >> };
    >>
    >> +static int get_tr_backlight_status(struct toshiba_acpi_dev *dev, u32 *status)
    >> +{
    >> + u32 hci_result;
    >> +
    >> + hci_read1(dev, HCI_TR_BACKLIGHT, status,&hci_result);
    >> + return hci_result == HCI_SUCCESS ? 0 : -EIO;
    >> +}
    >> +
    >> +static int set_tr_backlight_status(struct toshiba_acpi_dev *dev, int value)
    >> +{
    >> + u32 hci_result;
    >> +
    >> + hci_write1(dev, HCI_TR_BACKLIGHT, value,&hci_result);
    >> + return hci_result == HCI_SUCCESS ? 0 : -EIO;
    >> +}
    >> +
    >> static struct proc_dir_entry *toshiba_proc_dir /*= 0*/ ;
    >>
    >> static int get_lcd(struct backlight_device *bd)
    >> @@ -512,8 +531,19 @@ static int set_lcd(struct toshiba_acpi_dev *dev, int value)
    >>
    >> static int set_lcd_status(struct backlight_device *bd)
    >> {
    >> + int ret;
    >> struct toshiba_acpi_dev *dev = bl_get_data(bd);
    >> - return set_lcd(dev, bd->props.brightness);
    >> +
    >> + ret = set_lcd(dev, bd->props.brightness);
    >> + if (ret)
    >> + return ret;
    >> +
    >> + if (dev->tr_backlight_supported) {
    >> + int value = (bd->props.power == FB_BLANK_UNBLANK) ? 1 : 0;
    >
    > You probably should also be turning the backlight off when
    > BL_CORE_FBBLANK is set in bd->props.state.
    >
    > It looks like it would probably be a good idea to support the
    > BL_CORE_SUSPENDRESUME option and disable the tr_backlight when
    > BL_CORE_SUSPEND is set as well.
    >
    >> + ret = set_tr_backlight_status(dev, value);
    >> + }
    >> +
    >> + return ret;
    >> }
    >>
    >> static ssize_t lcd_proc_write(struct file *file, const char __user *buf,
    >> @@ -938,6 +968,7 @@ static int __devinit toshiba_acpi_add(struct acpi_device *acpi_dev)
    >> const char *hci_method;
    >> u32 hci_result;
    >> u32 dummy;
    >> + u32 value;
    >> bool bt_present;
    >> int ret = 0;
    >> struct backlight_properties props;
    >> @@ -984,6 +1015,16 @@ static int __devinit toshiba_acpi_add(struct acpi_device *acpi_dev)
    >> }
    >> dev->backlight_dev->props.brightness = get_lcd(dev->backlight_dev);
    >>
    >> + /* Determine whether or not BIOS supports transflective backlight */
    >> + ret = get_tr_backlight_status(dev,&value) ? false : true;
    >> + dev->tr_backlight_supported = ret;
    >> + if (ret) {
    >> + int power = value ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN;
    >> + dev->backlight_dev->props.power = power;
    >> + } else {
    >> + dev->backlight_dev->props.power = FB_BLANK_UNBLANK;
    >> + }
    >> +
    >> /* Register rfkill switch for Bluetooth */
    >> if (hci_get_bt_present(dev,&bt_present) == HCI_SUCCESS&& bt_present) {
    >> dev->bt_rfk = rfkill_alloc("Toshiba Bluetooth",
    >> --
    >> 1.7.7.6
    >> --
    >> To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in
    >> the body of a message to majordomo@vger.kernel.org
    >> More majordomo info at http://vger.kernel.org/majordomo-info.html



    \
     
     \ /
      Last update: 2012-02-23 15:57    [W:0.034 / U:0.696 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site