aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-davinci/board-da850-evm.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 23e2024c3d9b..fd6f7800611a 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -148,10 +148,21 @@ static struct platform_device da850_evm_nandflash_device = {
148static u32 ui_card_detected; 148static u32 ui_card_detected;
149static void da850_evm_setup_nor_nand(void); 149static void da850_evm_setup_nor_nand(void);
150 150
151#ifdef CONFIG_DA850_UI_RMII
152static inline void da850_evm_setup_emac_rmii(int rmii_sel)
153{
154 struct davinci_soc_info *soc_info = &davinci_soc_info;
155
156 soc_info->emac_pdata->rmii_en = 1;
157 gpio_set_value(rmii_sel, 0);
158}
159#else
160static inline void da850_evm_setup_emac_rmii(int rmii_sel) { }
161#endif
162
151static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio, 163static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
152 unsigned ngpio, void *c) 164 unsigned ngpio, void *c)
153{ 165{
154 struct davinci_soc_info *soc_info = &davinci_soc_info;
155 int sel_a, sel_b, sel_c, ret; 166 int sel_a, sel_b, sel_c, ret;
156 167
157 sel_a = gpio + 7; 168 sel_a = gpio + 7;
@@ -186,9 +197,7 @@ static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
186 197
187 da850_evm_setup_nor_nand(); 198 da850_evm_setup_nor_nand();
188 199
189 if (soc_info->emac_pdata->rmii_en) 200 da850_evm_setup_emac_rmii(sel_a);
190 /* enable RMII */
191 gpio_set_value(sel_a, 0);
192 201
193 return 0; 202 return 0;
194 203
@@ -513,11 +522,16 @@ static const short da850_evm_lcdc_pins[] = {
513 -1 522 -1
514}; 523};
515 524
516static int __init da850_evm_config_emac(u8 rmii_en) 525static int __init da850_evm_config_emac(void)
517{ 526{
518 void __iomem *cfg_chip3_base; 527 void __iomem *cfg_chip3_base;
519 int ret; 528 int ret;
520 u32 val; 529 u32 val;
530 struct davinci_soc_info *soc_info = &davinci_soc_info;
531 u8 rmii_en = soc_info->emac_pdata->rmii_en;
532
533 if (!machine_is_davinci_da850_evm())
534 return 0;
521 535
522 cfg_chip3_base = DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG); 536 cfg_chip3_base = DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG);
523 537
@@ -562,12 +576,20 @@ static int __init da850_evm_config_emac(u8 rmii_en)
562 " functional\n"); 576 " functional\n");
563 } 577 }
564 578
579 soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK;
580 soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY;
581
582 ret = da8xx_register_emac();
583 if (ret)
584 pr_warning("da850_evm_init: emac registration failed: %d\n",
585 ret);
586
565 return 0; 587 return 0;
566} 588}
589device_initcall(da850_evm_config_emac);
567 590
568static __init void da850_evm_init(void) 591static __init void da850_evm_init(void)
569{ 592{
570 struct davinci_soc_info *soc_info = &davinci_soc_info;
571 int ret; 593 int ret;
572 594
573 ret = pmic_tps65070_init(); 595 ret = pmic_tps65070_init();
@@ -590,22 +612,6 @@ static __init void da850_evm_init(void)
590 pr_warning("da850_evm_init: i2c0 registration failed: %d\n", 612 pr_warning("da850_evm_init: i2c0 registration failed: %d\n",
591 ret); 613 ret);
592 614
593 soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK;
594 soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY;
595#ifdef CONFIG_DA850_UI_RMII
596 soc_info->emac_pdata->rmii_en = 1;
597#else
598 soc_info->emac_pdata->rmii_en = 0;
599#endif
600
601 ret = da850_evm_config_emac(soc_info->emac_pdata->rmii_en);
602 if (ret)
603 pr_warning("da850_evm_init: emac setup failed: %d\n", ret);
604
605 ret = da8xx_register_emac();
606 if (ret)
607 pr_warning("da850_evm_init: emac registration failed: %d\n",
608 ret);
609 615
610 ret = da8xx_register_watchdog(); 616 ret = da8xx_register_watchdog();
611 if (ret) 617 if (ret)