2019-05-31 01:09:32 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2005-07-07 17:58:23 -07:00
/* DVB USB library compliant Linux driver for the WideView/ Yakumo/ Hama/
2007-07-21 15:37:35 -03:00
* Typhoon / Yuan / Miglia DVB - T USB2 .0 receiver .
2005-06-23 22:02:35 -07:00
*
2016-01-24 12:56:58 -02:00
* Copyright ( C ) 2004 - 5 Patrick Boettcher ( patrick . boettcher @ posteo . de )
2005-06-23 22:02:35 -07:00
*
2005-07-07 17:58:33 -07:00
* Thanks to Steve Chang from WideView for providing support for the WT - 220U .
*
2020-03-04 15:54:10 +01:00
* see Documentation / driver - api / media / drivers / dvb - usb . rst for more information
2005-06-23 22:02:35 -07:00
*/
# include "dtt200u.h"
/* debug */
int dvb_usb_dtt200u_debug ;
module_param_named ( debug , dvb_usb_dtt200u_debug , int , 0644 ) ;
MODULE_PARM_DESC ( debug , " set debugging level (1=info,xfer=2 (or-able)). " DVB_USB_DEBUG_STATUS ) ;
2008-04-09 19:13:13 -03:00
DVB_DEFINE_MOD_OPT_ADAPTER_NR ( adapter_nr ) ;
2016-10-07 08:40:43 -03:00
struct dtt200u_state {
unsigned char data [ 80 ] ;
} ;
2005-07-07 17:58:33 -07:00
static int dtt200u_power_ctrl ( struct dvb_usb_device * d , int onoff )
{
2016-10-07 08:40:43 -03:00
struct dtt200u_state * st = d - > priv ;
2016-10-07 13:37:50 -03:00
int ret = 0 ;
2016-10-07 08:40:43 -03:00
2016-11-12 12:46:26 -02:00
mutex_lock ( & d - > data_mutex ) ;
2016-10-07 08:40:43 -03:00
st - > data [ 0 ] = SET_INIT ;
2005-07-07 17:58:33 -07:00
if ( onoff )
2016-10-07 13:37:50 -03:00
ret = dvb_usb_generic_write ( d , st - > data , 2 ) ;
2005-07-07 17:58:33 -07:00
2016-11-12 12:46:26 -02:00
mutex_unlock ( & d - > data_mutex ) ;
2016-10-07 13:37:50 -03:00
return ret ;
2005-07-07 17:58:33 -07:00
}
2006-09-30 06:53:48 -03:00
static int dtt200u_streaming_ctrl ( struct dvb_usb_adapter * adap , int onoff )
2005-06-23 22:02:35 -07:00
{
2016-11-12 12:46:26 -02:00
struct dvb_usb_device * d = adap - > dev ;
struct dtt200u_state * st = d - > priv ;
2016-10-07 13:37:50 -03:00
int ret ;
2016-10-07 08:40:43 -03:00
2016-11-12 12:46:26 -02:00
mutex_lock ( & d - > data_mutex ) ;
2016-10-07 08:40:43 -03:00
st - > data [ 0 ] = SET_STREAMING ;
st - > data [ 1 ] = onoff ;
2005-06-23 22:02:35 -07:00
2016-10-07 13:37:50 -03:00
ret = dvb_usb_generic_write ( adap - > dev , st - > data , 2 ) ;
if ( ret < 0 )
goto ret ;
2016-10-07 08:40:43 -03:00
if ( onoff )
2016-10-07 13:37:50 -03:00
goto ret ;
2016-10-07 08:40:43 -03:00
st - > data [ 0 ] = RESET_PID_FILTER ;
2016-10-07 13:37:50 -03:00
ret = dvb_usb_generic_write ( adap - > dev , st - > data , 1 ) ;
2016-10-07 08:40:43 -03:00
2016-10-07 13:37:50 -03:00
ret :
2016-11-12 12:46:26 -02:00
mutex_unlock ( & d - > data_mutex ) ;
2005-06-23 22:02:35 -07:00
2016-10-07 13:37:50 -03:00
return ret ;
2005-06-23 22:02:35 -07:00
}
2006-09-30 06:53:48 -03:00
static int dtt200u_pid_filter ( struct dvb_usb_adapter * adap , int index , u16 pid , int onoff )
2005-06-23 22:02:35 -07:00
{
2016-11-12 12:46:26 -02:00
struct dvb_usb_device * d = adap - > dev ;
struct dtt200u_state * st = d - > priv ;
2016-10-07 08:40:43 -03:00
int ret ;
2005-06-23 22:02:35 -07:00
pid = onoff ? pid : 0 ;
2016-11-12 12:46:26 -02:00
mutex_lock ( & d - > data_mutex ) ;
2016-10-07 08:40:43 -03:00
st - > data [ 0 ] = SET_PID_FILTER ;
st - > data [ 1 ] = index ;
st - > data [ 2 ] = pid & 0xff ;
st - > data [ 3 ] = ( pid > > 8 ) & 0x1f ;
2005-06-23 22:02:35 -07:00
2016-10-07 08:40:43 -03:00
ret = dvb_usb_generic_write ( adap - > dev , st - > data , 4 ) ;
2016-11-12 12:46:26 -02:00
mutex_unlock ( & d - > data_mutex ) ;
2016-10-07 08:40:43 -03:00
return ret ;
2005-06-23 22:02:35 -07:00
}
2016-05-20 12:08:35 -03:00
static int dtt200u_rc_query ( struct dvb_usb_device * d )
2005-06-23 22:02:35 -07:00
{
2016-10-07 08:40:43 -03:00
struct dtt200u_state * st = d - > priv ;
2016-05-20 12:08:35 -03:00
u32 scancode ;
2016-10-07 13:37:50 -03:00
int ret ;
2016-05-20 12:08:35 -03:00
2016-11-12 12:46:26 -02:00
mutex_lock ( & d - > data_mutex ) ;
2016-10-07 08:40:43 -03:00
st - > data [ 0 ] = GET_RC_CODE ;
2016-10-07 13:37:50 -03:00
ret = dvb_usb_generic_rw ( d , st - > data , 1 , st - > data , 5 , 0 ) ;
if ( ret < 0 )
goto ret ;
2016-10-07 08:40:43 -03:00
if ( st - > data [ 0 ] = = 1 ) {
2017-08-07 16:20:58 -04:00
enum rc_proto proto = RC_PROTO_NEC ;
2016-09-21 06:54:19 -03:00
2016-10-07 08:40:43 -03:00
scancode = st - > data [ 1 ] ;
if ( ( u8 ) ~ st - > data [ 1 ] ! = st - > data [ 2 ] ) {
2016-05-20 12:08:35 -03:00
/* Extended NEC */
scancode = scancode < < 8 ;
2016-10-07 08:40:43 -03:00
scancode | = st - > data [ 2 ] ;
2017-08-07 16:20:58 -04:00
proto = RC_PROTO_NECX ;
2016-05-20 12:08:35 -03:00
}
scancode = scancode < < 8 ;
2016-10-07 08:40:43 -03:00
scancode | = st - > data [ 3 ] ;
2016-05-20 12:08:35 -03:00
/* Check command checksum is ok */
2016-10-07 08:40:43 -03:00
if ( ( u8 ) ~ st - > data [ 3 ] = = st - > data [ 4 ] )
2016-09-21 06:54:19 -03:00
rc_keydown ( d - > rc_dev , proto , scancode , 0 ) ;
2016-05-20 12:08:35 -03:00
else
rc_keyup ( d - > rc_dev ) ;
2016-10-07 08:40:43 -03:00
} else if ( st - > data [ 0 ] = = 2 ) {
2016-05-20 12:08:35 -03:00
rc_repeat ( d - > rc_dev ) ;
} else {
rc_keyup ( d - > rc_dev ) ;
}
2016-10-07 08:40:43 -03:00
if ( st - > data [ 0 ] ! = 0 )
deb_info ( " st->data: %*ph \n " , 5 , st - > data ) ;
2016-05-20 12:08:35 -03:00
2016-10-07 13:37:50 -03:00
ret :
2016-11-12 12:46:26 -02:00
mutex_unlock ( & d - > data_mutex ) ;
2016-10-07 13:37:50 -03:00
return ret ;
2005-06-23 22:02:35 -07:00
}
2006-09-30 06:53:48 -03:00
static int dtt200u_frontend_attach ( struct dvb_usb_adapter * adap )
2005-06-23 22:02:35 -07:00
{
2011-09-06 09:31:57 -03:00
adap - > fe_adap [ 0 ] . fe = dtt200u_fe_attach ( adap - > dev ) ;
2005-06-23 22:02:35 -07:00
return 0 ;
}
2006-09-30 06:53:48 -03:00
static struct dvb_usb_device_properties dtt200u_properties ;
static struct dvb_usb_device_properties wt220u_fc_properties ;
static struct dvb_usb_device_properties wt220u_properties ;
static struct dvb_usb_device_properties wt220u_zl0353_properties ;
2007-07-21 15:37:35 -03:00
static struct dvb_usb_device_properties wt220u_miglia_properties ;
2005-06-23 22:02:35 -07:00
static int dtt200u_usb_probe ( struct usb_interface * intf ,
const struct usb_device_id * id )
{
2008-04-09 19:13:13 -03:00
if ( 0 = = dvb_usb_device_init ( intf , & dtt200u_properties ,
2016-11-12 12:46:26 -02:00
THIS_MODULE , NULL , adapter_nr ) | |
2008-04-09 19:13:13 -03:00
0 = = dvb_usb_device_init ( intf , & wt220u_properties ,
2016-11-12 12:46:26 -02:00
THIS_MODULE , NULL , adapter_nr ) | |
2008-04-09 19:13:13 -03:00
0 = = dvb_usb_device_init ( intf , & wt220u_fc_properties ,
2016-11-12 12:46:26 -02:00
THIS_MODULE , NULL , adapter_nr ) | |
2008-04-09 19:13:13 -03:00
0 = = dvb_usb_device_init ( intf , & wt220u_zl0353_properties ,
2016-11-12 12:46:26 -02:00
THIS_MODULE , NULL , adapter_nr ) | |
2008-04-09 19:13:13 -03:00
0 = = dvb_usb_device_init ( intf , & wt220u_miglia_properties ,
2016-11-12 12:46:26 -02:00
THIS_MODULE , NULL , adapter_nr ) )
2005-07-07 17:58:33 -07:00
return 0 ;
return - ENODEV ;
2005-06-23 22:02:35 -07:00
}
2022-03-28 22:41:23 +02:00
enum {
WIDEVIEW_DTT200U_COLD ,
WIDEVIEW_DTT200U_WARM ,
WIDEVIEW_WT220U_COLD ,
WIDEVIEW_WT220U_WARM ,
WIDEVIEW_WT220U_ZL0353_COLD ,
WIDEVIEW_WT220U_ZL0353_WARM ,
WIDEVIEW_WT220U_FC_COLD ,
WIDEVIEW_WT220U_FC_WARM ,
WIDEVIEW_WT220U_ZAP250_COLD ,
MIGLIA_WT220U_ZAP250_COLD ,
2005-06-23 22:02:35 -07:00
} ;
2022-03-28 22:41:23 +02:00
static struct usb_device_id dtt200u_usb_table [ ] = {
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_DTT200U_COLD ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_DTT200U_WARM ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_COLD ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_WARM ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_ZL0353_COLD ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_ZL0353_WARM ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_FC_COLD ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_FC_WARM ) ,
DVB_USB_DEV ( WIDEVIEW , WIDEVIEW_WT220U_ZAP250_COLD ) ,
DVB_USB_DEV ( MIGLIA , MIGLIA_WT220U_ZAP250_COLD ) ,
{ }
} ;
2005-06-23 22:02:35 -07:00
MODULE_DEVICE_TABLE ( usb , dtt200u_usb_table ) ;
2006-09-30 06:53:48 -03:00
static struct dvb_usb_device_properties dtt200u_properties = {
2005-06-23 22:02:35 -07:00
. usb_ctrl = CYPRESS_FX2 ,
. firmware = " dvb-usb-dtt200u-01.fw " ,
2016-10-07 08:40:43 -03:00
. size_of_priv = sizeof ( struct dtt200u_state ) ,
2006-09-30 06:53:48 -03:00
. num_adapters = 1 ,
. adapter = {
{
2011-09-06 09:31:57 -03:00
. num_frontends = 1 ,
. fe = { {
2006-09-30 06:53:48 -03:00
. caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING ,
. pid_filter_count = 15 ,
2005-06-23 22:02:35 -07:00
. streaming_ctrl = dtt200u_streaming_ctrl ,
. pid_filter = dtt200u_pid_filter ,
. frontend_attach = dtt200u_frontend_attach ,
/* parameter for the MPEG2-data transfer */
2006-09-30 06:53:48 -03:00
. stream = {
. type = USB_BULK ,
2005-06-23 22:02:35 -07:00
. count = 7 ,
. endpoint = 0x02 ,
. u = {
. bulk = {
. buffersize = 4096 ,
}
}
} ,
2011-09-06 09:31:57 -03:00
} } ,
2006-09-30 06:53:48 -03:00
}
} ,
. power_ctrl = dtt200u_power_ctrl ,
2016-05-20 12:08:35 -03:00
. rc . core = {
2010-07-31 18:04:09 -03:00
. rc_interval = 300 ,
2016-05-20 12:08:35 -03:00
. rc_codes = RC_MAP_DTT200U ,
2010-07-31 18:04:09 -03:00
. rc_query = dtt200u_rc_query ,
2017-08-07 16:20:58 -04:00
. allowed_protos = RC_PROTO_BIT_NEC ,
2010-07-31 18:04:09 -03:00
} ,
2006-09-30 06:53:48 -03:00
. generic_bulk_ctrl_endpoint = 0x01 ,
2005-06-23 22:02:35 -07:00
. num_device_descs = 1 ,
. devices = {
2005-07-07 17:58:33 -07:00
{ . name = " WideView/Yuan/Yakumo/Hama/Typhoon DVB-T USB2.0 (WT-200U) " ,
2022-03-28 22:41:23 +02:00
. cold_ids = { & dtt200u_usb_table [ WIDEVIEW_DTT200U_COLD ] , NULL } ,
. warm_ids = { & dtt200u_usb_table [ WIDEVIEW_DTT200U_WARM ] , NULL } ,
2005-06-23 22:02:35 -07:00
} ,
2006-02-01 06:02:50 -05:00
{ NULL } ,
2005-06-23 22:02:35 -07:00
}
} ;
2006-09-30 06:53:48 -03:00
static struct dvb_usb_device_properties wt220u_properties = {
2005-07-07 17:58:33 -07:00
. usb_ctrl = CYPRESS_FX2 ,
2006-01-09 15:25:45 -02:00
. firmware = " dvb-usb-wt220u-02.fw " ,
2005-07-07 17:58:33 -07:00
2016-10-07 08:40:43 -03:00
. size_of_priv = sizeof ( struct dtt200u_state ) ,
2006-09-30 06:53:48 -03:00
. num_adapters = 1 ,
. adapter = {
{
2011-09-06 09:31:57 -03:00
. num_frontends = 1 ,
. fe = { {
2006-09-30 06:53:48 -03:00
. caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING ,
. pid_filter_count = 15 ,
2005-07-07 17:58:33 -07:00
. streaming_ctrl = dtt200u_streaming_ctrl ,
. pid_filter = dtt200u_pid_filter ,
. frontend_attach = dtt200u_frontend_attach ,
/* parameter for the MPEG2-data transfer */
2006-09-30 06:53:48 -03:00
. stream = {
. type = USB_BULK ,
2005-07-07 17:58:33 -07:00
. count = 7 ,
. endpoint = 0x02 ,
. u = {
. bulk = {
. buffersize = 4096 ,
}
}
} ,
2011-09-06 09:31:57 -03:00
} } ,
2006-09-30 06:53:48 -03:00
}
} ,
. power_ctrl = dtt200u_power_ctrl ,
2016-05-20 12:08:35 -03:00
. rc . core = {
2010-07-31 18:04:09 -03:00
. rc_interval = 300 ,
2016-05-20 12:08:35 -03:00
. rc_codes = RC_MAP_DTT200U ,
2010-07-31 18:04:09 -03:00
. rc_query = dtt200u_rc_query ,
2017-08-07 16:20:58 -04:00
. allowed_protos = RC_PROTO_BIT_NEC ,
2010-07-31 18:04:09 -03:00
} ,
2006-09-30 06:53:48 -03:00
. generic_bulk_ctrl_endpoint = 0x01 ,
2005-07-07 17:58:33 -07:00
. num_device_descs = 1 ,
. devices = {
2005-09-09 13:02:46 -07:00
{ . name = " WideView WT-220U PenType Receiver (Typhoon/Freecom) " ,
2022-03-28 22:41:23 +02:00
. cold_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_COLD ] , & dtt200u_usb_table [ WIDEVIEW_WT220U_ZAP250_COLD ] , NULL } ,
. warm_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_WARM ] , NULL } ,
2005-07-07 17:58:33 -07:00
} ,
2006-02-01 06:02:50 -05:00
{ NULL } ,
2005-07-07 17:58:33 -07:00
}
} ;
2006-09-30 06:53:48 -03:00
static struct dvb_usb_device_properties wt220u_fc_properties = {
2006-07-16 15:03:17 -03:00
. usb_ctrl = CYPRESS_FX2 ,
. firmware = " dvb-usb-wt220u-fc03.fw " ,
2016-10-07 08:40:43 -03:00
. size_of_priv = sizeof ( struct dtt200u_state ) ,
2006-09-30 06:53:48 -03:00
. num_adapters = 1 ,
. adapter = {
{
2011-09-06 09:31:57 -03:00
. num_frontends = 1 ,
. fe = { {
2006-09-30 06:53:48 -03:00
. caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING ,
. pid_filter_count = 15 ,
2006-07-16 15:03:17 -03:00
. streaming_ctrl = dtt200u_streaming_ctrl ,
. pid_filter = dtt200u_pid_filter ,
. frontend_attach = dtt200u_frontend_attach ,
/* parameter for the MPEG2-data transfer */
2006-09-30 06:53:48 -03:00
. stream = {
. type = USB_BULK ,
2006-07-16 15:03:17 -03:00
. count = 7 ,
2006-09-30 06:53:48 -03:00
. endpoint = 0x06 ,
2006-07-16 15:03:17 -03:00
. u = {
. bulk = {
. buffersize = 4096 ,
}
}
} ,
2011-09-06 09:31:57 -03:00
} } ,
2006-09-30 06:53:48 -03:00
}
} ,
. power_ctrl = dtt200u_power_ctrl ,
2016-05-20 12:08:35 -03:00
. rc . core = {
2010-07-31 18:04:09 -03:00
. rc_interval = 300 ,
2016-05-20 12:08:35 -03:00
. rc_codes = RC_MAP_DTT200U ,
2010-07-31 18:04:09 -03:00
. rc_query = dtt200u_rc_query ,
2017-08-07 16:20:58 -04:00
. allowed_protos = RC_PROTO_BIT_NEC ,
2010-07-31 18:04:09 -03:00
} ,
2006-09-30 06:53:48 -03:00
. generic_bulk_ctrl_endpoint = 0x01 ,
2006-07-16 15:03:17 -03:00
. num_device_descs = 1 ,
. devices = {
{ . name = " WideView WT-220U PenType Receiver (Typhoon/Freecom) " ,
2022-03-28 22:41:23 +02:00
. cold_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_FC_COLD ] , NULL } ,
. warm_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_FC_WARM ] , NULL } ,
2006-07-16 15:03:17 -03:00
} ,
{ NULL } ,
}
} ;
2006-09-30 06:53:48 -03:00
static struct dvb_usb_device_properties wt220u_zl0353_properties = {
2006-03-28 16:15:05 -03:00
. usb_ctrl = CYPRESS_FX2 ,
. firmware = " dvb-usb-wt220u-zl0353-01.fw " ,
2016-10-07 08:40:43 -03:00
. size_of_priv = sizeof ( struct dtt200u_state ) ,
2006-09-30 06:53:48 -03:00
. num_adapters = 1 ,
. adapter = {
{
2011-09-06 09:31:57 -03:00
. num_frontends = 1 ,
. fe = { {
2006-09-30 06:53:48 -03:00
. caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING ,
. pid_filter_count = 15 ,
2006-10-13 11:34:46 -03:00
. streaming_ctrl = dtt200u_streaming_ctrl ,
. pid_filter = dtt200u_pid_filter ,
. frontend_attach = dtt200u_frontend_attach ,
/* parameter for the MPEG2-data transfer */
2006-09-30 06:53:48 -03:00
. stream = {
. type = USB_BULK ,
2006-10-13 11:34:46 -03:00
. count = 7 ,
. endpoint = 0x02 ,
. u = {
. bulk = {
. buffersize = 4096 ,
}
}
} ,
2011-09-06 09:31:57 -03:00
} } ,
2006-09-30 06:53:48 -03:00
}
} ,
. power_ctrl = dtt200u_power_ctrl ,
2016-05-20 12:08:35 -03:00
. rc . core = {
2010-07-31 18:04:09 -03:00
. rc_interval = 300 ,
2016-05-20 12:08:35 -03:00
. rc_codes = RC_MAP_DTT200U ,
2010-07-31 18:04:09 -03:00
. rc_query = dtt200u_rc_query ,
2017-08-07 16:20:58 -04:00
. allowed_protos = RC_PROTO_BIT_NEC ,
2010-07-31 18:04:09 -03:00
} ,
2006-09-30 06:53:48 -03:00
. generic_bulk_ctrl_endpoint = 0x01 ,
2006-03-28 16:15:05 -03:00
. num_device_descs = 1 ,
. devices = {
{ . name = " WideView WT-220U PenType Receiver (based on ZL353) " ,
2022-03-28 22:41:23 +02:00
. cold_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_ZL0353_COLD ] , NULL } ,
. warm_ids = { & dtt200u_usb_table [ WIDEVIEW_WT220U_ZL0353_WARM ] , NULL } ,
2006-03-28 16:15:05 -03:00
} ,
{ NULL } ,
}
} ;
2007-07-21 15:37:35 -03:00
static struct dvb_usb_device_properties wt220u_miglia_properties = {
. usb_ctrl = CYPRESS_FX2 ,
. firmware = " dvb-usb-wt220u-miglia-01.fw " ,
2016-10-07 08:40:43 -03:00
. size_of_priv = sizeof ( struct dtt200u_state ) ,
2007-07-21 15:37:35 -03:00
. num_adapters = 1 ,
. generic_bulk_ctrl_endpoint = 0x01 ,
. num_device_descs = 1 ,
. devices = {
{ . name = " WideView WT-220U PenType Receiver (Miglia) " ,
2022-03-28 22:41:23 +02:00
. cold_ids = { & dtt200u_usb_table [ MIGLIA_WT220U_ZAP250_COLD ] , NULL } ,
2007-07-21 15:37:35 -03:00
/* This device turns into WT220U_ZL0353_WARM when fw
has been uploaded */
. warm_ids = { NULL } ,
} ,
{ NULL } ,
}
} ;
2005-06-23 22:02:35 -07:00
/* usb specific object needed to register this driver with the usb subsystem */
static struct usb_driver dtt200u_usb_driver = {
2005-07-07 17:58:33 -07:00
. name = " dvb_usb_dtt200u " ,
2005-09-09 13:02:46 -07:00
. probe = dtt200u_usb_probe ,
2005-06-23 22:02:35 -07:00
. disconnect = dvb_usb_device_exit ,
2005-09-09 13:02:46 -07:00
. id_table = dtt200u_usb_table ,
2005-06-23 22:02:35 -07:00
} ;
2011-11-18 09:46:12 -08:00
module_usb_driver ( dtt200u_usb_driver ) ;
2005-06-23 22:02:35 -07:00
2016-01-24 12:56:58 -02:00
MODULE_AUTHOR ( " Patrick Boettcher <patrick.boettcher@posteo.de> " ) ;
2007-07-21 15:37:35 -03:00
MODULE_DESCRIPTION ( " Driver for the WideView/Yakumo/Hama/Typhoon/Club3D/Miglia DVB-T USB2.0 devices " ) ;
2005-06-23 22:02:35 -07:00
MODULE_VERSION ( " 1.0 " ) ;
MODULE_LICENSE ( " GPL " ) ;