aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorMalcolm Priestley <tvboxspy@gmail.com>2015-01-02 08:56:29 -0500
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-02-03 14:15:29 -0500
commitd8bad1e2abdf09def76ff9736443d25ad1ea67eb (patch)
treebb0e849b26ef7f826583bed3da9ec7c0e39b8532 /drivers/media
parent15e1ce33182d1d5dbd8efe8d382b9352dc857527 (diff)
[media] lmedm04: create frontend callbacks for signal/snr/ber/ucblocks
Create call backs dm04_read_signal_strength, dm04_read_snr and move dm04_read_ber and dm04_read_ucblocks for all frontends Removing the I2C filtering from lme2510_msg and the old rs2000 callbacks. Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/usb/dvb-usb-v2/lmedm04.c93
1 files changed, 33 insertions, 60 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c
index 15db9f67f4d1..55d76904131f 100644
--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
+++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
@@ -515,21 +515,6 @@ static int lme2510_msg(struct dvb_usb_device *d,
515 rbuf[0] = 0x55; 515 rbuf[0] = 0x55;
516 rbuf[1] = st->signal_lock; 516 rbuf[1] = st->signal_lock;
517 break; 517 break;
518 case 0x43:
519 rbuf[0] = 0x55;
520 rbuf[1] = st->signal_level;
521 break;
522 case 0x1c:
523 rbuf[0] = 0x55;
524 rbuf[1] = st->signal_sn;
525 break;
526 case 0x15:
527 case 0x16:
528 case 0x17:
529 case 0x18:
530 rbuf[0] = 0x55;
531 rbuf[1] = 0x00;
532 break;
533 default: 518 default:
534 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen); 519 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
535 st->i2c_talk_onoff = 1; 520 st->i2c_talk_onoff = 1;
@@ -538,25 +523,10 @@ static int lme2510_msg(struct dvb_usb_device *d,
538 break; 523 break;
539 case TUNER_S7395: 524 case TUNER_S7395:
540 switch (wbuf[3]) { 525 switch (wbuf[3]) {
541 case 0x10:
542 rbuf[0] = 0x55;
543 rbuf[1] = (st->signal_level & 0x80)
544 ? 0 : (st->signal_level * 2);
545 break;
546 case 0x2d:
547 rbuf[0] = 0x55;
548 rbuf[1] = st->signal_sn;
549 break;
550 case 0x24: 526 case 0x24:
551 rbuf[0] = 0x55; 527 rbuf[0] = 0x55;
552 rbuf[1] = st->signal_lock; 528 rbuf[1] = st->signal_lock;
553 break; 529 break;
554 case 0x2e:
555 case 0x26:
556 case 0x27:
557 rbuf[0] = 0x55;
558 rbuf[1] = 0x00;
559 break;
560 default: 530 default:
561 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen); 531 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
562 st->i2c_talk_onoff = 1; 532 st->i2c_talk_onoff = 1;
@@ -565,26 +535,10 @@ static int lme2510_msg(struct dvb_usb_device *d,
565 break; 535 break;
566 case TUNER_S0194: 536 case TUNER_S0194:
567 switch (wbuf[3]) { 537 switch (wbuf[3]) {
568 case 0x18:
569 rbuf[0] = 0x55;
570 rbuf[1] = (st->signal_level & 0x80)
571 ? 0 : (st->signal_level * 2);
572 break;
573 case 0x24:
574 rbuf[0] = 0x55;
575 rbuf[1] = st->signal_sn;
576 break;
577 case 0x1b: 538 case 0x1b:
578 rbuf[0] = 0x55; 539 rbuf[0] = 0x55;
579 rbuf[1] = st->signal_lock; 540 rbuf[1] = st->signal_lock;
580 break; 541 break;
581 case 0x19:
582 case 0x25:
583 case 0x1e:
584 case 0x1d:
585 rbuf[0] = 0x55;
586 rbuf[1] = 0x00;
587 break;
588 default: 542 default:
589 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen); 543 lme2510_usb_talk(d, wbuf, wlen, rbuf, rlen);
590 st->i2c_talk_onoff = 1; 544 st->i2c_talk_onoff = 1;
@@ -1006,21 +960,44 @@ static int dm04_lme2510_set_voltage(struct dvb_frontend *fe,
1006 return (ret < 0) ? -ENODEV : 0; 960 return (ret < 0) ? -ENODEV : 0;
1007} 961}
1008 962
1009static int dm04_rs2000_read_signal_strength(struct dvb_frontend *fe, 963static int dm04_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
1010 u16 *strength)
1011{ 964{
1012 struct lme2510_state *st = fe_to_priv(fe); 965 struct lme2510_state *st = fe_to_priv(fe);
1013 966
1014 *strength = (u16)((u32)st->signal_level * 0xffff / 0xff); 967 switch (st->tuner_config) {
968 case TUNER_LG:
969 *strength = 0xff - st->signal_level;
970 *strength |= *strength << 8;
971 break;
972 /* fall through */
973 case TUNER_S7395:
974 case TUNER_S0194:
975 *strength = 0xffff - (((st->signal_level * 2) << 8) * 5 / 4);
976 break;
977 case TUNER_RS2000:
978 *strength = (u16)((u32)st->signal_level * 0xffff / 0xff);
979 }
1015 980
1016 return 0; 981 return 0;
1017} 982}
1018 983
1019static int dm04_rs2000_read_snr(struct dvb_frontend *fe, u16 *snr) 984static int dm04_read_snr(struct dvb_frontend *fe, u16 *snr)
1020{ 985{
1021 struct lme2510_state *st = fe_to_priv(fe); 986 struct lme2510_state *st = fe_to_priv(fe);
1022 987
1023 *snr = (u16)((u32)st->signal_sn * 0xffff / 0x7f); 988 switch (st->tuner_config) {
989 case TUNER_LG:
990 *snr = 0xff - st->signal_sn;
991 *snr |= *snr << 8;
992 break;
993 /* fall through */
994 case TUNER_S7395:
995 case TUNER_S0194:
996 *snr = (u16)((0xff - st->signal_sn - 0xa1) * 3) << 8;
997 break;
998 case TUNER_RS2000:
999 *snr = (u16)((u32)st->signal_sn * 0xffff / 0x7f);
1000 }
1024 1001
1025 return 0; 1002 return 0;
1026} 1003}
@@ -1127,15 +1104,6 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
1127 st->tuner_config = TUNER_RS2000; 1104 st->tuner_config = TUNER_RS2000;
1128 st->fe_set_voltage = 1105 st->fe_set_voltage =
1129 adap->fe[0]->ops.set_voltage; 1106 adap->fe[0]->ops.set_voltage;
1130
1131 adap->fe[0]->ops.read_signal_strength =
1132 dm04_rs2000_read_signal_strength;
1133 adap->fe[0]->ops.read_snr =
1134 dm04_rs2000_read_snr;
1135 adap->fe[0]->ops.read_ber =
1136 dm04_read_ber;
1137 adap->fe[0]->ops.read_ucblocks =
1138 dm04_read_ucblocks;
1139 } 1107 }
1140 break; 1108 break;
1141 } 1109 }
@@ -1154,7 +1122,12 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
1154 return -ENODEV; 1122 return -ENODEV;
1155 } 1123 }
1156 1124
1125 adap->fe[0]->ops.read_signal_strength = dm04_read_signal_strength;
1126 adap->fe[0]->ops.read_snr = dm04_read_snr;
1127 adap->fe[0]->ops.read_ber = dm04_read_ber;
1128 adap->fe[0]->ops.read_ucblocks = dm04_read_ucblocks;
1157 adap->fe[0]->ops.set_voltage = dm04_lme2510_set_voltage; 1129 adap->fe[0]->ops.set_voltage = dm04_lme2510_set_voltage;
1130
1158 ret = lme_name(adap); 1131 ret = lme_name(adap);
1159 return ret; 1132 return ret;
1160} 1133}