mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
![Andrew Lunn](/assets/img/avatar_default.png)
The bitbbanging bus driver can perform both C22 and C45 transfers. Create separate functions for each and register the C45 versions using the new driver API calls. The SH Ethernet driver places wrappers around these functions. In order to not break boards which might be using C45, add similar wrappers for C45 operations. Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Michael Walle <michael@walle.cc> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __LINUX_MDIO_BITBANG_H
|
|
#define __LINUX_MDIO_BITBANG_H
|
|
|
|
#include <linux/phy.h>
|
|
|
|
struct module;
|
|
|
|
struct mdiobb_ctrl;
|
|
|
|
struct mdiobb_ops {
|
|
struct module *owner;
|
|
|
|
/* Set the Management Data Clock high if level is one,
|
|
* low if level is zero.
|
|
*/
|
|
void (*set_mdc)(struct mdiobb_ctrl *ctrl, int level);
|
|
|
|
/* Configure the Management Data I/O pin as an input if
|
|
* "output" is zero, or an output if "output" is one.
|
|
*/
|
|
void (*set_mdio_dir)(struct mdiobb_ctrl *ctrl, int output);
|
|
|
|
/* Set the Management Data I/O pin high if value is one,
|
|
* low if "value" is zero. This may only be called
|
|
* when the MDIO pin is configured as an output.
|
|
*/
|
|
void (*set_mdio_data)(struct mdiobb_ctrl *ctrl, int value);
|
|
|
|
/* Retrieve the state Management Data I/O pin. */
|
|
int (*get_mdio_data)(struct mdiobb_ctrl *ctrl);
|
|
};
|
|
|
|
struct mdiobb_ctrl {
|
|
const struct mdiobb_ops *ops;
|
|
unsigned int override_op_c22;
|
|
u8 op_c22_read;
|
|
u8 op_c22_write;
|
|
};
|
|
|
|
int mdiobb_read_c22(struct mii_bus *bus, int phy, int reg);
|
|
int mdiobb_write_c22(struct mii_bus *bus, int phy, int reg, u16 val);
|
|
int mdiobb_read_c45(struct mii_bus *bus, int devad, int phy, int reg);
|
|
int mdiobb_write_c45(struct mii_bus *bus, int devad, int phy, int reg, u16 val);
|
|
|
|
/* The returned bus is not yet registered with the phy layer. */
|
|
struct mii_bus *alloc_mdio_bitbang(struct mdiobb_ctrl *ctrl);
|
|
|
|
/* The bus must already have been unregistered. */
|
|
void free_mdio_bitbang(struct mii_bus *bus);
|
|
|
|
#endif
|