Home | History | Annotate | Download | only in doc
      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 (a] idf-hit.com>
     57