/*
- * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved.
*
* Description:
* High-speed USB device controller driver.
switch (udc->connect_type) {
case CONNECT_TYPE_NONE:
- pr_debug("detected USB charging is disabled");
+ pr_debug("cable/charger is not connected");
max_ua = 0;
break;
case CONNECT_TYPE_SDP:
if (udc->vbus_active && !is_active) {
/* If cable disconnected, cancel any delayed work */
- cancel_delayed_work(&udc->work);
+ cancel_delayed_work(&udc->non_std_charger_work);
spin_lock_irqsave(&udc->lock, flags);
/* reset all internal Queues and inform client driver */
reset_queues(udc);
* a non-standard charger if setup packet is not
* received.
*/
- schedule_delayed_work(&udc->work, msecs_to_jiffies(
- USB_CHARGER_DETECTION_WAIT_TIME_MS));
+ schedule_delayed_work(&udc->non_std_charger_work,
+ msecs_to_jiffies(
+ USB_CHARGER_DETECTION_WAIT_TIME_MS));
}
/* start the controller */
dr_controller_run(udc);
struct tegra_udc *udc;
udc = container_of(gadget, struct tegra_udc, gadget);
- /* check udc regulator is available for drawing the vbus current */
- if (udc->vbus_reg) {
+ /* Do not set current limits for CDP ports */
+ if (udc->connect_type != CONNECT_TYPE_CDP) {
udc->current_limit = mA;
- schedule_work(&udc->charger_work);
+ schedule_work(&udc->current_work);
}
if (!IS_ERR_OR_NULL(udc->transceiver))
static void tegra_udc_set_current_limit_work(struct work_struct *work)
{
struct tegra_udc *udc = container_of(work, struct tegra_udc,
- charger_work);
+ current_work);
/* check udc regulator is available for drawing vbus current*/
if (udc->vbus_reg) {
/* set the current limit in uA */
* standard device; If we did not receive EP0 setup packet, we can assuming it
* is a charger capable of 1.8A charging.
*/
-static void tegra_udc_charger_detect_work(struct work_struct *work)
+static void tegra_udc_non_std_charger_detect_work(struct work_struct *work)
{
- struct tegra_udc *udc = container_of(work, struct tegra_udc, work.work);
+ struct tegra_udc *udc = container_of(work, struct tegra_udc,
+ non_std_charger_work.work);
DBG("%s(%d) BEGIN\n", __func__, __LINE__);
udc->connect_type = CONNECT_TYPE_NON_STANDARD_CHARGER;
EP_SETUP_STATUS_EP0) {
/* Setup packet received, we are connected to host
* and not to charger. Cancel any delayed work */
- __cancel_delayed_work(&udc->work);
+ __cancel_delayed_work(&udc->non_std_charger_work);
tripwire_handler(udc, 0,
(u8 *) (&udc->local_setup_buff));
setup_received_irq(udc, &udc->local_setup_buff);
/* Create work for controlling clocks to the phy if otg is disabled */
INIT_WORK(&udc->irq_work, tegra_udc_irq_work);
- /* Create a delayed work for detecting the USB charger */
- INIT_DELAYED_WORK(&udc->work, tegra_udc_charger_detect_work);
- INIT_WORK(&udc->charger_work, tegra_udc_set_current_limit_work);
+ INIT_DELAYED_WORK(&udc->non_std_charger_work,
+ tegra_udc_non_std_charger_detect_work);
+ INIT_WORK(&udc->current_work, tegra_udc_set_current_limit_work);
/* Get the regulator for drawing the vbus current in udc driver */
udc->vbus_reg = regulator_get(&pdev->dev, "usb_bat_chg");
if (IS_ERR(udc->vbus_reg)) {
usb_del_gadget_udc(&udc->gadget);
udc->done = &done;
- cancel_delayed_work(&udc->work);
+ cancel_delayed_work(&udc->non_std_charger_work);
#ifdef CONFIG_TEGRA_GADGET_BOOST_CPU_FREQ
cancel_work_sync(&udc->boost_cpufreq_work);
#endif
/*
- * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved.
*
* Description:
* High-speed USB device controller driver.
/* Charger current limit=1800mA, as per the USB charger spec */
#define USB_CHARGING_DCP_CURRENT_LIMIT_UA 1800000
-#define USB_CHARGING_CDP_CURRENT_LIMIT_UA 900000
+#define USB_CHARGING_CDP_CURRENT_LIMIT_UA 1500000
#define USB_CHARGING_SDP_CURRENT_LIMIT_UA 100000
#define USB_CHARGING_NON_STANDARD_CHARGER_CURRENT_LIMIT_UA 1800000
struct ep_queue_head *ep_qh; /* Endpoints Queue-Head */
struct tegra_req *status_req; /* ep0 status request */
struct dma_pool *td_pool; /* dma pool for DTD */
- struct delayed_work work; /* delayed work for charger detection */
struct regulator *vbus_reg; /* regulator for drawing VBUS */
+ /* delayed work for non standard charger detection */
+ struct delayed_work non_std_charger_work;
/* work for setting regulator current limit */
- struct work_struct charger_work;
+ struct work_struct current_work;
/* work for boosting cpu frequency */
struct work_struct boost_cpufreq_work;
/* irq work for controlling the usb power */