~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/ppc/pmac.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /*
  3  * Driver for PowerMac onboard soundchips
  4  * Copyright (c) 2001 by Takashi Iwai <tiwai@suse.de>
  5  *   based on dmasound.c.
  6  */
  7 
  8 
  9 #ifndef __PMAC_H
 10 #define __PMAC_H
 11 
 12 #include <sound/control.h>
 13 #include <sound/pcm.h>
 14 #include "awacs.h"
 15 
 16 #include <linux/adb.h>
 17 #ifdef CONFIG_ADB_CUDA
 18 #include <linux/cuda.h>
 19 #endif
 20 #ifdef CONFIG_ADB_PMU
 21 #include <linux/pmu.h>
 22 #endif
 23 #include <linux/nvram.h>
 24 #include <linux/tty.h>
 25 #include <linux/vt_kern.h>
 26 #include <asm/dbdma.h>
 27 #include <asm/prom.h>
 28 #include <asm/machdep.h>
 29 #include <asm/pmac_feature.h>
 30 
 31 /* maximum number of fragments */
 32 #define PMAC_MAX_FRAGS          32
 33 
 34 
 35 #define PMAC_SUPPORT_AUTOMUTE
 36 
 37 /*
 38  * DBDMA space
 39  */
 40 struct pmac_dbdma {
 41         dma_addr_t dma_base;
 42         dma_addr_t addr;
 43         struct dbdma_cmd __iomem *cmds;
 44         void *space;
 45         int size;
 46 };
 47 
 48 /*
 49  * playback/capture stream
 50  */
 51 struct pmac_stream {
 52         int running;    /* boolean */
 53 
 54         int stream;     /* PLAYBACK/CAPTURE */
 55 
 56         int dma_size; /* in bytes */
 57         int period_size; /* in bytes */
 58         int buffer_size; /* in kbytes */
 59         int nperiods, cur_period;
 60 
 61         struct pmac_dbdma cmd;
 62         volatile struct dbdma_regs __iomem *dma;
 63 
 64         struct snd_pcm_substream *substream;
 65 
 66         unsigned int cur_freqs;         /* currently available frequencies */
 67         unsigned int cur_formats;       /* currently available formats */
 68 };
 69 
 70 
 71 /*
 72  */
 73 
 74 enum snd_pmac_model {
 75         PMAC_AWACS, PMAC_SCREAMER, PMAC_BURGUNDY, PMAC_DACA, PMAC_TUMBLER,
 76         PMAC_SNAPPER
 77 };
 78 
 79 struct snd_pmac {
 80         struct snd_card *card;
 81 
 82         /* h/w info */
 83         struct device_node *node;
 84         struct pci_dev *pdev;
 85         unsigned int revision;
 86         unsigned int manufacturer;
 87         unsigned int subframe;
 88         unsigned int device_id;
 89         enum snd_pmac_model model;
 90 
 91         unsigned int has_iic : 1;
 92         unsigned int is_pbook_3400 : 1;
 93         unsigned int is_pbook_G3 : 1;
 94         unsigned int is_k2 : 1;
 95 
 96         unsigned int can_byte_swap : 1;
 97         unsigned int can_duplex : 1;
 98         unsigned int can_capture : 1;
 99 
100         unsigned int auto_mute : 1;
101         unsigned int initialized : 1;
102         unsigned int feature_is_set : 1;
103 
104         unsigned int requested;
105         struct resource rsrc[3];
106 
107         int num_freqs;
108         const int *freq_table;
109         unsigned int freqs_ok;          /* bit flags */
110         unsigned int formats_ok;        /* pcm hwinfo */
111         int active;
112         int rate_index;
113         int format;                     /* current format */
114 
115         spinlock_t reg_lock;
116         volatile struct awacs_regs __iomem *awacs;
117         int awacs_reg[8]; /* register cache */
118         unsigned int hp_stat_mask;
119 
120         unsigned char __iomem *latch_base;
121         unsigned char __iomem *macio_base;
122 
123         struct pmac_stream playback;
124         struct pmac_stream capture;
125 
126         struct pmac_dbdma extra_dma;
127 
128         int irq, tx_irq, rx_irq;
129 
130         struct snd_pcm *pcm;
131 
132         struct pmac_beep *beep;
133 
134         unsigned int control_mask;      /* control mask */
135 
136         /* mixer stuffs */
137         void *mixer_data;
138         void (*mixer_free)(struct snd_pmac *);
139         struct snd_kcontrol *master_sw_ctl;
140         struct snd_kcontrol *speaker_sw_ctl;
141         struct snd_kcontrol *drc_sw_ctl;        /* only used for tumbler -ReneR */
142         struct snd_kcontrol *hp_detect_ctl;
143         struct snd_kcontrol *lineout_sw_ctl;
144 
145         /* lowlevel callbacks */
146         void (*set_format)(struct snd_pmac *chip);
147         void (*update_automute)(struct snd_pmac *chip, int do_notify);
148         int (*detect_headphone)(struct snd_pmac *chip);
149 #ifdef CONFIG_PM
150         void (*suspend)(struct snd_pmac *chip);
151         void (*resume)(struct snd_pmac *chip);
152 #endif
153 
154 };
155 
156 
157 /* exported functions */
158 int snd_pmac_new(struct snd_card *card, struct snd_pmac **chip_return);
159 int snd_pmac_pcm_new(struct snd_pmac *chip);
160 int snd_pmac_attach_beep(struct snd_pmac *chip);
161 void snd_pmac_detach_beep(struct snd_pmac *chip);
162 void snd_pmac_beep_stop(struct snd_pmac *chip);
163 unsigned int snd_pmac_rate_index(struct snd_pmac *chip, struct pmac_stream *rec, unsigned int rate);
164 
165 void snd_pmac_beep_dma_start(struct snd_pmac *chip, int bytes, unsigned long addr, int speed);
166 void snd_pmac_beep_dma_stop(struct snd_pmac *chip);
167 
168 #ifdef CONFIG_PM
169 void snd_pmac_suspend(struct snd_pmac *chip);
170 void snd_pmac_resume(struct snd_pmac *chip);
171 #endif
172 
173 /* initialize mixer */
174 int snd_pmac_awacs_init(struct snd_pmac *chip);
175 int snd_pmac_burgundy_init(struct snd_pmac *chip);
176 int snd_pmac_daca_init(struct snd_pmac *chip);
177 int snd_pmac_tumbler_init(struct snd_pmac *chip);
178 int snd_pmac_tumbler_post_init(void);
179 
180 /* i2c functions */
181 struct pmac_keywest {
182         int addr;
183         struct i2c_client *client;
184         int id;
185         int (*init_client)(struct pmac_keywest *i2c);
186         char *name;
187 };
188 
189 int snd_pmac_keywest_init(struct pmac_keywest *i2c);
190 void snd_pmac_keywest_cleanup(struct pmac_keywest *i2c);
191 
192 /* misc */
193 #define snd_pmac_boolean_stereo_info    snd_ctl_boolean_stereo_info
194 #define snd_pmac_boolean_mono_info      snd_ctl_boolean_mono_info
195 
196 int snd_pmac_add_automute(struct snd_pmac *chip);
197 
198 #endif /* __PMAC_H */
199 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php