diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-09-15 04:32:48 -0400 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@free-electrons.com> | 2016-09-23 03:35:16 -0400 |
commit | b88730ada99bfe243862add360720a3550b0edbf (patch) | |
tree | 1e5ce3a923eb949ee33f133c873008c69698ee6b | |
parent | b1dd3ca203fccd111926c3f6ac59bf903ec62b05 (diff) |
mtd: nand: Add function to convert ONFI mode to data_interface
onfi_init_data_interface() initializes a data interface with
values from a given ONFI mode.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
-rw-r--r-- | drivers/mtd/nand/nand_timings.c | 29 | ||||
-rw-r--r-- | include/linux/mtd/nand.h | 5 |
2 files changed, 34 insertions, 0 deletions
diff --git a/drivers/mtd/nand/nand_timings.c b/drivers/mtd/nand/nand_timings.c index 878fe0d5342c..7441d68b78d5 100644 --- a/drivers/mtd/nand/nand_timings.c +++ b/drivers/mtd/nand/nand_timings.c | |||
@@ -269,3 +269,32 @@ const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode) | |||
269 | return &onfi_sdr_timings[mode].timings.sdr; | 269 | return &onfi_sdr_timings[mode].timings.sdr; |
270 | } | 270 | } |
271 | EXPORT_SYMBOL(onfi_async_timing_mode_to_sdr_timings); | 271 | EXPORT_SYMBOL(onfi_async_timing_mode_to_sdr_timings); |
272 | |||
273 | /** | ||
274 | * onfi_init_data_interface - [NAND Interface] Initialize a data interface from | ||
275 | * given ONFI mode | ||
276 | * @iface: The data interface to be initialized | ||
277 | * @mode: The ONFI timing mode | ||
278 | */ | ||
279 | int onfi_init_data_interface(struct nand_chip *chip, | ||
280 | struct nand_data_interface *iface, | ||
281 | enum nand_data_interface_type type, | ||
282 | int timing_mode) | ||
283 | { | ||
284 | if (type != NAND_SDR_IFACE) | ||
285 | return -EINVAL; | ||
286 | |||
287 | if (timing_mode < 0 || timing_mode >= ARRAY_SIZE(onfi_sdr_timings)) | ||
288 | return -EINVAL; | ||
289 | |||
290 | *iface = onfi_sdr_timings[timing_mode]; | ||
291 | |||
292 | /* | ||
293 | * TODO: initialize timings that cannot be deduced from timing mode: | ||
294 | * tR, tPROG, tCCS, ... | ||
295 | * These information are part of the ONFI parameter page. | ||
296 | */ | ||
297 | |||
298 | return 0; | ||
299 | } | ||
300 | EXPORT_SYMBOL(onfi_init_data_interface); | ||
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index a625e960c0c3..1f34c04fe16c 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -1112,6 +1112,11 @@ static inline int onfi_get_sync_timing_mode(struct nand_chip *chip) | |||
1112 | return le16_to_cpu(chip->onfi_params.src_sync_timing_mode); | 1112 | return le16_to_cpu(chip->onfi_params.src_sync_timing_mode); |
1113 | } | 1113 | } |
1114 | 1114 | ||
1115 | int onfi_init_data_interface(struct nand_chip *chip, | ||
1116 | struct nand_data_interface *iface, | ||
1117 | enum nand_data_interface_type type, | ||
1118 | int timing_mode); | ||
1119 | |||
1115 | /* | 1120 | /* |
1116 | * Check if it is a SLC nand. | 1121 | * Check if it is a SLC nand. |
1117 | * The !nand_is_slc() can be used to check the MLC/TLC nand chips. | 1122 | * The !nand_is_slc() can be used to check the MLC/TLC nand chips. |