summaryrefslogtreecommitdiff
path: root/drivers/video/backlight
diff options
context:
space:
mode:
authorDaniel Solomon <daniels@nvidia.com>2013-04-24 15:59:23 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:13:10 -0700
commit23c79b2d47e2884c6530cfdb8a13a0c410ff4eaa (patch)
tree52ca279e5a9e78898090d42c77e268c9c72b8994 /drivers/video/backlight
parent5566d8dfb0cac148e5e43345c40bb68c58d7940b (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.c22
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;
}