1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #ifndef __HDMI_CODEC_H__
  11 #define __HDMI_CODEC_H__
  12 
  13 #include <linux/of_graph.h>
  14 #include <linux/hdmi.h>
  15 #include <drm/drm_edid.h>
  16 #include <sound/asoundef.h>
  17 #include <sound/soc.h>
  18 #include <uapi/sound/asound.h>
  19 
  20 
  21 
  22 
  23 struct hdmi_codec_daifmt {
  24         enum {
  25                 HDMI_I2S,
  26                 HDMI_RIGHT_J,
  27                 HDMI_LEFT_J,
  28                 HDMI_DSP_A,
  29                 HDMI_DSP_B,
  30                 HDMI_AC97,
  31                 HDMI_SPDIF,
  32         } fmt;
  33         unsigned int bit_clk_inv:1;
  34         unsigned int frame_clk_inv:1;
  35         unsigned int bit_clk_master:1;
  36         unsigned int frame_clk_master:1;
  37 };
  38 
  39 
  40 
  41 
  42 struct hdmi_codec_params {
  43         struct hdmi_audio_infoframe cea;
  44         struct snd_aes_iec958 iec;
  45         int sample_rate;
  46         int sample_width;
  47         int channels;
  48 };
  49 
  50 typedef void (*hdmi_codec_plugged_cb)(struct device *dev,
  51                                       bool plugged);
  52 
  53 struct hdmi_codec_pdata;
  54 struct hdmi_codec_ops {
  55         
  56 
  57 
  58 
  59         int (*audio_startup)(struct device *dev, void *data);
  60 
  61         
  62 
  63 
  64 
  65         int (*hw_params)(struct device *dev, void *data,
  66                          struct hdmi_codec_daifmt *fmt,
  67                          struct hdmi_codec_params *hparms);
  68 
  69         
  70 
  71 
  72 
  73         void (*audio_shutdown)(struct device *dev, void *data);
  74 
  75         
  76 
  77 
  78 
  79         int (*digital_mute)(struct device *dev, void *data, bool enable);
  80 
  81         
  82 
  83 
  84 
  85         int (*get_eld)(struct device *dev, void *data,
  86                        uint8_t *buf, size_t len);
  87 
  88         
  89 
  90 
  91 
  92         int (*get_dai_id)(struct snd_soc_component *comment,
  93                           struct device_node *endpoint);
  94 
  95         
  96 
  97 
  98 
  99         int (*hook_plugged_cb)(struct device *dev, void *data,
 100                                hdmi_codec_plugged_cb fn,
 101                                struct device *codec_dev);
 102 };
 103 
 104 
 105 struct hdmi_codec_pdata {
 106         const struct hdmi_codec_ops *ops;
 107         uint i2s:1;
 108         uint spdif:1;
 109         int max_i2s_channels;
 110         void *data;
 111 };
 112 
 113 struct snd_soc_component;
 114 struct snd_soc_jack;
 115 
 116 int hdmi_codec_set_jack_detect(struct snd_soc_component *component,
 117                                struct snd_soc_jack *jack);
 118 
 119 #define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
 120 
 121 #endif