1This patch rewrites the miiphybb ( Bit-banged MII bus driver ) in order to 2support an arbitrary number of mii buses. This feature is useful when your 3board uses different mii buses for different phys and all (or a part) of these 4buses are implemented via bit-banging mode. 5 6The driver requires that the following macros should be defined into the board 7configuration file: 8 9CONFIG_BITBANGMII - Enable the miiphybb driver 10CONFIG_BITBANGMII_MULTI - Enable the multi bus support 11 12If the CONFIG_BITBANGMII_MULTI is not defined, the board's config file needs 13to define at least the following macros: 14 15MII_INIT - Generic code to enable the MII bus (optional) 16MDIO_DECLARE - Declaration needed to access to the MDIO pin (optional) 17MDIO_ACTIVE - Activate the MDIO pin as out pin 18MDIO_TRISTATE - Activate the MDIO pin as input/tristate pin 19MDIO_READ - Read the MDIO pin 20MDIO(v) - Write v on the MDIO pin 21MDC_DECLARE - Declaration needed to access to the MDC pin (optional) 22MDC(v) - Write v on the MDC pin 23 24The previous macros make the driver compatible with the previous version 25(that didn't support the multi-bus). 26 27When the CONFIG_BITBANGMII_MULTI is also defined, the board code needs to fill 28the bb_miiphy_buses[] array with a record for each required bus and declare 29the bb_miiphy_buses_num variable with the number of mii buses. 30The record (struct bb_miiphy_bus) has the following fields/callbacks (see 31miiphy.h for details): 32 33char name[] - The symbolic name that must be equal to the MII bus 34 registered name 35int (*init)() - Initialization function called at startup time (just 36 before the Ethernet initialization) 37int (*mdio_active)() - Activate the MDIO pin as output 38int (*mdio_tristate)() - Activate the MDIO pin as input/tristate pin 39int (*set_mdio)() - Write the MDIO pin 40int (*get_mdio)() - Read the MDIO pin 41int (*set_mdc)() - Write the MDC pin 42int (*delay)() - Delay function 43void *priv - Private data used by board specific code 44 45The board code will look like: 46 47struct bb_miiphy_bus bb_miiphy_buses[] = { 48 { .name = "miibus#1", .init = b1_init, .mdio_active = b1_mdio_active, ... }, 49 { .name = "miibus#2", .init = b2_init, .mdio_active = b2_mdio_active, ... }, 50 ... 51}; 52int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) / 53 sizeof(bb_miiphy_buses[0]); 54 552009 Industrie Dial Face S.p.A. 56 Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> 57