netup_unidvb.h (3494B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * netup_unidvb.h 4 * 5 * Data type definitions for NetUP Universal Dual DVB-CI 6 * 7 * Copyright (C) 2014 NetUP Inc. 8 * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru> 9 * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru> 10 */ 11 12#include <linux/pci.h> 13#include <linux/i2c.h> 14#include <linux/workqueue.h> 15#include <media/v4l2-common.h> 16#include <media/v4l2-device.h> 17#include <media/videobuf2-dvb.h> 18#include <media/dvb_ca_en50221.h> 19 20#define NETUP_UNIDVB_NAME "netup_unidvb" 21#define NETUP_UNIDVB_VERSION "0.0.1" 22#define NETUP_VENDOR_ID 0x1b55 23#define NETUP_PCI_DEV_REVISION 0x2 24 25/* IRQ-related regisers */ 26#define REG_ISR 0x4890 27#define REG_ISR_MASKED 0x4892 28#define REG_IMASK_SET 0x4894 29#define REG_IMASK_CLEAR 0x4896 30/* REG_ISR register bits */ 31#define NETUP_UNIDVB_IRQ_SPI (1 << 0) 32#define NETUP_UNIDVB_IRQ_I2C0 (1 << 1) 33#define NETUP_UNIDVB_IRQ_I2C1 (1 << 2) 34#define NETUP_UNIDVB_IRQ_FRA0 (1 << 4) 35#define NETUP_UNIDVB_IRQ_FRA1 (1 << 5) 36#define NETUP_UNIDVB_IRQ_FRB0 (1 << 6) 37#define NETUP_UNIDVB_IRQ_FRB1 (1 << 7) 38#define NETUP_UNIDVB_IRQ_DMA1 (1 << 8) 39#define NETUP_UNIDVB_IRQ_DMA2 (1 << 9) 40#define NETUP_UNIDVB_IRQ_CI (1 << 10) 41#define NETUP_UNIDVB_IRQ_CAM0 (1 << 11) 42#define NETUP_UNIDVB_IRQ_CAM1 (1 << 12) 43 44/* NetUP Universal DVB card hardware revisions and it's PCI device id's: 45 * 1.3 - CXD2841ER demod, ASCOT2E and HORUS3A tuners 46 * 1.4 - CXD2854ER demod, HELENE tuner 47*/ 48enum netup_hw_rev { 49 NETUP_HW_REV_1_3 = 0x18F6, 50 NETUP_HW_REV_1_4 = 0x18F7 51}; 52 53struct netup_dma { 54 u8 num; 55 spinlock_t lock; 56 struct netup_unidvb_dev *ndev; 57 struct netup_dma_regs __iomem *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 70enum netup_i2c_state { 71 STATE_DONE, 72 STATE_WAIT, 73 STATE_WANT_READ, 74 STATE_WANT_WRITE, 75 STATE_ERROR 76}; 77 78struct netup_i2c_regs; 79 80struct 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 __iomem *regs; 86 struct i2c_msg *msg; 87 enum netup_i2c_state state; 88 u32 xmit_size; 89}; 90 91struct 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 100struct netup_spi; 101 102struct 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 enum netup_hw_rev rev; 123}; 124 125int netup_i2c_register(struct netup_unidvb_dev *ndev); 126void netup_i2c_unregister(struct netup_unidvb_dev *ndev); 127irqreturn_t netup_ci_interrupt(struct netup_unidvb_dev *ndev); 128irqreturn_t netup_i2c_interrupt(struct netup_i2c *i2c); 129irqreturn_t netup_spi_interrupt(struct netup_spi *spi); 130int netup_unidvb_ci_register(struct netup_unidvb_dev *dev, 131 int num, struct pci_dev *pci_dev); 132void netup_unidvb_ci_unregister(struct netup_unidvb_dev *dev, int num); 133int netup_spi_init(struct netup_unidvb_dev *ndev); 134void netup_spi_release(struct netup_unidvb_dev *ndev);