Commit 1ddb5527 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'fixes-for-v3.17-rc2' of...

Merge tag 'fixes-for-v3.17-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into work-linus

Felipe writes:

usb: fixes for v3.17-rc2

Here's our first set of fixes for v3.17-rc cycle. Most fixes are
pretty minor changes like the signedness bug in dwc3, or the wrong
string format on MUSB.

The most interesting part is the addition of Intel Quark X1000 support
to PCH UDC.
Signed-of-by: default avatarFelipe Balbi <balbi@ti.com>
parents 6817ae22 5d197038
...@@ -425,7 +425,7 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) ...@@ -425,7 +425,7 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap)
static int dwc3_omap_extcon_register(struct dwc3_omap *omap) static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
{ {
u32 ret; int ret;
struct device_node *node = omap->dev->of_node; struct device_node *node = omap->dev->of_node;
struct extcon_dev *edev; struct extcon_dev *edev;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG
subdir-ccflags-$(CONFIG_USB_GADGET_VERBOSE) += -DVERBOSE_DEBUG subdir-ccflags-$(CONFIG_USB_GADGET_VERBOSE) += -DVERBOSE_DEBUG
ccflags-y += -I$(PWD)/drivers/usb/gadget/udc ccflags-y += -Idrivers/usb/gadget/udc
obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o
libcomposite-y := usbstring.o config.o epautoconf.o libcomposite-y := usbstring.o config.o epautoconf.o
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# USB peripheral controller drivers # USB peripheral controller drivers
# #
ccflags-y := -I$(PWD)/drivers/usb/gadget/ ccflags-y := -Idrivers/usb/gadget/
ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/ ccflags-y += -Idrivers/usb/gadget/udc/
# USB Functions # USB Functions
usb_f_acm-y := f_acm.o usb_f_acm-y := f_acm.o
......
...@@ -1127,10 +1127,7 @@ void gether_disconnect(struct gether *link) ...@@ -1127,10 +1127,7 @@ void gether_disconnect(struct gether *link)
DBG(dev, "%s\n", __func__); DBG(dev, "%s\n", __func__);
netif_tx_lock(dev->net);
netif_stop_queue(dev->net); netif_stop_queue(dev->net);
netif_tx_unlock(dev->net);
netif_carrier_off(dev->net); netif_carrier_off(dev->net);
/* disable endpoints, forcing (synchronous) completion /* disable endpoints, forcing (synchronous) completion
......
...@@ -195,6 +195,7 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req) ...@@ -195,6 +195,7 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req)
printk(KERN_INFO "Failed to queue request (%d).\n", ret); printk(KERN_INFO "Failed to queue request (%d).\n", ret);
usb_ep_set_halt(ep); usb_ep_set_halt(ep);
spin_unlock_irqrestore(&video->queue.irqlock, flags); spin_unlock_irqrestore(&video->queue.irqlock, flags);
uvc_queue_cancel(queue, 0);
goto requeue; goto requeue;
} }
spin_unlock_irqrestore(&video->queue.irqlock, flags); spin_unlock_irqrestore(&video->queue.irqlock, flags);
...@@ -281,6 +282,7 @@ uvc_video_alloc_requests(struct uvc_video *video) ...@@ -281,6 +282,7 @@ uvc_video_alloc_requests(struct uvc_video *video)
static int static int
uvc_video_pump(struct uvc_video *video) uvc_video_pump(struct uvc_video *video)
{ {
struct uvc_video_queue *queue = &video->queue;
struct usb_request *req; struct usb_request *req;
struct uvc_buffer *buf; struct uvc_buffer *buf;
unsigned long flags; unsigned long flags;
...@@ -322,6 +324,7 @@ uvc_video_pump(struct uvc_video *video) ...@@ -322,6 +324,7 @@ uvc_video_pump(struct uvc_video *video)
printk(KERN_INFO "Failed to queue request (%d)\n", ret); printk(KERN_INFO "Failed to queue request (%d)\n", ret);
usb_ep_set_halt(video->ep); usb_ep_set_halt(video->ep);
spin_unlock_irqrestore(&video->queue.irqlock, flags); spin_unlock_irqrestore(&video->queue.irqlock, flags);
uvc_queue_cancel(queue, 0);
break; break;
} }
spin_unlock_irqrestore(&video->queue.irqlock, flags); spin_unlock_irqrestore(&video->queue.irqlock, flags);
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
# USB gadget drivers # USB gadget drivers
# #
ccflags-y := -I$(PWD)/drivers/usb/gadget/ ccflags-y := -Idrivers/usb/gadget/
ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/ ccflags-y += -Idrivers/usb/gadget/udc/
ccflags-y += -I$(PWD)/drivers/usb/gadget/function/ ccflags-y += -Idrivers/usb/gadget/function/
g_zero-y := zero.o g_zero-y := zero.o
g_audio-y := audio.o g_audio-y := audio.o
......
...@@ -222,10 +222,12 @@ static void dbgp_unbind(struct usb_gadget *gadget) ...@@ -222,10 +222,12 @@ static void dbgp_unbind(struct usb_gadget *gadget)
{ {
#ifdef CONFIG_USB_G_DBGP_SERIAL #ifdef CONFIG_USB_G_DBGP_SERIAL
kfree(dbgp.serial); kfree(dbgp.serial);
dbgp.serial = NULL;
#endif #endif
if (dbgp.req) { if (dbgp.req) {
kfree(dbgp.req->buf); kfree(dbgp.req->buf);
usb_ep_free_request(gadget->ep0, dbgp.req); usb_ep_free_request(gadget->ep0, dbgp.req);
dbgp.req = NULL;
} }
gadget->ep0->driver_data = NULL; gadget->ep0->driver_data = NULL;
......
...@@ -440,7 +440,7 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr) ...@@ -440,7 +440,7 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
value = -ENOMEM; value = -ENOMEM;
kbuf = memdup_user(buf, len); kbuf = memdup_user(buf, len);
if (!kbuf) { if (IS_ERR(kbuf)) {
value = PTR_ERR(kbuf); value = PTR_ERR(kbuf);
goto free1; goto free1;
} }
......
...@@ -332,7 +332,7 @@ config USB_GOKU ...@@ -332,7 +332,7 @@ config USB_GOKU
gadget drivers to also be dynamically linked. gadget drivers to also be dynamically linked.
config USB_EG20T config USB_EG20T
tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC" tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
depends on PCI depends on PCI
help help
This is a USB device driver for EG20T PCH. This is a USB device driver for EG20T PCH.
...@@ -353,6 +353,7 @@ config USB_EG20T ...@@ -353,6 +353,7 @@ config USB_EG20T
ML7213/ML7831 is companion chip for Intel Atom E6xx series. ML7213/ML7831 is companion chip for Intel Atom E6xx series.
ML7213/ML7831 is completely compatible for Intel EG20T PCH. ML7213/ML7831 is completely compatible for Intel EG20T PCH.
This driver can be used with Intel's Quark X1000 SOC platform
# #
# LAST -- dummy/emulated controller # LAST -- dummy/emulated controller
# #
......
...@@ -1661,7 +1661,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid) ...@@ -1661,7 +1661,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
if (dma_status) { if (dma_status) {
int i; int i;
for (i = 1; i < USBA_NR_DMAS; i++) for (i = 1; i <= USBA_NR_DMAS; i++)
if (dma_status & (1 << i)) if (dma_status & (1 << i))
usba_dma_irq(udc, &udc->usba_ep[i]); usba_dma_irq(udc, &udc->usba_ep[i]);
} }
......
...@@ -1398,13 +1398,17 @@ static int fusb300_probe(struct platform_device *pdev) ...@@ -1398,13 +1398,17 @@ static int fusb300_probe(struct platform_device *pdev)
/* initialize udc */ /* initialize udc */
fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL); fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL);
if (fusb300 == NULL) if (fusb300 == NULL) {
ret = -ENOMEM;
goto clean_up; goto clean_up;
}
for (i = 0; i < FUSB300_MAX_NUM_EP; i++) { for (i = 0; i < FUSB300_MAX_NUM_EP; i++) {
_ep[i] = kzalloc(sizeof(struct fusb300_ep), GFP_KERNEL); _ep[i] = kzalloc(sizeof(struct fusb300_ep), GFP_KERNEL);
if (_ep[i] == NULL) if (_ep[i] == NULL) {
ret = -ENOMEM;
goto clean_up; goto clean_up;
}
fusb300->ep[i] = _ep[i]; fusb300->ep[i] = _ep[i];
} }
......
...@@ -343,6 +343,7 @@ struct pch_vbus_gpio_data { ...@@ -343,6 +343,7 @@ struct pch_vbus_gpio_data {
* @setup_data: Received setup data * @setup_data: Received setup data
* @phys_addr: of device memory * @phys_addr: of device memory
* @base_addr: for mapped device memory * @base_addr: for mapped device memory
* @bar: Indicates which PCI BAR for USB regs
* @irq: IRQ line for the device * @irq: IRQ line for the device
* @cfg_data: current cfg, intf, and alt in use * @cfg_data: current cfg, intf, and alt in use
* @vbus_gpio: GPIO informaton for detecting VBUS * @vbus_gpio: GPIO informaton for detecting VBUS
...@@ -370,14 +371,17 @@ struct pch_udc_dev { ...@@ -370,14 +371,17 @@ struct pch_udc_dev {
struct usb_ctrlrequest setup_data; struct usb_ctrlrequest setup_data;
unsigned long phys_addr; unsigned long phys_addr;
void __iomem *base_addr; void __iomem *base_addr;
unsigned bar;
unsigned irq; unsigned irq;
struct pch_udc_cfg_data cfg_data; struct pch_udc_cfg_data cfg_data;
struct pch_vbus_gpio_data vbus_gpio; struct pch_vbus_gpio_data vbus_gpio;
}; };
#define to_pch_udc(g) (container_of((g), struct pch_udc_dev, gadget)) #define to_pch_udc(g) (container_of((g), struct pch_udc_dev, gadget))
#define PCH_UDC_PCI_BAR_QUARK_X1000 0
#define PCH_UDC_PCI_BAR 1 #define PCH_UDC_PCI_BAR 1
#define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808 #define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
#define PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC 0x0939
#define PCI_VENDOR_ID_ROHM 0x10DB #define PCI_VENDOR_ID_ROHM 0x10DB
#define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D #define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D
#define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808 #define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808
...@@ -3076,7 +3080,7 @@ static void pch_udc_remove(struct pci_dev *pdev) ...@@ -3076,7 +3080,7 @@ static void pch_udc_remove(struct pci_dev *pdev)
iounmap(dev->base_addr); iounmap(dev->base_addr);
if (dev->mem_region) if (dev->mem_region)
release_mem_region(dev->phys_addr, release_mem_region(dev->phys_addr,
pci_resource_len(pdev, PCH_UDC_PCI_BAR)); pci_resource_len(pdev, dev->bar));
if (dev->active) if (dev->active)
pci_disable_device(pdev); pci_disable_device(pdev);
kfree(dev); kfree(dev);
...@@ -3144,9 +3148,15 @@ static int pch_udc_probe(struct pci_dev *pdev, ...@@ -3144,9 +3148,15 @@ static int pch_udc_probe(struct pci_dev *pdev,
dev->active = 1; dev->active = 1;
pci_set_drvdata(pdev, dev); pci_set_drvdata(pdev, dev);
/* Determine BAR based on PCI ID */
if (id->device == PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC)
dev->bar = PCH_UDC_PCI_BAR_QUARK_X1000;
else
dev->bar = PCH_UDC_PCI_BAR;
/* PCI resource allocation */ /* PCI resource allocation */
resource = pci_resource_start(pdev, 1); resource = pci_resource_start(pdev, dev->bar);
len = pci_resource_len(pdev, 1); len = pci_resource_len(pdev, dev->bar);
if (!request_mem_region(resource, len, KBUILD_MODNAME)) { if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
dev_err(&pdev->dev, "%s: pci device used already\n", __func__); dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
...@@ -3211,6 +3221,12 @@ static int pch_udc_probe(struct pci_dev *pdev, ...@@ -3211,6 +3221,12 @@ static int pch_udc_probe(struct pci_dev *pdev,
} }
static const struct pci_device_id pch_udc_pcidev_id[] = { static const struct pci_device_id pch_udc_pcidev_id[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_INTEL,
PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC),
.class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
.class_mask = 0xffffffff,
},
{ {
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC), PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
.class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe, .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
......
...@@ -1868,8 +1868,8 @@ static int r8a66597_probe(struct platform_device *pdev) ...@@ -1868,8 +1868,8 @@ static int r8a66597_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
reg = devm_ioremap_resource(&pdev->dev, res); reg = devm_ioremap_resource(&pdev->dev, res);
if (!reg) if (IS_ERR(reg))
return -ENODEV; return PTR_ERR(reg);
ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0); ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
irq = ires->start; irq = ires->start;
......
...@@ -96,7 +96,7 @@ static bool ux500_configure_channel(struct dma_channel *channel, ...@@ -96,7 +96,7 @@ static bool ux500_configure_channel(struct dma_channel *channel,
struct musb *musb = ux500_channel->controller->private_data; struct musb *musb = ux500_channel->controller->private_data;
dev_dbg(musb->controller, dev_dbg(musb->controller,
"packet_sz=%d, mode=%d, dma_addr=0x%llu, len=%d is_tx=%d\n", "packet_sz=%d, mode=%d, dma_addr=0x%llx, len=%d is_tx=%d\n",
packet_sz, mode, (unsigned long long) dma_addr, packet_sz, mode, (unsigned long long) dma_addr,
len, ux500_channel->is_tx); len, ux500_channel->is_tx);
......
...@@ -260,10 +260,8 @@ static int gpio_vbus_probe(struct platform_device *pdev) ...@@ -260,10 +260,8 @@ static int gpio_vbus_probe(struct platform_device *pdev)
gpio_vbus->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg), gpio_vbus->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg),
GFP_KERNEL); GFP_KERNEL);
if (!gpio_vbus->phy.otg) { if (!gpio_vbus->phy.otg)
kfree(gpio_vbus);
return -ENOMEM; return -ENOMEM;
}
platform_set_drvdata(pdev, gpio_vbus); platform_set_drvdata(pdev, gpio_vbus);
gpio_vbus->dev = &pdev->dev; gpio_vbus->dev = &pdev->dev;
......
...@@ -1601,8 +1601,8 @@ static int msm_otg_probe(struct platform_device *pdev) ...@@ -1601,8 +1601,8 @@ static int msm_otg_probe(struct platform_device *pdev)
*/ */
if (motg->phy_number) { if (motg->phy_number) {
phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4); phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4);
if (IS_ERR(phy_select)) if (!phy_select)
return PTR_ERR(phy_select); return -ENOMEM;
/* Enable second PHY with the OTG port */ /* Enable second PHY with the OTG port */
writel(0x1, phy_select); writel(0x1, phy_select);
} }
......
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
#define EXYNOS5_DRD_PHYPARAM1 (0x20) #define EXYNOS5_DRD_PHYPARAM1 (0x20)
#define PHYPARAM1_PCS_TXDEEMPH_MASK (0x1f << 0) #define PHYPARAM1_PCS_TXDEEMPH_MASK (0x3f << 0)
#define PHYPARAM1_PCS_TXDEEMPH (0x1c) #define PHYPARAM1_PCS_TXDEEMPH (0x1c)
#define EXYNOS5_DRD_PHYTERM (0x24) #define EXYNOS5_DRD_PHYTERM (0x24)
......
...@@ -232,6 +232,9 @@ struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index) ...@@ -232,6 +232,9 @@ struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index)
phy = __usb_find_phy_dev(dev, &phy_bind_list, index); phy = __usb_find_phy_dev(dev, &phy_bind_list, index);
if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
dev_dbg(dev, "unable to find transceiver\n"); dev_dbg(dev, "unable to find transceiver\n");
if (!IS_ERR(phy))
phy = ERR_PTR(-ENODEV);
goto err0; goto err0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment