mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 17:43:59 +00:00
spi/qspi: parse register by name.
Modify the qspi driver to parse reg information by name. If "reg names" is not found, then revert back to normal get resource. Signed-off-by: Sourav Poddar <sourav.poddar@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
6ce4eac1f6
commit
6b3938aed0
@ -46,6 +46,8 @@ struct ti_qspi {
|
|||||||
|
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
|
void __iomem *ctrl_base;
|
||||||
|
void __iomem *mmap_base;
|
||||||
struct clk *fclk;
|
struct clk *fclk;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
@ -54,6 +56,8 @@ struct ti_qspi {
|
|||||||
u32 spi_max_frequency;
|
u32 spi_max_frequency;
|
||||||
u32 cmd;
|
u32 cmd;
|
||||||
u32 dc;
|
u32 dc;
|
||||||
|
|
||||||
|
bool ctrl_mod;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define QSPI_PID (0x0)
|
#define QSPI_PID (0x0)
|
||||||
@ -437,7 +441,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct ti_qspi *qspi;
|
struct ti_qspi *qspi;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct resource *r;
|
struct resource *r, *res_ctrl, *res_mmap;
|
||||||
struct device_node *np = pdev->dev.of_node;
|
struct device_node *np = pdev->dev.of_node;
|
||||||
u32 max_freq;
|
u32 max_freq;
|
||||||
int ret = 0, num_cs, irq;
|
int ret = 0, num_cs, irq;
|
||||||
@ -465,7 +469,35 @@ static int ti_qspi_probe(struct platform_device *pdev)
|
|||||||
qspi->master = master;
|
qspi->master = master;
|
||||||
qspi->dev = &pdev->dev;
|
qspi->dev = &pdev->dev;
|
||||||
|
|
||||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "qspi_base");
|
||||||
|
if (r == NULL) {
|
||||||
|
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
if (r == NULL) {
|
||||||
|
dev_err(&pdev->dev, "missing platform data\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res_mmap = platform_get_resource_byname(pdev,
|
||||||
|
IORESOURCE_MEM, "qspi_mmap");
|
||||||
|
if (res_mmap == NULL) {
|
||||||
|
res_mmap = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||||
|
if (res_mmap == NULL) {
|
||||||
|
dev_err(&pdev->dev,
|
||||||
|
"memory mapped resource not required\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res_ctrl = platform_get_resource_byname(pdev,
|
||||||
|
IORESOURCE_MEM, "qspi_ctrlmod");
|
||||||
|
if (res_ctrl == NULL) {
|
||||||
|
res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 2);
|
||||||
|
if (res_ctrl == NULL) {
|
||||||
|
dev_dbg(&pdev->dev,
|
||||||
|
"control module resources not required\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
@ -481,6 +513,23 @@ static int ti_qspi_probe(struct platform_device *pdev)
|
|||||||
goto free_master;
|
goto free_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res_ctrl) {
|
||||||
|
qspi->ctrl_mod = true;
|
||||||
|
qspi->ctrl_base = devm_ioremap_resource(&pdev->dev, res_ctrl);
|
||||||
|
if (IS_ERR(qspi->ctrl_base)) {
|
||||||
|
ret = PTR_ERR(qspi->ctrl_base);
|
||||||
|
goto free_master;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res_mmap) {
|
||||||
|
qspi->mmap_base = devm_ioremap_resource(&pdev->dev, res_mmap);
|
||||||
|
if (IS_ERR(qspi->mmap_base)) {
|
||||||
|
ret = PTR_ERR(qspi->mmap_base);
|
||||||
|
goto free_master;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = devm_request_irq(&pdev->dev, irq, ti_qspi_isr, 0,
|
ret = devm_request_irq(&pdev->dev, irq, ti_qspi_isr, 0,
|
||||||
dev_name(&pdev->dev), qspi);
|
dev_name(&pdev->dev), qspi);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user