linux/sound/oss/vidc.c
<<
ptio3.2/spalue 3.2/formue 3.2a ptio3. href="../linux+v3 <7/sound/oss/vidc.c">ptio3.2img src="../.static/gfx/right.png" alt=">>">pt2/spaluept2spal class="lxr_search">ptioptio3.2input typ hidden" nam navtarget" > ">ptio3.2input typ text" nam search" id search">ptio3.2butt22 typ submit">Searchptio3.Prefse 3.2/a>pt2/spalueio3. .2/divueio3. .2form ac"val="ajax+*" method="post" onsubmit="return false;">pt2input typ hidden" nam ajax_lookup" id ajax_lookup" > ">pio3. .2/formuepio3. .2div class="headingbott2m">e 2div id file_contents"u
. .12/a>2spal class="comment">/*2/spalue. .22/a>2spal class="comment"> *  linux/drivers/sound/vidc.c2/spalue. .32/a>2spal class="comment"> *2/spalue. .42/a>2spal class="comment"> *  Copyright (C) 1997-2000 by Russell King <rmk@arm.linux.org.uk>2/spalue. .52/a>2spal class="comment"> *2/spalue. .62/a>2spal class="comment"> * This program is free software; you cal redistribute it and/or modify2/spalue. .72/a>2spal class="comment"> * it under the terms of the GNU General Public License vers222
2 as2/spalue. .82/a>2spal class="comment"> * published by the Free Software Founda"val.2/spalue. .92/a>2spal class="comment"> *2/spalue. 316na>2spal class="comment"> *  VIDC20 audio driver.2/spalue. 112/a>2spal class="comment"> *2/spalue. 122/a>2spal class="comment"> * The VIDC20 sound hardware consists of the VIDC20 itself, a DAC and a DMA2/spalue. 132/a>2spal class="comment"> * engine.  The DMA transfers fixed-format (16-bit little-endial linear)2/spalue. 142/a>2spal class="comment"> * samples to the VIDC20, which then transfers this da"a serially to the2/spalue. 152/a>2spal class="comment"> * DACs.  The samplerate is controlled by the VIDC.2/spalue. 162/a>2spal class="comment"> *2/spalue. 172/a>2spal class="comment"> * We currently support a mixer device, but it is currently non-func"valal.2/spalue. 182/a>2spal class="comment"> */2/spalue. 192/a>e. 216na>#include <linux/gfp.h6na>>e. 216na>#include <linux/init.h6na>>e. 226na>#include <linux/module.h6na>>e. 236na>#include <linux/kernel.h6na>>e. 246na>#include <linux/interrupt.h6na>>e. 252/a>e. 266na>#include <mach/hardware.h6na>>e. 276na>#include <asm/dma.h6na>>e. 286na>#include <asm/io.h6na>>e. 296na>#include <asm/hardware/iomd.h6na>>e. 316na>#include <asm/irq.h6na>>e. 312/a>e. 326na>#include "sound_config.h6na>"e. 336na>#include "vidc.h6na>"e. 342/a>e. 356na>#ifndef.2a href="+code=_SIOC_TYPE" class="sref">_SIOC_TYPE2/a>e. 366na>#define.2a href="+code=_SIOC_TYPE" class="sref">_SIOC_TYPE2/a>(2a href="+code=x" class="sref">x2/a>)  .2a href="+code=_IOC_TYPE" class="sref">_IOC_TYPE2/a>(2a href="+code=x" class="sref">x2/a>)e. 376na>#endife. 386na>#ifndef.2a href="+code=_SIOC_NR" class="sref">_SIOC_NR2/a>e. 396na>#define.2a href="+code=_SIOC_NR" class="sref">_SIOC_NR2/a>(2a href="+code=x" class="sref">x2/a>)  . .2a href="+code=_IOC_NR" class="sref">_IOC_NR2/a>(2a href="+code=x" class="sref">x2/a>)e. 406na>#endife. 412/a>e. 426na>#define.2a href="+code=VIDC_SOUND_CLOCK" class="sref">VIDC_SOUND_CLOCK6na>        (250000)e. 436na>#define.2a href="+code=VIDC_SOUND_CLOCK_EXT" class="sref">VIDC_SOUND_CLOCK_EXT6na>    (176400)e. 442/a>e. 452/a>2spal class="comment">/*2/spalue. 462/a>2spal class="comment"> * When using SERIAL SOUND mode (external DAC), the number of physical2/spalue. 472/a>2spal class="comment"> * channels is fixed at 2.2/spalue. 482/a>2spal class="comment"> */2/spalue. 496na>static int              2a href="+code=vidc_busy" class="sref">vidc_busy6na>;e. 506na>static int              2a href="+code=vidc_adev" class="sref">vidc_adev6na>;e. 516na>static int              2a href="+code=vidc_audio_rate" class="sref">vidc_audio_rate6na>;e. 526na>static char             2a href="+code=vidc_audio_format" class="sref">vidc_audio_format6na>;e. 536na>static char             2a href="+code=vidc_audio_channels" class="sref">vidc_audio_channels6na>;e. 542/a>e. 556na>static unsigned char    2a href="+code=vidc_level_l" class="sref">vidc_level_l6na>[2a href="+code=SOUND_MIXER_NRDEVICES" class="sref">SOUND_MIXER_NRDEVICES6na>] = {e. 566na>        85,             2spal class="comment">/* master       */2/spalue. 576na>        50,             2spal class="comment">/* bass         */2/spalue. 586na>        50,             2spal class="comment">/* treble       */2/spalue. 596na>        0,              2spal class="comment">/* synth        */2/spalue. 606na>        75,             2spal class="comment">/* pcm          */2/spalue. 616na>        0,              2spal class="comment">/* speaker      */2/spalue. 626na>        100,            2spal class="comment">/* ext line     */2/spalue. 636na>        0,              2spal class="comment">/* mic          */2/spalue. 646na>        100,            2spal class="comment">/* CD           */2/spalue. 656na>        0,e. 666na>};e. 672/a>e. 686na>static unsigned char    2a href="+code=vidc_level_r" class="sref">vidc_level_r6na>[2a href="+code=SOUND_MIXER_NRDEVICES" class="sref">SOUND_MIXER_NRDEVICES6na>] = {e. 696na>        85,             2spal class="comment">/* master       */2/spalue. 706na>        50,             2spal class="comment">/* bass         */2/spalue. 716na>        50,             2spal class="comment">/* treble       */2/spalue. 726na>        0,              2spal class="comment">/* synth        */2/spalue. 736na>        75,             2spal class="comment">/* pcm          */2/spalue. 746na>        0,              2spal class="comment">/* speaker      */2/spalue. 756na>        100,            2spal class="comment">/* ext line     */2/spalue. 766na>        0,              2spal class="comment">/* mic          */2/spalue. 776na>        100,            2spal class="comment">/* CD           */2/spalue. 786na>        0,e. 796na>};e. 802/a>e. 816na>static unsigned int     2a href="+code=vidc_audio_volume_l" class="sref">vidc_audio_volume_l6na>;    2spal class="comment">/* left PCM vol, 0 - 65536 */2/spalue. 826na>static unsigned int     2a href="+code=vidc_audio_volume_r" class="sref">vidc_audio_volume_r6na>;    2spal class="comment">/* right PCM vol, 0 - 65536 */2/spalue. 832/a>e. 846na>extern void     2a href="+code=vidc_update_filler" class="sref">vidc_update_filler2/a>(int 2a href="+code=bits" class="sref">bits2/a>, int 2a href="+code=channels" class="sref">channels6na>);e. 856na>extern int      2a href="+code=softoss_dev" class="sref">softoss_dev6na>;e. 862/a>e. 876na>static voide. 882/a>2a href="+code=vidc_mixer_set" class="sref">vidc_mixer_set2/a>(int 2a href="+code=mdev" class="sref">mdev6na>, unsigned int 2a href="+code=level" class="sref">level2/a>)e. 896na>{e. 906na>        unsigned int 2a href="+code=lev_l" class="sref">lev_l6na> = 2a href="+code=level" class="sref">level2/a> & 0x007f;e. 916na>        unsigned int 2a href="+code=lev_r" class="sref">lev_r6na> = (2a href="+code=level" class="sref">level2/a> & 0x7f00) >> 8;e. 926na>        unsigned int 2a href="+code=mlev_l" class="sref">mlev_l6na>, 2a href="+code=mlev_r" class="sref">mlev_r6na>;e. 932/a>e. 946na>        if (2a href="+code=lev_l" class="sref">lev_l6na> > 100)e. 956na>                2a href="+code=lev_l" class="sref">lev_l6na> = 100;e. 966na>        if (2a href="+code=lev_r" class="sref">lev_r6na> > 100)e. 976na>                2a href="+code=lev_r" class="sref">lev_r6na> = 100;e. 982/a>e. 996na>#define.2a href="+code=SCALE" class="sref">SCALE2/a>(2a href="+code=lev" class="sref">lev6na>,2a href="+code=master" class="sref">master2/a>)  . .  ((2a href="+code=lev" class="sref">lev6na>) * (2a href="+code=master" class="sref">master2/a>) * 65536 / 10000)e.1002/a>e.1016na>        2a href="+code=mlev_l" class="sref">mlev_l6na> = 2a href="+code=vidc_level_l" class="sref">vidc_level_l6na>[2a href="+code=SOUND_MIXER_VOLUME" class="sref">SOUND_MIXER_VOLUME6na>];e.1026na>        2a href="+code=mlev_r" class="sref">mlev_r6na> = 2a href="+code=vidc_level_r" class="sref">vidc_level_r6na>[2a href="+code=SOUND_MIXER_VOLUME" class="sref">SOUND_MIXER_VOLUME6na>];e.1032/a>e.1046na>        switch (2a href="+code=mdev" class="sref">mdev6na>) {e.1056na>        case.2a href="+code=SOUND_MIXER_VOLUME" class="sref">SOUND_MIXER_VOLUME6na>:e.1066na>        case.2a href="+code=SOUND_MIXER_PCM" class="sref">SOUND_MIXER_PCM6na>:e.1076na>                2a href="+code=vidc_level_l" class="sref">vidc_level_l6na>[2a href="+code=mdev" class="sref">mdev6na>] = 2a href="+code=lev_l" class="sref">lev_l6na>;e.1086na>                2a href="+code=vidc_level_r" class="sref">vidc_level_r6na>[2a href="+code=mdev" class="sref">mdev6na>] = 2a href="+code=lev_r" class="sref">lev_r6na>;e.1092/a>e.1106na>                2a href="+code=vidc_audio_volume_l" class="sref">vidc_audio_volume_l6na> = 2a href="+code=SCALE" class="sref">SCALE2/a>(2a href="+code=lev_l" class="sref">lev_l6na>, 2a href="+code=mlev_l" class="sref">mlev_l6na>);e.1116na>                2a href="+code=vidc_audio_volume_r" class="sref">vidc_audio_volume_r6na> = 2a href="+code=SCALE" class="sref">SCALE2/a>(2a href="+code=lev_r" class="sref">lev_r6na>, 2a href="+code=mlev_r" class="sref">mlev_r6na>);e.1122/a>2spal class="comment">/*printk("VIDC: PCM vol %05X %05X\n", vidc_audio_volume_l, vidc_audio_volume_r);*/2/spalue.1136na>                break;e.1146na>        }e.1152/a>#undef.2a href="+code=SCALE" class="sref">SCALE2/a>e.1162/a>}e.1172/a>e.1186na>static int 2a href="+code=vidc_mixer_ioctl" class="sref">vidc_mixer_ioctl2/a>(int 2a href="+code=dev" class="sref">dev6na>, unsigned int 2a href="+code=cmd" class="sref">cmd6na>, void 2a href="+code=__user" class="sref">__user6na> *2a href="+code=arg" class="sref">arg2/a>)e.1196na>{e.1206na>        unsigned int 2a href="+code=val" class="sref">val6na>;e.1216na>        unsigned int 2a href="+code=mdev" class="sref">mdev6na>;e.1226na>e.1236na>        if (2a href="+code=_SIOC_TYPE" class="sref">_SIOC_TYPE2/a>(2a href="+code=cmd" class="sref">cmd6na>) != 2spal class="string">'M'2/spalu)e.1246na>                return -2a href="+code=EINVAL" class="sref">EINVAL6na>;e.1252/a>e.1266na>        2a href="+code=mdev" class="sref">mdev6na> = 2a href="+code=_SIOC_NR" class="sref">_SIOC_NR2/a>(2a href="+code=cmd" class="sref">cmd6na>);e.1272/a>e.1286na>        if (2a href="+code=_SIOC_DIR" class="sref">_SIOC_DIR2/a>(2a href="+code=cmd" class="sref">cmd6na>) & 2a href="+code=_SIOC_WRITE" class="sref">_SIOC_WRITE6na>) {e.1296na>                if (2a href="+code=get_user" class="sref">get_user2/a>(2a href="+code=val" class="sref">val6na>, (unsigned int 2a href="+code=__user" class="sref">__user6na> *)2a href="+code=arg" class="sref">arg2/a>))e.1306na>                        return -2a href="+code=EFAULT" class="sref">EFAULT6na>;e.1312/a>e.1326na>                if (2a href="+code=mdev" class="sref">mdev6na> <.2a href="+code=SOUND_MIXER_NRDEVICES" class="sref">SOUND_MIXER_NRDEVICES6na>)e.1336na>                        2a href="+code=vidc_mixer_set" class="sref">vidc_mixer_set2/a>(2a href="+code=mdev" class="sref">mdev6na>, 2a href="+code=val" class="sref">val6na>);e.1346na>                elsee.1356na>                        return -2a href="+code=EINVAL" class="sref">EINVAL6na>;e.1366na>        }e.1372/a>e.1386na>        2spal class="comment">/*2/spalue.1392/a>2spal class="comment">         * Return param
ters2/spalue.1416na>2spal class="comment">         */2/spalue.1416na>        switch (2a href="+code=mdev" class="sref">mdev6na>) {e.1426na>        case.2a href="+code=SOUND_MIXER_RECSRC" class="sref">SOUND_MIXER_RECSRC6na>:e.1436na>                2a href="+code=val" class="sref">val6na> = 0;e.1446na>                break;e.1452/a>e.1466na>        case.2a href="+code=SOUND_MIXER_DEVMASK" class="sref">SOUND_MIXER_DEVMASK6na>:e.1476na>                2a href="+code=val" class="sref">val6na> = 2a href="+code=SOUND_MASK_VOLUME" class="sref">SOUND_MASK_VOLUME6na> | 2a href="+code=SOUND_MASK_PCM" class="sref">SOUND_MASK_PCM6na> | 2a href="+code=SOUND_MASK_SYNTH" class="sref">SOUND_MASK_SYNTH6na>;e.1486na>                break;e.1492/a>e.1506na>        case.2a href="+code=SOUND_MIXER_STEREODEVS" class="sref">SOUND_MIXER_STEREODEVS6na>:e.1516na>                2a href="+code=val" class="sref">val6na> = 2a href="+code=SOUND_MASK_VOLUME" class="sref">SOUND_MASK_VOLUME6na> | 2a href="+code=SOUND_MASK_PCM" class="sref">SOUND_MASK_PCM6na> | 2a href="+code=SOUND_MASK_SYNTH" class="sref">SOUND_MASK_SYNTH6na>;e.1526na>                break;e.1532/a>e.1546na>        case.2a href="+code=SOUND_MIXER_RECMASK" class="sref">SOUND_MIXER_RECMASK6na>:e.1556na>                2a href="+code=val" class="sref">val6na> = 0;e.1566na>                break;e.1572/a>e.1586na>        case.2a href="+code=SOUND_MIXER_CAPS" class="sref">SOUND_MIXER_CAPS6na>:e.1596na>                2a href="+code=val" class="sref">val6na> = 0;e.1606na>                break;e.1612/a>e.1626na>        default:e.1636na>                if (2a href="+code=mdev" class="sref">mdev6na> <.2a href="+code=SOUND_MIXER_NRDEVICES" class="sref">SOUND_MIXER_NRDEVICES6na>)e.1646na>                        2a href="+code=val" class="sref">val6na> = 2a href="+code=vidc_level_l" class="sref">vidc_level_l6na>[2a href="+code=mdev" class="sref">mdev6na>] | 2a href="+code=vidc_level_r" class="sref">vidc_level_r6na>[2a href="+code=mdev" class="sref">mdev6na>] <<.8;e.1656na>                elsee.1666na>                        return -2a href="+code=EINVAL" class="sref">EINVAL6na>;e.1676na>        }e.1682/a>e.1696na>        return 2a href="+code=put_user" class="sref">put_user2/a>(2a href="+code=val" class="sref">val6na>, (unsigned int 2a href="+code=__user" class="sref">__user6na> *)2a href="+code=arg" class="sref">arg2/a>) ? -2a href="+code=EFAULT" class="sref">EFAULT6na> : 0;e.1706na>}e.1712/a>e.1726na>static unsigned int 2a href="+code=vidc_audio_set_format" class="sref">vidc_audio_set_format2/a>(int 2a href="+code=dev" class="sref">dev6na>, unsigned int 2a href="+code=fmt" class="sref">fmt6na>)e.1736na>{e.1746na>        switch (2a href="+code=fmt" class="sref">fmt6na>) {e.1756na>        default:e.1766na>                2a href="+code=fmt" class="sref">fmt6na> = 2a href="+code=AFMT_S16_LE" class="sref">AFMT_S16_LE6na>;e.1776na>        case.2a href="+code=AFMT_U8" class="sref">AFMT_U86na>:e.1786na>        case.2a href="+code=AFMT_S8" class="sref">AFMT_S86na>:e.1796na>        case.2a href="+code=AFMT_S16_LE" class="sref">AFMT_S16_LE6na>:e.1806na>                2a href="+code=vidc_audio_format" class="sref">vidc_audio_format6na> = 2a href="+code=fmt" class="sref">fmt6na>;e.1816na>                2a href="+code=vidc_update_filler" class="sref">vidc_update_filler2/a>(2a href="+code=vidc_audio_format" class="sref">vidc_audio_format6na>, 2a href="+code=vidc_audio_channels" class="sref">vidc_audio_channels6na>);e.1826na>        case.2a href="+code=AFMT_QUERY" class="sref">AFMT_QUERY6na>:e.1836na>                break;e.1846na>        }e.1856na>        return 2a href="+code=vidc_audio_format" class="sref">vidc_audio_format6na>;e.1862/a>}e.1872/a>e.1882/a>#define.2a href="+code=my_abs" class="sref">my_abs2/a>(2a href="+code=i" class="sref">i6na>) ((2a href="+code=i" class="sref">i6na>)<0 ? -(2a href="+code=i" class="sref">i6na>) : (2a href="+code=i" class="sref">i6na>))e.1892/a>e.1906na>static int 2a href="+code=vidc_audio_set_speed" class="sref">vidc_audio_set_speed2/a>(int 2a href="+code=dev" class="sref">dev6na>, int 2a href="+code=rate" class="sref">rate6na>)e.1916na>{e.1926na>        if (2a href="+code=rate" class="sref">rate6na>) {e.1936na>                unsigned int 2a href="+code=hwctrl" class="sref">hwctrl6na>, 2a href="+code=hwrate" class="sref">hwrate6na>, 2a href="+code=hwrate_ext" class="sref">hwrate_ext6na>, 2a href="+code=rate_int" class="sref">rate_int6na>, 2a href="+code=rate_ext" class="sref">rate_ext6na>;e.1946na>                unsigned int 2a href="+code=diff_int" class="sref">diff_int6na>, 2a href="+code=diff_ext" class="sref">diff_ext6na>;e.1956na>                unsigned int 2a href="+code=newsize" class="sref">newsize6na>, 2a href="+code=new2size" class="sref">new2size6na>;e.1962/a>e.1976na>                2a href="+code=hwctrl" class="sref">hwctrl6na> = 0x00000003;e.1982/a>e.1996na>                2spal class="comment">/* Using internal clock */2/spalue.2006na>                2a href="+code=hwrate" class="sref">hwrate6na> = (((2a href="+code=VIDC_SOUND_CLOCK" class="sref">VIDC_SOUND_CLOCK6na> * 2) / 2a href="+code=rate" class="sref">rate6na>) + 1) >> 1;e.2016na>                if (2a href="+code=hwrate" class="sref">hwrate6na> <.3)e.2026na>                        2a href="+code=hwrate" class="sref">hwrate6na> = 3;e.2036na>                if (2a href="+code=hwrate" class="sref">hwrate6na> > 255)e.2046na>                        2a href="+code=hwrate" class="sref">hwrate6na> = 255;e.2052/a>e.2066na>                2spal class="comment">/* Using exernal clock */2/spalue.2076na>                2a href="+code=hwrate_ext" class="sref">hwrate_ext6na> = (((2a href="+code=VIDC_SOUND_CLOCK_EXT" class="sref">VIDC_SOUND_CLOCK_EXT6na> * 2) / 2a href="+code=rate" class="sref">rate6na>) + 1) >> 1;e.2086na>                if (2a href="+code=hwrate_ext" class="sref">hwrate_ext6na> <.3)e.2096na>                        2a href="+code=hwrate_ext" class="sref">hwrate_ext6na> = 3;e.2106na>                if (2a href="+code=hwrate_ext" class="sref">hwrate_ext6na> > 255)e.2116na>                        2a href="+code=hwrate_ext" class="sref">hwrate_ext6na> = 255;e.2126na>e.2136na>                2a href="+code=rate_int" class="sref">rate_int6na> = 2a href="+code=VIDC_SOUND_CLOCK" class="sref">VIDC_SOUND_CLOCK6na> / 2a href="+code=hwrate" class="sref">hwrate6na>;e.2146na>                2a href="+code=rate_ext" class="sref">rate_ext6na> = 2a href="+code=VIDC_SOUND_CLOCK_EXT" class="sref">VIDC_SOUND_CLOCK_EXT6na> / 2a href="+code=hwrate_ext" class="sref">hwrate_ext6na>;e.2152/a>e.2166na>                2spal class="comment">/* Chose between external and internal clock */2/spalue.2176na>                2a href="+code=diff_int" class="sref">diff_int6na> = 2a href="+code=my_abs" class="sref">my_abs2/a>(2a href="+code=rate_ext" class="sref">rate_ext6na>-2a href="+code=rate" class="sref">rate6na>);e.2186na>                2a href="+code=diff_ext" class="sref">diff_ext6na> = 2a href="+code=my_abs" class="sref">my_abs2/a>(2a href="+code=rate_int" class="sref">rate_int6na>-2a href="+code=rate" class="sref">rate6na>);e.2196na>                if (2a href="+code=diff_ext" class="sref">diff_ext6na> <.2a href="+code=diff_int" class="sref">diff_int6na>) {e.2206na>                        2spal class="comment">/*printk("VIDC: external %d %d %d\n", rate, rate_ext, hwrate_ext);*/2/spalue.2216na>                        2a href="+code=hwrate" class="sref">hwrate6na>=2a href="+code=hwrate_ext" class="sref">hwrate_ext6na>;e.2226na>                        2a href="+code=hwctrl" class="sref">hwctrl6na>=0x00000002;e.2236na>                        2spal class="comment">/* Allow roughly 0.4% tolerance */2/spalue.2246na>                        if (2a href="+code=diff_ext" class="sref">diff_ext6na> > (2a href="+code=rate" class="sref">rate6na>/256))e.2256na>                                2a href="+code=rate" class="sref">rate6na>=2a href="+code=rate_ext" class="sref">rate_ext6na>;e.2266na>                } else {e.2276na>                        2spal class="comment">/*printk("VIDC: internal %d %d %d\n", rate, rate_int, hwrate);*/2/spalue.2286na>                        2a href="+code=hwctrl" class="sref">hwctrl6na>=0x00000003;e.2296na>                        2spal class="comment">/* Allow roughly 0.4% tolerance */2/spalue.2306na>                        if (2a href="+code=diff_int" class="sref">diff_int6na> > (2a href="+code=rate" class="sref">rate6na>/256))e.2316na>                                2a href="+code=rate" class="sref">rate6na>=2a href="+code=rate_int" class="sref">rate_int6na>;e.2326na>                }e.2332/a>e.2346na>                2a href="+code=vidc_writel" class="sref">vidc_writel2/a>(0xb0000000 | (2a href="+code=hwrate" class="sref">hwrate6na> - 2));e.2356na>                2a href="+code=vidc_writel" class="sref">vidc_writel2/a>(0xb1000000 | 2a href="+code=hwctrl" class="sref">hwctrl6na>);e.2362/a>e.2376na>                2a href="+code=newsize" class="sref">newsize6na> = (10000 / 2a href="+code=hwrate" class="sref">hwrate6na>) & ~3;e.2386na>                if (2a href="+code=newsize" class="sref">newsize6na> <.208)e.2396na>                        2a href="+code=newsize" class="sref">newsize6na> = 208;e.2406na>                if (2a href="+code=newsize" class="sref">newsize6na> > 4096)e.2416na>                        2a href="+code=newsize" class="sref">newsize6na> = 4096;e.2426na>                for (2a href="+code=new2size" class="sref">new2size6na> = 128;.2a href="+code=new2size" class="sref">new2size6na> <.2a href="+code=newsize" class="sref">newsize6na>;.2a href="+code=new2size" class="sref">new2size6na> <<= 1);e.2436na>                if (2a href="+code=new2size" class="sref">new2size6na> - 2a href="+code=newsize" class="sref">newsize6na> > 2a href="+code=newsize" class="sref">newsize6na> - (2a href="+code=new2size" class="sref">new2size6na> >> 1))e.2446na>                        2a href="+code=new2size" class="sref">new2size6na> >>= 1;e.2456na>                if (2a href="+code=new2size" class="sref">new2size6na> > 4096) {e.2466na>                        2a href="+code=printk" class="sref">printk2/a>(2a href="+code=KERN_ERR" class="sref">KERN_ERR6na> 2spal class="string">"VIDC: error: dma buffer (%d) %d > 4K\n"2/spalu,e.2476na>                                2a href="+code=newsize" class="sref">newsize6na>, 2a href="+code=new2size" class="sref">new2size6na>);e.2486na>                        2a href="+code=new2size" class="sref">new2size6na> = 4096;e.2496na>                }e.2506na>                2spal class="comment">/*printk("VIDC: dma size %d\n", new2size);*/2/spalue.2516na>                2a href="+code=dma_bufsize" class="sref">dma_bufsize6na> = 2a href="+code=new2size" class="sref">new2size6na>;e.2526na>                2a href="+code=vidc_audio_rate" class="sref">vidc_audio_rate6na> = 2a href="+code=rate" class="sref">rate6na>;e.2536na>        }e.2546na>        return 2a href="+code=vidc_audio_rate" class="sref">vidc_audio_rate6na>;e.2556na>}e.2562/a>e.2576na>static short 2a href="+code=vidc_audio_set_channels" class="sref">vidc_audio_set_channels2/a>(int 2a href="+code=dev" class="sref">dev6na>, short 2a href="+code=channels" class="sref">channels6na>)e.2586na>{e.2596na>        switch (2a href="+code=channels" class="sref">channels6na>) {e.2606na>        default:e.2616na>                2a href="+code=channels" class="sref">channels6na> = 2;e.2626na>        case.1:e.2636na>        case.2:e.2646na>                2a href="+code=vidc_audio_channels" class="sref">vidc_audio_channels6na> = 2a href="+code=channels" class="sref">channels6na>;e.2656na>                2a href="+code=vidc_update_filler" class="sref">vidc_update_filler2/a>(2a href="+code=vidc_audio_format" class="sref">vidc_audio_format6na>, 2a href="+code=vidc_audio_channels" class="sref">vidc_audio_channels6na>);e.2666na>        case.0:e.2676na>                break;e.2686na>        }e.2696na>        return 2a href="+code=vidc_audio_channels" class="sref">vidc_audio_channels6na>;e.2706na>}e.2712/a>e.2722/a>2spal class="comment">/*2/spalue.2736na>2spal class="comment"> * Open the device2/spalue.2746na>2spal class="comment"> */2/spalue.2756na>static int 2a href="+code=vidc_audio_open" class="sref">vidc_audio_open2/a>(int 2a href="+code=dev" class="sref">dev6na>, int 2a href="+code=mode" class="sref">mode6na>)e.2766na>{e.2776na>        2spal class="comment">/* This audio device does not have recording capability */2/spalue.2786na>        if (2a href="+code=mode" class="sref">mode6na> == 2a href="+code=OPEN_READ" class="sref">OPEN_READ6na>)e.2796na>                return -2a href="+code=EPERM" class="sref">EPERM6na>;e.2802/a>e.2816na>        if (2a href="+code=vidc_busy" class="sref">vidc_busy6na>)e.2826na>                return -2a href="+code=EBUSY" class="sref">EBUSY6na>;e.2832/a>e.2846na>        2a href="+code=vidc_busy" class="sref">vidc_busy6na> = 1;e.2856na>        return 0;e.2862/a>}e.2872/a>e.2882/a>2spal class="comment">/*2/spalue.2892/a>2spal class="comment"> * Close the device2/spalue.2916na>2spal class="comment"> */2/spalue.2916na>static void 2a href="+code=vidc_audio_close" class="sref">vidc_audio_close2/a>(int 2a href="+code=dev" class="sref">dev6na>)e.2926na>{e.2936na>        2a href="+code=vidc_busy" class="sref">vidc_busy6na> = 0;e.2946na>}e.2952/a>e.2962/a>2spal class="comment">/*2/spalue.2976na>2spal class="comment"> * Output a block via DMA to sound device.2/spalue.2982/a>2spal class="comment"> *2/spalue.2992/a>2spal class="comment"> * We just set the DMA start and count; the DMA interrupt routine2/spalue.3016na>2spal class="comment"> * will take care of formatting the samples (via the appropriate6nspalue.3016na>2spal class="comment"> * vidc_filler routine), and flag via vidc_audio_dma_interrupt when2/spalue.3022/a>2spal class="comment"> * more data is required.2/spalue.3036na>2spal class="comment"> */2/spalue.3046na>static voide.3052/a>2a href="+code=vidc_audio_output_block" class="sref">vidc_audio_output_block2/a>(int 2a href="+code=dev" class="sref">dev6na>, unsigned long 2a href="+code=buf" class="sref">buf6na>, int 2a href="+code=total_count" class="sref">total_count6na>, int 2a href="+code=one" class="sref">one6na>)e.3066na>{e.3076na>        struct 2a href="+code=dma_buffparms" class="sref">dma_buffparms6na> *2a href="+code=dmap" class="sref">dmap6na> = 2a href="+code=audio_devs" class="sref">audio_devs6na>[2a href="+code=dev" class="sref">dev6na>]->2a href="+code=dmap_out" class="sref">dmap_out6na>;e.3086na>        unsigned long 2a href="+code=flags" class="sref">flags6na>;e.3092/a>e.3106na>        2a href="+code=local_irq_save" class="sref">local_irq_save2/a>(2a href="+code=flags" class="sref">flags6na>);e.3116na>        2a href="+code=dma_start" class="sref">dma_start6na> = 2a href="+code=buf" class="sref">buf6na> - (unsigned long)2a href="+code=dmap" class="sref">dmap6na>->2a href="+code=raw_buf_phys" class="sref">raw_buf_phys6na> + (unsigned long)2a href="+code=dmap" class="sref">dmap6na>->2a href="+code=raw_buf" class="sref">raw_buf6na>;e.3126na>        2a href="+code=dma_count" class="sref">dma_count6na> = 2a href="+code=total_count" class="sref">total_count6na>;e.3136na>        2a href="+code=local_irq_restore" class="sref">local_irq_restore2/a>(2a href="+code=flags" class="sref">flags6na>);e.3146na>}e.3152/a>e.3166na>static voide.3176na>2a href="+code=vidc_audio_start_input" class="sref">vidc_audio_start_input2/a>(int 2a href="+code=dev" class="sref">dev6na>, unsigned long 2a href="+code=buf" class="sref">buf6na>, int 2a href="+code=count" class="sref">count6na>, int 2a href="+code=intrflag" class="sref">intrflag6na>)e.3186na>{e.3196na>}e.3202/a>e.3216na>static int 2a href="+code=vidc_audio_prepare_for_input" class="sref">vidc_audio_prepare_for_input2/a>(int 2a href="+code=dev" class="sref">dev6na>, int 2a href="+code=bsize" class="sref">bsize6na>, int 2a href="+code=bcount" class="sref">bcount6na>)e.3226na>{e.3236na>        return -2a href="+code=EINVAL" class="sref">EINVAL6na>;e.3246na>}e.3252/a>e.3266na>static 2a href="+code=irqreturn_t" class="sref">irqreturn_t6na> 2a href="+code=vidc_audio_dma_interrupt" class="sref">vidc_audio_dma_interrupt2/a>(void)e.3276na>{e.3286na>        2a href="+code=DMAbuf_outputintr" class="sref">DMAbuf_outputintr2/a>(2a href="+code=vidc_adev" class="sref">vidc_adev6na>, 1);e.3296na>        return 2a href="+code=IRQ_HANDLED" class="sref">IRQ_HANDLED6na>;e.3306na>}e.3312/a>e.3322/a>2spal class="comment">/*2/spalue.3336na>2spal class="comment"> * Prepare for outputting samples.2/spalue.3346na>2spal class="comment"> *2/spalue.3356na>2spal class="comment"> * Each buffer that will be passed ref="souQe" nam
  22" c bytesg 2a ,alue2spal class="comment">/*2/ill tth a l_couform`nt6na>22" c br thaspalue2spal class="comment"> * Outpalue    ic int 2a href="+code=vidc_audio_prepare_for_inpuuttingass="sref">vidc_audio_prepare_for_inpuutting(int 2a href="+code=dev" class="sref">dev6na>, int 2a href="+code=bsize" class="sref">bsize6na>, int 2a href="+code=bcount" class="sref">bcount6na>)e     href="sound/oss/vidc.c#L328" id  L240"3class="line" nam
  L240"3.24063a>            ct 2a href="+code=dma_o_open2/ar inonlass="sref">audio_devs2/ar inonl *2a href="+code=dmap" class="sref">vidc6na>, 1)a href="+code=audio_devs" class="sref">audio_devs6na>[2a href="+code=dev" class="sref">dev6na>]-> href="sound/oss/vidc.c#L330" id  L241"3class="line" nam
  L241"3.241634>e        2a href="+code=dma_counrrupt" class="sref">vidcinterrupt2/a>(voia href="+code=audiNULlass="sref">EINVNULl;e        2a href="+code=loca" class="sref">vidc6na>, 1);2a href="+code=dmap_out" class="sref">dmap_out6na>;eflags6na>);e< | href="+code=audiuf__NOuf_ass="sref">DMAbuf__NOuf_;e    href="sound/oss/vidc.c#L330" id  L335" class="line" nam
  L245"3.245634>        return 0;e}ee2spal class="comment">/*2/spalue2spal class="comment"> * We jStopputr curr> * 2/ar inonpalue2spal class="comment"> */2/spaluestatic void 2a href="+code=vidc_audio_closresegass="sref">vidc_audio_prepreseg(int 2a href="+code=dev" class="sref">dev6na>)e{e        2a href="+code=locacounrrupt" class="sref">vidcinterrupt2/a>(voia href="+code=audiNULlass="sref">EINVNULl;e}eestatic 2a h2a href="+code=vidc_audio_prepl_irq_qlclass="sref">vidc_audio_openl_irq_qlcl(int 2a href="+code=dev" class="sref">dev6na>)e{e        casern 2a hr class="comment">/*2/spcount6na> !=spalue}eestatic void 2a href="+code=vidc_audio_clostriggclass="sref">vidc_updao_clostriggcl(int 2a href="+code=dev" class="sref">dev6na>, int 2a href="+code=bsizenable_bitlass="sref">flagenable_bitl)e{e        casect 2a href="+code=dma_o_open2/ar inonlass="sref">audio_devs2/ar inonl *2a href="+code=dmap" class="sref">vidc6na>, 1)a href="+code=audio_devs" class="sref">audio_devs6na>[2a href="+code=dev" class="sref">dev6na>]-> href="sound/oss/vidc.c#L330" id  L264"3class="line" nam
  L264"3.264636>    href="sound/oss/vidc.c#L330" id  L265"3class="line" nam
  L265"3.26563a>            2a href="+code=vidcenable_bitlass="sref">flagenable_bitl)eVIDCPCM_ENABLE_OUTPUl)e                    2a h!href="+code=vidc" class="sref">vidc6na>, 1);2a href="+code=dmap_out" class="sref">dmap_out6na>;eflags6na>);e< ; ~3;eref="+code=vidcuf__ACTIVEass="sref">DMAbuf__ACTIVE)e                brea    unsigned long 2a href="+code=flags" class="sref">flags6na>;ee                        2a href="+code=newsl_irq_save" class="sref">local_irq_save2/a>(2a href="+code=flags" class="sref">flags6na>);ee                        2a hr class="comment">/* Thisprev> * recusnon/spalue                        2a href="+code=hwct" class="sref">vidc6na>, 1);2a href="+code=dmap_out" class="sref">dmap_out6na>;eflags6na>);e< | href="+code=audiuf__ACTIVEass="sref">DMAbuf__ACTIVE)ee        swit            2a href="+code=hwctcounrrupt" class="sref">vidcinterrupt2/a>(voia href="+code=audi_audio_dma_interrupt" class="sref">vidc_audio_dma_interrupt2/a>(voi href="sound/oss/vidc.c#L311" id  L265"3class="line" nam
  L275"3.275637>                2a h    2a href="+code=hwct_audid/oss_interrqass="sref">vidc_audid/oss_interrq(2a h0 href="+code=vidcNULlass="sref">EINVNULl;e                2a h    2a href="+code=hwctiomdtel2/abass="sref">irqreomdtel2/ab(2a href="+code=flaguf__CR_Eass="sref">DMAbuf__CR_E);e< | 0x10 href="+code=vidcIOMD_SD0Class="sref">KERNIOMD_SD0Cl;ee                        2a href="+code=new2l_irq_restore" class="sref">local_irq_restore2/a>(2a href="+code=flags" class="sref">flags6na>);e                retu href="sound/oss/vidc.c#L320" id  L280"3class="line" nam
  L280"3.28023a>             href="sound/oss/vidc.c#L320" id  L271"3class="line" nam
  L281"3.28163a>     href="sound/oss/vidc.c#L320" id  L272"3class="line" nam
  L282"3.282638>eevidco_opendrivcl 2a href="+code=vidc_audio_dma_irivclass="sref">vidc_audio_dma_irivcl(voia href="sound/oss/vidc.c#L213"3id  L274"3class="line" nam
  L284"3.28463a>     href="sound/oss/vidc.c#L260"3id  L285"3class="line" nam
  L285"3.28563a>        retu.ref="+code=vidcownclass="sref">vidcowncl                       href="+code=audiTHIS_MODUclass="sref">AFMTTHIS_MODUcl, inthref="sound/oss/vidc.c#L260"3id  L266"3class="line" nam
  L286"3.2862386        retu.ref="+code=vidco class="sref">vidc2/a>(int               2a h href="+code=audi_audio_dma_" class="sref">vidc_audio_open2/a>(intthref="sound/oss/vidc.c#L260"3id  L247"3class="line" nam
  L287"3.2872387        retu.ref="+code=vidce" class="sref">vidce2/a>(int              2a h href="+code=audi_audio_dma_e" class="sref">vidc_audio_close2/a>(intthref="sound/oss/vidc.c#L260"3id  L278"3class="line" nam
  L288"3.2882388        retu.ref="+code=vidcot_block" class="sref">vidcut_block2/a>(int       2a h href="+code=audi_audio_dma_"t_block" class="sref">vidc_audio_output_block2/a>(intthref="sound/oss/vidc.c#L260"3id  L279"3class="line" nam
  L289"3.2892389        retu.ref="+code=vidct_input" class="sref">vidct_input2/a>(int        2a h href="+code=audi_audio_dma_t_input" class="sref">vidc_audio_start_input2/a>(intthref="sound/oss/vidc.c#L260"3id  L290"3class="line" nam
  L290"3.2916390        retu.ref="+code=vidcare_for_input" class="sref">vidcare_for_input2/a>(int  2a h href="+code=audi_audio_dma_are_for_input" class="sref">vidc_audio_prepare_for_input2/a>(intthref="sound/oss/vidc.c#L260"3id  L271"3class="line" nam
  L291"3.2916391        retu.ref="+code=vidcare_for_inpuuttingass="sref">vidcare_for_inpuutting(int 2a h href="+code=audi_audio_dma_are_for_inpuuttingass="sref">vidc_audio_prepare_for_inpuutting(intthref="sound/oss/vidc.c#L260"3id  L272"3class="line" nam
  L292"3.29263a>        if (.ref="+code=vidchalputoass="sref">vidchalputo(int              2a href="+code=audi_audio_dma_resegass="sref">vidc_audio_prepreseg(intthref="sound/oss/vidc.c#L260"3id  L283"3class="line" nam
  L293"3.29363a>        2a h.ref="+code=vidcl_irq_qlclass="sref">vidcl_irq_qlcl(int           2a href="+code=audi_audio_dma_l_irq_qlclass="sref">vidc_audio_openl_irq_qlcl(intthref="sound/oss/vidc.c#L260"3id  L274"3class="line" nam
  L294"3.29463a>            .ref="+code=vidctriggclass="sref">vidctriggcl(int              2a href="+code=audi_audio_dma_triggclass="sref">vidc_updao_clostriggcl(intthref="sound/oss/vidc.c#L260"3id  L285"3class="line" nam
  L295"3.295239>        retu.ref="+code=vidcspeed" class="sref">vidcspeed2/a>(int            2a href="+code=audi_audio_dma_speed" class="sref">vidc_audio_set_speed2/a>(intthref="sound/oss/vidc.c#L260"3id  L266"3class="line" nam
  L296"3.2962396        retu.ref="+code=vidcspeebitlass="sref">flagspeebitl(int              2 href="+code=audi_audio_dma_speeat" class="sref">vidc_audio_formspeeat" cl(intthref="sound/oss/vidc.c#L260"3id  L247"3class="line" nam
  L297"3.2976397        retu.ref="+code=vidcchannels" class="sref">vidcchannels2/a>(int          2 href="+code=audi_audio_dma_speenels" class="sref">vidc_audio_set_channels2/a>(inthref="sound/oss/vidc.c#L260"3id  L278"3class="line" nam
  L298"3.29823a>2spa} href="sound/oss/vidc.c#L314" id  L299"3class="line" nam
  L299"3.299239>e2spaic shortt 2a href="+code=dma_mixern2/ar inonlass="sref">audimixern2/ar inonl 2a href="+code=vidc_audimixern2/ar inonlass="sref">audi_audimixern2/ar inonl(voia h href="sound/oss/vidc.c#L260"4id  L301"4class="line" nam
  L301"4.3016401        retu.ref="+code=vidcownclass="sref">vidcowncl               href="+code=audiTHIS_MODUclass="sref">AFMTTHIS_MODUcl, inthref="sound/oss/vidc.c#L260"4id  L302"4class="line" nam
  L302"4.302240>        if (.ref="+code=vidcilass="sref">vidci>(int            2=al class="string">"VIDC: ert;2/spalu,e        2a h.ref="+code=vidc  L3ass="sref">vidc  L3(int          2 hr class="string">"VIDC: erd/osst;2/spalu,e            .ref="+code=vidcioctlass="sref">hwctioctl               href="+code=audi_audimixernioctlass="sref">hwct_audimixernioctle2a h} href="sound/oss/vidc.c#L314"4id  L306"4class="line" nam
  L306"4.306640>e     2a href="+code=vidc_audite_filler" class="sref">vidc_update_filler2/a>(2a h2a href="+code=bsizat" class="sref">vidcat6na>, 2a h2a href="+code=countels" class="sref">channels6na>)e{eeAFMTTYPl(2a href="+code=flagsmlass="sref">vidcam>, 2a ref="+code=counteass="sref">channe)evidcam>, 2a)<= 1)2)2a hhref="+code=channeass="sref">channe)ee        2a hch (2a href="+code=chanTYPlass="sref">AFMTTYPl(2a href="+code=flagst" class="sref">vidcat6na>, 2a href="+code=countels" class="sref">channels6na>)e        2a hult:e        2a h.0:eAFMTTYPl(2a href="+code=flagAFMT_U8ass="sref">AFMTAFMT_U8, 2a h1) href="sound/oss/vidc.c#L261"4i4  L303"4class="line" nam
  L314"4.31464a>                2a href="+code=rate_updaer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_1x8_uass="sref">vidc_updaer2/_1x8_u(voi href="sound/oss/vidc.c#L311"4id  L315"4class="line" nam
  L315"4.315241>                2a hk;ee            .0:eAFMTTYPl(2a href="+code=flagAFMT_U8ass="sref">AFMTAFMT_U8, 2a h2) href="sound/oss/vidc.c#L261"4id  L308"4class="line" nam
  L318"4.31864a>                2a href="+code=diff_updaer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_2x8_uass="sref">vidc_updaer2/_2x8_u(voi href="sound/oss/vidc.c#L311"4id  L309"4class="line" nam
  L319"4.31964a>                if (k;ee            .0:eAFMTTYPl(2a href="+code=flagAFMT_S8ass="sref">AFMTAFMT_S8, 2a h1) href="sound/oss/vidc.c#L261"4id  L322"4class="line" nam
  L322"4.32264a>                    ref="+code=rate_updaer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_1x8_lass="sref">audi_audier2/_1x8_l(voi href="sound/oss/vidc.c#L311"4id  L323"4class="line" nam
  L323"4.32364a>                    k;e    href="sound/oss/vidc.c#L330"4id  L325"4class="line" nam
  L325"4.32524a>            .0:eAFMTTYPl(2a href="+code=flagAFMT_S8ass="sref">AFMTAFMT_S8, 2a h2) href="sound/oss/vidc.c#L261"4id  L326"4class="line" nam
  L326"4.32664a>                } elref="+code=diff_updaer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_2x8_lass="sref">audi_audier2/_2x8_l(voi href="sound/oss/vidc.c#L311"4id  L317"4class="line" nam
  L327"4.32764a>                    k;ee        retu.0:eAFMTTYPl(2a href="+code=flagAFMT_S16_class="sref">AFMTAFMT_S16_cl, 2a h1) href="sound/oss/vidc.c#L261"4id  L330"4class="line" nam
  L330"4.33064a>                    ref="+code=rate_updaer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_1x16_lass="sref">audi_audier2/_1x16_l(voi href="sound/oss/vidc.c#L311"4id  L331"4class="line" nam
  L331"4.33124a>                    k;ee        2a h.0:eAFMTTYPl(2a href="+code=flagAFMT_S16_class="sref">AFMTAFMT_S16_cl, 2a h2) href="sound/oss/vidc.c#L261"4id  L334"4class="line" nam
  L334"4.33464a>                2a href="+code=vidc_writer" class="sref">vidc_updaer2/a>(2a   href="+code=audi_audier2/_2x16_lass="sref">audi_audier2/_2x16_l(voi href="sound/oss/vidc.c#L311"4id  L325"4class="line" nam
  L335"4.33564a>                2a hk;e             href="sound/oss/vidc.c#L320"4id  L327"4class="line" nam
  L237"4.237643>2spa href="sound/oss/vidc.c#L320"4id  L308"4class="line" nam
  L238"4.238643>e    ic void 2a href="+code=vidc__inilass="sref">vidc__inil 2a href="+code=vidcattach_.c#Lass="sref">vidcottach_.c#L(2a htt 2a href="+code=dma_oddress_infoass="sref">vidcoddress_info 2a hhref="+code=dmaphw_confilass="sref">intrhw_confil)e     href="sound/oss/vidc.c#L260"4id  L241"4class="line" nam
  L241"4.24164a>            charhref="+code=new2s L3ass="sref">vidc  L3(int[32t href="sound/oss/vidc.c#L330"4id  L242"4class="line" nam
  L242"4.242644>        2a h2a href="+code=intrfass="sref">hwcti, 2a href="+code=coun" class="sref">vidc6na>, 1) href="sound/oss/vidc.c#L330"4id  L333"4class="line" nam
  L243"4.243644>e            ref="+code=vidcctk(&qlass="sref">buf6ctk(&ql(2a href="+code=flags L3ass="sref">vidc  L3(int,hr class="string">"VIDC: er7;d\n&q-bit d/osst;2/spalu,eintrhw_confil)evidceard_subtypl)e        returef="+code=dmapconf_tk(&qlass="sref">buf6conf_tk(&ql(2a href="+code=flags L3ass="sref">vidc  L3(int,href="+code=dmaphw_confilass="sref">intrhw_confil)e            ref="+code=dma_memsegass="sref">vidcmemseg(2a href="+code=flagbuffparass="sref">vidcbuffpar(int,h0,e ofhref="+code=flagbuffparass="sref">vidcbuffpar(int)  href="sound/oss/vidc.c#L330"4id  L327"4class="line" nam
  L247"4.247644>e        2a href="+code=DMAb" class="sref">vidc6na>, 1)a href="+code=audid/oss_inic 2/_o_setdrlass="sref">vidcd/oss_inic 2/_o_setdrl(2a href="+code=flagAUDIO_DRIVER_VERSIONass="sref">AFMTAUDIO_DRIVER_VERSION(int,href="+code=dmaps L3ass="sref">vidc  L3(int,href="sound/oss/vidc.c#L288"4id  L239"4class="line" nam
  L249"4.24964a>                }evidc_audio_dma_irivcl(voi,e ofhref="+code=flag_audio_dma_irivclass="sref">vidc_audio_dma_irivcl(voi),href="sound/oss/vidc.c#L288"4id  L250"4class="line" nam
  L250"4.25064a>                2spa    2a href="+code=DMAbuf__AUTOMODEass="sref">DMAbuf__AUTOMODE(int,href="+code=dmapAFMT_U8ass="sref">AFMTAFMT_U8, 2a |href="+code=dmapAFMT_S8ass="sref">AFMTAFMT_S8, 2a |href="+code=dmapAFMT_S16_class="sref">AFMTAFMT_S16_cl, 2a href="sound/oss/vidc.c#L288"4id  L241"4class="line" nam
  L251"4.25164a>                2a h    2a href="+code=DMAbNULlass="sref">EINVNULl;eintrhw_confil)evidcbuf;eintrhw_confil)evidcbuf2)ee        2a h2a href="+code=vidc" class="sref">vidc6na>, 1)a= 1) 0 href="sound/oss/vidc.c#L258"4id  L254"4class="line" nam
  L254"4.254645>                2a hgotohref="+code=dma_o_openfailclass="sref">vidco_openfailcl, 1) href="sound/oss/vidc.c#L330"4id  L255"4class="line" nam
  L255"4.255645>e            r class="comment">/*2/spalue2spal class="comment"> * Ouuuuuuuuu* 1024 bytesg= 4K\n64 br thasalue2spal class="comment"> *2/suuuuuuuu*palue        switref="+code=dma_o_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmin_frag"> *2ss="sref">vidcmin_frag"> *, 1)a h1a href="sound/oss/vidc.c#L286"4id  L260"4class="line" nam
  L260"4.260646>        2a href="+code=locao_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmixern class="sref">vidcmixern cl, 1)a href="+code=audinumimixerlass="sref">audinumimixerl, 1) href="sound/oss/vidc.c#L330"4id  L261"4class="line" nam
  L261"4.261646>e        2a href="+code=dma_o_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmixern class="sref">vidcmixern cl, 1)a href="sound/oss/vidc.c#L332"4id  L253"4class="line" nam
  L263"4.263646>                    ref="+code=audid/oss_inic 2/_mixerass="sref">vidcd/oss_inic 2/_mixer(2a href="+code=flagMIXER_DRIVER_VERSIONass="sref">AFMTMIXER_DRIVER_VERSION, 2a href="sound/oss/vidc.c#L288"4id  L264"4class="line" nam
  L264"4.26464a>                2a h                ref="+code=audis L3ass="sref">vidc  L3(int,h; ~3;ref="+code=audi_audimixern2/ar inonlass="sref">audi_audimixern2/ar inonl(voi href="sound/oss/vidc.c#L288"4id  L255"4class="line" nam
  L265"4.26564a>                2a hhhhhhhhhhhhhhhhh ofhref="+code=flag_audimixern2/ar inonlass="sref">audi_audimixern2/ar inonl(voi) href="+code=vidcNULlass="sref">EINVNULl;ee            2a href="+code=vidc"_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmixern class="sref">vidcmixern cl, 1)a= 1) 0 href="sound/oss/vidc.c#L258"4id  L268"4class="line" nam
  L268"4.268646>                2a hgotohref="+code=dma_mixernfailclass="sref">vidcmixernfailcl, 1) href="sound/oss/vidc.c#L330"4id  L259"4class="line" nam
  L269"4.269646>e        2a houtphref="+code=vidcfass="sref">hwcti, 2a;ehwcti, 2aa= 1) 2 href="+code=intrfass="sref">hwcti, 2a++ a href="sound/oss/vidc.c#L260"4id  L271"4class="line" nam
  L271"4.271247>                    ref="+code=flagbuffparass="sref">vidcbuffpar(inthref="+code=dev"fass="sref">hwcti, 2a]a href="+code=audiget_zeroed_pag3ass="sref">vidcget_zeroed_pag3(2a href="+code=flagGFP_KERNElass="sref">EINVGFP_KERNEl;e                    2a h!ref="+code=flagbuffparass="sref">vidcbuffpar(inthref="+code=dev"fass="sref">hwcti, 2a] a href="sound/oss/vidc.c#L260"4id  L253"4class="line" nam
  L273"4.273647>                            ref="+code=flagtk(&qlass="sref">vidctk(&ql(2a href="+code=flagKERN_ERlass="sref">KERNKERN_ERl 2a hr class="string">"VIDC;d\n&s: can22" ct  2/ocateuired.2/s br thas\nt;2/spalu,e        swit            2a h        ref="+code=flags L3ass="sref">vidc  L3(inta href="sound/oss/vidc.c#L311"4id  L255"4class="line" nam
  L275"4.275647>                2a h    2a hgotohref="+code=dma_memnfailclass="sref">vidcmemnfailcl, 1) href="sound/oss/vidc.c#L330"4id  L266"4class="line" nam
  L276"4.27664a>                2a h href="sound/oss/vidc.c#L320"4id  L247"4class="line" nam
  L277"4.277647>                    ref="+code=flagbuffpparass="sref">vidcbuffppar(inthref="+code=dev"fass="sref">hwcti, 2a]a href="+code=audivirt_tos" class="sref">raw_virt_tos" cl(2a hd)evidcbuffpar(inthref="+code=dev"fass="sref">hwcti, 2a]  href="sound/oss/vidc.c#L330"4id  L268"4class="line" nam
  L278"4.278647>             href="sound/oss/vidc.c#L320"4id  L259"4class="line" nam
  L279"4.279647>e            2a href="+code=vidcd/oss_ 2/oc_bufass="sref">vidcd/oss_ 2/oc_buf(2a href="+code=flaghw_confilass="sref">intrhw_confil)evidcbuf;eintrhw_confil)evidc  L3(inta a href="sound/oss/vidc.c#L260"4id  L271"4class="line" nam
  L281"4.281648>                    ref="+code=flagtk(&qlass="sref">vidctk(&ql(2a href="+code=flagKERN_ERlass="sref">KERNKERN_ERl 2a hr class="string">"VIDC;d\n&s: inte;d\n&qrequin  use\nt;2/spalu,evidc  L3(int,href="+code=flaghw_confilass="sref">intrhw_confil)evidcbuf;e                retugotohref="+code=dma_bufffailclass="sref">vidcbufffailcl, 1) href="sound/oss/vidc.c#L330"4id  L283"4class="line" nam
  L283"4.2832483             href="sound/oss/vidc.c#L320"4id  L274"4class="line" nam
  L284"4.284648>    href="sound/oss/vidc.c#L330"4id  L285"4class="line" nam
  L285"4.28564a>        retu2a href="+code=vidciredesterrqass="sref">vidciredesterrq(2a href="+code=flaghw_confilass="sref">intrhw_confil)evidcrrq(2a ,href="+code=flag_audid/oss_interrqass="sref">vidc_audid/oss_interrq(2a ,h0,href="sound/oss/vidc.c#L330"4id  L266"4class="line" nam
  L286"4.286248>                2a h    2a href="+code=hwcthw_confilass="sref">intrhw_confil)evidc  L3(int,h; ~3;ref="+code=audistart" class="sref">dma_start6na> = 2a a href="sound/oss/vidc.c#L260"4id  L247"4class="line" nam
  L287"4.287248>                    ref="+code=flagtk(&qlass="sref">vidctk(&ql(2a href="+code=flagKERN_ERlass="sref">KERNKERN_ERl 2a hr class="string">"VIDC;d\n&s: IRQe;d\n&qrequin use\nt;2/spalu,evidc  L3(int,href="+code=flaghw_confilass="sref">intrhw_confil)evidcrrq(2a   href="sound/oss/vidc.c#L330"4id  L268"4class="line" nam
  L288"4.288248>                2a hgotohref="+code=dma_restfailclass="sref">vidcrestfailcl, 1) href="sound/oss/vidc.c#L330"4id  L259"4class="line" nam
  L289"4.2892489        retu href="sound/oss/vidc.c#L320"4id  L290"4class="line" nam
  L290"4.291649>        2a href="+code=loca_audio class="sref">vidc_adev6na>, 1)a href="+code=audio class="sref">vidc6na>, 1) href="sound/oss/vidc.c#L330"4id  L271"4class="line" nam
  L291"4.291649>        2a href="+code=dma__audimixernsegass="sref">vidc_audimixernseg(2a href="+code=flagSOUND_MIXER_VOLUMlass="sref">AFMTSOUND_MIXER_VOLUMl(int,h(85 | 85 <= 1) 8)  href="sound/oss/vidc.c#L330"4id  L272"4class="line" nam
  L292"4.292649>e        2a hrn 2a  href="sound/oss/vidc.c#L330"4id  L274"4class="line" nam
  L294"4.294649>    href="sound/oss/vidc.c#L330"4id  L285"4class="line" nam
  L295"4.295249>2a href="+code=vidcrestfailclass="sref">vidcrestfailcl, 1) href="sound/oss/vidc.c#L261"4id  L266"4class="line" nam
  L296"4.296249>            ref="+code=dma_d/oss_free_bufass="sref">vidcd/oss_free_buf(2a href="+code=flaghw_confilass="sref">intrhw_confil)evidcbuf;e2a href="+code=vidcbufffailclass="sref">vidcbufffailcl, 1) href="sound/oss/vidc.c#L261"4id  L268"4class="line" nam
  L298"4.29824a>2sparef="+code=dma_memnfailclass="sref">vidcmemnfailcl, 1) href="sound/oss/vidc.c#L261"4id  L259"4class="line" nam
  L299"4.2992499        retuoutphref="+code=vidcfass="sref">hwcti, 2a;ehwcti, 2aa= 1) 2 href="+code=intrfass="sref">hwcti, 2a++ href="sound/oss/vidc.c#L261"5id  L300"5class="line" nam
  L300"5.301650>                    ref="+code=ratefree_pag3ass="sref">vidcfree_pag3(2a href="+code=flag" cfparass="sref">vidcbuffpar(inthref="+code=dev"fass="sref">hwcti, 2a]  href="sound/oss/vidc.c#L330"5id  L301"5class="line" nam
  L301"5.301650>        2a href="+code=dma_d/oss_unloadimixer class="sref">vidcd/oss_unloadimixer cl(2a href="+code=flag"_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmixern class="sref">vidcmixern cl, 1)  href="sound/oss/vidc.c#L330"5i2  L301"5class="line" nam
  L292"5.302250>    ref="+code=dma_mixernfailclass="sref">vidcmixernfailcl, 1) href="sound/oss/vidc.c#L261"5id  L303"5class="line" nam
  L303"5.303650>        2a href="+code=dma_d/oss_unloadio_setdclass="sref">vidcd/oss_unloadio_setdcl(2a href="+code=flag" class="sref">vidc6na>, 1)  href="sound/oss/vidc.c#L330"5i4  L303"5class="line" nam
  L294"5.304650>    ref="+code=flag"_openfailclass="sref">vidco_openfailcl, 1) href="sound/oss/vidc.c#L261"5i5  L303"5class="line" nam
  L295"5.305250>        return 0;e href="sound/oss/vidc.c#L330"5i6  L303"5class="line" nam
  L296"5.306650>}ee    ic int 2a href="+code=vidc__inilass="sref">vidc__inil 2a href="+code=vidcprobe_.c#Lass="sref">vidcprobe_.c#L(2a htt 2a href="+code=dma_oddress_infoass="sref">vidcoddress_info 2a hhref="+code=dmaphw_confilass="sref">intrhw_confil)e     href="sound/oss/vidc.c#L328"5id  L310"5class="line" nam
  L310"5.310651>        2a href="+code=locahw_confilass="sref">intrhw_confil)evidcrrq(2a            href="+code=audiHANDDMAS0ass="sref">vidcHANDDMAS0, 1) href="sound/oss/vidc.c#L330"5id  L311"5class="line" nam
  L311"5.311651>        2a href="+code=dma_hw_confilass="sref">intrhw_confil)evidcbuf;evidcuf__VIRTUAL_SOUND, 1) href="sound/oss/vidc.c#L330"5i2  L301"5class="line" nam
  L312"5.312651>        2a href="+code=dma_hw_confilass="sref">intrhw_confil)evidcbuf2)e        2a href="+code=dma_hw_confilass="sref">intrhw_confil)evidceard_subtypl)e            ref="+code=vidchw_confilass="sref">intrhw_confil)evidc  L3(int          hr class="string">"VIDC: er20t;2/spalu,e        return 0;e 1 href="sound/oss/vidc.c#L330"5i6  L303"5class="line" nam
  L316"5.316651>}ee    ic int  2a href="+code=vidc__exilass="sref">vidc__exil 2a href="+code=vidcunloadi.c#Lass="sref">vidcunloadi.c#L(2a htt 2a href="+code=dma_oddress_infoass="sref">vidcoddress_info 2a hhref="+code=dmaphw_confilass="sref">intrhw_confil)e     href="sound/oss/vidc.c#L328"5id  L320"5class="line" nam
  L320"5.320252>            2a href="+code=intrfass="sref">hwcti, 2a href="+code=coun" class="sref">vidc6na>, 1)2 href="+code=audi_audio class="sref">vidc_adev6na>, 1) href="sound/oss/vidc.c#L330"5id  L321"5class="line" nam
  L321"5.321652>e        2a href="+code=dma__audio class="sref">vidc_adev6na>, 1)a h-1 href="sound/oss/vidc.c#L330"5id  L323"5class="line" nam
  L323"5.323652>e            ref="+code=vidcfree_rrqass="sref">vidcfree_rrq(2a href="+code=flaghw_confilass="sref">intrhw_confil)evidcrrq(2a ,h; ~3;ref="+code=audistart" class="sref">dma_start6na> = 2a href="sound/oss/vidc.c#L330"5i5  L303"5class="line" nam
  L325"5.325252>        returef="+code=dmapd/oss_free_bufass="sref">vidcd/oss_free_buf(2a href="+code=flaghw_confilass="sref">intrhw_confil)evidcbuf;ee            2a href="+code=vidc" class="sref">vidc6na>, 1)a=a h= 0 a href="sound/oss/vidc.c#L260"5id  L308"5class="line" nam
  L328"5.328652>                2a href="+code=diffd/oss_unloadimixer class="sref">vidcd/oss_unloadimixer cl(2a href="+code=flag"_open" class="sref">audio_devs6na>[2a href="+code=dev"" class="sref">vidc6na>, 1)t;2a href="+code=dmapmixern class="sref">vidcmixern cl, 1)  href="sound/oss/vidc.c#L330"5id  L329"5class="line" nam
  L329"5.329652>                }evidcd/oss_unloadio_setdcl(2a href="+code=flag" class="sref">vidc6na>, 1)  href="sound/oss/vidc.c#L330"5id  L330"5class="line" nam
  L330"5.33065a>                    outphref="+code=vidcfass="sref">hwcti, 2a;ehwcti, 2aa= 1) 2 href="+code=intrfass="sref">hwcti, 2a++ href="sound/oss/vidc.c#L261"5id  L331"5class="line" nam
  L331"5.33125a>                            ref="+code=vidcfree_pag3ass="sref">vidcfree_pag3(2a href="+code=flag" cfparass="sref">vidcbuffpar(inthref="+code=dev"fass="sref">hwcti, 2a]  href="sound/oss/vidc.c#L330"5id  L332"5class="line" nam
  L332"5.332253>        2a h href="sound/oss/vidc.c#L287"5id  L333"5class="line" nam
  L333"5.333653>     href="sound/oss/vidc.c#L287"5i4  L303"5class="line" nam
  L334"5.334653>    href="sound/oss/vidc.c#L330"5id  L325"5class="line" nam
  L335"5.33565a>    ic shortt 2a href="+code=dma_oddress_infoass="sref">vidcoddress_info 2a href="+code=dmapcflass="sref">intrcfl, 1) href="sound/oss/vidc.c#L330"5id  L326"5class="line" nam
  L236"5.236253>e2spaic int 2a href="+code=vidc__inilass="sref">vidc__inil 2a href="+code=vidcinili.c#Lass="sref">vidcinili.c#L(2a h 2a  href="sound/oss/vidc.c#L261"5id  L308"5class="line" nam
  L238"5.238653>{evidcprobe_.c#L(2a h; ~3;ref="+code=audicflass="sref">intrcfl, 1)) == 0 href="sound/oss/vidc.c#L258"5id  L240"5class="line" nam
  L240"5.240654>                    rn 0;e -ref="+code=audiENODEVass="sref">intrENODEV, 1) href="sound/oss/vidc.c#L330"5id  L241"5class="line" nam
  L241"5.241654>e        2a href="+code=dma_ottach_.c#Lass="sref">vidcottach_.c#L(2a h; ~3;ref="+code=audicflass="sref">intrcfl, 1)) href="sound/oss/vidc.c#L330"5id  L333"5class="line" nam
  L243"5.243654>e            rn 0;e a href="sound/oss/vidc.c#L286"5id  L325"5class="line" nam
  L245"5.245654>     href="sound/oss/vidc.c#L287"5id  L326"5class="line" nam
  L246"5.246654>e2spaic int  2a href="+code=vidc__exilass="sref">vidc__exil 2a href="+code=vidccleanup_.c#Lass="sref">vidccleanup_.c#L(2a h 2a  href="sound/oss/vidc.c#L261"5id  L248"5class="line" nam
  L248"5.248654>{e        switref="+code=dma_unloadi.c#Lass="sref">vidcunloadi.c#L(2a h; ~3;ref="+code=audicflass="sref">intrcfl, 1)) href="sound/oss/vidc.c#L330"5id  L250"5class="line" nam
  L250"5.25065a>     href="sound/oss/vidc.c#L287"5id  L241"5class="line" nam
  L251"5.251655>e    ref="+code=dma_module_inilass="sref">vidcmodule_inil(2a href="+code=flaginili.c#Lass="sref">vidcinili.c#L(2a ) href="sound/oss/vidc.c#L330"5id  L333"5class="line" nam
  L253"5.253655>    ref="+code=dma_module_exilass="sref">vidcmodule_exil(2a href="+code=flagcleanup_.c#Lass="sref">vidccleanup_.c#L(2a ) href="sound/oss/vidc.c#L330"5id  L334"5class="line" nam
  L254"5.254655>    href="sound/oss/vidc.c#L330"5id  L255"5class="line" nam
  L255"5.255655>2a href="+code=vidcMODUcl_AUTHOlass="sref">KERNMODUcl_AUTHOl(2a hr class="string">"VIDCRussell K>&qt;2/spalu,e    ref="+code=vidcMODUcl_DESCRIPTIONass="sref">AFMTMODUcl_DESCRIPTION(2a hr class="string">"VIDC: er20 o_set irivclt;2/spalu,e2a href="+code=vidcMODUcl_LICENSlass="sref">AFMTMODUcl_LICENSl(2a hr class="string">"VIDCGPLt;2/spalu,e2spal/preal/div>


l/div>


The original LXR software by theLXR ent"unily(2a ,hthis experi"> *al vclsnon/by ref="+codmailto:lxr@" nux.no">lxr@" nux.no(2a .
l/div>

lxr." nux.no kindly host/s byRedpill L npro AS(2a ,hpro.c#er of L nux ennsult>&q and 2/ar inonl servicel since 1995.
l/div>