@@ -125,51 +125,69 @@ unsigned char ks0108_isinited(void)
125125}
126126EXPORT_SYMBOL_GPL (ks0108_isinited );
127127
128- /*
129- * Module Init & Exit
130- */
131-
132- static int __init ks0108_init (void )
128+ static void ks0108_parport_attach (struct parport * port )
133129{
134- int result ;
135- int ret = - EINVAL ;
130+ struct pardev_cb ks0108_cb ;
136131
137- ks0108_parport = parport_find_base (ks0108_port );
138- if (ks0108_parport == NULL) {
139- pr_err ("ERROR: parport didn't find %i port\n" , ks0108_port );
140- goto none ;
141- }
132+ if (port -> base != ks0108_port )
133+ return ;
142134
143- ks0108_pardevice = parport_register_device (ks0108_parport , KS0108_NAME ,
144- NULL , NULL , NULL , PARPORT_DEV_EXCL , NULL );
145- parport_put_port (ks0108_parport );
146- if (ks0108_pardevice == NULL ) {
135+ memset (& ks0108_cb , 0 , sizeof (ks0108_cb ));
136+ ks0108_cb .flags = PARPORT_DEV_EXCL ;
137+ ks0108_pardevice = parport_register_dev_model (port , KS0108_NAME ,
138+ & ks0108_cb , 0 );
139+ if (!ks0108_pardevice ) {
147140 pr_err ("ERROR : parport didn 't register new device\n");
148- goto none ;
141+ return ;
149142 }
150-
151- result = parport_claim (ks0108_pardevice );
152- if (result != 0 ) {
153- pr_err ("ERROR: can't claim %i parport, maybe in use\n" ,
143+ if (parport_claim (ks0108_pardevice )) {
144+ pr_err ("could not claim access to parport %i. Aborting.\n" ,
154145 ks0108_port );
155- ret = result ;
156- goto registered ;
146+ goto err_unreg_device ;
157147 }
158148
159149 ks0108_inited = 1 ;
160- return 0 ;
150+ return ;
161151
162- registered :
152+ err_unreg_device :
163153 parport_unregister_device (ks0108_pardevice );
164-
165- none :
166- return ret ;
154+ ks0108_pardevice = NULL ;
167155}
168156
169- static void __exit ks0108_exit ( void )
157+ static void ks0108_parport_detach ( struct parport * port )
170158{
159+ if (port -> base != ks0108_port )
160+ return ;
161+
162+ if (!ks0108_pardevice ) {
163+ pr_err ("%s: already unregistered.\n" , KS0108_NAME );
164+ return ;
165+ }
166+
171167 parport_release (ks0108_pardevice );
172168 parport_unregister_device (ks0108_pardevice );
169+ ks0108_pardevice = NULL ;
170+ }
171+
172+ /*
173+ * Module Init & Exit
174+ */
175+
176+ static struct parport_driver ks0108_parport_driver = {
177+ .name = "ks0108" ,
178+ .match_port = ks0108_parport_attach ,
179+ .detach = ks0108_parport_detach ,
180+ .devmodel = true,
181+ };
182+
183+ static int __init ks0108_init (void )
184+ {
185+ return parport_register_driver (& ks0108_parport_driver );
186+ }
187+
188+ static void __exit ks0108_exit (void )
189+ {
190+ parport_unregister_driver (& ks0108_parport_driver );
173191}
174192
175193module_init (ks0108_init );
0 commit comments