From: Allen Xu Date: Sat, 26 Jul 2014 10:27:14 +0000 (-0500) Subject: ENGR00323263 support accessing two QSPI chips simultaneously X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=231e68c17e19868a1f0485484da8a3234cd14934;p=karo-tx-linux.git ENGR00323263 support accessing two QSPI chips simultaneously Add mutex on QSPI controller layer to support accessing two QSPI chips simultaneously. removed the conflict ddr_io_mode, it's already obsoleted in community code. Signed-off-by: Allen Xu --- diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 6afa9064ad04..99e95c8618e2 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -26,6 +26,7 @@ #include #include #include +#include /* The registers */ #define QUADSPI_MCR 0x00 @@ -235,6 +236,7 @@ struct fsl_qspi { u32 nor_num; u32 clk_rate; unsigned int chip_base_addr; /* We may support two chips. */ + struct mutex lock; }; static inline int is_vybrid_qspi(struct fsl_qspi *q) @@ -824,6 +826,8 @@ static int fsl_qspi_prep(struct spi_nor *nor, enum spi_nor_ops ops) struct fsl_qspi *q = nor->priv; int ret; + mutex_lock(&q->lock); + ret = clk_enable(q->clk_en); if (ret) return ret; @@ -844,6 +848,7 @@ static void fsl_qspi_unprep(struct spi_nor *nor, enum spi_nor_ops ops) clk_disable(q->clk); clk_disable(q->clk_en); + mutex_unlock(&q->lock); } static int fsl_qspi_probe(struct platform_device *pdev) @@ -936,6 +941,8 @@ static int fsl_qspi_probe(struct platform_device *pdev) if (of_get_property(np, "fsl,qspi-has-second-chip", NULL)) has_second_chip = true; + mutex_init(&q->lock); + /* iterate the subnodes. */ for_each_available_child_of_node(dev->of_node, np) { const struct spi_device_id *id;