diff options
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | drivers/char/drm/radeon_cp.c | 2 | ||||
| -rw-r--r-- | drivers/ieee1394/hosts.h | 1 | ||||
| -rw-r--r-- | drivers/ieee1394/nodemgr.c | 67 | ||||
| -rw-r--r-- | drivers/mtd/onenand/generic.c | 4 | ||||
| -rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 53 | ||||
| -rw-r--r-- | drivers/mtd/onenand/onenand_bbt.c | 4 | ||||
| -rw-r--r-- | include/linux/mtd/onenand.h | 5 |
8 files changed, 107 insertions, 33 deletions
| @@ -1,8 +1,8 @@ | |||
| 1 | VERSION = 2 | 1 | VERSION = 2 |
| 2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
| 3 | SUBLEVEL = 15 | 3 | SUBLEVEL = 15 |
| 4 | EXTRAVERSION =-rc5 | 4 | EXTRAVERSION =-rc6 |
| 5 | NAME=Affluent Albatross | 5 | NAME=Sliding Snow Leopard |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
| 8 | # To see a list of typical targets execute "make help" | 8 | # To see a list of typical targets execute "make help" |
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c index 95ae9e0892ac..501e557cbc86 100644 --- a/drivers/char/drm/radeon_cp.c +++ b/drivers/char/drm/radeon_cp.c | |||
| @@ -1311,7 +1311,7 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on) | |||
| 1311 | 1311 | ||
| 1312 | static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) | 1312 | static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) |
| 1313 | { | 1313 | { |
| 1314 | drm_radeon_private_t *dev_priv = dev->dev_private;; | 1314 | drm_radeon_private_t *dev_priv = dev->dev_private; |
| 1315 | unsigned int mem_size; | 1315 | unsigned int mem_size; |
| 1316 | 1316 | ||
| 1317 | DRM_DEBUG("\n"); | 1317 | DRM_DEBUG("\n"); |
diff --git a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h index 38f42112dff0..ae9b02cc013f 100644 --- a/drivers/ieee1394/hosts.h +++ b/drivers/ieee1394/hosts.h | |||
| @@ -41,6 +41,7 @@ struct hpsb_host { | |||
| 41 | /* this nodes state */ | 41 | /* this nodes state */ |
| 42 | unsigned in_bus_reset:1; | 42 | unsigned in_bus_reset:1; |
| 43 | unsigned is_shutdown:1; | 43 | unsigned is_shutdown:1; |
| 44 | unsigned resume_packet_sent:1; | ||
| 44 | 45 | ||
| 45 | /* this nodes' duties on the bus */ | 46 | /* this nodes' duties on the bus */ |
| 46 | unsigned is_root:1; | 47 | unsigned is_root:1; |
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 7fff5a1d2ea4..0ea37b1bccb2 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
| @@ -1349,6 +1349,33 @@ static void nodemgr_update_pdrv(struct node_entry *ne) | |||
| 1349 | } | 1349 | } |
| 1350 | 1350 | ||
| 1351 | 1351 | ||
| 1352 | /* Write the BROADCAST_CHANNEL as per IEEE1394a 8.3.2.3.11 and 8.4.2.3. This | ||
| 1353 | * seems like an optional service but in the end it is practically mandatory | ||
| 1354 | * as a consequence of these clauses. | ||
| 1355 | * | ||
| 1356 | * Note that we cannot do a broadcast write to all nodes at once because some | ||
| 1357 | * pre-1394a devices would hang. */ | ||
| 1358 | static void nodemgr_irm_write_bc(struct node_entry *ne, int generation) | ||
| 1359 | { | ||
| 1360 | const u64 bc_addr = (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL); | ||
| 1361 | quadlet_t bc_remote, bc_local; | ||
| 1362 | int ret; | ||
| 1363 | |||
| 1364 | if (!ne->host->is_irm || ne->generation != generation || | ||
| 1365 | ne->nodeid == ne->host->node_id) | ||
| 1366 | return; | ||
| 1367 | |||
| 1368 | bc_local = cpu_to_be32(ne->host->csr.broadcast_channel); | ||
| 1369 | |||
| 1370 | /* Check if the register is implemented and 1394a compliant. */ | ||
| 1371 | ret = hpsb_read(ne->host, ne->nodeid, generation, bc_addr, &bc_remote, | ||
| 1372 | sizeof(bc_remote)); | ||
| 1373 | if (!ret && bc_remote & cpu_to_be32(0x80000000) && | ||
| 1374 | bc_remote != bc_local) | ||
| 1375 | hpsb_node_write(ne, bc_addr, &bc_local, sizeof(bc_local)); | ||
| 1376 | } | ||
| 1377 | |||
| 1378 | |||
| 1352 | static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int generation) | 1379 | static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int generation) |
| 1353 | { | 1380 | { |
| 1354 | struct device *dev; | 1381 | struct device *dev; |
| @@ -1360,6 +1387,8 @@ static void nodemgr_probe_ne(struct host_info *hi, struct node_entry *ne, int ge | |||
| 1360 | if (!dev) | 1387 | if (!dev) |
| 1361 | return; | 1388 | return; |
| 1362 | 1389 | ||
| 1390 | nodemgr_irm_write_bc(ne, generation); | ||
| 1391 | |||
| 1363 | /* If "needs_probe", then this is either a new or changed node we | 1392 | /* If "needs_probe", then this is either a new or changed node we |
| 1364 | * rescan totally. If the generation matches for an existing node | 1393 | * rescan totally. If the generation matches for an existing node |
| 1365 | * (one that existed prior to the bus reset) we send update calls | 1394 | * (one that existed prior to the bus reset) we send update calls |
| @@ -1413,9 +1442,25 @@ static void nodemgr_node_probe(struct host_info *hi, int generation) | |||
| 1413 | return; | 1442 | return; |
| 1414 | } | 1443 | } |
| 1415 | 1444 | ||
| 1416 | /* Because we are a 1394a-2000 compliant IRM, we need to inform all the other | 1445 | static int nodemgr_send_resume_packet(struct hpsb_host *host) |
| 1417 | * nodes of the broadcast channel. (Really we're only setting the validity | 1446 | { |
| 1418 | * bit). Other IRM responsibilities go in here as well. */ | 1447 | struct hpsb_packet *packet; |
| 1448 | int ret = 1; | ||
| 1449 | |||
| 1450 | packet = hpsb_make_phypacket(host, | ||
| 1451 | 0x003c0000 | NODEID_TO_NODE(host->node_id) << 24); | ||
| 1452 | if (packet) { | ||
| 1453 | packet->no_waiter = 1; | ||
| 1454 | packet->generation = get_hpsb_generation(host); | ||
| 1455 | ret = hpsb_send_packet(packet); | ||
| 1456 | } | ||
| 1457 | if (ret) | ||
| 1458 | HPSB_WARN("fw-host%d: Failed to broadcast resume packet", | ||
| 1459 | host->id); | ||
| 1460 | return ret; | ||
| 1461 | } | ||
| 1462 | |||
| 1463 | /* Perform a few high-level IRM responsibilities. */ | ||
| 1419 | static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles) | 1464 | static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles) |
| 1420 | { | 1465 | { |
| 1421 | quadlet_t bc; | 1466 | quadlet_t bc; |
| @@ -1424,13 +1469,8 @@ static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles) | |||
| 1424 | if (!host->is_irm || host->irm_id == (nodeid_t)-1) | 1469 | if (!host->is_irm || host->irm_id == (nodeid_t)-1) |
| 1425 | return 1; | 1470 | return 1; |
| 1426 | 1471 | ||
| 1427 | host->csr.broadcast_channel |= 0x40000000; /* set validity bit */ | 1472 | /* We are a 1394a-2000 compliant IRM. Set the validity bit. */ |
| 1428 | 1473 | host->csr.broadcast_channel |= 0x40000000; | |
| 1429 | bc = cpu_to_be32(host->csr.broadcast_channel); | ||
| 1430 | |||
| 1431 | hpsb_write(host, LOCAL_BUS | ALL_NODES, get_hpsb_generation(host), | ||
| 1432 | (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL), | ||
| 1433 | &bc, sizeof(quadlet_t)); | ||
| 1434 | 1474 | ||
| 1435 | /* If there is no bus manager then we should set the root node's | 1475 | /* If there is no bus manager then we should set the root node's |
| 1436 | * force_root bit to promote bus stability per the 1394 | 1476 | * force_root bit to promote bus stability per the 1394 |
| @@ -1463,6 +1503,13 @@ static int nodemgr_do_irm_duties(struct hpsb_host *host, int cycles) | |||
| 1463 | } | 1503 | } |
| 1464 | } | 1504 | } |
| 1465 | 1505 | ||
| 1506 | /* Some devices suspend their ports while being connected to an inactive | ||
| 1507 | * host adapter, i.e. if connected before the low-level driver is | ||
| 1508 | * loaded. They become visible either when physically unplugged and | ||
| 1509 | * replugged, or when receiving a resume packet. Send one once. */ | ||
| 1510 | if (!host->resume_packet_sent && !nodemgr_send_resume_packet(host)) | ||
| 1511 | host->resume_packet_sent = 1; | ||
| 1512 | |||
| 1466 | return 1; | 1513 | return 1; |
| 1467 | } | 1514 | } |
| 1468 | 1515 | ||
diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c index 48cce431f89f..45c077d0f063 100644 --- a/drivers/mtd/onenand/generic.c +++ b/drivers/mtd/onenand/generic.c | |||
| @@ -12,9 +12,9 @@ | |||
| 12 | * This is a device driver for the OneNAND flash for generic boards. | 12 | * This is a device driver for the OneNAND flash for generic boards. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <linux/device.h> | ||
| 16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 17 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/platform_device.h> | ||
| 18 | #include <linux/mtd/mtd.h> | 18 | #include <linux/mtd/mtd.h> |
| 19 | #include <linux/mtd/onenand.h> | 19 | #include <linux/mtd/onenand.h> |
| 20 | #include <linux/mtd/partitions.h> | 20 | #include <linux/mtd/partitions.h> |
| @@ -39,7 +39,7 @@ static int __devinit generic_onenand_probe(struct device *dev) | |||
| 39 | { | 39 | { |
| 40 | struct onenand_info *info; | 40 | struct onenand_info *info; |
| 41 | struct platform_device *pdev = to_platform_device(dev); | 41 | struct platform_device *pdev = to_platform_device(dev); |
| 42 | struct onenand_platform_data *pdata = pdev->dev.platform_data; | 42 | struct flash_platform_data *pdata = pdev->dev.platform_data; |
| 43 | struct resource *res = pdev->resource; | 43 | struct resource *res = pdev->resource; |
| 44 | unsigned long size = res->end - res->start + 1; | 44 | unsigned long size = res->end - res->start + 1; |
| 45 | int err; | 45 | int err; |
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index f67d5d6eb9a6..a53a73fc2a5a 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
| @@ -940,7 +940,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs, | |||
| 940 | u_char *eccbuf, struct nand_oobinfo *oobsel) | 940 | u_char *eccbuf, struct nand_oobinfo *oobsel) |
| 941 | { | 941 | { |
| 942 | struct onenand_chip *this = mtd->priv; | 942 | struct onenand_chip *this = mtd->priv; |
| 943 | unsigned char buffer[MAX_ONENAND_PAGESIZE], *pbuf; | 943 | unsigned char *pbuf; |
| 944 | size_t total_len, len; | 944 | size_t total_len, len; |
| 945 | int i, written = 0; | 945 | int i, written = 0; |
| 946 | int ret = 0; | 946 | int ret = 0; |
| @@ -975,7 +975,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs, | |||
| 975 | /* Loop until all keve's data has been written */ | 975 | /* Loop until all keve's data has been written */ |
| 976 | len = 0; | 976 | len = 0; |
| 977 | while (count) { | 977 | while (count) { |
| 978 | pbuf = buffer; | 978 | pbuf = this->page_buf; |
| 979 | /* | 979 | /* |
| 980 | * If the given tuple is >= pagesize then | 980 | * If the given tuple is >= pagesize then |
| 981 | * write it out from the iov | 981 | * write it out from the iov |
| @@ -995,7 +995,7 @@ static int onenand_writev_ecc(struct mtd_info *mtd, const struct kvec *vecs, | |||
| 995 | int cnt = 0, thislen; | 995 | int cnt = 0, thislen; |
| 996 | while (cnt < mtd->oobblock) { | 996 | while (cnt < mtd->oobblock) { |
| 997 | thislen = min_t(int, mtd->oobblock - cnt, vecs->iov_len - len); | 997 | thislen = min_t(int, mtd->oobblock - cnt, vecs->iov_len - len); |
| 998 | memcpy(buffer + cnt, vecs->iov_base + len, thislen); | 998 | memcpy(this->page_buf + cnt, vecs->iov_base + len, thislen); |
| 999 | cnt += thislen; | 999 | cnt += thislen; |
| 1000 | len += thislen; | 1000 | len += thislen; |
| 1001 | 1001 | ||
| @@ -1296,6 +1296,12 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
| 1296 | 1296 | ||
| 1297 | /* Block lock scheme */ | 1297 | /* Block lock scheme */ |
| 1298 | for (block = start; block < end; block++) { | 1298 | for (block = start; block < end; block++) { |
| 1299 | /* Set block address */ | ||
| 1300 | value = onenand_block_address(this, block); | ||
| 1301 | this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1); | ||
| 1302 | /* Select DataRAM for DDP */ | ||
| 1303 | value = onenand_bufferram_address(this, block); | ||
| 1304 | this->write_word(value, this->base + ONENAND_REG_START_ADDRESS2); | ||
| 1299 | /* Set start block address */ | 1305 | /* Set start block address */ |
| 1300 | this->write_word(block, this->base + ONENAND_REG_START_BLOCK_ADDRESS); | 1306 | this->write_word(block, this->base + ONENAND_REG_START_BLOCK_ADDRESS); |
| 1301 | /* Write unlock command */ | 1307 | /* Write unlock command */ |
| @@ -1309,10 +1315,6 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
| 1309 | & ONENAND_CTRL_ONGO) | 1315 | & ONENAND_CTRL_ONGO) |
| 1310 | continue; | 1316 | continue; |
| 1311 | 1317 | ||
| 1312 | /* Set block address for read block status */ | ||
| 1313 | value = onenand_block_address(this, block); | ||
| 1314 | this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1); | ||
| 1315 | |||
| 1316 | /* Check lock status */ | 1318 | /* Check lock status */ |
| 1317 | status = this->read_word(this->base + ONENAND_REG_WP_STATUS); | 1319 | status = this->read_word(this->base + ONENAND_REG_WP_STATUS); |
| 1318 | if (!(status & ONENAND_WP_US)) | 1320 | if (!(status & ONENAND_WP_US)) |
| @@ -1346,7 +1348,6 @@ static void onenand_print_device_info(int device) | |||
| 1346 | 1348 | ||
| 1347 | static const struct onenand_manufacturers onenand_manuf_ids[] = { | 1349 | static const struct onenand_manufacturers onenand_manuf_ids[] = { |
| 1348 | {ONENAND_MFR_SAMSUNG, "Samsung"}, | 1350 | {ONENAND_MFR_SAMSUNG, "Samsung"}, |
| 1349 | {ONENAND_MFR_UNKNOWN, "Unknown"} | ||
| 1350 | }; | 1351 | }; |
| 1351 | 1352 | ||
| 1352 | /** | 1353 | /** |
| @@ -1357,17 +1358,22 @@ static const struct onenand_manufacturers onenand_manuf_ids[] = { | |||
| 1357 | */ | 1358 | */ |
| 1358 | static int onenand_check_maf(int manuf) | 1359 | static int onenand_check_maf(int manuf) |
| 1359 | { | 1360 | { |
| 1361 | int size = ARRAY_SIZE(onenand_manuf_ids); | ||
| 1362 | char *name; | ||
| 1360 | int i; | 1363 | int i; |
| 1361 | 1364 | ||
| 1362 | for (i = 0; onenand_manuf_ids[i].id; i++) { | 1365 | for (i = 0; i < size; i++) |
| 1363 | if (manuf == onenand_manuf_ids[i].id) | 1366 | if (manuf == onenand_manuf_ids[i].id) |
| 1364 | break; | 1367 | break; |
| 1365 | } | ||
| 1366 | 1368 | ||
| 1367 | printk(KERN_DEBUG "OneNAND Manufacturer: %s (0x%0x)\n", | 1369 | if (i < size) |
| 1368 | onenand_manuf_ids[i].name, manuf); | 1370 | name = onenand_manuf_ids[i].name; |
| 1371 | else | ||
| 1372 | name = "Unknown"; | ||
| 1373 | |||
| 1374 | printk(KERN_DEBUG "OneNAND Manufacturer: %s (0x%0x)\n", name, manuf); | ||
| 1369 | 1375 | ||
| 1370 | return (i != ONENAND_MFR_UNKNOWN); | 1376 | return (i == size); |
| 1371 | } | 1377 | } |
| 1372 | 1378 | ||
| 1373 | /** | 1379 | /** |
| @@ -1513,6 +1519,18 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) | |||
| 1513 | this->read_bufferram = onenand_sync_read_bufferram; | 1519 | this->read_bufferram = onenand_sync_read_bufferram; |
| 1514 | } | 1520 | } |
| 1515 | 1521 | ||
| 1522 | /* Allocate buffers, if necessary */ | ||
| 1523 | if (!this->page_buf) { | ||
| 1524 | size_t len; | ||
| 1525 | len = mtd->oobblock + mtd->oobsize; | ||
| 1526 | this->page_buf = kmalloc(len, GFP_KERNEL); | ||
| 1527 | if (!this->page_buf) { | ||
| 1528 | printk(KERN_ERR "onenand_scan(): Can't allocate page_buf\n"); | ||
| 1529 | return -ENOMEM; | ||
| 1530 | } | ||
| 1531 | this->options |= ONENAND_PAGEBUF_ALLOC; | ||
| 1532 | } | ||
| 1533 | |||
| 1516 | this->state = FL_READY; | 1534 | this->state = FL_READY; |
| 1517 | init_waitqueue_head(&this->wq); | 1535 | init_waitqueue_head(&this->wq); |
| 1518 | spin_lock_init(&this->chip_lock); | 1536 | spin_lock_init(&this->chip_lock); |
| @@ -1574,12 +1592,21 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) | |||
| 1574 | */ | 1592 | */ |
| 1575 | void onenand_release(struct mtd_info *mtd) | 1593 | void onenand_release(struct mtd_info *mtd) |
| 1576 | { | 1594 | { |
| 1595 | struct onenand_chip *this = mtd->priv; | ||
| 1596 | |||
| 1577 | #ifdef CONFIG_MTD_PARTITIONS | 1597 | #ifdef CONFIG_MTD_PARTITIONS |
| 1578 | /* Deregister partitions */ | 1598 | /* Deregister partitions */ |
| 1579 | del_mtd_partitions (mtd); | 1599 | del_mtd_partitions (mtd); |
| 1580 | #endif | 1600 | #endif |
| 1581 | /* Deregister the device */ | 1601 | /* Deregister the device */ |
| 1582 | del_mtd_device (mtd); | 1602 | del_mtd_device (mtd); |
| 1603 | |||
| 1604 | /* Free bad block table memory, if allocated */ | ||
| 1605 | if (this->bbm) | ||
| 1606 | kfree(this->bbm); | ||
| 1607 | /* Buffer allocated by onenand_scan */ | ||
| 1608 | if (this->options & ONENAND_PAGEBUF_ALLOC) | ||
| 1609 | kfree(this->page_buf); | ||
| 1583 | } | 1610 | } |
| 1584 | 1611 | ||
| 1585 | EXPORT_SYMBOL_GPL(onenand_scan); | 1612 | EXPORT_SYMBOL_GPL(onenand_scan); |
diff --git a/drivers/mtd/onenand/onenand_bbt.c b/drivers/mtd/onenand/onenand_bbt.c index f40190f499e1..4510d3361eaa 100644 --- a/drivers/mtd/onenand/onenand_bbt.c +++ b/drivers/mtd/onenand/onenand_bbt.c | |||
| @@ -118,10 +118,10 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr | |||
| 118 | */ | 118 | */ |
| 119 | static inline int onenand_memory_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd) | 119 | static inline int onenand_memory_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd) |
| 120 | { | 120 | { |
| 121 | unsigned char data_buf[MAX_ONENAND_PAGESIZE]; | 121 | struct onenand_chip *this = mtd->priv; |
| 122 | 122 | ||
| 123 | bd->options &= ~NAND_BBT_SCANEMPTY; | 123 | bd->options &= ~NAND_BBT_SCANEMPTY; |
| 124 | return create_bbt(mtd, data_buf, bd, -1); | 124 | return create_bbt(mtd, this->page_buf, bd, -1); |
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | /** | 127 | /** |
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index f1fd4215686a..7419b5fab133 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/mtd/bbm.h> | 17 | #include <linux/mtd/bbm.h> |
| 18 | 18 | ||
| 19 | #define MAX_BUFFERRAM 2 | 19 | #define MAX_BUFFERRAM 2 |
| 20 | #define MAX_ONENAND_PAGESIZE (2048 + 64) | ||
| 21 | 20 | ||
| 22 | /* Scan and identify a OneNAND device */ | 21 | /* Scan and identify a OneNAND device */ |
| 23 | extern int onenand_scan(struct mtd_info *mtd, int max_chips); | 22 | extern int onenand_scan(struct mtd_info *mtd, int max_chips); |
| @@ -110,6 +109,7 @@ struct onenand_chip { | |||
| 110 | spinlock_t chip_lock; | 109 | spinlock_t chip_lock; |
| 111 | wait_queue_head_t wq; | 110 | wait_queue_head_t wq; |
| 112 | onenand_state_t state; | 111 | onenand_state_t state; |
| 112 | unsigned char *page_buf; | ||
| 113 | 113 | ||
| 114 | struct nand_oobinfo *autooob; | 114 | struct nand_oobinfo *autooob; |
| 115 | 115 | ||
| @@ -134,13 +134,12 @@ struct onenand_chip { | |||
| 134 | * Options bits | 134 | * Options bits |
| 135 | */ | 135 | */ |
| 136 | #define ONENAND_CONT_LOCK (0x0001) | 136 | #define ONENAND_CONT_LOCK (0x0001) |
| 137 | 137 | #define ONENAND_PAGEBUF_ALLOC (0x1000) | |
| 138 | 138 | ||
| 139 | /* | 139 | /* |
| 140 | * OneNAND Flash Manufacturer ID Codes | 140 | * OneNAND Flash Manufacturer ID Codes |
| 141 | */ | 141 | */ |
| 142 | #define ONENAND_MFR_SAMSUNG 0xec | 142 | #define ONENAND_MFR_SAMSUNG 0xec |
| 143 | #define ONENAND_MFR_UNKNOWN 0x00 | ||
| 144 | 143 | ||
| 145 | /** | 144 | /** |
| 146 | * struct nand_manufacturers - NAND Flash Manufacturer ID Structure | 145 | * struct nand_manufacturers - NAND Flash Manufacturer ID Structure |
