瀏覽代碼

[media] fc2580: calculate filter control word dynamically

Calculate low-pass filter control word dynamically from given radio
channel bandwidth.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Antti Palosaari 10 年之前
父節點
當前提交
8b302d43e8
共有 2 個文件被更改,包括 8 次插入9 次删除
  1. 4 4
      drivers/media/tuners/fc2580.c
  2. 4 5
      drivers/media/tuners/fc2580_priv.h

+ 4 - 4
drivers/media/tuners/fc2580.c

@@ -46,7 +46,7 @@ static int fc2580_set_params(struct dvb_frontend *fe)
 	int ret, i;
 	unsigned int uitmp, div_ref, div_ref_val, div_n, k, k_cw, div_out;
 	u64 f_vco;
-	u8 u8tmp, synth_config;
+	u8 synth_config;
 	unsigned long timeout;
 
 	dev_dbg(&client->dev,
@@ -249,9 +249,9 @@ static int fc2580_set_params(struct dvb_frontend *fe)
 	if (ret)
 		goto err;
 
-	u8tmp = div_u64((u64) dev->clk * fc2580_if_filter_lut[i].mul,
-			1000000000);
-	ret = regmap_write(dev->regmap, 0x37, u8tmp);
+	uitmp = (unsigned int) 8058000 - (c->bandwidth_hz * 122 / 100 / 2);
+	uitmp = div64_u64((u64) dev->clk * uitmp, 1000000000000ULL);
+	ret = regmap_write(dev->regmap, 0x37, uitmp);
 	if (ret)
 		goto err;
 

+ 4 - 5
drivers/media/tuners/fc2580_priv.h

@@ -64,16 +64,15 @@ static const struct fc2580_pll fc2580_pll_lut[] = {
 
 struct fc2580_if_filter {
 	u32 freq;
-	u16 mul;
 	u8 r36_val;
 	u8 r39_val;
 };
 
 static const struct fc2580_if_filter fc2580_if_filter_lut[] = {
-	{   6000000, 4400, 0x18, 0x00},
-	{   7000000, 3910, 0x18, 0x80},
-	{   8000000, 3300, 0x18, 0x80},
-	{0xffffffff, 3300, 0x18, 0x80},
+	{   6000000, 0x18, 0x00},
+	{   7000000, 0x18, 0x80},
+	{   8000000, 0x18, 0x80},
+	{0xffffffff, 0x18, 0x80},
 };
 
 struct fc2580_freq_regs {