diff options
author | Scott Wood <scottwood@freescale.com> | 2007-10-01 15:20:56 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:54:03 -0400 |
commit | e2ec4581adf7e288c193e981c39ca01cdb20a272 (patch) | |
tree | 354c0afb64104457d2690e656f2d7ae883ff5722 /include | |
parent | 976de6a8c304dcc43e38efcb8a0bace7866b6242 (diff) |
Generic bitbanged MDIO library
Previously, bitbanged MDIO was only supported in individual
hardware-specific drivers. This code factors out the higher level
protocol implementation, reducing the hardware-specific portion to
functions setting direction, data, and clock.
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mdio-bitbang.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/linux/mdio-bitbang.h b/include/linux/mdio-bitbang.h new file mode 100644 index 000000000000..8ea9a42a4c02 --- /dev/null +++ b/include/linux/mdio-bitbang.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef __LINUX_MDIO_BITBANG_H | ||
2 | #define __LINUX_MDIO_BITBANG_H | ||
3 | |||
4 | #include <linux/phy.h> | ||
5 | #include <linux/module.h> | ||
6 | |||
7 | struct mdiobb_ctrl; | ||
8 | |||
9 | struct mdiobb_ops { | ||
10 | struct module *owner; | ||
11 | |||
12 | /* Set the Management Data Clock high if level is one, | ||
13 | * low if level is zero. | ||
14 | */ | ||
15 | void (*set_mdc)(struct mdiobb_ctrl *ctrl, int level); | ||
16 | |||
17 | /* Configure the Management Data I/O pin as an input if | ||
18 | * "output" is zero, or an output if "output" is one. | ||
19 | */ | ||
20 | void (*set_mdio_dir)(struct mdiobb_ctrl *ctrl, int output); | ||
21 | |||
22 | /* Set the Management Data I/O pin high if value is one, | ||
23 | * low if "value" is zero. This may only be called | ||
24 | * when the MDIO pin is configured as an output. | ||
25 | */ | ||
26 | void (*set_mdio_data)(struct mdiobb_ctrl *ctrl, int value); | ||
27 | |||
28 | /* Retrieve the state Management Data I/O pin. */ | ||
29 | int (*get_mdio_data)(struct mdiobb_ctrl *ctrl); | ||
30 | }; | ||
31 | |||
32 | struct mdiobb_ctrl { | ||
33 | const struct mdiobb_ops *ops; | ||
34 | }; | ||
35 | |||
36 | /* The returned bus is not yet registered with the phy layer. */ | ||
37 | struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl); | ||
38 | |||
39 | /* The bus must already have been unregistered. */ | ||
40 | void free_mdio_bitbang(struct mii_bus *bus); | ||
41 | |||
42 | #endif | ||