linux/include/sound/hdmi-codec.h
<<
>>
Prefs
   1/*
   2 * hdmi-codec.h - HDMI Codec driver API
   3 *
   4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
   5 *
   6 * Author: Jyri Sarha <jsarha@ti.com>
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License
  10 * version 2 as published by the Free Software Foundation.
  11 *
  12 * This program is distributed in the hope that it will be useful, but
  13 * WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15 * General Public License for more details.
  16 */
  17
  18#ifndef __HDMI_CODEC_H__
  19#define __HDMI_CODEC_H__
  20
  21#include <linux/of_graph.h>
  22#include <linux/hdmi.h>
  23#include <drm/drm_edid.h>
  24#include <sound/asoundef.h>
  25#include <sound/soc.h>
  26#include <uapi/sound/asound.h>
  27
  28/*
  29 * Protocol between ASoC cpu-dai and HDMI-encoder
  30 */
  31struct hdmi_codec_daifmt {
  32        enum {
  33                HDMI_I2S,
  34                HDMI_RIGHT_J,
  35                HDMI_LEFT_J,
  36                HDMI_DSP_A,
  37                HDMI_DSP_B,
  38                HDMI_AC97,
  39                HDMI_SPDIF,
  40        } fmt;
  41        unsigned int bit_clk_inv:1;
  42        unsigned int frame_clk_inv:1;
  43        unsigned int bit_clk_master:1;
  44        unsigned int frame_clk_master:1;
  45};
  46
  47/*
  48 * HDMI audio parameters
  49 */
  50struct hdmi_codec_params {
  51        struct hdmi_audio_infoframe cea;
  52        struct snd_aes_iec958 iec;
  53        int sample_rate;
  54        int sample_width;
  55        int channels;
  56};
  57
  58struct hdmi_codec_pdata;
  59struct hdmi_codec_ops {
  60        /*
  61         * Called when ASoC starts an audio stream setup.
  62         * Optional
  63         */
  64        int (*audio_startup)(struct device *dev, void *data);
  65
  66        /*
  67         * Configures HDMI-encoder for audio stream.
  68         * Mandatory
  69         */
  70        int (*hw_params)(struct device *dev, void *data,
  71                         struct hdmi_codec_daifmt *fmt,
  72                         struct hdmi_codec_params *hparms);
  73
  74        /*
  75         * Shuts down the audio stream.
  76         * Mandatory
  77         */
  78        void (*audio_shutdown)(struct device *dev, void *data);
  79
  80        /*
  81         * Mute/unmute HDMI audio stream.
  82         * Optional
  83         */
  84        int (*digital_mute)(struct device *dev, void *data, bool enable);
  85
  86        /*
  87         * Provides EDID-Like-Data from connected HDMI device.
  88         * Optional
  89         */
  90        int (*get_eld)(struct device *dev, void *data,
  91                       uint8_t *buf, size_t len);
  92
  93        /*
  94         * Getting DAI ID
  95         * Optional
  96         */
  97        int (*get_dai_id)(struct snd_soc_component *comment,
  98                          struct device_node *endpoint);
  99};
 100
 101/* HDMI codec initalization data */
 102struct hdmi_codec_pdata {
 103        const struct hdmi_codec_ops *ops;
 104        uint i2s:1;
 105        uint spdif:1;
 106        int max_i2s_channels;
 107        void *data;
 108};
 109
 110#define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
 111
 112#endif /* __HDMI_CODEC_H__ */
 113