Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: walkera0701 - claim parport when opening the device

Postpone claiming the port until the device is opened, instead of doing
that when the driver is loaded.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+6 -10
+6 -10
drivers/input/joystick/walkera0701.c
··· 183 183 { 184 184 struct walkera_dev *w = input_get_drvdata(dev); 185 185 186 + if (parport_claim(w->pardevice)) 187 + return -EBUSY; 188 + 186 189 parport_enable_irq(w->parport); 187 190 return 0; 188 191 } ··· 196 193 197 194 parport_disable_irq(w->parport); 198 195 hrtimer_cancel(&w->timer); 196 + 197 + parport_release(w->pardevice); 199 198 } 200 199 201 200 static int walkera0701_connect(struct walkera_dev *w, int parport) ··· 232 227 goto err_unregister_device; 233 228 } 234 229 235 - if (parport_claim(w->pardevice)) { 236 - pr_err("failed to claim parport\n"); 237 - error = -EBUSY; 238 - goto err_unregister_device; 239 - } 240 - 241 230 hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 242 231 w->timer.function = timer_handler; 243 232 ··· 239 240 if (!w->input_dev) { 240 241 pr_err("failed to allocate input device\n"); 241 242 error = -ENOMEM; 242 - goto err_release_parport; 243 + goto err_unregister_device; 243 244 } 244 245 245 246 input_set_drvdata(w->input_dev, w); ··· 275 276 276 277 err_free_input_dev: 277 278 input_free_device(w->input_dev); 278 - err_release_parport: 279 - parport_release(w->pardevice); 280 279 err_unregister_device: 281 280 parport_unregister_device(w->pardevice); 282 281 err_put_parport: ··· 285 288 static void walkera0701_disconnect(struct walkera_dev *w) 286 289 { 287 290 input_unregister_device(w->input_dev); 288 - parport_release(w->pardevice); 289 291 parport_unregister_device(w->pardevice); 290 292 parport_put_port(w->parport); 291 293 }