Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #5
0
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;
}