[PATCH 4/4] mx25: add support for FEC on i.MX25 PDK
Sascha Hauer
s.hauer at pengutronix.de
Mon Dec 21 06:08:07 EST 2009
On Mon, Dec 14, 2009 at 12:19:42PM +0200, Baruch Siach wrote:
> Signed-off-by: Baruch Siach <baruch at tkos.co.il>
> ---
> arch/arm/mach-mx25/clock.c | 2 +
> arch/arm/mach-mx25/devices.c | 19 +++++++++++++++
> arch/arm/mach-mx25/devices.h | 1 +
> arch/arm/mach-mx25/mx25pdk.c | 40 ++++++++++++++++++++++++++++++++-
> arch/arm/plat-mxc/include/mach/mx25.h | 4 +++
Can you please split this into two patches, one for the i.MX25 and one
for the board support?
Sascha
> 5 files changed, 65 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-mx25/clock.c b/arch/arm/mach-mx25/clock.c
> index dbbbcc6..ea8c3da 100644
> --- a/arch/arm/mach-mx25/clock.c
> +++ b/arch/arm/mach-mx25/clock.c
> @@ -173,6 +173,7 @@ DEFINE_CLOCK(pwm4_clk, 0, CCM_CGCR2, 2, get_rate_ipg, NULL);
> DEFINE_CLOCK(kpp_clk, 0, CCM_CGCR1, 28, get_rate_ipg, NULL);
> DEFINE_CLOCK(tsc_clk, 0, CCM_CGCR2, 13, get_rate_ipg, NULL);
> DEFINE_CLOCK(i2c_clk, 0, CCM_CGCR0, 6, get_rate_i2c, NULL);
> +DEFINE_CLOCK(fec_clk, 0, CCM_CGCR0, 23, get_rate_ipg, NULL);
>
> #define _REGISTER_CLOCK(d, n, c) \
> { \
> @@ -204,6 +205,7 @@ static struct clk_lookup lookups[] = {
> _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk)
> _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk)
> _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk)
> + _REGISTER_CLOCK("fec.0", NULL, fec_clk)
> };
>
> int __init mx25_clocks_init(unsigned long fref)
> diff --git a/arch/arm/mach-mx25/devices.c b/arch/arm/mach-mx25/devices.c
> index 63511de..9fdeea1 100644
> --- a/arch/arm/mach-mx25/devices.c
> +++ b/arch/arm/mach-mx25/devices.c
> @@ -419,3 +419,22 @@ int __init mxc_register_gpios(void)
> return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
> }
>
> +static struct resource mx25_fec_resources[] = {
> + {
> + .start = MX25_FEC_BASE_ADDR,
> + .end = MX25_FEC_BASE_ADDR + 0xfff,
> + .flags = IORESOURCE_MEM,
> + },
> + {
> + .start = MX25_INT_FEC,
> + .end = MX25_INT_FEC,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +struct platform_device mx25_fec_device = {
> + .name = "fec",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(mx25_fec_resources),
> + .resource = mx25_fec_resources,
> +};
> diff --git a/arch/arm/mach-mx25/devices.h b/arch/arm/mach-mx25/devices.h
> index fe6bf88..fe5420f 100644
> --- a/arch/arm/mach-mx25/devices.h
> +++ b/arch/arm/mach-mx25/devices.h
> @@ -17,3 +17,4 @@ extern struct platform_device mxc_keypad_device;
> extern struct platform_device mxc_i2c_device0;
> extern struct platform_device mxc_i2c_device1;
> extern struct platform_device mxc_i2c_device2;
> +extern struct platform_device mx25_fec_device;
> diff --git a/arch/arm/mach-mx25/mx25pdk.c b/arch/arm/mach-mx25/mx25pdk.c
> index d23ae57..011d6c3 100644
> --- a/arch/arm/mach-mx25/mx25pdk.c
> +++ b/arch/arm/mach-mx25/mx25pdk.c
> @@ -18,6 +18,7 @@
>
> #include <linux/types.h>
> #include <linux/init.h>
> +#include <linux/delay.h>
> #include <linux/clk.h>
> #include <linux/irq.h>
> #include <linux/gpio.h>
> @@ -35,16 +36,53 @@
> #include <mach/mx25.h>
> #include <mach/mxc_nand.h>
> #include "devices.h"
> -#include <mach/iomux-v3.h>
> +#include <mach/iomux.h>
>
> static struct imxuart_platform_data uart_pdata = {
> .flags = IMXUART_HAVE_RTSCTS,
> };
>
> +static struct pad_desc mx25pdk_pads[] = {
> + MX25_PAD_FEC_MDC__FEC_MDC,
> + MX25_PAD_FEC_MDIO__FEC_MDIO,
> + MX25_PAD_FEC_TDATA0__FEC_TDATA0,
> + MX25_PAD_FEC_TDATA1__FEC_TDATA1,
> + MX25_PAD_FEC_TX_EN__FEC_TX_EN,
> + MX25_PAD_FEC_RDATA0__FEC_RDATA0,
> + MX25_PAD_FEC_RDATA1__FEC_RDATA1,
> + MX25_PAD_FEC_RX_DV__FEC_RX_DV,
> + MX25_PAD_FEC_TX_CLK__FEC_TX_CLK,
> + MX25_PAD_A17__GPIO_2_3, /* FEC_EN, GPIO 35 */
> + MX25_PAD_D12__GPIO_4_8, /* FEC_RESET_B, GPIO 104 */
> +};
> +
> +#define FEC_ENABLE_GPIO 35
> +#define FEC_RESET_B_GPIO 104
> +
> +static void __init mx25pdk_fec_reset(void)
> +{
> + gpio_request(FEC_ENABLE_GPIO, "FEC PHY enable");
> + gpio_request(FEC_RESET_B_GPIO, "FEC PHY reset");
> +
> + gpio_direction_output(FEC_ENABLE_GPIO, 0); /* drop PHY power */
> + gpio_direction_output(FEC_RESET_B_GPIO, 0); /* assert reset */
> + udelay(2);
> +
> + /* turn on PHY power and lift reset */
> + gpio_set_value(FEC_ENABLE_GPIO, 1);
> + gpio_set_value(FEC_RESET_B_GPIO, 1);
> +}
> +
> static void __init mx25pdk_init(void)
> {
> + mxc_iomux_v3_setup_multiple_pads(mx25pdk_pads,
> + ARRAY_SIZE(mx25pdk_pads));
> +
> mxc_register_device(&mxc_uart_device0, &uart_pdata);
> mxc_register_device(&mxc_usbh2, NULL);
> +
> + mx25pdk_fec_reset();
> + mxc_register_device(&mx25_fec_device, NULL);
> }
>
> static void __init mx25pdk_timer_init(void)
> diff --git a/arch/arm/plat-mxc/include/mach/mx25.h b/arch/arm/plat-mxc/include/mach/mx25.h
> index ec64bd9..106f651 100644
> --- a/arch/arm/plat-mxc/include/mach/mx25.h
> +++ b/arch/arm/plat-mxc/include/mach/mx25.h
> @@ -41,4 +41,8 @@
> #define UART1_BASE_ADDR 0x43f90000
> #define UART2_BASE_ADDR 0x43f94000
>
> +#define MX25_FEC_BASE_ADDR 0x50038000
> +
> +#define MX25_INT_FEC 57
> +
> #endif /* __MACH_MX25_H__ */
> --
> 1.6.5
>
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the linux-arm-kernel
mailing list