root/drivers/staging/vc04_services/bcm2835-audio/bcm2835.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /* Copyright 2011 Broadcom Corporation.  All rights reserved. */
   3 
   4 #ifndef __SOUND_ARM_BCM2835_H
   5 #define __SOUND_ARM_BCM2835_H
   6 
   7 #include <linux/device.h>
   8 #include <linux/wait.h>
   9 #include <sound/core.h>
  10 #include <sound/pcm.h>
  11 #include <sound/pcm-indirect.h>
  12 #include "interface/vchi/vchi.h"
  13 
  14 #define MAX_SUBSTREAMS   (8)
  15 #define AVAIL_SUBSTREAMS_MASK  (0xff)
  16 
  17 enum {
  18         CTRL_VOL_MUTE,
  19         CTRL_VOL_UNMUTE
  20 };
  21 
  22 /* macros for alsa2chip and chip2alsa, instead of functions */
  23 
  24 // convert alsa to chip volume (defined as macro rather than function call)
  25 #define alsa2chip(vol) (uint)(-(((vol) << 8) / 100))
  26 
  27 // convert chip to alsa volume
  28 #define chip2alsa(vol) -(((vol) * 100) >> 8)
  29 
  30 #define CHIP_MIN_VOLUME         26214 /* minimum level aka mute */
  31 
  32 /* Some constants for values .. */
  33 enum snd_bcm2835_route {
  34         AUDIO_DEST_AUTO = 0,
  35         AUDIO_DEST_HEADPHONES = 1,
  36         AUDIO_DEST_HDMI = 2,
  37         AUDIO_DEST_MAX,
  38 };
  39 
  40 enum snd_bcm2835_ctrl {
  41         PCM_PLAYBACK_VOLUME,
  42         PCM_PLAYBACK_MUTE,
  43         PCM_PLAYBACK_DEVICE,
  44 };
  45 
  46 struct bcm2835_vchi_ctx {
  47         VCHI_INSTANCE_T vchi_instance;
  48 };
  49 
  50 /* definition of the chip-specific record */
  51 struct bcm2835_chip {
  52         struct snd_card *card;
  53         struct snd_pcm *pcm;
  54         struct snd_pcm *pcm_spdif;
  55         struct device *dev;
  56         struct bcm2835_alsa_stream *alsa_stream[MAX_SUBSTREAMS];
  57 
  58         int volume;
  59         int dest;
  60         int mute;
  61 
  62         unsigned int opened;
  63         unsigned int spdif_status;
  64         struct mutex audio_mutex;
  65 
  66         struct bcm2835_vchi_ctx *vchi_ctx;
  67 };
  68 
  69 struct bcm2835_alsa_stream {
  70         struct bcm2835_chip *chip;
  71         struct snd_pcm_substream *substream;
  72         struct snd_pcm_indirect pcm_indirect;
  73 
  74         int draining;
  75 
  76         atomic_t pos;
  77         unsigned int period_offset;
  78         unsigned int buffer_size;
  79         unsigned int period_size;
  80         ktime_t interpolate_start;
  81 
  82         struct bcm2835_audio_instance *instance;
  83         int idx;
  84 };
  85 
  86 int snd_bcm2835_new_ctl(struct bcm2835_chip *chip);
  87 int snd_bcm2835_new_pcm(struct bcm2835_chip *chip, const char *name,
  88                         int idx, enum snd_bcm2835_route route,
  89                         u32 numchannels, bool spdif);
  90 
  91 int snd_bcm2835_new_hdmi_ctl(struct bcm2835_chip *chip);
  92 int snd_bcm2835_new_headphones_ctl(struct bcm2835_chip *chip);
  93 
  94 int bcm2835_new_vchi_ctx(struct device *dev, struct bcm2835_vchi_ctx *vchi_ctx);
  95 void bcm2835_free_vchi_ctx(struct bcm2835_vchi_ctx *vchi_ctx);
  96 
  97 int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream);
  98 int bcm2835_audio_close(struct bcm2835_alsa_stream *alsa_stream);
  99 int bcm2835_audio_set_params(struct bcm2835_alsa_stream *alsa_stream,
 100                              unsigned int channels, unsigned int samplerate,
 101                              unsigned int bps);
 102 int bcm2835_audio_start(struct bcm2835_alsa_stream *alsa_stream);
 103 int bcm2835_audio_stop(struct bcm2835_alsa_stream *alsa_stream);
 104 int bcm2835_audio_drain(struct bcm2835_alsa_stream *alsa_stream);
 105 int bcm2835_audio_set_ctls(struct bcm2835_alsa_stream *alsa_stream);
 106 int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream,
 107                         unsigned int count,
 108                         void *src);
 109 void bcm2835_playback_fifo(struct bcm2835_alsa_stream *alsa_stream,
 110                            unsigned int size);
 111 unsigned int bcm2835_audio_retrieve_buffers(struct bcm2835_alsa_stream *alsa_stream);
 112 
 113 #endif /* __SOUND_ARM_BCM2835_H */

/* [<][>][^][v][top][bottom][index][help] */