Skip to content

Commit

Permalink
[PATCH] i2c: convert m41t00 to use a workqueue
Browse files Browse the repository at this point in the history
The m41t00 i2c/rtc driver currently uses a tasklet to schedule
interrupt-level writes to the rtc.  This patch causes the driver
to use a workqueue instead.

Signed-off-by: Mark A. Greer <mgreer@mvista.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Mark A. Greer authored and Greg Kroah-Hartman committed Apr 14, 2006
1 parent 524465d commit 8c750c0
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions drivers/i2c/chips/m41t00.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <linux/rtc.h>
#include <linux/bcd.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>

#include <asm/time.h>
#include <asm/rtc.h>
Expand Down Expand Up @@ -111,7 +112,7 @@ m41t00_get_rtc_time(void)
}

static void
m41t00_set_tlet(ulong arg)
m41t00_set(void *arg)
{
struct rtc_time tm;
ulong nowtime = *(ulong *)arg;
Expand Down Expand Up @@ -145,19 +146,19 @@ m41t00_set_tlet(ulong arg)
return;
}

static ulong new_time;

DECLARE_TASKLET_DISABLED(m41t00_tasklet, m41t00_set_tlet, (ulong)&new_time);
static ulong new_time;
static struct workqueue_struct *m41t00_wq;
static DECLARE_WORK(m41t00_work, m41t00_set, &new_time);

int
m41t00_set_rtc_time(ulong nowtime)
{
new_time = nowtime;

if (in_interrupt())
tasklet_schedule(&m41t00_tasklet);
queue_work(m41t00_wq, &m41t00_work);
else
m41t00_set_tlet((ulong)&new_time);
m41t00_set(&new_time);

return 0;
}
Expand Down Expand Up @@ -189,6 +190,7 @@ m41t00_probe(struct i2c_adapter *adap, int addr, int kind)
return rc;
}

m41t00_wq = create_singlethread_workqueue("m41t00");
save_client = client;
return 0;
}
Expand All @@ -206,7 +208,7 @@ m41t00_detach(struct i2c_client *client)

if ((rc = i2c_detach_client(client)) == 0) {
kfree(client);
tasklet_kill(&m41t00_tasklet);
destroy_workqueue(m41t00_wq);
}
return rc;
}
Expand Down

0 comments on commit 8c750c0

Please sign in to comment.