]>
Commit | Line | Data |
---|---|---|
1802d0be | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
09184118 JS |
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> | |
09184118 JS |
8 | */ |
9 | ||
10 | #ifndef __HDMI_CODEC_H__ | |
11 | #define __HDMI_CODEC_H__ | |
12 | ||
96203fb4 | 13 | #include <linux/of_graph.h> |
09184118 JS |
14 | #include <linux/hdmi.h> |
15 | #include <drm/drm_edid.h> | |
16 | #include <sound/asoundef.h> | |
96203fb4 | 17 | #include <sound/soc.h> |
09184118 JS |
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; | |
9e4d59ad TS |
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; | |
09184118 JS |
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 | ||
6fa5963c CYC |
50 | typedef void (*hdmi_codec_plugged_cb)(struct device *dev, |
51 | bool plugged); | |
52 | ||
efc9194b | 53 | struct hdmi_codec_pdata; |
09184118 JS |
54 | struct hdmi_codec_ops { |
55 | /* | |
56 | * Called when ASoC starts an audio stream setup. | |
57 | * Optional | |
58 | */ | |
efc9194b | 59 | int (*audio_startup)(struct device *dev, void *data); |
09184118 JS |
60 | |
61 | /* | |
62 | * Configures HDMI-encoder for audio stream. | |
63 | * Mandatory | |
64 | */ | |
efc9194b | 65 | int (*hw_params)(struct device *dev, void *data, |
09184118 JS |
66 | struct hdmi_codec_daifmt *fmt, |
67 | struct hdmi_codec_params *hparms); | |
68 | ||
69 | /* | |
70 | * Shuts down the audio stream. | |
71 | * Mandatory | |
72 | */ | |
efc9194b | 73 | void (*audio_shutdown)(struct device *dev, void *data); |
09184118 JS |
74 | |
75 | /* | |
76 | * Mute/unmute HDMI audio stream. | |
77 | * Optional | |
78 | */ | |
efc9194b | 79 | int (*digital_mute)(struct device *dev, void *data, bool enable); |
09184118 JS |
80 | |
81 | /* | |
82 | * Provides EDID-Like-Data from connected HDMI device. | |
83 | * Optional | |
84 | */ | |
efc9194b KM |
85 | int (*get_eld)(struct device *dev, void *data, |
86 | uint8_t *buf, size_t len); | |
96203fb4 KM |
87 | |
88 | /* | |
89 | * Getting DAI ID | |
90 | * Optional | |
91 | */ | |
92 | int (*get_dai_id)(struct snd_soc_component *comment, | |
93 | struct device_node *endpoint); | |
6fa5963c CYC |
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); | |
09184118 JS |
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; | |
efc9194b | 110 | void *data; |
09184118 JS |
111 | }; |
112 | ||
6fa5963c CYC |
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 | ||
09184118 JS |
119 | #define HDMI_CODEC_DRV_NAME "hdmi-audio-codec" |
120 | ||
121 | #endif /* __HDMI_CODEC_H__ */ |