int spiflash_erase_device(struct spiflash_device *dev, struct spiflash_transaction *trans, spi_cb cb, void *cbdata) { trans->spi_query[0] = DEVICE_ERASE; spiflash_setup_xfer(trans, 1, 0); trans->spi_cb = cb; trans->cbdata = cbdata; spiflash_queue_transaction(dev, trans, WRITE_ENABLE, true, spiflash_spi_done_cb); return 0; }
int spiflash_get_status(struct spiflash_device *dev, struct spiflash_transaction *trans, spiflash_status_cb cb, void *cbdata) { trans->spi_query[0] = READ_STATUS_REGISTER_1; spiflash_setup_xfer(trans, 1, 2); trans->status_cb = cb; trans->cbdata = cbdata; spiflash_queue_transaction(dev, trans, NO_OP, false, spiflash_status_done_cb); return 0; }
int spiflash_get_id(struct spiflash_device *dev, struct spiflash_transaction *trans, spiflash_info_cb cb, void *cbdata) { trans->spi_query[0] = GET_IDENTIFICATION; trans->spi_query[1] = trans->spi_query[2] = trans->spi_query[3] = 0x00; spiflash_setup_xfer(trans, 4, 4); trans->info_cb = cb; trans->cbdata = cbdata; spiflash_queue_transaction(dev, trans, NO_OP, false, spiflash_get_id_done_cb); return 0; }
int spiflash_read_page(struct spiflash_device *dev, struct spiflash_transaction *trans, uint8_t *dest, uint32_t addr, uint32_t len, spi_cb cb, void *cbdata) { trans->spi_query[0] = READ_DATA; trans->spi_query[1] = addr >> 16; trans->spi_query[2] = addr >> 8; trans->spi_query[3] = addr; trans->spi_cb = cb; trans->cbdata = cbdata; sg_init_list(trans->flash_tx_sg, 1, trans->spi_query, 4); sg_init_list(trans->flash_rx_sg, 2, trans->spi_response, 4, dest, len); spiflash_queue_transaction(dev, trans, NO_OP, false, spiflash_spi_done_cb); return 0; }
static int spiflash_write_cmd(struct spiflash_device *dev, struct spiflash_transaction *trans, uint8_t cmd, uint32_t addr, const uint8_t *src, uint8_t len, spi_cb cb, void *cbdata) { trans->spi_query[0] = cmd; trans->spi_query[1] = addr >> 16; trans->spi_query[2] = addr >> 8; trans->spi_query[3] = addr; if (src) sg_init_list(trans->flash_tx_sg, 2, trans->spi_query, 4, src, len); else sg_init_list(trans->flash_tx_sg, 1, trans->spi_query, 4); sg_init_list(trans->flash_rx_sg, 0); trans->spi_cb = cb; trans->cbdata = cbdata; spiflash_queue_transaction(dev, trans, WRITE_ENABLE, true, spiflash_spi_done_cb); return 0; }