From patchwork Tue Sep 22 08:18:05 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Terry Heo X-Patchwork-Id: 7236351 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id CAC0E9F4DC for ; Tue, 22 Sep 2015 08:18:26 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id EE547207ED for ; Tue, 22 Sep 2015 08:18:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 063CE207EB for ; Tue, 22 Sep 2015 08:18:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757435AbbIVISW (ORCPT ); Tue, 22 Sep 2015 04:18:22 -0400 Received: from mail-pa0-f46.google.com ([209.85.220.46]:33298 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753746AbbIVIST (ORCPT ); Tue, 22 Sep 2015 04:18:19 -0400 Received: by pacex6 with SMTP id ex6so2987710pac.0 for ; Tue, 22 Sep 2015 01:18:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=Lg++j0pdbw5mYp8esHAlcyvBZa4m7UQm06Os3y9yV3c=; b=nTpNz35181NYwdPCM1SN8sbt0z33507aoj1V3MFQp4IbcrU8WEI+XlnvXIm7tzhPw+ TLM1CGbCZKSgRLf0O+bh1GCnIWvgkIxMtVpZseXksU9M9n0d1ApADLkCQX6VxLQ5TayQ /lblV4i+DDhN6/lTFtxTaGVMuSGifJ127kgflJyPZhgb2PknaCEWXP2BNZm5CanHZpV8 WRUQwb2t7A95AGp2XuqeAopDQ5AQgfsK+dKzOGT9A1YX480Zg0ditYI5jK/AsSRIcylS KuFEySYZkFmHToLLR0i7EzVTVWkaZkgpe6uISzic96N4J5zFSUagTDoFrBwYNuv6aL5k ClKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Lg++j0pdbw5mYp8esHAlcyvBZa4m7UQm06Os3y9yV3c=; b=Vm0RhsXZDIVdvP+fsWuQBCfLWdKPCszmF+hAkVZX1QRw4m9II/DM5MBSqunKDJ8F/f R+HZrixZv3/uvcRL3/ikIbqtLjPgmjY+6t+4Ro4pQd1IUKLTBWC38sgtcteGBK983sG9 kXRukbbtP0DWOUJUTlt4zjC7UhRXQpVjSfIb/JW27dR2Bdwm/XHCoVw38925WKHSH3Jo F1F3d88FUZxxmFlhk9L6wn/BB2v8zTZ7uCn/wWlnj6o6ldsEt1ojUsneiSOiatnX3jnj SdLTMwIrxmyC/LI5nruzOIDuDKXXgp+DmKVJl7tbbJQ2en6XLEz1m3NvD5uA1av98rXy +eoA== X-Gm-Message-State: ALoCoQka2TBNh9rbEGYPrjdgd5YTr4clllzuHLeWb8X0Nc/eUt0pg/wO78E7TN2qf/CMwzr543wV X-Received: by 10.66.142.202 with SMTP id ry10mr30678240pab.86.1442909899124; Tue, 22 Sep 2015 01:18:19 -0700 (PDT) Received: from terryheo1.seo.corp.google.com ([172.30.114.72]) by smtp.gmail.com with ESMTPSA id fe8sm658059pab.40.2015.09.22.01.18.18 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Sep 2015 01:18:18 -0700 (PDT) Received: by terryheo1.seo.corp.google.com (Postfix, from userid 116896) id A9E5D83430; Tue, 22 Sep 2015 17:18:15 +0900 (KST) From: Terry Heo To: linux-media@vger.kernel.org Cc: Terry Heo Subject: [PATCH] [media] cx231xx: fix bulk transfer mode Date: Tue, 22 Sep 2015 17:18:05 +0900 Message-Id: <1442909885-26277-1-git-send-email-terryheo@google.com> X-Mailer: git-send-email 2.6.0.rc0.131.gf624c3d Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The current cx231xx driver doesn't work with bulk transfer mode. This patch makes it possible to use bulk transfer mode. Signed-off-by: Terry Heo --- drivers/media/usb/cx231xx/cx231xx-core.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/media/usb/cx231xx/cx231xx-core.c b/drivers/media/usb/cx231xx/cx231xx-core.c index a2fd49b..f497888 100644 --- a/drivers/media/usb/cx231xx/cx231xx-core.c +++ b/drivers/media/usb/cx231xx/cx231xx-core.c @@ -914,6 +914,7 @@ EXPORT_SYMBOL_GPL(cx231xx_uninit_isoc); */ void cx231xx_uninit_bulk(struct cx231xx *dev) { + struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; struct urb *urb; int i; @@ -931,7 +932,7 @@ void cx231xx_uninit_bulk(struct cx231xx *dev) if (dev->video_mode.bulk_ctl.transfer_buffer[i]) { usb_free_coherent(dev->udev, urb->transfer_buffer_length, - dev->video_mode.isoc_ctl. + dev->video_mode.bulk_ctl. transfer_buffer[i], urb->transfer_dma); } @@ -943,10 +944,12 @@ void cx231xx_uninit_bulk(struct cx231xx *dev) kfree(dev->video_mode.bulk_ctl.urb); kfree(dev->video_mode.bulk_ctl.transfer_buffer); + kfree(dma_q->p_left_data); dev->video_mode.bulk_ctl.urb = NULL; dev->video_mode.bulk_ctl.transfer_buffer = NULL; dev->video_mode.bulk_ctl.num_bufs = 0; + dma_q->p_left_data = NULL; if (dev->mode_tv == 0) cx231xx_capture_start(dev, 0, Raw_Video); @@ -1196,6 +1199,16 @@ int cx231xx_init_bulk(struct cx231xx *dev, int max_packets, sb_size, cx231xx_bulk_irq_callback, dma_q); } + /* clear halt */ + rc = usb_clear_halt(dev->udev, dev->video_mode.bulk_ctl.urb[0]->pipe); + if (rc < 0) { + dev_err(dev->dev, + "failed to clear USB bulk endpoint stall/halt condition (error=%i)\n", + rc); + cx231xx_uninit_bulk(dev); + return rc; + } + init_waitqueue_head(&dma_q->wq); /* submit urbs and enables IRQ */