dw2102.c (818b930bc15077fc00ff16bb22c5df1857f05afa) dw2102.c (73f0af44a9137cc2ab18e181f68f59d2ad3fe3f7)
1/* DVB USB framework compliant Linux driver for the
2 * DVBWorld DVB-S 2101, 2102, DVB-S2 2104, DVB-C 3101,
3 * TeVii S600, S630, S650, S660, S480,
4 * Prof 1100, 7500,
5 * Geniatech SU3000 Cards
6 * Copyright (C) 2008-2011 Igor M. Liplianin (liplianin@me.by)
7 *
8 * This program is free software; you can redistribute it and/or modify it

--- 8 unchanged lines hidden (view full) ---

17#include "z0194a.h"
18#include "stv0288.h"
19#include "stb6000.h"
20#include "eds1547.h"
21#include "cx24116.h"
22#include "tda1002x.h"
23#include "mt312.h"
24#include "zl10039.h"
1/* DVB USB framework compliant Linux driver for the
2 * DVBWorld DVB-S 2101, 2102, DVB-S2 2104, DVB-C 3101,
3 * TeVii S600, S630, S650, S660, S480,
4 * Prof 1100, 7500,
5 * Geniatech SU3000 Cards
6 * Copyright (C) 2008-2011 Igor M. Liplianin (liplianin@me.by)
7 *
8 * This program is free software; you can redistribute it and/or modify it

--- 8 unchanged lines hidden (view full) ---

17#include "z0194a.h"
18#include "stv0288.h"
19#include "stb6000.h"
20#include "eds1547.h"
21#include "cx24116.h"
22#include "tda1002x.h"
23#include "mt312.h"
24#include "zl10039.h"
25#include "ts2020.h"
25#include "ds3000.h"
26#include "stv0900.h"
27#include "stv6110.h"
28#include "stb6100.h"
29#include "stb6100_proc.h"
30
31#ifndef USB_PID_DW2102
32#define USB_PID_DW2102 0x2102

--- 42 unchanged lines hidden (view full) ---

75#define REG_20_SYMBOLRATE_BYTE1 0x20
76#define REG_21_SYMBOLRATE_BYTE2 0x21
77/* on my own*/
78#define DW2102_VOLTAGE_CTRL (0x1800)
79#define SU3000_STREAM_CTRL (0x1900)
80#define DW2102_RC_QUERY (0x1a00)
81#define DW2102_LED_CTRL (0x1b00)
82
26#include "ds3000.h"
27#include "stv0900.h"
28#include "stv6110.h"
29#include "stb6100.h"
30#include "stb6100_proc.h"
31
32#ifndef USB_PID_DW2102
33#define USB_PID_DW2102 0x2102

--- 42 unchanged lines hidden (view full) ---

76#define REG_20_SYMBOLRATE_BYTE1 0x20
77#define REG_21_SYMBOLRATE_BYTE2 0x21
78/* on my own*/
79#define DW2102_VOLTAGE_CTRL (0x1800)
80#define SU3000_STREAM_CTRL (0x1900)
81#define DW2102_RC_QUERY (0x1a00)
82#define DW2102_LED_CTRL (0x1b00)
83
84#define DW2101_FIRMWARE "dvb-usb-dw2101.fw"
85#define DW2102_FIRMWARE "dvb-usb-dw2102.fw"
86#define DW2104_FIRMWARE "dvb-usb-dw2104.fw"
87#define DW3101_FIRMWARE "dvb-usb-dw3101.fw"
88#define S630_FIRMWARE "dvb-usb-s630.fw"
89#define S660_FIRMWARE "dvb-usb-s660.fw"
90#define P1100_FIRMWARE "dvb-usb-p1100.fw"
91#define P7500_FIRMWARE "dvb-usb-p7500.fw"
92
83#define err_str "did not find the firmware file. (%s) " \
84 "Please see linux/Documentation/dvb/ for more details " \
85 "on firmware-problems."
86
87struct rc_map_dvb_usb_table_table {
88 struct rc_map_table *rc_keys;
89 int rc_keys_size;
90};

--- 836 unchanged lines hidden (view full) ---

927static struct mt312_config zl313_config = {
928 .demod_address = 0x0e,
929};
930
931static struct ds3000_config dw2104_ds3000_config = {
932 .demod_address = 0x68,
933};
934
93#define err_str "did not find the firmware file. (%s) " \
94 "Please see linux/Documentation/dvb/ for more details " \
95 "on firmware-problems."
96
97struct rc_map_dvb_usb_table_table {
98 struct rc_map_table *rc_keys;
99 int rc_keys_size;
100};

