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

Commit cc962479 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/compress', 'asoc/topic/const' and...

Merge remote-tracking branches 'asoc/topic/compress', 'asoc/topic/const' and 'asoc/topic/cs35l34' into asoc-next
Loading
Loading
Loading
Loading
+64 −0
Original line number Diff line number Diff line
CS35L34 Speaker Amplifier

Required properties:

  - compatible : "cirrus,cs35l34"

  - reg : the I2C address of the device for I2C.

  - VA-supply, VP-supply : power supplies for the device,
    as covered in
    Documentation/devicetree/bindings/regulator/regulator.txt.

  - cirrus,boost-vtge-millivolt : Boost Voltage Value.  Configures the boost
    converter's output voltage in mV. The range is from VP to 8V with
    increments of 100mV.

  - cirrus,boost-nanohenry: Inductor value for boost converter. The value is
    in nH and they can be values of 1000nH, 1100nH, 1200nH, 1500nH, and 2200nH.

Optional properties:

  - reset-gpios: GPIO used to reset the amplifier.

  - interrupt-parent : Specifies the phandle of the interrupt controller to
    which the IRQs from CS35L34 are delivered to.
  - interrupts : IRQ line info CS35L34.
    (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
    for further information relating to interrupt properties)

  - cirrus,boost-peak-milliamp : Boost converter peak current limit in mA. The
    range starts at 1200mA and goes to a maximum of 3840mA with increments of
    80mA. The default value is 2480mA.

  - cirrus,i2s-sdinloc : ADSP SDIN I2S channel location. Indicates whether the
    received mono data is in the left or right portion of the I2S frame
    according to the AD0 pin or directly via this configuration.
    0x0 (Default) = Selected by AD0 input (if AD0 = LOW, use left channel),
    0x2 = Left,
    0x1 = Selected by the inversion of the AD0 input (if AD0 = LOW, use right
    channel),
    0x3 = Right.

  - cirrus,gain-zc-disable: Boolean property. If set, the gain change will take
    effect without waiting for a zero cross.

  - cirrus,tdm-rising-edge: Boolean property. If set, data is on the rising edge of
    SCLK. Otherwise, data is on the falling edge of SCLK.


Example:

cs35l34: cs35l34@40 {
	compatible = "cirrus,cs35l34";
	reg = <0x40>;

	interrupt-parent = <&gpio8>;
	interrupts = <3 IRQ_TYPE_LEVEL_LOW>;

	reset-gpios = <&gpio 10 0>;

	cirrus,boost-vtge-milltvolt = <8000>; /* 8V */
	cirrus,boost-ind-nanohenry = <1000>; /* 1uH */
	cirrus,boost-peak-milliamp = <3000>; /* 3A */
};
+35 −0
Original line number Diff line number Diff line
/*
 * linux/sound/cs35l34.h -- Platform data for CS35l34
 *
 * Copyright (c) 2016 Cirrus Logic Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __CS35L34_H
#define __CS35L34_H

struct cs35l34_platform_data {
	/* Set AIF to half drive strength */
	bool aif_half_drv;
	/* Digital Soft Ramp Disable */
	bool digsft_disable;
	/* Amplifier Invert */
	bool amp_inv;
	/* Peak current (mA) */
	unsigned int boost_peak;
	/* Boost inductor value (nH) */
	unsigned int boost_ind;
	/* Boost Controller Voltage Setting (mV) */
	unsigned int boost_vtge;
	/* Gain Change Zero Cross */
	bool gain_zc_disable;
	/* SDIN Left/Right Selection */
	unsigned int i2s_sdinloc;
	/* TDM Rising Edge */
	bool tdm_rising_edge;
};

#endif /* __CS35L34_H */
+25 −0
Original line number Diff line number Diff line
@@ -207,6 +207,30 @@ struct snd_soc_dai_ops {
		struct snd_soc_dai *);
};

struct snd_soc_cdai_ops {
	/*
	 * for compress ops
	 */
	int (*startup)(struct snd_compr_stream *,
			struct snd_soc_dai *);
	int (*shutdown)(struct snd_compr_stream *,
			struct snd_soc_dai *);
	int (*set_params)(struct snd_compr_stream *,
			struct snd_compr_params *, struct snd_soc_dai *);
	int (*get_params)(struct snd_compr_stream *,
			struct snd_codec *, struct snd_soc_dai *);
	int (*set_metadata)(struct snd_compr_stream *,
			struct snd_compr_metadata *, struct snd_soc_dai *);
	int (*get_metadata)(struct snd_compr_stream *,
			struct snd_compr_metadata *, struct snd_soc_dai *);
	int (*trigger)(struct snd_compr_stream *, int,
			struct snd_soc_dai *);
	int (*pointer)(struct snd_compr_stream *,
			struct snd_compr_tstamp *, struct snd_soc_dai *);
	int (*ack)(struct snd_compr_stream *, size_t,
			struct snd_soc_dai *);
};

/*
 * Digital Audio Interface Driver.
 *
@@ -236,6 +260,7 @@ struct snd_soc_dai_driver {

	/* ops */
	const struct snd_soc_dai_ops *ops;
	const struct snd_soc_cdai_ops *cops;

	/* DAI capabilities */
	struct snd_soc_pcm_stream capture;
+5 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ config SND_SOC_ALL_CODECS
	select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
	select SND_SOC_CS35L32 if I2C
	select SND_SOC_CS35L33 if I2C
	select SND_SOC_CS35L34 if I2C
	select SND_SOC_CS42L51_I2C if I2C
	select SND_SOC_CS42L52 if I2C && INPUT
	select SND_SOC_CS42L56 if I2C && INPUT
@@ -399,6 +400,10 @@ config SND_SOC_CS35L33
	tristate "Cirrus Logic CS35L33 CODEC"
	depends on I2C

config SND_SOC_CS35L34
	tristate "Cirrus Logic CS35L34 CODEC"
	depends on I2C

config SND_SOC_CS42L51
	tristate

+2 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ snd-soc-bt-sco-objs := bt-sco.o
snd-soc-cq93vc-objs := cq93vc.o
snd-soc-cs35l32-objs := cs35l32.o
snd-soc-cs35l33-objs := cs35l33.o
snd-soc-cs35l34-objs := cs35l34.o
snd-soc-cs42l51-objs := cs42l51.o
snd-soc-cs42l51-i2c-objs := cs42l51-i2c.o
snd-soc-cs42l52-objs := cs42l52.o
@@ -263,6 +264,7 @@ obj-$(CONFIG_SND_SOC_BT_SCO) += snd-soc-bt-sco.o
obj-$(CONFIG_SND_SOC_CQ0093VC) += snd-soc-cq93vc.o
obj-$(CONFIG_SND_SOC_CS35L32)	+= snd-soc-cs35l32.o
obj-$(CONFIG_SND_SOC_CS35L33)	+= snd-soc-cs35l33.o
obj-$(CONFIG_SND_SOC_CS35L34)	+= snd-soc-cs35l34.o
obj-$(CONFIG_SND_SOC_CS42L51)	+= snd-soc-cs42l51.o
obj-$(CONFIG_SND_SOC_CS42L51_I2C)	+= snd-soc-cs42l51-i2c.o
obj-$(CONFIG_SND_SOC_CS42L52)	+= snd-soc-cs42l52.o
Loading