Commit 258ced9d authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/uda1380', 'asoc/topic/unregister',...

Merge remote-tracking branches 'asoc/topic/uda1380', 'asoc/topic/unregister', 'asoc/topic/ux500', 'asoc/topic/wm5100' and 'asoc/topic/wm8903' into asoc-next
...@@ -28,6 +28,14 @@ Optional properties: ...@@ -28,6 +28,14 @@ Optional properties:
performed. If any entry has the value 0xffffffff, that GPIO's performed. If any entry has the value 0xffffffff, that GPIO's
configuration will not be modified. configuration will not be modified.
- AVDD-supply : Analog power supply regulator on the AVDD pin.
- CPVDD-supply : Charge pump supply regulator on the CPVDD pin.
- DBVDD-supply : Digital buffer supply regulator for the DBVDD pin.
- DCVDD-supply : Digital core supply regulator for the DCVDD pin.
Pins on the device (for linking into audio routes): Pins on the device (for linking into audio routes):
* IN1L * IN1L
...@@ -54,6 +62,11 @@ codec: wm8903@1a { ...@@ -54,6 +62,11 @@ codec: wm8903@1a {
reg = <0x1a>; reg = <0x1a>;
interrupts = < 347 >; interrupts = < 347 >;
AVDD-supply = <&fooreg_a>;
CPVDD-supply = <&fooreg_b>;
DBVDD-supply = <&fooreg_c>;
DCVDC-supply = <&fooreg_d>;
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;
......
...@@ -791,9 +791,16 @@ static const struct i2c_device_id uda1380_i2c_id[] = { ...@@ -791,9 +791,16 @@ static const struct i2c_device_id uda1380_i2c_id[] = {
}; };
MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id); MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id);
static const struct of_device_id uda1380_of_match[] = {
{ .compatible = "nxp,uda1380", },
{ }
};
MODULE_DEVICE_TABLE(of, uda1380_of_match);
static struct i2c_driver uda1380_i2c_driver = { static struct i2c_driver uda1380_i2c_driver = {
.driver = { .driver = {
.name = "uda1380-codec", .name = "uda1380-codec",
.of_match_table = uda1380_of_match,
}, },
.probe = uda1380_i2c_probe, .probe = uda1380_i2c_probe,
.remove = uda1380_i2c_remove, .remove = uda1380_i2c_remove,
......
...@@ -2014,7 +2014,7 @@ static void wm5100_micd_irq(struct wm5100_priv *wm5100) ...@@ -2014,7 +2014,7 @@ static void wm5100_micd_irq(struct wm5100_priv *wm5100)
ret = regmap_read(wm5100->regmap, WM5100_MIC_DETECT_3, &val); ret = regmap_read(wm5100->regmap, WM5100_MIC_DETECT_3, &val);
if (ret != 0) { if (ret != 0) {
dev_err(wm5100->dev, "Failed to read micropone status: %d\n", dev_err(wm5100->dev, "Failed to read microphone status: %d\n",
ret); ret);
return; return;
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/mutex.h> #include <linux/mutex.h>
...@@ -115,10 +116,19 @@ static const struct reg_default wm8903_reg_defaults[] = { ...@@ -115,10 +116,19 @@ static const struct reg_default wm8903_reg_defaults[] = {
{ 172, 0x0000 }, /* R172 - Analogue Output Bias 0 */ { 172, 0x0000 }, /* R172 - Analogue Output Bias 0 */
}; };
#define WM8903_NUM_SUPPLIES 4
static const char *wm8903_supply_names[WM8903_NUM_SUPPLIES] = {
"AVDD",
"CPVDD",
"DBVDD",
"DCVDD",
};
struct wm8903_priv { struct wm8903_priv {
struct wm8903_platform_data *pdata; struct wm8903_platform_data *pdata;
struct device *dev; struct device *dev;
struct regmap *regmap; struct regmap *regmap;
struct regulator_bulk_data supplies[WM8903_NUM_SUPPLIES];
int sysclk; int sysclk;
int irq; int irq;
...@@ -2030,6 +2040,23 @@ static int wm8903_i2c_probe(struct i2c_client *i2c, ...@@ -2030,6 +2040,23 @@ static int wm8903_i2c_probe(struct i2c_client *i2c,
pdata = wm8903->pdata; pdata = wm8903->pdata;
for (i = 0; i < ARRAY_SIZE(wm8903->supplies); i++)
wm8903->supplies[i].supply = wm8903_supply_names[i];
ret = devm_regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8903->supplies),
wm8903->supplies);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
return ret;
}
ret = regulator_bulk_enable(ARRAY_SIZE(wm8903->supplies),
wm8903->supplies);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
return ret;
}
ret = regmap_read(wm8903->regmap, WM8903_SW_RESET_AND_ID, &val); ret = regmap_read(wm8903->regmap, WM8903_SW_RESET_AND_ID, &val);
if (ret != 0) { if (ret != 0) {
dev_err(&i2c->dev, "Failed to read chip ID: %d\n", ret); dev_err(&i2c->dev, "Failed to read chip ID: %d\n", ret);
...@@ -2160,6 +2187,8 @@ static int wm8903_i2c_probe(struct i2c_client *i2c, ...@@ -2160,6 +2187,8 @@ static int wm8903_i2c_probe(struct i2c_client *i2c,
return 0; return 0;
err: err:
regulator_bulk_disable(ARRAY_SIZE(wm8903->supplies),
wm8903->supplies);
return ret; return ret;
} }
...@@ -2167,6 +2196,8 @@ static int wm8903_i2c_remove(struct i2c_client *client) ...@@ -2167,6 +2196,8 @@ static int wm8903_i2c_remove(struct i2c_client *client)
{ {
struct wm8903_priv *wm8903 = i2c_get_clientdata(client); struct wm8903_priv *wm8903 = i2c_get_clientdata(client);
regulator_bulk_disable(ARRAY_SIZE(wm8903->supplies),
wm8903->supplies);
if (client->irq) if (client->irq)
free_irq(client->irq, wm8903); free_irq(client->irq, wm8903);
wm8903_free_gpio(wm8903); wm8903_free_gpio(wm8903);
......
...@@ -3240,6 +3240,11 @@ static void snd_soc_component_cleanup(struct snd_soc_component *component) ...@@ -3240,6 +3240,11 @@ static void snd_soc_component_cleanup(struct snd_soc_component *component)
static void snd_soc_component_del_unlocked(struct snd_soc_component *component) static void snd_soc_component_del_unlocked(struct snd_soc_component *component)
{ {
struct snd_soc_card *card = component->card;
if (card)
snd_soc_unregister_card(card);
list_del(&component->list); list_del(&component->list);
} }
......
...@@ -33,7 +33,6 @@ static struct snd_soc_dai_link mop500_dai_links[] = { ...@@ -33,7 +33,6 @@ static struct snd_soc_dai_link mop500_dai_links[] = {
.stream_name = "ab8500_0", .stream_name = "ab8500_0",
.cpu_dai_name = "ux500-msp-i2s.1", .cpu_dai_name = "ux500-msp-i2s.1",
.codec_dai_name = "ab8500-codec-dai.0", .codec_dai_name = "ab8500-codec-dai.0",
.platform_name = "ux500-msp-i2s.1",
.codec_name = "ab8500-codec.0", .codec_name = "ab8500-codec.0",
.init = mop500_ab8500_machine_init, .init = mop500_ab8500_machine_init,
.ops = mop500_ab8500_ops, .ops = mop500_ab8500_ops,
...@@ -43,7 +42,6 @@ static struct snd_soc_dai_link mop500_dai_links[] = { ...@@ -43,7 +42,6 @@ static struct snd_soc_dai_link mop500_dai_links[] = {
.stream_name = "ab8500_1", .stream_name = "ab8500_1",
.cpu_dai_name = "ux500-msp-i2s.3", .cpu_dai_name = "ux500-msp-i2s.3",
.codec_dai_name = "ab8500-codec-dai.1", .codec_dai_name = "ab8500-codec-dai.1",
.platform_name = "ux500-msp-i2s.3",
.codec_name = "ab8500-codec.0", .codec_name = "ab8500-codec.0",
.init = NULL, .init = NULL,
.ops = mop500_ab8500_ops, .ops = mop500_ab8500_ops,
...@@ -87,8 +85,6 @@ static int mop500_of_probe(struct platform_device *pdev, ...@@ -87,8 +85,6 @@ static int mop500_of_probe(struct platform_device *pdev,
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
mop500_dai_links[i].cpu_of_node = msp_np[i]; mop500_dai_links[i].cpu_of_node = msp_np[i];
mop500_dai_links[i].cpu_dai_name = NULL; mop500_dai_links[i].cpu_dai_name = NULL;
mop500_dai_links[i].platform_of_node = msp_np[i];
mop500_dai_links[i].platform_name = NULL;
mop500_dai_links[i].codec_of_node = codec_np; mop500_dai_links[i].codec_of_node = codec_np;
mop500_dai_links[i].codec_name = NULL; mop500_dai_links[i].codec_name = NULL;
} }
......
...@@ -133,6 +133,7 @@ static int setup_pcm_framing(struct snd_soc_dai *dai, unsigned int rate, ...@@ -133,6 +133,7 @@ static int setup_pcm_framing(struct snd_soc_dai *dai, unsigned int rate,
struct ux500_msp_i2s_drvdata *drvdata = dev_get_drvdata(dai->dev); struct ux500_msp_i2s_drvdata *drvdata = dev_get_drvdata(dai->dev);
u32 frame_length = MSP_FRAME_LEN_1; u32 frame_length = MSP_FRAME_LEN_1;
prot_desc->frame_width = 0; prot_desc->frame_width = 0;
switch (drvdata->slots) { switch (drvdata->slots) {
...@@ -482,7 +483,8 @@ static int ux500_msp_dai_prepare(struct snd_pcm_substream *substream, ...@@ -482,7 +483,8 @@ static int ux500_msp_dai_prepare(struct snd_pcm_substream *substream,
if ((drvdata->fmt & SND_SOC_DAIFMT_MASTER_MASK) && if ((drvdata->fmt & SND_SOC_DAIFMT_MASTER_MASK) &&
(drvdata->msp->f_bitclk > 19200000)) { (drvdata->msp->f_bitclk > 19200000)) {
/* If the bit-clock is higher than 19.2MHz, Vape should be /* If the bit-clock is higher than 19.2MHz, Vape should be
* run in 100% OPP. Only when bit-clock is used (MSP master) */ * run in 100% OPP. Only when bit-clock is used (MSP master)
*/
prcmu_qos_update_requirement(PRCMU_QOS_APE_OPP, prcmu_qos_update_requirement(PRCMU_QOS_APE_OPP,
"ux500-msp-i2s", 100); "ux500-msp-i2s", 100);
drvdata->vape_opp_constraint = 1; drvdata->vape_opp_constraint = 1;
......
...@@ -604,7 +604,6 @@ int ux500_msp_i2s_trigger(struct ux500_msp *msp, int cmd, int direction) ...@@ -604,7 +604,6 @@ int ux500_msp_i2s_trigger(struct ux500_msp *msp, int cmd, int direction)
break; break;
default: default:
return -EINVAL; return -EINVAL;
break;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment