Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] dw2102: Use RC Core instead of the legacy RC (second edition)

Use RC Core instead of the legacy RC.
DVBWorld, TBS, TeVii, Prof hardware decode only NEC remotes (one byte code).
Geniatech hardware decode only RC5 (two bytes).
+ New keymap for Geniatech HDStar (SU3000).

Signed-off-by: Evgeny Plehov <EvgenyPlehov@ukr.net>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

authored by

Evgeny Plehov and committed by
Mauro Carvalho Chehab
a49de26a 51d882ed

+155 -228
+2 -1
drivers/media/rc/keymaps/Makefile
··· 98 98 rc-videomate-s350.o \ 99 99 rc-videomate-tv-pvr.o \ 100 100 rc-winfast.o \ 101 - rc-winfast-usbii-deluxe.o 101 + rc-winfast-usbii-deluxe.o \ 102 + rc-su3000.o
+75
drivers/media/rc/keymaps/rc-su3000.c
··· 1 + /* rc-su3000.h - Keytable for Geniatech HDStar Remote Controller 2 + * 3 + * Copyright (c) 2013 by Evgeny Plehov <Evgeny Plehov@ukr.net> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License as published by 7 + * the Free Software Foundation; either version 2 of the License, or 8 + * (at your option) any later version. 9 + */ 10 + 11 + #include <media/rc-map.h> 12 + #include <linux/module.h> 13 + 14 + static struct rc_map_table su3000[] = { 15 + { 0x25, KEY_POWER }, /* right-bottom Red */ 16 + { 0x0a, KEY_MUTE }, /* -/-- */ 17 + { 0x01, KEY_1 }, 18 + { 0x02, KEY_2 }, 19 + { 0x03, KEY_3 }, 20 + { 0x04, KEY_4 }, 21 + { 0x05, KEY_5 }, 22 + { 0x06, KEY_6 }, 23 + { 0x07, KEY_7 }, 24 + { 0x08, KEY_8 }, 25 + { 0x09, KEY_9 }, 26 + { 0x00, KEY_0 }, 27 + { 0x20, KEY_UP }, /* CH+ */ 28 + { 0x21, KEY_DOWN }, /* CH+ */ 29 + { 0x12, KEY_VOLUMEUP }, /* Brightness Up */ 30 + { 0x13, KEY_VOLUMEDOWN },/* Brightness Down */ 31 + { 0x1f, KEY_RECORD }, 32 + { 0x17, KEY_PLAY }, 33 + { 0x16, KEY_PAUSE }, 34 + { 0x0b, KEY_STOP }, 35 + { 0x27, KEY_FASTFORWARD },/* >> */ 36 + { 0x26, KEY_REWIND }, /* << */ 37 + { 0x0d, KEY_OK }, /* Mute */ 38 + { 0x11, KEY_LEFT }, /* VOL- */ 39 + { 0x10, KEY_RIGHT }, /* VOL+ */ 40 + { 0x29, KEY_BACK }, /* button under 9 */ 41 + { 0x2c, KEY_MENU }, /* TTX */ 42 + { 0x2b, KEY_EPG }, /* EPG */ 43 + { 0x1e, KEY_RED }, /* OSD */ 44 + { 0x0e, KEY_GREEN }, /* Window */ 45 + { 0x2d, KEY_YELLOW }, /* button under << */ 46 + { 0x0f, KEY_BLUE }, /* bottom yellow button */ 47 + { 0x14, KEY_AUDIO }, /* Snapshot */ 48 + { 0x38, KEY_TV }, /* TV/Radio */ 49 + { 0x0c, KEY_ESC } /* upper Red button */ 50 + }; 51 + 52 + static struct rc_map_list su3000_map = { 53 + .map = { 54 + .scan = su3000, 55 + .size = ARRAY_SIZE(su3000), 56 + .rc_type = RC_TYPE_RC5, 57 + .name = RC_MAP_SU3000, 58 + } 59 + }; 60 + 61 + static int __init init_rc_map_su3000(void) 62 + { 63 + return rc_map_register(&su3000_map); 64 + } 65 + 66 + static void __exit exit_rc_map_su3000(void) 67 + { 68 + rc_map_unregister(&su3000_map); 69 + } 70 + 71 + module_init(init_rc_map_su3000) 72 + module_exit(exit_rc_map_su3000) 73 + 74 + MODULE_LICENSE("GPL"); 75 + MODULE_AUTHOR("Evgeny Plehov <Evgeny Plehov@ukr.net>");
+77 -227
drivers/media/usb/dvb-usb/dw2102.c
··· 112 112 "Please see linux/Documentation/dvb/ for more details " \ 113 113 "on firmware-problems." 114 114 115 - struct rc_map_dvb_usb_table_table { 116 - struct rc_map_table *rc_keys; 117 - int rc_keys_size; 118 - }; 119 - 120 115 struct su3000_state { 121 116 u8 initialized; 122 117 }; ··· 125 130 module_param_named(debug, dvb_usb_dw2102_debug, int, 0644); 126 131 MODULE_PARM_DESC(debug, "set debugging level (1=info 2=xfer 4=rc(or-able))." 127 132 DVB_USB_DEBUG_STATUS); 128 - 129 - /* keymaps */ 130 - static int ir_keymap; 131 - module_param_named(keymap, ir_keymap, int, 0644); 132 - MODULE_PARM_DESC(keymap, "set keymap 0=default 1=dvbworld 2=tevii 3=tbs ..." 133 - " 256=none"); 134 133 135 134 /* demod probe */ 136 135 static int demod_probe = 1; ··· 1448 1459 return 0; 1449 1460 } 1450 1461 1451 - static struct rc_map_table rc_map_dw210x_table[] = { 1452 - { 0xf80a, KEY_POWER2 }, /*power*/ 1453 - { 0xf80c, KEY_MUTE }, /*mute*/ 1454 - { 0xf811, KEY_1 }, 1455 - { 0xf812, KEY_2 }, 1456 - { 0xf813, KEY_3 }, 1457 - { 0xf814, KEY_4 }, 1458 - { 0xf815, KEY_5 }, 1459 - { 0xf816, KEY_6 }, 1460 - { 0xf817, KEY_7 }, 1461 - { 0xf818, KEY_8 }, 1462 - { 0xf819, KEY_9 }, 1463 - { 0xf810, KEY_0 }, 1464 - { 0xf81c, KEY_CHANNELUP }, /*ch+*/ 1465 - { 0xf80f, KEY_CHANNELDOWN }, /*ch-*/ 1466 - { 0xf81a, KEY_VOLUMEUP }, /*vol+*/ 1467 - { 0xf80e, KEY_VOLUMEDOWN }, /*vol-*/ 1468 - { 0xf804, KEY_RECORD }, /*rec*/ 1469 - { 0xf809, KEY_FAVORITES }, /*fav*/ 1470 - { 0xf808, KEY_REWIND }, /*rewind*/ 1471 - { 0xf807, KEY_FASTFORWARD }, /*fast*/ 1472 - { 0xf80b, KEY_PAUSE }, /*pause*/ 1473 - { 0xf802, KEY_ESC }, /*cancel*/ 1474 - { 0xf803, KEY_TAB }, /*tab*/ 1475 - { 0xf800, KEY_UP }, /*up*/ 1476 - { 0xf81f, KEY_OK }, /*ok*/ 1477 - { 0xf801, KEY_DOWN }, /*down*/ 1478 - { 0xf805, KEY_CAMERA }, /*cap*/ 1479 - { 0xf806, KEY_STOP }, /*stop*/ 1480 - { 0xf840, KEY_ZOOM }, /*full*/ 1481 - { 0xf81e, KEY_TV }, /*tvmode*/ 1482 - { 0xf81b, KEY_LAST }, /*recall*/ 1483 - }; 1484 - 1485 - static struct rc_map_table rc_map_tevii_table[] = { 1486 - { 0xf80a, KEY_POWER }, 1487 - { 0xf80c, KEY_MUTE }, 1488 - { 0xf811, KEY_1 }, 1489 - { 0xf812, KEY_2 }, 1490 - { 0xf813, KEY_3 }, 1491 - { 0xf814, KEY_4 }, 1492 - { 0xf815, KEY_5 }, 1493 - { 0xf816, KEY_6 }, 1494 - { 0xf817, KEY_7 }, 1495 - { 0xf818, KEY_8 }, 1496 - { 0xf819, KEY_9 }, 1497 - { 0xf810, KEY_0 }, 1498 - { 0xf81c, KEY_MENU }, 1499 - { 0xf80f, KEY_VOLUMEDOWN }, 1500 - { 0xf81a, KEY_LAST }, 1501 - { 0xf80e, KEY_OPEN }, 1502 - { 0xf804, KEY_RECORD }, 1503 - { 0xf809, KEY_VOLUMEUP }, 1504 - { 0xf808, KEY_CHANNELUP }, 1505 - { 0xf807, KEY_PVR }, 1506 - { 0xf80b, KEY_TIME }, 1507 - { 0xf802, KEY_RIGHT }, 1508 - { 0xf803, KEY_LEFT }, 1509 - { 0xf800, KEY_UP }, 1510 - { 0xf81f, KEY_OK }, 1511 - { 0xf801, KEY_DOWN }, 1512 - { 0xf805, KEY_TUNER }, 1513 - { 0xf806, KEY_CHANNELDOWN }, 1514 - { 0xf840, KEY_PLAYPAUSE }, 1515 - { 0xf81e, KEY_REWIND }, 1516 - { 0xf81b, KEY_FAVORITES }, 1517 - { 0xf81d, KEY_BACK }, 1518 - { 0xf84d, KEY_FASTFORWARD }, 1519 - { 0xf844, KEY_EPG }, 1520 - { 0xf84c, KEY_INFO }, 1521 - { 0xf841, KEY_AB }, 1522 - { 0xf843, KEY_AUDIO }, 1523 - { 0xf845, KEY_SUBTITLE }, 1524 - { 0xf84a, KEY_LIST }, 1525 - { 0xf846, KEY_F1 }, 1526 - { 0xf847, KEY_F2 }, 1527 - { 0xf85e, KEY_F3 }, 1528 - { 0xf85c, KEY_F4 }, 1529 - { 0xf852, KEY_F5 }, 1530 - { 0xf85a, KEY_F6 }, 1531 - { 0xf856, KEY_MODE }, 1532 - { 0xf858, KEY_SWITCHVIDEOMODE }, 1533 - }; 1534 - 1535 - static struct rc_map_table rc_map_tbs_table[] = { 1536 - { 0xf884, KEY_POWER }, 1537 - { 0xf894, KEY_MUTE }, 1538 - { 0xf887, KEY_1 }, 1539 - { 0xf886, KEY_2 }, 1540 - { 0xf885, KEY_3 }, 1541 - { 0xf88b, KEY_4 }, 1542 - { 0xf88a, KEY_5 }, 1543 - { 0xf889, KEY_6 }, 1544 - { 0xf88f, KEY_7 }, 1545 - { 0xf88e, KEY_8 }, 1546 - { 0xf88d, KEY_9 }, 1547 - { 0xf892, KEY_0 }, 1548 - { 0xf896, KEY_CHANNELUP }, 1549 - { 0xf891, KEY_CHANNELDOWN }, 1550 - { 0xf893, KEY_VOLUMEUP }, 1551 - { 0xf88c, KEY_VOLUMEDOWN }, 1552 - { 0xf883, KEY_RECORD }, 1553 - { 0xf898, KEY_PAUSE }, 1554 - { 0xf899, KEY_OK }, 1555 - { 0xf89a, KEY_SHUFFLE }, 1556 - { 0xf881, KEY_UP }, 1557 - { 0xf890, KEY_LEFT }, 1558 - { 0xf882, KEY_RIGHT }, 1559 - { 0xf888, KEY_DOWN }, 1560 - { 0xf895, KEY_FAVORITES }, 1561 - { 0xf897, KEY_SUBTITLE }, 1562 - { 0xf89d, KEY_ZOOM }, 1563 - { 0xf89f, KEY_EXIT }, 1564 - { 0xf89e, KEY_MENU }, 1565 - { 0xf89c, KEY_EPG }, 1566 - { 0xf880, KEY_PREVIOUS }, 1567 - { 0xf89b, KEY_MODE } 1568 - }; 1569 - 1570 - static struct rc_map_table rc_map_su3000_table[] = { 1571 - { 0x25, KEY_POWER }, /* right-bottom Red */ 1572 - { 0x0a, KEY_MUTE }, /* -/-- */ 1573 - { 0x01, KEY_1 }, 1574 - { 0x02, KEY_2 }, 1575 - { 0x03, KEY_3 }, 1576 - { 0x04, KEY_4 }, 1577 - { 0x05, KEY_5 }, 1578 - { 0x06, KEY_6 }, 1579 - { 0x07, KEY_7 }, 1580 - { 0x08, KEY_8 }, 1581 - { 0x09, KEY_9 }, 1582 - { 0x00, KEY_0 }, 1583 - { 0x20, KEY_UP }, /* CH+ */ 1584 - { 0x21, KEY_DOWN }, /* CH+ */ 1585 - { 0x12, KEY_VOLUMEUP }, /* Brightness Up */ 1586 - { 0x13, KEY_VOLUMEDOWN },/* Brightness Down */ 1587 - { 0x1f, KEY_RECORD }, 1588 - { 0x17, KEY_PLAY }, 1589 - { 0x16, KEY_PAUSE }, 1590 - { 0x0b, KEY_STOP }, 1591 - { 0x27, KEY_FASTFORWARD },/* >> */ 1592 - { 0x26, KEY_REWIND }, /* << */ 1593 - { 0x0d, KEY_OK }, /* Mute */ 1594 - { 0x11, KEY_LEFT }, /* VOL- */ 1595 - { 0x10, KEY_RIGHT }, /* VOL+ */ 1596 - { 0x29, KEY_BACK }, /* button under 9 */ 1597 - { 0x2c, KEY_MENU }, /* TTX */ 1598 - { 0x2b, KEY_EPG }, /* EPG */ 1599 - { 0x1e, KEY_RED }, /* OSD */ 1600 - { 0x0e, KEY_GREEN }, /* Window */ 1601 - { 0x2d, KEY_YELLOW }, /* button under << */ 1602 - { 0x0f, KEY_BLUE }, /* bottom yellow button */ 1603 - { 0x14, KEY_AUDIO }, /* Snapshot */ 1604 - { 0x38, KEY_TV }, /* TV/Radio */ 1605 - { 0x0c, KEY_ESC } /* upper Red button */ 1606 - }; 1607 - 1608 - static struct rc_map_dvb_usb_table_table keys_tables[] = { 1609 - { rc_map_dw210x_table, ARRAY_SIZE(rc_map_dw210x_table) }, 1610 - { rc_map_tevii_table, ARRAY_SIZE(rc_map_tevii_table) }, 1611 - { rc_map_tbs_table, ARRAY_SIZE(rc_map_tbs_table) }, 1612 - { rc_map_su3000_table, ARRAY_SIZE(rc_map_su3000_table) }, 1613 - }; 1614 - 1615 - static int dw2102_rc_query(struct dvb_usb_device *d, u32 *event, int *state) 1462 + static int dw2102_rc_query(struct dvb_usb_device *d) 1616 1463 { 1617 - struct rc_map_table *keymap = d->props.rc.legacy.rc_map_table; 1618 - int keymap_size = d->props.rc.legacy.rc_map_size; 1619 1464 u8 key[2]; 1620 1465 struct i2c_msg msg = { 1621 1466 .addr = DW2102_RC_QUERY, ··· 1457 1634 .buf = key, 1458 1635 .len = 2 1459 1636 }; 1460 - int i; 1461 - /* override keymap */ 1462 - if ((ir_keymap > 0) && (ir_keymap <= ARRAY_SIZE(keys_tables))) { 1463 - keymap = keys_tables[ir_keymap - 1].rc_keys ; 1464 - keymap_size = keys_tables[ir_keymap - 1].rc_keys_size; 1465 - } else if (ir_keymap > ARRAY_SIZE(keys_tables)) 1466 - return 0; /* none */ 1467 1637 1468 - *state = REMOTE_NO_KEY_PRESSED; 1469 1638 if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { 1470 - for (i = 0; i < keymap_size ; i++) { 1471 - if (rc5_data(&keymap[i]) == msg.buf[0]) { 1472 - *state = REMOTE_KEY_PRESSED; 1473 - *event = keymap[i].keycode; 1474 - break; 1475 - } 1476 - 1477 - } 1478 - 1479 - if ((*state) == REMOTE_KEY_PRESSED) 1480 - deb_rc("%s: found rc key: %x, %x, event: %x\n", 1481 - __func__, key[0], key[1], (*event)); 1482 - else if (key[0] != 0xff) 1483 - deb_rc("%s: unknown rc key: %x, %x\n", 1639 + if (msg.buf[0] != 0xff) { 1640 + deb_rc("%s: rc code: %x, %x\n", 1484 1641 __func__, key[0], key[1]); 1642 + rc_keydown(d->rc_dev, key[0], 1); 1643 + } 1644 + } 1485 1645 1646 + return 0; 1647 + } 1648 + 1649 + static int prof_rc_query(struct dvb_usb_device *d) 1650 + { 1651 + u8 key[2]; 1652 + struct i2c_msg msg = { 1653 + .addr = DW2102_RC_QUERY, 1654 + .flags = I2C_M_RD, 1655 + .buf = key, 1656 + .len = 2 1657 + }; 1658 + 1659 + if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { 1660 + if (msg.buf[0] != 0xff) { 1661 + deb_rc("%s: rc code: %x, %x\n", 1662 + __func__, key[0], key[1]); 1663 + rc_keydown(d->rc_dev, key[0]^0xff, 1); 1664 + } 1665 + } 1666 + 1667 + return 0; 1668 + } 1669 + 1670 + static int su3000_rc_query(struct dvb_usb_device *d) 1671 + { 1672 + u8 key[2]; 1673 + struct i2c_msg msg = { 1674 + .addr = DW2102_RC_QUERY, 1675 + .flags = I2C_M_RD, 1676 + .buf = key, 1677 + .len = 2 1678 + }; 1679 + 1680 + if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { 1681 + if (msg.buf[0] != 0xff) { 1682 + deb_rc("%s: rc code: %x, %x\n", 1683 + __func__, key[0], key[1]); 1684 + rc_keydown(d->rc_dev, key[1] << 8 | key[0], 1); 1685 + } 1486 1686 } 1487 1687 1488 1688 return 0; ··· 1614 1768 /* init registers */ 1615 1769 switch (dev->descriptor.idProduct) { 1616 1770 case USB_PID_TEVII_S650: 1617 - dw2104_properties.rc.legacy.rc_map_table = rc_map_tevii_table; 1618 - dw2104_properties.rc.legacy.rc_map_size = 1619 - ARRAY_SIZE(rc_map_tevii_table); 1771 + dw2104_properties.rc.core.rc_codes = RC_MAP_TEVII_NEC; 1620 1772 case USB_PID_DW2104: 1621 1773 reset = 1; 1622 1774 dw210x_op_rw(dev, 0xc4, 0x0000, 0, &reset, 1, ··· 1678 1834 1679 1835 .i2c_algo = &dw2102_serit_i2c_algo, 1680 1836 1681 - .rc.legacy = { 1682 - .rc_map_table = rc_map_dw210x_table, 1683 - .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table), 1837 + .rc.core = { 1684 1838 .rc_interval = 150, 1839 + .rc_codes = RC_MAP_DM1105_NEC, 1840 + .module_name = "dw2102", 1841 + .allowed_protos = RC_BIT_NEC, 1685 1842 .rc_query = dw2102_rc_query, 1686 1843 }, 1687 1844 ··· 1733 1888 .no_reconnect = 1, 1734 1889 1735 1890 .i2c_algo = &dw2104_i2c_algo, 1736 - .rc.legacy = { 1737 - .rc_map_table = rc_map_dw210x_table, 1738 - .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table), 1891 + .rc.core = { 1739 1892 .rc_interval = 150, 1893 + .rc_codes = RC_MAP_DM1105_NEC, 1894 + .module_name = "dw2102", 1895 + .allowed_protos = RC_BIT_NEC, 1740 1896 .rc_query = dw2102_rc_query, 1741 1897 }, 1742 1898 ··· 1784 1938 .no_reconnect = 1, 1785 1939 1786 1940 .i2c_algo = &dw3101_i2c_algo, 1787 - .rc.legacy = { 1788 - .rc_map_table = rc_map_dw210x_table, 1789 - .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table), 1941 + .rc.core = { 1790 1942 .rc_interval = 150, 1943 + .rc_codes = RC_MAP_DM1105_NEC, 1944 + .module_name = "dw2102", 1945 + .allowed_protos = RC_BIT_NEC, 1791 1946 .rc_query = dw2102_rc_query, 1792 1947 }, 1793 1948 ··· 1833 1986 .no_reconnect = 1, 1834 1987 1835 1988 .i2c_algo = &s6x0_i2c_algo, 1836 - .rc.legacy = { 1837 - .rc_map_table = rc_map_tevii_table, 1838 - .rc_map_size = ARRAY_SIZE(rc_map_tevii_table), 1989 + .rc.core = { 1839 1990 .rc_interval = 150, 1991 + .rc_codes = RC_MAP_TEVII_NEC, 1992 + .module_name = "dw2102", 1993 + .allowed_protos = RC_BIT_NEC, 1840 1994 .rc_query = dw2102_rc_query, 1841 1995 }, 1842 1996 ··· 1927 2079 .identify_state = su3000_identify_state, 1928 2080 .i2c_algo = &su3000_i2c_algo, 1929 2081 1930 - .rc.legacy = { 1931 - .rc_map_table = rc_map_su3000_table, 1932 - .rc_map_size = ARRAY_SIZE(rc_map_su3000_table), 2082 + .rc.core = { 1933 2083 .rc_interval = 150, 1934 - .rc_query = dw2102_rc_query, 2084 + .rc_codes = RC_MAP_SU3000, 2085 + .module_name = "dw2102", 2086 + .allowed_protos = RC_BIT_RC5, 2087 + .rc_query = su3000_rc_query, 1935 2088 }, 1936 2089 1937 2090 .read_mac_address = su3000_read_mac_address, ··· 1992 2143 .identify_state = su3000_identify_state, 1993 2144 .i2c_algo = &su3000_i2c_algo, 1994 2145 1995 - .rc.legacy = { 1996 - .rc_map_table = rc_map_su3000_table, 1997 - .rc_map_size = ARRAY_SIZE(rc_map_su3000_table), 2146 + .rc.core = { 1998 2147 .rc_interval = 150, 1999 - .rc_query = dw2102_rc_query, 2148 + .rc_codes = RC_MAP_SU3000, 2149 + .module_name = "dw2102", 2150 + .allowed_protos = RC_BIT_RC5, 2151 + .rc_query = su3000_rc_query, 2000 2152 }, 2001 2153 2002 2154 .read_mac_address = su3000_read_mac_address, ··· 2043 2193 /* fill only different fields */ 2044 2194 p1100->firmware = P1100_FIRMWARE; 2045 2195 p1100->devices[0] = d1100; 2046 - p1100->rc.legacy.rc_map_table = rc_map_tbs_table; 2047 - p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table); 2196 + p1100->rc.core.rc_query = prof_rc_query; 2197 + p1100->rc.core.rc_codes = RC_MAP_TBS_NEC; 2048 2198 p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach; 2049 2199 2050 2200 s660 = kmemdup(&s6x0_properties, ··· 2069 2219 } 2070 2220 p7500->firmware = P7500_FIRMWARE; 2071 2221 p7500->devices[0] = d7500; 2072 - p7500->rc.legacy.rc_map_table = rc_map_tbs_table; 2073 - p7500->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table); 2222 + p7500->rc.core.rc_query = prof_rc_query; 2223 + p7500->rc.core.rc_codes = RC_MAP_TBS_NEC; 2074 2224 p7500->adapter->fe[0].frontend_attach = prof_7500_frontend_attach; 2075 2225 2076 2226
+1
include/media/rc-map.h
··· 193 193 #define RC_MAP_VIDEOMATE_TV_PVR "rc-videomate-tv-pvr" 194 194 #define RC_MAP_WINFAST "rc-winfast" 195 195 #define RC_MAP_WINFAST_USBII_DELUXE "rc-winfast-usbii-deluxe" 196 + #define RC_MAP_SU3000 "rc-su3000" 196 197 197 198 /* 198 199 * Please, do not just append newer Remote Controller names at the end.