summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTal Shorer <tal.shorer@gmail.com>2016-08-16 19:04:47 +0300
committerFelipe Balbi <felipe.balbi@linux.intel.com>2016-09-06 10:47:23 +0300
commit6691402313ddda232e6a401af8841b5fe676a62f (patch)
treecf8876b7284942a31323846ace977b79f0ab0f26
parent51b0ce387b43ba8ed532e6f9f215d891e1899e0a (diff)
usb: ulpi: add new api functions, {read|write}_dev()
Add these two new api callbacks to struct ulpi_ops. These are different than read, write in that they pass the parent device directly instead of via the ops argument. They are intended to replace the old api functions. If the new api callbacks are missing, revert to calling the old ones as before. Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Tal Shorer <tal.shorer@gmail.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-rw-r--r--drivers/usb/common/ulpi.c8
-rw-r--r--include/linux/ulpi/interface.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index d1f419c7cddb..a877ddbbe826 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -21,13 +21,17 @@
int ulpi_read(struct ulpi *ulpi, u8 addr)
{
- return ulpi->ops->read(ulpi->ops, addr);
+ if (!ulpi->ops->read_dev)
+ return ulpi->ops->read(ulpi->ops, addr);
+ return ulpi->ops->read_dev(ulpi->dev.parent, addr);
}
EXPORT_SYMBOL_GPL(ulpi_read);
int ulpi_write(struct ulpi *ulpi, u8 addr, u8 val)
{
- return ulpi->ops->write(ulpi->ops, addr, val);
+ if (!ulpi->ops->write_dev)
+ return ulpi->ops->write(ulpi->ops, addr, val);
+ return ulpi->ops->write_dev(ulpi->dev.parent, addr, val);
}
EXPORT_SYMBOL_GPL(ulpi_write);
diff --git a/include/linux/ulpi/interface.h b/include/linux/ulpi/interface.h
index 4de8ab491038..d8189d08eddb 100644
--- a/include/linux/ulpi/interface.h
+++ b/include/linux/ulpi/interface.h
@@ -15,6 +15,8 @@ struct ulpi_ops {
struct device *dev;
int (*read)(struct ulpi_ops *ops, u8 addr);
int (*write)(struct ulpi_ops *ops, u8 addr, u8 val);
+ int (*read_dev)(struct device *dev, u8 addr);
+ int (*write_dev)(struct device *dev, u8 addr, u8 val);
};
struct ulpi *ulpi_register_interface(struct device *, struct ulpi_ops *);