⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tv8532.h

📁 应用于linux系统的usb接口的摄像头驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
/*  * Quickcam cameras initialization data * *//*   Initialization data: this is the first set-up data written to the   device (before the open data). */#define TESTCLK 0x10		// reg 0x2c -> 0x12 //10#define TESTCOMP 0x90		// reg 0x28 -> 0x80#define TESTLINE 0x81		// reg 0x29 -> 0x81#define QCIFLINE 0x41		// reg 0x29 -> 0x81#define TESTPTL 0x14		// reg 0x2D -> 0x14#define TESTPTH 0x01		// reg 0x2E -> 0x01#define TESTPTBL 0x12		// reg 0x2F -> 0x0a#define TESTPTBH 0x01		// reg 0x30 -> 0x01#define ADWIDTHL 0xe8		// reg 0x0c -> 0xe8#define ADWIDTHH 0x03		// reg 0x0d -> 0x03#define ADHEIGHL 0x90		// reg 0x0e -> 0x91 //93#define ADHEIGHH 0x01		// reg 0x0f -> 0x01#define EXPOL 0x8f		// reg 0x1c -> 0x8f#define EXPOH 0x01		// reg 0x1d -> 0x01#define ADCBEGINL 0x44		// reg 0x10 -> 0x46 //47#define ADCBEGINH 0x00		// reg 0x11 -> 0x00#define ADRBEGINL 0x0a		// reg 0x14 -> 0x0b //0x0c#define ADRBEGINH 0x00		// reg 0x15 -> 0x00#define TV8532_CMD_UPDATE 0x84#define TV8532_EEprom_Add 0x03#define TV8532_EEprom_DataL 0x04#define TV8532_EEprom_DataM 0x05#define TV8532_EEprom_DataH 0x06#define TV8532_EEprom_TableLength 0x07#define TV8532_EEprom_Write 0x08#define TV8532_PART_CTRL 0x00#define TV8532_CTRL 0x01#define TV8532_CMD_EEprom_Open 0x30#define TV8532_CMD_EEprom_Close 0x29#define TV8532_UDP_UPDATE 0x31#define TV8532_GPIO 0x39#define TV8532_GPIO_OE 0x3B#define TV8532_REQ_RegWrite 0x02#define TV8532_REQ_RegRead 0x03#define TV8532_ADWIDTH_L 0x0C#define TV8532_ADWIDTH_H 0x0D#define TV8532_ADHEIGHT_L 0x0E#define TV8532_ADHEIGHT_H 0x0F#define TV8532_EXPOSURE 0x1C#define TV8532_QUANT_COMP 0x28#define TV8532_MODE_PACKET 0x29#define TV8532_SETCLK 0x2C#define TV8532_POINT_L 0x2D#define TV8532_POINT_H 0x2E#define TV8532_POINTB_L 0x2F#define TV8532_POINTB_H 0x30#define TV8532_BUDGET_L 0x2A#define TV8532_BUDGET_H 0x2B#define TV8532_VID_L 0x34#define TV8532_VID_H 0x35#define TV8532_PID_L 0x36#define TV8532_PID_H 0x37#define TV8532_DeviceID 0x83#define TV8532_AD_SLOPE 0x91#define TV8532_AD_BITCTRL 0x94#define TV8532_AD_COLBEGIN_L 0x10#define TV8532_AD_COLBEGIN_H 0x11#define TV8532_AD_ROWBEGIN_L 0x14#define TV8532_AD_ROWBEGIN_H 0x15/***************************************************************/static void tv8532_initPictSetting(struct usb_spca50x *spca50x);static __u16 tv8532_getbrightness(struct usb_spca50x *spca50x);static __u16 tv8532_setbrightness(struct usb_spca50x *spca50x);static __u16 tv8532_setcontrast(struct usb_spca50x *spca50x);static void tv8532_configure(struct usb_spca50x *spca50x);static int tv8532_init(struct usb_spca50x *spca50x);static void tv8532_start(struct usb_spca50x *spca50x);static void tv8532_stop(struct usb_spca50x *spca50x);/****************************************************************/static __u32 tv_8532_eeprom_data[] = {/*add dataL dataM dataH */    0x00010001, 0x01018011, 0x02050014, 0x0305001c,    0x040d001e, 0x0505001f, 0x06050519, 0x0705011b,    0x0805091e, 0x090d892e, 0x0a05892f, 0x0b050dd9,    0x0c0509f1, 0};static void tv_8532WriteEEprom(struct usb_spca50x *spca50x){    int i = 0;    __u8 reg, data0, data1, data2, datacmd;    struct usb_device *dev = spca50x->dev;    datacmd = 0xb0;;    spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_GPIO, &datacmd, 1);    datacmd = TV8532_CMD_EEprom_Open;    spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_CTRL, &datacmd, 1);//wait_ms(1);    while (tv_8532_eeprom_data[i]) {	reg = (tv_8532_eeprom_data[i] & 0xFF000000) >> 24;	spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_Add,			&reg, 1);	//wait_ms(1);	data0 = (tv_8532_eeprom_data[i] & 0x000000FF);	spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_DataL,			&data0, 1);	//wait_ms(1);	data1 = (tv_8532_eeprom_data[i] & 0x0000FF00) >> 8;	spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_DataM,			&data1, 1);	//wait_ms(1);	data2 = (tv_8532_eeprom_data[i] & 0x00FF0000) >> 16;	spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_DataH,			&data2, 1);	//wait_ms(1);	datacmd = 0;	spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_Write,			&datacmd, 1);	//wait_ms(10);	i++;    }    datacmd = i;    spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_EEprom_TableLength,		    &datacmd, 1);//wait_ms(1); //udelay(1000);    datacmd = TV8532_CMD_EEprom_Close;    spca5xxRegWrite(dev, TV8532_REQ_RegWrite, 0, TV8532_CTRL, &datacmd, 1);    wait_ms(10);}static void tv8532_initPictSetting(struct usb_spca50x *spca50x){    /* set the initial value of brightness and contrast        on probe */    spca50x->brightness = 0x018f << 7;    spca50x->contrast = 0x80 << 8;}static __u16 tv8532_getbrightness(struct usb_spca50x *spca50x){    return spca50x->brightness;}static __u16 tv8532_setbrightness(struct usb_spca50x *spca50x){    __u8 value[2] = { 0xfc, 0x01 };    __u8 data;    int brightness = (spca50x->brightness >> 7);    if (brightness > 0x01FF)	brightness = 0x01FF;    if (brightness < 1)	brightness = 1;    value[1] = ((brightness >> 8) & 0xff);    value[0] = ((brightness) & 0xff);    spca5xxRegWrite(spca50x->dev, TV8532_REQ_RegWrite, 0, TV8532_EXPOSURE, value, 2);	//1c    data = TV8532_CMD_UPDATE;    spca5xxRegWrite(spca50x->dev, TV8532_REQ_RegWrite, 0, TV8532_PART_CTRL,		    &data, 1);    return 0;}static __u16 tv8532_setcontrast(struct usb_spca50x *spca50x){    return 0;}static void tv8532_configure(struct usb_spca50x *spca50x){    tv_8532WriteEEprom(spca50x);}static void tv_8532ReadRegisters(struct usb_spca50x *spca50x){    struct usb_device *dev = spca50x->dev;    __u8 data = 0;    //__u16 vid,pid;    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, 0x0001, &data, 1);    PDEBUG(1, "register 0x01-> %x", data);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, 0x0002, &data, 1);    PDEBUG(1, "register 0x02-> %x", data);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_ADWIDTH_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_ADWIDTH_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_QUANT_COMP, &data,		   1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_MODE_PACKET, &data,		   1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_SETCLK, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_POINT_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_POINT_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_POINTB_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_POINTB_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_BUDGET_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_BUDGET_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_VID_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_VID_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_PID_L, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_PID_H, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_DeviceID, &data, 1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_COLBEGIN_L, &data,		   1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_COLBEGIN_H, &data,		   1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_ROWBEGIN_L, &data,		   1);    spca5xxRegRead(dev, TV8532_REQ_RegRead, 0, TV8532_AD_ROWBEGIN_H, &data,		   1);}static void tv_8532_setReg(struct usb_spca50x *spca50x){    struct usb_device *dev = spca50x->dev;    __u8 data = 0;    __u8 value[2] = { 0, 0 };    data = ADCBEGINL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -