#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
#define PHY_CTRL0 …
#define PHY_CTRL0_REF_SSP_EN …
#define PHY_CTRL0_FSEL_MASK …
#define PHY_CTRL0_FSEL_24M …
#define PHY_CTRL1 …
#define PHY_CTRL1_RESET …
#define PHY_CTRL1_COMMONONN …
#define PHY_CTRL1_ATERESET …
#define PHY_CTRL1_VDATSRCENB0 …
#define PHY_CTRL1_VDATDETENB0 …
#define PHY_CTRL2 …
#define PHY_CTRL2_TXENABLEN0 …
#define PHY_CTRL2_OTG_DISABLE …
#define PHY_CTRL3 …
#define PHY_CTRL3_COMPDISTUNE_MASK …
#define PHY_CTRL3_TXPREEMP_TUNE_MASK …
#define PHY_CTRL3_TXRISE_TUNE_MASK …
#define PHY_CTRL3_TXVREF_TUNE_MASK …
#define PHY_CTRL3_TX_VBOOST_LEVEL_MASK …
#define PHY_CTRL4 …
#define PHY_CTRL4_PCS_TX_DEEMPH_3P5DB_MASK …
#define PHY_CTRL5 …
#define PHY_CTRL5_DMPWD_OVERRIDE_SEL …
#define PHY_CTRL5_DMPWD_OVERRIDE …
#define PHY_CTRL5_DPPWD_OVERRIDE_SEL …
#define PHY_CTRL5_DPPWD_OVERRIDE …
#define PHY_CTRL5_PCS_TX_SWING_FULL_MASK …
#define PHY_CTRL6 …
#define PHY_CTRL6_ALT_CLK_EN …
#define PHY_CTRL6_ALT_CLK_SEL …
#define PHY_TUNE_DEFAULT …
struct imx8mq_usb_phy { … };
static u32 phy_tx_vref_tune_from_property(u32 percent)
{ … }
static u32 phy_tx_rise_tune_from_property(u32 percent)
{ … }
static u32 phy_tx_preemp_amp_tune_from_property(u32 microamp)
{ … }
static u32 phy_tx_vboost_level_from_property(u32 microvolt)
{ … }
static u32 phy_pcs_tx_deemph_3p5db_from_property(u32 decibel)
{ … }
static u32 phy_comp_dis_tune_from_property(u32 percent)
{ … }
static u32 phy_pcs_tx_swing_full_from_property(u32 percent)
{ … }
static void imx8m_get_phy_tuning_data(struct imx8mq_usb_phy *imx_phy)
{ … }
static void imx8m_phy_tune(struct imx8mq_usb_phy *imx_phy)
{ … }
static int imx8mq_usb_phy_init(struct phy *phy)
{ … }
static int imx8mp_usb_phy_init(struct phy *phy)
{ … }
static int imx8mq_phy_power_on(struct phy *phy)
{ … }
static int imx8mq_phy_power_off(struct phy *phy)
{ … }
static const struct phy_ops imx8mq_usb_phy_ops = …;
static const struct phy_ops imx8mp_usb_phy_ops = …;
static const struct of_device_id imx8mq_usb_phy_of_match[] = …;
MODULE_DEVICE_TABLE(of, imx8mq_usb_phy_of_match);
static int imx8mq_usb_phy_probe(struct platform_device *pdev)
{ … }
static struct platform_driver imx8mq_usb_phy_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;