Skip to content

Commit cde4d75

Browse files
committed
Merge remote-tracking branch 'asoc/fix/fsl' into asoc-linus
2 parents 971a6f4 + fc7dc61 commit cde4d75

File tree

20 files changed

+209
-124
lines changed

20 files changed

+209
-124
lines changed

include/sound/cs42l52.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ struct cs42l52_platform_data {
3131
/* Charge Pump Freq. Check datasheet Pg73 */
3232
unsigned int chgfreq;
3333

34+
/* Reset GPIO */
35+
unsigned int reset_gpio;
3436
};
3537

3638
#endif /* __CS42L52_H */

sound/soc/codecs/ab8500-codec.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,17 +2312,17 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
23122312
case 0:
23132313
break;
23142314
case 1:
2315-
slot = find_first_bit((unsigned long *)&tx_mask, 32);
2315+
slot = ffs(tx_mask);
23162316
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
23172317
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
23182318
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
23192319
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
23202320
break;
23212321
case 2:
2322-
slot = find_first_bit((unsigned long *)&tx_mask, 32);
2322+
slot = ffs(tx_mask);
23232323
snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot);
23242324
snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
2325-
slot = find_next_bit((unsigned long *)&tx_mask, 32, slot + 1);
2325+
slot = fls(tx_mask);
23262326
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot);
23272327
snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot);
23282328
break;
@@ -2353,18 +2353,18 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
23532353
case 0:
23542354
break;
23552355
case 1:
2356-
slot = find_first_bit((unsigned long *)&rx_mask, 32);
2356+
slot = ffs(rx_mask);
23572357
snd_soc_update_bits(codec, AB8500_ADSLOTSEL(slot),
23582358
AB8500_MASK_SLOT(slot),
23592359
AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
23602360
break;
23612361
case 2:
2362-
slot = find_first_bit((unsigned long *)&rx_mask, 32);
2362+
slot = ffs(rx_mask);
23632363
snd_soc_update_bits(codec,
23642364
AB8500_ADSLOTSEL(slot),
23652365
AB8500_MASK_SLOT(slot),
23662366
AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
2367-
slot = find_next_bit((unsigned long *)&rx_mask, 32, slot + 1);
2367+
slot = fls(rx_mask);
23682368
snd_soc_update_bits(codec,
23692369
AB8500_ADSLOTSEL(slot),
23702370
AB8500_MASK_SLOT(slot),
@@ -2586,6 +2586,8 @@ static int ab8500_codec_driver_probe(struct platform_device *pdev)
25862586
/* Create driver private-data struct */
25872587
drvdata = devm_kzalloc(&pdev->dev, sizeof(struct ab8500_codec_drvdata),
25882588
GFP_KERNEL);
2589+
if (!drvdata)
2590+
return -ENOMEM;
25892591
drvdata->sid_status = SID_UNCONFIGURED;
25902592
drvdata->anc_status = ANC_UNCONFIGURED;
25912593
dev_set_drvdata(&pdev->dev, drvdata);

sound/soc/codecs/ak4642.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream,
257257
* This operation came from example code of
258258
* "ASAHI KASEI AK4642" (japanese) manual p94.
259259
*/
260-
snd_soc_write(codec, SG_SL1, PMMP | MGAIN0);
260+
snd_soc_update_bits(codec, SG_SL1, PMMP | MGAIN0, PMMP | MGAIN0);
261261
snd_soc_write(codec, TIMER, ZTM(0x3) | WTM(0x3));
262262
snd_soc_write(codec, ALC_CTL1, ALC | LMTH0);
263263
snd_soc_update_bits(codec, PW_MGMT1, PMADL, PMADL);

sound/soc/codecs/cs42l52.c

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <linux/kernel.h>
1818
#include <linux/init.h>
1919
#include <linux/delay.h>
20+
#include <linux/gpio.h>
2021
#include <linux/pm.h>
2122
#include <linux/i2c.h>
2223
#include <linux/input.h>
@@ -1116,40 +1117,6 @@ static int cs42l52_probe(struct snd_soc_codec *codec)
11161117
cs42l52->sysclk = CS42L52_DEFAULT_CLK;
11171118
cs42l52->config.format = CS42L52_DEFAULT_FORMAT;
11181119

1119-
/* Set Platform MICx CFG */
1120-
snd_soc_update_bits(codec, CS42L52_MICA_CTL,
1121-
CS42L52_MIC_CTL_TYPE_MASK,
1122-
cs42l52->pdata.mica_cfg <<
1123-
CS42L52_MIC_CTL_TYPE_SHIFT);
1124-
1125-
snd_soc_update_bits(codec, CS42L52_MICB_CTL,
1126-
CS42L52_MIC_CTL_TYPE_MASK,
1127-
cs42l52->pdata.micb_cfg <<
1128-
CS42L52_MIC_CTL_TYPE_SHIFT);
1129-
1130-
/* if Single Ended, Get Mic_Select */
1131-
if (cs42l52->pdata.mica_cfg)
1132-
snd_soc_update_bits(codec, CS42L52_MICA_CTL,
1133-
CS42L52_MIC_CTL_MIC_SEL_MASK,
1134-
cs42l52->pdata.mica_sel <<
1135-
CS42L52_MIC_CTL_MIC_SEL_SHIFT);
1136-
if (cs42l52->pdata.micb_cfg)
1137-
snd_soc_update_bits(codec, CS42L52_MICB_CTL,
1138-
CS42L52_MIC_CTL_MIC_SEL_MASK,
1139-
cs42l52->pdata.micb_sel <<
1140-
CS42L52_MIC_CTL_MIC_SEL_SHIFT);
1141-
1142-
/* Set Platform Charge Pump Freq */
1143-
snd_soc_update_bits(codec, CS42L52_CHARGE_PUMP,
1144-
CS42L52_CHARGE_PUMP_MASK,
1145-
cs42l52->pdata.chgfreq <<
1146-
CS42L52_CHARGE_PUMP_SHIFT);
1147-
1148-
/* Set Platform Bias Level */
1149-
snd_soc_update_bits(codec, CS42L52_IFACE_CTL2,
1150-
CS42L52_IFACE_CTL2_BIAS_LVL,
1151-
cs42l52->pdata.micbias_lvl);
1152-
11531120
return ret;
11541121
}
11551122

@@ -1205,6 +1172,7 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
12051172
const struct i2c_device_id *id)
12061173
{
12071174
struct cs42l52_private *cs42l52;
1175+
struct cs42l52_platform_data *pdata = dev_get_platdata(&i2c_client->dev);
12081176
int ret;
12091177
unsigned int devid = 0;
12101178
unsigned int reg;
@@ -1222,11 +1190,22 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
12221190
return ret;
12231191
}
12241192

1225-
i2c_set_clientdata(i2c_client, cs42l52);
1193+
if (pdata)
1194+
cs42l52->pdata = *pdata;
1195+
1196+
if (cs42l52->pdata.reset_gpio) {
1197+
ret = gpio_request_one(cs42l52->pdata.reset_gpio,
1198+
GPIOF_OUT_INIT_HIGH, "CS42L52 /RST");
1199+
if (ret < 0) {
1200+
dev_err(&i2c_client->dev, "Failed to request /RST %d: %d\n",
1201+
cs42l52->pdata.reset_gpio, ret);
1202+
return ret;
1203+
}
1204+
gpio_set_value_cansleep(cs42l52->pdata.reset_gpio, 0);
1205+
gpio_set_value_cansleep(cs42l52->pdata.reset_gpio, 1);
1206+
}
12261207

1227-
if (dev_get_platdata(&i2c_client->dev))
1228-
memcpy(&cs42l52->pdata, dev_get_platdata(&i2c_client->dev),
1229-
sizeof(cs42l52->pdata));
1208+
i2c_set_clientdata(i2c_client, cs42l52);
12301209

12311210
ret = regmap_register_patch(cs42l52->regmap, cs42l52_threshold_patch,
12321211
ARRAY_SIZE(cs42l52_threshold_patch));
@@ -1244,7 +1223,43 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
12441223
return ret;
12451224
}
12461225

