mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
Merge git://git.infradead.org/mtd-2.6
* git://git.infradead.org/mtd-2.6: (154 commits) mtd: cfi_cmdset_0002: use AMD standard command-set with Winbond flash chips mtd: cfi_cmdset_0002: Fix MODULE_ALIAS and linkage for new 0701 commandset ID mtd: mxc_nand: Remove duplicate NAND_CMD_RESET case value mtd: update gfp/slab.h includes jffs2: Stop triggering block erases from jffs2_write_super() jffs2: Rename jffs2_erase_pending_trigger() to jffs2_dirty_trigger() jffs2: Use jffs2_garbage_collect_trigger() to trigger pending erases jffs2: Require jffs2_garbage_collect_trigger() to be called with lock held jffs2: Wake GC thread when there are blocks to be erased jffs2: Erase pending blocks in GC pass, avoid invalid -EIO return jffs2: Add 'work_done' return value from jffs2_erase_pending_blocks() mtd: mtdchar: Do not corrupt backing device of device node inode mtd/maps/pcmciamtd: Fix printk format for ssize_t in debug messages drivers/mtd: Use kmemdup mtd: cfi_cmdset_0002: Fix argument order in bootloc warning mtd: nand: add Toshiba TC58NVG0 device ID pcmciamtd: add another ID pcmciamtd: coding style cleanups pcmciamtd: fixing obvious errors mtd: chips: add SST39WF160x NOR-flashes ... Trivial conflicts due to dev_node removal in drivers/mtd/maps/pcmciamtd.c
This commit is contained in:
commit
05ec7dd8dd
117 changed files with 10156 additions and 1647 deletions
|
|
@ -215,8 +215,8 @@ union jffs2_node_union
|
|||
|
||||
/* Data payload for device nodes. */
|
||||
union jffs2_device_node {
|
||||
jint16_t old;
|
||||
jint32_t new;
|
||||
jint16_t old_id;
|
||||
jint32_t new_id;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_JFFS2_H__ */
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
#define __MTD_TRANS_H__
|
||||
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/sysfs.h>
|
||||
|
||||
struct hd_geometry;
|
||||
struct mtd_info;
|
||||
|
|
@ -24,11 +26,16 @@ struct mtd_blktrans_dev {
|
|||
int devnum;
|
||||
unsigned long size;
|
||||
int readonly;
|
||||
void *blkcore_priv; /* gendisk in 2.5, devfs_handle in 2.4 */
|
||||
int open;
|
||||
struct kref ref;
|
||||
struct gendisk *disk;
|
||||
struct attribute_group *disk_attributes;
|
||||
struct task_struct *thread;
|
||||
struct request_queue *rq;
|
||||
spinlock_t queue_lock;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
struct blkcore_priv; /* Differs for 2.4 and 2.5 kernels; private */
|
||||
|
||||
struct mtd_blktrans_ops {
|
||||
char *name;
|
||||
int major;
|
||||
|
|
@ -60,8 +67,6 @@ struct mtd_blktrans_ops {
|
|||
struct list_head devs;
|
||||
struct list_head list;
|
||||
struct module *owner;
|
||||
|
||||
struct mtd_blkcore_priv *blkcore_priv;
|
||||
};
|
||||
|
||||
extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
|
||||
|
|
|
|||
|
|
@ -253,6 +253,7 @@ struct cfi_bri_query {
|
|||
#define P_ID_MITSUBISHI_STD 0x0100
|
||||
#define P_ID_MITSUBISHI_EXT 0x0101
|
||||
#define P_ID_SST_PAGE 0x0102
|
||||
#define P_ID_SST_OLD 0x0701
|
||||
#define P_ID_INTEL_PERFORMANCE 0x0200
|
||||
#define P_ID_INTEL_DATA 0x0210
|
||||
#define P_ID_RESERVED 0xffff
|
||||
|
|
@ -297,7 +298,7 @@ static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs,
|
|||
* and 32bit devices on 16 bit busses
|
||||
* set the low bit of the alternating bit sequence of the address.
|
||||
*/
|
||||
if (((type * interleave) > bankwidth) && ((uint8_t)cmd_ofs == 0xaa))
|
||||
if (((type * interleave) > bankwidth) && ((cmd_ofs & 0xff) == 0xaa))
|
||||
addr |= (type >> 1)*interleave;
|
||||
|
||||
return addr;
|
||||
|
|
@ -515,14 +516,25 @@ struct cfi_fixup {
|
|||
void* param;
|
||||
};
|
||||
|
||||
#define CFI_MFR_ANY 0xffff
|
||||
#define CFI_ID_ANY 0xffff
|
||||
#define CFI_MFR_ANY 0xFFFF
|
||||
#define CFI_ID_ANY 0xFFFF
|
||||
#define CFI_MFR_CONTINUATION 0x007F
|
||||
|
||||
#define CFI_MFR_AMD 0x0001
|
||||
#define CFI_MFR_INTEL 0x0089
|
||||
#define CFI_MFR_ATMEL 0x001F
|
||||
#define CFI_MFR_SAMSUNG 0x00EC
|
||||
#define CFI_MFR_ST 0x0020 /* STMicroelectronics */
|
||||
#define CFI_MFR_AMD 0x0001
|
||||
#define CFI_MFR_ATMEL 0x001F
|
||||
#define CFI_MFR_EON 0x001C
|
||||
#define CFI_MFR_FUJITSU 0x0004
|
||||
#define CFI_MFR_HYUNDAI 0x00AD
|
||||
#define CFI_MFR_INTEL 0x0089
|
||||
#define CFI_MFR_MACRONIX 0x00C2
|
||||
#define CFI_MFR_NEC 0x0010
|
||||
#define CFI_MFR_PMC 0x009D
|
||||
#define CFI_MFR_SAMSUNG 0x00EC
|
||||
#define CFI_MFR_SHARP 0x00B0
|
||||
#define CFI_MFR_SST 0x00BF
|
||||
#define CFI_MFR_ST 0x0020 /* STMicroelectronics */
|
||||
#define CFI_MFR_TOSHIBA 0x0098
|
||||
#define CFI_MFR_WINBOND 0x00DA
|
||||
|
||||
void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups);
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
* has asm/spinlock.h, or 2.4, which has linux/spinlock.h
|
||||
*/
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
typedef enum {
|
||||
FL_READY,
|
||||
|
|
@ -74,8 +75,7 @@ struct flchip {
|
|||
unsigned int erase_suspended:1;
|
||||
unsigned long in_progress_block_addr;
|
||||
|
||||
spinlock_t *mutex;
|
||||
spinlock_t _spinlock; /* We do it like this because sometimes they'll be shared. */
|
||||
struct mutex mutex;
|
||||
wait_queue_head_t wq; /* Wait on here when we're waiting for the chip
|
||||
to be ready */
|
||||
int word_write_time;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/bug.h>
|
||||
|
||||
#include <linux/mtd/compatmac.h>
|
||||
|
||||
|
|
@ -386,6 +387,8 @@ static inline map_word inline_map_read(struct map_info *map, unsigned long ofs)
|
|||
#endif
|
||||
else if (map_bankwidth_is_large(map))
|
||||
memcpy_fromio(r.x, map->virt+ofs, map->bankwidth);
|
||||
else
|
||||
BUG();
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
#define MTD_CHAR_MAJOR 90
|
||||
#define MTD_BLOCK_MAJOR 31
|
||||
#define MAX_MTD_DEVICES 32
|
||||
|
||||
#define MTD_ERASE_PENDING 0x01
|
||||
#define MTD_ERASING 0x02
|
||||
|
|
@ -61,9 +60,7 @@ struct mtd_erase_region_info {
|
|||
* MTD_OOB_PLACE: oob data are placed at the given offset
|
||||
* MTD_OOB_AUTO: oob data are automatically placed at the free areas
|
||||
* which are defined by the ecclayout
|
||||
* MTD_OOB_RAW: mode to read raw data+oob in one chunk. The oob data
|
||||
* is inserted into the data. Thats a raw image of the
|
||||
* flash contents.
|
||||
* MTD_OOB_RAW: mode to read oob and data without doing ECC checking
|
||||
*/
|
||||
typedef enum {
|
||||
MTD_OOB_PLACE,
|
||||
|
|
@ -290,8 +287,9 @@ extern int add_mtd_device(struct mtd_info *mtd);
|
|||
extern int del_mtd_device (struct mtd_info *mtd);
|
||||
|
||||
extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num);
|
||||
extern int __get_mtd_device(struct mtd_info *mtd);
|
||||
extern void __put_mtd_device(struct mtd_info *mtd);
|
||||
extern struct mtd_info *get_mtd_device_nm(const char *name);
|
||||
|
||||
extern void put_mtd_device(struct mtd_info *mtd);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
#include <linux/mtd/mtd.h>
|
||||
int mtdram_init_device(struct mtd_info *mtd, void *mapped_address,
|
||||
unsigned long size, char *name);
|
||||
unsigned long size, char *name);
|
||||
|
||||
#endif /* __MTD_MTDRAM_H__ */
|
||||
|
|
|
|||
|
|
@ -25,11 +25,13 @@
|
|||
#include <linux/mtd/bbm.h>
|
||||
|
||||
struct mtd_info;
|
||||
struct nand_flash_dev;
|
||||
/* Scan and identify a NAND device */
|
||||
extern int nand_scan (struct mtd_info *mtd, int max_chips);
|
||||
/* Separate phases of nand_scan(), allowing board driver to intervene
|
||||
* and override command or ECC setup according to flash type */
|
||||
extern int nand_scan_ident(struct mtd_info *mtd, int max_chips);
|
||||
extern int nand_scan_ident(struct mtd_info *mtd, int max_chips,
|
||||
struct nand_flash_dev *table);
|
||||
extern int nand_scan_tail(struct mtd_info *mtd);
|
||||
|
||||
/* Free resources held by the NAND device */
|
||||
|
|
@ -38,6 +40,12 @@ extern void nand_release (struct mtd_info *mtd);
|
|||
/* Internal helper for board drivers which need to override command function */
|
||||
extern void nand_wait_ready(struct mtd_info *mtd);
|
||||
|
||||
/* locks all blockes present in the device */
|
||||
extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
|
||||
|
||||
/* unlocks specified locked blockes */
|
||||
extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
|
||||
|
||||
/* The maximum number of NAND chips in an array */
|
||||
#define NAND_MAX_CHIPS 8
|
||||
|
||||
|
|
@ -45,7 +53,7 @@ extern void nand_wait_ready(struct mtd_info *mtd);
|
|||
* is supported now. If you add a chip with bigger oobsize/page
|
||||
* adjust this accordingly.
|
||||
*/
|
||||
#define NAND_MAX_OOBSIZE 128
|
||||
#define NAND_MAX_OOBSIZE 256
|
||||
#define NAND_MAX_PAGESIZE 4096
|
||||
|
||||
/*
|
||||
|
|
@ -82,6 +90,10 @@ extern void nand_wait_ready(struct mtd_info *mtd);
|
|||
#define NAND_CMD_ERASE2 0xd0
|
||||
#define NAND_CMD_RESET 0xff
|
||||
|
||||
#define NAND_CMD_LOCK 0x2a
|
||||
#define NAND_CMD_UNLOCK1 0x23
|
||||
#define NAND_CMD_UNLOCK2 0x24
|
||||
|
||||
/* Extended commands for large page devices */
|
||||
#define NAND_CMD_READSTART 0x30
|
||||
#define NAND_CMD_RNDOUTSTART 0xE0
|
||||
|
|
@ -169,6 +181,14 @@ typedef enum {
|
|||
#define NAND_NO_READRDY 0x00000100
|
||||
/* Chip does not allow subpage writes */
|
||||
#define NAND_NO_SUBPAGE_WRITE 0x00000200
|
||||
/* Chip stores bad block marker on the last page of the eraseblock */
|
||||
#define NAND_BB_LAST_PAGE 0x00000400
|
||||
|
||||
/* Device is one of 'new' xD cards that expose fake nand command set */
|
||||
#define NAND_BROKEN_XD 0x00000400
|
||||
|
||||
/* Device behaves just like nand, but is readonly */
|
||||
#define NAND_ROM 0x00000800
|
||||
|
||||
/* Options valid for Samsung large page devices */
|
||||
#define NAND_SAMSUNG_LP_OPTIONS \
|
||||
|
|
@ -391,6 +411,7 @@ struct nand_chip {
|
|||
int subpagesize;
|
||||
uint8_t cellinfo;
|
||||
int badblockpos;
|
||||
int badblockbits;
|
||||
|
||||
flstate_t state;
|
||||
|
||||
|
|
|
|||
|
|
@ -125,6 +125,9 @@ struct onenand_chip {
|
|||
flstate_t state;
|
||||
unsigned char *page_buf;
|
||||
unsigned char *oob_buf;
|
||||
#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
|
||||
unsigned char *verify_buf;
|
||||
#endif
|
||||
|
||||
int subpagesize;
|
||||
struct nand_ecclayout *ecclayout;
|
||||
|
|
@ -175,10 +178,14 @@ struct onenand_chip {
|
|||
#define ONENAND_HAS_CONT_LOCK (0x0001)
|
||||
#define ONENAND_HAS_UNLOCK_ALL (0x0002)
|
||||
#define ONENAND_HAS_2PLANE (0x0004)
|
||||
#define ONENAND_HAS_4KB_PAGE (0x0008)
|
||||
#define ONENAND_SKIP_UNLOCK_CHECK (0x0100)
|
||||
#define ONENAND_PAGEBUF_ALLOC (0x1000)
|
||||
#define ONENAND_OOBBUF_ALLOC (0x2000)
|
||||
|
||||
#define ONENAND_IS_4KB_PAGE(this) \
|
||||
(this->options & ONENAND_HAS_4KB_PAGE)
|
||||
|
||||
/*
|
||||
* OneNAND Flash Manufacturer ID Codes
|
||||
*/
|
||||
|
|
@ -205,6 +212,8 @@ struct mtd_partition;
|
|||
|
||||
struct onenand_platform_data {
|
||||
void (*mmcontrol)(struct mtd_info *mtd, int sync_read);
|
||||
int (*read_bufferram)(struct mtd_info *mtd, int area,
|
||||
unsigned char *buffer, int offset, size_t count);
|
||||
struct mtd_partition *parts;
|
||||
unsigned int nr_parts;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -93,8 +93,6 @@
|
|||
#define INIT_FL4ECCRESULT_VAL 0x03FF03FF
|
||||
#define LOOP_TIMEOUT_MAX 0x00010000
|
||||
|
||||
#define mtd_to_flctl(mtd) container_of(mtd, struct sh_flctl, mtd)
|
||||
|
||||
struct sh_flctl {
|
||||
struct mtd_info mtd;
|
||||
struct nand_chip chip;
|
||||
|
|
@ -125,4 +123,9 @@ struct sh_flctl_platform_data {
|
|||
unsigned has_hwecc:1;
|
||||
};
|
||||
|
||||
static inline struct sh_flctl *mtd_to_flctl(struct mtd_info *mtdinfo)
|
||||
{
|
||||
return container_of(mtdinfo, struct sh_flctl, mtd);
|
||||
}
|
||||
|
||||
#endif /* __SH_FLCTL_H__ */
|
||||
|
|
|
|||
Loading…
Reference in a new issue