Commit 4ed54764 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'usb-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
 "Here are none fixes for various USB driver problems.  The majority are
  gadget/musb fixes, but there are some new device ids in here as well"

* tag 'usb-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  usb: chipidea: add Intel Clovertrail pci id
  usb: gadget: s3c-hsotg: fix can_write limit for non-periodic endpoints
  usb: gadget: f_fs: fix error handling
  usb: musb: dsps: do not bind to "musb-hdrc"
  USB: serial: option: Ignore card reader interface on Huawei E1750
  usb: musb: gadget: fix otg active status flag
  usb: phy: gpio-vbus: fix deferred probe from __init
  usb: gadget: pxa25x_udc: fix deferred probe from __init
  usb: musb: fix otg default state
parents e3757a1f a214339d
...@@ -129,7 +129,12 @@ static DEFINE_PCI_DEVICE_TABLE(ci_hdrc_pci_id_table) = { ...@@ -129,7 +129,12 @@ static DEFINE_PCI_DEVICE_TABLE(ci_hdrc_pci_id_table) = {
PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829), PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829),
.driver_data = (kernel_ulong_t)&penwell_pci_platdata, .driver_data = (kernel_ulong_t)&penwell_pci_platdata,
}, },
{ 0, 0, 0, 0, 0, 0, 0 /* end: all zeroes */ } {
/* Intel Clovertrail */
PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xe006),
.driver_data = (kernel_ulong_t)&penwell_pci_platdata,
},
{ 0 } /* end: all zeroes */
}; };
MODULE_DEVICE_TABLE(pci, ci_hdrc_pci_id_table); MODULE_DEVICE_TABLE(pci, ci_hdrc_pci_id_table);
......
...@@ -2256,6 +2256,8 @@ static int ffs_func_bind(struct usb_configuration *c, ...@@ -2256,6 +2256,8 @@ static int ffs_func_bind(struct usb_configuration *c,
data->raw_descs + ret, data->raw_descs + ret,
(sizeof data->raw_descs) - ret, (sizeof data->raw_descs) - ret,
__ffs_func_bind_do_descs, func); __ffs_func_bind_do_descs, func);
if (unlikely(ret < 0))
goto error;
} }
/* /*
......
...@@ -2054,7 +2054,7 @@ static struct pxa25x_udc memory = { ...@@ -2054,7 +2054,7 @@ static struct pxa25x_udc memory = {
/* /*
* probe - binds to the platform device * probe - binds to the platform device
*/ */
static int __init pxa25x_udc_probe(struct platform_device *pdev) static int pxa25x_udc_probe(struct platform_device *pdev)
{ {
struct pxa25x_udc *dev = &memory; struct pxa25x_udc *dev = &memory;
int retval, irq; int retval, irq;
...@@ -2203,7 +2203,7 @@ static void pxa25x_udc_shutdown(struct platform_device *_dev) ...@@ -2203,7 +2203,7 @@ static void pxa25x_udc_shutdown(struct platform_device *_dev)
pullup_off(); pullup_off();
} }
static int __exit pxa25x_udc_remove(struct platform_device *pdev) static int pxa25x_udc_remove(struct platform_device *pdev)
{ {
struct pxa25x_udc *dev = platform_get_drvdata(pdev); struct pxa25x_udc *dev = platform_get_drvdata(pdev);
...@@ -2294,7 +2294,8 @@ static int pxa25x_udc_resume(struct platform_device *dev) ...@@ -2294,7 +2294,8 @@ static int pxa25x_udc_resume(struct platform_device *dev)
static struct platform_driver udc_driver = { static struct platform_driver udc_driver = {
.shutdown = pxa25x_udc_shutdown, .shutdown = pxa25x_udc_shutdown,
.remove = __exit_p(pxa25x_udc_remove), .probe = pxa25x_udc_probe,
.remove = pxa25x_udc_remove,
.suspend = pxa25x_udc_suspend, .suspend = pxa25x_udc_suspend,
.resume = pxa25x_udc_resume, .resume = pxa25x_udc_resume,
.driver = { .driver = {
...@@ -2303,7 +2304,7 @@ static struct platform_driver udc_driver = { ...@@ -2303,7 +2304,7 @@ static struct platform_driver udc_driver = {
}, },
}; };
module_platform_driver_probe(udc_driver, pxa25x_udc_probe); module_platform_driver(udc_driver);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell"); MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell");
......
...@@ -543,7 +543,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg, ...@@ -543,7 +543,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
* FIFO, requests of >512 cause the endpoint to get stuck with a * FIFO, requests of >512 cause the endpoint to get stuck with a
* fragment of the end of the transfer in it. * fragment of the end of the transfer in it.
*/ */
if (can_write > 512) if (can_write > 512 && !periodic)
can_write = 512; can_write = 512;
/* /*
......
...@@ -535,6 +535,9 @@ static int dsps_probe(struct platform_device *pdev) ...@@ -535,6 +535,9 @@ static int dsps_probe(struct platform_device *pdev)
struct dsps_glue *glue; struct dsps_glue *glue;
int ret; int ret;
if (!strcmp(pdev->name, "musb-hdrc"))
return -ENODEV;
match = of_match_node(musb_dsps_of_match, pdev->dev.of_node); match = of_match_node(musb_dsps_of_match, pdev->dev.of_node);
if (!match) { if (!match) {
dev_err(&pdev->dev, "fail to get matching of_match struct\n"); dev_err(&pdev->dev, "fail to get matching of_match struct\n");
......
...@@ -1790,6 +1790,10 @@ int musb_gadget_setup(struct musb *musb) ...@@ -1790,6 +1790,10 @@ int musb_gadget_setup(struct musb *musb)
musb->g.max_speed = USB_SPEED_HIGH; musb->g.max_speed = USB_SPEED_HIGH;
musb->g.speed = USB_SPEED_UNKNOWN; musb->g.speed = USB_SPEED_UNKNOWN;
MUSB_DEV_MODE(musb);
musb->xceiv->otg->default_a = 0;
musb->xceiv->state = OTG_STATE_B_IDLE;
/* this "gadget" abstracts/virtualizes the controller */ /* this "gadget" abstracts/virtualizes the controller */
musb->g.name = musb_driver_name; musb->g.name = musb_driver_name;
musb->g.is_otg = 1; musb->g.is_otg = 1;
...@@ -1849,7 +1853,6 @@ static int musb_gadget_start(struct usb_gadget *g, ...@@ -1849,7 +1853,6 @@ static int musb_gadget_start(struct usb_gadget *g,
musb->gadget_driver = driver; musb->gadget_driver = driver;
spin_lock_irqsave(&musb->lock, flags); spin_lock_irqsave(&musb->lock, flags);
musb->is_active = 1;
otg_set_peripheral(otg, &musb->g); otg_set_peripheral(otg, &musb->g);
musb->xceiv->state = OTG_STATE_B_IDLE; musb->xceiv->state = OTG_STATE_B_IDLE;
......
...@@ -241,7 +241,7 @@ static int gpio_vbus_set_suspend(struct usb_phy *phy, int suspend) ...@@ -241,7 +241,7 @@ static int gpio_vbus_set_suspend(struct usb_phy *phy, int suspend)
/* platform driver interface */ /* platform driver interface */
static int __init gpio_vbus_probe(struct platform_device *pdev) static int gpio_vbus_probe(struct platform_device *pdev)
{ {
struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev); struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);
struct gpio_vbus_data *gpio_vbus; struct gpio_vbus_data *gpio_vbus;
...@@ -349,7 +349,7 @@ static int __init gpio_vbus_probe(struct platform_device *pdev) ...@@ -349,7 +349,7 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
return err; return err;
} }
static int __exit gpio_vbus_remove(struct platform_device *pdev) static int gpio_vbus_remove(struct platform_device *pdev)
{ {
struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev); struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);
struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev); struct gpio_vbus_mach_info *pdata = dev_get_platdata(&pdev->dev);
...@@ -398,8 +398,6 @@ static const struct dev_pm_ops gpio_vbus_dev_pm_ops = { ...@@ -398,8 +398,6 @@ static const struct dev_pm_ops gpio_vbus_dev_pm_ops = {
}; };
#endif #endif
/* NOTE: the gpio-vbus device may *NOT* be hotplugged */
MODULE_ALIAS("platform:gpio-vbus"); MODULE_ALIAS("platform:gpio-vbus");
static struct platform_driver gpio_vbus_driver = { static struct platform_driver gpio_vbus_driver = {
...@@ -410,10 +408,11 @@ static struct platform_driver gpio_vbus_driver = { ...@@ -410,10 +408,11 @@ static struct platform_driver gpio_vbus_driver = {
.pm = &gpio_vbus_dev_pm_ops, .pm = &gpio_vbus_dev_pm_ops,
#endif #endif
}, },
.remove = __exit_p(gpio_vbus_remove), .probe = gpio_vbus_probe,
.remove = gpio_vbus_remove,
}; };
module_platform_driver_probe(gpio_vbus_driver, gpio_vbus_probe); module_platform_driver(gpio_vbus_driver);
MODULE_DESCRIPTION("simple GPIO controlled OTG transceiver driver"); MODULE_DESCRIPTION("simple GPIO controlled OTG transceiver driver");
MODULE_AUTHOR("Philipp Zabel"); MODULE_AUTHOR("Philipp Zabel");
......
...@@ -81,6 +81,7 @@ static void option_instat_callback(struct urb *urb); ...@@ -81,6 +81,7 @@ static void option_instat_callback(struct urb *urb);
#define HUAWEI_VENDOR_ID 0x12D1 #define HUAWEI_VENDOR_ID 0x12D1
#define HUAWEI_PRODUCT_E173 0x140C #define HUAWEI_PRODUCT_E173 0x140C
#define HUAWEI_PRODUCT_E1750 0x1406
#define HUAWEI_PRODUCT_K4505 0x1464 #define HUAWEI_PRODUCT_K4505 0x1464
#define HUAWEI_PRODUCT_K3765 0x1465 #define HUAWEI_PRODUCT_K3765 0x1465
#define HUAWEI_PRODUCT_K4605 0x14C6 #define HUAWEI_PRODUCT_K4605 0x14C6
...@@ -567,6 +568,8 @@ static const struct usb_device_id option_ids[] = { ...@@ -567,6 +568,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
.driver_info = (kernel_ulong_t) &net_intf1_blacklist }, .driver_info = (kernel_ulong_t) &net_intf1_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff),
.driver_info = (kernel_ulong_t) &net_intf2_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff), { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
......
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