Space & style cleanup of hw/xfree86/i2c/fi1236.c
Fortunately, the massive decrease in the cost of whitespace in the past decade has allowed us to be much more generous with it, and much more consistent in its application, even for code like this that clearly no one has ever tried to read. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
parent
c46215c100
commit
c8eacae4f8
|
@ -1,4 +1,3 @@
|
|||
|
||||
#ifdef HAVE_XORG_CONFIG_H
|
||||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
@ -41,13 +40,15 @@ const FI1236_parameters tuner_parms[NUM_TUNERS] =
|
|||
};
|
||||
|
||||
|
||||
FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr)
|
||||
FI1236Ptr
|
||||
Detect_FI1236 (I2CBusPtr b, I2CSlaveAddr addr)
|
||||
{
|
||||
FI1236Ptr f;
|
||||
I2CByte a;
|
||||
|
||||
f = calloc(1,sizeof(FI1236Rec));
|
||||
if(f == NULL) return NULL;
|
||||
if (f == NULL)
|
||||
return NULL;
|
||||
f->d.DevName = strdup("FI12xx Tuner");
|
||||
f->d.SlaveAddr = addr;
|
||||
f->d.pI2CBus = b;
|
||||
|
@ -61,45 +62,49 @@ FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr)
|
|||
f->last_afc_hint=TUNER_OFF;
|
||||
f->video_if=45.7812;
|
||||
|
||||
if(!I2C_WriteRead(&(f->d), NULL, 0, &a, 1))
|
||||
{
|
||||
if (!I2C_WriteRead(&(f->d), NULL, 0, &a, 1)) {
|
||||
free(f);
|
||||
return NULL;
|
||||
}
|
||||
FI1236_set_tuner_type(f, TUNER_TYPE_FI1236);
|
||||
if(!I2CDevInit(&(f->d)))
|
||||
{
|
||||
if (!I2CDevInit(&(f->d))) {
|
||||
free(f);
|
||||
return NULL;
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
static void MT2032_dump_parameters(FI1236Ptr f, MT2032_parameters *m)
|
||||
static void
|
||||
MT2032_dump_parameters (FI1236Ptr f, MT2032_parameters *m)
|
||||
{
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: input f_rf=%g f_if1=%g f_if2=%g f_ref=%g f_ifbw=%g f_step=%g\n",
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: input f_rf=%g f_if1=%g f_if2=%g f_ref=%g f_ifbw=%g f_step=%g\n",
|
||||
m->f_rf, m->f_if1, m->f_if2, m->f_ref, m->f_ifbw, m->f_step);
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: computed f_lo1=%g f_lo2=%g LO1I=%d LO2I=%d SEL=%d STEP=%d NUM=%d\n",
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: computed f_lo1=%g f_lo2=%g LO1I=%d LO2I=%d SEL=%d STEP=%d NUM=%d\n",
|
||||
m->f_lo1, m->f_lo2, m->LO1I, m->LO2I, m->SEL, m->STEP, m->NUM);
|
||||
}
|
||||
|
||||
|
||||
static void MT2032_getid(FI1236Ptr f)
|
||||
static void
|
||||
MT2032_getid (FI1236Ptr f)
|
||||
{
|
||||
CARD8 out[4];
|
||||
CARD8 in;
|
||||
|
||||
in = 0x11;
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)&in, 1, out, 4);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: Company code 0x%02x%02x, part code 0x%02x, revision code 0x%02x\n",
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: Company code 0x%02x%02x, part code 0x%02x, revision code 0x%02x\n",
|
||||
out[0], out[1], out[2], out[3]);
|
||||
|
||||
}
|
||||
|
||||
/* might be buggy */
|
||||
#if 0
|
||||
static void MT2032_shutdown(FI1236Ptr f)
|
||||
static void
|
||||
MT2032_shutdown (FI1236Ptr f)
|
||||
{
|
||||
CARD8 data[10];
|
||||
|
||||
|
@ -128,7 +133,8 @@ usleep(15000);
|
|||
|
||||
static void MT2032_dump_status (FI1236Ptr f);
|
||||
|
||||
static void MT2032_init(FI1236Ptr f)
|
||||
static void
|
||||
MT2032_init (FI1236Ptr f)
|
||||
{
|
||||
CARD8 data[10];
|
||||
CARD8 value;
|
||||
|
@ -161,20 +167,24 @@ while(1) {
|
|||
data[0] = 0x0e; /* register number 7, status */
|
||||
value = 0xFF;
|
||||
if (!I2C_WriteRead(&(f->d), (I2CByte *)data, 1, &value, 1))
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: failed to read XOK\n");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: XOK=%d\n", value & 0x01);
|
||||
if(value & 1) break;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: failed to read XOK\n");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: XOK=%d\n", value & 0x01);
|
||||
if (value & 1)
|
||||
break;
|
||||
|
||||
data[0] = 0x07;
|
||||
if (!I2C_WriteRead(&(f->d), (I2CByte *)data, 1, &value, 1))
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: failed to read XOGC\n");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: failed to read XOGC\n");
|
||||
|
||||
xogc=value & 0x7;
|
||||
if(xogc==4){
|
||||
if (xogc == 4)
|
||||
break; /* XOGC has reached 4.. stop */
|
||||
}
|
||||
xogc--;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: try XOGC=%d\n", xogc);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: try XOGC=%d\n", xogc);
|
||||
usleep(15000);
|
||||
data[0] = 0x07; /* register number 7, control byte 2 */
|
||||
data[1] = 0x08 | xogc;
|
||||
|
@ -186,7 +196,8 @@ usleep(15000); /* wait 50 milliseconds */
|
|||
MT2032_dump_status(f);
|
||||
}
|
||||
|
||||
static int MT2032_no_spur_in_band(MT2032_parameters *m)
|
||||
static int
|
||||
MT2032_no_spur_in_band (MT2032_parameters *m)
|
||||
{
|
||||
int n_max, n1, n2;
|
||||
double f_test;
|
||||
|
@ -198,23 +209,32 @@ while(1){
|
|||
while (1) {
|
||||
n2--;
|
||||
f_test = f_test - m->f_lo2;
|
||||
xf86DrvMsg(0, X_INFO, "testing f_test=%g n1=%d n2=%d f_lo1=%g f_lo2=%g f_if2=%g\n", f_test, n1, n2, m->f_lo1, m->f_lo2, m->f_if2);
|
||||
xf86DrvMsg(0, X_INFO, "d_f=%g f_ifbw=%g\n",fabs(fabs(f_test)-m->f_if2), m->f_ifbw);
|
||||
if((fabs(fabs(f_test)-m->f_if2)*2.0)<=m->f_ifbw)return 0;
|
||||
if(n2<=-n_max)break;
|
||||
xf86DrvMsg(0, X_INFO,
|
||||
"testing f_test=%g n1=%d n2=%d f_lo1=%g f_lo2=%g f_if2=%g\n",
|
||||
f_test, n1, n2, m->f_lo1, m->f_lo2, m->f_if2);
|
||||
xf86DrvMsg(0, X_INFO, "d_f=%g f_ifbw=%g\n",
|
||||
fabs(fabs(f_test) - m->f_if2), m->f_ifbw);
|
||||
if ((fabs(fabs(f_test) - m->f_if2) * 2.0) <= m->f_ifbw)
|
||||
return 0;
|
||||
if (n2 <= -n_max)
|
||||
break;
|
||||
/* this line in the manual is bogus. I say it is faster
|
||||
and more correct to go over all harmonics.. */
|
||||
#if 0
|
||||
if(f_test<(m->f_lo2-m->f_if2-m->f_ifbw))break;
|
||||
if (f_test < (m->f_lo2 - m->f_if2 - m->f_ifbw))
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
n1++;
|
||||
if(n1>=n_max)return 1;
|
||||
if (n1 >= n_max)
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void MT2032_calculate_register_settings(MT2032_parameters *m, double f_rf, double f_if1, double f_if2, double f_ref, double f_ifbw, double f_step)
|
||||
static void
|
||||
MT2032_calculate_register_settings (MT2032_parameters *m, double f_rf,
|
||||
double f_if1, double f_if2, double f_ref, double f_ifbw, double f_step)
|
||||
{
|
||||
int n;
|
||||
m->f_rf = f_rf;
|
||||
|
@ -233,12 +253,14 @@ m->f_lo2=m->f_lo1-f_rf-f_if2;
|
|||
/* check for spurs */
|
||||
n = 1;
|
||||
while (n < 3) {
|
||||
if(MT2032_no_spur_in_band(m))break;
|
||||
if(m->f_lo1<(f_rf+f_if1)){
|
||||
if (MT2032_no_spur_in_band(m))
|
||||
break;
|
||||
|
||||
if (m->f_lo1 < (f_rf + f_if1))
|
||||
m->LO1I += n;
|
||||
} else {
|
||||
else
|
||||
m->LO1I -= n;
|
||||
}
|
||||
|
||||
m->f_lo1 = m->LO1I * f_ref;
|
||||
m->f_lo2 = m->f_lo1 - f_rf - f_if2;
|
||||
n++;
|
||||
|
@ -247,13 +269,14 @@ while(n<3){
|
|||
/* select VCO */
|
||||
|
||||
/* m->f_lo1>1100.0 */
|
||||
if(m->f_lo1<1370.0)m->SEL=4;
|
||||
else
|
||||
if(m->f_lo1<1530.0)m->SEL=3;
|
||||
else
|
||||
if(m->f_lo1<1720.0)m->SEL=2;
|
||||
else
|
||||
if(m->f_lo1<1890.0)m->SEL=1;
|
||||
if (m->f_lo1 < 1370.0)
|
||||
m->SEL = 4;
|
||||
else if (m->f_lo1 < 1530.0)
|
||||
m->SEL = 3;
|
||||
else if (m->f_lo1 < 1720.0)
|
||||
m->SEL = 2;
|
||||
else if (m->f_lo1 < 1890.0)
|
||||
m->SEL = 1;
|
||||
else /* m->f_lo1 < 1958.0 */
|
||||
m->SEL = 0;
|
||||
|
||||
|
@ -264,7 +287,8 @@ m->NUM=floor(3780.0*(m->f_lo2/f_ref-m->LO2I));
|
|||
m->NUM = m->STEP * lrint((1.0 * m->NUM) / (1.0 * m->STEP));
|
||||
}
|
||||
|
||||
static int MT2032_wait_for_lock(FI1236Ptr f)
|
||||
static int
|
||||
MT2032_wait_for_lock (FI1236Ptr f)
|
||||
{
|
||||
int n;
|
||||
CARD8 data[10];
|
||||
|
@ -274,20 +298,26 @@ n=12;
|
|||
while(1) {
|
||||
data[0] = 0x0e; /* register number 7, status */
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 1, &value, 1);
|
||||
/* xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: LO1LK=%d LO2LK=%d\n", (value & 0x04)>>2, (value & 0x02)>>1); */
|
||||
if((value & 6)==6) break;
|
||||
/* xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: LO1LK=%d LO2LK=%d\n",
|
||||
(value & 0x04)>>2, (value & 0x02)>>1); */
|
||||
if ((value & 6)==6)
|
||||
break;
|
||||
usleep (1500);
|
||||
n--;
|
||||
if(n<0)break;
|
||||
if (n < 0)
|
||||
break;
|
||||
}
|
||||
if (n < 0) {
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: failed to set frequency\n");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: failed to set frequency\n");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void MT2032_implement_settings(FI1236Ptr f, MT2032_parameters *m)
|
||||
static void
|
||||
MT2032_implement_settings (FI1236Ptr f, MT2032_parameters *m)
|
||||
{
|
||||
CARD8 data[10];
|
||||
CARD8 value;
|
||||
|
@ -300,13 +330,16 @@ I2C_WriteRead(&(f->d), (I2CByte *)data, 4, NULL, 0);
|
|||
|
||||
data[0] = 0x05; /* start with register 0x05 */
|
||||
data[1] = ((m->LO2I & 0x7) << 5) | ((m->LO2I >> 3) - 1);
|
||||
if(m->f_rf<400.0)data[2]=0xe4;
|
||||
else data[2]=0xf4;
|
||||
if (m->f_rf < 400.0)
|
||||
data[2] = 0xe4;
|
||||
else
|
||||
data[2] = 0xf4;
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 3, NULL, 0);
|
||||
|
||||
data[0] = 0x07; /* register number 7, control byte 2 */
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 1, &value, 1);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: using XOGC=%d\n", (value & 0x07));
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: using XOGC=%d\n", (value & 0x07));
|
||||
data[1] = 8 | (value & 0x7);
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 2, NULL, 0);
|
||||
|
||||
|
@ -318,7 +351,8 @@ I2C_WriteRead(&(f->d), (I2CByte *)data, 3, NULL, 0);
|
|||
MT2032_wait_for_lock(f);
|
||||
}
|
||||
|
||||
static void MT2032_optimize_VCO(FI1236Ptr f, MT2032_parameters *m)
|
||||
static void
|
||||
MT2032_optimize_VCO (FI1236Ptr f, MT2032_parameters *m)
|
||||
{
|
||||
CARD8 data[10];
|
||||
CARD8 value;
|
||||
|
@ -327,13 +361,17 @@ CARD8 TAD1;
|
|||
data[0] = 0x0f; /* register number 7, status */
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 1, &value, 1);
|
||||
TAD1=value & 0x07;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: TAD1=%d SEL=%d\n", TAD1, m->SEL);
|
||||
if(TAD1 < 2)return;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: TAD1=%d SEL=%d\n", TAD1, m->SEL);
|
||||
if (TAD1 < 2)
|
||||
return;
|
||||
if (TAD1 == 2) {
|
||||
if(m->SEL==0)return;
|
||||
if (m->SEL == 0)
|
||||
return;
|
||||
m->SEL--;
|
||||
} else {
|
||||
if(m->SEL>=4)return;
|
||||
if (m->SEL >= 4)
|
||||
return;
|
||||
m->SEL++;
|
||||
}
|
||||
data[0] = 0x01; /* start with register 1 */
|
||||
|
@ -342,13 +380,13 @@ I2C_WriteRead(&(f->d), (I2CByte *)data, 2, NULL, 0);
|
|||
|
||||
}
|
||||
|
||||
static int FI1236_get_afc_hint(FI1236Ptr f)
|
||||
static int
|
||||
FI1236_get_afc_hint (FI1236Ptr f)
|
||||
{
|
||||
CARD8 out;
|
||||
CARD8 AFC;
|
||||
|
||||
if ((f->type == TUNER_TYPE_FM1216ME) || (f->type == TUNER_TYPE_FI1236W))
|
||||
{
|
||||
if ((f->type == TUNER_TYPE_FM1216ME) || (f->type == TUNER_TYPE_FI1236W)) {
|
||||
TDA9885Ptr t = (TDA9885Ptr)f->afc_source;
|
||||
if (t == NULL)
|
||||
return TUNER_OFF;
|
||||
|
@ -357,26 +395,34 @@ static int FI1236_get_afc_hint(FI1236Ptr f)
|
|||
tda9885_dumpstatus(t);
|
||||
AFC = t->afc_status & 0x0f;
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: FI1236_get_afc_hint: %i\n", AFC);
|
||||
if (AFC == 0) return TUNER_TUNED;
|
||||
else if (AFC <= 0x07)return TUNER_JUST_BELOW;
|
||||
else if (AFC < 0x0f )return TUNER_JUST_ABOVE;
|
||||
else if (AFC == 0x0f)return TUNER_TUNED;
|
||||
}
|
||||
else
|
||||
{
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: FI1236_get_afc_hint: %i\n", AFC);
|
||||
if (AFC == 0)
|
||||
return TUNER_TUNED;
|
||||
else if (AFC <= 0x07)
|
||||
return TUNER_JUST_BELOW;
|
||||
else if (AFC < 0x0f)
|
||||
return TUNER_JUST_ABOVE;
|
||||
else if (AFC == 0x0f)
|
||||
return TUNER_TUNED;
|
||||
} else {
|
||||
I2C_WriteRead(&(f->d), NULL, 0, &out, 1);
|
||||
AFC = out & 0x7;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: FI1236_get_afc_hint: %i\n", AFC);
|
||||
if(AFC==2)return TUNER_TUNED;
|
||||
if(AFC==3)return TUNER_JUST_BELOW;
|
||||
if(AFC==1)return TUNER_JUST_ABOVE;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: FI1236_get_afc_hint: %i\n", AFC);
|
||||
if (AFC == 2)
|
||||
return TUNER_TUNED;
|
||||
if (AFC == 3)
|
||||
return TUNER_JUST_BELOW;
|
||||
if (AFC == 1)
|
||||
return TUNER_JUST_ABOVE;
|
||||
return TUNER_OFF;
|
||||
}
|
||||
return TUNER_OFF;
|
||||
}
|
||||
|
||||
static int MT2032_get_afc_hint(FI1236Ptr f)
|
||||
static int
|
||||
MT2032_get_afc_hint (FI1236Ptr f)
|
||||
{
|
||||
CARD8 in;
|
||||
CARD8 out[2];
|
||||
|
@ -385,22 +431,29 @@ in=0x0e;
|
|||
I2C_WriteRead(&(f->d), (I2CByte *)&in, 1, out, 2);
|
||||
AFC = (out[0] >> 4) & 0x7;
|
||||
#if 0
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC=%d TAD1=%d TAD2=%d\n", AFC, out[1] & 0x7, (out[1]>>4)& 0x07);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC=%d TAD1=%d TAD2=%d\n",
|
||||
AFC, out[1] & 0x7, (out[1]>>4)& 0x07);
|
||||
#endif
|
||||
if(AFC==2)return TUNER_TUNED;
|
||||
if(AFC==3)return TUNER_JUST_BELOW;
|
||||
if(AFC==1)return TUNER_JUST_ABOVE;
|
||||
if (AFC == 2)
|
||||
return TUNER_TUNED;
|
||||
if (AFC == 3)
|
||||
return TUNER_JUST_BELOW;
|
||||
if (AFC == 1)
|
||||
return TUNER_JUST_ABOVE;
|
||||
return TUNER_OFF;
|
||||
}
|
||||
|
||||
/* this function is for external use only */
|
||||
int TUNER_get_afc_hint(FI1236Ptr f)
|
||||
int
|
||||
TUNER_get_afc_hint (FI1236Ptr f)
|
||||
{
|
||||
if(f->afc_timer_installed)return TUNER_STILL_TUNING;
|
||||
if (f->afc_timer_installed)
|
||||
return TUNER_STILL_TUNING;
|
||||
return f->last_afc_hint;
|
||||
}
|
||||
|
||||
static void MT2032_dump_status(FI1236Ptr f)
|
||||
static void
|
||||
MT2032_dump_status (FI1236Ptr f)
|
||||
{
|
||||
CARD8 in;
|
||||
CARD8 out[2];
|
||||
|
@ -421,10 +474,14 @@ AFC=(out[0]>>4) & 0x7;
|
|||
TAD1 = (out[1] & 0x7);
|
||||
TAD2 = (out[1] >> 4) & 0x7;
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: status: XOK=%d LO1LK=%d LO2LK=%d LDONrb=%d AFC=%d TAD1=%d TAD2=%d\n",
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: status: XOK=%d LO1LK=%d LO2LK=%d LDONrb=%d AFC=%d TAD1=%d TAD2=%d\n",
|
||||
XOK, LO1LK, LO2LK, LDONrb, AFC, TAD1, TAD2);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: status: OSCILLATOR:%s PLL1:%s PLL2:%s\n",
|
||||
XOK ? "ok":"off", LO1LK ? "locked" : "off" , LO2LK ? "locked" : "off");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: status: OSCILLATOR:%s PLL1:%s PLL2:%s\n",
|
||||
XOK ? "ok" : "off",
|
||||
LO1LK ? "locked" : "off",
|
||||
LO2LK ? "locked" : "off");
|
||||
|
||||
}
|
||||
|
||||
|
@ -433,6 +490,7 @@ static void MT2032_tune(FI1236Ptr f, double freq, double step)
|
|||
MT2032_parameters m;
|
||||
CARD8 data[10];
|
||||
int i;
|
||||
|
||||
/* NTSC IF is 44mhz.. but 733/16=45.8125 and all TDAXXXX docs mention
|
||||
45.75, 39, 58.75 and 30. */
|
||||
#if 0
|
||||
|
@ -458,14 +516,18 @@ for(i=0;i<3;i++){
|
|||
data[1] = 0x08 | f->xogc;
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)data, 2, NULL, 0);
|
||||
}
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: failed to set frequency\n");
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"MT2032: failed to set frequency\n");
|
||||
}
|
||||
|
||||
void FI1236_set_tuner_type(FI1236Ptr f, int type)
|
||||
void
|
||||
FI1236_set_tuner_type (FI1236Ptr f, int type)
|
||||
{
|
||||
f->type = type;
|
||||
if(type>=NUM_TUNERS)type = NUM_TUNERS-1;
|
||||
if(type<0)type = 0;
|
||||
if (type >= NUM_TUNERS)
|
||||
type = NUM_TUNERS-1;
|
||||
if (type < 0)
|
||||
type = 0;
|
||||
memcpy(&(f->parm), &(tuner_parms[type]), sizeof(FI1236_parameters));
|
||||
f->original_frequency = f->parm.min_freq;
|
||||
f->afc_delta = 0;
|
||||
|
@ -476,9 +538,12 @@ if(type==TUNER_TYPE_MT2032){
|
|||
}
|
||||
|
||||
|
||||
static CARD32 AFC_TimerCallback(OsTimerPtr timer, CARD32 time, pointer data){
|
||||
static CARD32
|
||||
AFC_TimerCallback(OsTimerPtr timer, CARD32 time, pointer data)
|
||||
{
|
||||
FI1236Ptr f = (FI1236Ptr)data;
|
||||
if(FI1236_AFC(f))return 150;
|
||||
if (FI1236_AFC(f))
|
||||
return 150;
|
||||
else {
|
||||
f->afc_timer_installed = FALSE;
|
||||
f->afc_count = 0;
|
||||
|
@ -486,7 +551,8 @@ if(FI1236_AFC(f))return 150;
|
|||
}
|
||||
}
|
||||
|
||||
void FI1236_tune(FI1236Ptr f, CARD32 frequency)
|
||||
void
|
||||
FI1236_tune(FI1236Ptr f, CARD32 frequency)
|
||||
{
|
||||
CARD16 divider;
|
||||
CARD8 data;
|
||||
|
@ -500,35 +566,30 @@ void FI1236_tune(FI1236Ptr f, CARD32 frequency)
|
|||
f->tuner_data.control = f->parm.control;
|
||||
|
||||
if (frequency < f->parm.threshold1)
|
||||
{
|
||||
f->tuner_data.band = f->parm.band_low;
|
||||
}
|
||||
else if (frequency < f->parm.threshold2)
|
||||
{
|
||||
f->tuner_data.band = f->parm.band_mid;
|
||||
}
|
||||
else
|
||||
{
|
||||
f->tuner_data.band = f->parm.band_high;
|
||||
}
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "Setting tuner band to %d\n", f->tuner_data.band);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"Setting tuner band to %d\n", f->tuner_data.band);
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "Setting tuner frequency to %d\n", (int)frequency);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"Setting tuner frequency to %d\n", (int)frequency);
|
||||
|
||||
if ((f->type == TUNER_TYPE_FM1216ME) || (f->type == TUNER_TYPE_FI1236W))
|
||||
{
|
||||
if ((f->type == TUNER_TYPE_FM1216ME) || (f->type == TUNER_TYPE_FI1236W)) {
|
||||
f->tuner_data.aux = 0x20;
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)&(f->tuner_data), 5, NULL, 0);
|
||||
I2C_WriteRead(&(f->d), NULL, 0, &data, 1);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "Tuner status %x\n", data);
|
||||
|
||||
}
|
||||
else
|
||||
I2C_WriteRead(&(f->d), (I2CByte *)&(f->tuner_data), 4, NULL, 0);
|
||||
}
|
||||
|
||||
void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
|
||||
void
|
||||
TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
|
||||
{
|
||||
if (frequency < f->parm.min_freq) frequency = f->parm.min_freq;
|
||||
if (frequency > f->parm.max_freq) frequency = f->parm.max_freq;
|
||||
|
@ -537,15 +598,11 @@ void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
|
|||
f->original_frequency=frequency;
|
||||
|
||||
if (f->type == TUNER_TYPE_MT2032)
|
||||
{
|
||||
MT2032_tune(f, (1.0*frequency)/16.0, 0.0625);
|
||||
} else
|
||||
{
|
||||
else
|
||||
FI1236_tune(f, frequency);
|
||||
}
|
||||
|
||||
if(!f->afc_timer_installed)
|
||||
{
|
||||
if (!f->afc_timer_installed) {
|
||||
f->afc_timer_installed=TRUE;
|
||||
/* RegisterBlockAndWakeupHandlers(FI1236_BlockHandler, AFCWakeup, f); */
|
||||
TimerSet(NULL, 0, 300, AFC_TimerCallback, f);
|
||||
|
@ -554,52 +611,65 @@ void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
|
|||
}
|
||||
|
||||
|
||||
int FI1236_AFC(FI1236Ptr f)
|
||||
int
|
||||
FI1236_AFC(FI1236Ptr f)
|
||||
{
|
||||
#if 0
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: f=%p f->count=%d f->original_frequency=%d f->afc_delta=%d\n", f, f->afc_count, f->original_frequency, f->afc_delta);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: f=%p f->count=%d f->original_frequency=%d f->afc_delta=%d\n",
|
||||
f, f->afc_count, f->original_frequency, f->afc_delta);
|
||||
#endif
|
||||
f->afc_count++;
|
||||
if(f->type==TUNER_TYPE_MT2032)
|
||||
{
|
||||
if (f->type == TUNER_TYPE_MT2032) {
|
||||
f->last_afc_hint = MT2032_get_afc_hint(f);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: afc_hint=%d\n", f->last_afc_hint);
|
||||
if(f->last_afc_hint==TUNER_TUNED)return 0;
|
||||
if(f->afc_count>3)f->last_afc_hint=TUNER_OFF;
|
||||
if(f->last_afc_hint==TUNER_OFF)
|
||||
{
|
||||
f->afc_delta=0;
|
||||
} else
|
||||
f->afc_delta+=f->last_afc_hint;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: Setting tuner frequency to %g\n", (0.5*(2*f->original_frequency+f->afc_delta))/16.0);
|
||||
MT2032_tune(f, (1.0*f->original_frequency+0.5*f->afc_delta)/16.0, 0.03125);
|
||||
if(f->last_afc_hint==TUNER_OFF)return 0;
|
||||
return 1; /* call me again */
|
||||
} else
|
||||
{
|
||||
f->last_afc_hint=FI1236_get_afc_hint(f);
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: afc_hint=%d\n", f->last_afc_hint);
|
||||
if (f->last_afc_hint == TUNER_TUNED)
|
||||
{
|
||||
return 0;
|
||||
if (f->afc_count > 3)
|
||||
f->last_afc_hint = TUNER_OFF;
|
||||
if (f->last_afc_hint == TUNER_OFF)
|
||||
f->afc_delta = 0;
|
||||
else
|
||||
f->afc_delta += f->last_afc_hint;
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: Setting tuner frequency to %g\n",
|
||||
(0.5 * (2 * f->original_frequency + f->afc_delta)) / 16.0);
|
||||
MT2032_tune(f,
|
||||
(1.0 * f->original_frequency+ 0.5 * f->afc_delta) / 16.0,
|
||||
0.03125);
|
||||
if (f->last_afc_hint == TUNER_OFF)
|
||||
return 0;
|
||||
return 1; /* call me again */
|
||||
} else {
|
||||
f->last_afc_hint = FI1236_get_afc_hint(f);
|
||||
if (f->last_afc_hint == TUNER_TUNED) {
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: TUNER_TUNNED\n");
|
||||
return 0;
|
||||
}
|
||||
if(f->afc_count>3)f->last_afc_hint=TUNER_OFF;
|
||||
if (f->afc_count > 3)
|
||||
f->last_afc_hint = TUNER_OFF;
|
||||
|
||||
if (f->last_afc_hint == TUNER_OFF)
|
||||
{
|
||||
f->afc_delta=0;
|
||||
} else
|
||||
else
|
||||
f->afc_delta+=f->last_afc_hint;
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: Setting tuner frequency to %g\n", (0.5*(2*f->original_frequency+f->afc_delta))/16.0);
|
||||
|
||||
xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO,
|
||||
"AFC: Setting tuner frequency to %g\n",
|
||||
(0.5 * (2 * f->original_frequency + f->afc_delta)) / 16.0);
|
||||
FI1236_tune(f, f->original_frequency + f->afc_delta);
|
||||
if(f->last_afc_hint==TUNER_OFF)return 0;
|
||||
if (f->last_afc_hint == TUNER_OFF)
|
||||
return 0;
|
||||
return 1; /* call me again */
|
||||
}
|
||||
return 0; /* done */
|
||||
}
|
||||
|
||||
void fi1236_dump_status(FI1236Ptr f)
|
||||
void
|
||||
fi1236_dump_status(FI1236Ptr f)
|
||||
{
|
||||
if(f->type==TUNER_TYPE_MT2032){
|
||||
if (f->type == TUNER_TYPE_MT2032)
|
||||
MT2032_dump_status(f);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue