aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/olpc_dcon/olpc_dcon.c
diff options
context:
space:
mode:
authorAndres Salomon <dilinger@queued.net>2011-02-10 17:54:58 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-18 12:33:21 -0800
commit309ef2a25e8d3d5962bb0824c58ea39c12c166ef (patch)
treec8365f91787aba96b9c5a81a16ff0e9d79101f5c /drivers/staging/olpc_dcon/olpc_dcon.c
parentbbe963f1b98c90980e33086d726f0963e286d1b4 (diff)
downloadkernel_samsung_smdk4412-309ef2a25e8d3d5962bb0824c58ea39c12c166ef.zip
kernel_samsung_smdk4412-309ef2a25e8d3d5962bb0824c58ea39c12c166ef.tar.gz
kernel_samsung_smdk4412-309ef2a25e8d3d5962bb0824c58ea39c12c166ef.tar.bz2
staging: olpc_dcon: move more global variables into dcon_priv
Global variables dcon_switched, dcon_irq_time, and dcon_load_time can all be moved into the dcon_priv struct now that dcon_interrupt has access to dcon_priv. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/olpc_dcon/olpc_dcon.c')
-rw-r--r--drivers/staging/olpc_dcon/olpc_dcon.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c
index cdd8718..07abdfa 100644
--- a/drivers/staging/olpc_dcon/olpc_dcon.c
+++ b/drivers/staging/olpc_dcon/olpc_dcon.c
@@ -53,11 +53,6 @@ static struct platform_device *dcon_device;
/* Backlight device */
static struct backlight_device *dcon_bl_dev;
-/* Variables used during switches */
-static int dcon_switched;
-static struct timespec dcon_irq_time;
-static struct timespec dcon_load_time;
-
static DECLARE_WAIT_QUEUE_HEAD(dcon_wait_queue);
static unsigned short normal_i2c[] = { 0x0d, I2C_CLIENT_END };
@@ -297,12 +292,12 @@ static void dcon_sleep(struct dcon_priv *dcon, bool sleep)
* normally we don't change it this fast, so in general we won't
* delay here.
*/
-void dcon_load_holdoff(void)
+static void dcon_load_holdoff(struct dcon_priv *dcon)
{
struct timespec delta_t, now;
while (1) {
getnstimeofday(&now);
- delta_t = timespec_sub(now, dcon_load_time);
+ delta_t = timespec_sub(now, dcon->load_time);
if (delta_t.tv_sec != 0 ||
delta_t.tv_nsec > NSEC_PER_MSEC * 20) {
break;
@@ -346,9 +341,9 @@ static void dcon_source_switch(struct work_struct *work)
if (dcon->curr_src == source)
return;
- dcon_load_holdoff();
+ dcon_load_holdoff(dcon);
- dcon_switched = 0;
+ dcon->switched = false;
switch (source) {
case DCON_SOURCE_CPU:
@@ -361,10 +356,10 @@ static void dcon_source_switch(struct work_struct *work)
else {
/* Wait up to one second for the scanline interrupt */
wait_event_timeout(dcon_wait_queue,
- dcon_switched == 1, HZ);
+ dcon->switched == true, HZ);
}
- if (!dcon_switched)
+ if (!dcon->switched)
printk(KERN_ERR "olpc-dcon: Timeout entering CPU mode; expect a screen glitch.\n");
/* Turn off the scanline interrupt */
@@ -387,7 +382,7 @@ static void dcon_source_switch(struct work_struct *work)
/* And turn off the DCON */
pdata->set_dconload(1);
- getnstimeofday(&dcon_load_time);
+ getnstimeofday(&dcon->load_time);
printk(KERN_INFO "olpc-dcon: The CPU has control\n");
break;
@@ -403,13 +398,13 @@ static void dcon_source_switch(struct work_struct *work)
/* Clear DCONLOAD - this implies that the DCON is in control */
pdata->set_dconload(0);
- getnstimeofday(&dcon_load_time);
+ getnstimeofday(&dcon->load_time);
t = schedule_timeout(HZ/2);
remove_wait_queue(&dcon_wait_queue, &wait);
set_current_state(TASK_RUNNING);
- if (!dcon_switched) {
+ if (!dcon->switched) {
printk(KERN_ERR "olpc-dcon: Timeout entering DCON mode; expect a screen glitch.\n");
} else {
/* sometimes the DCON doesn't follow its own rules,
@@ -423,14 +418,14 @@ static void dcon_source_switch(struct work_struct *work)
* deassert and reassert, and hope for the best.
* see http://dev.laptop.org/ticket/9664
*/
- delta_t = timespec_sub(dcon_irq_time, dcon_load_time);
- if (dcon_switched && delta_t.tv_sec == 0 &&
+ delta_t = timespec_sub(dcon->irq_time, dcon->load_time);
+ if (dcon->switched && delta_t.tv_sec == 0 &&
delta_t.tv_nsec < NSEC_PER_MSEC * 20) {
printk(KERN_ERR "olpc-dcon: missed loading, retrying\n");
pdata->set_dconload(1);
mdelay(41);
pdata->set_dconload(0);
- getnstimeofday(&dcon_load_time);
+ getnstimeofday(&dcon->load_time);
mdelay(41);
}
}
@@ -815,8 +810,8 @@ irqreturn_t dcon_interrupt(int irq, void *id)
case 2: /* switch to DCON mode */
case 1: /* switch to CPU mode */
- dcon_switched = 1;
- getnstimeofday(&dcon_irq_time);
+ dcon->switched = true;
+ getnstimeofday(&dcon->irq_time);
wake_up(&dcon_wait_queue);
break;
@@ -828,9 +823,9 @@ irqreturn_t dcon_interrupt(int irq, void *id)
* of the DCON happened long before this point.
* see http://dev.laptop.org/ticket/9869
*/
- if (dcon->curr_src != dcon->pending_src && !dcon_switched) {
- dcon_switched = 1;
- getnstimeofday(&dcon_irq_time);
+ if (dcon->curr_src != dcon->pending_src && !dcon->switched) {
+ dcon->switched = true;
+ getnstimeofday(&dcon->irq_time);
wake_up(&dcon_wait_queue);
printk(KERN_DEBUG "olpc-dcon: switching w/ status 0/0\n");
} else {