mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge remote-tracking branch 'linus/master' into staging/for_v3.5
* linus/master: (805 commits) tty: Fix LED error return openvswitch: checking wrong variable in queue_userspace_packet() bonding: Fix LACPDU rx_dropped commit. Linux 3.4-rc7 ARM: EXYNOS: fix ctrlbit for exynos5_clk_pdma1 ARM: EXYNOS: use s5p-timer for UniversalC210 board ARM / mach-shmobile: Invalidate caches when booting secondary cores ARM / mach-shmobile: sh73a0 SMP TWD boot regression fix ARM / mach-shmobile: r8a7779 SMP TWD boot regression fix ARM: mach-shmobile: convert ag5evm to use the generic MMC GPIO hotplug helper ARM: mach-shmobile: convert mackerel to use the generic MMC GPIO hotplug helper MAINTAINERS: Add myself as the cpufreq maintainer dm mpath: check if scsi_dh module already loaded before trying to load dm thin: correct module description dm thin: fix unprotected use of prepared_discards list dm thin: reinstate missing mempool_free in cell_release_singleton gpio/exynos: Fix compiler warnings when non-exynos machines are selected gpio: pch9: Use proper flow type handlers powerpc/irq: Fix another case of lazy IRQ state getting out of sync ks8851: Update link status during link change interrupt ... Conflicts: drivers/media/common/tuners/xc5000.c drivers/media/common/tuners/xc5000.h drivers/usb/gadget/uvc_queue.c
This commit is contained in:
@@ -1863,8 +1863,8 @@ static int __devinit at91udc_probe(struct platform_device *pdev)
|
||||
mod_timer(&udc->vbus_timer,
|
||||
jiffies + VBUS_POLL_TIMEOUT);
|
||||
} else {
|
||||
if (request_irq(udc->board.vbus_pin, at91_vbus_irq,
|
||||
0, driver_name, udc)) {
|
||||
if (request_irq(gpio_to_irq(udc->board.vbus_pin),
|
||||
at91_vbus_irq, 0, driver_name, udc)) {
|
||||
DBG("request vbus irq %d failed\n",
|
||||
udc->board.vbus_pin);
|
||||
retval = -EBUSY;
|
||||
@@ -1886,7 +1886,7 @@ static int __devinit at91udc_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
fail4:
|
||||
if (gpio_is_valid(udc->board.vbus_pin) && !udc->board.vbus_polled)
|
||||
free_irq(udc->board.vbus_pin, udc);
|
||||
free_irq(gpio_to_irq(udc->board.vbus_pin), udc);
|
||||
fail3:
|
||||
if (gpio_is_valid(udc->board.vbus_pin))
|
||||
gpio_free(udc->board.vbus_pin);
|
||||
@@ -1924,7 +1924,7 @@ static int __exit at91udc_remove(struct platform_device *pdev)
|
||||
device_init_wakeup(&pdev->dev, 0);
|
||||
remove_debug_file(udc);
|
||||
if (gpio_is_valid(udc->board.vbus_pin)) {
|
||||
free_irq(udc->board.vbus_pin, udc);
|
||||
free_irq(gpio_to_irq(udc->board.vbus_pin), udc);
|
||||
gpio_free(udc->board.vbus_pin);
|
||||
}
|
||||
free_irq(udc->udp_irq, udc);
|
||||
|
||||
@@ -927,7 +927,6 @@ static int dummy_udc_stop(struct usb_gadget *g,
|
||||
|
||||
dum->driver = NULL;
|
||||
|
||||
dummy_pullup(&dum->gadget, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -712,7 +712,7 @@ static long ffs_ep0_ioctl(struct file *file, unsigned code, unsigned long value)
|
||||
if (code == FUNCTIONFS_INTERFACE_REVMAP) {
|
||||
struct ffs_function *func = ffs->func;
|
||||
ret = func ? ffs_func_revmap_intf(func, value) : -ENODEV;
|
||||
} else if (gadget->ops->ioctl) {
|
||||
} else if (gadget && gadget->ops->ioctl) {
|
||||
ret = gadget->ops->ioctl(gadget, code, value);
|
||||
} else {
|
||||
ret = -ENOTTY;
|
||||
@@ -1382,6 +1382,7 @@ static void functionfs_unbind(struct ffs_data *ffs)
|
||||
ffs->ep0req = NULL;
|
||||
ffs->gadget = NULL;
|
||||
ffs_data_put(ffs);
|
||||
clear_bit(FFS_FL_BOUND, &ffs->flags);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2189,7 +2189,7 @@ unknown_cmnd:
|
||||
common->data_size_from_cmnd = 0;
|
||||
sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
|
||||
reply = check_command(common, common->cmnd_size,
|
||||
DATA_DIR_UNKNOWN, 0xff, 0, unknown);
|
||||
DATA_DIR_UNKNOWN, ~0, 0, unknown);
|
||||
if (reply == 0) {
|
||||
common->curlun->sense_data = SS_INVALID_COMMAND;
|
||||
reply = -EINVAL;
|
||||
|
||||
@@ -500,6 +500,7 @@ rndis_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
|
||||
if (buf) {
|
||||
memcpy(req->buf, buf, n);
|
||||
req->complete = rndis_response_complete;
|
||||
req->context = rndis;
|
||||
rndis_free_response(rndis->config, buf);
|
||||
value = n;
|
||||
}
|
||||
|
||||
@@ -2579,7 +2579,7 @@ static int do_scsi_command(struct fsg_dev *fsg)
|
||||
fsg->data_size_from_cmnd = 0;
|
||||
sprintf(unknown, "Unknown x%02x", fsg->cmnd[0]);
|
||||
if ((reply = check_command(fsg, fsg->cmnd_size,
|
||||
DATA_DIR_UNKNOWN, 0xff, 0, unknown)) == 0) {
|
||||
DATA_DIR_UNKNOWN, ~0, 0, unknown)) == 0) {
|
||||
fsg->curlun->sense_data = SS_INVALID_COMMAND;
|
||||
reply = -EINVAL;
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
|
||||
: (1 << (ep_index(ep)));
|
||||
|
||||
/* check if the pipe is empty */
|
||||
if (!(list_empty(&ep->queue))) {
|
||||
if (!(list_empty(&ep->queue)) && !(ep_index(ep) == 0)) {
|
||||
/* Add td to the end */
|
||||
struct fsl_req *lastreq;
|
||||
lastreq = list_entry(ep->queue.prev, struct fsl_req, queue);
|
||||
@@ -918,10 +918,6 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Update ep0 state */
|
||||
if ((ep_index(ep) == 0))
|
||||
udc->ep0_state = DATA_STATE_XMIT;
|
||||
|
||||
/* irq handler advances the queue */
|
||||
if (req != NULL)
|
||||
list_add_tail(&req->queue, &ep->queue);
|
||||
@@ -1279,7 +1275,8 @@ static int ep0_prime_status(struct fsl_udc *udc, int direction)
|
||||
udc->ep0_dir = USB_DIR_OUT;
|
||||
|
||||
ep = &udc->eps[0];
|
||||
udc->ep0_state = WAIT_FOR_OUT_STATUS;
|
||||
if (udc->ep0_state != DATA_STATE_XMIT)
|
||||
udc->ep0_state = WAIT_FOR_OUT_STATUS;
|
||||
|
||||
req->ep = ep;
|
||||
req->req.length = 0;
|
||||
@@ -1384,6 +1381,9 @@ static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
|
||||
|
||||
list_add_tail(&req->queue, &ep->queue);
|
||||
udc->ep0_state = DATA_STATE_XMIT;
|
||||
if (ep0_prime_status(udc, EP_DIR_OUT))
|
||||
ep0stall(udc);
|
||||
|
||||
return;
|
||||
stall:
|
||||
ep0stall(udc);
|
||||
@@ -1492,6 +1492,14 @@ static void setup_received_irq(struct fsl_udc *udc,
|
||||
spin_lock(&udc->lock);
|
||||
udc->ep0_state = (setup->bRequestType & USB_DIR_IN)
|
||||
? DATA_STATE_XMIT : DATA_STATE_RECV;
|
||||
/*
|
||||
* If the data stage is IN, send status prime immediately.
|
||||
* See 2.0 Spec chapter 8.5.3.3 for detail.
|
||||
*/
|
||||
if (udc->ep0_state == DATA_STATE_XMIT)
|
||||
if (ep0_prime_status(udc, EP_DIR_OUT))
|
||||
ep0stall(udc);
|
||||
|
||||
} else {
|
||||
/* No data phase, IN status from gadget */
|
||||
udc->ep0_dir = USB_DIR_IN;
|
||||
@@ -1520,9 +1528,8 @@ static void ep0_req_complete(struct fsl_udc *udc, struct fsl_ep *ep0,
|
||||
|
||||
switch (udc->ep0_state) {
|
||||
case DATA_STATE_XMIT:
|
||||
/* receive status phase */
|
||||
if (ep0_prime_status(udc, EP_DIR_OUT))
|
||||
ep0stall(udc);
|
||||
/* already primed at setup_received_irq */
|
||||
udc->ep0_state = WAIT_FOR_OUT_STATUS;
|
||||
break;
|
||||
case DATA_STATE_RECV:
|
||||
/* send status phase */
|
||||
|
||||
@@ -161,7 +161,7 @@ static struct usb_composite_driver gfs_driver = {
|
||||
static struct ffs_data *gfs_ffs_data;
|
||||
static unsigned long gfs_registered;
|
||||
|
||||
static int gfs_init(void)
|
||||
static int __init gfs_init(void)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
@@ -169,7 +169,7 @@ static int gfs_init(void)
|
||||
}
|
||||
module_init(gfs_init);
|
||||
|
||||
static void gfs_exit(void)
|
||||
static void __exit gfs_exit(void)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
|
||||
@@ -340,7 +340,7 @@ static void s3c_hsotg_init_fifo(struct s3c_hsotg *hsotg)
|
||||
/* currently we allocate TX FIFOs for all possible endpoints,
|
||||
* and assume that they are all the same size. */
|
||||
|
||||
for (ep = 0; ep <= 15; ep++) {
|
||||
for (ep = 1; ep <= 15; ep++) {
|
||||
val = addr;
|
||||
val |= size << S3C_DPTXFSIZn_DPTxFSize_SHIFT;
|
||||
addr += size;
|
||||
@@ -741,7 +741,7 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
|
||||
/* write size / packets */
|
||||
writel(epsize, hsotg->regs + epsize_reg);
|
||||
|
||||
if (using_dma(hsotg)) {
|
||||
if (using_dma(hsotg) && !continuing) {
|
||||
unsigned int dma_reg;
|
||||
|
||||
/* write DMA address to control register, buffer already
|
||||
@@ -1696,10 +1696,12 @@ static void s3c_hsotg_set_ep_maxpacket(struct s3c_hsotg *hsotg,
|
||||
reg |= mpsval;
|
||||
writel(reg, regs + S3C_DIEPCTL(ep));
|
||||
|
||||
reg = readl(regs + S3C_DOEPCTL(ep));
|
||||
reg &= ~S3C_DxEPCTL_MPS_MASK;
|
||||
reg |= mpsval;
|
||||
writel(reg, regs + S3C_DOEPCTL(ep));
|
||||
if (ep) {
|
||||
reg = readl(regs + S3C_DOEPCTL(ep));
|
||||
reg &= ~S3C_DxEPCTL_MPS_MASK;
|
||||
reg |= mpsval;
|
||||
writel(reg, regs + S3C_DOEPCTL(ep));
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -1919,7 +1921,8 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
|
||||
ints & S3C_DIEPMSK_TxFIFOEmpty) {
|
||||
dev_dbg(hsotg->dev, "%s: ep%d: TxFIFOEmpty\n",
|
||||
__func__, idx);
|
||||
s3c_hsotg_trytx(hsotg, hs_ep);
|
||||
if (!using_dma(hsotg))
|
||||
s3c_hsotg_trytx(hsotg, hs_ep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,9 +263,9 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
|
||||
|
||||
if (udc_is_newstyle(udc)) {
|
||||
udc->driver->disconnect(udc->gadget);
|
||||
usb_gadget_disconnect(udc->gadget);
|
||||
udc->driver->unbind(udc->gadget);
|
||||
usb_gadget_udc_stop(udc->gadget, udc->driver);
|
||||
usb_gadget_disconnect(udc->gadget);
|
||||
} else {
|
||||
usb_gadget_stop(udc->gadget, udc->driver);
|
||||
}
|
||||
@@ -411,9 +411,13 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
|
||||
struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
|
||||
|
||||
if (sysfs_streq(buf, "connect")) {
|
||||
if (udc_is_newstyle(udc))
|
||||
usb_gadget_udc_start(udc->gadget, udc->driver);
|
||||
usb_gadget_connect(udc->gadget);
|
||||
} else if (sysfs_streq(buf, "disconnect")) {
|
||||
usb_gadget_disconnect(udc->gadget);
|
||||
if (udc_is_newstyle(udc))
|
||||
usb_gadget_udc_stop(udc->gadget, udc->driver);
|
||||
} else {
|
||||
dev_err(dev, "unsupported command '%s'\n", buf);
|
||||
return -EINVAL;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
struct uvc_request_data
|
||||
{
|
||||
unsigned int length;
|
||||
__s32 length;
|
||||
__u8 data[60];
|
||||
};
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ uvc_send_response(struct uvc_device *uvc, struct uvc_request_data *data)
|
||||
if (data->length < 0)
|
||||
return usb_ep_set_halt(cdev->gadget->ep0);
|
||||
|
||||
req->length = min(uvc->event_length, data->length);
|
||||
req->length = min_t(unsigned int, uvc->event_length, data->length);
|
||||
req->zero = data->length < uvc->event_length;
|
||||
req->dma = DMA_ADDR_INVALID;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user