• Home
  • Raw
  • Download

Lines Matching refs:reader

49 	struct uniperif *reader = dev_id;  in uni_reader_irq_handler()  local
52 if (reader->state == UNIPERIF_STATE_STOPPED) { in uni_reader_irq_handler()
54 dev_warn(reader->dev, "unexpected IRQ "); in uni_reader_irq_handler()
59 status = GET_UNIPERIF_ITS(reader); in uni_reader_irq_handler()
60 SET_UNIPERIF_ITS_BCLR(reader, status); in uni_reader_irq_handler()
63 if (unlikely(status & UNIPERIF_ITS_FIFO_ERROR_MASK(reader))) { in uni_reader_irq_handler()
64 dev_err(reader->dev, "FIFO error detected"); in uni_reader_irq_handler()
66 snd_pcm_stream_lock(reader->substream); in uni_reader_irq_handler()
67 snd_pcm_stop(reader->substream, SNDRV_PCM_STATE_XRUN); in uni_reader_irq_handler()
68 snd_pcm_stream_unlock(reader->substream); in uni_reader_irq_handler()
80 struct uniperif *reader = priv->dai_data.uni; in uni_reader_prepare() local
87 if (reader->state != UNIPERIF_STATE_STOPPED) { in uni_reader_prepare()
88 dev_err(reader->dev, "%s: invalid reader state %d", __func__, in uni_reader_prepare()
89 reader->state); in uni_reader_prepare()
97 if (reader->ver < SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0) in uni_reader_prepare()
110 (trigger_limit > UNIPERIF_CONFIG_DMA_TRIG_LIMIT_MASK(reader))) { in uni_reader_prepare()
111 dev_err(reader->dev, "invalid trigger limit %d", trigger_limit); in uni_reader_prepare()
115 SET_UNIPERIF_CONFIG_DMA_TRIG_LIMIT(reader, trigger_limit); in uni_reader_prepare()
117 switch (reader->daifmt & SND_SOC_DAIFMT_INV_MASK) { in uni_reader_prepare()
120 SET_UNIPERIF_I2S_FMT_LR_POL_HIG(reader); in uni_reader_prepare()
123 SET_UNIPERIF_I2S_FMT_LR_POL_LOW(reader); in uni_reader_prepare()
127 if ((reader->daifmt & SND_SOC_DAIFMT_FORMAT_MASK) in uni_reader_prepare()
144 SET_UNIPERIF_I2S_FMT_NBIT_32(reader); in uni_reader_prepare()
145 SET_UNIPERIF_I2S_FMT_DATA_SIZE_32(reader); in uni_reader_prepare()
148 SET_UNIPERIF_I2S_FMT_NBIT_16(reader); in uni_reader_prepare()
149 SET_UNIPERIF_I2S_FMT_DATA_SIZE_16(reader); in uni_reader_prepare()
152 dev_err(reader->dev, "subframe format not supported"); in uni_reader_prepare()
160 SET_UNIPERIF_CONFIG_MEM_FMT_16_16(reader); in uni_reader_prepare()
168 SET_UNIPERIF_CONFIG_MEM_FMT_16_0(reader); in uni_reader_prepare()
172 dev_err(reader->dev, "format not supported"); in uni_reader_prepare()
176 switch (reader->daifmt & SND_SOC_DAIFMT_FORMAT_MASK) { in uni_reader_prepare()
178 SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(reader); in uni_reader_prepare()
179 SET_UNIPERIF_I2S_FMT_PADDING_I2S_MODE(reader); in uni_reader_prepare()
182 SET_UNIPERIF_I2S_FMT_ALIGN_LEFT(reader); in uni_reader_prepare()
183 SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(reader); in uni_reader_prepare()
186 SET_UNIPERIF_I2S_FMT_ALIGN_RIGHT(reader); in uni_reader_prepare()
187 SET_UNIPERIF_I2S_FMT_PADDING_SONY_MODE(reader); in uni_reader_prepare()
190 dev_err(reader->dev, "format not supported"); in uni_reader_prepare()
194 SET_UNIPERIF_I2S_FMT_ORDER_MSB(reader); in uni_reader_prepare()
197 SET_UNIPERIF_I2S_FMT_SCLK_EDGE_RISING(reader); in uni_reader_prepare()
203 dev_err(reader->dev, "%s: invalid nb of channels", __func__); in uni_reader_prepare()
207 SET_UNIPERIF_I2S_FMT_NUM_CH(reader, runtime->channels / 2); in uni_reader_prepare()
210 SET_UNIPERIF_ITS_BCLR(reader, GET_UNIPERIF_ITS(reader)); in uni_reader_prepare()
212 SET_UNIPERIF_I2S_FMT_NO_OF_SAMPLES_TO_READ(reader, 0); in uni_reader_prepare()
215 SET_UNIPERIF_ITM_BSET_DMA_ERROR(reader); in uni_reader_prepare()
216 SET_UNIPERIF_ITM_BSET_FIFO_ERROR(reader); in uni_reader_prepare()
217 SET_UNIPERIF_ITM_BSET_MEM_BLK_READ(reader); in uni_reader_prepare()
220 if (reader->info->underflow_enabled) { in uni_reader_prepare()
221 SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_DONE(reader); in uni_reader_prepare()
222 SET_UNIPERIF_ITM_BSET_UNDERFLOW_REC_FAILED(reader); in uni_reader_prepare()
226 SET_UNIPERIF_SOFT_RST_SOFT_RST(reader); in uni_reader_prepare()
228 while (GET_UNIPERIF_SOFT_RST_SOFT_RST(reader)) { in uni_reader_prepare()
233 dev_err(reader->dev, "Failed to reset uniperif"); in uni_reader_prepare()
240 static int uni_reader_start(struct uniperif *reader) in uni_reader_start() argument
243 if (reader->state != UNIPERIF_STATE_STOPPED) { in uni_reader_start()
244 dev_err(reader->dev, "%s: invalid reader state", __func__); in uni_reader_start()
249 SET_UNIPERIF_ITS_BCLR_FIFO_ERROR(reader); in uni_reader_start()
250 SET_UNIPERIF_ITM_BSET_FIFO_ERROR(reader); in uni_reader_start()
253 SET_UNIPERIF_CTRL_OPERATION_PCM_DATA(reader); in uni_reader_start()
256 reader->state = UNIPERIF_STATE_STARTED; in uni_reader_start()
260 static int uni_reader_stop(struct uniperif *reader) in uni_reader_stop() argument
263 if (reader->state == UNIPERIF_STATE_STOPPED) { in uni_reader_stop()
264 dev_err(reader->dev, "%s: invalid reader state", __func__); in uni_reader_stop()
269 SET_UNIPERIF_CTRL_OPERATION_OFF(reader); in uni_reader_stop()
272 SET_UNIPERIF_ITM_BCLR(reader, GET_UNIPERIF_ITM(reader)); in uni_reader_stop()
275 reader->state = UNIPERIF_STATE_STOPPED; in uni_reader_stop()
284 struct uniperif *reader = priv->dai_data.uni; in uni_reader_trigger() local
288 return uni_reader_start(reader); in uni_reader_trigger()
290 return uni_reader_stop(reader); in uni_reader_trigger()
300 struct uniperif *reader = priv->dai_data.uni; in uni_reader_shutdown() local
302 if (reader->state != UNIPERIF_STATE_STOPPED) { in uni_reader_shutdown()
304 uni_reader_stop(reader); in uni_reader_shutdown()
309 struct uniperif *reader) in uni_reader_parse_dt() argument
319 if (of_property_read_u32(node, "st,version", &reader->ver) || in uni_reader_parse_dt()
320 reader->ver == SND_ST_UNIPERIF_VERSION_UNKNOWN) { in uni_reader_parse_dt()
326 reader->info = info; in uni_reader_parse_dt()
340 struct uniperif *reader) in uni_reader_init() argument
344 reader->dev = &pdev->dev; in uni_reader_init()
345 reader->state = UNIPERIF_STATE_STOPPED; in uni_reader_init()
346 reader->hw = &uni_reader_pcm_hw; in uni_reader_init()
347 reader->dai_ops = &uni_reader_dai_ops; in uni_reader_init()
349 ret = uni_reader_parse_dt(pdev, reader); in uni_reader_init()
351 dev_err(reader->dev, "Failed to parse DeviceTree"); in uni_reader_init()
355 ret = devm_request_irq(&pdev->dev, reader->irq, in uni_reader_init()
357 dev_name(&pdev->dev), reader); in uni_reader_init()