/* * Copyright (C) 2011 Google, Inc. * * Author: * Colin Cross * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef __LINUX_USB_OTG_ID_H #define __LINUX_USB_OTG_ID_H #include #include /** * otg_id_notifier_block * * @priority: Order the notifications will be called in. Higher numbers * get called first. * @detect: Called during otg_id_notify. Return OTG_ID_HANDLED if the USB cable * has been identified * @proxy_wait: Called during otg_id_notify if a previous handler returns * OTG_ID_PROXY_WAIT. This should wait on ID change then call otg_id_notify. * This is used when a handler knows what's connected but can't detect * the change itself. * @cancel: Called after detect has returned OTG_ID_HANDLED to ask it to * release detection resources to allow a new identification to occur. */ struct otg_id_notifier_block { int priority; int (*detect)(struct otg_id_notifier_block *otg_id_nb); int (*proxy_wait)(struct otg_id_notifier_block *otg_id_nb); void (*cancel)(struct otg_id_notifier_block *otg_id_nb); struct plist_node p; }; #define OTG_ID_PROXY_WAIT 2 #define OTG_ID_HANDLED 1 #define OTG_ID_UNHANDLED 0 int otg_id_register_notifier(struct otg_id_notifier_block *otg_id_nb); void otg_id_unregister_notifier(struct otg_id_notifier_block *otg_id_nb); void otg_id_notify(void); int otg_id_suspend(void); void otg_id_resume(void); #endif /* __LINUX_USB_OTG_ID_H */