1247-
regcache_cache_only(cs42l52->regmap, true);
1226+
dev_info(&i2c_client->dev, "Cirrus Logic CS42L52, Revision: %02X\n",
1227+
reg & 0xFF);
1228+
1229+
/* Set Platform Data */
1230+
if (cs42l52->pdata.mica_cfg)
1231+
regmap_update_bits(cs42l52->regmap, CS42L52_MICA_CTL,
1232+
CS42L52_MIC_CTL_TYPE_MASK,
1233+
cs42l52->pdata.mica_cfg <<
1234+
CS42L52_MIC_CTL_TYPE_SHIFT);
1235+
1236+
if (cs42l52->pdata.micb_cfg)
1237+
regmap_update_bits(cs42l52->regmap, CS42L52_MICB_CTL,
1238+
CS42L52_MIC_CTL_TYPE_MASK,
1239+
cs42l52->pdata.micb_cfg <<
1240+
CS42L52_MIC_CTL_TYPE_SHIFT);
1241+
1242+
if (cs42l52->pdata.mica_sel)
1243+
regmap_update_bits(cs42l52->regmap, CS42L52_MICA_CTL,
1244+
CS42L52_MIC_CTL_MIC_SEL_MASK,
1245+
cs42l52->pdata.mica_sel <<
1246+
CS42L52_MIC_CTL_MIC_SEL_SHIFT);
1247+
if (cs42l52->pdata.micb_sel)
1248+
regmap_update_bits(cs42l52->regmap, CS42L52_MICB_CTL,
1249+
CS42L52_MIC_CTL_MIC_SEL_MASK,
1250+
cs42l52->pdata.micb_sel <<
1251+
CS42L52_MIC_CTL_MIC_SEL_SHIFT);
1252+
1253+
if (cs42l52->pdata.chgfreq)
1254+
regmap_update_bits(cs42l52->regmap, CS42L52_CHARGE_PUMP,
1255+
CS42L52_CHARGE_PUMP_MASK,
1256+
cs42l52->pdata.chgfreq <<
1257+
CS42L52_CHARGE_PUMP_SHIFT);
1258+
1259+
if (cs42l52->pdata.micbias_lvl)
1260+
regmap_update_bits(cs42l52->regmap, CS42L52_IFACE_CTL2,
1261+
CS42L52_IFACE_CTL2_BIAS_LVL,
1262+
cs42l52->pdata.micbias_lvl);
12481263

