Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1578466imm; Thu, 19 Jul 2018 04:24:24 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfI05R3ldr8JHiTzHQxUYZOuJl5h2yKI9kucPD6slT8GAKR1WC6RKxr0xKzygJH7ZWhEkkP X-Received: by 2002:a62:9d14:: with SMTP id i20-v6mr9177433pfd.3.1531999464515; Thu, 19 Jul 2018 04:24:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531999464; cv=none; d=google.com; s=arc-20160816; b=AZ9TjNL7h7FEabYa0JOmWGYEgYJ1k+PVGvDoBKTzn9GsLec2oLnSHgjCTfeRrNNfuQ kP74S8Vult2TYo20Cz52Wfgmz3mwU/00oBHWBSLd393M06K/1jXpP+J5ApQ7EWz3g1Qo uiLoXfZnLRN0JPT6URyic5tkckEarsYeTkQZr0lkbswvy18hhgrf7RvPJYIpEoLEFXla zwk7GHbRY8GQksgUa2uaVB17EJK3s2XyYXcw5XMEY5noIVB9KakRipCusHMTfbf+zmYY TuCj2v+RCM6y867+PdjwZxSyUhqJfQGtaojPR7KwVkmfYQmfLGRnfENatX18Um9qgYI9 Yffg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=HKCWisBCM8abj4Sa5JoagRtwKpNVnP5uZLqgreH1ceU=; b=a0v0hx3I1clhoG6HqqyT9LVXBqc7sJe9YwtPgpzTY3wNVIiS71Y+kH601gf8wLC4/L hYvBXADXbn9uRAMHFsNJpbisjmF3C38yN9PqKDpkrCMLBdN27iR/ZCrLbSC64K1Co9/b jrCNqgy/yReZDD/bEQVlkWlJ/I/0W07GDD+Nq4vixDXR3kb3CfMk8FFa64NEMI0Q0UuI OivOpsvdKo767VLuzGMdkqsmV9uo+6JFZSL19WLLc5iDLXesN9G3jDVy2u7atElYg4Lg YpVSb1pAUF69+YHbnWVMjA/orAizgWZJMFCuo8PXVNCPfN8cRzAZPlw0Wjm36rn6t4YZ Pg7Q== 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 j17-v6si5646694pfk.203.2018.07.19.04.24.10; Thu, 19 Jul 2018 04:24:24 -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 S1730433AbeGSMFD (ORCPT + 99 others); Thu, 19 Jul 2018 08:05:03 -0400 Received: from imap1.codethink.co.uk ([176.9.8.82]:59734 "EHLO imap1.codethink.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727575AbeGSMFD (ORCPT ); Thu, 19 Jul 2018 08:05:03 -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 1fg70k-0004fU-IF; Thu, 19 Jul 2018 12:22:18 +0100 From: Jorge Sanjuan To: tiwai@suse.de Cc: alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [PATCH 0/4] usb-audio: Add UAC3 Power Domains Date: Thu, 19 Jul 2018 12:22:11 +0100 Message-Id: <20180719112215.4219-1-jorge.sanjuan@codethink.co.uk> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patchset add 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 so there is not a way a user could disable this feature. It may be worth getting a control exposed to userland that enables/disables this feature (?). Power Domains affecting other units independently are required to be bypassed via a Selector Unit first before the host can change the power state. This sceneario is not covered in this patchset. based on next-20180719 Jorge Sanjuan (4): ALSA: usb-audio: Initial Power Domain support ALSA: usb-audio: AudioStreaming Power Domain parsing ALSA: usb-audio: Operate UAC3 Power Domains in PCM callbacks ALSA: usb-audio: Add UAC3 Power Domains to suspend/resume 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 | 117 +++++++++++++++++++++++++++++++++++++++++++ sound/usb/power.h | 19 +++++++ sound/usb/stream.c | 70 +++++++++++++++++++++++--- 9 files changed, 277 insertions(+), 11 deletions(-) create mode 100644 sound/usb/power.c -- 2.11.0