1c0c62d92SMugunthan V N /* 2c0c62d92SMugunthan V N * Provides code common for host and device side USB. 3c0c62d92SMugunthan V N * 4c0c62d92SMugunthan V N * (C) Copyright 2016 5c0c62d92SMugunthan V N * Texas Instruments Incorporated, <www.ti.com> 6c0c62d92SMugunthan V N * 7c0c62d92SMugunthan V N * SPDX-License-Identifier: GPL-2.0+ 8c0c62d92SMugunthan V N */ 9c0c62d92SMugunthan V N 10c0c62d92SMugunthan V N #include <common.h> 11*0e00a84cSMasahiro Yamada #include <linux/libfdt.h> 12c0c62d92SMugunthan V N #include <linux/usb/otg.h> 13c0c62d92SMugunthan V N 14c0c62d92SMugunthan V N DECLARE_GLOBAL_DATA_PTR; 15c0c62d92SMugunthan V N 16c0c62d92SMugunthan V N static const char *const usb_dr_modes[] = { 17c0c62d92SMugunthan V N [USB_DR_MODE_UNKNOWN] = "", 18c0c62d92SMugunthan V N [USB_DR_MODE_HOST] = "host", 19c0c62d92SMugunthan V N [USB_DR_MODE_PERIPHERAL] = "peripheral", 20c0c62d92SMugunthan V N [USB_DR_MODE_OTG] = "otg", 21c0c62d92SMugunthan V N }; 22c0c62d92SMugunthan V N 23c0c62d92SMugunthan V N enum usb_dr_mode usb_get_dr_mode(int node) 24c0c62d92SMugunthan V N { 25c0c62d92SMugunthan V N const void *fdt = gd->fdt_blob; 26c0c62d92SMugunthan V N const char *dr_mode; 27c0c62d92SMugunthan V N int i; 28c0c62d92SMugunthan V N 29c0c62d92SMugunthan V N dr_mode = fdt_getprop(fdt, node, "dr_mode", NULL); 30c0c62d92SMugunthan V N if (!dr_mode) { 3190aa625cSMasahiro Yamada pr_err("usb dr_mode not found\n"); 32c0c62d92SMugunthan V N return USB_DR_MODE_UNKNOWN; 33c0c62d92SMugunthan V N } 34c0c62d92SMugunthan V N 35c0c62d92SMugunthan V N for (i = 0; i < ARRAY_SIZE(usb_dr_modes); i++) 36c0c62d92SMugunthan V N if (!strcmp(dr_mode, usb_dr_modes[i])) 37c0c62d92SMugunthan V N return i; 38c0c62d92SMugunthan V N 39c0c62d92SMugunthan V N return USB_DR_MODE_UNKNOWN; 40c0c62d92SMugunthan V N } 41