net: phy: Allow pre-declaration of MDIO devices
Allow board support code to collect pre-declarations for MDIO devices by registering them with mdiobus_register_board_info(). SPI and I2C buses have a similar feature, we were missing this for MDIO devices, but this is particularly useful for e.g: MDIO-connected switches which need to provide their port layout (often board-specific) to a MDIO Ethernet switch driver. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
71e0bbde0d
commit
648ea01340
8 changed files with 145 additions and 1 deletions
|
|
@ -10,6 +10,7 @@
|
|||
#define __LINUX_MDIO_H__
|
||||
|
||||
#include <uapi/linux/mdio.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
struct mii_bus;
|
||||
|
||||
|
|
@ -29,6 +30,7 @@ struct mdio_device {
|
|||
|
||||
const struct dev_pm_ops *pm_ops;
|
||||
struct mii_bus *bus;
|
||||
char modalias[MDIO_NAME_SIZE];
|
||||
|
||||
int (*bus_match)(struct device *dev, struct device_driver *drv);
|
||||
void (*device_free)(struct mdio_device *mdiodev);
|
||||
|
|
@ -71,6 +73,7 @@ int mdio_device_register(struct mdio_device *mdiodev);
|
|||
void mdio_device_remove(struct mdio_device *mdiodev);
|
||||
int mdio_driver_register(struct mdio_driver *drv);
|
||||
void mdio_driver_unregister(struct mdio_driver *drv);
|
||||
int mdio_device_bus_match(struct device *dev, struct device_driver *drv);
|
||||
|
||||
static inline bool mdio_phy_id_is_c45(int phy_id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -501,6 +501,7 @@ struct platform_device_id {
|
|||
kernel_ulong_t driver_data;
|
||||
};
|
||||
|
||||
#define MDIO_NAME_SIZE 32
|
||||
#define MDIO_MODULE_PREFIX "mdio:"
|
||||
|
||||
#define MDIO_ID_FMT "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
|
||||
|
|
|
|||
|
|
@ -886,6 +886,25 @@ void mdio_bus_exit(void);
|
|||
|
||||
extern struct bus_type mdio_bus_type;
|
||||
|
||||
struct mdio_board_info {
|
||||
const char *bus_id;
|
||||
char modalias[MDIO_NAME_SIZE];
|
||||
int mdio_addr;
|
||||
const void *platform_data;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_PHYLIB)
|
||||
int mdiobus_register_board_info(const struct mdio_board_info *info,
|
||||
unsigned int n);
|
||||
#else
|
||||
static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
|
||||
unsigned int n)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* module_phy_driver() - Helper macro for registering PHY drivers
|
||||
* @__phy_drivers: array of PHY drivers to register
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue