diff --git a/drivers/mtd/nand/cafe.c b/drivers/mtd/nand/cafe.c index c328a75..7deca9d 100644 --- a/drivers/mtd/nand/cafe.c +++ b/drivers/mtd/nand/cafe.c @@ -196,7 +196,7 @@ static void cafe_nand_cmdfunc(struct mtd_info *mtd, unsigned command, cafe->data_pos = cafe->datalen = 0; /* Set command valid bit */ - ctl1 = 0x80000000 | command; + ctl1 = 0x80000000 | command | (cafe->ctl1 | (1<<19)); /* Set RD or WR bits as appropriate */ if (command == NAND_CMD_READID || command == NAND_CMD_STATUS) { @@ -310,7 +310,13 @@ static void cafe_nand_cmdfunc(struct mtd_info *mtd, unsigned command, static void cafe_select_chip(struct mtd_info *mtd, int chipnr) { //struct cafe_priv *cafe = mtd->priv; - // cafe_dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); + cafe_dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); + /* Missing from the datasheet: bit 19 of CTRL1 sets CE0 vs. CE1 */ + if (chip_nr) + cafe->ctl1 |= (1<<19); + else + cafe->ctl1 &= ~(1<<19); + } static int cafe_nand_interrupt(int irq, void *id) @@ -646,7 +652,7 @@ static int __devinit cafe_nand_probe(struct pci_dev *pdev, cafe_readl(cafe, GLOBAL_CTRL), cafe_readl(cafe, GLOBAL_IRQ_MASK)); /* Scan to find existence of the device */ - if (nand_scan_ident(mtd, 1)) { + if (nand_scan_ident(mtd, 2)) { err = -ENXIO; goto out_irq; }