156 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Hewlett-Packard Harmony audio driver3 * Copyright (C) 2004, Kyle McMartin <kyle@parisc-linux.org>4 */5 6#ifndef __HARMONY_H__7#define __HARMONY_H__8 9struct harmony_buffer {10 unsigned long addr;11 int buf;12 int count;13 int size;14 int coherent;15};16 17struct snd_harmony {18 int irq;19 20 unsigned long hpa; /* hard physical address */21 void __iomem *iobase; /* remapped io address */22 23 struct parisc_device *dev;24 25 struct {26 u32 gain;27 u32 rate;28 u32 format;29 u32 stereo;30 int playing;31 int capturing;32 } st;33 34 struct snd_dma_device dma; /* playback/capture */35 struct harmony_buffer pbuf;36 struct harmony_buffer cbuf;37 38 struct snd_dma_buffer gdma; /* graveyard */39 struct snd_dma_buffer sdma; /* silence */40 41 struct {42 unsigned long play_intr;43 unsigned long rec_intr;44 unsigned long graveyard_intr;45 unsigned long silence_intr;46 } stats;47 48 struct snd_pcm *pcm;49 struct snd_card *card;50 struct snd_pcm_substream *psubs;51 struct snd_pcm_substream *csubs;52 struct snd_info_entry *proc;53 54 spinlock_t lock;55 spinlock_t mixer_lock;56};57 58#define MAX_PCM_DEVICES 159#define MAX_PCM_SUBSTREAMS 460#define MAX_MIDI_DEVICES 061 62#define HARMONY_SIZE 6463 64#define BUF_SIZE PAGE_SIZE65#define MAX_BUFS 1666#define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE)67 68#define PLAYBACK_BUFS MAX_BUFS69#define RECORD_BUFS MAX_BUFS70#define GRAVEYARD_BUFS 171#define GRAVEYARD_BUFSZ (GRAVEYARD_BUFS*BUF_SIZE)72#define SILENCE_BUFS 173#define SILENCE_BUFSZ (SILENCE_BUFS*BUF_SIZE)74 75#define HARMONY_ID 0x00076#define HARMONY_RESET 0x00477#define HARMONY_CNTL 0x00878#define HARMONY_GAINCTL 0x00c79#define HARMONY_PNXTADD 0x01080#define HARMONY_PCURADD 0x01481#define HARMONY_RNXTADD 0x01882#define HARMONY_RCURADD 0x01c83#define HARMONY_DSTATUS 0x02084#define HARMONY_OV 0x02485#define HARMONY_PIO 0x02886#define HARMONY_DIAG 0x03c87 88#define HARMONY_CNTL_C 0x8000000089#define HARMONY_CNTL_ST 0x0000002090#define HARMONY_CNTL_44100 0x00000015 /* HARMONY_SR_44KHZ */91#define HARMONY_CNTL_8000 0x00000008 /* HARMONY_SR_8KHZ */92 93#define HARMONY_DSTATUS_ID 0x00000000 /* interrupts off */94#define HARMONY_DSTATUS_PN 0x00000200 /* playback fill */95#define HARMONY_DSTATUS_RN 0x00000002 /* record fill */96#define HARMONY_DSTATUS_IE 0x80000000 /* interrupts on */97 98#define HARMONY_DF_16BIT_LINEAR 0x0000000099#define HARMONY_DF_8BIT_ULAW 0x00000001100#define HARMONY_DF_8BIT_ALAW 0x00000002101 102#define HARMONY_SS_MONO 0x00000000103#define HARMONY_SS_STEREO 0x00000001104 105#define HARMONY_GAIN_SILENCE 0x01F00FFF106#define HARMONY_GAIN_DEFAULT 0x01F00FFF107 108#define HARMONY_GAIN_HE_SHIFT 27 /* headphones enabled */109#define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT)110#define HARMONY_GAIN_LE_SHIFT 26 /* line-out enabled */111#define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT)112#define HARMONY_GAIN_SE_SHIFT 25 /* internal-speaker enabled */113#define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT)114#define HARMONY_GAIN_IS_SHIFT 24 /* input select - 0 for line, 1 for mic */115#define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT)116 117/* monitor attenuation */118#define HARMONY_GAIN_MA 0x0f119#define HARMONY_GAIN_MA_SHIFT 20120#define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT)121 122/* input gain */123#define HARMONY_GAIN_IN 0x0f124#define HARMONY_GAIN_LI_SHIFT 16125#define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT)126#define HARMONY_GAIN_RI_SHIFT 12127#define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT)128 129/* output gain (master volume) */130#define HARMONY_GAIN_OUT 0x3f131#define HARMONY_GAIN_LO_SHIFT 6132#define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT)133#define HARMONY_GAIN_RO_SHIFT 0134#define HARMONY_GAIN_RO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT)135 136#define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT)137#define HARMONY_MAX_IN (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT)138#define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT)139 140#define HARMONY_SR_8KHZ 0x08141#define HARMONY_SR_16KHZ 0x09142#define HARMONY_SR_27KHZ 0x0A143#define HARMONY_SR_32KHZ 0x0B144#define HARMONY_SR_48KHZ 0x0E145#define HARMONY_SR_9KHZ 0x0F146#define HARMONY_SR_5KHZ 0x10147#define HARMONY_SR_11KHZ 0x11148#define HARMONY_SR_18KHZ 0x12149#define HARMONY_SR_22KHZ 0x13150#define HARMONY_SR_37KHZ 0x14151#define HARMONY_SR_44KHZ 0x15152#define HARMONY_SR_33KHZ 0x16153#define HARMONY_SR_6KHZ 0x17154 155#endif /* __HARMONY_H__ */156