diff options
author | Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> | 2013-04-29 08:07:48 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2013-08-05 15:48:49 -0400 |
commit | 64ddba4d8a381b65bebee24c8da4eb80080c64a4 (patch) | |
tree | 320f1fc85107662e12b168f3a17b34f3a7cbce7f | |
parent | 52778b2e9fcb66c8f1c9d5b1ae435815c19e7ae3 (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.txt | 25 | ||||
-rw-r--r-- | drivers/mtd/nand/fsmc_nand.c | 18 | ||||
-rw-r--r-- | include/linux/mtd/fsmc.h | 1 |
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 | 1 | ST Microelectronics Flexible Static Memory Controller (FSMC) |
2 | NAND Interface | ||
2 | 3 | ||
3 | Required properties: | 4 | Required 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 | ||
13 | Example: | 34 | Example: |
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 |