1 /*- 2 * Copyright 2013 Broadcom Corporation 3 * 4 * Copyright (c) 2009-2010 Micron Technology, Inc. 5 * 6 * This software is licensed under the terms of the GNU General Public 7 * License version 2, as published by the Free Software Foundation, and 8 * may be copied, distributed, and modified under those terms. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * Henry Pan <hspan@micron.com> 16 * 17 * based on nand.h 18 */ 19 #ifndef __LINUX_MTD_SPI_NAND_H 20 #define __LINUX_MTD_SPI_NAND_H 21 22 #include <linux/wait.h> 23 #include <linux/spinlock.h> 24 #include <linux/mtd/mtd.h> 25 26 /* cmd */ 27 #define CMD_READ 0x13 28 #define CMD_READ_RDM 0x03 29 #define CMD_PROG_PAGE_CLRCACHE 0x02 30 #define CMD_PROG_PAGE 0x84 31 #define CMD_PROG_PAGE_EXC 0x10 32 #define CMD_ERASE_BLK 0xd8 33 #define CMD_WR_ENABLE 0x06 34 #define CMD_WR_DISABLE 0x04 35 #define CMD_READ_ID 0x9f 36 #define CMD_RESET 0xff 37 #define CMD_READ_REG 0x0f 38 #define CMD_WRITE_REG 0x1f 39 40 /* feature/ status reg */ 41 #define REG_BLOCK_LOCK 0xa0 42 #define REG_OTP 0xb0 43 #define REG_STATUS 0xc0/* timing */ 44 45 /* status */ 46 #define STATUS_OIP_MASK 0x01 47 #define STATUS_READY 0 48 #define STATUS_BUSY BIT(0) 49 50 #define STATUS_E_FAIL_MASK 0x04 51 #define STATUS_E_FAIL BIT(2) 52 53 #define STATUS_P_FAIL_MASK 0x08 54 #define STATUS_P_FAIL BIT(3) 55 56 #define STATUS_ECC_MASK 0x30 57 #define STATUS_ECC_1BIT_CORRECTED BIT(4) 58 #define STATUS_ECC_ERROR BIT(5) 59 #define STATUS_ECC_RESERVED (BIT(5) | BIT(4)) 60 61 /*ECC enable defines*/ 62 #define OTP_ECC_MASK 0x10 63 #define OTP_ECC_OFF 0 64 #define OTP_ECC_ON 1 65 66 #define ECC_DISABLED 67 #define ECC_IN_NAND 68 #define ECC_SOFT 69 70 /* block lock */ 71 #define BL_ALL_LOCKED 0x38 72 #define BL_1_2_LOCKED 0x30 73 #define BL_1_4_LOCKED 0x28 74 #define BL_1_8_LOCKED 0x20 75 #define BL_1_16_LOCKED 0x18 76 #define BL_1_32_LOCKED 0x10 77 #define BL_1_64_LOCKED 0x08 78 #define BL_ALL_UNLOCKED 0 79 80 struct spinand_info { 81 struct spi_device *spi; 82 void *priv; 83 }; 84 85 struct spinand_state { 86 u32 col; 87 u32 row; 88 int buf_ptr; 89 u8 *buf; 90 }; 91 92 struct spinand_cmd { 93 u8 cmd; 94 u32 n_addr; /* Number of address */ 95 u8 addr[3]; /* Reg Offset */ 96 u32 n_dummy; /* Dummy use */ 97 u32 n_tx; /* Number of tx bytes */ 98 u8 *tx_buf; /* Tx buf */ 99 u32 n_rx; /* Number of rx bytes */ 100 u8 *rx_buf; /* Rx buf */ 101 }; 102 103 int spinand_mtd(struct mtd_info *mtd); 104 void spinand_mtd_release(struct mtd_info *mtd); 105 106 #endif /* __LINUX_MTD_SPI_NAND_H */ 107