From: Sandeep Paulraj <[email protected]>

Patch adds support for the DM365 EVM.
It also configures the PINMUX and INTMUX for EMAC.

Signed-off-by: Sandeep Paulraj <[email protected]>
---
 arch/arm/mach-davinci/board-dm365-evm.c |   66 ++++++++++++++++++++++++++++++-
 1 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm365-evm.c 
b/arch/arm/mach-davinci/board-dm365-evm.c
index 08c2f12..9dda399 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -19,12 +19,12 @@
 #include <linux/i2c.h>
 #include <linux/io.h>
 #include <linux/clk.h>
-
+#include <linux/i2c/at24.h>
 #include <asm/setup.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
-
+#include <mach/mux.h>
 #include <mach/hardware.h>
 #include <mach/dm365.h>
 #include <mach/psc.h>
@@ -34,14 +34,69 @@
 #include <mach/serial.h>
 #include <mach/common.h>
 
+#define DM365_EVM_PHY_MASK             (0x2)
+#define DM365_EVM_MDIO_FREQUENCY       (2200000) /* PHY bus frequency */
+
+static struct at24_platform_data eeprom_info = {
+       .byte_len       = (256*1024) / 8,
+       .page_size      = 64,
+       .flags          = AT24_FLAG_ADDR16,
+       .setup          = davinci_get_mac_addr,
+       .context        = (void *)0x7f00,
+};
+
+static struct i2c_board_info i2c_info[] = {
+       {
+               I2C_BOARD_INFO("24c256", 0x50),
+               .platform_data  = &eeprom_info,
+       },
+};
+
 static struct davinci_i2c_platform_data i2c_pdata = {
        .bus_freq       = 400   /* kHz */,
        .bus_delay      = 0     /* usec */,
 };
 
+static void dm365evm_emac_configure(void)
+{
+       /*
+        * EMAC pins are multiplexed with GPIO and UART
+        * Further details are available at the DM365 ARM
+        * Subsystem Users Guide(sprufg5.pdf) pages 125 - 127
+        */
+       davinci_cfg_reg(DM365_EMAC_TX_EN);
+       davinci_cfg_reg(DM365_EMAC_TX_CLK);
+       davinci_cfg_reg(DM365_EMAC_COL);
+       davinci_cfg_reg(DM365_EMAC_TXD3);
+       davinci_cfg_reg(DM365_EMAC_TXD2);
+       davinci_cfg_reg(DM365_EMAC_TXD1);
+       davinci_cfg_reg(DM365_EMAC_TXD0);
+       davinci_cfg_reg(DM365_EMAC_RXD3);
+       davinci_cfg_reg(DM365_EMAC_RXD2);
+       davinci_cfg_reg(DM365_EMAC_RXD1);
+       davinci_cfg_reg(DM365_EMAC_RXD0);
+       davinci_cfg_reg(DM365_EMAC_RX_CLK);
+       davinci_cfg_reg(DM365_EMAC_RX_DV);
+       davinci_cfg_reg(DM365_EMAC_RX_ER);
+       davinci_cfg_reg(DM365_EMAC_CRS);
+       davinci_cfg_reg(DM365_EMAC_MDIO);
+       davinci_cfg_reg(DM365_EMAC_MDCLK);
+
+       /*
+        * EMAC interrupts are multiplexed with GPIO interrupts
+        * Details are available at the DM365 ARM
+        * Subsystem Users Guide(sprufg5.pdf) pages 133 - 134
+        */
+       davinci_cfg_reg(DM365_INT_EMAC_RXTHRESH);
+       davinci_cfg_reg(DM365_INT_EMAC_RXPULSE);
+       davinci_cfg_reg(DM365_INT_EMAC_TXPULSE);
+       davinci_cfg_reg(DM365_INT_EMAC_MISCPULSE);
+}
+
 static void __init evm_init_i2c(void)
 {
        davinci_init_i2c(&i2c_pdata);
+       i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
 }
 
 static struct davinci_uart_config uart_config __initdata = {
@@ -55,8 +110,15 @@ static void __init dm365_evm_map_io(void)
 
 static __init void dm365_evm_init(void)
 {
+       struct davinci_soc_info *soc_info = &davinci_soc_info;
+
        evm_init_i2c();
        davinci_serial_init(&uart_config);
+
+       dm365evm_emac_configure();
+
+       soc_info->emac_pdata->phy_mask = DM365_EVM_PHY_MASK;
+       soc_info->emac_pdata->mdio_max_freq = DM365_EVM_MDIO_FREQUENCY;
 }
 
 static __init void dm365_evm_irq_init(void)
-- 
1.6.0.4

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to