1 static int rk30_vmac_register_set(void)
3 //config rk30 vmac as rmii
4 writel_relaxed(0x3 << 16 | 0x2, RK30_GRF_BASE + GRF_SOC_CON1);
8 static int rk30_rmii_io_init(void)
11 rk30_mux_api_set(GPIO1D6_CIF1DATA11_NAME, GPIO1D_GPIO1D6);
13 rk30_mux_api_set(GPIO1D2_CIF1CLKIN_NAME, GPIO1D_GPIO1D2);
14 rk30_mux_api_set(GPIO1D1_CIF1HREF_MIIMDCLK_NAME, GPIO1D_MII_MDCLK);
15 rk30_mux_api_set(GPIO1D0_CIF1VSYNC_MIIMD_NAME, GPIO1D_MII_MD);
17 rk30_mux_api_set(GPIO1C7_CIFDATA9_RMIIRXD0_NAME, GPIO1C_RMII_RXD0);
18 rk30_mux_api_set(GPIO1C6_CIFDATA8_RMIIRXD1_NAME, GPIO1C_RMII_RXD1);
19 rk30_mux_api_set(GPIO1C5_CIFDATA7_RMIICRSDVALID_NAME, GPIO1C_RMII_CRS_DVALID);
20 rk30_mux_api_set(GPIO1C4_CIFDATA6_RMIIRXERR_NAME, GPIO1C_RMII_RX_ERR);
21 rk30_mux_api_set(GPIO1C3_CIFDATA5_RMIITXD0_NAME, GPIO1C_RMII_TXD0);
22 rk30_mux_api_set(GPIO1C2_CIF1DATA4_RMIITXD1_NAME, GPIO1C_RMII_TXD1);
23 rk30_mux_api_set(GPIO1C1_CIFDATA3_RMIITXEN_NAME, GPIO1C_RMII_TX_EN);
24 rk30_mux_api_set(GPIO1C0_CIF1DATA2_RMIICLKOUT_RMIICLKIN_NAME, GPIO1C_RMII_CLKOUT);
27 err = gpio_request(PHY_PWR_EN_GPIO, "phy_power_en");
32 gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
33 gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
37 static int rk30_rmii_io_deinit(void)
40 gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
41 gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
43 gpio_free(PHY_PWR_EN_GPIO);
47 static int rk30_rmii_power_control(int enable)
51 printk("power on phy\n");
52 rk30_mux_api_set(GPIO1D6_CIF1DATA11_NAME, GPIO1D_GPIO1D6);
54 rk30_mux_api_set(GPIO1D2_CIF1CLKIN_NAME, GPIO1D_GPIO1D2);
55 rk30_mux_api_set(GPIO1D1_CIF1HREF_MIIMDCLK_NAME, GPIO1D_MII_MDCLK);
56 rk30_mux_api_set(GPIO1D0_CIF1VSYNC_MIIMD_NAME, GPIO1D_MII_MD);
58 rk30_mux_api_set(GPIO1C7_CIFDATA9_RMIIRXD0_NAME, GPIO1C_RMII_RXD0);
59 rk30_mux_api_set(GPIO1C6_CIFDATA8_RMIIRXD1_NAME, GPIO1C_RMII_RXD1);
60 rk30_mux_api_set(GPIO1C5_CIFDATA7_RMIICRSDVALID_NAME, GPIO1C_RMII_CRS_DVALID);
61 rk30_mux_api_set(GPIO1C4_CIFDATA6_RMIIRXERR_NAME, GPIO1C_RMII_RX_ERR);
62 rk30_mux_api_set(GPIO1C3_CIFDATA5_RMIITXD0_NAME, GPIO1C_RMII_TXD0);
63 rk30_mux_api_set(GPIO1C2_CIF1DATA4_RMIITXD1_NAME, GPIO1C_RMII_TXD1);
64 rk30_mux_api_set(GPIO1C1_CIFDATA3_RMIITXEN_NAME, GPIO1C_RMII_TX_EN);
65 rk30_mux_api_set(GPIO1C0_CIF1DATA2_RMIICLKOUT_RMIICLKIN_NAME, GPIO1C_RMII_CLKOUT);
66 gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_HIGH);
67 gpio_set_value(PHY_PWR_EN_GPIO, GPIO_HIGH);
69 gpio_direction_output(PHY_PWR_EN_GPIO, GPIO_LOW);
70 gpio_set_value(PHY_PWR_EN_GPIO, GPIO_LOW);
75 #define BIT_EMAC_SPEED (1 << 1)
76 static int rk29_vmac_speed_switch(int speed)
78 //printk("%s--speed=%d\n", __FUNCTION__, speed);
80 writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) & (~BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1);
82 writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) | ( BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1);
86 struct rk29_vmac_platform_data board_vmac_data = {
87 .vmac_register_set = rk30_vmac_register_set,
88 .rmii_io_init = rk30_rmii_io_init,
89 .rmii_io_deinit = rk30_rmii_io_deinit,
90 .rmii_power_control = rk30_rmii_power_control,
91 .rmii_speed_switch = rk29_vmac_speed_switch,