#ifndef __BT829_H__
#define __BT829_H__

#include "xf86i2c.h"

typedef struct {
	int 		tunertype;	/* Must be set before init */
        /* Private variables */
	I2CDevRec d;

    	CARD8		brightness;
    	CARD8 		ccmode;
        CARD8           code;
    	CARD16		contrast;
    	CARD8		format;
	int		height;
    	CARD8		hue;
        CARD8           len;
    	CARD8		mux;
    	CARD8           out_en;
        CARD8           p_io;
    	CARD16		sat_u;
    	CARD16		sat_v;
        CARD8           vbien;
        CARD8           vbifmt;
	int 		width;

    	CARD16		hdelay;
        CARD16		hscale;
    	CARD16		vactive;
    	CARD16		vdelay;
        CARD16		vscale;

        CARD16          htotal;
    	CARD8		id;
    	CARD8		svideo_mux;
} BT829Rec, *BT829Ptr;

BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr);

/* ATI card specific initialization */
#define BT829_ATI_ADDR_1	0x8A
#define BT829_ATI_ADDR_2	0x88
int bt829_ATIInit(BT829Ptr bt);

#define BT829_NTSC		1	/* NTSC-M */
#define BT829_NTSC_JAPAN	2	/* NTSC-Japan */
#define BT829_PAL		3	/* PAL-B,D,G,H,I */
#define BT829_PAL_M		4	/* PAL-M */
#define BT829_PAL_N		5	/* PAL-N */
#define BT829_SECAM		6	/* SECAM */
#define BT829_PAL_N_COMB	7	/* PAL-N combination */
int bt829_SetFormat(BT829Ptr bt, CARD8 format);

#define BT829_MUX2	1	/* ATI -> composite video */
#define BT829_MUX0	2	/* ATI -> tv tuner */
#define BT829_MUX1	3	/* ATI -> s-video */
int bt829_SetMux(BT829Ptr bt, CARD8 mux);

int bt829_SetCaptSize(BT829Ptr bt, int width, int height);

void bt829_SetBrightness(BT829Ptr bt, int brightness);
void bt829_SetContrast(BT829Ptr bt, int contrast);
void bt829_SetSaturation(BT829Ptr bt, int saturation);
void bt829_SetTint(BT829Ptr bt, int hue);	/* Hue */

void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en);	/* VPOLE register */
void bt829_SetP_IO(BT829Ptr bt, CARD8 p_io);	/* P_IO register */

int bt829_SetCC(BT829Ptr bt);

#define BT829SymbolsList   \
		"bt829_Detect", \
		"bt829_ATIInit", \
		"bt829_SetFormat", \
		"bt829_SetMux", \
		"bt829_SetBrightness", \
		"bt829_SetContrast", \
		"bt829_SetSaturation", \
		"bt829_SetTint", \
		"bt829_SetCaptSize", \
		"bt829_SetOUT_EN", \
		"bt829_SetP_IO"

#define xf86_bt829_Detect		((BT829Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("bt829_Detect"))
#define xf86_bt829_ATIInit		((int (*)(BT829Ptr))LoaderSymbol("bt829_ATIInit"))
#define xf86_bt829_SetFormat		((int (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetFormat"))
#define xf86_bt829_SetMux		((int (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetMux"))
#define xf86_bt829_SetCaptSize		((int (*)(BT829Ptr, int, int))LoaderSymbol("bt829_SetCaptSize"))
#define xf86_bt829_SetBrightness	((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetBrightness"))
#define xf86_bt829_SetContrast		((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetContrast"))
#define xf86_bt829_SetSaturation	((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetSaturation"))
#define xf86_bt829_SetTint		((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetTint"))
#define xf86_bt829_SetOUT_EN		((void (*)(BT829Ptr, Bool))LoaderSymbol("bt829_SetOUT_EN"))
#define xf86_bt829_SetP_IO		((void (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetP_IO"))

#endif
