diff options
author | Patrick Boettcher <pb@linuxtv.org> | 2005-07-07 20:57:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-07 21:23:56 -0400 |
commit | 64221be7b9006338e4a45228f013e467ee4bf045 (patch) | |
tree | acf137799c31c966f6d8083aee39c27f331905ab /drivers/media/dvb/b2c2/flexcop-common.h | |
parent | 2819639b5630cd26d399ee0481be9a752280cf4d (diff) |
[PATCH] dvb: flexcop: woraround irq stop problem
The flexcop chip often stops generating interrupts after some hours of
operation. Apparently this can be fixed by resetting register block 0x300 at
each channel change (this is not detailed in the flexcop data books).
This patch also restructures DMA handling and adds a bit of debug code for the
irq problem in case it still happens for someone.
Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Johannes Stezenbach <js@linuxtv.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/media/dvb/b2c2/flexcop-common.h')
-rw-r--r-- | drivers/media/dvb/b2c2/flexcop-common.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/media/dvb/b2c2/flexcop-common.h b/drivers/media/dvb/b2c2/flexcop-common.h index 773d158032df..a94912ac1872 100644 --- a/drivers/media/dvb/b2c2/flexcop-common.h +++ b/drivers/media/dvb/b2c2/flexcop-common.h | |||
@@ -108,6 +108,8 @@ void flexcop_device_kfree(struct flexcop_device*); | |||
108 | int flexcop_device_initialize(struct flexcop_device*); | 108 | int flexcop_device_initialize(struct flexcop_device*); |
109 | void flexcop_device_exit(struct flexcop_device *fc); | 109 | void flexcop_device_exit(struct flexcop_device *fc); |
110 | 110 | ||
111 | void flexcop_reset_block_300(struct flexcop_device *fc); | ||
112 | |||
111 | /* from flexcop-dma.c */ | 113 | /* from flexcop-dma.c */ |
112 | int flexcop_dma_allocate(struct pci_dev *pdev, struct flexcop_dma *dma, u32 size); | 114 | int flexcop_dma_allocate(struct pci_dev *pdev, struct flexcop_dma *dma, u32 size); |
113 | void flexcop_dma_free(struct flexcop_dma *dma); | 115 | void flexcop_dma_free(struct flexcop_dma *dma); |
@@ -115,7 +117,8 @@ void flexcop_dma_free(struct flexcop_dma *dma); | |||
115 | int flexcop_dma_control_timer_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); | 117 | int flexcop_dma_control_timer_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); |
116 | int flexcop_dma_control_size_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); | 118 | int flexcop_dma_control_size_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); |
117 | int flexcop_dma_control_packet_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); | 119 | int flexcop_dma_control_packet_irq(struct flexcop_device *fc, flexcop_dma_index_t no, int onoff); |
118 | int flexcop_dma_config(struct flexcop_device *fc, struct flexcop_dma *dma, flexcop_dma_index_t dma_idx,flexcop_dma_addr_index_t index); | 120 | int flexcop_dma_config(struct flexcop_device *fc, struct flexcop_dma *dma, flexcop_dma_index_t dma_idx); |
121 | int flexcop_dma_xfer_control(struct flexcop_device *fc, flexcop_dma_index_t dma_idx, flexcop_dma_addr_index_t index, int onoff); | ||
119 | int flexcop_dma_config_timer(struct flexcop_device *fc, flexcop_dma_index_t dma_idx, u8 cycles); | 122 | int flexcop_dma_config_timer(struct flexcop_device *fc, flexcop_dma_index_t dma_idx, u8 cycles); |
120 | int flexcop_dma_config_packet_count(struct flexcop_device *fc, flexcop_dma_index_t dma_idx, u8 packets); | 123 | int flexcop_dma_config_packet_count(struct flexcop_device *fc, flexcop_dma_index_t dma_idx, u8 packets); |
121 | 124 | ||
@@ -151,6 +154,7 @@ int flexcop_sram_init(struct flexcop_device *fc); | |||
151 | /* from flexcop-misc.c */ | 154 | /* from flexcop-misc.c */ |
152 | void flexcop_determine_revision(struct flexcop_device *fc); | 155 | void flexcop_determine_revision(struct flexcop_device *fc); |
153 | void flexcop_device_name(struct flexcop_device *fc,const char *prefix,const char *suffix); | 156 | void flexcop_device_name(struct flexcop_device *fc,const char *prefix,const char *suffix); |
157 | void flexcop_dump_reg(struct flexcop_device *fc, flexcop_ibi_register reg, int num); | ||
154 | 158 | ||
155 | /* from flexcop-hw-filter.c */ | 159 | /* from flexcop-hw-filter.c */ |
156 | int flexcop_pid_feed_control(struct flexcop_device *fc, struct dvb_demux_feed *dvbdmxfeed, int onoff); | 160 | int flexcop_pid_feed_control(struct flexcop_device *fc, struct dvb_demux_feed *dvbdmxfeed, int onoff); |