staging/olpc_dcon: drop fb_notifier code
PATCH 3/5 staging/olpc_dcon: drop fb_notifier code
Previously we registered a notifier block to inform us of any framebuffer device changes; if the screen was blanked or unblanked, we'd put the DCON to sleep or wake it up.
Turns out that the backlight code registers a notifier block as well and calls the update_status hook, so we can just use that to put the DCON to sleep. For those status updates where the blanking isn't changed, dcon_sleep will do nothing.
Signed-off-by Andres Salomon <[email protected]>
--- drivers/staging/olpc_dcon/olpc_dcon.c | 25 ++++--------------------- drivers/staging/olpc_dcon/olpc_dcon.h | 1 - 2 files changed, 4 insertions(+), 22 deletions(-)
drivers/staging/olpc_dcon/olpc_dcon.c +4 -21
@@ -520,6 +520,10 @@ static int dcon_bl_update(struct backlight_device *dev)if (level != dcon->bl_val)dcon_set_backlight (dcon, level); +/* power down the DCON when the screen is blanked */ +if (!dcon->ignore_fb_events) +dcon_sleep (dcon, !!(dev->props.state &BL_CORE_FBBLANK )); +return 0 ; }
@@ -565,24 +569,6 @@ static struct notifier_block dcon_panic_nb = { .notifier_call = unfreeze_on_panic, }; -/* -* When the framebuffer sleeps due to external sources (e.g. user idle), power -* down the DCON as well. Power it back up when the fb comes back to life. -*/ -static int dcon_fb_notifier (struct notifier_block *self, -unsigned long event,void *data) -{ -struct fb_event *evdata = data; - struct dcon_priv *dcon = container_of(self, struct dcon_priv, - fbevent_nb); -int *blank = (int *)evdata->data; -if (((event !=FB_EVENT_BLANK ) && (event !=FB_EVENT_CONBLANK )) || - dcon->ignore_fb_events) -return 0 ; -dcon_sleep (dcon, *blank ? true : false); -return 0 ; -} -static int dcon_detect (struct i2c_client *client,struct i2c_board_info *info) {strlcpy (info->type,"olpc_dcon" ,I2C_NAME_SIZE );
@@ -607,7 +593,6 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id)INIT_WORK (&dcon->switch_source, dcon_source_switch); dcon->reboot_nb.notifier_call = dcon_reboot_notify; dcon->reboot_nb.priority =-1 ; - dcon->fbevent_nb.notifier_call = dcon_fb_notifier;i2c_set_clientdata (client, dcon);
@@ -662,7 +647,6 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id)register_reboot_notifier (&dcon->reboot_nb);atomic_notifier_chain_register (&panic_notifier_list, &dcon_panic_nb); -fb_register_client (&dcon->fbevent_nb);return 0 ;
@@ -683,7 +667,6 @@ static int dcon_remove(struct i2c_client *client) {struct dcon_priv *dcon =i2c_get_clientdata (client); -fb_unregister_client (&dcon->fbevent_nb);unregister_reboot_notifier (&dcon->reboot_nb);atomic_notifier_chain_unregister (&panic_notifier_list, &dcon_panic_nb);
drivers/staging/olpc_dcon/olpc_dcon.h +0 -1
@@ -55,7 +55,6 @@ struct dcon_priv {wait_queue_head_t waitq;struct work_struct switch_source;struct notifier_block reboot_nb; -struct notifier_block fbevent_nb;/* Shadow register for the DCON_REG_MODE register */ u8 disp_mode;
Signature · 1 line
1.7.10.4