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

Input: walkera0701 - use proper error codes

We have been using -EBUSY where we should have used -EIO or -ENOMEM,
so let's fix that and also add some diagnostic messages.

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

+36 -20
+36 -20
drivers/input/joystick/walkera0701.c
··· 197 197 198 198 static int walkera0701_connect(struct walkera_dev *w, int parport) 199 199 { 200 - int err = -ENODEV; 200 + int error; 201 201 202 202 w->parport = parport_find_number(parport); 203 - if (w->parport == NULL) 203 + if (!w->parport) { 204 + pr_err("parport %d does not exist\n", parport); 204 205 return -ENODEV; 206 + } 205 207 206 208 if (w->parport->irq == -1) { 207 209 pr_err("parport %d does not have interrupt assigned\n", 208 210 parport); 209 - goto init_err; 211 + error = -EINVAL; 212 + goto err_put_parport; 210 213 } 211 214 212 - err = -EBUSY; 213 215 w->pardevice = parport_register_device(w->parport, "walkera0701", 214 216 NULL, NULL, walkera0701_irq_handler, 215 217 PARPORT_DEV_EXCL, w); 216 - if (!w->pardevice) 217 - goto init_err; 218 + if (!w->pardevice) { 219 + pr_err("failed to register parport device\n"); 220 + error = -EIO; 221 + goto err_put_parport; 222 + } 218 223 219 - if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT)) 220 - goto init_err1; 224 + if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT)) { 225 + pr_err("failed to negotiate parport mode\n"); 226 + error = -EIO; 227 + goto err_unregister_device; 228 + } 221 229 222 - if (parport_claim(w->pardevice)) 223 - goto init_err1; 230 + if (parport_claim(w->pardevice)) { 231 + pr_err("failed to claim parport\n"); 232 + error = -EBUSY; 233 + goto err_unregister_device; 234 + } 224 235 225 236 hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 226 237 w->timer.function = timer_handler; 227 238 228 239 w->input_dev = input_allocate_device(); 229 - if (!w->input_dev) 230 - goto init_err2; 240 + if (!w->input_dev) { 241 + pr_err("failed to allocate input device\n"); 242 + error = -ENOMEM; 243 + goto err_release_parport; 244 + } 231 245 232 246 input_set_drvdata(w->input_dev, w); 233 247 w->input_dev->name = "Walkera WK-0701 TX"; ··· 266 252 input_set_abs_params(w->input_dev, ABS_RUDDER, -512, 512, 0, 0); 267 253 input_set_abs_params(w->input_dev, ABS_MISC, -512, 512, 0, 0); 268 254 269 - err = input_register_device(w->input_dev); 270 - if (err) 271 - goto init_err3; 255 + error = input_register_device(w->input_dev); 256 + if (error) { 257 + pr_err("failed to register input device\n"); 258 + goto err_free_input_dev; 259 + } 272 260 273 261 return 0; 274 262 275 - init_err3: 263 + err_free_input_dev: 276 264 input_free_device(w->input_dev); 277 - init_err2: 265 + err_release_parport: 278 266 parport_release(w->pardevice); 279 - init_err1: 267 + err_unregister_device: 280 268 parport_unregister_device(w->pardevice); 281 - init_err: 269 + err_put_parport: 282 270 parport_put_port(w->parport); 283 - return err; 271 + return error; 284 272 } 285 273 286 274 static void walkera0701_disconnect(struct walkera_dev *w)