Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 147dfe90 authored by Timur Tabi's avatar Timur Tabi Committed by Mark Brown
Browse files

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: default avatarTimur Tabi <timur@freescale.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 995e54f5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+7 −2
Original line number Diff line number Diff line
@@ -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);

@@ -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;
+5 −5
Original line number Diff line number Diff line
@@ -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);
}

/**
@@ -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)
@@ -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);

@@ -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);
@@ -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;
+5 −5
Original line number Diff line number Diff line
@@ -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);

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

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