diff options
author | Kees Cook <keescook@chromium.org> | 2017-10-24 13:08:35 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-11-01 18:48:10 +0300 |
commit | 05678497276e1ff9394f7f815d80b1f2d47e92f4 (patch) | |
tree | bdcf8b49cacaf68fd4609662226755dba98c410c /drivers/usb/musb/tusb6010.c | |
parent | 0c63636440504f0f14cc3da5fb208eeb1598a840 (diff) | |
download | linux-05678497276e1ff9394f7f815d80b1f2d47e92f4.tar.xz |
usb: musb: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.
Instead of a per-device static timer variable, a spare timer "dev_timer"
is added to the musb structure for devices to use for their per-device
timer.
Cc: linux-usb@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: Bin Liu <b-liu@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/musb/tusb6010.c')
-rw-r--r-- | drivers/usb/musb/tusb6010.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 4eb640c54f2c..f8fce7df654f 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -452,11 +452,9 @@ static int tusb_musb_vbus_status(struct musb *musb) return ret; } -static struct timer_list musb_idle_timer; - -static void musb_do_idle(unsigned long _musb) +static void musb_do_idle(struct timer_list *t) { - struct musb *musb = (void *)_musb; + struct musb *musb = from_timer(musb, t, dev_timer); unsigned long flags; spin_lock_irqsave(&musb->lock, flags); @@ -523,13 +521,13 @@ static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout) && (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON))) { dev_dbg(musb->controller, "%s active, deleting timer\n", usb_otg_state_string(musb->xceiv->otg->state)); - del_timer(&musb_idle_timer); + del_timer(&musb->dev_timer); last_timer = jiffies; return; } if (time_after(last_timer, timeout)) { - if (!timer_pending(&musb_idle_timer)) + if (!timer_pending(&musb->dev_timer)) last_timer = timeout; else { dev_dbg(musb->controller, "Longer idle timer already pending, ignoring\n"); @@ -541,7 +539,7 @@ static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout) dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", usb_otg_state_string(musb->xceiv->otg->state), (unsigned long)jiffies_to_msecs(timeout - jiffies)); - mod_timer(&musb_idle_timer, timeout); + mod_timer(&musb->dev_timer, timeout); } /* ticks of 60 MHz clock */ @@ -873,7 +871,7 @@ static irqreturn_t tusb_musb_interrupt(int irq, void *__hci) } if (int_src & TUSB_INT_SRC_USB_IP_CONN) - del_timer(&musb_idle_timer); + del_timer(&musb->dev_timer); /* OTG state change reports (annoyingly) not issued by Mentor core */ if (int_src & (TUSB_INT_SRC_VBUS_SENSE_CHNG @@ -982,7 +980,7 @@ static void tusb_musb_disable(struct musb *musb) musb_writel(tbase, TUSB_DMA_INT_MASK, 0x7fffffff); musb_writel(tbase, TUSB_GPIO_INT_MASK, 0x1ff); - del_timer(&musb_idle_timer); + del_timer(&musb->dev_timer); if (is_dma_capable() && !dma_off) { printk(KERN_WARNING "%s %s: dma still active\n", @@ -1142,7 +1140,7 @@ static int tusb_musb_init(struct musb *musb) musb->xceiv->set_power = tusb_draw_power; the_musb = musb; - setup_timer(&musb_idle_timer, musb_do_idle, (unsigned long) musb); + timer_setup(&musb->dev_timer, musb_do_idle, 0); done: if (ret < 0) { @@ -1156,7 +1154,7 @@ done: static int tusb_musb_exit(struct musb *musb) { - del_timer_sync(&musb_idle_timer); + del_timer_sync(&musb->dev_timer); the_musb = NULL; if (musb->board_set_power) |