本文整理汇总了C++中AD1889_WRITEW函数的典型用法代码示例。如果您正苦于以下问题:C++ AD1889_WRITEW函数的具体用法?C++ AD1889_WRITEW怎么用?C++ AD1889_WRITEW使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了AD1889_WRITEW函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ad1889_initcfg
static void ad1889_initcfg(ad1889_dev_t *dev)
{
u16 tmp;
/* make sure the interrupt bits are setup the way we want */
tmp = AD1889_READW(dev, AD_DMAWAVCTRL);
tmp &= ~0x00ff; /* flat dma, no sg, mask out the intr bits */
tmp |= 0x0004; /* intr on count, loop */
AD1889_WRITEW(dev, AD_DMAWAVCTRL, tmp);
/* unmute... */
tmp = AD1889_READW(dev, AD_DSWADA);
tmp &= ~0x8080;
AD1889_WRITEW(dev, AD_DSWADA, tmp);
}
示例2: ad1889_codec_write
/************************* AC97 interfaces ****************************** */
static void ad1889_codec_write(struct ac97_codec *ac97, u8 reg, u16 val)
{
ad1889_dev_t *dev = ac97->private_data;
//DBG("Writing 0x%x to 0x%lx\n", val, dev->regbase + 0x100 + reg);
AD1889_WRITEW(dev, 0x100 + reg, val);
}
示例3: ad1889_stop_wav
static void ad1889_stop_wav(ad1889_state_t *state)
{
unsigned long flags;
struct dmabuf *dmabuf = &state->dmabuf;
spin_lock_irqsave(&state->card->lock, flags);
if (dmabuf->enable & DAC_RUNNING) {
u16 tmp;
unsigned long cnt = dmabuf->dma_len;
tmp = AD1889_READW(ad1889_dev, AD_DSWSMC);
tmp &= ~0x0400; /* clear WAEN */
AD1889_WRITEW(ad1889_dev, AD_DSWSMC, tmp);
(void) AD1889_READW(ad1889_dev, AD_DSWSMC); /* flush posted PCI write */
pci_unmap_single(ad1889_dev->pci, dmabuf->dma_handle,
cnt, PCI_DMA_TODEVICE);
dmabuf->enable &= ~DAC_RUNNING;
/* update dma pointers */
dmabuf->rd_ptr += cnt;
dmabuf->rd_ptr &= (DMA_SIZE - 1);
dmabuf->dma_handle = 0;
dmabuf->dma_len = 0;
dmabuf->ready = 0;
wake_up(&dmabuf->wait);
}
spin_unlock_irqrestore(&state->card->lock, flags);
}
示例4: ad1889_aclink_reset
static int ad1889_aclink_reset(struct pci_dev * pcidev)
{
u16 stat;
int retry = 200;
ad1889_dev_t *dev = pci_get_drvdata(pcidev);
AD1889_WRITEW(dev, AD_DSCCS, 0x8000); /* turn on clock */
AD1889_READW(dev, AD_DSCCS);
WAIT_10MS();
stat = AD1889_READW(dev, AD_ACIC);
stat |= 0x0002; /* Reset Disable */
AD1889_WRITEW(dev, AD_ACIC, stat);
(void) AD1889_READW(dev, AD_ACIC); /* flush posted write */
udelay(10);
stat = AD1889_READW(dev, AD_ACIC);
stat |= 0x0001; /* Interface Enable */
AD1889_WRITEW(dev, AD_ACIC, stat);
do {
if (AD1889_READW(dev, AD_ACIC) & 0x8000) /* Ready */
break;
WAIT_10MS();
retry--;
} while (retry > 0);
if (!retry) {
printk(KERN_ERR "ad1889_aclink_reset: codec is not ready [0x%x]\n",
AD1889_READW(dev, AD_ACIC));
return -EBUSY;
}
/* TODO reset AC97 codec */
/* TODO set wave/adc pci ctrl status */
stat = AD1889_READW(dev, AD_ACIC);
stat |= 0x0004; /* Audio Stream Output Enable */
AD1889_WRITEW(dev, AD_ACIC, stat);
return 0;
}
示例5: ad1889_set_adc_fmt
static inline void ad1889_set_adc_fmt(ad1889_dev_t *dev, int fmt)
{
u16 tmp;
tmp = AD1889_READW(ad1889_dev, AD_DSRAMC);
if (fmt == AFMT_S16_LE) {
tmp |= 0x0100; /* set WA16 */
} else if (fmt == AFMT_U8) {
tmp &= ~0x0100; /* clear WA16 */
}
AD1889_WRITEW(ad1889_dev, AD_DSRAMC, tmp);
}
示例6: ad1889_start_wav
static void ad1889_start_wav(ad1889_state_t *state)
{
unsigned long flags;
struct dmabuf *dmabuf = &state->dmabuf;
int cnt;
u16 tmp;
spin_lock_irqsave(&state->card->lock, flags);
if (dmabuf->dma_len) /* DMA already in flight */
goto skip_dma;
/* setup dma */
cnt = dmabuf->wr_ptr - dmabuf->rd_ptr;
if (cnt == 0) /* done - don't need to do anything */
goto skip_dma;
/* If the wr_ptr has wrapped, only map to the end */
if (cnt < 0)
cnt = DMA_SIZE - dmabuf->rd_ptr;
dmabuf->dma_handle = pci_map_single(ad1889_dev->pci,
dmabuf->rawbuf + dmabuf->rd_ptr,
cnt, PCI_DMA_TODEVICE);
dmabuf->dma_len = cnt;
dmabuf->ready = 1;
DBG("Starting playback at 0x%p for %ld bytes\n", dmabuf->rawbuf +
dmabuf->rd_ptr, dmabuf->dma_len);
/* load up the current register set */
AD1889_WRITEL(ad1889_dev, AD_DMAWAVCC, cnt);
AD1889_WRITEL(ad1889_dev, AD_DMAWAVICC, cnt);
AD1889_WRITEL(ad1889_dev, AD_DMAWAVCA, dmabuf->dma_handle);
/* TODO: for now we load the base registers with the same thing */
AD1889_WRITEL(ad1889_dev, AD_DMAWAVBC, cnt);
AD1889_WRITEL(ad1889_dev, AD_DMAWAVIBC, cnt);
AD1889_WRITEL(ad1889_dev, AD_DMAWAVBA, dmabuf->dma_handle);
/* and we're off to the races... */
AD1889_WRITEL(ad1889_dev, AD_DMACHSS, 0x8);
tmp = AD1889_READW(ad1889_dev, AD_DSWSMC);
tmp |= 0x0400; /* set WAEN */
AD1889_WRITEW(ad1889_dev, AD_DSWSMC, tmp);
(void) AD1889_READW(ad1889_dev, AD_DSWSMC); /* flush posted PCI write */
dmabuf->enable |= DAC_RUNNING;
skip_dma:
spin_unlock_irqrestore(&state->card->lock, flags);
}
示例7: ad1889_open
static int ad1889_open(struct inode *inode, struct file *file)
{
/* check minor; only support /dev/dsp atm */
if (iminor(inode) != 3)
return -ENXIO;
file->private_data = ad1889_dev;
ad1889_set_wav_rate(ad1889_dev, 48000);
ad1889_set_wav_fmt(ad1889_dev, AFMT_S16_LE);
AD1889_WRITEW(ad1889_dev, AD_DSWADA, 0x0404); /* attenuation */
return nonseekable_open(inode, file);
}
示例8: ad1889_set_wav_rate
/************************* helper routines ***************************** */
static inline void ad1889_set_wav_rate(ad1889_dev_t *dev, int rate)
{
struct ac97_codec *ac97_codec = dev->ac97_codec;
DBG("Setting WAV rate to %d\n", rate);
dev->state[AD_WAV_STATE].dmabuf.rate = rate;
AD1889_WRITEW(dev, AD_DSWAS, rate);
/* Cycle the DAC to enable the new rate */
ac97_codec->codec_write(dev->ac97_codec, AC97_POWER_CONTROL, 0x0200);
WAIT_10MS();
ac97_codec->codec_write(dev->ac97_codec, AC97_POWER_CONTROL, 0);
}
示例9: ad1889_open
static int ad1889_open(struct inode *inode, struct file *file)
{
/* check minor; only support /dev/dsp atm */
if (MINOR(inode->i_rdev) != 3)
return -ENXIO;
file->private_data = ad1889_dev;
ad1889_set_wav_rate(ad1889_dev, 44100);
ad1889_set_wav_fmt(ad1889_dev, AFMT_S16_LE);
AD1889_WRITEW(ad1889_dev, AD_DSWADA, 0x0404); /* attenuation */
MOD_INC_USE_COUNT;
return 0;
}
示例10: ad1889_set_adc_fmt
static inline void ad1889_set_adc_fmt(ad1889_dev_t *dev, int fmt)
{
u16 tmp;
DBG("Setting ADC format to 0x%x\n", fmt);
tmp = AD1889_READW(ad1889_dev, AD_DSRAMC);
if (fmt & AFMT_S16_LE) {
tmp |= 0x0100; /* set WA16 */
} else if (fmt & AFMT_U8) {
tmp &= ~0x0100; /* clear WA16 */
}
AD1889_WRITEW(ad1889_dev, AD_DSRAMC, tmp);
}
示例11: ad1889_initcfg
static void ad1889_initcfg(ad1889_dev_t *dev)
{
u16 tmp16;
u32 tmp32;
/* make sure the interrupt bits are setup the way we want */
tmp32 = AD1889_READL(dev, AD_DMAWAVCTRL);
tmp32 &= ~0xff; /* flat dma, no sg, mask out the intr bits */
tmp32 |= 0x6; /* intr on count, loop */
AD1889_WRITEL(dev, AD_DMAWAVCTRL, tmp32);
/* unmute... */
tmp16 = AD1889_READW(dev, AD_DSWADA);
tmp16 &= ~0x8080;
AD1889_WRITEW(dev, AD_DSWADA, tmp16);
}
示例12: ad1889_startstop_adc
static void ad1889_startstop_adc(ad1889_state_t *state, int start)
{
u16 tmp;
unsigned long flags;
spin_lock_irqsave(&state->card->lock, flags);
tmp = AD1889_READW(ad1889_dev, AD_DSRAMC);
if (start) {
state->dmabuf.enable |= ADC_RUNNING;
tmp |= 0x0004; /* set ADEN */
} else {
state->dmabuf.enable &= ~ADC_RUNNING;
tmp &= ~0x0004; /* clear ADEN */
}
AD1889_WRITEW(ad1889_dev, AD_DSRAMC, tmp);
spin_unlock_irqrestore(&state->card->lock, flags);
}
示例13: ad1889_set_adc_rate
static inline void ad1889_set_adc_rate(ad1889_dev_t *dev, int rate)
{
dev->state[AD_ADC_STATE].dmabuf.rate = rate;
AD1889_WRITEW(dev, AD_DSRES, rate);
}
示例14: ad1889_set_wav_rate
/************************* helper routines ***************************** */
static inline void ad1889_set_wav_rate(ad1889_dev_t *dev, int rate)
{
dev->state[AD_WAV_STATE].dmabuf.rate = rate;
AD1889_WRITEW(dev, AD_DSWAS, rate);
}
示例15: ad1889_ioctl
static int ad1889_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{
int val = 0;
ad1889_dev_t *dev = (ad1889_dev_t *)file->private_data;
struct dmabuf *dmabuf;
audio_buf_info abinfo;
switch (cmd)
{
case OSS_GETVERSION:
return put_user(SOUND_VERSION, (int *)arg);
case SNDCTL_DSP_RESET:
break;
case SNDCTL_DSP_SYNC:
break;
case SNDCTL_DSP_SPEED:
/* set sampling rate */
if (get_user(val, (int *)arg))
return -EFAULT;
if (val > 5400 && val < 48000)
{
if (file->f_mode & FMODE_WRITE)
AD1889_WRITEW(ad1889_dev, AD_DSWAS, val);
if (file->f_mode & FMODE_READ)
AD1889_WRITEW(ad1889_dev, AD_DSRES, val);
}
return 0;
case SNDCTL_DSP_STEREO: /* undocumented? */
if (get_user(val, (int *)arg))
return -EFAULT;
if (file->f_mode & FMODE_READ) {
val = AD1889_READW(ad1889_dev, AD_DSWSMC);
if (val) {
val |= 0x0200; /* set WAST */
} else {
val &= ~0x0200; /* clear WAST */
}
AD1889_WRITEW(ad1889_dev, AD_DSWSMC, val);
}
if (file->f_mode & FMODE_WRITE) {
val = AD1889_READW(ad1889_dev, AD_DSRAMC);
if (val) {
val |= 0x0002; /* set ADST */
} else {
val &= ~0x0002; /* clear ADST */
}
AD1889_WRITEW(ad1889_dev, AD_DSRAMC, val);
}
return 0;
case SNDCTL_DSP_GETBLKSIZE:
return put_user(DMA_SIZE, (int *)arg);
case SNDCTL_DSP_GETFMTS:
return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
case SNDCTL_DSP_SETFMT:
if (get_user(val, (int *)arg))
return -EFAULT;
if (file->f_mode & FMODE_READ)
ad1889_set_adc_fmt(dev, val);
if (file->f_mode & FMODE_WRITE)
ad1889_set_wav_fmt(dev, val);
return put_user(val, (int *)arg);
case SNDCTL_DSP_CHANNELS:
break;
case SNDCTL_DSP_POST:
/* send all data to device */
break;
case SNDCTL_DSP_SUBDIVIDE:
break;
case SNDCTL_DSP_SETFRAGMENT:
/* not supported; uses fixed fragment sizes */
return put_user(DMA_SIZE, (int *)arg);
case SNDCTL_DSP_GETOSPACE:
case SNDCTL_DSP_GETISPACE:
/* space left in dma buffers */
if (cmd == SNDCTL_DSP_GETOSPACE)
dmabuf = &dev->state[AD_WAV_STATE].dmabuf;
else
dmabuf = &dev->state[AD_ADC_STATE].dmabuf;
abinfo.fragments = 1;
abinfo.fragstotal = 1;
abinfo.fragsize = DMA_SIZE;
abinfo.bytes = DMA_SIZE;
return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
//.........这里部分代码省略.........