diff options
Diffstat (limited to 'include/linux/mtd/doc2000.h')
-rw-r--r-- | include/linux/mtd/doc2000.h | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/include/linux/mtd/doc2000.h b/include/linux/mtd/doc2000.h index 0f6fea73a1f6..407d1e556c39 100644 --- a/include/linux/mtd/doc2000.h +++ b/include/linux/mtd/doc2000.h | |||
@@ -92,12 +92,26 @@ | |||
92 | * Others use readb/writeb | 92 | * Others use readb/writeb |
93 | */ | 93 | */ |
94 | #if defined(__arm__) | 94 | #if defined(__arm__) |
95 | #define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)))) | 95 | static inline u8 ReadDOC_(u32 __iomem *addr, unsigned long reg) |
96 | #define WriteDOC_(d, adr, reg) do{ *(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)) = (__u32)d; wmb();} while(0) | 96 | { |
97 | return __raw_readl(addr + reg); | ||
98 | } | ||
99 | static inline void WriteDOC_(u8 data, u32 __iomem *addr, unsigned long reg) | ||
100 | { | ||
101 | __raw_writel(data, addr + reg); | ||
102 | wmb(); | ||
103 | } | ||
97 | #define DOC_IOREMAP_LEN 0x8000 | 104 | #define DOC_IOREMAP_LEN 0x8000 |
98 | #elif defined(__ppc__) | 105 | #elif defined(__ppc__) |
99 | #define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u16 *)(((unsigned long)adr)+((reg)<<1)))) | 106 | static inline u8 ReadDOC_(u16 __iomem *addr, unsigned long reg) |
100 | #define WriteDOC_(d, adr, reg) do{ *(volatile __u16 *)(((unsigned long)adr)+((reg)<<1)) = (__u16)d; wmb();} while(0) | 107 | { |
108 | return __raw_readw(addr + reg); | ||
109 | } | ||
110 | static inline void WriteDOC_(u8 data, u16 __iomem *addr, unsigned long reg) | ||
111 | { | ||
112 | __raw_writew(data, addr + reg); | ||
113 | wmb(); | ||
114 | } | ||
101 | #define DOC_IOREMAP_LEN 0x4000 | 115 | #define DOC_IOREMAP_LEN 0x4000 |
102 | #else | 116 | #else |
103 | #define ReadDOC_(adr, reg) readb((void __iomem *)(adr) + (reg)) | 117 | #define ReadDOC_(adr, reg) readb((void __iomem *)(adr) + (reg)) |