Skip to content

Commit

Permalink
ASoC: p1022ds: fix incorrect referencing of device tree properties
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Timur Tabi authored and Mark Brown committed Jun 9, 2011
1 parent 995e54f commit 147dfe9
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
2 changes: 1 addition & 1 deletion sound/soc/fsl/fsl_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
if (iprop)
dma->ssi_fifo_depth = *iprop;
dma->ssi_fifo_depth = be32_to_cpup(iprop);
else
/* Older 8610 DTs didn't have the fifo-depth property */
dma->ssi_fifo_depth = 8;
Expand Down
9 changes: 7 additions & 2 deletions sound/soc/fsl/fsl_ssi.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,12 @@ static int __devinit fsl_ssi_probe(struct platform_device *pdev)
kfree(ssi_private);
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->irq = irq_of_parse_and_map(np, 0);

Expand All @@ -691,7 +696,7 @@ static int __devinit fsl_ssi_probe(struct platform_device *pdev)
/* Determine the FIFO depth. */
iprop = of_get_property(np, "fsl,fifo-depth", NULL);
if (iprop)
ssi_private->fifo_depth = *iprop;
ssi_private->fifo_depth = be32_to_cpup(iprop);
else
/* Older 8610 DTs didn't have the fifo-depth property */
ssi_private->fifo_depth = 8;
Expand Down
10 changes: 5 additions & 5 deletions sound/soc/fsl/mpc8610_hpcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ static int get_parent_cell_index(struct device_node *np)
if (!iprop)
return -1;

return *iprop;
return be32_to_cpup(iprop);
}

/**
Expand All @@ -258,7 +258,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
if (!iprop)
return -EINVAL;

addr = *iprop;
addr = be32_to_cpup(iprop);

bus = get_parent_cell_index(np);
if (bus < 0)
Expand Down Expand Up @@ -305,7 +305,7 @@ static int get_dma_channel(struct device_node *ssi_np,
return -EINVAL;
}

*dma_channel_id = *iprop;
*dma_channel_id = be32_to_cpup(iprop);
*dma_id = get_parent_cell_index(dma_channel_np);
of_node_put(dma_channel_np);

Expand Down Expand Up @@ -379,7 +379,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
ret = -EINVAL;
goto error;
}
machine_data->ssi_id = *iprop;
machine_data->ssi_id = be32_to_cpup(iprop);

/* Get the serial format and clock direction. */
sprop = of_get_property(np, "fsl,mode", NULL);
Expand All @@ -405,7 +405,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
ret = -EINVAL;
goto error;
}
machine_data->clk_frequency = *iprop;
machine_data->clk_frequency = be32_to_cpup(iprop);
} else if (strcasecmp(sprop, "i2s-master") == 0) {
machine_data->dai_format = SND_SOC_DAIFMT_I2S;
machine_data->codec_clk_direction = SND_SOC_CLOCK_IN;
Expand Down
10 changes: 5 additions & 5 deletions sound/soc/fsl/p1022_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ static int get_parent_cell_index(struct device_node *np)

iprop = of_get_property(parent, "cell-index", NULL);
if (iprop)
ret = *iprop;
ret = be32_to_cpup(iprop);

of_node_put(parent);

Expand Down Expand Up @@ -261,7 +261,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
if (!iprop)
return -EINVAL;

addr = *iprop;
addr = be32_to_cpup(iprop);

bus = get_parent_cell_index(np);
if (bus < 0)
Expand Down Expand Up @@ -308,7 +308,7 @@ static int get_dma_channel(struct device_node *ssi_np,
return -EINVAL;
}

*dma_channel_id = *iprop;
*dma_channel_id = be32_to_cpup(iprop);
*dma_id = get_parent_cell_index(dma_channel_np);
of_node_put(dma_channel_np);

Expand Down Expand Up @@ -379,7 +379,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
ret = -EINVAL;
goto error;
}
mdata->ssi_id = *iprop;
mdata->ssi_id = be32_to_cpup(iprop);

/* Get the serial format and clock direction. */
sprop = of_get_property(np, "fsl,mode", NULL);
Expand All @@ -405,7 +405,7 @@ static int p1022_ds_probe(struct platform_device *pdev)
ret = -EINVAL;
goto error;
}
mdata->clk_frequency = *iprop;
mdata->clk_frequency = be32_to_cpup(iprop);
} else if (strcasecmp(sprop, "i2s-master") == 0) {
mdata->dai_format = SND_SOC_DAIFMT_I2S;
mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
Expand Down

0 comments on commit 147dfe9

Please sign in to comment.