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