Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp18750pxx; Wed, 28 Oct 2020 16:46:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxtxi07qwOf5Swmfyd/owHNR2ihv7NqNbiay3DN9kV/6LAdF6pUS4fFgMYEjEoGSXrQnJm5 X-Received: by 2002:a17:906:11d6:: with SMTP id o22mr1533232eja.171.1603928797953; Wed, 28 Oct 2020 16:46:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603928797; cv=none; d=google.com; s=arc-20160816; b=RHbD1Bp/yyOZVZHM7hf2jhJ0ksuRiHN2A5S5pU3WvEiyDvuLs6UtUdJWC+CBPgywj8 Uq5WUyFpdPV1iJypE2McdGvrpAjPzy7fZu2a8RhXAIBjdL4Smlnd0w+uGrRkNTip7v/U h6Q0aM5pcckY5zePA1rqWtc0omFI085nZAi9Pc/3Snsvp1CjEP4ZdiNslU1Pihn38sv1 RBuzH3jlxFNZ2jCD8nkg9SrS244DWKYcSiZI837Pq1/jBYOO4LXKChC7IBsZ3KYaUjZ8 zZlAwQAPTkSnHAnI4Y2RXv9eKo7mjbn31V42cwZidWXBtH0Yn6zHwS7OOtAEnAUGbO5+ YEXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=xht2uNZAIX5U2P4vlg3049+636CJvqI/it3IYYCQ9uQ=; b=TmhgdPDkBT0MxmKk7MgtQnwvJQ9n3ZUsVm80LEJnp+03bW4HPHSsvMpzadjIzCH28Z 2ZU9cJ2ztOke/sTj2rEm1A2F7CBKcKRcaKeVc3cuQoNAMh8Bp5P+1wskf17t3IZEGUrc jx93BjXZ1HXQui+CVvQnwAhP9qLoS3/WKG/Dk4KQ6MaACPxjfhPHr/9F5Nd2Zrm7P6ST QQE7Dovopdz7EDdBNUiEY/tPS9/t51crKVw6CT93RQUPSCNEEZqjvzThTD7rpj6qd6oW Q/DKT96InUB874+N3cVp2KvbiAKPTaIXIhpVLZwocBq5WEo/3L3bGgpU1vCETvefvY+b RSzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=G+Vy7vW9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ca10si763248edb.170.2020.10.28.16.46.03; Wed, 28 Oct 2020 16:46:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=G+Vy7vW9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388045AbgJ1XoA (ORCPT + 99 others); Wed, 28 Oct 2020 19:44:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388114AbgJ1WvH (ORCPT ); Wed, 28 Oct 2020 18:51:07 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52972C0613CF for ; Wed, 28 Oct 2020 15:51:06 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id 2so961152ljj.13 for ; Wed, 28 Oct 2020 15:51:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=xht2uNZAIX5U2P4vlg3049+636CJvqI/it3IYYCQ9uQ=; b=G+Vy7vW9jYQ4G4gsGIjnfxrI8tXAnoX2ZcNMsN3La8GReilyCGiagAkc6vFnavE4qH SaLmg88oUtB8v0TWekXEDfpTabMzkF2kKYvOljmZRg5ogaxaaqHBorI+0MUJBQbFptTo VoWyZK6iam2cE5+Xy7kMj0IkVJrivgMYdUb/8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xht2uNZAIX5U2P4vlg3049+636CJvqI/it3IYYCQ9uQ=; b=h8Mlnu2FjNWrpyQnOXa355xYy5cfMl7/u1/MlI5y0/W3bwwKG7rUS8ZFGskH2jVApi 8DPMkGJr+vvrjzkcSVigpY3EVEHRoh6Im+v43bcGFD2NhiMYOPmXIYuG806tW+Hodliv dyavn2JnXndexWbSgYsdKxKr8AXUKWucbWdeWYvTc2eYq18Jk7/oTvQB/gq0lnD2KzuJ FbjzOaQ+xgsJnMEXBkiUAtKSmb8v7t6mW6D7fAwWlklqnXvLU+OJiy/5t4mrgtyrSHCy QQyDxgcSy4Qwnp67A76vJhtByEuC8x5Xd/H4OD1HtIYHgASvmZx35dsYLC69FBQC0LiM a8pA== X-Gm-Message-State: AOAM533GVXuf2hF9TUqjg69jchF1650X4vHCCxPq2BattuzsE3CplEFm aD8gQq8SeuVbUfRhtsfmvMvgE6BcXslaHTBpwCtYrMMwTe4VVuhIMIg= X-Received: by 2002:adf:d4ce:: with SMTP id w14mr9747522wrk.142.1603897907527; Wed, 28 Oct 2020 08:11:47 -0700 (PDT) MIME-Version: 1.0 References: <20201022133753.310506-1-ribalda@chromium.org> <20201022133753.310506-7-ribalda@chromium.org> In-Reply-To: <20201022133753.310506-7-ribalda@chromium.org> From: Ricardo Ribalda Date: Wed, 28 Oct 2020 16:11:36 +0100 Message-ID: Subject: Re: [PATCH 6/6] media: uvcvideo: Handle IRQs from the privacy_pin To: Laurent Pinchart , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Tomasz Figa Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi On Thu, Oct 22, 2020 at 3:38 PM Ricardo Ribalda wrote: > > If the privacy pin produces an IRQ, read the gpio and notify userspace > via an event. > > Signed-off-by: Ricardo Ribalda > --- > drivers/media/usb/uvc/uvc_ctrl.c | 3 +++ > drivers/media/usb/uvc/uvc_driver.c | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 3a49a1326a90..00c41cba0f68 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -1346,6 +1346,9 @@ static void uvc_ctrl_status_event_work(struct work_struct *work) > > mutex_unlock(&chain->ctrl_mutex); > > + if (!w->urb) > + return; > + > /* Resubmit the URB. */ > w->urb->interval = dev->int_ep->desc.bInterval; > ret = usb_submit_urb(w->urb, GFP_KERNEL); > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c > index 180e503e900f..d1260d131bd8 100644 > --- a/drivers/media/usb/uvc/uvc_driver.c > +++ b/drivers/media/usb/uvc/uvc_driver.c > @@ -1460,6 +1460,25 @@ static int uvc_gpio_get_info(struct uvc_entity *entity, u8 cs, u8 *caps) > return 0; > } > > +static irqreturn_t uvc_privacy_gpio_irq(int irq, void *data) > +{ > + struct uvc_device *dev = data; > + struct uvc_video_chain *chain; > + struct uvc_entity *term; > + u8 value; > + > + list_for_each_entry(chain, &dev->chains, list) { > + list_for_each_entry(term, &dev->entities, list) { > + if (UVC_ENTITY_TYPE(term) == UVC_GPIO_UNIT) { > + value = gpiod_get_value(term->gpio.gpio_privacy); > + uvc_ctrl_status_event(NULL, chain, term->controls, &value); > + } > + } > + } > + > + return IRQ_HANDLED; > +} > + > static int uvc_parse_gpio(struct uvc_device *dev) > { > struct uvc_entity *unit; > @@ -1490,6 +1509,17 @@ static int uvc_parse_gpio(struct uvc_device *dev) > > list_add_tail(&unit->list, &dev->entities); > > + irq = gpiod_to_irq(gpio_privacy); > + > + if (irq == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + > + if (irq < 0) > + return 0; > + > + ret = devm_request_irq(&dev->udev->dev, irq, uvc_privacy_gpio_irq, IRQF_SHARED, > + "uvc_privacy_gpio", dev); Here it should say IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING instead of IRQF_SHARED. I will fix that on v2, > + > return 0; > } > > -- > 2.29.0.rc1.297.gfa9743e501-goog >