2008-11-24 12:02:21 -08:00
/*
* otg . c - - USB OTG utility code
*
* Copyright ( C ) 2004 Texas Instruments
*
* 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 ; either version 2 of the License , or
* ( at your option ) any later version .
*/
# include <linux/kernel.h>
2011-05-27 09:56:31 -04:00
# include <linux/export.h>
2008-11-24 12:02:21 -08:00
# include <linux/device.h>
# include <linux/usb/otg.h>
2012-02-13 13:24:04 +02:00
static struct usb_phy * phy ;
2008-11-24 12:02:21 -08:00
/**
2012-06-22 17:02:45 +05:30
* usb_get_phy - find the ( single ) USB PHY
2008-11-24 12:02:21 -08:00
*
2012-06-22 17:02:45 +05:30
* Returns the phy driver , after getting a refcount to it ; or
* null if there is no such phy . The caller is responsible for
* calling usb_put_phy ( ) to release that count .
2008-11-24 12:02:21 -08:00
*
* For use by USB host and peripheral drivers .
*/
2012-06-22 17:02:45 +05:30
struct usb_phy * usb_get_phy ( void )
2008-11-24 12:02:21 -08:00
{
2012-02-13 13:24:04 +02:00
if ( phy )
get_device ( phy - > dev ) ;
return phy ;
2008-11-24 12:02:21 -08:00
}
2012-06-22 17:02:45 +05:30
EXPORT_SYMBOL ( usb_get_phy ) ;
2008-11-24 12:02:21 -08:00
/**
2012-06-22 17:02:45 +05:30
* usb_put_phy - release the ( single ) USB PHY
* @ x : the phy returned by usb_get_phy ( )
2008-11-24 12:02:21 -08:00
*
2012-06-22 17:02:45 +05:30
* Releases a refcount the caller received from usb_get_phy ( ) .
2008-11-24 12:02:21 -08:00
*
* For use by USB host and peripheral drivers .
*/
2012-06-22 17:02:45 +05:30
void usb_put_phy ( struct usb_phy * x )
2008-11-24 12:02:21 -08:00
{
2009-04-21 20:33:10 -07:00
if ( x )
put_device ( x - > dev ) ;
2008-11-24 12:02:21 -08:00
}
2012-06-22 17:02:45 +05:30
EXPORT_SYMBOL ( usb_put_phy ) ;
2008-11-24 12:02:21 -08:00
/**
2012-06-22 17:02:45 +05:30
* usb_add_phy - declare the ( single ) USB PHY
* @ x : the USB phy to be used ; or NULL
2008-11-24 12:02:21 -08:00
*
2012-06-22 17:02:45 +05:30
* This call is exclusively for use by phy drivers , which
2008-11-24 12:02:21 -08:00
* coordinate the activities of drivers for host and peripheral
* controllers , and in some cases for VBUS current regulation .
*/
2012-06-22 17:02:45 +05:30
int usb_add_phy ( struct usb_phy * x )
2008-11-24 12:02:21 -08:00
{
2012-02-13 13:24:04 +02:00
if ( phy & & x )
2008-11-24 12:02:21 -08:00
return - EBUSY ;
2012-02-13 13:24:04 +02:00
phy = x ;
2008-11-24 12:02:21 -08:00
return 0 ;
}
2012-06-22 17:02:45 +05:30
EXPORT_SYMBOL ( usb_add_phy ) ;
2011-04-15 16:18:38 +02:00
const char * otg_state_string ( enum usb_otg_state state )
{
switch ( state ) {
case OTG_STATE_A_IDLE :
return " a_idle " ;
case OTG_STATE_A_WAIT_VRISE :
return " a_wait_vrise " ;
case OTG_STATE_A_WAIT_BCON :
return " a_wait_bcon " ;
case OTG_STATE_A_HOST :
return " a_host " ;
case OTG_STATE_A_SUSPEND :
return " a_suspend " ;
case OTG_STATE_A_PERIPHERAL :
return " a_peripheral " ;
case OTG_STATE_A_WAIT_VFALL :
return " a_wait_vfall " ;
case OTG_STATE_A_VBUS_ERR :
return " a_vbus_err " ;
case OTG_STATE_B_IDLE :
return " b_idle " ;
case OTG_STATE_B_SRP_INIT :
return " b_srp_init " ;
case OTG_STATE_B_PERIPHERAL :
return " b_peripheral " ;
case OTG_STATE_B_WAIT_ACON :
return " b_wait_acon " ;
case OTG_STATE_B_HOST :
return " b_host " ;
default :
return " UNDEFINED " ;
}
}
EXPORT_SYMBOL ( otg_state_string ) ;