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/hdmi.h>
  22#include <drm/drm_edid.h>
  23#include <sound/asoundef.h>
  24#include <uapi/sound/asound.h>
  25
  26/*
  27 * Protocol between ASoC cpu-dai and HDMI-encoder
  28 */
  29struct hdmi_codec_daifmt {
  30        enum {
  31                HDMI_I2S,
  32                HDMI_RIGHT_J,
  33                HDMI_LEFT_J,
  34                HDMI_DSP_A,
  35                HDMI_DSP_B,
  36                HDMI_AC97,
  37                HDMI_SPDIF,
  38        } fmt;
  39        unsigned int bit_clk_inv:1;
  40        unsigned int frame_clk_inv:1;
  41        unsigned int bit_clk_master:1;
  42        unsigned int frame_clk_master:1;
  43};
  44
  45/*
  46 * HDMI audio parameters
  47 */
  48struct hdmi_codec_params {
  49        struct hdmi_audio_infoframe cea;
  50        struct snd_aes_iec958 iec;
  51        int sample_rate;
  52        int sample_width;
  53        int channels;
  54};
  55
  56struct hdmi_codec_pdata;
  57struct hdmi_codec_ops {
  58        /*
  59         * Called when ASoC starts an audio stream setup.
  60         * Optional
  61         */
  62        int (*audio_startup)(struct device *dev, void *data);
  63
  64        /*
  65         * Configures HDMI-encoder for audio stream.
  66         * Mandatory
  67         */
  68        int (*hw_params)(struct device *dev, void *data,
  69                         struct hdmi_codec_daifmt *fmt,
  70                         struct hdmi_codec_params *hparms);
  71
  72        /*
  73         * Shuts down the audio stream.
  74         * Mandatory
  75         */
  76        void (*audio_shutdown)(struct device *dev, void *data);
  77
  78        /*
  79         * Mute/unmute HDMI audio stream.
  80         * Optional
  81         */
  82        int (*digital_mute)(struct device *dev, void *data, bool enable);
  83
  84        /*
  85         * Provides EDID-Like-Data from connected HDMI device.
  86         * Optional
  87         */
  88        int (*get_eld)(struct device *dev, void *data,
  89                       uint8_t *buf, size_t len);
  90};
  91
  92/* HDMI codec initalization data */
  93struct hdmi_codec_pdata {
  94        const struct hdmi_codec_ops *ops;
  95        uint i2s:1;
  96        uint spdif:1;
  97        int max_i2s_channels;
  98        void *data;
  99};
 100
 101#define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
 102
 103#endif /* __HDMI_CODEC_H__ */
 104