summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/leds/leds-lm3535.c35
-rw-r--r--drivers/video/omap2/displays/panel-minnow.c20
2 files changed, 50 insertions, 5 deletions
diff --git a/drivers/leds/leds-lm3535.c b/drivers/leds/leds-lm3535.c
index bc6e5e53c2d..1fdde7c76ee 100644
--- a/drivers/leds/leds-lm3535.c
+++ b/drivers/leds/leds-lm3535.c
@@ -50,6 +50,11 @@
#ifdef CONFIG_LM3535_ESD_RECOVERY
#include <mot/esd_poll.h>
#endif /* CONFIG_LM3535_ESD_RECOVERY */
+#ifdef CONFIG_WAKEUP_SOURCE_NOTIFY
+#include <linux/notifier.h>
+#include <linux/wakeup_source_notify.h>
+#define MIN_DOCK_BVALUE 36
+#endif
#define MODULE_NAME "leds_lm3535"
@@ -275,6 +280,10 @@ struct lm3535 {
unsigned saved_bvalue; // Brightness before TCMD SUSPEND
//struct hrtimer timer;
struct work_struct work;
+#ifdef CONFIG_WAKEUP_SOURCE_NOTIFY
+ atomic_t docked;
+ struct notifier_block dock_nb;
+#endif
};
static DEFINE_MUTEX(lm3535_mutex);
@@ -496,6 +505,23 @@ static uint8_t lm3535_convert_value (unsigned value, unsigned zone)
return reg;
}
+#ifdef CONFIG_WAKEUP_SOURCE_NOTIFY
+static int lm3535_dock_notifier(struct notifier_block *self,
+ unsigned long action, void *dev)
+{
+ switch (action) {
+ case DISPLAY_WAKE_EVENT_DOCKON:
+ atomic_set(&lm3535_data.docked, 1);
+ break;
+ case DISPLAY_WAKE_EVENT_DOCKOFF:
+ atomic_set(&lm3535_data.docked, 0);
+ break;
+ }
+
+ return NOTIFY_OK;
+}
+#endif /* CONFIG_WAKEUP_SOURCE_NOTIFY */
+
#ifdef CONFIG_HAS_AMBIENTMODE
struct led_classdev *led_get_default_dev(void)
{
@@ -608,6 +634,10 @@ static void lm3535_brightness_set (struct led_classdev *led_cdev,
/* Calculate brightness value for each zone relative to its cap */
bvalue = lm3535_convert_value (value, bright_zone);
+#ifdef CONFIG_WAKEUP_SOURCE_NOTIFY
+ if (atomic_read(&lm3535_data.docked) && (bvalue < MIN_DOCK_BVALUE))
+ bvalue = MIN_DOCK_BVALUE; /* hard code for dock mode */
+#endif /* CONFIG_WAKEUP_SOURCE_NOTIFY */
/* Calculate number of steps for ramping */
nsteps = bvalue - lm3535_data.bvalue;
@@ -931,6 +961,11 @@ static int lm3535_probe (struct i2c_client *client,
//lm3535_brightness_set (&lm3535_led_noramp, 255);
lm3535_write_reg (LM3535_BRIGHTNESS_CTRL_REG_A, 0x79, __FUNCTION__);
lm3535_data.initialized = 1;
+#ifdef CONFIG_WAKEUP_SOURCE_NOTIFY
+ atomic_set(&lm3535_data.docked, 0);
+ lm3535_data.dock_nb.notifier_call = lm3535_dock_notifier;
+ wakeup_source_register_notify(&lm3535_data.dock_nb);
+#endif /* CONFIG_WAKEUP_SOURCE_NOTIFY */
return 0;
}
diff --git a/drivers/video/omap2/displays/panel-minnow.c b/drivers/video/omap2/displays/panel-minnow.c
index 848d4a38f05..475bb8caf91 100644
--- a/drivers/video/omap2/displays/panel-minnow.c
+++ b/drivers/video/omap2/displays/panel-minnow.c
@@ -61,7 +61,7 @@
#define DCS_GET_ID1 0xda
#define DCS_GET_ID2 0xdb
#define DCS_GET_ID3 0xdc
-#define DIM_BACKLIGHT 5
+#define DIM_BACKLIGHT_ALS 5
enum minnow_panel_component {
MINNOW_PANEL,
@@ -597,17 +597,21 @@ static void minnow_panel_start_ambient_alarm(struct minnow_panel_data *mpd)
enum refresh_rate {
REFRESH_RATE_30HZ,
REFRESH_RATE_45HZ,
+ REFRESH_RATE_60HZ,
};
#define minnow_panel_set_lowest_fps(mpd) \
minnow_panel_set_refresh_rate_mlocked(mpd, REFRESH_RATE_30HZ)
#define minnow_panel_set_default_fps(mpd) \
minnow_panel_set_refresh_rate_mlocked(mpd, REFRESH_RATE_45HZ)
+#define minnow_panel_set_dock_fps(mpd) \
+ minnow_panel_set_refresh_rate_mlocked(mpd, REFRESH_RATE_60HZ)
static int minnow_panel_set_refresh_rate_mlocked(struct minnow_panel_data *mpd,
enum refresh_rate rate)
{
static u8 ssd2848_vtcm_pcfrr[][6] = {
[REFRESH_RATE_30HZ] = {0x20, 0x10, 0x00, 0xEF, 0x00, 0x34},
- [REFRESH_RATE_45HZ] = {0x20, 0x10, 0x00, 0x5F, 0x00, 0x1F}
+ [REFRESH_RATE_45HZ] = {0x20, 0x10, 0x00, 0x5F, 0x00, 0x1F},
+ [REFRESH_RATE_60HZ] = {0x20, 0x10, 0x00, 0xF7, 0x00, 0x6C},
};
int r = 0;
@@ -3059,7 +3063,7 @@ static void minnow_panel_sync_display_status_mlocked(
static void led_set_dim_brightness(struct device *dev)
{
struct m4sensorhub_data *m4sensorhub;
- uint16_t als = DIM_BACKLIGHT; /* default value */
+ uint16_t als = DIM_BACKLIGHT_ALS; /* default value */
int size;
m4sensorhub = m4sensorhub_client_get_drvdata();
@@ -3081,8 +3085,8 @@ static int minnow_panel_change_state_mlocked(struct minnow_panel_data *mpd,
{
int r = 0;
- dev_info(&mpd->dssdev->dev, "change state(%d),"
- " current state(%d)\n", state, mpd->state);
+ dev_info(&mpd->dssdev->dev,
+ "change state %d ==> %d\n", mpd->state, state);
/* already in state, return success */
if (state == mpd->state) {
@@ -3138,6 +3142,12 @@ static int minnow_panel_change_state_mlocked(struct minnow_panel_data *mpd,
*/
if (mpd->state == DISPLAY_DISABLE)
goto _ret_;
+ /* check if it's ambient mode on dock */
+ if ((mpd->state == DISPLAY_ENABLE) && mpd->is_docked) {
+ /* switch to dock refresh rate */
+ minnow_panel_set_dock_fps(mpd);
+ break;
+ }
/* check if smart ambient mode feature enabled */
if (!is_smart_ambient_feature_enabled(mpd))
break;