Skip to content

Commit 55eafeb

Browse files
committed
Merge remote-tracking branches 'asoc/topic/rt5665', 'asoc/topic/rt5670', 'asoc/topic/rt5677' and 'asoc/topic/samsung' into asoc-next
5 parents cb2b0d7 + abfedab + c26d838 + b7e2672 + 1107a29 commit 55eafeb

File tree

21 files changed

+287
-177
lines changed

21 files changed

+287
-177
lines changed

Documentation/devicetree/bindings/sound/samsung,odroid.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ Required properties:
77
- model - the user-visible name of this sound complex
88
- clocks - should contain entries matching clock names in the clock-names
99
property
10-
- clock-names - should contain following entries:
11-
- "epll" - indicating the EPLL output clock
12-
- "i2s_rclk" - indicating the RCLK (root) clock of the I2S0 controller
1310
- samsung,audio-widgets - this property specifies off-codec audio elements
1411
like headphones or speakers, for details see widgets.txt
1512
- samsung,audio-routing - a list of the connections between audio
@@ -46,9 +43,6 @@ sound {
4643
"IN1", "Mic Jack",
4744
"Mic Jack", "MICBIAS";
4845

49-
clocks = <&clock CLK_FOUT_EPLL>, <&i2s0 CLK_I2S_RCLK_SRC>;
50-
clock-names = "epll", "sclk_i2s";
51-
5246
cpu {
5347
sound-dai = <&i2s0 0>;
5448
};

include/sound/rt5677.h

Lines changed: 0 additions & 45 deletions
This file was deleted.

sound/soc/codecs/rt5665.c

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,16 @@ static void rt5665_jack_detect_handler(struct work_struct *work)
13811381
mutex_unlock(&rt5665->calibrate_mutex);
13821382
}
13831383

