@@ -444,36 +444,28 @@ static int mtk_nor_read_pio(struct mtk_nor *sp, const struct spi_mem_op *op)
444444 return ret ;
445445}
446446
447- static int mtk_nor_write_buffer_enable (struct mtk_nor * sp )
447+ static int mtk_nor_setup_write_buffer (struct mtk_nor * sp , bool on )
448448{
449449 int ret ;
450450 u32 val ;
451451
452- if (sp -> wbuf_en )
452+ if (!( sp -> wbuf_en ^ on ) )
453453 return 0 ;
454454
455455 val = readl (sp -> base + MTK_NOR_REG_CFG2 );
456- writel (val | MTK_NOR_WR_BUF_EN , sp -> base + MTK_NOR_REG_CFG2 );
457- ret = readl_poll_timeout (sp -> base + MTK_NOR_REG_CFG2 , val ,
458- val & MTK_NOR_WR_BUF_EN , 0 , 10000 );
459- if (!ret )
460- sp -> wbuf_en = true;
461- return ret ;
462- }
463-
464- static int mtk_nor_write_buffer_disable (struct mtk_nor * sp )
465- {
466- int ret ;
467- u32 val ;
456+ if (on ) {
457+ writel (val | MTK_NOR_WR_BUF_EN , sp -> base + MTK_NOR_REG_CFG2 );
458+ ret = readl_poll_timeout (sp -> base + MTK_NOR_REG_CFG2 , val ,
459+ val & MTK_NOR_WR_BUF_EN , 0 , 10000 );
460+ } else {
461+ writel (val & ~MTK_NOR_WR_BUF_EN , sp -> base + MTK_NOR_REG_CFG2 );
462+ ret = readl_poll_timeout (sp -> base + MTK_NOR_REG_CFG2 , val ,
463+ !(val & MTK_NOR_WR_BUF_EN ), 0 , 10000 );
464+ }
468465
469- if (!sp -> wbuf_en )
470- return 0 ;
471- val = readl (sp -> base + MTK_NOR_REG_CFG2 );
472- writel (val & ~MTK_NOR_WR_BUF_EN , sp -> base + MTK_NOR_REG_CFG2 );
473- ret = readl_poll_timeout (sp -> base + MTK_NOR_REG_CFG2 , val ,
474- !(val & MTK_NOR_WR_BUF_EN ), 0 , 10000 );
475466 if (!ret )
476- sp -> wbuf_en = false;
467+ sp -> wbuf_en = on ;
468+
477469 return ret ;
478470}
479471
@@ -483,7 +475,7 @@ static int mtk_nor_pp_buffered(struct mtk_nor *sp, const struct spi_mem_op *op)
483475 u32 val ;
484476 int ret , i ;
485477
486- ret = mtk_nor_write_buffer_enable (sp );
478+ ret = mtk_nor_setup_write_buffer (sp , true );
487479 if (ret < 0 )
488480 return ret ;
489481
@@ -502,7 +494,7 @@ static int mtk_nor_pp_unbuffered(struct mtk_nor *sp,
502494 const u8 * buf = op -> data .buf .out ;
503495 int ret ;
504496
505- ret = mtk_nor_write_buffer_disable (sp );
497+ ret = mtk_nor_setup_write_buffer (sp , false );
506498 if (ret < 0 )
507499 return ret ;
508500 writeb (buf [0 ], sp -> base + MTK_NOR_REG_WDATA );
@@ -609,7 +601,7 @@ static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
609601 }
610602
611603 if ((op -> data .dir == SPI_MEM_DATA_IN ) && mtk_nor_match_read (op )) {
612- ret = mtk_nor_write_buffer_disable (sp );
604+ ret = mtk_nor_setup_write_buffer (sp , false );
613605 if (ret < 0 )
614606 return ret ;
615607 mtk_nor_setup_bus (sp , op );
0 commit comments