Commit | Line | Data |
---|---|---|
e2ec4581 SW |
1 | #ifndef __LINUX_MDIO_BITBANG_H |
2 | #define __LINUX_MDIO_BITBANG_H | |
3 | ||
4 | #include <linux/phy.h> | |
de477254 PG |
5 | |
6 | struct module; | |
e2ec4581 SW |
7 | |
8 | struct mdiobb_ctrl; | |
9 | ||
10 | struct mdiobb_ops { | |
11 | struct module *owner; | |
12 | ||
13 | /* Set the Management Data Clock high if level is one, | |
14 | * low if level is zero. | |
15 | */ | |
16 | void (*set_mdc)(struct mdiobb_ctrl *ctrl, int level); | |
17 | ||
18 | /* Configure the Management Data I/O pin as an input if | |
19 | * "output" is zero, or an output if "output" is one. | |
20 | */ | |
21 | void (*set_mdio_dir)(struct mdiobb_ctrl *ctrl, int output); | |
22 | ||
23 | /* Set the Management Data I/O pin high if value is one, | |
24 | * low if "value" is zero. This may only be called | |
25 | * when the MDIO pin is configured as an output. | |
26 | */ | |
27 | void (*set_mdio_data)(struct mdiobb_ctrl *ctrl, int value); | |
28 | ||
29 | /* Retrieve the state Management Data I/O pin. */ | |
30 | int (*get_mdio_data)(struct mdiobb_ctrl *ctrl); | |
31 | }; | |
32 | ||
33 | struct mdiobb_ctrl { | |
34 | const struct mdiobb_ops *ops; | |
35 | }; | |
36 | ||
37 | /* The returned bus is not yet registered with the phy layer. */ | |
38 | struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl); | |
39 | ||
40 | /* The bus must already have been unregistered. */ | |
41 | void free_mdio_bitbang(struct mii_bus *bus); | |
42 | ||
43 | #endif |