All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kim, HeungJun" <riverful.kim@samsung.com>
To: linux-input@vger.kernel.org, dmitry.torokhov@gmail.com,
	kyungmin.park@samsung.com
Subject: [PATCH 3/3] input: keyboard: MCS5080: support led blink when it's touched.
Date: Mon, 15 Nov 2010 13:33:30 +0900	[thread overview]
Message-ID: <4CE0B81A.9030501@samsung.com> (raw)

This patch supports touchkey led blinking. The touchkey led lights
on as soon as it touched. After LED_TIME, the led lights-off.

Signed-off-by: Heungjun Kim <riverful.kim@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/input/keyboard/mcs_touchkey.c |   39 +++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/drivers/input/keyboard/mcs_touchkey.c b/drivers/input/keyboard/mcs_touchkey.c
index 931b28c..e3fd31f 100644
--- a/drivers/input/keyboard/mcs_touchkey.c
+++ b/drivers/input/keyboard/mcs_touchkey.c
@@ -19,6 +19,7 @@
 #include <linux/input.h>
 #include <linux/irq.h>
 #include <linux/slab.h>
+#include <linux/workqueue.h>

 /* MCS5000 Touchkey */
 #define MCS5000_TOUCHKEY_STATUS                0x04
@@ -32,6 +33,8 @@
 #define MCS5080_TOUCHKEY_FW            0x01
 #define MCS5080_TOUCHKEY_BASE_VAL      0x1

+#define LED_TIME                       500
+
 enum mcs_touchkey_type {
        MCS5000_TOUCHKEY,
        MCS5080_TOUCHKEY,
@@ -46,6 +49,8 @@ struct mcs_touchkey_chip {

 struct mcs_touchkey_data {
        void (*poweron)(int);
+       struct delayed_work work;
+       int suspended;

        struct i2c_client *client;
        struct input_dev *input_dev;
@@ -55,6 +60,30 @@ struct mcs_touchkey_data {
        unsigned short keycodes[];
 };

+static void mcs_touchkey_led(struct mcs_touchkey_data *data, int on)
+{
+       unsigned char buf;
+
+       if (data->suspended)
+               return;
+
+       if (on)
+               buf = 0x1;
+       else
+               buf = 0x2;
+       i2c_master_send(data->client, &buf, 1);
+}
+
+static void mcs_touchkey_work(struct work_struct *work)
+{
+       struct delayed_work *dw = to_delayed_work(work);
+       struct mcs_touchkey_data *data;
+
+       data = container_of(dw, struct mcs_touchkey_data, work);
+
+       mcs_touchkey_led(data, 0);
+}
+
 static irqreturn_t mcs_touchkey_interrupt(int irq, void *dev_id)
 {
        struct mcs_touchkey_data *data = dev_id;
@@ -89,6 +118,14 @@ static irqreturn_t mcs_touchkey_interrupt(int irq, void *dev_id)
        input_report_key(input, data->key_code, pressed);
        input_sync(input);

+       if (pressed) {
+               cancel_work_sync(&data->work.work);
+               mcs_touchkey_led(data, 1);
+       } else {
+               if (!delayed_work_pending(&data->work))
+                       schedule_delayed_work(&data->work, msecs_to_jiffies(LED_TIME));
+       }
+
        dev_dbg(&client->dev, "key %d %d %s\n", data->key_val, data->key_code,
                pressed ? "pressed" : "released");

@@ -173,6 +210,8 @@ static int __devinit mcs_touchkey_probe(struct i2c_client *client,
        if (pdata->poweron)
                data->poweron = pdata->poweron;

+       INIT_DELAYED_WORK(&data->work, mcs_touchkey_work);
+
        error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt,
                        IRQF_TRIGGER_FALLING, client->dev.driver->name, data);
        if (error) {
--
1.7.0.4

             reply	other threads:[~2010-11-15  4:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-15  4:33 Kim, HeungJun [this message]
2010-11-15  8:36 ` [PATCH 3/3] input: keyboard: MCS5080: support led blink when it's touched Dmitry Torokhov

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=4CE0B81A.9030501@samsung.com \
    --to=riverful.kim@samsung.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-input@vger.kernel.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.