Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
* 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (260 commits) usb: renesas_usbhs: fixup inconsistent return from usbhs_pkt_push() usb/isp1760: Allow to optionally trigger low-level chip reset via GPIOLIB. USB: gadget: midi: memory leak in f_midi_bind_config() USB: gadget: midi: fix range check in f_midi_out_open() QE/FHCI: fixed the CONTROL bug usb: renesas_usbhs: tidyup for smatch warnings USB: Fix USB Kconfig dependency problem on 85xx/QoirQ platforms EHCI: workaround for MosChip controller bug usb: gadget: file_storage: fix race on unloading USB: ftdi_sio.c: Use ftdi async_icount structure for TIOCMIWAIT, as in other drivers USB: ftdi_sio.c:Fill MSR fields of the ftdi async_icount structure USB: ftdi_sio.c: Fill LSR fields of the ftdi async_icount structure USB: ftdi_sio.c:Fill TX field of the ftdi async_icount structure USB: ftdi_sio.c: Fill the RX field of the ftdi async_icount structure USB: ftdi_sio.c: Basic icount infrastructure for ftdi_sio usb/isp1760: Let OF bindings depend on general CONFIG_OF instead of PPC_OF . USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board USB: Fix runtime wakeup on OHCI xHCI/USB: Make xHCI driver have a BOS descriptor. usb: gadget: add new usb gadget for ACM and mass storage ...
Este cometimento está contido em:
@@ -33,15 +33,6 @@
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#undef DEBUG /* messages on error and most fault paths */
|
||||
@@ -169,7 +160,7 @@ net2280_enable (struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
|
||||
return -EDOM;
|
||||
|
||||
/* sanity check ep-e/ep-f since their fifos are small */
|
||||
max = le16_to_cpu (desc->wMaxPacketSize) & 0x1fff;
|
||||
max = usb_endpoint_maxp (desc) & 0x1fff;
|
||||
if (ep->num > 4 && max > 64)
|
||||
return -ERANGE;
|
||||
|
||||
@@ -1410,17 +1401,18 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int net2280_start(struct usb_gadget_driver *driver,
|
||||
int (*bind)(struct usb_gadget *));
|
||||
static int net2280_stop(struct usb_gadget_driver *driver);
|
||||
static int net2280_start(struct usb_gadget *_gadget,
|
||||
struct usb_gadget_driver *driver);
|
||||
static int net2280_stop(struct usb_gadget *_gadget,
|
||||
struct usb_gadget_driver *driver);
|
||||
|
||||
static const struct usb_gadget_ops net2280_ops = {
|
||||
.get_frame = net2280_get_frame,
|
||||
.wakeup = net2280_wakeup,
|
||||
.set_selfpowered = net2280_set_selfpowered,
|
||||
.pullup = net2280_pullup,
|
||||
.start = net2280_start,
|
||||
.stop = net2280_stop,
|
||||
.udc_start = net2280_start,
|
||||
.udc_stop = net2280_stop,
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@@ -1640,7 +1632,7 @@ show_queues (struct device *_dev, struct device_attribute *attr, char *buf)
|
||||
default:
|
||||
val = "iso"; break;
|
||||
}; val; }),
|
||||
le16_to_cpu (d->wMaxPacketSize) & 0x1fff,
|
||||
usb_endpoint_maxp (d) & 0x1fff,
|
||||
ep->dma ? "dma" : "pio", ep->fifo_size
|
||||
);
|
||||
} else /* ep0 should only have one transfer queued */
|
||||
@@ -1753,8 +1745,6 @@ static void set_fifo_mode (struct net2280 *dev, int mode)
|
||||
* perhaps to bind specific drivers to specific devices.
|
||||
*/
|
||||
|
||||
static struct net2280 *the_controller;
|
||||
|
||||
static void usb_reset (struct net2280 *dev)
|
||||
{
|
||||
u32 tmp;
|
||||
@@ -1880,10 +1870,10 @@ static void ep0_start (struct net2280 *dev)
|
||||
* disconnect is reported. then a host may connect again, or
|
||||
* the driver might get unbound.
|
||||
*/
|
||||
static int net2280_start(struct usb_gadget_driver *driver,
|
||||
int (*bind)(struct usb_gadget *))
|
||||
static int net2280_start(struct usb_gadget *_gadget,
|
||||
struct usb_gadget_driver *driver)
|
||||
{
|
||||
struct net2280 *dev = the_controller;
|
||||
struct net2280 *dev;
|
||||
int retval;
|
||||
unsigned i;
|
||||
|
||||
@@ -1891,14 +1881,11 @@ static int net2280_start(struct usb_gadget_driver *driver,
|
||||
* (dev->usb->xcvrdiag & FORCE_FULL_SPEED_MODE)
|
||||
* "must not be used in normal operation"
|
||||
*/
|
||||
if (!driver
|
||||
|| driver->speed != USB_SPEED_HIGH
|
||||
|| !bind || !driver->setup)
|
||||
if (!driver || driver->speed != USB_SPEED_HIGH
|
||||
|| !driver->setup)
|
||||
return -EINVAL;
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
if (dev->driver)
|
||||
return -EBUSY;
|
||||
|
||||
dev = container_of (_gadget, struct net2280, gadget);
|
||||
|
||||
for (i = 0; i < 7; i++)
|
||||
dev->ep [i].irqs = 0;
|
||||
@@ -1908,14 +1895,6 @@ static int net2280_start(struct usb_gadget_driver *driver,
|
||||
driver->driver.bus = NULL;
|
||||
dev->driver = driver;
|
||||
dev->gadget.dev.driver = &driver->driver;
|
||||
retval = bind(&dev->gadget);
|
||||
if (retval) {
|
||||
DEBUG (dev, "bind to driver %s --> %d\n",
|
||||
driver->driver.name, retval);
|
||||
dev->driver = NULL;
|
||||
dev->gadget.dev.driver = NULL;
|
||||
return retval;
|
||||
}
|
||||
|
||||
retval = device_create_file (&dev->pdev->dev, &dev_attr_function);
|
||||
if (retval) goto err_unbind;
|
||||
@@ -1961,33 +1940,21 @@ stop_activity (struct net2280 *dev, struct usb_gadget_driver *driver)
|
||||
for (i = 0; i < 7; i++)
|
||||
nuke (&dev->ep [i]);
|
||||
|
||||
/* report disconnect; the driver is already quiesced */
|
||||
if (driver) {
|
||||
spin_unlock (&dev->lock);
|
||||
driver->disconnect (&dev->gadget);
|
||||
spin_lock (&dev->lock);
|
||||
}
|
||||
|
||||
usb_reinit (dev);
|
||||
}
|
||||
|
||||
static int net2280_stop(struct usb_gadget_driver *driver)
|
||||
static int net2280_stop(struct usb_gadget *_gadget,
|
||||
struct usb_gadget_driver *driver)
|
||||
{
|
||||
struct net2280 *dev = the_controller;
|
||||
struct net2280 *dev;
|
||||
unsigned long flags;
|
||||
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
if (!driver || driver != dev->driver || !driver->unbind)
|
||||
return -EINVAL;
|
||||
dev = container_of (_gadget, struct net2280, gadget);
|
||||
|
||||
spin_lock_irqsave (&dev->lock, flags);
|
||||
stop_activity (dev, driver);
|
||||
spin_unlock_irqrestore (&dev->lock, flags);
|
||||
|
||||
net2280_pullup (&dev->gadget, 0);
|
||||
|
||||
driver->unbind (&dev->gadget);
|
||||
dev->gadget.dev.driver = NULL;
|
||||
dev->driver = NULL;
|
||||
|
||||
@@ -2266,9 +2233,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat)
|
||||
else
|
||||
dev->gadget.speed = USB_SPEED_FULL;
|
||||
net2280_led_speed (dev, dev->gadget.speed);
|
||||
DEBUG (dev, "%s speed\n",
|
||||
(dev->gadget.speed == USB_SPEED_HIGH)
|
||||
? "high" : "full");
|
||||
DEBUG(dev, "%s\n", usb_speed_string(dev->gadget.speed));
|
||||
}
|
||||
|
||||
ep = &dev->ep [0];
|
||||
@@ -2709,8 +2674,6 @@ static void net2280_remove (struct pci_dev *pdev)
|
||||
pci_set_drvdata (pdev, NULL);
|
||||
|
||||
INFO (dev, "unbind\n");
|
||||
|
||||
the_controller = NULL;
|
||||
}
|
||||
|
||||
/* wrap this driver around the specified device, but
|
||||
@@ -2724,14 +2687,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
void __iomem *base = NULL;
|
||||
int retval, i;
|
||||
|
||||
/* if you want to support more than one controller in a system,
|
||||
* usb_gadget_driver_{register,unregister}() must change.
|
||||
*/
|
||||
if (the_controller) {
|
||||
dev_warn (&pdev->dev, "ignoring\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* alloc, and start init */
|
||||
dev = kzalloc (sizeof *dev, GFP_KERNEL);
|
||||
if (dev == NULL){
|
||||
@@ -2858,8 +2813,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
use_dma
|
||||
? (use_dma_chaining ? "chaining" : "enabled")
|
||||
: "disabled");
|
||||
the_controller = dev;
|
||||
|
||||
retval = device_register (&dev->gadget.dev);
|
||||
if (retval) goto done;
|
||||
retval = device_create_file (&pdev->dev, &dev_attr_registers);
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador