From patchwork Tue Nov 14 06:31:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10057053 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 0393E602A7 for ; Tue, 14 Nov 2017 06:31:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1615E28FAC for ; Tue, 14 Nov 2017 06:31:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0AF4C28FB0; Tue, 14 Nov 2017 06:31:22 +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=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BAD4E28FAC for ; Tue, 14 Nov 2017 06:31:20 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 330D7266F1E; Tue, 14 Nov 2017 07:31:18 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 51C0A266F30; Tue, 14 Nov 2017 07:31:17 +0100 (CET) Received: from relmlie1.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by alsa0.perex.cz (Postfix) with ESMTP id B62FE266A73 for ; Tue, 14 Nov 2017 07:31:10 +0100 (CET) Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie1.idc.renesas.com with ESMTP; 14 Nov 2017 15:31:07 +0900 Received: from relmlii2.idc.renesas.com (relmlii2.idc.renesas.com [10.200.68.66]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 26E7252EA4; Tue, 14 Nov 2017 15:31:07 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.44,393,1505746800"; d="scan'208";a="263415771" Received: from mail-sg2apc01lp0248.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.248]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 14 Nov 2017 15:31:06 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=VfgOXU/+wx8+pI+7Fblae/IqOHFWnPZTndevU86ipz8=; b=FolrCnaaZr+r0HU3OuDRGlqPuXE+V6vqC3WZ76FuNu63Xiko+DJHDDRuavSV7muI0kCe/L42PnL2Hvw0h/KPfJIctxBYg+puBxat0k6BrzSPY0jcEztKHZt18Km15D/JZUtw/WBBsrx7ZhDVr6VmqkDwUCkZIWUghqaXu0BVH2M= Received: from morimoto-PC.renesas.com (211.11.155.138) by PS1PR0601MB1883.apcprd06.prod.outlook.com (2603:1096:803:8::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 06:31:02 +0000 Message-ID: <87a7zpwfae.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto To: Mark Brown User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Tue, 14 Nov 2017 06:31:02 +0000 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: SG2PR06CA0098.apcprd06.prod.outlook.com (2603:1096:3:14::24) To PS1PR0601MB1883.apcprd06.prod.outlook.com (2603:1096:803:8::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 74473511-facc-4c28-625c-08d52b294765 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603258); SRVR:PS1PR0601MB1883; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1883; 3:iDxXWegqXTk7tq6pYwZKp9FAhjwUihofbcfcoKdZpDYEX7BnSQTf3X8W3CwX87iJyxe4Ymvnfa/JxonWGs48Nf4nJfEaMnYbzXPNORv0UtqAjY4okFrueMUJdfx1nHYiJYQU08kpqiuNIOFGQls2oIuDyFpv34Xb6OWk+xbu3JuT2aVfyJX8UOwGwK73xkx5b0xiBJVgSHNaEX/Qu7hdJ+6w6CG7judn+qCZb8Zzxu+vc12bR9LcXtxqHe04nuGx; 25:AgGTjthpMHaxn5GN10v5lqB75cITZiRg+pZH0PSmfw2rpDmWO+hcDKzkm8D7dKUQE2KK/r1FCcah3OUdpEn5q+xf6dTr+XSkQDyPKieOJcTzkpcaxKfDPMLvujInHYUnLc+cTElFpDIlCS/pF1lpi3AFTF34Y9E2YtlFG2tIluuFY1eyt/cavGro9EfUyIB1FUDKKkNa6NdfRm0N5tdpQyQr2OKujydNakEG3IsOeZpXH5QJvE9l/qbukWoCxk4ahikmxpFfT/i7aja1KxutnnM0oD08XxNSYAQGoVeTlkh7JnaANRh98HbTz1BB6FL7XE0Z6EOdlWKT8k1Z+bLDNQ==; 31:IaL9ZJZ1C107bIZU3ssLbbeDsH0HYf8Q5NIPOY8MYTV4aPa4j0k/Kh27hUAGpkuQZma9UNedVWEw484dvh6q6ME20VItua7sZ0i86nfkMnEibUF4hQ+fPea7ZBAX54EH9sk2M3a2fqTMYRnk1sdVAt+lfFmeM3kH/vjdTLliTy0PZGCGMMJ3fIP4KYYAHfHMdaiip/GD1RtjJZ+15m3SKmioyWhNTm5fW9iF4qCCAf0= X-MS-TrafficTypeDiagnostic: PS1PR0601MB1883: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1883; 20:sJPI+DBUZ6rQNHxVPo8Z2cAXx/jxU7C1t9gzG3xIKrrBd+etJsocw9s9vFK3WZHLTUcZLJ+h0FyoqxjYHsaQiJTG3nyn0PHTjNNFavCdIY3S08M+zi6HqYMSNEL3P5Q/nth2uK1d2pLfLjnn6byC9ngqjWV2T6kkhvYkuRksSlCOWQ8hN1J+MHY78qHsF2bZOQyFrBAQoYKTtdCSFfgO7nJalM7n9ZKnLZhCIAx8bx6Qsx7KybdOaCBYi1uvkLPFIeJ8MjL/RS1B38ksxcDH18bfcuz6ecnCFH3heBVoM8thdrHJhLxS5JaGndmQzH/gE7cskNAgGThr4ZJ6tqwzFBw9gAjDkP9ceUnp9QbvqeNmotfNYEvbhFB/eAdPKdX5i0hqVfZ1F6LzzA91cZM1wrUl2kHslDdm6LaGaYO+hGmy5aRjqKjTL5N+GK4TYijJCMTscPIKimqtc807WwglapUGZWL/+6OKZiV0OxscznBSQSBSJodKHgiwL3Z19gJH; 4:bsyRzLiOLJA7tbbpFZNYsy1yd+w2D+tCbL5osRZGMQHcIwS6RGuH6Lbp2nxorwll+/SBN7sQOb3tvjxmN2Y3cIDjzwfeyQN3G5JgJHr5o1cL/oBD9lEXAooqscKtSKWvE3TxcryNkINgucBCvHUx68n3c0BOirLuCHntA7m/FXGlmL+JBni60m+IbcED6sDV/nQ3+DFykuGU4AXQADxhJSaaE28qcoup4aCsaMHDR63gT8W2O9yHtcMt9iFJ+5mprxiSTmjWLfxWgH3EkEXYuA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231022)(93006095)(93001095)(100000703101)(100105400095)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:PS1PR0601MB1883; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:PS1PR0601MB1883; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(39860400002)(346002)(376002)(199003)(189002)(6916009)(5660300001)(53936002)(69596002)(50466002)(4326008)(47776003)(66066001)(16526018)(6486002)(2906002)(86362001)(7736002)(478600001)(305945005)(97736004)(83506002)(25786009)(54906003)(81166006)(8936002)(81156014)(6116002)(8676002)(23726003)(189998001)(50986999)(54356999)(16586007)(101416001)(58126008)(3846002)(36756003)(316002)(33646002)(107886003)(53416004)(68736007)(105586002)(106356001)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:PS1PR0601MB1883; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; PS1PR0601MB1883; 23:vgiUeeanamZk6gMdTMN/BswGRwsh8cYznXLOS4F?= =?us-ascii?Q?/dD+beA5ejB0xBqThK3yo7s6AqIQ6QkT/X1EXU9Ul27bLUVOghVemTVUFvER?= =?us-ascii?Q?a2zlfNEKDVo0Jl/A4B0WDVp8kyEfGsw02o0rE2JXCA5tfRuHfkik/DQgl4cE?= =?us-ascii?Q?tO5uaB2kJNBTPUt8Y9WIIWHmffH8KiToKfpTROZgoCDhdfwBVxA1IYOq14vA?= =?us-ascii?Q?cTEFl1AF+vsn/rsD32cXqJE9MN/BZyNqROe/OFcGDGGjkFZo+Yp6Xrugu7eL?= =?us-ascii?Q?xWjVvLNBrwLVlBh/nlX2ldTm3lf2mPzv+6w7GtsD311yr4gwFsPrdVyP4m+A?= =?us-ascii?Q?2XMaDvIDM5zICR5Bccft2rGX4GwNoFI1EEziqzFWMq3UTDvFJ4DmF6bXvaZb?= =?us-ascii?Q?oFMwowJlRtLTM/snN9FpUYhwb+q9ND+glmbS8NcutaA0yIr4oUJPN69yqrD9?= =?us-ascii?Q?+/Fa0kD/oZhXbD3cFji+zq2BaBpwzZF6YuoDZbW52qzx5emxoxF6Ui+kiLn2?= =?us-ascii?Q?X+qMCSwsg+w4c6RaI07vkRb3YI26lyosuWsBi2eNv5mTY4VWx5u1GheLnjsx?= =?us-ascii?Q?RHL83fXt1XkMp5hJYnqLfvn7g1Ic/z5bnxaaDNXkgRZOFNQ3jO0mHKfKapTk?= =?us-ascii?Q?YWH2D3H2XY2Cddfi1tes7sklaaUR+xplorZY5V6qtjEeqeMh1O9Q0jc2dYmG?= =?us-ascii?Q?GqthDGDOhh09TtNtYWgnQYGlQlG2vwXOUgNp65Ns6ZKHp4Z8RuwDQDKM81ND?= =?us-ascii?Q?GkmBYpsnqwPr7kOCGiYn0aozPfk84vGFqQt6GOHGFTrxsKJuAU31lnsCrtU6?= =?us-ascii?Q?c6ZJCQkpdEuyR0B19imT4a20wcgs49jq9mBRUKEndBpFuWAVCUDmLTlA3u/9?= =?us-ascii?Q?0xgdTz0DlEape7PNJNCjuxRx3/4EcnW7YyiKusRDy11e2AXOtbkGyZQ4oGPl?= =?us-ascii?Q?uzuNl4TTo4X5iwUnMabJT1mucbSWvsC5VrzfBdKWOj20zeHWUKRCdJmLd59t?= =?us-ascii?Q?SCwKVvjHRHq8lcsfHIaUvanruqhcpjFYo/i+BZksLjU5V39l1+xSx56r8wiW?= =?us-ascii?Q?O0E6C2cGEy1YVMLFh8RkbjCMjgT+LuBDWP4EGmBS2CgZmR2k4zYhqxh0jMmD?= =?us-ascii?Q?Mc2LMA80wOmo=3D?= X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1883; 6:N583Se8d9HPOj/DMUzd+v3NKjfU7dim9b4dSXx0b/2svLIxam3bgh6uQgYAOKZ5y9oRF6s8vb+zEs/3snU/JPrs64/WVRPctGTYqt2s2Kd3c0GHqvBbPrPGUMM0OFSUAtFVWnkN6AwnLtxcMAvZ62MM9K5JN0/SwXNpSeCYBIdwa17FKUakIqXb3+u2n9Pe3r5xbYWEF7c/EQEmrrsS8p8o6lDwvtMfVeWQQqxdGxK4DSFx2g/6hBj86PSuil4OKq70D6xxIxtLYMOpCFSffwLBEpM7uiiEjcw0mm/b9mZxseZn8Jl9CFZwhQGZOkretKmbyWQO65FrAmsWny0eoO95RUslWOq5pK5wHoZ7+1BE=; 5:7b5ng1SeQ12ineG8yAgYqg9BSfnnNg1S/rrK1Af7tERk84S+UqI51mpP7b/OeuPea8uw6f4FN4QbQdX3HLgCqdZ/GA5r76omWil8EbzcHd8D3uerULA3t9FxoT0FcfhDHKaH+xxHg6IK1bNwAT+GyenWPBsY0cEQbrgrl080neo=; 24:YlCZD+neOOfoieyjB1ZPx9A/2syLqHCtwvDcoM+CYypYYjc7JfF8XYPw3cDi4QXkKGgjcWaF4ByYf/XQofBe3HUkwedH5ctoKy33joprq/A=; 7:KVjQZD9E6/ZWlihqrYH2eMrStPjjG8rW42/at1gIqxn7MGO7DFBVMIjf3DCpBUMPhES+NB6B09xNsRHvvpAfwNKY5wP7MSIApryHI3XHXkQ0fIh0JKwA63Dy6I79SGBhaUa1IJC9lEid+wy0FADz0f3UysJ9NJfY/nroTJasFj9/QDzQ/Ulp/3OfHx24PkVwaeADyfG4yLHnTZG8gL8eyRHMrhHgZNUf7SdSNKKVcZ/+DWskKgaMO1PpvfX5kHeN SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; PS1PR0601MB1883; 20:rXCAawQoxs9Oirpm+DR/hsB8qg1+HvNQZpojW7JPHaQz9rDakLSmi+WliWWJ/StcFiFWu1sueL3+1QsjZefgaCs27wylnCDlhXVZht92c2O0W35O+fmJZoHmDw9MOQVeCuJk9DPII7VolTMzFCDnUOmx9z97zIMDNeF+kauagYQ= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 06:31:02.5367 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 74473511-facc-4c28-625c-08d52b294765 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: PS1PR0601MB1883 Cc: Linux-ALSA , Simon , "Yokoyama \(Renesas\)" Subject: [alsa-devel] [PATCH] ASoC: ak4613: call dummy write for PW_MGMT1/3 when Playback X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP From: Kuninori Morimoto Power Down Release Command (PMVR, PMDAC, RSTN, PMDA1-PMDA6) which are located on PW_MGMT1 / PW_MGMT3 register must be write again after at least 5 LRCK cycle or later from the first command. Otherwise, Playback volume will be 0dB. This patch adds dummy write when Playback Start timing. Tested-by: Hiroyuki Yokoyama Signed-off-by: Kuninori Morimoto --- sound/soc/codecs/ak4613.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/sound/soc/codecs/ak4613.c b/sound/soc/codecs/ak4613.c index ee9e822..836c111 100644 --- a/sound/soc/codecs/ak4613.c +++ b/sound/soc/codecs/ak4613.c @@ -15,6 +15,7 @@ */ #include +#include #include #include #include @@ -95,6 +96,9 @@ struct ak4613_priv { struct mutex lock; const struct ak4613_interface *iface; struct snd_pcm_hw_constraint_list constraint; + struct delayed_work dummy_write_work; + struct snd_soc_component *component; + unsigned int rate; unsigned int sysclk; unsigned int fmt; @@ -392,6 +396,7 @@ static int ak4613_dai_hw_params(struct snd_pcm_substream *substream, default: return -EINVAL; } + priv->rate = rate; /* * FIXME @@ -467,11 +472,64 @@ static int ak4613_set_bias_level(struct snd_soc_component *component, return 0; } +static void ak4613_dummy_write(struct work_struct *work) +{ + struct ak4613_priv *priv = container_of(work, + struct ak4613_priv, + dummy_write_work.work); + struct snd_soc_component *component = priv->component; + unsigned int mgmt1; + unsigned int mgmt3; + + snd_soc_component_read(component, PW_MGMT1, &mgmt1); + snd_soc_component_read(component, PW_MGMT3, &mgmt3); + + snd_soc_component_write(component, PW_MGMT1, mgmt1); + snd_soc_component_write(component, PW_MGMT3, mgmt3); +} + +static int ak4613_dai_trigger(struct snd_pcm_substream *substream, int cmd, + struct snd_soc_dai *dai) +{ + struct snd_soc_codec *codec = dai->codec; + struct ak4613_priv *priv = snd_soc_codec_get_drvdata(codec); + unsigned long delay; + + /* + * FIXME + * + * PW_MGMT1 / PW_MGMT3 needs dummy write at least after 5 LR clocks + * from Power Down Release. Otherwise, Playback volume will be 0dB. + * To avoid complex multiple delayed_work call from + * ak4613_set_bias_level() / SND_SOC_DAPM_DAC_E("DACx", ...), + * call it once here. Here Let's call it after 6 LR + */ + + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + break; + default: + return 0; + } + + if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK) + return 0; + + delay = 6000000 / priv->rate; + priv->component = &codec->component; + schedule_delayed_work(&priv->dummy_write_work, + usecs_to_jiffies(delay)); + + return 0; +} + static const struct snd_soc_dai_ops ak4613_dai_ops = { .startup = ak4613_dai_startup, .shutdown = ak4613_dai_shutdown, .set_sysclk = ak4613_dai_set_sysclk, .set_fmt = ak4613_dai_set_fmt, + .trigger = ak4613_dai_trigger, .hw_params = ak4613_dai_hw_params, }; @@ -591,6 +649,7 @@ static int ak4613_i2c_probe(struct i2c_client *i2c, priv->iface = NULL; priv->cnt = 0; priv->sysclk = 0; + INIT_DELAYED_WORK(&priv->dummy_write_work, ak4613_dummy_write); mutex_init(&priv->lock);