[PATCH 1/2] af9033: fix DVBv3 signal strength value not correct issue

2014-10-01 Thread Bimow Chen
Register 0x800048 is not dB measure but relative scale. Fix it and conform to 
NorDig specifications.
From 02ee7de4600a43a322f75cf04d273effa04d3a42 Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Wed, 1 Oct 2014 18:28:54 +0800
Subject: [PATCH 1/2] af9033: fix DVBv3 signal strength value not correct issue

Register 0x800048 is not dB measure but relative scale. Fix it and conform to NorDig specifications.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   43 +++-
 drivers/media/dvb-frontends/af9033_priv.h |6 
 2 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 63a89c1..2b3d2f0 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -862,16 +862,43 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct af9033_dev *dev = fe-demodulator_priv;
-	int ret;
-	u8 strength2;
+	struct dtv_frontend_properties *c = dev-fe.dtv_property_cache;
+	int ret, tmp, power_real;
+	u8 u8tmp, gain_offset, buf[7];
 
-	/* read signal strength of 0-100 scale */
-	ret = af9033_rd_reg(dev, 0x800048, strength2);
-	if (ret  0)
-		goto err;
+	if (dev-is_af9035) {
+		ret = af9033_rd_reg(dev, 0x80004a, u8tmp);
+		/* scale value to 0x-0x */
+		*strength = u8tmp * 0x / 100;
+	} else {
+		ret = af9033_rd_reg(dev, 0x8000f7, u8tmp);
+		ret |= af9033_rd_regs(dev, 0x80f900, buf, 7);
+
+		if (c-frequency = 3)
+			gain_offset = 7; /* VHF */
+		else
+			gain_offset = 4; /* UHF */
+
+		power_real = (u8tmp - 100 - gain_offset) -
+			power_reference[((buf[3]  0)  3)][((buf[6]  0)  7)];
+
+		if (power_real  -15)
+			tmp = 0;
+		else if ((power_real = -15)  (power_real  0))
+			tmp = (2 * (power_real + 15)) / 3;
+		else if ((power_real = 0)  (power_real  20))
+			tmp = 4 * power_real + 10;
+		else if ((power_real = 20)  (power_real  35))
+			tmp = (2 * (power_real - 20)) / 3 + 90;
+		else
+			tmp = 100;
+
+		/* scale value to 0x-0x */
+		*strength = tmp * 0x / 100;
+	}
 
-	/* scale value to 0x-0x */
-	*strength = strength2 * 0x / 100;
+	if (ret)
+		goto err;
 
 	return 0;
 
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index c12c92c..c9c8798 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -2051,4 +2051,10 @@ static const struct reg_val tuner_init_it9135_62[] = {
 	{ 0x80fd8b, 0x00 },
 };
 
+/* NorDig power reference table */
+static const int power_reference[][5] = {
+	{-93, -91, -90, -89, -88}, /* QPSK 1/2 ~ 7/8 */
+	{-87, -85, -84, -83, -82}, /* 16QAM 1/2 ~ 7/8 */
+	{-82, -80, -78, -77, -76}, /* 64QAM 1/2 ~ 7/8 */
+};
 #endif /* AF9033_PRIV_H */
-- 
1.7.0.4



[PATCH 2/2] af9033: fix DVBv3 snr value not correct issue

2014-10-01 Thread Bimow Chen
Snr returns value not correct. Fix it.
From 7b7d83e669e1c7a041241c7412fd05a5ca73815c Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Thu, 2 Oct 2014 10:37:13 +0800
Subject: [PATCH 2/2] af9033: fix DVBv3 snr value not correct issue

Snr returns value not correct. Fix it.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   61 +++-
 drivers/media/dvb-frontends/af9033_priv.h |5 ++-
 2 files changed, 62 insertions(+), 4 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 2b3d2f0..ad4ff78 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -849,14 +849,42 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
 	struct af9033_dev *dev = fe-demodulator_priv;
 	struct dtv_frontend_properties *c = dev-fe.dtv_property_cache;
+	int ret;
+	u8 u8tmp;
 
 	/* use DVBv5 CNR */
-	if (c-cnr.stat[0].scale == FE_SCALE_DECIBEL)
-		*snr = div_s64(c-cnr.stat[0].svalue, 100); /* 1000x = 10x */
-	else
+	if (c-cnr.stat[0].scale == FE_SCALE_DECIBEL) {
+		*snr = div_s64(c-cnr.stat[0].svalue, 1000);
+
+		/* read current modulation */
+		ret = af9033_rd_reg(dev, 0x80f903, u8tmp);
+		if (ret)
+			goto err;
+
+		/* scale value to 0x-0x */
+		switch ((u8tmp  0)  3) {
+		case 0:
+			*snr = *snr * 0x / 23;
+			break;
+		case 1:
+			*snr = *snr * 0x / 26;
+			break;
+		case 2:
+			*snr = *snr * 0x / 32;
+			break;
+		default:
+			goto err;
+		}
+	} else {
 		*snr = 0;
+	}
 
 	return 0;
