]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/mtd/devices/sst25l.c
mtd: sst25l: check for null consistently
[net-next-2.6.git] / drivers / mtd / devices / sst25l.c
index fe17054ee2fe69c4190b38f26afde0a6620c861d..684247a8a5edafa720e102014595d15c7b500181 100644 (file)
@@ -73,15 +73,25 @@ static struct flash_info __initdata sst25l_flash_info[] = {
 
 static int sst25l_status(struct sst25l_flash *flash, int *status)
 {
-       unsigned char command, response;
+       struct spi_message m;
+       struct spi_transfer t;
+       unsigned char cmd_resp[2];
        int err;
 
-       command = SST25L_CMD_RDSR;
-       err = spi_write_then_read(flash->spi, &command, 1, &response, 1);
+       spi_message_init(&m);
+       memset(&t, 0, sizeof(struct spi_transfer));
+
+       cmd_resp[0] = SST25L_CMD_RDSR;
+       cmd_resp[1] = 0xff;
+       t.tx_buf = cmd_resp;
+       t.rx_buf = cmd_resp;
+       t.len = sizeof(cmd_resp);
+       spi_message_add_tail(&t, &m);
+       err = spi_sync(flash->spi, &m);
        if (err < 0)
                return err;
 
-       *status = response;
+       *status = cmd_resp[1];
        return 0;
 }
 
@@ -328,33 +338,32 @@ out:
 static struct flash_info *__init sst25l_match_device(struct spi_device *spi)
 {
        struct flash_info *flash_info = NULL;
-       unsigned char command[4], response;
+       struct spi_message m;
+       struct spi_transfer t;
+       unsigned char cmd_resp[6];
        int i, err;
        uint16_t id;
 
-       command[0] = SST25L_CMD_READ_ID;
-       command[1] = 0;
-       command[2] = 0;
-       command[3] = 0;
-       err = spi_write_then_read(spi, command, sizeof(command), &response, 1);
+       spi_message_init(&m);
+       memset(&t, 0, sizeof(struct spi_transfer));
+
+       cmd_resp[0] = SST25L_CMD_READ_ID;
+       cmd_resp[1] = 0;
+       cmd_resp[2] = 0;
+       cmd_resp[3] = 0;
+       cmd_resp[4] = 0xff;
+       cmd_resp[5] = 0xff;
+       t.tx_buf = cmd_resp;
+       t.rx_buf = cmd_resp;
+       t.len = sizeof(cmd_resp);
+       spi_message_add_tail(&t, &m);
+       err = spi_sync(spi, &m);
        if (err < 0) {
-               dev_err(&spi->dev, "error reading device id msb\n");
+               dev_err(&spi->dev, "error reading device id\n");
                return NULL;
        }
 
-       id = response << 8;
-
-       command[0] = SST25L_CMD_READ_ID;
-       command[1] = 0;
-       command[2] = 0;
-       command[3] = 1;
-       err = spi_write_then_read(spi, command, sizeof(command), &response, 1);
-       if (err < 0) {
-               dev_err(&spi->dev, "error reading device id lsb\n");
-               return NULL;
-       }
-
-       id |= response;
+       id = (cmd_resp[4] << 8) | cmd_resp[5];
 
        for (i = 0; i < ARRAY_SIZE(sst25l_flash_info); i++)
                if (sst25l_flash_info[i].device_id == id)
@@ -411,17 +420,6 @@ static int __init sst25l_probe(struct spi_device *spi)
              flash->mtd.erasesize, flash->mtd.erasesize / 1024,
              flash->mtd.numeraseregions);
 
-       if (flash->mtd.numeraseregions)
-               for (i = 0; i < flash->mtd.numeraseregions; i++)
-                       DEBUG(MTD_DEBUG_LEVEL2,
-                             "mtd.eraseregions[%d] = { .offset = 0x%llx, "
-                             ".erasesize = 0x%.8x (%uKiB), "
-                             ".numblocks = %d }\n",
-                             i, (long long)flash->mtd.eraseregions[i].offset,
-                             flash->mtd.eraseregions[i].erasesize,
-                             flash->mtd.eraseregions[i].erasesize / 1024,
-                             flash->mtd.eraseregions[i].numblocks);
-
        if (mtd_has_partitions()) {
                struct mtd_partition *parts = NULL;
                int nr_parts = 0;
@@ -456,7 +454,7 @@ static int __init sst25l_probe(struct spi_device *spi)
                                                  parts, nr_parts);
                }
 
-       } else if (data->nr_parts) {
+       } else if (data && data->nr_parts) {
                dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
                         data->nr_parts, data->name);
        }