diff options
Diffstat (limited to 'drivers/platform/x86/panasonic-laptop.c')
| -rw-r--r-- | drivers/platform/x86/panasonic-laptop.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c index c9fc479fc29..726f02affcb 100644 --- a/drivers/platform/x86/panasonic-laptop.c +++ b/drivers/platform/x86/panasonic-laptop.c @@ -352,7 +352,7 @@ static int bl_set_status(struct backlight_device *bd)  	return acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, bright);  } -static struct backlight_ops pcc_backlight_ops = { +static const struct backlight_ops pcc_backlight_ops = {  	.get_brightness	= bl_get,  	.update_status	= bl_set_status,  }; @@ -600,6 +600,7 @@ static int acpi_pcc_hotkey_resume(struct acpi_device *device)  static int acpi_pcc_hotkey_add(struct acpi_device *device)  { +	struct backlight_properties props;  	struct pcc_acpi *pcc;  	int num_sifr, result; @@ -637,24 +638,25 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)  	if (result) {  		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,  				  "Error installing keyinput handler\n")); -		goto out_sinf; +		goto out_hotkey;  	} -	/* initialize backlight */ -	pcc->backlight = backlight_device_register("panasonic", NULL, pcc, -						   &pcc_backlight_ops); -	if (IS_ERR(pcc->backlight)) -		goto out_input; -  	if (!acpi_pcc_retrieve_biosdata(pcc, pcc->sinf)) {  		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,  				 "Couldn't retrieve BIOS data\n")); -		goto out_backlight; +		goto out_input; +	} +	/* initialize backlight */ +	memset(&props, 0, sizeof(struct backlight_properties)); +	props.max_brightness = pcc->sinf[SINF_AC_MAX_BRIGHT]; +	pcc->backlight = backlight_device_register("panasonic", NULL, pcc, +						   &pcc_backlight_ops, &props); +	if (IS_ERR(pcc->backlight)) { +		result = PTR_ERR(pcc->backlight); +		goto out_sinf;  	}  	/* read the initial brightness setting from the hardware */ -	pcc->backlight->props.max_brightness = -					pcc->sinf[SINF_AC_MAX_BRIGHT];  	pcc->backlight->props.brightness = pcc->sinf[SINF_AC_CUR_BRIGHT];  	/* read the initial sticky key mode from the hardware */ @@ -669,12 +671,12 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)  out_backlight:  	backlight_device_unregister(pcc->backlight); +out_sinf: +	kfree(pcc->sinf);  out_input:  	input_unregister_device(pcc->input_dev);  	/* no need to input_free_device() since core input API refcount and  	 * free()s the device */ -out_sinf: -	kfree(pcc->sinf);  out_hotkey:  	kfree(pcc);  |