ak4xxx-adda.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef __SOUND_AK4XXX_ADDA_H
  3. #define __SOUND_AK4XXX_ADDA_H
  4. /*
  5. * ALSA driver for AK4524 / AK4528 / AK4529 / AK4355 / AK4381
  6. * AD and DA converters
  7. *
  8. * Copyright (c) 2000 Jaroslav Kysela <[email protected]>
  9. */
  10. #ifndef AK4XXX_MAX_CHIPS
  11. #define AK4XXX_MAX_CHIPS 4
  12. #endif
  13. struct snd_akm4xxx;
  14. struct snd_ak4xxx_ops {
  15. void (*lock)(struct snd_akm4xxx *ak, int chip);
  16. void (*unlock)(struct snd_akm4xxx *ak, int chip);
  17. void (*write)(struct snd_akm4xxx *ak, int chip, unsigned char reg,
  18. unsigned char val);
  19. void (*set_rate_val)(struct snd_akm4xxx *ak, unsigned int rate);
  20. };
  21. #define AK4XXX_IMAGE_SIZE (AK4XXX_MAX_CHIPS * 16) /* 64 bytes */
  22. /* DAC label and channels */
  23. struct snd_akm4xxx_dac_channel {
  24. char *name; /* mixer volume name */
  25. unsigned int num_channels;
  26. char *switch_name; /* mixer switch*/
  27. };
  28. /* ADC labels and channels */
  29. struct snd_akm4xxx_adc_channel {
  30. char *name; /* capture gain volume label */
  31. char *switch_name; /* capture switch */
  32. unsigned int num_channels;
  33. char *selector_name; /* capture source select label */
  34. const char **input_names; /* capture source names (NULL terminated) */
  35. };
  36. struct snd_akm4xxx {
  37. struct snd_card *card;
  38. unsigned int num_adcs; /* AK4524 or AK4528 ADCs */
  39. unsigned int num_dacs; /* AK4524 or AK4528 DACs */
  40. unsigned char images[AK4XXX_IMAGE_SIZE]; /* saved register image */
  41. unsigned char volumes[AK4XXX_IMAGE_SIZE]; /* saved volume values */
  42. unsigned long private_value[AK4XXX_MAX_CHIPS]; /* helper for driver */
  43. void *private_data[AK4XXX_MAX_CHIPS]; /* helper for driver */
  44. /* template should fill the following fields */
  45. unsigned int idx_offset; /* control index offset */
  46. enum {
  47. SND_AK4524, SND_AK4528, SND_AK4529,
  48. SND_AK4355, SND_AK4358, SND_AK4381,
  49. SND_AK5365, SND_AK4620,
  50. } type;
  51. /* (array) information of combined codecs */
  52. const struct snd_akm4xxx_dac_channel *dac_info;
  53. const struct snd_akm4xxx_adc_channel *adc_info;
  54. struct snd_ak4xxx_ops ops;
  55. unsigned int num_chips;
  56. unsigned int total_regs;
  57. const char *name;
  58. };
  59. void snd_akm4xxx_write(struct snd_akm4xxx *ak, int chip, unsigned char reg,
  60. unsigned char val);
  61. void snd_akm4xxx_reset(struct snd_akm4xxx *ak, int state);
  62. void snd_akm4xxx_init(struct snd_akm4xxx *ak);
  63. int snd_akm4xxx_build_controls(struct snd_akm4xxx *ak);
  64. #define snd_akm4xxx_get(ak,chip,reg) \
  65. (ak)->images[(chip) * 16 + (reg)]
  66. #define snd_akm4xxx_set(ak,chip,reg,val) \
  67. ((ak)->images[(chip) * 16 + (reg)] = (val))
  68. #define snd_akm4xxx_get_vol(ak,chip,reg) \
  69. (ak)->volumes[(chip) * 16 + (reg)]
  70. #define snd_akm4xxx_set_vol(ak,chip,reg,val) \
  71. ((ak)->volumes[(chip) * 16 + (reg)] = (val))
  72. #endif /* __SOUND_AK4XXX_ADDA_H */