aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2014-08-06 21:17:00 -0400
committerBrian Norris <computersforpeace@gmail.com>2014-11-05 05:08:21 -0500
commitb94ed087744c5bc287d2ed706b476693df07151d (patch)
tree3cc1ce27a02e529687eadfbbae70b93b4e524a30
parent8fdc6cd45891d26e2c82ad22cc6f85cbb4d526d2 (diff)
mtd: spi-nor: drop replaceable wait-till-ready function pointer
We don't need to expose a 'wait-till-ready' interface to drivers. Status register polling should be handled by the core spi-nor.c library, and as of now, I see no need to provide a special driver-specific hook for it. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Reviewed-by: Marek Vasut <marex@denx.de>
-rw-r--r--drivers/mtd/spi-nor/spi-nor.c28
-rw-r--r--include/linux/mtd/spi-nor.h2
2 files changed, 10 insertions, 20 deletions
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 93cd1043ef4f..bfb67f1e2b7d 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -195,6 +195,10 @@ static int spi_nor_ready(struct spi_nor *nor)
195 return sr && fsr; 195 return sr && fsr;
196} 196}
197 197
198/*
199 * Service routine to read status register until ready, or timeout occurs.
200 * Returns non-zero if error.
201 */
198static int spi_nor_wait_till_ready(struct spi_nor *nor) 202static int spi_nor_wait_till_ready(struct spi_nor *nor)
199{ 203{
200 unsigned long deadline; 204 unsigned long deadline;
@@ -216,15 +220,6 @@ static int spi_nor_wait_till_ready(struct spi_nor *nor)
216} 220}
217 221
218/* 222/*
219 * Service routine to read status register until ready, or timeout occurs.
220 * Returns non-zero if error.
221 */
222static int wait_till_ready(struct spi_nor *nor)
223{
224 return nor->wait_till_ready(nor);
225}
226
227/*
228 * Erase the whole flash memory 223 * Erase the whole flash memory
229 * 224 *
230 * Returns 0 if successful, non-zero otherwise. 225 * Returns 0 if successful, non-zero otherwise.
@@ -708,7 +703,7 @@ static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
708 703
709 /* write one byte. */ 704 /* write one byte. */
710 nor->write(nor, to, 1, retlen, buf); 705 nor->write(nor, to, 1, retlen, buf);
711 ret = wait_till_ready(nor); 706 ret = spi_nor_wait_till_ready(nor);
712 if (ret) 707 if (ret)
713 goto time_out; 708 goto time_out;
714 } 709 }
@@ -720,7 +715,7 @@ static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
720 715
721 /* write two bytes. */ 716 /* write two bytes. */
722 nor->write(nor, to, 2, retlen, buf + actual); 717 nor->write(nor, to, 2, retlen, buf + actual);
723 ret = wait_till_ready(nor); 718 ret = spi_nor_wait_till_ready(nor);
724 if (ret) 719 if (ret)
725 goto time_out; 720 goto time_out;
726 to += 2; 721 to += 2;
@@ -729,7 +724,7 @@ static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
729 nor->sst_write_second = false; 724 nor->sst_write_second = false;
730 725
731 write_disable(nor); 726 write_disable(nor);
732 ret = wait_till_ready(nor); 727 ret = spi_nor_wait_till_ready(nor);
733 if (ret) 728 if (ret)
734 goto time_out; 729 goto time_out;
735 730
@@ -740,7 +735,7 @@ static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
740 nor->program_opcode = SPINOR_OP_BP; 735 nor->program_opcode = SPINOR_OP_BP;
741 nor->write(nor, to, 1, retlen, buf + actual); 736 nor->write(nor, to, 1, retlen, buf + actual);
742 737
743 ret = wait_till_ready(nor); 738 ret = spi_nor_wait_till_ready(nor);
744 if (ret) 739 if (ret)
745 goto time_out; 740 goto time_out;
746 write_disable(nor); 741 write_disable(nor);
@@ -786,7 +781,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
786 if (page_size > nor->page_size) 781 if (page_size > nor->page_size)
787 page_size = nor->page_size; 782 page_size = nor->page_size;
788 783
789 ret = wait_till_ready(nor); 784 ret = spi_nor_wait_till_ready(nor);
790 if (ret) 785 if (ret)
791 goto write_err; 786 goto write_err;
792 787
@@ -812,7 +807,7 @@ static int macronix_quad_enable(struct spi_nor *nor)
812 nor->cmd_buf[0] = val | SR_QUAD_EN_MX; 807 nor->cmd_buf[0] = val | SR_QUAD_EN_MX;
813 nor->write_reg(nor, SPINOR_OP_WRSR, nor->cmd_buf, 1, 0); 808 nor->write_reg(nor, SPINOR_OP_WRSR, nor->cmd_buf, 1, 0);
814 809
815 if (wait_till_ready(nor)) 810 if (spi_nor_wait_till_ready(nor))
816 return 1; 811 return 1;
817 812
818 ret = read_sr(nor); 813 ret = read_sr(nor);
@@ -892,9 +887,6 @@ static int spi_nor_check(struct spi_nor *nor)
892 return -EINVAL; 887 return -EINVAL;
893 } 888 }
894 889
895 if (!nor->wait_till_ready)
896 nor->wait_till_ready = spi_nor_wait_till_ready;
897
898 return 0; 890 return 0;
899} 891}
900 892
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index d691025d9b00..63aeccf9ddc8 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -144,7 +144,6 @@ enum spi_nor_option_flags {
144 * @write_xfer: [OPTIONAL] the writefundamental primitive 144 * @write_xfer: [OPTIONAL] the writefundamental primitive
145 * @read_reg: [DRIVER-SPECIFIC] read out the register 145 * @read_reg: [DRIVER-SPECIFIC] read out the register
146 * @write_reg: [DRIVER-SPECIFIC] write data to the register 146 * @write_reg: [DRIVER-SPECIFIC] write data to the register
147 * @wait_till_ready: [REPLACEABLE] wait till the NOR becomes ready
148 * @read: [DRIVER-SPECIFIC] read data from the SPI NOR 147 * @read: [DRIVER-SPECIFIC] read data from the SPI NOR
149 * @write: [DRIVER-SPECIFIC] write data to the SPI NOR 148 * @write: [DRIVER-SPECIFIC] write data to the SPI NOR
150 * @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR 149 * @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR
@@ -176,7 +175,6 @@ struct spi_nor {
176 int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len); 175 int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
177 int (*write_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len, 176 int (*write_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len,
178 int write_enable); 177 int write_enable);
179 int (*wait_till_ready)(struct spi_nor *nor);
180 178
181 int (*read)(struct spi_nor *nor, loff_t from, 179 int (*read)(struct spi_nor *nor, loff_t from,
182 size_t len, size_t *retlen, u_char *read_buf); 180 size_t len, size_t *retlen, u_char *read_buf);