/* * Platform data for Android USB * * Copyright (C) 2008 Google, Inc. * Author: Mike Lockwood * * 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_ANDROID_H #define __LINUX_USB_ANDROID_H #define FUNC_NAME_LEN 15 enum android_function_index { ANDROID_FFS, ANDROID_MBIM_BAM, ANDROID_ECM_BAM, ANDROID_AUDIO, ANDROID_RMNET, ANDROID_GPS, ANDROID_DIAG, ANDROID_QDSS_BAM, ANDROID_SERIAL, ANDROID_CCID, ANDROID_ACM, ANDROID_MTP, ANDROID_PTP, ANDROID_RNDIS, ANDROID_RNDIS_BAM, ANDROID_ECM, ANDROID_NCM, ANDROID_UMS, ANDROID_ACCESSORY, ANDROID_AUDIO_SRC, ANDROID_CHARGER, ANDROID_MIDI, ANDROID_RNDIS_GSI, ANDROID_ECM_GSI, ANDROID_RMNET_GSI, ANDROID_MBIM_GSI, ANDROID_DPL_GSI, ANDROID_MAX_FUNC_CNT, ANDROID_INVALID_FUNC, }; static enum android_function_index name_to_func_idx(const char *name) { if (!name) return ANDROID_INVALID_FUNC; if (!strncasecmp("FFS", name, FUNC_NAME_LEN)) return ANDROID_FFS; if (!strncasecmp("USB_MBIM", name, FUNC_NAME_LEN)) return ANDROID_MBIM_BAM; if (!strncasecmp("ECM_QC", name, FUNC_NAME_LEN)) return ANDROID_ECM_BAM; if (!strncasecmp("AUDIO", name, FUNC_NAME_LEN)) return ANDROID_AUDIO; if (!strncasecmp("RMNET", name, FUNC_NAME_LEN)) return ANDROID_RMNET; if (!strncasecmp("GPS", name, FUNC_NAME_LEN)) return ANDROID_GPS; if (!strncasecmp("DIAG", name, FUNC_NAME_LEN)) return ANDROID_DIAG; if (!strncasecmp("QDSS", name, FUNC_NAME_LEN)) return ANDROID_QDSS_BAM; if (!strncasecmp("SERIAL", name, FUNC_NAME_LEN)) return ANDROID_SERIAL; if (!strncasecmp("CCID", name, FUNC_NAME_LEN)) return ANDROID_CCID; if (!strncasecmp("ACM", name, FUNC_NAME_LEN)) return ANDROID_ACM; if (!strncasecmp("MTP", name, FUNC_NAME_LEN)) return ANDROID_MTP; if (!strncasecmp("PTP", name, FUNC_NAME_LEN)) return ANDROID_PTP; if (!strncasecmp("RNDIS", name, FUNC_NAME_LEN)) return ANDROID_RNDIS; if (!strncasecmp("RNDIS_QC", name, FUNC_NAME_LEN)) return ANDROID_RNDIS_BAM; if (!strncasecmp("ECM", name, FUNC_NAME_LEN)) return ANDROID_ECM; if (!strncasecmp("NCM", name, FUNC_NAME_LEN)) return ANDROID_NCM; if (!strncasecmp("MASS_STORAGE", name, FUNC_NAME_LEN)) return ANDROID_UMS; if (!strncasecmp("ACCESSORY", name, FUNC_NAME_LEN)) return ANDROID_ACCESSORY; if (!strncasecmp("AUDIO_SOURCE", name, FUNC_NAME_LEN)) return ANDROID_AUDIO_SRC; if (!strncasecmp("CHARGING", name, FUNC_NAME_LEN)) return ANDROID_AUDIO_SRC; if (!strncasecmp("MIDI", name, FUNC_NAME_LEN)) return ANDROID_MIDI; if (!strncasecmp("RNDIS_GSI", name, FUNC_NAME_LEN)) return ANDROID_RNDIS_GSI; if (!strncasecmp("ECM_GSI", name, FUNC_NAME_LEN)) return ANDROID_ECM_GSI; if (!strncasecmp("RMNET_GSI", name, FUNC_NAME_LEN)) return ANDROID_RMNET_GSI; if (!strncasecmp("MBIM_GSI", name, FUNC_NAME_LEN)) return ANDROID_MBIM_GSI; if (!strncasecmp("DPL_GSI", name, FUNC_NAME_LEN)) return ANDROID_DPL_GSI; return ANDROID_INVALID_FUNC; } enum android_pm_qos_state { WFI, IDLE_PC, IDLE_PC_RPM, NO_USB_VOTE, MAX_VOTES = NO_USB_VOTE, }; struct android_usb_platform_data { int (*update_pid_and_serial_num)(uint32_t, const char *); u32 pm_qos_latency[MAX_VOTES]; u8 usb_core_id; }; extern int gport_setup(struct usb_configuration *c); extern void gport_cleanup(void); extern int gserial_init_port(int port_num, const char *name, const char *port_name); extern bool gserial_is_connected(void); extern bool gserial_is_dun_w_softap_enabled(void); extern void gserial_dun_w_softap_enable(bool enable); extern bool gserial_is_dun_w_softap_active(void); int acm_port_setup(struct usb_configuration *c); void acm_port_cleanup(void); int acm_init_port(int port_num, const char *name); #endif /* __LINUX_USB_ANDROID_H */