]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/misc/cm109.c
Merge git://git.marvell.com/orion into devel
[linux-2.6-omap-h63xx.git] / drivers / input / misc / cm109.c
index 1166e8443304c9b1e6c681c844286ad15242bc6c..86457feccfc4f2fdbf3834adea42b1a32ed9e0d6 100644 (file)
 #include <linux/rwsem.h>
 #include <linux/usb/input.h>
 
-#define CM109_DEBUG 0
-
 #define DRIVER_VERSION "20080805"
 #define DRIVER_AUTHOR  "Alfred E. Heggestad"
 #define DRIVER_DESC    "CM109 phone driver"
 
 static char *phone = "kip1000";
 module_param(phone, charp, S_IRUSR);
-MODULE_PARM_DESC(phone, "Phone name {kip1000, gtalk, usbph01}");
+MODULE_PARM_DESC(phone, "Phone name {kip1000, gtalk, usbph01, atcom}");
 
 enum {
        /* HID Registers */
@@ -260,6 +258,37 @@ static unsigned short keymap_usbph01(int scancode)
        }
 }
 
+/*
+ * Keymap for ATCom AU-100
+ * http://www.atcom.cn/En_products_AU100.html
+ * http://www.packetizer.com/products/au100/
+ * http://www.voip-info.org/wiki/view/AU-100
+ *
+ * Contributed by daniel@gimpelevich.san-francisco.ca.us
+ */
+static unsigned short keymap_atcom(int scancode)
+{
+       switch (scancode) {                             /* phone key:   */
+       case 0x82: return KEY_NUMERIC_0;                /*   0          */
+       case 0x11: return KEY_NUMERIC_1;                /*   1          */
+       case 0x12: return KEY_NUMERIC_2;                /*   2          */
+       case 0x14: return KEY_NUMERIC_3;                /*   3          */
+       case 0x21: return KEY_NUMERIC_4;                /*   4          */
+       case 0x22: return KEY_NUMERIC_5;                /*   5          */
+       case 0x24: return KEY_NUMERIC_6;                /*   6          */
+       case 0x41: return KEY_NUMERIC_7;                /*   7          */
+       case 0x42: return KEY_NUMERIC_8;                /*   8          */
+       case 0x44: return KEY_NUMERIC_9;                /*   9          */
+       case 0x84: return KEY_NUMERIC_POUND;            /*   #          */
+       case 0x81: return KEY_NUMERIC_STAR;             /*   *          */
+       case 0x18: return KEY_ENTER;                    /*   pickup     */
+       case 0x28: return KEY_ESC;                      /*   hangup     */
+       case 0x48: return KEY_LEFT;                     /* left arrow   */
+       case 0x88: return KEY_RIGHT;                    /* right arrow  */
+       default:   return special_keymap(scancode);
+       }
+}
+
 static unsigned short (*keymap)(int) = keymap_kip1000;
 
 /*
@@ -311,7 +340,7 @@ static void cm109_urb_irq_callback(struct urb *urb)
        const int status = urb->status;
        int error;
 
-       dev_dbg(&urb->dev->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x",
+       dev_dbg(&urb->dev->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
             dev->irq_data->byte[0],
             dev->irq_data->byte[1],
             dev->irq_data->byte[2],
@@ -381,7 +410,7 @@ static void cm109_urb_ctl_callback(struct urb *urb)
        const int status = urb->status;
        int error;
 
-       dev_dbg(&urb->dev->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]",
+       dev_dbg(&urb->dev->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
             dev->ctl_data->byte[0],
             dev->ctl_data->byte[1],
             dev->ctl_data->byte[2],
@@ -546,7 +575,7 @@ static int cm109_input_ev(struct input_dev *idev, unsigned int type,
        struct cm109_dev *dev = input_get_drvdata(idev);
 
        dev_dbg(&dev->udev->dev,
-               "input_ev: type=%u code=%u value=%d", type, code, value);
+               "input_ev: type=%u code=%u value=%d\n", type, code, value);
 
        if (type != EV_SND)
                return -EINVAL;
@@ -760,7 +789,7 @@ static int cm109_usb_suspend(struct usb_interface *intf, pm_message_t message)
 {
        struct cm109_dev *dev = usb_get_intfdata(intf);
 
-       dev_info(&intf->dev, "cm109: usb_suspend (event=%d)", message.event);
+       dev_info(&intf->dev, "cm109: usb_suspend (event=%d)\n", message.event);
 
        mutex_lock(&dev->pm_mutex);
        cm109_stop_traffic(dev);
@@ -773,7 +802,7 @@ static int cm109_usb_resume(struct usb_interface *intf)
 {
        struct cm109_dev *dev = usb_get_intfdata(intf);
 
-       dev_info(&intf->dev, "cm109: usb_resume");
+       dev_info(&intf->dev, "cm109: usb_resume\n");
 
        mutex_lock(&dev->pm_mutex);
        cm109_restore_state(dev);
@@ -833,18 +862,22 @@ static int __init cm109_select_keymap(void)
        if (!strcasecmp(phone, "kip1000")) {
                keymap = keymap_kip1000;
                printk(KERN_INFO KBUILD_MODNAME ": "
-                       "Keymap for Komunikate KIP1000 phone loaded");
+                       "Keymap for Komunikate KIP1000 phone loaded\n");
        } else if (!strcasecmp(phone, "gtalk")) {
                keymap = keymap_gtalk;
                printk(KERN_INFO KBUILD_MODNAME ": "
-                       "Keymap for Genius G-talk phone loaded");
+                       "Keymap for Genius G-talk phone loaded\n");
        } else if (!strcasecmp(phone, "usbph01")) {
                keymap = keymap_usbph01;
                printk(KERN_INFO KBUILD_MODNAME ": "
-                       "Keymap for Allied-Telesis Corega USBPH01 phone loaded");
+                       "Keymap for Allied-Telesis Corega USBPH01 phone loaded\n");
+       } else if (!strcasecmp(phone, "atcom")) {
+               keymap = keymap_atcom;
+               printk(KERN_INFO KBUILD_MODNAME ": "
+                       "Keymap for ATCom AU-100 phone loaded\n");
        } else {
                printk(KERN_ERR KBUILD_MODNAME ": "
-                       "Unsupported phone: %s", phone);
+                       "Unsupported phone: %s\n", phone);
                return -EINVAL;
        }
 
@@ -864,7 +897,7 @@ static int __init cm109_init(void)
                return err;
 
        printk(KERN_INFO KBUILD_MODNAME ": "
-               DRIVER_DESC ": " DRIVER_VERSION " (C) " DRIVER_AUTHOR);
+               DRIVER_DESC ": " DRIVER_VERSION " (C) " DRIVER_AUTHOR "\n");
 
        return 0;
 }