staging: nvec: coding style fixes / add copyright notice
authorMarc Dietrich <marvin24@gmx.de>
Tue, 27 Sep 2011 17:00:40 +0000 (19:00 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 30 Sep 2011 00:40:37 +0000 (17:40 -0700)
This patch fixes coding style and adds copyright notices.

Signed-off-by: Marc Dietrich <marvin24@gmx.de>
[jak@jak-linux.org: Merge later cleanup into that patch]
Signed-off-by: Julian Andres Klode <jak@jak-linux.org>
Acked-by: Marc Dietrich <marvin24@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/nvec/TODO
drivers/staging/nvec/nvec-keytable.h
drivers/staging/nvec/nvec.c
drivers/staging/nvec/nvec.h
drivers/staging/nvec/nvec_kbd.c
drivers/staging/nvec/nvec_power.c
drivers/staging/nvec/nvec_ps2.c

index 649d6b70deaabc0d5d06a60bd4777e628a5675a5..623e9bb0b40a8129314141f79a63d8f25c248803 100644 (file)
@@ -1,10 +1,7 @@
 ToDo list (incomplete, unordered)
-       - convert mouse, keyboard, and power to platform devices
-       - add copyright / driver author / license
        - add compile as module support
-       - move nvec devices to mfd cells?
-       - adjust to kernel style
        - fix clk usage
          should not be using clk_get_sys(), but clk_get(&pdev->dev, conn)
          where conn is either NULL if the device only has one clock, or
          the device specific name if it has multiple clocks.
+       - move half of the nvec init stuff to i2c-tegra.c
index 6a1c4f7f460b7a13a87bcad41eabd5f56eb17cf6..1dc22cb8812a2c73ee9e3cde1d79d75aa811bbed 100644 (file)
@@ -22,7 +22,8 @@
  */
 
 static unsigned short code_tab_102us[] = {
-       KEY_GRAVE,      // 0x00
+       /* 0x00 */
+       KEY_GRAVE,
        KEY_ESC,
        KEY_1,
        KEY_2,
@@ -38,7 +39,8 @@ static unsigned short code_tab_102us[] = {
        KEY_EQUAL,
        KEY_BACKSPACE,
        KEY_TAB,
-       KEY_Q,          // 0x10
+       /* 0x10 */
+       KEY_Q,
        KEY_W,
        KEY_E,
        KEY_R,
@@ -54,7 +56,8 @@ static unsigned short code_tab_102us[] = {
        KEY_LEFTCTRL,
        KEY_A,
        KEY_S,
-       KEY_D,          // 0x20
+       /* 0x20 */
+       KEY_D,
        KEY_F,
        KEY_G,
        KEY_H,
@@ -70,7 +73,8 @@ static unsigned short code_tab_102us[] = {
        KEY_X,
        KEY_C,
        KEY_V,
-       KEY_B,          // 0x30
+       /* 0x30 */
+       KEY_B,
        KEY_N,
        KEY_M,
        KEY_COMMA,
@@ -86,13 +90,15 @@ static unsigned short code_tab_102us[] = {
        KEY_F3,
        KEY_F4,
        KEY_F5,
-       KEY_F6,         // 0x40
+       /* 0x40 */
+       KEY_F6,
        KEY_F7,
        KEY_F8,
        KEY_F9,
        KEY_F10,
        KEY_FN,
-       0,              //VK_SCROLL
+       /* VK_SCROLL */
+       0,
        KEY_KP7,
        KEY_KP8,
        KEY_KP9,
@@ -102,52 +108,57 @@ static unsigned short code_tab_102us[] = {
        KEY_KP6,
        KEY_KPPLUS,
        KEY_KP1,
-       KEY_KP2,        // 0x50
+       /* 0x50 */
+       KEY_KP2,
        KEY_KP3,
        KEY_KP0,
        KEY_KPDOT,
-       KEY_MENU,               //VK_SNAPSHOT
+       /* VK_SNAPSHOT */
+       KEY_MENU,
        KEY_POWER,
-       KEY_102ND,              //VK_OEM_102   henry+ 0x2B (43) BACKSLASH have been used,change to use 0X56 (86)
-       KEY_F11,                //VK_F11
-       KEY_F12,                //VK_F12
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, // 60 
-       0,
-       0,
-       KEY_SEARCH, // add search key map 
-       0,              
-       0,
-       0,
-       0,      
-       0,              
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, 
-       0, // 70 
-       0,
-       0,
-       KEY_KP5,  //73 for JP keyboard '\' key, report 0x4c
-       0,              
-       0,
-       0,
-       0,      
-       0,              
-       0, 
-       0, 
-    0, 
-       0, 
-       KEY_KP9, //7d  for JP keyboard '|' key, report 0x49
+       /* VK_OEM_102 */
+       KEY_102ND,
+       KEY_F11,
+       KEY_F12,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       /* 0x60 */
+       0,
+       0,
+       0,
+       KEY_SEARCH,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       /* 0x70 */
+       0,
+       0,
+       0,
+       KEY_KP5,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       KEY_KP9,
 };
 
 static unsigned short extcode_tab_us102[] = {
@@ -167,27 +178,35 @@ static unsigned short extcode_tab_us102[] = {
        0,
        0,
        0,
-       0,              // 0xE0 0x10
+       /* 0x10 */
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
        0,
        0,
+       /* VK_MEDIA_NEXT_TRACK */
        0,
        0,
        0,
+       /* VK_RETURN */
        0,
+       KEY_RIGHTCTRL,
        0,
        0,
-       0,              //VK_MEDIA_NEXT_TRACK,
+       /* 0x20 */
+       KEY_MUTE,
+       /* VK_LAUNCH_APP1 */
        0,
+       /* VK_MEDIA_PLAY_PAUSE */
        0,
-       0,              //VK_RETURN,
-       KEY_RIGHTCTRL,          //VK_RCONTROL,
        0,
+       /* VK_MEDIA_STOP */
        0,
-       KEY_MUTE,       // 0xE0 0x20
-       0,              //VK_LAUNCH_APP1
-       0,              //VK_MEDIA_PLAY_PAUSE
        0,
-       0,              //VK_MEDIA_STOP
        0,
        0,
        0,
@@ -198,41 +217,54 @@ static unsigned short extcode_tab_us102[] = {
        0,
        0,
        0,
+       /* 0x30 */
+       KEY_VOLUMEUP,
        0,
-       KEY_VOLUMEUP,   // 0xE0 0x30
+       /* VK_BROWSER_HOME */
+       0,
+       0,
+       0,
+       /* VK_DIVIDE */
+       KEY_KPSLASH,
+       0,
+       /* VK_SNAPSHOT */
+       KEY_SYSRQ,
+       /* VK_RMENU */
+       KEY_RIGHTALT,
+       /* VK_OEM_NV_BACKLIGHT_UP */
+       0,
+       /* VK_OEM_NV_BACKLIGHT_DN */
+       0,
+       /* VK_OEM_NV_BACKLIGHT_AUTOTOGGLE */
+       0,
+       /* VK_OEM_NV_POWER_INFO */
+       0,
+       /* VK_OEM_NV_WIFI_TOGGLE */
+       0,
+       /* VK_OEM_NV_DISPLAY_SELECT */
+       0,
+       /* VK_OEM_NV_AIRPLANE_TOGGLE */
+       0,
+       /* 0x40 */
+       0,
+       KEY_LEFT,
        0,
-       0,              //VK_BROWSER_HOME
        0,
        0,
-       KEY_KPSLASH,    //VK_DIVIDE
        0,
-       KEY_SYSRQ,              //VK_SNAPSHOT
-       KEY_RIGHTALT,           //VK_RMENU
-       0,              //VK_OEM_NV_BACKLIGHT_UP
-       0,              //VK_OEM_NV_BACKLIGHT_DN
-       0,              //VK_OEM_NV_BACKLIGHT_AUTOTOGGLE
-       0,              //VK_OEM_NV_POWER_INFO
-       0,              //VK_OEM_NV_WIFI_TOGGLE
-       0,              //VK_OEM_NV_DISPLAY_SELECT
-       0,              //VK_OEM_NV_AIRPLANE_TOGGLE
-       0,              //0xE0 0x40
-       KEY_LEFT,               //VK_OEM_NV_RESERVED    henry+ for JP keyboard
-       0,              //VK_OEM_NV_RESERVED
-       0,              //VK_OEM_NV_RESERVED
-       0,              //VK_OEM_NV_RESERVED
-       0,              //VK_OEM_NV_RESERVED
        KEY_CANCEL,
        KEY_HOME,
        KEY_UP,
-       KEY_PAGEUP,             //VK_PRIOR
+       KEY_PAGEUP,
        0,
        KEY_LEFT,
        0,
        KEY_RIGHT,
        0,
        KEY_END,
-       KEY_DOWN,       // 0xE0 0x50
-       KEY_PAGEDOWN,           //VK_NEXT
+       /* 0x50 */
+       KEY_DOWN,
+       KEY_PAGEDOWN,
        KEY_INSERT,
        KEY_DELETE,
        0,
@@ -242,25 +274,34 @@ static unsigned short extcode_tab_us102[] = {
        0,
        0,
        0,
-       KEY_LEFTMETA,   //VK_LWIN
-       0,              //VK_RWIN
-       KEY_ESC,        //VK_APPS
-       KEY_KPMINUS, //for power button workaround
-       0, 
+       KEY_LEFTMETA,
+       0,
+       KEY_ESC,
+       KEY_KPMINUS,
+       0,
+       0,
+       0,
+       0,
+       0,
+       0,
+       /* VK_BROWSER_SEARCH */
+       0,
+       /* VK_BROWSER_FAVORITES */
+       0,
+       /* VK_BROWSER_REFRESH */
+       0,
+       /* VK_BROWSER_STOP */
+       0,
+       /* VK_BROWSER_FORWARD */
        0,
+       /* VK_BROWSER_BACK */
        0,
+       /* VK_LAUNCH_APP2 */
        0,
+       /* VK_LAUNCH_MAIL */
        0,
+       /* VK_LAUNCH_MEDIA_SELECT */
        0,
-       0,              //VK_BROWSER_SEARCH
-       0,              //VK_BROWSER_FAVORITES
-       0,              //VK_BROWSER_REFRESH
-       0,              //VK_BROWSER_STOP
-       0,              //VK_BROWSER_FORWARD
-       0,              //VK_BROWSER_BACK
-       0,              //VK_LAUNCH_APP2
-       0,              //VK_LAUNCH_MAIL
-       0,              //VK_LAUNCH_MEDIA_SELECT
 };
 
-static unsigned short* code_tabs[] = {code_tab_102us, extcode_tab_us102 };
+static unsigned short *code_tabs[] = { code_tab_102us, extcode_tab_us102 };
index efdc8dbbac66c1353f8b00ec6760f2bb762987b1..d8609abcbd26a664b3e9b644597a8cc225f8a55d 100644 (file)
@@ -1,13 +1,25 @@
-// #define DEBUG
+/*
+ * NVEC: NVIDIA compliant embedded controller interface
+ *
+ * Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.lauchpad.net>
+ *
+ * Authors:  Pierre-Hugues Husson <phhusson@free.fr>
+ *           Ilya Petrov <ilya.muromec@gmail.com>
+ *           Marc Dietrich <marvin24@gmx.de>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
+/* #define DEBUG */
 
-/* ToDo list (incomplete, unorderd)
-       - convert mouse, keyboard, and power to platform devices
-*/
-
-#include <asm/io.h>
 #include <asm/irq.h>
+
 #include <linux/completion.h>
 #include <linux/interrupt.h>
+#include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/slab.h>
 #include <linux/gpio.h>
 #include <linux/input.h>
 #include <linux/workqueue.h>
 #include <linux/clk.h>
-#include <mach/iomap.h>
-#include <mach/clk.h>
+
 #include <linux/semaphore.h>
 #include <linux/list.h>
 #include <linux/notifier.h>
 #include <linux/platform_device.h>
 #include <linux/mfd/core.h>
+
+#include <mach/iomap.h>
+#include <mach/clk.h>
+
 #include "nvec.h"
 
-static unsigned char EC_DISABLE_EVENT_REPORTING[] =    {'\x04','\x00','\x00'};
-static unsigned char EC_ENABLE_EVENT_REPORTING[] =     {'\x04','\x00','\x01'};
-static unsigned char EC_GET_FIRMWARE_VERSION[] =       {'\x07','\x15'};
+static const unsigned char EC_DISABLE_EVENT_REPORTING[3] = "\x04\x00\x00";
+static const unsigned char EC_ENABLE_EVENT_REPORTING[3]  = "\x04\x00\x01";
+static const unsigned char EC_GET_FIRMWARE_VERSION[2]    = "\x07\x15";
 
 static struct nvec_chip *nvec_power_handle;
 
 static struct mfd_cell nvec_devices[] = {
        {
-               .name   = "nvec-kbd",
-               .id     = 1,
+               .name = "nvec-kbd",
+               .id = 1,
        },
        {
-               .name   = "nvec-mouse",
-               .id     = 1,
+               .name = "nvec-mouse",
+               .id = 1,
        },
        {
-               .name   = "nvec-power",
-               .id     = 1,
+               .name = "nvec-power",
+               .id = 1,
        },
        {
-               .name   = "nvec-power",
-               .id     = 2,
+               .name = "nvec-power",
+               .id = 2,
        },
 };
 
 int nvec_register_notifier(struct nvec_chip *nvec, struct notifier_block *nb,
-                               unsigned int events)
+                          unsigned int events)
 {
        return atomic_notifier_chain_register(&nvec->notifier_list, nb);
 }
 EXPORT_SYMBOL_GPL(nvec_register_notifier);
 
-static int nvec_status_notifier(struct notifier_block *nb, unsigned long event_type,
-                               void *data)
+static int nvec_status_notifier(struct notifier_block *nb,
+                               unsigned long event_type, void *data)
 {
        unsigned char *msg = (unsigned char *)data;
        int i;
 
-       if(event_type != NVEC_CNTL)
+       if (event_type != NVEC_CNTL)
                return NOTIFY_DONE;
 
-       printk("unhandled msg type %ld, payload: ", event_type);
+       printk(KERN_WARNING "unhandled msg type %ld, payload: ", event_type);
        for (i = 0; i < msg[1]; i++)
                printk("%0x ", msg[i+2]);
        printk("\n");
@@ -74,7 +89,8 @@ static int nvec_status_notifier(struct notifier_block *nb, unsigned long event_t
        return NOTIFY_OK;
 }
 
-void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size)
+void nvec_write_async(struct nvec_chip *nvec, const unsigned char *data,
+                       short size)
 {
        struct nvec_msg *msg = kzalloc(sizeof(struct nvec_msg), GFP_NOWAIT);
 
@@ -95,42 +111,43 @@ static void nvec_request_master(struct work_struct *work)
 {
        struct nvec_chip *nvec = container_of(work, struct nvec_chip, tx_work);
 
-       if(!list_empty(&nvec->tx_data)) {
+       if (!list_empty(&nvec->tx_data))
                gpio_set_value(nvec->gpio, 0);
-       }
 }
 
 static int parse_msg(struct nvec_chip *nvec, struct nvec_msg *msg)
 {
        int i;
 
-       if((msg->data[0] & 1<<7) == 0 && msg->data[3]) {
-               dev_err(nvec->dev, "ec responded %02x %02x %02x %02x\n", msg->data[0],
-                       msg->data[1], msg->data[2], msg->data[3]);
+       if ((msg->data[0] & 1 << 7) == 0 && msg->data[3]) {
+               dev_err(nvec->dev, "ec responded %02x %02x %02x %02x\n",
+                       msg->data[0], msg->data[1], msg->data[2], msg->data[3]);
                return -EINVAL;
        }
 
-       if ((msg->data[0] >> 7 ) == 1 && (msg->data[0] & 0x0f) == 5)
-       {
+       if ((msg->data[0] >> 7) == 1 && (msg->data[0] & 0x0f) == 5) {
                dev_warn(nvec->dev, "ec system event ");
-               for (i=0; i < msg->data[1]; i++)
+               for (i = 0; i < msg->data[1]; i++)
                        dev_warn(nvec->dev, "%02x ", msg->data[2+i]);
                dev_warn(nvec->dev, "\n");
        }
 
-       atomic_notifier_call_chain(&nvec->notifier_list, msg->data[0] & 0x8f, msg->data);
+       atomic_notifier_call_chain(&nvec->notifier_list, msg->data[0] & 0x8f,
+                                  msg->data);
 
        return 0;
 }
 
-static struct nvec_msg *nvec_write_sync(struct nvec_chip *nvec, unsigned char *data, short size)
+static struct nvec_msg *nvec_write_sync(struct nvec_chip *nvec,
+                                       const unsigned char *data, short size)
 {
        down(&nvec->sync_write_mutex);
 
        nvec->sync_write_pending = (data[1] << 8) + data[0];
        nvec_write_async(nvec, data, size);
 
-       dev_dbg(nvec->dev, "nvec_sync_write: 0x%04x\n", nvec->sync_write_pending);
+       dev_dbg(nvec->dev, "nvec_sync_write: 0x%04x\n",
+               nvec->sync_write_pending);
        wait_for_completion(&nvec->sync_write);
        dev_dbg(nvec->dev, "nvec_sync_write: pong!\n");
 
@@ -145,21 +162,21 @@ static void nvec_dispatch(struct work_struct *work)
        struct nvec_chip *nvec = container_of(work, struct nvec_chip, rx_work);
        struct nvec_msg *msg;
 
-       while(!list_empty(&nvec->rx_data))
-       {
+       while (!list_empty(&nvec->rx_data)) {
                msg = list_first_entry(&nvec->rx_data, struct nvec_msg, node);
                list_del_init(&msg->node);
 
-               if(nvec->sync_write_pending == (msg->data[2] << 8) + msg->data[0])
-               {
+               if (nvec->sync_write_pending ==
+                   (msg->data[2] << 8) + msg->data[0]) {
                        dev_dbg(nvec->dev, "sync write completed!\n");
                        nvec->sync_write_pending = 0;
                        nvec->last_sync_msg = msg;
                        complete(&nvec->sync_write);
                } else {
                        parse_msg(nvec, msg);
-                       if((!msg) || (!msg->data))
-                               dev_warn(nvec->dev, "attempt access zero pointer\n");
+                       if ((!msg) || (!msg->data))
+                               dev_warn(nvec->dev,
+                                       "attempt access zero pointer\n");
                        else {
                                kfree(msg->data);
                                kfree(msg);
@@ -179,20 +196,13 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
 
        status = readl(base + I2C_SL_STATUS);
 
-       if(!(status & I2C_SL_IRQ))
-       {
+       if (!(status & I2C_SL_IRQ)) {
                dev_warn(nvec->dev, "nvec Spurious IRQ\n");
-               //Yup, handled. ahum.
                goto handled;
        }
-       if(status & END_TRANS && !(status & RCVD))
-       {
-               //Reenable IRQ only when even has been sent
-               //printk("Write sequence ended !\n");
-                //parse_msg(nvec);
+       if (status & END_TRANS && !(status & RCVD)) {
                nvec->state = NVEC_WAIT;
-               if(nvec->rx->size > 1)
-               {
+               if (nvec->rx->size > 1) {
                        list_add_tail(&nvec->rx->node, &nvec->rx_data);
                        schedule_work(&nvec->rx_work);
                } else {
@@ -200,41 +210,31 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
                        kfree(nvec->rx);
                }
                return IRQ_HANDLED;
-       } else if(status & RNW)
-       {
-               // Work around for AP20 New Slave Hw Bug. Give 1us extra.
-               // nvec/smbus/nvec_i2c_transport.c in NV`s crap for reference
-               if(status & RCVD)
+       } else if (status & RNW) {
+               if (status & RCVD)
                        udelay(3);
 
-               if(status & RCVD)
-               {
+               if (status & RCVD)
                        nvec->state = NVEC_WRITE;
-                       //Master wants something from us. New communication
-//                     dev_dbg(nvec->dev, "New read comm!\n");
-               } else {
-                       //Master wants something from us from a communication we've already started
-//                     dev_dbg(nvec->dev, "Read comm cont !\n");
-               }
-               //if(msg_pos<msg_size) {
-               if(list_empty(&nvec->tx_data))
-               {
+
+               if (list_empty(&nvec->tx_data)) {
                        dev_err(nvec->dev, "nvec empty tx - sending no-op\n");
                        to_send = 0x8a;
                        nvec_write_async(nvec, "\x07\x02", 2);
-//                     to_send = 0x01;
                } else {
-                       msg = list_first_entry(&nvec->tx_data, struct nvec_msg, node);
-                       if(msg->pos < msg->size) {
+                       msg =
+                           list_first_entry(&nvec->tx_data, struct nvec_msg,
+                                            node);
+                       if (msg->pos < msg->size) {
                                to_send = msg->data[msg->pos];
                                msg->pos++;
                        } else {
-                               dev_err(nvec->dev, "nvec crap! %d\n", msg->size);
+                               dev_err(nvec->dev, "nvec crap! %d\n",
+                                       msg->size);
                                to_send = 0x01;
                        }
 
-                       if(msg->pos >= msg->size)
-                       {
+                       if (msg->pos >= msg->size) {
                                list_del_init(&msg->node);
                                kfree(msg->data);
                                kfree(msg);
@@ -251,14 +251,13 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
                goto handled;
        } else {
                received = readl(base + I2C_SL_RCVD);
-               //Workaround?
-               if(status & RCVD) {
+
+               if (status & RCVD) {
                        writel(0, base + I2C_SL_RCVD);
                        goto handled;
                }
 
-               if (nvec->state == NVEC_WAIT)
-               {
+               if (nvec->state == NVEC_WAIT) {
                        nvec->state = NVEC_READ;
                        msg = kzalloc(sizeof(struct nvec_msg), GFP_NOWAIT);
                        msg->data = kzalloc(32, GFP_NOWAIT);
@@ -272,7 +271,8 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
                msg->data[msg->pos] = received;
                msg->pos++;
                msg->size = msg->pos;
-               dev_dbg(nvec->dev, "Got %02lx from Master (pos: %d)!\n", received, msg->pos);
+               dev_dbg(nvec->dev, "Got %02lx from Master (pos: %d)!\n",
+                       received, msg->pos);
        }
 handled:
        return IRQ_HANDLED;
@@ -318,7 +318,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
        void __iomem *base;
 
        nvec = kzalloc(sizeof(struct nvec_chip), GFP_KERNEL);
-       if(nvec == NULL) {
+       if (nvec == NULL) {
                dev_err(&pdev->dev, "failed to reserve memory\n");
                return -ENOMEM;
        }
@@ -367,7 +367,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
 
        /* Set the gpio to low when we've got something to say */
        err = gpio_request(nvec->gpio, "nvec gpio");
-       if(err < 0)
+       if (err < 0)
                dev_err(nvec->dev, "couldn't request gpio\n");
 
        ATOMIC_INIT_NOTIFIER_HEAD(&nvec->notifier_list);
@@ -392,7 +392,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
 
        /* enable event reporting */
        nvec_write_async(nvec, EC_ENABLE_EVENT_REPORTING,
-                               sizeof(EC_ENABLE_EVENT_REPORTING));
+                        sizeof(EC_ENABLE_EVENT_REPORTING));
 
        nvec->nvec_status_notifier.notifier_call = nvec_status_notifier;
        nvec_register_notifier(nvec, &nvec->nvec_status_notifier, 0);
@@ -402,17 +402,17 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
 
        /* Get Firmware Version */
        msg = nvec_write_sync(nvec, EC_GET_FIRMWARE_VERSION,
-               sizeof(EC_GET_FIRMWARE_VERSION));
+                             sizeof(EC_GET_FIRMWARE_VERSION));
 
        dev_warn(nvec->dev, "ec firmware version %02x.%02x.%02x / %02x\n",
-                       msg->data[4], msg->data[5], msg->data[6], msg->data[7]);
+                msg->data[4], msg->data[5], msg->data[6], msg->data[7]);
 
        kfree(msg->data);
        kfree(msg);
 
        ret = mfd_add_devices(nvec->dev, -1, nvec_devices,
-                       ARRAY_SIZE(nvec_devices), base, 0);
-       if(ret)
+                             ARRAY_SIZE(nvec_devices), base, 0);
+       if (ret)
                dev_err(nvec->dev, "error adding subdevices\n");
 
        /* unmute speakers? */
@@ -460,8 +460,8 @@ static int tegra_nvec_suspend(struct platform_device *pdev, pm_message_t state)
        return 0;
 }
 
-static int tegra_nvec_resume(struct platform_device *pdev) {
-
+static int tegra_nvec_resume(struct platform_device *pdev)
+{
        struct nvec_chip *nvec = platform_get_drvdata(pdev);
 
        dev_dbg(nvec->dev, "resuming\n");
@@ -476,13 +476,12 @@ static int tegra_nvec_resume(struct platform_device *pdev) {
 #define tegra_nvec_resume NULL
 #endif
 
-static struct platform_driver nvec_device_driver =
-{
-       .probe = tegra_nvec_probe,
-       .remove = __devexit_p(tegra_nvec_remove),
+static struct platform_driver nvec_device_driver = {
+       .probe   = tegra_nvec_probe,
+       .remove  = __devexit_p(tegra_nvec_remove),
        .suspend = tegra_nvec_suspend,
-       .resume = tegra_nvec_resume,
-       .driver = {
+       .resume  = tegra_nvec_resume,
+       .driver  = {
                .name = "nvec",
                .owner = THIS_MODULE,
        }
@@ -494,4 +493,8 @@ static int __init tegra_nvec_init(void)
 }
 
 module_init(tegra_nvec_init);
+
 MODULE_ALIAS("platform:nvec");
+MODULE_DESCRIPTION("NVIDIA compliant embedded controller interface");
+MODULE_AUTHOR("Marc Dietrich <marvin24@gmx.de>");
+MODULE_LICENSE("GPL");
index 7cf9b01f898992284d3e932c3045a276eda69c53..fe11225bcec101a2e7d2ae5e4af16d1a1aa6b70b 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * NVEC: NVIDIA compliant embedded controller interface
+ *
+ * Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
+ *
+ * Authors:  Pierre-Hugues Husson <phhusson@free.fr>
+ *           Ilya Petrov <ilya.muromec@gmail.com>
+ *           Marc Dietrich <marvin24@gmx.de>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
 #ifndef __LINUX_MFD_NVEC
 #define __LINUX_MFD_NVEC
 
@@ -17,7 +32,7 @@ typedef enum {
 } how_care;
 
 typedef enum {
-       NVEC_SYS=1,
+       NVEC_SYS = 1,
        NVEC_BAT,
        NVEC_KBD = 5,
        NVEC_PS2,
@@ -27,9 +42,9 @@ typedef enum {
 } nvec_event;
 
 typedef enum {
-       NVEC_WAIT,
-       NVEC_READ,
-       NVEC_WRITE
+       NVEC_WAIT,
+       NVEC_READ,
+       NVEC_WRITE
 } nvec_state;
 
 struct nvec_msg {
@@ -64,22 +79,27 @@ struct nvec_chip {
        struct work_struct rx_work, tx_work;
        struct nvec_msg *rx, *tx;
 
-/* sync write stuff */
+       /* sync write stuff */
        struct semaphore sync_write_mutex;
        struct completion sync_write;
        u16 sync_write_pending;
        struct nvec_msg *last_sync_msg;
 };
 
-extern void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size);
+extern void nvec_write_async(struct nvec_chip *nvec, const unsigned char *data,
+                            short size);
 
 extern int nvec_register_notifier(struct nvec_chip *nvec,
-                struct notifier_block *nb, unsigned int events);
+                                 struct notifier_block *nb,
+                                 unsigned int events);
 
 extern int nvec_unregister_notifier(struct device *dev,
-               struct notifier_block *nb, unsigned int events);
+                                   struct notifier_block *nb,
+                                   unsigned int events);
 
-const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size, how_care care_resp, void (*rt_handler)(unsigned char *data));
+const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size,
+                         how_care care_resp,
+                         void (*rt_handler) (unsigned char *data));
 
 #define I2C_CNFG                       0x00
 #define I2C_CNFG_PACKET_MODE_EN                (1<<10)
index 87f0378c74f4500ed961e47478d27f2f2cdfb602..06e877cf1518c9bffafc04d0eb6efb43c9be62c7 100644 (file)
@@ -1,15 +1,30 @@
+/*
+ * nvec_kbd: keyboard driver for a NVIDIA compliant embedded controller
+ *
+ * Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
+ *
+ * Authors:  Pierre-Hugues Husson <phhusson@free.fr>
+ *           Marc Dietrich <marvin24@gmx.de>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/input.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
+
 #include "nvec-keytable.h"
 #include "nvec.h"
 
 #define ACK_KBD_EVENT {'\x05', '\xed', '\x01'}
 
 static unsigned char keycodes[ARRAY_SIZE(code_tab_102us)
-                       + ARRAY_SIZE(extcode_tab_us102)];
+                             + ARRAY_SIZE(extcode_tab_us102)];
 
 struct nvec_keys {
        struct input_dev *input;
@@ -20,7 +35,7 @@ struct nvec_keys {
 static struct nvec_keys keys_dev;
 
 static int nvec_keys_notifier(struct notifier_block *nb,
-                               unsigned long event_type, void *data)
+                             unsigned long event_type, void *data)
 {
        int code, state;
        unsigned char *msg = (unsigned char *)data;
@@ -38,7 +53,8 @@ static int nvec_keys_notifier(struct notifier_block *nb,
                code = msg[1] & 0x7f;
                state = msg[1] & 0x80;
 
-               input_report_key(keys_dev.input, code_tabs[_size][code], !state);
+               input_report_key(keys_dev.input, code_tabs[_size][code],
+                                !state);
                input_sync(keys_dev.input);
 
                return NOTIFY_STOP;
@@ -48,7 +64,7 @@ static int nvec_keys_notifier(struct notifier_block *nb,
 }
 
 static int nvec_kbd_event(struct input_dev *dev, unsigned int type,
-                               unsigned int code, int value)
+                         unsigned int code, int value)
 {
        unsigned char buf[] = ACK_KBD_EVENT;
        struct nvec_chip *nvec = keys_dev.nvec;
@@ -125,10 +141,10 @@ fail:
 }
 
 static struct platform_driver nvec_kbd_driver = {
-       .probe  = nvec_kbd_probe,
-       .driver = {
-               .name   = "nvec-kbd",
-               .owner  = THIS_MODULE,
+       .probe  = nvec_kbd_probe,
+       .driver = {
+               .name = "nvec-kbd",
+               .owner = THIS_MODULE,
        },
 };
 
@@ -138,3 +154,7 @@ static int __init nvec_kbd_init(void)
 }
 
 module_init(nvec_kbd_init);
+
+MODULE_AUTHOR("Marc Dietrich <marvin24@gmx.de>");
+MODULE_DESCRIPTION("NVEC keyboard driver");
+MODULE_LICENSE("GPL");
index df164add837b2996abf086c58e49591c4511528a..dfa966f6189d0744ab16bf0b80333b76833b93c4 100644 (file)
@@ -1,3 +1,17 @@
+/*
+ * nvec_power: power supply driver for a NVIDIA compliant embedded controller
+ *
+ * Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
+ *
+ * Authors:  Ilya Petrov <ilya.muromec@gmail.com>
+ *           Marc Dietrich <marvin24@gmx.de>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/err.h>
 #include <linux/slab.h>
 #include <linux/workqueue.h>
 #include <linux/delay.h>
+
 #include "nvec.h"
 
-struct nvec_power
-{
+struct nvec_power {
        struct notifier_block notifier;
        struct delayed_work poller;
        struct nvec_chip *nvec;
@@ -58,7 +72,8 @@ struct bat_response {
        u8 length;
        u8 sub_type;
        u8 status;
-       union { /* payload */
+       /* payload */
+       union {
                char plc[30];
                u16 plu;
                s16 pls;
@@ -69,18 +84,17 @@ static struct power_supply nvec_bat_psy;
 static struct power_supply nvec_psy;
 
 static int nvec_power_notifier(struct notifier_block *nb,
-                                unsigned long event_type, void *data)
+                              unsigned long event_type, void *data)
 {
-       struct nvec_power *power = container_of(nb, struct nvec_power, notifier);
+       struct nvec_power *power =
+           container_of(nb, struct nvec_power, notifier);
        struct bat_response *res = (struct bat_response *)data;
 
        if (event_type != NVEC_SYS)
                return NOTIFY_DONE;
 
-       if(res->sub_type == 0)
-       {
-               if (power->on != res->plu)
-               {
+       if (res->sub_type == 0) {
+               if (power->on != res->plu) {
                        power->on = res->plu;
                        power_supply_changed(&nvec_psy);
                }
@@ -89,8 +103,7 @@ static int nvec_power_notifier(struct notifier_block *nb,
        return NOTIFY_OK;
 }
 
-static const int bat_init[] =
-{
+static const int bat_init[] = {
        LAST_FULL_CHARGE_CAPACITY, DESIGN_CAPACITY, CRITICAL_CAPACITY,
        MANUFACTURER, MODEL, TYPE,
 };
@@ -100,116 +113,115 @@ static void get_bat_mfg_data(struct nvec_power *power)
        int i;
        char buf[] = { '\x02', '\x00' };
 
-       for (i = 0; i < ARRAY_SIZE(bat_init); i++)
-       {
+       for (i = 0; i < ARRAY_SIZE(bat_init); i++) {
                buf[1] = bat_init[i];
                nvec_write_async(power->nvec, buf, 2);
        }
 }
 
 static int nvec_power_bat_notifier(struct notifier_block *nb,
-                                unsigned long event_type, void *data)
+                                  unsigned long event_type, void *data)
 {
-       struct nvec_power *power = container_of(nb, struct nvec_power, notifier);
+       struct nvec_power *power =
+           container_of(nb, struct nvec_power, notifier);
        struct bat_response *res = (struct bat_response *)data;
        int status_changed = 0;
 
        if (event_type != NVEC_BAT)
                return NOTIFY_DONE;
 
-       switch(res->sub_type)
-       {
-               case SLOT_STATUS:
-                       if (res->plc[0] & 1)
-                       {
-                               if (power->bat_present == 0)
-                               {
-                                       status_changed = 1;
-                                       get_bat_mfg_data(power);
-                               }
-
-                               power->bat_present = 1;
-
-                               switch ((res->plc[0] >> 1) & 3)
-                               {
-                                       case 0:
-                                               power->bat_status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-                                               break;
-                                       case 1:
-                                               power->bat_status = POWER_SUPPLY_STATUS_CHARGING;
-                                               break;
-                                       case 2:
-                                               power->bat_status = POWER_SUPPLY_STATUS_DISCHARGING;
-                                               break;
-                                       default:
-                                               power->bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
-                               }
-                       } else {
-                               if (power->bat_present == 1)
-                                       status_changed = 1;
-
-                               power->bat_present = 0;
+       switch (res->sub_type) {
+       case SLOT_STATUS:
+               if (res->plc[0] & 1) {
+                       if (power->bat_present == 0) {
+                               status_changed = 1;
+                               get_bat_mfg_data(power);
+                       }
+
+                       power->bat_present = 1;
+
+                       switch ((res->plc[0] >> 1) & 3) {
+                       case 0:
+                               power->bat_status =
+                                   POWER_SUPPLY_STATUS_NOT_CHARGING;
+                               break;
+                       case 1:
+                               power->bat_status =
+                                   POWER_SUPPLY_STATUS_CHARGING;
+                               break;
+                       case 2:
+                               power->bat_status =
+                                   POWER_SUPPLY_STATUS_DISCHARGING;
+                               break;
+                       default:
                                power->bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
                        }
-                       power->bat_cap = res->plc[1];
-                       if (status_changed)
-                               power_supply_changed(&nvec_bat_psy);
-                       break;
-               case VOLTAGE:
-                       power->bat_voltage_now = res->plu * 1000;
-                       break;
-               case TIME_REMAINING:
-                       power->time_remain = res->plu * 3600;
-                       break;
-               case CURRENT:
-                       power->bat_current_now = res->pls * 1000;
-                       break;
-               case AVERAGE_CURRENT:
-                       power->bat_current_avg = res->pls * 1000;
-                       break;
-               case CAPACITY_REMAINING:
-                       power->capacity_remain = res->plu * 1000;
-                       break;
-               case LAST_FULL_CHARGE_CAPACITY:
-                       power->charge_last_full = res->plu * 1000;
-                       break;
-               case DESIGN_CAPACITY:
-                       power->charge_full_design = res->plu * 1000;
-                       break;
-               case CRITICAL_CAPACITY:
-                       power->critical_capacity = res->plu * 1000;
-                       break;
-               case TEMPERATURE:
-                       power->bat_temperature = res->plu - 2732;
-                       break;
-               case MANUFACTURER:
-                       memcpy(power->bat_manu, &res->plc, res->length-2);
-                       power->bat_model[res->length-2] = '\0';
-                       break;
-               case MODEL:
-                       memcpy(power->bat_model, &res->plc, res->length-2);
-                       power->bat_model[res->length-2] = '\0';
-                       break;
-               case TYPE:
-                       memcpy(power->bat_type, &res->plc, res->length-2);
-                       power->bat_type[res->length-2] = '\0';
-                       /* this differs a little from the spec
-                          fill in more if you find some */
-                       if (!strncmp(power->bat_type, "Li", 30))
-                               power->bat_type_enum = POWER_SUPPLY_TECHNOLOGY_LION;
-                       else
-                               power->bat_type_enum = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
-                       break;
-               default:
-                       return NOTIFY_STOP;
+               } else {
+                       if (power->bat_present == 1)
+                               status_changed = 1;
+
+                       power->bat_present = 0;
+                       power->bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
+               }
+               power->bat_cap = res->plc[1];
+               if (status_changed)
+                       power_supply_changed(&nvec_bat_psy);
+               break;
+       case VOLTAGE:
+               power->bat_voltage_now = res->plu * 1000;
+               break;
+       case TIME_REMAINING:
+               power->time_remain = res->plu * 3600;
+               break;
+       case CURRENT:
+               power->bat_current_now = res->pls * 1000;
+               break;
+       case AVERAGE_CURRENT:
+               power->bat_current_avg = res->pls * 1000;
+               break;
+       case CAPACITY_REMAINING:
+               power->capacity_remain = res->plu * 1000;
+               break;
+       case LAST_FULL_CHARGE_CAPACITY:
+               power->charge_last_full = res->plu * 1000;
+               break;
+       case DESIGN_CAPACITY:
+               power->charge_full_design = res->plu * 1000;
+               break;
+       case CRITICAL_CAPACITY:
+               power->critical_capacity = res->plu * 1000;
+               break;
+       case TEMPERATURE:
+               power->bat_temperature = res->plu - 2732;
+               break;
+       case MANUFACTURER:
+               memcpy(power->bat_manu, &res->plc, res->length - 2);
+               power->bat_model[res->length - 2] = '\0';
+               break;
+       case MODEL:
+               memcpy(power->bat_model, &res->plc, res->length - 2);
+               power->bat_model[res->length - 2] = '\0';
+               break;
+       case TYPE:
+               memcpy(power->bat_type, &res->plc, res->length - 2);
+               power->bat_type[res->length - 2] = '\0';
+               /* this differs a little from the spec
+                  fill in more if you find some */
+               if (!strncmp(power->bat_type, "Li", 30))
+                       power->bat_type_enum = POWER_SUPPLY_TECHNOLOGY_LION;
+               else
+                       power->bat_type_enum = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
+               break;
+       default:
+               return NOTIFY_STOP;
        }
 
        return NOTIFY_STOP;
 }
 
 static int nvec_power_get_property(struct power_supply *psy,
-                               enum power_supply_property psp,
-                               union power_supply_propval *val)
+                                  enum power_supply_property psp,
+                                  union power_supply_propval *val)
 {
        struct nvec_power *power = dev_get_drvdata(psy->dev->parent);
        switch (psp) {
@@ -223,61 +235,60 @@ static int nvec_power_get_property(struct power_supply *psy,
 }
 
 static int nvec_battery_get_property(struct power_supply *psy,
-                               enum power_supply_property psp,
-                               union power_supply_propval *val)
+                                    enum power_supply_property psp,
+                                    union power_supply_propval *val)
 {
        struct nvec_power *power = dev_get_drvdata(psy->dev->parent);
 
-       switch(psp)
-       {
-               case POWER_SUPPLY_PROP_STATUS:
-                       val->intval = power->bat_status;
-                       break;
-               case POWER_SUPPLY_PROP_CAPACITY:
-                       val->intval = power->bat_cap;
-                       break;
-               case POWER_SUPPLY_PROP_PRESENT:
-                       val->intval = power->bat_present;
-                       break;
-               case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-                       val->intval = power->bat_voltage_now;
-                       break;
-               case POWER_SUPPLY_PROP_CURRENT_NOW:
-                       val->intval = power->bat_current_now;
-                       break;
-               case POWER_SUPPLY_PROP_CURRENT_AVG:
-                       val->intval = power->bat_current_avg;
-                       break;
-               case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
-                       val->intval = power->time_remain;
-                       break;
-               case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-                       val->intval = power->charge_full_design;
-                       break;
-               case POWER_SUPPLY_PROP_CHARGE_FULL:
-                       val->intval = power->charge_last_full;
-                       break;
-               case POWER_SUPPLY_PROP_CHARGE_EMPTY:
-                       val->intval = power->critical_capacity;
-                       break;
-               case POWER_SUPPLY_PROP_CHARGE_NOW:
-                       val->intval = power->capacity_remain;
-                       break;
-               case POWER_SUPPLY_PROP_TEMP:
-                       val->intval = power->bat_temperature;
-                       break;
-               case POWER_SUPPLY_PROP_MANUFACTURER:
-                       val->strval = power->bat_manu;
-                       break;
-               case POWER_SUPPLY_PROP_MODEL_NAME:
-                       val->strval = power->bat_model;
-                       break;
-               case POWER_SUPPLY_PROP_TECHNOLOGY:
-                       val->intval = power->bat_type_enum;
-                       break;
-               default:
-                       return -EINVAL;
-               }
+       switch (psp) {
+       case POWER_SUPPLY_PROP_STATUS:
+               val->intval = power->bat_status;
+               break;
+       case POWER_SUPPLY_PROP_CAPACITY:
+               val->intval = power->bat_cap;
+               break;
+       case POWER_SUPPLY_PROP_PRESENT:
+               val->intval = power->bat_present;
+               break;
+       case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+               val->intval = power->bat_voltage_now;
+               break;
+       case POWER_SUPPLY_PROP_CURRENT_NOW:
+               val->intval = power->bat_current_now;
+               break;
+       case POWER_SUPPLY_PROP_CURRENT_AVG:
+               val->intval = power->bat_current_avg;
+               break;
+       case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
+               val->intval = power->time_remain;
+               break;
+       case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
+               val->intval = power->charge_full_design;
+               break;
+       case POWER_SUPPLY_PROP_CHARGE_FULL:
+               val->intval = power->charge_last_full;
+               break;
+       case POWER_SUPPLY_PROP_CHARGE_EMPTY:
+               val->intval = power->critical_capacity;
+               break;
+       case POWER_SUPPLY_PROP_CHARGE_NOW:
+               val->intval = power->capacity_remain;
+               break;
+       case POWER_SUPPLY_PROP_TEMP:
+               val->intval = power->bat_temperature;
+               break;
+       case POWER_SUPPLY_PROP_MANUFACTURER:
+               val->strval = power->bat_manu;
+               break;
+       case POWER_SUPPLY_PROP_MODEL_NAME:
+               val->strval = power->bat_model;
+               break;
+       case POWER_SUPPLY_PROP_TECHNOLOGY:
+               val->intval = power->bat_type_enum;
+               break;
+       default:
+               return -EINVAL;
+       }
        return 0;
 }
 
@@ -310,11 +321,11 @@ static char *nvec_power_supplied_to[] = {
 };
 
 static struct power_supply nvec_bat_psy = {
-       .name           = "battery",
-       .type           = POWER_SUPPLY_TYPE_BATTERY,
-       .properties     = nvec_battery_props,
-       .num_properties = ARRAY_SIZE(nvec_battery_props),
-       .get_property   = nvec_battery_get_property,
+       .name = "battery",
+       .type = POWER_SUPPLY_TYPE_BATTERY,
+       .properties = nvec_battery_props,
+       .num_properties = ARRAY_SIZE(nvec_battery_props),
+       .get_property = nvec_battery_get_property,
 };
 
 static struct power_supply nvec_psy = {
@@ -327,9 +338,8 @@ static struct power_supply nvec_psy = {
        .get_property = nvec_power_get_property,
 };
 
-static int counter = 0;
-static int const bat_iter[] =
-{
+static int counter;
+static int const bat_iter[] = {
        SLOT_STATUS, VOLTAGE, CURRENT, CAPACITY_REMAINING,
 #ifdef EC_FULL_DIAG
        AVERAGE_CURRENT, TEMPERATURE, TIME_REMAINING,
@@ -340,7 +350,7 @@ static void nvec_power_poll(struct work_struct *work)
 {
        char buf[] = { '\x01', '\x00' };
        struct nvec_power *power = container_of(work, struct nvec_power,
-                poller.work);
+                                               poller.work);
 
        if (counter >= ARRAY_SIZE(bat_iter))
                counter = 0;
@@ -351,19 +361,18 @@ static void nvec_power_poll(struct work_struct *work)
 
 /* select a battery request function via round robin
    doing it all at once seems to overload the power supply */
-       buf[0] = '\x02'; /* battery */
-        buf[1] = bat_iter[counter++];
+       buf[0] = '\x02';        /* battery */
+       buf[1] = bat_iter[counter++];
        nvec_write_async(power->nvec, buf, 2);
 
-//     printk("%02x %02x\n", buf[0], buf[1]);
-
        schedule_delayed_work(to_delayed_work(work), msecs_to_jiffies(5000));
 };
 
 static int __devinit nvec_power_probe(struct platform_device *pdev)
 {
        struct power_supply *psy;
-       struct nvec_power *power = kzalloc(sizeof(struct nvec_power), GFP_NOWAIT);
+       struct nvec_power *power =
+           kzalloc(sizeof(struct nvec_power), GFP_NOWAIT);
        struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
 
        dev_set_drvdata(&pdev->dev, power);
@@ -381,7 +390,7 @@ static int __devinit nvec_power_probe(struct platform_device *pdev)
        case BAT:
                psy = &nvec_bat_psy;
 
-                power->notifier.notifier_call = nvec_power_bat_notifier;
+               power->notifier.notifier_call = nvec_power_bat_notifier;
                break;
        default:
                kfree(power);
@@ -398,14 +407,13 @@ static int __devinit nvec_power_probe(struct platform_device *pdev)
 
 static struct platform_driver nvec_power_driver = {
        .probe = nvec_power_probe,
-//     .remove = __devexit_p(nvec_power_remove),
        .driver = {
-               .name = "nvec-power",
-               .owner = THIS_MODULE,
-       }
+                  .name = "nvec-power",
+                  .owner = THIS_MODULE,
+                  }
 };
 
-static int __init nvec_power_init(void) 
+static int __init nvec_power_init(void)
 {
        return platform_driver_register(&nvec_power_driver);
 }
index 9eec075bed862c58c237676299c8de7faccc1c30..67c77551494f4f6333bb42aa4b84065fd341f233 100644 (file)
@@ -1,16 +1,33 @@
+/*
+ * nvec_ps2: mouse driver for a NVIDIA compliant embedded controller
+ *
+ * Copyright (C) 2011 The AC100 Kernel Team <ac100@lists.launchpad.net>
+ *
+ * Authors:  Pierre-Hugues Husson <phhusson@free.fr>
+ *           Ilya Petrov <ilya.muromec@gmail.com>
+ *           Marc Dietrich <marvin24@gmx.de>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/serio.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
+
 #include "nvec.h"
 
-#define START_STREAMING        {'\x06','\x03','\x01'}
-#define STOP_STREAMING {'\x06','\x04'}
-#define SEND_COMMAND   {'\x06','\x01','\xf4','\x01'}
+#define START_STREAMING        {'\x06', '\x03', '\x01'}
+#define STOP_STREAMING {'\x06', '\x04'}
+#define SEND_COMMAND   {'\x06', '\x01', '\xf4', '\x01'}
 
-struct nvec_ps2
-{
+static const unsigned char MOUSE_RESET[] = {'\x06', '\x01', '\xff', '\x03'};
+
+struct nvec_ps2 {
        struct serio *ser_dev;
        struct notifier_block notifier;
        struct nvec_chip *nvec;
@@ -31,12 +48,6 @@ static void ps2_stopstreaming(struct serio *ser_dev)
        nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }
 
-/* is this really needed?
-static void nvec_resp_handler(unsigned char *data) {
-       serio_interrupt(ser_dev, data[4], 0);
-}
-*/
-
 static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
 {
        unsigned char buf[] = SEND_COMMAND;
@@ -50,47 +61,44 @@ static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
 }
 
 static int nvec_ps2_notifier(struct notifier_block *nb,
-                               unsigned long event_type, void *data)
+                            unsigned long event_type, void *data)
 {
        int i;
        unsigned char *msg = (unsigned char *)data;
 
        switch (event_type) {
-               case NVEC_PS2_EVT:
-                       serio_interrupt(ps2_dev.ser_dev, msg[2], 0);
-                       return NOTIFY_STOP;
-
-               case NVEC_PS2:
-                       if (msg[2] == 1)
-                               for(i = 0; i < (msg[1] - 2); i++)
-                                       serio_interrupt(ps2_dev.ser_dev, msg[i+4], 0);
-                       else if (msg[1] != 2) /* !ack */
-                       {
-                               printk("nvec_ps2: unhandled mouse event ");
-                               for(i = 0; i <= (msg[1]+1); i++)
-                                       printk("%02x ", msg[i]);
-                               printk(".\n");
-                       }
-
-                       return NOTIFY_STOP;
+       case NVEC_PS2_EVT:
+               serio_interrupt(ps2_dev.ser_dev, msg[2], 0);
+               return NOTIFY_STOP;
+
+       case NVEC_PS2:
+               if (msg[2] == 1)
+                       for (i = 0; i < (msg[1] - 2); i++)
+                               serio_interrupt(ps2_dev.ser_dev, msg[i + 4], 0);
+               else if (msg[1] != 2) { /* !ack */
+                       print_hex_dump(KERN_WARNING, "unhandled mouse event: ",
+                               DUMP_PREFIX_NONE, 16, 1,
+                               msg, msg[1] + 2, true);
+               }
+
+               return NOTIFY_STOP;
        }
 
        return NOTIFY_DONE;
 }
 
-
 static int __devinit nvec_mouse_probe(struct platform_device *pdev)
 {
        struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
        struct serio *ser_dev = kzalloc(sizeof(struct serio), GFP_KERNEL);
 
-       ser_dev->id.type=SERIO_8042;
-       ser_dev->write=ps2_sendcommand;
-       ser_dev->open=ps2_startstreaming;
-       ser_dev->close=ps2_stopstreaming;
+       ser_dev->id.type = SERIO_8042;
+       ser_dev->write = ps2_sendcommand;
+       ser_dev->open = ps2_startstreaming;
+       ser_dev->close = ps2_stopstreaming;
 
-       strlcpy(ser_dev->name, "NVEC PS2", sizeof(ser_dev->name));
-       strlcpy(ser_dev->phys, "NVEC I2C slave", sizeof(ser_dev->phys));
+       strlcpy(ser_dev->name, "nvec mouse", sizeof(ser_dev->name));
+       strlcpy(ser_dev->phys, "nvec", sizeof(ser_dev->phys));
 
        ps2_dev.ser_dev = ser_dev;
        ps2_dev.notifier.notifier_call = nvec_ps2_notifier;
@@ -100,16 +108,16 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev)
        serio_register_port(ser_dev);
 
        /* mouse reset */
-       nvec_write_async(nvec, "\x06\x01\xff\x03", 4);
+       nvec_write_async(nvec, MOUSE_RESET, 4);
 
        return 0;
 }
 
 static struct platform_driver nvec_mouse_driver = {
-       .probe  = nvec_mouse_probe,
-       .driver = {
-               .name   = "nvec-mouse",
-               .owner  = THIS_MODULE,
+       .probe  = nvec_mouse_probe,
+       .driver = {
+               .name = "nvec-mouse",
+               .owner = THIS_MODULE,
        },
 };
 
@@ -119,3 +127,7 @@ static int __init nvec_mouse_init(void)
 }
 
 module_init(nvec_mouse_init);
+
+MODULE_DESCRIPTION("NVEC mouse driver");
+MODULE_AUTHOR("Marc Dietrich <marvin24@gmx.de>");
+MODULE_LICENSE("GPL");