2008-11-24 23:02:21 +03: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>
# include <linux/device.h>
# include <linux/usb/otg.h>
static struct otg_transceiver * xceiv ;
/**
* otg_get_transceiver - find the ( single ) OTG transceiver
*
* Returns the transceiver driver , after getting a refcount to it ; or
* null if there is no such transceiver . The caller is responsible for
* calling otg_put_transceiver ( ) to release that count .
*
* For use by USB host and peripheral drivers .
*/
struct otg_transceiver * otg_get_transceiver ( void )
{
if ( xceiv )
get_device ( xceiv - > dev ) ;
return xceiv ;
}
EXPORT_SYMBOL ( otg_get_transceiver ) ;
/**
* otg_put_transceiver - release the ( single ) OTG transceiver
* @ x : the transceiver returned by otg_get_transceiver ( )
*
* Releases a refcount the caller received from otg_get_transceiver ( ) .
*
* For use by USB host and peripheral drivers .
*/
void otg_put_transceiver ( struct otg_transceiver * x )
{
2009-04-22 07:33:10 +04:00
if ( x )
put_device ( x - > dev ) ;
2008-11-24 23:02:21 +03:00
}
EXPORT_SYMBOL ( otg_put_transceiver ) ;
/**
* otg_set_transceiver - declare the ( single ) OTG transceiver
* @ x : the USB OTG transceiver to be used ; or NULL
*
* This call is exclusively for use by transceiver drivers , which
* coordinate the activities of drivers for host and peripheral
* controllers , and in some cases for VBUS current regulation .
*/
int otg_set_transceiver ( struct otg_transceiver * x )
{
if ( xceiv & & x )
return - EBUSY ;
xceiv = x ;
return 0 ;
}
EXPORT_SYMBOL ( otg_set_transceiver ) ;