| This patch rewrites the miiphybb ( Bit-banged MII bus driver ) in order to |
| support an arbitrary number of mii buses. This feature is useful when your |
| board uses different mii buses for different phys and all (or a part) of these |
| buses are implemented via bit-banging mode. |
| |
| The driver requires that the following macros should be defined into the board |
| configuration file: |
| |
| CONFIG_BITBANGMII - Enable the miiphybb driver |
| |
| The board code needs to fill the bb_miiphy_buses[] array with a record for |
| each required bus and declare the bb_miiphy_buses_num variable with the |
| number of mii buses. The record (struct bb_miiphy_bus) has the following |
| fields/callbacks (see miiphy.h for details): |
| |
| char name[] - The symbolic name that must be equal to the MII bus |
| registered name |
| int (*init)() - Initialization function called at startup time (just |
| before the Ethernet initialization) |
| int (*mdio_active)() - Activate the MDIO pin as output |
| int (*mdio_tristate)() - Activate the MDIO pin as input/tristate pin |
| int (*set_mdio)() - Write the MDIO pin |
| int (*get_mdio)() - Read the MDIO pin |
| int (*set_mdc)() - Write the MDC pin |
| int (*delay)() - Delay function |
| void *priv - Private data used by board specific code |
| |
| The board code will look like: |
| |
| struct bb_miiphy_bus bb_miiphy_buses[] = { |
| { .name = "miibus#1", .init = b1_init, .mdio_active = b1_mdio_active, ... }, |
| { .name = "miibus#2", .init = b2_init, .mdio_active = b2_mdio_active, ... }, |
| ... |
| }; |
| int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) / |
| sizeof(bb_miiphy_buses[0]); |
| |
| 2009 Industrie Dial Face S.p.A. |
| Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> |