| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 1 | /* linux/include/asm-arm/arch-msm/hsusb.h | 
 | 2 |  * | 
 | 3 |  * Copyright (C) 2008 Google, Inc. | 
 | 4 |  * Author: Brian Swetland <swetland@google.com> | 
| Duy Truong | e833aca | 2013-02-12 13:35:08 -0800 | [diff] [blame] | 5 |  * Copyright (c) 2009-2012, The Linux Foundation. All rights reserved. | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 6 |  * | 
 | 7 |  * This software is licensed under the terms of the GNU General Public | 
 | 8 |  * License version 2, as published by the Free Software Foundation, and | 
 | 9 |  * may be copied, distributed, and modified under those terms. | 
 | 10 |  * | 
 | 11 |  * This program is distributed in the hope that it will be useful, | 
 | 12 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 13 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | 14 |  * GNU General Public License for more details. | 
 | 15 |  * | 
 | 16 |  */ | 
 | 17 |  | 
 | 18 | #ifndef __ASM_ARCH_MSM_HSUSB_H | 
 | 19 | #define __ASM_ARCH_MSM_HSUSB_H | 
 | 20 |  | 
 | 21 | #include <linux/types.h> | 
| Ido Shayevitz | 9fb8345 | 2012-04-01 17:45:58 +0300 | [diff] [blame] | 22 | #include <linux/usb/ch9.h> | 
 | 23 | #include <linux/usb/gadget.h> | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 24 | #include <linux/usb/otg.h> | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 25 | #include <linux/wakelock.h> | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 26 | #ifdef CONFIG_MACH_HTC | 
 | 27 | #include <mach/board.h> | 
 | 28 | #endif | 
| Steve Muckle | f132c6c | 2012-06-06 18:30:57 -0700 | [diff] [blame] | 29 | #include <linux/pm_qos.h> | 
| Ido Shayevitz | 5a6178b | 2012-06-10 16:31:13 +0300 | [diff] [blame] | 30 | #include <linux/hrtimer.h> | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 31 |  | 
| Ido Shayevitz | d1cb16c | 2012-03-28 18:57:47 +0200 | [diff] [blame] | 32 | /* | 
 | 33 |  * The following are bit fields describing the usb_request.udc_priv word. | 
 | 34 |  * These bit fields are set by function drivers that wish to queue | 
 | 35 |  * usb_requests with sps/bam parameters. | 
 | 36 |  */ | 
 | 37 | #define MSM_PIPE_ID_MASK		(0x1F) | 
 | 38 | #define MSM_TX_PIPE_ID_OFS		(16) | 
 | 39 | #define MSM_SPS_MODE			BIT(5) | 
 | 40 | #define MSM_IS_FINITE_TRANSFER		BIT(6) | 
 | 41 | #define MSM_PRODUCER			BIT(7) | 
 | 42 | #define MSM_DISABLE_WB			BIT(8) | 
 | 43 | #define MSM_ETD_IOC			BIT(9) | 
 | 44 | #define MSM_INTERNAL_MEM		BIT(10) | 
 | 45 | #define MSM_VENDOR_ID			BIT(16) | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 46 |  | 
 | 47 | /** | 
 | 48 |  * Supported USB modes | 
 | 49 |  * | 
 | 50 |  * USB_PERIPHERAL       Only peripheral mode is supported. | 
 | 51 |  * USB_HOST             Only host mode is supported. | 
 | 52 |  * USB_OTG              OTG mode is supported. | 
 | 53 |  * | 
 | 54 |  */ | 
 | 55 | enum usb_mode_type { | 
 | 56 | 	USB_NONE = 0, | 
 | 57 | 	USB_PERIPHERAL, | 
 | 58 | 	USB_HOST, | 
 | 59 | 	USB_OTG, | 
 | 60 | }; | 
 | 61 |  | 
 | 62 | /** | 
 | 63 |  * OTG control | 
 | 64 |  * | 
 | 65 |  * OTG_NO_CONTROL	Id/VBUS notifications not required. Useful in host | 
 | 66 |  *                      only configuration. | 
 | 67 |  * OTG_PHY_CONTROL	Id/VBUS notifications comes form USB PHY. | 
 | 68 |  * OTG_PMIC_CONTROL	Id/VBUS notifications comes from PMIC hardware. | 
 | 69 |  * OTG_USER_CONTROL	Id/VBUS notifcations comes from User via sysfs. | 
 | 70 |  * | 
 | 71 |  */ | 
 | 72 | enum otg_control_type { | 
 | 73 | 	OTG_NO_CONTROL = 0, | 
 | 74 | 	OTG_PHY_CONTROL, | 
 | 75 | 	OTG_PMIC_CONTROL, | 
 | 76 | 	OTG_USER_CONTROL, | 
 | 77 | }; | 
 | 78 |  | 
 | 79 | /** | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 80 |  * PHY used in | 
 | 81 |  * | 
 | 82 |  * INVALID_PHY			Unsupported PHY | 
 | 83 |  * CI_45NM_INTEGRATED_PHY	Chipidea 45nm integrated PHY | 
 | 84 |  * SNPS_28NM_INTEGRATED_PHY	Synopsis 28nm integrated PHY | 
 | 85 |  * | 
 | 86 |  */ | 
 | 87 | enum msm_usb_phy_type { | 
 | 88 | 	INVALID_PHY = 0, | 
 | 89 | 	CI_45NM_INTEGRATED_PHY, | 
 | 90 | 	SNPS_28NM_INTEGRATED_PHY, | 
 | 91 | }; | 
 | 92 |  | 
 | 93 | #define IDEV_CHG_MAX	1500 | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 94 | #define IDEV_CHG_MIN	500 | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 95 | #define IUNIT		100 | 
 | 96 |  | 
