On Thursday 31 January 2013 01:13 PM, Sascha Hauer wrote:
On Thu, Jan 31, 2013 at 11:44:21AM +0530, kishon wrote:
Hi,

On Wednesday 30 January 2013 08:59 PM, Sascha Hauer wrote:
From: Michael Grzeschik <m.grzesc...@pengutronix.de>

This adds two little devicetree helper functions for determining the
dr_mode (host, peripheral, otg) and phy_type (utmi, ulpi,...) from
the devicetree.

Signed-off-by: Michael Grzeschik <m.grzesc...@pengutronix.de>
Signed-off-by: Marc Kleine-Budde <m...@pengutronix.de>
Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
  drivers/usb/usb-common.c |   69 ++++++++++++++++++++++++++++++++++++++++++++++
  include/linux/usb/of.h   |   27 ++++++++++++++++++
  include/linux/usb/otg.h  |    7 +++++
  include/linux/usb/phy.h  |    9 ++++++
  4 files changed, 112 insertions(+)
  create mode 100644 include/linux/usb/of.h

diff --git a/drivers/usb/usb-common.c b/drivers/usb/usb-common.c
index d29503e..1c0292c 100644
--- a/drivers/usb/usb-common.c
+++ b/drivers/usb/usb-common.c
@@ -14,6 +14,9 @@
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/usb/ch9.h>
+#include <linux/of.h>
+#include <linux/usb/of.h>
+#include <linux/usb/otg.h>

  const char *usb_speed_string(enum usb_device_speed speed)
  {
@@ -32,4 +35,70 @@ const char *usb_speed_string(enum usb_device_speed speed)
  }
  EXPORT_SYMBOL_GPL(usb_speed_string);

+#ifdef CONFIG_OF
+static const char *usb_dr_modes[] = {
+       [USB_DR_MODE_UNKNOWN]           = "",
+       [USB_DR_MODE_HOST]              = "host",
+       [USB_DR_MODE_PERIPHERAL]        = "peripheral",
+       [USB_DR_MODE_OTG]               = "otg",
+};
+
+/**
+ * of_usb_get_dr_mode - Get dual role mode for given device_node
+ * @np:        Pointer to the given device_node
+ *
+ * The function gets phy interface string from property 'dr_mode',
+ * and returns the correspondig enum usb_phy_dr_mode
+ */
+enum usb_phy_dr_mode of_usb_get_dr_mode(struct device_node *np)
+{
+       const char *dr_mode;
+       int err, i;
+
+       err = of_property_read_string(np, "dr_mode", &dr_mode);
+       if (err < 0)
+               return USB_DR_MODE_UNKNOWN;
+
+       for (i = 0; i < ARRAY_SIZE(usb_dr_modes); i++)
+               if (!strcasecmp(dr_mode, usb_dr_modes[i]))
+                       return i;
+
+       return USB_DR_MODE_UNKNOWN;
+}
+EXPORT_SYMBOL_GPL(of_usb_get_dr_mode);
+
+static const char *usbphy_modes[] = {
+       [USBPHY_INTERFACE_MODE_NA]      = "",
+       [USBPHY_INTERFACE_MODE_UTMI]    = "utmi",
+       [USBPHY_INTERFACE_MODE_UTMIW]   = "utmi_wide",
+       [USBPHY_INTERFACE_MODE_ULPI]    = "ulpi",
+       [USBPHY_INTERFACE_MODE_SERIAL]  = "serial",
+       [USBPHY_INTERFACE_MODE_HSIC]    = "hsic",
+};
+
+/**
+ * of_get_usbphy_mode - Get phy mode for given device_node

%s/of_get_usbphy_mode/of_usb_get_phy_mode
+ * @np:        Pointer to the given device_node
+ *
+ * The function gets phy interface string from property 'phy_type',
+ * and returns the correspondig enum usb_phy_interface
+ */
+enum usb_phy_interface of_usb_get_phy_mode(struct device_node *np)
+{

You agreed to move this function inside usb/phy.. no?

Yes, I did, but as mentioned in the introduction mail, the chipidea
driver has to determine the phy type even when phy support (aka
CONFIG_USB_OTG_UTILS) is disabled, so I can't put it in phy/phy.c.

I could add a phy/of.c though. Would that be better?

Yes. I think that would be better.

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to