Commit 4ac95af9 authored by Hartmut Hackmann's avatar Hartmut Hackmann Committed by Linus Torvalds

[PATCH] V4L: 896: fixed tda8290 secam l

Fixed tda8290 SECAM-L
Signed-off-by: default avatarHartmut Hackmann <hartmut.hackmann@t.online.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 22ae2550
...@@ -323,6 +323,7 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq) ...@@ -323,6 +323,7 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
i2c_master_send(c, soft_reset, 2); i2c_master_send(c, soft_reset, 2);
msleep(1); msleep(1);
expert_mode[1] = t->tda8290_easy_mode + 0x80;
i2c_master_send(c, expert_mode, 2); i2c_master_send(c, expert_mode, 2);
i2c_master_send(c, gainset_off, 2); i2c_master_send(c, gainset_off, 2);
i2c_master_send(c, if_agc_spd, 2); i2c_master_send(c, if_agc_spd, 2);
...@@ -348,8 +349,9 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq) ...@@ -348,8 +349,9 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
tuner_dbg("tda8290 is locked, AGC: %d\n", agc_stat); tuner_dbg("tda8290 is locked, AGC: %d\n", agc_stat);
else else
tuner_dbg("tda8290 not locked, no signal?\n"); tuner_dbg("tda8290 not locked, no signal?\n");
if ((agc_stat > 115) || (!(pll_stat & 0x80) && (adc_sat <20))) { if ((agc_stat > 115) || (!(pll_stat & 0x80) && (adc_sat < 20))) {
tuner_dbg("adjust gain, step 1. Agc: %d\n", agc_stat); tuner_dbg("adjust gain, step 1. Agc: %d, ADC stat: %d, lock: %d\n",
agc_stat, adc_sat, pll_stat & 0x80);
i2c_master_send(c, gainset_2, 2); i2c_master_send(c, gainset_2, 2);
msleep(100); msleep(100);
i2c_master_send(c, &addr_agc_stat, 1); i2c_master_send(c, &addr_agc_stat, 1);
...@@ -357,7 +359,8 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq) ...@@ -357,7 +359,8 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
i2c_master_send(c, &addr_pll_stat, 1); i2c_master_send(c, &addr_pll_stat, 1);
i2c_master_recv(c, &pll_stat, 1); i2c_master_recv(c, &pll_stat, 1);
if ((agc_stat > 115) || !(pll_stat & 0x80)) { if ((agc_stat > 115) || !(pll_stat & 0x80)) {
tuner_dbg("adjust gain, step 2. Agc: %d\n", agc_stat); tuner_dbg("adjust gain, step 2. Agc: %d, lock: %d\n",
agc_stat, pll_stat & 0x80);
if (t->tda827x_ver != 0) if (t->tda827x_ver != 0)
tda827xa_agcf(c); tda827xa_agcf(c);
else else
...@@ -383,6 +386,7 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq) ...@@ -383,6 +386,7 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
i2c_master_send(c, &addr_pll_stat, 1); i2c_master_send(c, &addr_pll_stat, 1);
i2c_master_recv(c, &pll_stat, 1); i2c_master_recv(c, &pll_stat, 1);
if ((adc_sat > 20) || !(pll_stat & 0x80)) { if ((adc_sat > 20) || !(pll_stat & 0x80)) {
tuner_dbg("trying to resolve SECAM L deadlock\n");
i2c_master_send(c, agc_rst_on, 2); i2c_master_send(c, agc_rst_on, 2);
msleep(40); msleep(40);
i2c_master_send(c, agc_rst_off, 2); i2c_master_send(c, agc_rst_off, 2);
...@@ -404,28 +408,37 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq) ...@@ -404,28 +408,37 @@ static int tda8290_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
static void set_audio(struct tuner *t) static void set_audio(struct tuner *t)
{ {
t->tda827x_lpsel = 0; char* mode;
t->tda827x_lpsel = 0;
mode = "xx";
if (t->std & V4L2_STD_MN) { if (t->std & V4L2_STD_MN) {
t->sgIF = 92; t->sgIF = 92;
t->tda8290_easy_mode = 0x01; t->tda8290_easy_mode = 0x01;
t->tda827x_lpsel = 1; t->tda827x_lpsel = 1;
mode = "MN";
} else if (t->std & V4L2_STD_B) { } else if (t->std & V4L2_STD_B) {
t->sgIF = 108; t->sgIF = 108;
t->tda8290_easy_mode = 0x02; t->tda8290_easy_mode = 0x02;
mode = "B";
} else if (t->std & V4L2_STD_GH) { } else if (t->std & V4L2_STD_GH) {
t->sgIF = 124; t->sgIF = 124;
t->tda8290_easy_mode = 0x04; t->tda8290_easy_mode = 0x04;
mode = "GH";
} else if (t->std & V4L2_STD_PAL_I) { } else if (t->std & V4L2_STD_PAL_I) {
t->sgIF = 124; t->sgIF = 124;
t->tda8290_easy_mode = 0x08; t->tda8290_easy_mode = 0x08;
mode = "I";
} else if (t->std & V4L2_STD_DK) { } else if (t->std & V4L2_STD_DK) {
t->sgIF = 124; t->sgIF = 124;
t->tda8290_easy_mode = 0x10; t->tda8290_easy_mode = 0x10;
mode = "DK";
} else if (t->std & V4L2_STD_SECAM_L) { } else if (t->std & V4L2_STD_SECAM_L) {
t->sgIF = 124; t->sgIF = 124;
t->tda8290_easy_mode = 0x20; t->tda8290_easy_mode = 0x20;
mode = "L";
} }
tuner_dbg("setting tda8290 to system %s\n", mode);
} }
static void set_tv_freq(struct i2c_client *c, unsigned int freq) static void set_tv_freq(struct i2c_client *c, unsigned int freq)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment