aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends
diff options
context:
space:
mode:
authorAbylay Ospan <aospan@netup.ru>2016-06-30 22:09:48 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-07-08 17:55:42 -0400
commitd0998ce76f428bd607ab73c3258eabeb9735820f (patch)
tree9979a7ef3aa6bb67467fc7c9e43809221c794e3c /drivers/media/dvb-frontends
parent5fda1b65c2ecb2acaceb4418c16cfd929ac138b3 (diff)
[media] DVB-C read signal strength added for Sony demod
cxd2841er_read_agc_gain_c added to obtain signal strength. signal strength now relay on AGC value. Signed-off-by: Abylay Ospan <aospan@netup.ru> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/dvb-frontends')
-rw-r--r--drivers/media/dvb-frontends/cxd2841er.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/media/dvb-frontends/cxd2841er.c b/drivers/media/dvb-frontends/cxd2841er.c
index c960e8a725cc..0c7d92aee857 100644
--- a/drivers/media/dvb-frontends/cxd2841er.c
+++ b/drivers/media/dvb-frontends/cxd2841er.c
@@ -1656,6 +1656,21 @@ static int cxd2841er_read_snr_i(struct cxd2841er_priv *priv, u32 *snr)
1656 return 0; 1656 return 0;
1657} 1657}
1658 1658
1659static u16 cxd2841er_read_agc_gain_c(struct cxd2841er_priv *priv,
1660 u8 delsys)
1661{
1662 u8 data[2];
1663
1664 cxd2841er_write_reg(
1665 priv, I2C_SLVT, 0x00, 0x40);
1666 cxd2841er_read_regs(priv, I2C_SLVT, 0x49, data, 2);
1667 dev_dbg(&priv->i2c->dev,
1668 "%s(): AGC value=%u\n",
1669 __func__, (((u16)data[0] & 0x0F) << 8) |
1670 (u16)(data[1] & 0xFF));
1671 return ((((u16)data[0] & 0x0F) << 8) | (u16)(data[1] & 0xFF)) << 4;
1672}
1673
1659static u16 cxd2841er_read_agc_gain_t_t2(struct cxd2841er_priv *priv, 1674static u16 cxd2841er_read_agc_gain_t_t2(struct cxd2841er_priv *priv,
1660 u8 delsys) 1675 u8 delsys)
1661{ 1676{
@@ -1735,6 +1750,14 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
1735 1750
1736 dev_dbg(&priv->i2c->dev, "%s()\n", __func__); 1751 dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
1737 switch (p->delivery_system) { 1752 switch (p->delivery_system) {
1753 case SYS_DVBC_ANNEX_A:
1754 case SYS_DVBC_ANNEX_B:
1755 case SYS_DVBC_ANNEX_C:
1756 strength = 65535 - cxd2841er_read_agc_gain_c(
1757 priv, p->delivery_system);
1758 p->strength.stat[0].scale = FE_SCALE_RELATIVE;
1759 p->strength.stat[0].uvalue = strength;
1760 break;
1738 case SYS_DVBT: 1761 case SYS_DVBT:
1739 case SYS_DVBT2: 1762 case SYS_DVBT2:
1740 strength = cxd2841er_read_agc_gain_t_t2(priv, 1763 strength = cxd2841er_read_agc_gain_t_t2(priv,