[media] ati_remote: add keymap for Medion X10 OR2x remotes
authorAnssi Hannula <anssi.hannula@iki.fi>
Mon, 14 May 2012 12:52:37 +0000 (09:52 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 20 May 2012 14:40:06 +0000 (11:40 -0300)
Add another Medion X10 remote keymap. This is for the Medion OR2x
remotes with the Windows MCE button.

The receiver shipped with this remote has the same USB ID as the other
Medion receivers, but the name is different and is therefore used to
detect this variant.

Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/rc/ati_remote.c
drivers/media/rc/keymaps/Makefile
drivers/media/rc/keymaps/rc-medion-x10-or2x.c [new file with mode: 0644]
include/media/rc-map.h

index 26fa043d3de71a2135411855202f83f95d30b940..7be377fc1be8a02fd9ac07140de7252ad299fbe2 100644 (file)
@@ -161,10 +161,32 @@ static const char *get_medion_keymap(struct usb_interface *interface)
 {
        struct usb_device *udev = interface_to_usbdev(interface);
 
-       /* The receiver shipped with the "Digitainer" variant helpfully has
-        * a single additional bit set in its descriptor. */
-       if (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP)
-               return RC_MAP_MEDION_X10_DIGITAINER;
+       /*
+        * There are many different Medion remotes shipped with a receiver
+        * with the same usb id, but the receivers have subtle differences
+        * in the USB descriptors allowing us to detect them.
+        */
+
+       if (udev->manufacturer && udev->product) {
+               if (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP) {
+
+                       if (!strcmp(udev->manufacturer, "X10 Wireless Technology Inc")
+                           && !strcmp(udev->product, "USB Receiver"))
+                               return RC_MAP_MEDION_X10_DIGITAINER;
+
+                       if (!strcmp(udev->manufacturer, "X10 WTI")
+                           && !strcmp(udev->product, "RF receiver"))
+                               return RC_MAP_MEDION_X10_OR2X;
+               } else {
+
+                        if (!strcmp(udev->manufacturer, "X10 Wireless Technology Inc")
+                           && !strcmp(udev->product, "USB Receiver"))
+                               return RC_MAP_MEDION_X10;
+               }
+       }
+
+       dev_info(&interface->dev,
+                "Unknown Medion X10 receiver, using default ati_remote Medion keymap\n");
 
        return RC_MAP_MEDION_X10;
 }
index 38ff6e0e099a81ba9338c91bbbb9bba2bbcaa9b3..6d41a29861accbef09eecf519ac0c7c2d32d52e4 100644 (file)
@@ -53,6 +53,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \
                        rc-manli.o \
                        rc-medion-x10.o \
                        rc-medion-x10-digitainer.o \
+                       rc-medion-x10-or2x.o \
                        rc-msi-digivox-ii.o \
                        rc-msi-digivox-iii.o \
                        rc-msi-tvanywhere.o \
diff --git a/drivers/media/rc/keymaps/rc-medion-x10-or2x.c b/drivers/media/rc/keymaps/rc-medion-x10-or2x.c
new file mode 100644 (file)
index 0000000..b077300
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Medion X10 OR22/OR24 RF remote keytable
+ *
+ * Copyright (C) 2012 Anssi Hannula <anssi.hannula@iki.fi>
+ *
+ * This keymap is for several Medion X10 remotes that have the Windows MCE
+ * button. This has been tested with a "RF VISTA Remote Control", OR24V,
+ * P/N 20035335, but should work with other variants that have the same
+ * buttons, such as OR22V and OR24E.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <linux/module.h>
+#include <media/rc-map.h>
+
+static struct rc_map_table medion_x10_or2x[] = {
+       { 0x02, KEY_POWER },
+       { 0x16, KEY_TEXT },   /* "T" in a box, for teletext */
+
+       { 0x09, KEY_VOLUMEUP },
+       { 0x08, KEY_VOLUMEDOWN },
+       { 0x00, KEY_MUTE },
+       { 0x0b, KEY_CHANNELUP },
+       { 0x0c, KEY_CHANNELDOWN },
+
+       { 0x32, KEY_RED },
+       { 0x33, KEY_GREEN },
+       { 0x34, KEY_YELLOW },
+       { 0x35, KEY_BLUE },
+
+       { 0x18, KEY_PVR },    /* record symbol inside a tv symbol */
+       { 0x04, KEY_DVD },    /* disc symbol */
+       { 0x31, KEY_EPG },    /* a tv schedule symbol */
+       { 0x1c, KEY_TV },     /* play symbol inside a tv symbol */
+       { 0x20, KEY_BACK },
+       { 0x2f, KEY_INFO },
+
+       { 0x1a, KEY_UP },
+       { 0x22, KEY_DOWN },
+       { 0x1d, KEY_LEFT },
+       { 0x1f, KEY_RIGHT },
+       { 0x1e, KEY_OK },
+
+       { 0x1b, KEY_MEDIA },  /* Windows MCE button */
+
+       { 0x21, KEY_PREVIOUS },
+       { 0x23, KEY_NEXT },
+       { 0x24, KEY_REWIND },
+       { 0x26, KEY_FORWARD },
+       { 0x25, KEY_PLAY },
+       { 0x28, KEY_STOP },
+       { 0x29, KEY_PAUSE },
+       { 0x27, KEY_RECORD },
+
+       { 0x0d, KEY_1 },
+       { 0x0e, KEY_2 },
+       { 0x0f, KEY_3 },
+       { 0x10, KEY_4 },
+       { 0x11, KEY_5 },
+       { 0x12, KEY_6 },
+       { 0x13, KEY_7 },
+       { 0x14, KEY_8 },
+       { 0x15, KEY_9 },
+       { 0x17, KEY_0 },
+       { 0x30, KEY_CLEAR },
+       { 0x36, KEY_ENTER },
+       { 0x37, KEY_NUMERIC_STAR },
+       { 0x38, KEY_NUMERIC_POUND },
+};
+
+static struct rc_map_list medion_x10_or2x_map = {
+       .map = {
+               .scan    = medion_x10_or2x,
+               .size    = ARRAY_SIZE(medion_x10_or2x),
+               .rc_type = RC_TYPE_OTHER,
+               .name    = RC_MAP_MEDION_X10_OR2X,
+       }
+};
+
+static int __init init_rc_map_medion_x10_or2x(void)
+{
+       return rc_map_register(&medion_x10_or2x_map);
+}
+
+static void __exit exit_rc_map_medion_x10_or2x(void)
+{
+       rc_map_unregister(&medion_x10_or2x_map);
+}
+
+module_init(init_rc_map_medion_x10_or2x)
+module_exit(exit_rc_map_medion_x10_or2x)
+
+MODULE_DESCRIPTION("Medion X10 OR22/OR24 RF remote keytable");
+MODULE_AUTHOR("Anssi Hannula <anssi.hannula@iki.fi>");
+MODULE_LICENSE("GPL");
index 88583a6ff7f258a3a6437304e4743d2892b1d35a..2e0f67db666f7784b71bfad92b24a030957b93fd 100644 (file)
@@ -114,6 +114,7 @@ void rc_map_init(void);
 #define RC_MAP_MANLI                     "rc-manli"
 #define RC_MAP_MEDION_X10                "rc-medion-x10"
 #define RC_MAP_MEDION_X10_DIGITAINER     "rc-medion-x10-digitainer"
+#define RC_MAP_MEDION_X10_OR2X           "rc-medion-x10-or2x"
 #define RC_MAP_MSI_DIGIVOX_II            "rc-msi-digivox-ii"
 #define RC_MAP_MSI_DIGIVOX_III           "rc-msi-digivox-iii"
 #define RC_MAP_MSI_TVANYWHERE_PLUS       "rc-msi-tvanywhere-plus"