/* * ICUSB - for MUSB Host Driver defines * * Copyright 2015 Mediatek Inc. * Marvin Lin * Arvin Wang * Vincent Fan * Bryant Lu * Yu-Chang Wang * Macpaul Lin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * 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. * * You should have received a copy of the GNU General Public License * along with this program. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _MUSBFSH_ICUSB_H #define _MUSBFSH_ICUSB_H enum PHY_VOLTAGE_TYPE { VOL_18 = 0, VOL_33, VOL_50, }; enum SESSION_CONTROL_ACTION { STOP_SESSION = 0, START_SESSION, }; enum WAIT_DISCONNECT_DONE_ACTION { WAIT_DISCONNECT_DONE_DFT_ACTION = 0, }; #define IC_USB_CMD_LEN 255 struct IC_USB_CMD { unsigned char type; unsigned char length; unsigned char data[IC_USB_CMD_LEN]; }; enum IC_USB_CMD_TYPE { USB11_SESSION_CONTROL = 0, USB11_INIT_PHY_BY_VOLTAGE, USB11_WAIT_DISCONNECT_DONE, }; /* ICUSB feature list */ /* --- sysfs controlable feature --- */ #define MTK_ICUSB_POWER_AND_RESUME_TIME_NEOGO_SUPPORT #define MTK_ICUSB_SKIP_SESSION_REQ #define MTK_ICUSB_SKIP_ENABLE_SESSION #define MTK_ICUSB_SKIP_MAC_INIT #define MTK_ICUSB_RESISTOR_CONTROL #define MTK_ICUSB_HW_DBG /* #define MTK_ICUSB_SKIP_PORT_PM */ /* --- non sysfs controlable feature --- */ /* #define MTK_ICUSB_TAKE_WAKE_LOCK */ /* #define MTK_ICUSB_BABBLE_RECOVER */ struct my_attr { struct attribute attr; int value; }; /* power neogo */ #define IC_USB_REQ_TYPE_GET_IFACE_POWER 0xC0 /* Get interface power */ #define IC_USB_REQ_TYPE_SET_IFACE_POWER 0x40 /* Set interface power */ #define IC_USB_REQ_GET_IFACE_POWER 0x01 /* Get interface power */ #define IC_USB_REQ_SET_IFACE_POWER 0x02 /* Set interface power */ #define IC_USB_WVALUE_POWER_NEGOTIATION 0 #define IC_USB_WINDEX_POWER_NEGOTIATION 0 #define IC_USB_LEN_POWER_NEGOTIATION 2 #define IC_USB_PREFER_CLASSB_ENABLE_BIT 0x80 #define IC_USB_RETRIES_POWER_NEGOTIATION 3 #define IC_USB_CLASSB (1<<1) #define IC_USB_CLASSC (1<<2) #define IC_USB_CURRENT 100 /* in 2 mA unit, 100 denotes 200 mA */ /* resume_time neogo */ #define IC_USB_REQ_TYPE_GET_INTERFACE_RESUME_TIME 0xC0 #define IC_USB_REQ_GET_INTERFACE_RESUME_TIME 0x03 #define IC_USB_WVALUE_RESUME_TIME_NEGOTIATION 0 #define IC_USB_WINDEX_RESUME_TIME_NEGOTIATION 0 #define IC_USB_LEN_RESUME_TIME_NEGOTIATION 3 #define IC_USB_RETRIES_RESUME_TIME_NEGOTIATION 3 /* == =================== */ /* ic_usb_status : */ /* Byte4 : wait disconnect status */ /* Byte3 Byte2 : get interface power reqest data field */ /* Byte1 : power negotiation result */ /* */ /* ===================== */ #define PREFER_VOL_STS_SHIFT (0) #define PREFER_VOL_STS_MSK (0x3) #define PREFER_VOL_NOT_INITED 0x0 #define PREFER_VOL_PWR_NEG_FAIL 0x1 #define PREFER_VOL_PWR_NEG_OK 0x2 #define PREFER_VOL_CLASS_SHIFT (8) #define PREFER_VOL_CLASS_MSK (0xff) #define USB_PORT1_STS_SHIFT (24) #define USB_PORT1_STS_MSK (0xf) #define USB_PORT1_DISCONNECTING 0x0 #define USB_PORT1_DISCONNECT_DONE 0x1 #define USB_PORT1_CONNECT 0x2 extern struct my_attr power_resume_time_neogo_attr; extern struct my_attr skip_session_req_attr; extern struct my_attr skip_enable_session_attr; extern struct my_attr skip_mac_init_attr; extern struct my_attr resistor_control_attr; extern struct my_attr hw_dbg_attr; extern struct my_attr skip_port_pm_attr; extern void musbfsh_start_session(void); extern void musbfsh_start_session_pure(void); extern void musbfsh_stop_session(void); extern void musbfsh_init_phy_by_voltage(enum PHY_VOLTAGE_TYPE); extern enum PHY_VOLTAGE_TYPE get_usb11_phy_voltage(void); extern void mt65xx_usb11_mac_reset_and_phy_stress_set(void); extern int is_usb11_enabled(void); #define MYDBG(fmt, args...) pr_warn("MTK_ICUSB [DBG], <%s(), %d> " fmt, \ __func__, __LINE__, ## args) #endif