1 /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6 #include <alsa/asoundlib.h>
7 #include <errno.h>
8 #include <limits.h>
9 #include <stdio.h>
10 #include <sys/param.h>
11 #include <sys/select.h>
12 #include <sys/socket.h>
13 #include <sys/time.h>
14 #include <syslog.h>
15 #include <time.h>
16
17 #include "audio_thread.h"
18 #include "cras_alsa_helpers.h"
19 #include "cras_alsa_io.h"
20 #include "cras_alsa_jack.h"
21 #include "cras_alsa_mixer.h"
22 #include "cras_alsa_ucm.h"
23 #include "cras_audio_area.h"
24 #include "cras_config.h"
25 #include "cras_utf8.h"
26 #include "cras_iodev.h"
27 #include "cras_iodev_list.h"
28 #include "cras_messages.h"
29 #include "cras_ramp.h"
30 #include "cras_rclient.h"
31 #include "cras_shm.h"
32 #include "cras_system_state.h"
33 #include "cras_types.h"
34 #include "cras_util.h"
35 #include "cras_volume_curve.h"
36 #include "sfh.h"
37 #include "softvol_curve.h"
38 #include "utlist.h"
39
40 #define MAX_ALSA_DEV_NAME_LENGTH 9 /* Alsa names "hw:XX,YY" + 1 for null. */
41 #define HOTWORD_DEV "Wake on Voice"
42 #define DEFAULT "(default)"
43 #define HDMI "HDMI"
44 #define INTERNAL_MICROPHONE "Internal Mic"
45 #define INTERNAL_SPEAKER "Speaker"
46 #define KEYBOARD_MIC "Keyboard Mic"
47 #define USB "USB"
48
49 /*
50 * For USB, pad the output buffer. This avoids a situation where there isn't a
51 * complete URB's worth of audio ready to be transmitted when it is requested.
52 * The URB interval does track directly to the audio clock, making it hard to
53 * predict the exact interval.
54 */
55 #define USB_EXTRA_BUFFER_FRAMES 768
56
57 /*
58 * When snd_pcm_avail returns a value that is greater than buffer size,
59 * we know there is an underrun. If the number of underrun samples
60 * (avail - buffer_size) is greater than SEVERE_UNDERRUN_MS * rate,
61 * it is a severe underrun. Main thread should disable and then enable
62 * device to recover it from underrun.
63 */
64 #define SEVERE_UNDERRUN_MS 5000
65
66 /*
67 * This extends cras_ionode to include alsa-specific information.
68 * Members:
69 * mixer_output - From cras_alsa_mixer.
70 * volume_curve - Volume curve for this node.
71 * jack - The jack associated with the node.
72 */
73 struct alsa_output_node {
74 struct cras_ionode base;
75 struct mixer_control *mixer_output;
76 struct cras_volume_curve *volume_curve;
77 const struct cras_alsa_jack *jack;
78 };
79
80 struct alsa_input_node {
81 struct cras_ionode base;
82 struct mixer_control* mixer_input;
83 const struct cras_alsa_jack *jack;
84 int8_t *channel_layout;
85 };
86
87 /*
88 * Child of cras_iodev, alsa_io handles ALSA interaction for sound devices.
89 * base - The cras_iodev structure "base class".
90 * dev - String that names this device (e.g. "hw:0,0").
91 * dev_name - value from snd_pcm_info_get_name
92 * dev_id - value from snd_pcm_info_get_id
93 * device_index - ALSA index of device, Y in "hw:X:Y".
94 * next_ionode_index - The index we will give to the next ionode. Each ionode
95 * have a unique index within the iodev.
96 * card_type - the type of the card this iodev belongs.
97 * is_first - true if this is the first iodev on the card.
98 * fully_specified - true if this device and it's nodes were fully specified.
99 * That is, don't automatically create nodes for it.
100 * enable_htimestamp - True when the device's htimestamp is used.
101 * handle - Handle to the opened ALSA device.
102 * num_underruns - Number of times we have run out of data (playback only).
103 * num_severe_underruns - Number of times we have run out of data badly.
104 Unlike num_underruns which records for the duration
105 where device is opened, num_severe_underruns records
106 since device is created. When severe underrun occurs
107 a possible action is to close/open device.
108 * alsa_stream - Playback or capture type.
109 * mixer - Alsa mixer used to control volume and mute of the device.
110 * config - Card config for this alsa device.
111 * jack_list - List of alsa jack controls for this device.
112 * ucm - CRAS use case manager, if configuration is found.
113 * mmap_offset - offset returned from mmap_begin.
114 * dsp_name_default - the default dsp name for the device. It can be overridden
115 * by the jack specific dsp name.
116 * poll_fd - Descriptor used to block until data is ready.
117 * dma_period_set_microsecs - If non-zero, the value to apply to the dma_period.
118 * is_free_running - true if device is playing zeros in the buffer without
119 * user filling meaningful data. The device buffer is filled
120 * with zeros. In this state, appl_ptr remains the same
121 * while hw_ptr keeps running ahead.
122 * filled_zeros_for_draining - The number of zeros filled for draining.
123 * severe_underrun_frames - The threshold for severe underrun.
124 * default_volume_curve - Default volume curve that converts from an index
125 * to dBFS.
126 */
127 struct alsa_io {
128 struct cras_iodev base;
129 char *dev;
130 char *dev_name;
131 char *dev_id;
132 uint32_t device_index;
133 uint32_t next_ionode_index;
134 enum CRAS_ALSA_CARD_TYPE card_type;
135 int is_first;
136 int fully_specified;
137 int enable_htimestamp;
138 snd_pcm_t *handle;
139 unsigned int num_underruns;
140 unsigned int num_severe_underruns;
141 snd_pcm_stream_t alsa_stream;
142 struct cras_alsa_mixer *mixer;
143 const struct cras_card_config *config;
144 struct cras_alsa_jack_list *jack_list;
145 struct cras_use_case_mgr *ucm;
146 snd_pcm_uframes_t mmap_offset;
147 const char *dsp_name_default;
148 int poll_fd;
149 unsigned int dma_period_set_microsecs;
150 int is_free_running;
151 unsigned int filled_zeros_for_draining;
152 snd_pcm_uframes_t severe_underrun_frames;
153 struct cras_volume_curve *default_volume_curve;
154 };
155
156 static void init_device_settings(struct alsa_io *aio);
157
158 static int alsa_iodev_set_active_node(struct cras_iodev *iodev,
159 struct cras_ionode *ionode,
160 unsigned dev_enabled);
161
162 /*
163 * Defines the default values of nodes.
164 */
165 static const struct {
166 const char *name;
167 enum CRAS_NODE_TYPE type;
168 enum CRAS_NODE_POSITION position;
169 } node_defaults[] = {
170 {
171 .name = DEFAULT,
172 .type = CRAS_NODE_TYPE_UNKNOWN,
173 .position = NODE_POSITION_INTERNAL,
174 },
175 {
176 .name = INTERNAL_SPEAKER,
177 .type = CRAS_NODE_TYPE_INTERNAL_SPEAKER,
178 .position = NODE_POSITION_INTERNAL,
179 },
180 {
181 .name = INTERNAL_MICROPHONE,
182 .type = CRAS_NODE_TYPE_MIC,
183 .position = NODE_POSITION_INTERNAL,
184 },
185 {
186 .name = KEYBOARD_MIC,
187 .type = CRAS_NODE_TYPE_MIC,
188 .position = NODE_POSITION_KEYBOARD,
189 },
190 {
191 .name = HDMI,
192 .type = CRAS_NODE_TYPE_HDMI,
193 .position = NODE_POSITION_EXTERNAL,
194 },
195 {
196 .name = "IEC958",
197 .type = CRAS_NODE_TYPE_HDMI,
198 .position = NODE_POSITION_EXTERNAL,
199 },
200 {
201 .name = "Headphone",
202 .type = CRAS_NODE_TYPE_HEADPHONE,
203 .position = NODE_POSITION_EXTERNAL,
204 },
205 {
206 .name = "Front Headphone",
207 .type = CRAS_NODE_TYPE_HEADPHONE,
208 .position = NODE_POSITION_EXTERNAL,
209 },
210 {
211 .name = "Front Mic",
212 .type = CRAS_NODE_TYPE_MIC,
213 .position = NODE_POSITION_FRONT,
214 },
215 {
216 .name = "Rear Mic",
217 .type = CRAS_NODE_TYPE_MIC,
218 .position = NODE_POSITION_REAR,
219 },
220 {
221 .name = "Mic",
222 .type = CRAS_NODE_TYPE_MIC,
223 .position = NODE_POSITION_EXTERNAL,
224 },
225 {
226 .name = HOTWORD_DEV,
227 .type = CRAS_NODE_TYPE_HOTWORD,
228 .position = NODE_POSITION_INTERNAL,
229 },
230 {
231 .name = "Haptic",
232 .type = CRAS_NODE_TYPE_HAPTIC,
233 .position = NODE_POSITION_INTERNAL,
234 },
235 {
236 .name = "Rumbler",
237 .type = CRAS_NODE_TYPE_HAPTIC,
238 .position = NODE_POSITION_INTERNAL,
239 },
240 {
241 .name = "Line Out",
242 .type = CRAS_NODE_TYPE_LINEOUT,
243 .position = NODE_POSITION_EXTERNAL,
244 },
245 };
246
247 /*
248 * iodev callbacks.
249 */
250
frames_queued(const struct cras_iodev * iodev,struct timespec * tstamp)251 static int frames_queued(const struct cras_iodev *iodev,
252 struct timespec *tstamp)
253 {
254 struct alsa_io *aio = (struct alsa_io *)iodev;
255 int rc;
256 snd_pcm_uframes_t frames;
257
258 rc = cras_alsa_get_avail_frames(aio->handle,
259 aio->base.buffer_size,
260 aio->severe_underrun_frames,
261 iodev->info.name,
262 &frames, tstamp,
263 &aio->num_underruns);
264 if (rc < 0) {
265 if (rc == -EPIPE)
266 aio->num_severe_underruns++;
267 return rc;
268 }
269 if (!aio->enable_htimestamp)
270 clock_gettime(CLOCK_MONOTONIC_RAW, tstamp);
271 if (iodev->direction == CRAS_STREAM_INPUT)
272 return (int)frames;
273
274 /* For output, return number of frames that are used. */
275 return iodev->buffer_size - frames;
276 }
277
delay_frames(const struct cras_iodev * iodev)278 static int delay_frames(const struct cras_iodev *iodev)
279 {
280 struct alsa_io *aio = (struct alsa_io *)iodev;
281 snd_pcm_sframes_t delay;
282 int rc;
283
284 rc = cras_alsa_get_delay_frames(aio->handle,
285 iodev->buffer_size,
286 &delay);
287 if (rc < 0)
288 return rc;
289
290 return (int)delay;
291 }
292
close_dev(struct cras_iodev * iodev)293 static int close_dev(struct cras_iodev *iodev)
294 {
295 struct alsa_io *aio = (struct alsa_io *)iodev;
296
297 /* Removes audio thread callback from main thread. */
298 if (aio->poll_fd >= 0)
299 audio_thread_rm_callback_sync(
300 cras_iodev_list_get_audio_thread(),
301 aio->poll_fd);
302 if (!aio->handle)
303 return 0;
304 cras_alsa_pcm_close(aio->handle);
305 aio->handle = NULL;
306 aio->is_free_running = 0;
307 aio->filled_zeros_for_draining = 0;
308 cras_iodev_free_format(&aio->base);
309 cras_iodev_free_audio_area(&aio->base);
310 return 0;
311 }
312
dummy_hotword_cb(void * arg)313 static int dummy_hotword_cb(void *arg)
314 {
315 /* Only need this once. */
316 struct alsa_io *aio = (struct alsa_io *)arg;
317 audio_thread_rm_callback(aio->poll_fd);
318 aio->poll_fd = -1;
319 return 0;
320 }
321
open_dev(struct cras_iodev * iodev)322 static int open_dev(struct cras_iodev *iodev)
323 {
324 struct alsa_io *aio = (struct alsa_io *)iodev;
325 snd_pcm_t *handle;
326 int period_wakeup;
327 int rc;
328
329 /* This is called after the first stream added so configure for it.
330 * format must be set before opening the device.
331 */
332 if (iodev->format == NULL)
333 return -EINVAL;
334 aio->num_underruns = 0;
335 aio->is_free_running = 0;
336 aio->filled_zeros_for_draining = 0;
337 aio->severe_underrun_frames =
338 SEVERE_UNDERRUN_MS * iodev->format->frame_rate / 1000;
339
340 cras_iodev_init_audio_area(iodev, iodev->format->num_channels);
341
342 syslog(LOG_DEBUG, "Configure alsa device %s rate %zuHz, %zu channels",
343 aio->dev, iodev->format->frame_rate,
344 iodev->format->num_channels);
345 handle = 0; /* Avoid unused warning. */
346 rc = cras_alsa_pcm_open(&handle, aio->dev, aio->alsa_stream);
347 if (rc < 0)
348 return rc;
349
350 /* If it's a wake on voice device, period_wakeups are required. */
351 period_wakeup = (iodev->active_node->type == CRAS_NODE_TYPE_HOTWORD);
352
353 rc = cras_alsa_set_hwparams(handle, iodev->format,
354 &iodev->buffer_size, period_wakeup,
355 aio->dma_period_set_microsecs);
356 if (rc < 0) {
357 cras_alsa_pcm_close(handle);
358 return rc;
359 }
360
361 /* Set channel map to device */
362 rc = cras_alsa_set_channel_map(handle,
363 iodev->format);
364 if (rc < 0) {
365 cras_alsa_pcm_close(handle);
366 return rc;
367 }
368
369 /* Configure software params. */
370 rc = cras_alsa_set_swparams(handle, &aio->enable_htimestamp);
371 if (rc < 0) {
372 cras_alsa_pcm_close(handle);
373 return rc;
374 }
375
376 /* Assign pcm handle then initialize device settings. */
377 aio->handle = handle;
378 init_device_settings(aio);
379
380 aio->poll_fd = -1;
381 if (iodev->active_node->type == CRAS_NODE_TYPE_HOTWORD) {
382 struct pollfd *ufds;
383 int count, i;
384
385 count = snd_pcm_poll_descriptors_count(handle);
386 if (count <= 0) {
387 syslog(LOG_ERR, "Invalid poll descriptors count\n");
388 return count;
389 }
390
391 ufds = (struct pollfd *)malloc(sizeof(struct pollfd) * count);
392 if (ufds == NULL)
393 return -ENOMEM;
394
395 rc = snd_pcm_poll_descriptors(handle, ufds, count);
396 if (rc < 0) {
397 syslog(LOG_ERR,
398 "Getting hotword poll descriptors: %s\n",
399 snd_strerror(rc));
400 free(ufds);
401 return rc;
402 }
403
404 for (i = 0; i < count; i++) {
405 if (ufds[i].events & POLLIN) {
406 aio->poll_fd = ufds[i].fd;
407 break;
408 }
409 }
410 free(ufds);
411
412 if (aio->poll_fd >= 0)
413 audio_thread_add_callback(aio->poll_fd,
414 dummy_hotword_cb,
415 aio);
416 }
417
418 /* Capture starts right away, playback will wait for samples. */
419 if (aio->alsa_stream == SND_PCM_STREAM_CAPTURE)
420 cras_alsa_pcm_start(aio->handle);
421
422 return 0;
423 }
424
425 /*
426 * Check if ALSA device is opened by checking if handle is valid.
427 * Note that to fully open a cras_iodev, ALSA device is opened first, then there
428 * are some device init settings to be done in init_device_settings.
429 * Therefore, when setting volume/mute/gain in init_device_settings,
430 * cras_iodev is not in CRAS_IODEV_STATE_OPEN yet. We need to check if handle
431 * is valid when setting those properties, instead of checking
432 * cras_iodev_is_open.
433 */
has_handle(const struct alsa_io * aio)434 static int has_handle(const struct alsa_io *aio)
435 {
436 return !!aio->handle;
437 }
438
start(const struct cras_iodev * iodev)439 static int start(const struct cras_iodev *iodev)
440 {
441 struct alsa_io *aio = (struct alsa_io *)iodev;
442 snd_pcm_t *handle = aio->handle;
443 int rc;
444
445 if (snd_pcm_state(handle) == SND_PCM_STATE_RUNNING)
446 return 0;
447
448 if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) {
449 rc = cras_alsa_attempt_resume(handle);
450 if (rc < 0) {
451 syslog(LOG_ERR, "Resume error: %s", snd_strerror(rc));
452 return rc;
453 }
454 cras_iodev_reset_rate_estimator(iodev);
455 } else {
456 rc = cras_alsa_pcm_start(handle);
457 if (rc < 0) {
458 syslog(LOG_ERR, "Start error: %s", snd_strerror(rc));
459 return rc;
460 }
461 }
462
463 return 0;
464 }
465
get_buffer(struct cras_iodev * iodev,struct cras_audio_area ** area,unsigned * frames)466 static int get_buffer(struct cras_iodev *iodev,
467 struct cras_audio_area **area,
468 unsigned *frames)
469 {
470 struct alsa_io *aio = (struct alsa_io *)iodev;
471 snd_pcm_uframes_t nframes = *frames;
472 uint8_t *dst = NULL;
473 size_t format_bytes;
474 int rc;
475
476 aio->mmap_offset = 0;
477 format_bytes = cras_get_format_bytes(iodev->format);
478
479 rc = cras_alsa_mmap_begin(aio->handle,
480 format_bytes,
481 &dst,
482 &aio->mmap_offset,
483 &nframes,
484 &aio->num_underruns);
485
486 iodev->area->frames = nframes;
487 cras_audio_area_config_buf_pointers(iodev->area, iodev->format, dst);
488
489 *area = iodev->area;
490 *frames = nframes;
491
492 return rc;
493 }
494
put_buffer(struct cras_iodev * iodev,unsigned nwritten)495 static int put_buffer(struct cras_iodev *iodev, unsigned nwritten)
496 {
497 struct alsa_io *aio = (struct alsa_io *)iodev;
498
499 return cras_alsa_mmap_commit(aio->handle,
500 aio->mmap_offset,
501 nwritten,
502 &aio->num_underruns);
503 }
504
flush_buffer(struct cras_iodev * iodev)505 static int flush_buffer(struct cras_iodev *iodev)
506 {
507 struct alsa_io *aio = (struct alsa_io *)iodev;
508 snd_pcm_uframes_t nframes;
509
510 if (iodev->direction == CRAS_STREAM_INPUT) {
511 nframes = snd_pcm_forwardable(aio->handle);
512 return snd_pcm_forward(aio->handle, nframes);
513 }
514 return 0;
515 }
516
517 /*
518 * Gets the first plugged node in list. This is used as the
519 * default node to set as active.
520 */
first_plugged_node(struct cras_iodev * iodev)521 static struct cras_ionode *first_plugged_node(struct cras_iodev *iodev)
522 {
523 struct cras_ionode *n;
524
525 /* When this is called at iodev creation, none of the nodes
526 * are selected. Just pick the first plugged one and let Chrome
527 * choose it later. */
528 DL_FOREACH(iodev->nodes, n) {
529 if (n->plugged)
530 return n;
531 }
532 return iodev->nodes;
533 }
534
update_active_node(struct cras_iodev * iodev,unsigned node_idx,unsigned dev_enabled)535 static void update_active_node(struct cras_iodev *iodev, unsigned node_idx,
536 unsigned dev_enabled)
537 {
538 struct cras_ionode *n;
539
540 /* If a node exists for node_idx, set it as active. */
541 DL_FOREACH(iodev->nodes, n) {
542 if (n->idx == node_idx) {
543 alsa_iodev_set_active_node(iodev, n, dev_enabled);
544 return;
545 }
546 }
547
548 alsa_iodev_set_active_node(iodev, first_plugged_node(iodev),
549 dev_enabled);
550 }
551
update_channel_layout(struct cras_iodev * iodev)552 static int update_channel_layout(struct cras_iodev *iodev)
553 {
554 struct alsa_io *aio = (struct alsa_io *)iodev;
555 snd_pcm_t *handle = NULL;
556 snd_pcm_uframes_t buf_size = 0;
557 int err = 0;
558
559 /* If the capture channel map is specified in UCM, prefer it over
560 * what ALSA provides. */
561 if (aio->ucm && (iodev->direction == CRAS_STREAM_INPUT)) {
562 struct alsa_input_node *input =
563 (struct alsa_input_node *)iodev->active_node;
564
565 if (input->channel_layout) {
566 memcpy(iodev->format->channel_layout,
567 input->channel_layout,
568 CRAS_CH_MAX * sizeof(*input->channel_layout));
569 return 0;
570 }
571 }
572
573 err = cras_alsa_pcm_open(&handle, aio->dev, aio->alsa_stream);
574 if (err < 0) {
575 syslog(LOG_ERR, "snd_pcm_open_failed: %s", snd_strerror(err));
576 return err;
577 }
578
579 /* Sets frame rate and channel count to alsa device before
580 * we test channel mapping. */
581 err = cras_alsa_set_hwparams(handle, iodev->format, &buf_size, 0,
582 aio->dma_period_set_microsecs);
583 if (err < 0) {
584 cras_alsa_pcm_close(handle);
585 return err;
586 }
587
588 err = cras_alsa_get_channel_map(handle, iodev->format);
589
590 cras_alsa_pcm_close(handle);
591 return err;
592 }
593
set_hotword_model(struct cras_iodev * iodev,const char * model_name)594 static int set_hotword_model(struct cras_iodev *iodev, const char *model_name)
595 {
596 struct alsa_io *aio = (struct alsa_io *)iodev;
597 if (!aio->ucm)
598 return -EINVAL;
599
600 return ucm_set_hotword_model(aio->ucm, model_name);
601 }
602
get_hotword_models(struct cras_iodev * iodev)603 static char *get_hotword_models(struct cras_iodev *iodev)
604 {
605 struct alsa_io *aio = (struct alsa_io *)iodev;
606 if (!aio->ucm)
607 return NULL;
608
609 return ucm_get_hotword_models(aio->ucm);
610 }
611
612 /*
613 * Alsa helper functions.
614 */
615
get_active_output(const struct alsa_io * aio)616 static struct alsa_output_node *get_active_output(const struct alsa_io *aio)
617 {
618 return (struct alsa_output_node *)aio->base.active_node;
619 }
620
get_active_input(const struct alsa_io * aio)621 static struct alsa_input_node *get_active_input(const struct alsa_io *aio)
622 {
623 return (struct alsa_input_node *)aio->base.active_node;
624 }
625
626 /*
627 * Gets the curve for the active output node. If the node doesn't have volume
628 * curve specified, return the default volume curve of the parent iodev.
629 */
get_curve_for_output_node(const struct alsa_io * aio,const struct alsa_output_node * node)630 static const struct cras_volume_curve *get_curve_for_output_node(
631 const struct alsa_io *aio,
632 const struct alsa_output_node *node)
633 {
634 if (node && node->volume_curve)
635 return node->volume_curve;
636 return aio->default_volume_curve;
637 }
638
639 /*
640 * Gets the curve for the active output.
641 */
get_curve_for_active_output(const struct alsa_io * aio)642 static const struct cras_volume_curve *get_curve_for_active_output(
643 const struct alsa_io *aio)
644 {
645 struct alsa_output_node *node = get_active_output(aio);
646 return get_curve_for_output_node(aio, node);
647 }
648
649 /*
650 * Informs the system of the volume limits for this device.
651 */
set_alsa_volume_limits(struct alsa_io * aio)652 static void set_alsa_volume_limits(struct alsa_io *aio)
653 {
654 const struct cras_volume_curve *curve;
655
656 /* Only set the limits if the dev is active. */
657 if (!has_handle(aio))
658 return;
659
660 curve = get_curve_for_active_output(aio);
661 cras_system_set_volume_limits(
662 curve->get_dBFS(curve, 1), /* min */
663 curve->get_dBFS(curve, CRAS_MAX_SYSTEM_VOLUME));
664 }
665
666 /*
667 * Sets the alsa mute control for this iodev.
668 */
set_alsa_mute_control(const struct alsa_io * aio,int muted)669 static void set_alsa_mute_control(const struct alsa_io *aio, int muted)
670 {
671 struct alsa_output_node *aout;
672
673 if (!has_handle(aio))
674 return;
675
676 aout = get_active_output(aio);
677 cras_alsa_mixer_set_mute(
678 aio->mixer,
679 muted,
680 aout ? aout->mixer_output : NULL);
681 }
682
683 /*
684 * Sets the volume of the playback device to the specified level. Receives a
685 * volume index from the system settings, ranging from 0 to 100, converts it to
686 * dB using the volume curve, and sends the dB value to alsa.
687 */
set_alsa_volume(struct cras_iodev * iodev)688 static void set_alsa_volume(struct cras_iodev *iodev)
689 {
690 const struct alsa_io *aio = (const struct alsa_io *)iodev;
691 const struct cras_volume_curve *curve;
692 size_t volume;
693 struct alsa_output_node *aout;
694
695 assert(aio);
696 if (aio->mixer == NULL)
697 return;
698
699 /* Only set the volume if the dev is active. */
700 if (!has_handle(aio))
701 return;
702
703 volume = cras_system_get_volume();
704 curve = get_curve_for_active_output(aio);
705 if (curve == NULL)
706 return;
707 aout = get_active_output(aio);
708 if (aout)
709 volume = cras_iodev_adjust_node_volume(&aout->base, volume);
710
711 /* Samples get scaled for devices using software volume, set alsa
712 * volume to 100. */
713 if (cras_iodev_software_volume_needed(iodev))
714 volume = 100;
715
716 cras_alsa_mixer_set_dBFS(
717 aio->mixer,
718 curve->get_dBFS(curve, volume),
719 aout ? aout->mixer_output : NULL);
720 }
721
set_alsa_mute(struct cras_iodev * iodev)722 static void set_alsa_mute(struct cras_iodev *iodev)
723 {
724 /* Mute for zero. */
725 const struct alsa_io *aio = (const struct alsa_io *)iodev;
726 set_alsa_mute_control(aio, cras_system_get_mute());
727 }
728
729 /*
730 * Sets the capture gain to the current system input gain level, given in dBFS.
731 * Set mute based on the system mute state. This gain can be positive or
732 * negative and might be adjusted often if an app is running an AGC.
733 */
set_alsa_capture_gain(struct cras_iodev * iodev)734 static void set_alsa_capture_gain(struct cras_iodev *iodev)
735 {
736 const struct alsa_io *aio = (const struct alsa_io *)iodev;
737 struct alsa_input_node *ain;
738 long gain;
739
740 assert(aio);
741 if (aio->mixer == NULL)
742 return;
743
744 /* Only set the volume if the dev is active. */
745 if (!has_handle(aio))
746 return;
747 gain = cras_iodev_adjust_active_node_gain(
748 iodev, cras_system_get_capture_gain());
749
750 /* Set hardware gain to 0dB if software gain is needed. */
751 if (cras_iodev_software_volume_needed(iodev))
752 gain = 0;
753
754 ain = get_active_input(aio);
755
756 cras_alsa_mixer_set_capture_dBFS(
757 aio->mixer,
758 gain,
759 ain ? ain->mixer_input : NULL);
760 cras_alsa_mixer_set_capture_mute(aio->mixer,
761 cras_system_get_capture_mute(),
762 ain ? ain->mixer_input : NULL);
763 }
764
765 /*
766 * Swaps the left and right channels of the given node.
767 */
set_alsa_node_swapped(struct cras_iodev * iodev,struct cras_ionode * node,int enable)768 static int set_alsa_node_swapped(struct cras_iodev *iodev,
769 struct cras_ionode *node, int enable)
770 {
771 const struct alsa_io *aio = (const struct alsa_io *)iodev;
772 assert(aio);
773 return ucm_enable_swap_mode(aio->ucm, node->name, enable);
774 }
775
776 /*
777 * Initializes the device settings according to system volume, mute, gain
778 * settings.
779 * Updates system capture gain limits based on current active device/node.
780 */
init_device_settings(struct alsa_io * aio)781 static void init_device_settings(struct alsa_io *aio)
782 {
783 /* Register for volume/mute callback and set initial volume/mute for
784 * the device. */
785 if (aio->base.direction == CRAS_STREAM_OUTPUT) {
786 set_alsa_volume_limits(aio);
787 set_alsa_volume(&aio->base);
788 set_alsa_mute(&aio->base);
789 } else {
790 struct mixer_control *mixer_input = NULL;
791 struct alsa_input_node *ain = get_active_input(aio);
792 long min_capture_gain, max_capture_gain;
793
794 if (ain)
795 mixer_input = ain->mixer_input;
796
797 if (cras_iodev_software_volume_needed(&aio->base)) {
798 min_capture_gain = DEFAULT_MIN_CAPTURE_GAIN;
799 max_capture_gain = cras_iodev_maximum_software_gain(
800 &aio->base);
801 } else {
802 min_capture_gain =
803 cras_alsa_mixer_get_minimum_capture_gain(
804 aio->mixer, mixer_input);
805 max_capture_gain =
806 cras_alsa_mixer_get_maximum_capture_gain(
807 aio->mixer, mixer_input);
808 }
809 cras_system_set_capture_gain_limits(min_capture_gain,
810 max_capture_gain);
811 set_alsa_capture_gain(&aio->base);
812 }
813 }
814
815 /*
816 * Functions run in the main server context.
817 */
818
819 /*
820 * Frees resources used by the alsa iodev.
821 * Args:
822 * iodev - the iodev to free the resources from.
823 */
free_alsa_iodev_resources(struct alsa_io * aio)824 static void free_alsa_iodev_resources(struct alsa_io *aio)
825 {
826 struct cras_ionode *node;
827 struct alsa_output_node *aout;
828
829 free(aio->base.supported_rates);
830 free(aio->base.supported_channel_counts);
831 free(aio->base.supported_formats);
832
833 DL_FOREACH(aio->base.nodes, node) {
834 if (aio->base.direction == CRAS_STREAM_OUTPUT) {
835 aout = (struct alsa_output_node *)node;
836 cras_volume_curve_destroy(aout->volume_curve);
837 }
838 cras_iodev_rm_node(&aio->base, node);
839 free(node->softvol_scalers);
840 free(node);
841 }
842
843 free((void *)aio->dsp_name_default);
844 cras_iodev_free_resources(&aio->base);
845 free(aio->dev);
846 if (aio->dev_id)
847 free(aio->dev_id);
848 if (aio->dev_name)
849 free(aio->dev_name);
850 }
851
852 /*
853 * Returns true if this is the first internal device.
854 */
first_internal_device(struct alsa_io * aio)855 static int first_internal_device(struct alsa_io *aio)
856 {
857 return aio->is_first && aio->card_type == ALSA_CARD_TYPE_INTERNAL;
858 }
859
860 /*
861 * Returns true if there is already a node created with the given name.
862 */
has_node(struct alsa_io * aio,const char * name)863 static int has_node(struct alsa_io *aio, const char *name)
864 {
865 struct cras_ionode *node;
866
867 DL_FOREACH(aio->base.nodes, node)
868 if (!strcmp(node->name, name))
869 return 1;
870
871 return 0;
872 }
873
874 /*
875 * Returns true if string s ends with the given suffix.
876 */
endswith(const char * s,const char * suffix)877 int endswith(const char *s, const char *suffix)
878 {
879 size_t n = strlen(s);
880 size_t m = strlen(suffix);
881 return n >= m && !strcmp(s + (n - m), suffix);
882 }
883
884 /*
885 * Drop the node name and replace it with node type.
886 */
drop_node_name(struct cras_ionode * node)887 static void drop_node_name(struct cras_ionode *node)
888 {
889 if (node->type == CRAS_NODE_TYPE_USB)
890 strcpy(node->name, USB);
891 else if (node->type == CRAS_NODE_TYPE_HDMI)
892 strcpy(node->name, HDMI);
893 else {
894 /* Only HDMI or USB node might have invalid name to drop */
895 syslog(LOG_ERR, "Unexpectedly drop node name for "
896 "node: %s, type: %d", node->name, node->type);
897 strcpy(node->name, DEFAULT);
898 }
899 }
900
901 /*
902 * Sets the initial plugged state and type of a node based on its
903 * name. Chrome will assign priority to nodes base on node type.
904 */
set_node_initial_state(struct cras_ionode * node,enum CRAS_ALSA_CARD_TYPE card_type)905 static void set_node_initial_state(struct cras_ionode *node,
906 enum CRAS_ALSA_CARD_TYPE card_type)
907 {
908
909 unsigned i;
910
911 node->volume = 100;
912 node->type = CRAS_NODE_TYPE_UNKNOWN;
913 /* Go through the known names */
914 for (i = 0; i < ARRAY_SIZE(node_defaults); i++)
915 if (!strncmp(node->name, node_defaults[i].name,
916 strlen(node_defaults[i].name))) {
917 node->position = node_defaults[i].position;
918 node->plugged = (node->position
919 != NODE_POSITION_EXTERNAL);
920 node->type = node_defaults[i].type;
921 if (node->plugged)
922 gettimeofday(&node->plugged_time, NULL);
923 break;
924 }
925
926 /* If we didn't find a matching name above, but the node is a jack node,
927 * set its type to headphone/mic. This matches node names like "DAISY-I2S Mic
928 * Jack".
929 * If HDMI is in the node name, set its type to HDMI. This matches node names
930 * like "Rockchip HDMI Jack".
931 */
932 if (i == ARRAY_SIZE(node_defaults)) {
933 if (endswith(node->name, "Jack")) {
934 if (node->dev->direction == CRAS_STREAM_OUTPUT)
935 node->type = CRAS_NODE_TYPE_HEADPHONE;
936 else
937 node->type = CRAS_NODE_TYPE_MIC;
938 }
939 if (strstr(node->name, HDMI) &&
940 node->dev->direction == CRAS_STREAM_OUTPUT)
941 node->type = CRAS_NODE_TYPE_HDMI;
942 }
943
944 /* Regardless of the node name of a USB headset (it can be "Speaker"),
945 * set it's type to usb.
946 */
947 if (card_type == ALSA_CARD_TYPE_USB) {
948 node->type = CRAS_NODE_TYPE_USB;
949 node->position = NODE_POSITION_EXTERNAL;
950 }
951
952 if (!is_utf8_string(node->name))
953 drop_node_name(node);
954 }
955
get_ucm_flag_integer(struct alsa_io * aio,const char * flag_name,int * result)956 static int get_ucm_flag_integer(struct alsa_io *aio,
957 const char *flag_name,
958 int *result)
959 {
960 char *value;
961 int i;
962
963 if (!aio->ucm)
964 return -1;
965
966 value = ucm_get_flag(aio->ucm, flag_name);
967 if (!value)
968 return -1;
969
970 i = atoi(value);
971 free(value);
972 *result = i;
973 return 0;
974 }
975
auto_unplug_input_node(struct alsa_io * aio)976 static int auto_unplug_input_node(struct alsa_io *aio)
977 {
978 int result;
979 if (get_ucm_flag_integer(aio, "AutoUnplugInputNode", &result))
980 return 0;
981 return result;
982 }
983
auto_unplug_output_node(struct alsa_io * aio)984 static int auto_unplug_output_node(struct alsa_io *aio)
985 {
986 int result;
987 if (get_ucm_flag_integer(aio, "AutoUnplugOutputNode", &result))
988 return 0;
989 return result;
990 }
991
no_create_default_input_node(struct alsa_io * aio)992 static int no_create_default_input_node(struct alsa_io *aio)
993 {
994 int result;
995 if (get_ucm_flag_integer(aio, "NoCreateDefaultInputNode", &result))
996 return 0;
997 return result;
998 }
999
no_create_default_output_node(struct alsa_io * aio)1000 static int no_create_default_output_node(struct alsa_io *aio)
1001 {
1002 int result;
1003 if (get_ucm_flag_integer(aio, "NoCreateDefaultOutputNode", &result))
1004 return 0;
1005 return result;
1006 }
1007
set_output_node_software_volume_needed(struct alsa_output_node * output,struct alsa_io * aio)1008 static void set_output_node_software_volume_needed(
1009 struct alsa_output_node *output, struct alsa_io *aio)
1010 {
1011
1012 struct cras_alsa_mixer *mixer = aio->mixer;
1013 long range = 0;
1014
1015 if (aio->ucm && ucm_get_disable_software_volume(aio->ucm)) {
1016 output->base.software_volume_needed = 0;
1017 syslog(LOG_DEBUG, "Disable software volume for %s from ucm.",
1018 output->base.name);
1019 return;
1020 }
1021
1022 /* Use software volume for HDMI output and nodes without volume mixer
1023 * control. */
1024 if ((output->base.type == CRAS_NODE_TYPE_HDMI) ||
1025 (!cras_alsa_mixer_has_main_volume(mixer) &&
1026 !cras_alsa_mixer_has_volume(output->mixer_output)))
1027 output->base.software_volume_needed = 1;
1028
1029 /* Use software volume if the usb device's volume range is smaller
1030 * than 40dB */
1031 if (output->base.type == CRAS_NODE_TYPE_USB) {
1032 range += cras_alsa_mixer_get_dB_range(mixer);
1033 range += cras_alsa_mixer_get_output_dB_range(
1034 output->mixer_output);
1035 if (range < 4000)
1036 output->base.software_volume_needed = 1;
1037 }
1038 if (output->base.software_volume_needed)
1039 syslog(LOG_DEBUG, "Use software volume for node: %s",
1040 output->base.name);
1041 }
1042
set_input_node_software_volume_needed(struct alsa_input_node * input,struct alsa_io * aio)1043 static void set_input_node_software_volume_needed(
1044 struct alsa_input_node *input, struct alsa_io *aio)
1045 {
1046 long max_software_gain;
1047 int rc;
1048
1049 input->base.software_volume_needed = 0;
1050 input->base.max_software_gain = 0;
1051
1052 /* Enable software gain only if max software gain is specified in UCM.*/
1053 if (!aio->ucm)
1054 return;
1055
1056 rc = ucm_get_max_software_gain(aio->ucm, input->base.name,
1057 &max_software_gain);
1058 if (rc)
1059 return;
1060
1061 input->base.software_volume_needed = 1;
1062 input->base.max_software_gain = max_software_gain;
1063 syslog(LOG_INFO,
1064 "Use software gain for %s with max %ld because it is specified"
1065 " in UCM", input->base.name, max_software_gain);
1066 }
1067
set_input_default_node_gain(struct alsa_input_node * input,struct alsa_io * aio)1068 static void set_input_default_node_gain(struct alsa_input_node *input,
1069 struct alsa_io *aio)
1070 {
1071 long default_node_gain;
1072 int rc;
1073
1074 if (!aio->ucm)
1075 return;
1076
1077 rc = ucm_get_default_node_gain(aio->ucm, input->base.name,
1078 &default_node_gain);
1079 if (rc)
1080 return;
1081
1082 input->base.capture_gain = default_node_gain;
1083 }
1084
check_auto_unplug_output_node(struct alsa_io * aio,struct cras_ionode * node,int plugged)1085 static void check_auto_unplug_output_node(struct alsa_io *aio,
1086 struct cras_ionode *node,
1087 int plugged)
1088 {
1089 struct cras_ionode *tmp;
1090
1091 if (!auto_unplug_output_node(aio))
1092 return;
1093
1094 /* Auto unplug internal speaker if any output node has been created */
1095 if (!strcmp(node->name, INTERNAL_SPEAKER) && plugged) {
1096 DL_FOREACH(aio->base.nodes, tmp)
1097 if (tmp->plugged && (tmp != node))
1098 cras_iodev_set_node_attr(node,
1099 IONODE_ATTR_PLUGGED,
1100 0);
1101 } else {
1102 DL_FOREACH(aio->base.nodes, tmp) {
1103 if (!strcmp(tmp->name, INTERNAL_SPEAKER))
1104 cras_iodev_set_node_attr(tmp,
1105 IONODE_ATTR_PLUGGED,
1106 !plugged);
1107 }
1108 }
1109 }
1110
1111 /*
1112 * Callback for listing mixer outputs. The mixer will call this once for each
1113 * output associated with this device. Most commonly this is used to tell the
1114 * device it has Headphones and Speakers.
1115 */
new_output(struct alsa_io * aio,struct mixer_control * cras_output,const char * name)1116 static struct alsa_output_node *new_output(struct alsa_io *aio,
1117 struct mixer_control *cras_output,
1118 const char *name)
1119 {
1120 struct alsa_output_node *output;
1121 syslog(LOG_DEBUG, "New output node for '%s'", name);
1122 if (aio == NULL) {
1123 syslog(LOG_ERR, "Invalid aio when listing outputs.");
1124 return NULL;
1125 }
1126 output = (struct alsa_output_node *)calloc(1, sizeof(*output));
1127 if (output == NULL) {
1128 syslog(LOG_ERR, "Out of memory when listing outputs.");
1129 return NULL;
1130 }
1131 output->base.dev = &aio->base;
1132 output->base.idx = aio->next_ionode_index++;
1133 output->base.stable_id = SuperFastHash(name,
1134 strlen(name),
1135 aio->base.info.stable_id);
1136 output->base.stable_id_new = SuperFastHash(name,
1137 strlen(name),
1138 aio->base.info.stable_id_new
1139 );
1140 output->mixer_output = cras_output;
1141
1142 /* Volume curve. */
1143 output->volume_curve = cras_card_config_get_volume_curve_for_control(
1144 aio->config,
1145 name ? name
1146 : cras_alsa_mixer_get_control_name(cras_output));
1147
1148 strncpy(output->base.name, name, sizeof(output->base.name) - 1);
1149 set_node_initial_state(&output->base, aio->card_type);
1150 set_output_node_software_volume_needed(output, aio);
1151
1152 cras_iodev_add_node(&aio->base, &output->base);
1153
1154 check_auto_unplug_output_node(aio, &output->base, output->base.plugged);
1155 return output;
1156 }
1157
new_output_by_mixer_control(struct mixer_control * cras_output,void * callback_arg)1158 static void new_output_by_mixer_control(struct mixer_control *cras_output,
1159 void *callback_arg)
1160 {
1161 struct alsa_io *aio = (struct alsa_io *)callback_arg;
1162 char node_name[CRAS_IODEV_NAME_BUFFER_SIZE];
1163 const char *ctl_name;
1164
1165 ctl_name = cras_alsa_mixer_get_control_name(cras_output);
1166 if (!ctl_name)
1167 return;
1168
1169 if (aio->card_type == ALSA_CARD_TYPE_USB) {
1170 snprintf(node_name, sizeof(node_name), "%s: %s",
1171 aio->base.info.name, ctl_name);
1172 new_output(aio, cras_output, node_name);
1173 } else {
1174 new_output(aio, cras_output, ctl_name);
1175 }
1176 }
1177
check_auto_unplug_input_node(struct alsa_io * aio,struct cras_ionode * node,int plugged)1178 static void check_auto_unplug_input_node(struct alsa_io *aio,
1179 struct cras_ionode *node,
1180 int plugged)
1181 {
1182 struct cras_ionode *tmp;
1183 if (!auto_unplug_input_node(aio))
1184 return;
1185
1186 /* Auto unplug internal mic if any input node has already
1187 * been created */
1188 if (!strcmp(node->name, INTERNAL_MICROPHONE) && plugged) {
1189 DL_FOREACH(aio->base.nodes, tmp)
1190 if (tmp->plugged && (tmp != node))
1191 cras_iodev_set_node_attr(node,
1192 IONODE_ATTR_PLUGGED,
1193 0);
1194 } else {
1195 DL_FOREACH(aio->base.nodes, tmp)
1196 if (!strcmp(tmp->name, INTERNAL_MICROPHONE))
1197 cras_iodev_set_node_attr(tmp,
1198 IONODE_ATTR_PLUGGED,
1199 !plugged);
1200 }
1201 }
1202
new_input(struct alsa_io * aio,struct mixer_control * cras_input,const char * name)1203 static struct alsa_input_node *new_input(struct alsa_io *aio,
1204 struct mixer_control *cras_input, const char *name)
1205 {
1206 struct alsa_input_node *input;
1207 char *mic_positions;
1208 int err;
1209
1210 input = (struct alsa_input_node *)calloc(1, sizeof(*input));
1211 if (input == NULL) {
1212 syslog(LOG_ERR, "Out of memory when listing inputs.");
1213 return NULL;
1214 }
1215 input->base.dev = &aio->base;
1216 input->base.idx = aio->next_ionode_index++;
1217 input->base.stable_id = SuperFastHash(name,
1218 strlen(name),
1219 aio->base.info.stable_id);
1220 input->base.stable_id_new = SuperFastHash(name,
1221 strlen(name),
1222 aio->base.info.stable_id_new);
1223 input->mixer_input = cras_input;
1224 strncpy(input->base.name, name, sizeof(input->base.name) - 1);
1225 set_node_initial_state(&input->base, aio->card_type);
1226 set_input_node_software_volume_needed(input, aio);
1227 set_input_default_node_gain(input, aio);
1228
1229 if (aio->ucm) {
1230 /* Check mic positions only for internal mic. */
1231 if ((input->base.type == CRAS_NODE_TYPE_MIC) &&
1232 (input->base.position == NODE_POSITION_INTERNAL)) {
1233 mic_positions = ucm_get_mic_positions(aio->ucm);
1234 if (mic_positions) {
1235 strncpy(input->base.mic_positions,
1236 mic_positions,
1237 sizeof(input->base.mic_positions) - 1);
1238 free(mic_positions);
1239 }
1240 }
1241
1242 /* Check if channel map is specified in UCM. */
1243 input->channel_layout = (int8_t *)malloc(
1244 CRAS_CH_MAX * sizeof(*input->channel_layout));
1245 err = ucm_get_capture_chmap_for_dev(aio->ucm, name,
1246 input->channel_layout);
1247 if (err) {
1248 free(input->channel_layout);
1249 input->channel_layout = 0;
1250 }
1251 }
1252
1253 cras_iodev_add_node(&aio->base, &input->base);
1254 check_auto_unplug_input_node(aio, &input->base,
1255 input->base.plugged);
1256 return input;
1257 }
1258
new_input_by_mixer_control(struct mixer_control * cras_input,void * callback_arg)1259 static void new_input_by_mixer_control(struct mixer_control *cras_input,
1260 void *callback_arg)
1261 {
1262 struct alsa_io *aio = (struct alsa_io *)callback_arg;
1263 char node_name[CRAS_IODEV_NAME_BUFFER_SIZE];
1264 const char *ctl_name = cras_alsa_mixer_get_control_name(cras_input);
1265
1266 if (aio->card_type == ALSA_CARD_TYPE_USB) {
1267 snprintf(node_name , sizeof(node_name), "%s: %s",
1268 aio->base.info.name, ctl_name);
1269 new_input(aio, cras_input, node_name);
1270 } else {
1271 new_input(aio, cras_input, ctl_name);
1272 }
1273 }
1274
1275 /*
1276 * Finds the output node associated with the jack. Returns NULL if not found.
1277 */
get_output_node_from_jack(struct alsa_io * aio,const struct cras_alsa_jack * jack)1278 static struct alsa_output_node *get_output_node_from_jack(
1279 struct alsa_io *aio, const struct cras_alsa_jack *jack)
1280 {
1281 struct mixer_control *mixer_output;
1282 struct cras_ionode *node = NULL;
1283 struct alsa_output_node *aout = NULL;
1284
1285 /* Search by jack first. */
1286 DL_SEARCH_SCALAR_WITH_CAST(aio->base.nodes, node, aout,
1287 jack, jack);
1288 if (aout)
1289 return aout;
1290
1291 /* Search by mixer control next. */
1292 mixer_output = cras_alsa_jack_get_mixer_output(jack);
1293 if (mixer_output == NULL)
1294 return NULL;
1295
1296 DL_SEARCH_SCALAR_WITH_CAST(aio->base.nodes, node, aout,
1297 mixer_output, mixer_output);
1298 return aout;
1299 }
1300
get_input_node_from_jack(struct alsa_io * aio,const struct cras_alsa_jack * jack)1301 static struct alsa_input_node *get_input_node_from_jack(
1302 struct alsa_io *aio, const struct cras_alsa_jack *jack)
1303 {
1304 struct mixer_control *mixer_input;
1305 struct cras_ionode *node = NULL;
1306 struct alsa_input_node *ain = NULL;
1307
1308 mixer_input = cras_alsa_jack_get_mixer_input(jack);
1309 if (mixer_input == NULL) {
1310 DL_SEARCH_SCALAR_WITH_CAST(aio->base.nodes, node, ain,
1311 jack, jack);
1312 return ain;
1313 }
1314
1315 DL_SEARCH_SCALAR_WITH_CAST(aio->base.nodes, node, ain,
1316 mixer_input, mixer_input);
1317 return ain;
1318 }
1319
1320 /*
1321 * Returns the dsp name specified in the ucm config. If there is a dsp
1322 * name specified for the jack of the active node, use that. Otherwise
1323 * use the default dsp name for the alsa_io device.
1324 */
get_active_dsp_name(struct alsa_io * aio)1325 static const char *get_active_dsp_name(struct alsa_io *aio)
1326 {
1327 struct cras_ionode *node = aio->base.active_node;
1328 const struct cras_alsa_jack *jack;
1329
1330 if (node == NULL)
1331 return NULL;
1332
1333 if (aio->base.direction == CRAS_STREAM_OUTPUT)
1334 jack = ((struct alsa_output_node *) node)->jack;
1335 else
1336 jack = ((struct alsa_input_node *) node)->jack;
1337
1338 return cras_alsa_jack_get_dsp_name(jack) ? : aio->dsp_name_default;
1339 }
1340
1341 /*
1342 * Creates volume curve for the node associated with given jack.
1343 */
create_volume_curve_for_jack(const struct cras_card_config * config,const struct cras_alsa_jack * jack)1344 static struct cras_volume_curve *create_volume_curve_for_jack(
1345 const struct cras_card_config *config,
1346 const struct cras_alsa_jack *jack)
1347 {
1348 struct cras_volume_curve *curve;
1349 const char *name;
1350
1351 /* Use jack's UCM device name as key to get volume curve. */
1352 name = cras_alsa_jack_get_ucm_device(jack);
1353 curve = cras_card_config_get_volume_curve_for_control(config, name);
1354 if (curve)
1355 return curve;
1356
1357 /* Use alsa jack's name as key to get volume curve. */
1358 name = cras_alsa_jack_get_name(jack);
1359 curve = cras_card_config_get_volume_curve_for_control(config, name);
1360 if (curve)
1361 return curve;
1362
1363 return NULL;
1364 }
1365
1366 /*
1367 * Callback that is called when an output jack is plugged or unplugged.
1368 */
jack_output_plug_event(const struct cras_alsa_jack * jack,int plugged,void * arg)1369 static void jack_output_plug_event(const struct cras_alsa_jack *jack,
1370 int plugged,
1371 void *arg)
1372 {
1373 struct alsa_io *aio;
1374 struct alsa_output_node *node;
1375 const char *jack_name;
1376
1377 if (arg == NULL)
1378 return;
1379
1380 aio = (struct alsa_io *)arg;
1381 node = get_output_node_from_jack(aio, jack);
1382 jack_name = cras_alsa_jack_get_name(jack);
1383 if (!strcmp(jack_name, "Speaker Phantom Jack"))
1384 jack_name = INTERNAL_SPEAKER;
1385
1386 /* If there isn't a node for this jack, create one. */
1387 if (node == NULL) {
1388 if (aio->fully_specified) {
1389 /* When fully specified, can't have new nodes. */
1390 syslog(LOG_ERR, "No matching output node for jack %s!",
1391 jack_name);
1392 return;
1393 }
1394 node = new_output(aio, NULL, jack_name);
1395 if (node == NULL)
1396 return;
1397
1398 cras_alsa_jack_update_node_type(jack, &(node->base.type));
1399 }
1400
1401 if (!node->jack) {
1402 if (aio->fully_specified)
1403 syslog(LOG_ERR,
1404 "Jack '%s' was found to match output node '%s'."
1405 " Please fix your UCM configuration to match.",
1406 jack_name, node->base.name);
1407
1408 /* If we already have the node, associate with the jack. */
1409 node->jack = jack;
1410 if (node->volume_curve == NULL)
1411 node->volume_curve = create_volume_curve_for_jack(
1412 aio->config, jack);
1413 }
1414
1415 syslog(LOG_DEBUG, "%s plugged: %d, %s", jack_name, plugged,
1416 cras_alsa_mixer_get_control_name(node->mixer_output));
1417
1418 cras_alsa_jack_update_monitor_name(jack, node->base.name,
1419 sizeof(node->base.name));
1420 /* The name got from jack might be an invalid UTF8 string. */
1421 if (!is_utf8_string(node->base.name))
1422 drop_node_name(&node->base);
1423
1424 cras_iodev_set_node_attr(&node->base, IONODE_ATTR_PLUGGED, plugged);
1425
1426 check_auto_unplug_output_node(aio, &node->base, plugged);
1427 }
1428
1429 /*
1430 * Callback that is called when an input jack is plugged or unplugged.
1431 */
jack_input_plug_event(const struct cras_alsa_jack * jack,int plugged,void * arg)1432 static void jack_input_plug_event(const struct cras_alsa_jack *jack,
1433 int plugged,
1434 void *arg)
1435 {
1436 struct alsa_io *aio;
1437 struct alsa_input_node *node;
1438 struct mixer_control *cras_input;
1439 const char *jack_name;
1440
1441 if (arg == NULL)
1442 return;
1443 aio = (struct alsa_io *)arg;
1444 node = get_input_node_from_jack(aio, jack);
1445 jack_name = cras_alsa_jack_get_name(jack);
1446
1447 /* If there isn't a node for this jack, create one. */
1448 if (node == NULL) {
1449 if (aio->fully_specified) {
1450 /* When fully specified, can't have new nodes. */
1451 syslog(LOG_ERR, "No matching input node for jack %s!",
1452 jack_name);
1453 return;
1454 }
1455 cras_input = cras_alsa_jack_get_mixer_input(jack);
1456 node = new_input(aio, cras_input, jack_name);
1457 if (node == NULL)
1458 return;
1459 }
1460
1461 syslog(LOG_DEBUG, "%s plugged: %d, %s", jack_name, plugged,
1462 cras_alsa_mixer_get_control_name(node->mixer_input));
1463
1464 /* If we already have the node, associate with the jack. */
1465 if (!node->jack) {
1466 if (aio->fully_specified)
1467 syslog(LOG_ERR,
1468 "Jack '%s' was found to match input node '%s'."
1469 " Please fix your UCM configuration to match.",
1470 jack_name, node->base.name);
1471 node->jack = jack;
1472 }
1473
1474 cras_iodev_set_node_attr(&node->base, IONODE_ATTR_PLUGGED, plugged);
1475
1476 check_auto_unplug_input_node(aio, &node->base, plugged);
1477 }
1478
1479 /*
1480 * Sets the name of the given iodev, using the name and index of the card
1481 * combined with the device index and direction.
1482 */
set_iodev_name(struct cras_iodev * dev,const char * card_name,const char * dev_name,size_t card_index,size_t device_index,enum CRAS_ALSA_CARD_TYPE card_type,size_t usb_vid,size_t usb_pid,char * usb_serial_number)1483 static void set_iodev_name(struct cras_iodev *dev,
1484 const char *card_name,
1485 const char *dev_name,
1486 size_t card_index,
1487 size_t device_index,
1488 enum CRAS_ALSA_CARD_TYPE card_type,
1489 size_t usb_vid,
1490 size_t usb_pid,
1491 char *usb_serial_number)
1492 {
1493 snprintf(dev->info.name,
1494 sizeof(dev->info.name),
1495 "%s: %s:%zu,%zu",
1496 card_name,
1497 dev_name,
1498 card_index,
1499 device_index);
1500 dev->info.name[ARRAY_SIZE(dev->info.name) - 1] = '\0';
1501 syslog(LOG_DEBUG, "Add device name=%s", dev->info.name);
1502
1503 dev->info.stable_id = SuperFastHash(card_name,
1504 strlen(card_name),
1505 strlen(card_name));
1506 dev->info.stable_id = SuperFastHash(dev_name,
1507 strlen(dev_name),
1508 dev->info.stable_id);
1509
1510 switch (card_type) {
1511 case ALSA_CARD_TYPE_INTERNAL:
1512 dev->info.stable_id = SuperFastHash((const char *)&device_index,
1513 sizeof(device_index),
1514 dev->info.stable_id);
1515 dev->info.stable_id_new = dev->info.stable_id;
1516 break;
1517 case ALSA_CARD_TYPE_USB:
1518 dev->info.stable_id = SuperFastHash((const char *)&usb_vid,
1519 sizeof(usb_vid),
1520 dev->info.stable_id);
1521 dev->info.stable_id = SuperFastHash((const char *)&usb_pid,
1522 sizeof(usb_pid),
1523 dev->info.stable_id);
1524 dev->info.stable_id_new =
1525 SuperFastHash(usb_serial_number,
1526 strlen(usb_serial_number),
1527 dev->info.stable_id);
1528 break;
1529 default:
1530 dev->info.stable_id_new = dev->info.stable_id;
1531 break;
1532 }
1533 syslog(LOG_DEBUG, "Stable ID=%08x, New Stable ID=%08x",
1534 dev->info.stable_id, dev->info.stable_id_new);
1535 }
1536
get_fixed_rate(struct alsa_io * aio)1537 static int get_fixed_rate(struct alsa_io *aio)
1538 {
1539 const char *name;
1540
1541 if (aio->base.direction == CRAS_STREAM_OUTPUT) {
1542 struct alsa_output_node *active = get_active_output(aio);
1543 if (!active)
1544 return -ENOENT;
1545 name = active->base.name;
1546 } else {
1547 struct alsa_input_node *active = get_active_input(aio);
1548 if (!active)
1549 return -ENOENT;
1550 name = active->base.name;
1551 }
1552
1553 return ucm_get_sample_rate_for_dev(aio->ucm, name, aio->base.direction);
1554 }
1555
1556 /*
1557 * Updates the supported sample rates and channel counts.
1558 */
update_supported_formats(struct cras_iodev * iodev)1559 static int update_supported_formats(struct cras_iodev *iodev)
1560 {
1561 struct alsa_io *aio = (struct alsa_io *)iodev;
1562 int err;
1563 int fixed_rate;
1564
1565 free(iodev->supported_rates);
1566 iodev->supported_rates = NULL;
1567 free(iodev->supported_channel_counts);
1568 iodev->supported_channel_counts = NULL;
1569 free(iodev->supported_formats);
1570 iodev->supported_formats = NULL;
1571
1572 err = cras_alsa_fill_properties(aio->dev, aio->alsa_stream,
1573 &iodev->supported_rates,
1574 &iodev->supported_channel_counts,
1575 &iodev->supported_formats);
1576 if (err)
1577 return err;
1578
1579 if (aio->ucm) {
1580 /* Allow UCM to override supplied rates. */
1581 fixed_rate = get_fixed_rate(aio);
1582 if (fixed_rate > 0) {
1583 free(iodev->supported_rates);
1584 iodev->supported_rates = (size_t*)malloc(
1585 2 * sizeof(iodev->supported_rates[0]));
1586 iodev->supported_rates[0] = fixed_rate;
1587 iodev->supported_rates[1] = 0;
1588 }
1589 }
1590 return 0;
1591 }
1592
1593 /*
1594 * Builds software volume scalers for output nodes in the device.
1595 */
build_softvol_scalers(struct alsa_io * aio)1596 static void build_softvol_scalers(struct alsa_io *aio)
1597 {
1598 struct cras_ionode *ionode;
1599
1600 DL_FOREACH(aio->base.nodes, ionode) {
1601 struct alsa_output_node *aout;
1602 const struct cras_volume_curve *curve;
1603
1604 aout = (struct alsa_output_node *)ionode;
1605 curve = get_curve_for_output_node(aio, aout);
1606
1607 ionode->softvol_scalers = softvol_build_from_curve(curve);
1608 }
1609 }
1610
enable_active_ucm(struct alsa_io * aio,int plugged)1611 static void enable_active_ucm(struct alsa_io *aio, int plugged)
1612 {
1613 const struct cras_alsa_jack *jack;
1614 const char *name;
1615
1616 if (aio->base.direction == CRAS_STREAM_OUTPUT) {
1617 struct alsa_output_node *active = get_active_output(aio);
1618 if (!active)
1619 return;
1620 name = active->base.name;
1621 jack = active->jack;
1622 } else {
1623 struct alsa_input_node *active = get_active_input(aio);
1624 if (!active)
1625 return;
1626 name = active->base.name;
1627 jack = active->jack;
1628 }
1629
1630 if (jack)
1631 cras_alsa_jack_enable_ucm(jack, plugged);
1632 else if (aio->ucm)
1633 ucm_set_enabled(aio->ucm, name, plugged);
1634 }
1635
fill_whole_buffer_with_zeros(struct cras_iodev * iodev)1636 static int fill_whole_buffer_with_zeros(struct cras_iodev *iodev)
1637 {
1638 struct alsa_io *aio = (struct alsa_io *)iodev;
1639 int rc;
1640 uint8_t *dst = NULL;
1641 size_t format_bytes;
1642
1643 /* Fill whole buffer with zeros. */
1644 rc = cras_alsa_mmap_get_whole_buffer(
1645 aio->handle, &dst, &aio->num_underruns);
1646
1647 if (rc < 0) {
1648 syslog(LOG_ERR, "Failed to get whole buffer: %s",
1649 snd_strerror(rc));
1650 return rc;
1651 }
1652
1653 format_bytes = cras_get_format_bytes(iodev->format);
1654 memset(dst, 0, iodev->buffer_size * format_bytes);
1655
1656 return 0;
1657 }
1658
adjust_appl_ptr(struct cras_iodev * odev)1659 static int adjust_appl_ptr(struct cras_iodev *odev)
1660 {
1661 struct alsa_io *aio = (struct alsa_io *)odev;
1662
1663 /* Move appl_ptr to min_buffer_level + min_cb_level frames ahead of
1664 * hw_ptr when resuming from free run or adjusting appl_ptr from
1665 * underrun. */
1666 return cras_alsa_resume_appl_ptr(
1667 aio->handle,
1668 odev->min_buffer_level + odev->min_cb_level);
1669 }
1670
alsa_output_underrun(struct cras_iodev * odev)1671 static int alsa_output_underrun(struct cras_iodev *odev)
1672 {
1673 int rc;
1674 /* Fill whole buffer with zeros. This avoids samples left in buffer causing
1675 * noise when device plays them. */
1676 rc = fill_whole_buffer_with_zeros(odev);
1677 if (rc)
1678 return rc;
1679 /* Adjust appl_ptr to leave underrun. */
1680 return adjust_appl_ptr(odev);
1681 }
1682
possibly_enter_free_run(struct cras_iodev * odev)1683 static int possibly_enter_free_run(struct cras_iodev *odev)
1684 {
1685 struct alsa_io *aio = (struct alsa_io *)odev;
1686 int rc;
1687 unsigned int hw_level, fr_to_write;
1688 unsigned int target_hw_level = odev->min_cb_level * 2;
1689 struct timespec hw_tstamp;
1690
1691 if (aio->is_free_running)
1692 return 0;
1693
1694 /* Check if all valid samples are played.
1695 * If all valid samples are played, fill whole buffer with zeros. */
1696 rc = cras_iodev_frames_queued(odev, &hw_tstamp);
1697 if (rc < 0)
1698 return rc;
1699 hw_level = rc;
1700
1701 if (hw_level < aio->filled_zeros_for_draining || hw_level == 0) {
1702 rc = fill_whole_buffer_with_zeros(odev);
1703 if (rc < 0)
1704 return rc;
1705 aio->is_free_running = 1;
1706 return 0;
1707 }
1708
1709 /* Fill some zeros to drain valid samples. */
1710 fr_to_write = cras_iodev_buffer_avail(odev, hw_level);
1711
1712 if (hw_level <= target_hw_level) {
1713 fr_to_write = MIN(target_hw_level - hw_level, fr_to_write);
1714 rc = cras_iodev_fill_odev_zeros(odev, fr_to_write);
1715 if (rc)
1716 return rc;
1717 aio->filled_zeros_for_draining += fr_to_write;
1718 }
1719
1720 return 0;
1721 }
1722
leave_free_run(struct cras_iodev * odev)1723 static int leave_free_run(struct cras_iodev *odev)
1724 {
1725 struct alsa_io *aio = (struct alsa_io *)odev;
1726 int rc;
1727
1728 if (!aio->is_free_running)
1729 return 0;
1730
1731 rc = adjust_appl_ptr(odev);
1732 if (rc) {
1733 syslog(LOG_ERR, "device %s failed to leave free run, rc = %d",
1734 odev->info.name, rc);
1735 return rc;
1736 }
1737 aio->is_free_running = 0;
1738 aio->filled_zeros_for_draining = 0;
1739
1740 return 0;
1741 }
1742
1743 /*
1744 * Free run state is the optimization of no_stream playback on alsa_io.
1745 * The whole buffer will be filled with zeros. Device can play these zeros
1746 * indefinitely. When there is new meaningful sample, appl_ptr should be
1747 * resumed to some distance ahead of hw_ptr.
1748 */
no_stream(struct cras_iodev * odev,int enable)1749 static int no_stream(struct cras_iodev *odev, int enable)
1750 {
1751 if (enable)
1752 return possibly_enter_free_run(odev);
1753 else
1754 return leave_free_run(odev);
1755 }
1756
output_should_wake(const struct cras_iodev * odev)1757 static int output_should_wake(const struct cras_iodev *odev)
1758 {
1759 struct alsa_io *aio = (struct alsa_io *)odev;
1760 if (aio->is_free_running)
1761 return 0;
1762 else
1763 return ((cras_iodev_state(odev) ==
1764 CRAS_IODEV_STATE_NO_STREAM_RUN) ||
1765 (cras_iodev_state(odev) ==
1766 CRAS_IODEV_STATE_NORMAL_RUN));
1767 }
1768
get_num_underruns(const struct cras_iodev * iodev)1769 static unsigned int get_num_underruns(const struct cras_iodev *iodev)
1770 {
1771 const struct alsa_io *aio = (const struct alsa_io *)iodev;
1772 return aio->num_underruns;
1773 }
1774
get_num_severe_underruns(const struct cras_iodev * iodev)1775 static unsigned int get_num_severe_underruns(const struct cras_iodev *iodev)
1776 {
1777 const struct alsa_io *aio = (const struct alsa_io *)iodev;
1778 return aio->num_severe_underruns;
1779 }
1780
set_default_hotword_model(struct cras_iodev * iodev)1781 static void set_default_hotword_model(struct cras_iodev *iodev)
1782 {
1783 const char *default_model = "en_us";
1784 cras_node_id_t node_id;
1785
1786 if (!iodev->active_node ||
1787 iodev->active_node->type != CRAS_NODE_TYPE_HOTWORD)
1788 return;
1789
1790 node_id = cras_make_node_id(iodev->info.idx, iodev->active_node->idx);
1791 /* This is a no-op if the default_model is not supported */
1792 cras_iodev_list_set_hotword_model(node_id, default_model);
1793 }
1794
1795 /*
1796 * Exported Interface.
1797 */
1798
alsa_iodev_create(size_t card_index,const char * card_name,size_t device_index,const char * dev_name,const char * dev_id,enum CRAS_ALSA_CARD_TYPE card_type,int is_first,struct cras_alsa_mixer * mixer,const struct cras_card_config * config,struct cras_use_case_mgr * ucm,snd_hctl_t * hctl,enum CRAS_STREAM_DIRECTION direction,size_t usb_vid,size_t usb_pid,char * usb_serial_number)1799 struct cras_iodev *alsa_iodev_create(size_t card_index,
1800 const char *card_name,
1801 size_t device_index,
1802 const char *dev_name,
1803 const char *dev_id,
1804 enum CRAS_ALSA_CARD_TYPE card_type,
1805 int is_first,
1806 struct cras_alsa_mixer *mixer,
1807 const struct cras_card_config *config,
1808 struct cras_use_case_mgr *ucm,
1809 snd_hctl_t *hctl,
1810 enum CRAS_STREAM_DIRECTION direction,
1811 size_t usb_vid,
1812 size_t usb_pid,
1813 char *usb_serial_number)
1814 {
1815 struct alsa_io *aio;
1816 struct cras_iodev *iodev;
1817
1818 if (direction != CRAS_STREAM_INPUT && direction != CRAS_STREAM_OUTPUT)
1819 return NULL;
1820
1821 aio = (struct alsa_io *)calloc(1, sizeof(*aio));
1822 if (!aio)
1823 return NULL;
1824 iodev = &aio->base;
1825 iodev->direction = direction;
1826
1827 aio->device_index = device_index;
1828 aio->card_type = card_type;
1829 aio->is_first = is_first;
1830 aio->handle = NULL;
1831 aio->num_severe_underruns = 0;
1832 if (dev_name) {
1833 aio->dev_name = strdup(dev_name);
1834 if (!aio->dev_name)
1835 goto cleanup_iodev;
1836 }
1837 if (dev_id) {
1838 aio->dev_id = strdup(dev_id);
1839 if (!aio->dev_id)
1840 goto cleanup_iodev;
1841 }
1842 aio->is_free_running = 0;
1843 aio->filled_zeros_for_draining = 0;
1844 aio->dev = (char *)malloc(MAX_ALSA_DEV_NAME_LENGTH);
1845 if (aio->dev == NULL)
1846 goto cleanup_iodev;
1847 snprintf(aio->dev,
1848 MAX_ALSA_DEV_NAME_LENGTH,
1849 "hw:%zu,%zu",
1850 card_index,
1851 device_index);
1852
1853 if (direction == CRAS_STREAM_INPUT) {
1854 aio->alsa_stream = SND_PCM_STREAM_CAPTURE;
1855 aio->base.set_capture_gain = set_alsa_capture_gain;
1856 aio->base.set_capture_mute = set_alsa_capture_gain;
1857 } else {
1858 aio->alsa_stream = SND_PCM_STREAM_PLAYBACK;
1859 aio->base.set_volume = set_alsa_volume;
1860 aio->base.set_mute = set_alsa_mute;
1861 aio->base.output_underrun = alsa_output_underrun;
1862 }
1863 iodev->open_dev = open_dev;
1864 iodev->close_dev = close_dev;
1865 iodev->update_supported_formats = update_supported_formats;
1866 iodev->frames_queued = frames_queued;
1867 iodev->delay_frames = delay_frames;
1868 iodev->get_buffer = get_buffer;
1869 iodev->put_buffer = put_buffer;
1870 iodev->flush_buffer = flush_buffer;
1871 iodev->start = start;
1872 iodev->update_active_node = update_active_node;
1873 iodev->update_channel_layout = update_channel_layout;
1874 iodev->set_hotword_model = set_hotword_model;
1875 iodev->get_hotword_models = get_hotword_models;
1876 iodev->no_stream = no_stream;
1877 iodev->output_should_wake = output_should_wake;
1878 iodev->get_num_underruns = get_num_underruns;
1879 iodev->get_num_severe_underruns = get_num_severe_underruns;
1880 iodev->set_swap_mode_for_node = cras_iodev_dsp_set_swap_mode_for_node;
1881
1882 if (card_type == ALSA_CARD_TYPE_USB)
1883 iodev->min_buffer_level = USB_EXTRA_BUFFER_FRAMES;
1884
1885 iodev->ramp = cras_ramp_create();
1886 if (iodev->ramp == NULL)
1887 goto cleanup_iodev;
1888
1889 aio->mixer = mixer;
1890 aio->config = config;
1891 if (direction == CRAS_STREAM_OUTPUT) {
1892 aio->default_volume_curve =
1893 cras_card_config_get_volume_curve_for_control(
1894 config, "Default");
1895 if (aio->default_volume_curve == NULL)
1896 aio->default_volume_curve =
1897 cras_volume_curve_create_default();
1898 }
1899 aio->ucm = ucm;
1900 if (ucm) {
1901 unsigned int level;
1902
1903 aio->dsp_name_default = ucm_get_dsp_name_default(ucm,
1904 direction);
1905 /* Set callback for swap mode if it is supported
1906 * in ucm modifier. */
1907 if (ucm_swap_mode_exists(ucm))
1908 aio->base.set_swap_mode_for_node =
1909 set_alsa_node_swapped;
1910
1911 level = ucm_get_min_buffer_level(ucm);
1912 if (level && direction == CRAS_STREAM_OUTPUT)
1913 iodev->min_buffer_level = level;
1914
1915 aio->enable_htimestamp =
1916 ucm_get_enable_htimestamp_flag(ucm);
1917 }
1918
1919 set_iodev_name(iodev, card_name, dev_name, card_index, device_index,
1920 card_type, usb_vid, usb_pid, usb_serial_number);
1921
1922 aio->jack_list =
1923 cras_alsa_jack_list_create(
1924 card_index,
1925 card_name,
1926 device_index,
1927 is_first,
1928 mixer,
1929 ucm,
1930 hctl,
1931 direction,
1932 direction == CRAS_STREAM_OUTPUT ?
1933 jack_output_plug_event :
1934 jack_input_plug_event,
1935 aio);
1936 if (!aio->jack_list)
1937 goto cleanup_iodev;
1938
1939 /* HDMI outputs don't have volume adjustment, do it in software. */
1940 if (direction == CRAS_STREAM_OUTPUT && strstr(dev_name, HDMI))
1941 iodev->software_volume_needed = 1;
1942
1943 /* Add this now so that cleanup of the iodev (in case of error or card
1944 * card removal will function as expected. */
1945 if (direction == CRAS_STREAM_OUTPUT)
1946 cras_iodev_list_add_output(&aio->base);
1947 else
1948 cras_iodev_list_add_input(&aio->base);
1949 return &aio->base;
1950
1951 cleanup_iodev:
1952 free_alsa_iodev_resources(aio);
1953 free(aio);
1954 return NULL;
1955 }
1956
alsa_iodev_legacy_complete_init(struct cras_iodev * iodev)1957 int alsa_iodev_legacy_complete_init(struct cras_iodev *iodev)
1958 {
1959 struct alsa_io *aio = (struct alsa_io *)iodev;
1960 const char *dev_name;
1961 const char *dev_id;
1962 enum CRAS_STREAM_DIRECTION direction;
1963 int err;
1964 int is_first;
1965 struct cras_alsa_mixer *mixer;
1966
1967 if (!aio)
1968 return -EINVAL;
1969 direction = iodev->direction;
1970 dev_name = aio->dev_name;
1971 dev_id = aio->dev_id;
1972 is_first = aio->is_first;
1973 mixer = aio->mixer;
1974
1975 /* Create output nodes for mixer controls, such as Headphone
1976 * and Speaker, only for the first device. */
1977 if (direction == CRAS_STREAM_OUTPUT && is_first)
1978 cras_alsa_mixer_list_outputs(mixer,
1979 new_output_by_mixer_control, aio);
1980 else if (direction == CRAS_STREAM_INPUT && is_first)
1981 cras_alsa_mixer_list_inputs(mixer,
1982 new_input_by_mixer_control, aio);
1983
1984 err = cras_alsa_jack_list_find_jacks_by_name_matching(aio->jack_list);
1985 if (err)
1986 return err;
1987
1988 /* Create nodes for jacks that aren't associated with an
1989 * already existing node. Get an initial read of the jacks for
1990 * this device. */
1991 cras_alsa_jack_list_report(aio->jack_list);
1992
1993 /* Make a default node if there is still no node for this
1994 * device, or we still don't have the "Speaker"/"Internal Mic"
1995 * node for the first internal device. Note that the default
1996 * node creation can be supressed by UCM flags for platforms
1997 * which really don't have an internal device. */
1998 if ((direction == CRAS_STREAM_OUTPUT) &&
1999 !no_create_default_output_node(aio)) {
2000 if (first_internal_device(aio) &&
2001 !has_node(aio, INTERNAL_SPEAKER) &&
2002 !has_node(aio, HDMI)) {
2003 if (strstr(aio->base.info.name, HDMI))
2004 new_output(aio, NULL, HDMI);
2005 else
2006 new_output(aio, NULL, INTERNAL_SPEAKER);
2007 } else if (!aio->base.nodes) {
2008 new_output(aio, NULL, DEFAULT);
2009 }
2010 } else if ((direction == CRAS_STREAM_INPUT) &&
2011 !no_create_default_input_node(aio)) {
2012 if (first_internal_device(aio) &&
2013 !has_node(aio, INTERNAL_MICROPHONE))
2014 new_input(aio, NULL, INTERNAL_MICROPHONE);
2015 else if (strstr(dev_name, KEYBOARD_MIC))
2016 new_input(aio, NULL, KEYBOARD_MIC);
2017 else if (dev_id && strstr(dev_id, HOTWORD_DEV))
2018 new_input(aio, NULL, HOTWORD_DEV);
2019 else if (!aio->base.nodes)
2020 new_input(aio, NULL, DEFAULT);
2021 }
2022
2023 /* Build software volume scalers. */
2024 if (direction == CRAS_STREAM_OUTPUT)
2025 build_softvol_scalers(aio);
2026
2027 /* Set the active node as the best node we have now. */
2028 alsa_iodev_set_active_node(&aio->base,
2029 first_plugged_node(&aio->base),
2030 0);
2031
2032 /* Set plugged for the first USB device per card when it appears. */
2033 if (aio->card_type == ALSA_CARD_TYPE_USB && is_first)
2034 cras_iodev_set_node_attr(iodev->active_node,
2035 IONODE_ATTR_PLUGGED, 1);
2036
2037 set_default_hotword_model(iodev);
2038
2039 return 0;
2040 }
2041
alsa_iodev_ucm_add_nodes_and_jacks(struct cras_iodev * iodev,struct ucm_section * section)2042 int alsa_iodev_ucm_add_nodes_and_jacks(struct cras_iodev *iodev,
2043 struct ucm_section *section)
2044 {
2045 struct alsa_io *aio = (struct alsa_io *)iodev;
2046 struct mixer_control *control;
2047 struct alsa_input_node *input_node = NULL;
2048 struct cras_alsa_jack *jack;
2049 struct alsa_output_node *output_node = NULL;
2050 int rc;
2051
2052 if (!aio || !section)
2053 return -EINVAL;
2054 if ((uint32_t)section->dev_idx != aio->device_index)
2055 return -EINVAL;
2056
2057 /* This iodev is fully specified. Avoid automatic node creation. */
2058 aio->fully_specified = 1;
2059
2060 /* Check here in case the DmaPeriodMicrosecs flag has only been
2061 * specified on one of many device entries with the same PCM. */
2062 if (!aio->dma_period_set_microsecs)
2063 aio->dma_period_set_microsecs =
2064 ucm_get_dma_period_for_dev(aio->ucm, section->name);
2065
2066 /* Create a node matching this section. If there is a matching
2067 * control use that, otherwise make a node without a control. */
2068 control = cras_alsa_mixer_get_control_for_section(aio->mixer, section);
2069 if (iodev->direction == CRAS_STREAM_OUTPUT) {
2070 output_node = new_output(aio, control, section->name);
2071 if (!output_node)
2072 return -ENOMEM;
2073 } else if (iodev->direction == CRAS_STREAM_INPUT) {
2074 input_node = new_input(aio, control, section->name);
2075 if (!input_node)
2076 return -ENOMEM;
2077 }
2078
2079 /* Find any jack controls for this device. */
2080 rc = cras_alsa_jack_list_add_jack_for_section(
2081 aio->jack_list, section, &jack);
2082 if (rc)
2083 return rc;
2084
2085 /* Associated the jack with the node. */
2086 if (jack) {
2087 if (output_node) {
2088 output_node->jack = jack;
2089 if (!output_node->volume_curve)
2090 output_node->volume_curve =
2091 create_volume_curve_for_jack(
2092 aio->config, jack);
2093 } else if (input_node) {
2094 input_node->jack = jack;
2095 }
2096 }
2097 return 0;
2098 }
2099
alsa_iodev_ucm_complete_init(struct cras_iodev * iodev)2100 void alsa_iodev_ucm_complete_init(struct cras_iodev *iodev)
2101 {
2102 struct alsa_io *aio = (struct alsa_io *)iodev;
2103
2104 if (!iodev)
2105 return;
2106
2107 /* Get an initial read of the jacks for this device. */
2108 cras_alsa_jack_list_report(aio->jack_list);
2109
2110 /* Build software volume scaler. */
2111 if (iodev->direction == CRAS_STREAM_OUTPUT)
2112 build_softvol_scalers(aio);
2113
2114 /* Set the active node as the best node we have now. */
2115 alsa_iodev_set_active_node(&aio->base,
2116 first_plugged_node(&aio->base),
2117 0);
2118
2119 /* Set plugged for the first USB device per card when it appears. */
2120 if (aio->card_type == ALSA_CARD_TYPE_USB && aio->is_first)
2121 cras_iodev_set_node_attr(iodev->active_node,
2122 IONODE_ATTR_PLUGGED, 1);
2123
2124 set_default_hotword_model(iodev);
2125 }
2126
alsa_iodev_destroy(struct cras_iodev * iodev)2127 void alsa_iodev_destroy(struct cras_iodev *iodev)
2128 {
2129 struct alsa_io *aio = (struct alsa_io *)iodev;
2130 int rc;
2131
2132 cras_alsa_jack_list_destroy(aio->jack_list);
2133 if (iodev->direction == CRAS_STREAM_INPUT)
2134 rc = cras_iodev_list_rm_input(iodev);
2135 else
2136 rc = cras_iodev_list_rm_output(iodev);
2137
2138 if (rc == -EBUSY) {
2139 syslog(LOG_ERR, "Failed to remove iodev %s", iodev->info.name);
2140 return;
2141 }
2142
2143 /* Free resources when device successfully removed. */
2144 free_alsa_iodev_resources(aio);
2145 cras_volume_curve_destroy(aio->default_volume_curve);
2146 free(iodev);
2147 }
2148
alsa_iodev_index(struct cras_iodev * iodev)2149 unsigned alsa_iodev_index(struct cras_iodev *iodev)
2150 {
2151 struct alsa_io *aio = (struct alsa_io *)iodev;
2152 return aio->device_index;
2153 }
2154
alsa_iodev_has_hctl_jacks(struct cras_iodev * iodev)2155 int alsa_iodev_has_hctl_jacks(struct cras_iodev *iodev)
2156 {
2157 struct alsa_io *aio = (struct alsa_io *)iodev;
2158 return cras_alsa_jack_list_has_hctl_jacks(aio->jack_list);
2159 }
2160
alsa_iodev_unmute_node(struct alsa_io * aio,struct cras_ionode * ionode)2161 static void alsa_iodev_unmute_node(struct alsa_io *aio,
2162 struct cras_ionode *ionode)
2163 {
2164 struct alsa_output_node *active = (struct alsa_output_node *)ionode;
2165 struct mixer_control *mixer = active->mixer_output;
2166 struct alsa_output_node *output;
2167 struct cras_ionode *node;
2168
2169 /* If this node is associated with mixer output, unmute the
2170 * active mixer output and mute all others, otherwise just set
2171 * the node as active and set the volume curve. */
2172 if (mixer) {
2173 set_alsa_mute_control(aio, 1);
2174 /* Unmute the active mixer output, mute all others. */
2175 DL_FOREACH(aio->base.nodes, node) {
2176 output = (struct alsa_output_node *)node;
2177 if (output->mixer_output)
2178 cras_alsa_mixer_set_output_active_state(
2179 output->mixer_output, node == ionode);
2180 }
2181 }
2182 }
2183
alsa_iodev_set_active_node(struct cras_iodev * iodev,struct cras_ionode * ionode,unsigned dev_enabled)2184 static int alsa_iodev_set_active_node(struct cras_iodev *iodev,
2185 struct cras_ionode *ionode,
2186 unsigned dev_enabled)
2187 {
2188 struct alsa_io *aio = (struct alsa_io *)iodev;
2189
2190 if (iodev->active_node == ionode) {
2191 enable_active_ucm(aio, dev_enabled);
2192 init_device_settings(aio);
2193 return 0;
2194 }
2195
2196 /* Disable jack ucm before switching node. */
2197 enable_active_ucm(aio, 0);
2198 if (dev_enabled && (iodev->direction == CRAS_STREAM_OUTPUT))
2199 alsa_iodev_unmute_node(aio, ionode);
2200
2201 cras_iodev_set_active_node(iodev, ionode);
2202 aio->base.dsp_name = get_active_dsp_name(aio);
2203 cras_iodev_update_dsp(iodev);
2204 enable_active_ucm(aio, dev_enabled);
2205 /* Setting the volume will also unmute if the system isn't muted. */
2206 init_device_settings(aio);
2207 return 0;
2208 }
2209