mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
ASoC: rt1015: add delay to fix pop noise from speaker
Add delay to fix pop noise from speaker. Signed-off-by: Jack Yu <jack.yu@realtek.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20201105030804.31115-1-jack.yu@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f9d7c6eb23
commit
93bd813c17
@ -8,10 +8,16 @@ Required properties:
|
|||||||
|
|
||||||
- reg : The I2C address of the device.
|
- reg : The I2C address of the device.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- realtek,power-up-delay-ms
|
||||||
|
Set a delay time for flush work to be completed,
|
||||||
|
this value is adjustable depending on platform.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
rt1015: codec@28 {
|
rt1015: codec@28 {
|
||||||
compatible = "realtek,rt1015";
|
compatible = "realtek,rt1015";
|
||||||
reg = <0x28>;
|
reg = <0x28>;
|
||||||
|
realtek,power-up-delay-ms = <50>;
|
||||||
};
|
};
|
||||||
|
15
include/sound/rt1015.h
Normal file
15
include/sound/rt1015.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
/*
|
||||||
|
* linux/sound/rt1015.h -- Platform data for RT1015
|
||||||
|
*
|
||||||
|
* Copyright 2020 Realtek Microelectronics
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LINUX_SND_RT1015_H
|
||||||
|
#define __LINUX_SND_RT1015_H
|
||||||
|
|
||||||
|
struct rt1015_platform_data {
|
||||||
|
unsigned int power_up_delay_ms;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -27,10 +27,15 @@
|
|||||||
#include <sound/soc-dapm.h>
|
#include <sound/soc-dapm.h>
|
||||||
#include <sound/soc.h>
|
#include <sound/soc.h>
|
||||||
#include <sound/tlv.h>
|
#include <sound/tlv.h>
|
||||||
|
#include <sound/rt1015.h>
|
||||||
|
|
||||||
#include "rl6231.h"
|
#include "rl6231.h"
|
||||||
#include "rt1015.h"
|
#include "rt1015.h"
|
||||||
|
|
||||||
|
static const struct rt1015_platform_data i2s_default_platform_data = {
|
||||||
|
.power_up_delay_ms = 50,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct reg_default rt1015_reg[] = {
|
static const struct reg_default rt1015_reg[] = {
|
||||||
{ 0x0000, 0x0000 },
|
{ 0x0000, 0x0000 },
|
||||||
{ 0x0004, 0xa000 },
|
{ 0x0004, 0xa000 },
|
||||||
@ -650,6 +655,7 @@ static int rt1015_amp_drv_event(struct snd_soc_dapm_widget *w,
|
|||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
if (rt1015->hw_config == RT1015_HW_28)
|
if (rt1015->hw_config == RT1015_HW_28)
|
||||||
schedule_delayed_work(&rt1015->flush_work, msecs_to_jiffies(10));
|
schedule_delayed_work(&rt1015->flush_work, msecs_to_jiffies(10));
|
||||||
|
msleep(rt1015->pdata.power_up_delay_ms);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1067,9 +1073,16 @@ static struct acpi_device_id rt1015_acpi_match[] = {
|
|||||||
MODULE_DEVICE_TABLE(acpi, rt1015_acpi_match);
|
MODULE_DEVICE_TABLE(acpi, rt1015_acpi_match);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void rt1015_parse_dt(struct rt1015_priv *rt1015, struct device *dev)
|
||||||
|
{
|
||||||
|
device_property_read_u32(dev, "realtek,power-up-delay-ms",
|
||||||
|
&rt1015->pdata.power_up_delay_ms);
|
||||||
|
}
|
||||||
|
|
||||||
static int rt1015_i2c_probe(struct i2c_client *i2c,
|
static int rt1015_i2c_probe(struct i2c_client *i2c,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
|
struct rt1015_platform_data *pdata = dev_get_platdata(&i2c->dev);
|
||||||
struct rt1015_priv *rt1015;
|
struct rt1015_priv *rt1015;
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
@ -1081,6 +1094,13 @@ static int rt1015_i2c_probe(struct i2c_client *i2c,
|
|||||||
|
|
||||||
i2c_set_clientdata(i2c, rt1015);
|
i2c_set_clientdata(i2c, rt1015);
|
||||||
|
|
||||||
|
rt1015->pdata = i2s_default_platform_data;
|
||||||
|
|
||||||
|
if (pdata)
|
||||||
|
rt1015->pdata = *pdata;
|
||||||
|
else
|
||||||
|
rt1015_parse_dt(rt1015, &i2c->dev);
|
||||||
|
|
||||||
rt1015->regmap = devm_regmap_init_i2c(i2c, &rt1015_regmap);
|
rt1015->regmap = devm_regmap_init_i2c(i2c, &rt1015_regmap);
|
||||||
if (IS_ERR(rt1015->regmap)) {
|
if (IS_ERR(rt1015->regmap)) {
|
||||||
ret = PTR_ERR(rt1015->regmap);
|
ret = PTR_ERR(rt1015->regmap);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#ifndef __RT1015_H__
|
#ifndef __RT1015_H__
|
||||||
#define __RT1015_H__
|
#define __RT1015_H__
|
||||||
|
#include <sound/rt1015.h>
|
||||||
|
|
||||||
#define RT1015_DEVICE_ID_VAL 0x1011
|
#define RT1015_DEVICE_ID_VAL 0x1011
|
||||||
#define RT1015_DEVICE_ID_VAL2 0x1015
|
#define RT1015_DEVICE_ID_VAL2 0x1015
|
||||||
@ -380,6 +381,7 @@ enum {
|
|||||||
|
|
||||||
struct rt1015_priv {
|
struct rt1015_priv {
|
||||||
struct snd_soc_component *component;
|
struct snd_soc_component *component;
|
||||||
|
struct rt1015_platform_data pdata;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
int sysclk;
|
int sysclk;
|
||||||
int sysclk_src;
|
int sysclk_src;
|
||||||
|
Loading…
Reference in New Issue
Block a user