X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fmedia%2Fvideo%2Fusbvision%2Fusbvision.h;h=0e2b5569986097f816e8fcd5ff2b1a9e825cb33f;hb=6f78e186fe5d29dbff5e34f950adb573c4808de4;hp=ef83a5c4d2fd529eff6751efd0b6dbd5d47c6cd7;hpb=5f7fb877be14da92803f0b5b60955e071ebe2d58;p=pandora-kernel.git diff --git a/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h index ef83a5c4d2fd..0e2b55699860 100644 --- a/drivers/media/video/usbvision/usbvision.h +++ b/drivers/media/video/usbvision/usbvision.h @@ -3,9 +3,14 @@ * usbvision header file * * Copyright (c) 1999-2005 Joerg Heckenbach + * Dwaine Garden + * + * + * Report problems to v4l MailingList : http://www.redhat.com/mailman/listinfo/video4linux-list * * This module is part of usbvision driver project. * Updates to driver completed by Dwaine P. Garden + * v4l2 conversion by Thierry Merle * * 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 @@ -28,7 +33,11 @@ #include #include -#include "usbvision-i2c.h" +#include +#include +#include + +#define USBVISION_DEBUG /* Turn on debug messages */ #ifndef VID_HARDWARE_USBVISION #define VID_HARDWARE_USBVISION 34 /* USBVision Video Grabber */ @@ -139,11 +148,21 @@ #define USBVISION_MAX_ISOC_PACKET_SIZE 959 // NT1003 Specs Document says 1023 #define USBVISION_NUM_HEADERMARKER 20 -#define USBVISION_NUMFRAMES 3 -#define USBVISION_NUMSBUF 2 +#define USBVISION_NUMFRAMES 3 /* Maximum number of frames an application can get */ +#define USBVISION_NUMSBUF 2 /* Dimensioning the USB S buffering */ #define USBVISION_POWEROFF_TIME 3 * (HZ) // 3 seconds + +#define FRAMERATE_MIN 0 +#define FRAMERATE_MAX 31 + +enum { + ISOC_MODE_YUV422 = 0x03, + ISOC_MODE_YUV420 = 0x14, + ISOC_MODE_COMPRESS = 0x60, +}; + /* This macro restricts an int variable to an inclusive range */ #define RESTRICT_TO_RANGE(v,mi,ma) { if ((v) < (mi)) (v) = (mi); else if ((v) > (ma)) (v) = (ma); } @@ -181,8 +200,6 @@ mr = LIMIT_RGB(mm_r); \ } - - /* Debugging aid */ #define USBVISION_SAY_AND_WAIT(what) { \ wait_queue_head_t wq; \ @@ -202,7 +219,11 @@ ((udevice)->last_error == 0) && \ (!(udevice)->remove_pending)) +#define I2C_USB_ADAP_MAX 16 +/* ----------------------------------------------------------------- */ +/* usbvision video structures */ +/* ----------------------------------------------------------------- */ enum ScanState { ScanState_Scanning, /* Scanning for header */ ScanState_Lines /* Parsing lines */ @@ -319,8 +340,6 @@ struct usbvision_frame { #define BRIDGE_NT1004 1004 #define BRIDGE_NT1005 1005 -#define USBVISION_I2C_CLIENTS_MAX 8 - struct usbvision_device_data_st { int idVendor; int idProduct; @@ -349,14 +368,10 @@ struct usb_usbvision { struct video_device *vdev; /* Video Device */ struct video_device *rdev; /* Radio Device */ struct video_device *vbi; /* VBI Device */ - struct video_audio audio_dev; /* Current audio params */ /* i2c Declaration Section*/ struct i2c_adapter i2c_adap; - struct i2c_algo_usb_data i2c_algo; struct i2c_client i2c_client; - int i2c_state, i2c_ok; - struct i2c_client *i2c_clients[USBVISION_I2C_CLIENTS_MAX]; struct urb *ctrlUrb; unsigned char ctrlUrbBuffer[8]; @@ -365,8 +380,10 @@ struct usb_usbvision { wait_queue_head_t ctrlUrb_wq; // Processes waiting struct semaphore ctrlUrbLock; + /* configuration part */ int have_tuner; int tuner_type; + int tuner_addr; int bridgeType; // NT1003, NT1004, NT1005 int channel; int radio; @@ -375,7 +392,7 @@ struct usb_usbvision { int AudioMute; int AudioChannel; int isocMode; // format of video data for the usb isoc-transfer - unsigned int nr; // Number of the device < MAX_USBVISION + unsigned int nr; // Number of the device /* Device structure */ struct usb_device *dev; @@ -387,7 +404,6 @@ struct usb_usbvision { struct work_struct powerOffWork; int power; /* is the device powered on? */ int user; /* user count for exclusive use */ - int usbvision_used; /* Is this structure in use? */ int initialized; /* Had we already sent init sequence? */ int DevModel; /* What type of USBVISION device we got? */ enum StreamState streaming; /* Are we streaming Isochronous? */ @@ -405,7 +421,7 @@ struct usb_usbvision { wait_queue_head_t wait_stream; /* Processes waiting */ struct usbvision_frame *curFrame; // pointer to current frame, set by usbvision_find_header struct usbvision_frame frame[USBVISION_NUMFRAMES]; // frame buffer - int curSbufNum; // number of current receiving sbuf + int num_frames; // number of frames allocated struct usbvision_sbuf sbuf[USBVISION_NUMSBUF]; // S buffering volatile int remove_pending; /* If set then about to exit */ @@ -416,13 +432,7 @@ struct usb_usbvision { int scratch_headermarker[USBVISION_NUM_HEADERMARKER]; int scratch_headermarker_read_ptr; int scratch_headermarker_write_ptr; - int isocstate; - /* color controls */ - int saturation; - int hue; - int brightness; - int contrast; - int depth; + enum IsocState isocstate; struct usbvision_v4l2_format_st palette; struct v4l2_capability vcap; /* Video capabilities */ @@ -430,17 +440,6 @@ struct usb_usbvision { struct usbvision_tvnorm *tvnorm; /* selected tv norm */ unsigned char video_endp; /* 0x82 for USBVISION devices based */ - // Overlay stuff: - struct v4l2_framebuffer vid_buf; - struct v4l2_format vid_win; - int vid_buf_valid; // Status: video buffer is valid (set) - int vid_win_valid; // Status: video window is valid (set) - int overlay; /*Status: Are we overlaying? */ - unsigned int clipmask[USBVISION_CLIPMASK_SIZE / 4]; - unsigned char *overlay_base; /* Virtual base address of video buffer */ - unsigned char *overlay_win; /* virt start address of overlay window */ - struct usbvision_frame overlay_frame; - // Decompression stuff: unsigned char *IntraFrameBuffer; /* Buffer for reference frame */ int BlockPos; //for test only @@ -452,16 +451,6 @@ struct usb_usbvision { int lastComprLevel; // How strong (100) or weak (0) was compression int usb_bandwidth; /* Mbit/s */ - /* /proc entries, relative to /proc/video/usbvision/ */ - struct proc_dir_entry *proc_devdir; /* Per-device proc directory */ - struct proc_dir_entry *proc_info; /* /info entry */ - struct proc_dir_entry *proc_register; /* /register entry */ - struct proc_dir_entry *proc_freq; /* /freq entry */ - struct proc_dir_entry *proc_input; /* /input entry */ - struct proc_dir_entry *proc_frame; /* /frame entry */ - struct proc_dir_entry *proc_button; /* /button entry */ - struct proc_dir_entry *proc_control; /* /control entry */ - /* Statistics that can be overlayed on the screen */ unsigned long isocUrbCount; // How many URBs we received so far unsigned long urb_length; /* Length of last URB */ @@ -482,6 +471,55 @@ struct usb_usbvision { int ComprBlockTypes[4]; }; + +/* --------------------------------------------------------------- */ +/* defined in usbvision-i2c.c */ +/* i2c-algo-usb declaration */ +/* --------------------------------------------------------------- */ + +int usbvision_i2c_usb_del_bus(struct i2c_adapter *); + + +/* ----------------------------------------------------------------------- */ +/* usbvision specific I2C functions */ +/* ----------------------------------------------------------------------- */ +int usbvision_init_i2c(struct usb_usbvision *usbvision); +void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg); + +/* defined in usbvision-core.c */ +int usbvision_read_reg(struct usb_usbvision *usbvision, unsigned char reg); +int usbvision_write_reg(struct usb_usbvision *usbvision, unsigned char reg, + unsigned char value); + +int usbvision_frames_alloc(struct usb_usbvision *usbvision, int number_of_frames); +void usbvision_frames_free(struct usb_usbvision *usbvision); +int usbvision_scratch_alloc(struct usb_usbvision *usbvision); +void usbvision_scratch_free(struct usb_usbvision *usbvision); +int usbvision_decompress_alloc(struct usb_usbvision *usbvision); +void usbvision_decompress_free(struct usb_usbvision *usbvision); + +int usbvision_setup(struct usb_usbvision *usbvision,int format); +int usbvision_init_isoc(struct usb_usbvision *usbvision); +int usbvision_restart_isoc(struct usb_usbvision *usbvision); +void usbvision_stop_isoc(struct usb_usbvision *usbvision); + +int usbvision_set_audio(struct usb_usbvision *usbvision, int AudioChannel); +int usbvision_audio_off(struct usb_usbvision *usbvision); + +int usbvision_begin_streaming(struct usb_usbvision *usbvision); +void usbvision_empty_framequeues(struct usb_usbvision *dev); +int usbvision_stream_interrupt(struct usb_usbvision *dev); + +int usbvision_muxsel(struct usb_usbvision *usbvision, int channel); +int usbvision_set_input(struct usb_usbvision *usbvision); +int usbvision_set_output(struct usb_usbvision *usbvision, int width, int height); + +void usbvision_init_powerOffTimer(struct usb_usbvision *usbvision); +void usbvision_set_powerOffTimer(struct usb_usbvision *usbvision); +void usbvision_reset_powerOffTimer(struct usb_usbvision *usbvision); +int usbvision_power_off(struct usb_usbvision *usbvision); +int usbvision_power_on(struct usb_usbvision *usbvision); + #endif /* __LINUX_USBVISION_H */ /*