0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef __VIA_CORE_H__
0010 #define __VIA_CORE_H__
0011 #include <linux/types.h>
0012 #include <linux/io.h>
0013 #include <linux/spinlock.h>
0014 #include <linux/pci.h>
0015
0016
0017
0018
0019 enum via_port_type {
0020 VIA_PORT_NONE = 0,
0021 VIA_PORT_I2C,
0022 VIA_PORT_GPIO,
0023 };
0024
0025 enum via_port_mode {
0026 VIA_MODE_OFF = 0,
0027 VIA_MODE_I2C,
0028 VIA_MODE_GPIO,
0029 };
0030
0031 enum viafb_i2c_adap {
0032 VIA_PORT_26 = 0,
0033 VIA_PORT_31,
0034 VIA_PORT_25,
0035 VIA_PORT_2C,
0036 VIA_PORT_3D,
0037 };
0038 #define VIAFB_NUM_PORTS 5
0039
0040 struct via_port_cfg {
0041 enum via_port_type type;
0042 enum via_port_mode mode;
0043 u16 io_port;
0044 u8 ioport_index;
0045 };
0046
0047
0048
0049
0050 struct viafb_pm_hooks {
0051 struct list_head list;
0052 int (*suspend)(void *private);
0053 int (*resume)(void *private);
0054 void *private;
0055 };
0056
0057 void viafb_pm_register(struct viafb_pm_hooks *hooks);
0058 void viafb_pm_unregister(struct viafb_pm_hooks *hooks);
0059
0060
0061
0062
0063
0064 struct viafb_dev {
0065 struct pci_dev *pdev;
0066 int chip_type;
0067 struct via_port_cfg *port_cfg;
0068
0069
0070
0071
0072 spinlock_t reg_lock;
0073
0074
0075
0076
0077
0078
0079 unsigned long fbmem_start;
0080 long fbmem_len;
0081 void __iomem *fbmem;
0082 #if defined(CONFIG_VIDEO_VIA_CAMERA) || defined(CONFIG_VIDEO_VIA_CAMERA_MODULE)
0083 long camera_fbmem_offset;
0084 long camera_fbmem_size;
0085 #endif
0086
0087
0088
0089 unsigned long engine_start;
0090 unsigned long engine_len;
0091 void __iomem *engine_mmio;
0092
0093 };
0094
0095
0096
0097
0098
0099 void viafb_irq_enable(u32 mask);
0100 void viafb_irq_disable(u32 mask);
0101
0102
0103
0104
0105 #define VDE_INTERRUPT 0x200
0106 #define VDE_I_DVISENSE 0x00000001
0107 #define VDE_I_VBLANK 0x00000002
0108 #define VDE_I_MCCFI 0x00000004
0109 #define VDE_I_VSYNC 0x00000008
0110 #define VDE_I_DMA0DDONE 0x00000010
0111 #define VDE_I_DMA0TDONE 0x00000020
0112 #define VDE_I_DMA1DDONE 0x00000040
0113 #define VDE_I_DMA1TDONE 0x00000080
0114 #define VDE_I_C1AV 0x00000100
0115 #define VDE_I_HQV0 0x00000200
0116 #define VDE_I_HQV1 0x00000400
0117 #define VDE_I_HQV1EN 0x00000800
0118 #define VDE_I_C0AV 0x00001000
0119 #define VDE_I_C0VBI 0x00002000
0120 #define VDE_I_C1VBI 0x00004000
0121 #define VDE_I_VSYNC2 0x00008000
0122 #define VDE_I_DVISNSEN 0x00010000
0123 #define VDE_I_VSYNC2EN 0x00020000
0124 #define VDE_I_MCCFIEN 0x00040000
0125 #define VDE_I_VSYNCEN 0x00080000
0126 #define VDE_I_DMA0DDEN 0x00100000
0127 #define VDE_I_DMA0TDEN 0x00200000
0128 #define VDE_I_DMA1DDEN 0x00400000
0129 #define VDE_I_DMA1TDEN 0x00800000
0130 #define VDE_I_C1AVEN 0x01000000
0131 #define VDE_I_HQV0EN 0x02000000
0132 #define VDE_I_C1VBIEN 0x04000000
0133 #define VDE_I_LVDSSI 0x08000000
0134 #define VDE_I_C0AVEN 0x10000000
0135 #define VDE_I_C0VBIEN 0x20000000
0136 #define VDE_I_LVDSSIEN 0x40000000
0137 #define VDE_I_ENABLE 0x80000000
0138
0139 #if defined(CONFIG_VIDEO_VIA_CAMERA) || defined(CONFIG_VIDEO_VIA_CAMERA_MODULE)
0140
0141
0142
0143 int viafb_request_dma(void);
0144 void viafb_release_dma(void);
0145
0146 int viafb_dma_copy_out_sg(unsigned int offset, struct scatterlist *sg, int nsg);
0147
0148
0149
0150
0151 #define VDMA_MR0 0xe00
0152 #define VDMA_MR_CHAIN 0x01
0153 #define VDMA_MR_TDIE 0x02
0154 #define VDMA_CSR0 0xe04
0155 #define VDMA_C_ENABLE 0x01
0156 #define VDMA_C_START 0x02
0157 #define VDMA_C_ABORT 0x04
0158 #define VDMA_C_DONE 0x08
0159 #define VDMA_MARL0 0xe20
0160 #define VDMA_MARH0 0xe24
0161 #define VDMA_DAR0 0xe28
0162 #define VDMA_DQWCR0 0xe2c
0163 #define VDMA_TMR0 0xe30
0164 #define VDMA_DPRL0 0xe34
0165 #define VDMA_DPR_IN 0x08
0166 #define VDMA_DPRH0 0xe38
0167 #define VDMA_PMR0 (0xe00 + 0x134)
0168
0169
0170
0171
0172 #define VGA_WIDTH 640
0173 #define VGA_HEIGHT 480
0174 #endif
0175
0176
0177
0178
0179
0180
0181
0182 #define VIAStatus 0x3DA
0183 #define VIACR 0x3D4
0184 #define VIASR 0x3C4
0185 #define VIAGR 0x3CE
0186 #define VIAAR 0x3C0
0187
0188 static inline u8 via_read_reg(u16 port, u8 index)
0189 {
0190 outb(index, port);
0191 return inb(port + 1);
0192 }
0193
0194 static inline void via_write_reg(u16 port, u8 index, u8 data)
0195 {
0196 outb(index, port);
0197 outb(data, port + 1);
0198 }
0199
0200 static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask)
0201 {
0202 u8 old;
0203
0204 outb(index, port);
0205 old = inb(port + 1);
0206 outb((data & mask) | (old & ~mask), port + 1);
0207 }
0208
0209 #define VIA_MISC_REG_READ 0x03CC
0210 #define VIA_MISC_REG_WRITE 0x03C2
0211
0212 static inline void via_write_misc_reg_mask(u8 data, u8 mask)
0213 {
0214 u8 old = inb(VIA_MISC_REG_READ);
0215 outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE);
0216 }
0217
0218
0219 #endif