diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-12-13 02:01:21 -0500 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2006-01-08 22:53:55 -0500 |
| commit | cc5d0189b9ba95260857a5018a1c2fef90008507 (patch) | |
| tree | 1202c94b6b3cb81a96d0a0e54424cad10eef68bb /sound/oss/dmasound | |
| parent | 9cf84d7c97992dbe5360b241327341c07ce30fc9 (diff) | |
[PATCH] powerpc: Remove device_node addrs/n_addr
The pre-parsed addrs/n_addrs fields in struct device_node are finally
gone. Remove the dodgy heuristics that did that parsing at boot and
remove the fields themselves since we now have a good replacement with
the new OF parsing code. This patch also fixes a bunch of drivers to use
the new code instead, so that at least pmac32, pseries, iseries and g5
defconfigs build.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'sound/oss/dmasound')
| -rw-r--r-- | sound/oss/dmasound/dmasound_awacs.c | 81 |
1 files changed, 49 insertions, 32 deletions
diff --git a/sound/oss/dmasound/dmasound_awacs.c b/sound/oss/dmasound/dmasound_awacs.c index cebd881b91ae..74f975676ccb 100644 --- a/sound/oss/dmasound/dmasound_awacs.c +++ b/sound/oss/dmasound/dmasound_awacs.c | |||
| @@ -125,6 +125,7 @@ static int awacs_rate_index; | |||
| 125 | static int awacs_subframe; | 125 | static int awacs_subframe; |
| 126 | static struct device_node* awacs_node; | 126 | static struct device_node* awacs_node; |
| 127 | static struct device_node* i2s_node; | 127 | static struct device_node* i2s_node; |
| 128 | static struct resource awacs_rsrc[3]; | ||
| 128 | 129 | ||
| 129 | static char awacs_name[64]; | 130 | static char awacs_name[64]; |
| 130 | static int awacs_revision; | 131 | static int awacs_revision; |
| @@ -667,9 +668,12 @@ static void PMacIrqCleanup(void) | |||
| 667 | iounmap(awacs_txdma); | 668 | iounmap(awacs_txdma); |
| 668 | iounmap(awacs_rxdma); | 669 | iounmap(awacs_rxdma); |
| 669 | 670 | ||
| 670 | release_OF_resource(awacs_node, 0); | 671 | release_mem_region(awacs_rsrc[0].start, |
| 671 | release_OF_resource(awacs_node, 1); | 672 | awacs_rsrc[0].end - awacs_rsrc[0].start + 1); |
| 672 | release_OF_resource(awacs_node, 2); | 673 | release_mem_region(awacs_rsrc[1].start, |
| 674 | awacs_rsrc[1].end - awacs_rsrc[1].start + 1); | ||
| 675 | release_mem_region(awacs_rsrc[2].start, | ||
| 676 | awacs_rsrc[2].end - awacs_rsrc[2].start + 1); | ||
| 673 | 677 | ||
| 674 | kfree(awacs_tx_cmd_space); | 678 | kfree(awacs_tx_cmd_space); |
| 675 | kfree(awacs_rx_cmd_space); | 679 | kfree(awacs_rx_cmd_space); |
| @@ -2863,46 +2867,58 @@ printk("dmasound_pmac: couldn't find a Codec we can handle\n"); | |||
| 2863 | * other info if necessary (early AWACS we want to read chip ids) | 2867 | * other info if necessary (early AWACS we want to read chip ids) |
| 2864 | */ | 2868 | */ |
| 2865 | 2869 | ||
| 2866 | if (io->n_addrs < 3 || io->n_intrs < 3) { | 2870 | if (of_get_address(io, 2, NULL, NULL) == NULL || io->n_intrs < 3) { |
| 2867 | /* OK - maybe we need to use the 'awacs' node (on earlier | 2871 | /* OK - maybe we need to use the 'awacs' node (on earlier |
| 2868 | * machines). | 2872 | * machines). |
| 2869 | */ | 2873 | */ |
| 2870 | if (awacs_node) { | 2874 | if (awacs_node) { |
| 2871 | io = awacs_node ; | 2875 | io = awacs_node ; |
| 2872 | if (io->n_addrs < 3 || io->n_intrs < 3) { | 2876 | if (of_get_address(io, 2, NULL, NULL) == NULL || |
| 2873 | printk("dmasound_pmac: can't use %s" | 2877 | io->n_intrs < 3) { |
| 2874 | " (%d addrs, %d intrs)\n", | 2878 | printk("dmasound_pmac: can't use %s\n", |
| 2875 | io->full_name, io->n_addrs, io->n_intrs); | 2879 | io->full_name); |
| 2876 | return -ENODEV; | 2880 | return -ENODEV; |
| 2877 | } | 2881 | } |
| 2878 | } else { | 2882 | } else |
| 2879 | printk("dmasound_pmac: can't use %s (%d addrs, %d intrs)\n", | 2883 | printk("dmasound_pmac: can't use %s\n", io->full_name); |
| 2880 | io->full_name, io->n_addrs, io->n_intrs); | ||
| 2881 | } | ||
| 2882 | } | 2884 | } |
| 2883 | 2885 | ||
| 2884 | if (!request_OF_resource(io, 0, NULL)) { | 2886 | if (of_address_to_resource(io, 0, &awacs_rsrc[0]) || |
| 2887 | request_mem_region(awacs_rsrc[0].start, | ||
| 2888 | awacs_rsrc[0].end - awacs_rsrc[0].start + 1, | ||
| 2889 | " (IO)") == NULL) { | ||
| 2885 | printk(KERN_ERR "dmasound: can't request IO resource !\n"); | 2890 | printk(KERN_ERR "dmasound: can't request IO resource !\n"); |
| 2886 | return -ENODEV; | 2891 | return -ENODEV; |
| 2887 | } | 2892 | } |
| 2888 | if (!request_OF_resource(io, 1, " (tx dma)")) { | 2893 | if (of_address_to_resource(io, 1, &awacs_rsrc[1]) || |
| 2889 | release_OF_resource(io, 0); | 2894 | request_mem_region(awacs_rsrc[1].start, |
| 2890 | printk(KERN_ERR "dmasound: can't request TX DMA resource !\n"); | 2895 | awacs_rsrc[1].end - awacs_rsrc[1].start + 1, |
| 2896 | " (tx dma)") == NULL) { | ||
| 2897 | release_mem_region(awacs_rsrc[0].start, | ||
| 2898 | awacs_rsrc[0].end - awacs_rsrc[0].start + 1); | ||
| 2899 | printk(KERN_ERR "dmasound: can't request Tx DMA resource !\n"); | ||
| 2891 | return -ENODEV; | 2900 | return -ENODEV; |
| 2892 | } | 2901 | } |
| 2893 | 2902 | if (of_address_to_resource(io, 2, &awacs_rsrc[2]) || | |
| 2894 | if (!request_OF_resource(io, 2, " (rx dma)")) { | 2903 | request_mem_region(awacs_rsrc[2].start, |
| 2895 | release_OF_resource(io, 0); | 2904 | awacs_rsrc[2].end - awacs_rsrc[2].start + 1, |
| 2896 | release_OF_resource(io, 1); | 2905 | " (rx dma)") == NULL) { |
| 2897 | printk(KERN_ERR "dmasound: can't request RX DMA resource !\n"); | 2906 | release_mem_region(awacs_rsrc[0].start, |
| 2907 | awacs_rsrc[0].end - awacs_rsrc[0].start + 1); | ||
| 2908 | release_mem_region(awacs_rsrc[1].start, | ||
| 2909 | awacs_rsrc[1].end - awacs_rsrc[1].start + 1); | ||
| 2910 | printk(KERN_ERR "dmasound: can't request Rx DMA resource !\n"); | ||
| 2898 | return -ENODEV; | 2911 | return -ENODEV; |
| 2899 | } | 2912 | } |
| 2900 | 2913 | ||
| 2901 | awacs_beep_dev = input_allocate_device(); | 2914 | awacs_beep_dev = input_allocate_device(); |
| 2902 | if (!awacs_beep_dev) { | 2915 | if (!awacs_beep_dev) { |
| 2903 | release_OF_resource(io, 0); | 2916 | release_mem_region(awacs_rsrc[0].start, |
| 2904 | release_OF_resource(io, 1); | 2917 | awacs_rsrc[0].end - awacs_rsrc[0].start + 1); |
| 2905 | release_OF_resource(io, 2); | 2918 | release_mem_region(awacs_rsrc[1].start, |
| 2919 | awacs_rsrc[1].end - awacs_rsrc[1].start + 1); | ||
| 2920 | release_mem_region(awacs_rsrc[2].start, | ||
| 2921 | awacs_rsrc[2].end - awacs_rsrc[2].start + 1); | ||
| 2906 | printk(KERN_ERR "dmasound: can't allocate input device !\n"); | 2922 | printk(KERN_ERR "dmasound: can't allocate input device !\n"); |
| 2907 | return -ENOMEM; | 2923 | return -ENOMEM; |
| 2908 | } | 2924 | } |
| @@ -2916,11 +2932,11 @@ printk("dmasound_pmac: couldn't find a Codec we can handle\n"); | |||
| 2916 | 2932 | ||
| 2917 | /* all OF versions I've seen use this value */ | 2933 | /* all OF versions I've seen use this value */ |
| 2918 | if (i2s_node) | 2934 | if (i2s_node) |
| 2919 | i2s = ioremap(io->addrs[0].address, 0x1000); | 2935 | i2s = ioremap(awacs_rsrc[0].start, 0x1000); |
| 2920 | else | 2936 | else |
| 2921 | awacs = ioremap(io->addrs[0].address, 0x1000); | 2937 | awacs = ioremap(awacs_rsrc[0].start, 0x1000); |
| 2922 | awacs_txdma = ioremap(io->addrs[1].address, 0x100); | 2938 | awacs_txdma = ioremap(awacs_rsrc[1].start, 0x100); |
| 2923 | awacs_rxdma = ioremap(io->addrs[2].address, 0x100); | 2939 | awacs_rxdma = ioremap(awacs_rsrc[2].start, 0x100); |
| 2924 | 2940 | ||
| 2925 | /* first of all make sure that the chip is powered up....*/ | 2941 | /* first of all make sure that the chip is powered up....*/ |
| 2926 | pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, io, 0, 1); | 2942 | pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, io, 0, 1); |
| @@ -3083,9 +3099,10 @@ printk("dmasound_pmac: Awacs/Screamer Codec Mfct: %d Rev %d\n", mfg, rev); | |||
| 3083 | struct device_node* mio; | 3099 | struct device_node* mio; |
| 3084 | macio_base = NULL; | 3100 | macio_base = NULL; |
| 3085 | for (mio = io->parent; mio; mio = mio->parent) { | 3101 | for (mio = io->parent; mio; mio = mio->parent) { |
| 3086 | if (strcmp(mio->name, "mac-io") == 0 | 3102 | if (strcmp(mio->name, "mac-io") == 0) { |
| 3087 | && mio->n_addrs > 0) { | 3103 | struct resource r; |
| 3088 | macio_base = ioremap(mio->addrs[0].address, 0x40); | 3104 | if (of_address_to_resource(mio, 0, &r) == 0) |
| 3105 | macio_base = ioremap(r.start, 0x40); | ||
| 3089 | break; | 3106 | break; |
| 3090 | } | 3107 | } |
| 3091 | } | 3108 | } |
