summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorHaribabu Narayanan <hnarayanan@nvidia.com>2014-03-06 21:25:01 -0800
committerHaribabu Narayanan <hnarayanan@nvidia.com>2014-03-11 19:02:20 -0700
commit4e04c02fc642aabaa754736ec2dd0e81a6bd4556 (patch)
treedc00ed7c1ccb4b4745ae585a767049cf4da72655 /drivers/usb
parent05ead23c1c223ae797dc785e341a305c26198b19 (diff)
drivers: gadget: tegra: support to skip charging
Currently charging_support flag is left unimplemented in the UDC driver and it is assumed that all platforms need/support charging. Add support to make this optional so that platforms can choose to skip charger port detection and assume instead that it is always connected to only SDP ports. Bug 1463801 Change-Id: I89b27e9a8d5af4d29af0609bfc5faa643d2d990c Signed-off-by: Haribabu Narayanan <hnarayanan@nvidia.com> Reviewed-on: http://git-master/r/378732 Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/tegra_udc.c13
-rw-r--r--drivers/usb/gadget/tegra_udc.h1
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/usb/gadget/tegra_udc.c b/drivers/usb/gadget/tegra_udc.c
index 7efd0d3fb7a7..14ae891873ac 100644
--- a/drivers/usb/gadget/tegra_udc.c
+++ b/drivers/usb/gadget/tegra_udc.c
@@ -426,7 +426,8 @@ static void dr_controller_run(struct tegra_udc *udc)
temp |= USB_CMD_ITC_1_MICRO_FRM;
if (can_pullup(udc)) {
temp |= USB_CMD_RUN_STOP;
- if (udc->connect_type == CONNECT_TYPE_SDP)
+ if (udc->charging_supported &&
+ (udc->connect_type == CONNECT_TYPE_SDP))
schedule_delayed_work(&udc->non_std_charger_work,
msecs_to_jiffies(NON_STD_CHARGER_DET_TIME_MS));
}
@@ -1524,6 +1525,11 @@ static void tegra_detect_charging_type_is_cdp_or_dcp(struct tegra_udc *udc)
static int tegra_detect_cable_type(struct tegra_udc *udc)
{
+ if (!udc->charging_supported) {
+ tegra_udc_set_charger_type(udc, CONNECT_TYPE_SDP);
+ return 0;
+ }
+
if (tegra_usb_phy_charger_detected(udc->phy)) {
if (tegra_usb_phy_qc2_charger_detected(udc->phy,
udc->qc2_voltage))
@@ -1659,7 +1665,8 @@ static int tegra_pullup(struct usb_gadget *gadget, int is_on)
* non-standard charger if no setup packet is received after
* enumeration started.
*/
- if (udc->connect_type == CONNECT_TYPE_SDP)
+ if (udc->charging_supported &&
+ (udc->connect_type == CONNECT_TYPE_SDP))
schedule_delayed_work(&udc->non_std_charger_work,
msecs_to_jiffies(NON_STD_CHARGER_DET_TIME_MS));
} else
@@ -2862,6 +2869,8 @@ static int __init tegra_udc_probe(struct platform_device *pdev)
else
udc->fence_read = true;
+ udc->charging_supported = pdata->u_data.dev.charging_supported;
+
if (pdata->u_data.dev.dcp_current_limit_ma)
udc->dcp_current_limit =
pdata->u_data.dev.dcp_current_limit_ma * 1000;
diff --git a/drivers/usb/gadget/tegra_udc.h b/drivers/usb/gadget/tegra_udc.h
index 4c0490955dcc..9f437dac9608 100644
--- a/drivers/usb/gadget/tegra_udc.h
+++ b/drivers/usb/gadget/tegra_udc.h
@@ -476,6 +476,7 @@ struct tegra_udc {
bool support_pmu_vbus;
bool fence_read;
bool vbus_in_lp0;
+ bool charging_supported;
enum tegra_usb_qc2_voltage qc2_voltage;
#ifdef CONFIG_EXTCON
struct extcon_dev *edev;