diff options
author | Daniel Solomon <daniels@nvidia.com> | 2013-04-24 15:59:23 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 13:13:10 -0700 |
commit | 23c79b2d47e2884c6530cfdb8a13a0c410ff4eaa (patch) | |
tree | 52ca279e5a9e78898090d42c77e268c9c72b8994 /drivers/video/backlight | |
parent | 5566d8dfb0cac148e5e43345c40bb68c58d7940b (diff) |
backlight: max8831: Change brightness setting under System EDP constraints
Change backlight setting behavior to the following:
1) Compare requested brightness with available EDP states
2) Request the next higher EDP state from EDP manager
3) Set brightness to min(requested brightness, approved brightness)
Bug 1276795
Change-Id: I77ddc2f74bcd3e848bb8d4df59f524f871db7557
Signed-off-by: Daniel Solomon <daniels@nvidia.com>
Reviewed-on: http://git-master/r/222671
(cherry picked from commit 5a3e41592a9e41b9992f2f80437d7b7195f0fe24)
Reviewed-on: http://git-master/r/226777
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Karthik Ramakrishnan <karthikr@nvidia.com>
Tested-by: Karthik Ramakrishnan <karthikr@nvidia.com>
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Diffstat (limited to 'drivers/video/backlight')
-rw-r--r-- | drivers/video/backlight/max8831_bl.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/video/backlight/max8831_bl.c b/drivers/video/backlight/max8831_bl.c index ca3379b24fe8..a7cf42f754ad 100644 --- a/drivers/video/backlight/max8831_bl.c +++ b/drivers/video/backlight/max8831_bl.c @@ -81,25 +81,39 @@ static int max8831_backlight_set_with_edp(struct backlight_device *bl, { struct max8831_backlight_data *data = bl_get_data(bl); struct device *dev = data->max8831_dev; - unsigned int approved; + unsigned int approved_state; + int unsigned approved_brightness; int ret; unsigned int edp_state; + unsigned int edp_brightness; unsigned int i; + if (data->max8831_edp_client) { for (i = 0; i < MAX8831_EDP_NUM_STATES; i++) { - if (brightness >= data->edp_brightness_states[i]) + edp_brightness = data->edp_brightness_states[i]; + if (brightness > edp_brightness) { + /* Choose the next higher EDP state */ + if (i) + i--; + break; + } else if (brightness == edp_brightness) break; } edp_state = i; ret = edp_update_client_request(data->max8831_edp_client, - edp_state, &approved); + edp_state, &approved_state); if (ret) { dev_err(dev, "E state transition failed\n"); return ret; } + + approved_brightness = + data->edp_brightness_states[approved_state]; + if (brightness > approved_brightness) + brightness = approved_brightness; } - max8831_backlight_set(bl, data->edp_brightness_states[approved]); + max8831_backlight_set(bl, brightness); return 0; } |