mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-10-31 18:09:19 +00:00
5f848cfe62
Currently audio drivers use dev_set_name when the device's probe function is invoked to change device name. However the device name cannot be changed after the device is registered by the Kernel and inside the probe functions. Using dev_set_name would cause random memory corruption leading to kernel crashes. dev_set_name is used in platform and cpu dai drivers to satisfy the needs of the ALSA SoC framework. ASoC framework does make use of platform and cpu dai names to check whether they are registered to it or not for sound card instantiation. However, the framework has an alternative way to compare the device's of_nodes against dai_link's of_nodes to know whether the platform/cpu dai is registered or not. Make changes in the driver to retrieve of_nodes and then assign to dai_link's of_node so that we can get rid of using dev_set_name in the drivers. CRs-Fixed: 706768 Change-Id: I085cfbe4bc60e1b7ec3522508989e6536b1af126 Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
#include <linux/platform_device.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/module.h>
|
|
#include <linux/of_device.h>
|
|
#include <sound/core.h>
|
|
#include <sound/pcm.h>
|
|
#include <sound/soc.h>
|
|
|
|
/* A dummy driver useful only to advertise hardware parameters */
|
|
static struct snd_soc_dai_driver msm_stub_dais[] = {
|
|
{
|
|
.name = "msm-stub-rx",
|
|
.playback = { /* Support maximum range */
|
|
.stream_name = "Playback",
|
|
.channels_min = 1,
|
|
.channels_max = 8,
|
|
.rates = SNDRV_PCM_RATE_8000_48000,
|
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
|
},
|
|
},
|
|
{
|
|
.name = "msm-stub-tx",
|
|
.capture = { /* Support maximum range */
|
|
.stream_name = "Record",
|
|
.channels_min = 1,
|
|
.channels_max = 8,
|
|
.rates = SNDRV_PCM_RATE_8000_48000,
|
|
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
|
|
SNDRV_PCM_FMTBIT_S24_LE),
|
|
},
|
|
},
|
|
};
|
|
|
|
static struct snd_soc_codec_driver soc_msm_stub = {};
|
|
|
|
static int msm_stub_dev_probe(struct platform_device *pdev)
|
|
{
|
|
dev_dbg(&pdev->dev, "dev name %s\n", dev_name(&pdev->dev));
|
|
|
|
return snd_soc_register_codec(&pdev->dev,
|
|
&soc_msm_stub, msm_stub_dais, ARRAY_SIZE(msm_stub_dais));
|
|
}
|
|
|
|
static int msm_stub_dev_remove(struct platform_device *pdev)
|
|
{
|
|
snd_soc_unregister_codec(&pdev->dev);
|
|
return 0;
|
|
}
|
|
static const struct of_device_id msm_stub_codec_dt_match[] = {
|
|
{ .compatible = "qcom,msm-stub-codec", },
|
|
{}
|
|
};
|
|
|
|
static struct platform_driver msm_stub_driver = {
|
|
.driver = {
|
|
.name = "msm-stub-codec",
|
|
.owner = THIS_MODULE,
|
|
.of_match_table = msm_stub_codec_dt_match,
|
|
},
|
|
.probe = msm_stub_dev_probe,
|
|
.remove = msm_stub_dev_remove,
|
|
};
|
|
|
|
static int __init msm_stub_init(void)
|
|
{
|
|
return platform_driver_register(&msm_stub_driver);
|
|
}
|
|
module_init(msm_stub_init);
|
|
|
|
static void __exit msm_stub_exit(void)
|
|
{
|
|
platform_driver_unregister(&msm_stub_driver);
|
|
}
|
|
module_exit(msm_stub_exit);
|
|
|
|
MODULE_DESCRIPTION("Generic MSM CODEC driver");
|
|
MODULE_VERSION("1.0");
|
|
MODULE_LICENSE("GPL v2");
|