Re: [PATCH] media: dvb-frontends: add Socionext SC1501A ISDB-S/T demodulator driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Katsuhiro,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.17-rc5 next-20180514]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Katsuhiro-Suzuki/media-dvb-frontends-add-Socionext-SC1501A-ISDB-S-T-demodulator-driver/20180515-091453
base:   git://linuxtv.org/media_tree.git master
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/media/dvb-frontends/sc1501a.c:313:47: sparse: constant 211243671486 is so big it is long

vim +313 drivers/media/dvb-frontends/sc1501a.c

   258	
   259	static int sc1501a_s_read_status(struct sc1501a_priv *chip,
   260					 struct dtv_frontend_properties *c,
   261					 enum fe_status *status)
   262	{
   263		struct regmap *r_s = chip->regmap_s;
   264		u32 cpmon, tmpu, tmpl, flg;
   265		u64 tmp;
   266	
   267		/* Sync detection */
   268		regmap_read(r_s, CPMON1_S, &cpmon);
   269	
   270		*status = 0;
   271		if (cpmon & CPMON1_S_FSYNC)
   272			*status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
   273		if (cpmon & CPMON1_S_W2LOCK)
   274			*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER;
   275	
   276		/* Signal strength */
   277		c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
   278	
   279		if (*status & FE_HAS_SIGNAL) {
   280			u32 agc;
   281	
   282			regmap_read(r_s, AGCREAD_S, &tmpu);
   283			agc = tmpu << 8;
   284	
   285			c->strength.len = 1;
   286			c->strength.stat[0].scale = FE_SCALE_RELATIVE;
   287			c->strength.stat[0].uvalue = agc;
   288		}
   289	
   290		/* C/N rate */
   291		c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
   292	
   293		if (*status & FE_HAS_VITERBI) {
   294			u32 cnr = 0, x, y, d;
   295			u64 d_3 = 0;
   296	
   297			regmap_read(r_s, CNRDXU_S, &tmpu);
   298			regmap_read(r_s, CNRDXL_S, &tmpl);
   299			x = (tmpu << 8) | tmpl;
   300			regmap_read(r_s, CNRDYU_S, &tmpu);
   301			regmap_read(r_s, CNRDYL_S, &tmpl);
   302			y = (tmpu << 8) | tmpl;
   303	
   304			/* CNR[dB]: 10 * log10(D) - 30.74 / D^3 - 3 */
   305			/*   D = x^2 / (2^15 * y - x^2) */
   306			d = (y << 15) - x * x;
   307			if (d > 0) {
   308				/* (2^4 * D)^3 = 2^12 * D^3 */
   309				/* 3.074 * 2^(12 + 24) = 211243671486 */
   310				d_3 = div_u64(16 * x * x, d);
   311				d_3 = d_3 * d_3 * d_3;
   312				if (d_3)
 > 313					d_3 = div_u64(211243671486, d_3);
   314			}
   315	
   316			if (d_3) {
   317				/* 0.3 * 2^24 = 5033164 */
   318				tmp = (s64)2 * intlog10(x) - intlog10(abs(d)) - d_3
   319					- 5033164;
   320				cnr = div_u64(tmp * 10000, 1 << 24);
   321			}
   322	
   323			if (cnr) {
   324				c->cnr.len = 1;
   325				c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
   326				c->cnr.stat[0].uvalue = cnr;
   327			}
   328		}
   329	
   330		/* BER */
   331		c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
   332		c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
   333	
   334		regmap_read(r_s, BERCNFLG_S, &flg);
   335	
   336		if ((*status & FE_HAS_VITERBI) && (flg & BERCNFLG_S_BERVRDY)) {
   337			u32 bit_err, bit_cnt;
   338	
   339			regmap_read(r_s, BERVRDU_S, &tmpu);
   340			regmap_read(r_s, BERVRDL_S, &tmpl);
   341			bit_err = (tmpu << 8) | tmpl;
   342			bit_cnt = (1 << 13) * 204;
   343	
   344			if (bit_cnt) {
   345				c->post_bit_error.len = 1;
   346				c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
   347				c->post_bit_error.stat[0].uvalue = bit_err;
   348				c->post_bit_count.len = 1;
   349				c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
   350				c->post_bit_count.stat[0].uvalue = bit_cnt;
   351			}
   352		}
   353	
   354		return 0;
   355	}
   356	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux