12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- From 410a91f6efa1c4c3c4369d1dd2c31286749dff33 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
- Date: Wed, 23 Mar 2016 11:19:01 +0100
- Subject: [PATCH 073/102] of: mtd: prepare helper reading NAND ECC algo from
- DT
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- NAND subsystem is being slightly reworked to store ECC details in
- separated fields. In future we'll want to add support for more DT
- properties as specifying every possible setup with a single
- "nand-ecc-mode" is a pretty bad idea.
- To allow this let's add a helper that will support something like
- "nand-ecc-algo" in future. Right now we use it for keeping backward
- compatibility.
- Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
- Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
- ---
- drivers/of/of_mtd.c | 36 ++++++++++++++++++++++++++++++++++++
- include/linux/of_mtd.h | 6 ++++++
- 2 files changed, 42 insertions(+)
- --- a/drivers/of/of_mtd.c
- +++ b/drivers/of/of_mtd.c
- @@ -50,6 +50,42 @@ int of_get_nand_ecc_mode(struct device_n
- EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode);
-
- /**
- + * of_get_nand_ecc_algo - Get nand ecc algorithm for given device_node
- + * @np: Pointer to the given device_node
- + *
- + * The function gets ecc algorithm and returns its enum value, or errno in error
- + * case.
- + */
- +int of_get_nand_ecc_algo(struct device_node *np)
- +{
- + const char *pm;
- + int err;
- +
- + /*
- + * TODO: Read ECC algo OF property and map it to enum nand_ecc_algo.
- + * It's not implemented yet as currently NAND subsystem ignores
- + * algorithm explicitly set this way. Once it's handled we should
- + * document & support new property.
- + */
- +
- + /*
- + * For backward compatibility we also read "nand-ecc-mode" checking
- + * for some obsoleted values that were specifying ECC algorithm.
- + */
- + err = of_property_read_string(np, "nand-ecc-mode", &pm);
- + if (err < 0)
- + return err;
- +
- + if (!strcasecmp(pm, "soft"))
- + return NAND_ECC_HAMMING;
- + else if (!strcasecmp(pm, "soft_bch"))
- + return NAND_ECC_BCH;
- +
- + return -ENODEV;
- +}
- +EXPORT_SYMBOL_GPL(of_get_nand_ecc_algo);
- +
- +/**
- * of_get_nand_ecc_step_size - Get ECC step size associated to
- * the required ECC strength (see below).
- * @np: Pointer to the given device_node
- --- a/include/linux/of_mtd.h
- +++ b/include/linux/of_mtd.h
- @@ -13,6 +13,7 @@
-
- #include <linux/of.h>
- int of_get_nand_ecc_mode(struct device_node *np);
- +int of_get_nand_ecc_algo(struct device_node *np);
- int of_get_nand_ecc_step_size(struct device_node *np);
- int of_get_nand_ecc_strength(struct device_node *np);
- int of_get_nand_bus_width(struct device_node *np);
- @@ -24,6 +25,11 @@ static inline int of_get_nand_ecc_mode(s
- {
- return -ENOSYS;
- }
- +
- +static inline int of_get_nand_ecc_algo(struct device_node *np)
- +{
- + return -ENOSYS;
- +}
-
- static inline int of_get_nand_ecc_step_size(struct device_node *np)
- {
|