linux/sound/soc/codecs/wm_adsp.h
<<
>>
Prefs
   1/*
   2 * wm_adsp.h  --  Wolfson ADSP support
   3 *
   4 * Copyright 2012 Wolfson Microelectronics plc
   5 *
   6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#ifndef __WM_ADSP_H
  14#define __WM_ADSP_H
  15
  16#include <sound/soc.h>
  17#include <sound/soc-dapm.h>
  18#include <sound/compress_driver.h>
  19
  20#include "wmfw.h"
  21
  22struct wm_adsp_region {
  23        int type;
  24        unsigned int base;
  25};
  26
  27struct wm_adsp_alg_region {
  28        struct list_head list;
  29        unsigned int alg;
  30        int type;
  31        unsigned int base;
  32};
  33
  34struct wm_adsp_compr;
  35struct wm_adsp_compr_buf;
  36
  37struct wm_adsp {
  38        const char *part;
  39        int num;
  40        int type;
  41        struct device *dev;
  42        struct regmap *regmap;
  43        struct snd_soc_card *card;
  44
  45        int base;
  46        int sysclk_reg;
  47        int sysclk_mask;
  48        int sysclk_shift;
  49
  50        struct list_head alg_regions;
  51
  52        unsigned int fw_id;
  53        unsigned int fw_id_version;
  54
  55        const struct wm_adsp_region *mem;
  56        int num_mems;
  57
  58        int fw;
  59        int fw_ver;
  60        bool running;
  61
  62        struct list_head ctl_list;
  63
  64        struct work_struct boot_work;
  65
  66        struct wm_adsp_compr *compr;
  67        struct wm_adsp_compr_buf *buffer;
  68
  69        struct mutex pwr_lock;
  70
  71#ifdef CONFIG_DEBUG_FS
  72        struct dentry *debugfs_root;
  73        char *wmfw_file_name;
  74        char *bin_file_name;
  75#endif
  76
  77};
  78
  79#define WM_ADSP1(wname, num) \
  80        SND_SOC_DAPM_PGA_E(wname, SND_SOC_NOPM, num, 0, NULL, 0, \
  81                wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD)
  82
  83#define WM_ADSP2(wname, num, event_fn) \
  84{       .id = snd_soc_dapm_dai_link, .name = wname " Preloader", \
  85        .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \
  86        .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }, \
  87{       .id = snd_soc_dapm_out_drv, .name = wname, \
  88        .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \
  89        .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
  90
  91extern const struct snd_kcontrol_new wm_adsp_fw_controls[];
  92
  93int wm_adsp1_init(struct wm_adsp *dsp);
  94int wm_adsp2_init(struct wm_adsp *dsp);
  95int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec);
  96int wm_adsp2_codec_remove(struct wm_adsp *dsp, struct snd_soc_codec *codec);
  97int wm_adsp1_event(struct snd_soc_dapm_widget *w,
  98                   struct snd_kcontrol *kcontrol, int event);
  99int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
 100                         struct snd_kcontrol *kcontrol, int event,
 101                         unsigned int freq);
 102int wm_adsp2_event(struct snd_soc_dapm_widget *w,
 103                   struct snd_kcontrol *kcontrol, int event);
 104
 105extern int wm_adsp_compr_open(struct wm_adsp *dsp,
 106                              struct snd_compr_stream *stream);
 107extern int wm_adsp_compr_free(struct snd_compr_stream *stream);
 108extern int wm_adsp_compr_set_params(struct snd_compr_stream *stream,
 109                                    struct snd_compr_params *params);
 110extern int wm_adsp_compr_get_caps(struct snd_compr_stream *stream,
 111                                  struct snd_compr_caps *caps);
 112extern int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd);
 113extern int wm_adsp_compr_handle_irq(struct wm_adsp *dsp);
 114extern int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
 115                                 struct snd_compr_tstamp *tstamp);
 116extern int wm_adsp_compr_copy(struct snd_compr_stream *stream,
 117                              char __user *buf, size_t count);
 118
 119#endif
 120