Loading sound/soc/sti/sti_uniperif.c +23 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include <linux/module.h> #include <linux/pinctrl/consumer.h> #include <linux/delay.h> #include "uniperif.h" Loading Loading @@ -97,6 +98,28 @@ static const struct of_device_id snd_soc_sti_match[] = { {}, }; int sti_uniperiph_reset(struct uniperif *uni) { int count = 10; /* Reset uniperipheral uni */ SET_UNIPERIF_SOFT_RST_SOFT_RST(uni); if (uni->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) { while (GET_UNIPERIF_SOFT_RST_SOFT_RST(uni) && count) { udelay(5); count--; } } if (!count) { dev_err(uni->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; } int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) Loading sound/soc/sti/uniperif.h +2 −0 Original line number Diff line number Diff line Loading @@ -1397,6 +1397,8 @@ static inline int sti_uniperiph_get_unip_tdm_frame_size(struct uniperif *uni) return (uni->tdm_slot.slots * uni->tdm_slot.slot_width / 8); } int sti_uniperiph_reset(struct uniperif *uni); int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width); Loading sound/soc/sti/uniperif_player.c +3 −31 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ */ #include <linux/clk.h> #include <linux/delay.h> #include <linux/io.h> #include <linux/mfd/syscon.h> Loading Loading @@ -55,25 +54,6 @@ static const struct snd_pcm_hardware uni_player_pcm_hw = { .buffer_bytes_max = 256 * PAGE_SIZE }; static inline int reset_player(struct uniperif *player) { int count = 10; if (player->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) { while (GET_UNIPERIF_SOFT_RST_SOFT_RST(player) && count) { udelay(5); count--; } } if (!count) { dev_err(player->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; } /* * uni_player_irq_handler * In case of error audio stream is stopped; stop action is protected via PCM Loading Loading @@ -858,10 +838,8 @@ static int uni_player_prepare(struct snd_pcm_substream *substream, SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(player, 0); /* Reset uniperipheral player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); return reset_player(player); return sti_uniperiph_reset(player); } static int uni_player_start(struct uniperif *player) Loading Loading @@ -893,10 +871,7 @@ static int uni_player_start(struct uniperif *player) SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(player); } /* Reset uniperipheral player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); ret = reset_player(player); ret = sti_uniperiph_reset(player); if (ret < 0) { clk_disable_unprepare(player->clk); return ret; Loading Loading @@ -945,10 +920,7 @@ static int uni_player_stop(struct uniperif *player) /* Turn the player off */ SET_UNIPERIF_CTRL_OPERATION_OFF(player); /* Soft reset the player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); ret = reset_player(player); ret = sti_uniperiph_reset(player); if (ret < 0) return ret; Loading sound/soc/sti/uniperif_reader.c +1 −14 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ */ #include <linux/clk.h> #include <linux/delay.h> #include <linux/io.h> #include <sound/soc.h> Loading Loading @@ -186,7 +185,6 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream, struct uniperif *reader = priv->dai_data.uni; struct snd_pcm_runtime *runtime = substream->runtime; int transfer_size, trigger_limit, ret; int count = 10; /* The reader should be stopped */ if (reader->state != UNIPERIF_STATE_STOPPED) { Loading Loading @@ -288,18 +286,7 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream, } /* Reset uniperipheral reader */ SET_UNIPERIF_SOFT_RST_SOFT_RST(reader); while (GET_UNIPERIF_SOFT_RST_SOFT_RST(reader)) { udelay(5); count--; } if (!count) { dev_err(reader->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; return sti_uniperiph_reset(reader); } static int uni_reader_start(struct uniperif *reader) Loading Loading
sound/soc/sti/sti_uniperif.c +23 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include <linux/module.h> #include <linux/pinctrl/consumer.h> #include <linux/delay.h> #include "uniperif.h" Loading Loading @@ -97,6 +98,28 @@ static const struct of_device_id snd_soc_sti_match[] = { {}, }; int sti_uniperiph_reset(struct uniperif *uni) { int count = 10; /* Reset uniperipheral uni */ SET_UNIPERIF_SOFT_RST_SOFT_RST(uni); if (uni->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) { while (GET_UNIPERIF_SOFT_RST_SOFT_RST(uni) && count) { udelay(5); count--; } } if (!count) { dev_err(uni->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; } int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) Loading
sound/soc/sti/uniperif.h +2 −0 Original line number Diff line number Diff line Loading @@ -1397,6 +1397,8 @@ static inline int sti_uniperiph_get_unip_tdm_frame_size(struct uniperif *uni) return (uni->tdm_slot.slots * uni->tdm_slot.slot_width / 8); } int sti_uniperiph_reset(struct uniperif *uni); int sti_uniperiph_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width); Loading
sound/soc/sti/uniperif_player.c +3 −31 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ */ #include <linux/clk.h> #include <linux/delay.h> #include <linux/io.h> #include <linux/mfd/syscon.h> Loading Loading @@ -55,25 +54,6 @@ static const struct snd_pcm_hardware uni_player_pcm_hw = { .buffer_bytes_max = 256 * PAGE_SIZE }; static inline int reset_player(struct uniperif *player) { int count = 10; if (player->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) { while (GET_UNIPERIF_SOFT_RST_SOFT_RST(player) && count) { udelay(5); count--; } } if (!count) { dev_err(player->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; } /* * uni_player_irq_handler * In case of error audio stream is stopped; stop action is protected via PCM Loading Loading @@ -858,10 +838,8 @@ static int uni_player_prepare(struct snd_pcm_substream *substream, SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(player, 0); /* Reset uniperipheral player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); return reset_player(player); return sti_uniperiph_reset(player); } static int uni_player_start(struct uniperif *player) Loading Loading @@ -893,10 +871,7 @@ static int uni_player_start(struct uniperif *player) SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(player); } /* Reset uniperipheral player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); ret = reset_player(player); ret = sti_uniperiph_reset(player); if (ret < 0) { clk_disable_unprepare(player->clk); return ret; Loading Loading @@ -945,10 +920,7 @@ static int uni_player_stop(struct uniperif *player) /* Turn the player off */ SET_UNIPERIF_CTRL_OPERATION_OFF(player); /* Soft reset the player */ SET_UNIPERIF_SOFT_RST_SOFT_RST(player); ret = reset_player(player); ret = sti_uniperiph_reset(player); if (ret < 0) return ret; Loading
sound/soc/sti/uniperif_reader.c +1 −14 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ */ #include <linux/clk.h> #include <linux/delay.h> #include <linux/io.h> #include <sound/soc.h> Loading Loading @@ -186,7 +185,6 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream, struct uniperif *reader = priv->dai_data.uni; struct snd_pcm_runtime *runtime = substream->runtime; int transfer_size, trigger_limit, ret; int count = 10; /* The reader should be stopped */ if (reader->state != UNIPERIF_STATE_STOPPED) { Loading Loading @@ -288,18 +286,7 @@ static int uni_reader_prepare(struct snd_pcm_substream *substream, } /* Reset uniperipheral reader */ SET_UNIPERIF_SOFT_RST_SOFT_RST(reader); while (GET_UNIPERIF_SOFT_RST_SOFT_RST(reader)) { udelay(5); count--; } if (!count) { dev_err(reader->dev, "Failed to reset uniperif\n"); return -EIO; } return 0; return sti_uniperiph_reset(reader); } static int uni_reader_start(struct uniperif *reader) Loading