Skip to content

Commit

Permalink
ASoC: jz4740-i2s: Avoid passing enum as match data
Browse files Browse the repository at this point in the history
Instead of passing an enum as match data, and checking its value in the
probe to register one or the other dai, pass a pointer to a struct
i2s_soc_info, which contains all the information relative to one SoC.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20200306222931.39664-4-paul@crapouillou.net
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Paul Cercueil authored and Mark Brown committed Mar 9, 2020

Unverified

No user is associated with the committer email.
1 parent a42d9ba commit 62f9ed5
Showing 1 changed file with 23 additions and 13 deletions.
36 changes: 23 additions & 13 deletions sound/soc/jz4740/jz4740-i2s.c
Original file line number Diff line number Diff line change
@@ -93,6 +93,11 @@ enum jz47xx_i2s_version {
JZ_I2S_JZ4780,
};

struct i2s_soc_info {
enum jz47xx_i2s_version version;
struct snd_soc_dai_driver *dai;
};

struct jz4740_i2s {
struct resource *mem;
void __iomem *base;
@@ -104,7 +109,7 @@ struct jz4740_i2s {
struct snd_dmaengine_dai_dma_data playback_dma_data;
struct snd_dmaengine_dai_dma_data capture_dma_data;

enum jz47xx_i2s_version version;
const struct i2s_soc_info *soc_info;
};

static inline uint32_t jz4740_i2s_read(const struct jz4740_i2s *i2s,
@@ -284,7 +289,7 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
ctrl &= ~JZ_AIC_CTRL_INPUT_SAMPLE_SIZE_MASK;
ctrl |= sample_size << JZ_AIC_CTRL_INPUT_SAMPLE_SIZE_OFFSET;

if (i2s->version >= JZ_I2S_JZ4780) {
if (i2s->soc_info->version >= JZ_I2S_JZ4780) {
div_reg &= ~I2SDIV_IDV_MASK;
div_reg |= (div - 1) << I2SDIV_IDV_SHIFT;
} else {
@@ -398,7 +403,7 @@ static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai)
snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data,
&i2s->capture_dma_data);

if (i2s->version >= JZ_I2S_JZ4780) {
if (i2s->soc_info->version >= JZ_I2S_JZ4780) {
conf = (7 << JZ4780_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) |
(8 << JZ4780_AIC_CONF_FIFO_TX_THRESHOLD_OFFSET) |
JZ_AIC_CONF_OVERFLOW_PLAY_LAST |
@@ -457,6 +462,11 @@ static struct snd_soc_dai_driver jz4740_i2s_dai = {
.ops = &jz4740_i2s_dai_ops,
};

static const struct i2s_soc_info jz4740_i2s_soc_info = {
.version = JZ_I2S_JZ4740,
.dai = &jz4740_i2s_dai,
};

static struct snd_soc_dai_driver jz4780_i2s_dai = {
.probe = jz4740_i2s_dai_probe,
.remove = jz4740_i2s_dai_remove,
@@ -475,6 +485,11 @@ static struct snd_soc_dai_driver jz4780_i2s_dai = {
.ops = &jz4740_i2s_dai_ops,
};

static const struct i2s_soc_info jz4780_i2s_soc_info = {
.version = JZ_I2S_JZ4780,
.dai = &jz4780_i2s_dai,
};

static const struct snd_soc_component_driver jz4740_i2s_component = {
.name = "jz4740-i2s",
.suspend = jz4740_i2s_suspend,
@@ -483,8 +498,8 @@ static const struct snd_soc_component_driver jz4740_i2s_component = {

#ifdef CONFIG_OF
static const struct of_device_id jz4740_of_matches[] = {
{ .compatible = "ingenic,jz4740-i2s", .data = (void *)JZ_I2S_JZ4740 },
{ .compatible = "ingenic,jz4780-i2s", .data = (void *)JZ_I2S_JZ4780 },
{ .compatible = "ingenic,jz4740-i2s", .data = &jz4740_i2s_soc_info },
{ .compatible = "ingenic,jz4780-i2s", .data = &jz4780_i2s_soc_info },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, jz4740_of_matches);
@@ -501,7 +516,7 @@ static int jz4740_i2s_dev_probe(struct platform_device *pdev)
if (!i2s)
return -ENOMEM;

i2s->version = (enum jz47xx_i2s_version)of_device_get_match_data(dev);
i2s->soc_info = device_get_match_data(dev);

mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
i2s->base = devm_ioremap_resource(dev, mem);
@@ -520,13 +535,8 @@ static int jz4740_i2s_dev_probe(struct platform_device *pdev)

platform_set_drvdata(pdev, i2s);

if (i2s->version == JZ_I2S_JZ4780)
ret = devm_snd_soc_register_component(dev,
&jz4740_i2s_component, &jz4780_i2s_dai, 1);
else
ret = devm_snd_soc_register_component(dev,
&jz4740_i2s_component, &jz4740_i2s_dai, 1);

ret = devm_snd_soc_register_component(dev, &jz4740_i2s_component,
i2s->soc_info->dai, 1);
if (ret)
return ret;

0 comments on commit 62f9ed5

Please sign in to comment.