| OLD | NEW |
| 1 /* | 1 /* |
| 2 * ALSA SoC McASP Audio Layer for TI DAVINCI processor | 2 * ALSA SoC McASP Audio Layer for TI DAVINCI processor |
| 3 * | 3 * |
| 4 * Multi-channel Audio Serial Port Driver | 4 * Multi-channel Audio Serial Port Driver |
| 5 * | 5 * |
| 6 * Author: Nirmal Pandey <n-pandey@ti.com>, | 6 * Author: Nirmal Pandey <n-pandey@ti.com>, |
| 7 * Suresh Rajashekara <suresh.r@ti.com> | 7 * Suresh Rajashekara <suresh.r@ti.com> |
| 8 * Steve Chen <schen@.mvista.com> | 8 * Steve Chen <schen@.mvista.com> |
| 9 * | 9 * |
| 10 * Copyright: (C) 2009 MontaVista Software, Inc., <source@mvista.com> | 10 * Copyright: (C) 2009 MontaVista Software, Inc., <source@mvista.com> |
| (...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 return -ENOMEM; | 861 return -ENOMEM; |
| 862 | 862 |
| 863 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 863 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 864 if (!mem) { | 864 if (!mem) { |
| 865 dev_err(&pdev->dev, "no mem resource?\n"); | 865 dev_err(&pdev->dev, "no mem resource?\n"); |
| 866 ret = -ENODEV; | 866 ret = -ENODEV; |
| 867 goto err_release_data; | 867 goto err_release_data; |
| 868 } | 868 } |
| 869 | 869 |
| 870 ioarea = request_mem_region(mem->start, | 870 ioarea = request_mem_region(mem->start, |
| 871 » » » (mem->end - mem->start) + 1, pdev->name); | 871 » » » resource_size(mem), pdev->name); |
| 872 if (!ioarea) { | 872 if (!ioarea) { |
| 873 dev_err(&pdev->dev, "Audio region already claimed\n"); | 873 dev_err(&pdev->dev, "Audio region already claimed\n"); |
| 874 ret = -EBUSY; | 874 ret = -EBUSY; |
| 875 goto err_release_data; | 875 goto err_release_data; |
| 876 } | 876 } |
| 877 | 877 |
| 878 pdata = pdev->dev.platform_data; | 878 pdata = pdev->dev.platform_data; |
| 879 dev->clk = clk_get(&pdev->dev, NULL); | 879 dev->clk = clk_get(&pdev->dev, NULL); |
| 880 if (IS_ERR(dev->clk)) { | 880 if (IS_ERR(dev->clk)) { |
| 881 ret = -ENODEV; | 881 ret = -ENODEV; |
| 882 goto err_release_region; | 882 goto err_release_region; |
| 883 } | 883 } |
| 884 | 884 |
| 885 clk_enable(dev->clk); | 885 clk_enable(dev->clk); |
| 886 dev->clk_active = 1; | 886 dev->clk_active = 1; |
| 887 | 887 |
| 888 » dev->base = (void __iomem *)IO_ADDRESS(mem->start); | 888 » dev->base = ioremap(mem->start, resource_size(mem)); |
| 889 » if (!dev->base) { |
| 890 » » dev_err(&pdev->dev, "ioremap failed\n"); |
| 891 » » ret = -ENOMEM; |
| 892 » » goto err_release_clk; |
| 893 » } |
| 894 |
| 889 dev->op_mode = pdata->op_mode; | 895 dev->op_mode = pdata->op_mode; |
| 890 dev->tdm_slots = pdata->tdm_slots; | 896 dev->tdm_slots = pdata->tdm_slots; |
| 891 dev->num_serializer = pdata->num_serializer; | 897 dev->num_serializer = pdata->num_serializer; |
| 892 dev->serial_dir = pdata->serial_dir; | 898 dev->serial_dir = pdata->serial_dir; |
| 893 dev->codec_fmt = pdata->codec_fmt; | 899 dev->codec_fmt = pdata->codec_fmt; |
| 894 dev->version = pdata->version; | 900 dev->version = pdata->version; |
| 895 dev->txnumevt = pdata->txnumevt; | 901 dev->txnumevt = pdata->txnumevt; |
| 896 dev->rxnumevt = pdata->rxnumevt; | 902 dev->rxnumevt = pdata->rxnumevt; |
| 897 | 903 |
| 898 dma_data = &dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK]; | 904 dma_data = &dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK]; |
| 899 dma_data->asp_chan_q = pdata->asp_chan_q; | 905 dma_data->asp_chan_q = pdata->asp_chan_q; |
| 900 dma_data->ram_chan_q = pdata->ram_chan_q; | 906 dma_data->ram_chan_q = pdata->ram_chan_q; |
| 901 dma_data->dma_addr = (dma_addr_t) (pdata->tx_dma_offset + | 907 dma_data->dma_addr = (dma_addr_t) (pdata->tx_dma_offset + |
| 902 » » » » » » » io_v2p(dev->base)); | 908 » » » » » » » mem->start); |
| 903 | 909 |
| 904 /* first TX, then RX */ | 910 /* first TX, then RX */ |
| 905 res = platform_get_resource(pdev, IORESOURCE_DMA, 0); | 911 res = platform_get_resource(pdev, IORESOURCE_DMA, 0); |
| 906 if (!res) { | 912 if (!res) { |
| 907 dev_err(&pdev->dev, "no DMA resource\n"); | 913 dev_err(&pdev->dev, "no DMA resource\n"); |
| 908 ret = -ENODEV; | 914 ret = -ENODEV; |
| 909 » » goto err_release_region; | 915 » » goto err_iounmap; |
| 910 } | 916 } |
| 911 | 917 |
| 912 dma_data->channel = res->start; | 918 dma_data->channel = res->start; |
| 913 | 919 |
| 914 dma_data = &dev->dma_params[SNDRV_PCM_STREAM_CAPTURE]; | 920 dma_data = &dev->dma_params[SNDRV_PCM_STREAM_CAPTURE]; |
| 915 dma_data->asp_chan_q = pdata->asp_chan_q; | 921 dma_data->asp_chan_q = pdata->asp_chan_q; |
| 916 dma_data->ram_chan_q = pdata->ram_chan_q; | 922 dma_data->ram_chan_q = pdata->ram_chan_q; |
| 917 dma_data->dma_addr = (dma_addr_t)(pdata->rx_dma_offset + | 923 dma_data->dma_addr = (dma_addr_t)(pdata->rx_dma_offset + |
| 918 » » » » » » » io_v2p(dev->base)); | 924 » » » » » » » mem->start); |
| 919 | 925 |
| 920 res = platform_get_resource(pdev, IORESOURCE_DMA, 1); | 926 res = platform_get_resource(pdev, IORESOURCE_DMA, 1); |
| 921 if (!res) { | 927 if (!res) { |
| 922 dev_err(&pdev->dev, "no DMA resource\n"); | 928 dev_err(&pdev->dev, "no DMA resource\n"); |
| 923 ret = -ENODEV; | 929 ret = -ENODEV; |
| 924 » » goto err_release_region; | 930 » » goto err_iounmap; |
| 925 } | 931 } |
| 926 | 932 |
| 927 dma_data->channel = res->start; | 933 dma_data->channel = res->start; |
| 928 dev_set_drvdata(&pdev->dev, dev); | 934 dev_set_drvdata(&pdev->dev, dev); |
| 929 ret = snd_soc_register_dai(&pdev->dev, &davinci_mcasp_dai[pdata->op_mode
]); | 935 ret = snd_soc_register_dai(&pdev->dev, &davinci_mcasp_dai[pdata->op_mode
]); |
| 930 | 936 |
| 931 if (ret != 0) | 937 if (ret != 0) |
| 932 » » goto err_release_region; | 938 » » goto err_iounmap; |
| 933 return 0; | 939 return 0; |
| 934 | 940 |
| 941 err_iounmap: |
| 942 iounmap(dev->base); |
| 943 err_release_clk: |
| 944 clk_disable(dev->clk); |
| 945 clk_put(dev->clk); |
| 935 err_release_region: | 946 err_release_region: |
| 936 » release_mem_region(mem->start, (mem->end - mem->start) + 1); | 947 » release_mem_region(mem->start, resource_size(mem)); |
| 937 err_release_data: | 948 err_release_data: |
| 938 kfree(dev); | 949 kfree(dev); |
| 939 | 950 |
| 940 return ret; | 951 return ret; |
| 941 } | 952 } |
| 942 | 953 |
| 943 static int davinci_mcasp_remove(struct platform_device *pdev) | 954 static int davinci_mcasp_remove(struct platform_device *pdev) |
| 944 { | 955 { |
| 945 struct davinci_audio_dev *dev = dev_get_drvdata(&pdev->dev); | 956 struct davinci_audio_dev *dev = dev_get_drvdata(&pdev->dev); |
| 946 struct resource *mem; | 957 struct resource *mem; |
| 947 | 958 |
| 948 snd_soc_unregister_dai(&pdev->dev); | 959 snd_soc_unregister_dai(&pdev->dev); |
| 949 clk_disable(dev->clk); | 960 clk_disable(dev->clk); |
| 950 clk_put(dev->clk); | 961 clk_put(dev->clk); |
| 951 dev->clk = NULL; | 962 dev->clk = NULL; |
| 952 | 963 |
| 953 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 964 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 954 » release_mem_region(mem->start, (mem->end - mem->start) + 1); | 965 » release_mem_region(mem->start, resource_size(mem)); |
| 955 | 966 |
| 956 kfree(dev); | 967 kfree(dev); |
| 957 | 968 |
| 958 return 0; | 969 return 0; |
| 959 } | 970 } |
| 960 | 971 |
| 961 static struct platform_driver davinci_mcasp_driver = { | 972 static struct platform_driver davinci_mcasp_driver = { |
| 962 .probe = davinci_mcasp_probe, | 973 .probe = davinci_mcasp_probe, |
| 963 .remove = davinci_mcasp_remove, | 974 .remove = davinci_mcasp_remove, |
| 964 .driver = { | 975 .driver = { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 976 static void __exit davinci_mcasp_exit(void) | 987 static void __exit davinci_mcasp_exit(void) |
| 977 { | 988 { |
| 978 platform_driver_unregister(&davinci_mcasp_driver); | 989 platform_driver_unregister(&davinci_mcasp_driver); |
| 979 } | 990 } |
| 980 module_exit(davinci_mcasp_exit); | 991 module_exit(davinci_mcasp_exit); |
| 981 | 992 |
| 982 MODULE_AUTHOR("Steve Chen"); | 993 MODULE_AUTHOR("Steve Chen"); |
| 983 MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface"); | 994 MODULE_DESCRIPTION("TI DAVINCI McASP SoC Interface"); |
| 984 MODULE_LICENSE("GPL"); | 995 MODULE_LICENSE("GPL"); |
| 985 | 996 |
| OLD | NEW |