diff options
author | Michael Hunold <devnull@localhost> | 2003-07-15 09:30:02 +0000 |
---|---|---|
committer | Michael Hunold <devnull@localhost> | 2003-07-15 09:30:02 +0000 |
commit | 30fc1765bec73a3e808041aaf0a81b78eb870c01 (patch) | |
tree | c9751c7d0e88ead9128f0b1a505a17c21fc57890 /linux/drivers | |
parent | e1a9b2d3a7d70c586bd2587ea41f338e7cbaa075 (diff) | |
download | mediapointer-dvb-s2-30fc1765bec73a3e808041aaf0a81b78eb870c01.tar.gz mediapointer-dvb-s2-30fc1765bec73a3e808041aaf0a81b78eb870c01.tar.bz2 |
- indentation fixes
- use c99 initializers
- remove blank lines
- remove bt848.h -- it's already in driver/media/video
(this probably breaks 2.4 compilation)
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/dvb/bt8xx/Makefile | 2 | ||||
-rw-r--r-- | linux/drivers/media/dvb/bt8xx/bt848.h | 358 | ||||
-rw-r--r-- | linux/drivers/media/dvb/bt8xx/bt878.c | 466 | ||||
-rw-r--r-- | linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c | 45 |
4 files changed, 225 insertions, 646 deletions
diff --git a/linux/drivers/media/dvb/bt8xx/Makefile b/linux/drivers/media/dvb/bt8xx/Makefile index 8a933dc6a..66ecfa905 100644 --- a/linux/drivers/media/dvb/bt8xx/Makefile +++ b/linux/drivers/media/dvb/bt8xx/Makefile @@ -1,5 +1,5 @@ obj-$(CONFIG_DVB_BT8XX) += bt878.o dvb-bt8xx.o -EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ +EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ -Idrivers/media/video diff --git a/linux/drivers/media/dvb/bt8xx/bt848.h b/linux/drivers/media/dvb/bt8xx/bt848.h deleted file mode 100644 index 7015fd825..000000000 --- a/linux/drivers/media/dvb/bt8xx/bt848.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - bt848.h - Bt848 register offsets - - Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _BT848_H_ -#define _BT848_H_ - -#ifndef PCI_VENDOR_ID_BROOKTREE -#define PCI_VENDOR_ID_BROOKTREE 0x109e -#endif -#ifndef PCI_DEVICE_ID_BT848 -#define PCI_DEVICE_ID_BT848 0x350 -#endif -#ifndef PCI_DEVICE_ID_BT849 -#define PCI_DEVICE_ID_BT849 0x351 -#endif -#ifndef PCI_DEVICE_ID_BT878 -#define PCI_DEVICE_ID_BT878 0x36e -#endif -#ifndef PCI_DEVICE_ID_BT879 -#define PCI_DEVICE_ID_BT879 0x36f -#endif - - -/* Brooktree 848 registers */ - -#define BT848_DSTATUS 0x000 -#define BT848_DSTATUS_PRES (1<<7) -#define BT848_DSTATUS_HLOC (1<<6) -#define BT848_DSTATUS_FIELD (1<<5) -#define BT848_DSTATUS_NUML (1<<4) -#define BT848_DSTATUS_CSEL (1<<3) -#define BT848_DSTATUS_PLOCK (1<<2) -#define BT848_DSTATUS_LOF (1<<1) -#define BT848_DSTATUS_COF (1<<0) - -#define BT848_IFORM 0x004 -#define BT848_IFORM_HACTIVE (1<<7) -#define BT848_IFORM_MUXSEL (3<<5) -#define BT848_IFORM_MUX0 (2<<5) -#define BT848_IFORM_MUX1 (3<<5) -#define BT848_IFORM_MUX2 (1<<5) -#define BT848_IFORM_XTSEL (3<<3) -#define BT848_IFORM_XT0 (1<<3) -#define BT848_IFORM_XT1 (2<<3) -#define BT848_IFORM_XTAUTO (3<<3) -#define BT848_IFORM_XTBOTH (3<<3) -#define BT848_IFORM_NTSC 1 -#define BT848_IFORM_NTSC_J 2 -#define BT848_IFORM_PAL_BDGHI 3 -#define BT848_IFORM_PAL_M 4 -#define BT848_IFORM_PAL_N 5 -#define BT848_IFORM_SECAM 6 -#define BT848_IFORM_PAL_NC 7 -#define BT848_IFORM_AUTO 0 -#define BT848_IFORM_NORM 7 - -#define BT848_TDEC 0x008 -#define BT848_TDEC_DEC_FIELD (1<<7) -#define BT848_TDEC_FLDALIGN (1<<6) -#define BT848_TDEC_DEC_RAT (0x1f) - -#define BT848_E_CROP 0x00C -#define BT848_O_CROP 0x08C - -#define BT848_E_VDELAY_LO 0x010 -#define BT848_O_VDELAY_LO 0x090 - -#define BT848_E_VACTIVE_LO 0x014 -#define BT848_O_VACTIVE_LO 0x094 - -#define BT848_E_HDELAY_LO 0x018 -#define BT848_O_HDELAY_LO 0x098 - -#define BT848_E_HACTIVE_LO 0x01C -#define BT848_O_HACTIVE_LO 0x09C - -#define BT848_E_HSCALE_HI 0x020 -#define BT848_O_HSCALE_HI 0x0A0 - -#define BT848_E_HSCALE_LO 0x024 -#define BT848_O_HSCALE_LO 0x0A4 - -#define BT848_BRIGHT 0x028 - -#define BT848_E_CONTROL 0x02C -#define BT848_O_CONTROL 0x0AC -#define BT848_CONTROL_LNOTCH (1<<7) -#define BT848_CONTROL_COMP (1<<6) -#define BT848_CONTROL_LDEC (1<<5) -#define BT848_CONTROL_CBSENSE (1<<4) -#define BT848_CONTROL_CON_MSB (1<<2) -#define BT848_CONTROL_SAT_U_MSB (1<<1) -#define BT848_CONTROL_SAT_V_MSB (1<<0) - -#define BT848_CONTRAST_LO 0x030 -#define BT848_SAT_U_LO 0x034 -#define BT848_SAT_V_LO 0x038 -#define BT848_HUE 0x03C - -#define BT848_E_SCLOOP 0x040 -#define BT848_O_SCLOOP 0x0C0 -#define BT848_SCLOOP_CAGC (1<<6) -#define BT848_SCLOOP_CKILL (1<<5) -#define BT848_SCLOOP_HFILT_AUTO (0<<3) -#define BT848_SCLOOP_HFILT_CIF (1<<3) -#define BT848_SCLOOP_HFILT_QCIF (2<<3) -#define BT848_SCLOOP_HFILT_ICON (3<<3) - -#define BT848_SCLOOP_PEAK (1<<7) -#define BT848_SCLOOP_HFILT_MINP (1<<3) -#define BT848_SCLOOP_HFILT_MEDP (2<<3) -#define BT848_SCLOOP_HFILT_MAXP (3<<3) - - -#define BT848_OFORM 0x048 -#define BT848_OFORM_RANGE (1<<7) -#define BT848_OFORM_CORE0 (0<<5) -#define BT848_OFORM_CORE8 (1<<5) -#define BT848_OFORM_CORE16 (2<<5) -#define BT848_OFORM_CORE32 (3<<5) - -#define BT848_E_VSCALE_HI 0x04C -#define BT848_O_VSCALE_HI 0x0CC -#define BT848_VSCALE_YCOMB (1<<7) -#define BT848_VSCALE_COMB (1<<6) -#define BT848_VSCALE_INT (1<<5) -#define BT848_VSCALE_HI 15 - -#define BT848_E_VSCALE_LO 0x050 -#define BT848_O_VSCALE_LO 0x0D0 -#define BT848_TEST 0x054 -#define BT848_ADELAY 0x060 -#define BT848_BDELAY 0x064 - -#define BT848_ADC 0x068 -#define BT848_ADC_RESERVED (2<<6) -#define BT848_ADC_SYNC_T (1<<5) -#define BT848_ADC_AGC_EN (1<<4) -#define BT848_ADC_CLK_SLEEP (1<<3) -#define BT848_ADC_Y_SLEEP (1<<2) -#define BT848_ADC_C_SLEEP (1<<1) -#define BT848_ADC_CRUSH (1<<0) - -#define BT848_E_VTC 0x06C -#define BT848_O_VTC 0x0EC -#define BT848_VTC_HSFMT (1<<7) -#define BT848_VTC_VFILT_2TAP 0 -#define BT848_VTC_VFILT_3TAP 1 -#define BT848_VTC_VFILT_4TAP 2 -#define BT848_VTC_VFILT_5TAP 3 - -#define BT848_SRESET 0x07C - -#define BT848_COLOR_FMT 0x0D4 -#define BT848_COLOR_FMT_O_RGB32 (0<<4) -#define BT848_COLOR_FMT_O_RGB24 (1<<4) -#define BT848_COLOR_FMT_O_RGB16 (2<<4) -#define BT848_COLOR_FMT_O_RGB15 (3<<4) -#define BT848_COLOR_FMT_O_YUY2 (4<<4) -#define BT848_COLOR_FMT_O_BtYUV (5<<4) -#define BT848_COLOR_FMT_O_Y8 (6<<4) -#define BT848_COLOR_FMT_O_RGB8 (7<<4) -#define BT848_COLOR_FMT_O_YCrCb422 (8<<4) -#define BT848_COLOR_FMT_O_YCrCb411 (9<<4) -#define BT848_COLOR_FMT_O_RAW (14<<4) -#define BT848_COLOR_FMT_E_RGB32 0 -#define BT848_COLOR_FMT_E_RGB24 1 -#define BT848_COLOR_FMT_E_RGB16 2 -#define BT848_COLOR_FMT_E_RGB15 3 -#define BT848_COLOR_FMT_E_YUY2 4 -#define BT848_COLOR_FMT_E_BtYUV 5 -#define BT848_COLOR_FMT_E_Y8 6 -#define BT848_COLOR_FMT_E_RGB8 7 -#define BT848_COLOR_FMT_E_YCrCb422 8 -#define BT848_COLOR_FMT_E_YCrCb411 9 -#define BT848_COLOR_FMT_E_RAW 14 - -#define BT848_COLOR_FMT_RGB32 0x00 -#define BT848_COLOR_FMT_RGB24 0x11 -#define BT848_COLOR_FMT_RGB16 0x22 -#define BT848_COLOR_FMT_RGB15 0x33 -#define BT848_COLOR_FMT_YUY2 0x44 -#define BT848_COLOR_FMT_BtYUV 0x55 -#define BT848_COLOR_FMT_Y8 0x66 -#define BT848_COLOR_FMT_RGB8 0x77 -#define BT848_COLOR_FMT_YCrCb422 0x88 -#define BT848_COLOR_FMT_YCrCb411 0x99 -#define BT848_COLOR_FMT_RAW 0xee - -#define BT848_COLOR_CTL 0x0D8 -#define BT848_COLOR_CTL_EXT_FRMRATE (1<<7) -#define BT848_COLOR_CTL_COLOR_BARS (1<<6) -#define BT848_COLOR_CTL_RGB_DED (1<<5) -#define BT848_COLOR_CTL_GAMMA (1<<4) -#define BT848_COLOR_CTL_WSWAP_ODD (1<<3) -#define BT848_COLOR_CTL_WSWAP_EVEN (1<<2) -#define BT848_COLOR_CTL_BSWAP_ODD (1<<1) -#define BT848_COLOR_CTL_BSWAP_EVEN (1<<0) - -#define BT848_CAP_CTL 0x0DC -#define BT848_CAP_CTL_DITH_FRAME (1<<4) -#define BT848_CAP_CTL_CAPTURE_VBI_ODD (1<<3) -#define BT848_CAP_CTL_CAPTURE_VBI_EVEN (1<<2) -#define BT848_CAP_CTL_CAPTURE_ODD (1<<1) -#define BT848_CAP_CTL_CAPTURE_EVEN (1<<0) - -#define BT848_VBI_PACK_SIZE 0x0E0 - -#define BT848_VBI_PACK_DEL 0x0E4 -#define BT848_VBI_PACK_DEL_VBI_HDELAY 0xfc -#define BT848_VBI_PACK_DEL_EXT_FRAME 2 -#define BT848_VBI_PACK_DEL_VBI_PKT_HI 1 - - -#define BT848_INT_STAT 0x100 -#define BT848_INT_MASK 0x104 - -#define BT848_INT_ETBF (1<<23) - -#define BT848_INT_RISCS (0xf<<28) -#define BT848_INT_RISC_EN (1<<27) -#define BT848_INT_RACK (1<<25) -#define BT848_INT_FIELD (1<<24) -#define BT848_INT_SCERR (1<<19) -#define BT848_INT_OCERR (1<<18) -#define BT848_INT_PABORT (1<<17) -#define BT848_INT_RIPERR (1<<16) -#define BT848_INT_PPERR (1<<15) -#define BT848_INT_FDSR (1<<14) -#define BT848_INT_FTRGT (1<<13) -#define BT848_INT_FBUS (1<<12) -#define BT848_INT_RISCI (1<<11) -#define BT848_INT_GPINT (1<<9) -#define BT848_INT_I2CDONE (1<<8) -#define BT848_INT_VPRES (1<<5) -#define BT848_INT_HLOCK (1<<4) -#define BT848_INT_OFLOW (1<<3) -#define BT848_INT_HSYNC (1<<2) -#define BT848_INT_VSYNC (1<<1) -#define BT848_INT_FMTCHG (1<<0) - - -#define BT848_GPIO_DMA_CTL 0x10C -#define BT848_GPIO_DMA_CTL_GPINTC (1<<15) -#define BT848_GPIO_DMA_CTL_GPINTI (1<<14) -#define BT848_GPIO_DMA_CTL_GPWEC (1<<13) -#define BT848_GPIO_DMA_CTL_GPIOMODE (3<<11) -#define BT848_GPIO_DMA_CTL_GPCLKMODE (1<<10) -#define BT848_GPIO_DMA_CTL_PLTP23_4 (0<<6) -#define BT848_GPIO_DMA_CTL_PLTP23_8 (1<<6) -#define BT848_GPIO_DMA_CTL_PLTP23_16 (2<<6) -#define BT848_GPIO_DMA_CTL_PLTP23_32 (3<<6) -#define BT848_GPIO_DMA_CTL_PLTP1_4 (0<<4) -#define BT848_GPIO_DMA_CTL_PLTP1_8 (1<<4) -#define BT848_GPIO_DMA_CTL_PLTP1_16 (2<<4) -#define BT848_GPIO_DMA_CTL_PLTP1_32 (3<<4) -#define BT848_GPIO_DMA_CTL_PKTP_4 (0<<2) -#define BT848_GPIO_DMA_CTL_PKTP_8 (1<<2) -#define BT848_GPIO_DMA_CTL_PKTP_16 (2<<2) -#define BT848_GPIO_DMA_CTL_PKTP_32 (3<<2) -#define BT848_GPIO_DMA_CTL_RISC_ENABLE (1<<1) -#define BT848_GPIO_DMA_CTL_FIFO_ENABLE (1<<0) - -#define BT848_I2C 0x110 -#define BT848_I2C_DIV (0xf<<4) -#define BT848_I2C_SYNC (1<<3) -#define BT848_I2C_W3B (1<<2) -#define BT848_I2C_SCL (1<<1) -#define BT848_I2C_SDA (1<<0) - - -#define BT848_RISC_STRT_ADD 0x114 -#define BT848_GPIO_OUT_EN 0x118 -#define BT848_GPIO_REG_INP 0x11C -#define BT848_RISC_COUNT 0x120 -#define BT848_GPIO_DATA 0x200 - - -/* Bt848 RISC commands */ - -/* only for the SYNC RISC command */ -#define BT848_FIFO_STATUS_FM1 0x06 -#define BT848_FIFO_STATUS_FM3 0x0e -#define BT848_FIFO_STATUS_SOL 0x02 -#define BT848_FIFO_STATUS_EOL4 0x01 -#define BT848_FIFO_STATUS_EOL3 0x0d -#define BT848_FIFO_STATUS_EOL2 0x09 -#define BT848_FIFO_STATUS_EOL1 0x05 -#define BT848_FIFO_STATUS_VRE 0x04 -#define BT848_FIFO_STATUS_VRO 0x0c -#define BT848_FIFO_STATUS_PXV 0x00 - -#define BT848_RISC_RESYNC (1<<15) - -/* WRITE and SKIP */ -/* disable which bytes of each DWORD */ -#define BT848_RISC_BYTE0 (1<<12) -#define BT848_RISC_BYTE1 (1<<13) -#define BT848_RISC_BYTE2 (1<<14) -#define BT848_RISC_BYTE3 (1<<15) -#define BT848_RISC_BYTE_ALL (0x0f<<12) -#define BT848_RISC_BYTE_NONE 0 -/* cause RISCI */ -#define BT848_RISC_IRQ (1<<24) -/* RISC command is last one in this line */ -#define BT848_RISC_EOL (1<<26) -/* RISC command is first one in this line */ -#define BT848_RISC_SOL (1<<27) - -#define BT848_RISC_WRITE (0x01<<28) -#define BT848_RISC_SKIP (0x02<<28) -#define BT848_RISC_WRITEC (0x05<<28) -#define BT848_RISC_JUMP (0x07<<28) -#define BT848_RISC_SYNC (0x08<<28) - -#define BT848_RISC_WRITE123 (0x09<<28) -#define BT848_RISC_SKIP123 (0x0a<<28) -#define BT848_RISC_WRITE1S23 (0x0b<<28) - - - -/* Bt848A and higher only !! */ -#define BT848_TGLB 0x080 -#define BT848_TGCTRL 0x084 -#define BT848_FCAP 0x0E8 -#define BT848_PLL_F_LO 0x0F0 -#define BT848_PLL_F_HI 0x0F4 - -#define BT848_PLL_XCI 0x0F8 -#define BT848_PLL_X (1<<7) -#define BT848_PLL_C (1<<6) - -#define BT848_DVSIF 0x0FC - -/* Bt878 register */ - -#define BT878_DEVCTRL 0x40 -#define BT878_EN_TBFX 0x02 -#define BT878_EN_VSFX 0x04 - -#endif diff --git a/linux/drivers/media/dvb/bt8xx/bt878.c b/linux/drivers/media/dvb/bt8xx/bt878.c index de4906222..09c5dd38f 100644 --- a/linux/drivers/media/dvb/bt8xx/bt878.c +++ b/linux/drivers/media/dvb/bt8xx/bt878.c @@ -50,10 +50,11 @@ unsigned int bt878_verbose = 1; unsigned int bt878_debug = 0; -MODULE_PARM(bt878_verbose,"i"); -MODULE_PARM_DESC(bt878_verbose,"verbose startup messages, default is 1 (yes)"); -MODULE_PARM(bt878_debug,"i"); -MODULE_PARM_DESC(bt878_debug,"debug messages, default is 0 (no)"); +MODULE_PARM(bt878_verbose, "i"); +MODULE_PARM_DESC(bt878_verbose, + "verbose startup messages, default is 1 (yes)"); +MODULE_PARM(bt878_debug, "i"); +MODULE_PARM_DESC(bt878_debug, "debug messages, default is 0 (no)"); MODULE_LICENSE("GPL"); int bt878_num; @@ -62,13 +63,14 @@ struct bt878 bt878[BT878_MAX]; EXPORT_SYMBOL(bt878_num); EXPORT_SYMBOL(bt878); -#if defined(__powerpc__) /* big-endian */ +#if defined(__powerpc__) /* big-endian */ extern __inline__ void io_st_le32(volatile unsigned *addr, unsigned val) { - __asm__ __volatile__ ("stwbrx %1,0,%2" : \ - "=m" (*addr) : "r" (val), "r" (addr)); - __asm__ __volatile__ ("eieio" : : : "memory"); + __asm__ __volatile__("stwbrx %1,0,%2":"=m"(*addr):"r"(val), + "r"(addr)); + __asm__ __volatile__("eieio":::"memory"); } + #define btwrite(dat,adr) io_st_le32((unsigned *)(bt->bt878_mem+(adr)),(dat)) #define btread(adr) ld_le32((unsigned *)(bt->bt878_mem+(adr))) #else @@ -87,58 +89,49 @@ extern __inline__ void io_st_le32(volatile unsigned *addr, unsigned val) static void bt878_mem_free(struct bt878 *bt) { - if (bt->buf_cpu) { - - pci_free_consistent(bt->dev, bt->buf_size, bt->buf_cpu, bt->buf_dma); + pci_free_consistent(bt->dev, bt->buf_size, bt->buf_cpu, + bt->buf_dma); bt->buf_cpu = NULL; - } - + if (bt->risc_cpu) { - - pci_free_consistent(bt->dev, bt->risc_size, bt->risc_cpu, bt->risc_dma); + pci_free_consistent(bt->dev, bt->risc_size, bt->risc_cpu, + bt->risc_dma); bt->risc_cpu = NULL; - } - } static int bt878_mem_alloc(struct bt878 *bt) { - if (!bt->buf_cpu) { - bt->buf_size = 128 * 1024; - bt->buf_cpu = pci_alloc_consistent(bt->dev, bt->buf_size, &bt->buf_dma); - + bt->buf_cpu = + pci_alloc_consistent(bt->dev, bt->buf_size, + &bt->buf_dma); + if (!bt->buf_cpu) return -ENOMEM; - + memset(bt->buf_cpu, 0, bt->buf_size); - } - + if (!bt->risc_cpu) { - bt->risc_size = PAGE_SIZE; - bt->risc_cpu = pci_alloc_consistent(bt->dev, bt->risc_size, &bt->risc_dma); - + bt->risc_cpu = + pci_alloc_consistent(bt->dev, bt->risc_size, + &bt->risc_dma); + if (!bt->risc_cpu) { - bt878_mem_free(bt); - return -ENOMEM; - } memset(bt->risc_cpu, 0, bt->risc_size); - } - + return 0; - } /* RISC instructions */ @@ -160,59 +153,54 @@ static int bt878_mem_alloc(struct bt878 *bt) static int bt878_make_risc(struct bt878 *bt) { - u32 buf_pos = 0; u32 line; bt->block_bytes = bt->buf_size >> 4; bt->block_count = 1 << 4; - bt->line_bytes = bt->block_bytes; - bt->line_count = bt->block_count; + bt->line_bytes = bt->block_bytes; + bt->line_count = bt->block_count; while (bt->line_bytes > 4095) { - bt->line_bytes >>= 1; bt->line_count <<= 1; - } if (bt->line_count > 255) { - printk("bt878: buffer size error!\n"); - return -EINVAL; - } RISC_FLUSH(); - RISC_INSTR(RISC_SYNC | RISC_SYNC_FM1); RISC_INSTR(0); for (line = 0; line < bt->line_count; line++) { - // At the beginning of every block we issue an IRQ with previous (finished) block number set if (!(buf_pos % bt->block_bytes)) - RISC_INSTR(RISC_WRITE | RISC_WR_SOL | RISC_WR_EOL | RISC_IRQ | RISC_STATUS(((buf_pos / bt->block_bytes) + (bt->block_count - 1)) % bt->block_count) | bt->line_bytes); + RISC_INSTR(RISC_WRITE | RISC_WR_SOL | RISC_WR_EOL | + RISC_IRQ | + RISC_STATUS(((buf_pos / + bt->block_bytes) + + (bt->block_count - + 1)) % + bt->block_count) | bt-> + line_bytes); else - RISC_INSTR(RISC_WRITE | RISC_WR_SOL | RISC_WR_EOL | bt->line_bytes); - + RISC_INSTR(RISC_WRITE | RISC_WR_SOL | RISC_WR_EOL | + bt->line_bytes); RISC_INSTR(bt->buf_dma + buf_pos); - buf_pos += bt->line_bytes; - } RISC_INSTR(RISC_SYNC | RISC_SYNC_VRO); RISC_INSTR(0); - RISC_INSTR(RISC_JUMP); + RISC_INSTR(RISC_JUMP); RISC_INSTR(bt->risc_dma); btwrite((bt->line_count << 16) | bt->line_bytes, BT878_APACK_LEN); - - return 0; - + return 0; } /*****************************/ @@ -221,43 +209,36 @@ static int bt878_make_risc(struct bt878 *bt) void bt878_start(struct bt878 *bt, u32 controlreg) { + dprintk("bt878 debug: bt878_start (ctl=%8.8x)\n", controlreg); - dprintk("bt878 debug: bt878_start (ctl=%8.8x)\n",controlreg); - controlreg &= ~0x1F; controlreg |= 0x1B; - + btwrite(cpu_to_le32(bt->risc_dma), BT878_ARISC_START); - - btwrite(0x000ff800,BT878_AINT_MASK); - btwrite(controlreg,BT878_AGPIO_DMA_CTL); - + + btwrite(0x000ff800, BT878_AINT_MASK); + btwrite(controlreg, BT878_AGPIO_DMA_CTL); } void bt878_stop(struct bt878 *bt) { - u32 stat; int i = 0; - + dprintk("bt878 debug: bt878_stop\n"); btwrite(0, BT878_AINT_MASK); btand(~0x1F, BT878_AGPIO_DMA_CTL); do { - stat = btread(BT878_AINT_STAT); - - if (!(stat&BT878_ARISC_EN)) + if (!(stat & BT878_ARISC_EN)) break; - - i++; - + i++; } while (i < 500); - dprintk("bt878(%d) debug: bt878_stop, i=%d, stat=0x%8.8x\n",bt->nr,i,stat); - + dprintk("bt878(%d) debug: bt878_stop, i=%d, stat=0x%8.8x\n", + bt->nr, i, stat); } EXPORT_SYMBOL(bt878_start); @@ -266,69 +247,74 @@ EXPORT_SYMBOL(bt878_stop); /*****************************/ /* Interrupt service routine */ /*****************************/ - -static -irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs * regs) + +static irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs *regs) { - u32 stat,astat,mask; - int count; - struct bt878 *bt; - - bt=(struct bt878 *)dev_id; - - count=0; - while(1) { - stat=btread(BT878_AINT_STAT); - mask=btread(BT878_AINT_MASK); - if(!(astat=(stat&mask))) - return IRQ_NONE; /* this interrupt is not for me */ + u32 stat, astat, mask; + int count; + struct bt878 *bt; + + bt = (struct bt878 *) dev_id; + + count = 0; + while (1) { + stat = btread(BT878_AINT_STAT); + mask = btread(BT878_AINT_MASK); + if (!(astat = (stat & mask))) + return IRQ_NONE; /* this interrupt is not for me */ /* dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */ - btwrite(astat,BT878_AINT_STAT); /* try to clear interupt condition */ - - - if(astat&(BT878_ASCERR|BT878_AOCERR)) { - if(bt878_verbose) { + btwrite(astat, BT878_AINT_STAT); /* try to clear interupt condition */ + + + if (astat & (BT878_ASCERR | BT878_AOCERR)) { + if (bt878_verbose) { printk("bt878(%d): irq%s%s risc_pc=%08x\n", - bt->nr, - (astat&BT878_ASCERR)?" SCERR":"", - (astat&BT878_AOCERR)?" OCERR":"", - btread(BT878_ARISC_PC)); + bt->nr, + (astat & BT878_ASCERR) ? " SCERR" : + "", + (astat & BT878_AOCERR) ? " OCERR" : + "", btread(BT878_ARISC_PC)); } } - if(astat&(BT878_APABORT|BT878_ARIPERR|BT878_APPERR)) { - if(bt878_verbose) { - printk("bt878(%d): irq%s%s%s risc_pc=%08x\n", - bt->nr, - (astat&BT878_APABORT)?" PABORT":"", - (astat&BT878_ARIPERR)?" RIPERR":"", - (astat&BT878_APPERR)?" PPERR":"", - btread(BT878_ARISC_PC)); + if (astat & (BT878_APABORT | BT878_ARIPERR | BT878_APPERR)) { + if (bt878_verbose) { + printk + ("bt878(%d): irq%s%s%s risc_pc=%08x\n", + bt->nr, + (astat & BT878_APABORT) ? " PABORT" : + "", + (astat & BT878_ARIPERR) ? " RIPERR" : + "", + (astat & BT878_APPERR) ? " PPERR" : + "", btread(BT878_ARISC_PC)); } } - if(astat&(BT878_AFDSR|BT878_AFTRGT|BT878_AFBUS)) { - if(bt878_verbose) { - printk("bt878(%d): irq%s%s%s risc_pc=%08x\n", - bt->nr, - (astat&BT878_AFDSR)?" FDSR":"", - (astat&BT878_AFTRGT)?" FTRGT":"", - (astat&BT878_AFBUS)?" FBUS":"", - btread(BT878_ARISC_PC)); + if (astat & (BT878_AFDSR | BT878_AFTRGT | BT878_AFBUS)) { + if (bt878_verbose) { + printk + ("bt878(%d): irq%s%s%s risc_pc=%08x\n", + bt->nr, + (astat & BT878_AFDSR) ? " FDSR" : "", + (astat & BT878_AFTRGT) ? " FTRGT" : + "", + (astat & BT878_AFBUS) ? " FBUS" : "", + btread(BT878_ARISC_PC)); } } - if(astat&BT878_ARISCI) { + if (astat & BT878_ARISCI) { bt->finished_block = (stat & BT878_ARISCS) >> 28; tasklet_schedule(&bt->tasklet); break; } count++; - if(count>20) { - btwrite(0,BT878_AINT_MASK); - printk(KERN_ERR - "bt878(%d): IRQ lockup, cleared int mask\n", bt->nr); + if (count > 20) { + btwrite(0, BT878_AINT_MASK); + printk(KERN_ERR + "bt878(%d): IRQ lockup, cleared int mask\n", + bt->nr); break; } } - return IRQ_HANDLED; } @@ -336,77 +322,79 @@ irqreturn_t bt878_irq(int irq, void *dev_id, struct pt_regs * regs) /* PCI device handling */ /***********************/ -static int __devinit bt878_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) +static int __devinit bt878_probe(struct pci_dev *dev, + const struct pci_device_id *pci_id) { - int result; - unsigned char lat; - struct bt878 *bt; + int result; + unsigned char lat; + struct bt878 *bt; #if defined(__powerpc__) - unsigned int cmd; + unsigned int cmd; #endif - printk(KERN_INFO "bt878: Bt878 AUDIO function found (%d).\n", bt878_num); - - bt=&bt878[bt878_num]; - bt->dev=dev; - bt->nr = bt878_num; - bt->shutdown=0; - - bt->id=dev->device; - bt->irq=dev->irq; - bt->bt878_adr=pci_resource_start(dev,0); - if (pci_enable_device(dev)) - return -EIO; - if (!request_mem_region(pci_resource_start(dev,0), - pci_resource_len(dev,0), - "bt878")) { - return -EBUSY; - } + printk(KERN_INFO "bt878: Bt878 AUDIO function found (%d).\n", + bt878_num); + + bt = &bt878[bt878_num]; + bt->dev = dev; + bt->nr = bt878_num; + bt->shutdown = 0; + + bt->id = dev->device; + bt->irq = dev->irq; + bt->bt878_adr = pci_resource_start(dev, 0); + if (pci_enable_device(dev)) + return -EIO; + if (!request_mem_region(pci_resource_start(dev, 0), + pci_resource_len(dev, 0), "bt878")) { + return -EBUSY; + } + + pci_read_config_byte(dev, PCI_CLASS_REVISION, &bt->revision); + pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); + printk(KERN_INFO "bt878(%d): Bt%x (rev %d) at %02x:%02x.%x, ", + bt878_num, bt->id, bt->revision, dev->bus->number, + PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); + printk("irq: %d, latency: %d, memory: 0x%lx\n", + bt->irq, lat, bt->bt878_adr); - pci_read_config_byte(dev, PCI_CLASS_REVISION, &bt->revision); - pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); - printk(KERN_INFO "bt878(%d): Bt%x (rev %d) at %02x:%02x.%x, ", - bt878_num,bt->id, bt->revision, dev->bus->number, - PCI_SLOT(dev->devfn),PCI_FUNC(dev->devfn)); - printk("irq: %d, latency: %d, memory: 0x%lx\n", - bt->irq, lat, bt->bt878_adr); - #if defined(__powerpc__) - /* on OpenFirmware machines (PowerMac at least), PCI memory cycle */ - /* response on cards with no firmware is not enabled by OF */ - pci_read_config_dword(dev, PCI_COMMAND, &cmd); - cmd = (cmd | PCI_COMMAND_MEMORY ); - pci_write_config_dword(dev, PCI_COMMAND, cmd); + /* on OpenFirmware machines (PowerMac at least), PCI memory cycle */ + /* response on cards with no firmware is not enabled by OF */ + pci_read_config_dword(dev, PCI_COMMAND, &cmd); + cmd = (cmd | PCI_COMMAND_MEMORY); + pci_write_config_dword(dev, PCI_COMMAND, cmd); #endif #ifdef __sparc__ - bt->bt878_mem=(unsigned char *)bt->bt878_adr; + bt->bt878_mem = (unsigned char *) bt->bt878_adr; #else - bt->bt878_mem=ioremap(bt->bt878_adr, 0x1000); + bt->bt878_mem = ioremap(bt->bt878_adr, 0x1000); #endif - - /* clear interrupt mask */ - btwrite(0, BT848_INT_MASK); - - result = request_irq(bt->irq, bt878_irq, - SA_SHIRQ | SA_INTERRUPT,"bt878",(void *)bt); - if (result==-EINVAL) - { - printk(KERN_ERR "bt878(%d): Bad irq number or handler\n", - bt878_num); - goto fail1; - } - if (result==-EBUSY) - { - printk(KERN_ERR "bt878(%d): IRQ %d busy, change your PnP config in BIOS\n",bt878_num,bt->irq); - goto fail1; - } - if (result < 0) - goto fail1; - - pci_set_master(dev); - pci_set_drvdata(dev,bt); + + /* clear interrupt mask */ + btwrite(0, BT848_INT_MASK); + + result = request_irq(bt->irq, bt878_irq, + SA_SHIRQ | SA_INTERRUPT, "bt878", + (void *) bt); + if (result == -EINVAL) { + printk(KERN_ERR "bt878(%d): Bad irq number or handler\n", + bt878_num); + goto fail1; + } + if (result == -EBUSY) { + printk(KERN_ERR + "bt878(%d): IRQ %d busy, change your PnP config in BIOS\n", + bt878_num, bt->irq); + goto fail1; + } + if (result < 0) + goto fail1; + + pci_set_master(dev); + pci_set_drvdata(dev, bt); /* if(init_bt878(btv) < 0) { bt878_remove(dev); @@ -415,82 +403,76 @@ static int __devinit bt878_probe(struct pci_dev *dev, const struct pci_device_id */ if ((result = bt878_mem_alloc(bt))) { - printk("bt878: failed to allocate memory!\n"); - goto fail2; - } - + bt878_make_risc(bt); - - btwrite(0,BT878_AINT_MASK); - - bt878_num++; - - return 0; - - fail2: - free_irq(bt->irq,bt); - fail1: - release_mem_region(pci_resource_start(bt->dev,0), - pci_resource_len(bt->dev,0)); - return result; + btwrite(0, BT878_AINT_MASK); + bt878_num++; + + return 0; + + fail2: + free_irq(bt->irq, bt); + fail1: + release_mem_region(pci_resource_start(bt->dev, 0), + pci_resource_len(bt->dev, 0)); + return result; } static void __devexit bt878_remove(struct pci_dev *pci_dev) { - u8 command; - struct bt878 *bt = pci_get_drvdata(pci_dev); - - if (bt878_verbose) - printk("bt878(%d): unloading\n",bt->nr); - - /* turn off all capturing, DMA and IRQs */ - btand(~15, BT878_AGPIO_DMA_CTL); - - /* first disable interrupts before unmapping the memory! */ - btwrite(0, BT878_AINT_MASK); - btwrite(~0x0UL,BT878_AINT_STAT); - - /* disable PCI bus-mastering */ - pci_read_config_byte(bt->dev, PCI_COMMAND, &command); - /* Should this be &=~ ?? */ - command&=~PCI_COMMAND_MASTER; - pci_write_config_byte(bt->dev, PCI_COMMAND, command); - - free_irq(bt->irq,bt); - printk(KERN_DEBUG "bt878_mem: 0x%p.\n", bt->bt878_mem); - if (bt->bt878_mem) - iounmap(bt->bt878_mem); - - release_mem_region(pci_resource_start(bt->dev,0), - pci_resource_len(bt->dev,0)); - /* wake up any waiting processes - because shutdown flag is set, no new processes (in this queue) - are expected - */ - bt->shutdown=1; - - bt878_mem_free(bt); - - pci_set_drvdata(pci_dev, NULL); - return; + u8 command; + struct bt878 *bt = pci_get_drvdata(pci_dev); + + if (bt878_verbose) + printk("bt878(%d): unloading\n", bt->nr); + + /* turn off all capturing, DMA and IRQs */ + btand(~15, BT878_AGPIO_DMA_CTL); + + /* first disable interrupts before unmapping the memory! */ + btwrite(0, BT878_AINT_MASK); + btwrite(~0x0UL, BT878_AINT_STAT); + + /* disable PCI bus-mastering */ + pci_read_config_byte(bt->dev, PCI_COMMAND, &command); + /* Should this be &=~ ?? */ + command &= ~PCI_COMMAND_MASTER; + pci_write_config_byte(bt->dev, PCI_COMMAND, command); + + free_irq(bt->irq, bt); + printk(KERN_DEBUG "bt878_mem: 0x%p.\n", bt->bt878_mem); + if (bt->bt878_mem) + iounmap(bt->bt878_mem); + + release_mem_region(pci_resource_start(bt->dev, 0), + pci_resource_len(bt->dev, 0)); + /* wake up any waiting processes + because shutdown flag is set, no new processes (in this queue) + are expected + */ + bt->shutdown = 1; + bt878_mem_free(bt); + + pci_set_drvdata(pci_dev, NULL); + return; } static struct pci_device_id bt878_pci_tbl[] __devinitdata = { - {PCI_VENDOR_ID_BROOKTREE, PCI_DEVICE_ID_BROOKTREE_878, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0,} + {PCI_VENDOR_ID_BROOKTREE, PCI_DEVICE_ID_BROOKTREE_878, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0,} }; MODULE_DEVICE_TABLE(pci, bt878_pci_tbl); static struct pci_driver bt878_pci_driver = { - name: "bt878", - id_table: bt878_pci_tbl, - probe: bt878_probe, - remove: bt878_remove, + .name = "bt878", + .id_table = bt878_pci_tbl, + .probe = bt878_probe, + .remove = bt878_remove, }; /*******************************/ @@ -499,22 +481,22 @@ static struct pci_driver bt878_pci_driver = { int bt878_init_module(void) { - bt878_num = 0; + bt878_num = 0; - printk(KERN_INFO "bt878: AUDIO driver version %d.%d.%d loaded\n", - (BT878_VERSION_CODE >> 16) & 0xff, - (BT878_VERSION_CODE >> 8) & 0xff, - BT878_VERSION_CODE & 0xff); + printk(KERN_INFO "bt878: AUDIO driver version %d.%d.%d loaded\n", + (BT878_VERSION_CODE >> 16) & 0xff, + (BT878_VERSION_CODE >> 8) & 0xff, + BT878_VERSION_CODE & 0xff); /* bt878_check_chipset(); */ - return pci_module_init(&bt878_pci_driver); + return pci_module_init(&bt878_pci_driver); } void bt878_cleanup_module(void) { - pci_unregister_driver(&bt878_pci_driver); - return; + pci_unregister_driver(&bt878_pci_driver); + return; } module_init(bt878_init_module); diff --git a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c index 71613d39b..2e9905b79 100644 --- a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c +++ b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c @@ -45,34 +45,26 @@ static int debug = 0; static void dvb_bt8xx_task(unsigned long data) { - struct dvb_bt8xx_card *card = (struct dvb_bt8xx_card *)data; //printk("%d ", finished_block); while (card->bt->last_block != card->bt->finished_block) { - dvb_dmx_swfilter(&card->demux, &card->bt->buf_cpu[card->bt->last_block * card->bt->block_bytes], card->bt->block_bytes); - card->bt->last_block = (card->bt->last_block + 1) % card->bt->block_count; - } - } static int dvb_bt8xx_master_xfer(struct dvb_i2c_bus *i2c, const struct i2c_msg msgs[], int num) { - struct dvb_bt8xx_card *card = (struct dvb_bt8xx_card *)i2c->data; return card->i2c_adap->algo->master_xfer(card->i2c_adap, (struct i2c_msg *)msgs, num); - } static int dvb_bt8xx_start_feed(struct dvb_demux_feed *dvbdmxfeed) { - struct dvb_demux *dvbdmx = dvbdmxfeed->demux; struct dvb_bt8xx_card *card = dvbdmx->priv; @@ -89,12 +81,10 @@ static int dvb_bt8xx_start_feed(struct dvb_demux_feed *dvbdmxfeed) // bt878_start(card->bt, card->gpio_mode); return 0; - } static int dvb_bt8xx_stop_feed(struct dvb_demux_feed *dvbdmxfeed) { - struct dvb_demux *dvbdmx = dvbdmxfeed->demux; struct dvb_bt8xx_card *card = dvbdmx->priv; @@ -111,12 +101,10 @@ static int dvb_bt8xx_stop_feed(struct dvb_demux_feed *dvbdmxfeed) card->active = 0; return 0; - } static struct bt878 *dvb_bt8xx_get_bt(unsigned int bttv_nr) { - struct pci_dev* bttv_pci_dev; unsigned int card_nr; @@ -124,22 +112,18 @@ static struct bt878 *dvb_bt8xx_get_bt(unsigned int bttv_nr) return NULL; for (card_nr = 0; card_nr < bt878_num; card_nr++) { - if ((bt878[card_nr].dev->subsystem_vendor == bttv_pci_dev->subsystem_vendor) && (bt878[card_nr].dev->subsystem_device == bttv_pci_dev->subsystem_device) && (bt878[card_nr].dev->bus->number == bttv_pci_dev->bus->number) && (PCI_SLOT(bt878[card_nr].dev->devfn) == PCI_SLOT(bttv_pci_dev->devfn))) return &bt878[card_nr]; - } return NULL; - } static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio_mode) { - struct dvb_bt8xx_card *card; int result; @@ -151,7 +135,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio card->bttv_nr = bttv_nr; if (!(card->bt = dvb_bt8xx_get_bt(card->bttv_nr))) { - printk("dvb_bt8xx: unable to determine DMA core of card%d\n", card->bttv_nr); return -EFAULT; @@ -161,7 +144,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio card->gpio_mode = gpio_mode; if (!(card->i2c_adap = bttv_get_i2c_adap(card->bttv_nr))) { - printk("dvb_bt8xx: unable to determine i2c adapter of card%d\n", card->bttv_nr); kfree(card); @@ -181,7 +163,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio } if (!(dvb_register_i2c_bus(dvb_bt8xx_master_xfer, card, card->adapter, 0))) { - printk("dvb_bt8xx: dvb_register_i2c_bus of card%d failed\n", card->bttv_nr); dvb_unregister_adapter(card->adapter); @@ -189,7 +170,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio kfree(card); return -EFAULT; - } memset(&card->demux, 0, sizeof(struct dvb_demux)); @@ -204,14 +184,12 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio card->demux.write_to_decoder = NULL; if ((result = dvb_dmx_init(&card->demux)) < 0) { - printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); dvb_unregister_i2c_bus(dvb_bt8xx_master_xfer, card->adapter, 0); dvb_unregister_adapter(card->adapter); return result; - } card->dmxdev.filternum = 256; @@ -219,7 +197,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio card->dmxdev.capabilities = 0; if ((result = dvb_dmxdev_init(&card->dmxdev, card->adapter)) < 0) { - printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); dvb_dmx_release(&card->demux); @@ -227,13 +204,11 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio dvb_unregister_adapter(card->adapter); return result; - } card->fe_hw.source = DMX_FRONTEND_0; if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { - printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); dvb_dmxdev_release(&card->dmxdev); @@ -242,13 +217,11 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio dvb_unregister_adapter(card->adapter); return result; - } card->fe_mem.source = DMX_MEMORY_FE; if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem)) < 0) { - printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); @@ -258,11 +231,9 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio dvb_unregister_adapter(card->adapter); return result; - } if ((result = card->demux.dmx.connect_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { - printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem); @@ -273,7 +244,6 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio dvb_unregister_adapter(card->adapter); return result; - } dvb_net_init(card->adapter, &card->dvbnet, &card->demux.dmx); @@ -290,12 +260,10 @@ static int __init dvb_bt8xx_load(unsigned int bttv_nr, char *card_name, u32 gpio static void dvb_bt8xx_close(void) { - struct dvb_bt8xx_card *card; struct list_head *entry, *entry_safe; list_for_each_safe(entry, entry_safe, &card_list) { - card = list_entry(entry, struct dvb_bt8xx_card, list); dprintk("dvb_bt8xx: unloading card%d\n", card->bttv_nr); @@ -314,14 +282,12 @@ static void dvb_bt8xx_close(void) kfree(card); list_del(&card->list); - } } static int __init dvb_bt8xx_init(void) { - int card_id; unsigned int card_nr; int card_type; @@ -329,23 +295,14 @@ static int __init dvb_bt8xx_init(void) dprintk("dvb_bt8xx: enumerating availible bttv cards...\n"); for (card_nr = 0; !bttv_get_cardinfo(card_nr, &card_type, &card_id); card_nr++) { - switch(card_id) { - case 0x001C11BD: - dvb_bt8xx_load(card_nr, "Pinnacle PCTV DVB-S", 0x0400C060); - break; - case 0x01010071: - dvb_bt8xx_load(card_nr, "Nebula DigiTV DVB-T", (1 << 26) | (1 << 14) | (1 << 5)); - break; - } - } return 0; @@ -354,9 +311,7 @@ static int __init dvb_bt8xx_init(void) static void __exit dvb_bt8xx_exit(void) { - dvb_bt8xx_close(); - } module_init(dvb_bt8xx_init); |