mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
Merge remote-tracking branch 'asoc/topic/ssm4567' into asoc-next
This commit is contained in:
commit
28becbd59c
20
include/sound/rt298.h
Normal file
20
include/sound/rt298.h
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* linux/sound/rt286.h -- Platform data for RT286
|
||||
*
|
||||
* Copyright 2013 Realtek Microelectronics
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_SND_RT298_H
|
||||
#define __LINUX_SND_RT298_H
|
||||
|
||||
struct rt298_platform_data {
|
||||
bool cbj_en; /*combo jack enable*/
|
||||
bool gpio2_en; /*GPIO2 enable*/
|
||||
bool suspend_power_off; /* power is off during suspend */
|
||||
};
|
||||
|
||||
#endif
|
@ -83,6 +83,7 @@ config SND_SOC_ALL_CODECS
|
||||
select SND_SOC_PCM512x_I2C if I2C
|
||||
select SND_SOC_PCM512x_SPI if SPI_MASTER
|
||||
select SND_SOC_RT286 if I2C
|
||||
select SND_SOC_RT298 if I2C
|
||||
select SND_SOC_RT5631 if I2C
|
||||
select SND_SOC_RT5640 if I2C
|
||||
select SND_SOC_RT5645 if I2C
|
||||
@ -512,12 +513,18 @@ config SND_SOC_RL6231
|
||||
config SND_SOC_RL6347A
|
||||
tristate
|
||||
default y if SND_SOC_RT286=y
|
||||
default y if SND_SOC_RT298=y
|
||||
default m if SND_SOC_RT286=m
|
||||
default m if SND_SOC_RT298=m
|
||||
|
||||
config SND_SOC_RT286
|
||||
tristate
|
||||
depends on I2C
|
||||
|
||||
config SND_SOC_RT298
|
||||
tristate
|
||||
depends on I2C
|
||||
|
||||
config SND_SOC_RT5631
|
||||
tristate "Realtek ALC5631/RT5631 CODEC"
|
||||
depends on I2C
|
||||
|
@ -79,6 +79,7 @@ snd-soc-pcm512x-spi-objs := pcm512x-spi.o
|
||||
snd-soc-rl6231-objs := rl6231.o
|
||||
snd-soc-rl6347a-objs := rl6347a.o
|
||||
snd-soc-rt286-objs := rt286.o
|
||||
snd-soc-rt298-objs := rt298.o
|
||||
snd-soc-rt5631-objs := rt5631.o
|
||||
snd-soc-rt5640-objs := rt5640.o
|
||||
snd-soc-rt5645-objs := rt5645.o
|
||||
@ -266,6 +267,7 @@ obj-$(CONFIG_SND_SOC_PCM512x_SPI) += snd-soc-pcm512x-spi.o
|
||||
obj-$(CONFIG_SND_SOC_RL6231) += snd-soc-rl6231.o
|
||||
obj-$(CONFIG_SND_SOC_RL6347A) += snd-soc-rl6347a.o
|
||||
obj-$(CONFIG_SND_SOC_RT286) += snd-soc-rt286.o
|
||||
obj-$(CONFIG_SND_SOC_RT298) += snd-soc-rt298.o
|
||||
obj-$(CONFIG_SND_SOC_RT5631) += snd-soc-rt5631.o
|
||||
obj-$(CONFIG_SND_SOC_RT5640) += snd-soc-rt5640.o
|
||||
obj-$(CONFIG_SND_SOC_RT5645) += snd-soc-rt5645.o
|
||||
|
@ -1534,7 +1534,6 @@ MODULE_DEVICE_TABLE(i2c, adau1373_i2c_id);
|
||||
static struct i2c_driver adau1373_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "adau1373",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = adau1373_i2c_probe,
|
||||
.remove = adau1373_i2c_remove,
|
||||
|
@ -915,7 +915,6 @@ MODULE_DEVICE_TABLE(i2c, adau1701_i2c_id);
|
||||
static struct i2c_driver adau1701_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "adau1701",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(adau1701_dt_ids),
|
||||
},
|
||||
.probe = adau1701_i2c_probe,
|
||||
|
@ -47,7 +47,6 @@ MODULE_DEVICE_TABLE(i2c, adau1761_i2c_ids);
|
||||
static struct i2c_driver adau1761_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "adau1761",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = adau1761_i2c_probe,
|
||||
.remove = adau1761_i2c_remove,
|
||||
|
@ -45,7 +45,6 @@ MODULE_DEVICE_TABLE(i2c, adau1781_i2c_ids);
|
||||
static struct i2c_driver adau1781_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "adau1781",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = adau1781_i2c_probe,
|
||||
.remove = adau1781_i2c_remove,
|
||||
|
@ -46,7 +46,6 @@ MODULE_DEVICE_TABLE(i2c, adau1977_i2c_ids);
|
||||
static struct i2c_driver adau1977_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "adau1977",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = adau1977_i2c_probe,
|
||||
.remove = adau1977_i2c_remove,
|
||||
|
@ -36,7 +36,6 @@ static int adav803_remove(struct i2c_client *client)
|
||||
static struct i2c_driver adav803_driver = {
|
||||
.driver = {
|
||||
.name = "adav803",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = adav803_probe,
|
||||
.remove = adav803_remove,
|
||||
|
@ -444,7 +444,6 @@ MODULE_DEVICE_TABLE(i2c, ak4535_i2c_id);
|
||||
static struct i2c_driver ak4535_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ak4535",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = ak4535_i2c_probe,
|
||||
.remove = ak4535_i2c_remove,
|
||||
|
@ -609,7 +609,6 @@ MODULE_DEVICE_TABLE(i2c, ak4641_i2c_id);
|
||||
static struct i2c_driver ak4641_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ak4641",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = ak4641_i2c_probe,
|
||||
.remove = ak4641_i2c_remove,
|
||||
|
@ -626,7 +626,6 @@ MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
|
||||
static struct i2c_driver ak4642_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ak4642-codec",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = ak4642_of_match,
|
||||
},
|
||||
.probe = ak4642_i2c_probe,
|
||||
|
@ -663,7 +663,6 @@ MODULE_DEVICE_TABLE(i2c, ak4671_i2c_id);
|
||||
static struct i2c_driver ak4671_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ak4671-codec",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = ak4671_i2c_probe,
|
||||
.remove = ak4671_i2c_remove,
|
||||
|
@ -1085,7 +1085,6 @@ MODULE_DEVICE_TABLE(of, alc5623_of_match);
|
||||
static struct i2c_driver alc5623_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "alc562x-codec",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(alc5623_of_match),
|
||||
},
|
||||
.probe = alc5623_i2c_probe,
|
||||
|
@ -1183,7 +1183,6 @@ MODULE_DEVICE_TABLE(of, alc5632_of_match);
|
||||
static struct i2c_driver alc5632_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "alc5632",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(alc5632_of_match),
|
||||
},
|
||||
.probe = alc5632_i2c_probe,
|
||||
|
@ -607,7 +607,6 @@ MODULE_DEVICE_TABLE(i2c, cs35l32_id);
|
||||
static struct i2c_driver cs35l32_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs35l32",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &cs35l32_runtime_pm,
|
||||
.of_match_table = cs35l32_of_match,
|
||||
},
|
||||
|
@ -658,7 +658,6 @@ MODULE_DEVICE_TABLE(i2c, cs4265_id);
|
||||
static struct i2c_driver cs4265_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs4265",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs4265_of_match,
|
||||
},
|
||||
.id_table = cs4265_id,
|
||||
|
@ -751,7 +751,6 @@ MODULE_DEVICE_TABLE(i2c, cs4270_id);
|
||||
static struct i2c_driver cs4270_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs4270",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs4270_of_match,
|
||||
},
|
||||
.id_table = cs4270_id,
|
||||
|
@ -48,7 +48,6 @@ MODULE_DEVICE_TABLE(i2c, cs4271_i2c_id);
|
||||
static struct i2c_driver cs4271_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs4271",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(cs4271_dt_ids),
|
||||
},
|
||||
.probe = cs4271_i2c_probe,
|
||||
|
@ -45,7 +45,6 @@ static int cs42l51_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver cs42l51_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs42l51",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs42l51_of_match,
|
||||
},
|
||||
.probe = cs42l51_i2c_probe,
|
||||
|
@ -1285,7 +1285,6 @@ MODULE_DEVICE_TABLE(i2c, cs42l52_id);
|
||||
static struct i2c_driver cs42l52_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs42l52",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs42l52_of_match,
|
||||
},
|
||||
.id_table = cs42l52_id,
|
||||
|
@ -1408,7 +1408,6 @@ MODULE_DEVICE_TABLE(i2c, cs42l56_id);
|
||||
static struct i2c_driver cs42l56_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs42l56",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs42l56_of_match,
|
||||
},
|
||||
.id_table = cs42l56_id,
|
||||
|
@ -1491,7 +1491,6 @@ MODULE_DEVICE_TABLE(i2c, cs42l73_id);
|
||||
static struct i2c_driver cs42l73_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs42l73",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs42l73_of_match,
|
||||
},
|
||||
.id_table = cs42l73_id,
|
||||
|
@ -20,7 +20,7 @@
|
||||
static int cs42xx8_i2c_probe(struct i2c_client *i2c,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
u32 ret = cs42xx8_probe(&i2c->dev,
|
||||
int ret = cs42xx8_probe(&i2c->dev,
|
||||
devm_regmap_init_i2c(i2c, &cs42xx8_regmap_config));
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -49,8 +49,8 @@ MODULE_DEVICE_TABLE(i2c, cs42xx8_i2c_id);
|
||||
static struct i2c_driver cs42xx8_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs42xx8",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &cs42xx8_pm,
|
||||
.of_match_table = cs42xx8_of_match,
|
||||
},
|
||||
.probe = cs42xx8_i2c_probe,
|
||||
.remove = cs42xx8_i2c_remove,
|
||||
|
@ -425,7 +425,7 @@ const struct cs42xx8_driver_data cs42888_data = {
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(cs42888_data);
|
||||
|
||||
static const struct of_device_id cs42xx8_of_match[] = {
|
||||
const struct of_device_id cs42xx8_of_match[] = {
|
||||
{ .compatible = "cirrus,cs42448", .data = &cs42448_data, },
|
||||
{ .compatible = "cirrus,cs42888", .data = &cs42888_data, },
|
||||
{ /* sentinel */ }
|
||||
@ -435,16 +435,24 @@ EXPORT_SYMBOL_GPL(cs42xx8_of_match);
|
||||
|
||||
int cs42xx8_probe(struct device *dev, struct regmap *regmap)
|
||||
{
|
||||
const struct of_device_id *of_id = of_match_device(cs42xx8_of_match, dev);
|
||||
const struct of_device_id *of_id;
|
||||
struct cs42xx8_priv *cs42xx8;
|
||||
int ret, val, i;
|
||||
|
||||
if (IS_ERR(regmap)) {
|
||||
ret = PTR_ERR(regmap);
|
||||
dev_err(dev, "failed to allocate regmap: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
cs42xx8 = devm_kzalloc(dev, sizeof(*cs42xx8), GFP_KERNEL);
|
||||
if (cs42xx8 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
cs42xx8->regmap = regmap;
|
||||
dev_set_drvdata(dev, cs42xx8);
|
||||
|
||||
of_id = of_match_device(cs42xx8_of_match, dev);
|
||||
if (of_id)
|
||||
cs42xx8->drvdata = of_id->data;
|
||||
|
||||
@ -482,13 +490,6 @@ int cs42xx8_probe(struct device *dev, struct regmap *regmap)
|
||||
/* Make sure hardware reset done */
|
||||
msleep(5);
|
||||
|
||||
cs42xx8->regmap = regmap;
|
||||
if (IS_ERR(cs42xx8->regmap)) {
|
||||
ret = PTR_ERR(cs42xx8->regmap);
|
||||
dev_err(dev, "failed to allocate regmap: %d\n", ret);
|
||||
goto err_enable;
|
||||
}
|
||||
|
||||
/*
|
||||
* We haven't marked the chip revision as volatile due to
|
||||
* sharing a register with the right input volume; explicitly
|
||||
|
@ -22,6 +22,7 @@ extern const struct dev_pm_ops cs42xx8_pm;
|
||||
extern const struct cs42xx8_driver_data cs42448_data;
|
||||
extern const struct cs42xx8_driver_data cs42888_data;
|
||||
extern const struct regmap_config cs42xx8_regmap_config;
|
||||
extern const struct of_device_id cs42xx8_of_match[];
|
||||
int cs42xx8_probe(struct device *dev, struct regmap *regmap);
|
||||
|
||||
/* CS42888 register map */
|
||||
|
@ -1259,7 +1259,6 @@ MODULE_DEVICE_TABLE(i2c, da7210_i2c_id);
|
||||
static struct i2c_driver da7210_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "da7210",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = da7210_i2c_probe,
|
||||
.remove = da7210_i2c_remove,
|
||||
|
@ -1585,7 +1585,6 @@ MODULE_DEVICE_TABLE(i2c, da7213_i2c_id);
|
||||
static struct i2c_driver da7213_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "da7213",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = da7213_i2c_probe,
|
||||
.remove = da7213_remove,
|
||||
|
@ -1572,7 +1572,6 @@ MODULE_DEVICE_TABLE(i2c, da732x_i2c_id);
|
||||
static struct i2c_driver da732x_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "da7320",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = da732x_i2c_probe,
|
||||
.remove = da732x_i2c_remove,
|
||||
|
@ -1538,7 +1538,6 @@ static const struct of_device_id da9055_of_match[] = {
|
||||
static struct i2c_driver da9055_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "da9055-codec",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(da9055_of_match),
|
||||
},
|
||||
.probe = da9055_i2c_probe,
|
||||
|
@ -1149,7 +1149,6 @@ MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
|
||||
static struct i2c_driver isabelle_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "isabelle",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = isabelle_i2c_probe,
|
||||
.remove = isabelle_i2c_remove,
|
||||
|
@ -142,7 +142,6 @@ MODULE_DEVICE_TABLE(i2c, lm4857_i2c_id);
|
||||
static struct i2c_driver lm4857_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "lm4857",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = lm4857_i2c_probe,
|
||||
.id_table = lm4857_i2c_id,
|
||||
|
@ -1460,7 +1460,6 @@ MODULE_DEVICE_TABLE(i2c, lm49453_i2c_id);
|
||||
static struct i2c_driver lm49453_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "lm49453",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = lm49453_i2c_probe,
|
||||
.remove = lm49453_i2c_remove,
|
||||
|
@ -242,7 +242,6 @@ MODULE_DEVICE_TABLE(i2c, max9768_i2c_id);
|
||||
static struct i2c_driver max9768_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max9768",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = max9768_i2c_probe,
|
||||
.remove = max9768_i2c_remove,
|
||||
|
@ -2011,7 +2011,6 @@ MODULE_DEVICE_TABLE(i2c, max98088_i2c_id);
|
||||
static struct i2c_driver max98088_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max98088",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = max98088_i2c_probe,
|
||||
.remove = max98088_i2c_remove,
|
||||
|
@ -2748,7 +2748,6 @@ MODULE_DEVICE_TABLE(acpi, max98090_acpi_match);
|
||||
static struct i2c_driver max98090_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max98090",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &max98090_pm,
|
||||
.of_match_table = of_match_ptr(max98090_of_match),
|
||||
.acpi_match_table = ACPI_PTR(max98090_acpi_match),
|
||||
|
@ -2431,7 +2431,6 @@ MODULE_DEVICE_TABLE(of, max98095_of_match);
|
||||
static struct i2c_driver max98095_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max98095",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(max98095_of_match),
|
||||
},
|
||||
.probe = max98095_i2c_probe,
|
||||
|
@ -352,7 +352,6 @@ MODULE_DEVICE_TABLE(i2c, max9850_i2c_id);
|
||||
static struct i2c_driver max9850_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max9850",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = max9850_i2c_probe,
|
||||
.remove = max9850_i2c_remove,
|
||||
|
@ -174,7 +174,6 @@ MODULE_DEVICE_TABLE(i2c, max9877_i2c_id);
|
||||
static struct i2c_driver max9877_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max9877",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = max9877_i2c_probe,
|
||||
.remove = max9877_i2c_remove,
|
||||
|
@ -639,7 +639,6 @@ MODULE_DEVICE_TABLE(of, max98925_of_match);
|
||||
static struct i2c_driver max98925_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "max98925",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(max98925_of_match),
|
||||
.pm = NULL,
|
||||
},
|
||||
|
@ -597,7 +597,6 @@ MODULE_DEVICE_TABLE(i2c, ml26124_i2c_id);
|
||||
static struct i2c_driver ml26124_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ml26124",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = ml26124_i2c_probe,
|
||||
.remove = ml26124_i2c_remove,
|
||||
|
@ -335,7 +335,6 @@ static int pcm1681_i2c_remove(struct i2c_client *client)
|
||||
static struct i2c_driver pcm1681_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "pcm1681",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(pcm1681_dt_ids),
|
||||
},
|
||||
.id_table = pcm1681_i2c_id,
|
||||
|
@ -67,7 +67,6 @@ static struct i2c_driver pcm512x_i2c_driver = {
|
||||
.id_table = pcm512x_i2c_id,
|
||||
.driver = {
|
||||
.name = "pcm512x",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = pcm512x_of_match,
|
||||
.pm = &pcm512x_pm_ops,
|
||||
},
|
||||
|
@ -1259,7 +1259,6 @@ static int rt286_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt286_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt286",
|
||||
.owner = THIS_MODULE,
|
||||
.acpi_match_table = ACPI_PTR(rt286_acpi_match),
|
||||
},
|
||||
.probe = rt286_i2c_probe,
|
||||
|
1273
sound/soc/codecs/rt298.c
Normal file
1273
sound/soc/codecs/rt298.c
Normal file
File diff suppressed because it is too large
Load Diff
206
sound/soc/codecs/rt298.h
Normal file
206
sound/soc/codecs/rt298.h
Normal file
@ -0,0 +1,206 @@
|
||||
/*
|
||||
* rt298.h -- RT298 ALSA SoC audio driver
|
||||
*
|
||||
* Copyright 2011 Realtek Microelectronics
|
||||
* Author: Johnny Hsu <johnnyhsu@realtek.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __RT298_H__
|
||||
#define __RT298_H__
|
||||
|
||||
#define VERB_CMD(V, N, D) ((N << 20) | (V << 8) | D)
|
||||
|
||||
#define RT298_AUDIO_FUNCTION_GROUP 0x01
|
||||
#define RT298_DAC_OUT1 0x02
|
||||
#define RT298_DAC_OUT2 0x03
|
||||
#define RT298_DIG_CVT 0x06
|
||||
#define RT298_ADC_IN1 0x09
|
||||
#define RT298_ADC_IN2 0x08
|
||||
#define RT298_MIXER_IN 0x0b
|
||||
#define RT298_MIXER_OUT1 0x0c
|
||||
#define RT298_MIXER_OUT2 0x0d
|
||||
#define RT298_DMIC1 0x12
|
||||
#define RT298_DMIC2 0x13
|
||||
#define RT298_SPK_OUT 0x14
|
||||
#define RT298_MIC1 0x18
|
||||
#define RT298_LINE1 0x1a
|
||||
#define RT298_BEEP 0x1d
|
||||
#define RT298_SPDIF 0x1e
|
||||
#define RT298_VENDOR_REGISTERS 0x20
|
||||
#define RT298_HP_OUT 0x21
|
||||
#define RT298_MIXER_IN1 0x22
|
||||
#define RT298_MIXER_IN2 0x23
|
||||
|
||||
#define RT298_SET_PIN_SFT 6
|
||||
#define RT298_SET_PIN_ENABLE 0x40
|
||||
#define RT298_SET_PIN_DISABLE 0
|
||||
#define RT298_SET_EAPD_HIGH 0x2
|
||||
#define RT298_SET_EAPD_LOW 0
|
||||
|
||||
#define RT298_MUTE_SFT 7
|
||||
|
||||
/* Verb commands */
|
||||
#define RT298_GET_PARAM(NID, PARAM) VERB_CMD(AC_VERB_PARAMETERS, NID, PARAM)
|
||||
#define RT298_SET_POWER(NID) VERB_CMD(AC_VERB_SET_POWER_STATE, NID, 0)
|
||||
#define RT298_SET_AUDIO_POWER RT298_SET_POWER(RT298_AUDIO_FUNCTION_GROUP)
|
||||
#define RT298_SET_HPO_POWER RT298_SET_POWER(RT298_HP_OUT)
|
||||
#define RT298_SET_SPK_POWER RT298_SET_POWER(RT298_SPK_OUT)
|
||||
#define RT298_SET_DMIC1_POWER RT298_SET_POWER(RT298_DMIC1)
|
||||
#define RT298_SPK_MUX\
|
||||
VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_SPK_OUT, 0)
|
||||
#define RT298_HPO_MUX\
|
||||
VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_HP_OUT, 0)
|
||||
#define RT298_ADC0_MUX\
|
||||
VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_MIXER_IN1, 0)
|
||||
#define RT298_ADC1_MUX\
|
||||
VERB_CMD(AC_VERB_SET_CONNECT_SEL, RT298_MIXER_IN2, 0)
|
||||
#define RT298_SET_MIC1\
|
||||
VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_MIC1, 0)
|
||||
#define RT298_SET_PIN_HPO\
|
||||
VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_HP_OUT, 0)
|
||||
#define RT298_SET_PIN_SPK\
|
||||
VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_SPK_OUT, 0)
|
||||
#define RT298_SET_PIN_DMIC1\
|
||||
VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_DMIC1, 0)
|
||||
#define RT298_SET_PIN_SPDIF\
|
||||
VERB_CMD(AC_VERB_SET_PIN_WIDGET_CONTROL, RT298_SPDIF, 0)
|
||||
#define RT298_SET_PIN_DIG_CVT\
|
||||
VERB_CMD(AC_VERB_SET_DIGI_CONVERT_1, RT298_DIG_CVT, 0)
|
||||
#define RT298_SPK_EAPD\
|
||||
VERB_CMD(AC_VERB_SET_EAPD_BTLENABLE, RT298_SPK_OUT, 0)
|
||||
#define RT298_SET_AMP_GAIN_HPO\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0)
|
||||
#define RT298_SET_AMP_GAIN_ADC_IN1\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0)
|
||||
#define RT298_SET_AMP_GAIN_ADC_IN2\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN2, 0)
|
||||
#define RT298_GET_HP_SENSE\
|
||||
VERB_CMD(AC_VERB_GET_PIN_SENSE, RT298_HP_OUT, 0)
|
||||
#define RT298_GET_MIC1_SENSE\
|
||||
VERB_CMD(AC_VERB_GET_PIN_SENSE, RT298_MIC1, 0)
|
||||
#define RT298_SET_DMIC2_DEFAULT\
|
||||
VERB_CMD(AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, RT298_DMIC2, 0)
|
||||
#define RT298_SET_SPDIF_DEFAULT\
|
||||
VERB_CMD(AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, RT298_SPDIF, 0)
|
||||
#define RT298_DACL_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_DAC_OUT1, 0xa000)
|
||||
#define RT298_DACR_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_DAC_OUT1, 0x9000)
|
||||
#define RT298_ADCL_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0x6000)
|
||||
#define RT298_ADCR_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_ADC_IN1, 0x5000)
|
||||
#define RT298_MIC_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIC1, 0x7000)
|
||||
#define RT298_SPOL_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_SPK_OUT, 0xa000)
|
||||
#define RT298_SPOR_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_SPK_OUT, 0x9000)
|
||||
#define RT298_HPOL_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0xa000)
|
||||
#define RT298_HPOR_GAIN\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_HP_OUT, 0x9000)
|
||||
#define RT298_F_DAC_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_OUT1, 0x7000)
|
||||
#define RT298_F_RECMIX_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_OUT1, 0x7100)
|
||||
#define RT298_REC_MIC_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7000)
|
||||
#define RT298_REC_I2S_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7100)
|
||||
#define RT298_REC_LINE_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7200)
|
||||
#define RT298_REC_BEEP_SWITCH\
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, RT298_MIXER_IN, 0x7300)
|
||||
#define RT298_DAC_FORMAT\
|
||||
VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT298_DAC_OUT1, 0)
|
||||
#define RT298_ADC_FORMAT\
|
||||
VERB_CMD(AC_VERB_SET_STREAM_FORMAT, RT298_ADC_IN1, 0)
|
||||
#define RT298_COEF_INDEX\
|
||||
VERB_CMD(AC_VERB_SET_COEF_INDEX, RT298_VENDOR_REGISTERS, 0)
|
||||
#define RT298_PROC_COEF\
|
||||
VERB_CMD(AC_VERB_SET_PROC_COEF, RT298_VENDOR_REGISTERS, 0)
|
||||
|
||||
/* Index registers */
|
||||
#define RT298_A_BIAS_CTRL1 0x01
|
||||
#define RT298_A_BIAS_CTRL2 0x02
|
||||
#define RT298_POWER_CTRL1 0x03
|
||||
#define RT298_A_BIAS_CTRL3 0x04
|
||||
#define RT298_POWER_CTRL2 0x08
|
||||
#define RT298_I2S_CTRL1 0x09
|
||||
#define RT298_I2S_CTRL2 0x0a
|
||||
#define RT298_CLK_DIV 0x0b
|
||||
#define RT298_DC_GAIN 0x0d
|
||||
#define RT298_POWER_CTRL3 0x0f
|
||||
#define RT298_MIC1_DET_CTRL 0x19
|
||||
#define RT298_MISC_CTRL1 0x20
|
||||
#define RT298_IRQ_CTRL 0x33
|
||||
#define RT298_WIND_FILTER_CTRL 0x46
|
||||
#define RT298_PLL_CTRL1 0x49
|
||||
#define RT298_CBJ_CTRL1 0x4f
|
||||
#define RT298_CBJ_CTRL2 0x50
|
||||
#define RT298_PLL_CTRL 0x63
|
||||
#define RT298_DEPOP_CTRL1 0x66
|
||||
#define RT298_DEPOP_CTRL2 0x67
|
||||
#define RT298_DEPOP_CTRL3 0x68
|
||||
#define RT298_DEPOP_CTRL4 0x69
|
||||
|
||||
/* SPDIF (0x06) */
|
||||
#define RT298_SPDIF_SEL_SFT 0
|
||||
#define RT298_SPDIF_SEL_PCM0 0
|
||||
#define RT298_SPDIF_SEL_PCM1 1
|
||||
#define RT298_SPDIF_SEL_SPOUT 2
|
||||
#define RT298_SPDIF_SEL_PP 3
|
||||
|
||||
/* RECMIX (0x0b) */
|
||||
#define RT298_M_REC_BEEP_SFT 0
|
||||
#define RT298_M_REC_LINE1_SFT 1
|
||||
#define RT298_M_REC_MIC1_SFT 2
|
||||
#define RT298_M_REC_I2S_SFT 3
|
||||
|
||||
/* Front (0x0c) */
|
||||
#define RT298_M_FRONT_DAC_SFT 0
|
||||
#define RT298_M_FRONT_REC_SFT 1
|
||||
|
||||
/* SPK-OUT (0x14) */
|
||||
#define RT298_M_SPK_MUX_SFT 14
|
||||
#define RT298_SPK_SEL_MASK 0x1
|
||||
#define RT298_SPK_SEL_SFT 0
|
||||
#define RT298_SPK_SEL_F 0
|
||||
#define RT298_SPK_SEL_S 1
|
||||
|
||||
/* HP-OUT (0x21) */
|
||||
#define RT298_M_HP_MUX_SFT 14
|
||||
#define RT298_HP_SEL_MASK 0x1
|
||||
#define RT298_HP_SEL_SFT 0
|
||||
#define RT298_HP_SEL_F 0
|
||||
#define RT298_HP_SEL_S 1
|
||||
|
||||
/* ADC (0x22) (0x23) */
|
||||
#define RT298_ADC_SEL_MASK 0x7
|
||||
#define RT298_ADC_SEL_SFT 0
|
||||
#define RT298_ADC_SEL_SURR 0
|
||||
#define RT298_ADC_SEL_FRONT 1
|
||||
#define RT298_ADC_SEL_DMIC 2
|
||||
#define RT298_ADC_SEL_BEEP 4
|
||||
#define RT298_ADC_SEL_LINE1 5
|
||||
#define RT298_ADC_SEL_I2S 6
|
||||
#define RT298_ADC_SEL_MIC1 7
|
||||
|
||||
#define RT298_SCLK_S_MCLK 0
|
||||
#define RT298_SCLK_S_PLL 1
|
||||
|
||||
enum {
|
||||
RT298_AIF1,
|
||||
RT298_AIF2,
|
||||
RT298_AIFS,
|
||||
};
|
||||
|
||||
int rt298_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack);
|
||||
|
||||
#endif /* __RT298_H__ */
|
||||
|
@ -1725,7 +1725,6 @@ static int rt5631_i2c_remove(struct i2c_client *client)
|
||||
static struct i2c_driver rt5631_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5631",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(rt5631_i2c_dt_ids),
|
||||
},
|
||||
.probe = rt5631_i2c_probe,
|
||||
|
@ -2276,7 +2276,6 @@ static int rt5640_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt5640_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5640",
|
||||
.owner = THIS_MODULE,
|
||||
.acpi_match_table = ACPI_PTR(rt5640_acpi_match),
|
||||
.of_match_table = of_match_ptr(rt5640_of_match),
|
||||
},
|
||||
|
@ -3473,7 +3473,6 @@ static void rt5645_i2c_shutdown(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt5645_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5645",
|
||||
.owner = THIS_MODULE,
|
||||
.acpi_match_table = ACPI_PTR(rt5645_acpi_match),
|
||||
},
|
||||
.probe = rt5645_i2c_probe,
|
||||
|
@ -1806,7 +1806,6 @@ static int rt5651_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt5651_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5651",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = rt5651_i2c_probe,
|
||||
.remove = rt5651_i2c_remove,
|
||||
|
@ -3043,7 +3043,6 @@ static int rt5670_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt5670_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5670",
|
||||
.owner = THIS_MODULE,
|
||||
.acpi_match_table = ACPI_PTR(rt5670_acpi_match),
|
||||
},
|
||||
.probe = rt5670_i2c_probe,
|
||||
|
@ -5273,7 +5273,6 @@ static int rt5677_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver rt5677_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "rt5677",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = rt5677_i2c_probe,
|
||||
.remove = rt5677_i2c_remove,
|
||||
|
@ -1601,7 +1601,6 @@ MODULE_DEVICE_TABLE(of, sgtl5000_dt_ids);
|
||||
static struct i2c_driver sgtl5000_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "sgtl5000",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = sgtl5000_dt_ids,
|
||||
},
|
||||
.probe = sgtl5000_i2c_probe,
|
||||
|
@ -815,7 +815,6 @@ MODULE_DEVICE_TABLE(i2c, ssm2518_i2c_ids);
|
||||
static struct i2c_driver ssm2518_driver = {
|
||||
.driver = {
|
||||
.name = "ssm2518",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = ssm2518_i2c_probe,
|
||||
.remove = ssm2518_i2c_remove,
|
||||
|
@ -52,7 +52,6 @@ MODULE_DEVICE_TABLE(of, ssm2602_of_match);
|
||||
static struct i2c_driver ssm2602_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "ssm2602",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = ssm2602_of_match,
|
||||
},
|
||||
.probe = ssm2602_i2c_probe,
|
||||
|
@ -10,6 +10,7 @@
|
||||
* Licensed under the GPL-2.
|
||||
*/
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/i2c.h>
|
||||
@ -173,6 +174,12 @@ static const struct snd_soc_dapm_widget ssm4567_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_SWITCH("Amplifier Boost", SSM4567_REG_POWER_CTRL, 3, 1,
|
||||
&ssm4567_amplifier_boost_control),
|
||||
|
||||
SND_SOC_DAPM_SIGGEN("Sense"),
|
||||
|
||||
SND_SOC_DAPM_PGA("Current Sense", SSM4567_REG_POWER_CTRL, 4, 1, NULL, 0),
|
||||
SND_SOC_DAPM_PGA("Voltage Sense", SSM4567_REG_POWER_CTRL, 5, 1, NULL, 0),
|
||||
SND_SOC_DAPM_PGA("VBAT Sense", SSM4567_REG_POWER_CTRL, 6, 1, NULL, 0),
|
||||
|
||||
SND_SOC_DAPM_OUTPUT("OUT"),
|
||||
};
|
||||
|
||||
@ -180,6 +187,13 @@ static const struct snd_soc_dapm_route ssm4567_routes[] = {
|
||||
{ "OUT", NULL, "Amplifier Boost" },
|
||||
{ "Amplifier Boost", "Switch", "DAC" },
|
||||
{ "OUT", NULL, "DAC" },
|
||||
|
||||
{ "Current Sense", NULL, "Sense" },
|
||||
{ "Voltage Sense", NULL, "Sense" },
|
||||
{ "VBAT Sense", NULL, "Sense" },
|
||||
{ "Capture Sense", NULL, "Current Sense" },
|
||||
{ "Capture Sense", NULL, "Voltage Sense" },
|
||||
{ "Capture Sense", NULL, "VBAT Sense" },
|
||||
};
|
||||
|
||||
static int ssm4567_hw_params(struct snd_pcm_substream *substream,
|
||||
@ -387,6 +401,14 @@ static struct snd_soc_dai_driver ssm4567_dai = {
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S32,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Capture Sense",
|
||||
.channels_min = 1,
|
||||
.channels_max = 1,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S32,
|
||||
},
|
||||
.ops = &ssm4567_dai_ops,
|
||||
};
|
||||
|
||||
@ -456,10 +478,20 @@ static const struct i2c_device_id ssm4567_i2c_ids[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ssm4567_i2c_ids);
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
static const struct acpi_device_id ssm4567_acpi_match[] = {
|
||||
{ "INT343B", 0 },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, ssm4567_acpi_match);
|
||||
|
||||
#endif
|
||||
|
||||
static struct i2c_driver ssm4567_driver = {
|
||||
.driver = {
|
||||
.name = "ssm4567",
|
||||
.owner = THIS_MODULE,
|
||||
.acpi_match_table = ACPI_PTR(ssm4567_acpi_match),
|
||||
},
|
||||
.probe = ssm4567_i2c_probe,
|
||||
.remove = ssm4567_i2c_remove,
|
||||
|
@ -1144,7 +1144,6 @@ MODULE_DEVICE_TABLE(i2c, sta32x_i2c_id);
|
||||
static struct i2c_driver sta32x_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "sta32x",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(st32x_dt_ids),
|
||||
},
|
||||
.probe = sta32x_i2c_probe,
|
||||
|
@ -1264,7 +1264,6 @@ MODULE_DEVICE_TABLE(i2c, sta350_i2c_id);
|
||||
static struct i2c_driver sta350_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "sta350",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(st350_dt_ids),
|
||||
},
|
||||
.probe = sta350_i2c_probe,
|
||||
|
@ -379,7 +379,6 @@ MODULE_DEVICE_TABLE(i2c, sta529_i2c_id);
|
||||
static struct i2c_driver sta529_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "sta529",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = sta529_i2c_probe,
|
||||
.remove = sta529_i2c_remove,
|
||||
|
@ -769,7 +769,6 @@ MODULE_DEVICE_TABLE(of, tas2552_of_match);
|
||||
static struct i2c_driver tas2552_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tas2552",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(tas2552_of_match),
|
||||
.pm = &tas2552_pm,
|
||||
},
|
||||
|
@ -994,7 +994,6 @@ static int tas5086_i2c_remove(struct i2c_client *i2c)
|
||||
static struct i2c_driver tas5086_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tas5086",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(tas5086_dt_ids),
|
||||
},
|
||||
.id_table = tas5086_i2c_id,
|
||||
|
@ -314,7 +314,6 @@ MODULE_DEVICE_TABLE(i2c, tfa9879_i2c_id);
|
||||
static struct i2c_driver tfa9879_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tfa9879",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = tfa9879_i2c_probe,
|
||||
.remove = tfa9879_i2c_remove,
|
||||
|
@ -1283,7 +1283,6 @@ MODULE_DEVICE_TABLE(i2c, aic31xx_i2c_id);
|
||||
static struct i2c_driver aic31xx_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tlv320aic31xx-codec",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(tlv320aic31xx_of_match),
|
||||
},
|
||||
.probe = aic31xx_i2c_probe,
|
||||
|
@ -871,7 +871,6 @@ MODULE_DEVICE_TABLE(of, aic32x4_of_id);
|
||||
static struct i2c_driver aic32x4_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tlv320aic32x4",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = aic32x4_of_id,
|
||||
},
|
||||
.probe = aic32x4_i2c_probe,
|
||||
|
@ -1825,7 +1825,6 @@ MODULE_DEVICE_TABLE(of, tlv320aic3x_of_match);
|
||||
static struct i2c_driver aic3x_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tlv320aic3x-codec",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(tlv320aic3x_of_match),
|
||||
},
|
||||
.probe = aic3x_i2c_probe,
|
||||
|
@ -1585,7 +1585,6 @@ MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
|
||||
static struct i2c_driver tlv320dac33_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tlv320dac33-codec",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = dac33_i2c_probe,
|
||||
.remove = dac33_i2c_remove,
|
||||
|
@ -488,7 +488,6 @@ MODULE_DEVICE_TABLE(of, tpa6130a2_of_match);
|
||||
static struct i2c_driver tpa6130a2_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "tpa6130a2",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(tpa6130a2_of_match),
|
||||
},
|
||||
.probe = tpa6130a2_probe,
|
||||
|
@ -23,11 +23,13 @@
|
||||
#include "ts3a227e.h"
|
||||
|
||||
struct ts3a227e {
|
||||
struct device *dev;
|
||||
struct regmap *regmap;
|
||||
struct snd_soc_jack *jack;
|
||||
bool plugged;
|
||||
bool mic_present;
|
||||
unsigned int buttons_held;
|
||||
int irq;
|
||||
};
|
||||
|
||||
/* Button values to be reported on the jack */
|
||||
@ -189,16 +191,28 @@ static irqreturn_t ts3a227e_interrupt(int irq, void *data)
|
||||
struct ts3a227e *ts3a227e = (struct ts3a227e *)data;
|
||||
struct regmap *regmap = ts3a227e->regmap;
|
||||
unsigned int int_reg, kp_int_reg, acc_reg, i;
|
||||
struct device *dev = ts3a227e->dev;
|
||||
int ret;
|
||||
|
||||
/* Check for plug/unplug. */
|
||||
regmap_read(regmap, TS3A227E_REG_INTERRUPT, &int_reg);
|
||||
ret = regmap_read(regmap, TS3A227E_REG_INTERRUPT, &int_reg);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to clear interrupt ret=%d\n", ret);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
if (int_reg & (DETECTION_COMPLETE_EVENT | INS_REM_EVENT)) {
|
||||
regmap_read(regmap, TS3A227E_REG_ACCESSORY_STATUS, &acc_reg);
|
||||
ts3a227e_new_jack_state(ts3a227e, acc_reg);
|
||||
}
|
||||
|
||||
/* Report any key events. */
|
||||
regmap_read(regmap, TS3A227E_REG_KP_INTERRUPT, &kp_int_reg);
|
||||
ret = regmap_read(regmap, TS3A227E_REG_KP_INTERRUPT, &kp_int_reg);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to clear key interrupt ret=%d\n", ret);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
for (i = 0; i < TS3A227E_NUM_BUTTONS; i++) {
|
||||
if (kp_int_reg & PRESS_MASK(i))
|
||||
ts3a227e->buttons_held |= (1 << i);
|
||||
@ -283,6 +297,8 @@ static int ts3a227e_i2c_probe(struct i2c_client *i2c,
|
||||
return -ENOMEM;
|
||||
|
||||
i2c_set_clientdata(i2c, ts3a227e);
|
||||
ts3a227e->dev = dev;
|
||||
ts3a227e->irq = i2c->irq;
|
||||
|
||||
ts3a227e->regmap = devm_regmap_init_i2c(i2c, &ts3a227e_regmap_config);
|
||||
if (IS_ERR(ts3a227e->regmap))
|
||||
@ -320,6 +336,32 @@ static int ts3a227e_i2c_probe(struct i2c_client *i2c,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int ts3a227e_suspend(struct device *dev)
|
||||
{
|
||||
struct ts3a227e *ts3a227e = dev_get_drvdata(dev);
|
||||
|
||||
dev_dbg(ts3a227e->dev, "suspend disable irq\n");
|
||||
disable_irq(ts3a227e->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ts3a227e_resume(struct device *dev)
|
||||
{
|
||||
struct ts3a227e *ts3a227e = dev_get_drvdata(dev);
|
||||
|
||||
dev_dbg(ts3a227e->dev, "resume enable irq\n");
|
||||
enable_irq(ts3a227e->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops ts3a227e_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(ts3a227e_suspend, ts3a227e_resume)
|
||||
};
|
||||
|
||||
static const struct i2c_device_id ts3a227e_i2c_ids[] = {
|
||||
{ "ts3a227e", 0 },
|
||||
{ }
|
||||
@ -335,7 +377,7 @@ MODULE_DEVICE_TABLE(of, ts3a227e_of_match);
|
||||
static struct i2c_driver ts3a227e_driver = {
|
||||
.driver = {
|
||||
.name = "ts3a227e",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &ts3a227e_pm,
|
||||
.of_match_table = of_match_ptr(ts3a227e_of_match),
|
||||
},
|
||||
.probe = ts3a227e_i2c_probe,
|
||||
|
@ -810,7 +810,6 @@ MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id);
|
||||
static struct i2c_driver uda1380_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "uda1380-codec",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = uda1380_i2c_probe,
|
||||
.remove = uda1380_i2c_remove,
|
||||
|
@ -251,7 +251,6 @@ MODULE_DEVICE_TABLE(i2c, wm1250_ev1_i2c_id);
|
||||
static struct i2c_driver wm1250_ev1_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm1250-ev1",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm1250_ev1_probe,
|
||||
.remove = wm1250_ev1_remove,
|
||||
|
@ -942,7 +942,6 @@ MODULE_DEVICE_TABLE(i2c, wm2000_i2c_id);
|
||||
static struct i2c_driver wm2000_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm2000",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm2000_i2c_probe,
|
||||
.remove = wm2000_i2c_remove,
|
||||
|
@ -2495,7 +2495,6 @@ MODULE_DEVICE_TABLE(i2c, wm2200_i2c_id);
|
||||
static struct i2c_driver wm2200_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm2200",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &wm2200_pm,
|
||||
},
|
||||
.probe = wm2200_i2c_probe,
|
||||
|
@ -2722,7 +2722,6 @@ MODULE_DEVICE_TABLE(i2c, wm5100_i2c_id);
|
||||
static struct i2c_driver wm5100_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm5100",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &wm5100_pm,
|
||||
},
|
||||
.probe = wm5100_i2c_probe,
|
||||
|
@ -690,7 +690,6 @@ MODULE_DEVICE_TABLE(i2c, wm8510_i2c_id);
|
||||
static struct i2c_driver wm8510_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8510",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8510_of_match,
|
||||
},
|
||||
.probe = wm8510_i2c_probe,
|
||||
|
@ -534,7 +534,6 @@ MODULE_DEVICE_TABLE(i2c, wm8523_i2c_id);
|
||||
static struct i2c_driver wm8523_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8523",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8523_of_match,
|
||||
},
|
||||
.probe = wm8523_i2c_probe,
|
||||
|
@ -978,7 +978,6 @@ MODULE_DEVICE_TABLE(i2c, wm8580_i2c_id);
|
||||
static struct i2c_driver wm8580_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8580",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8580_of_match,
|
||||
},
|
||||
.probe = wm8580_i2c_probe,
|
||||
|
@ -478,7 +478,6 @@ MODULE_DEVICE_TABLE(i2c, wm8711_i2c_id);
|
||||
static struct i2c_driver wm8711_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8711",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8711_of_match,
|
||||
},
|
||||
.probe = wm8711_i2c_probe,
|
||||
|
@ -319,7 +319,6 @@ MODULE_DEVICE_TABLE(i2c, wm8728_i2c_id);
|
||||
static struct i2c_driver wm8728_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8728",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8728_of_match,
|
||||
},
|
||||
.probe = wm8728_i2c_probe,
|
||||
|
@ -789,7 +789,6 @@ MODULE_DEVICE_TABLE(i2c, wm8731_i2c_id);
|
||||
static struct i2c_driver wm8731_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8731",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8731_of_match,
|
||||
},
|
||||
.probe = wm8731_i2c_probe,
|
||||
|
@ -657,7 +657,6 @@ MODULE_DEVICE_TABLE(i2c, wm8737_i2c_id);
|
||||
static struct i2c_driver wm8737_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8737",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8737_of_match,
|
||||
},
|
||||
.probe = wm8737_i2c_probe,
|
||||
|
@ -633,7 +633,6 @@ MODULE_DEVICE_TABLE(i2c, wm8741_i2c_id);
|
||||
static struct i2c_driver wm8741_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8741",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8741_of_match,
|
||||
},
|
||||
.probe = wm8741_i2c_probe,
|
||||
|
@ -826,7 +826,6 @@ MODULE_DEVICE_TABLE(i2c, wm8750_i2c_id);
|
||||
static struct i2c_driver wm8750_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8750",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8750_of_match,
|
||||
},
|
||||
.probe = wm8750_i2c_probe,
|
||||
|
@ -1609,7 +1609,6 @@ MODULE_DEVICE_TABLE(i2c, wm8753_i2c_id);
|
||||
static struct i2c_driver wm8753_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8753",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8753_of_match,
|
||||
},
|
||||
.probe = wm8753_i2c_probe,
|
||||
|
@ -536,7 +536,6 @@ MODULE_DEVICE_TABLE(i2c, wm8776_i2c_id);
|
||||
static struct i2c_driver wm8776_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8776",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8776_of_match,
|
||||
},
|
||||
.probe = wm8776_i2c_probe,
|
||||
|
@ -49,7 +49,6 @@ MODULE_DEVICE_TABLE(of, wm8804_of_match);
|
||||
static struct i2c_driver wm8804_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8804",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &wm8804_pm,
|
||||
.of_match_table = wm8804_of_match,
|
||||
},
|
||||
|
@ -1312,7 +1312,6 @@ MODULE_DEVICE_TABLE(i2c, wm8900_i2c_id);
|
||||
static struct i2c_driver wm8900_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8900",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8900_i2c_probe,
|
||||
.remove = wm8900_i2c_remove,
|
||||
|
@ -2193,7 +2193,6 @@ MODULE_DEVICE_TABLE(i2c, wm8903_i2c_id);
|
||||
static struct i2c_driver wm8903_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8903",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8903_of_match,
|
||||
},
|
||||
.probe = wm8903_i2c_probe,
|
||||
|
@ -2292,7 +2292,6 @@ MODULE_DEVICE_TABLE(i2c, wm8904_i2c_id);
|
||||
static struct i2c_driver wm8904_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8904",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(wm8904_of_match),
|
||||
},
|
||||
.probe = wm8904_i2c_probe,
|
||||
|
@ -787,7 +787,6 @@ MODULE_DEVICE_TABLE(i2c, wm8940_i2c_id);
|
||||
static struct i2c_driver wm8940_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8940",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8940_i2c_probe,
|
||||
.remove = wm8940_i2c_remove,
|
||||
|
@ -1009,7 +1009,6 @@ MODULE_DEVICE_TABLE(i2c, wm8955_i2c_id);
|
||||
static struct i2c_driver wm8955_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8955",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8955_i2c_probe,
|
||||
.remove = wm8955_i2c_remove,
|
||||
|
@ -1216,7 +1216,6 @@ MODULE_DEVICE_TABLE(of, wm8960_of_match);
|
||||
static struct i2c_driver wm8960_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8960",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8960_of_match,
|
||||
},
|
||||
.probe = wm8960_i2c_probe,
|
||||
|
@ -982,7 +982,6 @@ MODULE_DEVICE_TABLE(i2c, wm8961_i2c_id);
|
||||
static struct i2c_driver wm8961_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8961",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8961_i2c_probe,
|
||||
.remove = wm8961_i2c_remove,
|
||||
|
@ -3878,7 +3878,6 @@ MODULE_DEVICE_TABLE(of, wm8962_of_match);
|
||||
static struct i2c_driver wm8962_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8962",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = wm8962_of_match,
|
||||
.pm = &wm8962_pm,
|
||||
},
|
||||
|
@ -710,7 +710,6 @@ MODULE_DEVICE_TABLE(i2c, wm8971_i2c_id);
|
||||
static struct i2c_driver wm8971_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8971",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8971_i2c_probe,
|
||||
.remove = wm8971_i2c_remove,
|
||||
|
@ -634,7 +634,6 @@ MODULE_DEVICE_TABLE(i2c, wm8974_i2c_id);
|
||||
static struct i2c_driver wm8974_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8974",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8974_i2c_probe,
|
||||
.remove = wm8974_i2c_remove,
|
||||
|
@ -1072,7 +1072,6 @@ MODULE_DEVICE_TABLE(i2c, wm8978_i2c_id);
|
||||
static struct i2c_driver wm8978_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8978",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8978_i2c_probe,
|
||||
.remove = wm8978_i2c_remove,
|
||||
|
@ -1133,7 +1133,6 @@ MODULE_DEVICE_TABLE(i2c, wm8983_i2c_id);
|
||||
static struct i2c_driver wm8983_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8983",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8983_i2c_probe,
|
||||
.remove = wm8983_i2c_remove,
|
||||
|
@ -1144,7 +1144,6 @@ MODULE_DEVICE_TABLE(i2c, wm8985_i2c_id);
|
||||
static struct i2c_driver wm8985_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8985",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8985_i2c_probe,
|
||||
.remove = wm8985_i2c_remove,
|
||||
|
@ -919,7 +919,6 @@ MODULE_DEVICE_TABLE(i2c, wm8988_i2c_id);
|
||||
static struct i2c_driver wm8988_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8988",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8988_i2c_probe,
|
||||
.remove = wm8988_i2c_remove,
|
||||
|
@ -1356,7 +1356,6 @@ MODULE_DEVICE_TABLE(i2c, wm8990_i2c_id);
|
||||
static struct i2c_driver wm8990_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "wm8990",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = wm8990_i2c_probe,
|
||||
.remove = wm8990_i2c_remove,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user