Commit c4116ae717d6456884232642bae806125d39f1d3
Committed by
Jaroslav Kysela
1 parent
208eee2a9d
Exists in
master
and in
7 other branches
[ALSA] Fix misc bugs in i2c/others/ak4114.c
* correct register for 'IEC958 Non-PCM Bitstream', 'IEC958 DTS Bitstream' to use AK4114_REG_RCS0 * correct check for control name: if (strstr(kctl->id.name, 'Playback')) * correct check: if (!chip->init) in snd_ak4114_external_rate * added PCM control 'IEC958 PPL Lock Status' Signed-off-by: Pavel Hofman <dustin@seznam.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Showing 2 changed files with 16 additions and 5 deletions Side-by-side Diff
include/sound/ak4114.h
... | ... | @@ -158,7 +158,7 @@ |
158 | 158 | #define AK4114_CHECK_NO_STAT (1<<0) /* no statistics */ |
159 | 159 | #define AK4114_CHECK_NO_RATE (1<<1) /* no rate check */ |
160 | 160 | |
161 | -#define AK4114_CONTROLS 14 | |
161 | +#define AK4114_CONTROLS 15 | |
162 | 162 | |
163 | 163 | typedef void (ak4114_write_t)(void *private_data, unsigned char addr, unsigned char data); |
164 | 164 | typedef unsigned char (ak4114_read_t)(void *private_data, unsigned char addr); |
sound/i2c/other/ak4114.c
... | ... | @@ -435,7 +435,7 @@ |
435 | 435 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, |
436 | 436 | .info = snd_ak4114_in_bit_info, |
437 | 437 | .get = snd_ak4114_in_bit_get, |
438 | - .private_value = (6<<8) | AK4114_REG_RCS1, | |
438 | + .private_value = (6<<8) | AK4114_REG_RCS0, | |
439 | 439 | }, |
440 | 440 | { |
441 | 441 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
... | ... | @@ -443,7 +443,15 @@ |
443 | 443 | .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, |
444 | 444 | .info = snd_ak4114_in_bit_info, |
445 | 445 | .get = snd_ak4114_in_bit_get, |
446 | - .private_value = (3<<8) | AK4114_REG_RCS1, | |
446 | + .private_value = (3<<8) | AK4114_REG_RCS0, | |
447 | +}, | |
448 | +{ | |
449 | + .iface = SNDRV_CTL_ELEM_IFACE_PCM, | |
450 | + .name = "IEC958 PPL Lock Status", | |
451 | + .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, | |
452 | + .info = snd_ak4114_in_bit_info, | |
453 | + .get = snd_ak4114_in_bit_get, | |
454 | + .private_value = (1<<31) | (4<<8) | AK4114_REG_RCS0, | |
447 | 455 | } |
448 | 456 | }; |
449 | 457 | |
... | ... | @@ -462,7 +470,7 @@ |
462 | 470 | kctl = snd_ctl_new1(&snd_ak4114_iec958_controls[idx], ak4114); |
463 | 471 | if (kctl == NULL) |
464 | 472 | return -ENOMEM; |
465 | - if (!strstr(kctl->id.name, "Playback")) { | |
473 | + if (strstr(kctl->id.name, "Playback")) { | |
466 | 474 | if (ply_substream == NULL) { |
467 | 475 | snd_ctl_free_one(kctl); |
468 | 476 | ak4114->kctls[idx] = NULL; |
... | ... | @@ -526,6 +534,9 @@ |
526 | 534 | if (c0 & AK4114_DTSCD) |
527 | 535 | snd_ctl_notify(ak4114->card, SNDRV_CTL_EVENT_MASK_VALUE, |
528 | 536 | &ak4114->kctls[13]->id); |
537 | + if (c0 & AK4114_UNLCK) | |
538 | + snd_ctl_notify(ak4114->card, SNDRV_CTL_EVENT_MASK_VALUE, | |
539 | + &ak4114->kctls[14]->id); | |
529 | 540 | } |
530 | 541 | |
531 | 542 | int snd_ak4114_external_rate(struct ak4114 *ak4114) |
... | ... | @@ -587,7 +598,7 @@ |
587 | 598 | { |
588 | 599 | struct ak4114 *chip = container_of(work, struct ak4114, work.work); |
589 | 600 | |
590 | - if (chip->init) | |
601 | + if (!chip->init) | |
591 | 602 | snd_ak4114_check_rate_and_errors(chip, 0); |
592 | 603 | |
593 | 604 | schedule_delayed_work(&chip->work, HZ / 10); |