memory: aemif: allow passing device lookup table as platform data
TI aemif driver creates its own subnodes of the device tree in order to guarantee that all child devices are probed after the AEMIF timing parameters are configured. Some devices (e.g. da850) use struct of_dev_auxdata for clock lookup but nodes created from within the aemif driver can't access the lookup table. Create a platform data structure that holds a pointer to of_dev_auxdata so that we can use it with of_platform_populate(). Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Acked-by: Sekhar Nori <nsekhar@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ad90a3de9d
commit
f95bd04120
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/platform_data/ti-aemif.h>
|
||||||
|
|
||||||
#define TA_SHIFT 2
|
#define TA_SHIFT 2
|
||||||
#define RHOLD_SHIFT 4
|
#define RHOLD_SHIFT 4
|
||||||
|
@ -335,6 +336,8 @@ static int aemif_probe(struct platform_device *pdev)
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct device_node *child_np;
|
struct device_node *child_np;
|
||||||
struct aemif_device *aemif;
|
struct aemif_device *aemif;
|
||||||
|
struct aemif_platform_data *pdata;
|
||||||
|
struct of_dev_auxdata *dev_lookup;
|
||||||
|
|
||||||
if (np == NULL)
|
if (np == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -343,6 +346,9 @@ static int aemif_probe(struct platform_device *pdev)
|
||||||
if (!aemif)
|
if (!aemif)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
|
dev_lookup = pdata ? pdata->dev_lookup : NULL;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, aemif);
|
platform_set_drvdata(pdev, aemif);
|
||||||
|
|
||||||
aemif->clk = devm_clk_get(dev, NULL);
|
aemif->clk = devm_clk_get(dev, NULL);
|
||||||
|
@ -390,7 +396,7 @@ static int aemif_probe(struct platform_device *pdev)
|
||||||
* parameters are set.
|
* parameters are set.
|
||||||
*/
|
*/
|
||||||
for_each_available_child_of_node(np, child_np) {
|
for_each_available_child_of_node(np, child_np) {
|
||||||
ret = of_platform_populate(child_np, NULL, NULL, dev);
|
ret = of_platform_populate(child_np, NULL, dev_lookup, dev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* TI DaVinci AEMIF platform glue.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 BayLibre SAS
|
||||||
|
*
|
||||||
|
* Author:
|
||||||
|
* Bartosz Golaszewski <bgolaszewski@baylibre.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __TI_DAVINCI_AEMIF_DATA_H__
|
||||||
|
#define __TI_DAVINCI_AEMIF_DATA_H__
|
||||||
|
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
|
||||||
|
struct aemif_platform_data {
|
||||||
|
struct of_dev_auxdata *dev_lookup;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __TI_DAVINCI_AEMIF_DATA_H__ */
|
Loading…
Reference in New Issue