forked from luck/tmp_suning_uos_patched
spi/tegra-sflash: assume CONFIG_OF, remove platform data
Tegra only supports, and always enables, device tree. Remove all ifdefs and runtime checks for DT support from the driver. Platform data is therefore no longer required. Rework the driver to parse the device tree directly into struct tegra_sflash_data. Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
ede2738a73
commit
e254695919
@ -33,7 +33,6 @@
|
|||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/spi-tegra.h>
|
|
||||||
#include <linux/clk/tegra.h>
|
#include <linux/clk/tegra.h>
|
||||||
|
|
||||||
#define SPI_COMMAND 0x000
|
#define SPI_COMMAND 0x000
|
||||||
@ -439,23 +438,13 @@ static irqreturn_t tegra_sflash_isr(int irq, void *context_data)
|
|||||||
return handle_cpu_based_xfer(tsd);
|
return handle_cpu_based_xfer(tsd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tegra_spi_platform_data *tegra_sflash_parse_dt(
|
static void tegra_sflash_parse_dt(struct tegra_sflash_data *tsd)
|
||||||
struct platform_device *pdev)
|
|
||||||
{
|
{
|
||||||
struct tegra_spi_platform_data *pdata;
|
struct device_node *np = tsd->dev->of_node;
|
||||||
struct device_node *np = pdev->dev.of_node;
|
|
||||||
u32 max_freq;
|
|
||||||
|
|
||||||
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
|
if (of_property_read_u32(np, "spi-max-frequency",
|
||||||
if (!pdata) {
|
&tsd->spi_max_frequency))
|
||||||
dev_err(&pdev->dev, "Memory alloc for pdata failed\n");
|
tsd->spi_max_frequency = 25000000; /* 25MHz */
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!of_property_read_u32(np, "spi-max-frequency", &max_freq))
|
|
||||||
pdata->spi_max_frequency = max_freq;
|
|
||||||
|
|
||||||
return pdata;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct of_device_id tegra_sflash_of_match[] = {
|
static struct of_device_id tegra_sflash_of_match[] = {
|
||||||
@ -469,28 +458,15 @@ static int tegra_sflash_probe(struct platform_device *pdev)
|
|||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct tegra_sflash_data *tsd;
|
struct tegra_sflash_data *tsd;
|
||||||
struct resource *r;
|
struct resource *r;
|
||||||
struct tegra_spi_platform_data *pdata = pdev->dev.platform_data;
|
|
||||||
int ret;
|
int ret;
|
||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
|
|
||||||
match = of_match_device(of_match_ptr(tegra_sflash_of_match),
|
match = of_match_device(tegra_sflash_of_match, &pdev->dev);
|
||||||
&pdev->dev);
|
|
||||||
if (!match) {
|
if (!match) {
|
||||||
dev_err(&pdev->dev, "Error: No device match found\n");
|
dev_err(&pdev->dev, "Error: No device match found\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pdata && pdev->dev.of_node)
|
|
||||||
pdata = tegra_sflash_parse_dt(pdev);
|
|
||||||
|
|
||||||
if (!pdata) {
|
|
||||||
dev_err(&pdev->dev, "No platform data, exiting\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pdata->spi_max_frequency)
|
|
||||||
pdata->spi_max_frequency = 25000000; /* 25MHz */
|
|
||||||
|
|
||||||
master = spi_alloc_master(&pdev->dev, sizeof(*tsd));
|
master = spi_alloc_master(&pdev->dev, sizeof(*tsd));
|
||||||
if (!master) {
|
if (!master) {
|
||||||
dev_err(&pdev->dev, "master allocation failed\n");
|
dev_err(&pdev->dev, "master allocation failed\n");
|
||||||
@ -510,6 +486,8 @@ static int tegra_sflash_probe(struct platform_device *pdev)
|
|||||||
tsd->dev = &pdev->dev;
|
tsd->dev = &pdev->dev;
|
||||||
spin_lock_init(&tsd->lock);
|
spin_lock_init(&tsd->lock);
|
||||||
|
|
||||||
|
tegra_sflash_parse_dt(tsd);
|
||||||
|
|
||||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
dev_err(&pdev->dev, "No IO memory resource\n");
|
dev_err(&pdev->dev, "No IO memory resource\n");
|
||||||
@ -538,7 +516,6 @@ static int tegra_sflash_probe(struct platform_device *pdev)
|
|||||||
goto exit_free_irq;
|
goto exit_free_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsd->spi_max_frequency = pdata->spi_max_frequency;
|
|
||||||
init_completion(&tsd->xfer_completion);
|
init_completion(&tsd->xfer_completion);
|
||||||
pm_runtime_enable(&pdev->dev);
|
pm_runtime_enable(&pdev->dev);
|
||||||
if (!pm_runtime_enabled(&pdev->dev)) {
|
if (!pm_runtime_enabled(&pdev->dev)) {
|
||||||
@ -658,7 +635,7 @@ static struct platform_driver tegra_sflash_driver = {
|
|||||||
.name = "spi-tegra-sflash",
|
.name = "spi-tegra-sflash",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.pm = &slink_pm_ops,
|
.pm = &slink_pm_ops,
|
||||||
.of_match_table = of_match_ptr(tegra_sflash_of_match),
|
.of_match_table = tegra_sflash_of_match,
|
||||||
},
|
},
|
||||||
.probe = tegra_sflash_probe,
|
.probe = tegra_sflash_probe,
|
||||||
.remove = tegra_sflash_remove,
|
.remove = tegra_sflash_remove,
|
||||||
|
Loading…
Reference in New Issue
Block a user