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

Commit 2ef39e60 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branch 'asoc/topic/ux500' into for-3.7

parents a89be93c b4cad7af
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
* MOP500 Audio Machine Driver

This node is responsible for linking together all ux500 Audio Driver components.

Required properties:
 - compatible              : "stericsson,snd-soc-mop500"

Non-standard properties:
 - stericsson,cpu-dai      : Phandle to the CPU-side DAI
 - stericsson,audio-codec  : Phandle to the Audio CODEC
 - stericsson,card-name    : Over-ride default card name

Example:

	sound {
		compatible = "stericsson,snd-soc-mop500";

		stericsson,cpu-dai = <&msp1 &msp3>;
		stericsson,audio-codec = <&codec>;
	};

	msp1: msp@80124000 {
		compatible = "stericsson,ux500-msp-i2s";
		reg = <0x80124000 0x1000>;
		interrupts = <0 62 0x4>;
		v-ape-supply = <&db8500_vape_reg>;
	};

	msp3: msp@80125000 {
		compatible = "stericsson,ux500-msp-i2s";
		reg = <0x80125000 0x1000>;
		interrupts = <0 62 0x4>;
		v-ape-supply = <&db8500_vape_reg>;
	};

	codec: ab8500-codec {
		compatible = "stericsson,ab8500-codec";
		stericsson,earpeice-cmv = <950>; /* Units in mV. */
	};
+43 −0
Original line number Diff line number Diff line
* ux500 MSP (CPU-side Digital Audio Interface)

Required properties:
 - compatible       :"stericsson,ux500-msp-i2s"
 - reg              : Physical base address and length of the device's registers.

Optional properties:
 - interrupts       : The interrupt output from the device.
 - interrupt-parent : The parent interrupt controller.
 - <name>-supply    : Phandle to the regulator <name> supply

Example:

	sound {
		compatible = "stericsson,snd-soc-mop500";

		stericsson,platform-pcm-dma = <&pcm>;
		stericsson,cpu-dai = <&msp1 &msp3>;
		stericsson,audio-codec = <&codec>;
	};

	pcm: ux500-pcm {
		compatible = "stericsson,ux500-pcm";
	};

	msp1: msp@80124000 {
		compatible = "stericsson,ux500-msp-i2s";
		reg = <0x80124000 0x1000>;
		interrupts = <0 62 0x4>;
		v-ape-supply = <&db8500_vape_reg>;
	};

	msp3: msp@80125000 {
		compatible = "stericsson,ux500-msp-i2s";
		reg = <0x80125000 0x1000>;
		interrupts = <0 62 0x4>;
		v-ape-supply = <&db8500_vape_reg>;
	};

	codec: ab8500-codec {
		compatible = "stericsson,ab8500-codec";
		stericsson,earpeice-cmv = <950>; /* Units in mV. */
	};
+1 −78
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@
#include <linux/platform_device.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/pinctrl/consumer.h>

#include <plat/gpio-nomadik.h>
#include <plat/pincfg.h>
@@ -23,53 +22,6 @@
#include "devices-db8500.h"
#include "pins-db8500.h"

/* MSP1/3 Tx/Rx usage protection */
static DEFINE_SPINLOCK(msp_rxtx_lock);

/* Reference Count */
static int msp_rxtx_ref;

/* Pin modes */
struct pinctrl *msp1_p;
struct pinctrl_state *msp1_def;
struct pinctrl_state *msp1_sleep;

int msp13_i2s_init(void)
{
	int retval = 0;
	unsigned long flags;

	spin_lock_irqsave(&msp_rxtx_lock, flags);
	if (msp_rxtx_ref == 0 && !(IS_ERR(msp1_p) || IS_ERR(msp1_def))) {
		retval = pinctrl_select_state(msp1_p, msp1_def);
		if (retval)
			pr_err("could not set MSP1 defstate\n");
	}
	if (!retval)
		msp_rxtx_ref++;
	spin_unlock_irqrestore(&msp_rxtx_lock, flags);

	return retval;
}

int msp13_i2s_exit(void)
{
	int retval = 0;
	unsigned long flags;

	spin_lock_irqsave(&msp_rxtx_lock, flags);
	WARN_ON(!msp_rxtx_ref);
	msp_rxtx_ref--;
	if (msp_rxtx_ref == 0 && !(IS_ERR(msp1_p) || IS_ERR(msp1_sleep))) {
		retval = pinctrl_select_state(msp1_p, msp1_sleep);
		if (retval)
			pr_err("could not set MSP1 sleepstate\n");
	}
	spin_unlock_irqrestore(&msp_rxtx_lock, flags);

	return retval;
}

