mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge git://git.infradead.org/mtd-2.6
* git://git.infradead.org/mtd-2.6: Remove accidentally-added include/linux/utsrelease.h Revert "[MTD] blkdev helper code: fix printk format warning" [MTD] Add SSFDC (SmartMedia) read-only translation layer [MTD] pmc551 pci cleanup [MTD] pmc551 use kzalloc [MTD] pmc551 whitespace cleanup [MTD] Remove iq80310 map driver [MTD NAND] Fix in typo ndfc.c causing wrong ECC layout [MTD] physmap: add power management support ioremap balanced with iounmap for drivers/mtd subsystem [MTD] Switch to pci_get_device and do ref counting [MTD] blkdev helper code: fix printk format warning [MTD] Fix ixp4xx partition parsing. [JFFS2] Remove unneeded ifdefs from jffs2_fs_i.h [MTD NAND] Remove old code in au1550nd.c [MTD] Unlock NOR flash automatically where necessary
This commit is contained in:
@@ -263,6 +263,14 @@ config RFD_FTL
|
||||
|
||||
http://www.gensw.com/pages/prod/bios/rfd.htm
|
||||
|
||||
config SSFDC
|
||||
bool "NAND SSFDC (SmartMedia) read only translation layer"
|
||||
depends on MTD
|
||||
default n
|
||||
help
|
||||
This enables read only access to SmartMedia formatted NAND
|
||||
flash. You can mount it with FAT file system.
|
||||
|
||||
source "drivers/mtd/chips/Kconfig"
|
||||
|
||||
source "drivers/mtd/maps/Kconfig"
|
||||
|
||||
@@ -21,6 +21,7 @@ obj-$(CONFIG_FTL) += ftl.o mtd_blkdevs.o
|
||||
obj-$(CONFIG_NFTL) += nftl.o mtd_blkdevs.o
|
||||
obj-$(CONFIG_INFTL) += inftl.o mtd_blkdevs.o
|
||||
obj-$(CONFIG_RFD_FTL) += rfd_ftl.o mtd_blkdevs.o
|
||||
obj-$(CONFIG_SSFDC) += ssfdc.o mtd_blkdevs.o
|
||||
|
||||
nftl-objs := nftlcore.o nftlmount.o
|
||||
inftl-objs := inftlcore.o inftlmount.o
|
||||
|
||||
@@ -212,6 +212,7 @@ static void fixup_use_atmel_lock(struct mtd_info *mtd, void *param)
|
||||
{
|
||||
mtd->lock = cfi_atmel_lock;
|
||||
mtd->unlock = cfi_atmel_unlock;
|
||||
mtd->flags |= MTD_STUPID_LOCK;
|
||||
}
|
||||
|
||||
static struct cfi_fixup cfi_fixup_table[] = {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -447,14 +447,6 @@ config MTD_DC21285
|
||||
21285 bridge used with Intel's StrongARM processors. More info at
|
||||
<http://www.intel.com/design/bridge/docs/21285_documentation.htm>.
|
||||
|
||||
config MTD_IQ80310
|
||||
tristate "CFI Flash device mapped on the XScale IQ80310 board"
|
||||
depends on MTD_CFI && ARCH_IQ80310
|
||||
help
|
||||
This enables access routines for the flash chips on the Intel XScale
|
||||
IQ80310 evaluation board. If you have one of these boards and would
|
||||
like to use the flash chips on it, say 'Y'.
|
||||
|
||||
config MTD_IXP4XX
|
||||
tristate "CFI Flash device mapped on Intel IXP4xx based systems"
|
||||
depends on MTD_CFI && MTD_COMPLEX_MAPPINGS && ARCH_IXP4XX
|
||||
|
||||
@@ -15,7 +15,6 @@ obj-$(CONFIG_MTD_CFI_FLAGADM) += cfi_flagadm.o
|
||||
obj-$(CONFIG_MTD_CSTM_MIPS_IXX) += cstm_mips_ixx.o
|
||||
obj-$(CONFIG_MTD_DC21285) += dc21285.o
|
||||
obj-$(CONFIG_MTD_DILNETPC) += dilnetpc.o
|
||||
obj-$(CONFIG_MTD_IQ80310) += iq80310.o
|
||||
obj-$(CONFIG_MTD_L440GX) += l440gx.o
|
||||
obj-$(CONFIG_MTD_AMD76XROM) += amd76xrom.o
|
||||
obj-$(CONFIG_MTD_ICHXROM) += ichxrom.o
|
||||
|
||||
@@ -57,6 +57,7 @@ static void amd76xrom_cleanup(struct amd76xrom_window *window)
|
||||
/* Disable writes through the rom window */
|
||||
pci_read_config_byte(window->pdev, 0x40, &byte);
|
||||
pci_write_config_byte(window->pdev, 0x40, byte & ~1);
|
||||
pci_dev_put(window->pdev);
|
||||
}
|
||||
|
||||
/* Free all of the mtd devices */
|
||||
@@ -91,7 +92,7 @@ static int __devinit amd76xrom_init_one (struct pci_dev *pdev,
|
||||
struct amd76xrom_map_info *map = NULL;
|
||||
unsigned long map_top;
|
||||
|
||||
/* Remember the pci dev I find the window in */
|
||||
/* Remember the pci dev I find the window in - already have a ref */
|
||||
window->pdev = pdev;
|
||||
|
||||
/* Assume the rom window is properly setup, and find it's size */
|
||||
@@ -302,7 +303,7 @@ static int __init init_amd76xrom(void)
|
||||
struct pci_device_id *id;
|
||||
pdev = NULL;
|
||||
for(id = amd76xrom_pci_tbl; id->vendor; id++) {
|
||||
pdev = pci_find_device(id->vendor, id->device, NULL);
|
||||
pdev = pci_get_device(id->vendor, id->device, NULL);
|
||||
if (pdev) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -96,6 +96,8 @@ static struct mtd_partition arctic_partitions[PARTITIONS] = {
|
||||
static int __init
|
||||
init_arctic_mtd(void)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
printk("%s: 0x%08x at 0x%08x\n", NAME, SIZE, PADDR);
|
||||
|
||||
arctic_mtd_map.virt = ioremap(PADDR, SIZE);
|
||||
@@ -109,12 +111,20 @@ init_arctic_mtd(void)
|
||||
printk("%s: probing %d-bit flash bus\n", NAME, BUSWIDTH * 8);
|
||||
arctic_mtd = do_map_probe("cfi_probe", &arctic_mtd_map);
|
||||
|
||||
if (!arctic_mtd)
|
||||
if (!arctic_mtd) {
|
||||
iounmap((void *) arctic_mtd_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
arctic_mtd->owner = THIS_MODULE;
|
||||
|
||||
return add_mtd_partitions(arctic_mtd, arctic_partitions, PARTITIONS);
|
||||
err = add_mtd_partitions(arctic_mtd, arctic_partitions, PARTITIONS);
|
||||
if (err) {
|
||||
printk("%s: add_mtd_partitions failed\n", NAME);
|
||||
iounmap((void *) arctic_mtd_map.virt);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit
|
||||
|
||||
@@ -72,6 +72,8 @@ static struct mtd_partition beech_partitions[2] = {
|
||||
static int __init
|
||||
init_beech_mtd(void)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
printk("%s: 0x%08x at 0x%08x\n", NAME, SIZE, PADDR);
|
||||
|
||||
beech_mtd_map.virt = ioremap(PADDR, SIZE);
|
||||
@@ -86,12 +88,20 @@ init_beech_mtd(void)
|
||||
printk("%s: probing %d-bit flash bus\n", NAME, BUSWIDTH * 8);
|
||||
beech_mtd = do_map_probe("cfi_probe", &beech_mtd_map);
|
||||
|
||||
if (!beech_mtd)
|
||||
if (!beech_mtd) {
|
||||
iounmap((void *) beech_mtd_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
beech_mtd->owner = THIS_MODULE;
|
||||
|
||||
return add_mtd_partitions(beech_mtd, beech_partitions, 2);
|
||||
err = add_mtd_partitions(beech_mtd, beech_partitions, 2);
|
||||
if (err) {
|
||||
printk("%s: add_mtd_partitions failed\n", NAME);
|
||||
iounmap((void *) beech_mtd_map.virt);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit
|
||||
|
||||
@@ -171,7 +171,14 @@ int __init init_cstm_mips_ixx(void)
|
||||
cstm_mips_ixx_map[i].phys = cstm_mips_ixx_board_desc[i].window_addr;
|
||||
cstm_mips_ixx_map[i].virt = ioremap(cstm_mips_ixx_board_desc[i].window_addr, cstm_mips_ixx_board_desc[i].window_size);
|
||||
if (!cstm_mips_ixx_map[i].virt) {
|
||||
int j = 0;
|
||||
printk(KERN_WARNING "Failed to ioremap\n");
|
||||
for (j = 0; j < i; j++) {
|
||||
if (cstm_mips_ixx_map[j].virt) {
|
||||
iounmap((void *)cstm_mips_ixx_map[j].virt);
|
||||
cstm_mips_ixx_map[j].virt = 0;
|
||||
}
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
cstm_mips_ixx_map[i].name = cstm_mips_ixx_board_desc[i].name;
|
||||
@@ -204,8 +211,15 @@ int __init init_cstm_mips_ixx(void)
|
||||
cstm_mips_ixx_map[i].map_priv_2 = (unsigned long)mymtd;
|
||||
add_mtd_partitions(mymtd, parts, cstm_mips_ixx_board_desc[i].num_partitions);
|
||||
}
|
||||
else
|
||||
return -ENXIO;
|
||||
else {
|
||||
for (i = 0; i < PHYSMAP_NUMBER; i++) {
|
||||
if (cstm_mips_ixx_map[i].virt) {
|
||||
iounmap((void *)cstm_mips_ixx_map[i].virt);
|
||||
cstm_mips_ixx_map[i].virt = 0;
|
||||
}
|
||||
}
|
||||
return -ENXIO;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -108,6 +108,7 @@ int __init init_ebony(void)
|
||||
ARRAY_SIZE(ebony_small_partitions));
|
||||
} else {
|
||||
printk("map probe failed for flash\n");
|
||||
iounmap(ebony_small_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -117,6 +118,7 @@ int __init init_ebony(void)
|
||||
|
||||
if (!ebony_large_map.virt) {
|
||||
printk("Failed to ioremap flash\n");
|
||||
iounmap(ebony_small_map.virt);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@@ -129,6 +131,8 @@ int __init init_ebony(void)
|
||||
ARRAY_SIZE(ebony_large_partitions));
|
||||
} else {
|
||||
printk("map probe failed for flash\n");
|
||||
iounmap(ebony_small_map.virt);
|
||||
iounmap(ebony_large_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
|
||||
@@ -218,8 +218,11 @@ int __init init_fortunet(void)
|
||||
map_regions[ix].map_info.size);
|
||||
if(!map_regions[ix].map_info.virt)
|
||||
{
|
||||
int j = 0;
|
||||
printk(MTD_FORTUNET_PK "%s flash failed to ioremap!\n",
|
||||
map_regions[ix].map_info.name);
|
||||
for (j = 0 ; j < ix; j++)
|
||||
iounmap(map_regions[j].map_info.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
simple_map_init(&map_regions[ix].map_info);
|
||||
|
||||
@@ -61,6 +61,7 @@ static void ichxrom_cleanup(struct ichxrom_window *window)
|
||||
/* Disable writes through the rom window */
|
||||
pci_read_config_word(window->pdev, BIOS_CNTL, &word);
|
||||
pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
|
||||
pci_dev_put(window->pdev);
|
||||
|
||||
/* Free all of the mtd devices */
|
||||
list_for_each_entry_safe(map, scratch, &window->maps, list) {
|
||||
@@ -355,7 +356,7 @@ static int __init init_ichxrom(void)
|
||||
|
||||
pdev = NULL;
|
||||
for (id = ichxrom_pci_tbl; id->vendor; id++) {
|
||||
pdev = pci_find_device(id->vendor, id->device, NULL);
|
||||
pdev = pci_get_device(id->vendor, id->device, NULL);
|
||||
if (pdev) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* $Id: iq80310.c,v 1.21 2005/11/07 11:14:27 gleixner Exp $
|
||||
*
|
||||
* Mapping for the Intel XScale IQ80310 evaluation board
|
||||
*
|
||||
* Author: Nicolas Pitre
|
||||
* Copyright: (C) 2001 MontaVista Software Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
|
||||
#define WINDOW_ADDR 0
|
||||
#define WINDOW_SIZE 8*1024*1024
|
||||
#define BUSWIDTH 1
|
||||
|
||||
static struct mtd_info *mymtd;
|
||||
|
||||
static struct map_info iq80310_map = {
|
||||
.name = "IQ80310 flash",
|
||||
.size = WINDOW_SIZE,
|
||||
.bankwidth = BUSWIDTH,
|
||||
.phys = WINDOW_ADDR
|
||||
};
|
||||
|
||||
static struct mtd_partition iq80310_partitions[4] = {
|
||||
{
|
||||
.name = "Firmware",
|
||||
.size = 0x00080000,
|
||||
.offset = 0,
|
||||
.mask_flags = MTD_WRITEABLE /* force read-only */
|
||||
},{
|
||||
.name = "Kernel",
|
||||
.size = 0x000a0000,
|
||||
.offset = 0x00080000,
|
||||
},{
|
||||
.name = "Filesystem",
|
||||
.size = 0x00600000,
|
||||
.offset = 0x00120000
|
||||
},{
|
||||
.name = "RedBoot",
|
||||
.size = 0x000e0000,
|
||||
.offset = 0x00720000,
|
||||
.mask_flags = MTD_WRITEABLE
|
||||
}
|
||||
};
|
||||
|
||||
static struct mtd_info *mymtd;
|
||||
static struct mtd_partition *parsed_parts;
|
||||
static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
|
||||
|
||||
static int __init init_iq80310(void)
|
||||
{
|
||||
struct mtd_partition *parts;
|
||||
int nb_parts = 0;
|
||||
int parsed_nr_parts = 0;
|
||||
int ret;
|
||||
|
||||
iq80310_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);
|
||||
if (!iq80310_map.virt) {
|
||||
printk("Failed to ioremap\n");
|
||||
return -EIO;
|
||||
}
|
||||
simple_map_init(&iq80310_map);
|
||||
|
||||
mymtd = do_map_probe("cfi_probe", &iq80310_map);
|
||||
if (!mymtd) {
|
||||
iounmap((void *)iq80310_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0);
|
||||
|
||||
if (ret > 0)
|
||||
parsed_nr_parts = ret;
|
||||
|
||||
if (parsed_nr_parts > 0) {
|
||||
parts = parsed_parts;
|
||||
nb_parts = parsed_nr_parts;
|
||||
} else {
|
||||
parts = iq80310_partitions;
|
||||
nb_parts = ARRAY_SIZE(iq80310_partitions);
|
||||
}
|
||||
add_mtd_partitions(mymtd, parts, nb_parts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit cleanup_iq80310(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
map_destroy(mymtd);
|
||||
kfree(parsed_parts);
|
||||
}
|
||||
if (iq80310_map.virt)
|
||||
iounmap((void *)iq80310_map.virt);
|
||||
}
|
||||
|
||||
module_init(init_iq80310);
|
||||
module_exit(cleanup_iq80310);
|
||||
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Nicolas Pitre <nico@cam.org>");
|
||||
MODULE_DESCRIPTION("MTD map driver for Intel XScale IQ80310 evaluation board");
|
||||
@@ -253,7 +253,7 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
||||
/* Use the fast version */
|
||||
info->map.write = ixp4xx_write16,
|
||||
|
||||
err = parse_mtd_partitions(info->mtd, probes, &info->partitions, 0);
|
||||
err = parse_mtd_partitions(info->mtd, probes, &info->partitions, dev->resource->start);
|
||||
if (err > 0) {
|
||||
err = add_mtd_partitions(info->mtd, info->partitions, err);
|
||||
if(err)
|
||||
|
||||
@@ -61,14 +61,17 @@ static int __init init_l440gx(void)
|
||||
struct resource *pm_iobase;
|
||||
__u16 word;
|
||||
|
||||
dev = pci_find_device(PCI_VENDOR_ID_INTEL,
|
||||
dev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_82371AB_0, NULL);
|
||||
|
||||
pm_dev = pci_find_device(PCI_VENDOR_ID_INTEL,
|
||||
pm_dev = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||
PCI_DEVICE_ID_INTEL_82371AB_3, NULL);
|
||||
|
||||
pci_dev_put(dev);
|
||||
|
||||
if (!dev || !pm_dev) {
|
||||
printk(KERN_NOTICE "L440GX flash mapping: failed to find PIIX4 ISA bridge, cannot continue\n");
|
||||
pci_dev_put(pm_dev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@@ -76,6 +79,7 @@ static int __init init_l440gx(void)
|
||||
|
||||
if (!l440gx_map.virt) {
|
||||
printk(KERN_WARNING "Failed to ioremap L440GX flash region\n");
|
||||
pci_dev_put(pm_dev);
|
||||
return -ENOMEM;
|
||||
}
|
||||
simple_map_init(&l440gx_map);
|
||||
@@ -99,8 +103,12 @@ static int __init init_l440gx(void)
|
||||
pm_iobase->start += iobase & ~1;
|
||||
pm_iobase->end += iobase & ~1;
|
||||
|
||||
pci_dev_put(pm_dev);
|
||||
|
||||
/* Allocate the resource region */
|
||||
if (pci_assign_resource(pm_dev, PIIXE_IOBASE_RESOURCE) != 0) {
|
||||
pci_dev_put(dev);
|
||||
pci_dev_put(pm_dev);
|
||||
printk(KERN_WARNING "Could not allocate pm iobase resource\n");
|
||||
iounmap(l440gx_map.virt);
|
||||
return -ENXIO;
|
||||
|
||||
@@ -79,6 +79,7 @@ static int __init init_lasat(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
iounmap(lasat_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -89,6 +90,7 @@ static void __exit cleanup_lasat(void)
|
||||
map_destroy(lasat_mtd);
|
||||
}
|
||||
if (lasat_map.virt) {
|
||||
iounmap(lasat_map.virt);
|
||||
lasat_map.virt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,6 +277,7 @@ int __init nettel_init(void)
|
||||
nettel_amd_map.virt = ioremap_nocache(amdaddr, maxsize);
|
||||
if (!nettel_amd_map.virt) {
|
||||
printk("SNAPGEAR: failed to ioremap() BOOTCS\n");
|
||||
iounmap(nettel_mmcrp);
|
||||
return(-EIO);
|
||||
}
|
||||
simple_map_init(&nettel_amd_map);
|
||||
@@ -337,7 +338,8 @@ int __init nettel_init(void)
|
||||
nettel_amd_map.virt = NULL;
|
||||
#else
|
||||
/* Only AMD flash supported */
|
||||
return(-ENXIO);
|
||||
rc = -ENXIO;
|
||||
goto out_unmap2;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -361,14 +363,15 @@ int __init nettel_init(void)
|
||||
nettel_intel_map.virt = ioremap_nocache(intel0addr, maxsize);
|
||||
if (!nettel_intel_map.virt) {
|
||||
printk("SNAPGEAR: failed to ioremap() ROMCS1\n");
|
||||
return(-EIO);
|
||||
rc = -EIO;
|
||||
goto out_unmap2;
|
||||
}
|
||||
simple_map_init(&nettel_intel_map);
|
||||
|
||||
intel_mtd = do_map_probe("cfi_probe", &nettel_intel_map);
|
||||
if (!intel_mtd) {
|
||||
iounmap(nettel_intel_map.virt);
|
||||
return(-ENXIO);
|
||||
rc = -ENXIO;
|
||||
goto out_unmap1;
|
||||
}
|
||||
|
||||
/* Set PAR to the detected size */
|
||||
@@ -394,13 +397,14 @@ int __init nettel_init(void)
|
||||
nettel_intel_map.virt = ioremap_nocache(intel0addr, maxsize);
|
||||
if (!nettel_intel_map.virt) {
|
||||
printk("SNAPGEAR: failed to ioremap() ROMCS1/2\n");
|
||||
return(-EIO);
|
||||
rc = -EIO;
|
||||
goto out_unmap2;
|
||||
}
|
||||
|
||||
intel_mtd = do_map_probe("cfi_probe", &nettel_intel_map);
|
||||
if (! intel_mtd) {
|
||||
iounmap((void *) nettel_intel_map.virt);
|
||||
return(-ENXIO);
|
||||
rc = -ENXIO;
|
||||
goto out_unmap1;
|
||||
}
|
||||
|
||||
intel1size = intel_mtd->size - intel0size;
|
||||
@@ -456,6 +460,18 @@ int __init nettel_init(void)
|
||||
#endif
|
||||
|
||||
return(rc);
|
||||
|
||||
#ifdef CONFIG_MTD_CFI_INTELEXT
|
||||
out_unmap1:
|
||||
iounmap((void *) nettel_intel_map.virt);
|
||||
#endif
|
||||
|
||||
out_unmap2:
|
||||
iounmap(nettel_mmcrp);
|
||||
iounmap(nettel_amd_map.virt);
|
||||
|
||||
return(rc);
|
||||
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
@@ -469,6 +485,10 @@ void __exit nettel_cleanup(void)
|
||||
del_mtd_partitions(amd_mtd);
|
||||
map_destroy(amd_mtd);
|
||||
}
|
||||
if (nettel_mmcrp) {
|
||||
iounmap(nettel_mmcrp);
|
||||
nettel_mmcrp = NULL;
|
||||
}
|
||||
if (nettel_amd_map.virt) {
|
||||
iounmap(nettel_amd_map.virt);
|
||||
nettel_amd_map.virt = NULL;
|
||||
|
||||
@@ -97,6 +97,7 @@ int __init init_ocotea(void)
|
||||
ARRAY_SIZE(ocotea_small_partitions));
|
||||
} else {
|
||||
printk("map probe failed for flash\n");
|
||||
iounmap(ocotea_small_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -106,6 +107,7 @@ int __init init_ocotea(void)
|
||||
|
||||
if (!ocotea_large_map.virt) {
|
||||
printk("Failed to ioremap flash\n");
|
||||
iounmap(ocotea_small_map.virt);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@@ -118,6 +120,8 @@ int __init init_ocotea(void)
|
||||
ARRAY_SIZE(ocotea_large_partitions));
|
||||
} else {
|
||||
printk("map probe failed for flash\n");
|
||||
iounmap(ocotea_small_map.virt);
|
||||
iounmap(ocotea_large_map.virt);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
|
||||
@@ -602,6 +602,10 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
ret = pcmcia_request_configuration(link, &link->conf);
|
||||
if(ret != CS_SUCCESS) {
|
||||
cs_error(link, RequestConfiguration, ret);
|
||||
if (dev->win_base) {
|
||||
iounmap(dev->win_base);
|
||||
dev->win_base = NULL;
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user