BT869 driver patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Thanks for the submission.  The only piece right now that I'm not
liking is that #define DO_720_576 and the later #ifdef.  Can we do
away with these?  It's not clear what we gain with adding those in.
Otherwise, I appreciate your work, and I'd like to incorporate your
additions!


Phil

On Thu, Jan 03, 2002 at 06:37:05PM +0000, Stephen Davies wrote:
> Hi Phil and others,
> 
> I attach a patch to the lm_sensors bt869 driver, that adds a PAL 720x576
> mode.  This mode doesn't do overscan compensation.  Its most useful to use
> for video playback.
> 
> I have also added a new configuration file, "svideo" - to set the video
> output to composite or s-video.  (Or, theoretically at least, RGB, though
> my card doesn't have suitable outputs from all the DACs)
> 
> I hope this can be included in the standard distribution.  I have had it
> in use for some months, and some others have reported success too.
> 
> Thanks for your work on lm_sensors!
> 
> Regards,
> Steve Davies
> 

> Index: doc/chips/bt869
> ===================================================================
> RCS file: /home/cvs/lm_sensors2/doc/chips/bt869,v
> retrieving revision 1.2
> diff -u -r1.2 bt869
> --- doc/chips/bt869	2001/05/03 21:00:33	1.2
> +++ doc/chips/bt869	2002/01/03 18:35:43
> @@ -11,7 +11,9 @@
>      (www.brooktree.com)
>  
>  Author: Frodo Looijaard <frodol at dds.nl>, Philip Edelbrock
> -	<phil at netroege.com> and Ralph Metzler <rjkm at thp.uni-koeln.de>
> +	<phil at netroedge.com>, Ralph Metzler <rjkm at thp.uni-koeln.de>
> +	Steve Davies <steve at daviesfam.org> added the 720x576
> +	support, and the svideo configuration.
>  
>  Main Contact: Philip Edelbrock <phil at netroedge.com>
>  
> @@ -37,29 +39,36 @@
>  This driver provides some access to the Brooktree bt869 found on some video
>  cards (like the 'Voodoo3 3000').  Typically, the output can be either an
>  s-video connection or composite video.  Resolutions supported using the
> -chip's built in configurations are 640x480 or 800x600.  Other possible
> -implementations may allow for double resolutions with some decimations
> -(e.g., a monitor running at 1280x960 but the TV out getting every other
> -pixel for 640x480).
> +chip's built in configurations are 640x480 or 800x600.  In addition, a 720x576
> +PAL mode without overscan compensation is supported - a convenient configuration
> +for video playback.
> +
> +Other possible implementations may allow for double resolutions with some
> +decimations (e.g., a monitor running at 1280x960 but the TV out getting every
> +other pixel for 640x480).
>  
>  
>  Driver Features
>  ---------------
> -Stanards: (US) NTSC or PAL (PAL untested)
> -Resultions: 640x480 and 800x600
> +Standards: (US) NTSC or PAL
> +Resolutions: 640x480, 800x600 and 720x576 (PAL only)
>  Depths: 16 bit or 32 (I forgot if 24 bit worked OK, it probably does)
>  Colorbars: Switch on the built-in color bar generator. (FYI- using a blue
>  filter, you should see only alternating bright stripes of equal brightness.
>  Adjust your TV's color and saturation if this isn't the case.)
> +SVideo: composite or s-video output.  Also, theoretically, RGB output, though
> +this isn't tested and will require that your card presents all three DAC outputs
> +(the 3dfx Voodoo3 doesn't)
>  
>  In your XF86Config file, you should have these entries for NTSC output:
>  
>  ModeLine "640x480NTSC"  28.195793   640  656  658  784   480  520  525  600
>  ModeLine "800x600NTSC"  38.769241   800  812  814  880   600  646  649  735
>  
> -or for PAL (untested),
> +or for PAL
>  
>  ModeLine "640x480PAL"   29.50       640  675  678  944   480  530  535  625
> +ModeLine "720x576PAL"   27.50       720  744  800  880   576  581  583  625
>  ModeLine "800x600PAL"   36.00       800  818  820  960   600  653  655  750
>  
>  Also, don't forget to add these modes to the resolutions list in the
> @@ -77,9 +86,10 @@
>  Chip Features
>  -------------
>  The chip is very flexible and customizable for many standards.  Right now
> -the driver sticks with the chip's built in NTSC and PAL standards.  It also
> -does some other wacky stuff like closed-captioning, Macro-vision
> -copy-protection, and other things.  Check out the datasheet for more info.
> +the driver sticks with the chip's built in NTSC and PAL standards, with the
> +addition of the 720x576PAL mode.  It also does some other wacky stuff like
> +closed-captioning, Macro-vision copy-protection, and other things.  Check
> +out the datasheet for more info.
>  
>  
>  Issues
> Index: kernel/chips/bt869.c
> ===================================================================
> RCS file: /home/cvs/lm_sensors2/kernel/chips/bt869.c,v
> retrieving revision 1.28
> diff -u -r1.28 bt869.c
> --- kernel/chips/bt869.c	2001/10/13 17:48:42	1.28
> +++ kernel/chips/bt869.c	2002/01/03 18:35:45
> @@ -1,7 +1,9 @@
>  /*
>      bt869.c - Part of lm_sensors, Linux kernel modules for hardware
>               monitoring
> +
>      Copyright (c) 1998, 1999  Frodo Looijaard <frodol at dds.nl>
> +    Copyright (c) 2001, 2002  Stephen Davies  <steve at daviesfam.org>
>  
>      This program is free software; you can redistribute it and/or modify
>      it under the terms of the GNU General Public License as published by
> @@ -20,6 +22,7 @@
>  
>  
>  #define DEBUG 1
> +#define DO_720_576
>  
>  #include <linux/version.h>
>  #include <linux/module.h>
> @@ -83,6 +86,7 @@
>  	u8 half;		/* go half res */
>  	u8 depth;		/* screen depth */
>  	u8 colorbars;		/* turn on/off colorbar calibration screen */
> +        u8 svideo;              /* output format: (2=RGB) 1=SVIDEO, 0=Composite */
>  };
>  
>  #ifdef MODULE
> @@ -108,6 +112,7 @@
>  static void bt869_dec_use(struct i2c_client *client);
>  static int bt869_read_value(struct i2c_client *client, u8 reg);
>  static int bt869_write_value(struct i2c_client *client, u8 reg, u16 value);
> +static void bt869_write_values(struct i2c_client *client, u16 *values);
>  static void bt869_status(struct i2c_client *client, int operation,
>  			 int ctl_name, int *nrels_mag, long *results);
>  static void bt869_ntsc(struct i2c_client *client, int operation,
> @@ -118,6 +123,8 @@
>  		       int ctl_name, int *nrels_mag, long *results);
>  static void bt869_colorbars(struct i2c_client *client, int operation,
>  			    int ctl_name, int *nrels_mag, long *results);
> +static void bt869_svideo(struct i2c_client *client, int operation,
> +			    int ctl_name, int *nrels_mag, long *results);
>  static void bt869_depth(struct i2c_client *client, int operation,
>  			int ctl_name, int *nrels_mag, long *results);
>  static void bt869_update_client(struct i2c_client *client);
> @@ -153,9 +160,177 @@
>  	 &i2c_sysctl_real, NULL, &bt869_colorbars},
>  	{BT869_SYSCTL_DEPTH, "depth", NULL, 0, 0644, NULL, &i2c_proc_real,
>  	 &i2c_sysctl_real, NULL, &bt869_depth},
> +	{BT869_SYSCTL_SVIDEO, "svideo", NULL, 0, 0644, NULL, &i2c_proc_real,
> +	 &i2c_sysctl_real, NULL, &bt869_svideo},
>  	{0}
>  };
>  
> +#ifdef DO_720_576
> +
> +/* ******************
> +
> +720x576, 27.5MHz, no overscan compensation - suitable for DVD playback etc
> +                             <steve at daviesfam.org>
> +
> +FIXME: For the time being, this is PAL only.  NTSC DVDs are 720x480, aren't they?
> +FIXME: Not sure what to do for the NTSC folks - if you're interested in helping
> +FIXME: me do some NTSC modes more suitable for DVD playback, contact me.
> +FIXME:  -- Steve Davies <steve at daviesfam.org>
> +
> +
> +    Mode        "720x576-BT869"
> +        DotClock        27.5
> +        HTimings        720 744 800 880
> +        VTimings        576 581 583 625
> +    EndMode
> +
> +
> +625LINE=1							625 line output format
> +BST_AMP[7:0]=x59 89						Burst ampl. multiplication factor (PAL std??)
> +BY_PLL=0							Use the PLL
> +CATTENUATE[2:0]=0						No chroma attenuation
> +CCF1B1[7:0]=0							close caption stuff
> +CCF1B2[7:0]=0							close caption stuff
> +CCF2B1[7:0]=0							close caption stuff
> +CCF2B2[7:0]=0							close caption stuff
> +CCORING[2:0]=0							Bypass chroma coring
> +CCR_START[8:0]=0 [CCR_START[8]=0; CCR_START[7:0]=0]		Close-caption clock runin start from hsync
> +CC_ADD[11:0]=xD2 210  [CC_ADD[11:8]=0; CC_ADD[7:0]=xD2]		Close-caption DTO increment
> +CHECK_STAT=0							Don't check monitor status
> +CLPF[1:0]=0						  	Hoz chroma lowpass filter=Bypass
> +DACDISA=1							Disable DACA
> +DACDISB=0							Don't disable DACB
> +DACDISC=0							Don't disable DACC
> +DACOFF=0							Don't disable the DACs
> +DATDLY = 0							normal
> +DATSWP=0							normal
> +DCHROMA=0							Don't blank chroma
> +DIS_FFILT=1							Disable flickerfilter
> +DIS_GMSHC=1							Disable chroma psuedo-gamma removal
> +DIS_GMSHY=1							Disable luma pseudo gamma removal
> +DIS_GMUSHC=1							Disable chroma anti-pseudo gamma removal
> +DIS_GMUSHY=1							Disable luma anti-pseudo gamma removal
> +DIS_SCRESET=0							Normal subcarrier phase resets
> +DIS_YFLPF=0							Disable Luma initial hoz low pass filter
> +DIV2=0								Input pixel rate not divided by 2
> +ECBAR=0								No colour bars
> +ECCF1=0								Disable closed caption
> +ECCF2=0								Disable closed caption
> +ECCGATE=0							Normal close caption encoding
> +ECLIP=0								0=disable clipping
> +EN_ASYNC=0							set to 0 for normal operation
> +EN_BLANKO=0							BLANK is an input
> +EN_DOT=0							Disables dot clock sync on BLANK pin
> +EN_OUT=1							Allows outputs to be enabled
> +EN_XCLK=1							Use CLKI pin as clock source
> +ESTATUS[1:0]=0							Used to select readback register
> +FIELDI=0							Logical 1 on FIELD indicates even field
> +F_SELC[2:0]=0							5 line chroma flickerfilter
> +F_SELY[2:0]=0							5 line luma flickerfilter
> +HBURST_BEGIN[7:0]=x98 152					Chroma burst start point in clocks
> +HBURST_END[7:0]=x58 88						Chroma burst end point in clocks - 128
> +HSYNCI=0							Active low HSYNC
> +HSYNC_WIDTH[7:0]=x80 128					Analogue sync width in clocks
> +HSYNOFFSET[9:0]=0  [HSYNOFFSET[9:8]=0; HSYNOFFSET[7:0]=0]	hsync in "standard position"
> +HSYNWIDTH[5:0]=2						2 pixel hsync width
> +H_ACTIVE[9:0]=x2D0 720  [H_ACTIVE[9:8]=2; H_ACTIVE[7:0]=xD0]	Active pixels per line
> +H_BLANKI[8:0]=x84 132  [H_BLANKI[8]=0; H_BLANKI[7:0]=x84]	End of blanking of input video
> +H_BLANKO[9:0]=x120 288  [H_BLANKO[9:8]=1; H_BLANKO[7:0]=x20]	End of blanking from hoz sync leading edge
> +H_CLKI[10:0]=x378 888  [H_CLKI[10:8]=3; H_CLKI[7:0]=x78]	Input line length total in clocks
> +H_CLKO[11:0]=x6e0 1760  [H_CLKO[11:8]=6; H_CLKO[7:0]=xe0]	Output clocks per line
> +H_FRACT[7:0]=0							0 fractional input clocks per line
> +IN_MODE[2:0]=0							24Bit RGB muxed
> +LUMADLY[1:0]=0							0 pixel delay on Y_DLY luma
> +MCB[7:0]=x49 73							Mult factor for CB prior to subcarrier mod.
> +MCR[7:0]=x82 130						Mult factor for CR prior to subcarrier mod.
> +MODE2X=0							Don't divide clock input by 2
> +MSC[31:0]=x2945E0B4 692445365  [MSC[31:24]=x29; MSC[23:16]=x45; MSC[15:8]=xE0; MSC[7:0]=xB4] Subcarrier incr.
> +MY[7:0]=x8C 140							Mult factor for Y
> +NI_OUT=0							Normal interlaced output
> +OUT_MODE[1:0]=0							video0-3 is CVBS, Y, C, Y_DLY
> +OUT_MUXA[1:0]=0							Don't care as DACA is disabled
> +OUT_MUXB[1:0]=1							Output video[1] (Y) on DACB
> +OUT_MUXC[1:0]=2							Output video[2] (C) on DACC
> +PAL_MD=1							Video output in PAL mode
> +PHASE_OFF[7:0]=0						Subcarrier phase offset
> +PLL_FRACT[15:0]=x30 48  [PLL_FRACT[15:8]=0x0; PLL_FRACT[7:0]=x30] frac portion of pll multiplier
> +PLL_INT[5:0]=0x0C 12						Int portion of pll multiplier
> +SETUP=0								7.5-IRE setup disabled
> +SLAVER=1							
> +SRESET=0							Don't do a software reset
> +SYNC_AMP[7:0]=xF0 240						Sync amp mult. factor (PAL std???)
> +VBLANKDLY=0							Extra line of blanking in 2nd field?
> +VSYNCI=0							Active low VSYNC
> +VSYNC_DUR=0							2.5line VSYNC duration on output
> +VSYNCOFFSET[10:0]=0  [VSYNOFFSET[10:8]=0; VSYNOFFSET[7:0]=0]	VSYNC in standard position
> +VSYNWIDTH[2:0]=1						1 line of vsync width
> +V_ACTIVEI[9:0]=x240 576  [V_ACTIVEI[9:0]=2; V_ACTIVEI[7:0]=x40]	Active input lines
> +V_ACTIVEO[8:0]=x122 290  [V_ACTIVE0[8]=1; V_ACTIVEO[7:0]=x22]
> +V_BLANKI[7:0]=x2A 42						Input lines from vsync to first active line
> +V_BLANKO[7:0]=x16 22
> +V_LINESI[9:0]=x271 625  [V_LINESI[9:8]=2; V_LINESI[7:0]=x71]	Number of input lines
> +V_SCALE[13:0]=x1000 4096  [V_SCALE[13:8]=x10; V_SCALE[7:0]=0]	Vert scale coefficient="none"?
> +YATTENUATE[2:0]=0						no luma attenuation
> +YCORING[2:0]=0							Luma-coring bypass
> +YLPF[1:0]=0							Luma hoz low pass filter=bypass
> +
> +***************** */
> +
> +static u16 registers_720_576[] =
> +    {
> +      0x6e, 0x00,	/* HSYNOFFSET[7:0]=0 */
> +      0x70, 0x02,	/* HSYNOFFSET[9:8]=0; HSYNWIDTH[5:0]=2 */
> +      0x72, 0x00,	/* VSYNOFFSET[7:0]=0 */
> +      0x74, 0x01,	/* DATDLY = 0; DATSWP=0; VSYNOFFSET[10:8]=0; VSYNWIDTH[2:0]=1 */
> +      0x76, 0xe0,	/* H_CLKO[7:0]=xe0 */
> +      0x78, 0xd0,	/* H_ACTIVE[7:0]=xD0 */
> +      0x7a, 0x80,	/* HSYNC_WIDTH[7:0]=x80 */
> +      0x7c, 0x98,	/* HBURST_BEGIN[7:0]=x98 */
> +      0x7e, 0x58,	/* HBURST_END[7:0]=x58 */
> +      0x80, 0x20,	/* H_BLANKO[7:0]=x20 */
> +      0x82, 0x16,	/* V_BLANKO[7:0]=x16 */
> +      0x84, 0x22,	/* V_ACTIVEO[7:0]=x22 */
> +      0x86, 0xa6,	/* V_ACTIVE0[8]=1; H_ACTIVE[9:8]=2; H_CLKO[11:8]=6 */
> +      0x88, 0x00,	/* H_FRACT[7:0]=0 */
> +      0x8a, 0x78,	/* H_CLKI[7:0]=x78 */
> +      0x8c, 0x80,	/* H_BLANKI[7:0]=x84 */
> +      0x8e, 0x03,	/* VBLANKDLY=0; H_BLANKI[8]=0; H_CLKI[10:8]=3 */
> +      0x90, 0x71,	/* V_LINESI[7:0]=x71 */
> +      0x92, 0x2a,	/* V_BLANKI[7:0]=x2A */
> +      0x94, 0x40,	/* V_ACTIVEI[7:0]=x40 */
> +      0x96, 0x0a,	/* CLPF[1:0]=0; YLPF[1:0]=0; V_ACTIVEI[9:0]=2; V_LINESI[9:8]=2 */
> +      0x98, 0x00,	/* V_SCALE[7:0]=0 */
> +      0x9a, 0x50,	/* H_BLANKO[9:8]=1; V_SCALE[13:8]=x10 */
> +      0x9c, 0x30,	/* PLL_FRACT[7:0]=x30 */
> +      0x9e, 0x0,	/* PLL_FRACT[15:8]=0x0 */
> +      0xa0, 0x8c,	/* EN_XCLK=1; BY_PLL=0; PLL_INT[5:0]=0x0C */
> +      0xa2, 0x24,	/* ECLIP=0; PAL_MD=1; DIS_SCRESET=0; VSYNC_DUR=0; 625LINE=1; SETUP=0; NI_OUT=0 */
> +      0xa4, 0xf0,	/* SYNC_AMP[7:0]=xF0 */
> +      0xa6, 0x59,	/* BST_AMP[7:0]=x59 */
> +      0xa8, 0x82,	/* MCR[7:0]=x82 */
> +      0xaa, 0x49,	/* MCB[7:0]=x49 */
> +      0xac, 0x8c,	/* MY[7:0]=x8C */
> +      0xae, 0xb4,	/* MSC[7:0]=xb4 */
> +      0xb0, 0xe0,	/* MSC[15:8]=xe0 */
> +      0xb2, 0x45,	/* MSC[23:16]=x45 */
> +      0xb4, 0x29,	/* MSC[31:24]=x29 */
> +      0xb6, 0x00,	/* PHASE_OFF[7:0]=0 */
> +      //0xba, 0x21,	/* SRESET=0; CHECK_STAT=0; SLAVER=1; DACOFF=0; DACDISC=0; DACDISB=0; DACDISA=1 */
> +      0xc4, 0x01,	/* ESTATUS[1:0]=0; ECCF2=0; ECCF1=0; ECCGATE=0; ECBAR=0; DCHROMA=0; EN_OUT=1 */
> +      0xc6, 0x00,	/* EN_BLANKO=0; EN_DOT=0; FIELDI=0; VSYNCI=0; HSYNCI=0; IN_MODE[2:0]=0(24bRGB) */
> +      0xc8, 0x40,	/* DIS_YFLPF=0; DIS_FFILT=1; F_SELC[2:0]=0; F_SELY[2:0]=0 */
> +      0xca, 0xc0,	/* DIS_GMUSHY=1; DIS_GMSHY=1; YCORING[2:0]=0; YATTENUATE[2:0]=0 */
> +      0xcc, 0xc0,	/* DIS_GMUSHC=1; DIS_GMSHC=1; CCORING[2:0]=0; CATTENUATE[2:0]=0 */
> +      //0xce, 0x24,       /* OUT_MUXC=2 [C]; OUT_MUXB=1 [Y]; OUT_MUXA=0 [CVBS, but disabled]*/
> +      //0xce, 0x04,       /* OUT_MUXC=0 [CVBS]; OUT_MUXB=1 [Y]; OUT_MUXA=0 [CVBS, but disabled]*/
> +      0xd6, 0x00,	/* OUT_MODE[1:0]=0; LUMADLY[1:0]=0 */
> +      0, 0
> +    };
> +
> +
> +#endif
> +
> +
>  /* Used by init/cleanup */
>  static int __initdata bt869_initialized = 0;
>  
> @@ -319,9 +494,21 @@
>     the usual practice. */
>  int bt869_write_value(struct i2c_client *client, u8 reg, u16 value)
>  {
> +#ifdef DEBUG
> +        printk("bt869.o: write_value(0x%X, 0x%X)\n", reg, value);
> +#endif
>  	return i2c_smbus_write_byte_data(client, reg, value);
>  }
>  
> +void bt869_write_values(struct i2c_client *client, u16 *values)
> +{
> +  /* writes set of registers from array.  0,0 marks end of table */
> +  while (*values) {
> +    bt869_write_value(client, values[0], values[1]);
> +    values += 2;
> +  }
> +}
> +
>  void bt869_init_client(struct i2c_client *client)
>  {
>  	struct bt869_data *data = client->data;
> @@ -342,6 +529,7 @@
>  	data->ntsc = 1;
>  	data->half = 0;
>  	data->colorbars = 0;
> +	data->svideo = 0;
>  	data->depth = 16;
>  
>  }
> @@ -357,42 +545,64 @@
>  #ifdef DEBUG
>  		printk("Starting bt869 update\n");
>  #endif
> -/* Set values of device */
> -		if ((data->res[0] == 640) && (data->res[1] == 480)) {
> -			bt869_write_value(client, 0xB8, (!data->ntsc));
> -			bt869_write_value(client, 0xa0, 0x80 + 0x0C);
> -			printk("bt869.o: writing into config -->0x%X\n",
> -			       (0 + (!data->ntsc)));
> -		} else if ((data->res[0] == 800) && (data->res[1] == 600)) {
> -			bt869_write_value(client, 0xB8,
> +		if ((data->res[0] == 800) && (data->res[1] == 600)) {
> +			/* 800x600 built-in mode */
> +		        bt869_write_value(client, 0xB8,
>  					  (2 + (!data->ntsc)));
>  			bt869_write_value(client, 0xa0, 0x80 + 0x11);
>  			printk("bt869.o: writing into config -->0x%X\n",
>  			       (2 + (!data->ntsc)));
> -		} else {
> -			bt869_write_value(client, 0xB8, (!data->ntsc));
> +		}
> +#ifdef DO_720_576
> +		else if ((data->res[0] == 720) && (data->res[1] == 576)) {
> +		        /* 720x576 no-overscan-compensation mode suitable for PAL DVD playback */
> +		        bt869_write_values(client,  registers_720_576);
> +		}
> +#endif
> +		else {
> +		        /* 640x480 built-in mode */
> +		        bt869_write_value(client, 0xB8, (!data->ntsc));
>  			bt869_write_value(client, 0xa0, 0x80 + 0x0C);
>  			printk("bt869.o: writing into config -->0x%X\n",
>  			       (0 + (!data->ntsc)));
> -			printk
> +			if ((data->res[0] != 640) || (data->res[1] != 480)) {
> +			  printk
>  			    ("bt869.o:  Warning: arbitrary resolutions not supported yet.  Using 640x480.\n");
> -			data->res[0] = 640;
> -			data->res[1] = 480;
> +			  data->res[0] = 640;
> +			  data->res[1] = 480;
> +			}
>  		}
> +		/* Set colour depth */
>  		if ((data->depth != 24) && (data->depth != 16))
>  			data->depth = 16;
>  		if (data->depth == 16)
>  			bt869_write_value(client, 0x0C6, 0x001);
>  		if (data->depth == 24)
>  			bt869_write_value(client, 0x0C6, 0x000);
> -		bt869_write_value(client, 0xD4, data->half << 6);
> -		/* Be a slave to the clock on the Voodoo3 */
> -		bt869_write_value(client, 0xba, 0x20);
> -		/* depth =16bpp */
> -		bt869_write_value(client, 0x0C6, 0x001);
> +		/* set "half" resolution mode */
> +		bt869_write_value(client, 0xd4, data->half << 6);
> +		/* Set composite/svideo mode, also enable the right dacs */
> +		switch (data->svideo) {
> +		case 2:  /* RGB - requires hardware mod on Voodoo3 to get all outputs */
> +		  bt869_write_value(client, 0xd6, 0x0c);
> +		  bt869_write_value(client, 0xce, 0x24);
> +		  bt869_write_value(client, 0xba, 0x20);
> +		  break;
> +		case 1:  /* Svideo*/
> +		  bt869_write_value(client, 0xce, 0x24);
> +		  bt869_write_value(client, 0xba, 0x21);
> +		  break;
> +		default:  /* Composite */
> +		  bt869_write_value(client, 0xce, 0x0);
> +		  bt869_write_value(client, 0xba, 0x25);
> +		  break;
> +		}
> +		/* Enable outputs */
>  		bt869_write_value(client, 0xC4, 1);
> +		/* Issue timing reset */
> +		bt869_write_value(client, 0x6c, 0x80);
>  
> -/* Get status */
> +/* Read back status registers */
>  		bt869_write_value(client, 0xC4,
>  				  1 | (data->colorbars << 2));
>  		data->status[0] = bt869_read_value(client, 1);
> @@ -449,6 +659,25 @@
>  }
>  
>  
> +void bt869_svideo(struct i2c_client *client, int operation, int ctl_name,
> +		int *nrels_mag, long *results)
> +{
> +	struct bt869_data *data = client->data;
> +	if (operation == SENSORS_PROC_REAL_INFO)
> +		*nrels_mag = 0;
> +	else if (operation == SENSORS_PROC_REAL_READ) {
> +		bt869_update_client(client);
> +		results[0] = data->svideo;
> +		*nrels_mag = 1;
> +	} else if (operation == SENSORS_PROC_REAL_WRITE) {
> +		if (*nrels_mag >= 1) {
> +			data->svideo = results[0];
> +		}
> +		bt869_update_client(client);
> +	}
> +}
> +
> +
>  void bt869_res(struct i2c_client *client, int operation, int ctl_name,
>  	       int *nrels_mag, long *results)
>  {
> @@ -563,7 +792,7 @@
>  #ifdef MODULE
>  
>  MODULE_AUTHOR
> -    ("Frodo Looijaard <frodol at dds.nl> and Philip Edelbrock <phil at netroedge.com>");
> +    ("Frodo Looijaard <frodol at dds.nl>, Philip Edelbrock <phil at netroedge.com>, Stephen Davies <steve at daviesfam.org>");
>  MODULE_DESCRIPTION("bt869 driver");
>  
>  int init_module(void)
> Index: kernel/include/sensors.h
> ===================================================================
> RCS file: /home/cvs/lm_sensors2/kernel/include/sensors.h,v
> retrieving revision 1.85
> diff -u -r1.85 sensors.h
> --- kernel/include/sensors.h	2001/11/20 17:11:20	1.85
> +++ kernel/include/sensors.h	2002/01/03 18:35:47
> @@ -370,6 +370,7 @@
>  #define BT869_SYSCTL_RES    1003
>  #define BT869_SYSCTL_COLORBARS    1004
>  #define BT869_SYSCTL_DEPTH  1005
> +#define BT869_SYSCTL_SVIDEO 1006
>  
>  #define MATORB_SYSCTL_DISP 1000
>  


-- 
Philip Edelbrock -- IS Manager -- Edge Design, Corvallis, OR
   phil at netroedge.com -- http://www.netroedge.com/~phil
 PGP F16: 01 D2 FD 01 B5 46 F4 F0  3A 8B 9D 7E 14 7F FB 7A



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux