1 /* 2 * Atheros PHY drivers 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License as 6 * published by the Free Software Foundation; either version 2 of 7 * the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 17 * MA 02111-1307 USA 18 * 19 * Copyright 2011, 2013 Freescale Semiconductor, Inc. 20 * author Andy Fleming 21 * 22 */ 23 #include <phy.h> 24 25 static int ar8021_config(struct phy_device *phydev) 26 { 27 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); 28 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x3D47); 29 30 return 0; 31 } 32 33 static int ar8035_config(struct phy_device *phydev) 34 { 35 int regval; 36 37 phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007); 38 phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016); 39 phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007); 40 regval = phy_read(phydev, MDIO_DEVAD_NONE, 0xe); 41 phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (regval|0x0018)); 42 43 phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); 44 regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e); 45 phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100)); 46 47 genphy_config_aneg(phydev); 48 49 phy_reset(phydev); 50 51 return 0; 52 } 53 54 static struct phy_driver AR8021_driver = { 55 .name = "AR8021", 56 .uid = 0x4dd040, 57 .mask = 0xfffff0, 58 .features = PHY_GBIT_FEATURES, 59 .config = ar8021_config, 60 .startup = genphy_startup, 61 .shutdown = genphy_shutdown, 62 }; 63 64 static struct phy_driver AR8031_driver = { 65 .name = "AR8031", 66 .uid = 0x4dd074, 67 .mask = 0xfffff0, 68 .features = PHY_GBIT_FEATURES, 69 .config = genphy_config, 70 .startup = genphy_startup, 71 .shutdown = genphy_shutdown, 72 }; 73 74 static struct phy_driver AR8035_driver = { 75 .name = "AR8035", 76 .uid = 0x4dd072, 77 .mask = 0x4fffff, 78 .features = PHY_GBIT_FEATURES, 79 .config = ar8035_config, 80 .startup = genphy_startup, 81 .shutdown = genphy_shutdown, 82 }; 83 84 int phy_atheros_init(void) 85 { 86 phy_register(&AR8021_driver); 87 phy_register(&AR8031_driver); 88 phy_register(&AR8035_driver); 89 90 return 0; 91 } 92