diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2015-01-02 08:56:29 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-02-03 14:15:29 -0500 |
commit | d8bad1e2abdf09def76ff9736443d25ad1ea67eb (patch) | |
tree | bb0e849b26ef7f826583bed3da9ec7c0e39b8532 /drivers/media | |
parent | 15e1ce33182d1d5dbd8efe8d382b9352dc857527 (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.c | 93 |
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 | ||
1009 | static int dm04_rs2000_read_signal_strength(struct dvb_frontend *fe, | 963 | static 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 | ||
1019 | static int dm04_rs2000_read_snr(struct dvb_frontend *fe, u16 *snr) | 984 | static 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 | } |