forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ALSA: ASoC: fix pxa2xx-i2s clk_get call
pxa2xx-i2s: probe actual device and use it for clk_get call thus fixing error during startup hook Signed-off-by: Dmitry Baryshkov <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Takashi Iwai <[email protected]>
- Loading branch information
Showing
1 changed file
with
39 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,6 +16,7 @@ | |
#include <linux/device.h> | ||
#include <linux/delay.h> | ||
#include <linux/clk.h> | ||
#include <linux/platform_device.h> | ||
#include <sound/core.h> | ||
#include <sound/pcm.h> | ||
#include <sound/initval.h> | ||
|
@@ -81,7 +82,6 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream) | |
struct snd_soc_pcm_runtime *rtd = substream->private_data; | ||
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; | ||
|
||
clk_i2s = clk_get(NULL, "I2SCLK"); | ||
if (IS_ERR(clk_i2s)) | ||
return PTR_ERR(clk_i2s); | ||
|
||
|
@@ -152,6 +152,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream, | |
pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx); | ||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm); | ||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk); | ||
BUG_ON(IS_ERR(clk_i2s)); | ||
clk_enable(clk_i2s); | ||
pxa_i2s_wait(); | ||
|
||
|
@@ -317,6 +318,43 @@ struct snd_soc_dai pxa_i2s_dai = { | |
|
||
EXPORT_SYMBOL_GPL(pxa_i2s_dai); | ||
|
||
static int pxa2xx_i2s_probe(struct platform_device *dev) | ||
{ | ||
clk_i2s = clk_get(&dev->dev, "I2SCLK"); | ||
return IS_ERR(clk_i2s) ? PTR_ERR(clk_i2s) : 0; | ||
} | ||
|
||
static int __devexit pxa2xx_i2s_remove(struct platform_device *dev) | ||
{ | ||
clk_put(clk_i2s); | ||
clk_i2s = ERR_PTR(-ENOENT); | ||
return 0; | ||
} | ||
|
||
static struct platform_driver pxa2xx_i2s_driver = { | ||
.probe = pxa2xx_i2s_probe, | ||
.remove = __devexit_p(pxa2xx_i2s_remove), | ||
|
||
.driver = { | ||
.name = "pxa2xx-i2s", | ||
.owner = THIS_MODULE, | ||
}, | ||
}; | ||
|
||
static int __init pxa2xx_i2s_init(void) | ||
{ | ||
clk_i2s = ERR_PTR(-ENOENT); | ||
return platform_driver_register(&pxa2xx_i2s_driver); | ||
} | ||
|
||
static void __exit pxa2xx_i2s_exit(void) | ||
{ | ||
platform_driver_unregister(&pxa2xx_i2s_driver); | ||
} | ||
|
||
module_init(pxa2xx_i2s_init); | ||
module_exit(pxa2xx_i2s_exit); | ||
|
||
/* Module information */ | ||
MODULE_AUTHOR("Liam Girdwood, [email protected], www.wolfsonmicro.com"); | ||
MODULE_DESCRIPTION("pxa2xx I2S SoC Interface"); | ||
|