12491264
ret = snd_soc_register_codec(&i2c_client->dev,
12501265
&soc_codec_dev_cs42l52, &cs42l52_dai, 1);

sound/soc/codecs/cs42l52.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,6 @@
269269
#define CS42L52_FIX_BITS1 0x3E
270270
#define CS42L52_FIX_BITS2 0x47
271271

272-
#define CS42L52_MAX_REGISTER 0x34
272+
#define CS42L52_MAX_REGISTER 0x47
273273

274274
#endif

sound/soc/codecs/ml26124.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,8 @@ static int ml26124_hw_params(struct snd_pcm_substream *substream,
342342
struct ml26124_priv *priv = snd_soc_codec_get_drvdata(codec);
343343
int i = get_coeff(priv->mclk, params_rate(hw_params));
344344

345+
if (i < 0)
346+
return i;
345347
priv->substream = substream;
346348
priv->rate = params_rate(hw_params);
347349

sound/soc/codecs/rt5640.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,8 +1604,8 @@ static int rt5640_hw_params(struct snd_pcm_substream *substream,
16041604
struct snd_soc_pcm_runtime *rtd = substream->private_data;
16051605
struct snd_soc_codec *codec = rtd->codec;
16061606
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
1607-
unsigned int val_len = 0, val_clk, mask_clk, dai_sel;
1608-
int pre_div, bclk_ms, frame_size;
1607+
unsigned int val_len = 0, val_clk, mask_clk;
1608+
int dai_sel, pre_div, bclk_ms, frame_size;
16091609

16101610
rt5640->lrck[dai->id] = params_rate(params);
16111611
pre_div = get_clk_info(rt5640->sysclk, rt5640->lrck[dai->id]);
@@ -1675,7 +1675,8 @@ static int rt5640_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
16751675
{
16761676
struct snd_soc_codec *codec = dai->codec;
16771677
struct rt5640_priv *rt5640 = snd_soc_codec_get_drvdata(codec);
1678-
unsigned int reg_val = 0, dai_sel;
1678+
unsigned int reg_val = 0;
1679+
int dai_sel;
16791680

16801681
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
16811682
case SND_SOC_DAIFMT_CBM_CFM:

sound/soc/codecs/wm0010.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -793,11 +793,11 @@ static int wm0010_set_sysclk(struct snd_soc_codec *codec, int source,
793793
wm0010->max_spi_freq = 0;
794794
} else {
795795
for (i = 0; i < ARRAY_SIZE(pll_clock_map); i++)
796-
if (freq >= pll_clock_map[i].max_sysclk)
796+
if (freq >= pll_clock_map[i].max_sysclk) {
797+
wm0010->max_spi_freq = pll_clock_map[i].max_pll_spi_speed;
798+
wm0010->pll_clkctrl1 = pll_clock_map[i].pll_clkctrl1;
797799
break;
798-
799-
wm0010->max_spi_freq = pll_clock_map[i].max_pll_spi_speed;
800-
wm0010->pll_clkctrl1 = pll_clock_map[i].pll_clkctrl1;
800+
}
801801
}
802802

803803
return 0;

sound/soc/codecs/wm5110.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,24 +1024,36 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
10241024
ARIZONA_MUX_ROUTES("ASRC2L", "ASRC2L"),
10251025
ARIZONA_MUX_ROUTES("ASRC2R", "ASRC2R"),
10261026

1027+
{ "AEC Loopback", "HPOUT1L", "OUT1L" },
1028+
{ "AEC Loopback", "HPOUT1R", "OUT1R" },
10271029
{ "HPOUT1L", NULL, "OUT1L" },
10281030
{ "HPOUT1R", NULL, "OUT1R" },
10291031

1032+
{ "AEC Loopback", "HPOUT2L", "OUT2L" },
1033+
{ "AEC Loopback", "HPOUT2R", "OUT2R" },
10301034
{ "HPOUT2L", NULL, "OUT2L" },
10311035
{ "HPOUT2R", NULL, "OUT2R" },
10321036

1037+
{ "AEC Loopback", "HPOUT3L", "OUT3L" },
1038+
{ "AEC Loopback", "HPOUT3R", "OUT3R" },
10331039
{ "HPOUT3L", NULL, "OUT3L" },
10341040
{ "HPOUT3R", NULL, "OUT3L" },
10351041

1042+
{ "AEC Loopback", "SPKOUTL", "OUT4L" },
10361043
{ "SPKOUTLN", NULL, "OUT4L" },
10371044
{ "SPKOUTLP", NULL, "OUT4L" },
10381045

1046+
{ "AEC Loopback", "SPKOUTR", "OUT4R" },
10391047
{ "SPKOUTRN", NULL, "OUT4R" },
10401048
{ "SPKOUTRP", NULL, "OUT4R" },
10411049

1050+
{ "AEC Loopback", "SPKDAT1L", "OUT5L" },
1051+
{ "AEC Loopback", "SPKDAT1R", "OUT5R" },
10421052
{ "SPKDAT1L", NULL, "OUT5L" },
10431053
{ "SPKDAT1R", NULL, "OUT5R" },
10441054

1055+
{ "AEC Loopback", "SPKDAT2L", "OUT6L" },
1056+
{ "AEC Loopback", "SPKDAT2R", "OUT6R" },
10451057
{ "SPKDAT2L", NULL, "OUT6L" },
10461058
{ "SPKDAT2R", NULL, "OUT6R" },
10471059

sound/soc/codecs/wm8962.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,6 +1758,9 @@ SOC_DOUBLE_R_TLV("EQ4 Volume", WM8962_EQ3, WM8962_EQ23,
17581758
WM8962_EQL_B4_GAIN_SHIFT, 31, 0, eq_tlv),
17591759
SOC_DOUBLE_R_TLV("EQ5 Volume", WM8962_EQ3, WM8962_EQ23,
17601760
WM8962_EQL_B5_GAIN_SHIFT, 31, 0, eq_tlv),
1761+
SND_SOC_BYTES("EQL Coefficients", WM8962_EQ4, 18),
1762+
SND_SOC_BYTES("EQR Coefficients", WM8962_EQ24, 18),
1763+
17611764

17621765
SOC_SINGLE("3D Switch", WM8962_THREED1, 0, 1, 0),
17631766
SND_SOC_BYTES_MASK("3D Coefficients", WM8962_THREED1, 4, WM8962_THREED_ENA),
@@ -1775,6 +1778,11 @@ WM8962_DSP2_ENABLE("HPF2 Switch", WM8962_HPF2_ENA_SHIFT),
17751778
SND_SOC_BYTES("HPF Coefficients", WM8962_LHPF2, 1),
17761779
WM8962_DSP2_ENABLE("HD Bass Switch", WM8962_HDBASS_ENA_SHIFT),
17771780
SND_SOC_BYTES("HD Bass Coefficients", WM8962_HDBASS_AI_1, 30),
1781+
1782+
SOC_DOUBLE("ALC Switch", WM8962_ALC1, WM8962_ALCL_ENA_SHIFT,
1783+
WM8962_ALCR_ENA_SHIFT, 1, 0),
1784+
SND_SOC_BYTES_MASK("ALC Coefficients", WM8962_ALC1, 4,
1785+
WM8962_ALCL_ENA_MASK | WM8962_ALCR_ENA_MASK),
17781786
};
17791787

17801788
static const struct snd_kcontrol_new wm8962_spk_mono_controls[] = {
@@ -3616,28 +3624,28 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
36163624
0);
36173625

36183626
/* Apply static configuration for GPIOs */
3619-
for (i = 0; i < ARRAY_SIZE(pdata->gpio_init); i++)
3620-
if (pdata->gpio_init[i]) {
3627+
for (i = 0; i < ARRAY_SIZE(wm8962->pdata.gpio_init); i++)
3628+
if (wm8962->pdata.gpio_init[i]) {
36213629
wm8962_set_gpio_mode(wm8962, i + 1);
36223630
regmap_write(wm8962->regmap, 0x200 + i,
3623-
pdata->gpio_init[i] & 0xffff);
3631+
wm8962->pdata.gpio_init[i] & 0xffff);
36243632
}
36253633

36263634

36273635
/* Put the speakers into mono mode? */
3628-
if (pdata->spk_mono)
3636+
if (wm8962->pdata.spk_mono)
36293637
regmap_update_bits(wm8962->regmap, WM8962_CLASS_D_CONTROL_2,
36303638
WM8962_SPK_MONO_MASK, WM8962_SPK_MONO);
36313639

36323640
/* Micbias setup, detection enable and detection
36333641
* threasholds. */
3634-
if (pdata->mic_cfg)
3642+
if (wm8962->pdata.mic_cfg)
36353643
regmap_update_bits(wm8962->regmap, WM8962_ADDITIONAL_CONTROL_4,
36363644
WM8962_MICDET_ENA |
36373645
WM8962_MICDET_THR_MASK |
36383646
WM8962_MICSHORT_THR_MASK |
36393647
WM8962_MICBIAS_LVL,
3640-
pdata->mic_cfg);
3648+
wm8962->pdata.mic_cfg);
36413649

36423650
/* Latch volume update bits */
36433651
regmap_update_bits(wm8962->regmap, WM8962_LEFT_INPUT_VOLUME,
@@ -3682,7 +3690,7 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
36823690
}
36833691

36843692
if (wm8962->irq) {
3685-
if (pdata->irq_active_low) {
3693+
if (wm8962->pdata.irq_active_low) {
36863694
trigger = IRQF_TRIGGER_LOW;
36873695
irq_pol = WM8962_IRQ_POL;
36883696
} else {

0 commit comments

Comments
 (0)