/** * spi_flash_probe_slave() - Probe for a SPI flash device on a bus * * @flashp: Pointer to place to put flash info, which may be NULL if the * space should be allocated */ static int spi_flash_probe_slave(struct spi_flash *flash) { struct spi_slave *spi = flash->spi; int ret; /* Setup spi_slave */ if (!spi) { printf("SF: Failed to set up slave\n"); return -ENODEV; } /* Claim spi bus */ ret = spi_claim_bus(spi); if (ret) { debug("SF: Failed to claim SPI bus: %d\n", ret); return ret; } ret = spi_flash_scan(flash); if (ret) goto err_read_id; #ifdef CONFIG_SPI_FLASH_MTD ret = spi_flash_mtd_register(flash); #endif err_read_id: spi_release_bus(spi); return ret; }
/** * spi_flash_probe_slave() - Probe for a SPI flash device on a bus * * @flashp: Pointer to place to put flash info, which may be NULL if the * space should be allocated */ static int spi_flash_probe_slave(struct spi_flash *flash) { struct spi_slave *spi = flash->spi; u8 mode_rx, e_rd_cmd; int ret; /* Setup spi_slave */ if (!spi) { printf("SF: Failed to set up slave\n"); return -ENODEV; } /* Convert SPI mode_rx and mode to SPI flash read commands */ mode_rx = spi->mode_rx; if (mode_rx & SPI_RX_QUAD) { e_rd_cmd = RD_NORM | QUAD_OUTPUT_FAST; if (spi->mode & SPI_TX_QUAD) e_rd_cmd |= QUAD_IO_FAST; } else if (mode_rx & SPI_RX_DUAL) { e_rd_cmd = RD_NORM | DUAL_OUTPUT_FAST; if (spi->mode & SPI_TX_DUAL) e_rd_cmd |= DUAL_IO_FAST; } else if ((mode_rx & (SPI_RX_SLOW | SPI_RX_FAST)) == SPI_RX_SLOW) { e_rd_cmd = ARRAY_SLOW; } else { e_rd_cmd = RD_NORM; } /* Claim spi bus */ ret = spi_claim_bus(spi); if (ret) { debug("SF: Failed to claim SPI bus: %d\n", ret); return ret; } ret = spi_flash_scan(flash, e_rd_cmd); if (ret) goto err_read_id; #ifdef CONFIG_SPI_FLASH_MTD ret = spi_flash_mtd_register(flash); #endif err_read_id: spi_release_bus(spi); return ret; }