Esempio n. 1
0
/**
 * 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_nor_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;
}
Esempio n. 2
0
/**
 * 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;
}