#include <linux/err.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/phy.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <soc/mscc/ocelot_hsio.h>
#include <dt-bindings/phy/phy-ocelot-serdes.h>
struct serdes_ctrl { … };
struct serdes_macro { … };
#define MCB_S6G_CFG_TIMEOUT …
static int __serdes_write_mcb_s6g(struct regmap *regmap, u8 macro, u32 op)
{ … }
static int serdes_commit_mcb_s6g(struct regmap *regmap, u8 macro)
{ … }
static int serdes_update_mcb_s6g(struct regmap *regmap, u8 macro)
{ … }
static int serdes_init_s6g(struct regmap *regmap, u8 serdes, int mode)
{ … }
#define MCB_S1G_CFG_TIMEOUT …
static int __serdes_write_mcb_s1g(struct regmap *regmap, u8 macro, u32 op)
{ … }
static int serdes_commit_mcb_s1g(struct regmap *regmap, u8 macro)
{ … }
static int serdes_update_mcb_s1g(struct regmap *regmap, u8 macro)
{ … }
static int serdes_init_s1g(struct regmap *regmap, u8 serdes)
{ … }
struct serdes_mux { … };
#define SERDES_MUX(_idx, _port, _mode, _submode, _mask, _mux) …
#define SERDES_MUX_SGMII(i, p, m, c) …
#define SERDES_MUX_QSGMII(i, p, m, c) …
static const struct serdes_mux ocelot_serdes_muxes[] = …;
static int serdes_set_mode(struct phy *phy, enum phy_mode mode, int submode)
{ … }
static const struct phy_ops serdes_ops = …;
static struct phy *serdes_simple_xlate(struct device *dev,
const struct of_phandle_args *args)
{ … }
static int serdes_phy_create(struct serdes_ctrl *ctrl, u8 idx, struct phy **phy)
{ … }
static int serdes_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id serdes_ids[] = …;
MODULE_DEVICE_TABLE(of, serdes_ids);
static struct platform_driver mscc_ocelot_serdes = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;