diff options
author | Andy Walls <awalls@radix.net> | 2008-11-17 20:48:46 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-12-30 06:38:10 -0500 |
commit | d6c7e5f8faad080e75bace5c4f2265e3513e3510 (patch) | |
tree | ec798a9f5644a005432ea3c435c8d563c2cc5abd /drivers/media/video/cx18/cx18-io.c | |
parent | 3f75c6161f28e6a17c547daf552c1127c805c5e7 (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.c | 20 |
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 | ||
72 | void cx18_sw1_irq_enable(struct cx18 *cx, u32 val) | 72 | void 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 | ||
80 | void cx18_sw1_irq_disable(struct cx18 *cx, u32 val) | 79 | void 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 | ||
87 | void cx18_sw2_irq_enable(struct cx18 *cx, u32 val) | 85 | void 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 | ||
95 | void cx18_sw2_irq_disable(struct cx18 *cx, u32 val) | 92 | void 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 | ||
102 | void cx18_sw2_irq_disable_cpu(struct cx18 *cx, u32 val) | 98 | void cx18_sw2_irq_disable_cpu(struct cx18 *cx, u32 val) |