Message ID | 1327727444-23908-4-git-send-email-plagnioj@jcrosoft.com |
---|---|
State | New, archived |
Headers | show |
On Sat, Jan 28, 2012 at 06:10:42AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > - nand-ecc-mode : String, operation mode of the NAND ecc mode. > Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", > "soft_bch". > - nand-bus-width : 8 or 16 bus width if not present 8 > - nand-on-flash-bbt: boolean to enable on flash bbt option if not present false > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > Cc: Nicolas Ferre <nicolas.ferre@atmel.com> > Cc: devicetree-discuss@lists.ozlabs.org > Cc: linux-mtd@lists.infradead.org Fine by me. Acked-by: Grant Likely <grant.likely@secretlab.ca> > --- > Documentation/devicetree/bindings/mtd/nand.txt | 7 ++ > drivers/of/Kconfig | 4 + > drivers/of/Makefile | 1 + > drivers/of/of_mtd.c | 90 ++++++++++++++++++++++++ > include/linux/of_mtd.h | 19 +++++ > 5 files changed, 121 insertions(+), 0 deletions(-) > create mode 100644 Documentation/devicetree/bindings/mtd/nand.txt > create mode 100644 drivers/of/of_mtd.c > create mode 100644 include/linux/of_mtd.h > > diff --git a/Documentation/devicetree/bindings/mtd/nand.txt b/Documentation/devicetree/bindings/mtd/nand.txt > new file mode 100644 > index 0000000..03855c8 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mtd/nand.txt > @@ -0,0 +1,7 @@ > +* MTD generic binding > + > +- nand-ecc-mode : String, operation mode of the NAND ecc mode. > + Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", > + "soft_bch". > +- nand-bus-width : 8 or 16 bus width if not present 8 > +- nand-on-flash-bbt: boolean to enable on flash bbt option if not present false > diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig > index 268163d..fa666a9 100644 > --- a/drivers/of/Kconfig > +++ b/drivers/of/Kconfig > @@ -90,4 +90,8 @@ config OF_PCI_IRQ > help > OpenFirmware PCI IRQ routing helpers > > +config OF_MTD > + depends on MTD > + def_bool y > + > endmenu # OF > diff --git a/drivers/of/Makefile b/drivers/of/Makefile > index a73f5a5..8c4980a 100644 > --- a/drivers/of/Makefile > +++ b/drivers/of/Makefile > @@ -12,3 +12,4 @@ obj-$(CONFIG_OF_SELFTEST) += selftest.o > obj-$(CONFIG_OF_MDIO) += of_mdio.o > obj-$(CONFIG_OF_PCI) += of_pci.o > obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o > +obj-$(CONFIG_OF_NET) += of_mtd.o > diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c > new file mode 100644 > index 0000000..199bf58 > --- /dev/null > +++ b/drivers/of/of_mtd.c > @@ -0,0 +1,90 @@ > +/* > + * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > + * > + * OF helpers for mtd. > + * > + * This file is released under the GPLv2 > + * > + */ > +#include <linux/kernel.h> > +#include <linux/of_mtd.h> > +#include <linux/mtd/nand.h> > +#include <linux/export.h> > + > +/** > + * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h > + * into the device tree binding of 'phy-mode', so that Ethernet > + * device driver can get phy interface from device tree. > + */ > +static const char *nand_ecc_modes[] = { > + [NAND_ECC_NONE] = "none", > + [NAND_ECC_SOFT] = "soft", > + [NAND_ECC_HW] = "hw", > + [NAND_ECC_HW_SYNDROME] = "hw_syndrome", > + [NAND_ECC_HW_OOB_FIRST] = "hw_oob_first", > + [NAND_ECC_SOFT_BCH] = "soft_bch", > +}; > + > +/** > + * of_get_nand_ecc_mode - Get nand ecc mode for given device_node > + * @np: Pointer to the given device_node > + * > + * The function gets ecc mode string from property 'nand-ecc-mode', > + * and return its index in nand_ecc_modes table, or errno in error case. > + */ > +const int of_get_nand_ecc_mode(struct device_node *np) > +{ > + const char *pm; > + int err, i; > + > + err = of_property_read_string(np, "nand-ecc-mode", &pm); > + if (err < 0) > + return err; > + > + for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++) > + if (!strcasecmp(pm, nand_ecc_modes[i])) > + return i; > + > + return -ENODEV; > +} > +EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode); > + > +/** > + * of_get_nand_bus_width - Get nand bus witdh for given device_node > + * @np: Pointer to the given device_node > + * > + * return bus width option, or errno in error case. > + */ > +int of_get_nand_bus_width(struct device_node *np) > +{ > + u32 val; > + > + if (of_property_read_u32(np, "nand-bus-width", &val)) > + return 8; > + > + switch(val) { > + case 8: > + case 16: > + return val; > + default: > + return -EIO; > + } > +} > +EXPORT_SYMBOL_GPL(of_get_nand_bus_width); > + > +/** > + * of_get_nand_on_flash_bbt - Get nand on flash bbt for given device_node > + * @np: Pointer to the given device_node > + * > + * return true if 1 false other wise > + */ > +bool of_get_nand_on_flash_bbt(struct device_node *np) > +{ > + u32 val; > + > + if (of_property_read_u32(np, "nand-on-flash-bbt", &val)) > + return false; > + > + return val ? true : false; > +} > +EXPORT_SYMBOL_GPL(of_get_nand_on_flash_bbt); > diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h > new file mode 100644 > index 0000000..bae1b60 > --- /dev/null > +++ b/include/linux/of_mtd.h > @@ -0,0 +1,19 @@ > +/* > + * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > + * > + * OF helpers for mtd. > + * > + * This file is released under the GPLv2 > + */ > + > +#ifndef __LINUX_OF_MTD_H > +#define __LINUX_OF_NET_H > + > +#ifdef CONFIG_OF_MTD > +#include <linux/of.h> > +extern const int of_get_nand_ecc_mode(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); > +#endif > + > +#endif /* __LINUX_OF_MTD_H */ > -- > 1.7.7 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/Documentation/devicetree/bindings/mtd/nand.txt b/Documentation/devicetree/bindings/mtd/nand.txt new file mode 100644 index 0000000..03855c8 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/nand.txt @@ -0,0 +1,7 @@ +* MTD generic binding + +- nand-ecc-mode : String, operation mode of the NAND ecc mode. + Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", + "soft_bch". +- nand-bus-width : 8 or 16 bus width if not present 8 +- nand-on-flash-bbt: boolean to enable on flash bbt option if not present false diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index 268163d..fa666a9 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -90,4 +90,8 @@ config OF_PCI_IRQ help OpenFirmware PCI IRQ routing helpers +config OF_MTD + depends on MTD + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index a73f5a5..8c4980a 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -12,3 +12,4 @@ obj-$(CONFIG_OF_SELFTEST) += selftest.o obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o +obj-$(CONFIG_OF_NET) += of_mtd.o diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c new file mode 100644 index 0000000..199bf58 --- /dev/null +++ b/drivers/of/of_mtd.c @@ -0,0 +1,90 @@ +/* + * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * OF helpers for mtd. + * + * This file is released under the GPLv2 + * + */ +#include <linux/kernel.h> +#include <linux/of_mtd.h> +#include <linux/mtd/nand.h> +#include <linux/export.h> + +/** + * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h + * into the device tree binding of 'phy-mode', so that Ethernet + * device driver can get phy interface from device tree. + */ +static const char *nand_ecc_modes[] = { + [NAND_ECC_NONE] = "none", + [NAND_ECC_SOFT] = "soft", + [NAND_ECC_HW] = "hw", + [NAND_ECC_HW_SYNDROME] = "hw_syndrome", + [NAND_ECC_HW_OOB_FIRST] = "hw_oob_first", + [NAND_ECC_SOFT_BCH] = "soft_bch", +}; + +/** + * of_get_nand_ecc_mode - Get nand ecc mode for given device_node + * @np: Pointer to the given device_node + * + * The function gets ecc mode string from property 'nand-ecc-mode', + * and return its index in nand_ecc_modes table, or errno in error case. + */ +const int of_get_nand_ecc_mode(struct device_node *np) +{ + const char *pm; + int err, i; + + err = of_property_read_string(np, "nand-ecc-mode", &pm); + if (err < 0) + return err; + + for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++) + if (!strcasecmp(pm, nand_ecc_modes[i])) + return i; + + return -ENODEV; +} +EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode); + +/** + * of_get_nand_bus_width - Get nand bus witdh for given device_node + * @np: Pointer to the given device_node + * + * return bus width option, or errno in error case. + */ +int of_get_nand_bus_width(struct device_node *np) +{ + u32 val; + + if (of_property_read_u32(np, "nand-bus-width", &val)) + return 8; + + switch(val) { + case 8: + case 16: + return val; + default: + return -EIO; + } +} +EXPORT_SYMBOL_GPL(of_get_nand_bus_width); + +/** + * of_get_nand_on_flash_bbt - Get nand on flash bbt for given device_node + * @np: Pointer to the given device_node + * + * return true if 1 false other wise + */ +bool of_get_nand_on_flash_bbt(struct device_node *np) +{ + u32 val; + + if (of_property_read_u32(np, "nand-on-flash-bbt", &val)) + return false; + + return val ? true : false; +} +EXPORT_SYMBOL_GPL(of_get_nand_on_flash_bbt); diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h new file mode 100644 index 0000000..bae1b60 --- /dev/null +++ b/include/linux/of_mtd.h @@ -0,0 +1,19 @@ +/* + * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * OF helpers for mtd. + * + * This file is released under the GPLv2 + */ + +#ifndef __LINUX_OF_MTD_H +#define __LINUX_OF_NET_H + +#ifdef CONFIG_OF_MTD +#include <linux/of.h> +extern const int of_get_nand_ecc_mode(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); +#endif + +#endif /* __LINUX_OF_MTD_H */
- nand-ecc-mode : String, operation mode of the NAND ecc mode. Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", "soft_bch". - nand-bus-width : 8 or 16 bus width if not present 8 - nand-on-flash-bbt: boolean to enable on flash bbt option if not present false Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Cc: devicetree-discuss@lists.ozlabs.org Cc: linux-mtd@lists.infradead.org --- Documentation/devicetree/bindings/mtd/nand.txt | 7 ++ drivers/of/Kconfig | 4 + drivers/of/Makefile | 1 + drivers/of/of_mtd.c | 90 ++++++++++++++++++++++++ include/linux/of_mtd.h | 19 +++++ 5 files changed, 121 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/nand.txt create mode 100644 drivers/of/of_mtd.c create mode 100644 include/linux/of_mtd.h