]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'v4.3-rc4' into next
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 6 Oct 2015 00:36:38 +0000 (17:36 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 6 Oct 2015 00:36:38 +0000 (17:36 -0700)
Merge with mainline to sync up with changes to parkbd driver.

1  2 
drivers/input/joystick/walkera0701.c

index 9c07fe911075f3e1dba089f07d7d60d10ac327ba,a8bc2fe170dd83e12ff78706f97f9bc32a72e5cd..d88f5dd3c9d9e9a7080cbd9bacecb740e0791488
@@@ -150,7 -150,7 +150,7 @@@ static void walkera0701_irq_handler(voi
                if (w->counter == 24) { /* full frame */
                        walkera0701_parse_frame(w);
                        w->counter = NO_SYNC;
-                       if (abs(pulse_time - SYNC_PULSE) < RESERVE)     /* new frame sync */
+                       if (abs64(pulse_time - SYNC_PULSE) < RESERVE)   /* new frame sync */
                                w->counter = 0;
                } else {
                        if ((pulse_time > (ANALOG_MIN_PULSE - RESERVE)
                        } else
                                w->counter = NO_SYNC;
                }
-       } else if (abs(pulse_time - SYNC_PULSE - BIN0_PULSE) <
+       } else if (abs64(pulse_time - SYNC_PULSE - BIN0_PULSE) <
                                RESERVE + BIN1_PULSE - BIN0_PULSE)      /* frame sync .. */
                w->counter = 0;
  
@@@ -200,38 -200,35 +200,38 @@@ static void walkera0701_close(struct in
        parport_release(w->pardevice);
  }
  
 -static int walkera0701_connect(struct walkera_dev *w, int parport)
 +static void walkera0701_attach(struct parport *pp)
  {
 -      int error;
 +      struct pardev_cb walkera0701_parport_cb;
 +      struct walkera_dev *w = &w_dev;
  
 -      w->parport = parport_find_number(parport);
 -      if (!w->parport) {
 -              pr_err("parport %d does not exist\n", parport);
 -              return -ENODEV;
 +      if (pp->number != walkera0701_pp_no) {
 +              pr_debug("Not using parport%d.\n", pp->number);
 +              return;
        }
  
 -      if (w->parport->irq == -1) {
 +      if (pp->irq == -1) {
                pr_err("parport %d does not have interrupt assigned\n",
 -                      parport);
 -              error = -EINVAL;
 -              goto err_put_parport;
 +                      pp->number);
 +              return;
        }
  
 -      w->pardevice = parport_register_device(w->parport, "walkera0701",
 -                                  NULL, NULL, walkera0701_irq_handler,
 -                                  PARPORT_DEV_EXCL, w);
 +      w->parport = pp;
 +
 +      walkera0701_parport_cb.flags = PARPORT_FLAG_EXCL;
 +      walkera0701_parport_cb.irq_func = walkera0701_irq_handler;
 +      walkera0701_parport_cb.private = w;
 +
 +      w->pardevice = parport_register_dev_model(pp, "walkera0701",
 +                                                &walkera0701_parport_cb, 0);
 +
        if (!w->pardevice) {
                pr_err("failed to register parport device\n");
 -              error = -EIO;
 -              goto err_put_parport;
 +              return;
        }
  
        if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT)) {
                pr_err("failed to negotiate parport mode\n");
 -              error = -EIO;
                goto err_unregister_device;
        }
  
        w->input_dev = input_allocate_device();
        if (!w->input_dev) {
                pr_err("failed to allocate input device\n");
 -              error = -ENOMEM;
                goto err_unregister_device;
        }
  
        input_set_abs_params(w->input_dev, ABS_RUDDER, -512, 512, 0, 0);
        input_set_abs_params(w->input_dev, ABS_MISC, -512, 512, 0, 0);
  
 -      error = input_register_device(w->input_dev);
 -      if (error) {
 +      if (input_register_device(w->input_dev)) {
                pr_err("failed to register input device\n");
                goto err_free_input_dev;
        }
  
 -      return 0;
 +      return;
  
  err_free_input_dev:
        input_free_device(w->input_dev);
  err_unregister_device:
        parport_unregister_device(w->pardevice);
 -err_put_parport:
 -      parport_put_port(w->parport);
 -      return error;
  }
  
 -static void walkera0701_disconnect(struct walkera_dev *w)
 +static void walkera0701_detach(struct parport *port)
  {
 +      struct walkera_dev *w = &w_dev;
 +
 +      if (!w->pardevice || w->parport->number != port->number)
 +              return;
 +
        input_unregister_device(w->input_dev);
        parport_unregister_device(w->pardevice);
 -      parport_put_port(w->parport);
 +      w->parport = NULL;
  }
  
 +static struct parport_driver walkera0701_parport_driver = {
 +      .name = "walkera0701",
 +      .match_port = walkera0701_attach,
 +      .detach = walkera0701_detach,
 +      .devmodel = true,
 +};
 +
  static int __init walkera0701_init(void)
  {
 -      return walkera0701_connect(&w_dev, walkera0701_pp_no);
 +      return parport_register_driver(&walkera0701_parport_driver);
  }
  
  static void __exit walkera0701_exit(void)
  {
 -      walkera0701_disconnect(&w_dev);
 +      parport_unregister_driver(&walkera0701_parport_driver);
  }
  
  module_init(walkera0701_init);