unsigned int in_freq;
int clk_div;
int wlen;
+ /* pandora hack */
+ struct snd_pcm_substream *substream;
};
static struct omap_mcbsp_data mcbsp_data[NUM_LINKS];
struct snd_interval *channels = hw_param_interval(params,
SNDRV_PCM_HW_PARAM_CHANNELS);
struct omap_mcbsp_data *mcbsp_data = rule->private;
+ struct snd_pcm_substream *substream = mcbsp_data->substream;
struct snd_interval frames;
int size;
frames.min = size / channels->min;
frames.integer = 1;
+
+ if (substream && substream->pnd_hack_params.frames_min > 0
+ && substream->pnd_hack_params.frames_max
+ >= substream->pnd_hack_params.frames_min)
+ {
+ frames.min = substream->pnd_hack_params.frames_min;
+ frames.max = substream->pnd_hack_params.frames_max;
+ }
+
return snd_interval_refine(buffer_size, &frames);
}
int bus_id = mcbsp_data->bus_id;
int err = 0;
- if (!cpu_dai->active)
+ if (!cpu_dai->active) {
err = omap_mcbsp_request(bus_id);
+ mcbsp_data->substream = substream;
+ }
/*
* OMAP3 McBSP FIFO is word structured.
if (!cpu_dai->active) {
omap_mcbsp_free(mcbsp_data->bus_id);
mcbsp_data->configured = 0;
+
+ /* undo pandora hack */
+ mcbsp_data->substream = NULL;
+ substream->pnd_hack_params.frames_min = 0;
+ substream->pnd_hack_params.frames_max = 0;
}
}