[alsa-devel] [PATCH 2/2] ASoC: sgtl5000: clean up sgtl5000_enable_regulators()

Li.Xiubo at freescale.com Li.Xiubo at freescale.com
Wed Dec 18 02:42:05 CET 2013


> On Fri, Dec 13, 2013 at 02:43:03PM +0800, Shawn Guo wrote:
> > Function sgtl5000_enable_regulators() is somehow odd in handling the
> > optional external VDDD supply.  The driver can only enable this supply
> > on SGTL5000 chip before revision 0x11, and of course when this
> > external VDDD is present.  It currently does something like below.
> >
> > 1. Check if regulator_bulk_get() on VDDA, VDDIO and VDDD will fail.  If
> >    it fails, VDDD must be absent and it falls on internal LDO by calling
> >    sgtl5000_replace_vddd_with_ldo().  Otherwise, VDDD is used.  And in
> >    either case, regulator_bulk_enable() will be called to enable
> >    3 supplies.
> >
> > 2. In case that SGTL5000 revision is later than 0x11, even if external
> >    VDDD is present, it has to roll back the 'enable' and 'get' calls
> >    with regulator_bulk_disable() and regulator_bulk_free(), and starts
> >    over again by calling sgtl5000_replace_vddd_with_ldo() and
> >    regulator_bulk_enable().
> >
> > Such back and forth calls sequence is complicated and unnecessary.
> > Also, since commit 4ddfebd (regulator: core: Provide a dummy regulator
> > with full constraints), regulator_bulk_get() will always succeeds
> > because of the dummy regulator.  Thus the VDDD detection is broken.
> >
> > The patch changes the flow to something like the following, which
> > should be more reasonable and clear, and also fix the VDDD detection
> breakage.
> >
> > 1. Check if we're running a chip before revision 0x11, on which an
> >    external VDDD can possibly be an option.
> >
> > 2. If it is an early revision, call regulator_get_optional() to detect
> >    whether an external VDDD supply is available.
> >
> > 3. If external VDDD is present, call sgtl5000_replace_vddd_with_ldo() to
> >    update sgtl5000->supplies info.
> >
> > 4. Drop regulator_bulk_get() call in sgtl5000_replace_vddd_with_ldo(),
> >    and call it in sgtl5000_enable_regulators() no matter it's an
> >    external VDDD or internal LDO.
> >
> > 5. Call regulator_bulk_enable() to enable these 3 regulators.
> >
> > Signed-off-by: Shawn Guo <shawn.guo at linaro.org>
> 
> Apart from that separate issue we're discussing, do you have any comment on
> this patch itself?

Hi Shawn,

Sorry for late.

It's looks good to me.

--
Xiubo


More information about the Alsa-devel mailing list