A new detection routine for Microtune MT2032 an MT2050 tuners
Bojan PETROVIC
bpetrovi at dekart.f.bg.ac.yu
Mon Dec 12 05:15:27 PST 2005
I'm sorry, my email client magled the patch by wrapping the lines
This should be ok:
diff -u current/bktr_core.c currentmod/bktr_core.c
--- current/bktr_core.c Mon Dec 12 12:55:39 2005
+++ currentmod/bktr_core.c Mon Dec 12 12:59:42 2005
@@ -442,7 +442,8 @@
*/
static int common_ioctl( bktr_ptr_t bktr, ioctl_cmd_t cmd, caddr_t arg );
-
+/* We need these for the new Microtune detection routine, so they won't be static */
+#if 0
#if !defined(BKTR_USE_FREEBSD_SMBUS)
/*
* i2c primitives for low level control of i2c bus. Added for MSP34xx control
@@ -452,7 +453,7 @@
static int i2c_write_byte( bktr_ptr_t bktr, unsigned char data);
static int i2c_read_byte( bktr_ptr_t bktr, unsigned char *data, int last );
#endif
-
+#endif
/*
@@ -4070,20 +4071,20 @@
/* from the Linux BTTV i2c driver by Gerd Knorr <kraxel at cs.tu-berlin.de> */
#define BITD 40
-static void i2c_start( bktr_ptr_t bktr) {
+void i2c_start( bktr_ptr_t bktr) {
OUTL(bktr, BKTR_I2C_DATA_CTL, 1); DELAY( BITD ); /* release data */
OUTL(bktr, BKTR_I2C_DATA_CTL, 3); DELAY( BITD ); /* release clock */
OUTL(bktr, BKTR_I2C_DATA_CTL, 2); DELAY( BITD ); /* lower data */
OUTL(bktr, BKTR_I2C_DATA_CTL, 0); DELAY( BITD ); /* lower clock */
}
-static void i2c_stop( bktr_ptr_t bktr) {
+void i2c_stop( bktr_ptr_t bktr) {
OUTL(bktr, BKTR_I2C_DATA_CTL, 0); DELAY( BITD ); /* lower clock & data */
OUTL(bktr, BKTR_I2C_DATA_CTL, 2); DELAY( BITD ); /* release clock */
OUTL(bktr, BKTR_I2C_DATA_CTL, 3); DELAY( BITD ); /* release data */
}
-static int i2c_write_byte( bktr_ptr_t bktr, unsigned char data) {
+int i2c_write_byte( bktr_ptr_t bktr, unsigned char data) {
int x;
int status;
@@ -4116,7 +4117,7 @@
return( status );
}
-static int i2c_read_byte( bktr_ptr_t bktr, unsigned char *data, int last ) {
+int i2c_read_byte( bktr_ptr_t bktr, unsigned char *data, int last ) {
int x;
int bit;
int byte = 0;
diff -u current/bktr_core.h currentmod/bktr_core.h
--- current/bktr_core.h Thu Jan 6 02:42:32 2005
+++ currentmod/bktr_core.h Mon Dec 12 12:59:42 2005
@@ -52,6 +52,11 @@
int i2cWrite( bktr_ptr_t bktr, int addr, int byte1, int byte2 );
int i2cRead( bktr_ptr_t bktr, int addr );
+void i2c_start( bktr_ptr_t bktr);
+void i2c_stop( bktr_ptr_t bktr);
+int i2c_write_byte( bktr_ptr_t bktr, unsigned char data);
+int i2c_read_byte( bktr_ptr_t bktr, unsigned char *data, int last );
+
void msp_dpl_reset( bktr_ptr_t bktr, int i2d_addr );
unsigned int msp_dpl_read( bktr_ptr_t bktr, int i2c_addr, unsigned char dev, unsigned int addr );
void msp_dpl_write( bktr_ptr_t bktr, int i2c_addr, unsigned char dev,
@@ -75,6 +80,7 @@
void common_bktr_attach( bktr_ptr_t bktr, int unit,
u_long pci_id, u_int rev );
int common_bktr_intr( void *arg );
+
/* Prototypes for open, close, read, mmap and ioctl calls */
diff -u current/bktr_tuner.c currentmod/bktr_tuner.c
--- current/bktr_tuner.c Sun Nov 13 14:26:38 2005
+++ currentmod/bktr_tuner.c Mon Dec 12 13:10:38 2005
@@ -1120,11 +1120,29 @@
TDA9887_init(bktr, 0);
+ printf("%s: MT20xx: Reg. dump (old detection):", bktr_name(bktr));
for (i = 0; i < 21; i++) {
if ((x = MT2032_GetRegister(i)) == -1)
break;
+ printf(" %02x",x);
rdbuf[i] = x;
}
+
+ if (i < 21)
+ return -1;
+
+ printf("\n%s: MT20xx: Reg. dump (new detection):", bktr_name(bktr));
+ i2c_start(bktr);
+ i2c_write_byte(bktr,0xc0);
+ i2c_write_byte(bktr,0x00);
+ i2c_start(bktr);
+ i2c_write_byte(bktr,0xc1);
+ for (i=0;i<21;i++) {
+ i2c_read_byte(bktr,&rdbuf[i],i==20);
+ printf(" %02x",rdbuf[i]);
+ }
+ i2c_stop(bktr);
+ if (rdbuf[0x13]==0x42) printf("\n%s: This might be the MT2050\n", bktr_name(bktr));
if (i < 21)
return -1;
More information about the freebsd-multimedia
mailing list