diff options
Diffstat (limited to 'drivers/usb/host/r8a66597-hcd.c')
-rw-r--r-- | drivers/usb/host/r8a66597-hcd.c | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c index 5e5fc9d7d533..f3d9ba420a97 100644 --- a/drivers/usb/host/r8a66597-hcd.c +++ b/drivers/usb/host/r8a66597-hcd.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * R8A66597 HCD (Host Controller Driver) * @@ -7,20 +8,6 @@ * Portions Copyright (C) 1999 Roman Weissgaerber * * Author : Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * */ #include <linux/module.h> @@ -1273,7 +1260,7 @@ static void set_td_timer(struct r8a66597 *r8a66597, struct r8a66597_td *td) break; } - mod_timer(&r8a66597->td_timer[td->pipenum], + mod_timer(&r8a66597->timers[td->pipenum].td, jiffies + msecs_to_jiffies(time)); } } @@ -1733,9 +1720,10 @@ static void r8a66597_root_hub_control(struct r8a66597 *r8a66597, int port) } } -static void r8a66597_interval_timer(unsigned long _r8a66597) +static void r8a66597_interval_timer(struct timer_list *t) { - struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597; + struct r8a66597_timers *timers = from_timer(timers, t, interval); + struct r8a66597 *r8a66597 = timers->r8a66597; unsigned long flags; u16 pipenum; struct r8a66597_td *td; @@ -1745,7 +1733,7 @@ static void r8a66597_interval_timer(unsigned long _r8a66597) for (pipenum = 0; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) { if (!(r8a66597->interval_map & (1 << pipenum))) continue; - if (timer_pending(&r8a66597->interval_timer[pipenum])) + if (timer_pending(&r8a66597->timers[pipenum].interval)) continue; td = r8a66597_get_td(r8a66597, pipenum); @@ -1756,9 +1744,10 @@ static void r8a66597_interval_timer(unsigned long _r8a66597) spin_unlock_irqrestore(&r8a66597->lock, flags); } -static void r8a66597_td_timer(unsigned long _r8a66597) +static void r8a66597_td_timer(struct timer_list *t) { - struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597; + struct r8a66597_timers *timers = from_timer(timers, t, td); + struct r8a66597 *r8a66597 = timers->r8a66597; unsigned long flags; u16 pipenum; struct r8a66597_td *td, *new_td = NULL; @@ -1768,7 +1757,7 @@ static void r8a66597_td_timer(unsigned long _r8a66597) for (pipenum = 0; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) { if (!(r8a66597->timeout_map & (1 << pipenum))) continue; - if (timer_pending(&r8a66597->td_timer[pipenum])) + if (timer_pending(&r8a66597->timers[pipenum].td)) continue; td = r8a66597_get_td(r8a66597, pipenum); @@ -1942,7 +1931,7 @@ static int r8a66597_urb_enqueue(struct usb_hcd *hcd, if (request) { if (td->pipe->info.timer_interval) { r8a66597->interval_map |= 1 << td->pipenum; - mod_timer(&r8a66597->interval_timer[td->pipenum], + mod_timer(&r8a66597->timers[td->pipenum].interval, jiffies + msecs_to_jiffies( td->pipe->info.timer_interval)); } else { @@ -2495,11 +2484,10 @@ static int r8a66597_probe(struct platform_device *pdev) for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) { INIT_LIST_HEAD(&r8a66597->pipe_queue[i]); - setup_timer(&r8a66597->td_timer[i], r8a66597_td_timer, - (unsigned long)r8a66597); - setup_timer(&r8a66597->interval_timer[i], - r8a66597_interval_timer, - (unsigned long)r8a66597); + r8a66597->timers[i].r8a66597 = r8a66597; + timer_setup(&r8a66597->timers[i].td, r8a66597_td_timer, 0); + timer_setup(&r8a66597->timers[i].interval, + r8a66597_interval_timer, 0); } INIT_LIST_HEAD(&r8a66597->child_device); |