blob: c5943c93ba5b421b5cc3901ad30cd2d6bad8c025 [file] [log] [blame]
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +05301/* linux/include/asm-arm/arch-msm/hsusb.h
2 *
3 * Copyright (C) 2008 Google, Inc.
4 * Author: Brian Swetland <swetland@google.com>
Manu Gautam355270a2012-12-21 16:52:50 +05305 * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +05306 *
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 Shayevitz9fb83452012-04-01 17:45:58 +030022#include <linux/usb/ch9.h>
23#include <linux/usb/gadget.h>
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +053024#include <linux/usb/otg.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070025#include <linux/wakelock.h>
Steve Mucklef132c6c2012-06-06 18:30:57 -070026#include <linux/pm_qos.h>
Ido Shayevitz5a6178b2012-06-10 16:31:13 +030027#include <linux/hrtimer.h>
David Keitel272ce522012-08-17 16:25:24 -070028#include <linux/power_supply.h>
Ido Shayevitzd1cb16c2012-03-28 18:57:47 +020029/*
30 * The following are bit fields describing the usb_request.udc_priv word.
31 * These bit fields are set by function drivers that wish to queue
32 * usb_requests with sps/bam parameters.
33 */
34#define MSM_PIPE_ID_MASK (0x1F)
35#define MSM_TX_PIPE_ID_OFS (16)
36#define MSM_SPS_MODE BIT(5)
37#define MSM_IS_FINITE_TRANSFER BIT(6)
38#define MSM_PRODUCER BIT(7)
39#define MSM_DISABLE_WB BIT(8)
40#define MSM_ETD_IOC BIT(9)
41#define MSM_INTERNAL_MEM BIT(10)
42#define MSM_VENDOR_ID BIT(16)
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +053043
44/**
45 * Supported USB modes
46 *
47 * USB_PERIPHERAL Only peripheral mode is supported.
48 * USB_HOST Only host mode is supported.
49 * USB_OTG OTG mode is supported.
50 *
51 */
52enum usb_mode_type {
53 USB_NONE = 0,
54 USB_PERIPHERAL,
55 USB_HOST,
56 USB_OTG,
57};
58
59/**
60 * OTG control
61 *
62 * OTG_NO_CONTROL Id/VBUS notifications not required. Useful in host
63 * only configuration.
64 * OTG_PHY_CONTROL Id/VBUS notifications comes form USB PHY.
65 * OTG_PMIC_CONTROL Id/VBUS notifications comes from PMIC hardware.
66 * OTG_USER_CONTROL Id/VBUS notifcations comes from User via sysfs.
67 *
68 */
69enum otg_control_type {
70 OTG_NO_CONTROL = 0,
71 OTG_PHY_CONTROL,
72 OTG_PMIC_CONTROL,
73 OTG_USER_CONTROL,
74};
75
76/**
Pavankumar Kondetid8608522011-05-04 10:19:47 +053077 * PHY used in
78 *
79 * INVALID_PHY Unsupported PHY
80 * CI_45NM_INTEGRATED_PHY Chipidea 45nm integrated PHY
81 * SNPS_28NM_INTEGRATED_PHY Synopsis 28nm integrated PHY
82 *
83 */
84enum msm_usb_phy_type {
85 INVALID_PHY = 0,
86 CI_45NM_INTEGRATED_PHY,
87 SNPS_28NM_INTEGRATED_PHY,
88};
89
90#define IDEV_CHG_MAX 1500
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070091#define IDEV_CHG_MIN 500
Pavankumar Kondetid8608522011-05-04 10:19:47 +053092#define IUNIT 100
93
Pavankumar Kondetiaa449e12011-11-04 11:09:26 +053094#define IDEV_ACA_CHG_MAX 1500
95#define IDEV_ACA_CHG_LIMIT 500
96
Pavankumar Kondetid8608522011-05-04 10:19:47 +053097/**
98 * Different states involved in USB charger detection.
99 *
100 * USB_CHG_STATE_UNDEFINED USB charger is not connected or detection
101 * process is not yet started.
102 * USB_CHG_STATE_WAIT_FOR_DCD Waiting for Data pins contact.
103 * USB_CHG_STATE_DCD_DONE Data pin contact is detected.
104 * USB_CHG_STATE_PRIMARY_DONE Primary detection is completed (Detects
105 * between SDP and DCP/CDP).
106 * USB_CHG_STATE_SECONDARY_DONE Secondary detection is completed (Detects
107 * between DCP and CDP).
108 * USB_CHG_STATE_DETECTED USB charger type is determined.
109 *
110 */
111enum usb_chg_state {
112 USB_CHG_STATE_UNDEFINED = 0,
113 USB_CHG_STATE_WAIT_FOR_DCD,
114 USB_CHG_STATE_DCD_DONE,
115 USB_CHG_STATE_PRIMARY_DONE,
116 USB_CHG_STATE_SECONDARY_DONE,
117 USB_CHG_STATE_DETECTED,
118};
119
120/**
121 * USB charger types
122 *
123 * USB_INVALID_CHARGER Invalid USB charger.
124 * USB_SDP_CHARGER Standard downstream port. Refers to a downstream port
125 * on USB2.0 compliant host/hub.
126 * USB_DCP_CHARGER Dedicated charger port (AC charger/ Wall charger).
127 * USB_CDP_CHARGER Charging downstream port. Enumeration can happen and
128 * IDEV_CHG_MAX can be drawn irrespective of USB state.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700129 * USB_ACA_A_CHARGER B-device is connected on accessory port with charger
130 * connected on charging port. This configuration allows
131 * charging in host mode.
132 * USB_ACA_B_CHARGER No device (or A-device without VBUS) is connected on
133 * accessory port with charger connected on charging port.
134 * USB_ACA_C_CHARGER A-device (with VBUS) is connected on
135 * accessory port with charger connected on charging port.
136 * USB_ACA_DOCK_CHARGER A docking station that has one upstream port and one
137 * or more downstream ports. Capable of supplying
138 * IDEV_CHG_MAX irrespective of devices connected on
139 * accessory ports.
Pavankumar Kondeti9ec21d32012-05-07 15:50:23 +0530140 * USB_PROPRIETARY_CHARGER A proprietary charger pull DP and DM to specific
141 * voltages between 2.0-3.3v for identification.
142 *
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530143 */
144enum usb_chg_type {
145 USB_INVALID_CHARGER = 0,
146 USB_SDP_CHARGER,
147 USB_DCP_CHARGER,
148 USB_CDP_CHARGER,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700149 USB_ACA_A_CHARGER,
150 USB_ACA_B_CHARGER,
151 USB_ACA_C_CHARGER,
152 USB_ACA_DOCK_CHARGER,
Pavankumar Kondeti9ec21d32012-05-07 15:50:23 +0530153 USB_PROPRIETARY_CHARGER,
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530154};
155
156/**
Mayank Rana248698c2012-04-19 00:03:16 +0530157 * Used different VDDCX voltage voting mechnism
158 * VDDCX_CORNER Vote for VDDCX Corner voltage
159 * VDDCX Vote for VDDCX Absolute voltage
160 */
161enum usb_vdd_type {
162 VDDCX_CORNER = 0,
163 VDDCX,
164 VDD_TYPE_MAX,
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530165};
166
167/**
Amit Blayd6ea6102012-06-07 16:26:24 +0300168 * Used different VDDCX voltage values
169 */
170enum usb_vdd_value {
171 VDD_NONE = 0,
172 VDD_MIN,
173 VDD_MAX,
174 VDD_VAL_MAX,
175};
176
177/**
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530178 * struct msm_otg_platform_data - platform device data
Pavankumar Kondetidfb21302011-03-04 22:45:02 +0530179 * for msm_otg driver.
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530180 * @phy_init_seq: PHY configuration sequence. val, reg pairs
181 * terminated by -1.
Mayank Rana8549e632012-01-23 12:49:54 +0530182 * @vbus_power: VBUS power on/off routine.It should return result
183 * as success(zero value) or failure(non-zero value).
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530184 * @power_budget: VBUS power budget in mA (0 will be treated as 500mA).
185 * @mode: Supported mode (OTG/peripheral/host).
186 * @otg_control: OTG switch controlled by user/Id pin
187 * @default_mode: Default operational mode. Applicable only if
188 * OTG switch is controller by user.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700189 * @pmic_id_irq: IRQ number assigned for PMIC USB ID line.
Jack Pham87f202f2012-08-06 00:24:22 -0700190 * @mpm_otgsessvld_int: MPM wakeup pin assigned for OTG SESSVLD
191 * interrupt. Used when .otg_control == OTG_PHY_CONTROL.
Vijayavardhan Vennapusafc464f02011-11-04 21:54:00 +0530192 * @mhl_enable: indicates MHL connector or not.
Ofir Cohen4da266f2012-01-03 10:19:29 +0200193 * @disable_reset_on_disconnect: perform USB PHY and LINK reset
194 * on USB cable disconnection.
Manu Gautam0ddbd922012-09-21 17:17:38 +0530195 * @pnoc_errata_fix: workaround needed for PNOC hardware bug that
196 * affects USB performance.
Amit Blay6fa647a2012-05-24 14:12:08 +0300197 * @enable_lpm_on_suspend: Enable the USB core to go into Low
198 * Power Mode, when USB bus is suspended but cable
199 * is connected.
Amit Blay9b6e58b2012-06-18 13:12:49 +0300200 * @core_clk_always_on_workaround: Don't disable core_clk when
201 * USB enters LPM.
Amit Blayd6f38282012-10-29 13:13:46 +0200202 * @delay_lpm_on_disconnect: Use a delay before entering LPM
203 * upon USB cable disconnection.
Manu Gautamcd82e9d2011-12-20 14:17:28 +0530204 * @bus_scale_table: parameters for bus bandwidth requirements
Pavankumar Kondeti2aec9f32012-06-13 09:06:03 +0530205 * @mhl_dev_name: MHL device name used to register with MHL driver.
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530206 */
207struct msm_otg_platform_data {
208 int *phy_init_seq;
Mayank Rana8549e632012-01-23 12:49:54 +0530209 int (*vbus_power)(bool on);
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530210 unsigned power_budget;
211 enum usb_mode_type mode;
212 enum otg_control_type otg_control;
213 enum usb_mode_type default_mode;
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530214 enum msm_usb_phy_type phy_type;
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530215 void (*setup_gpio)(enum usb_otg_state state);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700216 int pmic_id_irq;
Jack Pham87f202f2012-08-06 00:24:22 -0700217 unsigned int mpm_otgsessvld_int;
Vijayavardhan Vennapusafc464f02011-11-04 21:54:00 +0530218 bool mhl_enable;
Ofir Cohen4da266f2012-01-03 10:19:29 +0200219 bool disable_reset_on_disconnect;
Manu Gautam0ddbd922012-09-21 17:17:38 +0530220 bool pnoc_errata_fix;
Amit Blay6fa647a2012-05-24 14:12:08 +0300221 bool enable_lpm_on_dev_suspend;
Amit Blay9b6e58b2012-06-18 13:12:49 +0300222 bool core_clk_always_on_workaround;
Amit Blayd6f38282012-10-29 13:13:46 +0200223 bool delay_lpm_on_disconnect;
Vamsi Krishna1a1684b2013-03-02 16:14:52 -0800224 bool dp_manual_pullup;
Manu Gautamcd82e9d2011-12-20 14:17:28 +0530225 struct msm_bus_scale_pdata *bus_scale_table;
Pavankumar Kondeti2aec9f32012-06-13 09:06:03 +0530226 const char *mhl_dev_name;
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530227};
228
Vamsi Krishna1a1684b2013-03-02 16:14:52 -0800229/* phy related flags */
230#define ENABLE_DP_MANUAL_PULLUP BIT(0)
231
Vijayavardhan Vennapusaa3152032012-03-05 16:29:30 +0530232/* Timeout (in msec) values (min - max) associated with OTG timers */
233
234#define TA_WAIT_VRISE 100 /* ( - 100) */
235#define TA_WAIT_VFALL 500 /* ( - 1000) */
236
237/*
238 * This option is set for embedded hosts or OTG devices in which leakage
239 * currents are very minimal.
240 */
241#ifdef CONFIG_USB_OTG
242#define TA_WAIT_BCON 30000 /* (1100 - 30000) */
243#else
244#define TA_WAIT_BCON -1
245#endif
246
247#define TA_AIDL_BDIS 500 /* (200 - ) */
248#define TA_BIDL_ADIS 155 /* (155 - 200) */
249#define TB_SRP_FAIL 6000 /* (5000 - 6000) */
250#define TB_ASE0_BRST 200 /* (155 - ) */
251
252/* TB_SSEND_SRP and TB_SE0_SRP are combined */
253#define TB_SRP_INIT 2000 /* (1500 - ) */
254
255#define TA_TST_MAINT 10100 /* (9900 - 10100) */
256#define TB_TST_SRP 3000 /* ( - 5000) */
257#define TB_TST_CONFIG 300
258
259/* Timeout variables */
260
261#define A_WAIT_VRISE 0
262#define A_WAIT_VFALL 1
263#define A_WAIT_BCON 2
264#define A_AIDL_BDIS 3
265#define A_BIDL_ADIS 4
266#define B_SRP_FAIL 5
267#define B_ASE0_BRST 6
268#define A_TST_MAINT 7
269#define B_TST_SRP 8
270#define B_TST_CONFIG 9
271
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530272/**
273 * struct msm_otg: OTG driver data. Shared by HCD and DCD.
274 * @otg: USB OTG Transceiver structure.
275 * @pdata: otg device platform data.
276 * @irq: IRQ number assigned for HSUSB controller.
Manu Gautamf8c45642012-08-10 10:20:56 -0700277 * @async_irq: IRQ number used by some controllers during low power state
Manu Gautam5143b252012-01-05 19:25:23 -0800278 * @clk: clock struct of alt_core_clk.
279 * @pclk: clock struct of iface_clk.
280 * @phy_reset_clk: clock struct of phy_clk.
281 * @core_clk: clock struct of core_bus_clk.
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530282 * @regs: ioremapped register base address.
283 * @inputs: OTG state machine inputs(Id, SessValid etc).
284 * @sm_work: OTG state machine work.
Pavankumar Kondeti87c01042010-12-07 17:53:58 +0530285 * @in_lpm: indicates low power mode (LPM) state.
Manu Gautamf8c45642012-08-10 10:20:56 -0700286 * @async_int: IRQ line on which ASYNC interrupt arrived in LPM.
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530287 * @cur_power: The amount of mA available from downstream port.
288 * @chg_work: Charger detection work.
289 * @chg_state: The state of charger detection process.
290 * @chg_type: The type of charger attached.
291 * @dcd_retires: The retry count used to track Data contact
292 * detection process.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700293 * @wlock: Wake lock struct to prevent system suspend when
294 * USB is active.
295 * @usbdev_nb: The notifier block used to know about the B-device
296 * connected. Useful only when ACA_A charger is
297 * connected.
298 * @mA_port: The amount of current drawn by the attached B-device.
Pavankumar Kondetiaa449e12011-11-04 11:09:26 +0530299 * @id_timer: The timer used for polling ID line to detect ACA states.
Anji jonnala7da3f262011-12-02 17:22:14 -0800300 * @xo_handle: TCXO buffer handle
Manu Gautamcd82e9d2011-12-20 14:17:28 +0530301 * @bus_perf_client: Bus performance client handle to request BUS bandwidth
Pavankumar Kondeti2aec9f32012-06-13 09:06:03 +0530302 * @mhl_enabled: MHL driver registration successful and MHL enabled.
Pavankumar Kondeti458d8792012-09-28 14:45:18 +0530303 * @chg_check_timer: The timer used to implement the workaround to detect
304 * very slow plug in of wall charger.
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530305 */
306struct msm_otg {
Heikki Krogerus1d4c9292012-02-13 13:24:09 +0200307 struct usb_phy phy;
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530308 struct msm_otg_platform_data *pdata;
309 int irq;
Manu Gautamf8c45642012-08-10 10:20:56 -0700310 int async_irq;
Vijayavardhan Vennapusa0cab6172013-02-20 19:51:15 +0530311 struct clk *xo_clk;
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530312 struct clk *clk;
313 struct clk *pclk;
314 struct clk *phy_reset_clk;
315 struct clk *core_clk;
316 void __iomem *regs;
317#define ID 0
318#define B_SESS_VLD 1
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700319#define ID_A 2
320#define ID_B 3
321#define ID_C 4
Vijayavardhan Vennapusaa3152032012-03-05 16:29:30 +0530322#define A_BUS_DROP 5
323#define A_BUS_REQ 6
324#define A_SRP_DET 7
325#define A_VBUS_VLD 8
326#define B_CONN 9
327#define ADP_CHANGE 10
328#define POWER_UP 11
329#define A_CLR_ERR 12
330#define A_BUS_RESUME 13
331#define A_BUS_SUSPEND 14
332#define A_CONN 15
333#define B_BUS_REQ 16
Pavankumar Kondeti2aec9f32012-06-13 09:06:03 +0530334#define MHL 17
Pavankumar Kondeti458d8792012-09-28 14:45:18 +0530335#define B_FALSE_SDP 18
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530336 unsigned long inputs;
337 struct work_struct sm_work;
Jack Pham5ca279b2012-05-14 18:42:54 -0700338 bool sm_work_pending;
339 atomic_t pm_suspended;
Pavankumar Kondeti87c01042010-12-07 17:53:58 +0530340 atomic_t in_lpm;
341 int async_int;
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530342 unsigned cur_power;
343 struct delayed_work chg_work;
Vijayavardhan Vennapusa68d55cf2012-06-27 20:06:12 +0530344 struct delayed_work pmic_id_status_work;
Amit Blayd0fe07b2012-09-05 16:42:09 +0300345 struct delayed_work suspend_work;
Pavankumar Kondetid8608522011-05-04 10:19:47 +0530346 enum usb_chg_state chg_state;
347 enum usb_chg_type chg_type;
Pavankumar Kondetiebb4a2d2013-01-04 12:28:10 +0530348 unsigned dcd_time;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700349 struct wake_lock wlock;
350 struct notifier_block usbdev_nb;
351 unsigned mA_port;
Pavankumar Kondetiaa449e12011-11-04 11:09:26 +0530352 struct timer_list id_timer;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700353 unsigned long caps;
Stephen Boyd30ad10b2012-03-01 14:51:04 -0800354 struct msm_xo_voter *xo_handle;
Manu Gautamcd82e9d2011-12-20 14:17:28 +0530355 uint32_t bus_perf_client;
Pavankumar Kondeti2aec9f32012-06-13 09:06:03 +0530356 bool mhl_enabled;
Pavankumar Kondeti458d8792012-09-28 14:45:18 +0530357 struct timer_list chg_check_timer;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700358 /*
359 * Allowing PHY power collpase turns off the HSUSB 3.3v and 1.8v
360 * analog regulators while going to low power mode.
Amit Blay81801aa2012-09-19 12:08:12 +0200361 * Currently only 28nm PHY has the support to allowing PHY
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700362 * power collapse since it doesn't have leakage currents while
363 * turning off the power rails.
364 */
365#define ALLOW_PHY_POWER_COLLAPSE BIT(0)
366 /*
367 * Allow PHY RETENTION mode before turning off the digital
368 * voltage regulator(VDDCX).
369 */
370#define ALLOW_PHY_RETENTION BIT(1)
Amit Blay6fa647a2012-05-24 14:12:08 +0300371 /*
372 * Allow putting the core in Low Power mode, when
373 * USB bus is suspended but cable is connected.
374 */
Amit Blay81801aa2012-09-19 12:08:12 +0200375#define ALLOW_LPM_ON_DEV_SUSPEND BIT(2)
376 /*
377 * Allowing PHY regulators LPM puts the HSUSB 3.3v and 1.8v
378 * analog regulators into LPM while going to USB low power mode.
379 */
380#define ALLOW_PHY_REGULATORS_LPM BIT(3)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700381 unsigned long lpm_flags;
382#define PHY_PWR_COLLAPSED BIT(0)
383#define PHY_RETENTIONED BIT(1)
Vijayavardhan Vennapusabbdd6082012-06-06 14:14:25 +0530384#define XO_SHUTDOWN BIT(2)
Ido Shayevitzc5c0f572012-07-31 13:58:45 +0300385#define CLOCKS_DOWN BIT(3)
Amit Blay81801aa2012-09-19 12:08:12 +0200386#define PHY_REGULATORS_LPM BIT(4)
Ofir Cohen4da266f2012-01-03 10:19:29 +0200387 int reset_counter;
Vijayavardhan Vennapusaa3152032012-03-05 16:29:30 +0530388 unsigned long b_last_se0_sess;
389 unsigned long tmouts;
390 u8 active_tmout;
391 struct hrtimer timer;
Mayank Rana248698c2012-04-19 00:03:16 +0530392 enum usb_vdd_type vdd_type;
David Keitel272ce522012-08-17 16:25:24 -0700393 struct power_supply usb_psy;
394 unsigned int online;
395 unsigned int host_mode;
396 unsigned int current_max;
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530397};
398
Vijayavardhan Vennapusae3316a12011-10-15 06:05:17 +0530399struct msm_hsic_host_platform_data {
400 unsigned strobe;
401 unsigned data;
Manu Gautam863b74132012-11-21 14:30:04 +0530402 bool ignore_cal_pad_config;
403 int strobe_pad_offset;
404 int data_pad_offset;
405
Hemant Kumare6275972012-02-29 20:06:21 -0800406 struct msm_bus_scale_pdata *bus_scale_table;
Hemant Kumar30d361c2012-08-20 14:44:40 -0700407 unsigned log2_irq_thresh;
Hemant Kumarbc8bdf62012-10-17 12:29:51 -0700408
409 /*swfi latency is required while driving resume on to the bus */
Pavankumar Kondeti4f5dc3b2012-09-07 15:33:09 +0530410 u32 swfi_latency;
Hemant Kumarbc8bdf62012-10-17 12:29:51 -0700411
412 /*standalone latency is required when HSCI is active*/
413 u32 standalone_latency;
Shimrit Malichi36a0c852013-03-10 11:39:10 +0200414 bool pool_64_bit_align;
Shimrit Malichi82d7cbc2013-03-12 15:36:54 +0200415 bool enable_hbm;
Vijayavardhan Vennapusae3316a12011-10-15 06:05:17 +0530416};
417
Manu Gautam91223e02011-11-08 15:27:22 +0530418struct msm_usb_host_platform_data {
419 unsigned int power_budget;
Vijayavardhan Vennapusa4fa13692012-08-02 14:35:03 +0530420 int pmic_gpio_dp_irq;
Hemant Kumar56925352012-02-13 16:59:52 -0800421 unsigned int dock_connect_irq;
Vijayavardhan Vennapusa1f5da0b2013-01-08 20:03:57 +0530422 bool use_sec_phy;
Manu Gautam91223e02011-11-08 15:27:22 +0530423};
424
Amit Blay9b6e58b2012-06-18 13:12:49 +0300425/**
426 * struct msm_hsic_peripheral_platform_data: HSIC peripheral
427 * platform data.
428 * @core_clk_always_on_workaround: Don't disable core_clk when
429 * HSIC enters LPM.
430 */
Amit Blay4d57d362012-04-28 11:00:21 +0300431struct msm_hsic_peripheral_platform_data {
Amit Blay9b6e58b2012-06-18 13:12:49 +0300432 bool core_clk_always_on_workaround;
Amit Blay4d57d362012-04-28 11:00:21 +0300433};
434
Manu Gautam6afd5872012-07-25 09:16:55 +0530435enum usb_pipe_mem_type {
436 SPS_PIPE_MEM = 0, /* Default, SPS dedicated pipe memory */
437 USB_PRIVATE_MEM, /* USB's private memory */
438 SYSTEM_MEM, /* System RAM, requires allocation */
439};
440
Shimrit Malichi255b5342012-08-02 21:01:43 +0300441/**
442 * struct usb_bam_pipe_connect: pipe connection information
443 * between USB/HSIC BAM and another BAM. USB/HSIC BAM can be
444 * either src BAM or dst BAM
445 * @src_phy_addr: src bam physical address.
446 * @src_pipe_index: src bam pipe index.
447 * @dst_phy_addr: dst bam physical address.
448 * @dst_pipe_index: dst bam pipe index.
Manu Gautam6afd5872012-07-25 09:16:55 +0530449 * @mem_type: type of memory used for BAM FIFOs
Shimrit Malichi255b5342012-08-02 21:01:43 +0300450 * @data_fifo_base_offset: data fifo offset.
451 * @data_fifo_size: data fifo size.
452 * @desc_fifo_base_offset: descriptor fifo offset.
453 * @desc_fifo_size: descriptor fifo size.
454 */
Ofir Cohenc7827e42011-12-13 20:10:01 +0200455struct usb_bam_pipe_connect {
456 u32 src_phy_addr;
Shimrit Malichi255b5342012-08-02 21:01:43 +0300457 u32 src_pipe_index;
Ofir Cohenc7827e42011-12-13 20:10:01 +0200458 u32 dst_phy_addr;
Shimrit Malichi255b5342012-08-02 21:01:43 +0300459 u32 dst_pipe_index;
Manu Gautam6afd5872012-07-25 09:16:55 +0530460 enum usb_pipe_mem_type mem_type;
Ofir Cohenc7827e42011-12-13 20:10:01 +0200461 u32 data_fifo_base_offset;
462 u32 data_fifo_size;
463 u32 desc_fifo_base_offset;
464 u32 desc_fifo_size;
465};
466
Manu Gautam355270a2012-12-21 16:52:50 +0530467enum usb_bam {
468 SSUSB_BAM = 0,
469 HSUSB_BAM,
470 HSIC_BAM,
471 MAX_BAMS,
472};
473
Shimrit Malichi255b5342012-08-02 21:01:43 +0300474/**
475 * struct msm_usb_bam_platform_data: pipe connection information
476 * between USB/HSIC BAM and another BAM. USB/HSIC BAM can be
477 * either src BAM or dst BAM
478 * @connections: holds all pipe connections data.
479 * @usb_active_bam: set USB or HSIC as the active BAM.
480 * @usb_bam_num_pipes: max number of pipes to use.
481 * @active_conn_num: number of active pipe connections.
482 * @usb_base_address: BAM physical address.
Manu Gautamd21e2282012-08-23 13:38:50 -0700483 * @ignore_core_reset_ack: BAM can ignore ACK from USB core during PIPE RESET
repo sync985819e2013-01-16 19:37:05 +0200484 * @disable_clk_gating: Disable clock gating
Shimrit Malichi255b5342012-08-02 21:01:43 +0300485 */
Ofir Cohenc7827e42011-12-13 20:10:01 +0200486struct msm_usb_bam_platform_data {
487 struct usb_bam_pipe_connect *connections;
Ofir Cohen010009b2012-01-26 16:49:17 +0200488 int usb_active_bam;
Ofir Cohenc7827e42011-12-13 20:10:01 +0200489 int usb_bam_num_pipes;
Shimrit Malichi255b5342012-08-02 21:01:43 +0300490 u32 total_bam_num;
491 u32 usb_base_address;
Manu Gautamd21e2282012-08-23 13:38:50 -0700492 bool ignore_core_reset_ack;
Manu Gautam355270a2012-12-21 16:52:50 +0530493 bool reset_on_connect[MAX_BAMS];
repo sync985819e2013-01-16 19:37:05 +0200494 bool disable_clk_gating;
Ofir Cohen010009b2012-01-26 16:49:17 +0200495};
Ido Shayevitzd1cb16c2012-03-28 18:57:47 +0200496
Jack Phamfadd6432012-12-07 19:03:41 -0800497/**
498 * struct usb_ext_notification: event notification structure
499 * @notify: pointer to client function to call when ID event is detected.
500 * The last parameter is provided by driver to be called back when
501 * external client indicates it is done using the USB. This function
502 * should return 0 if handled successfully, otherise an error code.
503 * @ctxt: client-specific context pointer
504 *
505 * This structure should be used by clients wishing to register (via
506 * msm_register_usb_ext_notification) for event notification whenever a USB
507 * cable is plugged in and ID pin status changes. Clients must provide a
508 * callback function pointer. If this callback returns 0, the USB driver will
509 * assume the client is "taking over" the connection, and will relinquish any
510 * further processing until its callback (passed via the third parameter) is
511 * called with the online parameter set to false.
512 */
513struct usb_ext_notification {
514 int (*notify)(void *, int, void (*)(int online));
515 void *ctxt;
516};
517
Amit Blay1572b492012-11-27 16:45:32 +0200518#ifdef CONFIG_USB_CI13XXX_MSM
519void msm_hw_bam_disable(bool bam_disable);
520
521#else
522static inline void msm_hw_bam_disable(bool bam_disable)
523{
524}
525#endif
526
Shimrit Malichi255b5342012-08-02 21:01:43 +0300527#ifdef CONFIG_USB_DWC3_MSM
Ido Shayevitz9fb83452012-04-01 17:45:58 +0300528int msm_ep_config(struct usb_ep *ep);
529int msm_ep_unconfig(struct usb_ep *ep);
Shimrit Malichi255b5342012-08-02 21:01:43 +0300530int msm_data_fifo_config(struct usb_ep *ep, u32 addr, u32 size,
531 u8 dst_pipe_idx);
Ido Shayevitz9fb83452012-04-01 17:45:58 +0300532
Manu Gautam6eb13e32013-02-01 15:19:15 +0530533void msm_dwc3_restart_usb_session(void);
Jack Phamfadd6432012-12-07 19:03:41 -0800534
Manu Gautam6eb13e32013-02-01 15:19:15 +0530535int msm_register_usb_ext_notification(struct usb_ext_notification *info);
Shimrit Malichi255b5342012-08-02 21:01:43 +0300536#else
537static inline int msm_data_fifo_config(struct usb_ep *ep, u32 addr, u32 size,
538 u8 dst_pipe_idx)
539{
540 return -ENODEV;
541}
542
543static inline int msm_ep_config(struct usb_ep *ep)
544{
545 return -ENODEV;
546}
547
548static inline int msm_ep_unconfig(struct usb_ep *ep)
549{
550 return -ENODEV;
551}
Jack Phamfadd6432012-12-07 19:03:41 -0800552
Manu Gautam6eb13e32013-02-01 15:19:15 +0530553static inline void msm_dwc3_restart_usb_session(void)
554{
555 return;
556}
557
Jack Phamfadd6432012-12-07 19:03:41 -0800558static inline int msm_register_usb_ext_notification(
559 struct usb_ext_notification *info)
560{
561 return -ENODEV;
562}
Shimrit Malichi255b5342012-08-02 21:01:43 +0300563#endif
Pavankumar Kondetie0c201f2010-12-07 17:53:55 +0530564#endif