mtd: spi-nor: Pointer parameter for FSR in spi_nor_read_fsr()
Let the callers pass the pointer to the DMA-able buffer where the value of the Flag Status Register will be written. This way we avoid the casts between int and u8, which can be confusing. Caller stops compare the return value of spi_nor_read_fsr() with negative, spi_nor_read_fsr() returns 0 on success and -errno otherwise. Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
parent
cd1718f5c4
commit
5ce1b49ccb
|
@ -456,12 +456,15 @@ static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Read the flag status register, returning its value in the location
|
* spi_nor_read_fsr() - Read the Flag Status Register.
|
||||||
* Return the status register value.
|
* @nor: pointer to 'struct spi_nor'
|
||||||
* Returns negative if error occurred.
|
* @fsr: pointer to a DMA-able buffer where the value of the
|
||||||
|
* Flag Status Register will be written.
|
||||||
|
*
|
||||||
|
* Return: 0 on success, -errno otherwise.
|
||||||
*/
|
*/
|
||||||
static int spi_nor_read_fsr(struct spi_nor *nor)
|
static int spi_nor_read_fsr(struct spi_nor *nor, u8 *fsr)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -470,20 +473,18 @@ static int spi_nor_read_fsr(struct spi_nor *nor)
|
||||||
SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 1),
|
SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 1),
|
||||||
SPI_MEM_OP_NO_ADDR,
|
SPI_MEM_OP_NO_ADDR,
|
||||||
SPI_MEM_OP_NO_DUMMY,
|
SPI_MEM_OP_NO_DUMMY,
|
||||||
SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1));
|
SPI_MEM_OP_DATA_IN(1, fsr, 1));
|
||||||
|
|
||||||
ret = spi_mem_exec_op(nor->spimem, &op);
|
ret = spi_mem_exec_op(nor->spimem, &op);
|
||||||
} else {
|
} else {
|
||||||
ret = nor->controller_ops->read_reg(nor, SPINOR_OP_RDFSR,
|
ret = nor->controller_ops->read_reg(nor, SPINOR_OP_RDFSR,
|
||||||
nor->bouncebuf, 1);
|
fsr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret)
|
||||||
pr_err("error %d reading FSR\n", ret);
|
pr_err("error %d reading FSR\n", ret);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nor->bouncebuf[0];
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -705,17 +706,18 @@ static int spi_nor_clear_fsr(struct spi_nor *nor)
|
||||||
|
|
||||||
static int spi_nor_fsr_ready(struct spi_nor *nor)
|
static int spi_nor_fsr_ready(struct spi_nor *nor)
|
||||||
{
|
{
|
||||||
int fsr = spi_nor_read_fsr(nor);
|
int ret = spi_nor_read_fsr(nor, nor->bouncebuf);
|
||||||
if (fsr < 0)
|
|
||||||
return fsr;
|
|
||||||
|
|
||||||
if (fsr & (FSR_E_ERR | FSR_P_ERR)) {
|
if (ret)
|
||||||
if (fsr & FSR_E_ERR)
|
return ret;
|
||||||
|
|
||||||
|
if (nor->bouncebuf[0] & (FSR_E_ERR | FSR_P_ERR)) {
|
||||||
|
if (nor->bouncebuf[0] & FSR_E_ERR)
|
||||||
dev_err(nor->dev, "Erase operation failed.\n");
|
dev_err(nor->dev, "Erase operation failed.\n");
|
||||||
else
|
else
|
||||||
dev_err(nor->dev, "Program operation failed.\n");
|
dev_err(nor->dev, "Program operation failed.\n");
|
||||||
|
|
||||||
if (fsr & FSR_PT_ERR)
|
if (nor->bouncebuf[0] & FSR_PT_ERR)
|
||||||
dev_err(nor->dev,
|
dev_err(nor->dev,
|
||||||
"Attempted to modify a protected sector.\n");
|
"Attempted to modify a protected sector.\n");
|
||||||
|
|
||||||
|
@ -723,7 +725,7 @@ static int spi_nor_fsr_ready(struct spi_nor *nor)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return fsr & FSR_READY;
|
return nor->bouncebuf[0] & FSR_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int spi_nor_ready(struct spi_nor *nor)
|
static int spi_nor_ready(struct spi_nor *nor)
|
||||||
|
|
Loading…
Reference in New Issue