static int __devinit tegra_das_probe(struct platform_device *pdev) { struct resource *res, *region; int ret = 0; if (das) return -ENODEV; das = kzalloc(sizeof(struct tegra_das), GFP_KERNEL); if (!das) { dev_err(&pdev->dev, "Can't allocate tegra_das\n"); ret = -ENOMEM; goto exit; } das->dev = &pdev->dev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "No memory resource\n"); ret = -ENODEV; goto err_free; } region = request_mem_region(res->start, resource_size(res), pdev->name); if (!region) { dev_err(&pdev->dev, "Memory region already claimed\n"); ret = -EBUSY; goto err_free; } das->regs = ioremap(res->start, resource_size(res)); if (!das->regs) { dev_err(&pdev->dev, "ioremap failed\n"); ret = -ENOMEM; goto err_release; } tegra_das_debug_add(das); platform_set_drvdata(pdev, das); return 0; err_release: release_mem_region(res->start, resource_size(res)); err_free: kfree(das); das = 0; exit: return ret; }
static int __devinit tegra_das_probe(struct platform_device *pdev) { struct resource *res, *region; int ret = 0; if (das) return -ENODEV; das = devm_kzalloc(&pdev->dev, sizeof(struct tegra_das), GFP_KERNEL); if (!das) { dev_err(&pdev->dev, "Can't allocate tegra_das\n"); ret = -ENOMEM; goto err; } das->dev = &pdev->dev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "No memory resource\n"); ret = -ENODEV; goto err; } region = devm_request_mem_region(&pdev->dev, res->start, resource_size(res), pdev->name); if (!region) { dev_err(&pdev->dev, "Memory region already claimed\n"); ret = -EBUSY; goto err; } das->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); if (!das->regs) { dev_err(&pdev->dev, "ioremap failed\n"); ret = -ENOMEM; goto err; } ret = tegra_das_connect_dap_to_dac(TEGRA_DAS_DAP_ID_1, TEGRA_DAS_DAP_SEL_DAC1); if (ret) { dev_err(&pdev->dev, "Can't set up DAS DAP connection\n"); goto err; } ret = tegra_das_connect_dac_to_dap(TEGRA_DAS_DAC_ID_1, TEGRA_DAS_DAC_SEL_DAP1); if (ret) { dev_err(&pdev->dev, "Can't set up DAS DAC connection\n"); goto err; } tegra_das_debug_add(das); platform_set_drvdata(pdev, das); return 0; err: das = NULL; return ret; }