|
@@ -87,7 +87,7 @@ static int cfi_intelext_partition_fixup(struct mtd_info *, struct cfi_private **
|
|
|
|
|
|
static int cfi_intelext_point (struct mtd_info *mtd, loff_t from, size_t len,
|
|
|
size_t *retlen, void **virt, resource_size_t *phys);
|
|
|
-static void cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len);
|
|
|
+static int cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len);
|
|
|
|
|
|
static int chip_ready (struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
|
|
|
static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
|
|
@@ -1369,12 +1369,12 @@ static int cfi_intelext_point(struct mtd_info *mtd, loff_t from, size_t len,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
|
|
|
+static int cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
|
|
|
{
|
|
|
struct map_info *map = mtd->priv;
|
|
|
struct cfi_private *cfi = map->fldrv_priv;
|
|
|
unsigned long ofs;
|
|
|
- int chipnum;
|
|
|
+ int chipnum, err = 0;
|
|
|
|
|
|
/* Now unlock the chip(s) POINT state */
|
|
|
|
|
@@ -1382,7 +1382,7 @@ static void cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
|
|
|
chipnum = (from >> cfi->chipshift);
|
|
|
ofs = from - (chipnum << cfi->chipshift);
|
|
|
|
|
|
- while (len) {
|
|
|
+ while (len && !err) {
|
|
|
unsigned long thislen;
|
|
|
struct flchip *chip;
|
|
|
|
|
@@ -1400,8 +1400,10 @@ static void cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
|
|
|
chip->ref_point_counter--;
|
|
|
if(chip->ref_point_counter == 0)
|
|
|
chip->state = FL_READY;
|
|
|
- } else
|
|
|
- printk(KERN_ERR "%s: Warning: unpoint called on non pointed region\n", map->name); /* Should this give an error? */
|
|
|
+ } else {
|
|
|
+ printk(KERN_ERR "%s: Error: unpoint called on non pointed region\n", map->name);
|
|
|
+ err = -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
put_chip(map, chip, chip->start);
|
|
|
mutex_unlock(&chip->mutex);
|
|
@@ -1410,6 +1412,8 @@ static void cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
|
|
|
ofs = 0;
|
|
|
chipnum++;
|
|
|
}
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
|