28 Oct, 2009

1 commit


11 Oct, 2009

1 commit

  • …y 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: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>

    Luigi 'Comio' Mantellini