--- 836 unchanged lines hidden (view full) ---

937static struct mt312_config zl313_config = {
938 .demod_address = 0x0e,
939};
940
941static struct ds3000_config dw2104_ds3000_config = {
942 .demod_address = 0x68,
943};
944
945static struct ts2020_config dw2104_ts2020_config = {
946 .tuner_address = 0x60,
947};
948
935static struct stv0900_config dw2104a_stv0900_config = {
936 .demod_address = 0x6a,
937 .demod_mode = 0,
938 .xtal = 27000000,
939 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
940 .diseqc_mode = 2,/* 2/3 PWM */
941 .tun1_maddress = 0,/* 0x60 */
942 .tun1_adc = 0,/* 2 Vpp */

--- 35 unchanged lines hidden (view full) ---

978 .set_lock_led = dw210x_led_ctrl,
979};
980
981static struct ds3000_config su3000_ds3000_config = {
982 .demod_address = 0x68,
983 .ci_mode = 1,
984};
985
949static struct stv0900_config dw2104a_stv0900_config = {
950 .demod_address = 0x6a,
951 .demod_mode = 0,
952 .xtal = 27000000,
953 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
954 .diseqc_mode = 2,/* 2/3 PWM */
955 .tun1_maddress = 0,/* 0x60 */
956 .tun1_adc = 0,/* 2 Vpp */

--- 35 unchanged lines hidden (view full) ---

992 .set_lock_led = dw210x_led_ctrl,
993};
994
995static struct ds3000_config su3000_ds3000_config = {
996 .demod_address = 0x68,
997 .ci_mode = 1,
998};
999
1000static struct ts2020_config su3000_ts2020_config = {
1001 .tuner_address = 0x60,
1002};
1003
986static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
987{
988 struct dvb_tuner_ops *tuner_ops = NULL;
989
990 if (demod_probe & 4) {
991 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104a_stv0900_config,
992 &d->dev->i2c_adap, 0);
993 if (d->fe_adap[0].fe != NULL) {

--- 34 unchanged lines hidden (view full) ---

1028 info("Attached cx24116!\n");
1029 return 0;
1030 }
1031 }
1032
1033 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1034 &d->dev->i2c_adap);
1035 if (d->fe_adap[0].fe != NULL) {
1004static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
1005{
1006 struct dvb_tuner_ops *tuner_ops = NULL;
1007
1008 if (demod_probe & 4) {
1009 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104a_stv0900_config,
1010 &d->dev->i2c_adap, 0);
1011 if (d->fe_adap[0].fe != NULL) {

--- 34 unchanged lines hidden (view full) ---

1046 info("Attached cx24116!\n");
1047 return 0;
1048 }
1049 }
1050
1051 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1052 &d->dev->i2c_adap);
1053 if (d->fe_adap[0].fe != NULL) {
1054 dvb_attach(ts2020_attach, d->fe_adap[0].fe,
1055 &dw2104_ts2020_config, &d->dev->i2c_adap);
1036 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
1037 info("Attached DS3000!\n");
1038 return 0;
1039 }
1040
1041 return -EIO;
1042}
1043

--- 96 unchanged lines hidden (view full) ---

1140 u8 obuf[] = {7, 1};
1141
1142 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1143 &d->dev->i2c_adap);
1144
1145 if (d->fe_adap[0].fe == NULL)
1146 return -EIO;
1147
1056 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
1057 info("Attached DS3000!\n");
1058 return 0;
1059 }
1060
1061 return -EIO;
1062}
1063

--- 96 unchanged lines hidden (view full) ---

1160 u8 obuf[] = {7, 1};
1161
1162 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1163 &d->dev->i2c_adap);
1164
1165 if (d->fe_adap[0].fe == NULL)
1166 return -EIO;
1167
1168 dvb_attach(ts2020_attach, d->fe_adap[0].fe, &dw2104_ts2020_config,
1169 &d->dev->i2c_adap);
1170
1148 st->old_set_voltage = d->fe_adap[0].fe->ops.set_voltage;
1149 d->fe_adap[0].fe->ops.set_voltage = s660_set_voltage;
1150
1151 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
1152
1153 info("Attached ds3000+ds2020!\n");
1154
1155 return 0;

--- 44 unchanged lines hidden (view full) ---

