1 /* 2 * netup_unidvb.h 3 * 4 * Data type definitions for NetUP Universal Dual DVB-CI 5 * 6 * Copyright (C) 2014 NetUP Inc. 7 * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru> 8 * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 */ 20 21 #include <linux/pci.h> 22 #include <linux/i2c.h> 23 #include <linux/workqueue.h> 24 #include <media/v4l2-common.h> 25 #include <media/v4l2-device.h> 26 #include <media/videobuf2-dvb.h> 27 #include <dvb_ca_en50221.h> 28 29 #define NETUP_UNIDVB_NAME "netup_unidvb" 30 #define NETUP_UNIDVB_VERSION "0.0.1" 31 #define NETUP_VENDOR_ID 0x1b55 32 #define NETUP_PCI_DEV_REVISION 0x2 33 34 /* IRQ-related regisers */ 35 #define REG_ISR 0x4890 36 #define REG_ISR_MASKED 0x4892 37 #define REG_IMASK_SET 0x4894 38 #define REG_IMASK_CLEAR 0x4896 39 /* REG_ISR register bits */ 40 #define NETUP_UNIDVB_IRQ_SPI (1 << 0) 41 #define NETUP_UNIDVB_IRQ_I2C0 (1 << 1) 42 #define NETUP_UNIDVB_IRQ_I2C1 (1 << 2) 43 #define NETUP_UNIDVB_IRQ_FRA0 (1 << 4) 44 #define NETUP_UNIDVB_IRQ_FRA1 (1 << 5) 45 #define NETUP_UNIDVB_IRQ_FRB0 (1 << 6) 46 #define NETUP_UNIDVB_IRQ_FRB1 (1 << 7) 47 #define NETUP_UNIDVB_IRQ_DMA1 (1 << 8) 48 #define NETUP_UNIDVB_IRQ_DMA2 (1 << 9) 49 #define NETUP_UNIDVB_IRQ_CI (1 << 10) 50 #define NETUP_UNIDVB_IRQ_CAM0 (1 << 11) 51 #define NETUP_UNIDVB_IRQ_CAM1 (1 << 12) 52 53 struct netup_dma { 54 u8 num; 55 spinlock_t lock; 56 struct netup_unidvb_dev *ndev; 57 struct netup_dma_regs *regs; 58 u32 ring_buffer_size; 59 u8 *addr_virt; 60 dma_addr_t addr_phys; 61 u64 addr_last; 62 u32 high_addr; 63 u32 data_offset; 64 u32 data_size; 65 struct list_head free_buffers; 66 struct work_struct work; 67 struct timer_list timeout; 68 }; 69 70 enum netup_i2c_state { 71 STATE_DONE, 72 STATE_WAIT, 73 STATE_WANT_READ, 74 STATE_WANT_WRITE, 75 STATE_ERROR 76 }; 77 78 struct netup_i2c_regs; 79 80 struct netup_i2c { 81 spinlock_t lock; 82 wait_queue_head_t wq; 83 struct i2c_adapter adap; 84 struct netup_unidvb_dev *dev; 85 struct netup_i2c_regs *regs; 86 struct i2c_msg *msg; 87 enum netup_i2c_state state; 88 u32 xmit_size; 89 }; 90 91 struct netup_ci_state { 92 struct dvb_ca_en50221 ca; 93 u8 __iomem *membase8_config; 94 u8 __iomem *membase8_io; 95 struct netup_unidvb_dev *dev; 96 int status; 97 int nr; 98 }; 99 100 struct netup_spi; 101 102 struct netup_unidvb_dev { 103 struct pci_dev *pci_dev; 104 int pci_bus; 105 int pci_slot; 106 int pci_func; 107 int board_num; 108 int old_fw; 109 u32 __iomem *lmmio0; 110 u8 __iomem *bmmio0; 111 u32 __iomem *lmmio1; 112 u8 __iomem *bmmio1; 113 u8 *dma_virt; 114 dma_addr_t dma_phys; 115 u32 dma_size; 116 struct vb2_dvb_frontends frontends[2]; 117 struct netup_i2c i2c[2]; 118 struct workqueue_struct *wq; 119 struct netup_dma dma[2]; 120 struct netup_ci_state ci[2]; 121 struct netup_spi *spi; 122 }; 123 124 int netup_i2c_register(struct netup_unidvb_dev *ndev); 125 void netup_i2c_unregister(struct netup_unidvb_dev *ndev); 126 irqreturn_t netup_ci_interrupt(struct netup_unidvb_dev *ndev); 127 irqreturn_t netup_i2c_interrupt(struct netup_i2c *i2c); 128 irqreturn_t netup_spi_interrupt(struct netup_spi *spi); 129 int netup_unidvb_ci_register(struct netup_unidvb_dev *dev, 130 int num, struct pci_dev *pci_dev); 131 void netup_unidvb_ci_unregister(struct netup_unidvb_dev *dev, int num); 132 int netup_spi_init(struct netup_unidvb_dev *ndev); 133 void netup_spi_release(struct netup_unidvb_dev *ndev); 134