2009-12-02 21:57:10 -03:00
/*
Mantis VP - 3030 driver
2009-12-15 09:13:49 -03:00
Copyright ( C ) Manu Abraham ( abraham . manu @ gmail . com )
2009-12-02 21:57:10 -03:00
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 . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
2009-12-04 05:41:11 -03:00
# include <linux/signal.h>
# include <linux/sched.h>
# include <linux/interrupt.h>
# include "dmxdev.h"
# include "dvbdev.h"
# include "dvb_demux.h"
# include "dvb_frontend.h"
# include "dvb_net.h"
# include "zl10353.h"
2009-12-04 05:56:35 -03:00
# include "tda665x.h"
2009-12-02 21:57:10 -03:00
# include "mantis_common.h"
2009-12-04 05:56:35 -03:00
# include "mantis_ioc.h"
# include "mantis_dvb.h"
2009-12-02 21:57:10 -03:00
# include "mantis_vp3030.h"
struct zl10353_config mantis_vp3030_config = {
2009-12-04 05:56:35 -03:00
. demod_address = 0x0f ,
} ;
struct tda665x_config env57h12d5_config = {
. name = " ENV57H12D5 (ET-50DT) " ,
. addr = 0x60 ,
. frequency_min = 47000000 ,
. frequency_max = 862000000 ,
. frequency_offst = 3616667 ,
. ref_multiplier = 6 , /* 1/6 MHz */
. ref_divider = 100000 , /* 1/6 MHz */
2009-12-02 22:07:24 -03:00
} ;
# define MANTIS_MODEL_NAME "VP-3030"
# define MANTIS_DEV_TYPE "DVB-T"
2009-12-04 05:41:11 -03:00
static int vp3030_frontend_init ( struct mantis_pci * mantis , struct dvb_frontend * fe )
{
struct i2c_adapter * adapter = & mantis - > adapter ;
2009-12-04 05:56:35 -03:00
struct mantis_hwconfig * config = mantis - > hwconfig ;
int err = 0 ;
2010-11-14 14:56:00 -03:00
mantis_gpio_set_bits ( mantis , config - > reset , 0 ) ;
2009-12-04 05:56:35 -03:00
msleep ( 100 ) ;
err = mantis_frontend_power ( mantis , POWER_ON ) ;
msleep ( 100 ) ;
2010-11-14 14:56:00 -03:00
mantis_gpio_set_bits ( mantis , config - > reset , 1 ) ;
2009-12-04 05:41:11 -03:00
2009-12-04 05:57:28 -03:00
if ( err = = 0 ) {
msleep ( 250 ) ;
dprintk ( MANTIS_ERROR , 1 , " Probing for 10353 (DVB-T) " ) ;
2010-11-14 14:24:36 -03:00
fe = dvb_attach ( zl10353_attach , & mantis_vp3030_config , adapter ) ;
2009-12-04 05:41:11 -03:00
2009-12-04 05:57:28 -03:00
if ( ! fe )
return - 1 ;
2009-12-04 05:41:11 -03:00
2010-11-14 14:24:36 -03:00
dvb_attach ( tda665x_attach , fe , & env57h12d5_config , adapter ) ;
2009-12-04 05:57:28 -03:00
} else {
dprintk ( MANTIS_ERROR , 1 , " Frontend on <%s> POWER ON failed! <%d> " ,
adapter - > name ,
err ) ;
return - EIO ;
}
2009-12-04 05:41:11 -03:00
mantis - > fe = fe ;
dprintk ( MANTIS_ERROR , 1 , " Done! " ) ;
return 0 ;
}
struct mantis_hwconfig vp3030_config = {
. model_name = MANTIS_MODEL_NAME ,
. dev_type = MANTIS_DEV_TYPE ,
. ts_size = MANTIS_TS_188 ,
. baud_rate = MANTIS_BAUD_9600 ,
. parity = MANTIS_PARITY_NONE ,
. bytes = 0 ,
. frontend_init = vp3030_frontend_init ,
2009-12-04 05:56:35 -03:00
. power = GPIF_A12 ,
. reset = GPIF_A13 ,
2009-12-04 05:57:28 -03:00
. i2c_mode = MANTIS_BYTE_MODE
2009-12-04 05:41:11 -03:00
} ;