1200 if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0)
1201 err("command 0x51 transfer failed.");
1202
1203 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config,
1204 &d->dev->i2c_adap);
1205 if (d->fe_adap[0].fe == NULL)
1206 return -EIO;
1207
1171 st->old_set_voltage = d->fe_adap[0].fe->ops.set_voltage;
1172 d->fe_adap[0].fe->ops.set_voltage = s660_set_voltage;
1173
1174 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
1175
1176 info("Attached ds3000+ds2020!\n");
1177
1178 return 0;

--- 44 unchanged lines hidden (view full) ---

1223 if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0)
1224 err("command 0x51 transfer failed.");
1225
1226 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config,
1227 &d->dev->i2c_adap);
1228 if (d->fe_adap[0].fe == NULL)
1229 return -EIO;
1230
1231 dvb_attach(ts2020_attach, d->fe_adap[0].fe, &su3000_ts2020_config,
1232 &d->dev->i2c_adap);
1233
1208 info("Attached DS3000!\n");
1209
1210 return 0;
1211}
1212
1213static int dw2102_tuner_attach(struct dvb_usb_adapter *adap)
1214{
1215 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60,

--- 257 unchanged lines hidden (view full) ---

1473static int dw2102_load_firmware(struct usb_device *dev,
1474 const struct firmware *frmwr)
1475{
1476 u8 *b, *p;
1477 int ret = 0, i;
1478 u8 reset;
1479 u8 reset16[] = {0, 0, 0, 0, 0, 0, 0};
1480 const struct firmware *fw;
1234 info("Attached DS3000!\n");
1235
1236 return 0;
1237}
1238
1239static int dw2102_tuner_attach(struct dvb_usb_adapter *adap)
1240{
1241 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60,

--- 257 unchanged lines hidden (view full) ---

1499static int dw2102_load_firmware(struct usb_device *dev,
1500 const struct firmware *frmwr)
1501{
1502 u8 *b, *p;
1503 int ret = 0, i;
1504 u8 reset;
1505 u8 reset16[] = {0, 0, 0, 0, 0, 0, 0};
1506 const struct firmware *fw;
1481 const char *fw_2101 = "dvb-usb-dw2101.fw";
1482
1483 switch (dev->descriptor.idProduct) {
1484 case 0x2101:
1507
1508 switch (dev->descriptor.idProduct) {
1509 case 0x2101:
1485 ret = request_firmware(&fw, fw_2101, &dev->dev);
1510 ret = request_firmware(&fw, DW2101_FIRMWARE, &dev->dev);
1486 if (ret != 0) {
1511 if (ret != 0) {
1487 err(err_str, fw_2101);
1512 err(err_str, DW2101_FIRMWARE);
1488 return ret;
1489 }
1490 break;
1491 default:
1492 fw = frmwr;
1493 break;
1494 }
1495 info("start downloading DW210X firmware");

--- 85 unchanged lines hidden (view full) ---

1581 kfree(p);
1582 }
1583 return ret;
1584}
1585
1586static struct dvb_usb_device_properties dw2102_properties = {
1587 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1588 .usb_ctrl = DEVICE_SPECIFIC,
1513 return ret;
1514 }
1515 break;
1516 default:
1517 fw = frmwr;
1518 break;
1519 }
1520 info("start downloading DW210X firmware");

--- 85 unchanged lines hidden (view full) ---

1606 kfree(p);
1607 }
1608 return ret;
1609}
1610
1611static struct dvb_usb_device_properties dw2102_properties = {
1612 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1613 .usb_ctrl = DEVICE_SPECIFIC,
1589 .firmware = "dvb-usb-dw2102.fw",
1614 .firmware = DW2102_FIRMWARE,
1590 .no_reconnect = 1,
1591
1592 .i2c_algo = &dw2102_serit_i2c_algo,
1593
1594 .rc.legacy = {
1595 .rc_map_table = rc_map_dw210x_table,
1596 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1597 .rc_interval = 150,

--- 38 unchanged lines hidden (view full) ---

1636 {NULL},
1637 },
1638 }
1639};
1640
1641static struct dvb_usb_device_properties dw2104_properties = {
1642 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1643 .usb_ctrl = DEVICE_SPECIFIC,
1615 .no_reconnect = 1,
1616
1617 .i2c_algo = &dw2102_serit_i2c_algo,
1618
1619 .rc.legacy = {
1620 .rc_map_table = rc_map_dw210x_table,
1621 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1622 .rc_interval = 150,

--- 38 unchanged lines hidden (view full) ---

1661 {NULL},
1662 },
1663 }
1664};
1665
1666static struct dvb_usb_device_properties dw2104_properties = {
1667 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1668 .usb_ctrl = DEVICE_SPECIFIC,
1644 .firmware = "dvb-usb-dw2104.fw",
1669 .firmware = DW2104_FIRMWARE,
1645 .no_reconnect = 1,
1646
1647 .i2c_algo = &dw2104_i2c_algo,
1648 .rc.legacy = {
1649 .rc_map_table = rc_map_dw210x_table,
1650 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1651 .rc_interval = 150,
1652 .rc_query = dw2102_rc_query,

--- 33 unchanged lines hidden (view full) ---

1686 {NULL},
1687 },
1688 }
1689};
1690
1691static struct dvb_usb_device_properties dw3101_properties = {
1692 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1693 .usb_ctrl = DEVICE_SPECIFIC,
1670 .no_reconnect = 1,
1671
1672 .i2c_algo = &dw2104_i2c_algo,
1673 .rc.legacy = {
1674 .rc_map_table = rc_map_dw210x_table,
1675 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1676 .rc_interval = 150,
1677 .rc_query = dw2102_rc_query,

--- 33 unchanged lines hidden (view full) ---

1711 {NULL},
1712 },
1713 }
1714};
1715
1716static struct dvb_usb_device_properties dw3101_properties = {
1717 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1718 .usb_ctrl = DEVICE_SPECIFIC,
1694 .firmware = "dvb-usb-dw3101.fw",
1719 .firmware = DW3101_FIRMWARE,
1695 .no_reconnect = 1,
1696
1697 .i2c_algo = &dw3101_i2c_algo,
1698 .rc.legacy = {
1699 .rc_map_table = rc_map_dw210x_table,
1700 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1701 .rc_interval = 150,
1702 .rc_query = dw2102_rc_query,

--- 31 unchanged lines hidden (view full) ---

1734 },
1735 }
1736};
1737
1738static struct dvb_usb_device_properties s6x0_properties = {
1739 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1740 .usb_ctrl = DEVICE_SPECIFIC,
1741 .size_of_priv = sizeof(struct s6x0_state),
1720 .no_reconnect = 1,
1721
1722 .i2c_algo = &dw3101_i2c_algo,
1723 .rc.legacy = {
1724 .rc_map_table = rc_map_dw210x_table,
1725 .rc_map_size = ARRAY_SIZE(rc_map_dw210x_table),
1726 .rc_interval = 150,
1727 .rc_query = dw2102_rc_query,

--- 31 unchanged lines hidden (view full) ---

1759 },
1760 }
1761};
1762
1763static struct dvb_usb_device_properties s6x0_properties = {
1764 .caps = DVB_USB_IS_AN_I2C_ADAPTER,
1765 .usb_ctrl = DEVICE_SPECIFIC,
1766 .size_of_priv = sizeof(struct s6x0_state),
1742 .firmware = "dvb-usb-s630.fw",
1767 .firmware = S630_FIRMWARE,
1743 .no_reconnect = 1,
1744
1745 .i2c_algo = &s6x0_i2c_algo,
1746 .rc.legacy = {
1747 .rc_map_table = rc_map_tevii_table,
1748 .rc_map_size = ARRAY_SIZE(rc_map_tevii_table),
1749 .rc_interval = 150,
1750 .rc_query = dw2102_rc_query,

--- 123 unchanged lines hidden (view full) ---

1874 const struct usb_device_id *id)
1875{
1876 p1100 = kmemdup(&s6x0_properties,
1877 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1878 if (!p1100)
1879 return -ENOMEM;
1880 /* copy default structure */
1881 /* fill only different fields */
1768 .no_reconnect = 1,
1769
1770 .i2c_algo = &s6x0_i2c_algo,
1771 .rc.legacy = {
1772 .rc_map_table = rc_map_tevii_table,
1773 .rc_map_size = ARRAY_SIZE(rc_map_tevii_table),
1774 .rc_interval = 150,
1775 .rc_query = dw2102_rc_query,

--- 123 unchanged lines hidden (view full) ---

1899 const struct usb_device_id *id)
1900{
1901 p1100 = kmemdup(&s6x0_properties,
1902 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1903 if (!p1100)
1904 return -ENOMEM;
1905 /* copy default structure */
1906 /* fill only different fields */
1882 p1100->firmware = "dvb-usb-p1100.fw";
1907 p1100->firmware = P1100_FIRMWARE;
1883 p1100->devices[0] = d1100;
1884 p1100->rc.legacy.rc_map_table = rc_map_tbs_table;
1885 p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
1886 p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach;
1887
1888 s660 = kmemdup(&s6x0_properties,
1889 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1890 if (!s660) {
1891 kfree(p1100);
1892 return -ENOMEM;
1893 }
1908 p1100->devices[0] = d1100;
1909 p1100->rc.legacy.rc_map_table = rc_map_tbs_table;
1910 p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
1911 p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach;
1912
1913 s660 = kmemdup(&s6x0_properties,
1914 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1915 if (!s660) {
1916 kfree(p1100);
1917 return -ENOMEM;
1918 }
1894 s660->firmware = "dvb-usb-s660.fw";
1919 s660->firmware = S660_FIRMWARE;
1895 s660->num_device_descs = 3;
1896 s660->devices[0] = d660;
1897 s660->devices[1] = d480_1;
1898 s660->devices[2] = d480_2;
1899 s660->adapter->fe[0].frontend_attach = ds3000_frontend_attach;
1900
1901 p7500 = kmemdup(&s6x0_properties,
1902 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1903 if (!p7500) {
1904 kfree(p1100);
1905 kfree(s660);
1906 return -ENOMEM;
1907 }
1920 s660->num_device_descs = 3;
1921 s660->devices[0] = d660;
1922 s660->devices[1] = d480_1;
1923 s660->devices[2] = d480_2;
1924 s660->adapter->fe[0].frontend_attach = ds3000_frontend_attach;
1925
1926 p7500 = kmemdup(&s6x0_properties,
1927 sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
1928 if (!p7500) {
1929 kfree(p1100);
1930 kfree(s660);
1931 return -ENOMEM;
1932 }
1908 p7500->firmware = "dvb-usb-p7500.fw";
1933 p7500->firmware = P7500_FIRMWARE;
1909 p7500->devices[0] = d7500;
1910 p7500->rc.legacy.rc_map_table = rc_map_tbs_table;
1911 p7500->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
1912 p7500->adapter->fe[0].frontend_attach = prof_7500_frontend_attach;
1913
1914 if (0 == dvb_usb_device_init(intf, &dw2102_properties,
1915 THIS_MODULE, NULL, adapter_nr) ||
1916 0 == dvb_usb_device_init(intf, &dw2104_properties,

--- 27 unchanged lines hidden (view full) ---

1944MODULE_AUTHOR("Igor M. Liplianin (c) liplianin@me.by");
1945MODULE_DESCRIPTION("Driver for DVBWorld DVB-S 2101, 2102, DVB-S2 2104,"
1946 " DVB-C 3101 USB2.0,"
1947 " TeVii S600, S630, S650, S660, S480,"
1948 " Prof 1100, 7500 USB2.0,"
1949 " Geniatech SU3000 devices");
1950MODULE_VERSION("0.1");
1951MODULE_LICENSE("GPL");
1934 p7500->devices[0] = d7500;
1935 p7500->rc.legacy.rc_map_table = rc_map_tbs_table;
1936 p7500->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
1937 p7500->adapter->fe[0].frontend_attach = prof_7500_frontend_attach;
1938
1939 if (0 == dvb_usb_device_init(intf, &dw2102_properties,
1940 THIS_MODULE, NULL, adapter_nr) ||
1941 0 == dvb_usb_device_init(intf, &dw2104_properties,

--- 27 unchanged lines hidden (view full) ---

1969MODULE_AUTHOR("Igor M. Liplianin (c) liplianin@me.by");
1970MODULE_DESCRIPTION("Driver for DVBWorld DVB-S 2101, 2102, DVB-S2 2104,"
1971 " DVB-C 3101 USB2.0,"
1972 " TeVii S600, S630, S650, S660, S480,"
1973 " Prof 1100, 7500 USB2.0,"
1974 " Geniatech SU3000 devices");
1975MODULE_VERSION("0.1");
1976MODULE_LICENSE("GPL");
1977MODULE_FIRMWARE(DW2101_FIRMWARE);
1978MODULE_FIRMWARE(DW2102_FIRMWARE);
1979MODULE_FIRMWARE(DW2104_FIRMWARE);
1980MODULE_FIRMWARE(DW3101_FIRMWARE);
1981MODULE_FIRMWARE(S630_FIRMWARE);
1982MODULE_FIRMWARE(S660_FIRMWARE);
1983MODULE_FIRMWARE(P1100_FIRMWARE);
1984MODULE_FIRMWARE(P7500_FIRMWARE);