aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/frontends/sp887x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/frontends/sp887x.c')
-rw-r--r--drivers/media/dvb/frontends/sp887x.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/drivers/media/dvb/frontends/sp887x.c b/drivers/media/dvb/frontends/sp887x.c
index 4a7c3d842608..f4096ccb226e 100644
--- a/drivers/media/dvb/frontends/sp887x.c
+++ b/drivers/media/dvb/frontends/sp887x.c
@@ -209,13 +209,13 @@ static int sp887x_initial_setup (struct dvb_frontend* fe, const struct firmware
209 return 0; 209 return 0;
210}; 210};
211 211
212static int configure_reg0xc05 (struct dvb_frontend_parameters *p, u16 *reg0xc05) 212static int configure_reg0xc05(struct dtv_frontend_properties *p, u16 *reg0xc05)
213{ 213{
214 int known_parameters = 1; 214 int known_parameters = 1;
215 215
216 *reg0xc05 = 0x000; 216 *reg0xc05 = 0x000;
217 217
218 switch (p->u.ofdm.constellation) { 218 switch (p->modulation) {
219 case QPSK: 219 case QPSK:
220 break; 220 break;
221 case QAM_16: 221 case QAM_16:
@@ -231,7 +231,7 @@ static int configure_reg0xc05 (struct dvb_frontend_parameters *p, u16 *reg0xc05)
231 return -EINVAL; 231 return -EINVAL;
232 }; 232 };
233 233
234 switch (p->u.ofdm.hierarchy_information) { 234 switch (p->hierarchy) {
235 case HIERARCHY_NONE: 235 case HIERARCHY_NONE:
236 break; 236 break;
237 case HIERARCHY_1: 237 case HIERARCHY_1:
@@ -250,7 +250,7 @@ static int configure_reg0xc05 (struct dvb_frontend_parameters *p, u16 *reg0xc05)
250 return -EINVAL; 250 return -EINVAL;
251 }; 251 };
252 252
253 switch (p->u.ofdm.code_rate_HP) { 253 switch (p->code_rate_HP) {
254 case FEC_1_2: 254 case FEC_1_2:
255 break; 255 break;
256 case FEC_2_3: 256 case FEC_2_3:
@@ -303,17 +303,30 @@ static void divide (int n, int d, int *quotient_i, int *quotient_f)
303} 303}
304 304
305static void sp887x_correct_offsets (struct sp887x_state* state, 305static void sp887x_correct_offsets (struct sp887x_state* state,
306 struct dvb_frontend_parameters *p, 306 struct dtv_frontend_properties *p,
307 int actual_freq) 307 int actual_freq)
308{ 308{
309 static const u32 srate_correction [] = { 1879617, 4544878, 8098561 }; 309 static const u32 srate_correction [] = { 1879617, 4544878, 8098561 };
310 int bw_index = p->u.ofdm.bandwidth - BANDWIDTH_8_MHZ; 310 int bw_index;
311 int freq_offset = actual_freq - p->frequency; 311 int freq_offset = actual_freq - p->frequency;
312 int sysclock = 61003; //[kHz] 312 int sysclock = 61003; //[kHz]
313 int ifreq = 36000000; 313 int ifreq = 36000000;
314 int freq; 314 int freq;
315 int frequency_shift; 315 int frequency_shift;
316 316
317 switch (p->bandwidth_hz) {
318 default:
319 case 8000000:
320 bw_index = 0;
321 break;
322 case 7000000:
323 bw_index = 1;
324 break;
325 case 6000000:
326 bw_index = 2;
327 break;
328 }
329
317 if (p->inversion == INVERSION_ON) 330 if (p->inversion == INVERSION_ON)
318 freq = ifreq - freq_offset; 331 freq = ifreq - freq_offset;
319 else 332 else
@@ -333,17 +346,17 @@ static void sp887x_correct_offsets (struct sp887x_state* state,
333 sp887x_writereg(state, 0x30a, frequency_shift & 0xfff); 346 sp887x_writereg(state, 0x30a, frequency_shift & 0xfff);
334} 347}
335 348
336static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe, 349static int sp887x_setup_frontend_parameters(struct dvb_frontend *fe)
337 struct dvb_frontend_parameters *p)
338{ 350{
351 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
339 struct sp887x_state* state = fe->demodulator_priv; 352 struct sp887x_state* state = fe->demodulator_priv;
340 unsigned actual_freq; 353 unsigned actual_freq;
341 int err; 354 int err;
342 u16 val, reg0xc05; 355 u16 val, reg0xc05;
343 356
344 if (p->u.ofdm.bandwidth != BANDWIDTH_8_MHZ && 357 if (p->bandwidth_hz != 8000000 &&
345 p->u.ofdm.bandwidth != BANDWIDTH_7_MHZ && 358 p->bandwidth_hz != 7000000 &&
346 p->u.ofdm.bandwidth != BANDWIDTH_6_MHZ) 359 p->bandwidth_hz != 6000000)
347 return -EINVAL; 360 return -EINVAL;
348 361
349 if ((err = configure_reg0xc05(p, &reg0xc05))) 362 if ((err = configure_reg0xc05(p, &reg0xc05)))
@@ -353,7 +366,7 @@ static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe,
353 366
354 /* setup the PLL */ 367 /* setup the PLL */
355 if (fe->ops.tuner_ops.set_params) { 368 if (fe->ops.tuner_ops.set_params) {
356 fe->ops.tuner_ops.set_params(fe, p); 369 fe->ops.tuner_ops.set_params(fe);
357 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); 370 if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0);
358 } 371 }
359 if (fe->ops.tuner_ops.get_frequency) { 372 if (fe->ops.tuner_ops.get_frequency) {
@@ -369,9 +382,9 @@ static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe,
369 sp887x_correct_offsets(state, p, actual_freq); 382 sp887x_correct_offsets(state, p, actual_freq);
370 383
371 /* filter for 6/7/8 Mhz channel */ 384 /* filter for 6/7/8 Mhz channel */
372 if (p->u.ofdm.bandwidth == BANDWIDTH_6_MHZ) 385 if (p->bandwidth_hz == 6000000)
373 val = 2; 386 val = 2;
374 else if (p->u.ofdm.bandwidth == BANDWIDTH_7_MHZ) 387 else if (p->bandwidth_hz == 7000000)
375 val = 1; 388 val = 1;
376 else 389 else
377 val = 0; 390 val = 0;
@@ -379,16 +392,16 @@ static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe,
379 sp887x_writereg(state, 0x311, val); 392 sp887x_writereg(state, 0x311, val);
380 393
381 /* scan order: 2k first = 0, 8k first = 1 */ 394 /* scan order: 2k first = 0, 8k first = 1 */
382 if (p->u.ofdm.transmission_mode == TRANSMISSION_MODE_2K) 395 if (p->transmission_mode == TRANSMISSION_MODE_2K)
383 sp887x_writereg(state, 0x338, 0x000); 396 sp887x_writereg(state, 0x338, 0x000);
384 else 397 else
385 sp887x_writereg(state, 0x338, 0x001); 398 sp887x_writereg(state, 0x338, 0x001);
386 399
387 sp887x_writereg(state, 0xc05, reg0xc05); 400 sp887x_writereg(state, 0xc05, reg0xc05);
388 401
389 if (p->u.ofdm.bandwidth == BANDWIDTH_6_MHZ) 402 if (p->bandwidth_hz == 6000000)
390 val = 2 << 3; 403 val = 2 << 3;
391 else if (p->u.ofdm.bandwidth == BANDWIDTH_7_MHZ) 404 else if (p->bandwidth_hz == 7000000)
392 val = 3 << 3; 405 val = 3 << 3;
393 else 406 else
394 val = 0 << 3; 407 val = 0 << 3;
@@ -579,10 +592,9 @@ error:
579} 592}
580 593
581static struct dvb_frontend_ops sp887x_ops = { 594static struct dvb_frontend_ops sp887x_ops = {
582 595 .delsys = { SYS_DVBT },
583 .info = { 596 .info = {
584 .name = "Spase SP887x DVB-T", 597 .name = "Spase SP887x DVB-T",
585 .type = FE_OFDM,
586 .frequency_min = 50500000, 598 .frequency_min = 50500000,
587 .frequency_max = 858000000, 599 .frequency_max = 858000000,
588 .frequency_stepsize = 166666, 600 .frequency_stepsize = 166666,