summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Rubini <rubini@gnudd.com>2011-02-15 09:39:35 -0700
committerMathieu J. Poirier <mathieu.poirier@linaro.org>2011-02-15 09:39:35 -0700
commit08313f77295518d0c3cc39b08b10ce8c1d813d9b (patch)
tree4cb3c1caf6c125bde1097430a1b0e30a72b13aab
parent374328a7d972d53ba36ccdabfff2266ccc3d5972 (diff)
HACK: smc911x.h register access change for minikit
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
-rw-r--r--drivers/net/smc911x.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h
index 05e007c6d..3e0701031 100644
--- a/drivers/net/smc911x.h
+++ b/drivers/net/smc911x.h
@@ -53,14 +53,24 @@ void smc911x_reg_write(struct eth_device *dev, u32 offset, u32 val)
#elif defined (CONFIG_SMC911X_16_BIT)
static inline u32 smc911x_reg_read(struct eth_device *dev, u32 offset)
{
+#ifdef CONFIG_SNOWBALL
+ volatile u16 *addr_16 = (u16 *)(dev->iobase + 2 * offset);
+ return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 2) << 16));
+#else
volatile u16 *addr_16 = (u16 *)(dev->iobase + offset);
return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 1) << 16));
+#endif
}
static inline void smc911x_reg_write(struct eth_device *dev,
u32 offset, u32 val)
{
+#ifdef CONFIG_SNOWBALL
+ *(volatile u16 *)(dev->iobase + 2 * offset) = (u16)val;
+ *(volatile u16 *)(dev->iobase + 2 * offset + 4) = (u16)(val >> 16);
+#else
*(volatile u16 *)(dev->iobase + offset) = (u16)val;
*(volatile u16 *)(dev->iobase + offset + 2) = (u16)(val >> 16);
+#endif
}
#else
#error "SMC911X: undefined bus width"