linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Felipe Balbi <felipe.balbi@nokia.com>
To: "ext Arce, Abraham" <x0066660@ti.com>
Cc: "linux-input@vger.kernel.org" <linux-input@vger.kernel.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: [RFC] [PATCH 1/3] OMAP4: Keyboard Controller Support
Date: Fri, 16 Apr 2010 08:06:48 +0300	[thread overview]
Message-ID: <20100416050648.GA26263@nokia.com> (raw)
In-Reply-To: <27F9C60D11D683428E133F85D2BB4A53043D9EE7F5@dlee03.ent.ti.com>

Hi,

On Wed, Apr 14, 2010 at 03:10:48AM +0200, ext Arce, Abraham wrote:
>+#include <linux/module.h>
>+#include <linux/init.h>
>+#include <linux/interrupt.h>
>+#include <linux/platform_device.h>
>+#include <linux/errno.h>
>+#include <linux/io.h>
>+#include <linux/input.h>
>+#include <linux/input/matrix_keypad.h>
>+#include <plat/omap_hwmod.h>
>+#include <plat/omap_device.h>

should the platform_driver know about hwmod and omap_device ? Paul ? 
Kevin ?

>+struct omap_keypad {
>+

unnecessary blank line.

>+       struct platform_device *pdev;

generaly we save the struct device *.

>+       struct omap_hwmod *oh;
>+       const struct matrix_keypad_platform_data *pdata;

you should not save the platform_data here. Generaly you should only use 
that to initialize fields on your structure. Remember that a 
platform_data will be declared as __initdata.

>+/* Interrupt thread primary handler, called in hard interrupt context */
>+
>+static irqreturn_t omap_keypad_interrupt(int irq, void *dev_id)
>+{
>+       struct omap_keypad *keypad_data = dev_id;
>+
>+       /* disable interrupts */
>+       __raw_writel(OMAP4_DEF_IRQDISABLE, keypad_data->base +
>+                               OMAP4_KBD_IRQENABLE);
>+
>+       /* wake up handler thread */
>+       return IRQ_WAKE_THREAD;
>+
>+}
>+
>+/* Interrupt thread handler thread */
>+
>+static irqreturn_t omap_keypad_threaded(int irq, void *dev_id)
>+{
>+       struct omap_keypad *keypad_data = dev_id;
>+       struct input_dev *input = keypad_data->input;
>+       unsigned char key_state[8];
>+       int col, row, code;
>+       u32 *new_state = (u32 *) key_state;
>+
>+       *new_state       = __raw_readl(keypad_data->base +
>+                       OMAP4_KBD_FULLCODE31_0);
>+       *(new_state + 1) = __raw_readl(keypad_data->base +
>+                       OMAP4_KBD_FULLCODE63_32);
>+
>+       for (col = 0; col < keypad_data->cols; col++) {
>+               for (row = 0; row < keypad_data->rows; row++) {
>+                       code = MATRIX_SCAN_CODE(row, col,
>+                                       keypad_data->row_shift);
>+                       if (code < 0) {
>+                               printk(KERN_INFO "Spurious key %d-%d\n",
>+                                               col, row);

use dev_dbg()

>+                               continue;
>+                       }
>+                       input_report_key(input, keypad_data->keycodes[code],
>+                                       key_state[col] & (1 << row));

missing input_sync()

>+static int __devinit omap_keypad_probe(struct platform_device *pdev)
>+{

[..]

>+       length = snprintf(oh_name, hw_mod_name_len, "keyboard");
>+       WARN(length >= hw_mod_name_len,
>+               "String buffer overflow in keyboard device setup\n");

you're using snprintf() this WARN() shouldn't happen even, remove it.

>+
>+       oh = omap_hwmod_lookup(oh_name);
>+       if (!oh)
>+               pr_err("Could not look up %s\n", oh_name);

I think omap_hwmod and omap_device shouldn't be here, but at least use 
dev_err();

>+
>+       pdata = kzalloc(sizeof(struct matrix_keypad_platform_data),
>+                               GFP_KERNEL);

this should come from platform code.

>+
>+       od = omap_device_build(name, id, oh, pdata,
>+                               sizeof(struct matrix_keypad_platform_data),
>+                               omap_keyboard_latency,
>+                               ARRAY_SIZE(omap_keyboard_latency), 1);
>+       WARN(IS_ERR(od), "Could not build omap_device for %s %s\n",
>+               name, oh_name);

this too.

>+       status = input_register_device(keypad_data->input);
>+       if (status < 0) {
>+               dev_err(&pdev->dev, "failed to register input device\n");
>+               goto failed_free_device;
>+       }
>+
>+       omap_keypad_config(keypad_data);

registering and configuring should be done before requesting the irq.

-- 
balbi

  parent reply	other threads:[~2010-04-16  5:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-14  1:10 [RFC] [PATCH 1/3] OMAP4: Keyboard Controller Support Arce, Abraham
2010-04-14  7:34 ` Trilok Soni
2010-04-16  0:04   ` Arce, Abraham
2010-04-20 23:11     ` Kevin Hilman
2010-04-16  5:06 ` Felipe Balbi [this message]
2010-05-05 23:17   ` Arce, Abraham
2010-04-20 23:16 ` Kevin Hilman
2010-05-06  2:30   ` Arce, Abraham
2010-04-21  6:55 ` Dmitry Torokhov
2010-05-11  4:13   ` Arce, Abraham
2010-05-11  4:17     ` Arce, Abraham
2010-05-11  4:41       ` Dmitry Torokhov
2010-05-11  5:03         ` Arce, Abraham
2010-05-11  5:45           ` Dmitry Torokhov
2010-05-11 14:53             ` Kevin Hilman
2010-05-11 16:41               ` Dmitry Torokhov
2010-05-11 21:39                 ` Kevin Hilman
2010-05-12  5:34                   ` Shilimkar, Santosh
2010-05-12  5:40         ` Arce, Abraham
2010-05-12  5:45           ` Shilimkar, Santosh
2010-05-12  6:03             ` Dmitry Torokhov
2010-05-12  6:19               ` Shilimkar, Santosh
2010-05-12  6:35                 ` Dmitry Torokhov
2010-05-12  6:54                   ` Shilimkar, Santosh
2010-05-12  6:20               ` Arce, Abraham

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=20100416050648.GA26263@nokia.com \
    --to=felipe.balbi@nokia.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=x0066660@ti.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).