From: hwg Date: Sat, 10 Aug 2013 08:32:04 +0000 (+0800) Subject: adjust vmac board functions to arch/arm/mach-rk30/board-rk31-sdk-vmac.c X-Git-Tag: firefly_0821_release~6726^2~20 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=af39febbf3de2bad50932e1058ede520aa198417;p=firefly-linux-kernel-4.4.55.git adjust vmac board functions to arch/arm/mach-rk30/board-rk31-sdk-vmac.c --- diff --git a/arch/arm/mach-rk30/board-rk31-sdk-vmac.c b/arch/arm/mach-rk30/board-rk31-sdk-vmac.c new file mode 100644 index 000000000000..a29bc9e20b07 --- /dev/null +++ b/arch/arm/mach-rk30/board-rk31-sdk-vmac.c @@ -0,0 +1,105 @@ +#define grf_readl(offset) readl_relaxed(RK30_GRF_BASE + offset) +#define grf_writel(v, offset) do { writel_relaxed(v, RK30_GRF_BASE + offset); dsb(); } while (0) + +static int rk30_vmac_register_set(void) +{ + //config rk30 vmac as rmii + writel_relaxed(0x3 << 16 | 0x2, RK30_GRF_BASE + GRF_SOC_CON1); + return 0; +} + +static int rk30_rmii_io_init(void) +{ + int err; + printk("enter %s ",__func__); + iomux_set(GPIO0_C0);//power pwr + iomux_set(GPIO3_D2);//int + + iomux_set(RMII_MD);//IO3_D0 + iomux_set(RMII_MDCLK);//IO3_D1 + + iomux_set(RMII_RXD0); + iomux_set(RMII_RXD1); + iomux_set(RMII_CRS); + iomux_set(RMII_RXERR); + iomux_set(RMII_TXD0); + iomux_set(RMII_TXD1); + iomux_set(RMII_TXEN); + iomux_set(RMII_CLKOUT); + + //rk3188 gpio3 and sdio drive strength , + grf_writel(0x0f<<16|0x0f,GRF_IO_CON3); + + //phy power gpio + err = gpio_request(PHY_PWR_EN_GPIO, "phy_power_en"); + if (err) { + printk("request phy power en pin faile ! \n"); + return -1; + } + //phy power down + gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + + return 0; +} + +static int rk30_rmii_io_deinit(void) +{ + //phy power down + printk("enter %s ",__func__); + gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + //free + gpio_free(PHY_PWR_EN_GPIO); + return 0; +} + +static int rk30_rmii_power_control(int enable) +{ + printk("enter %s ,enable = %d ",__func__,enable); + if (enable) { + //enable phy power + printk("power on phy\n"); + iomux_set(GPIO0_C0);//power pwr + iomux_set(GPIO3_D2);//int + + iomux_set(RMII_MD);//IO3_D0 + iomux_set(RMII_MDCLK);//IO3_D1 + + iomux_set(RMII_RXD0); + iomux_set(RMII_RXD1); + iomux_set(RMII_CRS); + iomux_set(RMII_RXERR); + iomux_set(RMII_TXD0); + iomux_set(RMII_TXD1); + iomux_set(RMII_TXEN); + iomux_set(RMII_CLKOUT); + + gpio_direction_output(PHY_PWR_EN_GPIO, PHY_PWR_EN_VALUE); + gpio_set_value(PHY_PWR_EN_GPIO, PHY_PWR_EN_VALUE); + + //gpio reset + }else { + gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); + } + return 0; +} + +#define BIT_EMAC_SPEED (1 << 1) +static int rk29_vmac_speed_switch(int speed) +{ + if (10 == speed) { + writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) & (~BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1); + } else { + writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) | ( BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1); + } +} + +struct rk29_vmac_platform_data board_vmac_data = { + .vmac_register_set = rk30_vmac_register_set, + .rmii_io_init = rk30_rmii_io_init, + .rmii_io_deinit = rk30_rmii_io_deinit, + .rmii_power_control = rk30_rmii_power_control, + .rmii_speed_switch = rk29_vmac_speed_switch, +}; diff --git a/arch/arm/mach-rk3188/board-rk3188-sdk-vmac.c b/arch/arm/mach-rk3188/board-rk3188-sdk-vmac.c deleted file mode 100644 index 18bd9589dfe7..000000000000 --- a/arch/arm/mach-rk3188/board-rk3188-sdk-vmac.c +++ /dev/null @@ -1,105 +0,0 @@ -#define grf_readl(offset) readl_relaxed(RK30_GRF_BASE + offset) -#define grf_writel(v, offset) do { writel_relaxed(v, RK30_GRF_BASE + offset); dsb(); } while (0) - -static int rk30_vmac_register_set(void) -{ - //config rk30 vmac as rmii - writel_relaxed(0x3 << 16 | 0x2, RK30_GRF_BASE + GRF_SOC_CON1); - return 0; -} - -static int rk30_rmii_io_init(void) -{ - int err; - printk("enter %s ",__func__); - iomux_set(GPIO0_C0);//power pwr - iomux_set(GPIO3_D2);//int - - iomux_set(RMII_MD);//IO3_D0 - iomux_set(RMII_MDCLK);//IO3_D1 - - iomux_set(RMII_RXD0); - iomux_set(RMII_RXD1); - iomux_set(RMII_CRS); - iomux_set(RMII_RXERR); - iomux_set(RMII_TXD0); - iomux_set(RMII_TXD1); - iomux_set(RMII_TXEN); - iomux_set(RMII_CLKOUT); - - //rk3188 gpio3 and sdio drive strength , - grf_writel(0x0f<16|0x0f,GRF_IO_CON3); - - //phy power gpio - err = gpio_request(PHY_PWR_EN_GPIO, "phy_power_en"); - if (err) { - printk("request phy power en pin faile ! \n"); - return -1; - } - //phy power down - gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - - return 0; -} - -static int rk30_rmii_io_deinit(void) -{ - //phy power down - printk("enter %s ",__func__); - gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - //free - gpio_free(PHY_PWR_EN_GPIO); - return 0; -} - -static int rk30_rmii_power_control(int enable) -{ - printk("enter %s ,enable = %d ",__func__,enable); - if (enable) { - //enable phy power - printk("power on phy\n"); - iomux_set(GPIO0_C0);//power pwr - iomux_set(GPIO3_D2);//int - - iomux_set(RMII_MD);//IO3_D0 - iomux_set(RMII_MDCLK);//IO3_D1 - - iomux_set(RMII_RXD0); - iomux_set(RMII_RXD1); - iomux_set(RMII_CRS); - iomux_set(RMII_RXERR); - iomux_set(RMII_TXD0); - iomux_set(RMII_TXD1); - iomux_set(RMII_TXEN); - iomux_set(RMII_CLKOUT); - - gpio_direction_output(PHY_PWR_EN_GPIO, PHY_PWR_EN_VALUE); - gpio_set_value(PHY_PWR_EN_GPIO, PHY_PWR_EN_VALUE); - - //gpio reset - }else { - gpio_direction_output(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - gpio_set_value(PHY_PWR_EN_GPIO, !PHY_PWR_EN_VALUE); - } - return 0; -} - -#define BIT_EMAC_SPEED (1 << 1) -static int rk29_vmac_speed_switch(int speed) -{ - if (10 == speed) { - writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) & (~BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1); - } else { - writel_relaxed(readl_relaxed(RK30_GRF_BASE + GRF_SOC_CON1) | ( BIT_EMAC_SPEED), RK30_GRF_BASE + GRF_SOC_CON1); - } -} - -struct rk29_vmac_platform_data board_vmac_data = { - .vmac_register_set = rk30_vmac_register_set, - .rmii_io_init = rk30_rmii_io_init, - .rmii_io_deinit = rk30_rmii_io_deinit, - .rmii_power_control = rk30_rmii_power_control, - .rmii_speed_switch = rk29_vmac_speed_switch, -}; diff --git a/arch/arm/mach-rk3188/board-rk3188-sdk.c b/arch/arm/mach-rk3188/board-rk3188-sdk.c index 22b2f5f83e4c..1ecde6f6f52a 100755 --- a/arch/arm/mach-rk3188/board-rk3188-sdk.c +++ b/arch/arm/mach-rk3188/board-rk3188-sdk.c @@ -1175,7 +1175,7 @@ struct platform_device pwm_regulator_device[1] = { #ifdef CONFIG_RK29_VMAC #define PHY_PWR_EN_GPIO RK30_PIN0_PC0 #define PHY_PWR_EN_VALUE GPIO_HIGH -#include "board-rk3188-sdk-vmac.c" +#include "../mach-rk30/board-rk31-sdk-vmac.c" #endif