All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andrey Panin" <pazke@centrinvest.ru>
To: Mike Frysinger <vapier@gentoo.org>
Cc: linux-input@vger.kernel.org,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-kernel@vger.kernel.org,
	Javier Herrero <jherrero@hvsistemas.es>,
	Bryan Wu <cooloney@kernel.org>
Subject: Re: [PATCH] input/keyboard: new OpenCores Keyboard Controller driver
Date: Mon, 14 Sep 2009 10:17:48 +0400	[thread overview]
Message-ID: <20090914061748.GA13139@centrinvest.ru> (raw)
In-Reply-To: <1252894678-26929-1-git-send-email-vapier@gentoo.org>

On 256, 09 13, 2009 at 10:17:58 -0400, Mike Frysinger wrote:
> From: Javier Herrero <jherrero@hvsistemas.es>
> 
> Driver for the keyboard hardware documented here:
> 	http://www.opencores.org/project,keyboardcontroller
> 
> Signed-off-by: Javier Herrero <jherrero@hvsistemas.es>
> Signed-off-by: Bryan Wu <cooloney@kernel.org>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---

> +static int __devinit opencores_kbd_probe(struct platform_device *pdev)
> +{
> +	struct input_dev *input;
> +	struct opencores_kbd *opencores_kbd;
> +	int i, error;
> +
> +	opencores_kbd = kzalloc(sizeof(*opencores_kbd), GFP_KERNEL);
> +	if (!opencores_kbd)
> +		return -ENOMEM;
> +
> +	opencores_kbd->keycode = kmalloc(NUM_KEYS * sizeof(unsigned short), GFP_KERNEL);
> +	if (!opencores_kbd->keycode) {
> +		error = -ENOMEM;
> +		goto out;
> +	}
> +
> +	platform_set_drvdata(pdev, opencores_kbd);
> +
> +	opencores_kbd->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +	opencores_kbd->irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> +
> +	if (opencores_kbd->addr_res == NULL || opencores_kbd->irq_res == NULL) {
> +		printk(KERN_ERR "insufficient resources\n");
> +		error = -ENOENT;
> +		goto out1;
> +	}
> +
> +	error = request_irq(opencores_kbd->irq_res->start, &opencores_kbd_isr, IRQF_TRIGGER_RISING, pdev->name, pdev);

What if interrupt will trigger right here ? It's common pattern for input drivers to
request irq after input_allocate_device().

> +	if (error) {
> +		printk(KERN_ERR DRV_NAME ": Unable to claim irq %d; error %d\n", opencores_kbd->irq_res->start, error);
> +		goto out2;

Looks like out1 should be used here, otherwise you will try to free irq which
was not registered yet.

> +	}
> +
> +	input = input_allocate_device();
> +	if (!input) {
> +		error = -ENOMEM;
> +		goto out3;

out2 ?

> +	}
> +
> +	opencores_kbd->input = input;
> +
> +	input->name = pdev->name;
> +	input->phys = "opencores-kbd/input0";
> +	input->dev.parent = &pdev->dev;
> +
> +	input_set_drvdata(input, opencores_kbd);
> +
> +	input->id.bustype = BUS_HOST;
> +	input->id.vendor = 0x0001;
> +	input->id.product = 0x0001;
> +	input->id.version = 0x0100;
> +
> +	input->keycodesize = sizeof(*opencores_kbd->keycode);
> +	input->keycodemax = NUM_KEYS;
> +	input->keycode = opencores_kbd->keycode;
> +
> +	__set_bit(EV_KEY, input->evbit);
> +
> +	for (i = 0; i < input->keycodemax; i++) {
> +		opencores_kbd->keycode[i] = i;
> +		__set_bit(opencores_kbd->keycode[i] & KEY_MAX, input->keybit);
> +	}
> +	__clear_bit(KEY_RESERVED, input->keybit);
> +
> +	error = input_register_device(opencores_kbd->input);
> +	if (error) {
> +		printk(KERN_ERR DRV_NAME ": Unable to register input device (%d)\n", error);
> +		goto out2;

out3 ?

> +	}
> +
> +	return 0;
> +
> +out3:
> +	input_free_device(input);
> +out2:
> +	free_irq(opencores_kbd->irq_res->start, pdev);
> +out1:
> +	kfree(opencores_kbd->keycode);
> +out:
> +	kfree(opencores_kbd);
> +	platform_set_drvdata(pdev, NULL);
> +
> +	return error;
> +}

  reply	other threads:[~2009-09-14  6:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-14  2:17 [PATCH] input/keyboard: new OpenCores Keyboard Controller driver Mike Frysinger
2009-09-14  6:17 ` Andrey Panin [this message]
2009-09-14  7:04 ` [PATCH v2] " Mike Frysinger
2009-09-14  7:25   ` Joe Perches
2009-09-14 17:40   ` [PATCH v3] " Mike Frysinger
2009-09-14 17:49     ` Dmitry Torokhov
2009-09-14 18:02       ` Mike Frysinger
2009-09-14 18:02         ` Mike Frysinger
2009-09-14 18:18         ` Javier Herrero
2009-09-15  5:52           ` Dmitry Torokhov
2009-09-15 11:16             ` Mike Frysinger
2009-09-15 11:16               ` Mike Frysinger
2009-09-15 16:23               ` Dmitry Torokhov
2009-09-15 16:23                 ` Dmitry Torokhov
2009-09-15 16:39                 ` Mike Frysinger
2009-09-15 16:39                   ` Mike Frysinger
2009-09-16  2:00             ` [PATCH v4] " Mike Frysinger
2009-09-16  3:45               ` Dmitry Torokhov
2009-09-16  3:57                 ` Mike Frysinger
2009-09-16  3:57                   ` Mike Frysinger
2009-09-16  4:10                 ` [PATCH v5] " Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090914061748.GA13139@centrinvest.ru \
    --to=pazke@centrinvest.ru \
    --cc=cooloney@kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jherrero@hvsistemas.es \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vapier@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.