#include <linux/delay.h>
#include <linux/err.h>
#include <linux/iopoll.h>
#include <linux/kernel.h>
#include <linux/of.h>
#include <linux/phy.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#define R8A779F0_ETH_SERDES_NUM …
#define R8A779F0_ETH_SERDES_OFFSET …
#define R8A779F0_ETH_SERDES_BANK_SELECT …
#define R8A779F0_ETH_SERDES_TIMEOUT_US …
#define R8A779F0_ETH_SERDES_NUM_RETRY_LINKUP …
struct r8a779f0_eth_serdes_drv_data;
struct r8a779f0_eth_serdes_channel { … };
struct r8a779f0_eth_serdes_drv_data { … };
static void r8a779f0_eth_serdes_write32(void __iomem *addr, u32 offs, u32 bank, u32 data)
{ … }
static int
r8a779f0_eth_serdes_reg_wait(struct r8a779f0_eth_serdes_channel *channel,
u32 offs, u32 bank, u32 mask, u32 expected)
{ … }
static int
r8a779f0_eth_serdes_common_init_ram(struct r8a779f0_eth_serdes_drv_data *dd)
{ … }
static int
r8a779f0_eth_serdes_common_setting(struct r8a779f0_eth_serdes_channel *channel)
{ … }
static int
r8a779f0_eth_serdes_chan_setting(struct r8a779f0_eth_serdes_channel *channel)
{ … }
static int
r8a779f0_eth_serdes_chan_speed(struct r8a779f0_eth_serdes_channel *channel)
{ … }
static int r8a779f0_eth_serdes_monitor_linkup(struct r8a779f0_eth_serdes_channel *channel)
{ … }
static int r8a779f0_eth_serdes_hw_init(struct r8a779f0_eth_serdes_channel *channel)
{ … }
static int r8a779f0_eth_serdes_init(struct phy *p)
{ … }
static int r8a779f0_eth_serdes_exit(struct phy *p)
{ … }
static int r8a779f0_eth_serdes_hw_init_late(struct r8a779f0_eth_serdes_channel
*channel)
{ … }
static int r8a779f0_eth_serdes_power_on(struct phy *p)
{ … }
static int r8a779f0_eth_serdes_set_mode(struct phy *p, enum phy_mode mode,
int submode)
{ … }
static int r8a779f0_eth_serdes_set_speed(struct phy *p, int speed)
{ … }
static const struct phy_ops r8a779f0_eth_serdes_ops = …;
static struct phy *r8a779f0_eth_serdes_xlate(struct device *dev,
const struct of_phandle_args *args)
{ … }
static const struct of_device_id r8a779f0_eth_serdes_of_table[] = …;
MODULE_DEVICE_TABLE(of, r8a779f0_eth_serdes_of_table);
static int r8a779f0_eth_serdes_probe(struct platform_device *pdev)
{ … }
static void r8a779f0_eth_serdes_remove(struct platform_device *pdev)
{ … }
static struct platform_driver r8a779f0_eth_serdes_driver_platform = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;