Ignore:
Timestamp:
2011-11-12T13:09:54+01:00 (4 years ago)
Author:
juhosg
Message:

ar71xx: add a secondary mdio bus

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c

    r28983 r28984  
    133133struct platform_device ar71xx_mdio0_device = { 
    134134        .name           = "ag71xx-mdio", 
    135         .id             = -1, 
     135        .id             = 0, 
    136136        .resource       = ar71xx_mdio0_resources, 
    137137        .num_resources  = ARRAY_SIZE(ar71xx_mdio0_resources), 
    138138        .dev = { 
    139139                .platform_data = &ar71xx_mdio0_data, 
     140        }, 
     141}; 
     142 
     143static struct resource ar71xx_mdio1_resources[] = { 
     144        { 
     145                .name   = "mdio_base", 
     146                .flags  = IORESOURCE_MEM, 
     147                .start  = AR71XX_GE1_BASE, 
     148                .end    = AR71XX_GE1_BASE + 0x200 - 1, 
     149        } 
     150}; 
     151 
     152static struct ag71xx_mdio_platform_data ar71xx_mdio1_data; 
     153 
     154struct platform_device ar71xx_mdio1_device = { 
     155        .name           = "ag71xx-mdio", 
     156        .id             = 1, 
     157        .resource       = ar71xx_mdio1_resources, 
     158        .num_resources  = ARRAY_SIZE(ar71xx_mdio1_resources), 
     159        .dev = { 
     160                .platform_data = &ar71xx_mdio1_data, 
    140161        }, 
    141162}; 
     
    172193void __init ar71xx_add_device_mdio(unsigned int id, u32 phy_mask) 
    173194{ 
     195        struct platform_device *mdio_dev; 
     196        struct ag71xx_mdio_platform_data *mdio_data; 
     197 
    174198        if (id > 0) { 
    175199                printk(KERN_ERR "ar71xx: invalid MDIO id %u\n", id); 
     
    178202 
    179203        switch (ar71xx_soc) { 
    180         case AR71XX_SOC_AR7240: 
    181                 ar71xx_mdio0_data.is_ar7240 = 1; 
    182                 break; 
    183204        case AR71XX_SOC_AR7241: 
    184                 ar71xx_mdio0_data.is_ar7240 = 1; 
    185                 ar71xx_mdio0_resources[0].start = AR71XX_GE1_BASE; 
    186                 ar71xx_mdio0_resources[0].end = AR71XX_GE1_BASE + 0x200 - 1; 
    187                 break; 
     205        case AR71XX_SOC_AR9330: 
     206        case AR71XX_SOC_AR9331: 
     207                mdio_dev = &ar71xx_mdio1_device; 
     208                mdio_data = &ar71xx_mdio1_data; 
     209                break; 
     210 
    188211        case AR71XX_SOC_AR7242: 
    189212                ar71xx_set_pll(AR71XX_PLL_REG_SEC_CONFIG, 
    190213                               AR7242_PLL_REG_ETH0_INT_CLOCK, 0x62000000, 
    191214                               AR71XX_ETH0_PLL_SHIFT); 
    192                 break; 
     215                /* fall through */ 
     216        default: 
     217                mdio_dev = &ar71xx_mdio0_device; 
     218                mdio_data = &ar71xx_mdio0_data; 
     219                break; 
     220        } 
     221 
     222        mdio_data->phy_mask = phy_mask; 
     223 
     224        switch (ar71xx_soc) { 
     225        case AR71XX_SOC_AR7240: 
     226        case AR71XX_SOC_AR7241: 
    193227        case AR71XX_SOC_AR9330: 
    194228        case AR71XX_SOC_AR9331: 
    195                 ar71xx_mdio0_data.is_ar7240 = 1; 
    196                 ar71xx_mdio0_resources[0].start = AR71XX_GE1_BASE; 
    197                 ar71xx_mdio0_resources[0].end = AR71XX_GE1_BASE + 0x200 - 1; 
    198                 break; 
    199         default: 
    200                 break; 
    201         } 
    202  
    203         ar71xx_mdio0_data.phy_mask = phy_mask; 
    204  
    205         platform_device_register(&ar71xx_mdio0_device); 
     229                mdio_data->is_ar7240 = 1; 
     230                break; 
     231        default: 
     232                break; 
     233        } 
     234 
     235        platform_device_register(mdio_dev); 
    206236} 
    207237 
     
    724754        } 
    725755 
    726         if (pdata->mii_bus_dev == NULL) 
    727                 pdata->mii_bus_dev = &ar71xx_mdio0_device.dev; 
     756        if (pdata->mii_bus_dev == NULL) { 
     757                switch (ar71xx_soc) { 
     758                case AR71XX_SOC_AR7241: 
     759                case AR71XX_SOC_AR9330: 
     760                case AR71XX_SOC_AR9331: 
     761                        pdata->mii_bus_dev = &ar71xx_mdio1_device.dev; 
     762                        break; 
     763 
     764                default: 
     765                        pdata->mii_bus_dev = &ar71xx_mdio0_device.dev; 
     766                        break; 
     767                } 
     768        } 
    728769 
    729770        /* Reset the device */ 
Note: See TracChangeset for help on using the changeset viewer.