Skip to content

Commit

Permalink
ASoC: sti: fix errors management
Browse files Browse the repository at this point in the history
Add missing error messages.
Propagate error of uni_reader_init and uni_reader_init.
Add return at end of dev_err strings.

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Arnaud Pouliquen authored and Mark Brown committed Oct 26, 2016
1 parent 1001354 commit 748abba
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 45 deletions.
20 changes: 12 additions & 8 deletions sound/soc/sti/sti_uniperif.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,15 +293,15 @@ static int sti_uniperiph_dai_suspend(struct snd_soc_dai *dai)

/* The uniperipheral should be in stopped state */
if (uni->state != UNIPERIF_STATE_STOPPED) {
dev_err(uni->dev, "%s: invalid uni state( %d)",
dev_err(uni->dev, "%s: invalid uni state( %d)\n",
__func__, (int)uni->state);
return -EBUSY;
}

/* Pinctrl: switch pinstate to sleep */
ret = pinctrl_pm_select_sleep_state(uni->dev);
if (ret)
dev_err(uni->dev, "%s: failed to select pinctrl state",
dev_err(uni->dev, "%s: failed to select pinctrl state\n",
__func__);

return ret;
Expand All @@ -322,7 +322,7 @@ static int sti_uniperiph_dai_resume(struct snd_soc_dai *dai)
/* pinctrl: switch pinstate to default */
ret = pinctrl_pm_select_default_state(uni->dev);
if (ret)
dev_err(uni->dev, "%s: failed to select pinctrl state",
dev_err(uni->dev, "%s: failed to select pinctrl state\n",
__func__);

return ret;
Expand Down Expand Up @@ -366,11 +366,12 @@ static int sti_uniperiph_cpu_dai_of(struct device_node *node,
const struct of_device_id *of_id;
const struct sti_uniperiph_dev_data *dev_data;
const char *mode;
int ret;

/* Populate data structure depending on compatibility */
of_id = of_match_node(snd_soc_sti_match, node);
if (!of_id->data) {
dev_err(dev, "data associated to device is missing");
dev_err(dev, "data associated to device is missing\n");
return -EINVAL;
}
dev_data = (struct sti_uniperiph_dev_data *)of_id->data;
Expand All @@ -389,7 +390,7 @@ static int sti_uniperiph_cpu_dai_of(struct device_node *node,
uni->mem_region = platform_get_resource(priv->pdev, IORESOURCE_MEM, 0);

if (!uni->mem_region) {
dev_err(dev, "Failed to get memory resource");
dev_err(dev, "Failed to get memory resource\n");
return -ENODEV;
}

Expand All @@ -403,7 +404,7 @@ static int sti_uniperiph_cpu_dai_of(struct device_node *node,

uni->irq = platform_get_irq(priv->pdev, 0);
if (uni->irq < 0) {
dev_err(dev, "Failed to get IRQ resource");
dev_err(dev, "Failed to get IRQ resource\n");
return -ENXIO;
}

Expand All @@ -421,12 +422,15 @@ static int sti_uniperiph_cpu_dai_of(struct device_node *node,
dai_data->stream = dev_data->stream;

if (priv->dai_data.stream == SNDRV_PCM_STREAM_PLAYBACK) {
uni_player_init(priv->pdev, uni);
ret = uni_player_init(priv->pdev, uni);
stream = &dai->playback;
} else {
uni_reader_init(priv->pdev, uni);
ret = uni_reader_init(priv->pdev, uni);
stream = &dai->capture;
}
if (ret < 0)
return ret;

dai->ops = uni->dai_ops;

stream->stream_name = dai->name;
Expand Down
58 changes: 33 additions & 25 deletions sound/soc/sti/uniperif_player.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ static inline int reset_player(struct uniperif *player)
}

if (!count) {
dev_err(player->dev, "Failed to reset uniperif");
dev_err(player->dev, "Failed to reset uniperif\n");
return -EIO;
}

Expand Down Expand Up @@ -97,7 +97,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)

/* Check for fifo error (underrun) */
if (unlikely(status & UNIPERIF_ITS_FIFO_ERROR_MASK(player))) {
dev_err(player->dev, "FIFO underflow error detected");
dev_err(player->dev, "FIFO underflow error detected\n");

/* Interrupt is just for information when underflow recovery */
if (player->underflow_enabled) {
Expand All @@ -119,7 +119,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)

/* Check for dma error (overrun) */
if (unlikely(status & UNIPERIF_ITS_DMA_ERROR_MASK(player))) {
dev_err(player->dev, "DMA error detected");
dev_err(player->dev, "DMA error detected\n");

/* Disable interrupt so doesn't continually fire */
SET_UNIPERIF_ITM_BCLR_DMA_ERROR(player);
Expand All @@ -135,11 +135,14 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)
/* Check for underflow recovery done */
if (unlikely(status & UNIPERIF_ITM_UNDERFLOW_REC_DONE_MASK(player))) {
if (!player->underflow_enabled) {
dev_err(player->dev, "unexpected Underflow recovering");
dev_err(player->dev,
"unexpected Underflow recovering\n");
return -EPERM;
}
/* Read the underflow recovery duration */
tmp = GET_UNIPERIF_STATUS_1_UNDERFLOW_DURATION(player);
dev_dbg(player->dev, "Underflow recovered (%d LR clocks max)\n",
tmp);

/* Clear the underflow recovery duration */
SET_UNIPERIF_BIT_CONTROL_CLR_UNDERFLOW_DURATION(player);
Expand All @@ -153,7 +156,7 @@ static irqreturn_t uni_player_irq_handler(int irq, void *dev_id)
/* Check if underflow recovery failed */
if (unlikely(status &
UNIPERIF_ITM_UNDERFLOW_REC_FAILED_MASK(player))) {
dev_err(player->dev, "Underflow recovery failed");
dev_err(player->dev, "Underflow recovery failed\n");

/* Stop the player */
snd_pcm_stream_lock(player->substream);
Expand Down Expand Up @@ -336,7 +339,7 @@ static int uni_player_prepare_iec958(struct uniperif *player,

/* Oversampling must be multiple of 128 as iec958 frame is 32-bits */
if ((clk_div % 128) || (clk_div <= 0)) {
dev_err(player->dev, "%s: invalid clk_div %d",
dev_err(player->dev, "%s: invalid clk_div %d\n",
__func__, clk_div);
return -EINVAL;
}
Expand All @@ -359,7 +362,7 @@ static int uni_player_prepare_iec958(struct uniperif *player,
SET_UNIPERIF_I2S_FMT_DATA_SIZE_24(player);
break;
default:
dev_err(player->dev, "format not supported");
dev_err(player->dev, "format not supported\n");
return -EINVAL;
}

Expand Down Expand Up @@ -448,12 +451,12 @@ static int uni_player_prepare_pcm(struct uniperif *player,
* for 16 bits must be a multiple of 64
*/
if ((slot_width == 32) && (clk_div % 128)) {
dev_err(player->dev, "%s: invalid clk_div", __func__);
dev_err(player->dev, "%s: invalid clk_div\n", __func__);
return -EINVAL;
}

if ((slot_width == 16) && (clk_div % 64)) {
dev_err(player->dev, "%s: invalid clk_div", __func__);
dev_err(player->dev, "%s: invalid clk_div\n", __func__);
return -EINVAL;
}

Expand All @@ -471,7 +474,7 @@ static int uni_player_prepare_pcm(struct uniperif *player,
SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(player);
break;
default:
dev_err(player->dev, "subframe format not supported");
dev_err(player->dev, "subframe format not supported\n");
return -EINVAL;
}

Expand All @@ -491,7 +494,7 @@ static int uni_player_prepare_pcm(struct uniperif *player,
break;

default:
dev_err(player->dev, "format not supported");
dev_err(player->dev, "format not supported\n");
return -EINVAL;
}

Expand All @@ -504,7 +507,7 @@ static int uni_player_prepare_pcm(struct uniperif *player,
/* Number of channelsmust be even*/
if ((runtime->channels % 2) || (runtime->channels < 2) ||
(runtime->channels > 10)) {
dev_err(player->dev, "%s: invalid nb of channels", __func__);
dev_err(player->dev, "%s: invalid nb of channels\n", __func__);
return -EINVAL;
}

Expand Down Expand Up @@ -758,7 +761,7 @@ static int uni_player_prepare(struct snd_pcm_substream *substream,

/* The player should be stopped */
if (player->state != UNIPERIF_STATE_STOPPED) {
dev_err(player->dev, "%s: invalid player state %d", __func__,
dev_err(player->dev, "%s: invalid player state %d\n", __func__,
player->state);
return -EINVAL;
}
Expand Down Expand Up @@ -787,7 +790,8 @@ static int uni_player_prepare(struct snd_pcm_substream *substream,
/* Trigger limit must be an even number */
if ((!trigger_limit % 2) || (trigger_limit != 1 && transfer_size % 2) ||
(trigger_limit > UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(player))) {
dev_err(player->dev, "invalid trigger limit %d", trigger_limit);
dev_err(player->dev, "invalid trigger limit %d\n",
trigger_limit);
return -EINVAL;
}

Expand All @@ -808,7 +812,7 @@ static int uni_player_prepare(struct snd_pcm_substream *substream,
ret = uni_player_prepare_tdm(player, runtime);
break;
default:
dev_err(player->dev, "invalid player type");
dev_err(player->dev, "invalid player type\n");
return -EINVAL;
}

Expand Down Expand Up @@ -848,7 +852,7 @@ static int uni_player_prepare(struct snd_pcm_substream *substream,
SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(player);
break;
default:
dev_err(player->dev, "format not supported");
dev_err(player->dev, "format not supported\n");
return -EINVAL;
}

Expand All @@ -866,13 +870,13 @@ static int uni_player_start(struct uniperif *player)

/* The player should be stopped */
if (player->state != UNIPERIF_STATE_STOPPED) {
dev_err(player->dev, "%s: invalid player state", __func__);
dev_err(player->dev, "%s: invalid player state\n", __func__);
return -EINVAL;
}

ret = clk_prepare_enable(player->clk);
if (ret) {
dev_err(player->dev, "%s: Failed to enable clock", __func__);
dev_err(player->dev, "%s: Failed to enable clock\n", __func__);
return ret;
}

Expand Down Expand Up @@ -934,7 +938,7 @@ static int uni_player_stop(struct uniperif *player)

/* The player should not be in stopped state */
if (player->state == UNIPERIF_STATE_STOPPED) {
dev_err(player->dev, "%s: invalid player state", __func__);
dev_err(player->dev, "%s: invalid player state\n", __func__);
return -EINVAL;
}

Expand Down Expand Up @@ -969,7 +973,7 @@ int uni_player_resume(struct uniperif *player)
ret = regmap_field_write(player->clk_sel, 1);
if (ret) {
dev_err(player->dev,
"%s: Failed to select freq synth clock",
"%s: Failed to select freq synth clock\n",
__func__);
return ret;
}
Expand Down Expand Up @@ -1066,7 +1070,7 @@ int uni_player_init(struct platform_device *pdev,
ret = uni_player_parse_dt_audio_glue(pdev, player);

if (ret < 0) {
dev_err(player->dev, "Failed to parse DeviceTree");
dev_err(player->dev, "Failed to parse DeviceTree\n");
return ret;
}

Expand All @@ -1081,15 +1085,17 @@ int uni_player_init(struct platform_device *pdev,

/* Get uniperif resource */
player->clk = of_clk_get(pdev->dev.of_node, 0);
if (IS_ERR(player->clk))
if (IS_ERR(player->clk)) {
dev_err(player->dev, "Failed to get clock\n");
ret = PTR_ERR(player->clk);
}

/* Select the frequency synthesizer clock */
if (player->clk_sel) {
ret = regmap_field_write(player->clk_sel, 1);
if (ret) {
dev_err(player->dev,
"%s: Failed to select freq synth clock",
"%s: Failed to select freq synth clock\n",
__func__);
return ret;
}
Expand All @@ -1101,16 +1107,18 @@ int uni_player_init(struct platform_device *pdev,
ret = regmap_field_write(player->valid_sel, player->id);
if (ret) {
dev_err(player->dev,
"%s: unable to connect to tdm bus", __func__);
"%s: unable to connect to tdm bus\n", __func__);
return ret;
}
}

ret = devm_request_irq(&pdev->dev, player->irq,
uni_player_irq_handler, IRQF_SHARED,
dev_name(&pdev->dev), player);
if (ret < 0)
if (ret < 0) {
dev_err(player->dev, "unable to request IRQ %d\n", player->irq);
return ret;
}

mutex_init(&player->ctrl_lock);

Expand Down
Loading

0 comments on commit 748abba

Please sign in to comment.