1. 27 Oct, 2009 1 commit
  2. 11 Oct, 2009 1 commit
    • Luigi 'Comio' Mantellini's avatar
      Rewrite the miiphybb (Bit-banged MII bus driver) in order to support an... · 4ba31ab3
      Luigi 'Comio' Mantellini authored
      Rewrite 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
      CONFIG_BITBANGMII_MULTI - Enable the multi bus support
      
      If the CONFIG_BITBANGMII_MULTI is not defined, the board's config file needs
      to define at least the following macros:
      
      MII_INIT      - Generic code to enable the MII bus (optional)
      MDIO_DECLARE  - Declaration needed to access to the MDIO pin (optional)
      MDIO_ACTIVE   - Activate the MDIO pin as out pin
      MDIO_TRISTATE - Activate the MDIO pin as input/tristate pin
      MDIO_READ     - Read the MDIO pin
      MDIO(v)       - Write v on the MDIO pin
      MDC_DECLARE   - Declaration needed to access to the MDC pin (optional)
      MDC(v)        - Write v on the MDC pin
      
      The previous macros make the driver compatible with the previous version
      (that didn't support the multi-bus).
      
      When the CONFIG_BITBANGMII_MULTI is also defined, 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]);
      Signed-off-by: default avatarLuigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
      Signed-off-by: default avatarBen Warren <biggerbadderben@gmail.com>
      4ba31ab3