|
@@ -30,6 +30,12 @@
|
|
|
#include <net.h>
|
|
|
#include <miiphy.h>
|
|
|
|
|
|
+#if defined (CONFIG_DRIVER_SMC911X_32_BIT) && \
|
|
|
+ defined (CONFIG_DRIVER_SMC911X_16_BIT)
|
|
|
+#error "SMC911X: Only one of CONFIG_DRIVER_SMC911X_32_BIT and \
|
|
|
+ CONFIG_DRIVER_SMC911X_16_BIT shall be set"
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef CONFIG_DRIVER_SMC911X_32_BIT
|
|
|
static inline u32 reg_read(u32 addr)
|
|
|
{
|
|
@@ -39,9 +45,20 @@ static inline void reg_write(u32 addr, u32 val)
|
|
|
{
|
|
|
*(volatile u32*)addr = val;
|
|
|
}
|
|
|
+#elif CONFIG_DRIVER_SMC911X_16_BIT
|
|
|
+static inline u32 reg_read(u32 addr)
|
|
|
+{
|
|
|
+ volatile u16 *addr_16 = (u16 *)addr;
|
|
|
+ return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 1) << 16));
|
|
|
+}
|
|
|
+static inline void reg_write(u32 addr, u32 val)
|
|
|
+{
|
|
|
+ *(volatile u16*)addr = (u16)val;
|
|
|
+ *(volatile u16*)(addr + 2) = (u16)(val >> 16);
|
|
|
+}
|
|
|
#else
|
|
|
-#error "SMC911X: Only 32-bit bus is supported"
|
|
|
-#endif
|
|
|
+#error "SMC911X: undefined bus width"
|
|
|
+#endif /* CONFIG_DRIVER_SMC911X_16_BIT */
|
|
|
|
|
|
#define mdelay(n) udelay((n)*1000)
|
|
|
|