[alsa-devel] [PATCHv2 5/6] ASoC: OMAP4: Add support for McPDM
Candelaria Villareal, Jorge
jorge.candelaria at ti.com
Tue Jan 26 19:53:28 CET 2010
Liam Girdwood wrote:
>
> On Mon, 2010-01-25 at 15:06 -0600, Candelaria Villareal, Jorge wrote:
> > Liam Girdwood wrote:
> > >
> > > On Fri, 2010-01-22 at 17:15 -0600, Candelaria Villareal,
> Jorge wrote:
> > > > McPDM is the interface between Phoenix audio codec
> > > > and the OMAP4430 processor. It enables data to be transfered
> > > > to/from Phoenix at sample rates of 88.4 or 96 KHz.
> > > >
> > > > Signed-off-by: Jorge Eduardo Candelaria <x0107209 at ti.com>
> > > > Signed-off-by: Margarita Olaya <x0080101 at ti.com>
> > >
> > > It initially looks like a some of this can be called directly
> > > as DAI ops
> > > rather than by the machine driver.
> >
> > Could you explain a little further?
>
> I was meaning here that some of the functions below are only called by
> higher level Digital Audio Interface (DAI) operations. e.g. the
> following is called by capture stream close :-
>
>
> > > > + * Cleans McPDM uplink configuration.
> > > > + * This function should be called when the stream is closed.
> > > > + */
> > > > +int omap_mcpdm_clr_uplink(struct omap_mcpdm_link *uplink)
>
> Would probably be more meaningful wrt ALSA as
> omap_mcpdm_capture_close()
Ok, I think I see your point. Since McPDM is only going to be used
for ALSA, it makes sense... But I still would think McPDM driver
should be independent of ALSA.
>
>
> > > > +/*
> > > > + * Takes the McPDM module in and out of reset state.
> > > > + * Uplink and downlink can be reset individually.
> > > > + */
> > > > +static void omap_mcpdm_reset(int links, int reset)
> > > > +{
> > > > + int ctrl = omap_mcpdm_read(MCPDM_CTRL);
> > > > +
> > > > + if (links & MCPDM_UPLINK) {
> > > > + if (reset)
> > > > + ctrl |= SW_UP_RST;
> > > > + else
> > > > + ctrl &= ~SW_UP_RST;
> > > > + }
> > > > +
> > > > + if (links & MCPDM_DOWNLINK) {
> > > > + if (reset)
> > > > + ctrl |= SW_DN_RST;
> > > > + else
> > > > + ctrl &= ~SW_DN_RST;
> > > > + }
> > > > +
> > > > + omap_mcpdm_write(MCPDM_CTRL, ctrl);
> > > > +}
> > > > +
> > >
> > > Would it not be better to rename uplink/downlink as playback
> > > and capture
> > > for ALSA ? If so, you could have an inline playback and
> > > capture version
> > > of this function.
> >
> > Data paths in McPDM module are named uplink/downlink, so these
> > names were chosen to be consistent. Is renaming it according
> > to ALSA the best approach?
>
> Generally yes, as long as we can see the audio direction easily (a
> comment would do here).
>
> Fwiw, I would have written the above as :-
>
> static inline void omap_mcpdm_reset_playback(int reset)
> {
> int ctrl = omap_mcpdm_read(MCPDM_CTRL);
>
> if (reset)
> ctrl |= SW_UP_RST;
> else
> ctrl &= ~SW_UP_RST;
>
> omap_mcpdm_write(MCPDM_CTRL, ctrl);
> }
>
> and one for capture reset too.
Ok, so at this point I see two approachs:
1. To leave as uplink/downlink in McPDM driver ops and add a comment on
how it relates to ALSA playback/capture data paths.
2. To change driver ops to playback/capture and leave a comment regarding
McPDM downlink/uplink data paths.
The only reason I see to use the first approach is to maintain McPDM
independent from ALSA side, but since it is a driver specifically for
audio, that shouldn't be a problem.
The idea would still be to show the relationship between McPDM and ALSA
data path names.
>
>
> > > > +int omap_mcpdm_set_offset(int offset1, int offset2)
> > > > +{
> > > > + int offset;
> > > > +
> > > > + if ((offset1 > DN_OFST_MAX) || (offset2 > DN_OFST_MAX))
> > > > + return -EINVAL;
> > > > +
> > > > + offset = (offset1 << DN_OFST_RX1) | (offset2 <<
> > > DN_OFST_RX2);
> > > > +
> > > > + /* Enable/disable offset cancellation for downlink
> > > channel 1 */
> > > > + if (offset1)
> > > > + offset |= DN_OFST_RX1_EN;
> > > > + else
> > > > + offset &= ~DN_OFST_RX1_EN;
> > > > +
> > > > + /* Enable/disable offset cancellation for downlink
> > > channel 2 */
> > > > + if (offset2)
> > > > + offset |= DN_OFST_RX2_EN;
> > > > + else
> > > > + offset &= ~DN_OFST_RX2_EN;
> > > > +
> > > > + omap_mcpdm_write(MCPDM_DN_OFFSET, offset);
> > > > +
> > > > + return 0;
> > > > +}
> > >
> > > What does this do and why is it not static ?
> >
> > It enables and configures offset cancelation for the analog
> headset path. It is supposed to be called by the codec
> driver, so it should'nt be static. But, offset cancelation is
> probably not going to be used at first.
> >
>
> Ok, can we a comment to here to describe this.
Yes, I should've set a comment here from the beginning.
>
> Thanks
>
> Liam
>
>
More information about the Alsa-devel
mailing list