From patchwork Sun Nov 27 11:11:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Hasler X-Patchwork-Id: 9448749 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 261636071C for ; Sun, 27 Nov 2016 11:11:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19771200E7 for ; Sun, 27 Nov 2016 11:11:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0C38820748; Sun, 27 Nov 2016 11:11:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 98BC1200E7 for ; Sun, 27 Nov 2016 11:11:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753895AbcK0LLR (ORCPT ); Sun, 27 Nov 2016 06:11:17 -0500 Received: from mail-wj0-f193.google.com ([209.85.210.193]:36725 "EHLO mail-wj0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753640AbcK0LLQ (ORCPT ); Sun, 27 Nov 2016 06:11:16 -0500 Received: by mail-wj0-f193.google.com with SMTP id jb2so10589288wjb.3 for ; Sun, 27 Nov 2016 03:11:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :in-reply-to:user-agent; bh=Xxd0CY4kMpUJHZrXMVsdtVIhJfQMkb6osk5SHyz/Rlk=; b=k1RYAvjw1oDT9EXHtKjG8DyweFdxkehpojhoctpIyfLs8X23pVKU2rVu9aP518jw/O a/ymFwikUrlxkWPfWXs0FDMia4fL6Q93vMV1Dgx50f/JNIeaQoQwuYXR6Gq13vK+785j yYKBfkLje9UQPcZmAs/hd+2a8CRS/wyvqjkpBQPP9f0TJ/299FgAswuWi0cuYFSjPR24 vOFe0B+0UDcNClGwKVbNFcUz3RZ1wfs6Wv9v8irp4QsGB895W8seQ2uDAum104OdtyXl rAbaGb6aQEqOZKWo6Rb/M7sL67TFgJdWS3nNa4YSI8R4+wA8dknPvMgBlnp5HcbCnOAN 6TBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:in-reply-to:user-agent; bh=Xxd0CY4kMpUJHZrXMVsdtVIhJfQMkb6osk5SHyz/Rlk=; b=ZUcCq4kJO73fi3jRa0vyjrxKpjCviFLcAkYpmGDTQ30ja93w/6Y5KMtrM1GQGTI2/n QZ88WoiuxRtaTbSTL2baj9oKNooCwiI7pSF/19hjJ0CNApVvd844ebYVadGvEbEP15RL j3FqgDqvHDpWe0DpZgGTaH6Pz6a8aqnbJoOcNeVqf4qtvE9Lb3EEAtUHrMLPHud2kTZf c1PIOGcXW4oFv16z543nS7s1qkQvmhOci4SJeSujMjjVq2AOhgfyWt6EiEQUqPghXdxK FVVG40K7c/MyFRvSEcX63x7gtf2NsqHbZjw0LtA1Ra1zZn3CANbNnQyN20VnWMlSPZzd vIrw== X-Gm-Message-State: AKaTC03UT7O6aO7LCCH6P7IDA5UoJb1TNCPL/hdQnhG1H38Jrm4g1ApzPcGJ042ygXBEvQ== X-Received: by 10.194.111.102 with SMTP id ih6mr14131908wjb.214.1480245075236; Sun, 27 Nov 2016 03:11:15 -0800 (PST) Received: from arch-desktop ([2a02:908:678:0:728b:cdff:fe7f:6af7]) by smtp.gmail.com with ESMTPSA id l67sm22923054wmf.20.2016.11.27.03.11.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 27 Nov 2016 03:11:14 -0800 (PST) Date: Sun, 27 Nov 2016 12:11:10 +0100 From: Marcel Hasler To: Ezequiel Garcia , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org Subject: [PATCH v3 2/4] stk1160: Check whether to use AC97 codec. Message-ID: <20161127111110.GA25600@arch-desktop> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20161127110732.GA5338@arch-desktop> User-Agent: Mutt/1.7.1 (2016-10-04) Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some STK1160-based devices use the chip's internal 8-bit ADC. This is configured through a strap pin. The value of this and other pins can be read through the POSVA register. If the internal ADC is used, or if audio is disabled altogether, there's no point trying to setup the AC97 codec. Signed-off-by: Marcel Hasler --- drivers/media/usb/stk1160/stk1160-ac97.c | 26 ++++++++++++++++++++++++++ drivers/media/usb/stk1160/stk1160-core.c | 3 +-- drivers/media/usb/stk1160/stk1160-reg.h | 8 ++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/stk1160/stk1160-ac97.c b/drivers/media/usb/stk1160/stk1160-ac97.c index 63ade1b..95648ac 100644 --- a/drivers/media/usb/stk1160/stk1160-ac97.c +++ b/drivers/media/usb/stk1160/stk1160-ac97.c @@ -93,8 +93,34 @@ void stk1160_ac97_dump_regs(struct stk1160 *dev) } #endif +int stk1160_has_audio(struct stk1160 *dev) +{ + u8 value; + + stk1160_read_reg(dev, STK1160_POSV_L, &value); + return !(value & STK1160_POSV_L_ACDOUT); +} + +int stk1160_has_ac97(struct stk1160 *dev) +{ + u8 value; + + stk1160_read_reg(dev, STK1160_POSV_L, &value); + return !(value & STK1160_POSV_L_ACSYNC); +} + void stk1160_ac97_setup(struct stk1160 *dev) { + if (!stk1160_has_audio(dev)) { + stk1160_info("Device doesn't support audio, skipping AC97 setup."); + return; + } + + if (!stk1160_has_ac97(dev)) { + stk1160_info("Device uses internal 8-bit ADC, skipping AC97 setup."); + return; + } + /* Two-step reset AC97 interface and hardware codec */ stk1160_write_reg(dev, STK1160_AC97CTL_0, 0x94); stk1160_write_reg(dev, STK1160_AC97CTL_0, 0x8c); diff --git a/drivers/media/usb/stk1160/stk1160-core.c b/drivers/media/usb/stk1160/stk1160-core.c index f3c9b8a..c86eb61 100644 --- a/drivers/media/usb/stk1160/stk1160-core.c +++ b/drivers/media/usb/stk1160/stk1160-core.c @@ -20,8 +20,7 @@ * * TODO: * - * 1. (Try to) detect if we must register ac97 mixer - * 2. Support stream at lower speed: lower frame rate or lower frame size. + * 1. Support stream at lower speed: lower frame rate or lower frame size. * */ diff --git a/drivers/media/usb/stk1160/stk1160-reg.h b/drivers/media/usb/stk1160/stk1160-reg.h index 81ff3a1..296a9e7 100644 --- a/drivers/media/usb/stk1160/stk1160-reg.h +++ b/drivers/media/usb/stk1160/stk1160-reg.h @@ -26,6 +26,14 @@ /* Remote Wakup Control */ #define STK1160_RMCTL 0x00c +/* Power-on Strapping Data */ +#define STK1160_POSVA 0x010 +#define STK1160_POSV_L 0x010 +#define STK1160_POSV_M 0x011 +#define STK1160_POSV_H 0x012 +#define STK1160_POSV_L_ACDOUT BIT(3) +#define STK1160_POSV_L_ACSYNC BIT(2) + /* * Decoder Control Register: * This byte controls capture start/stop