Changeset 20551


Ignore:
Timestamp:
2010-03-28T20:57:42+02:00 (8 years ago)
Author:
nbd
Message:

enable IP175A support in the IP175C PHY driver (based on patch from jh in #6733)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c

    r15506 r20551  
    196196        .ADD_TAG_REG = {0,23}, 
    197197        .REMOVE_TAG_REG = {0,23}, 
    198         .ADD_TAG_BIT = {11,12,13,14,15,1,-1,-1,-1}, 
    199         .REMOVE_TAG_BIT = {6,7,8,9,10,0,-1,-1,-1}, 
    200  
    201         .SIMPLE_VLAN_REGISTERS = 1, 
    202  
    203         // Only programmable via. EEPROM 
    204         .VLAN_LOOKUP_REG = NOTSUPPORTED,// +N/2 
     198        .ADD_TAG_BIT = {11,12,13,14,15,-1,-1,-1,-1}, 
     199        .REMOVE_TAG_BIT = {6,7,8,9,10,-1,-1,-1,-1}, 
     200 
     201        .SIMPLE_VLAN_REGISTERS = 0, 
     202 
     203        // Register 19-21 documentation is missing/contradictory. 
     204        // For registers 19-21 ports need to be: even numbers to MSB, odd to LSB. 
     205        // This contradicts text for ROM registers, but follows logic of CoS bits. 
     206 
     207        .VLAN_LOOKUP_REG = {0,19},// +N/2 
    205208        .VLAN_LOOKUP_REG_5 = NOTSUPPORTED, 
    206         .VLAN_LOOKUP_EVEN_BIT = {8,9,10,11,12,15,-1,-1,-1}, 
    207         .VLAN_LOOKUP_ODD_BIT = {0,1,2,3,4,7,-1,-1,-1}, 
    208  
    209         .TAG_VLAN_MASK_REG = NOTSUPPORTED, // +N/2 
    210         .TAG_VLAN_MASK_EVEN_BIT = {0,1,2,3,4,5,-1,-1,-1}, 
    211         .TAG_VLAN_MASK_ODD_BIT = {8,9,10,11,12,13,-1,-1,-1}, 
     209        .VLAN_LOOKUP_EVEN_BIT = {8,9,10,11,12,-1,-1,-1,-1}, 
     210        .VLAN_LOOKUP_ODD_BIT = {0,1,2,3,4,-1,-1,-1,-1}, 
     211 
     212        .TAG_VLAN_MASK_REG = NOTSUPPORTED, // +N/2, 
     213        .TAG_VLAN_MASK_EVEN_BIT = {-1,-1,-1,-1,-1,-1,-1,-1,-1}, 
     214        .TAG_VLAN_MASK_ODD_BIT = {-1,-1,-1,-1,-1,-1,-1,-1,-1}, 
    212215 
    213216        .RESET_VAL = -1, 
     
    223226        .NUMLAN_GROUPS_BIT = -1, // {0-2} 
    224227 
    225         .NUM_PORTS = 6, 
    226         .CPU_PORT = 5, 
    227  
    228         .MII_REGISTER_EN = {0, 12}, 
     228        .NUM_PORTS = 5, 
     229        .CPU_PORT = 4, 
     230 
     231        .MII_REGISTER_EN = {0, 18}, 
    229232        .MII_REGISTER_EN_BIT = 7, 
    230233}; 
     234 
    231235 
    232236struct ip175c_state { 
     
    436440        if (state->vlan_enabled == -1) { 
    437441                // not sure how to get this... 
    438                 state->vlan_enabled = (!state->remove_tag && !state->add_tag); 
     442                state->vlan_enabled = (state->remove_tag || state->add_tag); 
    439443        } 
    440444 
     
    830834        } 
    831835 
    832         /* reset switch ports */ 
    833         for (i = 0; i < 5; i++) { 
    834                 err = state->mii_bus->write(state->mii_bus, i, 
    835                                          MII_BMCR, BMCR_RESET); 
    836                 if (err < 0) 
    837                         return err; 
     836        if (REG_SUPP(state->regs->RESET_REG)) { 
     837                /* reset external phy ports, except on IP175A */ 
     838                for (i = 0; i < state->regs->NUM_PORTS-1; i++) { 
     839                        err = state->mii_bus->write(state->mii_bus, i, 
     840                                                 MII_BMCR, BMCR_RESET); 
     841                        if (err < 0) 
     842                                return err; 
     843                } 
    838844        } 
    839845 
     
    13011307}; 
    13021308 
     1309static struct phy_driver ip175a_driver = { 
     1310        .name           = "IC+ IP175A", 
     1311        .phy_id         = 0x02430c50, 
     1312        .phy_id_mask    = 0x0ffffff0, 
     1313        .features       = PHY_BASIC_FEATURES, 
     1314        .probe          = ip175c_probe, 
     1315        .remove         = ip175c_remove, 
     1316        .config_init    = ip175c_config_init, 
     1317        .config_aneg    = ip175c_config_aneg, 
     1318        .read_status    = ip175c_read_status, 
     1319        .driver         = { .owner = THIS_MODULE }, 
     1320}; 
     1321 
    13031322 
    13041323int __init ip175c_init(void) 
    13051324{ 
     1325        int ret; 
     1326 
     1327        ret = phy_driver_register(&ip175a_driver); 
     1328        if (ret < 0) 
     1329                return ret; 
     1330 
    13061331        return phy_driver_register(&ip175c_driver); 
    13071332} 
     
    13101335{ 
    13111336        phy_driver_unregister(&ip175c_driver); 
     1337        phy_driver_unregister(&ip175a_driver); 
    13121338} 
    13131339 
Note: See TracChangeset for help on using the changeset viewer.