2014-06-17 23:13:10 +08:00
|
|
|
From 6d9434ebb76157071164b32ad03fbed165c74382 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
|
|
|
|
Date: Mon, 24 Feb 2014 19:24:48 -0300
|
|
|
|
Subject: of_mtd: Add helpers to get ECC strength and ECC step size
|
|
|
|
|
|
|
|
This commit adds simple helpers to obtain the devicetree properties
|
|
|
|
that specify the ECC strength and ECC step size to use on a given
|
|
|
|
NAND controller.
|
|
|
|
|
|
|
|
Acked-by: Boris BREZILLON <b.brezillon.dev@gmail.com>
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
|
|
|
|
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
|
|
|
|
|
|
|
|
--- a/drivers/of/of_mtd.c
|
|
|
|
+++ b/drivers/of/of_mtd.c
|
|
|
|
@@ -50,6 +50,40 @@ int of_get_nand_ecc_mode(struct device_n
|
|
|
|
EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode);
|
|
|
|
|
|
|
|
/**
|
|
|
|
+ * 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
|
|
|
|
+ *
|
|
|
|
+ * return the ECC step size, or errno in error case.
|
|
|
|
+ */
|
|
|
|
+int of_get_nand_ecc_step_size(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ int ret;
|
|
|
|
+ u32 val;
|
|
|
|
+
|
|
|
|
+ ret = of_property_read_u32(np, "nand-ecc-step-size", &val);
|
|
|
|
+ return ret ? ret : val;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(of_get_nand_ecc_step_size);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * of_get_nand_ecc_strength - Get required ECC strength over the
|
|
|
|
+ * correspnding step size as defined by 'nand-ecc-size'
|
|
|
|
+ * @np: Pointer to the given device_node
|
|
|
|
+ *
|
|
|
|
+ * return the ECC strength, or errno in error case.
|
|
|
|
+ */
|
|
|
|
+int of_get_nand_ecc_strength(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ int ret;
|
|
|
|
+ u32 val;
|
|
|
|
+
|
|
|
|
+ ret = of_property_read_u32(np, "nand-ecc-strength", &val);
|
|
|
|
+ return ret ? ret : val;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
* of_get_nand_bus_width - Get nand bus witdh for given device_node
|
|
|
|
* @np: Pointer to the given device_node
|
|
|
|
*
|
|
|
|
--- a/include/linux/of_mtd.h
|
|
|
|
+++ b/include/linux/of_mtd.h
|
|
|
|
@@ -13,6 +13,8 @@
|
|
|
|
|
|
|
|
#include <linux/of.h>
|
|
|
|
int of_get_nand_ecc_mode(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);
|
|
|
|
bool of_get_nand_on_flash_bbt(struct device_node *np);
|
|
|
|
|
2014-12-08 20:04:25 +08:00
|
|
|
@@ -23,6 +25,16 @@ static inline int of_get_nand_ecc_mode(s
|
2014-06-17 23:13:10 +08:00
|
|
|
return -ENOSYS;
|
|
|
|
}
|
2014-12-08 20:04:25 +08:00
|
|
|
|
2014-06-17 23:13:10 +08:00
|
|
|
+static inline int of_get_nand_ecc_step_size(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ return -ENOSYS;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int of_get_nand_ecc_strength(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ return -ENOSYS;
|
|
|
|
+}
|
2014-12-08 20:04:25 +08:00
|
|
|
+
|
2014-06-17 23:13:10 +08:00
|
|
|
static inline int of_get_nand_bus_width(struct device_node *np)
|
|
|
|
{
|
2014-12-08 20:04:25 +08:00
|
|
|
return -ENOSYS;
|