Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3732515imm; Mon, 30 Jul 2018 02:25:12 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfYhWjlBNe2HyZjwV5XKNJnFgpS9yxUIkNaEArvKA+isA9H1T/QOqNtOD38ic07r0gfi0GT X-Received: by 2002:a17:902:724c:: with SMTP id c12-v6mr15402857pll.326.1532942712016; Mon, 30 Jul 2018 02:25:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532942711; cv=none; d=google.com; s=arc-20160816; b=P0LdaZ4u6ujeXUjo9O93xsEthD1Lk82/p5ge/ZX2nSCzlT5EjeSphGwJlkXEUVgkyW z7+yrhvIfLtLkvtFAyctDVDWp6jR+MBglkcehF5QbEM0eff99MBLCdVjZV1h2IcXrUGj IRq2GhEAZYT7eMUtGVs33aCsv6gY/9avSBzVwrEFnPZEh2cZIg+tcNqHGksMxQofRcBH nL6xo8QV4w/ysJTJXbegghx4jdIGdbT/tSJ90/uoREbOk1swloZAmoDSiV4Irt2QVx/x ypZg24mDxAfSEpfGxkHB5oBOkY2jfmnL5Y+D0unFo+FwXDu681YQa+dO/L533PPEuP3m M7yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=etcZXdP4piwOyvLMoEu1q5tNAJz/CBz/Rc1s9YhPc4k=; b=jQ7I5bv/omVLqSBJlOI2ncy68XD0JnTkgamrOMfEaQI4PZQjEdbzRUFGPvb8ajzLiq +80L2y1hXoYq1iMpI0CYEGXtBqZeTlbe9VwzIlf/SADeoGJnVUFFVUKEOlwX/cOyLo85 U4VjC3WQdQYgfnlwFZh/9O/f4BoXhfYbzyIdAI1YuKGlEmZY6tupevG3HeaH20dacIU5 2lDjht4UBotAOsc7Ll5okQig0a63MctLM9xMDm60zVRnJGEHlr6D0tAcTkLC5qeRJY/0 0nlPRULFn67Opi3dUj1cQrlYlPrqIso8R8L7KApeotrfat6MYA5VulV/me17y8L5pt74 0FZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=codethink.co.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i35-v6si3238221plg.460.2018.07.30.02.24.57; Mon, 30 Jul 2018 02:25:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=codethink.co.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726828AbeG3K5s (ORCPT + 99 others); Mon, 30 Jul 2018 06:57:48 -0400 Received: from imap1.codethink.co.uk ([176.9.8.82]:56186 "EHLO imap1.codethink.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726637AbeG3K5s (ORCPT ); Mon, 30 Jul 2018 06:57:48 -0400 Received: from [148.252.241.226] (helo=ct-lt-1121.office.codethink.co.uk) by imap1.codethink.co.uk with esmtpsa (Exim 4.84_2 #1 (Debian)) id 1fk4Oy-0004qJ-AH; Mon, 30 Jul 2018 10:23:40 +0100 From: Jorge Sanjuan To: tiwai@suse.de Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 0/4] usb-audio: Add UAC3 Power Domains Date: Mon, 30 Jul 2018 10:23:32 +0100 Message-Id: <20180730092336.18741-1-jorge.sanjuan@codethink.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180719112215.4219-1-jorge.sanjuan@codethink.co.uk> References: <20180719112215.4219-1-jorge.sanjuan@codethink.co.uk> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is what's new in this v2: - Fixes build error reported by kbuild for multiple configs (missing include of linux/slab.h). - Makes function `snd_usb_add_audio_stream_v3` static for now as no one is using it outside sound/usb/stream.c (suggested by kbuild). - Re-organization of patches so the bit that is not tied up to usb's runtime PM (See patch: "ALSA: usb-audio: Operate UAC3 Power Domains in PCM callbacks") is the last patch of the series. This is likely to need feature improvements to tie it up to runtime PM. This patchset adds support for UAC3 Power Domains. This feature of the USB audio class 3 allows the host to notify the device what it is making use of so power comsumption can be optimized. This proposal implements this feature for Power Domains that include an Input/Output Terminal associated to an audio Streaming interface. This is the main usage of this feature according to the spec. For that reason, the logic for the Power Domain state change has been implemented within the ALSA PCMs logic and the suspend/resume callbacks of the usb_driver. The behaviour would be as follows: * Power Domain State D0: A Power Domain will reach this state only when the audio substream associated to that domain is being used (i,e. Audio playback/capture is happening). * Power Domain State D1: This is the Idle state where the driver is going to always want to be in order to reduce power consumption. * Power Domain State D2: This state is only set when the usb driver asumes the device is not going to be used anymore and hence, it wont care about getting any interrupts from the device. This will only happen when power level is set to "auto" in sysfs so the usb driver gets suspended when the interfaces are not in use. NOTE: The way this has been implemented will always try to put the Power Domain in state D1 if the Power Domain exists. The patch "ALSA: usb-audio: Operate UAC3 Power Domains in PCM callbacks" puts the logic for doing so inside the PCM's logic. Something to improve on that is to also tie up those D1<->D0 state changes to runtime PM maybe. Jorge Sanjuan (4): ALSA: usb-audio: Initial Power Domain support ALSA: usb-audio: AudioStreaming Power Domain parsing ALSA: usb-audio: Add UAC3 Power Domains to suspend/resume ALSA: usb-audio: Operate UAC3 Power Domains in PCM callbacks include/linux/usb/audio-v3.h | 4 ++ sound/usb/Makefile | 1 + sound/usb/card.c | 9 ++++ sound/usb/card.h | 2 + sound/usb/pcm.c | 64 +++++++++++++++++++++-- sound/usb/pcm.h | 2 + sound/usb/power.c | 118 +++++++++++++++++++++++++++++++++++++++++++ sound/usb/power.h | 19 +++++++ sound/usb/stream.c | 70 ++++++++++++++++++++++--- 9 files changed, 278 insertions(+), 11 deletions(-) create mode 100644 sound/usb/power.c -- 2.11.0