Commit | Line | Data |
---|---|---|
e2ec4581 SW |
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 |