mirror of https://gitee.com/openkylin/linux.git
usb: ulpi: Add resource-managed variant of otg_ulpi_create()
Now drivers (like NVIDIA Tegra USB PHY for example) will be able to benefit from the resource-managed variant, making driver's code a bit cleaner. Suggested-by: Thierry Reding <thierry.reding@gmail.com> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Link: https://lore.kernel.org/r/20200106013416.9604-11-digetx@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9df3adca0b
commit
dea75ee6c9
|
@ -240,6 +240,21 @@ static int ulpi_set_vbus(struct usb_otg *otg, bool on)
|
|||
return usb_phy_io_write(phy, flags, ULPI_OTG_CTRL);
|
||||
}
|
||||
|
||||
static void otg_ulpi_init(struct usb_phy *phy, struct usb_otg *otg,
|
||||
struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
{
|
||||
phy->label = "ULPI";
|
||||
phy->flags = flags;
|
||||
phy->io_ops = ops;
|
||||
phy->otg = otg;
|
||||
phy->init = ulpi_init;
|
||||
|
||||
otg->usb_phy = phy;
|
||||
otg->set_host = ulpi_set_host;
|
||||
otg->set_vbus = ulpi_set_vbus;
|
||||
}
|
||||
|
||||
struct usb_phy *
|
||||
otg_ulpi_create(struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
|
@ -257,17 +272,32 @@ otg_ulpi_create(struct usb_phy_io_ops *ops,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
phy->label = "ULPI";
|
||||
phy->flags = flags;
|
||||
phy->io_ops = ops;
|
||||
phy->otg = otg;
|
||||
phy->init = ulpi_init;
|
||||
|
||||
otg->usb_phy = phy;
|
||||
otg->set_host = ulpi_set_host;
|
||||
otg->set_vbus = ulpi_set_vbus;
|
||||
otg_ulpi_init(phy, otg, ops, flags);
|
||||
|
||||
return phy;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(otg_ulpi_create);
|
||||
|
||||
struct usb_phy *
|
||||
devm_otg_ulpi_create(struct device *dev,
|
||||
struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
{
|
||||
struct usb_phy *phy;
|
||||
struct usb_otg *otg;
|
||||
|
||||
phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL);
|
||||
if (!phy)
|
||||
return NULL;
|
||||
|
||||
otg = devm_kzalloc(dev, sizeof(*otg), GFP_KERNEL);
|
||||
if (!otg) {
|
||||
devm_kfree(dev, phy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
otg_ulpi_init(phy, otg, ops, flags);
|
||||
|
||||
return phy;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_otg_ulpi_create);
|
||||
|
|
|
@ -55,12 +55,23 @@
|
|||
#if IS_ENABLED(CONFIG_USB_ULPI)
|
||||
struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops,
|
||||
unsigned int flags);
|
||||
|
||||
struct usb_phy *devm_otg_ulpi_create(struct device *dev,
|
||||
struct usb_phy_io_ops *ops,
|
||||
unsigned int flags);
|
||||
#else
|
||||
static inline struct usb_phy *otg_ulpi_create(struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct usb_phy *devm_otg_ulpi_create(struct device *dev,
|
||||
struct usb_phy_io_ops *ops,
|
||||
unsigned int flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_ULPI_VIEWPORT
|
||||
|
|
Loading…
Reference in New Issue