+
+err:
+	dev_dbg(dev-client-dev, failed=%d\n, ret);
+
+	return ret;
 }
 
 static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
@@ -1038,6 +1066,33 @@ static void af9033_stat_work(struct work_struct *work)
 
 		snr_val = (buf[2]  16) | (buf[1]  8) | (buf[0]  0);
 
+		/* read superframe number */
+		ret = af9033_rd_reg(dev, 0x80f78b, u8tmp);
+		if (ret)
+			goto err;
+
+		if (u8tmp)
+			snr_val /= u8tmp;
+
+		/* read current transmission mode */
+		ret = af9033_rd_reg(dev, 0x80f900, u8tmp);
+		if (ret)
+			goto err;
+
+		switch ((u8tmp  0)  3) {
+		case 0:
+			snr_val *= 4;
+			break;
+		case 1:
+			snr_val *= 1;
+			break;
+		case 2:
+			snr_val *= 2;
+			break;
+		default:
+			goto err;
+		}
+
 		/* read current modulation */
 		ret = af9033_rd_reg(dev, 0x80f903, u8tmp);
 		if (ret)
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index c9c8798..8e23275 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -181,7 +181,10 @@ static const struct val_snr qam64_snr_lut[] = {
 	{ 0x05570d, 26 },
 	{ 0x059feb, 27 },
 	{ 0x05bf38, 28 },
-	{ 0xff, 29 },
+	{ 0x05f78f, 29 },
+	{ 0x0612c3, 30 },
+	{ 0x0626be, 31 },
+	{ 0xff, 32 },
 };
 
 static const struct reg_val ofsm_init[] = {
-- 
1.7.0.4



[PATCH 1/2] af9033: fix signal strength value not correct issue

2014-09-29 Thread Bimow Chen
Register 0x800048 is not dB measure but relative scale. Fix it and conform to 
NorDig specifications.
From b85ad9df69884b80cce62877039aa9130243ef3a Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Mon, 29 Sep 2014 13:57:07 +0800
Subject: [PATCH 1/2] af9033: fix signal strength value not correct issue

Register 0x800048 is not dB measure but relative scale. Fix it and conform to NorDig specifications.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   54 ++---
 drivers/media/dvb-frontends/af9033_priv.h |6 +++
 2 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 63a89c1..e191bd5 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -862,23 +862,14 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct af9033_dev *dev = fe-demodulator_priv;
-	int ret;
-	u8 strength2;
-
-	/* read signal strength of 0-100 scale */
-	ret = af9033_rd_reg(dev, 0x800048, strength2);
-	if (ret  0)
-		goto err;
+	struct dtv_frontend_properties *c = dev-fe.dtv_property_cache;
 
-	/* scale value to 0x-0x */
-	*strength = strength2 * 0x / 100;
+	if (c-strength.stat[0].scale == FE_SCALE_RELATIVE)
+		*strength = c-strength.stat[0].uvalue;
+	else
+		*strength = 0;
 
 	return 0;
-
-err:
-	dev_dbg(dev-client-dev, failed=%d\n, ret);
-
-	return ret;
 }
 
 static int af9033_read_ber(struct dvb_frontend *fe, u32 *ber)
