root/include/sound/hdmi-codec.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * hdmi-codec.h - HDMI Codec driver API
   4  *
   5  * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
   6  *
   7  * Author: Jyri Sarha <jsarha@ti.com>
   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  * Protocol between ASoC cpu-dai and HDMI-encoder
  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  * HDMI audio parameters
  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          * Called when ASoC starts an audio stream setup.
  57          * Optional
  58          */
  59         int (*audio_startup)(struct device *dev, void *data);
  60 
  61         /*
  62          * Configures HDMI-encoder for audio stream.
  63          * Mandatory
  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          * Shuts down the audio stream.
  71          * Mandatory
  72          */
  73         void (*audio_shutdown)(struct device *dev, void *data);
  74 
  75         /*
  76          * Mute/unmute HDMI audio stream.
  77          * Optional
  78          */
  79         int (*digital_mute)(struct device *dev, void *data, bool enable);
  80 
  81         /*
  82          * Provides EDID-Like-Data from connected HDMI device.
  83          * Optional
  84          */
  85         int (*get_eld)(struct device *dev, void *data,
  86                        uint8_t *buf, size_t len);
  87 
  88         /*
  89          * Getting DAI ID
  90          * Optional
  91          */
  92         int (*get_dai_id)(struct snd_soc_component *comment,
  93                           struct device_node *endpoint);
  94 
  95         /*
  96          * Hook callback function to handle connector plug event.
  97          * Optional
  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 /* HDMI codec initalization data */
 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 /* __HDMI_CODEC_H__ */

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