linux/sound/soc/codecs/tas571x.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * TAS571x amplifier audio driver
 *
 * Copyright (C) 2015 Google, Inc.
 * Copyright (c) 2013 Daniel Mack <[email protected]>
 *
 * TAS5721 support:
 * Copyright (C) 2016 Petr Kulhavy, Barix AG <[email protected]>
 *
 * TAS5707 support:
 * Copyright (C) 2018 Jerome Brunet, Baylibre SAS <[email protected]>
 */

#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/stddef.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include <sound/tlv.h>
#include <asm/unaligned.h>

#include "tas571x.h"

#define TAS571X_MAX_SUPPLIES

struct tas571x_chip {};

struct tas571x_private {};

static int tas571x_register_size(struct tas571x_private *priv, unsigned int reg)
{}

static int tas571x_reg_write(void *context, unsigned int reg,
			     unsigned int value)
{}

static int tas571x_reg_read(void *context, unsigned int reg,
			    unsigned int *value)
{}

/*
 * register write for 8- and 20-byte registers
 */
static int tas571x_reg_write_multiword(struct i2c_client *client,
		unsigned int reg, const long values[], size_t len)
{}

/*
 * register read for 8- and 20-byte registers
 */
static int tas571x_reg_read_multiword(struct i2c_client *client,
		unsigned int reg, long values[], size_t len)
{}

/*
 * Integer array controls for setting biquad, mixer, DRC coefficients.
 * According to the datasheet each coefficient is effectively 26bits,
 * i.e. stored as 32bits, where bits [31:26] are ignored.
 * TI's TAS57xx Graphical Development Environment tool however produces
 * coefficients with more than 26 bits. For this reason we allow values
 * in the full 32-bits reange.
 * The coefficients are ordered as given in the TAS571x data sheet:
 * b0, b1, b2, a1, a2
 */

static int tas571x_coefficient_info(struct snd_kcontrol *kcontrol,
				   struct snd_ctl_elem_info *uinfo)
{}

static int tas571x_coefficient_get(struct snd_kcontrol *kcontrol,
				  struct snd_ctl_elem_value *ucontrol)
{}

static int tas571x_coefficient_put(struct snd_kcontrol *kcontrol,
				  struct snd_ctl_elem_value *ucontrol)
{}

static int tas571x_set_dai_fmt(struct snd_soc_dai *dai, unsigned int format)
{}

static int tas571x_hw_params(struct snd_pcm_substream *substream,
			     struct snd_pcm_hw_params *params,
			     struct snd_soc_dai *dai)
{}

static int tas571x_mute(struct snd_soc_dai *dai, int mute, int direction)
{}

static int tas571x_set_bias_level(struct snd_soc_component *component,
				  enum snd_soc_bias_level level)
{}

static const struct snd_soc_dai_ops tas571x_dai_ops =;


#define BIQUAD_COEFS(xname, reg)

static const char *const tas5711_supply_names[] =;

static const DECLARE_TLV_DB_SCALE(tas5711_volume_tlv, -10350, 50, 1);

static const struct snd_kcontrol_new tas5711_controls[] =;

static const struct regmap_range tas571x_readonly_regs_range[] =;

static const struct regmap_range tas571x_volatile_regs_range[] =;

static const struct regmap_access_table tas571x_write_regs =;

static const struct regmap_access_table tas571x_volatile_regs =;

static const struct reg_default tas5711_reg_defaults[] =;

static const struct regmap_config tas5711_regmap_config =;

static const struct tas571x_chip tas5711_chip =;

static const struct regmap_range tas5707_volatile_regs_range[] =;

static const struct regmap_access_table tas5707_volatile_regs =;

static const DECLARE_TLV_DB_SCALE(tas5707_volume_tlv, -7900, 50, 1);

static const char * const tas5707_volume_slew_step_txt[] =;

static const unsigned int tas5707_volume_slew_step_values[] =;

static 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[] =;

static const struct reg_default tas5707_reg_defaults[] =;

static const struct regmap_config tas5707_regmap_config =;

static const struct tas571x_chip tas5707_chip =;

static const char *const tas5717_supply_names[] =;

static const DECLARE_TLV_DB_SCALE(tas5717_volume_tlv, -10375, 25, 0);

static const struct snd_kcontrol_new tas5717_controls[] =;

static const struct reg_default tas5717_reg_defaults[] =;

static const struct regmap_config tas5717_regmap_config =;

/* This entry is reused for tas5719 as the software interface is identical. */
static const struct tas571x_chip tas5717_chip =;

static const char *const tas5721_supply_names[] =;

static const struct snd_kcontrol_new tas5721_controls[] =;

static const struct reg_default tas5721_reg_defaults[] =;

static const struct regmap_config tas5721_regmap_config =;

static const char *const tas5733_supply_names[] =;

static const struct reg_default tas5733_reg_defaults[] =;

static const struct regmap_config tas5733_regmap_config =;

static const struct tas571x_chip tas5733_chip =;

static const struct tas571x_chip tas5721_chip =;

static const struct snd_soc_dapm_widget tas571x_dapm_widgets[] =;

static const struct snd_soc_dapm_route tas571x_dapm_routes[] =;

static const struct snd_soc_component_driver tas571x_component =;

static struct snd_soc_dai_driver tas571x_dai =;

static int tas571x_i2c_probe(struct i2c_client *client)
{}

static void tas571x_i2c_remove(struct i2c_client *client)
{}

static const struct of_device_id tas571x_of_match[] __maybe_unused =;
MODULE_DEVICE_TABLE(of, tas571x_of_match);

static const struct i2c_device_id tas571x_i2c_id[] =;
MODULE_DEVICE_TABLE(i2c, tas571x_i2c_id);

static struct i2c_driver tas571x_i2c_driver =;
module_i2c_driver();

MODULE_DESCRIPTION();
MODULE_AUTHOR();
MODULE_LICENSE();