Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: sonicvibes: Use guard() for spin locks

Clean up the code using guard() for spin locks.

Merely code refactoring, and no behavior change.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20250829144342.4290-57-tiwai@suse.de

+44 -69
+44 -69
sound/pci/sonicvibes.c
··· 303 303 unsigned char reg, 304 304 unsigned char value) 305 305 { 306 - unsigned long flags; 307 - 308 - spin_lock_irqsave(&sonic->reg_lock, flags); 306 + guard(spinlock_irqsave)(&sonic->reg_lock); 309 307 outb(reg, SV_REG(sonic, INDEX)); 310 308 udelay(10); 311 309 outb(value, SV_REG(sonic, DATA)); 312 310 udelay(10); 313 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 314 311 } 315 312 316 313 static unsigned char snd_sonicvibes_in1(struct sonicvibes * sonic, unsigned char reg) ··· 323 326 324 327 static unsigned char snd_sonicvibes_in(struct sonicvibes * sonic, unsigned char reg) 325 328 { 326 - unsigned long flags; 327 329 unsigned char value; 328 330 329 - spin_lock_irqsave(&sonic->reg_lock, flags); 331 + guard(spinlock_irqsave)(&sonic->reg_lock); 330 332 outb(reg, SV_REG(sonic, INDEX)); 331 333 udelay(10); 332 334 value = inb(SV_REG(sonic, DATA)); 333 335 udelay(10); 334 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 335 336 return value; 336 337 } 337 338 ··· 443 448 unsigned char mask, 444 449 unsigned char value) 445 450 { 446 - unsigned long flags; 447 - 448 - spin_lock_irqsave(&sonic->reg_lock, flags); 451 + guard(spinlock_irqsave)(&sonic->reg_lock); 449 452 outb(SV_MCE | SV_IREG_DMA_DATA_FMT, SV_REG(sonic, INDEX)); 450 453 if (mask) { 451 454 sonic->format = inb(SV_REG(sonic, DATA)); ··· 454 461 udelay(10); 455 462 outb(0, SV_REG(sonic, INDEX)); 456 463 udelay(10); 457 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 458 464 } 459 465 460 466 static void snd_sonicvibes_pll(unsigned int rate, ··· 498 506 unsigned char reg, 499 507 unsigned int rate) 500 508 { 501 - unsigned long flags; 502 509 unsigned int r, m, n; 503 510 504 511 snd_sonicvibes_pll(rate, &r, &m, &n); 505 512 if (sonic != NULL) { 506 - spin_lock_irqsave(&sonic->reg_lock, flags); 513 + guard(spinlock_irqsave)(&sonic->reg_lock); 507 514 snd_sonicvibes_out1(sonic, reg, m); 508 515 snd_sonicvibes_out1(sonic, reg + 1, r | n); 509 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 510 516 } 511 517 } 512 518 513 519 static void snd_sonicvibes_set_adc_rate(struct sonicvibes * sonic, unsigned int rate) 514 520 { 515 - unsigned long flags; 516 521 unsigned int div; 517 522 unsigned char clock; 518 523 ··· 522 533 clock = 0x00; 523 534 snd_sonicvibes_setpll(sonic, SV_IREG_ADC_PLL, rate); 524 535 } 525 - spin_lock_irqsave(&sonic->reg_lock, flags); 536 + guard(spinlock_irqsave)(&sonic->reg_lock); 526 537 snd_sonicvibes_out1(sonic, SV_IREG_ADC_ALT_RATE, (div - 1) << 4); 527 538 snd_sonicvibes_out1(sonic, SV_IREG_ADC_CLOCK, clock); 528 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 529 539 } 530 540 531 541 static int snd_sonicvibes_hw_constraint_dac_rate(struct snd_pcm_hw_params *params, ··· 555 567 static void snd_sonicvibes_set_dac_rate(struct sonicvibes * sonic, unsigned int rate) 556 568 { 557 569 unsigned int div; 558 - unsigned long flags; 559 570 560 571 div = DIV_ROUND_CLOSEST(rate * 65536, SV_FULLRATE); 561 572 if (div > 65535) 562 573 div = 65535; 563 - spin_lock_irqsave(&sonic->reg_lock, flags); 574 + guard(spinlock_irqsave)(&sonic->reg_lock); 564 575 snd_sonicvibes_out1(sonic, SV_IREG_PCM_RATE_HIGH, div >> 8); 565 576 snd_sonicvibes_out1(sonic, SV_IREG_PCM_RATE_LOW, div); 566 - spin_unlock_irqrestore(&sonic->reg_lock, flags); 567 577 } 568 578 569 579 static int snd_sonicvibes_trigger(struct sonicvibes * sonic, int what, int cmd) 570 580 { 571 - int result = 0; 572 - 573 - spin_lock(&sonic->reg_lock); 581 + guard(spinlock)(&sonic->reg_lock); 574 582 if (cmd == SNDRV_PCM_TRIGGER_START) { 575 583 if (!(sonic->enable & what)) { 576 584 sonic->enable |= what; ··· 578 594 snd_sonicvibes_out1(sonic, SV_IREG_PC_ENABLE, sonic->enable); 579 595 } 580 596 } else { 581 - result = -EINVAL; 597 + return -EINVAL; 582 598 } 583 - spin_unlock(&sonic->reg_lock); 584 - return result; 599 + return 0; 585 600 } 586 601 587 602 static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id) ··· 611 628 unsigned char udreg; 612 629 int vol, oleft, oright, mleft, mright; 613 630 614 - spin_lock(&sonic->reg_lock); 615 - udreg = snd_sonicvibes_in1(sonic, SV_IREG_UD_BUTTON); 616 - vol = udreg & 0x3f; 617 - if (!(udreg & 0x40)) 618 - vol = -vol; 619 - oleft = mleft = snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ANALOG); 620 - oright = mright = snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ANALOG); 621 - oleft &= 0x1f; 622 - oright &= 0x1f; 623 - oleft += vol; 624 - if (oleft < 0) 625 - oleft = 0; 626 - if (oleft > 0x1f) 627 - oleft = 0x1f; 628 - oright += vol; 629 - if (oright < 0) 630 - oright = 0; 631 - if (oright > 0x1f) 632 - oright = 0x1f; 633 - if (udreg & 0x80) { 634 - mleft ^= 0x80; 635 - mright ^= 0x80; 631 + scoped_guard(spinlock, &sonic->reg_lock) { 632 + udreg = snd_sonicvibes_in1(sonic, SV_IREG_UD_BUTTON); 633 + vol = udreg & 0x3f; 634 + if (!(udreg & 0x40)) 635 + vol = -vol; 636 + oleft = mleft = snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ANALOG); 637 + oright = mright = snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ANALOG); 638 + oleft &= 0x1f; 639 + oright &= 0x1f; 640 + oleft += vol; 641 + if (oleft < 0) 642 + oleft = 0; 643 + if (oleft > 0x1f) 644 + oleft = 0x1f; 645 + oright += vol; 646 + if (oright < 0) 647 + oright = 0; 648 + if (oright > 0x1f) 649 + oright = 0x1f; 650 + if (udreg & 0x80) { 651 + mleft ^= 0x80; 652 + mright ^= 0x80; 653 + } 654 + oleft |= mleft & 0x80; 655 + oright |= mright & 0x80; 656 + snd_sonicvibes_out1(sonic, SV_IREG_LEFT_ANALOG, oleft); 657 + snd_sonicvibes_out1(sonic, SV_IREG_RIGHT_ANALOG, oright); 636 658 } 637 - oleft |= mleft & 0x80; 638 - oright |= mright & 0x80; 639 - snd_sonicvibes_out1(sonic, SV_IREG_LEFT_ANALOG, oleft); 640 - snd_sonicvibes_out1(sonic, SV_IREG_RIGHT_ANALOG, oright); 641 - spin_unlock(&sonic->reg_lock); 642 659 snd_ctl_notify(sonic->card, SNDRV_CTL_EVENT_MASK_VALUE, &sonic->master_mute->id); 643 660 snd_ctl_notify(sonic->card, SNDRV_CTL_EVENT_MASK_VALUE, &sonic->master_volume->id); 644 661 } ··· 679 696 fmt |= 2; 680 697 snd_sonicvibes_setfmt(sonic, ~3, fmt); 681 698 snd_sonicvibes_set_dac_rate(sonic, runtime->rate); 682 - spin_lock_irq(&sonic->reg_lock); 699 + guard(spinlock_irq)(&sonic->reg_lock); 683 700 snd_sonicvibes_setdmaa(sonic, runtime->dma_addr, size); 684 701 snd_sonicvibes_out1(sonic, SV_IREG_DMA_A_UPPER, count >> 8); 685 702 snd_sonicvibes_out1(sonic, SV_IREG_DMA_A_LOWER, count); 686 - spin_unlock_irq(&sonic->reg_lock); 687 703 return 0; 688 704 } 689 705 ··· 703 721 fmt |= 0x20; 704 722 snd_sonicvibes_setfmt(sonic, ~0x30, fmt); 705 723 snd_sonicvibes_set_adc_rate(sonic, runtime->rate); 706 - spin_lock_irq(&sonic->reg_lock); 724 + guard(spinlock_irq)(&sonic->reg_lock); 707 725 snd_sonicvibes_setdmac(sonic, runtime->dma_addr, size); 708 726 snd_sonicvibes_out1(sonic, SV_IREG_DMA_C_UPPER, count >> 8); 709 727 snd_sonicvibes_out1(sonic, SV_IREG_DMA_C_LOWER, count); 710 - spin_unlock_irq(&sonic->reg_lock); 711 728 return 0; 712 729 } 713 730 ··· 875 894 { 876 895 struct sonicvibes *sonic = snd_kcontrol_chip(kcontrol); 877 896 878 - spin_lock_irq(&sonic->reg_lock); 897 + guard(spinlock_irq)(&sonic->reg_lock); 879 898 ucontrol->value.enumerated.item[0] = ((snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ADC) & SV_RECSRC_OUT) >> 5) - 1; 880 899 ucontrol->value.enumerated.item[1] = ((snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ADC) & SV_RECSRC_OUT) >> 5) - 1; 881 - spin_unlock_irq(&sonic->reg_lock); 882 900 return 0; 883 901 } 884 902 ··· 892 912 return -EINVAL; 893 913 left = (ucontrol->value.enumerated.item[0] + 1) << 5; 894 914 right = (ucontrol->value.enumerated.item[1] + 1) << 5; 895 - spin_lock_irq(&sonic->reg_lock); 915 + guard(spinlock_irq)(&sonic->reg_lock); 896 916 oval1 = snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ADC); 897 917 oval2 = snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ADC); 898 918 left = (oval1 & ~SV_RECSRC_OUT) | left; ··· 900 920 change = left != oval1 || right != oval2; 901 921 snd_sonicvibes_out1(sonic, SV_IREG_LEFT_ADC, left); 902 922 snd_sonicvibes_out1(sonic, SV_IREG_RIGHT_ADC, right); 903 - spin_unlock_irq(&sonic->reg_lock); 904 923 return change; 905 924 } 906 925 ··· 928 949 int mask = (kcontrol->private_value >> 16) & 0xff; 929 950 int invert = (kcontrol->private_value >> 24) & 0xff; 930 951 931 - spin_lock_irq(&sonic->reg_lock); 952 + guard(spinlock_irq)(&sonic->reg_lock); 932 953 ucontrol->value.integer.value[0] = (snd_sonicvibes_in1(sonic, reg)>> shift) & mask; 933 - spin_unlock_irq(&sonic->reg_lock); 934 954 if (invert) 935 955 ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; 936 956 return 0; ··· 949 971 if (invert) 950 972 val = mask - val; 951 973 val <<= shift; 952 - spin_lock_irq(&sonic->reg_lock); 974 + guard(spinlock_irq)(&sonic->reg_lock); 953 975 oval = snd_sonicvibes_in1(sonic, reg); 954 976 val = (oval & ~(mask << shift)) | val; 955 977 change = val != oval; 956 978 snd_sonicvibes_out1(sonic, reg, val); 957 - spin_unlock_irq(&sonic->reg_lock); 958 979 return change; 959 980 } 960 981 ··· 984 1007 int mask = (kcontrol->private_value >> 24) & 0xff; 985 1008 int invert = (kcontrol->private_value >> 22) & 1; 986 1009 987 - spin_lock_irq(&sonic->reg_lock); 1010 + guard(spinlock_irq)(&sonic->reg_lock); 988 1011 ucontrol->value.integer.value[0] = (snd_sonicvibes_in1(sonic, left_reg) >> shift_left) & mask; 989 1012 ucontrol->value.integer.value[1] = (snd_sonicvibes_in1(sonic, right_reg) >> shift_right) & mask; 990 - spin_unlock_irq(&sonic->reg_lock); 991 1013 if (invert) { 992 1014 ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; 993 1015 ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1]; ··· 1014 1038 } 1015 1039 val1 <<= shift_left; 1016 1040 val2 <<= shift_right; 1017 - spin_lock_irq(&sonic->reg_lock); 1041 + guard(spinlock_irq)(&sonic->reg_lock); 1018 1042 oval1 = snd_sonicvibes_in1(sonic, left_reg); 1019 1043 oval2 = snd_sonicvibes_in1(sonic, right_reg); 1020 1044 val1 = (oval1 & ~(mask << shift_left)) | val1; ··· 1022 1046 change = val1 != oval1 || val2 != oval2; 1023 1047 snd_sonicvibes_out1(sonic, left_reg, val1); 1024 1048 snd_sonicvibes_out1(sonic, right_reg, val2); 1025 - spin_unlock_irq(&sonic->reg_lock); 1026 1049 return change; 1027 1050 } 1028 1051