aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-io.c
diff options
context:
space:
mode:
authorAndy Walls <awalls@radix.net>2008-11-17 20:48:46 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-30 06:38:10 -0500
commitd6c7e5f8faad080e75bace5c4f2265e3513e3510 (patch)
treeec798a9f5644a005432ea3c435c8d563c2cc5abd /drivers/media/video/cx18/cx18-io.c
parent3f75c6161f28e6a17c547daf552c1127c805c5e7 (diff)
V4L/DVB (9725): cx18: Remove unnecessary MMIO accesses in time critical irq handling path
Remove unnecessary MMIO accesses in time critical irq handling path. Also ensured that the mailbox ack field is read in last, so we know for sure if we have a stale mailbox or not on receipt. Signed-off-by: Andy Walls <awalls@radix.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18/cx18-io.c')
-rw-r--r--drivers/media/video/cx18/cx18-io.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/media/video/cx18/cx18-io.c b/drivers/media/video/cx18/cx18-io.c
index a2b5e807faca..c6f1d0d7f2c2 100644
--- a/drivers/media/video/cx18/cx18-io.c
+++ b/drivers/media/video/cx18/cx18-io.c
@@ -71,32 +71,28 @@ void cx18_memset_io(struct cx18 *cx, void __iomem *addr, int val, size_t count)
71 71
72void cx18_sw1_irq_enable(struct cx18 *cx, u32 val) 72void cx18_sw1_irq_enable(struct cx18 *cx, u32 val)
73{ 73{
74 u32 r;
75 cx18_write_reg_expect(cx, val, SW1_INT_STATUS, ~val, val); 74 cx18_write_reg_expect(cx, val, SW1_INT_STATUS, ~val, val);
76 r = cx18_read_reg(cx, SW1_INT_ENABLE_PCI); 75 cx->sw1_irq_mask = cx18_read_reg(cx, SW1_INT_ENABLE_PCI) | val;
77 cx18_write_reg(cx, r | val, SW1_INT_ENABLE_PCI); 76 cx18_write_reg(cx, cx->sw1_irq_mask, SW1_INT_ENABLE_PCI);
78} 77}
79 78
80void cx18_sw1_irq_disable(struct cx18 *cx, u32 val) 79void cx18_sw1_irq_disable(struct cx18 *cx, u32 val)
81{ 80{
82 u32 r; 81 cx->sw1_irq_mask = cx18_read_reg(cx, SW1_INT_ENABLE_PCI) & ~val;
83 r = cx18_read_reg(cx, SW1_INT_ENABLE_PCI); 82 cx18_write_reg(cx, cx->sw1_irq_mask, SW1_INT_ENABLE_PCI);
84 cx18_write_reg(cx, r & ~val, SW1_INT_ENABLE_PCI);
85} 83}
86 84
87void cx18_sw2_irq_enable(struct cx18 *cx, u32 val) 85void cx18_sw2_irq_enable(struct cx18 *cx, u32 val)
88{ 86{
89 u32 r;
90 cx18_write_reg_expect(cx, val, SW2_INT_STATUS, ~val, val); 87 cx18_write_reg_expect(cx, val, SW2_INT_STATUS, ~val, val);
91 r = cx18_read_reg(cx, SW2_INT_ENABLE_PCI); 88 cx->sw2_irq_mask = cx18_read_reg(cx, SW2_INT_ENABLE_PCI) | val;
92 cx18_write_reg(cx, r | val, SW2_INT_ENABLE_PCI); 89 cx18_write_reg(cx, cx->sw2_irq_mask, SW2_INT_ENABLE_PCI);
93} 90}
94 91
95void cx18_sw2_irq_disable(struct cx18 *cx, u32 val) 92void cx18_sw2_irq_disable(struct cx18 *cx, u32 val)
96{ 93{
97 u32 r; 94 cx->sw2_irq_mask = cx18_read_reg(cx, SW2_INT_ENABLE_PCI) & ~val;
98 r = cx18_read_reg(cx, SW2_INT_ENABLE_PCI); 95 cx18_write_reg(cx, cx->sw2_irq_mask, SW2_INT_ENABLE_PCI);
99 cx18_write_reg(cx, r & ~val, SW2_INT_ENABLE_PCI);
100} 96}
101 97
102void cx18_sw2_irq_disable_cpu(struct cx18 *cx, u32 val) 98void cx18_sw2_irq_disable_cpu(struct cx18 *cx, u32 val)