From patchwork Thu Dec 15 22:13:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Hasler X-Patchwork-Id: 9477005 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 65C6D60825 for ; Thu, 15 Dec 2016 22:14:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5638E2885C for ; Thu, 15 Dec 2016 22:14:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4A30B28862; Thu, 15 Dec 2016 22:14:49 +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 E73472885C for ; Thu, 15 Dec 2016 22:14:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756697AbcLOWO2 (ORCPT ); Thu, 15 Dec 2016 17:14:28 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33367 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754251AbcLOWOE (ORCPT ); Thu, 15 Dec 2016 17:14:04 -0500 Received: by mail-wm0-f67.google.com with SMTP id u144so940052wmu.0 for ; Thu, 15 Dec 2016 14:13:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :in-reply-to:user-agent; bh=gP9oPFwsXVJCoTZzYd3IMCo1ltil/YaZDqhhxwvVMJM=; b=P3vzWNiphI1kXOu47vJjxpVAxVEJydnHB/om2CY5dzIiDK8dDaDIuj8Li0+KznyeEt PkswrqHL9kJ7m00Ef4mDRjswHKeDtnqlboAueWNGjBj2y8XUz5ymOREneQw4QXkOj8i1 n1Boo38OipOYb2MVzxgRPml7VfScpUXOk7WV6a9nfw+vtLyb0O6Vax5pBZ4G3x5ahrdT Sj08z60A/jbmWH+yXTMhUHJmaCqLzoA3bv5/OXJtQeLhFnbFV8mnNYy0q0hpJPXm+VPF Q6jsJXyF87QrQ51fQFjft8zc90gts3ymMfj6NnTfbD3UHHyU8AqUGeyWtv67o/XP6bWh Y+Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:in-reply-to:user-agent; bh=gP9oPFwsXVJCoTZzYd3IMCo1ltil/YaZDqhhxwvVMJM=; b=I/t/CxIXCRc6zbfFQ9ej2CGXYOC/i4+w3957sH0riAQ7oqQbr9Oh87Kjg8g7o5R/6I bnmzMaxFZaeWQ29p5u8P6mWHDQgtTC/N88zisHFlq4yWboGDbIi2uHgfZU0IJ3A5XqxQ yBR5xj4SzO52G1L1eG1yjNUK9kFeUmSOozvE6+sXU2EoK+NLWGkM/LCDK/jJeG3mROxU jHG3VsOJ0ZkQWVpl8W4/ZE+fvFq3HXR9ioRfj7Z8nJnOEmZL9uFMiLsGlRmVQcnTW41M WhS/Hoj48LK9i7S6oktdoadSWpSXNGwYI4Lh3uKPFUCCBXwJUQoMp6R8SURXlFhwwHur BwkQ== X-Gm-Message-State: AIkVDXLn2VdKu9cGd5JYetJNHaTzBuQ0b2V21BO6Pnh4u08ekKnKet59N5PvG1tICMgHDA== X-Received: by 10.28.158.147 with SMTP id h141mr415162wme.59.1481840019350; Thu, 15 Dec 2016 14:13:39 -0800 (PST) Received: from arch-desktop ([2a02:908:670:1a80:728b:cdff:fe7f:6af7]) by smtp.gmail.com with ESMTPSA id x140sm447810wme.19.2016.12.15.14.13.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Dec 2016 14:13:38 -0800 (PST) Date: Thu, 15 Dec 2016 23:13:34 +0100 From: Marcel Hasler To: Ezequiel Garcia , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org Subject: [PATCH v4 2/3] stk1160: Check whether to use AC97 codec. Message-ID: <20161215221334.GA14811@arch-desktop> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20161215221146.GA9398@arch-desktop> User-Agent: Mutt/1.7.2 (2016-11-26) 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 502fc8e..5e9b76e 100644 --- a/drivers/media/usb/stk1160/stk1160-ac97.c +++ b/drivers/media/usb/stk1160/stk1160-ac97.c @@ -91,8 +91,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