Skip to content

Commit

Permalink
Merge tag 'fixes-for-v3.17-rc2' of git://git.kernel.org/pub/scm/linux…
Browse files Browse the repository at this point in the history
…/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: Felipe Balbi <balbi@ti.com>
  • Loading branch information
gregkh committed Aug 24, 2014
2 parents 6817ae2 + 5d19703 commit 1ddb552
Show file tree
Hide file tree
Showing 18 changed files with 51 additions and 27 deletions.
2 changes: 1 addition & 1 deletion drivers/usb/dwc3/dwc3-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
u32 ret;
int ret;
struct device_node *node = omap->dev->of_node;
struct extcon_dev *edev;

Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/gadget/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG
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
libcomposite-y := usbstring.o config.o epautoconf.o
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/gadget/function/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# USB peripheral controller drivers
#

ccflags-y := -I$(PWD)/drivers/usb/gadget/
ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/
ccflags-y := -Idrivers/usb/gadget/
ccflags-y += -Idrivers/usb/gadget/udc/

# USB Functions
usb_f_acm-y := f_acm.o
Expand Down
3 changes: 0 additions & 3 deletions drivers/usb/gadget/function/u_ether.c
Original file line number Diff line number Diff line change
Expand Up @@ -1127,10 +1127,7 @@ void gether_disconnect(struct gether *link)

DBG(dev, "%s\n", __func__);

netif_tx_lock(dev->net);
netif_stop_queue(dev->net);
netif_tx_unlock(dev->net);

netif_carrier_off(dev->net);

/* disable endpoints, forcing (synchronous) completion
Expand Down
3 changes: 3 additions & 0 deletions drivers/usb/gadget/function/uvc_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
usb_ep_set_halt(ep);
spin_unlock_irqrestore(&video->queue.irqlock, flags);
uvc_queue_cancel(queue, 0);
goto requeue;
}
spin_unlock_irqrestore(&video->queue.irqlock, flags);
Expand Down Expand Up @@ -281,6 +282,7 @@ uvc_video_alloc_requests(struct uvc_video *video)
static int
uvc_video_pump(struct uvc_video *video)
{
struct uvc_video_queue *queue = &video->queue;
struct usb_request *req;
struct uvc_buffer *buf;
unsigned long flags;
Expand Down Expand Up @@ -322,6 +324,7 @@ uvc_video_pump(struct uvc_video *video)
printk(KERN_INFO "Failed to queue request (%d)\n", ret);
usb_ep_set_halt(video->ep);
spin_unlock_irqrestore(&video->queue.irqlock, flags);
uvc_queue_cancel(queue, 0);
break;
}
spin_unlock_irqrestore(&video->queue.irqlock, flags);
Expand Down
6 changes: 3 additions & 3 deletions drivers/usb/gadget/legacy/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# USB gadget drivers
#

ccflags-y := -I$(PWD)/drivers/usb/gadget/
ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/
ccflags-y += -I$(PWD)/drivers/usb/gadget/function/
ccflags-y := -Idrivers/usb/gadget/
ccflags-y += -Idrivers/usb/gadget/udc/
ccflags-y += -Idrivers/usb/gadget/function/

g_zero-y := zero.o
g_audio-y := audio.o
Expand Down
2 changes: 2 additions & 0 deletions drivers/usb/gadget/legacy/dbgp.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,12 @@ static void dbgp_unbind(struct usb_gadget *gadget)
{
#ifdef CONFIG_USB_G_DBGP_SERIAL
kfree(dbgp.serial);
dbgp.serial = NULL;
#endif
if (dbgp.req) {
kfree(dbgp.req->buf);
usb_ep_free_request(gadget->ep0, dbgp.req);
dbgp.req = NULL;
}

gadget->ep0->driver_data = NULL;
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/gadget/legacy/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)

value = -ENOMEM;
kbuf = memdup_user(buf, len);
if (!kbuf) {
if (IS_ERR(kbuf)) {
value = PTR_ERR(kbuf);
goto free1;
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/usb/gadget/udc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ config USB_GOKU
gadget drivers to also be dynamically linked.

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
help
This is a USB device driver for EG20T PCH.
Expand All @@ -353,6 +353,7 @@ config USB_EG20T
ML7213/ML7831 is companion chip for Intel Atom E6xx series.
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
#
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/gadget/udc/atmel_usba_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1661,7 +1661,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
if (dma_status) {
int i;

for (i = 1; i < USBA_NR_DMAS; i++)
for (i = 1; i <= USBA_NR_DMAS; i++)
if (dma_status & (1 << i))
usba_dma_irq(udc, &udc->usba_ep[i]);
}
Expand Down
8 changes: 6 additions & 2 deletions drivers/usb/gadget/udc/fusb300_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1398,13 +1398,17 @@ static int fusb300_probe(struct platform_device *pdev)

/* initialize udc */
fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL);
if (fusb300 == NULL)
if (fusb300 == NULL) {
ret = -ENOMEM;
goto clean_up;
}

