staging: dgap: introducing find_board_by_major()

use find_board_by_major function instead of getting a brd from static
arrary. Becasue tty's major number doesn't start zero and we can
find a brd from dgap_board[].

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Daeseok Youn 2014-11-06 19:27:59 +09:00 committed by Greg Kroah-Hartman
parent 4c5dbca65b
commit 48d43be475
1 changed files with 17 additions and 11 deletions

View File

@ -80,7 +80,6 @@ static int dgap_poll_tick = 20; /* Poll interval - 20 ms */
static struct class *dgap_class;
static struct board_t *dgap_boards_by_major[256];
static uint dgap_count = 500;
/*
@ -4409,6 +4408,22 @@ static void dgap_tty_unthrottle(struct tty_struct *tty)
spin_unlock_irqrestore(&bd->bd_lock, lock_flags);
}
static struct board_t *find_board_by_major(unsigned int major)
{
unsigned int i;
for (i = 0; i < MAXBOARDS; i++) {
struct board_t *brd = dgap_board[i];
if (!brd)
return NULL;
if (major == brd->serial_driver->major ||
major == brd->print_driver->major)
return brd;
}
return NULL;
}
/************************************************************************
*
* TTY Entry points and helper functions
@ -4435,11 +4450,7 @@ static int dgap_tty_open(struct tty_struct *tty, struct file *file)
major = MAJOR(tty_devnum(tty));
minor = MINOR(tty_devnum(tty));
if (major > 255)
return -EIO;
/* Get board pointer from our array of majors we have allocated */
brd = dgap_boards_by_major[major];
brd = find_board_by_major(major);
if (!brd)
return -EIO;
@ -5301,9 +5312,6 @@ static int dgap_tty_register(struct board_t *brd)
if (rc < 0)
goto unregister_serial_drv;
dgap_boards_by_major[brd->serial_driver->major] = brd;
dgap_boards_by_major[brd->print_driver->major] = brd;
return 0;
unregister_serial_drv:
@ -6559,7 +6567,6 @@ static void dgap_cleanup_tty(struct board_t *brd)
struct device *dev;
unsigned int i;
dgap_boards_by_major[brd->serial_driver->major] = NULL;
for (i = 0; i < brd->nasync; i++) {
tty_port_destroy(&brd->serial_ports[i]);
dev = brd->channels[i]->ch_tun.un_sysfs;
@ -6570,7 +6577,6 @@ static void dgap_cleanup_tty(struct board_t *brd)
put_tty_driver(brd->serial_driver);
kfree(brd->serial_ports);
dgap_boards_by_major[brd->print_driver->major] = NULL;
for (i = 0; i < brd->nasync; i++) {
tty_port_destroy(&brd->printer_ports[i]);
dev = brd->channels[i]->ch_pun.un_sysfs;