Commit de9f56f9 authored by Boris BREZILLON's avatar Boris BREZILLON Committed by Brian Norris

mtd: nand: r852: use the mtd instance embedded in struct nand_chip

struct nand_chip now embeds an mtd device. Make use of this mtd instance.
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 063294a3
...@@ -634,25 +634,22 @@ static void r852_update_media_status(struct r852_device *dev) ...@@ -634,25 +634,22 @@ static void r852_update_media_status(struct r852_device *dev)
*/ */
static int r852_register_nand_device(struct r852_device *dev) static int r852_register_nand_device(struct r852_device *dev)
{ {
dev->mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL); struct mtd_info *mtd = nand_to_mtd(dev->chip);
if (!dev->mtd)
goto error1;
WARN_ON(dev->card_registred); WARN_ON(dev->card_registred);
dev->mtd->priv = dev->chip; mtd->priv = dev->chip;
dev->mtd->dev.parent = &dev->pci_dev->dev; mtd->dev.parent = &dev->pci_dev->dev;
if (dev->readonly) if (dev->readonly)
dev->chip->options |= NAND_ROM; dev->chip->options |= NAND_ROM;
r852_engine_enable(dev); r852_engine_enable(dev);
if (sm_register_device(dev->mtd, dev->sm)) if (sm_register_device(mtd, dev->sm))
goto error2; goto error1;
if (device_create_file(&dev->mtd->dev, &dev_attr_media_type)) { if (device_create_file(&mtd->dev, &dev_attr_media_type)) {
message("can't create media type sysfs attribute"); message("can't create media type sysfs attribute");
goto error3; goto error3;
} }
...@@ -660,9 +657,7 @@ static int r852_register_nand_device(struct r852_device *dev) ...@@ -660,9 +657,7 @@ static int r852_register_nand_device(struct r852_device *dev)
dev->card_registred = 1; dev->card_registred = 1;
return 0; return 0;
error3: error3:
nand_release(dev->mtd); nand_release(mtd);
error2:
kfree(dev->mtd);
error1: error1:
/* Force card redetect */ /* Force card redetect */
dev->card_detected = 0; dev->card_detected = 0;
...@@ -675,15 +670,15 @@ static int r852_register_nand_device(struct r852_device *dev) ...@@ -675,15 +670,15 @@ static int r852_register_nand_device(struct r852_device *dev)
static void r852_unregister_nand_device(struct r852_device *dev) static void r852_unregister_nand_device(struct r852_device *dev)
{ {
struct mtd_info *mtd = nand_to_mtd(dev->chip);
if (!dev->card_registred) if (!dev->card_registred)
return; return;
device_remove_file(&dev->mtd->dev, &dev_attr_media_type); device_remove_file(&mtd->dev, &dev_attr_media_type);
nand_release(dev->mtd); nand_release(mtd);
r852_engine_disable(dev); r852_engine_disable(dev);
dev->card_registred = 0; dev->card_registred = 0;
kfree(dev->mtd);
dev->mtd = NULL;
} }
/* Card state updater */ /* Card state updater */
...@@ -1031,6 +1026,7 @@ static int r852_suspend(struct device *device) ...@@ -1031,6 +1026,7 @@ static int r852_suspend(struct device *device)
static int r852_resume(struct device *device) static int r852_resume(struct device *device)
{ {
struct r852_device *dev = pci_get_drvdata(to_pci_dev(device)); struct r852_device *dev = pci_get_drvdata(to_pci_dev(device));
struct mtd_info *mtd = nand_to_mtd(dev->chip);
r852_disable_irqs(dev); r852_disable_irqs(dev);
r852_card_update_present(dev); r852_card_update_present(dev);
...@@ -1050,9 +1046,9 @@ static int r852_resume(struct device *device) ...@@ -1050,9 +1046,9 @@ static int r852_resume(struct device *device)
/* Otherwise, initialize the card */ /* Otherwise, initialize the card */
if (dev->card_registred) { if (dev->card_registred) {
r852_engine_enable(dev); r852_engine_enable(dev);
dev->chip->select_chip(dev->mtd, 0); dev->chip->select_chip(mtd, 0);
dev->chip->cmdfunc(dev->mtd, NAND_CMD_RESET, -1, -1); dev->chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
dev->chip->select_chip(dev->mtd, -1); dev->chip->select_chip(mtd, -1);
} }
/* Program card detection IRQ */ /* Program card detection IRQ */
......
...@@ -108,7 +108,6 @@ ...@@ -108,7 +108,6 @@
struct r852_device { struct r852_device {
void __iomem *mmio; /* mmio */ void __iomem *mmio; /* mmio */
struct mtd_info *mtd; /* mtd backpointer */
struct nand_chip *chip; /* nand chip backpointer */ struct nand_chip *chip; /* nand chip backpointer */
struct pci_dev *pci_dev; /* pci backpointer */ struct pci_dev *pci_dev; /* pci backpointer */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment