1 #ifdef HAVE_XORG_CONFIG_H
2 #include <xorg-config.h>
11 TDA9885Ptr
Detect_tda9885(I2CBusPtr b
, I2CSlaveAddr addr
)
16 t
= xcalloc(1, sizeof(TDA9885Rec
));
17 if(t
== NULL
) return NULL
;
24 t
->d
.DevName
= "TDA9885 Alignment-free IF-PLL";
27 t
->d
.DevName
= "Generic TDAxxxx";
30 t
->d
.SlaveAddr
= addr
;
33 t
->d
.StartTimeout
= b
->StartTimeout
;
34 t
->d
.BitTimeout
= b
->BitTimeout
;
35 t
->d
.AcknTimeout
= b
->AcknTimeout
;
36 t
->d
.ByteTimeout
= b
->ByteTimeout
;
38 if(!I2C_WriteRead(&(t
->d
), NULL
, 0, &a
, 1))
44 /* set default parameters */
45 if(!I2CDevInit(&(t
->d
)))
54 Bool
tda9885_init(TDA9885Ptr t
)
56 t
->forced_mute_audio
=1;
60 void tda9885_getstatus(TDA9885Ptr t
)
64 I2C_WriteRead(&(t
->d
), NULL
, 0, &value
, 1);
65 t
->after_reset
=value
& 1;
66 t
->afc_status
=(value
>> 1) & 0xf;
67 t
->fm_carrier
=(value
>>5)& 1;
68 t
->vif_level
=(value
>>6) & 1;
69 t
->afc_win
=(value
>> 7)&1;
72 void tda9885_setparameters(TDA9885Ptr t
)
76 data
[0]=0; /* start with subaddress 0 */
77 data
[1]=(t
->sound_trap
& 1) |
78 ((t
->auto_mute_fm
&1)<<1) |
79 ((t
->carrier_mode
&1)<<2) |
80 ((t
->modulation
&3)<<3) |
81 ((t
->forced_mute_audio
&1)<<5) |
83 ((t
->port2
&1)<<7); /* B data */
84 data
[2]=(t
->top_adjustment
& 0x1f) |
85 ((t
->deemphasis
& 0x3)<<5) |
86 ((t
->audio_gain
& 1) << 7); /* C data */
87 data
[3]=(t
->standard_sound_carrier
& 0x3) |
88 ((t
->standard_video_if
& 0x07)<<2) |
89 ((t
->minimum_gain
& 0x01)<<5) |
90 ((t
->gating
& 0x01)<<6) |
91 ((t
->vif_agc
& 0x01)<<7); /* E data */
93 I2C_WriteRead(&(t
->d
), data
, 4, NULL
, 0);
95 xf86DrvMsg(t
->d
.pI2CBus
->scrnIndex
,X_INFO
,"TDA9885 setparam: B data: %x, C data: %x, E data: %x\n", data
[1], data
[2], data
[3]);
98 void tda9885_dumpstatus(TDA9885Ptr t
)
100 xf86DrvMsg(t
->d
.pI2CBus
->scrnIndex
,X_INFO
,"TDA9885 status: after_reset=%d afc_status=%d (%3.1f kHz off) fm_carrier=%d vif_level=%d afc_win=%d %s\n",
101 t
->after_reset
, t
->afc_status
,
102 (t
->afc_status
<8)?-12.5-t
->afc_status
*25.0:-12.5+(16-t
->afc_status
)*25.0,
103 t
->fm_carrier
, t
->vif_level
, t
->afc_win
, t
->afc_win
?"VCO in": "VCO out");