int dw_mci_pltfm_register(struct platform_device *pdev, const struct dw_mci_drv_data *drv_data) { struct dw_mci *host; struct resource *regs; host = devm_kzalloc(&pdev->dev, sizeof(struct dw_mci), GFP_KERNEL); if (!host) return -ENOMEM; host->irq = platform_get_irq(pdev, 0); if (host->irq < 0) return host->irq; host->drv_data = drv_data; host->dev = &pdev->dev; host->irq_flags = 0; host->pdata = pdev->dev.platform_data; regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); host->regs = devm_ioremap_resource(&pdev->dev, regs); if (IS_ERR(host->regs)) return PTR_ERR(host->regs); /* Get registers' physical base address */ host->phy_regs = regs->start; platform_set_drvdata(pdev, host); return dw_mci_probe(host); }
int dw_mci_pltfm_register(struct platform_device *pdev, const struct dw_mci_drv_data *drv_data) { struct dw_mci *host; struct resource *regs; int ret; host = devm_kzalloc(&pdev->dev, sizeof(struct dw_mci), GFP_KERNEL); if (!host) return -ENOMEM; host->irq = platform_get_irq(pdev, 0); if (host->irq < 0) return host->irq; host->drv_data = drv_data; host->dev = &pdev->dev; host->irq_flags = 0; host->pdata = pdev->dev.platform_data; regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); host->regs = devm_ioremap_resource(&pdev->dev, regs); if (IS_ERR(host->regs)) return PTR_ERR(host->regs); if (drv_data && drv_data->init) { ret = drv_data->init(host); if (ret) return ret; } platform_set_drvdata(pdev, host); return dw_mci_probe(host); }
static int dw_mci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *entries) { struct dw_mci *host; int ret; ret = pcim_enable_device(pdev); if (ret) return ret; host = devm_kzalloc(&pdev->dev, sizeof(struct dw_mci), GFP_KERNEL); if (!host) return -ENOMEM; host->irq = pdev->irq; host->irq_flags = IRQF_SHARED; host->dev = &pdev->dev; host->pdata = &pci_board_data; ret = pcim_iomap_regions(pdev, 1 << PCI_BAR_NO, pci_name(pdev)); if (ret) return ret; host->regs = pcim_iomap_table(pdev)[PCI_BAR_NO]; pci_set_master(pdev); ret = dw_mci_probe(host); if (ret) return ret; pci_set_drvdata(pdev, host); return 0; }
static int __devinit dw_mci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *entries) { struct dw_mci *host; int ret; ret = pci_enable_device(pdev); if (ret) return ret; if (pci_request_regions(pdev, "dw_mmc_pci")) { ret = -ENODEV; goto err_disable_dev; } host = kzalloc(sizeof(struct dw_mci), GFP_KERNEL); if (!host) { ret = -ENOMEM; goto err_release; } host->irq = pdev->irq; host->irq_flags = IRQF_SHARED; host->dev = pdev->dev; host->pdata = &pci_board_data; host->regs = pci_iomap(pdev, PCI_BAR_NO, COMPLETE_BAR); if (!host->regs) { ret = -EIO; goto err_unmap; } pci_set_drvdata(pdev, host); ret = dw_mci_probe(host); if (ret) goto err_probe_failed; return ret; err_probe_failed: pci_iounmap(pdev, host->regs); err_unmap: kfree(host); err_release: pci_release_regions(pdev); err_disable_dev: pci_disable_device(pdev); return ret; }
static int __init dw_mci_pltfm_probe(struct platform_device *pdev) { struct dw_mci *host; struct resource *regs; int ret; host = kzalloc(sizeof(struct dw_mci), GFP_KERNEL); if (!host) return -ENOMEM; regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!regs) { ret = -ENXIO; goto err_free; } host->irq = platform_get_irq(pdev, 0); if (host->irq < 0) { ret = host->irq; goto err_free; } host->dev = pdev->dev; host->irq_flags = 0; host->pdata = pdev->dev.platform_data; ret = -ENOMEM; host->regs = ioremap(regs->start, resource_size(regs)); if (!host->regs) goto err_free; platform_set_drvdata(pdev, host); ret = dw_mci_probe(host); if (ret) goto err_out; /* add by jhkim */ device_enable_async_suspend(&pdev->dev); return ret; err_out: iounmap(host->regs); err_free: kfree(host); return ret; }