These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / mtd / devices / m25p80.c
index 3af137f..fe9ceb7 100644 (file)
@@ -31,7 +31,6 @@
 struct m25p {
        struct spi_device       *spi;
        struct spi_nor          spi_nor;
-       struct mtd_info         mtd;
        u8                      command[MAX_CMD_SIZE];
 };
 
@@ -62,8 +61,7 @@ static int m25p_cmdsz(struct spi_nor *nor)
        return 1 + nor->addr_width;
 }
 
-static int m25p80_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len,
-                       int wr_en)
+static int m25p80_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
 {
        struct m25p *flash = nor->priv;
        struct spi_device *spi = flash->spi;
@@ -159,7 +157,7 @@ static int m25p80_erase(struct spi_nor *nor, loff_t offset)
        struct m25p *flash = nor->priv;
 
        dev_dbg(nor->dev, "%dKiB at 0x%08x\n",
-               flash->mtd.erasesize / 1024, (u32)offset);
+               flash->spi_nor.mtd.erasesize / 1024, (u32)offset);
 
        /* Set up command buffer. */
        flash->command[0] = nor->erase_opcode;
@@ -201,11 +199,10 @@ static int m25p_probe(struct spi_device *spi)
        nor->read_reg = m25p80_read_reg;
 
        nor->dev = &spi->dev;
-       nor->mtd = &flash->mtd;
+       nor->flash_node = spi->dev.of_node;
        nor->priv = flash;
 
        spi_set_drvdata(spi, flash);
-       flash->mtd.priv = nor;
        flash->spi = spi;
 
        if (spi->mode & SPI_RX_QUAD)
@@ -214,7 +211,7 @@ static int m25p_probe(struct spi_device *spi)
                mode = SPI_NOR_DUAL;
 
        if (data && data->name)
-               flash->mtd.name = data->name;
+               nor->mtd.name = data->name;
 
        /* For some (historical?) reason many platforms provide two different
         * names in flash_platform_data: "name" and "type". Quite often name is
@@ -223,8 +220,6 @@ static int m25p_probe(struct spi_device *spi)
         */
        if (data && data->type)
                flash_name = data->type;
-       else if (!strcmp(spi->modalias, "spi-nor"))
-               flash_name = NULL; /* auto-detect */
        else
                flash_name = spi->modalias;
 
@@ -234,7 +229,7 @@ static int m25p_probe(struct spi_device *spi)
 
        ppdata.of_node = spi->dev.of_node;
 
-       return mtd_device_parse_register(&flash->mtd, NULL, &ppdata,
+       return mtd_device_parse_register(&nor->mtd, NULL, &ppdata,
                        data ? data->parts : NULL,
                        data ? data->nr_parts : 0);
 }
@@ -245,7 +240,7 @@ static int m25p_remove(struct spi_device *spi)
        struct m25p     *flash = spi_get_drvdata(spi);
 
        /* Clean up MTD stuff. */
