Using schedule_timeout_interruptible() is exactly same as setting a status of current process and calling schedule_timeout(). Removes dgap_ms_sleep(), because this function is used only when closing tty channel on dgap_tty_close(). And also removes ch_close_delay that is always set to 250 on dgap_tty_init(). Signed-off-by: Daeseok Youn <daeseok.youn@xxxxxxxxx> --- V2: remove singal_pending(). drivers/staging/dgap/dgap.c | 37 +++++++------------------------------ drivers/staging/dgap/dgap.h | 3 --- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index 67da1d5..db8ccd1 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -180,7 +180,6 @@ static char *dgap_create_config_string(struct board_t *bd, char *string); static uint dgap_config_get_useintr(struct board_t *bd); static uint dgap_config_get_altpin(struct board_t *bd); -static int dgap_ms_sleep(ulong ms); static void dgap_do_bios_load(struct board_t *brd, const u8 *ubios, int len); static void dgap_do_fep_load(struct board_t *brd, const u8 *ufep, int len); #ifdef DIGI_CONCENTRATORS_SUPPORTED @@ -1200,26 +1199,6 @@ static void dgap_init_globals(void) /************************************************************************ * - * Utility functions - * - ************************************************************************/ - -/* - * dgap_ms_sleep() - * - * Put the driver to sleep for x ms's - * - * Returns 0 if timed out, !0 (showing signal) if interrupted by a signal. - */ -static int dgap_ms_sleep(ulong ms) -{ - current->state = TASK_INTERRUPTIBLE; - schedule_timeout((ms * HZ) / 1000); - return signal_pending(current); -} - -/************************************************************************ - * * TTY Initialization/Cleanup Functions * ************************************************************************/ @@ -1462,9 +1441,6 @@ static int dgap_tty_init(struct board_t *brd) ch->ch_tstart = 0; ch->ch_rstart = 0; - /* .25 second delay */ - ch->ch_close_delay = 250; - /* * Set queue water marks, interrupt mask, * and general tty parameters. @@ -2297,12 +2273,13 @@ static void dgap_tty_close(struct tty_struct *tty, struct file *file) * Go to sleep to ensure RTS/DTR * have been dropped for modems to see it. */ - if (ch->ch_close_delay) { - spin_unlock_irqrestore(&ch->ch_lock, - lock_flags); - dgap_ms_sleep(ch->ch_close_delay); - spin_lock_irqsave(&ch->ch_lock, lock_flags); - } + spin_unlock_irqrestore(&ch->ch_lock, + lock_flags); + + /* .25 second delay for dropping RTS/DTR */ + schedule_timeout_interruptible(msecs_to_jiffies(250)); + + spin_lock_irqsave(&ch->ch_lock, lock_flags); } ch->pscan_state = 0; diff --git a/drivers/staging/dgap/dgap.h b/drivers/staging/dgap/dgap.h index a0307b9..ba05c65 100644 --- a/drivers/staging/dgap/dgap.h +++ b/drivers/staging/dgap/dgap.h @@ -982,9 +982,6 @@ struct channel_t { u32 ch_open_count; /* open count */ u32 ch_flags; /* Channel flags */ - u32 ch_close_delay; /* How long we should drop */ - /* RTS/DTR for */ - u32 ch_cpstime; /* Time for CPS calculations */ tcflag_t ch_c_iflag; /* channel iflags */ -- 1.7.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel