[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. 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
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
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
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
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
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
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
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
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
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
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
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
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