1384+
static const char * const rt5665_clk_sync[] = {
1385+
"I2S1_1", "I2S1_2", "I2S2", "I2S3", "IF2 Slave", "IF3 Slave"
1386+
};
1387+
1388+
static const struct soc_enum rt5665_enum[] = {
1389+
SOC_ENUM_SINGLE(RT5665_I2S1_SDP, 11, 5, rt5665_clk_sync),
1390+
SOC_ENUM_SINGLE(RT5665_I2S2_SDP, 11, 5, rt5665_clk_sync),
1391+
SOC_ENUM_SINGLE(RT5665_I2S3_SDP, 11, 5, rt5665_clk_sync),
1392+
};
1393+
13841394
static const struct snd_kcontrol_new rt5665_snd_controls[] = {
13851395
/* Headphone Output Volume */
13861396
SOC_DOUBLE_R_EXT_TLV("Headphone Playback Volume", RT5665_HPL_GAIN,
@@ -1392,6 +1402,9 @@ static const struct snd_kcontrol_new rt5665_snd_controls[] = {
13921402
RT5665_L_VOL_SFT, 15, 1, snd_soc_get_volsw,
13931403
rt5665_mono_vol_put, mono_vol_tlv),
13941404

1405+
SOC_SINGLE_TLV("MONOVOL Playback Volume", RT5665_MONO_OUT,
1406+
RT5665_L_VOL_SFT, 39, 1, out_vol_tlv),
1407+
13951408
/* Output Volume */
13961409
SOC_DOUBLE_TLV("OUT Playback Volume", RT5665_LOUT, RT5665_L_VOL_SFT,
13971410
RT5665_R_VOL_SFT, 39, 1, out_vol_tlv),
@@ -1446,6 +1459,11 @@ static const struct snd_kcontrol_new rt5665_snd_controls[] = {
14461459
SOC_DOUBLE_TLV("STO2 ADC Boost Gain Volume", RT5665_STO2_ADC_BOOST,
14471460
RT5665_STO2_ADC_L_BST_SFT, RT5665_STO2_ADC_R_BST_SFT,
14481461
3, 0, adc_bst_tlv),
1462+
1463+
/* I2S3 CLK Source */
1464+
SOC_ENUM("I2S1 Master Clk Sel", rt5665_enum[0]),
1465+
SOC_ENUM("I2S2 Master Clk Sel", rt5665_enum[1]),
1466+
SOC_ENUM("I2S3 Master Clk Sel", rt5665_enum[2]),
14491467
};
14501468

14511469
/**
@@ -4098,9 +4116,12 @@ static int rt5665_hw_params(struct snd_pcm_substream *substream,
40984116
rt5665->lrck[dai->id] = params_rate(params);
40994117
pre_div = rl6231_get_clk_info(rt5665->sysclk, rt5665->lrck[dai->id]);
41004118
if (pre_div < 0) {
4101-
dev_err(codec->dev, "Unsupported clock setting %d for DAI %d\n",
4102-
rt5665->lrck[dai->id], dai->id);
4103-
return -EINVAL;
4119+
dev_warn(codec->dev, "Force using PLL");
4120+
snd_soc_codec_set_pll(codec, 0, RT5665_PLL1_S_MCLK,
4121+
rt5665->sysclk, rt5665->lrck[dai->id] * 512);
4122+
snd_soc_codec_set_sysclk(codec, RT5665_SCLK_S_PLL1, 0,
4123+
rt5665->lrck[dai->id] * 512, 0);
4124+
pre_div = 1;
41044125
}
41054126
frame_size = snd_soc_params_to_frame_size(params);
41064127
if (frame_size < 0) {
@@ -4183,6 +4204,15 @@ static int rt5665_hw_params(struct snd_pcm_substream *substream,
41834204
break;
41844205
}
41854206

4207+
if (rt5665->master[RT5665_AIF2_1] || rt5665->master[RT5665_AIF2_2]) {
4208+
snd_soc_update_bits(codec, RT5665_I2S_M_CLK_CTRL_1,
4209+
RT5665_I2S2_M_PD_MASK, pre_div << RT5665_I2S2_M_PD_SFT);
4210+
}
4211+
if (rt5665->master[RT5665_AIF3]) {
4212+
snd_soc_update_bits(codec, RT5665_I2S_M_CLK_CTRL_1,
4213+
RT5665_I2S3_M_PD_MASK, pre_div << RT5665_I2S3_M_PD_SFT);
4214+
}
4215+
41864216
return 0;
41874217
}
41884218

@@ -4259,27 +4289,40 @@ static int rt5665_set_codec_sysclk(struct snd_soc_codec *codec, int clk_id,
42594289
int source, unsigned int freq, int dir)
42604290
{
42614291
struct rt5665_priv *rt5665 = snd_soc_codec_get_drvdata(codec);
4262-
unsigned int reg_val = 0;
4292+
unsigned int reg_val = 0, src = 0;
42634293

42644294
if (freq == rt5665->sysclk && clk_id == rt5665->sysclk_src)
42654295
return 0;
42664296

42674297
switch (clk_id) {
42684298
case RT5665_SCLK_S_MCLK:
42694299
reg_val |= RT5665_SCLK_SRC_MCLK;
4300+
src = RT5665_CLK_SRC_MCLK;
42704301
break;
42714302
case RT5665_SCLK_S_PLL1:
42724303
reg_val |= RT5665_SCLK_SRC_PLL1;
4304+
src = RT5665_CLK_SRC_PLL1;
42734305
break;
42744306
case RT5665_SCLK_S_RCCLK:
42754307
reg_val |= RT5665_SCLK_SRC_RCCLK;
4308+
src = RT5665_CLK_SRC_RCCLK;
42764309
break;
42774310
default:
42784311
dev_err(codec->dev, "Invalid clock id (%d)\n", clk_id);
42794312
return -EINVAL;
42804313
}
42814314
snd_soc_update_bits(codec, RT5665_GLB_CLK,
42824315
RT5665_SCLK_SRC_MASK, reg_val);
4316+
4317+
if (rt5665->master[RT5665_AIF2_1] || rt5665->master[RT5665_AIF2_2]) {
4318+
snd_soc_update_bits(codec, RT5665_I2S_M_CLK_CTRL_1,
4319+
RT5665_I2S2_SRC_MASK, src << RT5665_I2S2_SRC_SFT);
4320+
}
4321+
if (rt5665->master[RT5665_AIF3]) {
4322+
snd_soc_update_bits(codec, RT5665_I2S_M_CLK_CTRL_1,
4323+
RT5665_I2S3_SRC_MASK, src << RT5665_I2S3_SRC_SFT);
4324+
}
4325+
42834326
rt5665->sysclk = freq;
42844327
rt5665->sysclk_src = clk_id;
42854328

@@ -4927,7 +4970,7 @@ MODULE_DEVICE_TABLE(of, rt5665_of_match);
49274970
#endif
49284971

49294972
#ifdef CONFIG_ACPI
4930-
static struct acpi_device_id rt5665_acpi_match[] = {
4973+
static const struct acpi_device_id rt5665_acpi_match[] = {
49314974
{"10EC5665", 0,},
49324975
{"10EC5666", 0,},
49334976
{"10EC5668", 0,},

sound/soc/codecs/rt5665.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,27 @@
16281628
#define RT5665_PWR_CLK1M_PD (0x0 << 8)
16291629
#define RT5665_PWR_CLK1M_PU (0x1 << 8)
16301630

1631+
/* I2S Master Mode Clock Control 1 (0x00a0) */
1632+
#define RT5665_CLK_SRC_MCLK (0x0)
1633+
#define RT5665_CLK_SRC_PLL1 (0x1)
1634+
#define RT5665_CLK_SRC_RCCLK (0x2)
1635+
#define RT5665_I2S_PD_1 (0x0)
1636+
#define RT5665_I2S_PD_2 (0x1)
1637+
#define RT5665_I2S_PD_3 (0x2)
1638+
#define RT5665_I2S_PD_4 (0x3)
1639+
#define RT5665_I2S_PD_6 (0x4)
1640+
#define RT5665_I2S_PD_8 (0x5)
1641+
#define RT5665_I2S_PD_12 (0x6)
1642+
#define RT5665_I2S_PD_16 (0x7)
1643+
#define RT5665_I2S2_SRC_MASK (0x3 << 12)
1644+
#define RT5665_I2S2_SRC_SFT 12
1645+
#define RT5665_I2S2_M_PD_MASK (0x7 << 8)
1646+
#define RT5665_I2S2_M_PD_SFT 8
1647+
#define RT5665_I2S3_SRC_MASK (0x3 << 4)
1648+
#define RT5665_I2S3_SRC_SFT 4
1649+
#define RT5665_I2S3_M_PD_MASK (0x7 << 0)
1650+
#define RT5665_I2S3_M_PD_SFT 0
1651+
16311652

16321653
/* EQ Control 1 (0x00b0) */
16331654
#define RT5665_EQ_SRC_DAC (0x0 << 15)

sound/soc/codecs/rt5670.c

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,20 +1151,15 @@ static const char * const rt5670_stereo_adc1_src[] = {
11511151
static SOC_ENUM_SINGLE_DECL(rt5670_stereo1_adc1_enum, RT5670_STO1_ADC_MIXER,
11521152
RT5670_ADC_1_SRC_SFT, rt5670_stereo_adc1_src);
11531153

1154-
static const struct snd_kcontrol_new rt5670_sto_adc_l1_mux =
1155-
SOC_DAPM_ENUM("Stereo1 ADC L1 source", rt5670_stereo1_adc1_enum);
1156-
1157-
static const struct snd_kcontrol_new rt5670_sto_adc_r1_mux =
1158-
SOC_DAPM_ENUM("Stereo1 ADC R1 source", rt5670_stereo1_adc1_enum);
1154+
static const struct snd_kcontrol_new rt5670_sto_adc_1_mux =
1155+
SOC_DAPM_ENUM("Stereo1 ADC 1 Mux", rt5670_stereo1_adc1_enum);
11591156

11601157
static SOC_ENUM_SINGLE_DECL(rt5670_stereo2_adc1_enum, RT5670_STO2_ADC_MIXER,
11611158
RT5670_ADC_1_SRC_SFT, rt5670_stereo_adc1_src);
11621159

1163-
static const struct snd_kcontrol_new rt5670_sto2_adc_l1_mux =
1164-
SOC_DAPM_ENUM("Stereo2 ADC L1 source", rt5670_stereo2_adc1_enum);
1160+
static const struct snd_kcontrol_new rt5670_sto2_adc_1_mux =
1161+
SOC_DAPM_ENUM("Stereo2 ADC 1 Mux", rt5670_stereo2_adc1_enum);
11651162

1166-
static const struct snd_kcontrol_new rt5670_sto2_adc_r1_mux =
1167-
SOC_DAPM_ENUM("Stereo2 ADC R1 source", rt5670_stereo2_adc1_enum);
11681163

11691164
/* MX-27 MX-26 [11] */
11701165
static const char * const rt5670_stereo_adc2_src[] = {
@@ -1174,20 +1169,15 @@ static const char * const rt5670_stereo_adc2_src[] = {
11741169
static SOC_ENUM_SINGLE_DECL(rt5670_stereo1_adc2_enum, RT5670_STO1_ADC_MIXER,
11751170
RT5670_ADC_2_SRC_SFT, rt5670_stereo_adc2_src);
11761171

1177-
static const struct snd_kcontrol_new rt5670_sto_adc_l2_mux =
1178-
SOC_DAPM_ENUM("Stereo1 ADC L2 source", rt5670_stereo1_adc2_enum);
1179-
1180-
static const struct snd_kcontrol_new rt5670_sto_adc_r2_mux =
1181-
SOC_DAPM_ENUM("Stereo1 ADC R2 source", rt5670_stereo1_adc2_enum);
1172+
static const struct snd_kcontrol_new rt5670_sto_adc_2_mux =
1173+
SOC_DAPM_ENUM("Stereo1 ADC 2 Mux", rt5670_stereo1_adc2_enum);
11821174

11831175
static SOC_ENUM_SINGLE_DECL(rt5670_stereo2_adc2_enum, RT5670_STO2_ADC_MIXER,
11841176
RT5670_ADC_2_SRC_SFT, rt5670_stereo_adc2_src);
11851177

1186-
static const struct snd_kcontrol_new rt5670_sto2_adc_l2_mux =
1187-
SOC_DAPM_ENUM("Stereo2 ADC L2 source", rt5670_stereo2_adc2_enum);
1178+
static const struct snd_kcontrol_new rt5670_sto2_adc_2_mux =
1179+
SOC_DAPM_ENUM("Stereo2 ADC 2 Mux", rt5670_stereo2_adc2_enum);
11881180

1189-
static const struct snd_kcontrol_new rt5670_sto2_adc_r2_mux =
1190-
SOC_DAPM_ENUM("Stereo2 ADC R2 source", rt5670_stereo2_adc2_enum);
11911181

11921182
/* MX-27 MX26 [10] */
11931183
static const char * const rt5670_stereo_adc_src[] = {
@@ -1642,23 +1632,23 @@ static const struct snd_soc_dapm_widget rt5670_dapm_widgets[] = {
16421632
SND_SOC_DAPM_MUX("Stereo1 DMIC Mux", SND_SOC_NOPM, 0, 0,
16431633
&rt5670_sto1_dmic_mux),
16441634
SND_SOC_DAPM_MUX("Stereo1 ADC L2 Mux", SND_SOC_NOPM, 0, 0,
1645-
&rt5670_sto_adc_l2_mux),
1635+
&rt5670_sto_adc_2_mux),
16461636
SND_SOC_DAPM_MUX("Stereo1 ADC R2 Mux", SND_SOC_NOPM, 0, 0,
1647-
&rt5670_sto_adc_r2_mux),
1637+
&rt5670_sto_adc_2_mux),
16481638
SND_SOC_DAPM_MUX("Stereo1 ADC L1 Mux", SND_SOC_NOPM, 0, 0,
1649-
&rt5670_sto_adc_l1_mux),
1639+
&rt5670_sto_adc_1_mux),
16501640
SND_SOC_DAPM_MUX("Stereo1 ADC R1 Mux", SND_SOC_NOPM, 0, 0,
1651-
&rt5670_sto_adc_r1_mux),
1641+
&rt5670_sto_adc_1_mux),
16521642
SND_SOC_DAPM_MUX("Stereo2 DMIC Mux", SND_SOC_NOPM, 0, 0,
16531643
&rt5670_sto2_dmic_mux),
16541644
SND_SOC_DAPM_MUX("Stereo2 ADC L2 Mux", SND_SOC_NOPM, 0, 0,
1655-
&rt5670_sto2_adc_l2_mux),
1645+
&rt5670_sto2_adc_2_mux),
16561646
SND_SOC_DAPM_MUX("Stereo2 ADC R2 Mux", SND_SOC_NOPM, 0, 0,
1657-
&rt5670_sto2_adc_r2_mux),
1647+
&rt5670_sto2_adc_2_mux),
16581648
SND_SOC_DAPM_MUX("Stereo2 ADC L1 Mux", SND_SOC_NOPM, 0, 0,
1659-
&rt5670_sto2_adc_l1_mux),
1649+
&rt5670_sto2_adc_1_mux),
16601650
SND_SOC_DAPM_MUX("Stereo2 ADC R1 Mux", SND_SOC_NOPM, 0, 0,
1661-
&rt5670_sto2_adc_r1_mux),
1651+
&rt5670_sto2_adc_1_mux),
16621652
SND_SOC_DAPM_MUX("Stereo2 ADC LR Mux", SND_SOC_NOPM, 0, 0,
16631653
&rt5670_sto2_adc_lr_mux),
16641654
SND_SOC_DAPM_MUX("Mono DMIC L Mux", SND_SOC_NOPM, 0, 0,
@@ -2743,6 +2733,7 @@ static struct snd_soc_dai_driver rt5670_dai[] = {
27432733
.formats = RT5670_FORMATS,
27442734
},
27452735
.ops = &rt5670_aif_dai_ops,
2736+
.symmetric_rates = 1,
27462737
},
27472738
{
27482739
.name = "rt5670-aif2",
@@ -2762,6 +2753,7 @@ static struct snd_soc_dai_driver rt5670_dai[] = {
27622753
.formats = RT5670_FORMATS,
27632754
},
27642755
.ops = &rt5670_aif_dai_ops,
2756+
.symmetric_rates = 1,
27652757
},
27662758
};
27672759

@@ -2859,6 +2851,17 @@ static const struct dmi_system_id dmi_platform_intel_bytcht_jdmode2[] = {
28592851
{}
28602852
};
28612853

2854+
static const struct dmi_system_id dmi_platform_intel_bytcht_jdmode3[] = {
2855+
{
2856+
.ident = "Dell Venue 8 Pro 5855",
2857+
.matches = {
2858+
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2859+
DMI_MATCH(DMI_PRODUCT_NAME, "Venue 8 Pro 5855"),
2860+
},
2861+
},
2862+
{}
2863+
};
2864+
28622865
static int rt5670_i2c_probe(struct i2c_client *i2c,
28632866
const struct i2c_device_id *id)
28642867
{
@@ -2888,6 +2891,11 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
28882891
rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
28892892
rt5670->pdata.dev_gpio = true;
28902893
rt5670->pdata.jd_mode = 2;
2894+
} else if (dmi_check_system(dmi_platform_intel_bytcht_jdmode3)) {
2895+
rt5670->pdata.dmic_en = true;
2896+
rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P;
2897+
rt5670->pdata.dev_gpio = true;
2898+
rt5670->pdata.jd_mode = 3;
28912899
}
28922900

28932901
rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap);

0 commit comments

Comments
 (0)