提交 aeaccfe4 编写于 作者: J Jiri Slaby 提交者: Linus Torvalds

[PATCH] Char: stallion, use dynamic dev

Use dynamic tty device registering depending on board's port count.  (i ->
retval change is relevant, since gcc complains about signedness of i)
Signed-off-by: NJiri Slaby <jirislaby@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 6b2c9457
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -2348,7 +2348,7 @@ static int __devinit stl_pciprobe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
struct stlbrd *brdp;
unsigned int brdtype = ent->driver_data;
unsigned int i, brdtype = ent->driver_data;
int brdnr, retval = -ENODEV;
if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE)
......@@ -2409,6 +2409,10 @@ static int __devinit stl_pciprobe(struct pci_dev *pdev,
pci_set_drvdata(pdev, brdp);
for (i = 0; i < brdp->nrports; i++)
tty_register_device(stl_serial,
brdp->brdnr * STL_MAXPORTS + i, &pdev->dev);
return 0;
err_null:
stl_brds[brdp->brdnr] = NULL;
......@@ -2421,6 +2425,7 @@ static int __devinit stl_pciprobe(struct pci_dev *pdev,
static void __devexit stl_pciremove(struct pci_dev *pdev)
{
struct stlbrd *brdp = pci_get_drvdata(pdev);
unsigned int i;
free_irq(brdp->irq, brdp);
......@@ -2430,6 +2435,10 @@ static void __devexit stl_pciremove(struct pci_dev *pdev)
if (brdp->iosize2 > 0)
release_region(brdp->ioaddr2, brdp->iosize2);
for (i = 0; i < brdp->nrports; i++)
tty_unregister_device(stl_serial,
brdp->brdnr * STL_MAXPORTS + i);
stl_brds[brdp->brdnr] = NULL;
kfree(brdp);
}
......@@ -4693,7 +4702,7 @@ static int __init stallion_module_init(void)
{
struct stlbrd *brdp;
struct stlconf conf;
unsigned int i;
unsigned int i, j;
int retval;
printk(KERN_INFO "%s: version %s\n", stl_drvtitle, stl_drvversion);
......@@ -4720,6 +4729,9 @@ static int __init stallion_module_init(void)
if (stl_brdinit(brdp))
kfree(brdp);
else {
for (j = 0; j < brdp->nrports; j++)
tty_register_device(stl_serial,
brdp->brdnr * STL_MAXPORTS + j, NULL);
stl_brds[brdp->brdnr] = brdp;
stl_nrbrds = i + 1;
}
......@@ -4761,7 +4773,7 @@ static int __init stallion_module_init(void)
stl_serial->type = TTY_DRIVER_TYPE_SERIAL;
stl_serial->subtype = SERIAL_TYPE_NORMAL;
stl_serial->init_termios = stl_deftermios;
stl_serial->flags = TTY_DRIVER_REAL_RAW;
stl_serial->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
tty_set_operations(stl_serial, &stl_ops);
retval = tty_register_driver(stl_serial);
......@@ -4787,7 +4799,9 @@ static int __init stallion_module_init(void)
static void __exit stallion_module_exit(void)
{
int i;
struct stlbrd *brdp;
unsigned int i, j;
int retval;
pr_debug("cleanup_module()\n");
......@@ -4800,14 +4814,21 @@ static void __exit stallion_module_exit(void)
* a hangup on every open port - to try to flush out any processes
* hanging onto ports.
*/
for (i = 0; i < stl_nrbrds; i++) {
if ((brdp = stl_brds[i]) == NULL || (brdp->state & STL_PROBED))
continue;
for (j = 0; j < brdp->nrports; j++)
tty_unregister_device(stl_serial,
brdp->brdnr * STL_MAXPORTS + j);
}
tty_unregister_driver(stl_serial);
put_tty_driver(stl_serial);
for (i = 0; i < 4; i++)
class_device_destroy(stallion_class, MKDEV(STL_SIOMEMMAJOR, i));
if ((i = unregister_chrdev(STL_SIOMEMMAJOR, "staliomem")))
if ((retval = unregister_chrdev(STL_SIOMEMMAJOR, "staliomem")))
printk("STALLION: failed to un-register serial memory device, "
"errno=%d\n", -i);
"errno=%d\n", -retval);
class_destroy(stallion_class);
pci_unregister_driver(&stl_pcidriver);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部