xonar_dg.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. /*
  2. * card driver for the Xonar DG
  3. *
  4. * Copyright (c) Clemens Ladisch <clemens@ladisch.de>
  5. *
  6. *
  7. * This driver is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License, version 2.
  9. *
  10. * This driver is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this driver; if not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /*
  19. * Xonar DG
  20. * --------
  21. *
  22. * CMI8788:
  23. *
  24. * SPI 0 -> CS4245
  25. *
  26. * GPIO 3 <- ?
  27. * GPIO 4 <- headphone detect
  28. * GPIO 5 -> route input jack to line-in (0) or mic-in (1)
  29. * GPIO 6 -> route input jack to line-in (0) or mic-in (1)
  30. * GPIO 7 -> enable rear headphone amp
  31. * GPIO 8 -> enable output to speakers
  32. *
  33. * CS4245:
  34. *
  35. * input 1 <- aux
  36. * input 2 <- front mic
  37. * input 4 <- line/mic
  38. * aux out -> front panel headphones
  39. */
  40. #include <linux/pci.h>
  41. #include <linux/delay.h>
  42. #include <sound/control.h>
  43. #include <sound/core.h>
  44. #include <sound/info.h>
  45. #include <sound/pcm.h>
  46. #include <sound/tlv.h>
  47. #include "oxygen.h"
  48. #include "xonar_dg.h"
  49. #include "cs4245.h"
  50. #define GPIO_MAGIC 0x0008
  51. #define GPIO_HP_DETECT 0x0010
  52. #define GPIO_INPUT_ROUTE 0x0060
  53. #define GPIO_HP_REAR 0x0080
  54. #define GPIO_OUTPUT_ENABLE 0x0100
  55. struct dg {
  56. unsigned int output_sel;
  57. s8 input_vol[4][2];
  58. unsigned int input_sel;
  59. u8 hp_vol_att;
  60. u8 cs4245_regs[0x11];
  61. };
  62. static void cs4245_write(struct oxygen *chip, unsigned int reg, u8 value)
  63. {
  64. struct dg *data = chip->model_data;
  65. oxygen_write_spi(chip, OXYGEN_SPI_TRIGGER |
  66. OXYGEN_SPI_DATA_LENGTH_3 |
  67. OXYGEN_SPI_CLOCK_1280 |
  68. (0 << OXYGEN_SPI_CODEC_SHIFT) |
  69. OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
  70. CS4245_SPI_ADDRESS |
  71. CS4245_SPI_WRITE |
  72. (reg << 8) | value);
  73. data->cs4245_regs[reg] = value;
  74. }
  75. static void cs4245_write_cached(struct oxygen *chip, unsigned int reg, u8 value)
  76. {
  77. struct dg *data = chip->model_data;
  78. if (value != data->cs4245_regs[reg])
  79. cs4245_write(chip, reg, value);
  80. }
  81. static void cs4245_registers_init(struct oxygen *chip)
  82. {
  83. struct dg *data = chip->model_data;
  84. cs4245_write(chip, CS4245_POWER_CTRL, CS4245_PDN);
  85. cs4245_write(chip, CS4245_DAC_CTRL_1,
  86. data->cs4245_regs[CS4245_DAC_CTRL_1]);
  87. cs4245_write(chip, CS4245_ADC_CTRL,
  88. data->cs4245_regs[CS4245_ADC_CTRL]);
  89. cs4245_write(chip, CS4245_SIGNAL_SEL,
  90. data->cs4245_regs[CS4245_SIGNAL_SEL]);
  91. cs4245_write(chip, CS4245_PGA_B_CTRL,
  92. data->cs4245_regs[CS4245_PGA_B_CTRL]);
  93. cs4245_write(chip, CS4245_PGA_A_CTRL,
  94. data->cs4245_regs[CS4245_PGA_A_CTRL]);
  95. cs4245_write(chip, CS4245_ANALOG_IN,
  96. data->cs4245_regs[CS4245_ANALOG_IN]);
  97. cs4245_write(chip, CS4245_DAC_A_CTRL,
  98. data->cs4245_regs[CS4245_DAC_A_CTRL]);
  99. cs4245_write(chip, CS4245_DAC_B_CTRL,
  100. data->cs4245_regs[CS4245_DAC_B_CTRL]);
  101. cs4245_write(chip, CS4245_DAC_CTRL_2,
  102. CS4245_DAC_SOFT | CS4245_DAC_ZERO | CS4245_INVERT_DAC);
  103. cs4245_write(chip, CS4245_INT_MASK, 0);
  104. cs4245_write(chip, CS4245_POWER_CTRL, 0);
  105. }
  106. static void cs4245_init(struct oxygen *chip)
  107. {
  108. struct dg *data = chip->model_data;
  109. data->cs4245_regs[CS4245_DAC_CTRL_1] =
  110. CS4245_DAC_FM_SINGLE | CS4245_DAC_DIF_LJUST;
  111. data->cs4245_regs[CS4245_ADC_CTRL] =
  112. CS4245_ADC_FM_SINGLE | CS4245_ADC_DIF_LJUST;
  113. data->cs4245_regs[CS4245_SIGNAL_SEL] =
  114. CS4245_A_OUT_SEL_HIZ | CS4245_ASYNCH;
  115. data->cs4245_regs[CS4245_PGA_B_CTRL] = 0;
  116. data->cs4245_regs[CS4245_PGA_A_CTRL] = 0;
  117. data->cs4245_regs[CS4245_ANALOG_IN] =
  118. CS4245_PGA_SOFT | CS4245_PGA_ZERO | CS4245_SEL_INPUT_4;
  119. data->cs4245_regs[CS4245_DAC_A_CTRL] = 0;
  120. data->cs4245_regs[CS4245_DAC_B_CTRL] = 0;
  121. cs4245_registers_init(chip);
  122. snd_component_add(chip->card, "CS4245");
  123. }
  124. static void dg_output_enable(struct oxygen *chip)
  125. {
  126. msleep(2500);
  127. oxygen_set_bits16(chip, OXYGEN_GPIO_DATA, GPIO_OUTPUT_ENABLE);
  128. }
  129. static void dg_init(struct oxygen *chip)
  130. {
  131. struct dg *data = chip->model_data;
  132. data->output_sel = 0;
  133. data->input_sel = 3;
  134. data->hp_vol_att = 2 * 16;
  135. cs4245_init(chip);
  136. oxygen_clear_bits16(chip, OXYGEN_GPIO_CONTROL,
  137. GPIO_MAGIC | GPIO_HP_DETECT);
  138. oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL,
  139. GPIO_INPUT_ROUTE | GPIO_HP_REAR | GPIO_OUTPUT_ENABLE);
  140. oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA,
  141. GPIO_INPUT_ROUTE | GPIO_HP_REAR);
  142. dg_output_enable(chip);
  143. }
  144. static void dg_cleanup(struct oxygen *chip)
  145. {
  146. oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_OUTPUT_ENABLE);
  147. }
  148. static void dg_suspend(struct oxygen *chip)
  149. {
  150. dg_cleanup(chip);
  151. }
  152. static void dg_resume(struct oxygen *chip)
  153. {
  154. cs4245_registers_init(chip);
  155. dg_output_enable(chip);
  156. }
  157. static void set_cs4245_dac_params(struct oxygen *chip,
  158. struct snd_pcm_hw_params *params)
  159. {
  160. struct dg *data = chip->model_data;
  161. u8 value;
  162. value = data->cs4245_regs[CS4245_DAC_CTRL_1] & ~CS4245_DAC_FM_MASK;
  163. if (params_rate(params) <= 50000)
  164. value |= CS4245_DAC_FM_SINGLE;
  165. else if (params_rate(params) <= 100000)
  166. value |= CS4245_DAC_FM_DOUBLE;
  167. else
  168. value |= CS4245_DAC_FM_QUAD;
  169. cs4245_write_cached(chip, CS4245_DAC_CTRL_1, value);
  170. }
  171. static void set_cs4245_adc_params(struct oxygen *chip,
  172. struct snd_pcm_hw_params *params)
  173. {
  174. struct dg *data = chip->model_data;
  175. u8 value;
  176. value = data->cs4245_regs[CS4245_ADC_CTRL] & ~CS4245_ADC_FM_MASK;
  177. if (params_rate(params) <= 50000)
  178. value |= CS4245_ADC_FM_SINGLE;
  179. else if (params_rate(params) <= 100000)
  180. value |= CS4245_ADC_FM_DOUBLE;
  181. else
  182. value |= CS4245_ADC_FM_QUAD;
  183. cs4245_write_cached(chip, CS4245_ADC_CTRL, value);
  184. }
  185. static int output_switch_info(struct snd_kcontrol *ctl,
  186. struct snd_ctl_elem_info *info)
  187. {
  188. static const char *const names[3] = {
  189. "Speakers", "Headphones", "FP Headphones"
  190. };
  191. return snd_ctl_enum_info(info, 1, 3, names);
  192. }
  193. static int output_switch_get(struct snd_kcontrol *ctl,
  194. struct snd_ctl_elem_value *value)
  195. {
  196. struct oxygen *chip = ctl->private_data;
  197. struct dg *data = chip->model_data;
  198. mutex_lock(&chip->mutex);
  199. value->value.enumerated.item[0] = data->output_sel;
  200. mutex_unlock(&chip->mutex);
  201. return 0;
  202. }
  203. static int output_switch_put(struct snd_kcontrol *ctl,
  204. struct snd_ctl_elem_value *value)
  205. {
  206. struct oxygen *chip = ctl->private_data;
  207. struct dg *data = chip->model_data;
  208. u8 reg;
  209. int changed;
  210. if (value->value.enumerated.item[0] > 2)
  211. return -EINVAL;
  212. mutex_lock(&chip->mutex);
  213. changed = value->value.enumerated.item[0] != data->output_sel;
  214. if (changed) {
  215. data->output_sel = value->value.enumerated.item[0];
  216. reg = data->cs4245_regs[CS4245_SIGNAL_SEL] &
  217. ~CS4245_A_OUT_SEL_MASK;
  218. reg |= data->output_sel == 2 ?
  219. CS4245_A_OUT_SEL_DAC : CS4245_A_OUT_SEL_HIZ;
  220. cs4245_write_cached(chip, CS4245_SIGNAL_SEL, reg);
  221. cs4245_write_cached(chip, CS4245_DAC_A_CTRL,
  222. data->output_sel ? data->hp_vol_att : 0);
  223. cs4245_write_cached(chip, CS4245_DAC_B_CTRL,
  224. data->output_sel ? data->hp_vol_att : 0);
  225. oxygen_write16_masked(chip, OXYGEN_GPIO_DATA,
  226. data->output_sel == 1 ? GPIO_HP_REAR : 0,
  227. GPIO_HP_REAR);
  228. }
  229. mutex_unlock(&chip->mutex);
  230. return changed;
  231. }
  232. static int hp_volume_offset_info(struct snd_kcontrol *ctl,
  233. struct snd_ctl_elem_info *info)
  234. {
  235. static const char *const names[3] = {
  236. "< 64 ohms", "64-150 ohms", "150-300 ohms"
  237. };
  238. return snd_ctl_enum_info(info, 1, 3, names);
  239. }
  240. static int hp_volume_offset_get(struct snd_kcontrol *ctl,
  241. struct snd_ctl_elem_value *value)
  242. {
  243. struct oxygen *chip = ctl->private_data;
  244. struct dg *data = chip->model_data;
  245. mutex_lock(&chip->mutex);
  246. if (data->hp_vol_att > 2 * 7)
  247. value->value.enumerated.item[0] = 0;
  248. else if (data->hp_vol_att > 0)
  249. value->value.enumerated.item[0] = 1;
  250. else
  251. value->value.enumerated.item[0] = 2;
  252. mutex_unlock(&chip->mutex);
  253. return 0;
  254. }
  255. static int hp_volume_offset_put(struct snd_kcontrol *ctl,
  256. struct snd_ctl_elem_value *value)
  257. {
  258. static const s8 atts[3] = { 2 * 16, 2 * 7, 0 };
  259. struct oxygen *chip = ctl->private_data;
  260. struct dg *data = chip->model_data;
  261. s8 att;
  262. int changed;
  263. if (value->value.enumerated.item[0] > 2)
  264. return -EINVAL;
  265. att = atts[value->value.enumerated.item[0]];
  266. mutex_lock(&chip->mutex);
  267. changed = att != data->hp_vol_att;
  268. if (changed) {
  269. data->hp_vol_att = att;
  270. if (data->output_sel) {
  271. cs4245_write_cached(chip, CS4245_DAC_A_CTRL, att);
  272. cs4245_write_cached(chip, CS4245_DAC_B_CTRL, att);
  273. }
  274. }
  275. mutex_unlock(&chip->mutex);
  276. return changed;
  277. }
  278. static int input_vol_info(struct snd_kcontrol *ctl,
  279. struct snd_ctl_elem_info *info)
  280. {
  281. info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
  282. info->count = 2;
  283. info->value.integer.min = 2 * -12;
  284. info->value.integer.max = 2 * 12;
  285. return 0;
  286. }
  287. static int input_vol_get(struct snd_kcontrol *ctl,
  288. struct snd_ctl_elem_value *value)
  289. {
  290. struct oxygen *chip = ctl->private_data;
  291. struct dg *data = chip->model_data;
  292. unsigned int idx = ctl->private_value;
  293. mutex_lock(&chip->mutex);
  294. value->value.integer.value[0] = data->input_vol[idx][0];
  295. value->value.integer.value[1] = data->input_vol[idx][1];
  296. mutex_unlock(&chip->mutex);
  297. return 0;
  298. }
  299. static int input_vol_put(struct snd_kcontrol *ctl,
  300. struct snd_ctl_elem_value *value)
  301. {
  302. struct oxygen *chip = ctl->private_data;
  303. struct dg *data = chip->model_data;
  304. unsigned int idx = ctl->private_value;
  305. int changed = 0;
  306. if (value->value.integer.value[0] < 2 * -12 ||
  307. value->value.integer.value[0] > 2 * 12 ||
  308. value->value.integer.value[1] < 2 * -12 ||
  309. value->value.integer.value[1] > 2 * 12)
  310. return -EINVAL;
  311. mutex_lock(&chip->mutex);
  312. changed = data->input_vol[idx][0] != value->value.integer.value[0] ||
  313. data->input_vol[idx][1] != value->value.integer.value[1];
  314. if (changed) {
  315. data->input_vol[idx][0] = value->value.integer.value[0];
  316. data->input_vol[idx][1] = value->value.integer.value[1];
  317. if (idx == data->input_sel) {
  318. cs4245_write_cached(chip, CS4245_PGA_A_CTRL,
  319. data->input_vol[idx][0]);
  320. cs4245_write_cached(chip, CS4245_PGA_B_CTRL,
  321. data->input_vol[idx][1]);
  322. }
  323. }
  324. mutex_unlock(&chip->mutex);
  325. return changed;
  326. }
  327. static DECLARE_TLV_DB_SCALE(cs4245_pga_db_scale, -1200, 50, 0);
  328. static int input_sel_info(struct snd_kcontrol *ctl,
  329. struct snd_ctl_elem_info *info)
  330. {
  331. static const char *const names[4] = {
  332. "Mic", "Aux", "Front Mic", "Line"
  333. };
  334. return snd_ctl_enum_info(info, 1, 4, names);
  335. }
  336. static int input_sel_get(struct snd_kcontrol *ctl,
  337. struct snd_ctl_elem_value *value)
  338. {
  339. struct oxygen *chip = ctl->private_data;
  340. struct dg *data = chip->model_data;
  341. mutex_lock(&chip->mutex);
  342. value->value.enumerated.item[0] = data->input_sel;
  343. mutex_unlock(&chip->mutex);
  344. return 0;
  345. }
  346. static int input_sel_put(struct snd_kcontrol *ctl,
  347. struct snd_ctl_elem_value *value)
  348. {
  349. static const u8 sel_values[4] = {
  350. CS4245_SEL_MIC,
  351. CS4245_SEL_INPUT_1,
  352. CS4245_SEL_INPUT_2,
  353. CS4245_SEL_INPUT_4
  354. };
  355. struct oxygen *chip = ctl->private_data;
  356. struct dg *data = chip->model_data;
  357. int changed;
  358. if (value->value.enumerated.item[0] > 3)
  359. return -EINVAL;
  360. mutex_lock(&chip->mutex);
  361. changed = value->value.enumerated.item[0] != data->input_sel;
  362. if (changed) {
  363. data->input_sel = value->value.enumerated.item[0];
  364. cs4245_write(chip, CS4245_ANALOG_IN,
  365. (data->cs4245_regs[CS4245_ANALOG_IN] &
  366. ~CS4245_SEL_MASK) |
  367. sel_values[data->input_sel]);
  368. cs4245_write_cached(chip, CS4245_PGA_A_CTRL,
  369. data->input_vol[data->input_sel][0]);
  370. cs4245_write_cached(chip, CS4245_PGA_B_CTRL,
  371. data->input_vol[data->input_sel][1]);
  372. oxygen_write16_masked(chip, OXYGEN_GPIO_DATA,
  373. data->input_sel ? 0 : GPIO_INPUT_ROUTE,
  374. GPIO_INPUT_ROUTE);
  375. }
  376. mutex_unlock(&chip->mutex);
  377. return changed;
  378. }
  379. static int hpf_info(struct snd_kcontrol *ctl, struct snd_ctl_elem_info *info)
  380. {
  381. static const char *const names[2] = { "Active", "Frozen" };
  382. return snd_ctl_enum_info(info, 1, 2, names);
  383. }
  384. static int hpf_get(struct snd_kcontrol *ctl, struct snd_ctl_elem_value *value)
  385. {
  386. struct oxygen *chip = ctl->private_data;
  387. struct dg *data = chip->model_data;
  388. value->value.enumerated.item[0] =
  389. !!(data->cs4245_regs[CS4245_ADC_CTRL] & CS4245_HPF_FREEZE);
  390. return 0;
  391. }
  392. static int hpf_put(struct snd_kcontrol *ctl, struct snd_ctl_elem_value *value)
  393. {
  394. struct oxygen *chip = ctl->private_data;
  395. struct dg *data = chip->model_data;
  396. u8 reg;
  397. int changed;
  398. mutex_lock(&chip->mutex);
  399. reg = data->cs4245_regs[CS4245_ADC_CTRL] & ~CS4245_HPF_FREEZE;
  400. if (value->value.enumerated.item[0])
  401. reg |= CS4245_HPF_FREEZE;
  402. changed = reg != data->cs4245_regs[CS4245_ADC_CTRL];
  403. if (changed)
  404. cs4245_write(chip, CS4245_ADC_CTRL, reg);
  405. mutex_unlock(&chip->mutex);
  406. return changed;
  407. }
  408. #define INPUT_VOLUME(xname, index) { \
  409. .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
  410. .name = xname, \
  411. .info = input_vol_info, \
  412. .get = input_vol_get, \
  413. .put = input_vol_put, \
  414. .tlv = { .p = cs4245_pga_db_scale }, \
  415. .private_value = index, \
  416. }
  417. static const struct snd_kcontrol_new dg_controls[] = {
  418. {
  419. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  420. .name = "Analog Output Playback Enum",
  421. .info = output_switch_info,
  422. .get = output_switch_get,
  423. .put = output_switch_put,
  424. },
  425. {
  426. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  427. .name = "Headphones Impedance Playback Enum",
  428. .info = hp_volume_offset_info,
  429. .get = hp_volume_offset_get,
  430. .put = hp_volume_offset_put,
  431. },
  432. INPUT_VOLUME("Mic Capture Volume", 0),
  433. INPUT_VOLUME("Aux Capture Volume", 1),
  434. INPUT_VOLUME("Front Mic Capture Volume", 2),
  435. INPUT_VOLUME("Line Capture Volume", 3),
  436. {
  437. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  438. .name = "Capture Source",
  439. .info = input_sel_info,
  440. .get = input_sel_get,
  441. .put = input_sel_put,
  442. },
  443. {
  444. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  445. .name = "ADC High-pass Filter Capture Enum",
  446. .info = hpf_info,
  447. .get = hpf_get,
  448. .put = hpf_put,
  449. },
  450. };
  451. static int dg_control_filter(struct snd_kcontrol_new *template)
  452. {
  453. if (!strncmp(template->name, "Master Playback ", 16))
  454. return 1;
  455. return 0;
  456. }
  457. static int dg_mixer_init(struct oxygen *chip)
  458. {
  459. unsigned int i;
  460. int err;
  461. for (i = 0; i < ARRAY_SIZE(dg_controls); ++i) {
  462. err = snd_ctl_add(chip->card,
  463. snd_ctl_new1(&dg_controls[i], chip));
  464. if (err < 0)
  465. return err;
  466. }
  467. return 0;
  468. }
  469. static void dump_cs4245_registers(struct oxygen *chip,
  470. struct snd_info_buffer *buffer)
  471. {
  472. struct dg *data = chip->model_data;
  473. unsigned int i;
  474. snd_iprintf(buffer, "\nCS4245:");
  475. for (i = 1; i <= 0x10; ++i)
  476. snd_iprintf(buffer, " %02x", data->cs4245_regs[i]);
  477. snd_iprintf(buffer, "\n");
  478. }
  479. struct oxygen_model model_xonar_dg = {
  480. .shortname = "Xonar DG",
  481. .longname = "C-Media Oxygen HD Audio",
  482. .chip = "CMI8786",
  483. .init = dg_init,
  484. .control_filter = dg_control_filter,
  485. .mixer_init = dg_mixer_init,
  486. .cleanup = dg_cleanup,
  487. .suspend = dg_suspend,
  488. .resume = dg_resume,
  489. .set_dac_params = set_cs4245_dac_params,
  490. .set_adc_params = set_cs4245_adc_params,
  491. .dump_registers = dump_cs4245_registers,
  492. .model_data_size = sizeof(struct dg),
  493. .device_config = PLAYBACK_0_TO_I2S |
  494. PLAYBACK_1_TO_SPDIF |
  495. CAPTURE_0_FROM_I2S_2,
  496. .dac_channels_pcm = 6,
  497. .dac_channels_mixer = 0,
  498. .function_flags = OXYGEN_FUNCTION_SPI,
  499. .dac_mclks = OXYGEN_MCLKS(256, 128, 128),
  500. .adc_mclks = OXYGEN_MCLKS(256, 128, 128),
  501. .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
  502. .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
  503. };