diff options
author | Tejun Heo <tj@kernel.org> | 2010-12-24 10:00:17 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-12-24 10:00:17 -0500 |
commit | afdb32f2e463a195c104555ac9a8cdd39a2b6561 (patch) | |
tree | c15b2106066f2c8e838eabacc6f1525973e55477 | |
parent | 0d9c76aedbac3ad8ac4e99a2b441bc3f91dd6679 (diff) |
mfd: update workqueue usages
flush_scheduled_work() is deprecated and scheduled to be removed.
* In menelaus, flush menelaus->work directly on probe failure. Also,
make sure the work isn't running on removal.
* In tps65010, cancel_delayed_work() + flush_scheduled_work() ->
cancel_delayed_work_sync(). While at it, remove unnecessary (void)
casts on return value, and use schedule_delayed_work() and
to_delayed_work() instead of using delayed_work's internal work
field.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r-- | drivers/mfd/menelaus.c | 3 | ||||
-rw-r--r-- | drivers/mfd/tps65010.c | 13 |
2 files changed, 8 insertions, 8 deletions
diff --git a/drivers/mfd/menelaus.c b/drivers/mfd/menelaus.c index 4ba85bbdb4c1..9cee8e7f0bcb 100644 --- a/drivers/mfd/menelaus.c +++ b/drivers/mfd/menelaus.c | |||
@@ -1259,7 +1259,7 @@ static int menelaus_probe(struct i2c_client *client, | |||
1259 | return 0; | 1259 | return 0; |
1260 | fail2: | 1260 | fail2: |
1261 | free_irq(client->irq, menelaus); | 1261 | free_irq(client->irq, menelaus); |
1262 | flush_scheduled_work(); | 1262 | flush_work_sync(&menelaus->work); |
1263 | fail1: | 1263 | fail1: |
1264 | kfree(menelaus); | 1264 | kfree(menelaus); |
1265 | return err; | 1265 | return err; |
@@ -1270,6 +1270,7 @@ static int __exit menelaus_remove(struct i2c_client *client) | |||
1270 | struct menelaus_chip *menelaus = i2c_get_clientdata(client); | 1270 | struct menelaus_chip *menelaus = i2c_get_clientdata(client); |
1271 | 1271 | ||
1272 | free_irq(client->irq, menelaus); | 1272 | free_irq(client->irq, menelaus); |
1273 | flush_work_sync(&menelaus->work); | ||
1273 | kfree(menelaus); | 1274 | kfree(menelaus); |
1274 | the_menelaus = NULL; | 1275 | the_menelaus = NULL; |
1275 | return 0; | 1276 | return 0; |
diff --git a/drivers/mfd/tps65010.c b/drivers/mfd/tps65010.c index d0016b67d125..90187fe33e04 100644 --- a/drivers/mfd/tps65010.c +++ b/drivers/mfd/tps65010.c | |||
@@ -242,7 +242,7 @@ static int dbg_show(struct seq_file *s, void *_) | |||
242 | seq_printf(s, "mask2 %s\n", buf); | 242 | seq_printf(s, "mask2 %s\n", buf); |
243 | /* ignore ackint2 */ | 243 | /* ignore ackint2 */ |
244 | 244 | ||
245 | (void) schedule_delayed_work(&tps->work, POWER_POLL_DELAY); | 245 | schedule_delayed_work(&tps->work, POWER_POLL_DELAY); |
246 | 246 | ||
247 | 247 | ||
248 | /* VMAIN voltage, enable lowpower, etc */ | 248 | /* VMAIN voltage, enable lowpower, etc */ |
@@ -400,7 +400,7 @@ static void tps65010_interrupt(struct tps65010 *tps) | |||
400 | && (tps->chgstatus & (TPS_CHG_USB|TPS_CHG_AC))) | 400 | && (tps->chgstatus & (TPS_CHG_USB|TPS_CHG_AC))) |
401 | poll = 1; | 401 | poll = 1; |
402 | if (poll) | 402 | if (poll) |
403 | (void) schedule_delayed_work(&tps->work, POWER_POLL_DELAY); | 403 | schedule_delayed_work(&tps->work, POWER_POLL_DELAY); |
404 | 404 | ||
405 | /* also potentially gpio-in rise or fall */ | 405 | /* also potentially gpio-in rise or fall */ |
406 | } | 406 | } |
@@ -410,7 +410,7 @@ static void tps65010_work(struct work_struct *work) | |||
410 | { | 410 | { |
411 | struct tps65010 *tps; | 411 | struct tps65010 *tps; |
412 | 412 | ||
413 | tps = container_of(work, struct tps65010, work.work); | 413 | tps = container_of(to_delayed_work(work), struct tps65010, work); |
414 | mutex_lock(&tps->lock); | 414 | mutex_lock(&tps->lock); |
415 | 415 | ||
416 | tps65010_interrupt(tps); | 416 | tps65010_interrupt(tps); |
@@ -448,7 +448,7 @@ static irqreturn_t tps65010_irq(int irq, void *_tps) | |||
448 | 448 | ||
449 | disable_irq_nosync(irq); | 449 | disable_irq_nosync(irq); |
450 | set_bit(FLAG_IRQ_ENABLE, &tps->flags); | 450 | set_bit(FLAG_IRQ_ENABLE, &tps->flags); |
451 | (void) schedule_work(&tps->work.work); | 451 | schedule_delayed_work(&tps->work, 0); |
452 | return IRQ_HANDLED; | 452 | return IRQ_HANDLED; |
453 | } | 453 | } |
454 | 454 | ||
@@ -527,8 +527,7 @@ static int __exit tps65010_remove(struct i2c_client *client) | |||
527 | } | 527 | } |
528 | if (client->irq > 0) | 528 | if (client->irq > 0) |
529 | free_irq(client->irq, tps); | 529 | free_irq(client->irq, tps); |
530 | cancel_delayed_work(&tps->work); | 530 | cancel_delayed_work_sync(&tps->work); |
531 | flush_scheduled_work(); | ||
532 | debugfs_remove(tps->file); | 531 | debugfs_remove(tps->file); |
533 | kfree(tps); | 532 | kfree(tps); |
534 | the_tps = NULL; | 533 | the_tps = NULL; |
@@ -720,7 +719,7 @@ int tps65010_set_vbus_draw(unsigned mA) | |||
720 | && test_and_set_bit( | 719 | && test_and_set_bit( |
721 | FLAG_VBUS_CHANGED, &the_tps->flags)) { | 720 | FLAG_VBUS_CHANGED, &the_tps->flags)) { |
722 | /* gadget drivers call this in_irq() */ | 721 | /* gadget drivers call this in_irq() */ |
723 | (void) schedule_work(&the_tps->work.work); | 722 | schedule_delayed_work(&the_tps->work, 0); |
724 | } | 723 | } |
725 | local_irq_restore(flags); | 724 | local_irq_restore(flags); |
726 | 725 | ||