Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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;
}
Exemple #4
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;
}
Exemple #5
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;
}