@@ -900,7 +900,6 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,
900
900
{
901
901
struct fsl_dspi * dspi = spi_controller_get_devdata (ctlr );
902
902
struct spi_device * spi = message -> spi ;
903
- enum dspi_trans_mode trans_mode ;
904
903
struct spi_transfer * transfer ;
905
904
int status = 0 ;
906
905
@@ -942,30 +941,11 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,
942
941
spi_take_timestamp_pre (dspi -> ctlr , dspi -> cur_transfer ,
943
942
dspi -> progress , !dspi -> irq );
944
943
945
- trans_mode = dspi -> devtype_data -> trans_mode ;
946
- switch (trans_mode ) {
947
- case DSPI_EOQ_MODE :
948
- regmap_write (dspi -> regmap , SPI_RSER , SPI_RSER_EOQFE );
949
- dspi_fifo_write (dspi );
950
- break ;
951
- case DSPI_XSPI_MODE :
952
- regmap_write (dspi -> regmap , SPI_RSER , SPI_RSER_CMDTCFE );
953
- dspi_fifo_write (dspi );
954
- break ;
955
- case DSPI_DMA_MODE :
956
- regmap_write (dspi -> regmap , SPI_RSER ,
957
- SPI_RSER_TFFFE | SPI_RSER_TFFFD |
958
- SPI_RSER_RFDFE | SPI_RSER_RFDFD );
944
+ if (dspi -> devtype_data -> trans_mode == DSPI_DMA_MODE ) {
959
945
status = dspi_dma_xfer (dspi );
960
- break ;
961
- default :
962
- dev_err (& dspi -> pdev -> dev , "unsupported trans_mode %u\n" ,
963
- trans_mode );
964
- status = - EINVAL ;
965
- goto out ;
966
- }
946
+ } else {
947
+ dspi_fifo_write (dspi );
967
948
968
- if (trans_mode != DSPI_DMA_MODE ) {
969
949
if (dspi -> irq ) {
970
950
wait_for_completion (& dspi -> xfer_done );
971
951
reinit_completion (& dspi -> xfer_done );
@@ -975,11 +955,12 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,
975
955
} while (status == - EINPROGRESS );
976
956
}
977
957
}
958
+ if (status )
959
+ break ;
978
960
979
961
spi_transfer_delay_exec (transfer );
980
962
}
981
963
982
- out :
983
964
message -> status = status ;
984
965
spi_finalize_current_message (ctlr );
985
966
@@ -1170,7 +1151,7 @@ static const struct regmap_config dspi_xspi_regmap_config[] = {
1170
1151
},
1171
1152
};
1172
1153
1173
- static void dspi_init (struct fsl_dspi * dspi )
1154
+ static int dspi_init (struct fsl_dspi * dspi )
1174
1155
{
1175
1156
unsigned int mcr ;
1176
1157
@@ -1184,6 +1165,26 @@ static void dspi_init(struct fsl_dspi *dspi)
1184
1165
1185
1166
regmap_write (dspi -> regmap , SPI_MCR , mcr );
1186
1167
regmap_write (dspi -> regmap , SPI_SR , SPI_SR_CLEAR );
1168
+
1169
+ switch (dspi -> devtype_data -> trans_mode ) {
1170
+ case DSPI_EOQ_MODE :
1171
+ regmap_write (dspi -> regmap , SPI_RSER , SPI_RSER_EOQFE );
1172
+ break ;
1173
+ case DSPI_XSPI_MODE :
1174
+ regmap_write (dspi -> regmap , SPI_RSER , SPI_RSER_CMDTCFE );
1175
+ break ;
1176
+ case DSPI_DMA_MODE :
1177
+ regmap_write (dspi -> regmap , SPI_RSER ,
1178
+ SPI_RSER_TFFFE | SPI_RSER_TFFFD |
1179
+ SPI_RSER_RFDFE | SPI_RSER_RFDFD );
1180
+ break ;
1181
+ default :
1182
+ dev_err (& dspi -> pdev -> dev , "unsupported trans_mode %u\n" ,
1183
+ dspi -> devtype_data -> trans_mode );
1184
+ return - EINVAL ;
1185
+ }
1186
+
1187
+ return 0 ;
1187
1188
}
1188
1189
1189
1190
static int dspi_slave_abort (struct spi_master * master )
@@ -1339,7 +1340,9 @@ static int dspi_probe(struct platform_device *pdev)
1339
1340
if (ret )
1340
1341
goto out_ctlr_put ;
1341
1342
1342
- dspi_init (dspi );
1343
+ ret = dspi_init (dspi );
1344
+ if (ret )
1345
+ goto out_clk_put ;
1343
1346
1344
1347
dspi -> irq = platform_get_irq (pdev , 0 );
1345
1348
if (dspi -> irq <= 0 ) {
0 commit comments