Skip to content

Commit ca44407

Browse files
sudipm-mukherjeedavem330
authored andcommitted
hamradio: baycom: use new parport device model
Modify baycom driver to use the new parallel port device model. Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Acked-By: Thomas Sailer <t.sailer@alumni.ethz.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 2df9d67 commit ca44407

File tree

1 file changed

+46
-4
lines changed

1 file changed

+46
-4
lines changed

drivers/net/hamradio/baycom_epp.c

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,7 @@ static int epp_open(struct net_device *dev)
840840
unsigned char tmp[128];
841841
unsigned char stat;
842842
unsigned long tstart;
843+
struct pardev_cb par_cb;
843844

844845
if (!pp) {
845846
printk(KERN_ERR "%s: parport at 0x%lx unknown\n", bc_drvname, dev->base_addr);
@@ -859,8 +860,21 @@ static int epp_open(struct net_device *dev)
859860
return -EIO;
860861
}
861862
memset(&bc->modem, 0, sizeof(bc->modem));
862-
bc->pdev = parport_register_device(pp, dev->name, NULL, epp_wakeup,
863-
NULL, PARPORT_DEV_EXCL, dev);
863+
memset(&par_cb, 0, sizeof(par_cb));
864+
par_cb.wakeup = epp_wakeup;
865+
par_cb.private = (void *)dev;
866+
par_cb.flags = PARPORT_DEV_EXCL;
867+
for (i = 0; i < NR_PORTS; i++)
868+
if (baycom_device[i] == dev)
869+
break;
870+
871+
if (i == NR_PORTS) {
872+
pr_err("%s: no device found\n", bc_drvname);
873+
parport_put_port(pp);
874+
return -ENODEV;
875+
}
876+
877+
bc->pdev = parport_register_dev_model(pp, dev->name, &par_cb, i);
864878
parport_put_port(pp);
865879
if (!bc->pdev) {
866880
printk(KERN_ERR "%s: cannot register parport at 0x%lx\n", bc_drvname, pp->base);
@@ -1185,6 +1199,23 @@ MODULE_LICENSE("GPL");
11851199

11861200
/* --------------------------------------------------------------------- */
11871201

1202+
static int baycom_epp_par_probe(struct pardevice *par_dev)
1203+
{
1204+
struct device_driver *drv = par_dev->dev.driver;
1205+
int len = strlen(drv->name);
1206+
1207+
if (strncmp(par_dev->name, drv->name, len))
1208+
return -ENODEV;
1209+
1210+
return 0;
1211+
}
1212+
1213+
static struct parport_driver baycom_epp_par_driver = {
1214+
.name = "bce",
1215+
.probe = baycom_epp_par_probe,
1216+
.devmodel = true,
1217+
};
1218+
11881219
static void __init baycom_epp_dev_setup(struct net_device *dev)
11891220
{
11901221
struct baycom_state *bc = netdev_priv(dev);
@@ -1204,10 +1235,15 @@ static void __init baycom_epp_dev_setup(struct net_device *dev)
12041235

12051236
static int __init init_baycomepp(void)
12061237
{
1207-
int i, found = 0;
1238+
int i, found = 0, ret;
12081239
char set_hw = 1;
12091240

12101241
printk(bc_drvinfo);
1242+
1243+
ret = parport_register_driver(&baycom_epp_par_driver);
1244+
if (ret)
1245+
return ret;
1246+
12111247
/*
12121248
* register net devices
12131249
*/
@@ -1241,7 +1277,12 @@ static int __init init_baycomepp(void)
12411277
found++;
12421278
}
12431279

1244-
return found ? 0 : -ENXIO;
1280+
if (found == 0) {
1281+
parport_unregister_driver(&baycom_epp_par_driver);
1282+
return -ENXIO;
1283+
}
1284+
1285+
return 0;
12451286
}
12461287

12471288
static void __exit cleanup_baycomepp(void)
@@ -1260,6 +1301,7 @@ static void __exit cleanup_baycomepp(void)
12601301
printk(paranoia_str, "cleanup_module");
12611302
}
12621303
}
1304+
parport_unregister_driver(&baycom_epp_par_driver);
12631305
}
12641306

12651307
module_init(init_baycomepp);

0 commit comments

Comments
 (0)