Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / media / saa7146.h
index e62f03f..fee579f 100644 (file)
@@ -1,7 +1,6 @@
 #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/i2c.h>         /* for i2c subsystem */
 #include <asm/io.h>            /* for accessing devices */
 #include <linux/stringify.h>
+#include <linux/mutex.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_VERSION_CODE 0x000500  /* 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__)
+//#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))),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 DEBUG_PROLOG printk("%s: %s(): ",KBUILD_MODNAME,__FUNCTION__)
+#define INFO(x) { printk("%s: ",KBUILD_MODNAME); printk x; }
 
 #define ERR(x) { DEBUG_PROLOG; printk x; }
 
@@ -51,10 +42,12 @@ extern unsigned int saa7146_debug;
 #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) \
+#define SAA7146_IER_DISABLE(x,y) \
        saa7146_write(x, IER, saa7146_read(x, IER) & ~(y));
-#define IER_ENABLE(x,y) \
+#define SAA7146_IER_ENABLE(x,y) \
        saa7146_write(x, IER, saa7146_read(x, IER) | (y));
+#define SAA7146_ISR_CLEAR(x,y) \
+       saa7146_write(x, ISR, (y));
 
 struct saa7146_dev;
 struct saa7146_extension;
@@ -63,7 +56,7 @@ struct saa7146_vv;
 /* saa7146 page table */
 struct saa7146_pgtable {
        unsigned int    size;
-       u32             *cpu;
+       u32             *cpu;
        dma_addr_t      dma;
        /* used for offsets for u,v planes for planar capture modes */
        unsigned long   offset;
@@ -91,20 +84,20 @@ struct saa7146_extension
 #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);
+       void    (*irq_func)(struct saa7146_dev*, u32* irq_mask);
 };
 
 struct saa7146_dma
@@ -120,18 +113,18 @@ struct saa7146_dev
        struct list_head                item;
 
        /* different device locks */
-               spinlock_t                      slock;
-        struct semaphore               lock;
+       spinlock_t                      slock;
+       struct mutex                    lock;
 
-       unsigned char                   *mem;           /* pointer to mapped IO memory */
+       unsigned char                   __iomem *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;
-       
+       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) */
@@ -142,24 +135,25 @@ struct saa7146_dev
        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;
-       
+       struct mutex                    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;
+       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, unsigned int class, u32 bitrate);
-int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg msgs[], int num,  int retries);
+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;
+extern struct mutex 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);
@@ -168,7 +162,7 @@ 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);
+int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop);
 
 /* some memory sizes */
 #define SAA7146_I2C_MEM                ( 1*PAGE_SIZE)
@@ -176,8 +170,8 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 
 /* 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 */
+#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
@@ -270,7 +264,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 #define MASK_W1   0xffff0000    /* Mask value for word 1 */
 
 #define MASK_PA   0xfffffffc    /* Mask value for physical address */
-#define MASK_PR   0xfffffffe   /* Mask value for protection register */
+#define MASK_PR   0xfffffffe   /* Mask value for protection register */
 #define MASK_ER   0xffffffff    /* Mask value for the entire register */
 
 #define MASK_NONE 0x00000000    /* No mask */
@@ -293,7 +287,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 #define BASE_ODD3         0x30  /* Video DMA 3 registers */
 #define BASE_EVEN3        0x34
 #define PROT_ADDR3        0x38
-#define PITCH3            0x3C         
+#define PITCH3            0x3C
 #define BASE_PAGE3        0x40  /* Video DMA 3 base page */
 #define NUM_LINE_BYTE3    0x44
 
@@ -321,15 +315,15 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 #define DEBI_CONFIG       0x7C
 #define DEBI_COMMAND      0x80
 #define DEBI_PAGE         0x84
-#define DEBI_AD           0x88 
+#define DEBI_AD           0x88
 
-#define I2C_TRANSFER      0x8C 
-#define I2C_STATUS        0x90 
+#define I2C_TRANSFER      0x8C
+#define I2C_STATUS        0x90
 
 #define BASE_A1_IN        0x94 /* Audio 1 input DMA */
 #define PROT_A1_IN        0x98
 #define PAGE_A1_IN        0x9C
-  
+
 #define BASE_A1_OUT       0xA0  /* Audio 1 output DMA */
 #define PROT_A1_OUT       0xA4
 #define PAGE_A1_OUT       0xA8
@@ -369,12 +363,12 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 #define RPS_ADDR0         0x104  /* RPS task 0 address register */
 #define RPS_ADDR1         0x108  /* RPS task 1 address register */
 
-#define ISR               0x10C  /* Interrupt status register */                                                             
+#define ISR               0x10C  /* Interrupt status register */
 #define PSR               0x110  /* Primary status register */
 #define SSR               0x114  /* Secondary status register */
 
 #define EC1R              0x118  /* Event counter set 1 register */
-#define EC2R              0x11C  /* Event counter set 2 register */         
+#define EC2R              0x11C  /* Event counter set 2 register */
 
 #define PCI_VDP1          0x120  /* Video DMA pointer of FIFO 1 */
 #define PCI_VDP2          0x124  /* Video DMA pointer of FIFO 2 */
@@ -448,4 +442,3 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev);
 #define SAA7146_I2C_BUS_BIT_RATE_60    (0x300)
 
 #endif
-