• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/media/dvb/mantis/
1/*
2	Mantis PCI bridge driver
3
4	Copyright (C) Manu Abraham (abraham.manu@gmail.com)
5
6	This program is free software; you can redistribute it and/or modify
7	it under the terms of the GNU General Public License as published by
8	the Free Software Foundation; either version 2 of the License, or
9	(at your option) any later version.
10
11	This program is distributed in the hope that it will be useful,
12	but WITHOUT ANY WARRANTY; without even the implied warranty of
13	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14	GNU General Public License for more details.
15
16	You should have received a copy of the GNU General Public License
17	along with this program; if not, write to the Free Software
18	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19*/
20
21#ifndef __MANTIS_COMMON_H
22#define __MANTIS_COMMON_H
23
24#include <linux/mutex.h>
25#include <linux/workqueue.h>
26
27#include "mantis_uart.h"
28
29#include "mantis_link.h"
30
31#define MANTIS_ERROR		0
32#define MANTIS_NOTICE		1
33#define MANTIS_INFO		2
34#define MANTIS_DEBUG		3
35#define MANTIS_TMG		9
36
37#define dprintk(y, z, format, arg...) do {								\
38	if (z) {											\
39		if	((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y))			\
40			printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
41		else if	((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y))			\
42			printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
43		else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y))			\
44			printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
45		else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y))			\
46			printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
47		else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y))			\
48			printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
49	} else {											\
50		if (mantis->verbose > y)								\
51			printk(format , ##arg);								\
52	}												\
53} while(0)
54
55#define mwrite(dat, addr)	writel((dat), addr)
56#define mread(addr)		readl(addr)
57
58#define mmwrite(dat, addr)	mwrite((dat), (mantis->mmio + (addr)))
59#define mmread(addr)		mread(mantis->mmio + (addr))
60
61#define MANTIS_TS_188		0
62#define MANTIS_TS_204		1
63
64#define TWINHAN_TECHNOLOGIES	0x1822
65#define MANTIS			0x4e35
66
67#define TECHNISAT		0x1ae4
68#define TERRATEC		0x153b
69
70#define MAKE_ENTRY(__subven, __subdev, __configptr) {			\
71		.vendor		= TWINHAN_TECHNOLOGIES,			\
72		.device		= MANTIS,				\
73		.subvendor	= (__subven),				\
74		.subdevice	= (__subdev),				\
75		.driver_data	= (unsigned long) (__configptr)		\
76}
77
78enum mantis_i2c_mode {
79	MANTIS_PAGE_MODE = 0,
80	MANTIS_BYTE_MODE,
81};
82
83struct mantis_pci;
84
85struct mantis_hwconfig {
86	char			*model_name;
87	char			*dev_type;
88	u32			ts_size;
89
90	enum mantis_baud	baud_rate;
91	enum mantis_parity	parity;
92	u32			bytes;
93
94	irqreturn_t (*irq_handler)(int irq, void *dev_id);
95	int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe);
96
97	u8			power;
98	u8			reset;
99
100	enum mantis_i2c_mode	i2c_mode;
101};
102
103struct mantis_pci {
104	unsigned int		verbose;
105
106	/*	PCI stuff		*/
107	u16			vendor_id;
108	u16			device_id;
109	u16			subsystem_vendor;
110	u16			subsystem_device;
111
112	u8			latency;
113
114	struct pci_dev		*pdev;
115
116	unsigned long		mantis_addr;
117	void __iomem		*mmio;
118
119	u8			irq;
120	u8			revision;
121
122	unsigned int		num;
123
124	/*	RISC Core		*/
125	u32			finished_block;
126	u32			last_block;
127	u32			line_bytes;
128	u32			line_count;
129	u32			risc_pos;
130	u8			*buf_cpu;
131	dma_addr_t		buf_dma;
132	u32			*risc_cpu;
133	dma_addr_t		risc_dma;
134
135	struct tasklet_struct	tasklet;
136
137	struct i2c_adapter	adapter;
138	int			i2c_rc;
139	wait_queue_head_t	i2c_wq;
140	struct mutex		i2c_lock;
141
142	/*	DVB stuff		*/
143	struct dvb_adapter	dvb_adapter;
144	struct dvb_frontend	*fe;
145	struct dvb_demux	demux;
146	struct dmxdev		dmxdev;
147	struct dmx_frontend	fe_hw;
148	struct dmx_frontend	fe_mem;
149	struct dvb_net		dvbnet;
150
151	u8			feeds;
152
153	struct mantis_hwconfig	*hwconfig;
154
155	u32			mantis_int_stat;
156	u32			mantis_int_mask;
157
158	/*	board specific		*/
159	u8			mac_address[8];
160	u32			sub_vendor_id;
161	u32			sub_device_id;
162
163	 /*	A12 A13 A14		*/
164	u32			gpio_status;
165
166	u32			gpif_status;
167
168	struct mantis_ca	*mantis_ca;
169
170	wait_queue_head_t	uart_wq;
171	struct work_struct	uart_work;
172	spinlock_t		uart_lock;
173
174	struct input_dev	*rc;
175};
176
177#define MANTIS_HIF_STATUS	(mantis->gpio_status)
178
179#endif /* __MANTIS_COMMON_H */
180