Unverified Commit 9dc15f81 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: wm8731: Factor out the I2C and SPI bus code into separate modules



Placing both the I2C and SPI code in the same module causes problems with
mixes of modular and non-modular builds of the buses so it's generally bad
practice. As with other drivers split the bus code out of the WM8731 driver
into separate modules.

Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Acked-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20220325153121.1598494-6-broonie@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8875d104
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -42,9 +42,9 @@ config SND_ATMEL_SOC_SSC_DMA
config SND_AT91_SOC_SAM9G20_WM8731
	tristate "SoC Audio support for WM8731-based At91sam9g20 evaluation board"
	depends on ARCH_AT91 || COMPILE_TEST
	depends on ATMEL_SSC && SND_SOC_I2C_AND_SPI
	depends on ATMEL_SSC && I2C
	select SND_ATMEL_SOC_SSC_PDC
	select SND_SOC_WM8731
	select SND_SOC_WM8731_I2C
	help
	  Say Y if you want to add support for SoC audio on WM8731-based
	  AT91sam9g20 evaluation board.
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ config SND_SOC_DB1200
	select SND_SOC_AC97_CODEC
	select SND_SOC_WM9712
	select SND_SOC_AU1XPSC_I2S
	select SND_SOC_WM8731
	select SND_SOC_WM8731_I2C
	help
	  Select this option to enable audio (AC97 and I2S) on the
	  Alchemy/AMD/RMI/NetLogic Db1200, Db1550 and Db1300 evaluation boards.
+15 −3
Original line number Diff line number Diff line
@@ -265,7 +265,8 @@ config SND_SOC_ALL_CODECS
	imply SND_SOC_WM8711
	imply SND_SOC_WM8727
	imply SND_SOC_WM8728
	imply SND_SOC_WM8731
	imply SND_SOC_WM8731_I2C
	imply SND_SOC_WM8731_SPI
	imply SND_SOC_WM8737
	imply SND_SOC_WM8741
	imply SND_SOC_WM8750
@@ -1753,8 +1754,19 @@ config SND_SOC_WM8728
	depends on SND_SOC_I2C_AND_SPI

config SND_SOC_WM8731
	tristate "Wolfson Microelectronics WM8731 CODEC"
	depends on SND_SOC_I2C_AND_SPI
	tristate

config SND_SOC_WM8731_I2C
	tristate "Wolfson Microelectronics WM8731 CODEC with I2C"
	depends on I2C
	select REGMAP
	select SND_SOC_WM8731

config SND_SOC_WM8731_SPI
	tristate "Wolfson Microelectronics WM8731 CODEC with SPI"
	depends on SPI
	select REGMAP
	select SND_SOC_WM8731

config SND_SOC_WM8737
	tristate "Wolfson Microelectronics WM8737 ADC"
+4 −0
Original line number Diff line number Diff line
@@ -290,6 +290,8 @@ snd-soc-wm8711-objs := wm8711.o
snd-soc-wm8727-objs := wm8727.o
snd-soc-wm8728-objs := wm8728.o
snd-soc-wm8731-objs := wm8731.o
snd-soc-wm8731-i2c-objs := wm8731-i2c.o
snd-soc-wm8731-spi-objs := wm8731-spi.o
snd-soc-wm8737-objs := wm8737.o
snd-soc-wm8741-objs := wm8741.o
snd-soc-wm8750-objs := wm8750.o
@@ -632,6 +634,8 @@ obj-$(CONFIG_SND_SOC_WM8711) += snd-soc-wm8711.o
obj-$(CONFIG_SND_SOC_WM8727)	+= snd-soc-wm8727.o
obj-$(CONFIG_SND_SOC_WM8728)	+= snd-soc-wm8728.o
obj-$(CONFIG_SND_SOC_WM8731)	+= snd-soc-wm8731.o
obj-$(CONFIG_SND_SOC_WM8731_I2C)	+= snd-soc-wm8731-i2c.o
obj-$(CONFIG_SND_SOC_WM8731_SPI)	+= snd-soc-wm8731-spi.o
obj-$(CONFIG_SND_SOC_WM8737)	+= snd-soc-wm8737.o
obj-$(CONFIG_SND_SOC_WM8741)	+= snd-soc-wm8741.o
obj-$(CONFIG_SND_SOC_WM8750)	+= snd-soc-wm8750.o
+69 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * wm8731-i2c.c  --  WM8731 ALSA SoC Audio driver I2C code
 *
 * Copyright 2005 Openedhand Ltd.
 * Copyright 2006-12 Wolfson Microelectronics, plc
 *
 * Author: Richard Purdie <richard@openedhand.com>
 *
 * Based on wm8753.c by Liam Girdwood
 */

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

#include "wm8731.h"


static const struct of_device_id wm8731_of_match[] = {
	{ .compatible = "wlf,wm8731", },
	{ }
};
MODULE_DEVICE_TABLE(of, wm8731_of_match);

static int wm8731_i2c_probe(struct i2c_client *i2c,
			    const struct i2c_device_id *id)
{
	struct wm8731_priv *wm8731;
	int ret;

	wm8731 = devm_kzalloc(&i2c->dev, sizeof(struct wm8731_priv),
			      GFP_KERNEL);
	if (wm8731 == NULL)
		return -ENOMEM;

	i2c_set_clientdata(i2c, wm8731);

	wm8731->regmap = devm_regmap_init_i2c(i2c, &wm8731_regmap);
	if (IS_ERR(wm8731->regmap)) {
		ret = PTR_ERR(wm8731->regmap);
		dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
			ret);
		return ret;
	}

	return wm8731_init(&i2c->dev, wm8731);
}

static const struct i2c_device_id wm8731_i2c_id[] = {
	{ "wm8731", 0 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, wm8731_i2c_id);

static struct i2c_driver wm8731_i2c_driver = {
	.driver = {
		.name = "wm8731",
		.of_match_table = wm8731_of_match,
	},
	.probe =    wm8731_i2c_probe,
	.id_table = wm8731_i2c_id,
};

module_i2c_driver(wm8731_i2c_driver);

MODULE_DESCRIPTION("ASoC WM8731 driver - I2C");
MODULE_AUTHOR("Richard Purdie");
MODULE_LICENSE("GPL");
Loading