Commit 09a4a112 authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds

[PATCH] Char: isicom, expand function

Simple functions (those, that calls reuest_irq, request_region et al) may be
expanded directly in code.  It makes probe function more readable and
transparent.
Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
Acked-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 592ee3a5
...@@ -1520,37 +1520,6 @@ static void isicom_flush_buffer(struct tty_struct *tty) ...@@ -1520,37 +1520,6 @@ static void isicom_flush_buffer(struct tty_struct *tty)
* Driver init and deinit functions * Driver init and deinit functions
*/ */
static int __devinit isicom_register_ioregion(struct pci_dev *pdev,
const unsigned int index)
{
struct isi_board *board = pci_get_drvdata(pdev);
if (!board->base)
return -EINVAL;
if (!request_region(board->base, 16, ISICOM_NAME)) {
dev_dbg(&pdev->dev, "I/O Region 0x%lx-0x%lx is busy. Card%d "
"will be disabled.\n", board->base, board->base + 15,
index + 1);
return -EBUSY;
}
return 0;
}
static void isicom_unregister_ioregion(struct pci_dev *pdev)
{
struct isi_board *board = pci_get_drvdata(pdev);
if (!board->base)
return;
release_region(board->base, 16);
dev_dbg(&pdev->dev, "I/O Region 0x%lx-0x%lx released.\n",
board->base, board->base + 15);
board->base = 0;
}
static const struct tty_operations isicom_ops = { static const struct tty_operations isicom_ops = {
.open = isicom_open, .open = isicom_open,
.close = isicom_close, .close = isicom_close,
...@@ -1571,70 +1540,6 @@ static const struct tty_operations isicom_ops = { ...@@ -1571,70 +1540,6 @@ static const struct tty_operations isicom_ops = {
.tiocmset = isicom_tiocmset, .tiocmset = isicom_tiocmset,
}; };
static int __devinit isicom_register_tty_driver(void)
{
int error = -ENOMEM;
/* tty driver structure initialization */
isicom_normal = alloc_tty_driver(PORT_COUNT);
if (!isicom_normal)
goto end;
isicom_normal->owner = THIS_MODULE;
isicom_normal->name = "ttyM";
isicom_normal->major = ISICOM_NMAJOR;
isicom_normal->minor_start = 0;
isicom_normal->type = TTY_DRIVER_TYPE_SERIAL;
isicom_normal->subtype = SERIAL_TYPE_NORMAL;
isicom_normal->init_termios = tty_std_termios;
isicom_normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |
CLOCAL;
isicom_normal->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(isicom_normal, &isicom_ops);
if ((error = tty_register_driver(isicom_normal))) {
pr_dbg("Couldn't register the dialin driver, error=%d\n",
error);
put_tty_driver(isicom_normal);
}
end:
return error;
}
static void isicom_unregister_tty_driver(void)
{
int error;
if ((error = tty_unregister_driver(isicom_normal)))
pr_dbg("couldn't unregister normal driver, error=%d.\n", error);
put_tty_driver(isicom_normal);
}
static int __devinit isicom_register_isr(struct pci_dev *pdev,
const unsigned int index)
{
struct isi_board *board = pci_get_drvdata(pdev);
unsigned long irqflags = IRQF_DISABLED;
int retval = -EINVAL;
if (!board->base)
goto end;
if (board->isa == NO)
irqflags |= IRQF_SHARED;
retval = request_irq(board->irq, isicom_interrupt, irqflags,
ISICOM_NAME, board);
if (retval < 0)
dev_warn(&pdev->dev, "Could not install handler at Irq %d. "
"Card%d will be disabled.\n", board->irq, index + 1);
else
retval = 0;
end:
return retval;
}
static int __devinit reset_card(struct pci_dev *pdev, static int __devinit reset_card(struct pci_dev *pdev,
const unsigned int card, unsigned int *signature) const unsigned int card, unsigned int *signature)
{ {
...@@ -1913,13 +1818,21 @@ static int __devinit isicom_probe(struct pci_dev *pdev, ...@@ -1913,13 +1818,21 @@ static int __devinit isicom_probe(struct pci_dev *pdev,
pci_set_drvdata(pdev, board); pci_set_drvdata(pdev, board);
retval = isicom_register_ioregion(pdev, index); if (!request_region(board->base, 16, ISICOM_NAME)) {
if (retval < 0) dev_err(&pdev->dev, "I/O Region 0x%lx-0x%lx is busy. Card%d "
"will be disabled.\n", board->base, board->base + 15,
index + 1);
retval = -EBUSY;
goto err; goto err;
}
retval = isicom_register_isr(pdev, index); retval = request_irq(board->irq, isicom_interrupt,
if (retval < 0) IRQF_SHARED | IRQF_DISABLED, ISICOM_NAME, board);
if (retval < 0) {
dev_err(&pdev->dev, "Could not install handler at Irq %d. "
"Card%d will be disabled.\n", board->irq, index + 1);
goto errunrr; goto errunrr;
}
retval = reset_card(pdev, index, &signature); retval = reset_card(pdev, index, &signature);
if (retval < 0) if (retval < 0)
...@@ -1934,7 +1847,7 @@ static int __devinit isicom_probe(struct pci_dev *pdev, ...@@ -1934,7 +1847,7 @@ static int __devinit isicom_probe(struct pci_dev *pdev,
errunri: errunri:
free_irq(board->irq, board); free_irq(board->irq, board);
errunrr: errunrr:
isicom_unregister_ioregion(pdev); release_region(board->base, 16);
err: err:
board->base = 0; board->base = 0;
return retval; return retval;
...@@ -1945,7 +1858,7 @@ static void __devexit isicom_remove(struct pci_dev *pdev) ...@@ -1945,7 +1858,7 @@ static void __devexit isicom_remove(struct pci_dev *pdev)
struct isi_board *board = pci_get_drvdata(pdev); struct isi_board *board = pci_get_drvdata(pdev);
free_irq(board->irq, board); free_irq(board->irq, board);
isicom_unregister_ioregion(pdev); release_region(board->base, 16);
} }
static int __devinit isicom_setup(void) static int __devinit isicom_setup(void)
...@@ -1991,14 +1904,35 @@ static int __devinit isicom_setup(void) ...@@ -1991,14 +1904,35 @@ static int __devinit isicom_setup(void)
"Disabling Card%d...\n", irq[idx], idx + 1); "Disabling Card%d...\n", irq[idx], idx + 1);
} }
retval = isicom_register_tty_driver(); /* tty driver structure initialization */
if (retval < 0) isicom_normal = alloc_tty_driver(PORT_COUNT);
if (!isicom_normal) {
retval = -ENOMEM;
goto error; goto error;
}
isicom_normal->owner = THIS_MODULE;
isicom_normal->name = "ttyM";
isicom_normal->major = ISICOM_NMAJOR;
isicom_normal->minor_start = 0;
isicom_normal->type = TTY_DRIVER_TYPE_SERIAL;
isicom_normal->subtype = SERIAL_TYPE_NORMAL;
isicom_normal->init_termios = tty_std_termios;
isicom_normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |
CLOCAL;
isicom_normal->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(isicom_normal, &isicom_ops);
retval = tty_register_driver(isicom_normal);
if (retval) {
pr_dbg("Couldn't register the dialin driver\n");
goto err_puttty;
}
retval = pci_register_driver(&isicom_driver); retval = pci_register_driver(&isicom_driver);
if (retval < 0) { if (retval < 0) {
printk(KERN_ERR "ISICOM: Unable to register pci driver.\n"); printk(KERN_ERR "ISICOM: Unable to register pci driver.\n");
goto errtty; goto err_unrtty;
} }
init_timer(&tx); init_timer(&tx);
...@@ -2009,8 +1943,10 @@ static int __devinit isicom_setup(void) ...@@ -2009,8 +1943,10 @@ static int __devinit isicom_setup(void)
add_timer(&tx); add_timer(&tx);
return 0; return 0;
errtty: err_unrtty:
isicom_unregister_tty_driver(); tty_unregister_driver(isicom_normal);
err_puttty:
put_tty_driver(isicom_normal);
error: error:
return retval; return retval;
} }
...@@ -2025,7 +1961,8 @@ static void __exit isicom_exit(void) ...@@ -2025,7 +1961,8 @@ static void __exit isicom_exit(void)
msleep(10); msleep(10);
pci_unregister_driver(&isicom_driver); pci_unregister_driver(&isicom_driver);
isicom_unregister_tty_driver(); tty_unregister_driver(isicom_normal);
put_tty_driver(isicom_normal);
} }
module_init(isicom_setup); module_init(isicom_setup);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment