• Janusz Krzysztofik's avatar
    ASoC: add support for Amstrad E3 (Delta) machine · 6d7f68a1
    Janusz Krzysztofik authored
    This patch adds machine support for Amstrad E3 (Delta) videophone to ASoC.
    
    Created and tested against linux-2.6.31-rc3.
    Applies and works with linux-omap-2.6 commit
    7c5cb7862d32cb344be7831d466535d5255e35ac as well.
    
    Depends on:
    1) latest version of the CX20442 codec driver that exposes v253_ops
       structure[1],
    2) patch 2/3 form this series: TTY: Add definition of a new line
       discipline required by Amstrad E3 (Delta) ASoC driver[2].
    
    CPU DAI parameters best matching the codec DAI has been selected out
    empirically for best user experience.
    
    Board specific audio function control (with related DAPM widgets) has been
    modeled after empirically discovered codec capabilities.
    
    Unlike other ASoC machine drivers, this one makes use of a codec provided line
    discipline that is required for talking to a modem chip that can control the
    codec behavoiur. As the line discipline operations must call board specific
    bits as well, the machine driver registers its own line discipline ops, not
    the codec provided, and then calls those codec provided from inside its own
    callbacks.
    If some kind of a glue, like a bus over a tty, exsited that could help in
    runtime detection of a modem (bus adapter) over a more generic line discipline
    (bus driver)[3], the line discipline code could be probably designed in a
    more generic way.
    
    In order to work at all, this driver requires a working McBSP1. On OMAP1510
    based machines (not sure if other OMAP1 variants as well), where McBSP1 is a
    DSP public peripheral, that means the kernel must provide basic DSP support,
    ie. omap_dsp_init(), in order to power up the DSP. This used to be included in
    linux-omap-2.6 tree up to commit 2512fd29db4eb09e82d182596304c7aaf76d2c5c.
    Without that, the driver would not work, ie. not shift in/out any bits over
    the CPU DAI[4]. This limitation is not board, but CPU specific, and may apply
    to other code that makes use of McBSP1/McBSP3 on affected machines. I provide
    an extra patch (4/3) as a temporary solution.
    
    To work correctly in playback mode, this driver requires my prevoiusly
    submitted patch that corrects pcm pointer calculation for OMAP1510 based
    machines[5] (already included in linux-2.6.31-rc3).
    
    To support codec controls, this driver requires my previously submitted patch
    that adds support for modem found on Amstrad Delta[6].
    
    [1] http://mailman.alsa-project.org/pipermail/alsa-devel/2009-July/019780.html
    [2] http://www.spinics.net/lists/linux-serial/msg01862.html
    [3] http://www.spinics.net/lists/linux-serial/msg01856.html
    [4] http://www.spinics.net/lists/linux-omap/msg15114.html
    [5] http://mailman.alsa-project.org/pipermail/alsa-devel/2009-June/018950.html
    [6] http://www.spinics.net/lists/linux-omap/msg15432.html
    
    Credits to:
    Mark Underwood - for his initial, omap-alsa based sound driver for
    this machine,
    Mark Brown - for his help, patience and excellent subsytem maintainer support.
    Signed-off-by: default avatarJanusz Krzysztofik <jkrzyszt@tis.icnet.pl>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    6d7f68a1
ams-delta.c 17.4 KB