| Pavankumar Kondeti | aa449e1 | 2011-11-04 11:09:26 +0530 | [diff] [blame] | 97 | #define IDEV_ACA_CHG_MAX	1500 | 
 | 98 | #define IDEV_ACA_CHG_LIMIT	500 | 
 | 99 |  | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 100 | /** | 
 | 101 |  * Different states involved in USB charger detection. | 
 | 102 |  * | 
 | 103 |  * USB_CHG_STATE_UNDEFINED	USB charger is not connected or detection | 
 | 104 |  *                              process is not yet started. | 
 | 105 |  * USB_CHG_STATE_WAIT_FOR_DCD	Waiting for Data pins contact. | 
 | 106 |  * USB_CHG_STATE_DCD_DONE	Data pin contact is detected. | 
 | 107 |  * USB_CHG_STATE_PRIMARY_DONE	Primary detection is completed (Detects | 
 | 108 |  *                              between SDP and DCP/CDP). | 
 | 109 |  * USB_CHG_STATE_SECONDARY_DONE	Secondary detection is completed (Detects | 
 | 110 |  *                              between DCP and CDP). | 
 | 111 |  * USB_CHG_STATE_DETECTED	USB charger type is determined. | 
 | 112 |  * | 
 | 113 |  */ | 
 | 114 | enum usb_chg_state { | 
 | 115 | 	USB_CHG_STATE_UNDEFINED = 0, | 
 | 116 | 	USB_CHG_STATE_WAIT_FOR_DCD, | 
 | 117 | 	USB_CHG_STATE_DCD_DONE, | 
 | 118 | 	USB_CHG_STATE_PRIMARY_DONE, | 
 | 119 | 	USB_CHG_STATE_SECONDARY_DONE, | 
 | 120 | 	USB_CHG_STATE_DETECTED, | 
 | 121 | }; | 
 | 122 |  | 
 | 123 | /** | 
 | 124 |  * USB charger types | 
 | 125 |  * | 
 | 126 |  * USB_INVALID_CHARGER	Invalid USB charger. | 
 | 127 |  * USB_SDP_CHARGER	Standard downstream port. Refers to a downstream port | 
 | 128 |  *                      on USB2.0 compliant host/hub. | 
 | 129 |  * USB_DCP_CHARGER	Dedicated charger port (AC charger/ Wall charger). | 
 | 130 |  * USB_CDP_CHARGER	Charging downstream port. Enumeration can happen and | 
 | 131 |  *                      IDEV_CHG_MAX can be drawn irrespective of USB state. | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 132 |  * USB_ACA_A_CHARGER	B-device is connected on accessory port with charger | 
 | 133 |  *                      connected on charging port. This configuration allows | 
 | 134 |  *                      charging in host mode. | 
 | 135 |  * USB_ACA_B_CHARGER	No device (or A-device without VBUS) is connected on | 
 | 136 |  *                      accessory port with charger connected on charging port. | 
 | 137 |  * USB_ACA_C_CHARGER	A-device (with VBUS) is connected on | 
 | 138 |  *                      accessory port with charger connected on charging port. | 
 | 139 |  * USB_ACA_DOCK_CHARGER	A docking station that has one upstream port and one | 
 | 140 |  *			or more downstream ports. Capable of supplying | 
 | 141 |  *			IDEV_CHG_MAX irrespective of devices connected on | 
 | 142 |  *			accessory ports. | 
| Pavankumar Kondeti | 9ec21d3 | 2012-05-07 15:50:23 +0530 | [diff] [blame] | 143 |  * USB_PROPRIETARY_CHARGER A proprietary charger pull DP and DM to specific | 
 | 144 |  *			voltages between 2.0-3.3v for identification. | 
 | 145 |  * | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 146 |  */ | 
 | 147 | enum usb_chg_type { | 
 | 148 | 	USB_INVALID_CHARGER = 0, | 
 | 149 | 	USB_SDP_CHARGER, | 
 | 150 | 	USB_DCP_CHARGER, | 
 | 151 | 	USB_CDP_CHARGER, | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 152 | 	USB_ACA_A_CHARGER, | 
 | 153 | 	USB_ACA_B_CHARGER, | 
 | 154 | 	USB_ACA_C_CHARGER, | 
 | 155 | 	USB_ACA_DOCK_CHARGER, | 
| Pavankumar Kondeti | 9ec21d3 | 2012-05-07 15:50:23 +0530 | [diff] [blame] | 156 | 	USB_PROPRIETARY_CHARGER, | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 157 | }; | 
 | 158 |  | 
 | 159 | /** | 
| Mayank Rana | 248698c | 2012-04-19 00:03:16 +0530 | [diff] [blame] | 160 |  * Used different VDDCX voltage voting mechnism | 
 | 161 |  * VDDCX_CORNER       Vote for VDDCX Corner voltage | 
 | 162 |  * VDDCX              Vote for VDDCX Absolute voltage | 
 | 163 |  */ | 
 | 164 | enum usb_vdd_type { | 
 | 165 | 	VDDCX_CORNER = 0, | 
 | 166 | 	VDDCX, | 
 | 167 | 	VDD_TYPE_MAX, | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 168 | }; | 
 | 169 |  | 
 | 170 | /** | 
| Amit Blay | d6ea610 | 2012-06-07 16:26:24 +0300 | [diff] [blame] | 171 |  * Used different VDDCX voltage values | 
 | 172 |  */ | 
 | 173 | enum usb_vdd_value { | 
 | 174 | 	VDD_NONE = 0, | 
 | 175 | 	VDD_MIN, | 
 | 176 | 	VDD_MAX, | 
 | 177 | 	VDD_VAL_MAX, | 
 | 178 | }; | 
 | 179 |  | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 180 | #define POWER_COLLAPSE_LDO3V3	(1 << 0) /* Regulator L3 */ | 
 | 181 | #define POWER_COLLAPSE_LDO1V8	(1 << 1) /* Regulator L4 */ | 
 | 182 |  | 
