summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/include/mach/usb_phy.h
blob: 0f091aa250fcde7675edce53121ebe895738d1f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 * arch/arm/mach-tegra/include/mach/usb_phy.h
 *
 * Copyright (C) 2010 Google, Inc.
 * Copyright (C) 2011 NVIDIA Corporation.
 *
 * 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 __MACH_USB_PHY_H
#define __MACH_USB_PHY_H

/**
 * Tegra USB phy opaque handle
 */
struct tegra_usb_phy;

/**
 * Opens the usb phy associated to the USB platform device
 * tegra usb phy open must be called before accessing any phy APIs
 */
struct tegra_usb_phy *tegra_usb_phy_open(struct platform_device *pdev);

/**
 * Handles interrupts specific to the phy interface
 * Note: udc or ehci driver will handle the controller interrupts
 */
irqreturn_t tegra_usb_phy_irq(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality after driver reset
 */
int tegra_usb_phy_reset(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality before driver suspend
 * Also, handles platform specific pre suspend functions
 */
int tegra_usb_phy_pre_suspend(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality after driver suspend
 */
int tegra_usb_phy_post_suspend(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality before driver resume
 * Also, handles platform specific pre resume functions
 */
int tegra_usb_phy_pre_resume(struct tegra_usb_phy *phy, bool remote_wakeup);

/**
 * Handles phy interface specific functionality after driver resume
 */
int tegra_usb_phy_post_resume(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality during port power on
 */
int tegra_usb_phy_port_power(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality during bus reset
 */
int tegra_usb_phy_bus_reset(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality for turning off the phy to
 * put the phy in low power mode
 */
int tegra_usb_phy_power_off(struct tegra_usb_phy *phy);

/**
 * Handles phy interface specific functionality for turning on the phy to
 * bring phy out of low power mode
 */
int tegra_usb_phy_power_on(struct tegra_usb_phy *phy);

/**
 * Indicates whether phy registers are accessible or not
 * if phy is powered off then returns false else true
 */
bool tegra_usb_phy_hw_accessible(struct tegra_usb_phy *phy);

/**
 * Indicates whether compliance charger is connected or not
 * if compliance charger is detected then returns true else false
 */
bool tegra_usb_phy_charger_detected(struct tegra_usb_phy *phy);

/**
 * Indicates whether nvidia proprietary charger is connected or not
 * if nvidia proprietary charger is detected then returns true else false
 */
bool tegra_usb_phy_nv_charger_detected(struct tegra_usb_phy *phy);

/**
 * Indicates whether phy resumed due to the pmc remote/hotplug wake event
 *  or not, returns true if remote/hotplug wake is detected.
 */
bool tegra_usb_phy_pmc_wakeup(struct tegra_usb_phy *phy);

/**
 * Indicates controller has HOST PC register set or not
 */
bool tegra_usb_phy_has_hostpc(struct tegra_usb_phy *phy);

/**
 * Indicates controller port supports OTG or not
 */
bool tegra_usb_phy_otg_supported(struct tegra_usb_phy *phy);


void tegra_usb_phy_memory_prefetch_on(struct tegra_usb_phy *phy);

void tegra_usb_phy_memory_prefetch_off(struct tegra_usb_phy *phy);

void tegra_usb_enable_vbus(struct tegra_usb_phy *phy, bool enable);

#endif /* __MACH_USB_PHY_H */