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:
Timur Tabi 2011-06-08 15:02:55 -05:00 коммит произвёл Mark Brown
Родитель 995e54f5fe
Коммит 147dfe90f7
4 изменённых файлов: 18 добавлений и 13 удалений

Просмотреть файл

@ -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;