| Amit Blay | d6ea610 | 2012-06-07 16:26:24 +0300 | [diff] [blame] | 183 | /** | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 184 |  * struct msm_otg_platform_data - platform device data | 
| Pavankumar Kondeti | dfb2130 | 2011-03-04 22:45:02 +0530 | [diff] [blame] | 185 |  *              for msm_otg driver. | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 186 |  * @phy_init_seq: PHY configuration sequence. val, reg pairs | 
 | 187 |  *              terminated by -1. | 
| Mayank Rana | 8549e63 | 2012-01-23 12:49:54 +0530 | [diff] [blame] | 188 |  * @vbus_power: VBUS power on/off routine.It should return result | 
 | 189 |  *		as success(zero value) or failure(non-zero value). | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 190 |  * @power_budget: VBUS power budget in mA (0 will be treated as 500mA). | 
 | 191 |  * @mode: Supported mode (OTG/peripheral/host). | 
 | 192 |  * @otg_control: OTG switch controlled by user/Id pin | 
 | 193 |  * @default_mode: Default operational mode. Applicable only if | 
 | 194 |  *              OTG switch is controller by user. | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 195 |  * @pmic_id_irq: IRQ number assigned for PMIC USB ID line. | 
| Jack Pham | 87f202f | 2012-08-06 00:24:22 -0700 | [diff] [blame] | 196 |  * @mpm_otgsessvld_int: MPM wakeup pin assigned for OTG SESSVLD | 
 | 197 |  *              interrupt. Used when .otg_control == OTG_PHY_CONTROL. | 
| Vijayavardhan Vennapusa | fc464f0 | 2011-11-04 21:54:00 +0530 | [diff] [blame] | 198 |  * @mhl_enable: indicates MHL connector or not. | 
| Ofir Cohen | 4da266f | 2012-01-03 10:19:29 +0200 | [diff] [blame] | 199 |  * @disable_reset_on_disconnect: perform USB PHY and LINK reset | 
 | 200 |  *              on USB cable disconnection. | 
| Amit Blay | 6fa647a | 2012-05-24 14:12:08 +0300 | [diff] [blame] | 201 |  * @enable_lpm_on_suspend: Enable the USB core to go into Low | 
 | 202 |  *              Power Mode, when USB bus is suspended but cable | 
 | 203 |  *              is connected. | 
| Amit Blay | 9b6e58b | 2012-06-18 13:12:49 +0300 | [diff] [blame] | 204 |  * @core_clk_always_on_workaround: Don't disable core_clk when | 
 | 205 |  *              USB enters LPM. | 
| Manu Gautam | cd82e9d | 2011-12-20 14:17:28 +0530 | [diff] [blame] | 206 |  * @bus_scale_table: parameters for bus bandwidth requirements | 
| Pavankumar Kondeti | 2aec9f3 | 2012-06-13 09:06:03 +0530 | [diff] [blame] | 207 |  * @mhl_dev_name: MHL device name used to register with MHL driver. | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 208 |  */ | 
 | 209 | struct msm_otg_platform_data { | 
 | 210 | 	int *phy_init_seq; | 
| Mayank Rana | 8549e63 | 2012-01-23 12:49:54 +0530 | [diff] [blame] | 211 | 	int (*vbus_power)(bool on); | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 212 | 	unsigned power_budget; | 
 | 213 | 	enum usb_mode_type mode; | 
 | 214 | 	enum otg_control_type otg_control; | 
 | 215 | 	enum usb_mode_type default_mode; | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 216 | 	enum msm_usb_phy_type phy_type; | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 217 | 	void (*setup_gpio)(enum usb_otg_state state); | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 218 | 	int pmic_id_irq; | 
| Jack Pham | 87f202f | 2012-08-06 00:24:22 -0700 | [diff] [blame] | 219 | 	unsigned int mpm_otgsessvld_int; | 
| Vijayavardhan Vennapusa | fc464f0 | 2011-11-04 21:54:00 +0530 | [diff] [blame] | 220 | 	bool mhl_enable; | 
| Ofir Cohen | 4da266f | 2012-01-03 10:19:29 +0200 | [diff] [blame] | 221 | 	bool disable_reset_on_disconnect; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 222 | #ifdef CONFIG_MACH_HTC | 
 | 223 |         bool enable_dcd; | 
 | 224 | #endif | 
| Amit Blay | 6fa647a | 2012-05-24 14:12:08 +0300 | [diff] [blame] | 225 | 	bool enable_lpm_on_dev_suspend; | 
| Amit Blay | 9b6e58b | 2012-06-18 13:12:49 +0300 | [diff] [blame] | 226 | 	bool core_clk_always_on_workaround; | 
| Manu Gautam | cd82e9d | 2011-12-20 14:17:28 +0530 | [diff] [blame] | 227 | 	struct msm_bus_scale_pdata *bus_scale_table; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 228 | #ifdef CONFIG_MACH_HTC | 
 | 229 | 	int reset_phy_before_lpm; | 
 | 230 | 	void (*usb_uart_switch)(int uart); | 
 | 231 | 	int ldo_power_collapse; | 
 | 232 | #else | 
| Pavankumar Kondeti | 2aec9f3 | 2012-06-13 09:06:03 +0530 | [diff] [blame] | 233 | 	const char *mhl_dev_name; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 234 | #endif | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 235 | }; | 
 | 236 |  | 
| Vijayavardhan Vennapusa | a315203 | 2012-03-05 16:29:30 +0530 | [diff] [blame] | 237 | /* Timeout (in msec) values (min - max) associated with OTG timers */ | 
 | 238 |  | 
 | 239 | #define TA_WAIT_VRISE	100	/* ( - 100)  */ | 
 | 240 | #define TA_WAIT_VFALL	500	/* ( - 1000) */ | 
 | 241 |  | 
 | 242 | /* | 
 | 243 |  * This option is set for embedded hosts or OTG devices in which leakage | 
 | 244 |  * currents are very minimal. | 
 | 245 |  */ | 
 | 246 | #ifdef CONFIG_USB_OTG | 
 | 247 | #define TA_WAIT_BCON	30000	/* (1100 - 30000) */ | 
 | 248 | #else | 
 | 249 | #define TA_WAIT_BCON	-1 | 
 | 250 | #endif | 
 | 251 |  | 
 | 252 | #define TA_AIDL_BDIS	500	/* (200 - ) */ | 
 | 253 | #define TA_BIDL_ADIS	155	/* (155 - 200) */ | 
 | 254 | #define TB_SRP_FAIL	6000	/* (5000 - 6000) */ | 
 | 255 | #define TB_ASE0_BRST	200	/* (155 - ) */ | 
 | 256 |  | 
 | 257 | /* TB_SSEND_SRP and TB_SE0_SRP are combined */ | 
 | 258 | #define TB_SRP_INIT	2000	/* (1500 - ) */ | 
 | 259 |  | 
 | 260 | #define TA_TST_MAINT	10100	/* (9900 - 10100) */ | 
 | 261 | #define TB_TST_SRP	3000	/* ( - 5000) */ | 
 | 262 | #define TB_TST_CONFIG	300 | 
 | 263 |  | 
 | 264 | /* Timeout variables */ | 
 | 265 |  | 
 | 266 | #define A_WAIT_VRISE	0 | 
 | 267 | #define A_WAIT_VFALL	1 | 
 | 268 | #define A_WAIT_BCON	2 | 
 | 269 | #define A_AIDL_BDIS	3 | 
 | 270 | #define A_BIDL_ADIS	4 | 
 | 271 | #define B_SRP_FAIL	5 | 
 | 272 | #define B_ASE0_BRST	6 | 
 | 273 | #define A_TST_MAINT	7 | 
 | 274 | #define B_TST_SRP	8 | 
 | 275 | #define B_TST_CONFIG	9 | 
 | 276 |  | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 277 | /** | 
 | 278 |  * struct msm_otg: OTG driver data. Shared by HCD and DCD. | 
 | 279 |  * @otg: USB OTG Transceiver structure. | 
 | 280 |  * @pdata: otg device platform data. | 
 | 281 |  * @irq: IRQ number assigned for HSUSB controller. | 
| Manu Gautam | f8c4564 | 2012-08-10 10:20:56 -0700 | [diff] [blame] | 282 |  * @async_irq: IRQ number used by some controllers during low power state | 
| Manu Gautam | 5143b25 | 2012-01-05 19:25:23 -0800 | [diff] [blame] | 283 |  * @clk: clock struct of alt_core_clk. | 
 | 284 |  * @pclk: clock struct of iface_clk. | 
 | 285 |  * @phy_reset_clk: clock struct of phy_clk. | 
 | 286 |  * @core_clk: clock struct of core_bus_clk. | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 287 |  * @regs: ioremapped register base address. | 
 | 288 |  * @inputs: OTG state machine inputs(Id, SessValid etc). | 
 | 289 |  * @sm_work: OTG state machine work. | 
| Pavankumar Kondeti | 87c0104 | 2010-12-07 17:53:58 +0530 | [diff] [blame] | 290 |  * @in_lpm: indicates low power mode (LPM) state. | 
| Manu Gautam | f8c4564 | 2012-08-10 10:20:56 -0700 | [diff] [blame] | 291 |  * @async_int: IRQ line on which ASYNC interrupt arrived in LPM. | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 292 |  * @cur_power: The amount of mA available from downstream port. | 
 | 293 |  * @chg_work: Charger detection work. | 
 | 294 |  * @chg_state: The state of charger detection process. | 
 | 295 |  * @chg_type: The type of charger attached. | 
 | 296 |  * @dcd_retires: The retry count used to track Data contact | 
 | 297 |  *               detection process. | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 298 |  * @wlock: Wake lock struct to prevent system suspend when | 
 | 299 |  *               USB is active. | 
 | 300 |  * @usbdev_nb: The notifier block used to know about the B-device | 
 | 301 |  *             connected. Useful only when ACA_A charger is | 
 | 302 |  *             connected. | 
 | 303 |  * @mA_port: The amount of current drawn by the attached B-device. | 
| Pavankumar Kondeti | aa449e1 | 2011-11-04 11:09:26 +0530 | [diff] [blame] | 304 |  * @id_timer: The timer used for polling ID line to detect ACA states. | 
| Anji jonnala | 7da3f26 | 2011-12-02 17:22:14 -0800 | [diff] [blame] | 305 |  * @xo_handle: TCXO buffer handle | 
| Manu Gautam | cd82e9d | 2011-12-20 14:17:28 +0530 | [diff] [blame] | 306 |  * @bus_perf_client: Bus performance client handle to request BUS bandwidth | 
| Pavankumar Kondeti | 2aec9f3 | 2012-06-13 09:06:03 +0530 | [diff] [blame] | 307 |  * @mhl_enabled: MHL driver registration successful and MHL enabled. | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 308 |  */ | 
 | 309 | struct msm_otg { | 
| Heikki Krogerus | 1d4c929 | 2012-02-13 13:24:09 +0200 | [diff] [blame] | 310 | 	struct usb_phy phy; | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 311 | 	struct msm_otg_platform_data *pdata; | 
 | 312 | 	int irq; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 313 | #ifndef CONFIG_MACH_HTC | 
| Manu Gautam | f8c4564 | 2012-08-10 10:20:56 -0700 | [diff] [blame] | 314 | 	int async_irq; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 315 | #endif | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 316 | 	struct clk *clk; | 
 | 317 | 	struct clk *pclk; | 
 | 318 | 	struct clk *phy_reset_clk; | 
 | 319 | 	struct clk *core_clk; | 
 | 320 | 	void __iomem *regs; | 
 | 321 | #define ID		0 | 
 | 322 | #define B_SESS_VLD	1 | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 323 | #define ID_A		2 | 
 | 324 | #define ID_B		3 | 
 | 325 | #define ID_C		4 | 
| Vijayavardhan Vennapusa | a315203 | 2012-03-05 16:29:30 +0530 | [diff] [blame] | 326 | #define A_BUS_DROP	5 | 
 | 327 | #define A_BUS_REQ	6 | 
 | 328 | #define A_SRP_DET	7 | 
 | 329 | #define A_VBUS_VLD	8 | 
 | 330 | #define B_CONN		9 | 
 | 331 | #define ADP_CHANGE	10 | 
 | 332 | #define POWER_UP	11 | 
 | 333 | #define A_CLR_ERR	12 | 
 | 334 | #define A_BUS_RESUME	13 | 
 | 335 | #define A_BUS_SUSPEND	14 | 
 | 336 | #define A_CONN		15 | 
 | 337 | #define B_BUS_REQ	16 | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 338 | #ifndef CONFIG_MACH_HTC | 
| Pavankumar Kondeti | 2aec9f3 | 2012-06-13 09:06:03 +0530 | [diff] [blame] | 339 | #define MHL	        17 | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 340 | #endif | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 341 | 	unsigned long inputs; | 
 | 342 | 	struct work_struct sm_work; | 
| Jack Pham | 5ca279b | 2012-05-14 18:42:54 -0700 | [diff] [blame] | 343 | 	bool sm_work_pending; | 
 | 344 | 	atomic_t pm_suspended; | 
| Pavankumar Kondeti | 87c0104 | 2010-12-07 17:53:58 +0530 | [diff] [blame] | 345 | 	atomic_t in_lpm; | 
 | 346 | 	int async_int; | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 347 | 	unsigned cur_power; | 
 | 348 | 	struct delayed_work chg_work; | 
| Vijayavardhan Vennapusa | 68d55cf | 2012-06-27 20:06:12 +0530 | [diff] [blame] | 349 | 	struct delayed_work pmic_id_status_work; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 350 | #ifndef CONFIG_MACH_HTC | 
| kibum.lee | ec04044 | 2012-08-22 22:29:46 +0900 | [diff] [blame] | 351 | 	struct delayed_work check_ta_work; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 352 | #endif | 
| Pavankumar Kondeti | d860852 | 2011-05-04 10:19:47 +0530 | [diff] [blame] | 353 | 	enum usb_chg_state chg_state; | 
 | 354 | 	enum usb_chg_type chg_type; | 
| Pavankumar Kondeti | 3950450 | 2013-01-04 12:28:10 +0530 | [diff] [blame] | 355 | 	unsigned dcd_time; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 356 | 	struct wake_lock wlock; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 357 | #ifdef CONFIG_MACH_HTC | 
 | 358 | 	struct wake_lock usb_otg_wlock; | 
 | 359 | 	struct wake_lock cable_detect_wlock; | 
 | 360 | #endif | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 361 | 	struct notifier_block usbdev_nb; | 
 | 362 | 	unsigned mA_port; | 
| Pavankumar Kondeti | aa449e1 | 2011-11-04 11:09:26 +0530 | [diff] [blame] | 363 | 	struct timer_list id_timer; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 364 | 	unsigned long caps; | 
| Stephen Boyd | 30ad10b | 2012-03-01 14:51:04 -0800 | [diff] [blame] | 365 | 	struct msm_xo_voter *xo_handle; | 
| Manu Gautam | cd82e9d | 2011-12-20 14:17:28 +0530 | [diff] [blame] | 366 | 	uint32_t bus_perf_client; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 367 | #ifndef CONFIG_MACH_HTC | 
| Pavankumar Kondeti | 2aec9f3 | 2012-06-13 09:06:03 +0530 | [diff] [blame] | 368 | 	bool mhl_enabled; | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 369 | #endif | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 370 | 	/* | 
 | 371 | 	 * Allowing PHY power collpase turns off the HSUSB 3.3v and 1.8v | 
 | 372 | 	 * analog regulators while going to low power mode. | 
 | 373 | 	 * Currently only 8960(28nm PHY) has the support to allowing PHY | 
 | 374 | 	 * power collapse since it doesn't have leakage currents while | 
 | 375 | 	 * turning off the power rails. | 
 | 376 | 	 */ | 
 | 377 | #define ALLOW_PHY_POWER_COLLAPSE	BIT(0) | 
 | 378 | 	/* | 
 | 379 | 	 * Allow PHY RETENTION mode before turning off the digital | 
 | 380 | 	 * voltage regulator(VDDCX). | 
 | 381 | 	 */ | 
 | 382 | #define ALLOW_PHY_RETENTION		BIT(1) | 
| Amit Blay | 6fa647a | 2012-05-24 14:12:08 +0300 | [diff] [blame] | 383 | 	  /* | 
 | 384 | 	   * Allow putting the core in Low Power mode, when | 
 | 385 | 	   * USB bus is suspended but cable is connected. | 
 | 386 | 	   */ | 
 | 387 | #define ALLOW_LPM_ON_DEV_SUSPEND	    BIT(2) | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 388 | 	unsigned long lpm_flags; | 
 | 389 | #define PHY_PWR_COLLAPSED		BIT(0) | 
 | 390 | #define PHY_RETENTIONED			BIT(1) | 
| Vijayavardhan Vennapusa | bbdd608 | 2012-06-06 14:14:25 +0530 | [diff] [blame] | 391 | #define XO_SHUTDOWN			BIT(2) | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 392 | #ifndef CONFIG_MACH_HTC | 
| Ido Shayevitz | c5c0f57 | 2012-07-31 13:58:45 +0300 | [diff] [blame] | 393 | #define CLOCKS_DOWN			BIT(3) | 
| Flemmard | 77ad321 | 2013-02-12 16:25:42 +0100 | [diff] [blame] | 394 | #endif | 
 | 395 | #ifdef CONFIG_MACH_HTC | 
 | 396 | 	struct work_struct notifier_work; | 
 | 397 | 	enum usb_connect_type connect_type; | 
 | 398 | 	int connect_type_ready; | 
 | 399 | 	struct workqueue_struct *usb_wq; | 
 | 400 | 	struct delayed_work ac_detect_work; | 
 | 401 | 	int ac_detect_count; | 
 | 402 | 	int reset_phy_before_lpm; | 
 | 403 | #endif | 
| Ofir Cohen | 4da266f | 2012-01-03 10:19:29 +0200 | [diff] [blame] | 404 | 	int reset_counter; | 
| Vijayavardhan Vennapusa | a315203 | 2012-03-05 16:29:30 +0530 | [diff] [blame] | 405 | 	unsigned long b_last_se0_sess; | 
 | 406 | 	unsigned long tmouts; | 
 | 407 | 	u8 active_tmout; | 
 | 408 | 	struct hrtimer timer; | 
| Mayank Rana | 248698c | 2012-04-19 00:03:16 +0530 | [diff] [blame] | 409 | 	enum usb_vdd_type vdd_type; | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 410 | }; | 
 | 411 |  | 
| Vijayavardhan Vennapusa | e3316a1 | 2011-10-15 06:05:17 +0530 | [diff] [blame] | 412 | struct msm_hsic_host_platform_data { | 
 | 413 | 	unsigned strobe; | 
 | 414 | 	unsigned data; | 
| Hemant Kumar | e627597 | 2012-02-29 20:06:21 -0800 | [diff] [blame] | 415 | 	struct msm_bus_scale_pdata *bus_scale_table; | 
| Ajay Dudani | c4e40db | 2012-08-20 14:44:40 -0700 | [diff] [blame] | 416 | 	unsigned log2_irq_thresh; | 
| Pavankumar Kondeti | fe2d4d3 | 2012-09-07 15:33:09 +0530 | [diff] [blame] | 417 | 	u32 swfi_latency; | 
| Vijayavardhan Vennapusa | e3316a1 | 2011-10-15 06:05:17 +0530 | [diff] [blame] | 418 | }; | 
 | 419 |  | 
| Manu Gautam | 91223e0 | 2011-11-08 15:27:22 +0530 | [diff] [blame] | 420 | struct msm_usb_host_platform_data { | 
 | 421 | 	unsigned int power_budget; | 
| Vijayavardhan Vennapusa | 4fa1369 | 2012-08-02 14:35:03 +0530 | [diff] [blame] | 422 | 	int pmic_gpio_dp_irq; | 
| Hemant Kumar | 5692535 | 2012-02-13 16:59:52 -0800 | [diff] [blame] | 423 | 	unsigned int dock_connect_irq; | 
| Manu Gautam | 91223e0 | 2011-11-08 15:27:22 +0530 | [diff] [blame] | 424 | }; | 
 | 425 |  | 
| Amit Blay | 9b6e58b | 2012-06-18 13:12:49 +0300 | [diff] [blame] | 426 | /** | 
 | 427 |  * struct msm_hsic_peripheral_platform_data: HSIC peripheral | 
 | 428 |  * platform data. | 
 | 429 |  * @core_clk_always_on_workaround: Don't disable core_clk when | 
 | 430 |  *                                 HSIC enters LPM. | 
 | 431 |  */ | 
| Amit Blay | 4d57d36 | 2012-04-28 11:00:21 +0300 | [diff] [blame] | 432 | struct msm_hsic_peripheral_platform_data { | 
| Amit Blay | 9b6e58b | 2012-06-18 13:12:49 +0300 | [diff] [blame] | 433 | 	bool core_clk_always_on_workaround; | 
| Amit Blay | 4d57d36 | 2012-04-28 11:00:21 +0300 | [diff] [blame] | 434 | }; | 
 | 435 |  | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 436 | /** | 
 | 437 |  * struct usb_bam_pipe_connect: pipe connection information | 
 | 438 |  * between USB/HSIC BAM and another BAM. USB/HSIC BAM can be | 
 | 439 |  * either src BAM or dst BAM | 
 | 440 |  * @src_phy_addr: src bam physical address. | 
 | 441 |  * @src_pipe_index: src bam pipe index. | 
 | 442 |  * @dst_phy_addr: dst bam physical address. | 
 | 443 |  * @dst_pipe_index: dst bam pipe index. | 
 | 444 |  * @data_fifo_base_offset: data fifo offset. | 
 | 445 |  * @data_fifo_size: data fifo size. | 
 | 446 |  * @desc_fifo_base_offset: descriptor fifo offset. | 
 | 447 |  * @desc_fifo_size: descriptor fifo size. | 
 | 448 |  */ | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 449 | struct usb_bam_pipe_connect { | 
 | 450 | 	u32 src_phy_addr; | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 451 | 	u32 src_pipe_index; | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 452 | 	u32 dst_phy_addr; | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 453 | 	u32 dst_pipe_index; | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 454 | 	u32 data_fifo_base_offset; | 
 | 455 | 	u32 data_fifo_size; | 
 | 456 | 	u32 desc_fifo_base_offset; | 
 | 457 | 	u32 desc_fifo_size; | 
 | 458 | }; | 
 | 459 |  | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 460 | /** | 
 | 461 |  * struct msm_usb_bam_platform_data: pipe connection information | 
 | 462 |  * between USB/HSIC BAM and another BAM. USB/HSIC BAM can be | 
 | 463 |  * either src BAM or dst BAM | 
 | 464 |  * @connections: holds all pipe connections data. | 
 | 465 |  * @usb_active_bam: set USB or HSIC as the active BAM. | 
 | 466 |  * @usb_bam_num_pipes: max number of pipes to use. | 
 | 467 |  * @active_conn_num: number of active pipe connections. | 
 | 468 |  * @usb_base_address: BAM physical address. | 
 | 469 |  */ | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 470 | struct msm_usb_bam_platform_data { | 
 | 471 | 	struct usb_bam_pipe_connect *connections; | 
| Ofir Cohen | 010009b | 2012-01-26 16:49:17 +0200 | [diff] [blame] | 472 | 	int usb_active_bam; | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 473 | 	int usb_bam_num_pipes; | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 474 | 	u32 total_bam_num; | 
 | 475 | 	u32 usb_base_address; | 
| Ofir Cohen | c7827e4 | 2011-12-13 20:10:01 +0200 | [diff] [blame] | 476 | }; | 
| Ofir Cohen | 010009b | 2012-01-26 16:49:17 +0200 | [diff] [blame] | 477 |  | 
 | 478 | enum usb_bam { | 
 | 479 | 	HSUSB_BAM = 0, | 
 | 480 | 	HSIC_BAM, | 
 | 481 | }; | 
| Ido Shayevitz | d1cb16c | 2012-03-28 18:57:47 +0200 | [diff] [blame] | 482 |  | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 483 | #ifdef CONFIG_USB_DWC3_MSM | 
| Ido Shayevitz | 9fb8345 | 2012-04-01 17:45:58 +0300 | [diff] [blame] | 484 | int msm_ep_config(struct usb_ep *ep); | 
 | 485 | int msm_ep_unconfig(struct usb_ep *ep); | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 486 | int msm_data_fifo_config(struct usb_ep *ep, u32 addr, u32 size, | 
 | 487 | 	u8 dst_pipe_idx); | 
| Ido Shayevitz | 9fb8345 | 2012-04-01 17:45:58 +0300 | [diff] [blame] | 488 |  | 
| Shimrit Malichi | 255b534 | 2012-08-02 21:01:43 +0300 | [diff] [blame] | 489 | #else | 
 | 490 | static inline int msm_data_fifo_config(struct usb_ep *ep, u32 addr, u32 size, | 
 | 491 | 	u8 dst_pipe_idx) | 
 | 492 | { | 
 | 493 | 	return -ENODEV; | 
 | 494 | } | 
 | 495 |  | 
 | 496 | static inline int msm_ep_config(struct usb_ep *ep) | 
 | 497 | { | 
 | 498 | 	return -ENODEV; | 
 | 499 | } | 
 | 500 |  | 
 | 501 | static inline int msm_ep_unconfig(struct usb_ep *ep) | 
 | 502 | { | 
 | 503 | 	return -ENODEV; | 
 | 504 | } | 
 | 505 | #endif | 
| Pavankumar Kondeti | e0c201f | 2010-12-07 17:53:55 +0530 | [diff] [blame] | 506 | #endif |