for (i = 0; i < FUSB300_MAX_NUM_EP; i++) {
_ep[i] = kzalloc(sizeof(struct fusb300_ep), GFP_KERNEL);
if (_ep[i] == NULL)
if (_ep[i] == NULL) {
ret = -ENOMEM;
goto clean_up;
}
fusb300->ep[i] = _ep[i];
}

Expand Down
22 changes: 19 additions & 3 deletions drivers/usb/gadget/udc/pch_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@ struct pch_vbus_gpio_data {
* @setup_data: Received setup data
* @phys_addr: of device memory
* @base_addr: for mapped device memory
* @bar: Indicates which PCI BAR for USB regs
* @irq: IRQ line for the device
* @cfg_data: current cfg, intf, and alt in use
* @vbus_gpio: GPIO informaton for detecting VBUS
Expand Down Expand Up @@ -370,14 +371,17 @@ struct pch_udc_dev {
struct usb_ctrlrequest setup_data;
unsigned long phys_addr;
void __iomem *base_addr;
unsigned bar;
unsigned irq;
struct pch_udc_cfg_data cfg_data;
struct pch_vbus_gpio_data vbus_gpio;
};
#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 PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
#define PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC 0x0939
#define PCI_VENDOR_ID_ROHM 0x10DB
#define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D
#define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808
Expand Down Expand Up @@ -3076,7 +3080,7 @@ static void pch_udc_remove(struct pci_dev *pdev)
iounmap(dev->base_addr);
if (dev->mem_region)
release_mem_region(dev->phys_addr,
pci_resource_len(pdev, PCH_UDC_PCI_BAR));
pci_resource_len(pdev, dev->bar));
if (dev->active)
pci_disable_device(pdev);
kfree(dev);
Expand Down Expand Up @@ -3144,9 +3148,15 @@ static int pch_udc_probe(struct pci_dev *pdev,
dev->active = 1;
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 */
resource = pci_resource_start(pdev, 1);
len = pci_resource_len(pdev, 1);
resource = pci_resource_start(pdev, dev->bar);
len = pci_resource_len(pdev, dev->bar);

if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
Expand Down Expand Up @@ -3211,6 +3221,12 @@ static int pch_udc_probe(struct pci_dev *pdev,
}

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),
.class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/gadget/udc/r8a66597-udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1868,8 +1868,8 @@ static int r8a66597_probe(struct platform_device *pdev)

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
reg = devm_ioremap_resource(&pdev->dev, res);
if (!reg)
return -ENODEV;
if (IS_ERR(reg))
return PTR_ERR(reg);

ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
irq = ires->start;
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/musb/ux500_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ static bool ux500_configure_channel(struct dma_channel *channel,
struct musb *musb = ux500_channel->controller->private_data;

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,
len, ux500_channel->is_tx);

Expand Down
4 changes: 1 addition & 3 deletions drivers/usb/phy/phy-gpio-vbus-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
GFP_KERNEL);
if (!gpio_vbus->phy.otg) {
kfree(gpio_vbus);
if (!gpio_vbus->phy.otg)
return -ENOMEM;
}

platform_set_drvdata(pdev, gpio_vbus);
gpio_vbus->dev = &pdev->dev;
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/phy/phy-msm-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1601,8 +1601,8 @@ static int msm_otg_probe(struct platform_device *pdev)
*/
if (motg->phy_number) {
phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4);
if (IS_ERR(phy_select))
return PTR_ERR(phy_select);
if (!phy_select)
return -ENOMEM;
/* Enable second PHY with the OTG port */
writel(0x1, phy_select);
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/usb/phy/phy-samsung-usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@

#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 EXYNOS5_DRD_PHYTERM (0x24)
Expand Down
3 changes: 3 additions & 0 deletions drivers/usb/phy/phy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
dev_dbg(dev, "unable to find transceiver\n");
if (!IS_ERR(phy))
phy = ERR_PTR(-ENODEV);

goto err0;
}

Expand Down

0 comments on commit 1ddb552

Please sign in to comment.