Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a300de3c authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: ak4642: Add Digital Playback Volume control

parent 338de9d9
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <linux/slab.h>
#include <sound/soc-dapm.h>
#include <sound/initval.h>
#include <sound/tlv.h>

#include "ak4642.h"

@@ -103,6 +104,23 @@

struct snd_soc_codec_device soc_codec_dev_ak4642;

/*
 * Playback Volume (table 39)
 *
 * max : 0x00 : +12.0 dB
 *       ( 0.5 dB step )
 * min : 0xFE : -115.0 dB
 * mute: 0xFF
 */
static const DECLARE_TLV_DB_SCALE(out_tlv, -11500, 50, 1);

static const struct snd_kcontrol_new ak4642_snd_controls[] = {

	SOC_DOUBLE_R_TLV("Digital Playback Volume", L_DVC, R_DVC,
			 0, 0xFF, 1, out_tlv),
};


/* codec private data */
struct ak4642_priv {
	struct snd_soc_codec codec;
@@ -196,7 +214,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
		 *
		 * PLL, Master Mode
		 * Audio I/F Format :MSB justified (ADC & DAC)
		 * Digital Volume: -8dB
		 * Bass Boost Level : Middle
		 *
		 * This operation came from example code of
@@ -206,8 +223,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
		ak4642_write(codec, 0x0e, 0x19);
		ak4642_write(codec, 0x09, 0x91);
		ak4642_write(codec, 0x0c, 0x91);
		ak4642_write(codec, 0x0a, 0x28);
		ak4642_write(codec, 0x0d, 0x28);
		ak4642_write(codec, 0x00, 0x64);
		snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK,	PMHP);
		snd_soc_update_bits(codec, PW_MGMT2, HPMTN,	HPMTN);
@@ -540,6 +555,9 @@ static int ak4642_probe(struct platform_device *pdev)
		goto pcm_err;
	}

	snd_soc_add_controls(ak4642_codec, ak4642_snd_controls,
			     ARRAY_SIZE(ak4642_snd_controls));

	dev_info(&pdev->dev, "AK4642 Audio Codec %s", AK4642_VERSION);
	return ret;