Merge "Move TEMP_STACK to STACK_BASE for barebox"
diff --git a/drivers/mtd/nand/nand-bb.c b/drivers/mtd/nand/nand-bb.c
index dbfb8e3..73ccab3 100644
--- a/drivers/mtd/nand/nand-bb.c
+++ b/drivers/mtd/nand/nand-bb.c
@@ -45,6 +45,7 @@
size_t raw_size;
size_t size;
off_t offset;
+ unsigned long flags;
void *writebuf;
struct cdev cdev;
@@ -164,13 +165,14 @@
}
#endif
-static int nand_bb_open(struct cdev *cdev)
+static int nand_bb_open(struct cdev *cdev, unsigned long flags)
{
struct nand_bb *bb = cdev->priv;
if (bb->open)
return -EBUSY;
+ bb->flags = flags;
bb->open = 1;
bb->offset = 0;
bb->needs_write = 0;
@@ -211,10 +213,43 @@
return 0;
}
+static off_t nand_bb_lseek(struct cdev *cdev, off_t __offset)
+{
+ struct nand_bb *bb = cdev->priv;
+ unsigned long raw_pos = 0;
+ uint32_t offset = __offset;
+ int ret;
+
+ /* lseek only in readonly mode */
+ if (bb->flags & O_ACCMODE)
+ return -ENOSYS;
+ while (raw_pos < bb->raw_size) {
+ off_t now = min(offset, bb->info.erasesize);
+
+ ret = cdev_ioctl(bb->cdev_parent, MEMGETBADBLOCK, (void *)raw_pos);
+ if (ret < 0)
+ return ret;
+ if (!ret) {
+ offset -= now;
+ raw_pos += now;
+ } else {
+ raw_pos += bb->info.erasesize;
+ }
+
+ if (!offset) {
+ bb->offset = raw_pos;
+ return __offset;
+ }
+ }
+
+ return -EINVAL;
+}
+
static struct file_operations nand_bb_ops = {
.open = nand_bb_open,
.close = nand_bb_close,
.read = nand_bb_read,
+ .lseek = nand_bb_lseek,
#ifdef CONFIG_NAND_WRITE
.write = nand_bb_write,
.erase = nand_bb_erase,
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index eaef8a8..58438a5 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -81,7 +81,7 @@
return size;
}
-static int ubi_volume_cdev_open(struct cdev *cdev)
+static int ubi_volume_cdev_open(struct cdev *cdev, unsigned long flags)
{
struct ubi_volume_cdev_priv *priv = cdev->priv;
diff --git a/drivers/net/comcerto/c2000_eth.c b/drivers/net/comcerto/c2000_eth.c
index 980138f..cbd046e 100644
--- a/drivers/net/comcerto/c2000_eth.c
+++ b/drivers/net/comcerto/c2000_eth.c
@@ -565,8 +565,6 @@
struct c2000_eth_dev *priv = (struct c2000_eth_dev *)edev->priv;
struct pfe *pfe = &priv->pfe;
- pr_info("%s\n", __func__);
-
pfe_remove(pfe);
free(edev);
diff --git a/drivers/net/comcerto/pfe_firmware.c b/drivers/net/comcerto/pfe_firmware.c
index 08a19b2..0266d6e 100644
--- a/drivers/net/comcerto/pfe_firmware.c
+++ b/drivers/net/comcerto/pfe_firmware.c
@@ -161,8 +161,6 @@
*/
void pfe_firmware_exit(void)
{
- printk(KERN_INFO "%s\n", __func__);
-
class_disable();
tmu_disable(0xf);
#if !defined(CONFIG_UTIL_PE_DISABLED)
diff --git a/fs/devfs-core.c b/fs/devfs-core.c
index 519e18e..b48479b 100644
--- a/fs/devfs-core.c
+++ b/fs/devfs-core.c
@@ -49,7 +49,7 @@
return NULL;
if (cdev->ops->open) {
- ret = cdev->ops->open(cdev);
+ ret = cdev->ops->open(cdev, flags);
if (ret)
return NULL;
}
diff --git a/fs/devfs.c b/fs/devfs.c
index 07ca16c..06465a0 100644
--- a/fs/devfs.c
+++ b/fs/devfs.c
@@ -116,7 +116,7 @@
f->inode = cdev;
if (cdev->ops->open) {
- ret = cdev->ops->open(cdev);
+ ret = cdev->ops->open(cdev, f->flags);
if (ret)
return ret;
}
diff --git a/include/driver.h b/include/driver.h
index 6a4d45e..0c1fa43 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -290,7 +290,7 @@
int (*ioctl)(struct cdev*, int, void *);
off_t (*lseek)(struct cdev*, off_t);
- int (*open)(struct cdev*);
+ int (*open)(struct cdev*, unsigned long flags);
int (*close)(struct cdev*);
int (*flush)(struct cdev*);
int (*erase)(struct cdev*, size_t count, unsigned long offset);