*/
 static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
 {
+       const struct nand_manufacturer *manufacturer;
        struct mtd_info *mtd = nand_to_mtd(chip);
        int busw;
-       int i, maf_idx;
+       int i;
        u8 *id_data = chip->id.data;
        u8 maf_id, dev_id;
 
 ident_done:
 
        /* Try to identify manufacturer */
-       for (maf_idx = 0; nand_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
-               if (nand_manuf_ids[maf_idx].id == maf_id)
-                       break;
-       }
+       manufacturer = nand_get_manufacturer(maf_id);
 
        if (chip->options & NAND_BUSWIDTH_AUTO) {
                WARN_ON(busw & NAND_BUSWIDTH_16);
                 */
                pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
                        maf_id, dev_id);
-               pr_info("%s %s\n", nand_manuf_ids[maf_idx].name, mtd->name);
+               pr_info("%s %s\n", nand_manufacturer_name(manufacturer),
+                       mtd->name);
                pr_warn("bus width %d instead of %d bits\n", busw ? 16 : 8,
                        (chip->options & NAND_BUSWIDTH_16) ? 16 : 8);
                return -EINVAL;
                maf_id, dev_id);
 
        if (chip->onfi_version)
-               pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
-                               chip->onfi_params.model);
+               pr_info("%s %s\n", nand_manufacturer_name(manufacturer),
+                       chip->onfi_params.model);
        else if (chip->jedec_version)
-               pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
-                               chip->jedec_params.model);
+               pr_info("%s %s\n", nand_manufacturer_name(manufacturer),
+                       chip->jedec_params.model);
        else
-               pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
-                               type->name);
+               pr_info("%s %s\n", nand_manufacturer_name(manufacturer),
+                       type->name);
 
        pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
                (int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
 
 };
 
 /* Manufacturer IDs */
-struct nand_manufacturer nand_manuf_ids[] = {
+static const struct nand_manufacturer nand_manufacturers[] = {
        {NAND_MFR_TOSHIBA, "Toshiba"},
        {NAND_MFR_ESMT, "ESMT"},
        {NAND_MFR_SAMSUNG, "Samsung"},
        {NAND_MFR_INTEL, "Intel"},
        {NAND_MFR_ATO, "ATO"},
        {NAND_MFR_WINBOND, "Winbond"},
-       {0x0, "Unknown"}
 };
+
+/**
+ * nand_get_manufacturer - Get manufacturer information from the manufacturer
+ *                        ID
+ * @id: manufacturer ID
+ *
+ * Returns a pointer a nand_manufacturer object if the manufacturer is defined
+ * in the NAND manufacturers database, NULL otherwise.
+ */
+const struct nand_manufacturer *nand_get_manufacturer(u8 id)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(nand_manufacturers); i++)
+               if (nand_manufacturers[i].id == id)
+                       return &nand_manufacturers[i];
+
+       return NULL;
+}
 
        char *name;
 };
 
+const struct nand_manufacturer *nand_get_manufacturer(u8 id);
+
+static inline const char *
+nand_manufacturer_name(const struct nand_manufacturer *manufacturer)
+{
+       return manufacturer ? manufacturer->name : "Unknown";
+}
+
 extern struct nand_flash_dev nand_flash_ids[];
-extern struct nand_manufacturer nand_manuf_ids[];
 
 int nand_default_bbt(struct mtd_info *mtd);
 int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs);