diff options
Diffstat (limited to 'drivers/usb/atm/speedtch.c')
| -rw-r--r-- | drivers/usb/atm/speedtch.c | 56 | 
1 files changed, 21 insertions, 35 deletions
diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c index 4716e707de5..0dc8c06a7b5 100644 --- a/drivers/usb/atm/speedtch.c +++ b/drivers/usb/atm/speedtch.c @@ -27,7 +27,6 @@  #include <linux/device.h>  #include <linux/errno.h>  #include <linux/firmware.h> -#include <linux/init.h>  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/moduleparam.h> @@ -73,9 +72,9 @@ static const char speedtch_driver_name[] = "speedtch";  #define DEFAULT_SW_BUFFERING	0  static unsigned int altsetting = 0; /* zero means: use the default */ -static int dl_512_first = DEFAULT_DL_512_FIRST; -static int enable_isoc = DEFAULT_ENABLE_ISOC; -static int sw_buffering = DEFAULT_SW_BUFFERING; +static bool dl_512_first = DEFAULT_DL_512_FIRST; +static bool enable_isoc = DEFAULT_ENABLE_ISOC; +static bool sw_buffering = DEFAULT_SW_BUFFERING;  #define DEFAULT_B_MAX_DSL	8128  #define DEFAULT_MODEM_MODE	11 @@ -139,7 +138,8 @@ struct speedtch_instance_data {  	struct speedtch_params params; /* set in probe, constant afterwards */ -	struct delayed_work status_checker; +	struct timer_list status_check_timer; +	struct work_struct status_check_work;  	unsigned char last_status; @@ -169,7 +169,7 @@ static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int sta  			 "%sabling SW buffering: usb_control_msg returned %d\n",  			 state ? "En" : "Dis", ret);  	else -		dbg("speedtch_set_swbuff: %sbled SW buffering", state ? "En" : "Dis"); +		usb_dbg(usbatm, "speedtch_set_swbuff: %sbled SW buffering\n", state ? "En" : "Dis");  }  static void speedtch_test_sequence(struct speedtch_instance_data *instance) @@ -498,7 +498,7 @@ static void speedtch_check_status(struct work_struct *work)  {  	struct speedtch_instance_data *instance =  		container_of(work, struct speedtch_instance_data, -			     status_checker.work); +			     status_check_work);  	struct usbatm_data *usbatm = instance->usbatm;  	struct atm_dev *atm_dev = usbatm->atm_dev;  	unsigned char *buf = instance->scratch_buffer; @@ -575,11 +575,11 @@ static void speedtch_status_poll(unsigned long data)  {  	struct speedtch_instance_data *instance = (void *)data; -	schedule_delayed_work(&instance->status_checker, 0); +	schedule_work(&instance->status_check_work);  	/* The following check is racy, but the race is harmless */  	if (instance->poll_delay < MAX_POLL_DELAY) -		mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(instance->poll_delay)); +		mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(instance->poll_delay));  	else  		atm_warn(instance->usbatm, "Too many failures - disabling line status polling\n");  } @@ -595,7 +595,7 @@ static void speedtch_resubmit_int(unsigned long data)  	if (int_urb) {  		ret = usb_submit_urb(int_urb, GFP_ATOMIC);  		if (!ret) -			schedule_delayed_work(&instance->status_checker, 0); +			schedule_work(&instance->status_check_work);  		else {  			atm_dbg(instance->usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);  			mod_timer(&instance->resubmit_timer, jiffies + msecs_to_jiffies(RESUBMIT_DELAY)); @@ -624,7 +624,7 @@ static void speedtch_handle_int(struct urb *int_urb)  	}  	if ((count == 6) && !memcmp(up_int, instance->int_data, 6)) { -		del_timer(&instance->status_checker.timer); +		del_timer(&instance->status_check_timer);  		atm_info(usbatm, "DSL line goes up\n");  	} else if ((count == 6) && !memcmp(down_int, instance->int_data, 6)) {  		atm_info(usbatm, "DSL line goes down\n"); @@ -640,7 +640,7 @@ static void speedtch_handle_int(struct urb *int_urb)  	if ((int_urb = instance->int_urb)) {  		ret = usb_submit_urb(int_urb, GFP_ATOMIC); -		schedule_delayed_work(&instance->status_checker, 0); +		schedule_work(&instance->status_check_work);  		if (ret < 0) {  			atm_dbg(usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);  			goto fail; @@ -686,7 +686,7 @@ static int speedtch_atm_start(struct usbatm_data *usbatm, struct atm_dev *atm_de  	}  	/* Start status polling */ -	mod_timer(&instance->status_checker.timer, jiffies + msecs_to_jiffies(1000)); +	mod_timer(&instance->status_check_timer, jiffies + msecs_to_jiffies(1000));  	return 0;  } @@ -698,7 +698,7 @@ static void speedtch_atm_stop(struct usbatm_data *usbatm, struct atm_dev *atm_de  	atm_dbg(usbatm, "%s entered\n", __func__); -	del_timer_sync(&instance->status_checker.timer); +	del_timer_sync(&instance->status_check_timer);  	/*  	 * Since resubmit_timer and int_urb can schedule themselves and @@ -717,7 +717,7 @@ static void speedtch_atm_stop(struct usbatm_data *usbatm, struct atm_dev *atm_de  	del_timer_sync(&instance->resubmit_timer);  	usb_free_urb(int_urb); -	flush_scheduled_work(); +	flush_work(&instance->status_check_work);  }  static int speedtch_pre_reset(struct usb_interface *intf) @@ -869,10 +869,11 @@ static int speedtch_bind(struct usbatm_data *usbatm,  	usbatm->flags |= (use_isoc ? UDSL_USE_ISOC : 0); -	INIT_DELAYED_WORK(&instance->status_checker, speedtch_check_status); +	INIT_WORK(&instance->status_check_work, speedtch_check_status); +	init_timer(&instance->status_check_timer); -	instance->status_checker.timer.function = speedtch_status_poll; -	instance->status_checker.timer.data = (unsigned long)instance; +	instance->status_check_timer.function = speedtch_status_poll; +	instance->status_check_timer.data = (unsigned long)instance;  	instance->last_status = 0xff;  	instance->poll_delay = MIN_POLL_DELAY; @@ -886,7 +887,7 @@ static int speedtch_bind(struct usbatm_data *usbatm,  		usb_fill_int_urb(instance->int_urb, usb_dev,  				 usb_rcvintpipe(usb_dev, ENDPOINT_INT),  				 instance->int_data, sizeof(instance->int_data), -				 speedtch_handle_int, instance, 50); +				 speedtch_handle_int, instance, 16);  	else  		usb_dbg(usbatm, "%s: no memory for interrupt urb!\n", __func__); @@ -951,22 +952,7 @@ static int speedtch_usb_probe(struct usb_interface *intf, const struct usb_devic  	return usbatm_usb_probe(intf, id, &speedtch_usbatm_driver);  } -static int __init speedtch_usb_init(void) -{ -	dbg("%s: driver version %s", __func__, DRIVER_VERSION); - -	return usb_register(&speedtch_usb_driver); -} - -static void __exit speedtch_usb_cleanup(void) -{ -	dbg("%s", __func__); - -	usb_deregister(&speedtch_usb_driver); -} - -module_init(speedtch_usb_init); -module_exit(speedtch_usb_cleanup); +module_usb_driver(speedtch_usb_driver);  MODULE_AUTHOR(DRIVER_AUTHOR);  MODULE_DESCRIPTION(DRIVER_DESC);  | 
