Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * netup_unidvb.h
0004  *
0005  * Data type definitions for NetUP Universal Dual DVB-CI
0006  *
0007  * Copyright (C) 2014 NetUP Inc.
0008  * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru>
0009  * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
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 /* IRQ-related regisers */
0026 #define REG_ISR         0x4890
0027 #define REG_ISR_MASKED      0x4892
0028 #define REG_IMASK_SET       0x4894
0029 #define REG_IMASK_CLEAR     0x4896
0030 /* REG_ISR register bits */
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 /* NetUP Universal DVB card hardware revisions and it's PCI device id's:
0045  * 1.3 - CXD2841ER demod, ASCOT2E and HORUS3A tuners
0046  * 1.4 - CXD2854ER demod, HELENE tuner
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);