From: Rebecca Schultz Zavin Date: Tue, 14 Dec 2010 21:57:09 +0000 (-0800) Subject: leds: lp8550: Add regulator to lp8550 lighting driver X-Git-Tag: firefly_0821_release~9834^2~248 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b296ab1b2ab01e9fedb7cc380527636149841c12;p=firefly-linux-kernel-4.4.55.git leds: lp8550: Add regulator to lp8550 lighting driver Change-Id: I9e57aec4fca3352ce2e689ca44b5a4b3bdfe2ed2 Signed-off-by: Rebecca Schultz Zavin --- diff --git a/drivers/leds/leds-lp8550.c b/drivers/leds/leds-lp8550.c index 9e77b42bf39c..3a89a99b9a4d 100755 --- a/drivers/leds/leds-lp8550.c +++ b/drivers/leds/leds-lp8550.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #define DEBUG @@ -66,6 +68,7 @@ struct lp8550_data { int brightness; atomic_t enabled; bool suspended; + struct regulator *regulator; #ifdef CONFIG_HAS_EARLYSUSPEND struct early_suspend early_suspender; #endif @@ -246,8 +249,12 @@ static void lp8550_brightness_write(struct lp8550_data *led_data) __func__, error); } atomic_set(&led_data->enabled, 0); + if (!IS_ERR_OR_NULL(led_data->regulator)) + regulator_disable(led_data->regulator); } else { if (!atomic_cmpxchg(&led_data->enabled, 0, 1)) { + if (!IS_ERR_OR_NULL(led_data->regulator)) + regulator_enable(led_data->regulator); if (lp8550_write_reg(led_data, LP8550_DEVICE_CTRL, led_data->led_pdata->dev_ctrl_config | 0x01)) pr_err("%s:writing failed while setting brightness:%d\n", @@ -444,6 +451,10 @@ static int ld_lp8550_probe(struct i2c_client *client, } #endif + led_data->regulator = regulator_get(&client->dev, "vio"); + if (!IS_ERR_OR_NULL(led_data->regulator)) + regulator_enable(led_data->regulator); + return 0; err_class_reg_failed: @@ -460,6 +471,8 @@ static int ld_lp8550_remove(struct i2c_client *client) #ifdef DEBUG device_remove_file(led_data->led_dev.dev, &dev_attr_registers); #endif + if (!IS_ERR_OR_NULL(led_data->regulator)) + regulator_put(led_data->regulator); led_classdev_unregister(&led_data->led_dev); kfree(led_data); return 0;