ASoC: p1022ds: fix incorrect referencing of device tree properties
Device tree integer properties are encoded in big-endian format, but some of the Freescale ASoC drivers were assuming that the host is in big-endian format as well. Although this is true, it's better to use endian-safe accessors. Also add a check for a failed ioremap() call in the SSI driver. Signed-off-by: Timur Tabi <timur@freescale.com> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
995e54f5fe
Коммит
147dfe90f7
|
@ -940,7 +940,7 @@ static int __devinit fsl_soc_dma_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
iprop = of_get_property(ssi_np, "fsl,fifo-depth", NULL);
|
iprop = of_get_property(ssi_np, "fsl,fifo-depth", NULL);
|
||||||
if (iprop)
|
if (iprop)
|
||||||
dma->ssi_fifo_depth = *iprop;
|
dma->ssi_fifo_depth = be32_to_cpup(iprop);
|
||||||
else
|
else
|
||||||
/* Older 8610 DTs didn't have the fifo-depth property */
|
/* Older 8610 DTs didn't have the fifo-depth property */
|
||||||
dma->ssi_fifo_depth = 8;
|
dma->ssi_fifo_depth = 8;
|
||||||
|
|
|
@ -678,7 +678,12 @@ static int __devinit fsl_ssi_probe(struct platform_device *pdev)
|
||||||
kfree(ssi_private);
|
kfree(ssi_private);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ssi_private->ssi = ioremap(res.start, 1 + res.end - res.start);
|
ssi_private->ssi = of_iomap(np, 0);
|
||||||
|
if (!ssi_private->ssi) {
|
||||||
|
dev_err(&pdev->dev, "could not map device resources\n");
|
||||||
|
kfree(ssi_private);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
ssi_private->ssi_phys = res.start;
|
ssi_private->ssi_phys = res.start;
|
||||||
ssi_private->irq = irq_of_parse_and_map(np, 0);
|
ssi_private->irq = irq_of_parse_and_map(np, 0);
|
||||||
|
|
||||||
|
@ -691,7 +696,7 @@ static int __devinit fsl_ssi_probe(struct platform_device *pdev)
|
||||||
/* Determine the FIFO depth. */
|
/* Determine the FIFO depth. */
|
||||||
iprop = of_get_property(np, "fsl,fifo-depth", NULL);
|
iprop = of_get_property(np, "fsl,fifo-depth", NULL);
|
||||||
if (iprop)
|
if (iprop)
|
||||||
ssi_private->fifo_depth = *iprop;
|
ssi_private->fifo_depth = be32_to_cpup(iprop);
|
||||||
else
|
else
|
||||||
/* Older 8610 DTs didn't have the fifo-depth property */
|
/* Older 8610 DTs didn't have the fifo-depth property */
|
||||||
ssi_private->fifo_depth = 8;
|
ssi_private->fifo_depth = 8;
|
||||||
|
|
|
@ -233,7 +233,7 @@ static int get_parent_cell_index(struct device_node *np)
|
||||||
if (!iprop)
|
if (!iprop)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return *iprop;
|
return be32_to_cpup(iprop);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,7 +258,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
|
||||||
if (!iprop)
|
if (!iprop)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
addr = *iprop;
|
addr = be32_to_cpup(iprop);
|
||||||
|
|
||||||
bus = get_parent_cell_index(np);
|
bus = get_parent_cell_index(np);
|
||||||
if (bus < 0)
|
if (bus < 0)
|
||||||
|
@ -305,7 +305,7 @@ static int get_dma_channel(struct device_node *ssi_np,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dma_channel_id = *iprop;
|
*dma_channel_id = be32_to_cpup(iprop);
|
||||||
*dma_id = get_parent_cell_index(dma_channel_np);
|
*dma_id = get_parent_cell_index(dma_channel_np);
|
||||||
of_node_put(dma_channel_np);
|
of_node_put(dma_channel_np);
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
machine_data->ssi_id = *iprop;
|
machine_data->ssi_id = be32_to_cpup(iprop);
|
||||||
|
|
||||||
/* Get the serial format and clock direction. */
|
/* Get the serial format and clock direction. */
|
||||||
sprop = of_get_property(np, "fsl,mode", NULL);
|
sprop = of_get_property(np, "fsl,mode", NULL);
|
||||||
|
@ -405,7 +405,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
machine_data->clk_frequency = *iprop;
|
machine_data->clk_frequency = be32_to_cpup(iprop);
|
||||||
} else if (strcasecmp(sprop, "i2s-master") == 0) {
|
} else if (strcasecmp(sprop, "i2s-master") == 0) {
|
||||||
machine_data->dai_format = SND_SOC_DAIFMT_I2S;
|
machine_data->dai_format = SND_SOC_DAIFMT_I2S;
|
||||||
machine_data->codec_clk_direction = SND_SOC_CLOCK_IN;
|
machine_data->codec_clk_direction = SND_SOC_CLOCK_IN;
|
||||||
|
|
|
@ -232,7 +232,7 @@ static int get_parent_cell_index(struct device_node *np)
|
||||||
|
|
||||||
iprop = of_get_property(parent, "cell-index", NULL);
|
iprop = of_get_property(parent, "cell-index", NULL);
|
||||||
if (iprop)
|
if (iprop)
|
||||||
ret = *iprop;
|
ret = be32_to_cpup(iprop);
|
||||||
|
|
||||||
of_node_put(parent);
|
of_node_put(parent);
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
|
||||||
if (!iprop)
|
if (!iprop)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
addr = *iprop;
|
addr = be32_to_cpup(iprop);
|
||||||
|
|
||||||
bus = get_parent_cell_index(np);
|
bus = get_parent_cell_index(np);
|
||||||
if (bus < 0)
|
if (bus < 0)
|
||||||
|
@ -308,7 +308,7 @@ static int get_dma_channel(struct device_node *ssi_np,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dma_channel_id = *iprop;
|
*dma_channel_id = be32_to_cpup(iprop);
|
||||||
*dma_id = get_parent_cell_index(dma_channel_np);
|
*dma_id = get_parent_cell_index(dma_channel_np);
|
||||||
of_node_put(dma_channel_np);
|
of_node_put(dma_channel_np);
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
mdata->ssi_id = *iprop;
|
mdata->ssi_id = be32_to_cpup(iprop);
|
||||||
|
|
||||||
/* Get the serial format and clock direction. */
|
/* Get the serial format and clock direction. */
|
||||||
sprop = of_get_property(np, "fsl,mode", NULL);
|
sprop = of_get_property(np, "fsl,mode", NULL);
|
||||||
|
@ -405,7 +405,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
mdata->clk_frequency = *iprop;
|
mdata->clk_frequency = be32_to_cpup(iprop);
|
||||||
} else if (strcasecmp(sprop, "i2s-master") == 0) {
|
} else if (strcasecmp(sprop, "i2s-master") == 0) {
|
||||||
mdata->dai_format = SND_SOC_DAIFMT_I2S;
|
mdata->dai_format = SND_SOC_DAIFMT_I2S;
|
||||||
mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
|
mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче