aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorDorian Snyder <dastin1015@gmail.com>2013-06-12 02:24:45 -0700
committerDorian Snyder <dastin1015@gmail.com>2013-06-20 00:06:04 -0700
commit4b2308ce699b9c599dd6e6acf57ac11f483381d9 (patch)
tree4c31179b06d094887b1c8ca70264cf8f184a5981 /drivers/usb
parent855d6a6c1f7c54ef073caac3f6c5f9b1ed72eb4d (diff)
downloadkernel_samsung_smdk4412-4b2308ce699b9c599dd6e6acf57ac11f483381d9.zip
kernel_samsung_smdk4412-4b2308ce699b9c599dd6e6acf57ac11f483381d9.tar.gz
kernel_samsung_smdk4412-4b2308ce699b9c599dd6e6acf57ac11f483381d9.tar.bz2
d710: initial support for the Epic 4G Touch (SPH-D710)
Change-Id: Iafbd9fb45253b02d539ac0ba114f57b3bf9eeed4
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/quirks.c6
-rw-r--r--drivers/usb/core/sec-dock.h7
-rw-r--r--drivers/usb/gadget/epautoconf.c5
-rw-r--r--drivers/usb/gadget/s3c_udc.h2
-rw-r--r--drivers/usb/gadget/s3c_udc_otg.c19
-rw-r--r--drivers/usb/host/ehci-s5p.c2
-rw-r--r--drivers/usb/host/ohci-s5p.c13
7 files changed, 38 insertions, 16 deletions
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index df6cfa4..5da45eb 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -173,9 +173,11 @@ static const struct usb_device_id usb_quirk_list[] = {
{ USB_DEVICE(0x04cc, 0x2333), .driver_info = USB_QUIRK_HSIC_TUNE },
/* Qualcomm MDM9x15 */
- { USB_DEVICE(0x05c6, 0x9048), .driver_info = USB_QUIRK_HSIC_TUNE },
+ { USB_DEVICE(0x05c6, 0x9048),
+ .driver_info = USB_QUIRK_HSIC_TUNE | USB_QUIRK_NO_DPM_RESUME},
- { USB_DEVICE(0x05c6, 0x904C), .driver_info = USB_QUIRK_HSIC_TUNE },
+ { USB_DEVICE(0x05c6, 0x904C),
+ .driver_info = USB_QUIRK_HSIC_TUNE | USB_QUIRK_NO_DPM_RESUME},
{ } /* terminating entry must be last */
};
diff --git a/drivers/usb/core/sec-dock.h b/drivers/usb/core/sec-dock.h
index 73c4ea6..4fdf351 100644
--- a/drivers/usb/core/sec-dock.h
+++ b/drivers/usb/core/sec-dock.h
@@ -23,7 +23,8 @@ static struct usb_device_id battery_notify_exception_table[] = {
{ USB_DEVICE(0x1519, 0x0020), }, /* HSIC Device */
{ USB_DEVICE(0x05c6, 0x904c), }, /* Qualcomm modem */
{ USB_DEVICE(0x05c6, 0x9008), }, /* Qualcomm modem */
-{ USB_DEVICE(0x08bb, 0x27c4), }, /* TI USB Audio DAC */
+{ USB_DEVICE(0x08bb, 0x2704), }, /* TI USB Audio DAC 1 */
+{ USB_DEVICE(0x08bb, 0x27c4), }, /* TI USB Audio DAC 2 */
{ } /* Terminating entry */
};
@@ -79,7 +80,9 @@ static int call_battery_notify(struct usb_device *dev, bool bOnOff)
/* Smart Dock hub must be skipped */
if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1a40 &&
- le16_to_cpu(dev->descriptor.idProduct) == 0x0101)) {
+ le16_to_cpu(dev->descriptor.idProduct) == 0x0101) ||
+ (le16_to_cpu(dev->descriptor.idVendor) == 0x0424 &&
+ le16_to_cpu(dev->descriptor.idProduct) == 0x2514)) {
if (bOnOff)
is_smartdock = 1;
else
diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c
index 212f8fc..da8482e 100644
--- a/drivers/usb/gadget/epautoconf.c
+++ b/drivers/usb/gadget/epautoconf.c
@@ -345,6 +345,11 @@ struct usb_ep *usb_ep_autoconfig (
#endif
if (ep && ep_matches (gadget, ep, desc))
return ep;
+ } else if (USB_ENDPOINT_XFER_ISOC == type
+ && (USB_DIR_IN & desc->bEndpointAddress)) {
+ ep = find_ep(gadget, "ep15-iso");
+ if (ep && ep_matches(gadget, ep, desc))
+ return ep;
}
}
diff --git a/drivers/usb/gadget/s3c_udc.h b/drivers/usb/gadget/s3c_udc.h
index c6bf986..03ee411 100644
--- a/drivers/usb/gadget/s3c_udc.h
+++ b/drivers/usb/gadget/s3c_udc.h
@@ -92,7 +92,7 @@
*/
typedef enum ep_type {
- ep_control, ep_bulk_in, ep_bulk_out, ep_interrupt
+ ep_control, ep_bulk_in, ep_bulk_out, ep_interrupt, ep_iso_in
} ep_type_t;
struct s3c_ep {
diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c
index a4f33cd..6a28e4f 100644
--- a/drivers/usb/gadget/s3c_udc_otg.c
+++ b/drivers/usb/gadget/s3c_udc_otg.c
@@ -672,13 +672,17 @@ static void set_max_pktsize(struct s3c_udc *dev, enum usb_device_speed speed)
} else {
ep0_fifo_size = 64;
ep_fifo_size = 64;
- ep_fifo_size2 = 64;
+ ep_fifo_size2 = 1023;
dev->gadget.speed = USB_SPEED_FULL;
}
dev->ep[0].ep.maxpacket = ep0_fifo_size;
- for (i = 1; i < S3C_MAX_ENDPOINTS; i++)
- dev->ep[i].ep.maxpacket = ep_fifo_size;
+ for (i = 1; i < S3C_MAX_ENDPOINTS; i++) {
+ if (dev->ep[i].bmAttributes == USB_ENDPOINT_XFER_ISOC)
+ dev->ep[i].ep.maxpacket = ep_fifo_size2;
+ else
+ dev->ep[i].ep.maxpacket = ep_fifo_size;
+ }
/* EP0 - Control IN (64 bytes)*/
ep_ctrl = __raw_readl(dev->regs + S3C_UDC_OTG_DIEPCTL(EP0_CON));
@@ -710,6 +714,7 @@ static int s3c_ep_enable(struct usb_ep *_ep,
/* xfer types must match, except that interrupt ~= bulk */
if (ep->bmAttributes != desc->bmAttributes
&& ep->bmAttributes != USB_ENDPOINT_XFER_BULK
+ && ep->bmAttributes != USB_ENDPOINT_XFER_ISOC
&& desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
DEBUG("%s: %s type mismatch\n", __func__, _ep->name);
@@ -1176,16 +1181,16 @@ static struct s3c_udc memory = {
},
.ep[15] = {
.ep = {
- .name = "ep15-int",
+ .name = "ep15-iso",
.ops = &s3c_ep_ops,
- .maxpacket = EP_FIFO_SIZE,
+ .maxpacket = EP_FIFO_SIZE2,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 15,
- .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .bmAttributes = USB_ENDPOINT_XFER_ISOC,
- .ep_type = ep_interrupt,
+ .ep_type = ep_iso_in,
.fifo = (unsigned int) S3C_UDC_OTG_EP15_FIFO,
},
};
diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
index 78399c2..3ef4856 100644
--- a/drivers/usb/host/ehci-s5p.c
+++ b/drivers/usb/host/ehci-s5p.c
@@ -375,6 +375,8 @@ static int s5p_ehci_runtime_resume(struct device *dev)
usb_root_hub_lost_power(hcd->self.root_hub);
ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
+ ehci_writel(ehci, INTR_MASK, &ehci->regs->intr_enable);
+ (void)ehci_readl(ehci, &ehci->regs->intr_enable);
/* here we "know" root ports should always stay powered */
ehci_port_power(ehci, 1);
diff --git a/drivers/usb/host/ohci-s5p.c b/drivers/usb/host/ohci-s5p.c
index 641e40c..68eecfd 100644
--- a/drivers/usb/host/ohci-s5p.c
+++ b/drivers/usb/host/ohci-s5p.c
@@ -173,16 +173,18 @@ static int ohci_hcd_s5p_drv_runtime_resume(struct device *dev)
struct s5p_ohci_platdata *pdata = pdev->dev.platform_data;
struct s5p_ohci_hcd *s5p_ohci = platform_get_drvdata(pdev);
struct usb_hcd *hcd = s5p_ohci->hcd;
+ int ret = 0;
if (dev->power.is_suspended)
return 0;
if (pdata->phy_resume)
- pdata->phy_resume(pdev, S5P_USB_PHY_HOST);
- /* Mark hardware accessible again as we are out of D3 state by now */
- set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
+ ret = pdata->phy_resume(pdev, S5P_USB_PHY_HOST);
- ohci_finish_controller_resume(hcd);
+ if (!ret) {
+ set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
+ ohci_finish_controller_resume(hcd);
+ }
return 0;
}
@@ -473,6 +475,9 @@ static void ohci_hcd_s5p_drv_shutdown(struct platform_device *pdev)
if (hcd->driver->shutdown)
hcd->driver->shutdown(hcd);
+
+ clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
+
}
static const struct dev_pm_ops ohci_s5p_pm_ops = {