#include <linux/ulpi/interface.h>
#include <linux/ulpi/driver.h>
#include <linux/ulpi/regs.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/clk/clk-conf.h>
int ulpi_read(struct ulpi *ulpi, u8 addr)
return ulpi->ops->read(ulpi->dev.parent, addr);
EXPORT_SYMBOL_GPL(ulpi_read);
int ulpi_write(struct ulpi *ulpi, u8 addr, u8 val)
return ulpi->ops->write(ulpi->dev.parent, addr, val);
EXPORT_SYMBOL_GPL(ulpi_write);
static int ulpi_match(struct device *dev, struct device_driver *driver)
struct ulpi_driver *drv = to_ulpi_driver(driver);
struct ulpi *ulpi = to_ulpi_dev(dev);
const struct ulpi_device_id *id;
if (ulpi->id.vendor == 0)
return of_driver_match_device(dev, driver);
for (id = drv->id_table; id->vendor; id++)
if (id->vendor == ulpi->id.vendor &&
id->product == ulpi->id.product)
static int ulpi_uevent(struct device *dev, struct kobj_uevent_env *env)
struct ulpi *ulpi = to_ulpi_dev(dev);
ret = of_device_uevent_modalias(dev, env);
if (add_uevent_var(env, "MODALIAS=ulpi:v%04xp%04x",