ASoC: fsl: add dt support for imx-audmux

It adds device tree probe support for imx-audmux driver.

Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Richard Zhao 2012-03-05 22:31:04 +08:00 committed by Mark Brown
parent f320515a58
commit 9d5ef2663f
2 changed files with 27 additions and 0 deletions

View File

@ -0,0 +1,13 @@
Freescale Digital Audio Mux (AUDMUX) device
Required properties:
- compatible : "fsl,imx21-audmux" for AUDMUX version firstly used on i.MX21,
or "fsl,imx31-audmux" for the version firstly used on i.MX31.
- reg : Should contain AUDMUX registers location and length
Example:
audmux@021d8000 {
compatible = "fsl,imx6q-audmux", "fsl,imx31-audmux";
reg = <0x021d8000 0x4000>;
};

View File

@ -22,6 +22,8 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
@ -197,6 +199,13 @@ static struct platform_device_id imx_audmux_ids[] = {
}; };
MODULE_DEVICE_TABLE(platform, imx_audmux_ids); MODULE_DEVICE_TABLE(platform, imx_audmux_ids);
static const struct of_device_id imx_audmux_dt_ids[] = {
{ .compatible = "fsl,imx21-audmux", .data = &imx_audmux_ids[0], },
{ .compatible = "fsl,imx31-audmux", .data = &imx_audmux_ids[1], },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, imx_audmux_dt_ids);
static const uint8_t port_mapping[] = { static const uint8_t port_mapping[] = {
0x0, 0x4, 0x8, 0x10, 0x14, 0x1c, 0x0, 0x4, 0x8, 0x10, 0x14, 0x1c,
}; };
@ -243,6 +252,8 @@ EXPORT_SYMBOL_GPL(imx_audmux_v2_configure_port);
static int __init imx_audmux_probe(struct platform_device *pdev) static int __init imx_audmux_probe(struct platform_device *pdev)
{ {
struct resource *res; struct resource *res;
const struct of_device_id *of_id =
of_match_device(imx_audmux_dt_ids, &pdev->dev);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
audmux_base = devm_request_and_ioremap(&pdev->dev, res); audmux_base = devm_request_and_ioremap(&pdev->dev, res);
@ -256,6 +267,8 @@ static int __init imx_audmux_probe(struct platform_device *pdev)
audmux_clk = NULL; audmux_clk = NULL;
} }
if (of_id)
pdev->id_entry = of_id->data;
audmux_type = pdev->id_entry->driver_data; audmux_type = pdev->id_entry->driver_data;
if (audmux_type == IMX31_AUDMUX) if (audmux_type == IMX31_AUDMUX)
audmux_debugfs_init(); audmux_debugfs_init();
@ -279,6 +292,7 @@ static struct platform_driver imx_audmux_driver = {
.driver = { .driver = {
.name = DRIVER_NAME, .name = DRIVER_NAME,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.of_match_table = imx_audmux_dt_ids,
} }
}; };