2009-12-03 03:57:10 +03:00
/*
Mantis VP - 1034 driver
2009-12-15 15:13:49 +03:00
Copyright ( C ) Manu Abraham ( abraham . manu @ gmail . com )
2009-12-03 03: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 11:41:11 +03:00
# include <linux/signal.h>
# include <linux/sched.h>
# include <linux/interrupt.h>
2011-06-16 15:01:34 +04:00
# include <asm/io.h>
2009-12-04 11:41:11 +03:00
# include "dmxdev.h"
# include "dvbdev.h"
# include "dvb_demux.h"
# include "dvb_frontend.h"
# include "dvb_net.h"
# include "mb86a16.h"
2009-12-03 03:57:10 +03:00
# include "mantis_common.h"
2009-12-04 11:41:11 +03:00
# include "mantis_ioc.h"
2009-12-04 11:57:28 +03:00
# include "mantis_dvb.h"
2009-12-03 03:57:10 +03:00
# include "mantis_vp1034.h"
2009-12-04 11:41:11 +03:00
# include "mantis_reg.h"
2009-12-03 03:57:10 +03:00
2009-12-04 11:41:11 +03:00
struct mb86a16_config vp1034_mb86a16_config = {
2009-12-03 03:57:10 +03:00
. demod_address = 0x08 ,
. set_voltage = vp1034_set_voltage ,
} ;
2009-12-03 04:07:24 +03:00
# define MANTIS_MODEL_NAME "VP-1034"
# define MANTIS_DEV_TYPE "DVB-S / DSS"
2009-12-03 03:57:10 +03:00
int vp1034_set_voltage ( struct dvb_frontend * fe , fe_sec_voltage_t voltage )
{
struct mantis_pci * mantis = fe - > dvb - > priv ;
switch ( voltage ) {
case SEC_VOLTAGE_13 :
2009-12-04 11:41:11 +03:00
dprintk ( MANTIS_ERROR , 1 , " Polarization=[13V] " ) ;
2010-11-14 20:56:00 +03:00
mantis_gpio_set_bits ( mantis , 13 , 1 ) ;
mantis_gpio_set_bits ( mantis , 14 , 0 ) ;
2009-12-03 03:57:10 +03:00
break ;
case SEC_VOLTAGE_18 :
2009-12-04 11:41:11 +03:00
dprintk ( MANTIS_ERROR , 1 , " Polarization=[18V] " ) ;
2010-11-14 20:56:00 +03:00
mantis_gpio_set_bits ( mantis , 13 , 1 ) ;
mantis_gpio_set_bits ( mantis , 14 , 1 ) ;
2009-12-03 03:57:10 +03:00
break ;
case SEC_VOLTAGE_OFF :
2009-12-04 11:41:11 +03:00
dprintk ( MANTIS_ERROR , 1 , " Frontend (dummy) POWERDOWN " ) ;
2009-12-03 03:57:10 +03:00
break ;
default :
2009-12-15 14:47:21 +03:00
dprintk ( MANTIS_ERROR , 1 , " Invalid = (%d) " , ( u32 ) voltage ) ;
2009-12-03 03:57:10 +03:00
return - EINVAL ;
}
mmwrite ( 0x00 , MANTIS_GPIF_DOUT ) ;
return 0 ;
}
2009-12-04 11:41:11 +03:00
static int vp1034_frontend_init ( struct mantis_pci * mantis , struct dvb_frontend * fe )
{
struct i2c_adapter * adapter = & mantis - > adapter ;
2009-12-04 11:57:28 +03:00
int err = 0 ;
2009-12-04 11:41:11 +03:00
2009-12-04 11:57:28 +03:00
err = mantis_frontend_power ( mantis , POWER_ON ) ;
if ( err = = 0 ) {
mantis_frontend_soft_reset ( mantis ) ;
msleep ( 250 ) ;
dprintk ( MANTIS_ERROR , 1 , " Probing for MB86A16 (DVB-S/DSS) " ) ;
2010-11-14 20:24:36 +03:00
fe = dvb_attach ( mb86a16_attach , & vp1034_mb86a16_config , adapter ) ;
2009-12-04 11:57:28 +03:00
if ( fe ) {
dprintk ( MANTIS_ERROR , 1 ,
" found MB86A16 DVB-S/DSS frontend @0x%02x " ,
vp1034_mb86a16_config . demod_address ) ;
} else {
return - 1 ;
}
2009-12-04 11:41:11 +03:00
} else {
2009-12-04 11:57:28 +03:00
dprintk ( MANTIS_ERROR , 1 , " Frontend on <%s> POWER ON failed! <%d> " ,
adapter - > name ,
err ) ;
2009-12-04 11:41:11 +03:00
2009-12-04 11:57:28 +03:00
return - EIO ;
}
2009-12-04 11:41:11 +03:00
mantis - > fe = fe ;
dprintk ( MANTIS_ERROR , 1 , " Done! " ) ;
return 0 ;
}
struct mantis_hwconfig vp1034_config = {
. model_name = MANTIS_MODEL_NAME ,
. dev_type = MANTIS_DEV_TYPE ,
. ts_size = MANTIS_TS_204 ,
. baud_rate = MANTIS_BAUD_9600 ,
. parity = MANTIS_PARITY_NONE ,
. bytes = 0 ,
. frontend_init = vp1034_frontend_init ,
2009-12-04 11:57:28 +03:00
. power = GPIF_A12 ,
. reset = GPIF_A13 ,
2009-12-04 11:41:11 +03:00
} ;