diff options
| -rw-r--r-- | drivers/leds/leds-lm3535.c | 35 | ||||
| -rw-r--r-- | drivers/video/omap2/displays/panel-minnow.c | 20 |
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; |