From patchwork Tue Jun 26 17:40:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 140068 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp5526610lji; Tue, 26 Jun 2018 10:41:18 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcaaP+5fD5rdsj5+gdLezHqTOdEXsYrASLH6srq6pIUgegBFS75vvRrA609cRwKyurVSSP5 X-Received: by 2002:a62:fd0b:: with SMTP id p11-v6mr2524666pfh.52.1530034877931; Tue, 26 Jun 2018 10:41:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530034877; cv=none; d=google.com; s=arc-20160816; b=gETszEhFczx0J58G3T8YRKcVlqbfanHXUiFKJmD8nIvIGhC1cMuGsu1uiBc9JpMl52 xt/r1rUo9dyOxv9cR5MdzwHhmI69ykeDcb+koacZT5i2Ss9I/q75tCl9dZSJbtTmRY8B 4jtyy4khLICeTqISkpPzFDEkqJq1cIyt7e1TMkzQHtwC/HAaGIFh2yqWBUm3B7Fgy/Es WkptuBsKmj/N9vcvwn5fBSpkp5YvaINDdT4Fs/r4Pt8H02Q9XxEFnmAqvQFgGOJ/7M7T l4+yE1vb9qIIQ4ScThVBQ4UGCMJADnYeEiOS3jT0XnHuFeKmrotXvs4VQwaeAZd8tAXB dSAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=nKddXtUQPJIEwldvzlC38mUwQms7iZaQPpd55nethV4=; b=Xvb0lobaCBvcAuxed/DlW4qpyJSSwitBnufBWj3A0nU4gFsA4ihPQ41v3zksUhgIqg We4P6I+VE61q7bCrORig+jTSXdTiH0TUgYahgmwvX4p+aZF4W4u5iqR3ONg3rK1SFCxE yMcK+jOBLiqSsNS5fsfYPcaSs9cUkFp/Yjxyz7DLvVtDRUxDH76qtZkt6et4uI/38edS 4huPAecmHudi/eiHcUGRqhykakHKmtghjUwsVEBpjvkQ4lwzefpDUYF0Qonrw1A8yhO1 /pnTrM+eR6cFuB3u6LqggSpnd9FVhkRIghNxy2m/TmJxrvTH/oR/6P1Far85m7ArKpyK e9Ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=znmCK4xo; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g10-v6si1742177pge.676.2018.06.26.10.41.17; Tue, 26 Jun 2018 10:41:17 -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; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=znmCK4xo; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754541AbeFZRlP (ORCPT + 31 others); Tue, 26 Jun 2018 13:41:15 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:38033 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754489AbeFZRlM (ORCPT ); Tue, 26 Jun 2018 13:41:12 -0400 Received: by mail-wr0-f196.google.com with SMTP id e18-v6so18100461wrs.5 for ; Tue, 26 Jun 2018 10:41:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nKddXtUQPJIEwldvzlC38mUwQms7iZaQPpd55nethV4=; b=znmCK4xoKfQl7nyxQ8HWY+yWp5ao7dyJGD/gZnzm3JVwpKD09XCej3qt+kSclWXR+E fGjqHsaY8qyVTuv0knJGY46RAvXjJ5i+UXrDD0Rs84fVPmkuCFJwZhWNVsMzjhgW8Knj oNaiQjz/dXOclvWoOBVWpWfd6MPVE1PNQUrC7laqkHDcamn0NAzdcAF9gbF5nECv9krp GpWjmGmUwYxUIBJ6F/aT5CoKiNRs+RmUMmXrgLDWbQ/ALwv/QjcK98q8OmlZfyVW2EmW ls72JZFcXuMsL3S1IdXmd6f/7FZEijS6J/HXhNqgSWe0oeTdW/oU2YaqQPyLTDmMS7pB gosg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nKddXtUQPJIEwldvzlC38mUwQms7iZaQPpd55nethV4=; b=cWtZ5nJrAIDoOs6N9mCA7ZUVXqKH+Z1h80LQdyPiALZKi7QhYAsNKaQU4QfeTH+dQa CcfYRxCNs/wRkMpU+oOr1lWnrlvmbixu9Q5LQGCuzOZ+wQJx7VBtKTttBZsRafSVV9F4 CXvm6tbemYP92ZIEOH9CfCI6c+R675Yrcvs4j/qbOTSbhEv6VCkRTye0oaiSytGHi6uc zfksAab5ADYnQIFtplzzQmQQCwa0cTopVSyvA7awJGnelcd0EcValDQV+0yeG0Vj4L/m LlhJ7wHf1kw/AiEnn6SE/IZXBwVEwWgLVi0heFEbOtpmB+l2VTLSnIhhwFW5m+MA7woa iFxw== X-Gm-Message-State: APt69E1+PwyLTSGltqTdrv0h5hV8Pvl09XDYTOn9mYIJ1hg1P5EeOFjb ETu4onp8wFy8cuwQDR4CTAzpTw== X-Received: by 2002:adf:90af:: with SMTP id i44-v6mr2409505wri.146.1530034870999; Tue, 26 Jun 2018 10:41:10 -0700 (PDT) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id i4-v6sm1580462wrq.28.2018.06.26.10.41.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Jun 2018 10:41:10 -0700 (PDT) From: Jerome Brunet To: Mark Brown , Liam Girdwood Cc: Jerome Brunet , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, alsa-devel@alsa-project.org Subject: [PATCH 2/2] ASoC: tas517x: add tas5707 support Date: Tue, 26 Jun 2018 19:40:56 +0200 Message-Id: <20180626174056.6400-3-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180626174056.6400-1-jbrunet@baylibre.com> References: <20180626174056.6400-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for the tas5707 audio power amplifier. Signed-off-by: Jerome Brunet --- sound/soc/codecs/Kconfig | 5 ++- sound/soc/codecs/tas571x.c | 110 +++++++++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/tas571x.h | 16 +++++++ 3 files changed, 130 insertions(+), 1 deletion(-) -- 2.14.4 diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 1d2ddb528fd2..f5839eeeed5e 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -953,8 +953,11 @@ config SND_SOC_TAS5086 depends on I2C config SND_SOC_TAS571X - tristate "Texas Instruments TAS5711/TAS5717/TAS5719/TAS5721 power amplifiers" + tristate "Texas Instruments TAS571x power amplifiers" depends on I2C + help + Enable support for Texas Instruments TAS5707, TAS5711, TAS5717, + TAS5719 and TAS5721 power amplifiers config SND_SOC_TAS5720 tristate "Texas Instruments TAS5720 Mono Audio amplifier" diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c index 52f34c94ec25..e2952a3004a0 100644 --- a/sound/soc/codecs/tas571x.c +++ b/sound/soc/codecs/tas571x.c @@ -7,6 +7,9 @@ * TAS5721 support: * Copyright (C) 2016 Petr Kulhavy, Barix AG * + * TAS5707 support: + * Copyright (C) 2018 Jerome Brunet, Baylibre SAS + * * 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 @@ -444,6 +447,111 @@ static const struct tas571x_chip tas5711_chip = { .vol_reg_size = 1, }; +static const struct regmap_range tas5707_volatile_regs_range[] = { + regmap_reg_range(TAS571X_CLK_CTRL_REG, TAS571X_ERR_STATUS_REG), + regmap_reg_range(TAS571X_OSC_TRIM_REG, TAS571X_OSC_TRIM_REG), + regmap_reg_range(TAS5707_CH1_BQ0_REG, TAS5707_CH2_BQ6_REG), +}; + +static const struct regmap_access_table tas5707_volatile_regs = { + .yes_ranges = tas5707_volatile_regs_range, + .n_yes_ranges = ARRAY_SIZE(tas5707_volatile_regs_range), + +}; + +static const DECLARE_TLV_DB_SCALE(tas5707_volume_tlv, -7900, 50, 1); + +static const char * const tas5707_volume_slew_step_txt[] = { + "256", "512", "1024", "2048", +}; + +static const unsigned int tas5707_volume_slew_step_values[] = { + 3, 0, 1, 2, +}; + +static const SOC_VALUE_ENUM_SINGLE_DECL(tas5707_volume_slew_step_enum, + TAS571X_VOL_CFG_REG, 0, 0x3, + tas5707_volume_slew_step_txt, + tas5707_volume_slew_step_values); + +static const struct snd_kcontrol_new tas5707_controls[] = { + SOC_SINGLE_TLV("Master Volume", + TAS571X_MVOL_REG, + 0, 0xff, 1, tas5707_volume_tlv), + SOC_DOUBLE_R_TLV("Speaker Volume", + TAS571X_CH1_VOL_REG, + TAS571X_CH2_VOL_REG, + 0, 0xff, 1, tas5707_volume_tlv), + SOC_DOUBLE("Speaker Switch", + TAS571X_SOFT_MUTE_REG, + TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, + 1, 1), + + SOC_ENUM("Slew Rate Steps", tas5707_volume_slew_step_enum), + + BIQUAD_COEFS("CH1 - Biquad 0", TAS5707_CH1_BQ0_REG), + BIQUAD_COEFS("CH1 - Biquad 1", TAS5707_CH1_BQ1_REG), + BIQUAD_COEFS("CH1 - Biquad 2", TAS5707_CH1_BQ2_REG), + BIQUAD_COEFS("CH1 - Biquad 3", TAS5707_CH1_BQ3_REG), + BIQUAD_COEFS("CH1 - Biquad 4", TAS5707_CH1_BQ4_REG), + BIQUAD_COEFS("CH1 - Biquad 5", TAS5707_CH1_BQ5_REG), + BIQUAD_COEFS("CH1 - Biquad 6", TAS5707_CH1_BQ6_REG), + + BIQUAD_COEFS("CH2 - Biquad 0", TAS5707_CH2_BQ0_REG), + BIQUAD_COEFS("CH2 - Biquad 1", TAS5707_CH2_BQ1_REG), + BIQUAD_COEFS("CH2 - Biquad 2", TAS5707_CH2_BQ2_REG), + BIQUAD_COEFS("CH2 - Biquad 3", TAS5707_CH2_BQ3_REG), + BIQUAD_COEFS("CH2 - Biquad 4", TAS5707_CH2_BQ4_REG), + BIQUAD_COEFS("CH2 - Biquad 5", TAS5707_CH2_BQ5_REG), + BIQUAD_COEFS("CH2 - Biquad 6", TAS5707_CH2_BQ6_REG), +}; + +static const struct reg_default tas5707_reg_defaults[] = { + {TAS571X_CLK_CTRL_REG, 0x6c}, + {TAS571X_DEV_ID_REG, 0x70}, + {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_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_START_STOP_PERIOD_REG, 0x0f}, + {TAS571X_OSC_TRIM_REG, 0x82}, + {TAS571X_BKND_ERR_REG, 0x02}, + {TAS571X_INPUT_MUX_REG, 0x17772}, + {TAS571X_PWM_MUX_REG, 0x1021345}, +}; + +static const struct regmap_config tas5707_regmap_config = { + .reg_bits = 8, + .val_bits = 32, + .max_register = 0xff, + .reg_read = tas571x_reg_read, + .reg_write = tas571x_reg_write, + .reg_defaults = tas5707_reg_defaults, + .num_reg_defaults = ARRAY_SIZE(tas5707_reg_defaults), + .cache_type = REGCACHE_RBTREE, + .wr_table = &tas571x_write_regs, + .volatile_table = &tas5707_volatile_regs, +}; + +static const struct tas571x_chip tas5707_chip = { + .supply_names = tas5711_supply_names, + .num_supply_names = ARRAY_SIZE(tas5711_supply_names), + .controls = tas5707_controls, + .num_controls = ARRAY_SIZE(tas5707_controls), + .regmap_config = &tas5707_regmap_config, + .vol_reg_size = 1, +}; + static const char *const tas5717_supply_names[] = { "AVDD", "DVDD", @@ -775,6 +883,7 @@ static int tas571x_i2c_remove(struct i2c_client *client) } static const struct of_device_id tas571x_of_match[] = { + { .compatible = "ti,tas5707", .data = &tas5707_chip, }, { .compatible = "ti,tas5711", .data = &tas5711_chip, }, { .compatible = "ti,tas5717", .data = &tas5717_chip, }, { .compatible = "ti,tas5719", .data = &tas5717_chip, }, @@ -784,6 +893,7 @@ static const struct of_device_id tas571x_of_match[] = { MODULE_DEVICE_TABLE(of, tas571x_of_match); static const struct i2c_device_id tas571x_i2c_id[] = { + { "tas5707", (kernel_ulong_t) &tas5707_chip }, { "tas5711", (kernel_ulong_t) &tas5711_chip }, { "tas5717", (kernel_ulong_t) &tas5717_chip }, { "tas5719", (kernel_ulong_t) &tas5717_chip }, diff --git a/sound/soc/codecs/tas571x.h b/sound/soc/codecs/tas571x.h index c45677bc26ad..bd23e89cfe79 100644 --- a/sound/soc/codecs/tas571x.h +++ b/sound/soc/codecs/tas571x.h @@ -53,6 +53,22 @@ #define TAS571X_PWM_MUX_REG 0x25 /* 20-byte biquad registers */ +#define TAS5707_CH1_BQ0_REG 0x29 +#define TAS5707_CH1_BQ1_REG 0x2a +#define TAS5707_CH1_BQ2_REG 0x2b +#define TAS5707_CH1_BQ3_REG 0x2c +#define TAS5707_CH1_BQ4_REG 0x2d +#define TAS5707_CH1_BQ5_REG 0x2e +#define TAS5707_CH1_BQ6_REG 0x2f + +#define TAS5707_CH2_BQ0_REG 0x30 +#define TAS5707_CH2_BQ1_REG 0x31 +#define TAS5707_CH2_BQ2_REG 0x32 +#define TAS5707_CH2_BQ3_REG 0x33 +#define TAS5707_CH2_BQ4_REG 0x34 +#define TAS5707_CH2_BQ5_REG 0x35 +#define TAS5707_CH2_BQ6_REG 0x36 + #define TAS5717_CH1_BQ0_REG 0x26 #define TAS5717_CH1_BQ1_REG 0x27 #define TAS5717_CH1_BQ2_REG 0x28