📄 saa7146.h
字号:
#ifndef __SAA7146__#define __SAA7146__#include <linux/version.h> /* for version macros */#include <linux/module.h> /* for module-version */#include <linux/delay.h> /* for delay-stuff */#include <linux/slab.h> /* for kmalloc/kfree */#include <linux/pci.h> /* for pci-config-stuff, vendor ids etc. */#include <linux/init.h> /* for "__init" */#include <linux/interrupt.h> /* for IMMEDIATE_BH */#include <linux/kmod.h> /* for kernel module loader */#include <linux/i2c.h> /* for i2c subsystem */#include <asm/io.h> /* for accessing devices */#include <linux/stringify.h>#include <linux/vmalloc.h> /* for vmalloc() */#include <linux/mm.h> /* for vmalloc_to_page() *//* ugly, but necessary to build the dvb stuff under 2.4. */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) #include "dvb_functions.h"#endif#define SAA7146_VERSION_CODE KERNEL_VERSION(0,5,0)#define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr)))#define saa7146_read(sxy,adr) readl(sxy->mem+(adr))extern unsigned int saa7146_debug;//#define DEBUG_PROLOG printk("(0x%08x)(0x%08x) %s: %s(): ",(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,RPS_ADDR0))),(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,IER))),__stringify(KBUILD_MODNAME),__FUNCTION__)#ifndef DEBUG_VARIABLE #define DEBUG_VARIABLE saa7146_debug#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51)#define DEBUG_PROLOG printk("%s: %s(): ",__stringify(KBUILD_BASENAME),__FUNCTION__)#define INFO(x) { printk("%s: ",__stringify(KBUILD_BASENAME)); printk x; }#else#define DEBUG_PROLOG printk("%s: %s(): ",__stringify(KBUILD_MODNAME),__FUNCTION__)#define INFO(x) { printk("%s: ",__stringify(KBUILD_MODNAME)); printk x; }#endif#define ERR(x) { DEBUG_PROLOG; printk x; }#define DEB_S(x) if (0!=(DEBUG_VARIABLE&0x01)) { DEBUG_PROLOG; printk x; } /* simple debug messages */#define DEB_D(x) if (0!=(DEBUG_VARIABLE&0x02)) { DEBUG_PROLOG; printk x; } /* more detailed debug messages */#define DEB_EE(x) if (0!=(DEBUG_VARIABLE&0x04)) { DEBUG_PROLOG; printk x; } /* print enter and exit of functions */#define DEB_I2C(x) if (0!=(DEBUG_VARIABLE&0x08)) { DEBUG_PROLOG; printk x; } /* i2c debug messages */#define DEB_VBI(x) if (0!=(DEBUG_VARIABLE&0x10)) { DEBUG_PROLOG; printk x; } /* vbi debug messages */#define DEB_INT(x) if (0!=(DEBUG_VARIABLE&0x20)) { DEBUG_PROLOG; printk x; } /* interrupt debug messages */#define DEB_CAP(x) if (0!=(DEBUG_VARIABLE&0x40)) { DEBUG_PROLOG; printk x; } /* capture debug messages */#define IER_DISABLE(x,y) \ saa7146_write(x, IER, saa7146_read(x, IER) & ~(y));#define IER_ENABLE(x,y) \ saa7146_write(x, IER, saa7146_read(x, IER) | (y));struct saa7146_dev;struct saa7146_extension;struct saa7146_vv;/* saa7146 page table */struct saa7146_pgtable { unsigned int size; u32 *cpu; dma_addr_t dma; /* used for offsets for u,v planes for planar capture modes */ unsigned long offset; /* used for custom pagetables (used for example by budget dvb cards) */ struct scatterlist *slist;};struct saa7146_pci_extension_data { struct saa7146_extension *ext; void *ext_priv; /* most likely a name string */};#define MAKE_EXTENSION_PCI(x_var, x_vendor, x_device) \ { \ .vendor = PCI_VENDOR_ID_PHILIPS, \ .device = PCI_DEVICE_ID_PHILIPS_SAA7146, \ .subvendor = x_vendor, \ .subdevice = x_device, \ .driver_data = (unsigned long)& x_var, \ }struct saa7146_extension{ char name[32]; /* name of the device */#define SAA7146_USE_I2C_IRQ 0x1#define SAA7146_I2C_SHORT_DELAY 0x2 int flags; /* pairs of subvendor and subdevice ids for supported devices, last entry 0xffff, 0xfff */ struct module *module; struct pci_driver driver; struct pci_device_id *pci_tbl; /* extension functions */ int (*probe)(struct saa7146_dev *); int (*attach)(struct saa7146_dev *, struct saa7146_pci_extension_data *); int (*detach)(struct saa7146_dev*); u32 irq_mask; /* mask to indicate, which irq-events are handled by the extension */ void (*irq_func)(struct saa7146_dev*, u32* irq_mask);};struct saa7146_dma{ dma_addr_t dma_handle; u32 *cpu_addr;};struct saa7146_dev{ struct module *module; struct list_head item; /* different device locks */ spinlock_t slock; struct semaphore lock; unsigned char *mem; /* pointer to mapped IO memory */ int revision; /* chip revision; needed for bug-workarounds*/ /* pci-device & irq stuff*/ char name[32]; struct pci_dev *pci; u32 int_todo; spinlock_t int_slock; /* extension handling */ struct saa7146_extension *ext; /* indicates if handled by extension */ void *ext_priv; /* pointer for extension private use (most likely some private data) */ struct saa7146_ext_vv *ext_vv_data; /* per device video/vbi informations (if available) */ struct saa7146_vv *vv_data; void (*vv_callback)(struct saa7146_dev *dev, unsigned long status); /* i2c-stuff */ struct semaphore i2c_lock; u32 i2c_bitrate; struct saa7146_dma d_i2c; /* pointer to i2c memory */ wait_queue_head_t i2c_wq; int i2c_op; /* memories */ struct saa7146_dma d_rps0; struct saa7146_dma d_rps1;};/* from saa7146_i2c.c */int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate);int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg msgs[], int num, int retries);/* from saa7146_core.c */extern struct list_head saa7146_devices;extern struct semaphore saa7146_devices_lock;int saa7146_register_extension(struct saa7146_extension*);int saa7146_unregister_extension(struct saa7146_extension*);struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc);int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt);void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt);int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length );char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt);void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data);int saa7146_wait_for_debi_done(struct saa7146_dev *dev);/* some memory sizes */#define SAA7146_I2C_MEM ( 1*PAGE_SIZE)#define SAA7146_RPS_MEM ( 1*PAGE_SIZE)/* some i2c constants */#define SAA7146_I2C_TIMEOUT 100 /* i2c-timeout-value in ms */#define SAA7146_I2C_RETRIES 3 /* how many times shall we retry an i2c-operation? */#define SAA7146_I2C_DELAY 5 /* time we wait after certain i2c-operations *//* unsorted defines */#define ME1 0x0000000800#define PV1 0x0000000008/* gpio defines */#define SAA7146_GPIO_INPUT 0x00#define SAA7146_GPIO_IRQHI 0x10#define SAA7146_GPIO_IRQLO 0x20#define SAA7146_GPIO_IRQHL 0x30#define SAA7146_GPIO_OUTLO 0x40#define SAA7146_GPIO_OUTHI 0x50/* debi defines */#define DEBINOSWAP 0x000e0000/* define for the register programming sequencer (rps) */#define CMD_NOP 0x00000000 /* No operation */#define CMD_CLR_EVENT 0x00000000 /* Clear event */#define CMD_SET_EVENT 0x10000000 /* Set signal event */#define CMD_PAUSE 0x20000000 /* Pause */#define CMD_CHECK_LATE 0x30000000 /* Check late */#define CMD_UPLOAD 0x40000000 /* Upload */#define CMD_STOP 0x50000000 /* Stop */#define CMD_INTERRUPT 0x60000000 /* Interrupt */#define CMD_JUMP 0x80000000 /* Jump */#define CMD_WR_REG 0x90000000 /* Write (load) register */#define CMD_RD_REG 0xa0000000 /* Read (store) register */#define CMD_WR_REG_MASK 0xc0000000 /* Write register with mask */#define CMD_OAN MASK_27#define CMD_INV MASK_26#define CMD_SIG4 MASK_25#define CMD_SIG3 MASK_24#define CMD_SIG2 MASK_23#define CMD_SIG1 MASK_22#define CMD_SIG0 MASK_21#define CMD_O_FID_B MASK_14#define CMD_E_FID_B MASK_13#define CMD_O_FID_A MASK_12#define CMD_E_FID_A MASK_11/* some events and command modifiers for rps1 squarewave generator */#define EVT_HS (1<<15) // Source Line Threshold reached#define EVT_VBI_B (1<<9) // VSYNC Event#define RPS_OAN (1<<27) // 1: OR events, 0: AND events
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -