Commit cb696e7c authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

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: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent ea05ae07
Loading
Loading
Loading
Loading
+6 −10
Original line number Original line Diff line number Diff line
@@ -183,6 +183,9 @@ static int walkera0701_open(struct input_dev *dev)
{
{
	struct walkera_dev *w = input_get_drvdata(dev);
	struct walkera_dev *w = input_get_drvdata(dev);


	if (parport_claim(w->pardevice))
		return -EBUSY;

	parport_enable_irq(w->parport);
	parport_enable_irq(w->parport);
	return 0;
	return 0;
}
}
@@ -193,6 +196,8 @@ static void walkera0701_close(struct input_dev *dev)


	parport_disable_irq(w->parport);
	parport_disable_irq(w->parport);
	hrtimer_cancel(&w->timer);
	hrtimer_cancel(&w->timer);

	parport_release(w->pardevice);
}
}


static int walkera0701_connect(struct walkera_dev *w, int parport)
static int walkera0701_connect(struct walkera_dev *w, int parport)
@@ -227,12 +232,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
		goto err_unregister_device;
		goto err_unregister_device;
	}
	}


	if (parport_claim(w->pardevice)) {
		pr_err("failed to claim parport\n");
		error = -EBUSY;
		goto err_unregister_device;
	}

	hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	w->timer.function = timer_handler;
	w->timer.function = timer_handler;


@@ -240,7 +239,7 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
	if (!w->input_dev) {
	if (!w->input_dev) {
		pr_err("failed to allocate input device\n");
		pr_err("failed to allocate input device\n");
		error = -ENOMEM;
		error = -ENOMEM;
		goto err_release_parport;
		goto err_unregister_device;
	}
	}


	input_set_drvdata(w->input_dev, w);
	input_set_drvdata(w->input_dev, w);
@@ -276,8 +275,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)


err_free_input_dev:
err_free_input_dev:
	input_free_device(w->input_dev);
	input_free_device(w->input_dev);
err_release_parport:
	parport_release(w->pardevice);
err_unregister_device:
err_unregister_device:
	parport_unregister_device(w->pardevice);
	parport_unregister_device(w->pardevice);
err_put_parport:
err_put_parport:
@@ -288,7 +285,6 @@ err_put_parport:
static void walkera0701_disconnect(struct walkera_dev *w)
static void walkera0701_disconnect(struct walkera_dev *w)
{
{
	input_unregister_device(w->input_dev);
	input_unregister_device(w->input_dev);
	parport_release(w->pardevice);
	parport_unregister_device(w->pardevice);
	parport_unregister_device(w->pardevice);
	parport_put_port(w->parport);
	parport_put_port(w->parport);
}
}