static int s3c2412_iis_dev_probe(struct platform_device *pdev) { int ret = 0; struct resource *res; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); s3c2412_i2s.regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(s3c2412_i2s.regs)) return PTR_ERR(s3c2412_i2s.regs); s3c2412_i2s_pcm_stereo_out.dma_addr = res->start + S3C2412_IISTXD; s3c2412_i2s_pcm_stereo_in.dma_addr = res->start + S3C2412_IISRXD; ret = s3c_i2sv2_register_component(&pdev->dev, -1, &s3c2412_i2s_component, &s3c2412_i2s_dai); if (ret) { pr_err("failed to register the dai\n"); return ret; } ret = samsung_asoc_dma_platform_register(&pdev->dev); if (ret) pr_err("failed to register the DMA: %d\n", ret); return ret; }
static int s3c24xx_iis_dev_probe(struct platform_device *pdev) { struct resource *res; int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); s3c24xx_i2s.regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(s3c24xx_i2s.regs)) return PTR_ERR(s3c24xx_i2s.regs); s3c24xx_i2s_pcm_stereo_out.addr = res->start + S3C2410_IISFIFO; s3c24xx_i2s_pcm_stereo_in.addr = res->start + S3C2410_IISFIFO; ret = samsung_asoc_dma_platform_register(&pdev->dev, NULL, NULL, NULL); if (ret) { dev_err(&pdev->dev, "Failed to register the DMA: %d\n", ret); return ret; } ret = devm_snd_soc_register_component(&pdev->dev, &s3c24xx_i2s_component, &s3c24xx_i2s_dai, 1); if (ret) dev_err(&pdev->dev, "Failed to register the DAI\n"); return ret; }
static int s3c2412_iis_dev_probe(struct platform_device *pdev) { int ret = 0; ret = s3c_i2sv2_register_component(&pdev->dev, -1, &s3c2412_i2s_component, &s3c2412_i2s_dai); if (ret) { pr_err("failed to register the dai\n"); return ret; } ret = samsung_asoc_dma_platform_register(&pdev->dev); if (ret) pr_err("failed to register the DMA: %d\n", ret); return ret; }
static int s3c24xx_iis_dev_probe(struct platform_device *pdev) { int ret = 0; struct resource *res; struct s3c_audio_pdata *pdata = dev_get_platdata(&pdev->dev); if (!pdata) { dev_err(&pdev->dev, "missing platform data"); return -ENXIO; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "Can't get IO resource.\n"); return -ENOENT; } s3c24xx_i2s.regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(s3c24xx_i2s.regs)) return PTR_ERR(s3c24xx_i2s.regs); s3c24xx_i2s_pcm_stereo_out.dma_addr = res->start + S3C2410_IISFIFO; s3c24xx_i2s_pcm_stereo_out.slave = pdata->dma_playback; s3c24xx_i2s_pcm_stereo_in.dma_addr = res->start + S3C2410_IISFIFO; s3c24xx_i2s_pcm_stereo_in.slave = pdata->dma_capture; ret = devm_snd_soc_register_component(&pdev->dev, &s3c24xx_i2s_component, &s3c24xx_i2s_dai, 1); if (ret) { pr_err("failed to register the dai\n"); return ret; } ret = samsung_asoc_dma_platform_register(&pdev->dev, pdata->dma_filter, NULL, NULL); if (ret) pr_err("failed to register the dma: %d\n", ret); return ret; }
static int s3c2412_iis_dev_probe(struct platform_device *pdev) { int ret = 0; struct resource *res; struct s3c_audio_pdata *pdata = dev_get_platdata(&pdev->dev); if (!pdata) { dev_err(&pdev->dev, "missing platform data"); return -ENXIO; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); s3c2412_i2s.regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(s3c2412_i2s.regs)) return PTR_ERR(s3c2412_i2s.regs); s3c2412_i2s_pcm_stereo_out.addr = res->start + S3C2412_IISTXD; s3c2412_i2s_pcm_stereo_out.filter_data = pdata->dma_playback; s3c2412_i2s_pcm_stereo_in.addr = res->start + S3C2412_IISRXD; s3c2412_i2s_pcm_stereo_in.filter_data = pdata->dma_capture; ret = samsung_asoc_dma_platform_register(&pdev->dev, pdata->dma_filter, NULL, NULL); if (ret) { pr_err("failed to register the DMA: %d\n", ret); return ret; } ret = s3c_i2sv2_register_component(&pdev->dev, -1, &s3c2412_i2s_component, &s3c2412_i2s_dai); if (ret) pr_err("failed to register the dai\n"); return ret; }
static int spdif_probe(struct platform_device *pdev) { struct s3c_audio_pdata *spdif_pdata; struct resource *mem_res, *dma_res; struct samsung_spdif_info *spdif; int ret; spdif_pdata = pdev->dev.platform_data; dev_dbg(&pdev->dev, "Entered %s\n", __func__); dma_res = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dma_res) { dev_err(&pdev->dev, "Unable to get dma resource.\n"); return -ENXIO; } mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem_res) { dev_err(&pdev->dev, "Unable to get register resource.\n"); return -ENXIO; } if (spdif_pdata && spdif_pdata->cfg_gpio && spdif_pdata->cfg_gpio(pdev)) { dev_err(&pdev->dev, "Unable to configure GPIO pins\n"); return -EINVAL; } spdif = &spdif_info; spdif->dev = &pdev->dev; spin_lock_init(&spdif->lock); spdif->pclk = devm_clk_get(&pdev->dev, "spdif"); if (IS_ERR(spdif->pclk)) { dev_err(&pdev->dev, "failed to get peri-clock\n"); ret = -ENOENT; goto err0; } clk_prepare_enable(spdif->pclk); spdif->sclk = devm_clk_get(&pdev->dev, "sclk_spdif"); if (IS_ERR(spdif->sclk)) { dev_err(&pdev->dev, "failed to get internal source clock\n"); ret = -ENOENT; goto err1; } clk_prepare_enable(spdif->sclk); /* Request S/PDIF Register's memory region */ if (!request_mem_region(mem_res->start, resource_size(mem_res), "samsung-spdif")) { dev_err(&pdev->dev, "Unable to request register region\n"); ret = -EBUSY; goto err2; } spdif->regs = ioremap(mem_res->start, 0x100); if (spdif->regs == NULL) { dev_err(&pdev->dev, "Cannot ioremap registers\n"); ret = -ENXIO; goto err3; } dev_set_drvdata(&pdev->dev, spdif); ret = devm_snd_soc_register_component(&pdev->dev, &samsung_spdif_component, &samsung_spdif_dai, 1); if (ret != 0) { dev_err(&pdev->dev, "fail to register dai\n"); goto err4; } spdif_stereo_out.dma_size = 2; spdif_stereo_out.dma_addr = mem_res->start + DATA_OUTBUF; spdif_stereo_out.channel = dma_res->start; spdif->dma_playback = &spdif_stereo_out; ret = samsung_asoc_dma_platform_register(&pdev->dev); if (ret) { dev_err(&pdev->dev, "failed to register DMA: %d\n", ret); goto err4; } return 0; err4: iounmap(spdif->regs); err3: release_mem_region(mem_res->start, resource_size(mem_res)); err2: clk_disable_unprepare(spdif->sclk); err1: clk_disable_unprepare(spdif->pclk); err0: return ret; }