diff options
Diffstat (limited to 'include/sound')
-rw-r--r-- | include/sound/asound.h | 185 | ||||
-rw-r--r-- | include/sound/control.h | 52 | ||||
-rw-r--r-- | include/sound/core.h | 22 | ||||
-rw-r--r-- | include/sound/hdsp.h | 2 | ||||
-rw-r--r-- | include/sound/hwdep.h | 38 | ||||
-rw-r--r-- | include/sound/jack.h | 5 | ||||
-rw-r--r-- | include/sound/pcm.h | 3 | ||||
-rw-r--r-- | include/sound/pxa2xx-lib.h | 15 | ||||
-rw-r--r-- | include/sound/rawmidi.h | 1 | ||||
-rw-r--r-- | include/sound/sfnt_info.h | 14 | ||||
-rw-r--r-- | include/sound/soc-dai.h | 2 | ||||
-rw-r--r-- | include/sound/soc-dapm.h | 31 | ||||
-rw-r--r-- | include/sound/soc.h | 69 | ||||
-rw-r--r-- | include/sound/version.h | 2 |
14 files changed, 296 insertions, 145 deletions
diff --git a/include/sound/asound.h b/include/sound/asound.h index 1c02ed1d7c4a..fad3e0c7b932 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h | |||
@@ -126,12 +126,10 @@ struct snd_hwdep_dsp_image { | |||
126 | unsigned long driver_data; /* W: driver-specific data */ | 126 | unsigned long driver_data; /* W: driver-specific data */ |
127 | }; | 127 | }; |
128 | 128 | ||
129 | enum { | 129 | #define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int) |
130 | SNDRV_HWDEP_IOCTL_PVERSION = _IOR ('H', 0x00, int), | 130 | #define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info) |
131 | SNDRV_HWDEP_IOCTL_INFO = _IOR ('H', 0x01, struct snd_hwdep_info), | 131 | #define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status) |
132 | SNDRV_HWDEP_IOCTL_DSP_STATUS = _IOR('H', 0x02, struct snd_hwdep_dsp_status), | 132 | #define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image) |
133 | SNDRV_HWDEP_IOCTL_DSP_LOAD = _IOW('H', 0x03, struct snd_hwdep_dsp_image) | ||
134 | }; | ||
135 | 133 | ||
136 | /***************************************************************************** | 134 | /***************************************************************************** |
137 | * * | 135 | * * |
@@ -451,40 +449,35 @@ enum { | |||
451 | SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, | 449 | SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, |
452 | }; | 450 | }; |
453 | 451 | ||
454 | enum { | 452 | #define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int) |
455 | SNDRV_PCM_IOCTL_PVERSION = _IOR('A', 0x00, int), | 453 | #define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info) |
456 | SNDRV_PCM_IOCTL_INFO = _IOR('A', 0x01, struct snd_pcm_info), | 454 | #define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int) |
457 | SNDRV_PCM_IOCTL_TSTAMP = _IOW('A', 0x02, int), | 455 | #define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int) |
458 | SNDRV_PCM_IOCTL_TTSTAMP = _IOW('A', 0x03, int), | 456 | #define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params) |
459 | SNDRV_PCM_IOCTL_HW_REFINE = _IOWR('A', 0x10, struct snd_pcm_hw_params), | 457 | #define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params) |
460 | SNDRV_PCM_IOCTL_HW_PARAMS = _IOWR('A', 0x11, struct snd_pcm_hw_params), | 458 | #define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12) |
461 | SNDRV_PCM_IOCTL_HW_FREE = _IO('A', 0x12), | 459 | #define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params) |
462 | SNDRV_PCM_IOCTL_SW_PARAMS = _IOWR('A', 0x13, struct snd_pcm_sw_params), | 460 | #define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status) |
463 | SNDRV_PCM_IOCTL_STATUS = _IOR('A', 0x20, struct snd_pcm_status), | 461 | #define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t) |
464 | SNDRV_PCM_IOCTL_DELAY = _IOR('A', 0x21, snd_pcm_sframes_t), | 462 | #define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22) |
465 | SNDRV_PCM_IOCTL_HWSYNC = _IO('A', 0x22), | 463 | #define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr) |
466 | SNDRV_PCM_IOCTL_SYNC_PTR = _IOWR('A', 0x23, struct snd_pcm_sync_ptr), | 464 | #define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info) |
467 | SNDRV_PCM_IOCTL_CHANNEL_INFO = _IOR('A', 0x32, struct snd_pcm_channel_info), | 465 | #define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40) |
468 | SNDRV_PCM_IOCTL_PREPARE = _IO('A', 0x40), | 466 | #define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41) |
469 | SNDRV_PCM_IOCTL_RESET = _IO('A', 0x41), | 467 | #define SNDRV_PCM_IOCTL_START _IO('A', 0x42) |
470 | SNDRV_PCM_IOCTL_START = _IO('A', 0x42), | 468 | #define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43) |
471 | SNDRV_PCM_IOCTL_DROP = _IO('A', 0x43), | 469 | #define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44) |
472 | SNDRV_PCM_IOCTL_DRAIN = _IO('A', 0x44), | 470 | #define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int) |
473 | SNDRV_PCM_IOCTL_PAUSE = _IOW('A', 0x45, int), | 471 | #define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t) |
474 | SNDRV_PCM_IOCTL_REWIND = _IOW('A', 0x46, snd_pcm_uframes_t), | 472 | #define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47) |
475 | SNDRV_PCM_IOCTL_RESUME = _IO('A', 0x47), | 473 | #define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48) |
476 | SNDRV_PCM_IOCTL_XRUN = _IO('A', 0x48), | 474 | #define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t) |
477 | SNDRV_PCM_IOCTL_FORWARD = _IOW('A', 0x49, snd_pcm_uframes_t), | 475 | #define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi) |
478 | SNDRV_PCM_IOCTL_WRITEI_FRAMES = _IOW('A', 0x50, struct snd_xferi), | 476 | #define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi) |
479 | SNDRV_PCM_IOCTL_READI_FRAMES = _IOR('A', 0x51, struct snd_xferi), | 477 | #define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern) |
480 | SNDRV_PCM_IOCTL_WRITEN_FRAMES = _IOW('A', 0x52, struct snd_xfern), | 478 | #define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern) |
481 | SNDRV_PCM_IOCTL_READN_FRAMES = _IOR('A', 0x53, struct snd_xfern), | 479 | #define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int) |
482 | SNDRV_PCM_IOCTL_LINK = _IOW('A', 0x60, int), | 480 | #define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61) |
483 | SNDRV_PCM_IOCTL_UNLINK = _IO('A', 0x61), | ||
484 | }; | ||
485 | |||
486 | /* Trick to make alsa-lib/acinclude.m4 happy */ | ||
487 | #define SNDRV_PCM_IOCTL_REWIND SNDRV_PCM_IOCTL_REWIND | ||
488 | 481 | ||
489 | /***************************************************************************** | 482 | /***************************************************************************** |
490 | * * | 483 | * * |
@@ -538,14 +531,12 @@ struct snd_rawmidi_status { | |||
538 | unsigned char reserved[16]; /* reserved for future use */ | 531 | unsigned char reserved[16]; /* reserved for future use */ |
539 | }; | 532 | }; |
540 | 533 | ||
541 | enum { | 534 | #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) |
542 | SNDRV_RAWMIDI_IOCTL_PVERSION = _IOR('W', 0x00, int), | 535 | #define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) |
543 | SNDRV_RAWMIDI_IOCTL_INFO = _IOR('W', 0x01, struct snd_rawmidi_info), | 536 | #define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) |
544 | SNDRV_RAWMIDI_IOCTL_PARAMS = _IOWR('W', 0x10, struct snd_rawmidi_params), | 537 | #define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) |
545 | SNDRV_RAWMIDI_IOCTL_STATUS = _IOWR('W', 0x20, struct snd_rawmidi_status), | 538 | #define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int) |
546 | SNDRV_RAWMIDI_IOCTL_DROP = _IOW('W', 0x30, int), | 539 | #define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int) |
547 | SNDRV_RAWMIDI_IOCTL_DRAIN = _IOW('W', 0x31, int), | ||
548 | }; | ||
549 | 540 | ||
550 | /* | 541 | /* |
551 | * Timer section - /dev/snd/timer | 542 | * Timer section - /dev/snd/timer |
@@ -654,23 +645,21 @@ struct snd_timer_status { | |||
654 | unsigned char reserved[64]; /* reserved */ | 645 | unsigned char reserved[64]; /* reserved */ |
655 | }; | 646 | }; |
656 | 647 | ||
657 | enum { | 648 | #define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int) |
658 | SNDRV_TIMER_IOCTL_PVERSION = _IOR('T', 0x00, int), | 649 | #define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id) |
659 | SNDRV_TIMER_IOCTL_NEXT_DEVICE = _IOWR('T', 0x01, struct snd_timer_id), | 650 | #define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int) |
660 | SNDRV_TIMER_IOCTL_TREAD = _IOW('T', 0x02, int), | 651 | #define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo) |
661 | SNDRV_TIMER_IOCTL_GINFO = _IOWR('T', 0x03, struct snd_timer_ginfo), | 652 | #define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams) |
662 | SNDRV_TIMER_IOCTL_GPARAMS = _IOW('T', 0x04, struct snd_timer_gparams), | 653 | #define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus) |
663 | SNDRV_TIMER_IOCTL_GSTATUS = _IOWR('T', 0x05, struct snd_timer_gstatus), | 654 | #define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select) |
664 | SNDRV_TIMER_IOCTL_SELECT = _IOW('T', 0x10, struct snd_timer_select), | 655 | #define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info) |
665 | SNDRV_TIMER_IOCTL_INFO = _IOR('T', 0x11, struct snd_timer_info), | 656 | #define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params) |
666 | SNDRV_TIMER_IOCTL_PARAMS = _IOW('T', 0x12, struct snd_timer_params), | 657 | #define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status) |
667 | SNDRV_TIMER_IOCTL_STATUS = _IOR('T', 0x14, struct snd_timer_status), | 658 | /* The following four ioctls are changed since 1.0.9 due to confliction */ |
668 | /* The following four ioctls are changed since 1.0.9 due to confliction */ | 659 | #define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0) |
669 | SNDRV_TIMER_IOCTL_START = _IO('T', 0xa0), | 660 | #define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1) |
670 | SNDRV_TIMER_IOCTL_STOP = _IO('T', 0xa1), | 661 | #define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2) |
671 | SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0xa2), | 662 | #define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3) |
672 | SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0xa3), | ||
673 | }; | ||
674 | 663 | ||
675 | struct snd_timer_read { | 664 | struct snd_timer_read { |
676 | unsigned int resolution; | 665 | unsigned int resolution; |
@@ -847,33 +836,31 @@ struct snd_ctl_tlv { | |||
847 | unsigned int tlv[0]; /* first TLV */ | 836 | unsigned int tlv[0]; /* first TLV */ |
848 | }; | 837 | }; |
849 | 838 | ||
850 | enum { | 839 | #define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int) |
851 | SNDRV_CTL_IOCTL_PVERSION = _IOR('U', 0x00, int), | 840 | #define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info) |
852 | SNDRV_CTL_IOCTL_CARD_INFO = _IOR('U', 0x01, struct snd_ctl_card_info), | 841 | #define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list) |
853 | SNDRV_CTL_IOCTL_ELEM_LIST = _IOWR('U', 0x10, struct snd_ctl_elem_list), | 842 | #define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info) |
854 | SNDRV_CTL_IOCTL_ELEM_INFO = _IOWR('U', 0x11, struct snd_ctl_elem_info), | 843 | #define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value) |
855 | SNDRV_CTL_IOCTL_ELEM_READ = _IOWR('U', 0x12, struct snd_ctl_elem_value), | 844 | #define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value) |
856 | SNDRV_CTL_IOCTL_ELEM_WRITE = _IOWR('U', 0x13, struct snd_ctl_elem_value), | 845 | #define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id) |
857 | SNDRV_CTL_IOCTL_ELEM_LOCK = _IOW('U', 0x14, struct snd_ctl_elem_id), | 846 | #define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id) |
858 | SNDRV_CTL_IOCTL_ELEM_UNLOCK = _IOW('U', 0x15, struct snd_ctl_elem_id), | 847 | #define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int) |
859 | SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS = _IOWR('U', 0x16, int), | 848 | #define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info) |
860 | SNDRV_CTL_IOCTL_ELEM_ADD = _IOWR('U', 0x17, struct snd_ctl_elem_info), | 849 | #define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info) |
861 | SNDRV_CTL_IOCTL_ELEM_REPLACE = _IOWR('U', 0x18, struct snd_ctl_elem_info), | 850 | #define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id) |
862 | SNDRV_CTL_IOCTL_ELEM_REMOVE = _IOWR('U', 0x19, struct snd_ctl_elem_id), | 851 | #define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv) |
863 | SNDRV_CTL_IOCTL_TLV_READ = _IOWR('U', 0x1a, struct snd_ctl_tlv), | 852 | #define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv) |
864 | SNDRV_CTL_IOCTL_TLV_WRITE = _IOWR('U', 0x1b, struct snd_ctl_tlv), | 853 | #define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv) |
865 | SNDRV_CTL_IOCTL_TLV_COMMAND = _IOWR('U', 0x1c, struct snd_ctl_tlv), | 854 | #define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int) |
866 | SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE = _IOWR('U', 0x20, int), | 855 | #define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info) |
867 | SNDRV_CTL_IOCTL_HWDEP_INFO = _IOR('U', 0x21, struct snd_hwdep_info), | 856 | #define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int) |
868 | SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE = _IOR('U', 0x30, int), | 857 | #define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info) |
869 | SNDRV_CTL_IOCTL_PCM_INFO = _IOWR('U', 0x31, struct snd_pcm_info), | 858 | #define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int) |
870 | SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE = _IOW('U', 0x32, int), | 859 | #define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int) |
871 | SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE = _IOWR('U', 0x40, int), | 860 | #define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info) |
872 | SNDRV_CTL_IOCTL_RAWMIDI_INFO = _IOWR('U', 0x41, struct snd_rawmidi_info), | 861 | #define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int) |
873 | SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE = _IOW('U', 0x42, int), | 862 | #define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int) |
874 | SNDRV_CTL_IOCTL_POWER = _IOWR('U', 0xd0, int), | 863 | #define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int) |
875 | SNDRV_CTL_IOCTL_POWER_STATE = _IOR('U', 0xd1, int), | ||
876 | }; | ||
877 | 864 | ||
878 | /* | 865 | /* |
879 | * Read interface. | 866 | * Read interface. |
@@ -919,18 +906,4 @@ struct snd_ctl_event { | |||
919 | #define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" | 906 | #define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" |
920 | #define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what | 907 | #define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what |
921 | 908 | ||
922 | /* | ||
923 | * | ||
924 | */ | ||
925 | |||
926 | struct snd_xferv { | ||
927 | const struct iovec *vector; | ||
928 | unsigned long count; | ||
929 | }; | ||
930 | |||
931 | enum { | ||
932 | SNDRV_IOCTL_READV = _IOW('K', 0x00, struct snd_xferv), | ||
933 | SNDRV_IOCTL_WRITEV = _IOW('K', 0x01, struct snd_xferv), | ||
934 | }; | ||
935 | |||
936 | #endif /* __SOUND_ASOUND_H */ | 909 | #endif /* __SOUND_ASOUND_H */ |
diff --git a/include/sound/control.h b/include/sound/control.h index 4721b4bba053..ef96f07aa03b 100644 --- a/include/sound/control.h +++ b/include/sound/control.h | |||
@@ -171,6 +171,54 @@ int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, | |||
171 | */ | 171 | */ |
172 | struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, | 172 | struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, |
173 | const unsigned int *tlv); | 173 | const unsigned int *tlv); |
174 | int snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave); | 174 | int _snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave, |
175 | 175 | unsigned int flags); | |
176 | /* optional flags for slave */ | ||
177 | #define SND_CTL_SLAVE_NEED_UPDATE (1 << 0) | ||
178 | |||
179 | /** | ||
180 | * snd_ctl_add_slave - Add a virtual slave control | ||
181 | * @master: vmaster element | ||
182 | * @slave: slave element to add | ||
183 | * | ||
184 | * Add a virtual slave control to the given master element created via | ||
185 | * snd_ctl_create_virtual_master() beforehand. | ||
186 | * Returns zero if successful or a negative error code. | ||
187 | * | ||
188 | * All slaves must be the same type (returning the same information | ||
189 | * via info callback). The fucntion doesn't check it, so it's your | ||
190 | * responsibility. | ||
191 | * | ||
192 | * Also, some additional limitations: | ||
193 | * at most two channels, | ||
194 | * logarithmic volume control (dB level) thus no linear volume, | ||
195 | * master can only attenuate the volume without gain | ||
196 | */ | ||
197 | static inline int | ||
198 | snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave) | ||
199 | { | ||
200 | return _snd_ctl_add_slave(master, slave, 0); | ||
201 | } | ||
202 | |||
203 | /** | ||
204 | * snd_ctl_add_slave_uncached - Add a virtual slave control | ||
205 | * @master: vmaster element | ||
206 | * @slave: slave element to add | ||
207 | * | ||
208 | * Add a virtual slave control to the given master. | ||
209 | * Unlike snd_ctl_add_slave(), the element added via this function | ||
210 | * is supposed to have volatile values, and get callback is called | ||
211 | * at each time quried from the master. | ||
212 | * | ||
213 | * When the control peeks the hardware values directly and the value | ||
214 | * can be changed by other means than the put callback of the element, | ||
215 | * this function should be used to keep the value always up-to-date. | ||
216 | */ | ||
217 | static inline int | ||
218 | snd_ctl_add_slave_uncached(struct snd_kcontrol *master, | ||
219 | struct snd_kcontrol *slave) | ||
220 | { | ||
221 | return _snd_ctl_add_slave(master, slave, SND_CTL_SLAVE_NEED_UPDATE); | ||
222 | } | ||
223 | |||
176 | #endif /* __SOUND_CONTROL_H */ | 224 | #endif /* __SOUND_CONTROL_H */ |
diff --git a/include/sound/core.h b/include/sound/core.h index 25420c3b5513..3dea79829acc 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -97,9 +97,9 @@ struct snd_device { | |||
97 | 97 | ||
98 | struct snd_monitor_file { | 98 | struct snd_monitor_file { |
99 | struct file *file; | 99 | struct file *file; |
100 | struct snd_monitor_file *next; | ||
101 | const struct file_operations *disconnected_f_op; | 100 | const struct file_operations *disconnected_f_op; |
102 | struct list_head shutdown_list; | 101 | struct list_head shutdown_list; /* still need to shutdown */ |
102 | struct list_head list; /* link of monitor files */ | ||
103 | }; | 103 | }; |
104 | 104 | ||
105 | /* main structure for soundcard */ | 105 | /* main structure for soundcard */ |
@@ -134,7 +134,7 @@ struct snd_card { | |||
134 | struct snd_info_entry *proc_id; /* the card id */ | 134 | struct snd_info_entry *proc_id; /* the card id */ |
135 | struct proc_dir_entry *proc_root_link; /* number link to real id */ | 135 | struct proc_dir_entry *proc_root_link; /* number link to real id */ |
136 | 136 | ||
137 | struct snd_monitor_file *files; /* all files associated to this card */ | 137 | struct list_head files_list; /* all files associated to this card */ |
138 | struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown | 138 | struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown |
139 | state */ | 139 | state */ |
140 | spinlock_t files_lock; /* lock the files for this card */ | 140 | spinlock_t files_lock; /* lock the files for this card */ |
@@ -458,21 +458,33 @@ static inline int __snd_bug_on(int cond) | |||
458 | struct snd_pci_quirk { | 458 | struct snd_pci_quirk { |
459 | unsigned short subvendor; /* PCI subvendor ID */ | 459 | unsigned short subvendor; /* PCI subvendor ID */ |
460 | unsigned short subdevice; /* PCI subdevice ID */ | 460 | unsigned short subdevice; /* PCI subdevice ID */ |
461 | unsigned short subdevice_mask; /* bitmask to match */ | ||
461 | int value; /* value */ | 462 | int value; /* value */ |
462 | #ifdef CONFIG_SND_DEBUG_VERBOSE | 463 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
463 | const char *name; /* name of the device (optional) */ | 464 | const char *name; /* name of the device (optional) */ |
464 | #endif | 465 | #endif |
465 | }; | 466 | }; |
466 | 467 | ||
467 | #define _SND_PCI_QUIRK_ID(vend,dev) \ | 468 | #define _SND_PCI_QUIRK_ID_MASK(vend, mask, dev) \ |
468 | .subvendor = (vend), .subdevice = (dev) | 469 | .subvendor = (vend), .subdevice = (dev), .subdevice_mask = (mask) |
470 | #define _SND_PCI_QUIRK_ID(vend, dev) \ | ||
471 | _SND_PCI_QUIRK_ID_MASK(vend, 0xffff, dev) | ||
469 | #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} | 472 | #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} |
470 | #ifdef CONFIG_SND_DEBUG_VERBOSE | 473 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
471 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ | 474 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ |
472 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} | 475 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} |
476 | #define SND_PCI_QUIRK_VENDOR(vend, xname, val) \ | ||
477 | {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val), .name = (xname)} | ||
478 | #define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \ | ||
479 | {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), \ | ||
480 | .value = (val), .name = (xname)} | ||
473 | #else | 481 | #else |
474 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ | 482 | #define SND_PCI_QUIRK(vend,dev,xname,val) \ |
475 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)} | 483 | {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)} |
484 | #define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \ | ||
485 | {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), .value = (val)} | ||
486 | #define SND_PCI_QUIRK_VENDOR(vend, xname, val) \ | ||
487 | {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val)} | ||
476 | #endif | 488 | #endif |
477 | 489 | ||
478 | const struct snd_pci_quirk * | 490 | const struct snd_pci_quirk * |
diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h index dec6b1dc37ea..d98a78dff2db 100644 --- a/include/sound/hdsp.h +++ b/include/sound/hdsp.h | |||
@@ -19,6 +19,8 @@ | |||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/types.h> | ||
23 | |||
22 | #define HDSP_MATRIX_MIXER_SIZE 2048 | 24 | #define HDSP_MATRIX_MIXER_SIZE 2048 |
23 | 25 | ||
24 | enum HDSP_IO_Type { | 26 | enum HDSP_IO_Type { |
diff --git a/include/sound/hwdep.h b/include/sound/hwdep.h index d9eea013c753..8c05e47a4090 100644 --- a/include/sound/hwdep.h +++ b/include/sound/hwdep.h | |||
@@ -27,18 +27,28 @@ | |||
27 | 27 | ||
28 | struct snd_hwdep; | 28 | struct snd_hwdep; |
29 | 29 | ||
30 | /* hwdep file ops; all ops can be NULL */ | ||
30 | struct snd_hwdep_ops { | 31 | struct snd_hwdep_ops { |
31 | long long (*llseek) (struct snd_hwdep *hw, struct file * file, long long offset, int orig); | 32 | long long (*llseek)(struct snd_hwdep *hw, struct file *file, |
32 | long (*read) (struct snd_hwdep *hw, char __user *buf, long count, loff_t *offset); | 33 | long long offset, int orig); |
33 | long (*write) (struct snd_hwdep *hw, const char __user *buf, long count, loff_t *offset); | 34 | long (*read)(struct snd_hwdep *hw, char __user *buf, |
34 | int (*open) (struct snd_hwdep * hw, struct file * file); | 35 | long count, loff_t *offset); |
35 | int (*release) (struct snd_hwdep *hw, struct file * file); | 36 | long (*write)(struct snd_hwdep *hw, const char __user *buf, |
36 | unsigned int (*poll) (struct snd_hwdep *hw, struct file * file, poll_table * wait); | 37 | long count, loff_t *offset); |
37 | int (*ioctl) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg); | 38 | int (*open)(struct snd_hwdep *hw, struct file * file); |
38 | int (*ioctl_compat) (struct snd_hwdep *hw, struct file * file, unsigned int cmd, unsigned long arg); | 39 | int (*release)(struct snd_hwdep *hw, struct file * file); |
39 | int (*mmap) (struct snd_hwdep *hw, struct file * file, struct vm_area_struct * vma); | 40 | unsigned int (*poll)(struct snd_hwdep *hw, struct file *file, |
40 | int (*dsp_status) (struct snd_hwdep *hw, struct snd_hwdep_dsp_status *status); | 41 | poll_table *wait); |
41 | int (*dsp_load) (struct snd_hwdep *hw, struct snd_hwdep_dsp_image *image); | 42 | int (*ioctl)(struct snd_hwdep *hw, struct file *file, |
43 | unsigned int cmd, unsigned long arg); | ||
44 | int (*ioctl_compat)(struct snd_hwdep *hw, struct file *file, | ||
45 | unsigned int cmd, unsigned long arg); | ||
46 | int (*mmap)(struct snd_hwdep *hw, struct file *file, | ||
47 | struct vm_area_struct *vma); | ||
48 | int (*dsp_status)(struct snd_hwdep *hw, | ||
49 | struct snd_hwdep_dsp_status *status); | ||
50 | int (*dsp_load)(struct snd_hwdep *hw, | ||
51 | struct snd_hwdep_dsp_image *image); | ||
42 | }; | 52 | }; |
43 | 53 | ||
44 | struct snd_hwdep { | 54 | struct snd_hwdep { |
@@ -61,9 +71,9 @@ struct snd_hwdep { | |||
61 | void (*private_free) (struct snd_hwdep *hwdep); | 71 | void (*private_free) (struct snd_hwdep *hwdep); |
62 | 72 | ||
63 | struct mutex open_mutex; | 73 | struct mutex open_mutex; |
64 | int used; | 74 | int used; /* reference counter */ |
65 | unsigned int dsp_loaded; | 75 | unsigned int dsp_loaded; /* bit fields of loaded dsp indices */ |
66 | unsigned int exclusive: 1; | 76 | unsigned int exclusive:1; /* exclusive access mode */ |
67 | }; | 77 | }; |
68 | 78 | ||
69 | extern int snd_hwdep_new(struct snd_card *card, char *id, int device, | 79 | extern int snd_hwdep_new(struct snd_card *card, char *id, int device, |
diff --git a/include/sound/jack.h b/include/sound/jack.h index 2e0315cdd0d6..6b013c6f6a04 100644 --- a/include/sound/jack.h +++ b/include/sound/jack.h | |||
@@ -30,6 +30,9 @@ struct input_dev; | |||
30 | /** | 30 | /** |
31 | * Jack types which can be reported. These values are used as a | 31 | * Jack types which can be reported. These values are used as a |
32 | * bitmask. | 32 | * bitmask. |
33 | * | ||
34 | * Note that this must be kept in sync with the lookup table in | ||
35 | * sound/core/jack.c. | ||
33 | */ | 36 | */ |
34 | enum snd_jack_types { | 37 | enum snd_jack_types { |
35 | SND_JACK_HEADPHONE = 0x0001, | 38 | SND_JACK_HEADPHONE = 0x0001, |
@@ -37,6 +40,8 @@ enum snd_jack_types { | |||
37 | SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE, | 40 | SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE, |
38 | SND_JACK_LINEOUT = 0x0004, | 41 | SND_JACK_LINEOUT = 0x0004, |
39 | SND_JACK_MECHANICAL = 0x0008, /* If detected separately */ | 42 | SND_JACK_MECHANICAL = 0x0008, /* If detected separately */ |
43 | SND_JACK_VIDEOOUT = 0x0010, | ||
44 | SND_JACK_AVOUT = SND_JACK_LINEOUT | SND_JACK_VIDEOOUT, | ||
40 | }; | 45 | }; |
41 | 46 | ||
42 | struct snd_jack { | 47 | struct snd_jack { |
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 40c5a6fa6bcd..8904b1900d7f 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -364,7 +364,6 @@ struct snd_pcm_substream { | |||
364 | /* -- timer section -- */ | 364 | /* -- timer section -- */ |
365 | struct snd_timer *timer; /* timer */ | 365 | struct snd_timer *timer; /* timer */ |
366 | unsigned timer_running: 1; /* time is running */ | 366 | unsigned timer_running: 1; /* time is running */ |
367 | spinlock_t timer_lock; | ||
368 | /* -- next substream -- */ | 367 | /* -- next substream -- */ |
369 | struct snd_pcm_substream *next; | 368 | struct snd_pcm_substream *next; |
370 | /* -- linked substreams -- */ | 369 | /* -- linked substreams -- */ |
@@ -451,7 +450,7 @@ struct snd_pcm_notify { | |||
451 | 450 | ||
452 | extern const struct file_operations snd_pcm_f_ops[2]; | 451 | extern const struct file_operations snd_pcm_f_ops[2]; |
453 | 452 | ||
454 | int snd_pcm_new(struct snd_card *card, char *id, int device, | 453 | int snd_pcm_new(struct snd_card *card, const char *id, int device, |
455 | int playback_count, int capture_count, | 454 | int playback_count, int capture_count, |
456 | struct snd_pcm **rpcm); | 455 | struct snd_pcm **rpcm); |
457 | int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count); | 456 | int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count); |
diff --git a/include/sound/pxa2xx-lib.h b/include/sound/pxa2xx-lib.h index 2fd3d251d9a5..2c894b600e5b 100644 --- a/include/sound/pxa2xx-lib.h +++ b/include/sound/pxa2xx-lib.h | |||
@@ -42,4 +42,19 @@ extern int pxa2xx_ac97_hw_resume(void); | |||
42 | extern int pxa2xx_ac97_hw_probe(struct platform_device *dev); | 42 | extern int pxa2xx_ac97_hw_probe(struct platform_device *dev); |
43 | extern void pxa2xx_ac97_hw_remove(struct platform_device *dev); | 43 | extern void pxa2xx_ac97_hw_remove(struct platform_device *dev); |
44 | 44 | ||
45 | /* AC97 platform_data */ | ||
46 | /** | ||
47 | * struct pxa2xx_ac97_platform_data - pxa ac97 platform data | ||
48 | * @reset_gpio: AC97 reset gpio (normally gpio113 or gpio95) | ||
49 | * a -1 value means no gpio will be used for reset | ||
50 | * | ||
51 | * Platform data should only be specified for pxa27x CPUs where a silicon bug | ||
52 | * prevents correct operation of the reset line. If not specified, the default | ||
53 | * behaviour is to consider gpio 113 as the AC97 reset line, which is the | ||
54 | * default on most boards. | ||
55 | */ | ||
56 | struct pxa2xx_ac97_platform_data { | ||
57 | int reset_gpio; | ||
58 | }; | ||
59 | |||
45 | #endif | 60 | #endif |
diff --git a/include/sound/rawmidi.h b/include/sound/rawmidi.h index b550a416d075..c23c26585700 100644 --- a/include/sound/rawmidi.h +++ b/include/sound/rawmidi.h | |||
@@ -42,7 +42,6 @@ | |||
42 | #define SNDRV_RAWMIDI_LFLG_INPUT (1<<1) | 42 | #define SNDRV_RAWMIDI_LFLG_INPUT (1<<1) |
43 | #define SNDRV_RAWMIDI_LFLG_OPEN (3<<0) | 43 | #define SNDRV_RAWMIDI_LFLG_OPEN (3<<0) |
44 | #define SNDRV_RAWMIDI_LFLG_APPEND (1<<2) | 44 | #define SNDRV_RAWMIDI_LFLG_APPEND (1<<2) |
45 | #define SNDRV_RAWMIDI_LFLG_NOOPENLOCK (1<<3) | ||
46 | 45 | ||
47 | struct snd_rawmidi; | 46 | struct snd_rawmidi; |
48 | struct snd_rawmidi_substream; | 47 | struct snd_rawmidi_substream; |
diff --git a/include/sound/sfnt_info.h b/include/sound/sfnt_info.h index 5d1ab9c4950f..1bce7fd1725f 100644 --- a/include/sound/sfnt_info.h +++ b/include/sound/sfnt_info.h | |||
@@ -202,13 +202,11 @@ struct snd_emux_misc_mode { | |||
202 | int value2; /* reserved */ | 202 | int value2; /* reserved */ |
203 | }; | 203 | }; |
204 | 204 | ||
205 | enum { | 205 | #define SNDRV_EMUX_IOCTL_VERSION _IOR('H', 0x80, unsigned int) |
206 | SNDRV_EMUX_IOCTL_VERSION = _IOR('H', 0x80, unsigned int), | 206 | #define SNDRV_EMUX_IOCTL_LOAD_PATCH _IOWR('H', 0x81, struct soundfont_patch_info) |
207 | SNDRV_EMUX_IOCTL_LOAD_PATCH = _IOWR('H', 0x81, struct soundfont_patch_info), | 207 | #define SNDRV_EMUX_IOCTL_RESET_SAMPLES _IO('H', 0x82) |
208 | SNDRV_EMUX_IOCTL_RESET_SAMPLES = _IO('H', 0x82), | 208 | #define SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES _IO('H', 0x83) |
209 | SNDRV_EMUX_IOCTL_REMOVE_LAST_SAMPLES = _IO('H', 0x83), | 209 | #define SNDRV_EMUX_IOCTL_MEM_AVAIL _IOW('H', 0x84, int) |
210 | SNDRV_EMUX_IOCTL_MEM_AVAIL = _IOW('H', 0x84, int), | 210 | #define SNDRV_EMUX_IOCTL_MISC_MODE _IOWR('H', 0x84, struct snd_emux_misc_mode) |
211 | SNDRV_EMUX_IOCTL_MISC_MODE = _IOWR('H', 0x84, struct snd_emux_misc_mode), | ||
212 | }; | ||
213 | 211 | ||
214 | #endif /* __SOUND_SFNT_INFO_H */ | 212 | #endif /* __SOUND_SFNT_INFO_H */ |
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h index 24247f763608..13676472ddfc 100644 --- a/include/sound/soc-dai.h +++ b/include/sound/soc-dai.h | |||
@@ -203,7 +203,7 @@ struct snd_soc_dai { | |||
203 | int (*resume)(struct snd_soc_dai *dai); | 203 | int (*resume)(struct snd_soc_dai *dai); |
204 | 204 | ||
205 | /* ops */ | 205 | /* ops */ |
206 | struct snd_soc_dai_ops ops; | 206 | struct snd_soc_dai_ops *ops; |
207 | 207 | ||
208 | /* DAI capabilities */ | 208 | /* DAI capabilities */ |
209 | struct snd_soc_pcm_stream capture; | 209 | struct snd_soc_pcm_stream capture; |
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h index dfa804958820..a7def6a9a030 100644 --- a/include/sound/soc-dapm.h +++ b/include/sound/soc-dapm.h | |||
@@ -76,6 +76,11 @@ | |||
76 | wcontrols, wncontrols)\ | 76 | wcontrols, wncontrols)\ |
77 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | 77 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ |
78 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} | 78 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols} |
79 | #define SND_SOC_DAPM_MIXER_NAMED_CTL(wname, wreg, wshift, winvert, \ | ||
80 | wcontrols, wncontrols)\ | ||
81 | { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, .reg = wreg, \ | ||
82 | .shift = wshift, .invert = winvert, .kcontrols = wcontrols, \ | ||
83 | .num_kcontrols = wncontrols} | ||
79 | #define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \ | 84 | #define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \ |
80 | { .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ | 85 | { .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ |
81 | .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0} | 86 | .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0} |
@@ -101,6 +106,11 @@ | |||
101 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | 106 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ |
102 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ | 107 | .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \ |
103 | .event = wevent, .event_flags = wflags} | 108 | .event = wevent, .event_flags = wflags} |
109 | #define SND_SOC_DAPM_MIXER_NAMED_CTL_E(wname, wreg, wshift, winvert, \ | ||
110 | wcontrols, wncontrols, wevent, wflags) \ | ||
111 | { .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \ | ||
112 | .invert = winvert, .kcontrols = wcontrols, \ | ||
113 | .num_kcontrols = wncontrols, .event = wevent, .event_flags = wflags} | ||
104 | #define SND_SOC_DAPM_MICBIAS_E(wname, wreg, wshift, winvert, wevent, wflags) \ | 114 | #define SND_SOC_DAPM_MICBIAS_E(wname, wreg, wshift, winvert, wevent, wflags) \ |
105 | { .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ | 115 | { .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \ |
106 | .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0, \ | 116 | .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0, \ |
@@ -182,6 +192,12 @@ | |||
182 | .get = snd_soc_dapm_get_value_enum_double, \ | 192 | .get = snd_soc_dapm_get_value_enum_double, \ |
183 | .put = snd_soc_dapm_put_value_enum_double, \ | 193 | .put = snd_soc_dapm_put_value_enum_double, \ |
184 | .private_value = (unsigned long)&xenum } | 194 | .private_value = (unsigned long)&xenum } |
195 | #define SOC_DAPM_PIN_SWITCH(xname) \ | ||
196 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname " Switch", \ | ||
197 | .info = snd_soc_dapm_info_pin_switch, \ | ||
198 | .get = snd_soc_dapm_get_pin_switch, \ | ||
199 | .put = snd_soc_dapm_put_pin_switch, \ | ||
200 | .private_value = (unsigned long)xname } | ||
185 | 201 | ||
186 | /* dapm stream operations */ | 202 | /* dapm stream operations */ |
187 | #define SND_SOC_DAPM_STREAM_NOP 0x0 | 203 | #define SND_SOC_DAPM_STREAM_NOP 0x0 |
@@ -228,6 +244,12 @@ int snd_soc_dapm_get_value_enum_double(struct snd_kcontrol *kcontrol, | |||
228 | struct snd_ctl_elem_value *ucontrol); | 244 | struct snd_ctl_elem_value *ucontrol); |
229 | int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, | 245 | int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, |
230 | struct snd_ctl_elem_value *ucontrol); | 246 | struct snd_ctl_elem_value *ucontrol); |
247 | int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol, | ||
248 | struct snd_ctl_elem_info *uinfo); | ||
249 | int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol, | ||
250 | struct snd_ctl_elem_value *uncontrol); | ||
251 | int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, | ||
252 | struct snd_ctl_elem_value *uncontrol); | ||
231 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, | 253 | int snd_soc_dapm_new_control(struct snd_soc_codec *codec, |
232 | const struct snd_soc_dapm_widget *widget); | 254 | const struct snd_soc_dapm_widget *widget); |
233 | int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, | 255 | int snd_soc_dapm_new_controls(struct snd_soc_codec *codec, |
@@ -250,10 +272,10 @@ int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev, | |||
250 | int snd_soc_dapm_sys_add(struct device *dev); | 272 | int snd_soc_dapm_sys_add(struct device *dev); |
251 | 273 | ||
252 | /* dapm audio pin control and status */ | 274 | /* dapm audio pin control and status */ |
253 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, char *pin); | 275 | int snd_soc_dapm_enable_pin(struct snd_soc_codec *codec, const char *pin); |
254 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, char *pin); | 276 | int snd_soc_dapm_disable_pin(struct snd_soc_codec *codec, const char *pin); |
255 | int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, char *pin); | 277 | int snd_soc_dapm_nc_pin(struct snd_soc_codec *codec, const char *pin); |
256 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin); | 278 | int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, const char *pin); |
257 | int snd_soc_dapm_sync(struct snd_soc_codec *codec); | 279 | int snd_soc_dapm_sync(struct snd_soc_codec *codec); |
258 | 280 | ||
259 | /* dapm widget types */ | 281 | /* dapm widget types */ |
@@ -263,6 +285,7 @@ enum snd_soc_dapm_type { | |||
263 | snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ | 285 | snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */ |
264 | snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */ | 286 | snd_soc_dapm_value_mux, /* selects 1 analog signal from many inputs */ |
265 | snd_soc_dapm_mixer, /* mixes several analog signals together */ | 287 | snd_soc_dapm_mixer, /* mixes several analog signals together */ |
288 | snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */ | ||
266 | snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ | 289 | snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */ |
267 | snd_soc_dapm_adc, /* analog to digital converter */ | 290 | snd_soc_dapm_adc, /* analog to digital converter */ |
268 | snd_soc_dapm_dac, /* digital to analog converter */ | 291 | snd_soc_dapm_dac, /* digital to analog converter */ |
diff --git a/include/sound/soc.h b/include/sound/soc.h index 24593ac3ea19..a40bc6f316fc 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h | |||
@@ -16,6 +16,8 @@ | |||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <linux/workqueue.h> | 18 | #include <linux/workqueue.h> |
19 | #include <linux/interrupt.h> | ||
20 | #include <linux/kernel.h> | ||
19 | #include <sound/core.h> | 21 | #include <sound/core.h> |
20 | #include <sound/pcm.h> | 22 | #include <sound/pcm.h> |
21 | #include <sound/control.h> | 23 | #include <sound/control.h> |
@@ -154,6 +156,8 @@ enum snd_soc_bias_level { | |||
154 | SND_SOC_BIAS_OFF, | 156 | SND_SOC_BIAS_OFF, |
155 | }; | 157 | }; |
156 | 158 | ||
159 | struct snd_jack; | ||
160 | struct snd_soc_card; | ||
157 | struct snd_soc_device; | 161 | struct snd_soc_device; |
158 | struct snd_soc_pcm_stream; | 162 | struct snd_soc_pcm_stream; |
159 | struct snd_soc_ops; | 163 | struct snd_soc_ops; |
@@ -164,6 +168,11 @@ struct snd_soc_platform; | |||
164 | struct snd_soc_codec; | 168 | struct snd_soc_codec; |
165 | struct soc_enum; | 169 | struct soc_enum; |
166 | struct snd_soc_ac97_ops; | 170 | struct snd_soc_ac97_ops; |
171 | struct snd_soc_jack; | ||
172 | struct snd_soc_jack_pin; | ||
173 | #ifdef CONFIG_GPIOLIB | ||
174 | struct snd_soc_jack_gpio; | ||
175 | #endif | ||
167 | 176 | ||
168 | typedef int (*hw_write_t)(void *,const char* ,int); | 177 | typedef int (*hw_write_t)(void *,const char* ,int); |
169 | typedef int (*hw_read_t)(void *,char* ,int); | 178 | typedef int (*hw_read_t)(void *,char* ,int); |
@@ -184,6 +193,19 @@ int snd_soc_init_card(struct snd_soc_device *socdev); | |||
184 | int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, | 193 | int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream, |
185 | const struct snd_pcm_hardware *hw); | 194 | const struct snd_pcm_hardware *hw); |
186 | 195 | ||
196 | /* Jack reporting */ | ||
197 | int snd_soc_jack_new(struct snd_soc_card *card, const char *id, int type, | ||
198 | struct snd_soc_jack *jack); | ||
199 | void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask); | ||
200 | int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count, | ||
201 | struct snd_soc_jack_pin *pins); | ||
202 | #ifdef CONFIG_GPIOLIB | ||
203 | int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, | ||
204 | struct snd_soc_jack_gpio *gpios); | ||
205 | void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, | ||
206 | struct snd_soc_jack_gpio *gpios); | ||
207 | #endif | ||
208 | |||
187 | /* codec IO */ | 209 | /* codec IO */ |
188 | #define snd_soc_read(codec, reg) codec->read(codec, reg) | 210 | #define snd_soc_read(codec, reg) codec->read(codec, reg) |
189 | #define snd_soc_write(codec, reg, value) codec->write(codec, reg, value) | 211 | #define snd_soc_write(codec, reg, value) codec->write(codec, reg, value) |
@@ -203,6 +225,8 @@ void snd_soc_free_ac97_codec(struct snd_soc_codec *codec); | |||
203 | */ | 225 | */ |
204 | struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, | 226 | struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, |
205 | void *data, char *long_name); | 227 | void *data, char *long_name); |
228 | int snd_soc_add_controls(struct snd_soc_codec *codec, | ||
229 | const struct snd_kcontrol_new *controls, int num_controls); | ||
206 | int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, | 230 | int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, |
207 | struct snd_ctl_elem_info *uinfo); | 231 | struct snd_ctl_elem_info *uinfo); |
208 | int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, | 232 | int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol, |
@@ -237,6 +261,48 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol, | |||
237 | int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, | 261 | int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, |
238 | struct snd_ctl_elem_value *ucontrol); | 262 | struct snd_ctl_elem_value *ucontrol); |
239 | 263 | ||
264 | /** | ||
265 | * struct snd_soc_jack_pin - Describes a pin to update based on jack detection | ||
266 | * | ||
267 | * @pin: name of the pin to update | ||
268 | * @mask: bits to check for in reported jack status | ||
269 | * @invert: if non-zero then pin is enabled when status is not reported | ||
270 | */ | ||
271 | struct snd_soc_jack_pin { | ||
272 | struct list_head list; | ||
273 | const char *pin; | ||
274 | int mask; | ||
275 | bool invert; | ||
276 | }; | ||
277 | |||
278 | /** | ||
279 | * struct snd_soc_jack_gpio - Describes a gpio pin for jack detection | ||
280 | * | ||
281 | * @gpio: gpio number | ||
282 | * @name: gpio name | ||
283 | * @report: value to report when jack detected | ||
284 | * @invert: report presence in low state | ||
285 | * @debouce_time: debouce time in ms | ||
286 | */ | ||
287 | #ifdef CONFIG_GPIOLIB | ||
288 | struct snd_soc_jack_gpio { | ||
289 | unsigned int gpio; | ||
290 | const char *name; | ||
291 | int report; | ||
292 | int invert; | ||
293 | int debounce_time; | ||
294 | struct snd_soc_jack *jack; | ||
295 | struct work_struct work; | ||
296 | }; | ||
297 | #endif | ||
298 | |||
299 | struct snd_soc_jack { | ||
300 | struct snd_jack *jack; | ||
301 | struct snd_soc_card *card; | ||
302 | struct list_head pins; | ||
303 | int status; | ||
304 | }; | ||
305 | |||
240 | /* SoC PCM stream information */ | 306 | /* SoC PCM stream information */ |
241 | struct snd_soc_pcm_stream { | 307 | struct snd_soc_pcm_stream { |
242 | char *stream_name; | 308 | char *stream_name; |
@@ -384,6 +450,8 @@ struct snd_soc_card { | |||
384 | 450 | ||
385 | struct snd_soc_device *socdev; | 451 | struct snd_soc_device *socdev; |
386 | 452 | ||
453 | struct snd_soc_codec *codec; | ||
454 | |||
387 | struct snd_soc_platform *platform; | 455 | struct snd_soc_platform *platform; |
388 | struct delayed_work delayed_work; | 456 | struct delayed_work delayed_work; |
389 | struct work_struct deferred_resume_work; | 457 | struct work_struct deferred_resume_work; |
@@ -393,7 +461,6 @@ struct snd_soc_card { | |||
393 | struct snd_soc_device { | 461 | struct snd_soc_device { |
394 | struct device *dev; | 462 | struct device *dev; |
395 | struct snd_soc_card *card; | 463 | struct snd_soc_card *card; |
396 | struct snd_soc_codec *codec; | ||
397 | struct snd_soc_codec_device *codec_dev; | 464 | struct snd_soc_codec_device *codec_dev; |
398 | void *codec_data; | 465 | void *codec_data; |
399 | }; | 466 | }; |
diff --git a/include/sound/version.h b/include/sound/version.h index 2b48237e23bf..a7e74e23ad2e 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
@@ -1,3 +1,3 @@ | |||
1 | /* include/version.h */ | 1 | /* include/version.h */ |
2 | #define CONFIG_SND_VERSION "1.0.18a" | 2 | #define CONFIG_SND_VERSION "1.0.19" |
3 | #define CONFIG_SND_DATE "" | 3 | #define CONFIG_SND_DATE "" |