[EMAIL PROTECTED] writes:

> From: Chaithrika U S <[EMAIL PROTECTED]>
>
> Adds LSI ET1011C PHY driver. 
> This driver is used by TI DM646x EVM.
>
> Signed-off-by: Chaithrika U S <[EMAIL PROTECTED]>

Chaithrika,

I saw that David Miller applied this.  Nice work!
I will also commit to linux-davinci until your patch hits mainline.

Kevin


> ---
>  drivers/net/phy/Kconfig   |    5 ++
>  drivers/net/phy/Makefile  |    1 +
>  drivers/net/phy/et1011c.c |  113 
> +++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 119 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/net/phy/et1011c.c
>
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index d55932a..65dc771 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -66,6 +66,11 @@ config REALTEK_PHY
>       ---help---
>         Supports the Realtek 821x PHY.
>  
> +config LSI_ET1011C_PHY
> +     tristate "Driver for LSI ET1011C PHY"
> +     ---help---
> +       Supports the LSI ET1011C PHY.
> +
>  config FIXED_PHY
>       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
>       depends on PHYLIB=y
> diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
> index eee329f..ebafcfb 100644
> --- a/drivers/net/phy/Makefile
> +++ b/drivers/net/phy/Makefile
> @@ -13,6 +13,7 @@ obj-$(CONFIG_VITESSE_PHY)   += vitesse.o
>  obj-$(CONFIG_BROADCOM_PHY)   += broadcom.o
>  obj-$(CONFIG_ICPLUS_PHY)     += icplus.o
>  obj-$(CONFIG_REALTEK_PHY)    += realtek.o
> +obj-$(CONFIG_LSI_ET1011C_PHY)        += et1011c.o
>  obj-$(CONFIG_FIXED_PHY)              += fixed.o
>  obj-$(CONFIG_MDIO_BITBANG)   += mdio-bitbang.o
>  obj-$(CONFIG_MDIO_OF_GPIO)   += mdio-ofgpio.o
> diff --git a/drivers/net/phy/et1011c.c b/drivers/net/phy/et1011c.c
> new file mode 100644
> index 0000000..b031fa2
> --- /dev/null
> +++ b/drivers/net/phy/et1011c.c
> @@ -0,0 +1,113 @@
> +/*
> + * drivers/net/phy/et1011c.c
> + *
> + * Driver for LSI ET1011C PHYs
> + *
> + * Author: Chaithrika U S
> + *
> + * Copyright (c) 2008 Texas Instruments
> + *
> + * This program is free software; you can redistribute  it and/or modify it
> + * under  the terms of  the GNU General  Public License as published by the
> + * Free Software Foundation;  either version 2 of the  License, or (at your
> + * option) any later version.
> + *
> + */
> +#include <linux/kernel.h>
> +#include <linux/string.h>
> +#include <linux/errno.h>
> +#include <linux/unistd.h>
> +#include <linux/slab.h>
> +#include <linux/interrupt.h>
> +#include <linux/init.h>
> +#include <linux/delay.h>
> +#include <linux/netdevice.h>
> +#include <linux/etherdevice.h>
> +#include <linux/skbuff.h>
> +#include <linux/spinlock.h>
> +#include <linux/mm.h>
> +#include <linux/module.h>
> +#include <linux/mii.h>
> +#include <linux/ethtool.h>
> +#include <linux/phy.h>
> +#include <linux/io.h>
> +#include <linux/uaccess.h>
> +#include <asm/irq.h>
> +
> +#define ET1011C_STATUS_REG   (0x1A)
> +#define ET1011C_CONFIG_REG   (0x16)
> +#define ET1011C_SPEED_MASK           (0x0300)
> +#define ET1011C_GIGABIT_SPEED                (0x0200)
> +#define ET1011C_TX_FIFO_MASK         (0x3000)
> +#define ET1011C_TX_FIFO_DEPTH_8              (0x0000)
> +#define ET1011C_TX_FIFO_DEPTH_16     (0x1000)
> +#define ET1011C_INTERFACE_MASK               (0x0007)
> +#define ET1011C_GMII_INTERFACE               (0x0002)
> +#define ET1011C_SYS_CLK_EN           (0x01 << 4)
> +
> +
> +MODULE_DESCRIPTION("LSI ET1011C PHY driver");
> +MODULE_AUTHOR("Chaithrika U S");
> +MODULE_LICENSE("GPL");
> +
> +static int et1011c_config_aneg(struct phy_device *phydev)
> +{
> +     int ctl = 0;
> +     ctl = phy_read(phydev, MII_BMCR);
> +     if (ctl < 0)
> +             return ctl;
> +     ctl &= ~(BMCR_FULLDPLX | BMCR_SPEED100 | BMCR_SPEED1000 |
> +              BMCR_ANENABLE);
> +     /* First clear the PHY */
> +     phy_write(phydev, MII_BMCR, ctl | BMCR_RESET);
> +
> +     return genphy_config_aneg(phydev);
> +}
> +
> +static int et1011c_read_status(struct phy_device *phydev)
> +{
> +     int ret;
> +     u32 val;
> +     static int speed;
> +     ret = genphy_read_status(phydev);
> +
> +     if (speed != phydev->speed) {
> +             speed = phydev->speed;
> +             val = phy_read(phydev, ET1011C_STATUS_REG);
> +             if ((val & ET1011C_SPEED_MASK) ==
> +                                     ET1011C_GIGABIT_SPEED) {
> +                     val = phy_read(phydev, ET1011C_CONFIG_REG);
> +                     val &= ~ET1011C_TX_FIFO_MASK;
> +                     phy_write(phydev, ET1011C_CONFIG_REG, val\
> +                                     | ET1011C_GMII_INTERFACE\
> +                                     | ET1011C_SYS_CLK_EN\
> +                                     | ET1011C_TX_FIFO_DEPTH_16);
> +
> +             }
> +     }
> +     return ret;
> +}
> +
> +static struct phy_driver et1011c_driver = {
> +     .phy_id         = 0x0282f014,
> +     .name           = "ET1011C",
> +     .phy_id_mask    = 0xfffffff0,
> +     .features       = (PHY_BASIC_FEATURES | SUPPORTED_1000baseT_Full),
> +     .flags          = PHY_POLL,
> +     .config_aneg    = et1011c_config_aneg,
> +     .read_status    = et1011c_read_status,
> +     .driver         = { .owner = THIS_MODULE,},
> +};
> +
> +static int __init et1011c_init(void)
> +{
> +     return phy_driver_register(&et1011c_driver);
> +}
> +
> +static void __exit et1011c_exit(void)
> +{
> +     phy_driver_unregister(&et1011c_driver);
> +}
> +
> +module_init(et1011c_init);
> +module_exit(et1011c_exit);
> -- 
> 1.5.4.1
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

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

Reply via email to