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
next prev 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 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.