2011-08-30 19:11:19 +04:00
/*
* Provides code common for host and device side USB .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation , version 2.
*
* If either host side ( ie . CONFIG_USB = y ) or device side USB stack
* ( ie . CONFIG_USB_GADGET = y ) is compiled in the kernel , this module is
* compiled - in as well . Otherwise , if either of the two stacks is
* compiled as module , this file is compiled as module as well .
*/
# include <linux/kernel.h>
# include <linux/module.h>
2013-06-13 18:59:55 +04:00
# include <linux/of.h>
2011-08-30 19:11:19 +04:00
# include <linux/usb/ch9.h>
2013-06-13 18:59:55 +04:00
# include <linux/usb/of.h>
2013-03-07 12:45:56 +04:00
# include <linux/usb/otg.h>
const char * usb_otg_state_string ( enum usb_otg_state state )
{
static const char * const names [ ] = {
[ OTG_STATE_A_IDLE ] = " a_idle " ,
[ OTG_STATE_A_WAIT_VRISE ] = " a_wait_vrise " ,
[ OTG_STATE_A_WAIT_BCON ] = " a_wait_bcon " ,
[ OTG_STATE_A_HOST ] = " a_host " ,
[ OTG_STATE_A_SUSPEND ] = " a_suspend " ,
[ OTG_STATE_A_PERIPHERAL ] = " a_peripheral " ,
[ OTG_STATE_A_WAIT_VFALL ] = " a_wait_vfall " ,
[ OTG_STATE_A_VBUS_ERR ] = " a_vbus_err " ,
[ OTG_STATE_B_IDLE ] = " b_idle " ,
[ OTG_STATE_B_SRP_INIT ] = " b_srp_init " ,
[ OTG_STATE_B_PERIPHERAL ] = " b_peripheral " ,
[ OTG_STATE_B_WAIT_ACON ] = " b_wait_acon " ,
[ OTG_STATE_B_HOST ] = " b_host " ,
} ;
if ( state < 0 | | state > = ARRAY_SIZE ( names ) )
return " UNDEFINED " ;
return names [ state ] ;
}
EXPORT_SYMBOL_GPL ( usb_otg_state_string ) ;
2011-08-30 19:11:19 +04:00
const char * usb_speed_string ( enum usb_device_speed speed )
{
static const char * const names [ ] = {
[ USB_SPEED_UNKNOWN ] = " UNKNOWN " ,
[ USB_SPEED_LOW ] = " low-speed " ,
[ USB_SPEED_FULL ] = " full-speed " ,
[ USB_SPEED_HIGH ] = " high-speed " ,
[ USB_SPEED_WIRELESS ] = " wireless " ,
[ USB_SPEED_SUPER ] = " super-speed " ,
} ;
if ( speed < 0 | | speed > = ARRAY_SIZE ( names ) )
speed = USB_SPEED_UNKNOWN ;
return names [ speed ] ;
}
EXPORT_SYMBOL_GPL ( usb_speed_string ) ;
2013-01-25 00:29:48 +04:00
const char * usb_state_string ( enum usb_device_state state )
{
static const char * const names [ ] = {
[ USB_STATE_NOTATTACHED ] = " not attached " ,
[ USB_STATE_ATTACHED ] = " attached " ,
[ USB_STATE_POWERED ] = " powered " ,
[ USB_STATE_RECONNECTING ] = " reconnecting " ,
[ USB_STATE_UNAUTHENTICATED ] = " unauthenticated " ,
[ USB_STATE_DEFAULT ] = " default " ,
[ USB_STATE_ADDRESS ] = " addresssed " ,
[ USB_STATE_CONFIGURED ] = " configured " ,
[ USB_STATE_SUSPENDED ] = " suspended " ,
} ;
if ( state < 0 | | state > = ARRAY_SIZE ( names ) )
return " UNKNOWN " ;
return names [ state ] ;
}
EXPORT_SYMBOL_GPL ( usb_state_string ) ;
2013-06-13 18:59:55 +04:00
# ifdef CONFIG_OF
static const char * const 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_dr_mode
*/
enum usb_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 ( ! strcmp ( dr_mode , usb_dr_modes [ i ] ) )
return i ;
return USB_DR_MODE_UNKNOWN ;
}
EXPORT_SYMBOL_GPL ( of_usb_get_dr_mode ) ;
# endif
2011-08-30 19:11:19 +04:00
MODULE_LICENSE ( " GPL " ) ;