Commit 150571b7 authored by Lee Jones's avatar Lee Jones Committed by Brian Norris
Browse files

mtd: st_spi_fsm: Add the ability to write to FSM's status register



Acked-by Angus Clark <angus.clark@st.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent ac94dbcb
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -588,6 +588,23 @@ static struct stfsm_seq stfsm_seq_erase_chip = {
		    SEQ_CFG_STARTSEQ),
};

static struct stfsm_seq stfsm_seq_write_status = {
	.seq_opc[0] = (SEQ_OPC_PADS_1 | SEQ_OPC_CYCLES(8) |
		       SEQ_OPC_OPCODE(FLASH_CMD_WREN) | SEQ_OPC_CSDEASSERT),
	.seq_opc[1] = (SEQ_OPC_PADS_1 | SEQ_OPC_CYCLES(8) |
		       SEQ_OPC_OPCODE(FLASH_CMD_WRSR)),
	.seq = {
		STFSM_INST_CMD1,
		STFSM_INST_CMD2,
		STFSM_INST_STA_WR1,
		STFSM_INST_STOP,
	},
	.seq_cfg = (SEQ_CFG_PADS_1 |
		    SEQ_CFG_READNOTWRITE |
		    SEQ_CFG_CSDEASSERT |
		    SEQ_CFG_STARTSEQ),
};

static struct stfsm_seq stfsm_seq_wrvcr = {
	.seq_opc[0] = (SEQ_OPC_PADS_1 | SEQ_OPC_CYCLES(8) |
		       SEQ_OPC_OPCODE(FLASH_CMD_WREN) | SEQ_OPC_CSDEASSERT),
@@ -817,6 +834,25 @@ static int stfsm_read_status(struct stfsm *fsm, uint8_t cmd,
	return 0;
}

static int stfsm_write_status(struct stfsm *fsm, uint16_t status,
			       int sta_bytes)
{
	struct stfsm_seq *seq = &stfsm_seq_write_status;

	dev_dbg(fsm->dev, "writing STA[%s] 0x%04x\n",
		(sta_bytes == 1) ? "1" : "1+2", status);

	seq->status = (uint32_t)status | STA_PADS_1 | STA_CSDEASSERT;
	seq->seq[2] = (sta_bytes == 1) ?
		STFSM_INST_STA_WR1 : STFSM_INST_STA_WR1_2;

	stfsm_load_seq(fsm, seq);

	stfsm_wait_seq(fsm);

	return 0;
};

static int stfsm_wrvcr(struct stfsm *fsm, uint8_t data)
{
	struct stfsm_seq *seq = &stfsm_seq_wrvcr;