1655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng/****************************************************************************
2655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
3655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
4655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   This header was automatically generated from a Linux kernel header
5655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   of the same name, to make information necessary for userspace to
6655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   call into the kernel available to libc.  It contains only constants,
7655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   structures, and macros generated from the original header, and thus,
8655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   contains no copyrightable information.
9655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
10655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   To edit the content of this header, modify the corresponding
11655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   source file (e.g. under external/kernel-headers/original/) then
12655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   run bionic/libc/kernel/tools/update_all.py
13655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
14655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   Any manual change here will be lost the next time this script will
15655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   be run. You've been warned!
16655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
17655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
18655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************/
19655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#ifndef __SOUND_HDSPM_H
20655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define __SOUND_HDSPM_H
2105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#include <linux/types.h>
22655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define HDSPM_MAX_CHANNELS 64
2305d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisenum hdspm_io_type {
24d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MADI,
25d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  MADIface,
26d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  AIO,
2705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  AES32,
28d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  RayDAT
29655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
30655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_speed {
3105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  ss,
32d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  ds,
33d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  qs
34655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
35655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_peak_rms {
3605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u32 input_peaks[64];
3705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u32 playback_peaks[64];
3805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u32 output_peaks[64];
3905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u64 input_rms[64];
4005d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u64 playback_rms[64];
4105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u64 output_rms[64];
4205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u8 speed;
43d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int status2;
44655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
45d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS _IOR('H', 0x42, struct hdspm_peak_rms)
46655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_config {
4705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  unsigned char pref_sync_ref;
48d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char wordclock_sync_check;
49d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char madi_sync_check;
50d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int system_sample_rate;
5105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  unsigned int autosync_sample_rate;
52d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char system_clock_mode;
53d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char clock_source;
54d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned char autosync_ref;
5505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  unsigned char line_out;
56d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int passthru;
57d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int analog_out;
58655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
5905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define SNDRV_HDSPM_IOCTL_GET_CONFIG _IOR('H', 0x41, struct hdspm_config)
60655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_ltc_format {
61d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  format_invalid,
62d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  fps_24,
6305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  fps_25,
64d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  fps_2997,
65d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  fps_30
66655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
6705d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisenum hdspm_ltc_frame {
68d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  frame_invalid,
69d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  drop_frame,
70d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  full_frame
7105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris};
72655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_ltc_input_format {
73d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  ntsc,
74d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  pal,
7505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  no_video
76655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
77655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_ltc {
78d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int ltc;
7905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  enum hdspm_ltc_format format;
80d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  enum hdspm_ltc_frame frame;
81d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  enum hdspm_ltc_input_format input_format;
82655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
8305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
84655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_sync {
85d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  hdspm_sync_no_lock = 0,
86d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  hdspm_sync_lock = 1,
8705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  hdspm_sync_sync = 2
88655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
89655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_madi_input {
90d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  hdspm_input_optical = 0,
9105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  hdspm_input_coax = 1
92655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
93655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_madi_channel_format {
94d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  hdspm_format_ch_64 = 0,
9505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  hdspm_format_ch_56 = 1
96655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
97655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_madi_frame_format {
98d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  hdspm_frame_48 = 0,
9905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  hdspm_frame_96 = 1
100655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
101655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum hdspm_syncsource {
102d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  syncsource_wc = 0,
10305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  syncsource_madi = 1,
104d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  syncsource_tco = 2,
105d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  syncsource_sync = 3,
106d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  syncsource_none = 4
10705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris};
108655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_status {
10905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u8 card_type;
110d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  enum hdspm_syncsource autosync_source;
11105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u64 card_clock;
11205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u32 master_period;
113d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  union {
114d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao    struct {
11505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 sync_wc;
11605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 sync_madi;
11705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 sync_tco;
11805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 sync_in;
11905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 madi_input;
12005d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 channel_format;
12105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris      __u8 frame_format;
122d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao    } madi;
12305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  } card_specific;
124655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
125d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao#define SNDRV_HDSPM_IOCTL_GET_STATUS _IOR('H', 0x47, struct hdspm_status)
126655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define HDSPM_ADDON_TCO 1
12705d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisstruct hdspm_version {
12805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  __u8 card_type;
129d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  char cardname[20];
130d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int serial;
13105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris  unsigned short firmware_rev;
132d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int addons;
133655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
134655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
13505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
136655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_channelfader {
137d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int in[HDSPM_MIXER_CHANNELS];
138d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  unsigned int pb[HDSPM_MIXER_CHANNELS];
13905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris};
140655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct hdspm_mixer {
141d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
142655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
14305d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisstruct hdspm_mixer_ioctl {
144d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct hdspm_mixer * mixer;
145655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
146655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
14705d08e9716b5974d6ed08973f44930804890b902Christopher Ferristypedef struct hdspm_peak_rms hdspm_peak_rms_t;
148655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengtypedef struct hdspm_config_info hdspm_config_info_t;
149655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengtypedef struct hdspm_version hdspm_version_t;
150655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengtypedef struct hdspm_channelfader snd_hdspm_channelfader_t;
15105d08e9716b5974d6ed08973f44930804890b902Christopher Ferristypedef struct hdspm_mixer hdspm_mixer_t;
152655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#endif
153