mdio-bitbang.h (1338B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __LINUX_MDIO_BITBANG_H 3#define __LINUX_MDIO_BITBANG_H 4 5#include <linux/phy.h> 6 7struct module; 8 9struct mdiobb_ctrl; 10 11struct mdiobb_ops { 12 struct module *owner; 13 14 /* Set the Management Data Clock high if level is one, 15 * low if level is zero. 16 */ 17 void (*set_mdc)(struct mdiobb_ctrl *ctrl, int level); 18 19 /* Configure the Management Data I/O pin as an input if 20 * "output" is zero, or an output if "output" is one. 21 */ 22 void (*set_mdio_dir)(struct mdiobb_ctrl *ctrl, int output); 23 24 /* Set the Management Data I/O pin high if value is one, 25 * low if "value" is zero. This may only be called 26 * when the MDIO pin is configured as an output. 27 */ 28 void (*set_mdio_data)(struct mdiobb_ctrl *ctrl, int value); 29 30 /* Retrieve the state Management Data I/O pin. */ 31 int (*get_mdio_data)(struct mdiobb_ctrl *ctrl); 32}; 33 34struct mdiobb_ctrl { 35 const struct mdiobb_ops *ops; 36 unsigned int override_op_c22; 37 u8 op_c22_read; 38 u8 op_c22_write; 39}; 40 41int mdiobb_read(struct mii_bus *bus, int phy, int reg); 42int mdiobb_write(struct mii_bus *bus, int phy, int reg, u16 val); 43 44/* The returned bus is not yet registered with the phy layer. */ 45struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl); 46 47/* The bus must already have been unregistered. */ 48void free_mdio_bitbang(struct mii_bus *bus); 49 50#endif