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

ALSA: rme96: 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-51-tiwai@suse.de

+85 -126
+85 -126
sound/pci/rme96.c
··· 964 964 runtime->dma_addr = rme96->port + RME96_IO_PLAY_BUFFER; 965 965 runtime->dma_bytes = RME96_BUFFER_SIZE; 966 966 967 - spin_lock_irq(&rme96->lock); 968 - rate = 0; 969 - if (!(rme96->wcreg & RME96_WCR_MASTER) && 970 - snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) 971 - rate = snd_rme96_capture_getrate(rme96, &dummy); 972 - if (rate > 0) { 973 - /* slave clock */ 974 - if ((int)params_rate(params) != rate) { 975 - err = -EIO; 976 - goto error; 967 + scoped_guard(spinlock_irq, &rme96->lock) { 968 + rate = 0; 969 + if (!(rme96->wcreg & RME96_WCR_MASTER) && 970 + snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) 971 + rate = snd_rme96_capture_getrate(rme96, &dummy); 972 + if (rate > 0) { 973 + /* slave clock */ 974 + if ((int)params_rate(params) != rate) 975 + return -EIO; 976 + } else { 977 + err = snd_rme96_playback_setrate(rme96, params_rate(params)); 978 + if (err < 0) 979 + return err; 980 + apply_dac_volume = err > 0; /* need to restore volume later? */ 977 981 } 978 - } else { 979 - err = snd_rme96_playback_setrate(rme96, params_rate(params)); 982 + 983 + err = snd_rme96_playback_setformat(rme96, params_format(params)); 980 984 if (err < 0) 981 985 goto error; 982 - apply_dac_volume = err > 0; /* need to restore volume later? */ 983 - } 984 - 985 - err = snd_rme96_playback_setformat(rme96, params_format(params)); 986 - if (err < 0) 987 - goto error; 988 - snd_rme96_setframelog(rme96, params_channels(params), 1); 989 - if (rme96->capture_periodsize != 0) { 990 - if (params_period_size(params) << rme96->playback_frlog != 991 - rme96->capture_periodsize) 992 - { 993 - err = -EBUSY; 994 - goto error; 986 + snd_rme96_setframelog(rme96, params_channels(params), 1); 987 + if (rme96->capture_periodsize != 0) { 988 + if (params_period_size(params) << rme96->playback_frlog != 989 + rme96->capture_periodsize) { 990 + err = -EBUSY; 991 + goto error; 992 + } 995 993 } 996 - } 997 - rme96->playback_periodsize = 998 - params_period_size(params) << rme96->playback_frlog; 999 - snd_rme96_set_period_properties(rme96, rme96->playback_periodsize); 1000 - /* S/PDIF setup */ 1001 - if ((rme96->wcreg & RME96_WCR_ADAT) == 0) { 1002 - rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP); 1003 - writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1004 - } 994 + rme96->playback_periodsize = 995 + params_period_size(params) << rme96->playback_frlog; 996 + snd_rme96_set_period_properties(rme96, rme96->playback_periodsize); 997 + /* S/PDIF setup */ 998 + if ((rme96->wcreg & RME96_WCR_ADAT) == 0) { 999 + rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP); 1000 + writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1001 + } 1005 1002 1006 - err = 0; 1003 + err = 0; 1004 + } 1007 1005 error: 1008 - spin_unlock_irq(&rme96->lock); 1009 1006 if (apply_dac_volume) { 1010 1007 usleep_range(3000, 10000); 1011 1008 snd_rme96_apply_dac_volume(rme96); ··· 1024 1027 runtime->dma_addr = rme96->port + RME96_IO_REC_BUFFER; 1025 1028 runtime->dma_bytes = RME96_BUFFER_SIZE; 1026 1029 1027 - spin_lock_irq(&rme96->lock); 1030 + guard(spinlock_irq)(&rme96->lock); 1028 1031 err = snd_rme96_capture_setformat(rme96, params_format(params)); 1029 - if (err < 0) { 1030 - spin_unlock_irq(&rme96->lock); 1032 + if (err < 0) 1031 1033 return err; 1032 - } 1033 1034 if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) { 1034 1035 err = snd_rme96_capture_analog_setrate(rme96, params_rate(params)); 1035 - if (err < 0) { 1036 - spin_unlock_irq(&rme96->lock); 1036 + if (err < 0) 1037 1037 return err; 1038 - } 1039 1038 } else { 1040 1039 rate = snd_rme96_capture_getrate(rme96, &isadat); 1041 1040 if (rate > 0) { 1042 - if ((int)params_rate(params) != rate) { 1043 - spin_unlock_irq(&rme96->lock); 1041 + if ((int)params_rate(params) != rate) 1044 1042 return -EIO; 1045 - } 1046 1043 if ((isadat && runtime->hw.channels_min == 2) || 1047 - (!isadat && runtime->hw.channels_min == 8)) { 1048 - spin_unlock_irq(&rme96->lock); 1044 + (!isadat && runtime->hw.channels_min == 8)) 1049 1045 return -EIO; 1050 - } 1051 1046 } 1052 1047 } 1053 1048 snd_rme96_setframelog(rme96, params_channels(params), 0); 1054 1049 if (rme96->playback_periodsize != 0) { 1055 1050 if (params_period_size(params) << rme96->capture_frlog != 1056 1051 rme96->playback_periodsize) 1057 - { 1058 - spin_unlock_irq(&rme96->lock); 1059 1052 return -EBUSY; 1060 - } 1061 1053 } 1062 1054 rme96->capture_periodsize = 1063 1055 params_period_size(params) << rme96->capture_frlog; 1064 1056 snd_rme96_set_period_properties(rme96, rme96->capture_periodsize); 1065 - spin_unlock_irq(&rme96->lock); 1066 1057 1067 1058 return 0; 1068 1059 } ··· 1150 1165 struct snd_pcm_runtime *runtime = substream->runtime; 1151 1166 1152 1167 snd_pcm_set_sync(substream); 1153 - spin_lock_irq(&rme96->lock); 1154 - if (rme96->playback_substream) { 1155 - spin_unlock_irq(&rme96->lock); 1156 - return -EBUSY; 1157 - } 1158 - rme96->wcreg &= ~RME96_WCR_ADAT; 1159 - writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1160 - rme96->playback_substream = substream; 1161 - spin_unlock_irq(&rme96->lock); 1168 + scoped_guard(spinlock_irq, &rme96->lock) { 1169 + if (rme96->playback_substream) 1170 + return -EBUSY; 1171 + rme96->wcreg &= ~RME96_WCR_ADAT; 1172 + writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1173 + rme96->playback_substream = substream; 1174 + } 1162 1175 1163 1176 runtime->hw = snd_rme96_playback_spdif_info; 1164 1177 if (!(rme96->wcreg & RME96_WCR_MASTER) && ··· 1198 1215 } 1199 1216 } 1200 1217 1201 - spin_lock_irq(&rme96->lock); 1202 - if (rme96->capture_substream) { 1203 - spin_unlock_irq(&rme96->lock); 1204 - return -EBUSY; 1205 - } 1206 - rme96->capture_substream = substream; 1207 - spin_unlock_irq(&rme96->lock); 1218 + scoped_guard(spinlock_irq, &rme96->lock) { 1219 + if (rme96->capture_substream) 1220 + return -EBUSY; 1221 + rme96->capture_substream = substream; 1222 + } 1208 1223 1209 1224 rme96_set_buffer_size_constraint(rme96, runtime); 1210 1225 return 0; ··· 1216 1235 struct snd_pcm_runtime *runtime = substream->runtime; 1217 1236 1218 1237 snd_pcm_set_sync(substream); 1219 - spin_lock_irq(&rme96->lock); 1220 - if (rme96->playback_substream) { 1221 - spin_unlock_irq(&rme96->lock); 1222 - return -EBUSY; 1223 - } 1224 - rme96->wcreg |= RME96_WCR_ADAT; 1225 - writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1226 - rme96->playback_substream = substream; 1227 - spin_unlock_irq(&rme96->lock); 1238 + scoped_guard(spinlock_irq, &rme96->lock) { 1239 + if (rme96->playback_substream) 1240 + return -EBUSY; 1241 + rme96->wcreg |= RME96_WCR_ADAT; 1242 + writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1243 + rme96->playback_substream = substream; 1244 + } 1228 1245 1229 1246 runtime->hw = snd_rme96_playback_adat_info; 1230 1247 if (!(rme96->wcreg & RME96_WCR_MASTER) && ··· 1264 1285 runtime->hw.rate_max = rate; 1265 1286 } 1266 1287 1267 - spin_lock_irq(&rme96->lock); 1268 - if (rme96->capture_substream) { 1269 - spin_unlock_irq(&rme96->lock); 1270 - return -EBUSY; 1271 - } 1272 - rme96->capture_substream = substream; 1273 - spin_unlock_irq(&rme96->lock); 1288 + scoped_guard(spinlock_irq, &rme96->lock) { 1289 + if (rme96->capture_substream) 1290 + return -EBUSY; 1291 + rme96->capture_substream = substream; 1292 + } 1274 1293 1275 1294 rme96_set_buffer_size_constraint(rme96, runtime); 1276 1295 return 0; ··· 1280 1303 struct rme96 *rme96 = snd_pcm_substream_chip(substream); 1281 1304 int spdif = 0; 1282 1305 1283 - spin_lock_irq(&rme96->lock); 1284 - if (RME96_ISPLAYING(rme96)) { 1285 - snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK); 1306 + scoped_guard(spinlock_irq, &rme96->lock) { 1307 + if (RME96_ISPLAYING(rme96)) 1308 + snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK); 1309 + rme96->playback_substream = NULL; 1310 + rme96->playback_periodsize = 0; 1311 + spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0; 1286 1312 } 1287 - rme96->playback_substream = NULL; 1288 - rme96->playback_periodsize = 0; 1289 - spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0; 1290 - spin_unlock_irq(&rme96->lock); 1291 1313 if (spdif) { 1292 1314 rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; 1293 1315 snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE | ··· 1300 1324 { 1301 1325 struct rme96 *rme96 = snd_pcm_substream_chip(substream); 1302 1326 1303 - spin_lock_irq(&rme96->lock); 1327 + guard(spinlock_irq)(&rme96->lock); 1304 1328 if (RME96_ISRECORDING(rme96)) { 1305 1329 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE); 1306 1330 } 1307 1331 rme96->capture_substream = NULL; 1308 1332 rme96->capture_periodsize = 0; 1309 - spin_unlock_irq(&rme96->lock); 1310 1333 return 0; 1311 1334 } 1312 1335 ··· 1314 1339 { 1315 1340 struct rme96 *rme96 = snd_pcm_substream_chip(substream); 1316 1341 1317 - spin_lock_irq(&rme96->lock); 1342 + guard(spinlock_irq)(&rme96->lock); 1318 1343 if (RME96_ISPLAYING(rme96)) { 1319 1344 snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK); 1320 1345 } 1321 1346 writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS); 1322 - spin_unlock_irq(&rme96->lock); 1323 1347 return 0; 1324 1348 } 1325 1349 ··· 1327 1353 { 1328 1354 struct rme96 *rme96 = snd_pcm_substream_chip(substream); 1329 1355 1330 - spin_lock_irq(&rme96->lock); 1356 + guard(spinlock_irq)(&rme96->lock); 1331 1357 if (RME96_ISRECORDING(rme96)) { 1332 1358 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE); 1333 1359 } 1334 1360 writel(0, rme96->iobase + RME96_IO_RESET_REC_POS); 1335 - spin_unlock_irq(&rme96->lock); 1336 1361 return 0; 1337 1362 } 1338 1363 ··· 1802 1829 { 1803 1830 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 1804 1831 1805 - spin_lock_irq(&rme96->lock); 1832 + guard(spinlock_irq)(&rme96->lock); 1806 1833 ucontrol->value.integer.value[0] = rme96->wcreg & RME96_WCR_SEL ? 0 : 1; 1807 - spin_unlock_irq(&rme96->lock); 1808 1834 return 0; 1809 1835 } 1810 1836 static int ··· 1814 1842 int change; 1815 1843 1816 1844 val = ucontrol->value.integer.value[0] ? 0 : RME96_WCR_SEL; 1817 - spin_lock_irq(&rme96->lock); 1845 + guard(spinlock_irq)(&rme96->lock); 1818 1846 val = (rme96->wcreg & ~RME96_WCR_SEL) | val; 1819 1847 change = val != rme96->wcreg; 1820 1848 rme96->wcreg = val; 1821 1849 writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER); 1822 - spin_unlock_irq(&rme96->lock); 1823 1850 return change; 1824 1851 } 1825 1852 ··· 1864 1893 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 1865 1894 unsigned int items = 3; 1866 1895 1867 - spin_lock_irq(&rme96->lock); 1896 + guard(spinlock_irq)(&rme96->lock); 1868 1897 ucontrol->value.enumerated.item[0] = snd_rme96_getinputtype(rme96); 1869 1898 1870 1899 switch (rme96->pci->device) { ··· 1894 1923 ucontrol->value.enumerated.item[0] = items - 1; 1895 1924 } 1896 1925 1897 - spin_unlock_irq(&rme96->lock); 1898 1926 return 0; 1899 1927 } 1900 1928 static int ··· 1931 1961 } 1932 1962 } 1933 1963 1934 - spin_lock_irq(&rme96->lock); 1964 + guard(spinlock_irq)(&rme96->lock); 1935 1965 change = (int)val != snd_rme96_getinputtype(rme96); 1936 1966 snd_rme96_setinputtype(rme96, val); 1937 - spin_unlock_irq(&rme96->lock); 1938 1967 return change; 1939 1968 } 1940 1969 ··· 1949 1980 { 1950 1981 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 1951 1982 1952 - spin_lock_irq(&rme96->lock); 1983 + guard(spinlock_irq)(&rme96->lock); 1953 1984 ucontrol->value.enumerated.item[0] = snd_rme96_getclockmode(rme96); 1954 - spin_unlock_irq(&rme96->lock); 1955 1985 return 0; 1956 1986 } 1957 1987 static int ··· 1961 1993 int change; 1962 1994 1963 1995 val = ucontrol->value.enumerated.item[0] % 3; 1964 - spin_lock_irq(&rme96->lock); 1996 + guard(spinlock_irq)(&rme96->lock); 1965 1997 change = (int)val != snd_rme96_getclockmode(rme96); 1966 1998 snd_rme96_setclockmode(rme96, val); 1967 - spin_unlock_irq(&rme96->lock); 1968 1999 return change; 1969 2000 } 1970 2001 ··· 1981 2014 { 1982 2015 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 1983 2016 1984 - spin_lock_irq(&rme96->lock); 2017 + guard(spinlock_irq)(&rme96->lock); 1985 2018 ucontrol->value.enumerated.item[0] = snd_rme96_getattenuation(rme96); 1986 - spin_unlock_irq(&rme96->lock); 1987 2019 return 0; 1988 2020 } 1989 2021 static int ··· 1993 2027 int change; 1994 2028 1995 2029 val = ucontrol->value.enumerated.item[0] % 4; 1996 - spin_lock_irq(&rme96->lock); 2030 + guard(spinlock_irq)(&rme96->lock); 1997 2031 1998 2032 change = (int)val != snd_rme96_getattenuation(rme96); 1999 2033 snd_rme96_setattenuation(rme96, val); 2000 - spin_unlock_irq(&rme96->lock); 2001 2034 return change; 2002 2035 } 2003 2036 ··· 2012 2047 { 2013 2048 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 2014 2049 2015 - spin_lock_irq(&rme96->lock); 2050 + guard(spinlock_irq)(&rme96->lock); 2016 2051 ucontrol->value.enumerated.item[0] = snd_rme96_getmontracks(rme96); 2017 - spin_unlock_irq(&rme96->lock); 2018 2052 return 0; 2019 2053 } 2020 2054 static int ··· 2024 2060 int change; 2025 2061 2026 2062 val = ucontrol->value.enumerated.item[0] % 4; 2027 - spin_lock_irq(&rme96->lock); 2063 + guard(spinlock_irq)(&rme96->lock); 2028 2064 change = (int)val != snd_rme96_getmontracks(rme96); 2029 2065 snd_rme96_setmontracks(rme96, val); 2030 - spin_unlock_irq(&rme96->lock); 2031 2066 return change; 2032 2067 } 2033 2068 ··· 2074 2111 u32 val; 2075 2112 2076 2113 val = snd_rme96_convert_from_aes(&ucontrol->value.iec958); 2077 - spin_lock_irq(&rme96->lock); 2114 + guard(spinlock_irq)(&rme96->lock); 2078 2115 change = val != rme96->wcreg_spdif; 2079 2116 rme96->wcreg_spdif = val; 2080 - spin_unlock_irq(&rme96->lock); 2081 2117 return change; 2082 2118 } 2083 2119 ··· 2102 2140 u32 val; 2103 2141 2104 2142 val = snd_rme96_convert_from_aes(&ucontrol->value.iec958); 2105 - spin_lock_irq(&rme96->lock); 2143 + guard(spinlock_irq)(&rme96->lock); 2106 2144 change = val != rme96->wcreg_spdif_stream; 2107 2145 rme96->wcreg_spdif_stream = val; 2108 2146 rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP); 2109 2147 rme96->wcreg |= val; 2110 2148 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); 2111 - spin_unlock_irq(&rme96->lock); 2112 2149 return change; 2113 2150 } 2114 2151 ··· 2141 2180 { 2142 2181 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); 2143 2182 2144 - spin_lock_irq(&rme96->lock); 2183 + guard(spinlock_irq)(&rme96->lock); 2145 2184 u->value.integer.value[0] = rme96->vol[0]; 2146 2185 u->value.integer.value[1] = rme96->vol[1]; 2147 - spin_unlock_irq(&rme96->lock); 2148 2186 2149 2187 return 0; 2150 2188 } ··· 2159 2199 if (!RME96_HAS_ANALOG_OUT(rme96)) 2160 2200 return -EINVAL; 2161 2201 maxvol = RME96_185X_MAX_OUT(rme96); 2162 - spin_lock_irq(&rme96->lock); 2202 + guard(spinlock_irq)(&rme96->lock); 2163 2203 vol = u->value.integer.value[0]; 2164 2204 if (vol != rme96->vol[0] && vol <= maxvol) { 2165 2205 rme96->vol[0] = vol; ··· 2172 2212 } 2173 2213 if (change) 2174 2214 snd_rme96_apply_dac_volume(rme96); 2175 - spin_unlock_irq(&rme96->lock); 2176 2215 2177 2216 return change; 2178 2217 }