1 /* 2 * Montage Technology M88DS3103/M88RS6000 demodulator driver 3 * 4 * Copyright (C) 2013 Antti Palosaari <crope@iki.fi> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 */ 16 17 #ifndef M88DS3103_H 18 #define M88DS3103_H 19 20 #include <linux/dvb/frontend.h> 21 22 /* 23 * I2C address 24 * 0x68, 25 */ 26 27 /** 28 * struct m88ds3103_platform_data - Platform data for the m88ds3103 driver 29 * @clk: Clock frequency. 30 * @i2c_wr_max: Max bytes I2C adapter can write at once. 31 * @ts_mode: TS mode. 32 * @ts_clk: TS clock (KHz). 33 * @ts_clk_pol: TS clk polarity. 1-active at falling edge; 0-active at rising 34 * edge. 35 * @spec_inv: Input spectrum inversion. 36 * @agc: AGC configuration. 37 * @agc_inv: AGC polarity. 38 * @clk_out: Clock output. 39 * @envelope_mode: DiSEqC envelope mode. 40 * @lnb_hv_pol: LNB H/V pin polarity. 0: pin high set to VOLTAGE_18, pin low to 41 * set VOLTAGE_13. 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. 42 * @lnb_en_pol: LNB enable pin polarity. 0: pin high to disable, pin low to 43 * enable. 1: pin high to enable, pin low to disable. 44 * @get_dvb_frontend: Get DVB frontend. 45 * @get_i2c_adapter: Get I2C adapter. 46 */ 47 48 struct m88ds3103_platform_data { 49 u32 clk; 50 u16 i2c_wr_max; 51 #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ 52 #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ 53 #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ 54 #define M88DS3103_TS_CI 3 /* TS CI Mode */ 55 u8 ts_mode:2; 56 u32 ts_clk; 57 u8 ts_clk_pol:1; 58 u8 spec_inv:1; 59 u8 agc; 60 u8 agc_inv:1; 61 #define M88DS3103_CLOCK_OUT_DISABLED 0 62 #define M88DS3103_CLOCK_OUT_ENABLED 1 63 #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 64 u8 clk_out:2; 65 u8 envelope_mode:1; 66 u8 lnb_hv_pol:1; 67 u8 lnb_en_pol:1; 68 69 struct dvb_frontend* (*get_dvb_frontend)(struct i2c_client *); 70 struct i2c_adapter* (*get_i2c_adapter)(struct i2c_client *); 71 72 /* private: For legacy media attach wrapper. Do not set value. */ 73 u8 attach_in_use:1; 74 }; 75 76 /* 77 * Do not add new m88ds3103_attach() users! Use I2C bindings instead. 78 */ 79 struct m88ds3103_config { 80 /* 81 * I2C address 82 * Default: none, must set 83 * 0x68, ... 84 */ 85 u8 i2c_addr; 86 87 /* 88 * clock 89 * Default: none, must set 90 * 27000000 91 */ 92 u32 clock; 93 94 /* 95 * max bytes I2C provider is asked to write at once 96 * Default: none, must set 97 * 33, 65, ... 98 */ 99 u16 i2c_wr_max; 100 101 /* 102 * TS output mode 103 * Default: M88DS3103_TS_SERIAL 104 */ 105 #define M88DS3103_TS_SERIAL 0 /* TS output pin D0, normal */ 106 #define M88DS3103_TS_SERIAL_D7 1 /* TS output pin D7 */ 107 #define M88DS3103_TS_PARALLEL 2 /* TS Parallel mode */ 108 #define M88DS3103_TS_CI 3 /* TS CI Mode */ 109 u8 ts_mode; 110 111 /* 112 * TS clk in KHz 113 * Default: 0. 114 */ 115 u32 ts_clk; 116 117 /* 118 * TS clk polarity. 119 * Default: 0. 1-active at falling edge; 0-active at rising edge. 120 */ 121 u8 ts_clk_pol:1; 122 123 /* 124 * spectrum inversion 125 * Default: 0 126 */ 127 u8 spec_inv:1; 128 129 /* 130 * AGC polarity 131 * Default: 0 132 */ 133 u8 agc_inv:1; 134 135 /* 136 * clock output 137 * Default: M88DS3103_CLOCK_OUT_DISABLED 138 */ 139 #define M88DS3103_CLOCK_OUT_DISABLED 0 140 #define M88DS3103_CLOCK_OUT_ENABLED 1 141 #define M88DS3103_CLOCK_OUT_ENABLED_DIV2 2 142 u8 clock_out; 143 144 /* 145 * DiSEqC envelope mode 146 * Default: 0 147 */ 148 u8 envelope_mode:1; 149 150 /* 151 * AGC configuration 152 * Default: none, must set 153 */ 154 u8 agc; 155 156 /* 157 * LNB H/V pin polarity 158 * Default: 0. 159 * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18. 160 * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13. 161 */ 162 u8 lnb_hv_pol:1; 163 164 /* 165 * LNB enable pin polarity 166 * Default: 0. 167 * 1: pin high to enable, pin low to disable. 168 * 0: pin high to disable, pin low to enable. 169 */ 170 u8 lnb_en_pol:1; 171 }; 172 173 #if defined(CONFIG_DVB_M88DS3103) || \ 174 (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE)) 175 extern struct dvb_frontend *m88ds3103_attach( 176 const struct m88ds3103_config *config, 177 struct i2c_adapter *i2c, 178 struct i2c_adapter **tuner_i2c); 179 extern int m88ds3103_get_agc_pwm(struct dvb_frontend *fe, u8 *_agc_pwm); 180 #else 181 static inline struct dvb_frontend *m88ds3103_attach( 182 const struct m88ds3103_config *config, 183 struct i2c_adapter *i2c, 184 struct i2c_adapter **tuner_i2c) 185 { 186 pr_warn("%s: driver disabled by Kconfig\n", __func__); 187 return NULL; 188 } 189 #define m88ds3103_get_agc_pwm NULL 190 #endif 191 192 #endif 193