1*c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2d32f9ff7Snibble.max /* 3d32f9ff7Snibble.max * SMI PCIe driver for DVBSky cards. 4d32f9ff7Snibble.max * 5d32f9ff7Snibble.max * Copyright (C) 2014 Max nibble <nibble.max@gmail.com> 6d32f9ff7Snibble.max */ 7d32f9ff7Snibble.max 8d32f9ff7Snibble.max #ifndef _SMI_PCIE_H_ 9d32f9ff7Snibble.max #define _SMI_PCIE_H_ 10d32f9ff7Snibble.max 11d32f9ff7Snibble.max #include <linux/i2c.h> 12d32f9ff7Snibble.max #include <linux/i2c-algo-bit.h> 13d32f9ff7Snibble.max #include <linux/init.h> 14d32f9ff7Snibble.max #include <linux/interrupt.h> 15d32f9ff7Snibble.max #include <linux/kernel.h> 16d32f9ff7Snibble.max #include <linux/module.h> 17d32f9ff7Snibble.max #include <linux/pci.h> 18d32f9ff7Snibble.max #include <linux/dma-mapping.h> 19d32f9ff7Snibble.max #include <linux/slab.h> 20d32f9ff7Snibble.max #include <media/rc-core.h> 21d32f9ff7Snibble.max 22fada1935SMauro Carvalho Chehab #include <media/demux.h> 23fada1935SMauro Carvalho Chehab #include <media/dmxdev.h> 24fada1935SMauro Carvalho Chehab #include <media/dvb_demux.h> 25fada1935SMauro Carvalho Chehab #include <media/dvb_frontend.h> 26fada1935SMauro Carvalho Chehab #include <media/dvb_net.h> 27fada1935SMauro Carvalho Chehab #include <media/dvbdev.h> 28d32f9ff7Snibble.max 29d32f9ff7Snibble.max /* -------- Register Base -------- */ 30d32f9ff7Snibble.max #define MSI_CONTROL_REG_BASE 0x0800 31d32f9ff7Snibble.max #define SYSTEM_CONTROL_REG_BASE 0x0880 32d32f9ff7Snibble.max #define PCIE_EP_DEBUG_REG_BASE 0x08C0 33d32f9ff7Snibble.max #define IR_CONTROL_REG_BASE 0x0900 34d32f9ff7Snibble.max #define I2C_A_CONTROL_REG_BASE 0x0940 35d32f9ff7Snibble.max #define I2C_B_CONTROL_REG_BASE 0x0980 36d32f9ff7Snibble.max #define ATV_PORTA_CONTROL_REG_BASE 0x09C0 37d32f9ff7Snibble.max #define DTV_PORTA_CONTROL_REG_BASE 0x0A00 38d32f9ff7Snibble.max #define AES_PORTA_CONTROL_REG_BASE 0x0A80 39d32f9ff7Snibble.max #define DMA_PORTA_CONTROL_REG_BASE 0x0AC0 40d32f9ff7Snibble.max #define ATV_PORTB_CONTROL_REG_BASE 0x0B00 41d32f9ff7Snibble.max #define DTV_PORTB_CONTROL_REG_BASE 0x0B40 42d32f9ff7Snibble.max #define AES_PORTB_CONTROL_REG_BASE 0x0BC0 43d32f9ff7Snibble.max #define DMA_PORTB_CONTROL_REG_BASE 0x0C00 44d32f9ff7Snibble.max #define UART_A_REGISTER_BASE 0x0C40 45d32f9ff7Snibble.max #define UART_B_REGISTER_BASE 0x0C80 46d32f9ff7Snibble.max #define GPS_CONTROL_REG_BASE 0x0CC0 47d32f9ff7Snibble.max #define DMA_PORTC_CONTROL_REG_BASE 0x0D00 48d32f9ff7Snibble.max #define DMA_PORTD_CONTROL_REG_BASE 0x0D00 49d32f9ff7Snibble.max #define AES_RANDOM_DATA_BASE 0x0D80 50d32f9ff7Snibble.max #define AES_KEY_IN_BASE 0x0D90 51d32f9ff7Snibble.max #define RANDOM_DATA_LIB_BASE 0x0E00 52d32f9ff7Snibble.max #define IR_DATA_BUFFER_BASE 0x0F00 53d32f9ff7Snibble.max #define PORTA_TS_BUFFER_BASE 0x1000 54d32f9ff7Snibble.max #define PORTA_I2S_BUFFER_BASE 0x1400 55d32f9ff7Snibble.max #define PORTB_TS_BUFFER_BASE 0x1800 56d32f9ff7Snibble.max #define PORTB_I2S_BUFFER_BASE 0x1C00 57d32f9ff7Snibble.max 58d32f9ff7Snibble.max /* -------- MSI control and state register -------- */ 59d32f9ff7Snibble.max #define MSI_DELAY_TIMER (MSI_CONTROL_REG_BASE + 0x00) 60d32f9ff7Snibble.max #define MSI_INT_STATUS (MSI_CONTROL_REG_BASE + 0x08) 61d32f9ff7Snibble.max #define MSI_INT_STATUS_CLR (MSI_CONTROL_REG_BASE + 0x0C) 62d32f9ff7Snibble.max #define MSI_INT_STATUS_SET (MSI_CONTROL_REG_BASE + 0x10) 63d32f9ff7Snibble.max #define MSI_INT_ENA (MSI_CONTROL_REG_BASE + 0x14) 64d32f9ff7Snibble.max #define MSI_INT_ENA_CLR (MSI_CONTROL_REG_BASE + 0x18) 65d32f9ff7Snibble.max #define MSI_INT_ENA_SET (MSI_CONTROL_REG_BASE + 0x1C) 66d32f9ff7Snibble.max #define MSI_SOFT_RESET (MSI_CONTROL_REG_BASE + 0x20) 67d32f9ff7Snibble.max #define MSI_CFG_SRC0 (MSI_CONTROL_REG_BASE + 0x24) 68d32f9ff7Snibble.max 69d32f9ff7Snibble.max /* -------- Hybird Controller System Control register -------- */ 70d32f9ff7Snibble.max #define MUX_MODE_CTRL (SYSTEM_CONTROL_REG_BASE + 0x00) 71d32f9ff7Snibble.max #define rbPaMSMask 0x07 72d32f9ff7Snibble.max #define rbPaMSDtvNoGpio 0x00 /*[2:0], DTV Simple mode */ 73d32f9ff7Snibble.max #define rbPaMSDtv4bitGpio 0x01 /*[2:0], DTV TS2 Serial mode)*/ 74d32f9ff7Snibble.max #define rbPaMSDtv7bitGpio 0x02 /*[2:0], DTV TS0 Serial mode*/ 75d32f9ff7Snibble.max #define rbPaMS8bitGpio 0x03 /*[2:0], GPIO mode selected;(8bit GPIO)*/ 76d32f9ff7Snibble.max #define rbPaMSAtv 0x04 /*[2:0], 3'b1xx: ATV mode select*/ 77d32f9ff7Snibble.max #define rbPbMSMask 0x38 78d32f9ff7Snibble.max #define rbPbMSDtvNoGpio 0x00 /*[5:3], DTV Simple mode */ 79d32f9ff7Snibble.max #define rbPbMSDtv4bitGpio 0x08 /*[5:3], DTV TS2 Serial mode*/ 80d32f9ff7Snibble.max #define rbPbMSDtv7bitGpio 0x10 /*[5:3], DTV TS0 Serial mode*/ 81d32f9ff7Snibble.max #define rbPbMS8bitGpio 0x18 /*[5:3], GPIO mode selected;(8bit GPIO)*/ 82d32f9ff7Snibble.max #define rbPbMSAtv 0x20 /*[5:3], 3'b1xx: ATV mode select*/ 83d32f9ff7Snibble.max #define rbPaAESEN 0x40 /*[6], port A AES enable bit*/ 84d32f9ff7Snibble.max #define rbPbAESEN 0x80 /*[7], port B AES enable bit*/ 85d32f9ff7Snibble.max 86d32f9ff7Snibble.max #define INTERNAL_RST (SYSTEM_CONTROL_REG_BASE + 0x04) 87d32f9ff7Snibble.max #define PERIPHERAL_CTRL (SYSTEM_CONTROL_REG_BASE + 0x08) 88d32f9ff7Snibble.max #define GPIO_0to7_CTRL (SYSTEM_CONTROL_REG_BASE + 0x0C) 89d32f9ff7Snibble.max #define GPIO_8to15_CTRL (SYSTEM_CONTROL_REG_BASE + 0x10) 90d32f9ff7Snibble.max #define GPIO_16to24_CTRL (SYSTEM_CONTROL_REG_BASE + 0x14) 91d32f9ff7Snibble.max #define GPIO_INT_SRC_CFG (SYSTEM_CONTROL_REG_BASE + 0x18) 92d32f9ff7Snibble.max #define SYS_BUF_STATUS (SYSTEM_CONTROL_REG_BASE + 0x1C) 93d32f9ff7Snibble.max #define PCIE_IP_REG_ACS (SYSTEM_CONTROL_REG_BASE + 0x20) 94d32f9ff7Snibble.max #define PCIE_IP_REG_ACS_ADDR (SYSTEM_CONTROL_REG_BASE + 0x24) 95d32f9ff7Snibble.max #define PCIE_IP_REG_ACS_DATA (SYSTEM_CONTROL_REG_BASE + 0x28) 96d32f9ff7Snibble.max 97d32f9ff7Snibble.max /* -------- IR Control register -------- */ 98d32f9ff7Snibble.max #define IR_Init_Reg (IR_CONTROL_REG_BASE + 0x00) 99d32f9ff7Snibble.max #define IR_Idle_Cnt_Low (IR_CONTROL_REG_BASE + 0x04) 100d32f9ff7Snibble.max #define IR_Idle_Cnt_High (IR_CONTROL_REG_BASE + 0x05) 101d32f9ff7Snibble.max #define IR_Unit_Cnt_Low (IR_CONTROL_REG_BASE + 0x06) 102d32f9ff7Snibble.max #define IR_Unit_Cnt_High (IR_CONTROL_REG_BASE + 0x07) 103d32f9ff7Snibble.max #define IR_Data_Cnt (IR_CONTROL_REG_BASE + 0x08) 104d32f9ff7Snibble.max #define rbIRen 0x80 105d32f9ff7Snibble.max #define rbIRhighidle 0x10 106d32f9ff7Snibble.max #define rbIRlowidle 0x00 107d32f9ff7Snibble.max #define rbIRVld 0x04 108d32f9ff7Snibble.max 109d32f9ff7Snibble.max /* -------- I2C A control and state register -------- */ 110d32f9ff7Snibble.max #define I2C_A_CTL_STATUS (I2C_A_CONTROL_REG_BASE + 0x00) 111d32f9ff7Snibble.max #define I2C_A_ADDR (I2C_A_CONTROL_REG_BASE + 0x04) 112d32f9ff7Snibble.max #define I2C_A_SW_CTL (I2C_A_CONTROL_REG_BASE + 0x08) 113d32f9ff7Snibble.max #define I2C_A_TIME_OUT_CNT (I2C_A_CONTROL_REG_BASE + 0x0C) 114d32f9ff7Snibble.max #define I2C_A_FIFO_STATUS (I2C_A_CONTROL_REG_BASE + 0x10) 115d32f9ff7Snibble.max #define I2C_A_FS_EN (I2C_A_CONTROL_REG_BASE + 0x14) 116d32f9ff7Snibble.max #define I2C_A_FIFO_DATA (I2C_A_CONTROL_REG_BASE + 0x20) 117d32f9ff7Snibble.max 118d32f9ff7Snibble.max /* -------- I2C B control and state register -------- */ 119d32f9ff7Snibble.max #define I2C_B_CTL_STATUS (I2C_B_CONTROL_REG_BASE + 0x00) 120d32f9ff7Snibble.max #define I2C_B_ADDR (I2C_B_CONTROL_REG_BASE + 0x04) 121d32f9ff7Snibble.max #define I2C_B_SW_CTL (I2C_B_CONTROL_REG_BASE + 0x08) 122d32f9ff7Snibble.max #define I2C_B_TIME_OUT_CNT (I2C_B_CONTROL_REG_BASE + 0x0C) 123d32f9ff7Snibble.max #define I2C_B_FIFO_STATUS (I2C_B_CONTROL_REG_BASE + 0x10) 124d32f9ff7Snibble.max #define I2C_B_FS_EN (I2C_B_CONTROL_REG_BASE + 0x14) 125d32f9ff7Snibble.max #define I2C_B_FIFO_DATA (I2C_B_CONTROL_REG_BASE + 0x20) 126d32f9ff7Snibble.max 127d32f9ff7Snibble.max #define VIDEO_CTRL_STATUS_A (ATV_PORTA_CONTROL_REG_BASE + 0x04) 128d32f9ff7Snibble.max 129d32f9ff7Snibble.max /* -------- Digital TV control register, Port A -------- */ 130d32f9ff7Snibble.max #define MPEG2_CTRL_A (DTV_PORTA_CONTROL_REG_BASE + 0x00) 131d32f9ff7Snibble.max #define SERIAL_IN_ADDR_A (DTV_PORTA_CONTROL_REG_BASE + 0x4C) 132d32f9ff7Snibble.max #define VLD_CNT_ADDR_A (DTV_PORTA_CONTROL_REG_BASE + 0x60) 133d32f9ff7Snibble.max #define ERR_CNT_ADDR_A (DTV_PORTA_CONTROL_REG_BASE + 0x64) 134d32f9ff7Snibble.max #define BRD_CNT_ADDR_A (DTV_PORTA_CONTROL_REG_BASE + 0x68) 135d32f9ff7Snibble.max 136d32f9ff7Snibble.max /* -------- DMA Control Register, Port A -------- */ 137d32f9ff7Snibble.max #define DMA_PORTA_CHAN0_ADDR_LOW (DMA_PORTA_CONTROL_REG_BASE + 0x00) 138d32f9ff7Snibble.max #define DMA_PORTA_CHAN0_ADDR_HI (DMA_PORTA_CONTROL_REG_BASE + 0x04) 139d32f9ff7Snibble.max #define DMA_PORTA_CHAN0_TRANS_STATE (DMA_PORTA_CONTROL_REG_BASE + 0x08) 140d32f9ff7Snibble.max #define DMA_PORTA_CHAN0_CONTROL (DMA_PORTA_CONTROL_REG_BASE + 0x0C) 141d32f9ff7Snibble.max #define DMA_PORTA_CHAN1_ADDR_LOW (DMA_PORTA_CONTROL_REG_BASE + 0x10) 142d32f9ff7Snibble.max #define DMA_PORTA_CHAN1_ADDR_HI (DMA_PORTA_CONTROL_REG_BASE + 0x14) 143d32f9ff7Snibble.max #define DMA_PORTA_CHAN1_TRANS_STATE (DMA_PORTA_CONTROL_REG_BASE + 0x18) 144d32f9ff7Snibble.max #define DMA_PORTA_CHAN1_CONTROL (DMA_PORTA_CONTROL_REG_BASE + 0x1C) 145d32f9ff7Snibble.max #define DMA_PORTA_MANAGEMENT (DMA_PORTA_CONTROL_REG_BASE + 0x20) 146d32f9ff7Snibble.max #define VIDEO_CTRL_STATUS_B (ATV_PORTB_CONTROL_REG_BASE + 0x04) 147d32f9ff7Snibble.max 148d32f9ff7Snibble.max /* -------- Digital TV control register, Port B -------- */ 149d32f9ff7Snibble.max #define MPEG2_CTRL_B (DTV_PORTB_CONTROL_REG_BASE + 0x00) 150d32f9ff7Snibble.max #define SERIAL_IN_ADDR_B (DTV_PORTB_CONTROL_REG_BASE + 0x4C) 151d32f9ff7Snibble.max #define VLD_CNT_ADDR_B (DTV_PORTB_CONTROL_REG_BASE + 0x60) 152d32f9ff7Snibble.max #define ERR_CNT_ADDR_B (DTV_PORTB_CONTROL_REG_BASE + 0x64) 153d32f9ff7Snibble.max #define BRD_CNT_ADDR_B (DTV_PORTB_CONTROL_REG_BASE + 0x68) 154d32f9ff7Snibble.max 155d32f9ff7Snibble.max /* -------- AES control register, Port B -------- */ 156d32f9ff7Snibble.max #define AES_CTRL_B (AES_PORTB_CONTROL_REG_BASE + 0x00) 157d32f9ff7Snibble.max #define AES_KEY_BASE_B (AES_PORTB_CONTROL_REG_BASE + 0x04) 158d32f9ff7Snibble.max 159d32f9ff7Snibble.max /* -------- DMA Control Register, Port B -------- */ 160d32f9ff7Snibble.max #define DMA_PORTB_CHAN0_ADDR_LOW (DMA_PORTB_CONTROL_REG_BASE + 0x00) 161d32f9ff7Snibble.max #define DMA_PORTB_CHAN0_ADDR_HI (DMA_PORTB_CONTROL_REG_BASE + 0x04) 162d32f9ff7Snibble.max #define DMA_PORTB_CHAN0_TRANS_STATE (DMA_PORTB_CONTROL_REG_BASE + 0x08) 163d32f9ff7Snibble.max #define DMA_PORTB_CHAN0_CONTROL (DMA_PORTB_CONTROL_REG_BASE + 0x0C) 164d32f9ff7Snibble.max #define DMA_PORTB_CHAN1_ADDR_LOW (DMA_PORTB_CONTROL_REG_BASE + 0x10) 165d32f9ff7Snibble.max #define DMA_PORTB_CHAN1_ADDR_HI (DMA_PORTB_CONTROL_REG_BASE + 0x14) 166d32f9ff7Snibble.max #define DMA_PORTB_CHAN1_TRANS_STATE (DMA_PORTB_CONTROL_REG_BASE + 0x18) 167d32f9ff7Snibble.max #define DMA_PORTB_CHAN1_CONTROL (DMA_PORTB_CONTROL_REG_BASE + 0x1C) 168d32f9ff7Snibble.max #define DMA_PORTB_MANAGEMENT (DMA_PORTB_CONTROL_REG_BASE + 0x20) 169d32f9ff7Snibble.max 170d32f9ff7Snibble.max #define DMA_TRANS_UNIT_188 (0x00000007) 171d32f9ff7Snibble.max 172d32f9ff7Snibble.max /* -------- Macro define of 24 interrupt resource --------*/ 173d32f9ff7Snibble.max #define DMA_A_CHAN0_DONE_INT (0x00000001) 174d32f9ff7Snibble.max #define DMA_A_CHAN1_DONE_INT (0x00000002) 175d32f9ff7Snibble.max #define DMA_B_CHAN0_DONE_INT (0x00000004) 176d32f9ff7Snibble.max #define DMA_B_CHAN1_DONE_INT (0x00000008) 177d32f9ff7Snibble.max #define DMA_C_CHAN0_DONE_INT (0x00000010) 178d32f9ff7Snibble.max #define DMA_C_CHAN1_DONE_INT (0x00000020) 179d32f9ff7Snibble.max #define DMA_D_CHAN0_DONE_INT (0x00000040) 180d32f9ff7Snibble.max #define DMA_D_CHAN1_DONE_INT (0x00000080) 181d32f9ff7Snibble.max #define DATA_BUF_OVERFLOW_INT (0x00000100) 182d32f9ff7Snibble.max #define UART_0_X_INT (0x00000200) 183d32f9ff7Snibble.max #define UART_1_X_INT (0x00000400) 184d32f9ff7Snibble.max #define IR_X_INT (0x00000800) 185d32f9ff7Snibble.max #define GPIO_0_INT (0x00001000) 186d32f9ff7Snibble.max #define GPIO_1_INT (0x00002000) 187d32f9ff7Snibble.max #define GPIO_2_INT (0x00004000) 188d32f9ff7Snibble.max #define GPIO_3_INT (0x00008000) 189d32f9ff7Snibble.max #define ALL_INT (0x0000FFFF) 190d32f9ff7Snibble.max 191d32f9ff7Snibble.max /* software I2C bit mask */ 192d32f9ff7Snibble.max #define SW_I2C_MSK_MODE 0x01 193d32f9ff7Snibble.max #define SW_I2C_MSK_CLK_OUT 0x02 194d32f9ff7Snibble.max #define SW_I2C_MSK_DAT_OUT 0x04 195d32f9ff7Snibble.max #define SW_I2C_MSK_CLK_EN 0x08 196d32f9ff7Snibble.max #define SW_I2C_MSK_DAT_EN 0x10 197d32f9ff7Snibble.max #define SW_I2C_MSK_DAT_IN 0x40 198d32f9ff7Snibble.max #define SW_I2C_MSK_CLK_IN 0x80 199d32f9ff7Snibble.max 200d32f9ff7Snibble.max #define SMI_VID 0x1ADE 201d32f9ff7Snibble.max #define SMI_PID 0x3038 202d32f9ff7Snibble.max #define SMI_TS_DMA_BUF_SIZE (1024 * 188) 203d32f9ff7Snibble.max 204d32f9ff7Snibble.max struct smi_cfg_info { 205d32f9ff7Snibble.max #define SMI_DVBSKY_S952 0 206d32f9ff7Snibble.max #define SMI_DVBSKY_S950 1 207d32f9ff7Snibble.max #define SMI_DVBSKY_T9580 2 208d32f9ff7Snibble.max #define SMI_DVBSKY_T982 3 2090ed8289bSOlli Salonen #define SMI_TECHNOTREND_S2_4200 4 210d32f9ff7Snibble.max int type; 211d32f9ff7Snibble.max char *name; 212d32f9ff7Snibble.max #define SMI_TS_NULL 0 213d32f9ff7Snibble.max #define SMI_TS_DMA_SINGLE 1 214d32f9ff7Snibble.max #define SMI_TS_DMA_BOTH 3 215d32f9ff7Snibble.max /* SMI_TS_NULL: not use; 216d32f9ff7Snibble.max * SMI_TS_DMA_SINGLE: use DMA 0 only; 217d32f9ff7Snibble.max * SMI_TS_DMA_BOTH:use DMA 0 and 1.*/ 218d32f9ff7Snibble.max int ts_0; 219d32f9ff7Snibble.max int ts_1; 220d32f9ff7Snibble.max #define DVBSKY_FE_NULL 0 221d32f9ff7Snibble.max #define DVBSKY_FE_M88RS6000 1 222d32f9ff7Snibble.max #define DVBSKY_FE_M88DS3103 2 223d32f9ff7Snibble.max #define DVBSKY_FE_SIT2 3 224d32f9ff7Snibble.max int fe_0; 225d32f9ff7Snibble.max int fe_1; 2266dfe9911SOlli Salonen char *rc_map; 227d32f9ff7Snibble.max }; 228d32f9ff7Snibble.max 2298783b9c5SNibble Max struct smi_rc { 2308783b9c5SNibble Max struct smi_dev *dev; 2318783b9c5SNibble Max struct rc_dev *rc_dev; 2328783b9c5SNibble Max char input_phys[64]; 233518f4b26SSean Young char device_name[64]; 2348783b9c5SNibble Max u8 irData[256]; 2358783b9c5SNibble Max 2368783b9c5SNibble Max int users; 2378783b9c5SNibble Max }; 2388783b9c5SNibble Max 239d32f9ff7Snibble.max struct smi_port { 240d32f9ff7Snibble.max struct smi_dev *dev; 241d32f9ff7Snibble.max int idx; 242d32f9ff7Snibble.max int enable; 243d32f9ff7Snibble.max int fe_type; 244d32f9ff7Snibble.max /* regs */ 245d32f9ff7Snibble.max u32 DMA_CHAN0_ADDR_LOW; 246d32f9ff7Snibble.max u32 DMA_CHAN0_ADDR_HI; 247d32f9ff7Snibble.max u32 DMA_CHAN0_TRANS_STATE; 248d32f9ff7Snibble.max u32 DMA_CHAN0_CONTROL; 249d32f9ff7Snibble.max u32 DMA_CHAN1_ADDR_LOW; 250d32f9ff7Snibble.max u32 DMA_CHAN1_ADDR_HI; 251d32f9ff7Snibble.max u32 DMA_CHAN1_TRANS_STATE; 252d32f9ff7Snibble.max u32 DMA_CHAN1_CONTROL; 253d32f9ff7Snibble.max u32 DMA_MANAGEMENT; 254d32f9ff7Snibble.max /* dma */ 255d32f9ff7Snibble.max dma_addr_t dma_addr[2]; 256d32f9ff7Snibble.max u8 *cpu_addr[2]; 257d32f9ff7Snibble.max u32 _dmaInterruptCH0; 258d32f9ff7Snibble.max u32 _dmaInterruptCH1; 259d32f9ff7Snibble.max u32 _int_status; 260d32f9ff7Snibble.max struct tasklet_struct tasklet; 261d32f9ff7Snibble.max /* dvb */ 262d32f9ff7Snibble.max struct dmx_frontend hw_frontend; 263d32f9ff7Snibble.max struct dmx_frontend mem_frontend; 264d32f9ff7Snibble.max struct dmxdev dmxdev; 265d32f9ff7Snibble.max struct dvb_adapter dvb_adapter; 266d32f9ff7Snibble.max struct dvb_demux demux; 267d32f9ff7Snibble.max struct dvb_net dvbnet; 268d32f9ff7Snibble.max int users; 269d32f9ff7Snibble.max struct dvb_frontend *fe; 270d32f9ff7Snibble.max /* frontend i2c module */ 271d32f9ff7Snibble.max struct i2c_client *i2c_client_demod; 272d32f9ff7Snibble.max struct i2c_client *i2c_client_tuner; 273d32f9ff7Snibble.max }; 274d32f9ff7Snibble.max 275d32f9ff7Snibble.max struct smi_dev { 276d32f9ff7Snibble.max int nr; 277d32f9ff7Snibble.max struct smi_cfg_info *info; 278d32f9ff7Snibble.max 279d32f9ff7Snibble.max /* pcie */ 280d32f9ff7Snibble.max struct pci_dev *pci_dev; 281d32f9ff7Snibble.max u32 __iomem *lmmio; 282d32f9ff7Snibble.max 283d32f9ff7Snibble.max /* ts port */ 284d32f9ff7Snibble.max struct smi_port ts_port[2]; 285d32f9ff7Snibble.max 286d32f9ff7Snibble.max /* i2c */ 287d32f9ff7Snibble.max struct i2c_adapter i2c_bus[2]; 288d32f9ff7Snibble.max struct i2c_algo_bit_data i2c_bit[2]; 2898783b9c5SNibble Max 2908783b9c5SNibble Max /* ir */ 2918783b9c5SNibble Max struct smi_rc ir; 292d32f9ff7Snibble.max }; 293d32f9ff7Snibble.max 294d32f9ff7Snibble.max #define smi_read(reg) readl(dev->lmmio + ((reg)>>2)) 295d32f9ff7Snibble.max #define smi_write(reg, value) writel((value), dev->lmmio + ((reg)>>2)) 296d32f9ff7Snibble.max 297d32f9ff7Snibble.max #define smi_andor(reg, mask, value) \ 298d32f9ff7Snibble.max writel((readl(dev->lmmio+((reg)>>2)) & ~(mask)) |\ 299d32f9ff7Snibble.max ((value) & (mask)), dev->lmmio+((reg)>>2)) 300d32f9ff7Snibble.max 301d32f9ff7Snibble.max #define smi_set(reg, bit) smi_andor((reg), (bit), (bit)) 302d32f9ff7Snibble.max #define smi_clear(reg, bit) smi_andor((reg), (bit), 0) 303d32f9ff7Snibble.max 3048783b9c5SNibble Max int smi_ir_irq(struct smi_rc *ir, u32 int_status); 3058783b9c5SNibble Max void smi_ir_start(struct smi_rc *ir); 3068783b9c5SNibble Max void smi_ir_exit(struct smi_dev *dev); 3078783b9c5SNibble Max int smi_ir_init(struct smi_dev *dev); 3088783b9c5SNibble Max 309d32f9ff7Snibble.max #endif /* #ifndef _SMI_PCIE_H_ */ 310