blob: dfa477622ef36b8849a44946c627d3414b5696f5 [file] [log] [blame]
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -07001/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
Joonwoo Park8ef69192014-06-09 16:54:15 -07002
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation. nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <platform/iomap.h>
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070030#include <qusb2_phy.h>
Joonwoo Park8ef69192014-06-09 16:54:15 -070031#include <reg.h>
32#include <bits.h>
33#include <debug.h>
Veera Sundaram Sankaran00181512014-12-09 11:23:39 -080034#include <qtimer.h>
Joonwoo Park8ef69192014-06-09 16:54:15 -070035
Channagoud Kadabi12b96932014-09-23 15:18:11 -070036__WEAK int platform_is_msm8994()
37{
38 return 0;
39}
40
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070041__WEAK int platform_is_msm8996()
42{
43 return 0;
44}
45
Joonwoo Park8ef69192014-06-09 16:54:15 -070046void qusb2_phy_reset(void)
47{
48 uint32_t val;
49
50 /* Block Reset */
51 val = readl(GCC_QUSB2_PHY_BCR) | BIT(0);
52 writel(val, GCC_QUSB2_PHY_BCR);
53 udelay(10);
54 writel(val & ~BIT(0), GCC_QUSB2_PHY_BCR);
55
Tanya Finkele7aa4272014-08-08 23:41:34 +030056 /* set CLAMP_N_EN and stay with disabled USB PHY */
57 writel(0x23, QUSB2PHY_PORT_POWERDOWN);
58
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070059 if (platform_is_msm8996())
60 {
61 writel(0xF8, QUSB2PHY_PORT_TUNE1);
62 writel(0x83, QUSB2PHY_PORT_TUNE2);
63 writel(0x93, QUSB2PHY_PORT_TUNE3);
64 writel(0xC0, QUSB2PHY_PORT_TUNE4);
65 writel(0x30, QUSB2PHY_PLL_TUNE);
66 writel(0x79, QUSB2PHY_PLL_USER_CTL1);
67 writel(0x21, QUSB2PHY_PLL_USER_CTL2);
68 writel(0x14, QUSB2PHY_PORT_TEST2);
69 }
70 else
71 {
72 /* Set HS impedance to 42ohms */
73 writel(0xA0, QUSB2PHY_PORT_TUNE1);
Tanya Finkele7aa4272014-08-08 23:41:34 +030074
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070075 /* Set TX current to 19mA, TX SR and TX bias current to 1, 1 */
76 writel(0xA5, QUSB2PHY_PORT_TUNE2);
Tanya Finkele7aa4272014-08-08 23:41:34 +030077
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070078 /* Increase autocalibration bias circuit settling time
79 * and enable utocalibration */
80 writel(0x81, QUSB2PHY_PORT_TUNE3);
Tanya Finkele7aa4272014-08-08 23:41:34 +030081
Channagoud Kadabi7164ddf2015-04-09 16:27:36 -070082 writel(0x85, QUSB2PHY_PORT_TUNE4);
83 }
84
Tanya Finkele7aa4272014-08-08 23:41:34 +030085 /* Wait for tuning params to take effect right before re-enabling power*/
Joonwoo Park8ef69192014-06-09 16:54:15 -070086 udelay(10);
87
Tanya Finkele7aa4272014-08-08 23:41:34 +030088 /* Disable the PHY */
89 writel(0x23, QUSB2PHY_PORT_POWERDOWN);
90 /* Enable ULPI mode */
Channagoud Kadabi12b96932014-09-23 15:18:11 -070091 if (platform_is_msm8994())
92 writel(0x0, QUSB2PHY_PORT_UTMI_CTRL2);
Tanya Finkele7aa4272014-08-08 23:41:34 +030093 /* Enable PHY */
94 /* set CLAMP_N_EN and USB PHY is enabled*/
Joonwoo Park8ef69192014-06-09 16:54:15 -070095 writel(0x22, QUSB2PHY_PORT_POWERDOWN);
96}