|
@@ -18,6 +18,7 @@
|
|
|
#include <linux/pinctrl/consumer.h>
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/slab.h>
|
|
|
+#include <linux/of.h>
|
|
|
|
|
|
#include <mach/hardware.h>
|
|
|
#include <mach/msp.h>
|
|
@@ -683,14 +684,29 @@ int ux500_msp_i2s_init_msp(struct platform_device *pdev,
|
|
|
{
|
|
|
struct resource *res = NULL;
|
|
|
struct i2s_controller *i2s_cont;
|
|
|
+ struct device_node *np = pdev->dev.of_node;
|
|
|
struct ux500_msp *msp;
|
|
|
|
|
|
- dev_dbg(&pdev->dev, "%s: Enter (name: %s, id: %d).\n", __func__,
|
|
|
- pdev->name, platform_data->id);
|
|
|
-
|
|
|
*msp_p = devm_kzalloc(&pdev->dev, sizeof(struct ux500_msp), GFP_KERNEL);
|
|
|
msp = *msp_p;
|
|
|
|
|
|
+ if (np) {
|
|
|
+ if (!platform_data) {
|
|
|
+ platform_data = devm_kzalloc(&pdev->dev,
|
|
|
+ sizeof(struct msp_i2s_platform_data), GFP_KERNEL);
|
|
|
+ if (!platform_data)
|
|
|
+ ret = -ENOMEM;
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ if (!platform_data)
|
|
|
+ ret = -EINVAL;
|
|
|
+
|
|
|
+ if (ret)
|
|
|
+ goto err_res;
|
|
|
+
|
|
|
+ dev_dbg(&pdev->dev, "%s: Enter (name: %s, id: %d).\n", __func__,
|
|
|
+ pdev->name, platform_data->id);
|
|
|
+
|
|
|
msp->id = platform_data->id;
|
|
|
msp->dev = &pdev->dev;
|
|
|
msp->dma_cfg_rx = platform_data->msp_i2s_dma_rx;
|