-       return mtd_device_unregister(&flash->mtd);
+       return mtd_device_unregister(&flash->spi_nor.mtd);
 }
 
 /*
@@ -261,59 +256,52 @@ static int m25p_remove(struct spi_device *spi)
  * keep them available as module aliases for existing platforms.
  */
 static const struct spi_device_id m25p_ids[] = {
-       {"at25fs010"},  {"at25fs040"},  {"at25df041a"}, {"at25df321a"},
-       {"at25df641"},  {"at26f004"},   {"at26df081a"}, {"at26df161a"},
-       {"at26df321"},  {"at45db081d"},
-       {"en25f32"},    {"en25p32"},    {"en25q32b"},   {"en25p64"},
-       {"en25q64"},    {"en25qh128"},  {"en25qh256"},
-       {"f25l32pa"},
-       {"mr25h256"},   {"mr25h10"},
-       {"gd25q32"},    {"gd25q64"},
-       {"160s33b"},    {"320s33b"},    {"640s33b"},
-       {"mx25l2005a"}, {"mx25l4005a"}, {"mx25l8005"},  {"mx25l1606e"},
-       {"mx25l3205d"}, {"mx25l3255e"}, {"mx25l6405d"}, {"mx25l12805d"},
-       {"mx25l12855e"},{"mx25l25635e"},{"mx25l25655e"},{"mx66l51235l"},
-       {"mx66l1g55g"},
-       {"n25q064"},    {"n25q128a11"}, {"n25q128a13"}, {"n25q256a"},
-       {"n25q512a"},   {"n25q512ax3"}, {"n25q00"},
-       {"pm25lv512"},  {"pm25lv010"},  {"pm25lq032"},
-       {"s25sl032p"},  {"s25sl064p"},  {"s25fl256s0"}, {"s25fl256s1"},
-       {"s25fl512s"},  {"s70fl01gs"},  {"s25sl12800"}, {"s25sl12801"},
-       {"s25fl129p0"}, {"s25fl129p1"}, {"s25sl004a"},  {"s25sl008a"},
-       {"s25sl016a"},  {"s25sl032a"},  {"s25sl064a"},  {"s25fl008k"},
-       {"s25fl016k"},  {"s25fl064k"},  {"s25fl132k"},
-       {"sst25vf040b"},{"sst25vf080b"},{"sst25vf016b"},{"sst25vf032b"},
-       {"sst25vf064c"},{"sst25wf512"}, {"sst25wf010"}, {"sst25wf020"},
-       {"sst25wf040"},
-       {"m25p05"},     {"m25p10"},     {"m25p20"},     {"m25p40"},
-       {"m25p80"},     {"m25p16"},     {"m25p32"},     {"m25p64"},
-       {"m25p128"},    {"n25q032"},
+       /*
+        * Entries not used in DTs that should be safe to drop after replacing
+        * them with "nor-jedec" in platform data.
+        */
+       {"s25sl064a"},  {"w25x16"},     {"m25p10"},     {"m25px64"},
+
+       /*
+        * Entries that were used in DTs without "nor-jedec" fallback and should
+        * be kept for backward compatibility.
+        */
+       {"at25df321a"}, {"at25df641"},  {"at26df081a"},
+       {"mr25h256"},
+       {"mx25l4005a"}, {"mx25l1606e"}, {"mx25l6405d"}, {"mx25l12805d"},
+       {"mx25l25635e"},{"mx66l51235l"},
+       {"n25q064"},    {"n25q128a11"}, {"n25q128a13"}, {"n25q512a"},
+       {"s25fl256s1"}, {"s25fl512s"},  {"s25sl12801"}, {"s25fl008k"},
+       {"s25fl064k"},
+       {"sst25vf040b"},{"sst25vf016b"},{"sst25vf032b"},{"sst25wf040"},
+       {"m25p40"},     {"m25p80"},     {"m25p16"},     {"m25p32"},
+       {"m25p64"},     {"m25p128"},
+       {"w25x80"},     {"w25x32"},     {"w25q32"},     {"w25q32dw"},
+       {"w25q80bl"},   {"w25q128"},    {"w25q256"},
+
+       /* Flashes that can't be detected using JEDEC */
        {"m25p05-nonjedec"},    {"m25p10-nonjedec"},    {"m25p20-nonjedec"},
        {"m25p40-nonjedec"},    {"m25p80-nonjedec"},    {"m25p16-nonjedec"},
        {"m25p32-nonjedec"},    {"m25p64-nonjedec"},    {"m25p128-nonjedec"},
-       {"m45pe10"},    {"m45pe80"},    {"m45pe16"},
-       {"m25pe20"},    {"m25pe80"},    {"m25pe16"},
-       {"m25px16"},    {"m25px32"},    {"m25px32-s0"}, {"m25px32-s1"},
-       {"m25px64"},    {"m25px80"},
-       {"w25x10"},     {"w25x20"},     {"w25x40"},     {"w25x80"},
-       {"w25x16"},     {"w25x32"},     {"w25q32"},     {"w25q32dw"},
-       {"w25x64"},     {"w25q64"},     {"w25q80"},     {"w25q80bl"},
-       {"w25q128"},    {"w25q256"},    {"cat25c11"},
-       {"cat25c03"},   {"cat25c09"},   {"cat25c17"},   {"cat25128"},
 
-       /*
-        * Generic support for SPI NOR that can be identified by the JEDEC READ
-        * ID opcode (0x9F). Use this, if possible.
-        */
-       {"spi-nor"},
        { },
 };
 MODULE_DEVICE_TABLE(spi, m25p_ids);
 
+static const struct of_device_id m25p_of_table[] = {
+       /*
+        * Generic compatibility for SPI NOR that can be identified by the
+        * JEDEC READ ID opcode (0x9F). Use this, if possible.
+        */
+       { .compatible = "jedec,spi-nor" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, m25p_of_table);
+
 static struct spi_driver m25p80_driver = {
        .driver = {
                .name   = "m25p80",
-               .owner  = THIS_MODULE,
+               .of_match_table = m25p_of_table,
        },
        .id_table       = m25p_ids,
        .probe  = m25p_probe,