Skip to content

Commit 8e9f100

Browse files
Ryan Leeplbossart
authored andcommitted
ASoC: codec: max98373: Cut the common parts out of soundwire driver
Removed max98373_read_config and max98373_reset function. Instead, max98373_slot_config and max98373_reset in i2c driver are used. Removed unnecessary volume control from chip default. Updated the SPDX comment for the header file. Signed-off-by: Ryan Lee <ryans.lee@maximintegrated.com>
1 parent 689a52b commit 8e9f100

4 files changed

Lines changed: 16 additions & 82 deletions

File tree

sound/soc/codecs/max98373-sdw.c

Lines changed: 3 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -239,65 +239,6 @@ static const struct regmap_config max98373_sdw_regmap = {
239239
.use_single_write = true,
240240
};
241241

242-
static void max98373_read_config(struct sdw_slave *slave)
243-
{
244-
int value;
245-
struct device *dev = &slave->dev;
246-
struct max98373_priv *max98373 = dev_get_drvdata(dev);
247-
248-
if (!device_property_read_u32(dev, "maxim,vmon-slot-no", &value))
249-
max98373->v_slot = value & 0xF;
250-
else
251-
max98373->v_slot = 0;
252-
253-
if (!device_property_read_u32(dev, "maxim,imon-slot-no", &value))
254-
max98373->i_slot = value & 0xF;
255-
else
256-
max98373->i_slot = 1;
257-
258-
if (!device_property_read_u32(dev, "maxim,spkfb-slot-no", &value))
259-
max98373->spkfb_slot = value & 0xF;
260-
else
261-
max98373->spkfb_slot = 2;
262-
263-
/* update interleave mode info */
264-
if (device_property_read_bool(dev, "maxim,interleave_mode"))
265-
max98373->interleave_mode = true;
266-
else
267-
max98373->interleave_mode = false;
268-
}
269-
270-
/* MAX98373 reset and initialization. */
271-
static int max98373_reset(struct device *dev)
272-
{
273-
int ret, reg, count;
274-
struct max98373_priv *max98373 = dev_get_drvdata(dev);
275-
276-
/* Software Reset */
277-
ret = regmap_update_bits(max98373->regmap,
278-
MAX98373_R2000_SW_RESET,
279-
MAX98373_SOFT_RESET,
280-
MAX98373_SOFT_RESET);
281-
if (ret) {
282-
dev_err(dev, "Reset command failed. (ret:%d)\n", ret);
283-
return ret;
284-
}
285-
286-
for (count = 0; count < 3; count++) {
287-
usleep_range(10000, 11000);
288-
/* Software Reset Verification */
289-
ret = regmap_read(max98373->regmap,
290-
MAX98373_R21FF_REV_ID, &reg);
291-
if (!ret) {
292-
dev_dbg(dev, "Reset completed (retry:%d)\n", count);
293-
return 0;
294-
}
295-
}
296-
297-
dev_err(dev, "Reset failed. (ret:%d)\n", ret);
298-
return ret;
299-
}
300-
301242
/* Power management functions and structure */
302243
static int max98373_suspend(struct device *dev)
303244
{
@@ -407,7 +348,6 @@ static int max98373_io_init(struct sdw_slave *slave)
407348
{
408349
struct device *dev = &slave->dev;
409350
struct max98373_priv *max98373 = dev_get_drvdata(dev);
410-
int ret;
411351

412352
if (max98373->pm_init_once) {
413353
regcache_cache_only(max98373->regmap, false);
@@ -434,9 +374,7 @@ static int max98373_io_init(struct sdw_slave *slave)
434374
pm_runtime_get_noresume(dev);
435375

436376
/* Software Reset */
437-
ret = max98373_reset(dev);
438-
if (ret)
439-
return ret;
377+
max98373_reset(max98373, dev);
440378

441379
/* Set soundwire mode */
442380
regmap_write(max98373->regmap, MAX98373_R2025_AUDIO_IF_MODE, 3);
@@ -460,13 +398,6 @@ static int max98373_io_init(struct sdw_slave *slave)
460398
regmap_write(max98373->regmap,
461399
MAX98373_R202A_PCM_TO_SPK_MONO_MIX_2,
462400
0x1);
463-
/* Set initial volume (0dB) */
464-
regmap_write(max98373->regmap,
465-
MAX98373_R203D_AMP_DIG_VOL_CTRL,
466-
0x00);
467-
regmap_write(max98373->regmap,
468-
MAX98373_R203E_AMP_PATH_GAIN,
469-
0x00);
470401
/* Enable DC blocker */
471402
regmap_write(max98373->regmap,
472403
MAX98373_R203F_AMP_DSP_CFG,
@@ -624,7 +555,7 @@ static int max98373_sdw_dai_hw_params(struct snd_pcm_substream *substream,
624555
else
625556
stream_config.ch_count = params_channels(params);
626557

627-
port_config.ch_mask = GENMASK(stream_config.ch_count - 1, 0);
558+
port_config.ch_mask = GENMASK((int)stream_config.ch_count - 1, 0);
628559
}
629560

630561
ret = sdw_stream_add_slave(max98373->slave, &stream_config,
@@ -839,7 +770,7 @@ static int max98373_init(struct sdw_slave *slave, struct regmap *regmap)
839770
max98373->slave = slave;
840771

841772
/* Read voltage and slot configuration */
842-
max98373_read_config(slave);
773+
max98373_slot_config(dev, max98373);
843774

844775
max98373->hw_init = false;
845776
max98373->pm_init_once = false;

sound/soc/codecs/max98373-sdw.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
/* SPDX-License-Identifier: GPL-2.0-only
2-
* Copyright (c) 2020 Maxim Integrated
3-
*/
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/* Copyright (c) 2020 Maxim Integrated */
43

54
#ifndef _MAX98373_SDW_H
65
#define _MAX98373_SDW_H

sound/soc/codecs/max98373.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ static struct snd_soc_dai_driver max98373_dai[] = {
731731
}
732732
};
733733

734-
static void max98373_reset(struct max98373_priv *max98373, struct device *dev)
734+
void max98373_reset(struct max98373_priv *max98373, struct device *dev)
735735
{
736736
int ret, reg, count;
737737

@@ -757,6 +757,7 @@ static void max98373_reset(struct max98373_priv *max98373, struct device *dev)
757757
}
758758
dev_err(dev, "Reset failed. (ret:%d)\n", ret);
759759
}
760+
EXPORT_SYMBOL_GPL(max98373_reset);
760761

761762
static int max98373_probe(struct snd_soc_component *component)
762763
{
@@ -899,11 +900,10 @@ static const struct regmap_config max98373_regmap = {
899900
.cache_type = REGCACHE_RBTREE,
900901
};
901902

902-
static void max98373_slot_config(struct i2c_client *i2c,
903-
struct max98373_priv *max98373)
903+
void max98373_slot_config(struct device *dev,
904+
struct max98373_priv *max98373)
904905
{
905906
int value;
906-
struct device *dev = &i2c->dev;
907907

908908
if (!device_property_read_u32(dev, "maxim,vmon-slot-no", &value))
909909
max98373->v_slot = value & 0xF;
@@ -935,6 +935,7 @@ static void max98373_slot_config(struct i2c_client *i2c,
935935
else
936936
max98373->spkfb_slot = 2;
937937
}
938+
EXPORT_SYMBOL_GPL(max98373_slot_config);
938939

939940
static int max98373_i2c_probe(struct i2c_client *i2c,
940941
const struct i2c_device_id *id)
@@ -969,7 +970,7 @@ static int max98373_i2c_probe(struct i2c_client *i2c,
969970
}
970971

971972
/* voltage/current slot & gpio configuration */
972-
max98373_slot_config(i2c, max98373);
973+
max98373_slot_config(&i2c->dev, max98373);
973974

974975
/* Power on device */
975976
if (gpio_is_valid(max98373->reset_gpio)) {

sound/soc/codecs/max98373.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// SPDX-License-Identifier: GPL-2.0
2-
// Copyright (c) 2017, Maxim Integrated
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/* Copyright (c) 2017 Maxim Integrated */
33

44
#ifndef _MAX98373_H
55
#define _MAX98373_H
@@ -221,4 +221,7 @@ struct max98373_priv {
221221
};
222222

223223
extern const struct snd_soc_component_driver soc_codec_dev_max98373_sdw;
224+
void max98373_reset(struct max98373_priv *max98373, struct device *dev);
225+
void max98373_slot_config(struct device *dev,
226+
struct max98373_priv *max98373);
224227
#endif

0 commit comments

Comments
 (0)