diff mbox

[v2,01/10] usb: phy: Add APIs for runtime power management

Message ID 1362230590-20960-2-git-send-email-gautam.vivek@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vivek Gautam March 2, 2013, 1:23 p.m. UTC
Adding  APIs to handle runtime power management on PHY
devices. PHY consumers may need to wake-up/suspend PHYs
when they work across autosuspend.

Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
---
 include/linux/usb/phy.h |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

Comments

Felipe Balbi March 4, 2013, 3:29 p.m. UTC | #1
Hi,

On Sat, Mar 02, 2013 at 06:53:02PM +0530, Vivek Gautam wrote:
> Adding  APIs to handle runtime power management on PHY
> devices. PHY consumers may need to wake-up/suspend PHYs
> when they work across autosuspend.
> 
> Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
> ---
>  include/linux/usb/phy.h |   26 ++++++++++++++++++++++++++
>  1 files changed, 26 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
> index 15847cb..0fe7cac 100644
> --- a/include/linux/usb/phy.h
> +++ b/include/linux/usb/phy.h
> @@ -276,4 +276,30 @@ static inline const char *usb_phy_type_string(enum usb_phy_type type)
>  		return "UNKNOWN PHY TYPE";
>  	}
>  }
> +
> +#define USB_PHY_AUTOPM(function)					    \
> +static inline int usb_phy_autopm_##function(struct usb_phy *x)		    \
> +{									    \
> +	if (!x || !x->dev) {						    \
> +		dev_err(x->dev, "no PHY or attached device available\n");   \
> +		return -ENODEV;						    \
> +	}								    \
> +									    \
> +	pm_runtime_##function(x->dev);					    \

please make the definitions explicit (not using a macro) and use:

	return pm_runtime_foo();

where applicable. We don't want to return 0 if pm_runtime_get_sync()
fails.
diff mbox

Patch

diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
index 15847cb..0fe7cac 100644
--- a/include/linux/usb/phy.h
+++ b/include/linux/usb/phy.h
@@ -276,4 +276,30 @@  static inline const char *usb_phy_type_string(enum usb_phy_type type)
 		return "UNKNOWN PHY TYPE";
 	}
 }
+
+#define USB_PHY_AUTOPM(function)					    \
+static inline int usb_phy_autopm_##function(struct usb_phy *x)		    \
+{									    \
+	if (!x || !x->dev) {						    \
+		dev_err(x->dev, "no PHY or attached device available\n");   \
+		return -ENODEV;						    \
+	}								    \
+									    \
+	pm_runtime_##function(x->dev);					    \
+									    \
+	return 0;							    \
+}
+USB_PHY_AUTOPM(enable)
+USB_PHY_AUTOPM(disable)
+USB_PHY_AUTOPM(get)
+USB_PHY_AUTOPM(get_sync)
+USB_PHY_AUTOPM(put)
+USB_PHY_AUTOPM(put_sync)
+USB_PHY_AUTOPM(allow)
+USB_PHY_AUTOPM(forbid)
+USB_PHY_AUTOPM(suspend)
+USB_PHY_AUTOPM(autosuspend)
+USB_PHY_AUTOPM(resume)
+USB_PHY_AUTOPM(set_active)
+
 #endif /* __LINUX_USB_PHY_H */