Commit f2db7c64 authored by Michał Kępień's avatar Michał Kępień Committed by Darren Hart (VMware)

platform/x86: fujitsu-laptop: use device-specific data in backlight code

To prevent using module-wide data in backlight-related code, employ
acpi_driver_data() and bl_get_data() where possible to fetch
device-specific data to work on in each function.  This makes the input
local variable in acpi_fujitsu_bl_notify() and the acpi_handle field of
struct fujitsu_bl redundant, so remove them.
Signed-off-by: default avatarMichał Kępień <kernel@kempniu.pl>
Reviewed-by: default avatarJonathan Woithe <jwoithe@just42.net>
Signed-off-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
parent 679374e4
...@@ -130,7 +130,6 @@ ...@@ -130,7 +130,6 @@
/* Device controlling the backlight and associated keys */ /* Device controlling the backlight and associated keys */
struct fujitsu_bl { struct fujitsu_bl {
acpi_handle acpi_handle;
struct input_dev *input; struct input_dev *input;
char phys[32]; char phys[32];
struct backlight_device *bl_device; struct backlight_device *bl_device;
...@@ -189,14 +188,15 @@ static int call_fext_func(int func, int op, int feature, int state) ...@@ -189,14 +188,15 @@ static int call_fext_func(int func, int op, int feature, int state)
/* Hardware access for LCD brightness control */ /* Hardware access for LCD brightness control */
static int set_lcd_level(int level) static int set_lcd_level(struct acpi_device *device, int level)
{ {
struct fujitsu_bl *priv = acpi_driver_data(device);
acpi_status status; acpi_status status;
char *method; char *method;
switch (use_alt_lcd_levels) { switch (use_alt_lcd_levels) {
case -1: case -1:
if (acpi_has_method(fujitsu_bl->acpi_handle, "SBL2")) if (acpi_has_method(device->handle, "SBL2"))
method = "SBL2"; method = "SBL2";
else else
method = "SBLL"; method = "SBLL";
...@@ -212,71 +212,74 @@ static int set_lcd_level(int level) ...@@ -212,71 +212,74 @@ static int set_lcd_level(int level)
vdbg_printk(FUJLAPTOP_DBG_TRACE, "set lcd level via %s [%d]\n", vdbg_printk(FUJLAPTOP_DBG_TRACE, "set lcd level via %s [%d]\n",
method, level); method, level);
if (level < 0 || level >= fujitsu_bl->max_brightness) if (level < 0 || level >= priv->max_brightness)
return -EINVAL; return -EINVAL;
status = acpi_execute_simple_method(fujitsu_bl->acpi_handle, method, status = acpi_execute_simple_method(device->handle, method, level);
level);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
vdbg_printk(FUJLAPTOP_DBG_ERROR, "Failed to evaluate %s\n", vdbg_printk(FUJLAPTOP_DBG_ERROR, "Failed to evaluate %s\n",
method); method);
return -ENODEV; return -ENODEV;
} }
fujitsu_bl->brightness_level = level; priv->brightness_level = level;
return 0; return 0;
} }
static int get_lcd_level(void) static int get_lcd_level(struct acpi_device *device)
{ {
struct fujitsu_bl *priv = acpi_driver_data(device);
unsigned long long state = 0; unsigned long long state = 0;
acpi_status status = AE_OK; acpi_status status = AE_OK;
vdbg_printk(FUJLAPTOP_DBG_TRACE, "get lcd level via GBLL\n"); vdbg_printk(FUJLAPTOP_DBG_TRACE, "get lcd level via GBLL\n");
status = acpi_evaluate_integer(fujitsu_bl->acpi_handle, "GBLL", NULL, status = acpi_evaluate_integer(device->handle, "GBLL", NULL, &state);
&state);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return 0; return 0;
fujitsu_bl->brightness_level = state & 0x0fffffff; priv->brightness_level = state & 0x0fffffff;
return fujitsu_bl->brightness_level; return priv->brightness_level;
} }
static int get_max_brightness(void) static int get_max_brightness(struct acpi_device *device)
{ {
struct fujitsu_bl *priv = acpi_driver_data(device);
unsigned long long state = 0; unsigned long long state = 0;
acpi_status status = AE_OK; acpi_status status = AE_OK;
vdbg_printk(FUJLAPTOP_DBG_TRACE, "get max lcd level via RBLL\n"); vdbg_printk(FUJLAPTOP_DBG_TRACE, "get max lcd level via RBLL\n");
status = acpi_evaluate_integer(fujitsu_bl->acpi_handle, "RBLL", NULL, status = acpi_evaluate_integer(device->handle, "RBLL", NULL, &state);
&state);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -1; return -1;
fujitsu_bl->max_brightness = state; priv->max_brightness = state;
return fujitsu_bl->max_brightness; return priv->max_brightness;
} }
/* Backlight device stuff */ /* Backlight device stuff */
static int bl_get_brightness(struct backlight_device *b) static int bl_get_brightness(struct backlight_device *b)
{ {
return b->props.power == FB_BLANK_POWERDOWN ? 0 : get_lcd_level(); struct acpi_device *device = bl_get_data(b);
return b->props.power == FB_BLANK_POWERDOWN ? 0 : get_lcd_level(device);
} }
static int bl_update_status(struct backlight_device *b) static int bl_update_status(struct backlight_device *b)
{ {
struct acpi_device *device = bl_get_data(b);
if (b->props.power == FB_BLANK_POWERDOWN) if (b->props.power == FB_BLANK_POWERDOWN)
call_fext_func(FUNC_BACKLIGHT, 0x1, 0x4, 0x3); call_fext_func(FUNC_BACKLIGHT, 0x1, 0x4, 0x3);
else else
call_fext_func(FUNC_BACKLIGHT, 0x1, 0x4, 0x0); call_fext_func(FUNC_BACKLIGHT, 0x1, 0x4, 0x0);
return set_lcd_level(b->props.brightness); return set_lcd_level(device, b->props.brightness);
} }
static const struct backlight_ops fujitsu_bl_ops = { static const struct backlight_ops fujitsu_bl_ops = {
...@@ -372,20 +375,21 @@ static int acpi_fujitsu_bl_input_setup(struct acpi_device *device) ...@@ -372,20 +375,21 @@ static int acpi_fujitsu_bl_input_setup(struct acpi_device *device)
static int fujitsu_backlight_register(struct acpi_device *device) static int fujitsu_backlight_register(struct acpi_device *device)
{ {
struct fujitsu_bl *priv = acpi_driver_data(device);
const struct backlight_properties props = { const struct backlight_properties props = {
.brightness = fujitsu_bl->brightness_level, .brightness = priv->brightness_level,
.max_brightness = fujitsu_bl->max_brightness - 1, .max_brightness = priv->max_brightness - 1,
.type = BACKLIGHT_PLATFORM .type = BACKLIGHT_PLATFORM
}; };
struct backlight_device *bd; struct backlight_device *bd;
bd = devm_backlight_device_register(&device->dev, "fujitsu-laptop", bd = devm_backlight_device_register(&device->dev, "fujitsu-laptop",
&device->dev, NULL, &device->dev, device,
&fujitsu_bl_ops, &props); &fujitsu_bl_ops, &props);
if (IS_ERR(bd)) if (IS_ERR(bd))
return PTR_ERR(bd); return PTR_ERR(bd);
fujitsu_bl->bl_device = bd; priv->bl_device = bd;
return 0; return 0;
} }
...@@ -407,7 +411,6 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device) ...@@ -407,7 +411,6 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device)
return -ENOMEM; return -ENOMEM;
fujitsu_bl = priv; fujitsu_bl = priv;
fujitsu_bl->acpi_handle = device->handle;
sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_BL_DEVICE_NAME); sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_BL_DEVICE_NAME);
sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS); sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS);
device->driver_data = priv; device->driver_data = priv;
...@@ -416,7 +419,7 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device) ...@@ -416,7 +419,7 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device)
if (error) if (error)
return error; return error;
error = acpi_bus_update_power(fujitsu_bl->acpi_handle, &state); error = acpi_bus_update_power(device->handle, &state);
if (error) { if (error) {
pr_err("Error reading power state\n"); pr_err("Error reading power state\n");
return error; return error;
...@@ -434,9 +437,9 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device) ...@@ -434,9 +437,9 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device)
pr_err("_INI Method failed\n"); pr_err("_INI Method failed\n");
} }
if (get_max_brightness() <= 0) if (get_max_brightness(device) <= 0)
fujitsu_bl->max_brightness = FUJITSU_LCD_N_LEVELS; priv->max_brightness = FUJITSU_LCD_N_LEVELS;
get_lcd_level(); get_lcd_level(device);
error = fujitsu_backlight_register(device); error = fujitsu_backlight_register(device);
if (error) if (error)
...@@ -449,21 +452,19 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device) ...@@ -449,21 +452,19 @@ static int acpi_fujitsu_bl_add(struct acpi_device *device)
static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event) static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event)
{ {
struct input_dev *input; struct fujitsu_bl *priv = acpi_driver_data(device);
int oldb, newb; int oldb, newb;
input = fujitsu_bl->input;
if (event != ACPI_FUJITSU_NOTIFY_CODE1) { if (event != ACPI_FUJITSU_NOTIFY_CODE1) {
vdbg_printk(FUJLAPTOP_DBG_WARN, vdbg_printk(FUJLAPTOP_DBG_WARN,
"unsupported event [0x%x]\n", event); "unsupported event [0x%x]\n", event);
sparse_keymap_report_event(input, -1, 1, true); sparse_keymap_report_event(priv->input, -1, 1, true);
return; return;
} }
oldb = fujitsu_bl->brightness_level; oldb = priv->brightness_level;
get_lcd_level(); get_lcd_level(device);
newb = fujitsu_bl->brightness_level; newb = priv->brightness_level;
vdbg_printk(FUJLAPTOP_DBG_TRACE, "brightness button event [%i -> %i]\n", vdbg_printk(FUJLAPTOP_DBG_TRACE, "brightness button event [%i -> %i]\n",
oldb, newb); oldb, newb);
...@@ -472,9 +473,9 @@ static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event) ...@@ -472,9 +473,9 @@ static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event)
return; return;
if (!disable_brightness_adjust) if (!disable_brightness_adjust)
set_lcd_level(newb); set_lcd_level(device, newb);
sparse_keymap_report_event(input, oldb < newb, 1, true); sparse_keymap_report_event(priv->input, oldb < newb, 1, true);
} }
/* ACPI device for hotkey handling */ /* ACPI device for hotkey handling */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment