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:
@@ -40,10 +40,7 @@ MODULE_PARM_DESC(debug, "Set Debug Level 0=quiet, 5=noisy");
|
||||
static const int debug = 0;
|
||||
#endif
|
||||
|
||||
#define err(format, arg...) printk(KERN_ERR "pcmciamtd: " format "\n" , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "pcmciamtd: " format "\n" , ## arg)
|
||||
#define warn(format, arg...) printk(KERN_WARNING "pcmciamtd: " format "\n" , ## arg)
|
||||
|
||||
|
||||
#define DRIVER_DESC "PCMCIA Flash memory card driver"
|
||||
|
||||
@@ -99,7 +96,9 @@ module_param(mem_type, int, 0);
|
||||
MODULE_PARM_DESC(mem_type, "Set Memory type (0=Flash, 1=RAM, 2=ROM, default=0)");
|
||||
|
||||
|
||||
/* read/write{8,16} copy_{from,to} routines with window remapping to access whole card */
|
||||
/* read/write{8,16} copy_{from,to} routines with window remapping
|
||||
* to access whole card
|
||||
*/
|
||||
static caddr_t remap_window(struct map_info *map, unsigned long to)
|
||||
{
|
||||
struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1;
|
||||
@@ -136,7 +135,7 @@ static map_word pcmcia_read8_remap(struct map_info *map, unsigned long ofs)
|
||||
return d;
|
||||
|
||||
d.x[0] = readb(addr);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%02x", ofs, addr, d.x[0]);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%02lx", ofs, addr, d.x[0]);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -151,7 +150,7 @@ static map_word pcmcia_read16_remap(struct map_info *map, unsigned long ofs)
|
||||
return d;
|
||||
|
||||
d.x[0] = readw(addr);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%04x", ofs, addr, d.x[0]);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%04lx", ofs, addr, d.x[0]);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -161,7 +160,7 @@ static void pcmcia_copy_from_remap(struct map_info *map, void *to, unsigned long
|
||||
struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1;
|
||||
unsigned long win_size = dev->win_size;
|
||||
|
||||
DEBUG(3, "to = %p from = %lu len = %u", to, from, len);
|
||||
DEBUG(3, "to = %p from = %lu len = %zd", to, from, len);
|
||||
while(len) {
|
||||
int toread = win_size - (from & (win_size-1));
|
||||
caddr_t addr;
|
||||
@@ -189,7 +188,7 @@ static void pcmcia_write8_remap(struct map_info *map, map_word d, unsigned long
|
||||
if(!addr)
|
||||
return;
|
||||
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%02x", adr, addr, d.x[0]);
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%02lx", adr, addr, d.x[0]);
|
||||
writeb(d.x[0], addr);
|
||||
}
|
||||
|
||||
@@ -200,7 +199,7 @@ static void pcmcia_write16_remap(struct map_info *map, map_word d, unsigned long
|
||||
if(!addr)
|
||||
return;
|
||||
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%04x", adr, addr, d.x[0]);
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%04lx", adr, addr, d.x[0]);
|
||||
writew(d.x[0], addr);
|
||||
}
|
||||
|
||||
@@ -210,7 +209,7 @@ static void pcmcia_copy_to_remap(struct map_info *map, unsigned long to, const v
|
||||
struct pcmciamtd_dev *dev = (struct pcmciamtd_dev *)map->map_priv_1;
|
||||
unsigned long win_size = dev->win_size;
|
||||
|
||||
DEBUG(3, "to = %lu from = %p len = %u", to, from, len);
|
||||
DEBUG(3, "to = %lu from = %p len = %zd", to, from, len);
|
||||
while(len) {
|
||||
int towrite = win_size - (to & (win_size-1));
|
||||
caddr_t addr;
|
||||
@@ -244,7 +243,8 @@ static map_word pcmcia_read8(struct map_info *map, unsigned long ofs)
|
||||
return d;
|
||||
|
||||
d.x[0] = readb(win_base + ofs);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%02x", ofs, win_base + ofs, d.x[0]);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%02lx",
|
||||
ofs, win_base + ofs, d.x[0]);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -258,7 +258,8 @@ static map_word pcmcia_read16(struct map_info *map, unsigned long ofs)
|
||||
return d;
|
||||
|
||||
d.x[0] = readw(win_base + ofs);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%04x", ofs, win_base + ofs, d.x[0]);
|
||||
DEBUG(3, "ofs = 0x%08lx (%p) data = 0x%04lx",
|
||||
ofs, win_base + ofs, d.x[0]);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -270,32 +271,34 @@ static void pcmcia_copy_from(struct map_info *map, void *to, unsigned long from,
|
||||
if(DEV_REMOVED(map))
|
||||
return;
|
||||
|
||||
DEBUG(3, "to = %p from = %lu len = %u", to, from, len);
|
||||
DEBUG(3, "to = %p from = %lu len = %zd", to, from, len);
|
||||
memcpy_fromio(to, win_base + from, len);
|
||||
}
|
||||
|
||||
|
||||
static void pcmcia_write8(struct map_info *map, u8 d, unsigned long adr)
|
||||
static void pcmcia_write8(struct map_info *map, map_word d, unsigned long adr)
|
||||
{
|
||||
caddr_t win_base = (caddr_t)map->map_priv_2;
|
||||
|
||||
if(DEV_REMOVED(map))
|
||||
return;
|
||||
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%02x", adr, win_base + adr, d);
|
||||
writeb(d, win_base + adr);
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%02lx",
|
||||
adr, win_base + adr, d.x[0]);
|
||||
writeb(d.x[0], win_base + adr);
|
||||
}
|
||||
|
||||
|
||||
static void pcmcia_write16(struct map_info *map, u16 d, unsigned long adr)
|
||||
static void pcmcia_write16(struct map_info *map, map_word d, unsigned long adr)
|
||||
{
|
||||
caddr_t win_base = (caddr_t)map->map_priv_2;
|
||||
|
||||
if(DEV_REMOVED(map))
|
||||
return;
|
||||
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%04x", adr, win_base + adr, d);
|
||||
writew(d, win_base + adr);
|
||||
DEBUG(3, "adr = 0x%08lx (%p) data = 0x%04lx",
|
||||
adr, win_base + adr, d.x[0]);
|
||||
writew(d.x[0], win_base + adr);
|
||||
}
|
||||
|
||||
|
||||
@@ -306,7 +309,7 @@ static void pcmcia_copy_to(struct map_info *map, unsigned long to, const void *f
|
||||
if(DEV_REMOVED(map))
|
||||
return;
|
||||
|
||||
DEBUG(3, "to = %lu from = %p len = %u", to, from, len);
|
||||
DEBUG(3, "to = %lu from = %p len = %zd", to, from, len);
|
||||
memcpy_toio(win_base + to, from, len);
|
||||
}
|
||||
|
||||
@@ -375,7 +378,8 @@ static int pcmciamtd_cistpl_jedec(struct pcmcia_device *p_dev,
|
||||
if (!pcmcia_parse_tuple(tuple, &parse)) {
|
||||
cistpl_jedec_t *t = &parse.jedec;
|
||||
for (i = 0; i < t->nid; i++)
|
||||
DEBUG(2, "JEDEC: 0x%02x 0x%02x", t->id[i].mfr, t->id[i].info);
|
||||
DEBUG(2, "JEDEC: 0x%02x 0x%02x",
|
||||
t->id[i].mfr, t->id[i].info);
|
||||
}
|
||||
return -ENOSPC;
|
||||
}
|
||||
@@ -431,7 +435,7 @@ static int pcmciamtd_cistpl_geo(struct pcmcia_device *p_dev,
|
||||
}
|
||||
|
||||
|
||||
static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link, int *new_name)
|
||||
static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *p_dev, int *new_name)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -476,7 +480,8 @@ static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link,
|
||||
}
|
||||
|
||||
DEBUG(1, "Device: Size: %lu Width:%d Name: %s",
|
||||
dev->pcmcia_map.size, dev->pcmcia_map.bankwidth << 3, dev->mtd_name);
|
||||
dev->pcmcia_map.size,
|
||||
dev->pcmcia_map.bankwidth << 3, dev->mtd_name);
|
||||
}
|
||||
|
||||
|
||||
@@ -489,7 +494,6 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct pcmciamtd_dev *dev = link->priv;
|
||||
struct mtd_info *mtd = NULL;
|
||||
cs_status_t status;
|
||||
win_req_t req;
|
||||
int ret;
|
||||
int i;
|
||||
@@ -513,9 +517,11 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
if(setvpp == 1)
|
||||
dev->pcmcia_map.set_vpp = pcmciamtd_set_vpp;
|
||||
|
||||
/* Request a memory window for PCMCIA. Some architeures can map windows upto the maximum
|
||||
that PCMCIA can support (64MiB) - this is ideal and we aim for a window the size of the
|
||||
whole card - otherwise we try smaller windows until we succeed */
|
||||
/* Request a memory window for PCMCIA. Some architeures can map windows
|
||||
* upto the maximum that PCMCIA can support (64MiB) - this is ideal and
|
||||
* we aim for a window the size of the whole card - otherwise we try
|
||||
* smaller windows until we succeed
|
||||
*/
|
||||
|
||||
req.Attributes = WIN_MEMORY_TYPE_CM | WIN_ENABLE;
|
||||
req.Attributes |= (dev->pcmcia_map.bankwidth == 1) ? WIN_DATA_WIDTH_8 : WIN_DATA_WIDTH_16;
|
||||
@@ -543,7 +549,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
DEBUG(2, "dev->win_size = %d", dev->win_size);
|
||||
|
||||
if(!dev->win_size) {
|
||||
err("Cant allocate memory window");
|
||||
dev_err(&dev->p_dev->dev, "Cannot allocate memory window\n");
|
||||
pcmciamtd_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -553,7 +559,8 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
DEBUG(2, "window handle = 0x%8.8lx", (unsigned long)link->win);
|
||||
dev->win_base = ioremap(req.Base, req.Size);
|
||||
if(!dev->win_base) {
|
||||
err("ioremap(%lu, %u) failed", req.Base, req.Size);
|
||||
dev_err(&dev->p_dev->dev, "ioremap(%lu, %u) failed\n",
|
||||
req.Base, req.Size);
|
||||
pcmciamtd_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -564,7 +571,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
dev->pcmcia_map.map_priv_1 = (unsigned long)dev;
|
||||
dev->pcmcia_map.map_priv_2 = (unsigned long)link->win;
|
||||
|
||||
dev->vpp = (vpp) ? vpp : link->socket.socket.Vpp;
|
||||
dev->vpp = (vpp) ? vpp : link->socket->socket.Vpp;
|
||||
link->conf.Attributes = 0;
|
||||
if(setvpp == 2) {
|
||||
link->conf.Vpp = dev->vpp;
|
||||
@@ -600,7 +607,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
}
|
||||
|
||||
if(!mtd) {
|
||||
DEBUG(1, "Cant find an MTD");
|
||||
DEBUG(1, "Can not find an MTD");
|
||||
pcmciamtd_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -611,8 +618,9 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
if(new_name) {
|
||||
int size = 0;
|
||||
char unit = ' ';
|
||||
/* Since we are using a default name, make it better by adding in the
|
||||
size */
|
||||
/* Since we are using a default name, make it better by adding
|
||||
* in the size
|
||||
*/
|
||||
if(mtd->size < 1048576) { /* <1MiB in size, show size in KiB */
|
||||
size = mtd->size >> 10;
|
||||
unit = 'K';
|
||||
@@ -642,15 +650,15 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
if(add_mtd_device(mtd)) {
|
||||
map_destroy(mtd);
|
||||
dev->mtd_info = NULL;
|
||||
err("Couldnt register MTD device");
|
||||
dev_err(&dev->p_dev->dev,
|
||||
"Could not register the MTD device\n");
|
||||
pcmciamtd_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
info("mtd%d: %s", mtd->index, mtd->name);
|
||||
dev_info(&dev->p_dev->dev, "mtd%d: %s\n", mtd->index, mtd->name);
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
err("CS Error, exiting");
|
||||
dev_err(&dev->p_dev->dev, "CS Error, exiting\n");
|
||||
pcmciamtd_release(link);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -689,8 +697,9 @@ static void pcmciamtd_detach(struct pcmcia_device *link)
|
||||
|
||||
if(dev->mtd_info) {
|
||||
del_mtd_device(dev->mtd_info);
|
||||
dev_info(&dev->p_dev->dev, "mtd%d: Removing\n",
|
||||
dev->mtd_info->index);
|
||||
map_destroy(dev->mtd_info);
|
||||
info("mtd%d: Removed", dev->mtd_info->index);
|
||||
}
|
||||
|
||||
pcmciamtd_release(link);
|
||||
@@ -734,8 +743,11 @@ static struct pcmcia_device_id pcmciamtd_ids[] = {
|
||||
PCMCIA_DEVICE_PROD_ID12("intel", "VALUE SERIES 100 ", 0x40ade711, 0xdf8506d8),
|
||||
PCMCIA_DEVICE_PROD_ID12("KINGMAX TECHNOLOGY INC.", "SRAM 256K Bytes", 0x54d0c69c, 0xad12c29c),
|
||||
PCMCIA_DEVICE_PROD_ID12("Maxtor", "MAXFL MobileMax Flash Memory Card", 0xb68968c8, 0x2dfb47b0),
|
||||
PCMCIA_DEVICE_PROD_ID123("M-Systems", "M-SYS Flash Memory Card", "(c) M-Systems", 0x7ed2ad87, 0x675dc3fb, 0x7aef3965),
|
||||
PCMCIA_DEVICE_PROD_ID12("PRETEC", " 2MB SRAM CARD", 0xebf91155, 0x805360ca),
|
||||
PCMCIA_DEVICE_PROD_ID12("SEIKO EPSON", "WWB101EN20", 0xf9876baf, 0xad0b207b),
|
||||
PCMCIA_DEVICE_PROD_ID12("SEIKO EPSON", "WWB513EN20", 0xf9876baf, 0xe8d884ad),
|
||||
PCMCIA_DEVICE_PROD_ID12("SMART Modular Technologies", " 4MB FLASH Card", 0x96fd8277, 0x737a5b05),
|
||||
PCMCIA_DEVICE_PROD_ID12("Starfish, Inc.", "REX-3000", 0x05ddca47, 0xe7d67bca),
|
||||
PCMCIA_DEVICE_PROD_ID12("Starfish, Inc.", "REX-4100", 0x05ddca47, 0x7bc32944),
|
||||
/* the following was commented out in pcmcia-cs-3.2.7 */
|
||||
|
Reference in New Issue
Block a user