• otg.c -- USB OTG utility code Copyright (C) 2004 Texas Instruments



    https://source.codeaurora.org/external/gigabyte/ag-gb-dsds-7227/plain/kernel/drivers/usb/otg/otg.c


    /*
     * 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)
    {
    	if (x)
    		put_device(x->dev);
    }
    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);
    
    int otg_send_event(enum usb_otg_event event)
    {
    	struct otg_transceiver *otg = otg_get_transceiver();
    	int ret = -ENOTSUPP;
    
    	if (otg && otg->send_event)
    		ret = otg->send_event(otg, event);
    
    	if (otg)
    		otg_put_transceiver(otg);
    
    	return ret;
    }
    EXPORT_SYMBOL(otg_send_event);
    


  • 相关阅读:
    gulp serve 报错 gulp.ps1
    执行git命令时出现fatal: 'origin' does not appear to be a git repository错误
    利用 SASS 简化 `nth-child` 样式的生成
    git的一些常用命令
    回调函数
    匿名函数
    css消除行内元素的间隙
    @click.native的使用
    Element-ui 下拉列表 选项过多时如何解决卡顿问题
    vue组件通信(父子之间,兄弟之间)
  • 原文地址:https://www.cnblogs.com/ztguang/p/12644926.html
Copyright © 2020-2023  润新知