aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>2013-04-29 08:07:48 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2013-08-05 15:48:49 -0400
commit64ddba4d8a381b65bebee24c8da4eb80080c64a4 (patch)
tree320f1fc85107662e12b168f3a17b34f3a7cbce7f
parent52778b2e9fcb66c8f1c9d5b1ae435815c19e7ae3 (diff)
mtd: nand: fsmc: update of OF support
Add nand bank selection and timings to the device tree bindings. Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> [Added some documentation] Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r--Documentation/devicetree/bindings/mtd/fsmc-nand.txt25
-rw-r--r--drivers/mtd/nand/fsmc_nand.c18
-rw-r--r--include/linux/mtd/fsmc.h1
3 files changed, 43 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/mtd/fsmc-nand.txt b/Documentation/devicetree/bindings/mtd/fsmc-nand.txt
index 2240ac09f6ba..ec42935f3908 100644
--- a/Documentation/devicetree/bindings/mtd/fsmc-nand.txt
+++ b/Documentation/devicetree/bindings/mtd/fsmc-nand.txt
@@ -1,4 +1,5 @@
1* FSMC NAND 1ST Microelectronics Flexible Static Memory Controller (FSMC)
2NAND Interface
2 3
3Required properties: 4Required properties:
4- compatible : "st,spear600-fsmc-nand", "stericsson,fsmc-nand" 5- compatible : "st,spear600-fsmc-nand", "stericsson,fsmc-nand"
@@ -9,6 +10,26 @@ Optional properties:
9- bank-width : Width (in bytes) of the device. If not present, the width 10- bank-width : Width (in bytes) of the device. If not present, the width
10 defaults to 1 byte 11 defaults to 1 byte
11- nand-skip-bbtscan: Indicates the the BBT scanning should be skipped 12- nand-skip-bbtscan: Indicates the the BBT scanning should be skipped
13- timings: array of 6 bytes for NAND timings. The meanings of these bytes
14 are:
15 byte 0 TCLR : CLE to RE delay in number of AHB clock cycles, only 4 bits
16 are valid. Zero means one clockcycle, 15 means 16 clock
17 cycles.
18 byte 1 TAR : ALE to RE delay, 4 bits are valid. Same format as TCLR.
19 byte 2 THIZ : number of HCLK clock cycles during which the data bus is
20 kept in Hi-Z (tristate) after the start of a write access.
21 Only valid for write transactions. Zero means zero cycles,
22 255 means 255 cycles.
23 byte 3 THOLD : number of HCLK clock cycles to hold the address (and data
24 when writing) after the command deassertation. Zero means
25 one cycle, 255 means 256 cycles.
26 byte 4 TWAIT : number of HCLK clock cycles to assert the command to the
27 NAND flash in response to SMWAITn. Zero means 1 cycle,
28 255 means 256 cycles.
29 byte 5 TSET : number of HCLK clock cycles to assert the address before the
30 command is asserted. Zero means one cycle, 255 means 256
31 cycles.
32- bank: default NAND bank to use (0-3 are valid, 0 is the default).
12 33
13Example: 34Example:
14 35
@@ -24,6 +45,8 @@ Example:
24 45
25 bank-width = <1>; 46 bank-width = <1>;
26 nand-skip-bbtscan; 47 nand-skip-bbtscan;
48 timings = /bits/ 8 <0 0 0 2 3 0>;
49 bank = <1>;
27 50
28 partition@0 { 51 partition@0 {
29 ... 52 ...
diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c
index 0e5a1d96a721..037838682f40 100644
--- a/drivers/mtd/nand/fsmc_nand.c
+++ b/drivers/mtd/nand/fsmc_nand.c
@@ -889,6 +889,24 @@ static int fsmc_nand_probe_config_dt(struct platform_device *pdev,
889 if (of_get_property(np, "nand-skip-bbtscan", NULL)) 889 if (of_get_property(np, "nand-skip-bbtscan", NULL))
890 pdata->options = NAND_SKIP_BBTSCAN; 890 pdata->options = NAND_SKIP_BBTSCAN;
891 891
892 pdata->nand_timings = devm_kzalloc(&pdev->dev,
893 sizeof(*pdata->nand_timings), GFP_KERNEL);
894 if (!pdata->nand_timings) {
895 dev_err(&pdev->dev, "no memory for nand_timing\n");
896 return -ENOMEM;
897 }
898 of_property_read_u8_array(np, "timings", (u8 *)pdata->nand_timings,
899 sizeof(*pdata->nand_timings));
900
901 /* Set default NAND bank to 0 */
902 pdata->bank = 0;
903 if (!of_property_read_u32(np, "bank", &val)) {
904 if (val > 3) {
905 dev_err(&pdev->dev, "invalid bank %u\n", val);
906 return -EINVAL;
907 }
908 pdata->bank = val;
909 }
892 return 0; 910 return 0;
893} 911}
894#else 912#else
diff --git a/include/linux/mtd/fsmc.h b/include/linux/mtd/fsmc.h
index d6ed61ef451d..c8be32e9fc49 100644
--- a/include/linux/mtd/fsmc.h
+++ b/include/linux/mtd/fsmc.h
@@ -137,6 +137,7 @@ enum access_mode {
137 137
138/** 138/**
139 * fsmc_nand_platform_data - platform specific NAND controller config 139 * fsmc_nand_platform_data - platform specific NAND controller config
140 * @nand_timings: timing setup for the physical NAND interface
140 * @partitions: partition table for the platform, use a default fallback 141 * @partitions: partition table for the platform, use a default fallback
141 * if this is NULL 142 * if this is NULL
142 * @nr_partitions: the number of partitions in the previous entry 143 * @nr_partitions: the number of partitions in the previous entry