[PATCH 9/9] arm/tegra: emc: device tree support
Stephen Warren
swarren at nvidia.com
Wed Jan 4 19:27:24 EST 2012
Olof Johansson wrote at Thursday, December 22, 2011 5:18 PM:
> Add device tree support to the emc driver, filling in the platform data
> based on the DT bindings.
> diff --git a/arch/arm/mach-tegra/apbio.c b/arch/arm/mach-tegra/apbio.c
...
> out_fail:
> mutex_unlock(&tegra_apb_dma_lock);
> - return true;
> + return false;
There's the Easter egg;-)
> diff --git a/arch/arm/mach-tegra/tegra2_emc.c b/arch/arm/mach-tegra/tegra2_emc.c
> +#ifdef CONFIG_OF
> +static struct device_node *tegra_emc_ramcode_devnode(struct device_node *np)
> +{
> + struct device_node *iter;
> + u32 reg;
> +
> + for_each_child_of_node(np, iter) {
> + if (!of_property_read_u32(np, "nvidia,ram-code", ®))
> + continue;
I think that test is inverted; it returns 0 on success.
> +static struct tegra_emc_pdata *tegra_emc_dt_parse_pdata(
> + struct platform_device *pdev)
...
> + pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
> + pdata->tables = devm_kzalloc(&pdev->dev,
> + sizeof(struct tegra_emc_table) * num_tables,
> + GFP_KERNEL);
May as well use sizeof(*pdata->tables) there too for consistency?
> +
> + i = 0;
> + for_each_child_of_node(tnp, iter) {
> + u32 prop;
> +
> + ret = of_property_read_u32(iter, "clock-frequency", &prop);
> + if (ret) {
> + dev_err(&pdev->dev, "no clock-frequency in %s\n",
> + iter->full_name);
> + continue;
Not goto out?
> + }
> + pdata->tables[i].rate = prop;
> +
> + ret = of_property_read_u32_array(iter, "nvidia,emc-registers",
> + pdata->tables[i].regs,
> + TEGRA_EMC_NUM_REGS);
> + if (ret) {
> + dev_err(&pdev->dev,
> + "malformed emc-registers property in %s\n",
> + iter->full_name);
> + continue;
> + }
> +
> + i++;
> + }
> + pdata->num_tables = i;
Or here, "if (i != num_tables) error"?
> +
> +out:
> + of_node_put(tnp);
> + return pdata;
> +}
+static struct tegra_emc_pdata __devinit *tegra_emc_fill_pdata(struct platform_device *pdev)
+{
...
+ pdata->tables[0].rate = clk_get_rate(c);
...
+ dev_info(&pdev->dev, "no tables provided, using settings for %ld kHz\n",
+ pdata->tables[0].rate / 2000);
Is that right; I'm not sure if the /2 should be applied to what's stored
in .rate, or to the EMC clock value from clk_get_rate(). Similarly, is
the DT frequency the /2 version; there's no /2 in the DT parsing, but I
think I expect there to be.
--
nvpublic
More information about the linux-arm-kernel
mailing list