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

Commit 28e48f0e authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/fix/fsl-dma', 'asoc/fix/fsl-spdif',...

Merge remote-tracking branches 'asoc/fix/fsl-dma', 'asoc/fix/fsl-spdif', 'asoc/fix/pxa', 'asoc/fix/rcar' and 'asoc/fix/sigmadsp' into asoc-linus
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -225,11 +225,11 @@ config SND_SOC_ADAU1373
config SND_SOC_ADAU1701
config SND_SOC_ADAU1701
	tristate "Analog Devices ADAU1701 CODEC"
	tristate "Analog Devices ADAU1701 CODEC"
	depends on I2C
	depends on I2C
	select SND_SOC_SIGMADSP
	select SND_SOC_SIGMADSP_I2C


config SND_SOC_ADAU17X1
config SND_SOC_ADAU17X1
	tristate
	tristate
	select SND_SOC_SIGMADSP
	select SND_SOC_SIGMADSP_REGMAP


config SND_SOC_ADAU1761
config SND_SOC_ADAU1761
	tristate
	tristate
@@ -476,6 +476,14 @@ config SND_SOC_SIGMADSP
	tristate
	tristate
	select CRC32
	select CRC32


config SND_SOC_SIGMADSP_I2C
	tristate
	select SND_SOC_SIGMADSP

config SND_SOC_SIGMADSP_REGMAP
	tristate
	select SND_SOC_SIGMADSP

config SND_SOC_SIRF_AUDIO_CODEC
config SND_SOC_SIRF_AUDIO_CODEC
	tristate "SiRF SoC internal audio codec"
	tristate "SiRF SoC internal audio codec"
	select REGMAP_MMIO
	select REGMAP_MMIO
