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