Lines Matching refs:pair
202 * fsl_asrc_request_pair - Request ASRC pair
204 * @pair: pointer to pair
206 * It assigns pair by the order of A->C->B because allocation of pair B,
207 * within range [ANCA, ANCA+ANCB-1], depends on the channels of pair A
208 * while pair A and pair C are comparatively independent.
210 static int fsl_asrc_request_pair(int channels, struct fsl_asrc_pair *pair)
213 struct fsl_asrc *asrc = pair->asrc;
221 if (asrc->pair[i] != NULL)
238 asrc->pair[index] = pair;
239 pair->channels = channels;
240 pair->index = index;
249 * fsl_asrc_release_pair - Release ASRC pair
250 * @pair: pair to release
254 static void fsl_asrc_release_pair(struct fsl_asrc_pair *pair)
256 struct fsl_asrc *asrc = pair->asrc;
257 enum asrc_pair_index index = pair->index;
260 /* Make sure the pair is disabled */
266 asrc->channel_avail += pair->channels;
267 asrc->pair[index] = NULL;
268 pair->error = 0;
275 * @pair: pointer to pair
279 static void fsl_asrc_set_watermarks(struct fsl_asrc_pair *pair, u32 in, u32 out)
281 struct fsl_asrc *asrc = pair->asrc;
282 enum asrc_pair_index index = pair->index;
295 * @pair: pointer to pair
300 static u32 fsl_asrc_cal_asrck_divisor(struct fsl_asrc_pair *pair, u32 div)
313 * @pair: pointer to pair
319 static int fsl_asrc_set_ideal_ratio(struct fsl_asrc_pair *pair,
322 struct fsl_asrc *asrc = pair->asrc;
323 enum asrc_pair_index index = pair->index;
358 * fsl_asrc_config_pair - Configure the assigned ASRC pair
359 * @pair: pointer to pair
373 static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair, bool use_ideal_rate)
375 struct fsl_asrc_pair_priv *pair_priv = pair->private;
377 struct fsl_asrc *asrc = pair->asrc;
379 enum asrc_pair_index index = pair->index;
391 pair_err("invalid pair config\n");
507 /* Update channels for current pair */
525 indiv = fsl_asrc_cal_asrck_divisor(pair, div[IN]);
526 outdiv = fsl_asrc_cal_asrck_divisor(pair, div[OUT]);
545 fsl_asrc_set_watermarks(pair, ASRC_INPUTFIFO_THRESHOLD,
569 return fsl_asrc_set_ideal_ratio(pair, inrate, outrate);
573 * fsl_asrc_start_pair - Start the assigned ASRC pair
574 * @pair: pointer to pair
576 * It enables the assigned pair and makes it stopped at the stall level.
578 static void fsl_asrc_start_pair(struct fsl_asrc_pair *pair)
580 struct fsl_asrc *asrc = pair->asrc;
581 enum asrc_pair_index index = pair->index;
584 /* Enable the current pair */
597 for (i = 0; i < pair->channels * 4; i++)
605 * fsl_asrc_stop_pair - Stop the assigned ASRC pair
606 * @pair: pointer to pair
608 static void fsl_asrc_stop_pair(struct fsl_asrc_pair *pair)
610 struct fsl_asrc *asrc = pair->asrc;
611 enum asrc_pair_index index = pair->index;
613 /* Stop the current pair */
619 * fsl_asrc_get_dma_channel- Get DMA channel according to the pair and direction.
620 * @pair: pointer to pair
623 static struct dma_chan *fsl_asrc_get_dma_channel(struct fsl_asrc_pair *pair,
626 struct fsl_asrc *asrc = pair->asrc;
627 enum asrc_pair_index index = pair->index;
653 struct fsl_asrc_pair *pair,
657 struct fsl_asrc_pair_priv *pair_priv = pair->private;
696 struct fsl_asrc_pair *pair = runtime->private_data;
697 struct fsl_asrc_pair_priv *pair_priv = pair->private;
703 ret = fsl_asrc_request_pair(channels, pair);
705 dev_err(dai->dev, "fail to request asrc pair\n");
711 config.pair = pair->index;
726 fsl_asrc_select_clk(asrc_priv, pair,
730 ret = fsl_asrc_config_pair(pair, false);
732 dev_err(dai->dev, "fail to config asrc pair\n");
743 struct fsl_asrc_pair *pair = runtime->private_data;
745 if (pair)
746 fsl_asrc_release_pair(pair);
755 struct fsl_asrc_pair *pair = runtime->private_data;
761 fsl_asrc_start_pair(pair);
766 fsl_asrc_stop_pair(pair);
971 /* Halt ASRC internal FP when input FIFO needs data for pair A, B, C */
1021 if (!asrc->pair[index])
1025 asrc->pair[index]->error |= ASRC_TASK_Q_OVERLOAD;
1030 asrc->pair[index]->error |= ASRC_OUTPUT_TASK_OVERLOAD;
1035 asrc->pair[index]->error |= ASRC_INPUT_TASK_OVERLOAD;
1040 asrc->pair[index]->error |= ASRC_OUTPUT_BUFFER_OVERFLOW;
1045 asrc->pair[index]->error |= ASRC_INPUT_BUFFER_UNDERRUN;