11c9af653SMichael Grzeschik /* 21c9af653SMichael Grzeschik * USB of helper code 31c9af653SMichael Grzeschik * 41c9af653SMichael Grzeschik * This program is free software; you can redistribute it and/or modify 51c9af653SMichael Grzeschik * it under the terms of the GNU General Public License as published by 61c9af653SMichael Grzeschik * the Free Software Foundation; either version 2 of the License, or 71c9af653SMichael Grzeschik * (at your option) any later version. 81c9af653SMichael Grzeschik */ 91c9af653SMichael Grzeschik 101c9af653SMichael Grzeschik #include <linux/kernel.h> 111c9af653SMichael Grzeschik #include <linux/module.h> 121c9af653SMichael Grzeschik #include <linux/of.h> 131c9af653SMichael Grzeschik #include <linux/usb/of.h> 141c9af653SMichael Grzeschik #include <linux/usb/otg.h> 151c9af653SMichael Grzeschik 161c9af653SMichael Grzeschik static const char *const usbphy_modes[] = { 171c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_UNKNOWN] = "", 181c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_UTMI] = "utmi", 191c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_UTMIW] = "utmi_wide", 201c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_ULPI] = "ulpi", 211c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_SERIAL] = "serial", 221c9af653SMichael Grzeschik [USBPHY_INTERFACE_MODE_HSIC] = "hsic", 231c9af653SMichael Grzeschik }; 241c9af653SMichael Grzeschik 251c9af653SMichael Grzeschik /** 261c9af653SMichael Grzeschik * of_usb_get_phy_mode - Get phy mode for given device_node 271c9af653SMichael Grzeschik * @np: Pointer to the given device_node 281c9af653SMichael Grzeschik * 291c9af653SMichael Grzeschik * The function gets phy interface string from property 'phy_type', 301c9af653SMichael Grzeschik * and returns the correspondig enum usb_phy_interface 311c9af653SMichael Grzeschik */ 321c9af653SMichael Grzeschik enum usb_phy_interface of_usb_get_phy_mode(struct device_node *np) 331c9af653SMichael Grzeschik { 341c9af653SMichael Grzeschik const char *phy_type; 351c9af653SMichael Grzeschik int err, i; 361c9af653SMichael Grzeschik 371c9af653SMichael Grzeschik err = of_property_read_string(np, "phy_type", &phy_type); 381c9af653SMichael Grzeschik if (err < 0) 391c9af653SMichael Grzeschik return USBPHY_INTERFACE_MODE_UNKNOWN; 401c9af653SMichael Grzeschik 411c9af653SMichael Grzeschik for (i = 0; i < ARRAY_SIZE(usbphy_modes); i++) 421c9af653SMichael Grzeschik if (!strcmp(phy_type, usbphy_modes[i])) 431c9af653SMichael Grzeschik return i; 441c9af653SMichael Grzeschik 451c9af653SMichael Grzeschik return USBPHY_INTERFACE_MODE_UNKNOWN; 461c9af653SMichael Grzeschik } 471c9af653SMichael Grzeschik EXPORT_SYMBOL_GPL(of_usb_get_phy_mode); 48