0ca2997d14
This patch adds a somewhat generic framework for MDIO bus multiplexers. It is modeled on the I2C multiplexer. The multiplexer is needed if there are multiple PHYs with the same address connected to the same MDIO bus adepter, or if there is insufficient electrical drive capability for all the connected PHY devices. Conceptually it could look something like this: ------------------ | Control Signal | --------+--------- | --------------- --------+------ | MDIO MASTER |---| Multiplexer | --------------- --+-------+---- | | C C h h i i l l d d | | --------- A B --------- | | | | | | | PHY@1 +-------+ +---+ PHY@1 | | | | | | | --------- | | --------- --------- | | --------- | | | | | | | PHY@2 +-------+ +---+ PHY@2 | | | | | --------- --------- This framework configures the bus topology from device tree data. The mechanics of switching the multiplexer is left to device specific drivers. The follow-on patch contains a multiplexer driven by GPIO lines. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
21 lines
551 B
C
21 lines
551 B
C
/*
|
|
* MDIO bus multiplexer framwork.
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Copyright (C) 2011, 2012 Cavium, Inc.
|
|
*/
|
|
#ifndef __LINUX_MDIO_MUX_H
|
|
#define __LINUX_MDIO_MUX_H
|
|
#include <linux/device.h>
|
|
|
|
int mdio_mux_init(struct device *dev,
|
|
int (*switch_fn) (int cur, int desired, void *data),
|
|
void **mux_handle,
|
|
void *data);
|
|
|
|
void mdio_mux_uninit(void *mux_handle);
|
|
|
|
#endif /* __LINUX_MDIO_MUX_H */
|