sound fixes for 6.1-rc8
Likely the last piece for 6.1; the only significant fixes are ASoC core ops fixes, while others are device-specific (rather minor) fixes in ASoC and FireWire drivers. All appear safe enough to take as a late stage material. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmOJuooOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+RThAAxOJ3TUepppN5MXhM2r4khA1dV8xKIexOHddv n1g/rmqkHsSr+VltnQ2GbnUUmt4fgl5nXFEOlZCDW2z60j6Ue28fbimW6DH5yd+V rjbPg2i9zolwVH8MZsvl7jbb2jMeFFqXhwa8650Oxg3BRdOshUhvpFAbjWoAAZEk p0E9oSGvhmebtQlbtlHWlDBwdfPxbyc5pFxM5ESe9ckq6Uc5WTfrkrw7uz9yeqED vP92waW6UywBPpeXRgZBzvvAZP3tNTs/NW8VZWtpDzesdBH6M2hlGpL0MviBjI0J gWgThxjOoS8yi/Js+18DDWq8GgO57PQoZKaexCfJvKVDx2aSRH66LPhv+cVROhP7 jPFzH30ESb65TjKrMUnTcPujs+uq4YLPsZ7KBTg1ylUEC1477Ja5C1Q1lsLCXj1+ c7NoAO6/8nEjuezlun3kNXZ1dJGuFSRW2MdzyXGOAsVKwFPUfJGNFCE/h77826jn 50SHMRwnNkOHIYDzB+W7fZ5HPId6QCzXZLoPuzbFpEeLYjqNUO8KYp3oh+ssfXiu cKioCzl07Fx4DKl5NNCG6VXXVKhzYj9MwtzNCIMIP8neWarMuW2e82/H+rS3v8Fc 4hM8mZ90u8mxd36cMa+SLYpIfdTUEMAZpdtMc4WHc7BBjaZx5FDU5QZYkqZpdsOY L/BcX5Q= =XTUR -----END PGP SIGNATURE----- Merge tag 'sound-6.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Likely the last piece for 6.1; the only significant fixes are ASoC core ops fixes, while others are device-specific (rather minor) fixes in ASoC and FireWire drivers. All appear safe enough to take as a late stage material" * tag 'sound-6.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: dice: fix regression for Lexicon I-ONIX FW810S ASoC: cs42l51: Correct PGA Volume minimum value ASoC: ops: Correct bounds check for second channel on SX controls ASoC: tlv320adc3xxx: Fix build error for implicit function declaration ASoC: ops: Check bounds for second channel in snd_soc_put_volsw_sx() ASoC: ops: Fix bounds check for _sx controls ASoC: fsl_micfil: explicitly clear CHnF flags ASoC: fsl_micfil: explicitly clear software reset bit
This commit is contained in:
commit
a1e9185d20
@ -59,7 +59,7 @@ int snd_dice_stream_get_rate_mode(struct snd_dice *dice, unsigned int rate,
|
||||
|
||||
static int select_clock(struct snd_dice *dice, unsigned int rate)
|
||||
{
|
||||
__be32 reg;
|
||||
__be32 reg, new;
|
||||
u32 data;
|
||||
int i;
|
||||
int err;
|
||||
@ -83,15 +83,17 @@ static int select_clock(struct snd_dice *dice, unsigned int rate)
|
||||
if (completion_done(&dice->clock_accepted))
|
||||
reinit_completion(&dice->clock_accepted);
|
||||
|
||||
reg = cpu_to_be32(data);
|
||||
new = cpu_to_be32(data);
|
||||
err = snd_dice_transaction_write_global(dice, GLOBAL_CLOCK_SELECT,
|
||||
®, sizeof(reg));
|
||||
&new, sizeof(new));
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (wait_for_completion_timeout(&dice->clock_accepted,
|
||||
msecs_to_jiffies(NOTIFICATION_TIMEOUT_MS)) == 0)
|
||||
return -ETIMEDOUT;
|
||||
msecs_to_jiffies(NOTIFICATION_TIMEOUT_MS)) == 0) {
|
||||
if (reg != new)
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ static const struct snd_kcontrol_new cs42l51_snd_controls[] = {
|
||||
0, 0xA0, 96, adc_att_tlv),
|
||||
SOC_DOUBLE_R_SX_TLV("PGA Volume",
|
||||
CS42L51_ALC_PGA_CTL, CS42L51_ALC_PGB_CTL,
|
||||
0, 0x19, 30, pga_tlv),
|
||||
0, 0x1A, 30, pga_tlv),
|
||||
SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0),
|
||||
SOC_SINGLE("Auto-Mute Switch", CS42L51_DAC_CTL, 2, 1, 0),
|
||||
SOC_SINGLE("Soft Ramp Switch", CS42L51_DAC_CTL, 1, 1, 0),
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#include <dt-bindings/sound/tlv320adc3xxx.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/io.h>
|
||||
@ -1025,7 +1026,9 @@ static const struct gpio_chip adc3xxx_gpio_chip = {
|
||||
|
||||
static void adc3xxx_free_gpio(struct adc3xxx *adc3xxx)
|
||||
{
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
gpiochip_remove(&adc3xxx->gpio_chip);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void adc3xxx_init_gpio(struct adc3xxx *adc3xxx)
|
||||
|
@ -194,6 +194,25 @@ static int fsl_micfil_reset(struct device *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* SRES is self-cleared bit, but REG_MICFIL_CTRL1 is defined
|
||||
* as non-volatile register, so SRES still remain in regmap
|
||||
* cache after set, that every update of REG_MICFIL_CTRL1,
|
||||
* software reset happens. so clear it explicitly.
|
||||
*/
|
||||
ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1,
|
||||
MICFIL_CTRL1_SRES);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Set SRES should clear CHnF flags, But even add delay here
|
||||
* the CHnF may not be cleared sometimes, so clear CHnF explicitly.
|
||||
*/
|
||||
ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -452,7 +452,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
|
||||
val = ucontrol->value.integer.value[0];
|
||||
if (mc->platform_max && val > mc->platform_max)
|
||||
return -EINVAL;
|
||||
if (val > max - min)
|
||||
if (val > max)
|
||||
return -EINVAL;
|
||||
val_mask = mask << shift;
|
||||
val = (val + min) & mask;
|
||||
@ -464,10 +464,15 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
|
||||
ret = err;
|
||||
|
||||
if (snd_soc_volsw_is_stereo(mc)) {
|
||||
unsigned int val2;
|
||||
unsigned int val2 = ucontrol->value.integer.value[1];
|
||||
|
||||
if (mc->platform_max && val2 > mc->platform_max)
|
||||
return -EINVAL;
|
||||
if (val2 > max)
|
||||
return -EINVAL;
|
||||
|
||||
val_mask = mask << rshift;
|
||||
val2 = (ucontrol->value.integer.value[1] + min) & mask;
|
||||
val2 = (val2 + min) & mask;
|
||||
val2 = val2 << rshift;
|
||||
|
||||
err = snd_soc_component_update_bits(component, reg2, val_mask,
|
||||
|
Loading…
x
Reference in New Issue
Block a user