+4 −0
Original line number Original line Diff line number Diff line
@@ -77,6 +77,8 @@ snd-soc-sgtl5000-objs := sgtl5000.o
snd-soc-alc5623-objs := alc5623.o
snd-soc-alc5623-objs := alc5623.o
snd-soc-alc5632-objs := alc5632.o
snd-soc-alc5632-objs := alc5632.o
snd-soc-sigmadsp-objs := sigmadsp.o
snd-soc-sigmadsp-objs := sigmadsp.o
snd-soc-sigmadsp-i2c-objs := sigmadsp-i2c.o
snd-soc-sigmadsp-regmap-objs := sigmadsp-regmap.o
snd-soc-si476x-objs := si476x.o
snd-soc-si476x-objs := si476x.o
snd-soc-sirf-audio-codec-objs := sirf-audio-codec.o
snd-soc-sirf-audio-codec-objs := sirf-audio-codec.o
snd-soc-sn95031-objs := sn95031.o
snd-soc-sn95031-objs := sn95031.o
@@ -240,6 +242,8 @@ obj-$(CONFIG_SND_SOC_RT5651) += snd-soc-rt5651.o
obj-$(CONFIG_SND_SOC_RT5677)	+= snd-soc-rt5677.o
obj-$(CONFIG_SND_SOC_RT5677)	+= snd-soc-rt5677.o
obj-$(CONFIG_SND_SOC_SGTL5000)  += snd-soc-sgtl5000.o
obj-$(CONFIG_SND_SOC_SGTL5000)  += snd-soc-sgtl5000.o
obj-$(CONFIG_SND_SOC_SIGMADSP)	+= snd-soc-sigmadsp.o
obj-$(CONFIG_SND_SOC_SIGMADSP)	+= snd-soc-sigmadsp.o
obj-$(CONFIG_SND_SOC_SIGMADSP_I2C)	+= snd-soc-sigmadsp-i2c.o
obj-$(CONFIG_SND_SOC_SIGMADSP_REGMAP)	+= snd-soc-sigmadsp-regmap.o
obj-$(CONFIG_SND_SOC_SI476X)	+= snd-soc-si476x.o
obj-$(CONFIG_SND_SOC_SI476X)	+= snd-soc-si476x.o
obj-$(CONFIG_SND_SOC_SN95031)	+=snd-soc-sn95031.o
obj-$(CONFIG_SND_SOC_SN95031)	+=snd-soc-sn95031.o
obj-$(CONFIG_SND_SOC_SPDIF)	+= snd-soc-spdif-rx.o snd-soc-spdif-tx.o
obj-$(CONFIG_SND_SOC_SPDIF)	+= snd-soc-spdif-rx.o snd-soc-spdif-tx.o
+35 −0
Original line number Original line Diff line number Diff line
/*
 * Load Analog Devices SigmaStudio firmware files
 *
 * Copyright 2009-2011 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

#include <linux/i2c.h>
#include <linux/export.h>
#include <linux/module.h>

#include "sigmadsp.h"

static int sigma_action_write_i2c(void *control_data,
	const struct sigma_action *sa, size_t len)
{
	return i2c_master_send(control_data, (const unsigned char *)&sa->addr,
		len);
}

int process_sigma_firmware(struct i2c_client *client, const char *name)
{
	struct sigma_firmware ssfw;

	ssfw.control_data = client;
	ssfw.write = sigma_action_write_i2c;

	return _process_sigma_firmware(&client->dev, &ssfw, name);
}
EXPORT_SYMBOL(process_sigma_firmware);

MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
MODULE_DESCRIPTION("SigmaDSP I2C firmware loader");
MODULE_LICENSE("GPL");
+36 −0
Original line number Original line Diff line number Diff line
/*
 * Load Analog Devices SigmaStudio firmware files
 *
 * Copyright 2009-2011 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

#include <linux/regmap.h>
#include <linux/export.h>
#include <linux/module.h>

#include "sigmadsp.h"

static int sigma_action_write_regmap(void *control_data,
	const struct sigma_action *sa, size_t len)
{
	return regmap_raw_write(control_data, be16_to_cpu(sa->addr),
		sa->payload, len - 2);
}

int process_sigma_firmware_regmap(struct device *dev, struct regmap *regmap,
	const char *name)
{
	struct sigma_firmware ssfw;

	ssfw.control_data = regmap;
	ssfw.write = sigma_action_write_regmap;

	return _process_sigma_firmware(dev, &ssfw, name);
}
EXPORT_SYMBOL(process_sigma_firmware_regmap);

MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
MODULE_DESCRIPTION("SigmaDSP regmap firmware loader");
MODULE_LICENSE("GPL");
+2 −63
Original line number Original line Diff line number Diff line
@@ -34,23 +34,6 @@ enum {
	SIGMA_ACTION_END,
	SIGMA_ACTION_END,
};
};


struct sigma_action {
	u8 instr;
	u8 len_hi;
	__le16 len;
	__be16 addr;
	unsigned char payload[];
} __packed;

struct sigma_firmware {
	const struct firmware *fw;
	size_t pos;

	void *control_data;
	int (*write)(void *control_data, const struct sigma_action *sa,
			size_t len);
};

static inline u32 sigma_action_len(struct sigma_action *sa)
static inline u32 sigma_action_len(struct sigma_action *sa)
{
{
	return (sa->len_hi << 16) | le16_to_cpu(sa->len);
	return (sa->len_hi << 16) | le16_to_cpu(sa->len);
@@ -138,7 +121,7 @@ process_sigma_actions(struct sigma_firmware *ssfw)
	return 0;
	return 0;
}
}


static int _process_sigma_firmware(struct device *dev,
int _process_sigma_firmware(struct device *dev,
	struct sigma_firmware *ssfw, const char *name)
	struct sigma_firmware *ssfw, const char *name)
{
{
	int ret;
	int ret;
@@ -197,50 +180,6 @@ static int _process_sigma_firmware(struct device *dev,


	return ret;
	return ret;
}
}

EXPORT_SYMBOL_GPL(_process_sigma_firmware);
#if IS_ENABLED(CONFIG_I2C)

static int sigma_action_write_i2c(void *control_data,
	const struct sigma_action *sa, size_t len)
{
	return i2c_master_send(control_data, (const unsigned char *)&sa->addr,
		len);
}

int process_sigma_firmware(struct i2c_client *client, const char *name)
{
	struct sigma_firmware ssfw;

	ssfw.control_data = client;
	ssfw.write = sigma_action_write_i2c;

	return _process_sigma_firmware(&client->dev, &ssfw, name);
}
EXPORT_SYMBOL(process_sigma_firmware);

#endif

#if IS_ENABLED(CONFIG_REGMAP)

static int sigma_action_write_regmap(void *control_data,
	const struct sigma_action *sa, size_t len)
{
	return regmap_raw_write(control_data, be16_to_cpu(sa->addr),
		sa->payload, len - 2);
}

int process_sigma_firmware_regmap(struct device *dev, struct regmap *regmap,
	const char *name)
{
	struct sigma_firmware ssfw;

	ssfw.control_data = regmap;
	ssfw.write = sigma_action_write_regmap;

	return _process_sigma_firmware(dev, &ssfw, name);
}
EXPORT_SYMBOL(process_sigma_firmware_regmap);

#endif


MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
Loading