static struct stedma40_chan_cfg msp0_dma_rx = {
	.high_priority = true,
	.dir = STEDMA40_PERIPH_TO_MEM,
@@ -132,8 +84,6 @@ static struct msp_i2s_platform_data msp1_platform_data = {
	.id = MSP_I2S_1,
	.msp_i2s_dma_rx = NULL,
	.msp_i2s_dma_tx = &msp1_dma_tx,
	.msp_i2s_init = msp13_i2s_init,
	.msp_i2s_exit = msp13_i2s_exit,
};

static struct stedma40_chan_cfg msp2_dma_rx = {
@@ -219,49 +169,22 @@ static struct msp_i2s_platform_data msp3_platform_data = {
	.id		= MSP_I2S_3,
	.msp_i2s_dma_rx	= &msp1_dma_rx,
	.msp_i2s_dma_tx	= NULL,
	.msp_i2s_init = msp13_i2s_init,
	.msp_i2s_exit = msp13_i2s_exit,
};

int mop500_msp_init(struct device *parent)
{
	struct platform_device *msp1;

	pr_info("%s: Register platform-device 'snd-soc-mop500'.\n", __func__);
	platform_device_register(&snd_soc_mop500);

	pr_info("Initialize MSP I2S-devices.\n");
	db8500_add_msp_i2s(parent, 0, U8500_MSP0_BASE, IRQ_DB8500_MSP0,
			   &msp0_platform_data);
	msp1 = db8500_add_msp_i2s(parent, 1, U8500_MSP1_BASE, IRQ_DB8500_MSP1,
	db8500_add_msp_i2s(parent, 1, U8500_MSP1_BASE, IRQ_DB8500_MSP1,
			   &msp1_platform_data);
	db8500_add_msp_i2s(parent, 2, U8500_MSP2_BASE, IRQ_DB8500_MSP2,
			   &msp2_platform_data);
	db8500_add_msp_i2s(parent, 3, U8500_MSP3_BASE, IRQ_DB8500_MSP1,
			   &msp3_platform_data);

	/* Get the pinctrl handle for MSP1 */
	if (msp1) {
		msp1_p = pinctrl_get(&msp1->dev);
		if (IS_ERR(msp1_p))
			dev_err(&msp1->dev, "could not get MSP1 pinctrl\n");
		else {
			msp1_def = pinctrl_lookup_state(msp1_p,
							PINCTRL_STATE_DEFAULT);
			if (IS_ERR(msp1_def)) {
				dev_err(&msp1->dev,
					"could not get MSP1 defstate\n");
			}
			msp1_sleep = pinctrl_lookup_state(msp1_p,
							  PINCTRL_STATE_SLEEP);
			if (IS_ERR(msp1_sleep))
				dev_err(&msp1->dev,
					"could not get MSP1 idlestate\n");
		}
	}

	pr_info("%s: Register platform-device 'ux500-pcm'\n", __func__);
	platform_device_register(&ux500_pcm);

	return 0;
}
+0 −2
Original line number Diff line number Diff line
@@ -22,8 +22,6 @@ struct msp_i2s_platform_data {
	enum msp_i2s_id id;
	struct stedma40_chan_cfg *msp_i2s_dma_rx;
	struct stedma40_chan_cfg *msp_i2s_dma_tx;
	int (*msp_i2s_init) (void);
	int (*msp_i2s_exit) (void);
};

#endif
+4 −2
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@ enum amic_type {
/* Mic-biases */
enum amic_micbias {
	AMIC_MICBIAS_VAMIC1,
	AMIC_MICBIAS_VAMIC2
	AMIC_MICBIAS_VAMIC2,
	AMIC_MICBIAS_UNKNOWN
};

/* Bias-voltage */
@@ -31,7 +32,8 @@ enum ear_cm_voltage {
	EAR_CMV_0_95V,
	EAR_CMV_1_10V,
	EAR_CMV_1_27V,
	EAR_CMV_1_58V
	EAR_CMV_1_58V,
	EAR_CMV_UNKNOWN
};

/* Analog microphone settings */
Loading