Add hmp-usb-dvb-t2-c driver.
[vuplus_openvuplus_3.0] / meta-bsp / recipes-driver / hmp / hmp-usb-dvb-t2-c-v03arm / vu_backport.patch
1 diff -Naur media_build-bst.orig/linux/drivers/media/dvb-frontends/sit2_mod.c media_build-bst/linux/drivers/media/dvb-frontends/sit2_mod.c
2 --- media_build-bst.orig/linux/drivers/media/dvb-frontends/sit2_mod.c   2014-11-06 07:17:41.000000000 +0100
3 +++ media_build-bst/linux/drivers/media/dvb-frontends/sit2_mod.c        2015-10-21 15:19:44.000000000 +0200
4 @@ -1,16 +1,16 @@
5  /*+++ *******************************************************************\ 
6  *     SIT2  - DVB-T2/T/C demodulator and tuner
7  *
8 -*     --------------------------------------------------------------- \r
9 -*     This software is provided "AS IS" without warranty of any kind, \r
10 -*     either expressed or implied, including but not limited to the \r
11 -*     implied warranties of noninfringement, merchantability and/or \r
12 -*     fitness for a particular purpose.\r
13 -*     --------------------------------------------------------------- \r
14 -*   \r
15 +*     --------------------------------------------------------------- 
16 +*     This software is provided "AS IS" without warranty of any kind, 
17 +*     either expressed or implied, including but not limited to the 
18 +*     implied warranties of noninfringement, merchantability and/or 
19 +*     fitness for a particular purpose.
20 +*     --------------------------------------------------------------- 
21 +*   
22  *     Copyright (c) 2013 ShenZhen Bestunar Ltd,Inc.
23  *     All rights reserved. 
24 -*     Max Nibble <nibble.max@gmail.com>\r
25 +*     Max Nibble <nibble.max@gmail.com>
26  *
27  *
28  \******************************************************************* ---*/ 
29 @@ -20,9 +20,7 @@
30  #include <linux/kernel.h>
31  #include <linux/module.h>
32  #include <linux/string.h>
33 -//#include <linux/slab.h>
34  #include <asm/div64.h>
35 -//#include "kmem_func.h"
36  #include "dvb_frontend.h"
37  #include "sit2.h"
38  #include "sit2_op.h"
39 @@ -32,11 +30,109 @@
40         struct sit2_state *state = fe->demodulator_priv;
41         kfree(state);
42  }
43 +static void sit2_mod_release(struct dvb_frontend *fe)
44 +{
45 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
46 +       kfree(m_state);
47 +}
48 +
49 +static int sit2_mod_init(struct dvb_frontend *fe)
50 +{
51 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
52 +       struct sit2_state *state = &m_state->drv_state;
53 +       return sit2_drv_init(state);
54 +}
55 +
56 +static int sit2_mod_sleep(struct dvb_frontend *fe)
57 +{
58 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
59 +       struct sit2_state *state = &m_state->drv_state;
60 +       return sit2_drv_sleep(state);
61 +}
62 +
63 +static int sit2_mod_get_frontend_algo(struct dvb_frontend *fe)
64 +{
65 +       return DVBFE_ALGO_HW;
66 +}
67 +
68 +static int sit2_mod_set_frontend(struct dvb_frontend *fe)
69 +{
70 +       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
71 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
72 +       struct sit2_state *state = &m_state->drv_state;
73 +       
74 +       return sit2_drv_set_frontend(state, c->delivery_system, c->frequency, c->bandwidth_hz,
75 +       c->symbol_rate, c->modulation, c->stream_id);   
76 +}
77 +
78 +static int sit2_mod_read_status(struct dvb_frontend *fe, fe_status_t *status)
79 +{
80 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
81 +       struct sit2_state *state = &m_state->drv_state;
82 +       return sit2_drv_read_status(state, status);
83 +}
84 +
85 +static int sit2_mod_tune(struct dvb_frontend *fe,
86 +                       bool re_tune,
87 +                       unsigned int mode_flags,
88 +                       unsigned int *delay,
89 +                       fe_status_t *status)
90 +{      
91 +       *delay = HZ / 5;        
92 +       if (re_tune) {
93 +               int ret = sit2_mod_set_frontend(fe);
94 +               if (ret)
95 +                       return ret;
96 +       }       
97 +       return sit2_mod_read_status(fe, status);
98 +}
99 +
100 +static int sit2_mod_get_frontend(struct dvb_frontend *fe)
101 +{
102 +       struct dtv_frontend_properties *c = &fe->dtv_property_cache;
103 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
104 +       struct sit2_state *state = &m_state->drv_state;
105 +
106 +       return sit2_drv_get_frontend(state, &c->symbol_rate, &c->modulation, &c->transmission_mode,
107 +       &c->guard_interval, &c->hierarchy, &c->code_rate_HP, &c->code_rate_LP, &c->inversion, &c->fec_inner);
108 +}
109 +
110 +static int sit2_mod_read_snr(struct dvb_frontend *fe, u16 *snr)
111 +{
112 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
113 +       struct sit2_state *state = &m_state->drv_state;
114 +       return sit2_drv_read_snr(state, snr);
115 +}
116 +
117 +static int sit2_mod_read_ber(struct dvb_frontend *fe, u32 *ber)
118 +{
119 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
120 +       struct sit2_state *state = &m_state->drv_state;
121 +       return sit2_drv_read_ber(state, ber);   
122 +}
123 +
124 +static int sit2_mod_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
125 +{
126 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
127 +       struct sit2_state *state = &m_state->drv_state;
128 +       return sit2_drv_read_ucblocks(state, ucblocks);
129 +}
130 +
131 +static int sit2_mod_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
132 +{
133 +       struct sit2_mod_state *m_state = fe->demodulator_priv;
134 +       struct sit2_state *state = &m_state->drv_state;
135 +       return sit2_drv_read_signal_strength(state, strength);
136 +}
137  
138  static const struct dvb_frontend_ops sit2_ops = {
139 +
140 +       /* DVB-T, DVB-T2 and DVB-C */
141         .delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A },
142 +
143 +       /* DVB-C only */
144         /*.delsys = { SYS_DVBC_ANNEX_A },*/
145 -       /* default: DVB-T/T2 */
146 +
147         .info = {
148                 .name = "Sit2 DVB-T2/C",
149                 .frequency_stepsize = 62500,
150 @@ -65,43 +161,43 @@
151                         FE_CAN_MULTISTREAM
152                 },
153  
154 -       .release                = sit2_drv_release,
155 -       .init                   = sit2_drv_init,
156 -       .sleep                  = sit2_drv_sleep,
157 -
158 -       .tune                   = sit2_drv_tune,
159 -       .set_frontend           = sit2_drv_set_frontend,
160 -       .get_frontend           = sit2_drv_get_frontend,
161 -       .get_frontend_algo      = sit2_drv_get_frontend_algo,
162 -
163 -       .read_status            = sit2_drv_read_status,
164 -       .read_snr               = sit2_drv_read_snr,
165 -       .read_ber               = sit2_drv_read_ber,
166 -       .read_ucblocks          = sit2_drv_read_ucblocks,
167 -       .read_signal_strength   = sit2_drv_read_signal_strength,
168 +       .release                = sit2_mod_release,
169 +       .init                   = sit2_mod_init,
170 +       .sleep                  = sit2_mod_sleep,
171 +
172 +       .tune                   = sit2_mod_tune,
173 +       .set_frontend           = sit2_mod_set_frontend,
174 +       .get_frontend           = sit2_mod_get_frontend,
175 +       .get_frontend_algo      = sit2_mod_get_frontend_algo,
176 +
177 +       .read_status            = sit2_mod_read_status,
178 +       .read_snr               = sit2_mod_read_snr,
179 +       .read_ber               = sit2_mod_read_ber,
180 +       .read_ucblocks          = sit2_mod_read_ucblocks,
181 +       .read_signal_strength   = sit2_mod_read_signal_strength,
182  };
183  
184  struct dvb_frontend *sit2_attach(const struct sit2_config *config,
185                 struct i2c_adapter *i2c)
186  {
187 -       struct sit2_state *state = NULL;
188 -       state = kzalloc(sizeof(struct sit2_state), GFP_KERNEL);
189 +       struct sit2_mod_state *m_state = NULL;
190 +       m_state = kzalloc(sizeof(struct sit2_mod_state), GFP_KERNEL);
191         
192 -       if (!state) {
193 +       if (!m_state) {
194  #ifdef _SIT2_DEBUG_
195                 dev_err(&i2c->dev, "%s: kzalloc() failed\n",
196                                 KBUILD_MODNAME);
197  #endif
198                 goto error;
199         }       
200 -       sit2_op_attach(state, config, i2c);
201 +       sit2_op_attach(&m_state->drv_state, i2c, config->ts_bus_mode, config->ts_clock_mode);
202         
203 -       memcpy(&state->frontend.ops, &sit2_ops,
204 +       memcpy(&m_state->frontend.ops, &sit2_ops,
205                sizeof(struct dvb_frontend_ops));
206 -       state->frontend.demodulator_priv = state;
207 -       return &state->frontend;
208 +       m_state->frontend.demodulator_priv = m_state;
209 +       return &m_state->frontend;
210  error:
211 -       kfree(state);
212 +       kfree(m_state);
213         return NULL;
214  }
215  EXPORT_SYMBOL(sit2_attach);
216 diff -Naur media_build-bst.orig/linux/drivers/media/dvb-frontends/sit2_op.h media_build-bst/linux/drivers/media/dvb-frontends/sit2_op.h
217 --- media_build-bst.orig/linux/drivers/media/dvb-frontends/sit2_op.h    2014-07-25 17:18:39.000000000 +0200
218 +++ media_build-bst/linux/drivers/media/dvb-frontends/sit2_op.h 2015-03-20 05:07:37.000000000 +0100
219 @@ -36,10 +36,8 @@
220  
221  /*global state*/
222  struct sit2_state {
223 -       struct dvb_frontend frontend;
224 -       const struct sit2_config *config;
225         struct i2c_adapter *i2c;
226 -       
227 +
228         bool  isInited;
229         u8 demod_addr;
230         u8 tuner_addr;
231 @@ -52,25 +50,35 @@
232         int plp_id;
233         u32 stream;
234         u32 dvbc_symrate;
235 -       u8 dvbt2_profile;       
236 +       u8 dvbt2_profile;
237 +
238 +       u8 ts_bus_mode; /*1-serial, 2-parallel.*/
239 +       u8 ts_clock_mode; /*0-auto, 1-manual.*/
240 +};
241 +
242 +struct sit2_mod_state {
243 +       struct dvb_frontend frontend;
244 +       const struct sit2_config *config;
245 +       struct sit2_state drv_state;
246  };
247  
248 -int sit2_drv_init(struct dvb_frontend *fe);
249 -int sit2_drv_sleep(struct dvb_frontend *fe);
250 +int sit2_drv_init(struct sit2_state *state);
251 +int sit2_drv_sleep(struct sit2_state *state);
252 +
253 +int sit2_drv_set_frontend(struct sit2_state *state,
254 +fe_delivery_system_t delivery_system, u32 frequency, u32 bandwidth_hz,
255 +u32 symbol_rate, fe_modulation_t modulation, u32 stream_id);
256 +
257 +int sit2_drv_get_frontend(struct sit2_state *state,
258 +u32 *symbol_rate, fe_modulation_t *modulation, fe_transmit_mode_t *transmission_mode,
259 +fe_guard_interval_t *guard_interval, fe_hierarchy_t *hierarchy, fe_code_rate_t *code_rate_HP,
260 +fe_code_rate_t *code_rate_LP, fe_spectral_inversion_t *inversion, fe_code_rate_t *fec_inner);
261  
262 -int sit2_drv_tune(struct dvb_frontend *fe,
263 -                       bool re_tune,
264 -                       unsigned int mode_flags,
265 -                       unsigned int *delay,
266 -                       fe_status_t *status);
267 -int sit2_drv_set_frontend(struct dvb_frontend *fe);
268 -int sit2_drv_get_frontend(struct dvb_frontend *fe);
269 -int sit2_drv_get_frontend_algo(struct dvb_frontend *fe);
270 -int sit2_drv_read_status(struct dvb_frontend *fe, fe_status_t *status);                        
271 -int sit2_drv_read_snr(struct dvb_frontend *fe, u16 *snr);
272 -int sit2_drv_read_ber(struct dvb_frontend *fe, u32 *ber);
273 -int sit2_drv_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks);
274 -int sit2_drv_read_signal_strength(struct dvb_frontend *fe, u16 *strength);
275 -void sit2_op_attach(struct sit2_state *state, const struct sit2_config *config, struct i2c_adapter *i2c);
276 +int sit2_drv_read_status(struct sit2_state *state, fe_status_t *status);                       
277 +int sit2_drv_read_snr(struct sit2_state *state, u16 *snr);
278 +int sit2_drv_read_ber(struct sit2_state *state, u32 *ber);
279 +int sit2_drv_read_ucblocks(struct sit2_state *state, u32 *ucblocks);
280 +int sit2_drv_read_signal_strength(struct sit2_state *state, u16 *strength);
281 +void sit2_op_attach(struct sit2_state *state, struct i2c_adapter *i2c, u8 ts_bus_mode, u8 ts_clock_mode);
282  
283  #endif /* SIT2_OP_H */