0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/pci.h>
0013 #include <linux/i2c.h>
0014 #include <linux/workqueue.h>
0015 #include <media/v4l2-common.h>
0016 #include <media/v4l2-device.h>
0017 #include <media/videobuf2-dvb.h>
0018 #include <media/dvb_ca_en50221.h>
0019
0020 #define NETUP_UNIDVB_NAME "netup_unidvb"
0021 #define NETUP_UNIDVB_VERSION "0.0.1"
0022 #define NETUP_VENDOR_ID 0x1b55
0023 #define NETUP_PCI_DEV_REVISION 0x2
0024
0025
0026 #define REG_ISR 0x4890
0027 #define REG_ISR_MASKED 0x4892
0028 #define REG_IMASK_SET 0x4894
0029 #define REG_IMASK_CLEAR 0x4896
0030
0031 #define NETUP_UNIDVB_IRQ_SPI (1 << 0)
0032 #define NETUP_UNIDVB_IRQ_I2C0 (1 << 1)
0033 #define NETUP_UNIDVB_IRQ_I2C1 (1 << 2)
0034 #define NETUP_UNIDVB_IRQ_FRA0 (1 << 4)
0035 #define NETUP_UNIDVB_IRQ_FRA1 (1 << 5)
0036 #define NETUP_UNIDVB_IRQ_FRB0 (1 << 6)
0037 #define NETUP_UNIDVB_IRQ_FRB1 (1 << 7)
0038 #define NETUP_UNIDVB_IRQ_DMA1 (1 << 8)
0039 #define NETUP_UNIDVB_IRQ_DMA2 (1 << 9)
0040 #define NETUP_UNIDVB_IRQ_CI (1 << 10)
0041 #define NETUP_UNIDVB_IRQ_CAM0 (1 << 11)
0042 #define NETUP_UNIDVB_IRQ_CAM1 (1 << 12)
0043
0044
0045
0046
0047
0048 enum netup_hw_rev {
0049 NETUP_HW_REV_1_3 = 0x18F6,
0050 NETUP_HW_REV_1_4 = 0x18F7
0051 };
0052
0053 struct netup_dma {
0054 u8 num;
0055 spinlock_t lock;
0056 struct netup_unidvb_dev *ndev;
0057 struct netup_dma_regs __iomem *regs;
0058 u32 ring_buffer_size;
0059 u8 *addr_virt;
0060 dma_addr_t addr_phys;
0061 u64 addr_last;
0062 u32 high_addr;
0063 u32 data_offset;
0064 u32 data_size;
0065 struct list_head free_buffers;
0066 struct work_struct work;
0067 struct timer_list timeout;
0068 };
0069
0070 enum netup_i2c_state {
0071 STATE_DONE,
0072 STATE_WAIT,
0073 STATE_WANT_READ,
0074 STATE_WANT_WRITE,
0075 STATE_ERROR
0076 };
0077
0078 struct netup_i2c_regs;
0079
0080 struct netup_i2c {
0081 spinlock_t lock;
0082 wait_queue_head_t wq;
0083 struct i2c_adapter adap;
0084 struct netup_unidvb_dev *dev;
0085 struct netup_i2c_regs __iomem *regs;
0086 struct i2c_msg *msg;
0087 enum netup_i2c_state state;
0088 u32 xmit_size;
0089 };
0090
0091 struct netup_ci_state {
0092 struct dvb_ca_en50221 ca;
0093 u8 __iomem *membase8_config;
0094 u8 __iomem *membase8_io;
0095 struct netup_unidvb_dev *dev;
0096 int status;
0097 int nr;
0098 };
0099
0100 struct netup_spi;
0101
0102 struct netup_unidvb_dev {
0103 struct pci_dev *pci_dev;
0104 int pci_bus;
0105 int pci_slot;
0106 int pci_func;
0107 int board_num;
0108 int old_fw;
0109 u32 __iomem *lmmio0;
0110 u8 __iomem *bmmio0;
0111 u32 __iomem *lmmio1;
0112 u8 __iomem *bmmio1;
0113 u8 *dma_virt;
0114 dma_addr_t dma_phys;
0115 u32 dma_size;
0116 struct vb2_dvb_frontends frontends[2];
0117 struct netup_i2c i2c[2];
0118 struct workqueue_struct *wq;
0119 struct netup_dma dma[2];
0120 struct netup_ci_state ci[2];
0121 struct netup_spi *spi;
0122 enum netup_hw_rev rev;
0123 };
0124
0125 int netup_i2c_register(struct netup_unidvb_dev *ndev);
0126 void netup_i2c_unregister(struct netup_unidvb_dev *ndev);
0127 irqreturn_t netup_ci_interrupt(struct netup_unidvb_dev *ndev);
0128 irqreturn_t netup_i2c_interrupt(struct netup_i2c *i2c);
0129 irqreturn_t netup_spi_interrupt(struct netup_spi *spi);
0130 int netup_unidvb_ci_register(struct netup_unidvb_dev *dev,
0131 int num, struct pci_dev *pci_dev);
0132 void netup_unidvb_ci_unregister(struct netup_unidvb_dev *dev, int num);
0133 int netup_spi_init(struct netup_unidvb_dev *ndev);
0134 void netup_spi_release(struct netup_unidvb_dev *ndev);