Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: sound/soc/davinci/davinci-i2s.c

Issue 6577007: CHROMIUM: ASoC: Import entire upstream ASoC tree (Closed)
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sound/soc/davinci/davinci-evm.c ('k') | sound/soc/davinci/davinci-mcasp.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * ALSA SoC I2S (McBSP) Audio Layer for TI DAVINCI processor 2 * ALSA SoC I2S (McBSP) Audio Layer for TI DAVINCI processor
3 * 3 *
4 * Author: Vladimir Barinov, <vbarinov@embeddedalley.com> 4 * Author: Vladimir Barinov, <vbarinov@embeddedalley.com>
5 * Copyright: (C) 2007 MontaVista Software, Inc., <source@mvista.com> 5 * Copyright: (C) 2007 MontaVista Software, Inc., <source@mvista.com>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as 8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 enum dma_event_q asp_chan_q = EVENTQ_0; 651 enum dma_event_q asp_chan_q = EVENTQ_0;
652 enum dma_event_q ram_chan_q = EVENTQ_1; 652 enum dma_event_q ram_chan_q = EVENTQ_1;
653 int ret; 653 int ret;
654 654
655 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 655 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
656 if (!mem) { 656 if (!mem) {
657 dev_err(&pdev->dev, "no mem resource?\n"); 657 dev_err(&pdev->dev, "no mem resource?\n");
658 return -ENODEV; 658 return -ENODEV;
659 } 659 }
660 660
661 » ioarea = request_mem_region(mem->start, (mem->end - mem->start) + 1, 661 » ioarea = request_mem_region(mem->start, resource_size(mem),
662 pdev->name); 662 pdev->name);
663 if (!ioarea) { 663 if (!ioarea) {
664 dev_err(&pdev->dev, "McBSP region already claimed\n"); 664 dev_err(&pdev->dev, "McBSP region already claimed\n");
665 return -EBUSY; 665 return -EBUSY;
666 } 666 }
667 667
668 dev = kzalloc(sizeof(struct davinci_mcbsp_dev), GFP_KERNEL); 668 dev = kzalloc(sizeof(struct davinci_mcbsp_dev), GFP_KERNEL);
669 if (!dev) { 669 if (!dev) {
670 ret = -ENOMEM; 670 ret = -ENOMEM;
671 goto err_release_region; 671 goto err_release_region;
(...skipping 15 matching lines...) Expand all
687 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].asp_chan_q = asp_chan_q; 687 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].asp_chan_q = asp_chan_q;
688 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].ram_chan_q = ram_chan_q; 688 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].ram_chan_q = ram_chan_q;
689 689
690 dev->clk = clk_get(&pdev->dev, NULL); 690 dev->clk = clk_get(&pdev->dev, NULL);
691 if (IS_ERR(dev->clk)) { 691 if (IS_ERR(dev->clk)) {
692 ret = -ENODEV; 692 ret = -ENODEV;
693 goto err_free_mem; 693 goto err_free_mem;
694 } 694 }
695 clk_enable(dev->clk); 695 clk_enable(dev->clk);
696 696
697 » dev->base = (void __iomem *)IO_ADDRESS(mem->start); 697 » dev->base = ioremap(mem->start, resource_size(mem));
698 » if (!dev->base) {
699 » » dev_err(&pdev->dev, "ioremap failed\n");
700 » » ret = -ENOMEM;
701 » » goto err_release_clk;
702 » }
698 703
699 dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].dma_addr = 704 dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].dma_addr =
700 » (dma_addr_t)(io_v2p(dev->base) + DAVINCI_MCBSP_DXR_REG); 705 » (dma_addr_t)(mem->start + DAVINCI_MCBSP_DXR_REG);
701 706
702 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].dma_addr = 707 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].dma_addr =
703 » (dma_addr_t)(io_v2p(dev->base) + DAVINCI_MCBSP_DRR_REG); 708 » (dma_addr_t)(mem->start + DAVINCI_MCBSP_DRR_REG);
704 709
705 /* first TX, then RX */ 710 /* first TX, then RX */
706 res = platform_get_resource(pdev, IORESOURCE_DMA, 0); 711 res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
707 if (!res) { 712 if (!res) {
708 dev_err(&pdev->dev, "no DMA resource\n"); 713 dev_err(&pdev->dev, "no DMA resource\n");
709 ret = -ENXIO; 714 ret = -ENXIO;
710 » » goto err_free_mem; 715 » » goto err_iounmap;
711 } 716 }
712 dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].channel = res->start; 717 dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].channel = res->start;
713 718
714 res = platform_get_resource(pdev, IORESOURCE_DMA, 1); 719 res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
715 if (!res) { 720 if (!res) {
716 dev_err(&pdev->dev, "no DMA resource\n"); 721 dev_err(&pdev->dev, "no DMA resource\n");
717 ret = -ENXIO; 722 ret = -ENXIO;
718 » » goto err_free_mem; 723 » » goto err_iounmap;
719 } 724 }
720 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].channel = res->start; 725 dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].channel = res->start;
721 dev->dev = &pdev->dev; 726 dev->dev = &pdev->dev;
722 727
723 dev_set_drvdata(&pdev->dev, dev); 728 dev_set_drvdata(&pdev->dev, dev);
724 729
725 ret = snd_soc_register_dai(&pdev->dev, &davinci_i2s_dai); 730 ret = snd_soc_register_dai(&pdev->dev, &davinci_i2s_dai);
726 if (ret != 0) 731 if (ret != 0)
727 » » goto err_free_mem; 732 » » goto err_iounmap;
728 733
729 return 0; 734 return 0;
730 735
736 err_iounmap:
737 iounmap(dev->base);
738 err_release_clk:
739 clk_disable(dev->clk);
740 clk_put(dev->clk);
731 err_free_mem: 741 err_free_mem:
732 kfree(dev); 742 kfree(dev);
733 err_release_region: 743 err_release_region:
734 » release_mem_region(mem->start, (mem->end - mem->start) + 1); 744 » release_mem_region(mem->start, resource_size(mem));
735 745
736 return ret; 746 return ret;
737 } 747 }
738 748
739 static int davinci_i2s_remove(struct platform_device *pdev) 749 static int davinci_i2s_remove(struct platform_device *pdev)
740 { 750 {
741 struct davinci_mcbsp_dev *dev = dev_get_drvdata(&pdev->dev); 751 struct davinci_mcbsp_dev *dev = dev_get_drvdata(&pdev->dev);
742 struct resource *mem; 752 struct resource *mem;
743 753
744 snd_soc_unregister_dai(&pdev->dev); 754 snd_soc_unregister_dai(&pdev->dev);
745 clk_disable(dev->clk); 755 clk_disable(dev->clk);
746 clk_put(dev->clk); 756 clk_put(dev->clk);
747 dev->clk = NULL; 757 dev->clk = NULL;
748 kfree(dev); 758 kfree(dev);
749 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 759 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
750 » release_mem_region(mem->start, (mem->end - mem->start) + 1); 760 » release_mem_region(mem->start, resource_size(mem));
751 761
752 return 0; 762 return 0;
753 } 763 }
754 764
755 static struct platform_driver davinci_mcbsp_driver = { 765 static struct platform_driver davinci_mcbsp_driver = {
756 .probe = davinci_i2s_probe, 766 .probe = davinci_i2s_probe,
757 .remove = davinci_i2s_remove, 767 .remove = davinci_i2s_remove,
758 .driver = { 768 .driver = {
759 .name = "davinci-mcbsp", 769 .name = "davinci-mcbsp",
760 .owner = THIS_MODULE, 770 .owner = THIS_MODULE,
761 }, 771 },
762 }; 772 };
763 773
764 static int __init davinci_i2s_init(void) 774 static int __init davinci_i2s_init(void)
765 { 775 {
766 return platform_driver_register(&davinci_mcbsp_driver); 776 return platform_driver_register(&davinci_mcbsp_driver);
767 } 777 }
768 module_init(davinci_i2s_init); 778 module_init(davinci_i2s_init);
769 779
770 static void __exit davinci_i2s_exit(void) 780 static void __exit davinci_i2s_exit(void)
771 { 781 {
772 platform_driver_unregister(&davinci_mcbsp_driver); 782 platform_driver_unregister(&davinci_mcbsp_driver);
773 } 783 }
774 module_exit(davinci_i2s_exit); 784 module_exit(davinci_i2s_exit);
775 785
776 MODULE_AUTHOR("Vladimir Barinov"); 786 MODULE_AUTHOR("Vladimir Barinov");
777 MODULE_DESCRIPTION("TI DAVINCI I2S (McBSP) SoC Interface"); 787 MODULE_DESCRIPTION("TI DAVINCI I2S (McBSP) SoC Interface");
778 MODULE_LICENSE("GPL"); 788 MODULE_LICENSE("GPL");
OLDNEW
« no previous file with comments | « sound/soc/davinci/davinci-evm.c ('k') | sound/soc/davinci/davinci-mcasp.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698