From owner-freebsd-multimedia@FreeBSD.ORG Mon Dec 12 13:15:27 2005 Return-Path: X-Original-To: freebsd-multimedia@freebsd.org Delivered-To: freebsd-multimedia@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9E3C016A41F for ; Mon, 12 Dec 2005 13:15:27 +0000 (GMT) (envelope-from bpetrovi@dekart.f.bg.ac.yu) Received: from dekart.f.bg.ac.yu (dekart.f.bg.ac.yu [147.91.75.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9A80943D5E for ; Mon, 12 Dec 2005 13:15:26 +0000 (GMT) (envelope-from bpetrovi@dekart.f.bg.ac.yu) Received: from localhost (bpetrovi@localhost) by dekart.f.bg.ac.yu (8.11.6/8.11.6) with ESMTP id jBCDAKa23675 for ; Mon, 12 Dec 2005 14:10:20 +0100 Date: Mon, 12 Dec 2005 14:10:19 +0100 (CET) From: Bojan PETROVIC To: freebsd-multimedia@freebsd.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-RAVMilter-Version: 8.4.1(snapshot 20020919) (dekart) Subject: Re: A new detection routine for Microtune MT2032 an MT2050 tuners X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Dec 2005 13:15:27 -0000 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 */ #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;