@@ -974,8 +965,8 @@ static void af9033_stat_work(struct work_struct *work)
 {
 	struct af9033_dev *dev = container_of(work, struct af9033_dev, stat_work.work);
 	struct dtv_frontend_properties *c = dev-fe.dtv_property_cache;
-	int ret, tmp, i, len;
-	u8 u8tmp, buf[7];
+	int ret, tmp, i, len, power_real;
+	u8 u8tmp, gain_offset, buf[7];
 
 	dev_dbg(dev-client-dev, \n);
 
@@ -983,17 +974,40 @@ static void af9033_stat_work(struct work_struct *work)
 	if (dev-fe_status  FE_HAS_SIGNAL) {
 		if (dev-is_af9035) {
 			ret = af9033_rd_reg(dev, 0x80004a, u8tmp);
-			tmp = -u8tmp * 1000;
+			/* scale value to 0x-0x */
+			tmp = u8tmp * 0x / 100;
 		} else {
 			ret = af9033_rd_reg(dev, 0x8000f7, u8tmp);
-			tmp = (u8tmp - 100) * 1000;
+			ret |= af9033_rd_regs(dev, 0x80f900, buf, 7);
+
+			if (c-frequency = 3)
+gain_offset = 7; /* VHF */
+			else
+gain_offset = 4; /* UHF */
+
+			power_real = (u8tmp - 100 - gain_offset) -
+power_reference[((buf[3]  0)  3)][((buf[6]  0)  7)];
+
+			if (power_real  -15)
+tmp = 0;
+			else if ((power_real = -15)  (power_real  0))
+tmp = (2 * (power_real + 15)) / 3;
+			else if ((power_real = 0)  (power_real  20))
+tmp = 4 * power_real + 10;
+			else if ((power_real = 20)  (power_real  35))
+tmp = (2 * (power_real - 20)) / 3 + 90;
+			else
+tmp = 100;
+
+			/* scale value to 0x-0x */
+			tmp = tmp * 0x / 100;
 		}
 		if (ret)
 			goto err;
 
 		c-strength.len = 1;
-		c-strength.stat[0].scale = FE_SCALE_DECIBEL;
-		c-strength.stat[0].svalue = tmp;
+		c-strength.stat[0].scale = FE_SCALE_RELATIVE;
+		c-strength.stat[0].uvalue = tmp;
 	} else {
 		c-strength.len = 1;
 		c-strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index c12c92c..c9c8798 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -2051,4 +2051,10 @@ static const struct reg_val tuner_init_it9135_62[] = {
 	{ 0x80fd8b, 0x00 },
 };
 
+/* NorDig power reference table */
+static const int power_reference[][5] = {
+	{-93, -91, -90, -89, -88}, /* QPSK 1/2 ~ 7/8 */
+	{-87, -85, -84, -83, -82}, /* 16QAM 1/2 ~ 7/8 */
+	{-82, -80, -78, -77, -76}, /* 64QAM 1/2 ~ 7/8 */
+};
 #endif /* AF9033_PRIV_H */
-- 
1.7.0.4



[PATCH 2/2] af9033: fix snr value not correct issue

2014-09-29 Thread Bimow Chen
Snr returns value not correct. Fix it.
From 427a5c6ef49e3235ac35a0464c375f2a2706619e Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Mon, 29 Sep 2014 16:30:52 +0800
Subject: [PATCH 2/2] af9033: fix snr value not correct issue

Snr returns value not correct. Fix it.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   52 ++---
 drivers/media/dvb-frontends/af9033_priv.h |5 ++-
 2 files changed, 51 insertions(+), 6 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index e191bd5..30dc366 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -851,8 +851,8 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 	struct dtv_frontend_properties *c = dev-fe.dtv_property_cache;
 
 	/* use DVBv5 CNR */
-	if (c-cnr.stat[0].scale == FE_SCALE_DECIBEL)
-		*snr = div_s64(c-cnr.stat[0].svalue, 100); /* 1000x = 10x */
+	if (c-cnr.stat[0].scale == FE_SCALE_RELATIVE)
+		*snr = c-cnr.stat[0].uvalue;
 	else
 		*snr = 0;
 
@@ -1025,6 +1025,33 @@ static void af9033_stat_work(struct work_struct *work)
 
 		snr_val = (buf[2]  16) | (buf[1]  8) | (buf[0]  0);
 
+		/* read superframe number */
+		ret = af9033_rd_reg(dev, 0x80f78b, u8tmp);
+		if (ret)
+			goto err;
+
+		if (u8tmp)
+			snr_val /= u8tmp;
+
+		/* read current transmission mode */
+		ret = af9033_rd_reg(dev, 0x80f900, u8tmp);
+		if (ret)
+			goto err;
+
+		switch ((u8tmp  0)  3) {
+		case 0:
+			snr_val *= 4;
+			break;
+		case 1:
+			snr_val *= 1;
+			break;
+		case 2:
+			snr_val *= 2;
+			break;
+		default:
+			goto err;
+		}
+
 		/* read current modulation */
 		ret = af9033_rd_reg(dev, 0x80f903, u8tmp);
 		if (ret)
@@ -1048,14 +1075,29 @@ static void af9033_stat_work(struct work_struct *work)
 		}
 
 		for (i = 0; i  len; i++) {
-			tmp = snr_lut[i].snr * 1000;
+			tmp = snr_lut[i].snr;
 			if (snr_val  snr_lut[i].val)
 break;
 		}
 
+		/* scale value to 0x-0x */
+		switch ((u8tmp  0)  3) {
+		case 0:
+			tmp = tmp * 0x / 23;
+			break;
+		case 1:
+			tmp = tmp * 0x / 26;
+			break;
+		case 2:
+			tmp = tmp * 0x / 32;
+			break;
+		default:
+			goto err;
+		}
+
 		c-cnr.len = 1;
-		c-cnr.stat[0].scale = FE_SCALE_DECIBEL;
-		c-cnr.stat[0].svalue = tmp;
+		c-cnr.stat[0].scale = FE_SCALE_RELATIVE;
+		c-cnr.stat[0].uvalue = tmp;
 	} else {
 		c-cnr.len = 1;
 		c-cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index c9c8798..8e23275 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -181,7 +181,10 @@ static const struct val_snr qam64_snr_lut[] = {
 	{ 0x05570d, 26 },
 	{ 0x059feb, 27 },
 	{ 0x05bf38, 28 },
-	{ 0xff, 29 },
+	{ 0x05f78f, 29 },
+	{ 0x0612c3, 30 },
+	{ 0x0626be, 31 },
+	{ 0xff, 32 },
 };
 
 static const struct reg_val ofsm_init[] = {
-- 
1.7.0.4



[1/2] af9033: fix it9135 strength value not correct issue

2014-09-23 Thread Bimow Chen
Register 0x800048 does not work in it9135. Fix it and conform to NorDig 
specifications.
From 5d2f434dd4737a97a954dc775c26295e785a20c6 Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 23 Sep 2014 15:31:44 +0800
Subject: [PATCH 1/2] af9033: fix it9135 strength value not correct issue

Register 0x800048 does not work in it9135. Fix it and conform to NorDig specifications.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   50 -
 drivers/media/dvb-frontends/af9033_priv.h |6 +++
 2 files changed, 48 insertions(+), 8 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 5c90ea6..0a0aeaf 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -28,6 +28,7 @@ struct af9033_state {
 	struct i2c_adapter *i2c;
 	struct dvb_frontend fe;
 	struct af9033_config cfg;
+	bool is_af9035;
 
 	u32 bandwidth_hz;
 	bool ts_mode_parallel;
@@ -892,16 +893,46 @@ err:
 static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
 	struct af9033_state *state = fe-demodulator_priv;
-	int ret;
-	u8 strength2;
+	struct dtv_frontend_properties *c = fe-dtv_property_cache;
+	int ret, power_real;
+	u8 strength2, gain_offset, buf[8];
 
-	/* read signal strength of 0-100 scale */
-	ret = af9033_rd_reg(state, 0x800048, strength2);
-	if (ret  0)
-		goto err;
+	if (state-is_af9035) {
+		/* read signal strength of 0-100 scale */
+		ret = af9033_rd_reg(state, 0x800048, strength2);
+		if (ret  0)
+			goto err;
 
-	/* scale value to 0x-0x */
-	*strength = strength2 * 0x / 100;
+		/* scale value to 0x-0x */
+		*strength = strength2 * 0x / 100;
+	} else {
+		ret = af9033_rd_reg(state, 0x8000f7, strength2);
+		ret |= af9033_rd_regs(state, 0x80f900, buf, sizeof(buf));
+		if (ret  0)
+			goto err;
+
+		if (c-frequency = 3)
+			gain_offset = 7; /* VHF */
+		else
+			gain_offset = 4; /* UHF */
+
+		power_real = (strength2 - 100 - gain_offset) -
+			power_reference[((buf[3]  0)  3)][((buf[6]  0)  7)];
+
+		if (power_real  -15)
+			*strength = 0;
+		else if ((power_real = -15)  (power_real  0))
+			*strength = (u8)((2 * (power_real + 15)) / 3);
+		else if ((power_real = 0)  (power_real  20))
+			*strength = (u8)(4 * power_real + 10);
+		else if ((power_real = 20)  (power_real  35))
+			*strength = (u8)((2 * (power_real - 20)) / 3 + 90);
+		else
+			*strength = 100;
+
+		/* scale value to 0x-0x */
+		*strength = *strength * 0x / 100;
+	}
 
 	return 0;
 
@@ -1103,6 +1134,7 @@ struct dvb_frontend *af9033_attach(const struct af9033_config *config,
 	case AF9033_TUNER_IT9135_61:
 	case AF9033_TUNER_IT9135_62:
 		/* IT9135 did not like to sleep at that early */
+		state-is_af9035 = false;
 		break;
 	default:
 		ret = af9033_wr_reg(state, 0x80004c, 1);
@@ -1112,6 +1144,8 @@ struct dvb_frontend *af9033_attach(const struct af9033_config *config,
 		ret = af9033_wr_reg(state, 0x80, 0);
 		if (ret  0)
 			goto err;
+
+		state-is_af9035 = true;
 	}
 
 	/* configure internal TS mode */
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index ded7b67..58315e0 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -2050,4 +2050,10 @@ static const struct reg_val tuner_init_it9135_62[] = {
 	{ 0x80fd8b, 0x00 },
 };
 
+/* NorDig power reference table */
+static const int power_reference[][5] = {
+	{-93, -91, -90, -89, -88}, /* QPSK 1/2 ~ 7/8 */
+	{-87, -85, -84, -83, -82}, /* 16QAM 1/2 ~ 7/8 */
+	{-82, -80, -78, -77, -76}, /* 64QAM 1/2 ~ 7/8 */
+};
 #endif /* AF9033_PRIV_H */
-- 
1.7.0.4



[2/2] af9033: fix snr value not correct issue

2014-09-23 Thread Bimow Chen
Snr returns value not correct. Fix it.
From f3d5c9e2b01e666eca7aa66cd15b67609a0589ea Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 23 Sep 2014 17:23:31 +0800
Subject: [PATCH 2/2] af9033: fix snr value not correct issue

Snr returns value not correct. Fix it.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   46 +++--
 drivers/media/dvb-frontends/af9033_priv.h |5 ++-
 2 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 0a0aeaf..37bd624 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -840,7 +840,7 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
 	struct af9033_state *state = fe-demodulator_priv;
 	int ret, i, len;
-	u8 buf[3], tmp;
+	u8 buf[3], tmp, tmp2;
 	u32 snr_val;
 	const struct val_snr *uninitialized_var(snr_lut);
 
@@ -851,6 +851,33 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 
 	snr_val = (buf[2]  16) | (buf[1]  8) | buf[0];
 
+	/* read superframe number */
+	ret = af9033_rd_reg(state, 0x80f78b, tmp);
+	if (ret  0)
+		goto err;
+
+	if (tmp)
+		snr_val /= tmp;
+
+	/* read current transmission mode */
+	ret = af9033_rd_reg(state, 0x80f900, tmp);
+	if (ret  0)
+		goto err;
+
+	switch ((tmp  0)  3) {
+	case 0:
+		snr_val *= 4;
+		break;
+	case 1:
+		snr_val *= 1;
+		break;
+	case 2:
+		snr_val *= 2;
+		break;
+	default:
+		goto err;
+	}
+
 	/* read current modulation */
 	ret = af9033_rd_reg(state, 0x80f903, tmp);
 	if (ret  0)
@@ -874,13 +901,26 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 	}
 
 	for (i = 0; i  len; i++) {
-		tmp = snr_lut[i].snr;
+		tmp2 = snr_lut[i].snr;
 
 		if (snr_val  snr_lut[i].val)
 			break;
 	}
 
-	*snr = tmp * 10; /* dB/10 */
+	/* scale value to 0x-0x */
+	switch ((tmp  0)  3) {
+	case 0:
+		*snr = tmp2 * 0x / 23;
+		break;
+	case 1:
+		*snr = tmp2 * 0x / 26;
+		break;
+	case 2:
+		*snr = tmp2 * 0x / 32;
+		break;
+	default:
+		goto err;
+	}
 
 	return 0;
 
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index 58315e0..6351626 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -180,7 +180,10 @@ static const struct val_snr qam64_snr_lut[] = {
 	{ 0x05570d, 26 },
 	{ 0x059feb, 27 },
 	{ 0x05bf38, 28 },
-	{ 0xff, 29 },
+	{ 0x05f78f, 29 },
+	{ 0x0612c3, 30 },
+	{ 0x0626be, 31 },
+	{ 0xff, 32 },
 };
 
 static const struct reg_val ofsm_init[] = {
-- 
1.7.0.4



[2/2] af9033: fix snr value not correct issue

2014-09-23 Thread Bimow Chen
Snr returns value not correct. Fix it.
From f3d5c9e2b01e666eca7aa66cd15b67609a0589ea Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 23 Sep 2014 17:23:31 +0800
Subject: [PATCH 2/2] af9033: fix snr value not correct issue

Snr returns value not correct. Fix it.

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   46 +++--
 drivers/media/dvb-frontends/af9033_priv.h |5 ++-
 2 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 0a0aeaf..37bd624 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -840,7 +840,7 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
 	struct af9033_state *state = fe-demodulator_priv;
 	int ret, i, len;
-	u8 buf[3], tmp;
+	u8 buf[3], tmp, tmp2;
 	u32 snr_val;
 	const struct val_snr *uninitialized_var(snr_lut);
 
@@ -851,6 +851,33 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 
 	snr_val = (buf[2]  16) | (buf[1]  8) | buf[0];
 
+	/* read superframe number */
+	ret = af9033_rd_reg(state, 0x80f78b, tmp);
+	if (ret  0)
+		goto err;
+
+	if (tmp)
+		snr_val /= tmp;
+
+	/* read current transmission mode */
+	ret = af9033_rd_reg(state, 0x80f900, tmp);
+	if (ret  0)
+		goto err;
+
+	switch ((tmp  0)  3) {
+	case 0:
+		snr_val *= 4;
+		break;
+	case 1:
+		snr_val *= 1;
+		break;
+	case 2:
+		snr_val *= 2;
+		break;
+	default:
+		goto err;
+	}
+
 	/* read current modulation */
 	ret = af9033_rd_reg(state, 0x80f903, tmp);
 	if (ret  0)
@@ -874,13 +901,26 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
 	}
 
 	for (i = 0; i  len; i++) {
-		tmp = snr_lut[i].snr;
+		tmp2 = snr_lut[i].snr;
 
 		if (snr_val  snr_lut[i].val)
 			break;
 	}
 
-	*snr = tmp * 10; /* dB/10 */
+	/* scale value to 0x-0x */
+	switch ((tmp  0)  3) {
+	case 0:
+		*snr = tmp2 * 0x / 23;
+		break;
+	case 1:
+		*snr = tmp2 * 0x / 26;
+		break;
+	case 2:
+		*snr = tmp2 * 0x / 32;
+		break;
+	default:
+		goto err;
+	}
 
 	return 0;
 
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index 58315e0..6351626 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -180,7 +180,10 @@ static const struct val_snr qam64_snr_lut[] = {
 	{ 0x05570d, 26 },
 	{ 0x059feb, 27 },
 	{ 0x05bf38, 28 },
-	{ 0xff, 29 },
+	{ 0x05f78f, 29 },
+	{ 0x0612c3, 30 },
+	{ 0x0626be, 31 },
+	{ 0xff, 32 },
 };
 
 static const struct reg_val ofsm_init[] = {
-- 
1.7.0.4



linux-firmware: add firmware v3.25.0.0 for ITEtech IT9135 DVB-T USB driver

2014-08-19 Thread Bimow Chen
Add two firmware files for ITEtech IT9135 Ax and Bx chip versions.
From c05fac0989dff376729609cd6baac2367929d990 Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 19 Aug 2014 15:19:56 +0800
Subject: [PATCH] Add firmware v3.25.0.0 for ITEtech IT9135 DVB-T USB driver

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 LICENCE.it913x   |   17 +
 WHENCE   |9 +
 dvb-usb-it9135-01.fw |  Bin 0 - 8128 bytes
 dvb-usb-it9135-02.fw |  Bin 0 - 5834 bytes
 4 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 LICENCE.it913x
 create mode 100644 dvb-usb-it9135-01.fw
 create mode 100644 dvb-usb-it9135-02.fw

diff --git a/LICENCE.it913x b/LICENCE.it913x
new file mode 100644
index 000..3706c18
--- /dev/null
+++ b/LICENCE.it913x
@@ -0,0 +1,17 @@
+Copyright (c) 2014, ITE Tech. Inc.
+
+The firmware files dvb-usb-it9135-01.fw and dvb-usb-it9135-02.fw 
+are for ITEtech it9135 Ax and Bx chip versions.
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted, provided that the 
+above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED AS IS AND THE AUTHOR DISCLAIMS ALL WARRANTIES 
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE 
+FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY 
+DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 
+SOFTWARE.
diff --git a/WHENCE b/WHENCE
index bd65d8c..3d46b76 100644
--- a/WHENCE
+++ b/WHENCE
@@ -2503,3 +2503,12 @@ File: intel/fw_sst_0f28.bin-48kHz_i2s_master
 License: Redistributable. See LICENCE.fw_sst_0f28 for details
 
 --
+
+Driver: it9135 -- ITEtech IT913x DVB-T USB driver
+
+File: dvb-usb-it9135-01.fw
+File: dvb-usb-it9135-02.fw
+
+Licence: Redistributable. See LICENCE.it913x for details
+
+--
diff --git a/dvb-usb-it9135-01.fw b/dvb-usb-it9135-01.fw
new file mode 100644
index ..ffb51223d26700a3691c19f006bb4cf043db33c5
GIT binary patch
literal 8128
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

linux-firmware: Add firmware v3.25.0.0 for ITEtech IT9135 DVB-T USB driver

2014-08-17 Thread Bimow Chen
Add two firmwares for ITEtech IT9135 Ax and Bx chip versions.
From 7f12471b97ff0a81a97d9133e10a5ebe4e7c0c11 Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Fri, 15 Aug 2014 13:44:19 +0800
Subject: [PATCH] it9135: add firmware v3.25.0.0 for ITEtech IT9135 DVB-T USB driver

Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 WHENCE   |   10 ++
 dvb-usb-it9135-01.fw |  Bin 0 - 8128 bytes
 dvb-usb-it9135-02.fw |  Bin 0 - 5834 bytes
 3 files changed, 10 insertions(+), 0 deletions(-)
 create mode 100644 dvb-usb-it9135-01.fw
 create mode 100644 dvb-usb-it9135-02.fw

diff --git a/WHENCE b/WHENCE
index bd65d8c..9c0ca10 100644
--- a/WHENCE
+++ b/WHENCE
@@ -2503,3 +2503,13 @@ File: intel/fw_sst_0f28.bin-48kHz_i2s_master
 License: Redistributable. See LICENCE.fw_sst_0f28 for details
 
 --
+
+Driver: it9135 -- ITEtech IT913x DVB-T USB driver
+
+File: dvb-usb-it9135-01.fw
+File: dvb-usb-it9135-02.fw
+Version: 3.25.0.0
+
+Licence: GPLv2 or later
+
+--
diff --git a/dvb-usb-it9135-01.fw b/dvb-usb-it9135-01.fw
new file mode 100644
index ..ffb51223d26700a3691c19f006bb4cf043db33c5
GIT binary patch
literal 8128
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

[PATCH 1/4] V4L/DVB: Update firmware of ITEtech IT9135

2014-08-04 Thread Bimow Chen

From b5f4f4c0060ed95ea93f1aadc361eaa71929176c Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Fri, 1 Aug 2014 17:19:58 +0800
Subject: [PATCH 1/4] Update firmware of ITEtech IT9135.


Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 Documentation/dvb/get_dvb_firmware |   24 +---
 1 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware
index d91b8be..efa100a 100755
--- a/Documentation/dvb/get_dvb_firmware
+++ b/Documentation/dvb/get_dvb_firmware
@@ -708,23 +708,25 @@ sub drxk_terratec_htc_stick {
 }
 
 sub it9135 {
-	my $sourcefile = dvb-usb-it9135.zip;
-	my $url = http://www.ite.com.tw/uploads/firmware/v3.6.0.0/$sourcefile;;
-	my $hash = 1e55f6c8833f1d0ae067c2bb2953e6a9;
-	my $tmpdir = tempdir(DIR = /tmp, CLEANUP = 0);
-	my $outfile = dvb-usb-it9135.fw;
+	my $url = http://www.ite.com.tw/uploads/firmware/v3.25.0.0/;;
+	my $file1 = dvb-usb-it9135-01.zip;
 	my $fwfile1 = dvb-usb-it9135-01.fw;
+	my $hash1 = 02fcf11174eda84745dae7e61c5ff9ba;
+	my $file2 = dvb-usb-it9135-02.zip;
 	my $fwfile2 = dvb-usb-it9135-02.fw;
+	my $hash2 = d5e1437dc24358578e07999475d4cac9;
 
 	checkstandard();
 
-	wgetfile($sourcefile, $url);
-	unzip($sourcefile, $tmpdir);
-	verify($tmpdir/$outfile, $hash);
-	extract($tmpdir/$outfile, 64, 8128, $fwfile1);
-	extract($tmpdir/$outfile, 12866, 5817, $fwfile2);
+	wgetfile($file1, $url . $file1);
+	unzip($file1, );
+	verify($fwfile1, $hash1);
+
+	wgetfile($file2, $url . $file2);
+	unzip($file2, );
+	verify($fwfile2, $hash2);
 
-	$fwfile1 $fwfile2
+	$file1 $file2
 }
 
 sub tda10071 {
-- 
1.7.0.4



[PATCH 2/4] V4L/DVB: Update tuner script for new firmware

2014-08-04 Thread Bimow Chen

From b3f9eb6e410ac317042cebdce5833dac8e276c1a Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 5 Aug 2014 10:31:46 +0800
Subject: [PATCH 2/4] Update tuner script for new firmware.


Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/dvb-frontends/af9033.c  |   14 ++
 drivers/media/dvb-frontends/af9033_priv.h |   20 +---
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index be4bec2..22cb62a 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -274,6 +274,20 @@ static int af9033_init(struct dvb_frontend *fe)
 		{ 0x800045, state-cfg.adc_multiplier, 0xff },
 	};
 
+	/* power up tuner - for performance */
+	switch (state-cfg.tuner) {
+	case AF9033_TUNER_IT9135_38:
+	case AF9033_TUNER_IT9135_51:
+	case AF9033_TUNER_IT9135_52:
+	case AF9033_TUNER_IT9135_60:
+	case AF9033_TUNER_IT9135_61:
+	case AF9033_TUNER_IT9135_62:
+		ret = af9033_wr_reg(state, 0x80ec40, 0x1);
+		ret |= af9033_wr_reg(state, 0x80fba8, 0x0);
+		if (ret  0)
+			goto err;
+	}
+
 	/* program clock control */
 	clock_cw = af9033_div(state, state-cfg.clock, 100ul, 19ul);
 	buf[0] = (clock_cw   0)  0xff;
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h
index fc2ad58..ded7b67 100644
--- a/drivers/media/dvb-frontends/af9033_priv.h
+++ b/drivers/media/dvb-frontends/af9033_priv.h
@@ -1418,7 +1418,7 @@ static const struct reg_val tuner_init_it9135_60[] = {
 	{ 0x800068, 0x0a },
 	{ 0x80006a, 0x03 },
 	{ 0x800070, 0x0a },
-	{ 0x800071, 0x05 },
+	{ 0x800071, 0x0a },
 	{ 0x800072, 0x02 },
 	{ 0x800075, 0x8c },
 	{ 0x800076, 0x8c },
@@ -1484,7 +1484,6 @@ static const struct reg_val tuner_init_it9135_60[] = {
 	{ 0x800104, 0x02 },
 	{ 0x800105, 0xbe },
 	{ 0x800106, 0x00 },
-	{ 0x800109, 0x02 },
 	{ 0x800115, 0x0a },
 	{ 0x800116, 0x03 },
 	{ 0x80011a, 0xbe },
@@ -1510,7 +1509,6 @@ static const struct reg_val tuner_init_it9135_60[] = {
 	{ 0x80014b, 0x8c },
 	{ 0x80014d, 0xac },
 	{ 0x80014e, 0xc6 },
-	{ 0x80014f, 0x03 },
 	{ 0x800151, 0x1e },
 	{ 0x800153, 0xbc },
 	{ 0x800178, 0x09 },
@@ -1522,9 +1520,10 @@ static const struct reg_val tuner_init_it9135_60[] = {
 	{ 0x80018d, 0x5f },
 	{ 0x80018f, 0xa0 },
 	{ 0x800190, 0x5a },
-	{ 0x80ed02, 0xff },
-	{ 0x80ee42, 0xff },
-	{ 0x80ee82, 0xff },
+	{ 0x800191, 0x00 },
+	{ 0x80ed02, 0x40 },
+	{ 0x80ee42, 0x40 },
+	{ 0x80ee82, 0x40 },
 	{ 0x80f000, 0x0f },
 	{ 0x80f01f, 0x8c },
 	{ 0x80f020, 0x00 },
@@ -1699,7 +1698,6 @@ static const struct reg_val tuner_init_it9135_61[] = {
 	{ 0x800104, 0x02 },
 	{ 0x800105, 0xc8 },
 	{ 0x800106, 0x00 },
-	{ 0x800109, 0x02 },
 	{ 0x800115, 0x0a },
 	{ 0x800116, 0x03 },
 	{ 0x80011a, 0xc6 },
@@ -1725,7 +1723,6 @@ static const struct reg_val tuner_init_it9135_61[] = {
 	{ 0x80014b, 0x8c },
 	{ 0x80014d, 0xa8 },
 	{ 0x80014e, 0xc6 },
-	{ 0x80014f, 0x03 },
 	{ 0x800151, 0x28 },
 	{ 0x800153, 0xcc },
 	{ 0x800178, 0x09 },
@@ -1737,9 +1734,10 @@ static const struct reg_val tuner_init_it9135_61[] = {
 	{ 0x80018d, 0x5f },
 	{ 0x80018f, 0xfb },
 	{ 0x800190, 0x5c },
-	{ 0x80ed02, 0xff },
-	{ 0x80ee42, 0xff },
-	{ 0x80ee82, 0xff },
+	{ 0x800191, 0x00 },
+	{ 0x80ed02, 0x40 },
+	{ 0x80ee42, 0x40 },
+	{ 0x80ee82, 0x40 },
 	{ 0x80f000, 0x0f },
 	{ 0x80f01f, 0x8c },
 	{ 0x80f020, 0x00 },
-- 
1.7.0.4



[PATCH 3/4] V4L/DVB: Update tuner initialization sequence

2014-08-04 Thread Bimow Chen

From 68df717c82f5da425a807a417872de0a9566211c Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 5 Aug 2014 11:14:47 +0800
Subject: [PATCH 3/4] Update tuner initialization sequence.


Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/tuners/tuner_it913x.c |   13 +
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/media/tuners/tuner_it913x.c b/drivers/media/tuners/tuner_it913x.c
index 6f30d7e..728de57 100644
--- a/drivers/media/tuners/tuner_it913x.c
+++ b/drivers/media/tuners/tuner_it913x.c
@@ -200,10 +200,7 @@ static int it913x_init(struct dvb_frontend *fe)
 		}
 	}
 
-	/* Power Up Tuner - common all versions */
-	ret = it913x_wr_reg(state, PRO_DMOD, 0xec40, 0x1);
-	ret |= it913x_wr_reg(state, PRO_DMOD, 0xfba8, 0x0);
-	ret |= it913x_wr_reg(state, PRO_DMOD, 0xec57, 0x0);
+	ret = it913x_wr_reg(state, PRO_DMOD, 0xec57, 0x0);
 	ret |= it913x_wr_reg(state, PRO_DMOD, 0xec58, 0x0);
 
 	return it913x_wr_reg(state, PRO_DMOD, 0xed81, val);
@@ -396,6 +393,7 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe,
 		struct i2c_adapter *i2c_adap, u8 i2c_addr, u8 config)
 {
 	struct it913x_state *state = NULL;
+	int ret;
 
 	/* allocate memory for the internal state */
 	state = kzalloc(sizeof(struct it913x_state), GFP_KERNEL);
@@ -429,6 +427,13 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe,
 	memcpy(fe-ops.tuner_ops, it913x_tuner_ops,
 			sizeof(struct dvb_tuner_ops));
 
+	/* tuner RF initial */
+	ret = it913x_wr_reg(state, PRO_DMOD, 0xec4c, 0x68);
+	if (ret  0)
+		goto error;
+
+	msleep(30);
+
 	dev_info(i2c_adap-dev,
 			%s: ITE Tech IT913X successfully attached\n,
 			KBUILD_MODNAME);
-- 
1.7.0.4



[PATCH 4/4] V4L/DVB: Add sleep for firmware ready

2014-08-04 Thread Bimow Chen

From b19fa868ce937a6ef10f1591a49b2a7ad14964a9 Mon Sep 17 00:00:00 2001
From: Bimow Chen bimow.c...@ite.com.tw
Date: Tue, 5 Aug 2014 11:20:53 +0800
Subject: [PATCH 4/4] Add sleep for firmware ready.


Signed-off-by: Bimow Chen bimow.c...@ite.com.tw
---
 drivers/media/usb/dvb-usb-v2/af9035.c |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 7b9b75f..a450cdb 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -602,6 +602,8 @@ static int af9035_download_firmware(struct dvb_usb_device *d,
 	if (ret  0)
 		goto err;
 
+	msleep(30);
+
 	/* firmware loaded, request boot */
 	req.cmd = CMD_FW_BOOT;
 	ret = af9035_ctrl_msg(d, req);
-- 
1.7.0.4