mtk_nor           113 drivers/mtd/spi-nor/mtk-quadspi.c static void mtk_nor_set_read_mode(struct mtk_nor *mtk_nor)
mtk_nor           115 drivers/mtd/spi-nor/mtk-quadspi.c 	struct spi_nor *nor = &mtk_nor->nor;
mtk_nor           119 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(nor->read_opcode, mtk_nor->base +
mtk_nor           121 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(MTK_NOR_FAST_READ, mtk_nor->base +
mtk_nor           125 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(nor->read_opcode, mtk_nor->base +
mtk_nor           127 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(MTK_NOR_DUAL_READ_EN, mtk_nor->base +
mtk_nor           131 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(nor->read_opcode, mtk_nor->base +
mtk_nor           133 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(MTK_NOR_QUAD_READ_EN, mtk_nor->base +
mtk_nor           137 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(MTK_NOR_DUAL_DISABLE, mtk_nor->base +
mtk_nor           143 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_execute_cmd(struct mtk_nor *mtk_nor, u8 cmdval)
mtk_nor           148 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(cmdval, mtk_nor->base + MTK_NOR_CMD_REG);
mtk_nor           149 drivers/mtd/spi-nor/mtk-quadspi.c 	return readl_poll_timeout(mtk_nor->base + MTK_NOR_CMD_REG, reg,
mtk_nor           153 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_do_tx_rx(struct mtk_nor *mtk_nor, u8 op,
mtk_nor           162 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(len * 8, mtk_nor->base + MTK_NOR_CNT_REG);
mtk_nor           168 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(op, mtk_nor->base + MTK_NOR_PRG_REG(idx));
mtk_nor           173 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(tx[i], mtk_nor->base + MTK_NOR_PRG_REG(idx));
mtk_nor           177 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(0, mtk_nor->base + MTK_NOR_PRG_REG(idx));
mtk_nor           181 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = mtk_nor_execute_cmd(mtk_nor, MTK_NOR_PRG_CMD);
mtk_nor           190 drivers/mtd/spi-nor/mtk-quadspi.c 		rx[i] = readb(mtk_nor->base + MTK_NOR_SHREG(idx));
mtk_nor           196 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_wr_sr(struct mtk_nor *mtk_nor, u8 sr)
mtk_nor           198 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(sr, mtk_nor->base + MTK_NOR_PRGDATA5_REG);
mtk_nor           199 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(8, mtk_nor->base + MTK_NOR_CNT_REG);
mtk_nor           200 drivers/mtd/spi-nor/mtk-quadspi.c 	return mtk_nor_execute_cmd(mtk_nor, MTK_NOR_WRSR_CMD);
mtk_nor           203 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_write_buffer_enable(struct mtk_nor *mtk_nor)
mtk_nor           211 drivers/mtd/spi-nor/mtk-quadspi.c 	writel(MTK_NOR_WR_BUF_ENABLE, mtk_nor->base + MTK_NOR_CFG2_REG);
mtk_nor           212 drivers/mtd/spi-nor/mtk-quadspi.c 	return readb_poll_timeout(mtk_nor->base + MTK_NOR_CFG2_REG, reg,
mtk_nor           216 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_write_buffer_disable(struct mtk_nor *mtk_nor)
mtk_nor           220 drivers/mtd/spi-nor/mtk-quadspi.c 	writel(MTK_NOR_WR_BUF_DISABLE, mtk_nor->base + MTK_NOR_CFG2_REG);
mtk_nor           221 drivers/mtd/spi-nor/mtk-quadspi.c 	return readb_poll_timeout(mtk_nor->base + MTK_NOR_CFG2_REG, reg,
mtk_nor           226 drivers/mtd/spi-nor/mtk-quadspi.c static void mtk_nor_set_addr_width(struct mtk_nor *mtk_nor)
mtk_nor           229 drivers/mtd/spi-nor/mtk-quadspi.c 	struct spi_nor *nor = &mtk_nor->nor;
mtk_nor           231 drivers/mtd/spi-nor/mtk-quadspi.c 	val = readb(mtk_nor->base + MTK_NOR_DUAL_REG);
mtk_nor           241 drivers/mtd/spi-nor/mtk-quadspi.c 		dev_warn(mtk_nor->dev, "Unexpected address width %u.\n",
mtk_nor           246 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(val, mtk_nor->base + MTK_NOR_DUAL_REG);
mtk_nor           249 drivers/mtd/spi-nor/mtk-quadspi.c static void mtk_nor_set_addr(struct mtk_nor *mtk_nor, u32 addr)
mtk_nor           253 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_set_addr_width(mtk_nor);
mtk_nor           256 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(addr & 0xff, mtk_nor->base + MTK_NOR_RADR0_REG + i * 4);
mtk_nor           260 drivers/mtd/spi-nor/mtk-quadspi.c 	writeb(addr & 0xff, mtk_nor->base + MTK_NOR_RADR3_REG);
mtk_nor           269 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = nor->priv;
mtk_nor           272 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_set_read_mode(mtk_nor);
mtk_nor           273 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_set_addr(mtk_nor, addr);
mtk_nor           276 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_execute_cmd(mtk_nor, MTK_NOR_PIO_READ_CMD);
mtk_nor           279 drivers/mtd/spi-nor/mtk-quadspi.c 		buf[i] = readb(mtk_nor->base + MTK_NOR_RDATA_REG);
mtk_nor           284 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_write_single_byte(struct mtk_nor *mtk_nor,
mtk_nor           289 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_set_addr(mtk_nor, addr);
mtk_nor           292 drivers/mtd/spi-nor/mtk-quadspi.c 		writeb(*data++, mtk_nor->base + MTK_NOR_WDATA_REG);
mtk_nor           293 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_execute_cmd(mtk_nor, MTK_NOR_PIO_WR_CMD);
mtk_nor           300 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_write_buffer(struct mtk_nor *mtk_nor, int addr,
mtk_nor           305 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_set_addr(mtk_nor, addr);
mtk_nor           312 drivers/mtd/spi-nor/mtk-quadspi.c 		writel(data, mtk_nor->base + MTK_NOR_PP_DATA_REG);
mtk_nor           314 drivers/mtd/spi-nor/mtk-quadspi.c 	return mtk_nor_execute_cmd(mtk_nor, MTK_NOR_WR_CMD);
mtk_nor           321 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = nor->priv;
mtk_nor           324 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = mtk_nor_write_buffer_enable(mtk_nor);
mtk_nor           326 drivers/mtd/spi-nor/mtk-quadspi.c 		dev_warn(mtk_nor->dev, "write buffer enable failed!\n");
mtk_nor           331 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_write_buffer(mtk_nor, to, buf);
mtk_nor           333 drivers/mtd/spi-nor/mtk-quadspi.c 			dev_err(mtk_nor->dev, "write buffer failed!\n");
mtk_nor           339 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = mtk_nor_write_buffer_disable(mtk_nor);
mtk_nor           341 drivers/mtd/spi-nor/mtk-quadspi.c 		dev_warn(mtk_nor->dev, "write buffer disable failed!\n");
mtk_nor           346 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_write_single_byte(mtk_nor, to,
mtk_nor           349 drivers/mtd/spi-nor/mtk-quadspi.c 			dev_err(mtk_nor->dev, "write single byte failed!\n");
mtk_nor           360 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = nor->priv;
mtk_nor           364 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_execute_cmd(mtk_nor, MTK_NOR_RDSR_CMD);
mtk_nor           368 drivers/mtd/spi-nor/mtk-quadspi.c 			*buf = readb(mtk_nor->base + MTK_NOR_RDSR_REG);
mtk_nor           370 drivers/mtd/spi-nor/mtk-quadspi.c 			dev_err(mtk_nor->dev, "len should be 1 for read status!\n");
mtk_nor           373 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_do_tx_rx(mtk_nor, opcode, NULL, 0, buf, len);
mtk_nor           383 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = nor->priv;
mtk_nor           388 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_wr_sr(mtk_nor, *buf);
mtk_nor           391 drivers/mtd/spi-nor/mtk-quadspi.c 		ret = mtk_nor_do_tx_rx(mtk_nor, opcode, buf, len, NULL, 0);
mtk_nor           393 drivers/mtd/spi-nor/mtk-quadspi.c 			dev_warn(mtk_nor->dev, "write reg failure!\n");
mtk_nor           399 drivers/mtd/spi-nor/mtk-quadspi.c static void mtk_nor_disable_clk(struct mtk_nor *mtk_nor)
mtk_nor           401 drivers/mtd/spi-nor/mtk-quadspi.c 	clk_disable_unprepare(mtk_nor->spi_clk);
mtk_nor           402 drivers/mtd/spi-nor/mtk-quadspi.c 	clk_disable_unprepare(mtk_nor->nor_clk);
mtk_nor           405 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_enable_clk(struct mtk_nor *mtk_nor)
mtk_nor           409 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = clk_prepare_enable(mtk_nor->spi_clk);
mtk_nor           413 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = clk_prepare_enable(mtk_nor->nor_clk);
mtk_nor           415 drivers/mtd/spi-nor/mtk-quadspi.c 		clk_disable_unprepare(mtk_nor->spi_clk);
mtk_nor           422 drivers/mtd/spi-nor/mtk-quadspi.c static int mtk_nor_init(struct mtk_nor *mtk_nor,
mtk_nor           435 drivers/mtd/spi-nor/mtk-quadspi.c 	writel(MTK_NOR_ENABLE_SF_CMD, mtk_nor->base + MTK_NOR_WRPROT_REG);
mtk_nor           437 drivers/mtd/spi-nor/mtk-quadspi.c 	nor = &mtk_nor->nor;
mtk_nor           438 drivers/mtd/spi-nor/mtk-quadspi.c 	nor->dev = mtk_nor->dev;
mtk_nor           439 drivers/mtd/spi-nor/mtk-quadspi.c 	nor->priv = mtk_nor;
mtk_nor           461 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor;
mtk_nor           468 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor = devm_kzalloc(&pdev->dev, sizeof(*mtk_nor), GFP_KERNEL);
mtk_nor           469 drivers/mtd/spi-nor/mtk-quadspi.c 	if (!mtk_nor)
mtk_nor           471 drivers/mtd/spi-nor/mtk-quadspi.c 	platform_set_drvdata(pdev, mtk_nor);
mtk_nor           474 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor->base = devm_ioremap_resource(&pdev->dev, res);
mtk_nor           475 drivers/mtd/spi-nor/mtk-quadspi.c 	if (IS_ERR(mtk_nor->base))
mtk_nor           476 drivers/mtd/spi-nor/mtk-quadspi.c 		return PTR_ERR(mtk_nor->base);
mtk_nor           478 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor->spi_clk = devm_clk_get(&pdev->dev, "spi");
mtk_nor           479 drivers/mtd/spi-nor/mtk-quadspi.c 	if (IS_ERR(mtk_nor->spi_clk))
mtk_nor           480 drivers/mtd/spi-nor/mtk-quadspi.c 		return PTR_ERR(mtk_nor->spi_clk);
mtk_nor           482 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor->nor_clk = devm_clk_get(&pdev->dev, "sf");
mtk_nor           483 drivers/mtd/spi-nor/mtk-quadspi.c 	if (IS_ERR(mtk_nor->nor_clk))
mtk_nor           484 drivers/mtd/spi-nor/mtk-quadspi.c 		return PTR_ERR(mtk_nor->nor_clk);
mtk_nor           486 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor->dev = &pdev->dev;
mtk_nor           488 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = mtk_nor_enable_clk(mtk_nor);
mtk_nor           499 drivers/mtd/spi-nor/mtk-quadspi.c 	ret = mtk_nor_init(mtk_nor, flash_np);
mtk_nor           503 drivers/mtd/spi-nor/mtk-quadspi.c 		mtk_nor_disable_clk(mtk_nor);
mtk_nor           510 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = platform_get_drvdata(pdev);
mtk_nor           512 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_disable_clk(mtk_nor);
mtk_nor           520 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = dev_get_drvdata(dev);
mtk_nor           522 drivers/mtd/spi-nor/mtk-quadspi.c 	mtk_nor_disable_clk(mtk_nor);
mtk_nor           529 drivers/mtd/spi-nor/mtk-quadspi.c 	struct mtk_nor *mtk_nor = dev_get_drvdata(dev);
mtk_nor           531 drivers/mtd/spi-nor/mtk-quadspi.c 	return mtk_nor_enable_clk(mtk_nor);