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    [from the cache]
©2003-2011 Jasper Spaans