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

ALSA: wss: 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/20250829145300.5460-18-tiwai@suse.de

+107 -157
+107 -157
sound/isa/wss/wss_lib.c
··· 360 360 361 361 void snd_wss_mce_up(struct snd_wss *chip) 362 362 { 363 - unsigned long flags; 364 363 int timeout; 365 364 366 365 snd_wss_wait(chip); ··· 368 369 dev_dbg(chip->card->dev, 369 370 "mce_up - auto calibration time out (0)\n"); 370 371 #endif 371 - spin_lock_irqsave(&chip->reg_lock, flags); 372 + guard(spinlock_irqsave)(&chip->reg_lock); 372 373 chip->mce_bit |= CS4231_MCE; 373 374 timeout = wss_inb(chip, CS4231P(REGSEL)); 374 375 if (timeout == 0x80) ··· 378 379 if (!(timeout & CS4231_MCE)) 379 380 wss_outb(chip, CS4231P(REGSEL), 380 381 chip->mce_bit | (timeout & 0x1f)); 381 - spin_unlock_irqrestore(&chip->reg_lock, flags); 382 382 } 383 383 EXPORT_SYMBOL(snd_wss_mce_up); 384 384 385 385 void snd_wss_mce_down(struct snd_wss *chip) 386 386 { 387 - unsigned long flags; 388 387 unsigned long end_time; 389 388 int timeout; 390 389 int hw_mask = WSS_HW_CS4231_MASK | WSS_HW_CS4232_MASK | WSS_HW_AD1848; ··· 395 398 "mce_down [0x%lx] - auto calibration time out (0)\n", 396 399 (long)CS4231P(REGSEL)); 397 400 #endif 398 - spin_lock_irqsave(&chip->reg_lock, flags); 399 - chip->mce_bit &= ~CS4231_MCE; 400 - timeout = wss_inb(chip, CS4231P(REGSEL)); 401 - wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); 402 - spin_unlock_irqrestore(&chip->reg_lock, flags); 401 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 402 + chip->mce_bit &= ~CS4231_MCE; 403 + timeout = wss_inb(chip, CS4231P(REGSEL)); 404 + wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); 405 + } 403 406 if (timeout == 0x80) 404 407 dev_dbg(chip->card->dev, 405 408 "mce_down [0x%lx]: serious init problem - codec still busy\n", ··· 493 496 snd_pcm_trigger_done(s, substream); 494 497 } 495 498 } 496 - spin_lock(&chip->reg_lock); 499 + guard(spinlock)(&chip->reg_lock); 497 500 if (do_start) { 498 501 chip->image[CS4231_IFACE_CTRL] |= what; 499 502 if (chip->trigger) ··· 504 507 chip->trigger(chip, what, 0); 505 508 } 506 509 snd_wss_out(chip, CS4231_IFACE_CTRL, chip->image[CS4231_IFACE_CTRL]); 507 - spin_unlock(&chip->reg_lock); 508 510 #if 0 509 511 snd_wss_debug(chip); 510 512 #endif ··· 549 553 550 554 static void snd_wss_calibrate_mute(struct snd_wss *chip, int mute) 551 555 { 552 - unsigned long flags; 553 556 554 557 mute = mute ? 0x80 : 0; 555 - spin_lock_irqsave(&chip->reg_lock, flags); 556 - if (chip->calibrate_mute == mute) { 557 - spin_unlock_irqrestore(&chip->reg_lock, flags); 558 + guard(spinlock_irqsave)(&chip->reg_lock); 559 + if (chip->calibrate_mute == mute) 558 560 return; 559 - } 560 561 if (!mute) { 561 562 snd_wss_dout(chip, CS4231_LEFT_INPUT, 562 563 chip->image[CS4231_LEFT_INPUT]); ··· 601 608 mute | chip->image[CS4231_LINE_RIGHT_OUTPUT]); 602 609 } 603 610 chip->calibrate_mute = mute; 604 - spin_unlock_irqrestore(&chip->reg_lock, flags); 605 611 } 606 612 607 613 static void snd_wss_playback_format(struct snd_wss *chip, 608 614 struct snd_pcm_hw_params *params, 609 615 unsigned char pdfr) 610 616 { 611 - unsigned long flags; 612 617 int full_calib = 1; 613 618 614 619 guard(mutex)(&chip->mce_mutex); 615 620 if (chip->hardware == WSS_HW_CS4231A || 616 621 (chip->hardware & WSS_HW_CS4232_MASK)) { 617 - spin_lock_irqsave(&chip->reg_lock, flags); 622 + guard(spinlock_irqsave)(&chip->reg_lock); 618 623 if ((chip->image[CS4231_PLAYBK_FORMAT] & 0x0f) == (pdfr & 0x0f)) { /* rate is same? */ 619 624 snd_wss_out(chip, CS4231_ALT_FEATURE_1, 620 625 chip->image[CS4231_ALT_FEATURE_1] | 0x10); ··· 624 633 udelay(100); /* Fixes audible clicks at least on GUS MAX */ 625 634 full_calib = 0; 626 635 } 627 - spin_unlock_irqrestore(&chip->reg_lock, flags); 628 636 } else if (chip->hardware == WSS_HW_AD1845) { 629 637 unsigned rate = params_rate(params); 630 638 ··· 636 646 * NOTE: We seem to need to write to the MSB before the LSB 637 647 * to get the correct sample frequency. 638 648 */ 639 - spin_lock_irqsave(&chip->reg_lock, flags); 649 + guard(spinlock_irqsave)(&chip->reg_lock); 640 650 snd_wss_out(chip, CS4231_PLAYBK_FORMAT, (pdfr & 0xf0)); 641 651 snd_wss_out(chip, AD1845_UPR_FREQ_SEL, (rate >> 8) & 0xff); 642 652 snd_wss_out(chip, AD1845_LWR_FREQ_SEL, rate & 0xff); 643 653 full_calib = 0; 644 - spin_unlock_irqrestore(&chip->reg_lock, flags); 645 654 } 646 655 if (full_calib) { 647 656 snd_wss_mce_up(chip); 648 - spin_lock_irqsave(&chip->reg_lock, flags); 649 - if (chip->hardware != WSS_HW_INTERWAVE && !chip->single_dma) { 650 - if (chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) 651 - pdfr = (pdfr & 0xf0) | 652 - (chip->image[CS4231_REC_FORMAT] & 0x0f); 653 - } else { 654 - chip->image[CS4231_PLAYBK_FORMAT] = pdfr; 657 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 658 + if (chip->hardware != WSS_HW_INTERWAVE && !chip->single_dma) { 659 + if (chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) 660 + pdfr = (pdfr & 0xf0) | 661 + (chip->image[CS4231_REC_FORMAT] & 0x0f); 662 + } else { 663 + chip->image[CS4231_PLAYBK_FORMAT] = pdfr; 664 + } 665 + snd_wss_out(chip, CS4231_PLAYBK_FORMAT, pdfr); 655 666 } 656 - snd_wss_out(chip, CS4231_PLAYBK_FORMAT, pdfr); 657 - spin_unlock_irqrestore(&chip->reg_lock, flags); 658 667 if (chip->hardware == WSS_HW_OPL3SA2) 659 668 udelay(100); /* this seems to help */ 660 669 snd_wss_mce_down(chip); ··· 670 681 guard(mutex)(&chip->mce_mutex); 671 682 if (chip->hardware == WSS_HW_CS4231A || 672 683 (chip->hardware & WSS_HW_CS4232_MASK)) { 673 - spin_lock_irqsave(&chip->reg_lock, flags); 684 + guard(spinlock_irqsave)(&chip->reg_lock); 674 685 if ((chip->image[CS4231_PLAYBK_FORMAT] & 0x0f) == (cdfr & 0x0f) || /* rate is same? */ 675 686 (chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE)) { 676 687 snd_wss_out(chip, CS4231_ALT_FEATURE_1, ··· 681 692 chip->image[CS4231_ALT_FEATURE_1] &= ~0x20); 682 693 full_calib = 0; 683 694 } 684 - spin_unlock_irqrestore(&chip->reg_lock, flags); 685 695 } else if (chip->hardware == WSS_HW_AD1845) { 686 696 unsigned rate = params_rate(params); 687 697 ··· 693 705 * NOTE: We seem to need to write to the MSB before the LSB 694 706 * to get the correct sample frequency. 695 707 */ 696 - spin_lock_irqsave(&chip->reg_lock, flags); 708 + guard(spinlock_irqsave)(&chip->reg_lock); 697 709 snd_wss_out(chip, CS4231_REC_FORMAT, (cdfr & 0xf0)); 698 710 snd_wss_out(chip, AD1845_UPR_FREQ_SEL, (rate >> 8) & 0xff); 699 711 snd_wss_out(chip, AD1845_LWR_FREQ_SEL, rate & 0xff); 700 712 full_calib = 0; 701 - spin_unlock_irqrestore(&chip->reg_lock, flags); 702 713 } 703 714 if (full_calib) { 704 715 snd_wss_mce_up(chip); ··· 739 752 740 753 static int snd_wss_timer_start(struct snd_timer *timer) 741 754 { 742 - unsigned long flags; 743 755 unsigned int ticks; 744 756 struct snd_wss *chip = snd_timer_chip(timer); 745 - spin_lock_irqsave(&chip->reg_lock, flags); 757 + 758 + guard(spinlock_irqsave)(&chip->reg_lock); 746 759 ticks = timer->sticks; 747 760 if ((chip->image[CS4231_ALT_FEATURE_1] & CS4231_TIMER_ENABLE) == 0 || 748 761 (unsigned char)(ticks >> 8) != chip->image[CS4231_TIMER_HIGH] || ··· 757 770 chip->image[CS4231_ALT_FEATURE_1] | 758 771 CS4231_TIMER_ENABLE); 759 772 } 760 - spin_unlock_irqrestore(&chip->reg_lock, flags); 761 773 return 0; 762 774 } 763 775 764 776 static int snd_wss_timer_stop(struct snd_timer *timer) 765 777 { 766 - unsigned long flags; 767 778 struct snd_wss *chip = snd_timer_chip(timer); 768 - spin_lock_irqsave(&chip->reg_lock, flags); 779 + 780 + guard(spinlock_irqsave)(&chip->reg_lock); 769 781 chip->image[CS4231_ALT_FEATURE_1] &= ~CS4231_TIMER_ENABLE; 770 782 snd_wss_out(chip, CS4231_ALT_FEATURE_1, 771 783 chip->image[CS4231_ALT_FEATURE_1]); 772 - spin_unlock_irqrestore(&chip->reg_lock, flags); 773 784 return 0; 774 785 } 775 786 776 787 static void snd_wss_init(struct snd_wss *chip) 777 788 { 778 - unsigned long flags; 779 - 780 789 snd_wss_calibrate_mute(chip, 1); 781 790 snd_wss_mce_down(chip); 782 791 ··· 780 797 dev_dbg(chip->card->dev, "init: (1)\n"); 781 798 #endif 782 799 snd_wss_mce_up(chip); 783 - spin_lock_irqsave(&chip->reg_lock, flags); 784 - chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_PLAYBACK_ENABLE | 785 - CS4231_PLAYBACK_PIO | 786 - CS4231_RECORD_ENABLE | 787 - CS4231_RECORD_PIO | 788 - CS4231_CALIB_MODE); 789 - chip->image[CS4231_IFACE_CTRL] |= CS4231_AUTOCALIB; 790 - snd_wss_out(chip, CS4231_IFACE_CTRL, chip->image[CS4231_IFACE_CTRL]); 791 - spin_unlock_irqrestore(&chip->reg_lock, flags); 800 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 801 + chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_PLAYBACK_ENABLE | 802 + CS4231_PLAYBACK_PIO | 803 + CS4231_RECORD_ENABLE | 804 + CS4231_RECORD_PIO | 805 + CS4231_CALIB_MODE); 806 + chip->image[CS4231_IFACE_CTRL] |= CS4231_AUTOCALIB; 807 + snd_wss_out(chip, CS4231_IFACE_CTRL, chip->image[CS4231_IFACE_CTRL]); 808 + } 792 809 snd_wss_mce_down(chip); 793 810 794 811 #ifdef SNDRV_DEBUG_MCE ··· 796 813 #endif 797 814 798 815 snd_wss_mce_up(chip); 799 - spin_lock_irqsave(&chip->reg_lock, flags); 800 - chip->image[CS4231_IFACE_CTRL] &= ~CS4231_AUTOCALIB; 801 - snd_wss_out(chip, CS4231_IFACE_CTRL, chip->image[CS4231_IFACE_CTRL]); 802 - snd_wss_out(chip, 803 - CS4231_ALT_FEATURE_1, chip->image[CS4231_ALT_FEATURE_1]); 804 - spin_unlock_irqrestore(&chip->reg_lock, flags); 816 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 817 + chip->image[CS4231_IFACE_CTRL] &= ~CS4231_AUTOCALIB; 818 + snd_wss_out(chip, CS4231_IFACE_CTRL, chip->image[CS4231_IFACE_CTRL]); 819 + snd_wss_out(chip, 820 + CS4231_ALT_FEATURE_1, chip->image[CS4231_ALT_FEATURE_1]); 821 + } 805 822 snd_wss_mce_down(chip); 806 823 807 824 #ifdef SNDRV_DEBUG_MCE ··· 809 826 chip->image[CS4231_ALT_FEATURE_1]); 810 827 #endif 811 828 812 - spin_lock_irqsave(&chip->reg_lock, flags); 813 - snd_wss_out(chip, CS4231_ALT_FEATURE_2, 814 - chip->image[CS4231_ALT_FEATURE_2]); 815 - spin_unlock_irqrestore(&chip->reg_lock, flags); 829 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 830 + snd_wss_out(chip, CS4231_ALT_FEATURE_2, 831 + chip->image[CS4231_ALT_FEATURE_2]); 832 + } 816 833 817 834 snd_wss_mce_up(chip); 818 - spin_lock_irqsave(&chip->reg_lock, flags); 819 - snd_wss_out(chip, CS4231_PLAYBK_FORMAT, 820 - chip->image[CS4231_PLAYBK_FORMAT]); 821 - spin_unlock_irqrestore(&chip->reg_lock, flags); 835 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 836 + snd_wss_out(chip, CS4231_PLAYBK_FORMAT, 837 + chip->image[CS4231_PLAYBK_FORMAT]); 838 + } 822 839 snd_wss_mce_down(chip); 823 840 824 841 #ifdef SNDRV_DEBUG_MCE ··· 826 843 #endif 827 844 828 845 snd_wss_mce_up(chip); 829 - spin_lock_irqsave(&chip->reg_lock, flags); 830 - if (!(chip->hardware & WSS_HW_AD1848_MASK)) 831 - snd_wss_out(chip, CS4231_REC_FORMAT, 832 - chip->image[CS4231_REC_FORMAT]); 833 - spin_unlock_irqrestore(&chip->reg_lock, flags); 846 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 847 + if (!(chip->hardware & WSS_HW_AD1848_MASK)) 848 + snd_wss_out(chip, CS4231_REC_FORMAT, 849 + chip->image[CS4231_REC_FORMAT]); 850 + } 834 851 snd_wss_mce_down(chip); 835 852 snd_wss_calibrate_mute(chip, 0); 836 853 ··· 841 858 842 859 static int snd_wss_open(struct snd_wss *chip, unsigned int mode) 843 860 { 844 - unsigned long flags; 845 - 846 861 guard(mutex)(&chip->open_mutex); 847 862 if ((chip->mode & mode) || 848 863 ((chip->mode & WSS_MODE_OPEN) && chip->single_dma)) ··· 850 869 return 0; 851 870 } 852 871 /* ok. now enable and ack CODEC IRQ */ 853 - spin_lock_irqsave(&chip->reg_lock, flags); 872 + guard(spinlock_irqsave)(&chip->reg_lock); 854 873 if (!(chip->hardware & WSS_HW_AD1848_MASK)) { 855 874 snd_wss_out(chip, CS4231_IRQ_STATUS, 856 875 CS4231_PLAYBACK_IRQ | ··· 869 888 CS4231_TIMER_IRQ); 870 889 snd_wss_out(chip, CS4231_IRQ_STATUS, 0); 871 890 } 872 - spin_unlock_irqrestore(&chip->reg_lock, flags); 873 891 874 892 chip->mode = mode; 875 893 return 0; ··· 968 988 { 969 989 struct snd_wss *chip = snd_pcm_substream_chip(substream); 970 990 struct snd_pcm_runtime *runtime = substream->runtime; 971 - unsigned long flags; 972 991 unsigned int size = snd_pcm_lib_buffer_bytes(substream); 973 992 unsigned int count = snd_pcm_lib_period_bytes(substream); 974 993 975 - spin_lock_irqsave(&chip->reg_lock, flags); 994 + guard(spinlock_irqsave)(&chip->reg_lock); 976 995 chip->p_dma_size = size; 977 996 chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_PLAYBACK_ENABLE | CS4231_PLAYBACK_PIO); 978 997 snd_dma_program(chip->dma1, runtime->dma_addr, size, DMA_MODE_WRITE | DMA_AUTOINIT); 979 998 count = snd_wss_get_count(chip->image[CS4231_PLAYBK_FORMAT], count) - 1; 980 999 snd_wss_out(chip, CS4231_PLY_LWR_CNT, (unsigned char) count); 981 1000 snd_wss_out(chip, CS4231_PLY_UPR_CNT, (unsigned char) (count >> 8)); 982 - spin_unlock_irqrestore(&chip->reg_lock, flags); 983 1001 #if 0 984 1002 snd_wss_debug(chip); 985 1003 #endif ··· 1001 1023 { 1002 1024 struct snd_wss *chip = snd_pcm_substream_chip(substream); 1003 1025 struct snd_pcm_runtime *runtime = substream->runtime; 1004 - unsigned long flags; 1005 1026 unsigned int size = snd_pcm_lib_buffer_bytes(substream); 1006 1027 unsigned int count = snd_pcm_lib_period_bytes(substream); 1007 1028 1008 - spin_lock_irqsave(&chip->reg_lock, flags); 1029 + guard(spinlock_irqsave)(&chip->reg_lock); 1009 1030 chip->c_dma_size = size; 1010 1031 chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_RECORD_ENABLE | CS4231_RECORD_PIO); 1011 1032 snd_dma_program(chip->dma2, runtime->dma_addr, size, DMA_MODE_READ | DMA_AUTOINIT); ··· 1024 1047 snd_wss_out(chip, CS4231_REC_UPR_CNT, 1025 1048 (unsigned char) (count >> 8)); 1026 1049 } 1027 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1028 1050 return 0; 1029 1051 } 1030 1052 1031 1053 void snd_wss_overrange(struct snd_wss *chip) 1032 1054 { 1033 - unsigned long flags; 1034 1055 unsigned char res; 1035 1056 1036 - spin_lock_irqsave(&chip->reg_lock, flags); 1037 - res = snd_wss_in(chip, CS4231_TEST_INIT); 1038 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1057 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1058 + res = snd_wss_in(chip, CS4231_TEST_INIT); 1059 + } 1039 1060 if (res & (0x08 | 0x02)) /* detect overrange only above 0dB; may be user selectable? */ 1040 1061 chip->capture_substream->runtime->overrange++; 1041 1062 } ··· 1079 1104 } 1080 1105 } 1081 1106 1082 - spin_lock(&chip->reg_lock); 1107 + guard(spinlock)(&chip->reg_lock); 1083 1108 status = ~CS4231_ALL_IRQS | ~status; 1084 1109 if (chip->hardware & WSS_HW_AD1848_MASK) 1085 1110 wss_outb(chip, CS4231P(STATUS), 0); 1086 1111 else 1087 1112 snd_wss_out(chip, CS4231_IRQ_STATUS, status); 1088 - spin_unlock(&chip->reg_lock); 1089 1113 return IRQ_HANDLED; 1090 1114 } 1091 1115 EXPORT_SYMBOL(snd_wss_interrupt); ··· 1118 1144 static int snd_ad1848_probe(struct snd_wss *chip) 1119 1145 { 1120 1146 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 1121 - unsigned long flags; 1122 1147 unsigned char r; 1123 1148 unsigned short hardware = 0; 1124 - int err = 0; 1125 1149 int i; 1126 1150 1127 1151 while (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) { ··· 1127 1155 return -ENODEV; 1128 1156 cond_resched(); 1129 1157 } 1130 - spin_lock_irqsave(&chip->reg_lock, flags); 1158 + guard(spinlock_irqsave)(&chip->reg_lock); 1131 1159 1132 1160 /* set CS423x MODE 1 */ 1133 1161 snd_wss_dout(chip, CS4231_MISC_INFO, 0); ··· 1136 1164 r = snd_wss_in(chip, CS4231_RIGHT_INPUT); 1137 1165 if (r != 0x45) { 1138 1166 /* RMGE always high on AD1847 */ 1139 - if ((r & ~CS4231_ENABLE_MIC_GAIN) != 0x45) { 1140 - err = -ENODEV; 1141 - goto out; 1142 - } 1167 + if ((r & ~CS4231_ENABLE_MIC_GAIN) != 0x45) 1168 + return -ENODEV; 1143 1169 hardware = WSS_HW_AD1847; 1144 1170 } else { 1145 1171 snd_wss_dout(chip, CS4231_LEFT_INPUT, 0xaa); 1146 1172 r = snd_wss_in(chip, CS4231_LEFT_INPUT); 1147 1173 /* L/RMGE always low on AT2320 */ 1148 - if ((r | CS4231_ENABLE_MIC_GAIN) != 0xaa) { 1149 - err = -ENODEV; 1150 - goto out; 1151 - } 1174 + if ((r | CS4231_ENABLE_MIC_GAIN) != 0xaa) 1175 + return -ENODEV; 1152 1176 } 1153 1177 1154 1178 /* clear pending IRQ */ ··· 1153 1185 mb(); 1154 1186 1155 1187 if ((chip->hardware & WSS_HW_TYPE_MASK) != WSS_HW_DETECT) 1156 - goto out; 1188 + return 0; 1157 1189 1158 1190 if (hardware) { 1159 1191 chip->hardware = hardware; 1160 - goto out; 1192 + return 0; 1161 1193 } 1162 1194 1163 1195 r = snd_wss_in(chip, CS4231_MISC_INFO); ··· 1186 1218 chip->hardware = WSS_HW_AD1848; 1187 1219 out_mode: 1188 1220 snd_wss_dout(chip, CS4231_MISC_INFO, 0); 1189 - out: 1190 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1191 - return err; 1221 + return 0; 1192 1222 } 1193 1223 1194 1224 static int snd_wss_probe(struct snd_wss *chip) 1195 1225 { 1196 - unsigned long flags; 1197 1226 int i, id, rev, regnum; 1198 1227 unsigned char *ptr; 1199 1228 unsigned int hw; ··· 1206 1241 if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) 1207 1242 msleep(2); 1208 1243 else { 1209 - spin_lock_irqsave(&chip->reg_lock, flags); 1244 + guard(spinlock_irqsave)(&chip->reg_lock); 1210 1245 snd_wss_out(chip, CS4231_MISC_INFO, 1211 1246 CS4231_MODE2); 1212 1247 id = snd_wss_in(chip, CS4231_MISC_INFO) & 0x0f; 1213 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1214 1248 if (id == 0x0a) 1215 1249 break; /* this is valid value */ 1216 1250 } ··· 1244 1280 return -ENODEV; /* unknown CS4231 chip? */ 1245 1281 } 1246 1282 } 1247 - spin_lock_irqsave(&chip->reg_lock, flags); 1248 - wss_inb(chip, CS4231P(STATUS)); /* clear any pendings IRQ */ 1249 - wss_outb(chip, CS4231P(STATUS), 0); 1250 - mb(); 1251 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1283 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1284 + wss_inb(chip, CS4231P(STATUS)); /* clear any pendings IRQ */ 1285 + wss_outb(chip, CS4231P(STATUS), 0); 1286 + mb(); 1287 + } 1252 1288 1253 1289 if (!(chip->hardware & WSS_HW_AD1848_MASK)) 1254 1290 chip->image[CS4231_MISC_INFO] = CS4231_MODE2; ··· 1283 1319 ptr = (unsigned char *) &chip->image; 1284 1320 regnum = (chip->hardware & WSS_HW_AD1848_MASK) ? 16 : 32; 1285 1321 snd_wss_mce_down(chip); 1286 - spin_lock_irqsave(&chip->reg_lock, flags); 1287 - for (i = 0; i < regnum; i++) /* ok.. fill all registers */ 1288 - snd_wss_out(chip, i, *ptr++); 1289 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1322 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1323 + for (i = 0; i < regnum; i++) /* ok.. fill all registers */ 1324 + snd_wss_out(chip, i, *ptr++); 1325 + } 1290 1326 snd_wss_mce_up(chip); 1291 1327 snd_wss_mce_down(chip); 1292 1328 ··· 1551 1587 static void snd_wss_suspend(struct snd_wss *chip) 1552 1588 { 1553 1589 int reg; 1554 - unsigned long flags; 1555 1590 1556 - spin_lock_irqsave(&chip->reg_lock, flags); 1557 - for (reg = 0; reg < 32; reg++) 1558 - chip->image[reg] = snd_wss_in(chip, reg); 1559 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1591 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1592 + for (reg = 0; reg < 32; reg++) 1593 + chip->image[reg] = snd_wss_in(chip, reg); 1594 + } 1560 1595 if (chip->thinkpad_flag) 1561 1596 snd_wss_thinkpad_twiddle(chip, 0); 1562 1597 } ··· 1564 1601 static void snd_wss_resume(struct snd_wss *chip) 1565 1602 { 1566 1603 int reg; 1567 - unsigned long flags; 1568 1604 /* int timeout; */ 1569 1605 1570 1606 if (chip->thinkpad_flag) 1571 1607 snd_wss_thinkpad_twiddle(chip, 1); 1572 1608 snd_wss_mce_up(chip); 1573 - spin_lock_irqsave(&chip->reg_lock, flags); 1574 - for (reg = 0; reg < 32; reg++) { 1575 - switch (reg) { 1576 - case CS4231_VERSION: 1577 - break; 1578 - default: 1579 - snd_wss_out(chip, reg, chip->image[reg]); 1580 - break; 1609 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1610 + for (reg = 0; reg < 32; reg++) { 1611 + switch (reg) { 1612 + case CS4231_VERSION: 1613 + break; 1614 + default: 1615 + snd_wss_out(chip, reg, chip->image[reg]); 1616 + break; 1617 + } 1581 1618 } 1619 + /* Yamaha needs this to resume properly */ 1620 + if (chip->hardware == WSS_HW_OPL3SA2) 1621 + snd_wss_out(chip, CS4231_PLAYBK_FORMAT, 1622 + chip->image[CS4231_PLAYBK_FORMAT]); 1582 1623 } 1583 - /* Yamaha needs this to resume properly */ 1584 - if (chip->hardware == WSS_HW_OPL3SA2) 1585 - snd_wss_out(chip, CS4231_PLAYBK_FORMAT, 1586 - chip->image[CS4231_PLAYBK_FORMAT]); 1587 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1588 1624 #if 1 1589 1625 snd_wss_mce_down(chip); 1590 1626 #else ··· 1592 1630 include rescheduling. -- iwai 1593 1631 */ 1594 1632 snd_wss_busy_wait(chip); 1595 - spin_lock_irqsave(&chip->reg_lock, flags); 1596 - chip->mce_bit &= ~CS4231_MCE; 1597 - timeout = wss_inb(chip, CS4231P(REGSEL)); 1598 - wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); 1599 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1633 + scoped_guard(spinlock_irqsave, &chip->reg_lock) { 1634 + chip->mce_bit &= ~CS4231_MCE; 1635 + timeout = wss_inb(chip, CS4231P(REGSEL)); 1636 + wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); 1637 + } 1600 1638 if (timeout == 0x80) 1601 1639 dev_err(chip->card->dev 1602 1640 "down [0x%lx]: serious init problem - codec still busy\n", ··· 1897 1935 struct snd_ctl_elem_value *ucontrol) 1898 1936 { 1899 1937 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 1900 - unsigned long flags; 1901 1938 1902 - spin_lock_irqsave(&chip->reg_lock, flags); 1939 + guard(spinlock_irqsave)(&chip->reg_lock); 1903 1940 ucontrol->value.enumerated.item[0] = (chip->image[CS4231_LEFT_INPUT] & CS4231_MIXS_ALL) >> 6; 1904 1941 ucontrol->value.enumerated.item[1] = (chip->image[CS4231_RIGHT_INPUT] & CS4231_MIXS_ALL) >> 6; 1905 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1906 1942 return 0; 1907 1943 } 1908 1944 ··· 1908 1948 struct snd_ctl_elem_value *ucontrol) 1909 1949 { 1910 1950 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 1911 - unsigned long flags; 1912 1951 unsigned short left, right; 1913 1952 int change; 1914 1953 ··· 1916 1957 return -EINVAL; 1917 1958 left = ucontrol->value.enumerated.item[0] << 6; 1918 1959 right = ucontrol->value.enumerated.item[1] << 6; 1919 - spin_lock_irqsave(&chip->reg_lock, flags); 1960 + guard(spinlock_irqsave)(&chip->reg_lock); 1920 1961 left = (chip->image[CS4231_LEFT_INPUT] & ~CS4231_MIXS_ALL) | left; 1921 1962 right = (chip->image[CS4231_RIGHT_INPUT] & ~CS4231_MIXS_ALL) | right; 1922 1963 change = left != chip->image[CS4231_LEFT_INPUT] || 1923 1964 right != chip->image[CS4231_RIGHT_INPUT]; 1924 1965 snd_wss_out(chip, CS4231_LEFT_INPUT, left); 1925 1966 snd_wss_out(chip, CS4231_RIGHT_INPUT, right); 1926 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1927 1967 return change; 1928 1968 } 1929 1969 ··· 1943 1985 struct snd_ctl_elem_value *ucontrol) 1944 1986 { 1945 1987 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 1946 - unsigned long flags; 1947 1988 int reg = kcontrol->private_value & 0xff; 1948 1989 int shift = (kcontrol->private_value >> 8) & 0xff; 1949 1990 int mask = (kcontrol->private_value >> 16) & 0xff; 1950 1991 int invert = (kcontrol->private_value >> 24) & 0xff; 1951 1992 1952 - spin_lock_irqsave(&chip->reg_lock, flags); 1993 + guard(spinlock_irqsave)(&chip->reg_lock); 1953 1994 ucontrol->value.integer.value[0] = (chip->image[reg] >> shift) & mask; 1954 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1955 1995 if (invert) 1956 1996 ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; 1957 1997 return 0; ··· 1960 2004 struct snd_ctl_elem_value *ucontrol) 1961 2005 { 1962 2006 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 1963 - unsigned long flags; 1964 2007 int reg = kcontrol->private_value & 0xff; 1965 2008 int shift = (kcontrol->private_value >> 8) & 0xff; 1966 2009 int mask = (kcontrol->private_value >> 16) & 0xff; ··· 1971 2016 if (invert) 1972 2017 val = mask - val; 1973 2018 val <<= shift; 1974 - spin_lock_irqsave(&chip->reg_lock, flags); 2019 + guard(spinlock_irqsave)(&chip->reg_lock); 1975 2020 val = (chip->image[reg] & ~(mask << shift)) | val; 1976 2021 change = val != chip->image[reg]; 1977 2022 snd_wss_out(chip, reg, val); 1978 - spin_unlock_irqrestore(&chip->reg_lock, flags); 1979 2023 return change; 1980 2024 } 1981 2025 EXPORT_SYMBOL(snd_wss_put_single); ··· 1996 2042 struct snd_ctl_elem_value *ucontrol) 1997 2043 { 1998 2044 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 1999 - unsigned long flags; 2000 2045 int left_reg = kcontrol->private_value & 0xff; 2001 2046 int right_reg = (kcontrol->private_value >> 8) & 0xff; 2002 2047 int shift_left = (kcontrol->private_value >> 16) & 0x07; ··· 2003 2050 int mask = (kcontrol->private_value >> 24) & 0xff; 2004 2051 int invert = (kcontrol->private_value >> 22) & 1; 2005 2052 2006 - spin_lock_irqsave(&chip->reg_lock, flags); 2053 + guard(spinlock_irqsave)(&chip->reg_lock); 2007 2054 ucontrol->value.integer.value[0] = (chip->image[left_reg] >> shift_left) & mask; 2008 2055 ucontrol->value.integer.value[1] = (chip->image[right_reg] >> shift_right) & mask; 2009 - spin_unlock_irqrestore(&chip->reg_lock, flags); 2010 2056 if (invert) { 2011 2057 ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; 2012 2058 ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1]; ··· 2018 2066 struct snd_ctl_elem_value *ucontrol) 2019 2067 { 2020 2068 struct snd_wss *chip = snd_kcontrol_chip(kcontrol); 2021 - unsigned long flags; 2022 2069 int left_reg = kcontrol->private_value & 0xff; 2023 2070 int right_reg = (kcontrol->private_value >> 8) & 0xff; 2024 2071 int shift_left = (kcontrol->private_value >> 16) & 0x07; ··· 2035 2084 } 2036 2085 val1 <<= shift_left; 2037 2086 val2 <<= shift_right; 2038 - spin_lock_irqsave(&chip->reg_lock, flags); 2087 + guard(spinlock_irqsave)(&chip->reg_lock); 2039 2088 if (left_reg != right_reg) { 2040 2089 val1 = (chip->image[left_reg] & ~(mask << shift_left)) | val1; 2041 2090 val2 = (chip->image[right_reg] & ~(mask << shift_right)) | val2; ··· 2049 2098 change = val1 != chip->image[left_reg]; 2050 2099 snd_wss_out(chip, left_reg, val1); 2051 2100 } 2052 - spin_unlock_irqrestore(&chip->reg_lock, flags); 2053 2101 return change; 2054 2102 } 2055 2103 EXPORT_SYMBOL(snd_wss_put_double);