2013-02-25 15:39:16 +04:00
/*
2015-04-17 03:36:00 +03:00
* Montage Technology M88DS3103 / M88RS6000 demodulator driver
2013-02-25 15:39:16 +04:00
*
* Copyright ( C ) 2013 Antti Palosaari < crope @ iki . fi >
*
* 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 .
*/
# ifndef M88DS3103_H
# define M88DS3103_H
# include <linux/dvb/frontend.h>
2015-04-17 02:04:55 +03:00
/*
* I2C address
* 0x68 ,
*/
2017-11-29 22:02:22 +03:00
/**
* enum m88ds3103_ts_mode - TS connection mode
* @ M88DS3103_TS_SERIAL : TS output pin D0 , normal
* @ M88DS3103_TS_SERIAL_D7 : TS output pin D7
* @ M88DS3103_TS_PARALLEL : TS Parallel mode
* @ M88DS3103_TS_CI : TS CI Mode
*/
enum m88ds3103_ts_mode {
M88DS3103_TS_SERIAL ,
M88DS3103_TS_SERIAL_D7 ,
M88DS3103_TS_PARALLEL ,
M88DS3103_TS_CI
} ;
/**
* enum m88ds3103_clock_out
* @ M88DS3103_CLOCK_OUT_DISABLED : Clock output is disabled
* @ M88DS3103_CLOCK_OUT_ENABLED : Clock output is enabled with crystal
* clock .
* @ M88DS3103_CLOCK_OUT_ENABLED_DIV2 : Clock output is enabled with half
* crystal clock .
*/
enum m88ds3103_clock_out {
M88DS3103_CLOCK_OUT_DISABLED ,
M88DS3103_CLOCK_OUT_ENABLED ,
M88DS3103_CLOCK_OUT_ENABLED_DIV2
} ;
2015-04-17 02:04:55 +03:00
/**
* struct m88ds3103_platform_data - Platform data for the m88ds3103 driver
* @ clk : Clock frequency .
* @ i2c_wr_max : Max bytes I2C adapter can write at once .
* @ ts_mode : TS mode .
* @ ts_clk : TS clock ( KHz ) .
* @ ts_clk_pol : TS clk polarity . 1 - active at falling edge ; 0 - active at rising
* edge .
* @ spec_inv : Input spectrum inversion .
* @ agc : AGC configuration .
* @ agc_inv : AGC polarity .
* @ clk_out : Clock output .
* @ envelope_mode : DiSEqC envelope mode .
* @ lnb_hv_pol : LNB H / V pin polarity . 0 : pin high set to VOLTAGE_18 , pin low to
* set VOLTAGE_13 . 1 : pin high set to VOLTAGE_13 , pin low to set VOLTAGE_18 .
* @ lnb_en_pol : LNB enable pin polarity . 0 : pin high to disable , pin low to
* enable . 1 : pin high to enable , pin low to disable .
* @ get_dvb_frontend : Get DVB frontend .
* @ get_i2c_adapter : Get I2C adapter .
*/
struct m88ds3103_platform_data {
u32 clk ;
u16 i2c_wr_max ;
2017-11-29 22:02:22 +03:00
enum m88ds3103_ts_mode ts_mode ;
2015-04-17 02:04:55 +03:00
u32 ts_clk ;
2017-11-29 22:02:22 +03:00
enum m88ds3103_clock_out clk_out ;
2015-04-17 02:04:55 +03:00
u8 ts_clk_pol : 1 ;
u8 spec_inv : 1 ;
u8 agc ;
u8 agc_inv : 1 ;
u8 envelope_mode : 1 ;
u8 lnb_hv_pol : 1 ;
u8 lnb_en_pol : 1 ;
struct dvb_frontend * ( * get_dvb_frontend ) ( struct i2c_client * ) ;
struct i2c_adapter * ( * get_i2c_adapter ) ( struct i2c_client * ) ;
/* private: For legacy media attach wrapper. Do not set value. */
u8 attach_in_use : 1 ;
} ;
2017-11-29 22:02:22 +03:00
/**
* struct m88ds3103_config - m88ds3102 configuration
*
* @ i2c_addr : I2C address . Default : none , must set . Example : 0x68 , . . .
* @ clock : Device ' s clock . Default : none , must set . Example : 27000000
* @ i2c_wr_max : Max bytes I2C provider is asked to write at once .
* Default : none , must set . Example : 33 , 65 , . . .
* @ ts_mode : TS output mode , as defined by & enum m88ds3103_ts_mode .
* Default : M88DS3103_TS_SERIAL .
* @ ts_clk : TS clk in KHz . Default : 0.
* @ ts_clk_pol : TS clk polarity . Default : 0.
* 1 - active at falling edge ; 0 - active at rising edge .
* @ spec_inv : Spectrum inversion . Default : 0.
* @ agc_inv : AGC polarity . Default : 0.
* @ clock_out : Clock output , as defined by & enum m88ds3103_clock_out .
* Default : M88DS3103_CLOCK_OUT_DISABLED .
* @ envelope_mode : DiSEqC envelope mode . Default : 0.
* @ agc : AGC configuration . Default : none , must set .
* @ lnb_hv_pol : LNB H / V pin polarity . Default : 0. Values :
* 1 : pin high set to VOLTAGE_13 , pin low to set VOLTAGE_18 ;
* 0 : pin high set to VOLTAGE_18 , pin low to set VOLTAGE_13 .
* @ lnb_en_pol : LNB enable pin polarity . Default : 0. Values :
* 1 : pin high to enable , pin low to disable ;
* 0 : pin high to disable , pin low to enable .
2015-04-17 02:04:55 +03:00
*/
2013-02-25 15:39:16 +04:00
struct m88ds3103_config {
u8 i2c_addr ;
u32 clock ;
u16 i2c_wr_max ;
u8 ts_mode ;
2014-08-11 08:22:45 +04:00
u32 ts_clk ;
u8 ts_clk_pol : 1 ;
2013-02-25 15:39:16 +04:00
u8 spec_inv : 1 ;
u8 agc_inv : 1 ;
u8 clock_out ;
u8 envelope_mode : 1 ;
u8 agc ;
2014-08-11 08:22:45 +04:00
u8 lnb_hv_pol : 1 ;
u8 lnb_en_pol : 1 ;
2013-02-25 15:39:16 +04:00
} ;
# if defined(CONFIG_DVB_M88DS3103) || \
( defined ( CONFIG_DVB_M88DS3103_MODULE ) & & defined ( MODULE ) )
2017-11-29 22:02:22 +03:00
/**
* Attach a m88ds3103 demod
*
* @ config : pointer to & struct m88ds3103_config with demod configuration .
* @ i2c : i2c adapter to use .
* @ tuner_i2c : on success , returns the I2C adapter associated with
* m88ds3103 tuner .
*
* return : FE pointer on success , NULL on failure .
* Note : Do not add new m88ds3103_attach ( ) users ! Use I2C bindings instead .
*/
2013-02-25 15:39:16 +04:00
extern struct dvb_frontend * m88ds3103_attach (
const struct m88ds3103_config * config ,
struct i2c_adapter * i2c ,
struct i2c_adapter * * tuner_i2c ) ;
2015-05-26 18:04:00 +03:00
extern int m88ds3103_get_agc_pwm ( struct dvb_frontend * fe , u8 * _agc_pwm ) ;
2013-02-25 15:39:16 +04:00
# else
static inline struct dvb_frontend * m88ds3103_attach (
const struct m88ds3103_config * config ,
struct i2c_adapter * i2c ,
struct i2c_adapter * * tuner_i2c )
{
pr_warn ( " %s: driver disabled by Kconfig \n " , __func__ ) ;
return NULL ;
}
2015-05-26 18:04:00 +03:00
# define m88ds3103_get_agc_pwm NULL
2013-02-25 15:39:16 +04:00
# endif
# endif