ASoC: loongson: Simplify code formatting
Merge series from Binbin Zhou <zhoubinbin@loongson.cn>: This patchset attempts to improve code readability by simplifying code formatting. No functional changes.
This commit is contained in:
@@ -24,27 +24,27 @@ static int loongson_card_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
|
||||
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
|
||||
struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
|
||||
struct loongson_card_data *ls_card = snd_soc_card_get_drvdata(rtd->card);
|
||||
struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
|
||||
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
|
||||
int ret, mclk;
|
||||
|
||||
if (ls_card->mclk_fs) {
|
||||
mclk = ls_card->mclk_fs * params_rate(params);
|
||||
ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
|
||||
SND_SOC_CLOCK_OUT);
|
||||
if (ret < 0) {
|
||||
dev_err(codec_dai->dev, "cpu_dai clock not set\n");
|
||||
return ret;
|
||||
}
|
||||
if (!ls_card->mclk_fs)
|
||||
return 0;
|
||||
|
||||
ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
|
||||
SND_SOC_CLOCK_IN);
|
||||
if (ret < 0) {
|
||||
dev_err(codec_dai->dev, "codec_dai clock not set\n");
|
||||
return ret;
|
||||
}
|
||||
mclk = ls_card->mclk_fs * params_rate(params);
|
||||
ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, SND_SOC_CLOCK_OUT);
|
||||
if (ret < 0) {
|
||||
dev_err(codec_dai->dev, "cpu_dai clock not set\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_dai_set_sysclk(codec_dai, 0, mclk, SND_SOC_CLOCK_IN);
|
||||
if (ret < 0) {
|
||||
dev_err(codec_dai->dev, "codec_dai clock not set\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -68,46 +68,53 @@ static struct snd_soc_dai_link loongson_dai_links[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct acpi_device *loongson_card_acpi_find_device(struct snd_soc_card *card,
|
||||
const char *name)
|
||||
{
|
||||
struct fwnode_handle *fwnode = card->dev->fwnode;
|
||||
struct fwnode_reference_args args;
|
||||
int status;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
status = acpi_node_get_property_reference(fwnode, name, 0, &args);
|
||||
if (status || !is_acpi_device_node(args.fwnode)) {
|
||||
dev_err(card->dev, "No matching phy in ACPI table\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return to_acpi_device_node(args.fwnode);
|
||||
}
|
||||
|
||||
static int loongson_card_parse_acpi(struct loongson_card_data *data)
|
||||
{
|
||||
struct snd_soc_card *card = &data->snd_card;
|
||||
struct fwnode_handle *fwnode = card->dev->fwnode;
|
||||
struct fwnode_reference_args args;
|
||||
const char *codec_dai_name;
|
||||
struct acpi_device *adev;
|
||||
struct device *phy_dev;
|
||||
int ret, i;
|
||||
int i;
|
||||
|
||||
/* fixup platform name based on reference node */
|
||||
memset(&args, 0, sizeof(args));
|
||||
ret = acpi_node_get_property_reference(fwnode, "cpu", 0, &args);
|
||||
if (ret || !is_acpi_device_node(args.fwnode)) {
|
||||
dev_err(card->dev, "No matching phy in ACPI table\n");
|
||||
return ret ?: -ENOENT;
|
||||
}
|
||||
adev = to_acpi_device_node(args.fwnode);
|
||||
adev = loongson_card_acpi_find_device(card, "cpu");
|
||||
if (!adev)
|
||||
return -ENOENT;
|
||||
|
||||
phy_dev = acpi_get_first_physical_node(adev);
|
||||
if (!phy_dev)
|
||||
return -EPROBE_DEFER;
|
||||
for (i = 0; i < card->num_links; i++)
|
||||
loongson_dai_links[i].platforms->name = dev_name(phy_dev);
|
||||
|
||||
/* fixup codec name based on reference node */
|
||||
memset(&args, 0, sizeof(args));
|
||||
ret = acpi_node_get_property_reference(fwnode, "codec", 0, &args);
|
||||
if (ret || !is_acpi_device_node(args.fwnode)) {
|
||||
dev_err(card->dev, "No matching phy in ACPI table\n");
|
||||
return ret ?: -ENOENT;
|
||||
}
|
||||
adev = to_acpi_device_node(args.fwnode);
|
||||
adev = loongson_card_acpi_find_device(card, "codec");
|
||||
if (!adev)
|
||||
return -ENOENT;
|
||||
snprintf(codec_name, sizeof(codec_name), "i2c-%s", acpi_dev_name(adev));
|
||||
for (i = 0; i < card->num_links; i++)
|
||||
loongson_dai_links[i].codecs->name = codec_name;
|
||||
|
||||
device_property_read_string(card->dev, "codec-dai-name",
|
||||
&codec_dai_name);
|
||||
for (i = 0; i < card->num_links; i++)
|
||||
device_property_read_string(card->dev, "codec-dai-name", &codec_dai_name);
|
||||
|
||||
for (i = 0; i < card->num_links; i++) {
|
||||
loongson_dai_links[i].platforms->name = dev_name(phy_dev);
|
||||
loongson_dai_links[i].codecs->name = codec_name;
|
||||
loongson_dai_links[i].codecs->dai_name = codec_dai_name;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -159,40 +166,36 @@ err:
|
||||
static int loongson_asoc_card_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct loongson_card_data *ls_priv;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct snd_soc_card *card;
|
||||
int ret;
|
||||
|
||||
ls_priv = devm_kzalloc(&pdev->dev, sizeof(*ls_priv), GFP_KERNEL);
|
||||
ls_priv = devm_kzalloc(dev, sizeof(*ls_priv), GFP_KERNEL);
|
||||
if (!ls_priv)
|
||||
return -ENOMEM;
|
||||
|
||||
card = &ls_priv->snd_card;
|
||||
|
||||
card->dev = &pdev->dev;
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->dai_link = loongson_dai_links;
|
||||
card->num_links = ARRAY_SIZE(loongson_dai_links);
|
||||
snd_soc_card_set_drvdata(card, ls_priv);
|
||||
|
||||
ret = device_property_read_string(&pdev->dev, "model", &card->name);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Error parsing card name: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = device_property_read_u32(&pdev->dev, "mclk-fs", &ls_priv->mclk_fs);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Error parsing mclk-fs: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = device_property_read_string(dev, "model", &card->name);
|
||||
if (ret)
|
||||
dev_err_probe(dev, ret, "Error parsing card name\n");
|
||||
|
||||
if (has_acpi_companion(&pdev->dev))
|
||||
ret = loongson_card_parse_acpi(ls_priv);
|
||||
else
|
||||
ret = loongson_card_parse_of(ls_priv);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = device_property_read_u32(dev, "mclk-fs", &ls_priv->mclk_fs);
|
||||
if (ret)
|
||||
dev_err_probe(dev, ret, "Error parsing mclk-fs\n");
|
||||
|
||||
return devm_snd_soc_register_card(&pdev->dev, card);
|
||||
ret = has_acpi_companion(dev) ? loongson_card_parse_acpi(ls_priv)
|
||||
: loongson_card_parse_of(ls_priv);
|
||||
if (ret)
|
||||
dev_err_probe(dev, ret, "Error parsing acpi/of properties\n");
|
||||
|
||||
return devm_snd_soc_register_card(dev, card);
|
||||
}
|
||||
|
||||
static const struct of_device_id loongson_asoc_dt_ids[] = {
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
#include "loongson_i2s.h"
|
||||
|
||||
/* DMA dma_order Register */
|
||||
#define DMA_ORDER_STOP (1 << 4) /* DMA stop */
|
||||
#define DMA_ORDER_START (1 << 3) /* DMA start */
|
||||
#define DMA_ORDER_ASK_VALID (1 << 2) /* DMA ask valid flag */
|
||||
#define DMA_ORDER_AXI_UNCO (1 << 1) /* Uncache access */
|
||||
#define DMA_ORDER_ADDR_64 (1 << 0) /* 64bits address support */
|
||||
#define DMA_ORDER_STOP BIT(4) /* DMA stop */
|
||||
#define DMA_ORDER_START BIT(3) /* DMA start */
|
||||
#define DMA_ORDER_ASK_VALID BIT(2) /* DMA ask valid flag */
|
||||
#define DMA_ORDER_AXI_UNCO BIT(1) /* Uncache access */
|
||||
#define DMA_ORDER_ADDR_64 BIT(0) /* 64bits address support */
|
||||
|
||||
#define DMA_ORDER_ASK_MASK (~0x1fUL) /* Ask addr mask */
|
||||
#define DMA_ORDER_CTRL_MASK (0x0fUL) /* Control mask */
|
||||
|
||||
@@ -21,34 +21,33 @@
|
||||
SNDRV_PCM_FMTBIT_S20_3LE | \
|
||||
SNDRV_PCM_FMTBIT_S24_LE)
|
||||
|
||||
#define LOONGSON_I2S_TX_ENABLE (I2S_CTRL_TX_EN | I2S_CTRL_TX_DMA_EN)
|
||||
#define LOONGSON_I2S_RX_ENABLE (I2S_CTRL_RX_EN | I2S_CTRL_RX_DMA_EN)
|
||||
|
||||
#define LOONGSON_I2S_DEF_DELAY 10
|
||||
#define LOONGSON_I2S_DEF_TIMEOUT 500000
|
||||
|
||||
static int loongson_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
struct loongson_i2s *i2s = snd_soc_dai_get_drvdata(dai);
|
||||
unsigned int mask;
|
||||
int ret = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_TX_EN | I2S_CTRL_TX_DMA_EN,
|
||||
I2S_CTRL_TX_EN | I2S_CTRL_TX_DMA_EN);
|
||||
else
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_RX_EN | I2S_CTRL_RX_DMA_EN,
|
||||
I2S_CTRL_RX_EN | I2S_CTRL_RX_DMA_EN);
|
||||
mask = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
|
||||
LOONGSON_I2S_TX_ENABLE : LOONGSON_I2S_RX_ENABLE;
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, mask, mask);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_TX_EN | I2S_CTRL_TX_DMA_EN, 0);
|
||||
else
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_RX_EN | I2S_CTRL_RX_DMA_EN, 0);
|
||||
mask = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
|
||||
LOONGSON_I2S_TX_ENABLE : LOONGSON_I2S_RX_ENABLE;
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, mask, 0);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
@@ -123,10 +122,40 @@ static int loongson_i2s_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int loongson_i2s_enable_mclk(struct loongson_i2s *i2s)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
if (i2s->rev_id == 0)
|
||||
return 0;
|
||||
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_MCLK_EN, I2S_CTRL_MCLK_EN);
|
||||
|
||||
return regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_MCLK_READY,
|
||||
LOONGSON_I2S_DEF_DELAY,
|
||||
LOONGSON_I2S_DEF_TIMEOUT);
|
||||
}
|
||||
|
||||
static int loongson_i2s_enable_bclk(struct loongson_i2s *i2s)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
if (i2s->rev_id == 0)
|
||||
return 0;
|
||||
|
||||
return regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_CLK_READY,
|
||||
LOONGSON_I2S_DEF_DELAY,
|
||||
LOONGSON_I2S_DEF_TIMEOUT);
|
||||
}
|
||||
|
||||
static int loongson_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||
{
|
||||
struct loongson_i2s *i2s = snd_soc_dai_get_drvdata(dai);
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
@@ -148,54 +177,29 @@ static int loongson_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||
/* Enable master mode */
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, I2S_CTRL_MASTER,
|
||||
I2S_CTRL_MASTER);
|
||||
if (i2s->rev_id == 1) {
|
||||
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_CLK_READY,
|
||||
10, 500000);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait BCLK ready timeout\n");
|
||||
}
|
||||
ret = loongson_i2s_enable_bclk(i2s);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait BCLK ready timeout\n");
|
||||
break;
|
||||
case SND_SOC_DAIFMT_BC_FP:
|
||||
/* Enable MCLK */
|
||||
if (i2s->rev_id == 1) {
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_MCLK_EN,
|
||||
I2S_CTRL_MCLK_EN);
|
||||
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_MCLK_READY,
|
||||
10, 500000);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait MCLK ready timeout\n");
|
||||
}
|
||||
ret = loongson_i2s_enable_mclk(i2s);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait MCLK ready timeout\n");
|
||||
break;
|
||||
case SND_SOC_DAIFMT_BP_FP:
|
||||
/* Enable MCLK */
|
||||
if (i2s->rev_id == 1) {
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
|
||||
I2S_CTRL_MCLK_EN,
|
||||
I2S_CTRL_MCLK_EN);
|
||||
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_MCLK_READY,
|
||||
10, 500000);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait MCLK ready timeout\n");
|
||||
}
|
||||
ret = loongson_i2s_enable_mclk(i2s);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait MCLK ready timeout\n");
|
||||
|
||||
/* Enable master mode */
|
||||
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, I2S_CTRL_MASTER,
|
||||
I2S_CTRL_MASTER);
|
||||
if (i2s->rev_id == 1) {
|
||||
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
|
||||
LS_I2S_CTRL, val,
|
||||
val & I2S_CTRL_CLK_READY,
|
||||
10, 500000);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait BCLK ready timeout\n");
|
||||
}
|
||||
|
||||
ret = loongson_i2s_enable_bclk(i2s);
|
||||
if (ret < 0)
|
||||
dev_warn(dai->dev, "wait BCLK ready timeout\n");
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
@@ -27,18 +27,18 @@
|
||||
#define LS_I2S_RX_ORDER 0x110 /* RX DMA Order */
|
||||
|
||||
/* Loongson I2S Control Register */
|
||||
#define I2S_CTRL_MCLK_READY (1 << 16) /* MCLK ready */
|
||||
#define I2S_CTRL_MASTER (1 << 15) /* Master mode */
|
||||
#define I2S_CTRL_MSB (1 << 14) /* MSB bit order */
|
||||
#define I2S_CTRL_RX_EN (1 << 13) /* RX enable */
|
||||
#define I2S_CTRL_TX_EN (1 << 12) /* TX enable */
|
||||
#define I2S_CTRL_RX_DMA_EN (1 << 11) /* DMA RX enable */
|
||||
#define I2S_CTRL_CLK_READY (1 << 8) /* BCLK ready */
|
||||
#define I2S_CTRL_TX_DMA_EN (1 << 7) /* DMA TX enable */
|
||||
#define I2S_CTRL_RESET (1 << 4) /* Controller soft reset */
|
||||
#define I2S_CTRL_MCLK_EN (1 << 3) /* Enable MCLK */
|
||||
#define I2S_CTRL_RX_INT_EN (1 << 1) /* RX interrupt enable */
|
||||
#define I2S_CTRL_TX_INT_EN (1 << 0) /* TX interrupt enable */
|
||||
#define I2S_CTRL_MCLK_READY BIT(16) /* MCLK ready */
|
||||
#define I2S_CTRL_MASTER BIT(15) /* Master mode */
|
||||
#define I2S_CTRL_MSB BIT(14) /* MSB bit order */
|
||||
#define I2S_CTRL_RX_EN BIT(13) /* RX enable */
|
||||
#define I2S_CTRL_TX_EN BIT(12) /* TX enable */
|
||||
#define I2S_CTRL_RX_DMA_EN BIT(11) /* DMA RX enable */
|
||||
#define I2S_CTRL_CLK_READY BIT(8) /* BCLK ready */
|
||||
#define I2S_CTRL_TX_DMA_EN BIT(7) /* DMA TX enable */
|
||||
#define I2S_CTRL_RESET BIT(4) /* Controller soft reset */
|
||||
#define I2S_CTRL_MCLK_EN BIT(3) /* Enable MCLK */
|
||||
#define I2S_CTRL_RX_INT_EN BIT(1) /* RX interrupt enable */
|
||||
#define I2S_CTRL_TX_INT_EN BIT(0) /* TX interrupt enable */
|
||||
|
||||
#define LS_I2S_DRVNAME "loongson-i2s"
|
||||
|
||||
|
||||
@@ -75,34 +75,34 @@ static int loongson_i2s_pci_probe(struct pci_dev *pdev,
|
||||
{
|
||||
const struct fwnode_handle *fwnode = pdev->dev.fwnode;
|
||||
struct loongson_dma_data *tx_data, *rx_data;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct loongson_i2s *i2s;
|
||||
int ret;
|
||||
|
||||
if (pcim_enable_device(pdev)) {
|
||||
dev_err(&pdev->dev, "pci_enable_device failed\n");
|
||||
dev_err(dev, "pci_enable_device failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
i2s = devm_kzalloc(&pdev->dev, sizeof(*i2s), GFP_KERNEL);
|
||||
i2s = devm_kzalloc(dev, sizeof(*i2s), GFP_KERNEL);
|
||||
if (!i2s)
|
||||
return -ENOMEM;
|
||||
|
||||
i2s->rev_id = pdev->revision;
|
||||
i2s->dev = &pdev->dev;
|
||||
i2s->dev = dev;
|
||||
pci_set_drvdata(pdev, i2s);
|
||||
|
||||
ret = pcim_iomap_regions(pdev, 1 << 0, dev_name(&pdev->dev));
|
||||
ret = pcim_iomap_regions(pdev, 1 << 0, dev_name(dev));
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "iomap_regions failed\n");
|
||||
dev_err(dev, "iomap_regions failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
i2s->reg_base = pcim_iomap_table(pdev)[0];
|
||||
i2s->regmap = devm_regmap_init_mmio(&pdev->dev, i2s->reg_base,
|
||||
i2s->regmap = devm_regmap_init_mmio(dev, i2s->reg_base,
|
||||
&loongson_i2s_regmap_config);
|
||||
if (IS_ERR(i2s->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap_init_mmio failed\n");
|
||||
return PTR_ERR(i2s->regmap);
|
||||
}
|
||||
if (IS_ERR(i2s->regmap))
|
||||
dev_err_probe(dev, PTR_ERR(i2s->regmap), "regmap_init_mmio failed\n");
|
||||
|
||||
tx_data = &i2s->tx_dma_data;
|
||||
rx_data = &i2s->rx_dma_data;
|
||||
@@ -114,37 +114,28 @@ static int loongson_i2s_pci_probe(struct pci_dev *pdev,
|
||||
rx_data->order_addr = i2s->reg_base + LS_I2S_RX_ORDER;
|
||||
|
||||
tx_data->irq = fwnode_irq_get_byname(fwnode, "tx");
|
||||
if (tx_data->irq < 0) {
|
||||
dev_err(&pdev->dev, "dma tx irq invalid\n");
|
||||
return tx_data->irq;
|
||||
}
|
||||
if (tx_data->irq < 0)
|
||||
dev_err_probe(dev, tx_data->irq, "dma tx irq invalid\n");
|
||||
|
||||
rx_data->irq = fwnode_irq_get_byname(fwnode, "rx");
|
||||
if (rx_data->irq < 0) {
|
||||
dev_err(&pdev->dev, "dma rx irq invalid\n");
|
||||
return rx_data->irq;
|
||||
}
|
||||
if (rx_data->irq < 0)
|
||||
dev_err_probe(dev, rx_data->irq, "dma rx irq invalid\n");
|
||||
|
||||
device_property_read_u32(&pdev->dev, "clock-frequency", &i2s->clk_rate);
|
||||
if (!i2s->clk_rate) {
|
||||
dev_err(&pdev->dev, "clock-frequency property invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = device_property_read_u32(dev, "clock-frequency", &i2s->clk_rate);
|
||||
if (ret)
|
||||
dev_err_probe(dev, ret, "clock-frequency property invalid\n");
|
||||
|
||||
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
|
||||
dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
|
||||
|
||||
if (i2s->rev_id == 1) {
|
||||
regmap_write(i2s->regmap, LS_I2S_CTRL, I2S_CTRL_RESET);
|
||||
udelay(200);
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&loongson_i2s_component,
|
||||
ret = devm_snd_soc_register_component(dev, &loongson_i2s_component,
|
||||
&loongson_i2s_dai, 1);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "register DAI failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
dev_err_probe(dev, ret, "register DAI failed\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user