ctamixer.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
  4. *
  5. * @File ctamixer.h
  6. *
  7. * @Brief
  8. * This file contains the definition of the Audio Mixer
  9. * resource management object.
  10. *
  11. * @Author Liu Chun
  12. * @Date May 21 2008
  13. */
  14. #ifndef CTAMIXER_H
  15. #define CTAMIXER_H
  16. #include "ctresource.h"
  17. #include <linux/spinlock.h>
  18. #include <sound/core.h>
  19. /* Define the descriptor of a summation node resource */
  20. struct sum {
  21. struct rsc rsc; /* Basic resource info */
  22. unsigned char idx[8];
  23. };
  24. /* Define sum resource request description info */
  25. struct sum_desc {
  26. unsigned int msr;
  27. };
  28. struct sum_mgr {
  29. struct rsc_mgr mgr; /* Basic resource manager info */
  30. struct snd_card *card; /* pointer to this card */
  31. spinlock_t mgr_lock;
  32. /* request one sum resource */
  33. int (*get_sum)(struct sum_mgr *mgr,
  34. const struct sum_desc *desc, struct sum **rsum);
  35. /* return one sum resource */
  36. int (*put_sum)(struct sum_mgr *mgr, struct sum *sum);
  37. };
  38. /* Constructor and destructor of daio resource manager */
  39. int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr);
  40. int sum_mgr_destroy(struct sum_mgr *sum_mgr);
  41. /* Define the descriptor of a amixer resource */
  42. struct amixer_rsc_ops;
  43. struct amixer {
  44. struct rsc rsc; /* Basic resource info */
  45. unsigned char idx[8];
  46. struct rsc *input; /* pointer to a resource acting as source */
  47. struct sum *sum; /* Put amixer output to this summation node */
  48. const struct amixer_rsc_ops *ops; /* AMixer specific operations */
  49. };
  50. struct amixer_rsc_ops {
  51. int (*set_input)(struct amixer *amixer, struct rsc *rsc);
  52. int (*set_scale)(struct amixer *amixer, unsigned int scale);
  53. int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv);
  54. int (*set_sum)(struct amixer *amixer, struct sum *sum);
  55. int (*commit_write)(struct amixer *amixer);
  56. /* Only for interleaved recording */
  57. int (*commit_raw_write)(struct amixer *amixer);
  58. int (*setup)(struct amixer *amixer, struct rsc *input,
  59. unsigned int scale, struct sum *sum);
  60. int (*get_scale)(struct amixer *amixer);
  61. };
  62. /* Define amixer resource request description info */
  63. struct amixer_desc {
  64. unsigned int msr;
  65. };
  66. struct amixer_mgr {
  67. struct rsc_mgr mgr; /* Basic resource manager info */
  68. struct snd_card *card; /* pointer to this card */
  69. spinlock_t mgr_lock;
  70. /* request one amixer resource */
  71. int (*get_amixer)(struct amixer_mgr *mgr,
  72. const struct amixer_desc *desc,
  73. struct amixer **ramixer);
  74. /* return one amixer resource */
  75. int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer);
  76. };
  77. /* Constructor and destructor of amixer resource manager */
  78. int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr);
  79. int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr);
  80. #endif /* CTAMIXER_H */