From patchwork Thu Mar 31 11:54:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Kulhavy X-Patchwork-Id: 8712031 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E38C4C0553 for ; Thu, 31 Mar 2016 11:55:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 032D82026F for ; Thu, 31 Mar 2016 11:55:47 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 984802025B for ; Thu, 31 Mar 2016 11:55:45 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id B73D12667BB; Thu, 31 Mar 2016 13:55:44 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, NO_DNS_FOR_FROM,RCVD_IN_DNSWL_NONE,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 123412665D0; Thu, 31 Mar 2016 13:54:25 +0200 (CEST) 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 DF9AA266483; Thu, 31 Mar 2016 13:54:23 +0200 (CEST) Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by alsa0.perex.cz (Postfix) with ESMTP id 309172650E7 for ; Thu, 31 Mar 2016 13:54:13 +0200 (CEST) Received: by mail-wm0-f49.google.com with SMTP id 20so110512247wmh.1 for ; Thu, 31 Mar 2016 04:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=barix-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=645ayDgBFsq/rHau1Zhp0SDwofmrgRTGd0SYpbu1j8A=; b=f4snAZGktwDgMXvuucmQ33T9VC+b6MFLEKvqaRDOwEQnrioJ/G3G0aFj6/XNm2RPLu dJwHZkhM3YKww2aBYqWv5JfR3vi16Qj35W1of2QPS+tRoQmF8wOHP41rUQJC6VGOYBTn ufARPqiksGdGIG9D7Lc4onONj1oqwmtovIhBu9E8znMhcTWidz9LHtlKzcLmepC1+sNW wJwL5jJ0bmTs9Q+SezuzjNogCIhrRbAk0FeBPXZ0DEcygOLoTiB5DOQq5ju63uT+P0kG /nnjiafGT3ihTqZfgFk9LP1HS6micfs7EEZv9PHd2i4WQKEg6rlrutJ9VUc7saS4D+eY 9EvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=645ayDgBFsq/rHau1Zhp0SDwofmrgRTGd0SYpbu1j8A=; b=Yxd05TfSPotEWt5+4kePRBmr6MA067/mUR0ELko9QBhUkifl7RAuwPx0S/E7/SCylq e1wT9h3FJCgPFWDX0l9VMXPQOEG0dx9FPjxb4+J39kQ1mHL4aR0UcREIJhacg19KkD6Y wkle3+QAQtG5vnVJ1IAGOe/R90kBUx4TG7YuIUTz4c3eN7OerkQF4bbz10DB5re5PHGI nA2BkjYzbihW+Fp5VYWcrmorhasiSnBZe7Wh79+vASor9gp3BN/aYf8rYlG8pAiEgV8k 4kNz15MJUm+ptuaDwlWTrSLBBX7+uWQo+B0je8gZn6s0NWs+fOYKoK1yHHU+WezkM5q0 2H1g== X-Gm-Message-State: AD7BkJLBSujANjIR7xCpLXgr6MAC0HrG7YpkX7yXhfdlFZJIkS8TvEvwEjk//FhxGkQ3U5GM X-Received: by 10.195.17.200 with SMTP id gg8mr14872291wjd.72.1459425252906; Thu, 31 Mar 2016 04:54:12 -0700 (PDT) Received: from petr-laptop.barix.com (dynamic-31-25-120-010.ftth.glattnet.ch. [31.25.120.10]) by smtp.googlemail.com with ESMTPSA id ka7sm8688420wjb.8.2016.03.31.04.54.11 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 31 Mar 2016 04:54:12 -0700 (PDT) From: Petr Kulhavy To: cernekee@chromium.org, lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org Date: Thu, 31 Mar 2016 13:54:00 +0200 Message-Id: <1459425241-21941-4-git-send-email-petr@barix.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1459425241-21941-1-git-send-email-petr@barix.com> References: <1459425241-21941-1-git-send-email-petr@barix.com> Cc: Petr Kulhavy , devicetree@vger.kernel.org, alsa-devel@alsa-project.org Subject: [alsa-devel] [PATCH v3 4/5] ASoC: tas571x: added support for TAS5721 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: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP This adds support for TAS5721. Signed-off-by: Petr Kulhavy --- v1: v2: v3: added volatile and read-only register tables into the register map sound/soc/codecs/Kconfig | 2 +- sound/soc/codecs/tas571x.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 50693c8..562b66f 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -705,7 +705,7 @@ config SND_SOC_TAS5086 depends on I2C config SND_SOC_TAS571X - tristate "Texas Instruments TAS5711/TAS5717/TAS5719 power amplifiers" + tristate "Texas Instruments TAS5711/TAS5717/TAS5719/TAS5721 power amplifiers" depends on I2C config SND_SOC_TFA9879 diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c index ef6c8d9..b8d19b7 100644 --- a/sound/soc/codecs/tas571x.c +++ b/sound/soc/codecs/tas571x.c @@ -4,6 +4,9 @@ * Copyright (C) 2015 Google, Inc. * Copyright (c) 2013 Daniel Mack * + * TAS5721 support: + * Copyright (C) 2016 Petr Kulhavy, Barix AG + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -372,6 +375,77 @@ static const struct tas571x_chip tas5717_chip = { .vol_reg_size = 2, }; +static const char *const tas5721_supply_names[] = { + "AVDD", + "DVDD", + "DRVDD", + "PVDD", +}; + +static const struct snd_kcontrol_new tas5721_controls[] = { + SOC_SINGLE_TLV("Master Volume", + TAS571X_MVOL_REG, + 0, 0xff, 1, tas5711_volume_tlv), + SOC_DOUBLE_R_TLV("Speaker Volume", + TAS571X_CH1_VOL_REG, + TAS571X_CH2_VOL_REG, + 0, 0xff, 1, tas5711_volume_tlv), + SOC_DOUBLE("Speaker Switch", + TAS571X_SOFT_MUTE_REG, + TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, + 1, 1), +}; + +static const struct reg_default tas5721_reg_defaults[] = { + {TAS571X_CLK_CTRL_REG, 0x6c}, + {TAS571X_DEV_ID_REG, 0x00}, + {TAS571X_ERR_STATUS_REG, 0x00}, + {TAS571X_SYS_CTRL_1_REG, 0xa0}, + {TAS571X_SDI_REG, 0x05}, + {TAS571X_SYS_CTRL_2_REG, 0x40}, + {TAS571X_SOFT_MUTE_REG, 0x00}, + {TAS571X_MVOL_REG, 0xff}, + {TAS571X_CH1_VOL_REG, 0x30}, + {TAS571X_CH2_VOL_REG, 0x30}, + {TAS571X_CH3_VOL_REG, 0x30}, + {TAS571X_VOL_CFG_REG, 0x91}, + {TAS571X_MODULATION_LIMIT_REG, 0x02}, + {TAS571X_IC_DELAY_CH1_REG, 0xac}, + {TAS571X_IC_DELAY_CH2_REG, 0x54}, + {TAS571X_IC_DELAY_CH3_REG, 0xac}, + {TAS571X_IC_DELAY_CH4_REG, 0x54}, + {TAS571X_PWM_CH_SDN_GROUP_REG, 0x30}, + {TAS571X_START_STOP_PERIOD_REG, 0x0f}, + {TAS571X_OSC_TRIM_REG, 0x82}, + {TAS571X_BKND_ERR_REG, 0x02}, + {TAS571X_INPUT_MUX_REG, 0x17772}, + {TAS571X_CH4_SRC_SELECT_REG, 0x4303}, + {TAS571X_PWM_MUX_REG, 0x1021345}, +}; + +static const struct regmap_config tas5721_regmap_config = { + .reg_bits = 8, + .val_bits = 32, + .max_register = 0xff, + .reg_read = tas571x_reg_read, + .reg_write = tas571x_reg_write, + .reg_defaults = tas5721_reg_defaults, + .num_reg_defaults = ARRAY_SIZE(tas5721_reg_defaults), + .cache_type = REGCACHE_RBTREE, + .wr_table = &tas571x_write_regs, + .volatile_table = &tas571x_volatile_regs, +}; + + +static const struct tas571x_chip tas5721_chip = { + .supply_names = tas5721_supply_names, + .num_supply_names = ARRAY_SIZE(tas5721_supply_names), + .controls = tas5711_controls, + .num_controls = ARRAY_SIZE(tas5711_controls), + .regmap_config = &tas5721_regmap_config, + .vol_reg_size = 1, +}; + static const struct snd_soc_dapm_widget tas571x_dapm_widgets[] = { SND_SOC_DAPM_DAC("DACL", NULL, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("DACR", NULL, SND_SOC_NOPM, 0, 0), @@ -527,6 +601,7 @@ static const struct of_device_id tas571x_of_match[] = { { .compatible = "ti,tas5711", .data = &tas5711_chip, }, { .compatible = "ti,tas5717", .data = &tas5717_chip, }, { .compatible = "ti,tas5719", .data = &tas5717_chip, }, + { .compatible = "ti,tas5721", .data = &tas5721_chip, }, { } }; MODULE_DEVICE_TABLE(of, tas571x_of_match); @@ -535,6 +610,7 @@ static const struct i2c_device_id tas571x_i2c_id[] = { { "tas5711", (kernel_ulong_t) &tas5711_chip }, { "tas5717", (kernel_ulong_t) &tas5717_chip }, { "tas5719", (kernel_ulong_t) &tas5717_chip }, + { "tas5721", (kernel_ulong_t) &tas5721_chip }, { } }; MODULE_DEVICE_TABLE(i2c, tas571x_i2c_id);