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 - https://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 <sound/asoundef.h>
|
---|
16 | #include <sound/soc.h>
|
---|
17 | #include <uapi/sound/asound.h>
|
---|
18 |
|
---|
19 | /*
|
---|
20 | * Protocol between ASoC cpu-dai and HDMI-encoder
|
---|
21 | */
|
---|
22 | struct hdmi_codec_daifmt {
|
---|
23 | enum {
|
---|
24 | HDMI_I2S,
|
---|
25 | HDMI_RIGHT_J,
|
---|
26 | HDMI_LEFT_J,
|
---|
27 | HDMI_DSP_A,
|
---|
28 | HDMI_DSP_B,
|
---|
29 | HDMI_AC97,
|
---|
30 | HDMI_SPDIF,
|
---|
31 | } fmt;
|
---|
32 | unsigned int bit_clk_inv:1;
|
---|
33 | unsigned int frame_clk_inv:1;
|
---|
34 | unsigned int bit_clk_provider:1;
|
---|
35 | unsigned int frame_clk_provider:1;
|
---|
36 | /* bit_fmt could be standard PCM format or
|
---|
37 | * IEC958 encoded format. ALSA IEC958 plugin will pass
|
---|
38 | * IEC958_SUBFRAME format to the underneath driver.
|
---|
39 | */
|
---|
40 | snd_pcm_format_t bit_fmt;
|
---|
41 | };
|
---|
42 |
|
---|
43 | /*
|
---|
44 | * HDMI audio parameters
|
---|
45 | */
|
---|
46 | struct hdmi_codec_params {
|
---|
47 | struct hdmi_audio_infoframe cea;
|
---|
48 | struct snd_aes_iec958 iec;
|
---|
49 | int sample_rate;
|
---|
50 | int sample_width;
|
---|
51 | int channels;
|
---|
52 | };
|
---|
53 |
|
---|
54 | typedef void (*hdmi_codec_plugged_cb)(struct device *dev,
|
---|
55 | bool plugged);
|
---|
56 |
|
---|
57 | struct hdmi_codec_pdata;
|
---|
58 | struct hdmi_codec_ops {
|
---|
59 | /*
|
---|
60 | * Called when ASoC starts an audio stream setup.
|
---|
61 | * Optional
|
---|
62 | */
|
---|
63 | int (*audio_startup)(struct device *dev, void *data);
|
---|
64 |
|
---|
65 | /*
|
---|
66 | * Configures HDMI-encoder for audio stream.
|
---|
67 | * Having either prepare or hw_params is mandatory.
|
---|
68 | */
|
---|
69 | int (*hw_params)(struct device *dev, void *data,
|
---|
70 | struct hdmi_codec_daifmt *fmt,
|
---|
71 | struct hdmi_codec_params *hparms);
|
---|
72 |
|
---|
73 | /*
|
---|
74 | * Configures HDMI-encoder for audio stream. Can be called
|
---|
75 | * multiple times for each setup.
|
---|
76 | *
|
---|
77 | * Having either prepare or hw_params is mandatory.
|
---|
78 | */
|
---|
79 | int (*prepare)(struct device *dev, void *data,
|
---|
80 | struct hdmi_codec_daifmt *fmt,
|
---|
81 | struct hdmi_codec_params *hparms);
|
---|
82 |
|
---|
83 | /*
|
---|
84 | * Shuts down the audio stream.
|
---|
85 | * Mandatory
|
---|
86 | */
|
---|
87 | void (*audio_shutdown)(struct device *dev, void *data);
|
---|
88 |
|
---|
89 | /*
|
---|
90 | * Mute/unmute HDMI audio stream.
|
---|
91 | * Optional
|
---|
92 | */
|
---|
93 | int (*mute_stream)(struct device *dev, void *data,
|
---|
94 | bool enable, int direction);
|
---|
95 |
|
---|
96 | /*
|
---|
97 | * Provides EDID-Like-Data from connected HDMI device.
|
---|
98 | * Optional
|
---|
99 | */
|
---|
100 | int (*get_eld)(struct device *dev, void *data,
|
---|
101 | uint8_t *buf, size_t len);
|
---|
102 |
|
---|
103 | /*
|
---|
104 | * Getting DAI ID
|
---|
105 | * Optional
|
---|
106 | */
|
---|
107 | int (*get_dai_id)(struct snd_soc_component *comment,
|
---|
108 | struct device_node *endpoint);
|
---|
109 |
|
---|
110 | /*
|
---|
111 | * Hook callback function to handle connector plug event.
|
---|
112 | * Optional
|
---|
113 | */
|
---|
114 | int (*hook_plugged_cb)(struct device *dev, void *data,
|
---|
115 | hdmi_codec_plugged_cb fn,
|
---|
116 | struct device *codec_dev);
|
---|
117 |
|
---|
118 | /* bit field */
|
---|
119 | unsigned int no_capture_mute:1;
|
---|
120 | };
|
---|
121 |
|
---|
122 | /* HDMI codec initalization data */
|
---|
123 | struct hdmi_codec_pdata {
|
---|
124 | const struct hdmi_codec_ops *ops;
|
---|
125 | uint i2s:1;
|
---|
126 | uint no_i2s_playback:1;
|
---|
127 | uint no_i2s_capture:1;
|
---|
128 | uint spdif:1;
|
---|
129 | uint no_spdif_playback:1;
|
---|
130 | uint no_spdif_capture:1;
|
---|
131 | int max_i2s_channels;
|
---|
132 | void *data;
|
---|
133 | };
|
---|
134 |
|
---|
135 | struct snd_soc_component;
|
---|
136 | struct snd_soc_jack;
|
---|
137 |
|
---|
138 | #define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
|
---|
139 |
|
---|
140 | #endif /* __HDMI_CODEC_H__ */
|
---|