Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 185053
b: refs/heads/master
c: 3e68ae7
h: refs/heads/master
i:
  185051: 9834419
v: v3
  • Loading branch information
Corentin Chary committed Feb 28, 2010
1 parent 45d0314 commit 9f2cda3
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6358bf2c4c309efc7c3cbc36466c32108c12c456
refs/heads/master: 3e68ae7c2a9076a694e46f49ec26323a7757eaad
37 changes: 20 additions & 17 deletions trunk/drivers/platform/x86/asus-laptop.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ struct asus_laptop {

int wireless_status;
bool have_rsts;
int lcd_state;

acpi_handle handle; /* the handle of the hotk device */
char status; /* status of the hotk, for LEDs, ... */
Expand Down Expand Up @@ -538,37 +539,42 @@ static int asus_led_init(struct asus_laptop *asus)
/*
* Backlight device
*/
static int get_lcd_state(struct asus_laptop *asus)
static int asus_lcd_status(struct asus_laptop *asus)
{
return read_status(asus, LCD_ON);
return asus->lcd_state;
}

static int set_lcd_state(struct asus_laptop *asus, int value)
static int asus_lcd_set(struct asus_laptop *asus, int value)
{
int lcd = 0;
acpi_status status = 0;

lcd = value ? 1 : 0;
lcd = !!value;

if (lcd == get_lcd_state(asus))
if (lcd == asus_lcd_status(asus))
return 0;

if (lcd_switch_handle) {
status = acpi_evaluate_object(lcd_switch_handle,
NULL, NULL, NULL);
if (!lcd_switch_handle)
return -ENODEV;

status = acpi_evaluate_object(lcd_switch_handle,
NULL, NULL, NULL);

if (ACPI_FAILURE(status))
pr_warning("Error switching LCD\n");
if (ACPI_FAILURE(status)) {
pr_warning("Error switching LCD\n");
return -ENODEV;
}

write_status(asus, NULL, lcd, LCD_ON);
asus->lcd_state = lcd;
return 0;
}

static void lcd_blank(struct asus_laptop *asus, int blank)
{
struct backlight_device *bd = asus->backlight_device;

asus->lcd_state = (blank == FB_BLANK_UNBLANK);

if (bd) {
bd->props.power = blank;
backlight_update_status(bd);
Expand Down Expand Up @@ -607,7 +613,7 @@ static int update_bl_status(struct backlight_device *bd)
return rv;

value = (bd->props.power == FB_BLANK_UNBLANK) ? 1 : 0;
return set_lcd_state(asus, value);
return asus_lcd_set(asus, value);
}

static struct backlight_ops asusbl_ops = {
Expand Down Expand Up @@ -1144,13 +1150,10 @@ static void asus_acpi_notify(struct acpi_device *device, u32 event)
* We need to tell the backlight device when the backlight power is
* switched
*/
if (event == ATKD_LCD_ON) {
write_status(asus, NULL, 1, LCD_ON);
if (event == ATKD_LCD_ON)
lcd_blank(asus, FB_BLANK_UNBLANK);
} else if (event == ATKD_LCD_OFF) {
write_status(asus, NULL, 0, LCD_ON);
else if (event == ATKD_LCD_OFF)
lcd_blank(asus, FB_BLANK_POWERDOWN);
}

/* TODO Find a better way to handle events count. */
count = asus->event_count[event % 128]++;
Expand Down

0 comments on commit 9f2cda3

Please sign in to comment.