aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2014-03-20 05:20:56 -0400
committerBrian Norris <computersforpeace@gmail.com>2014-03-20 07:17:18 -0400
commit4eb3f0d8f70b667f8a59cc4f74003884562ef17f (patch)
tree393b4e6b7145169cc9191ab2fab8d8a12115676e /drivers/mtd
parent218b870f906b609d37737ee176dc4fcba86163d4 (diff)
mtd: st_spi_fsm: Prepare default sequences for read/write/erase
Most chips require a predefined set of FSM message sequences for read, write and erase operations. This patch provides a way to set them up, which it will do so if a chip specific initialisation routine isn't been provided. Acked-by Angus Clark <angus.clark@st.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/devices/st_spi_fsm.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/mtd/devices/st_spi_fsm.c b/drivers/mtd/devices/st_spi_fsm.c
index b4d2a188672e..b4afee0e0e33 100644
--- a/drivers/mtd/devices/st_spi_fsm.c
+++ b/drivers/mtd/devices/st_spi_fsm.c
@@ -845,6 +845,38 @@ static int stfsm_search_prepare_rw_seq(struct stfsm *fsm,
845 return 0; 845 return 0;
846} 846}
847 847
848/* Prepare a READ/WRITE/ERASE 'default' sequences */
849static int stfsm_prepare_rwe_seqs_default(struct stfsm *fsm)
850{
851 uint32_t flags = fsm->info->flags;
852 int ret;
853
854 /* Configure 'READ' sequence */
855 ret = stfsm_search_prepare_rw_seq(fsm, &stfsm_seq_read,
856 default_read_configs);
857 if (ret) {
858 dev_err(fsm->dev,
859 "failed to prep READ sequence with flags [0x%08x]\n",
860 flags);
861 return ret;
862 }
863
864 /* Configure 'WRITE' sequence */
865 ret = stfsm_search_prepare_rw_seq(fsm, &stfsm_seq_write,
866 default_write_configs);
867 if (ret) {
868 dev_err(fsm->dev,
869 "failed to prep WRITE sequence with flags [0x%08x]\n",
870 flags);
871 return ret;
872 }
873
874 /* Configure 'ERASE_SECTOR' sequence */
875 stfsm_prepare_erasesec_seq(fsm, &stfsm_seq_erase_sector);
876
877 return 0;
878}
879
848static int stfsm_n25q_config(struct stfsm *fsm) 880static int stfsm_n25q_config(struct stfsm *fsm)
849{ 881{
850 uint32_t flags = fsm->info->flags; 882 uint32_t flags = fsm->info->flags;
@@ -1151,6 +1183,10 @@ static int stfsm_probe(struct platform_device *pdev)
1151 ret = info->config(fsm); 1183 ret = info->config(fsm);
1152 if (ret) 1184 if (ret)
1153 return ret; 1185 return ret;
1186 } else {
1187 ret = stfsm_prepare_rwe_seqs_default(fsm);
1188 if (ret)
1189 return ret;
1154 } 1190 }
1155 1191
1156 fsm->mtd.dev.parent = &pdev->dev; 1192 fsm->mtd.dev.parent = &pdev->dev;