aboutsummaryrefslogtreecommitdiffstats
path: root/sound/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'sound/sparc')
-rw-r--r--sound/sparc/amd7930.c104
-rw-r--r--sound/sparc/cs4231.c202
-rw-r--r--sound/sparc/dbri.c106
3 files changed, 159 insertions, 253 deletions
diff --git a/sound/sparc/amd7930.c b/sound/sparc/amd7930.c
index 0c63e0585b15..f87933e48812 100644
--- a/sound/sparc/amd7930.c
+++ b/sound/sparc/amd7930.c
@@ -1,6 +1,6 @@
1/* 1/*
2 * Driver for AMD7930 sound chips found on Sparcs. 2 * Driver for AMD7930 sound chips found on Sparcs.
3 * Copyright (C) 2002 David S. Miller <davem@redhat.com> 3 * Copyright (C) 2002, 2008 David S. Miller <davem@davemloft.net>
4 * 4 *
5 * Based entirely upon drivers/sbus/audio/amd7930.c which is: 5 * Based entirely upon drivers/sbus/audio/amd7930.c which is:
6 * Copyright (C) 1996,1997 Thomas K. Dyas (tdyas@eden.rutgers.edu) 6 * Copyright (C) 1996,1997 Thomas K. Dyas (tdyas@eden.rutgers.edu)
@@ -35,6 +35,8 @@
35#include <linux/init.h> 35#include <linux/init.h>
36#include <linux/interrupt.h> 36#include <linux/interrupt.h>
37#include <linux/moduleparam.h> 37#include <linux/moduleparam.h>
38#include <linux/of.h>
39#include <linux/of_device.h>
38 40
39#include <sound/core.h> 41#include <sound/core.h>
40#include <sound/pcm.h> 42#include <sound/pcm.h>
@@ -44,7 +46,6 @@
44 46
45#include <asm/io.h> 47#include <asm/io.h>
46#include <asm/irq.h> 48#include <asm/irq.h>
47#include <asm/sbus.h>
48#include <asm/prom.h> 49#include <asm/prom.h>
49 50
50static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ 51static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
@@ -335,8 +336,8 @@ struct snd_amd7930 {
335 int pgain; 336 int pgain;
336 int mgain; 337 int mgain;
337 338
339 struct of_device *op;
338 unsigned int irq; 340 unsigned int irq;
339 unsigned int regs_size;
340 struct snd_amd7930 *next; 341 struct snd_amd7930 *next;
341}; 342};
342 343
@@ -765,7 +766,6 @@ static int __devinit snd_amd7930_pcm(struct snd_amd7930 *amd)
765 /* playback count */ 1, 766 /* playback count */ 1,
766 /* capture count */ 1, &pcm)) < 0) 767 /* capture count */ 1, &pcm)) < 0)
767 return err; 768 return err;
768 snd_assert(pcm != NULL, return -EINVAL);
769 769
770 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_amd7930_playback_ops); 770 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_amd7930_playback_ops);
771 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_amd7930_capture_ops); 771 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_amd7930_capture_ops);
@@ -788,13 +788,6 @@ static int __devinit snd_amd7930_pcm(struct snd_amd7930 *amd)
788 788
789static int snd_amd7930_info_volume(struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo) 789static int snd_amd7930_info_volume(struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
790{ 790{
791 int type = kctl->private_value;
792
793 snd_assert(type == VOLUME_MONITOR ||
794 type == VOLUME_CAPTURE ||
795 type == VOLUME_PLAYBACK, return -EINVAL);
796 (void) type;
797
798 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 791 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
799 uinfo->count = 1; 792 uinfo->count = 1;
800 uinfo->value.integer.min = 0; 793 uinfo->value.integer.min = 0;
@@ -809,10 +802,6 @@ static int snd_amd7930_get_volume(struct snd_kcontrol *kctl, struct snd_ctl_elem
809 int type = kctl->private_value; 802 int type = kctl->private_value;
810 int *swval; 803 int *swval;
811 804
812 snd_assert(type == VOLUME_MONITOR ||
813 type == VOLUME_CAPTURE ||
814 type == VOLUME_PLAYBACK, return -EINVAL);
815
816 switch (type) { 805 switch (type) {
817 case VOLUME_MONITOR: 806 case VOLUME_MONITOR:
818 swval = &amd->mgain; 807 swval = &amd->mgain;
@@ -838,10 +827,6 @@ static int snd_amd7930_put_volume(struct snd_kcontrol *kctl, struct snd_ctl_elem
838 int type = kctl->private_value; 827 int type = kctl->private_value;
839 int *swval, change; 828 int *swval, change;
840 829
841 snd_assert(type == VOLUME_MONITOR ||
842 type == VOLUME_CAPTURE ||
843 type == VOLUME_PLAYBACK, return -EINVAL);
844
845 switch (type) { 830 switch (type) {
846 case VOLUME_MONITOR: 831 case VOLUME_MONITOR:
847 swval = &amd->mgain; 832 swval = &amd->mgain;
@@ -904,7 +889,8 @@ static int __devinit snd_amd7930_mixer(struct snd_amd7930 *amd)
904 struct snd_card *card; 889 struct snd_card *card;
905 int idx, err; 890 int idx, err;
906 891
907 snd_assert(amd != NULL && amd->card != NULL, return -EINVAL); 892 if (snd_BUG_ON(!amd || !amd->card))
893 return -EINVAL;
908 894
909 card = amd->card; 895 card = amd->card;
910 strcpy(card->mixername, card->shortname); 896 strcpy(card->mixername, card->shortname);
@@ -920,13 +906,16 @@ static int __devinit snd_amd7930_mixer(struct snd_amd7930 *amd)
920 906
921static int snd_amd7930_free(struct snd_amd7930 *amd) 907static int snd_amd7930_free(struct snd_amd7930 *amd)
922{ 908{
909 struct of_device *op = amd->op;
910
923 amd7930_idle(amd); 911 amd7930_idle(amd);
924 912
925 if (amd->irq) 913 if (amd->irq)
926 free_irq(amd->irq, amd); 914 free_irq(amd->irq, amd);
927 915
928 if (amd->regs) 916 if (amd->regs)
929 sbus_iounmap(amd->regs, amd->regs_size); 917 of_iounmap(&op->resource[0], amd->regs,
918 resource_size(&op->resource[0]));
930 919
931 kfree(amd); 920 kfree(amd);
932 921
@@ -945,13 +934,12 @@ static struct snd_device_ops snd_amd7930_dev_ops = {
945}; 934};
946 935
947static int __devinit snd_amd7930_create(struct snd_card *card, 936static int __devinit snd_amd7930_create(struct snd_card *card,
948 struct resource *rp, 937 struct of_device *op,
949 unsigned int reg_size,
950 int irq, int dev, 938 int irq, int dev,
951 struct snd_amd7930 **ramd) 939 struct snd_amd7930 **ramd)
952{ 940{
953 unsigned long flags;
954 struct snd_amd7930 *amd; 941 struct snd_amd7930 *amd;
942 unsigned long flags;
955 int err; 943 int err;
956 944
957 *ramd = NULL; 945 *ramd = NULL;
@@ -961,9 +949,10 @@ static int __devinit snd_amd7930_create(struct snd_card *card,
961 949
962 spin_lock_init(&amd->lock); 950 spin_lock_init(&amd->lock);
963 amd->card = card; 951 amd->card = card;
964 amd->regs_size = reg_size; 952 amd->op = op;
965 953
966 amd->regs = sbus_ioremap(rp, 0, amd->regs_size, "amd7930"); 954 amd->regs = of_ioremap(&op->resource[0], 0,
955 resource_size(&op->resource[0]), "amd7930");
967 if (!amd->regs) { 956 if (!amd->regs) {
968 snd_printk("amd7930-%d: Unable to map chip registers.\n", dev); 957 snd_printk("amd7930-%d: Unable to map chip registers.\n", dev);
969 return -EIO; 958 return -EIO;
@@ -1012,12 +1001,15 @@ static int __devinit snd_amd7930_create(struct snd_card *card,
1012 return 0; 1001 return 0;
1013} 1002}
1014 1003
1015static int __devinit amd7930_attach_common(struct resource *rp, int irq) 1004static int __devinit amd7930_sbus_probe(struct of_device *op, const struct of_device_id *match)
1016{ 1005{
1006 struct resource *rp = &op->resource[0];
1017 static int dev_num; 1007 static int dev_num;
1018 struct snd_card *card; 1008 struct snd_card *card;
1019 struct snd_amd7930 *amd; 1009 struct snd_amd7930 *amd;
1020 int err; 1010 int err, irq;
1011
1012 irq = op->irqs[0];
1021 1013
1022 if (dev_num >= SNDRV_CARDS) 1014 if (dev_num >= SNDRV_CARDS)
1023 return -ENODEV; 1015 return -ENODEV;
@@ -1038,8 +1030,7 @@ static int __devinit amd7930_attach_common(struct resource *rp, int irq)
1038 (unsigned long long)rp->start, 1030 (unsigned long long)rp->start,
1039 irq); 1031 irq);
1040 1032
1041 if ((err = snd_amd7930_create(card, rp, 1033 if ((err = snd_amd7930_create(card, op,
1042 (rp->end - rp->start) + 1,
1043 irq, dev_num, &amd)) < 0) 1034 irq, dev_num, &amd)) < 0)
1044 goto out_err; 1035 goto out_err;
1045 1036
@@ -1064,43 +1055,7 @@ out_err:
1064 return err; 1055 return err;
1065} 1056}
1066 1057
1067static int __devinit amd7930_obio_attach(struct device_node *dp) 1058static const struct of_device_id amd7930_match[] = {
1068{
1069 const struct linux_prom_registers *regs;
1070 const struct linux_prom_irqs *irqp;
1071 struct resource res, *rp;
1072 int len;
1073
1074 irqp = of_get_property(dp, "intr", &len);
1075 if (!irqp) {
1076 snd_printk("%s: Firmware node lacks IRQ property.\n",
1077 dp->full_name);
1078 return -ENODEV;
1079 }
1080
1081 regs = of_get_property(dp, "reg", &len);
1082 if (!regs) {
1083 snd_printk("%s: Firmware node lacks register property.\n",
1084 dp->full_name);
1085 return -ENODEV;
1086 }
1087
1088 rp = &res;
1089 rp->start = regs->phys_addr;
1090 rp->end = rp->start + regs->reg_size - 1;
1091 rp->flags = IORESOURCE_IO | (regs->which_io & 0xff);
1092
1093 return amd7930_attach_common(rp, irqp->pri);
1094}
1095
1096static int __devinit amd7930_sbus_probe(struct of_device *dev, const struct of_device_id *match)
1097{
1098 struct sbus_dev *sdev = to_sbus_device(&dev->dev);
1099
1100 return amd7930_attach_common(&sdev->resource[0], sdev->irqs[0]);
1101}
1102
1103static struct of_device_id amd7930_match[] = {
1104 { 1059 {
1105 .name = "audio", 1060 .name = "audio",
1106 }, 1061 },
@@ -1115,20 +1070,7 @@ static struct of_platform_driver amd7930_sbus_driver = {
1115 1070
1116static int __init amd7930_init(void) 1071static int __init amd7930_init(void)
1117{ 1072{
1118 struct device_node *dp; 1073 return of_register_driver(&amd7930_sbus_driver, &of_bus_type);
1119
1120 /* Try to find the sun4c "audio" node first. */
1121 dp = of_find_node_by_path("/");
1122 dp = dp->child;
1123 while (dp) {
1124 if (!strcmp(dp->name, "audio"))
1125 amd7930_obio_attach(dp);
1126
1127 dp = dp->sibling;
1128 }
1129
1130 /* Probe each SBUS for amd7930 chips. */
1131 return of_register_driver(&amd7930_sbus_driver, &sbus_bus_type);
1132} 1074}
1133 1075
1134static void __exit amd7930_exit(void) 1076static void __exit amd7930_exit(void)
diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
index 1c4797be72ee..d44bf98e965e 100644
--- a/sound/sparc/cs4231.c
+++ b/sound/sparc/cs4231.c
@@ -1,6 +1,6 @@
1/* 1/*
2 * Driver for CS4231 sound chips found on Sparcs. 2 * Driver for CS4231 sound chips found on Sparcs.
3 * Copyright (C) 2002 David S. Miller <davem@redhat.com> 3 * Copyright (C) 2002, 2008 David S. Miller <davem@davemloft.net>
4 * 4 *
5 * Based entirely upon drivers/sbus/audio/cs4231.c which is: 5 * Based entirely upon drivers/sbus/audio/cs4231.c which is:
6 * Copyright (C) 1996, 1997, 1998 Derrick J Brashear (shadow@andrew.cmu.edu) 6 * Copyright (C) 1996, 1997, 1998 Derrick J Brashear (shadow@andrew.cmu.edu)
@@ -17,7 +17,8 @@
17#include <linux/moduleparam.h> 17#include <linux/moduleparam.h>
18#include <linux/irq.h> 18#include <linux/irq.h>
19#include <linux/io.h> 19#include <linux/io.h>
20 20#include <linux/of.h>
21#include <linux/of_device.h>
21 22
22#include <sound/core.h> 23#include <sound/core.h>
23#include <sound/pcm.h> 24#include <sound/pcm.h>
@@ -29,13 +30,12 @@
29 30
30#ifdef CONFIG_SBUS 31#ifdef CONFIG_SBUS
31#define SBUS_SUPPORT 32#define SBUS_SUPPORT
32#include <asm/sbus.h>
33#endif 33#endif
34 34
35#if defined(CONFIG_PCI) && defined(CONFIG_SPARC64) 35#if defined(CONFIG_PCI) && defined(CONFIG_SPARC64)
36#define EBUS_SUPPORT 36#define EBUS_SUPPORT
37#include <linux/pci.h> 37#include <linux/pci.h>
38#include <asm/ebus.h> 38#include <asm/ebus_dma.h>
39#endif 39#endif
40 40
41static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ 41static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
@@ -70,8 +70,6 @@ struct cs4231_dma_control {
70 int (*request)(struct cs4231_dma_control *dma_cont, 70 int (*request)(struct cs4231_dma_control *dma_cont,
71 dma_addr_t bus_addr, size_t len); 71 dma_addr_t bus_addr, size_t len);
72 unsigned int (*address)(struct cs4231_dma_control *dma_cont); 72 unsigned int (*address)(struct cs4231_dma_control *dma_cont);
73 void (*preallocate)(struct snd_cs4231 *chip,
74 struct snd_pcm *pcm);
75#ifdef EBUS_SUPPORT 73#ifdef EBUS_SUPPORT
76 struct ebus_dma_info ebus_info; 74 struct ebus_dma_info ebus_info;
77#endif 75#endif
@@ -114,21 +112,12 @@ struct snd_cs4231 {
114 struct mutex mce_mutex; /* mutex for mce register */ 112 struct mutex mce_mutex; /* mutex for mce register */
115 struct mutex open_mutex; /* mutex for ALSA open/close */ 113 struct mutex open_mutex; /* mutex for ALSA open/close */
116 114
117 union { 115 struct of_device *op;
118#ifdef SBUS_SUPPORT
119 struct sbus_dev *sdev;
120#endif
121#ifdef EBUS_SUPPORT
122 struct pci_dev *pdev;
123#endif
124 } dev_u;
125 unsigned int irq[2]; 116 unsigned int irq[2];
126 unsigned int regs_size; 117 unsigned int regs_size;
127 struct snd_cs4231 *next; 118 struct snd_cs4231 *next;
128}; 119};
129 120
130static struct snd_cs4231 *cs4231_list;
131
132/* Eventually we can use sound/isa/cs423x/cs4231_lib.c directly, but for 121/* Eventually we can use sound/isa/cs423x/cs4231_lib.c directly, but for
133 * now.... -DaveM 122 * now.... -DaveM
134 */ 123 */
@@ -267,27 +256,19 @@ static unsigned char snd_cs4231_original_image[32] =
267 256
268static u8 __cs4231_readb(struct snd_cs4231 *cp, void __iomem *reg_addr) 257static u8 __cs4231_readb(struct snd_cs4231 *cp, void __iomem *reg_addr)
269{ 258{
270#ifdef EBUS_SUPPORT
271 if (cp->flags & CS4231_FLAG_EBUS) 259 if (cp->flags & CS4231_FLAG_EBUS)
272 return readb(reg_addr); 260 return readb(reg_addr);
273 else 261 else
274#endif
275#ifdef SBUS_SUPPORT
276 return sbus_readb(reg_addr); 262 return sbus_readb(reg_addr);
277#endif
278} 263}
279 264
280static void __cs4231_writeb(struct snd_cs4231 *cp, u8 val, 265static void __cs4231_writeb(struct snd_cs4231 *cp, u8 val,
281 void __iomem *reg_addr) 266 void __iomem *reg_addr)
282{ 267{
283#ifdef EBUS_SUPPORT
284 if (cp->flags & CS4231_FLAG_EBUS) 268 if (cp->flags & CS4231_FLAG_EBUS)
285 return writeb(val, reg_addr); 269 return writeb(val, reg_addr);
286 else 270 else
287#endif
288#ifdef SBUS_SUPPORT
289 return sbus_writeb(val, reg_addr); 271 return sbus_writeb(val, reg_addr);
290#endif
291} 272}
292 273
293/* 274/*
@@ -1258,7 +1239,9 @@ static int __init snd_cs4231_pcm(struct snd_card *card)
1258 pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX; 1239 pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
1259 strcpy(pcm->name, "CS4231"); 1240 strcpy(pcm->name, "CS4231");
1260 1241
1261 chip->p_dma.preallocate(chip, pcm); 1242 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
1243 &chip->op->dev,
1244 64 * 1024, 128 * 1024);
1262 1245
1263 chip->pcm = pcm; 1246 chip->pcm = pcm;
1264 1247
@@ -1560,7 +1543,8 @@ static int __init snd_cs4231_mixer(struct snd_card *card)
1560 struct snd_cs4231 *chip = card->private_data; 1543 struct snd_cs4231 *chip = card->private_data;
1561 int err, idx; 1544 int err, idx;
1562 1545
1563 snd_assert(chip != NULL && chip->pcm != NULL, return -EINVAL); 1546 if (snd_BUG_ON(!chip || !chip->pcm))
1547 return -EINVAL;
1564 1548
1565 strcpy(card->mixername, chip->pcm->name); 1549 strcpy(card->mixername, chip->pcm->name);
1566 1550
@@ -1626,8 +1610,7 @@ static int __init cs4231_attach_finish(struct snd_card *card)
1626 if (err < 0) 1610 if (err < 0)
1627 goto out_err; 1611 goto out_err;
1628 1612
1629 chip->next = cs4231_list; 1613 dev_set_drvdata(&chip->op->dev, chip);
1630 cs4231_list = chip;
1631 1614
1632 dev++; 1615 dev++;
1633 return 0; 1616 return 0;
@@ -1782,24 +1765,19 @@ static unsigned int sbus_dma_addr(struct cs4231_dma_control *dma_cont)
1782 return sbus_readl(base->regs + base->dir + APCVA); 1765 return sbus_readl(base->regs + base->dir + APCVA);
1783} 1766}
1784 1767
1785static void sbus_dma_preallocate(struct snd_cs4231 *chip, struct snd_pcm *pcm)
1786{
1787 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_SBUS,
1788 snd_dma_sbus_data(chip->dev_u.sdev),
1789 64 * 1024, 128 * 1024);
1790}
1791
1792/* 1768/*
1793 * Init and exit routines 1769 * Init and exit routines
1794 */ 1770 */
1795 1771
1796static int snd_cs4231_sbus_free(struct snd_cs4231 *chip) 1772static int snd_cs4231_sbus_free(struct snd_cs4231 *chip)
1797{ 1773{
1774 struct of_device *op = chip->op;
1775
1798 if (chip->irq[0]) 1776 if (chip->irq[0])
1799 free_irq(chip->irq[0], chip); 1777 free_irq(chip->irq[0], chip);
1800 1778
1801 if (chip->port) 1779 if (chip->port)
1802 sbus_iounmap(chip->port, chip->regs_size); 1780 of_iounmap(&op->resource[0], chip->port, chip->regs_size);
1803 1781
1804 return 0; 1782 return 0;
1805} 1783}
@@ -1816,7 +1794,7 @@ static struct snd_device_ops snd_cs4231_sbus_dev_ops = {
1816}; 1794};
1817 1795
1818static int __init snd_cs4231_sbus_create(struct snd_card *card, 1796static int __init snd_cs4231_sbus_create(struct snd_card *card,
1819 struct sbus_dev *sdev, 1797 struct of_device *op,
1820 int dev) 1798 int dev)
1821{ 1799{
1822 struct snd_cs4231 *chip = card->private_data; 1800 struct snd_cs4231 *chip = card->private_data;
@@ -1827,13 +1805,13 @@ static int __init snd_cs4231_sbus_create(struct snd_card *card,
1827 spin_lock_init(&chip->p_dma.sbus_info.lock); 1805 spin_lock_init(&chip->p_dma.sbus_info.lock);
1828 mutex_init(&chip->mce_mutex); 1806 mutex_init(&chip->mce_mutex);
1829 mutex_init(&chip->open_mutex); 1807 mutex_init(&chip->open_mutex);
1830 chip->dev_u.sdev = sdev; 1808 chip->op = op;
1831 chip->regs_size = sdev->reg_addrs[0].reg_size; 1809 chip->regs_size = resource_size(&op->resource[0]);
1832 memcpy(&chip->image, &snd_cs4231_original_image, 1810 memcpy(&chip->image, &snd_cs4231_original_image,
1833 sizeof(snd_cs4231_original_image)); 1811 sizeof(snd_cs4231_original_image));
1834 1812
1835 chip->port = sbus_ioremap(&sdev->resource[0], 0, 1813 chip->port = of_ioremap(&op->resource[0], 0,
1836 chip->regs_size, "cs4231"); 1814 chip->regs_size, "cs4231");
1837 if (!chip->port) { 1815 if (!chip->port) {
1838 snd_printdd("cs4231-%d: Unable to map chip registers.\n", dev); 1816 snd_printdd("cs4231-%d: Unable to map chip registers.\n", dev);
1839 return -EIO; 1817 return -EIO;
@@ -1848,22 +1826,20 @@ static int __init snd_cs4231_sbus_create(struct snd_card *card,
1848 chip->p_dma.enable = sbus_dma_enable; 1826 chip->p_dma.enable = sbus_dma_enable;
1849 chip->p_dma.request = sbus_dma_request; 1827 chip->p_dma.request = sbus_dma_request;
1850 chip->p_dma.address = sbus_dma_addr; 1828 chip->p_dma.address = sbus_dma_addr;
1851 chip->p_dma.preallocate = sbus_dma_preallocate;
1852 1829
1853 chip->c_dma.prepare = sbus_dma_prepare; 1830 chip->c_dma.prepare = sbus_dma_prepare;
1854 chip->c_dma.enable = sbus_dma_enable; 1831 chip->c_dma.enable = sbus_dma_enable;
1855 chip->c_dma.request = sbus_dma_request; 1832 chip->c_dma.request = sbus_dma_request;
1856 chip->c_dma.address = sbus_dma_addr; 1833 chip->c_dma.address = sbus_dma_addr;
1857 chip->c_dma.preallocate = sbus_dma_preallocate;
1858 1834
1859 if (request_irq(sdev->irqs[0], snd_cs4231_sbus_interrupt, 1835 if (request_irq(op->irqs[0], snd_cs4231_sbus_interrupt,
1860 IRQF_SHARED, "cs4231", chip)) { 1836 IRQF_SHARED, "cs4231", chip)) {
1861 snd_printdd("cs4231-%d: Unable to grab SBUS IRQ %d\n", 1837 snd_printdd("cs4231-%d: Unable to grab SBUS IRQ %d\n",
1862 dev, sdev->irqs[0]); 1838 dev, op->irqs[0]);
1863 snd_cs4231_sbus_free(chip); 1839 snd_cs4231_sbus_free(chip);
1864 return -EBUSY; 1840 return -EBUSY;
1865 } 1841 }
1866 chip->irq[0] = sdev->irqs[0]; 1842 chip->irq[0] = op->irqs[0];
1867 1843
1868 if (snd_cs4231_probe(chip) < 0) { 1844 if (snd_cs4231_probe(chip) < 0) {
1869 snd_cs4231_sbus_free(chip); 1845 snd_cs4231_sbus_free(chip);
@@ -1880,9 +1856,9 @@ static int __init snd_cs4231_sbus_create(struct snd_card *card,
1880 return 0; 1856 return 0;
1881} 1857}
1882 1858
1883static int __init cs4231_sbus_attach(struct sbus_dev *sdev) 1859static int __devinit cs4231_sbus_probe(struct of_device *op, const struct of_device_id *match)
1884{ 1860{
1885 struct resource *rp = &sdev->resource[0]; 1861 struct resource *rp = &op->resource[0];
1886 struct snd_card *card; 1862 struct snd_card *card;
1887 int err; 1863 int err;
1888 1864
@@ -1894,9 +1870,9 @@ static int __init cs4231_sbus_attach(struct sbus_dev *sdev)
1894 card->shortname, 1870 card->shortname,
1895 rp->flags & 0xffL, 1871 rp->flags & 0xffL,
1896 (unsigned long long)rp->start, 1872 (unsigned long long)rp->start,
1897 sdev->irqs[0]); 1873 op->irqs[0]);
1898 1874
1899 err = snd_cs4231_sbus_create(card, sdev, dev); 1875 err = snd_cs4231_sbus_create(card, op, dev);
1900 if (err < 0) { 1876 if (err < 0) {
1901 snd_card_free(card); 1877 snd_card_free(card);
1902 return err; 1878 return err;
@@ -1949,30 +1925,25 @@ static unsigned int _ebus_dma_addr(struct cs4231_dma_control *dma_cont)
1949 return ebus_dma_addr(&dma_cont->ebus_info); 1925 return ebus_dma_addr(&dma_cont->ebus_info);
1950} 1926}
1951 1927
1952static void _ebus_dma_preallocate(struct snd_cs4231 *chip, struct snd_pcm *pcm)
1953{
1954 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
1955 snd_dma_pci_data(chip->dev_u.pdev),
1956 64*1024, 128*1024);
1957}
1958
1959/* 1928/*
1960 * Init and exit routines 1929 * Init and exit routines
1961 */ 1930 */
1962 1931
1963static int snd_cs4231_ebus_free(struct snd_cs4231 *chip) 1932static int snd_cs4231_ebus_free(struct snd_cs4231 *chip)
1964{ 1933{
1934 struct of_device *op = chip->op;
1935
1965 if (chip->c_dma.ebus_info.regs) { 1936 if (chip->c_dma.ebus_info.regs) {
1966 ebus_dma_unregister(&chip->c_dma.ebus_info); 1937 ebus_dma_unregister(&chip->c_dma.ebus_info);
1967 iounmap(chip->c_dma.ebus_info.regs); 1938 of_iounmap(&op->resource[2], chip->c_dma.ebus_info.regs, 0x10);
1968 } 1939 }
1969 if (chip->p_dma.ebus_info.regs) { 1940 if (chip->p_dma.ebus_info.regs) {
1970 ebus_dma_unregister(&chip->p_dma.ebus_info); 1941 ebus_dma_unregister(&chip->p_dma.ebus_info);
1971 iounmap(chip->p_dma.ebus_info.regs); 1942 of_iounmap(&op->resource[1], chip->p_dma.ebus_info.regs, 0x10);
1972 } 1943 }
1973 1944
1974 if (chip->port) 1945 if (chip->port)
1975 iounmap(chip->port); 1946 of_iounmap(&op->resource[0], chip->port, 0x10);
1976 1947
1977 return 0; 1948 return 0;
1978} 1949}
@@ -1989,7 +1960,7 @@ static struct snd_device_ops snd_cs4231_ebus_dev_ops = {
1989}; 1960};
1990 1961
1991static int __init snd_cs4231_ebus_create(struct snd_card *card, 1962static int __init snd_cs4231_ebus_create(struct snd_card *card,
1992 struct linux_ebus_device *edev, 1963 struct of_device *op,
1993 int dev) 1964 int dev)
1994{ 1965{
1995 struct snd_cs4231 *chip = card->private_data; 1966 struct snd_cs4231 *chip = card->private_data;
@@ -2001,35 +1972,35 @@ static int __init snd_cs4231_ebus_create(struct snd_card *card,
2001 mutex_init(&chip->mce_mutex); 1972 mutex_init(&chip->mce_mutex);
2002 mutex_init(&chip->open_mutex); 1973 mutex_init(&chip->open_mutex);
2003 chip->flags |= CS4231_FLAG_EBUS; 1974 chip->flags |= CS4231_FLAG_EBUS;
2004 chip->dev_u.pdev = edev->bus->self; 1975 chip->op = op;
2005 memcpy(&chip->image, &snd_cs4231_original_image, 1976 memcpy(&chip->image, &snd_cs4231_original_image,
2006 sizeof(snd_cs4231_original_image)); 1977 sizeof(snd_cs4231_original_image));
2007 strcpy(chip->c_dma.ebus_info.name, "cs4231(capture)"); 1978 strcpy(chip->c_dma.ebus_info.name, "cs4231(capture)");
2008 chip->c_dma.ebus_info.flags = EBUS_DMA_FLAG_USE_EBDMA_HANDLER; 1979 chip->c_dma.ebus_info.flags = EBUS_DMA_FLAG_USE_EBDMA_HANDLER;
2009 chip->c_dma.ebus_info.callback = snd_cs4231_ebus_capture_callback; 1980 chip->c_dma.ebus_info.callback = snd_cs4231_ebus_capture_callback;
2010 chip->c_dma.ebus_info.client_cookie = chip; 1981 chip->c_dma.ebus_info.client_cookie = chip;
2011 chip->c_dma.ebus_info.irq = edev->irqs[0]; 1982 chip->c_dma.ebus_info.irq = op->irqs[0];
2012 strcpy(chip->p_dma.ebus_info.name, "cs4231(play)"); 1983 strcpy(chip->p_dma.ebus_info.name, "cs4231(play)");
2013 chip->p_dma.ebus_info.flags = EBUS_DMA_FLAG_USE_EBDMA_HANDLER; 1984 chip->p_dma.ebus_info.flags = EBUS_DMA_FLAG_USE_EBDMA_HANDLER;
2014 chip->p_dma.ebus_info.callback = snd_cs4231_ebus_play_callback; 1985 chip->p_dma.ebus_info.callback = snd_cs4231_ebus_play_callback;
2015 chip->p_dma.ebus_info.client_cookie = chip; 1986 chip->p_dma.ebus_info.client_cookie = chip;
2016 chip->p_dma.ebus_info.irq = edev->irqs[1]; 1987 chip->p_dma.ebus_info.irq = op->irqs[1];
2017 1988
2018 chip->p_dma.prepare = _ebus_dma_prepare; 1989 chip->p_dma.prepare = _ebus_dma_prepare;
2019 chip->p_dma.enable = _ebus_dma_enable; 1990 chip->p_dma.enable = _ebus_dma_enable;
2020 chip->p_dma.request = _ebus_dma_request; 1991 chip->p_dma.request = _ebus_dma_request;
2021 chip->p_dma.address = _ebus_dma_addr; 1992 chip->p_dma.address = _ebus_dma_addr;
2022 chip->p_dma.preallocate = _ebus_dma_preallocate;
2023 1993
2024 chip->c_dma.prepare = _ebus_dma_prepare; 1994 chip->c_dma.prepare = _ebus_dma_prepare;
2025 chip->c_dma.enable = _ebus_dma_enable; 1995 chip->c_dma.enable = _ebus_dma_enable;
2026 chip->c_dma.request = _ebus_dma_request; 1996 chip->c_dma.request = _ebus_dma_request;
2027 chip->c_dma.address = _ebus_dma_addr; 1997 chip->c_dma.address = _ebus_dma_addr;
2028 chip->c_dma.preallocate = _ebus_dma_preallocate;
2029 1998
2030 chip->port = ioremap(edev->resource[0].start, 0x10); 1999 chip->port = of_ioremap(&op->resource[0], 0, 0x10, "cs4231");
2031 chip->p_dma.ebus_info.regs = ioremap(edev->resource[1].start, 0x10); 2000 chip->p_dma.ebus_info.regs =
2032 chip->c_dma.ebus_info.regs = ioremap(edev->resource[2].start, 0x10); 2001 of_ioremap(&op->resource[1], 0, 0x10, "cs4231_pdma");
2002 chip->c_dma.ebus_info.regs =
2003 of_ioremap(&op->resource[2], 0, 0x10, "cs4231_cdma");
2033 if (!chip->port || !chip->p_dma.ebus_info.regs || 2004 if (!chip->port || !chip->p_dma.ebus_info.regs ||
2034 !chip->c_dma.ebus_info.regs) { 2005 !chip->c_dma.ebus_info.regs) {
2035 snd_cs4231_ebus_free(chip); 2006 snd_cs4231_ebus_free(chip);
@@ -2077,7 +2048,7 @@ static int __init snd_cs4231_ebus_create(struct snd_card *card,
2077 return 0; 2048 return 0;
2078} 2049}
2079 2050
2080static int __init cs4231_ebus_attach(struct linux_ebus_device *edev) 2051static int __devinit cs4231_ebus_probe(struct of_device *op, const struct of_device_id *match)
2081{ 2052{
2082 struct snd_card *card; 2053 struct snd_card *card;
2083 int err; 2054 int err;
@@ -2088,10 +2059,10 @@ static int __init cs4231_ebus_attach(struct linux_ebus_device *edev)
2088 2059
2089 sprintf(card->longname, "%s at 0x%lx, irq %d", 2060 sprintf(card->longname, "%s at 0x%lx, irq %d",
2090 card->shortname, 2061 card->shortname,
2091 edev->resource[0].start, 2062 op->resource[0].start,
2092 edev->irqs[0]); 2063 op->irqs[0]);
2093 2064
2094 err = snd_cs4231_ebus_create(card, edev, dev); 2065 err = snd_cs4231_ebus_create(card, op, dev);
2095 if (err < 0) { 2066 if (err < 0) {
2096 snd_card_free(card); 2067 snd_card_free(card);
2097 return err; 2068 return err;
@@ -2101,68 +2072,57 @@ static int __init cs4231_ebus_attach(struct linux_ebus_device *edev)
2101} 2072}
2102#endif 2073#endif
2103 2074
2104static int __init cs4231_init(void) 2075static int __devinit cs4231_probe(struct of_device *op, const struct of_device_id *match)
2105{ 2076{
2106#ifdef SBUS_SUPPORT
2107 struct sbus_bus *sbus;
2108 struct sbus_dev *sdev;
2109#endif
2110#ifdef EBUS_SUPPORT 2077#ifdef EBUS_SUPPORT
2111 struct linux_ebus *ebus; 2078 if (!strcmp(op->node->parent->name, "ebus"))
2112 struct linux_ebus_device *edev; 2079 return cs4231_ebus_probe(op, match);
2113#endif 2080#endif
2114 int found;
2115
2116 found = 0;
2117
2118#ifdef SBUS_SUPPORT 2081#ifdef SBUS_SUPPORT
2119 for_all_sbusdev(sdev, sbus) { 2082 if (!strcmp(op->node->parent->name, "sbus") ||
2120 if (!strcmp(sdev->prom_name, "SUNW,CS4231")) { 2083 !strcmp(op->node->parent->name, "sbi"))
2121 if (cs4231_sbus_attach(sdev) == 0) 2084 return cs4231_sbus_probe(op, match);
2122 found++;
2123 }
2124 }
2125#endif 2085#endif
2126#ifdef EBUS_SUPPORT 2086 return -ENODEV;
2127 for_each_ebus(ebus) { 2087}
2128 for_each_ebusdev(edev, ebus) {
2129 int match = 0;
2130
2131 if (!strcmp(edev->prom_node->name, "SUNW,CS4231")) {
2132 match = 1;
2133 } else if (!strcmp(edev->prom_node->name, "audio")) {
2134 const char *compat;
2135
2136 compat = of_get_property(edev->prom_node,
2137 "compatible", NULL);
2138 if (compat && !strcmp(compat, "SUNW,CS4231"))
2139 match = 1;
2140 }
2141 2088
2142 if (match && 2089static int __devexit cs4231_remove(struct of_device *op)
2143 cs4231_ebus_attach(edev) == 0) 2090{
2144 found++; 2091 struct snd_cs4231 *chip = dev_get_drvdata(&op->dev);
2145 }
2146 }
2147#endif
2148 2092
2093 snd_card_free(chip->card);
2149 2094
2150 return (found > 0) ? 0 : -EIO; 2095 return 0;
2151} 2096}
2152 2097
2153static void __exit cs4231_exit(void) 2098static const struct of_device_id cs4231_match[] = {
2154{ 2099 {
2155 struct snd_cs4231 *p = cs4231_list; 2100 .name = "SUNW,CS4231",
2101 },
2102 {
2103 .name = "audio",
2104 .compatible = "SUNW,CS4231",
2105 },
2106 {},
2107};
2156 2108
2157 while (p != NULL) { 2109MODULE_DEVICE_TABLE(of, cs4231_match);
2158 struct snd_cs4231 *next = p->next;
2159 2110
2160 snd_card_free(p->card); 2111static struct of_platform_driver cs4231_driver = {
2112 .name = "audio",
2113 .match_table = cs4231_match,
2114 .probe = cs4231_probe,
2115 .remove = __devexit_p(cs4231_remove),
2116};
2161 2117
2162 p = next; 2118static int __init cs4231_init(void)
2163 } 2119{
2120 return of_register_driver(&cs4231_driver, &of_bus_type);
2121}
2164 2122
2165 cs4231_list = NULL; 2123static void __exit cs4231_exit(void)
2124{
2125 of_unregister_driver(&cs4231_driver);
2166} 2126}
2167 2127
2168module_init(cs4231_init); 2128module_init(cs4231_init);
diff --git a/sound/sparc/dbri.c b/sound/sparc/dbri.c
index ee2e1b4f3551..c257ad8bdfbc 100644
--- a/sound/sparc/dbri.c
+++ b/sound/sparc/dbri.c
@@ -57,6 +57,7 @@
57#include <linux/delay.h> 57#include <linux/delay.h>
58#include <linux/irq.h> 58#include <linux/irq.h>
59#include <linux/io.h> 59#include <linux/io.h>
60#include <linux/dma-mapping.h>
60 61
61#include <sound/core.h> 62#include <sound/core.h>
62#include <sound/pcm.h> 63#include <sound/pcm.h>
@@ -66,7 +67,7 @@
66#include <sound/initval.h> 67#include <sound/initval.h>
67 68
68#include <linux/of.h> 69#include <linux/of.h>
69#include <asm/sbus.h> 70#include <linux/of_device.h>
70#include <asm/atomic.h> 71#include <asm/atomic.h>
71 72
72MODULE_AUTHOR("Rudolf Koenig, Brent Baccala and Martin Habets"); 73MODULE_AUTHOR("Rudolf Koenig, Brent Baccala and Martin Habets");
@@ -297,7 +298,7 @@ struct dbri_streaminfo {
297/* This structure holds the information for both chips (DBRI & CS4215) */ 298/* This structure holds the information for both chips (DBRI & CS4215) */
298struct snd_dbri { 299struct snd_dbri {
299 int regs_size, irq; /* Needed for unload */ 300 int regs_size, irq; /* Needed for unload */
300 struct sbus_dev *sdev; /* SBUS device info */ 301 struct of_device *op; /* OF device info */
301 spinlock_t lock; 302 spinlock_t lock;
302 303
303 struct dbri_dma *dma; /* Pointer to our DMA block */ 304 struct dbri_dma *dma; /* Pointer to our DMA block */
@@ -2093,14 +2094,15 @@ static int snd_dbri_hw_params(struct snd_pcm_substream *substream,
2093 */ 2094 */
2094 if (info->dvma_buffer == 0) { 2095 if (info->dvma_buffer == 0) {
2095 if (DBRI_STREAMNO(substream) == DBRI_PLAY) 2096 if (DBRI_STREAMNO(substream) == DBRI_PLAY)
2096 direction = SBUS_DMA_TODEVICE; 2097 direction = DMA_TO_DEVICE;
2097 else 2098 else
2098 direction = SBUS_DMA_FROMDEVICE; 2099 direction = DMA_FROM_DEVICE;
2099 2100
2100 info->dvma_buffer = sbus_map_single(dbri->sdev, 2101 info->dvma_buffer =
2101 runtime->dma_area, 2102 dma_map_single(&dbri->op->dev,
2102 params_buffer_bytes(hw_params), 2103 runtime->dma_area,
2103 direction); 2104 params_buffer_bytes(hw_params),
2105 direction);
2104 } 2106 }
2105 2107
2106 direction = params_buffer_bytes(hw_params); 2108 direction = params_buffer_bytes(hw_params);
@@ -2121,12 +2123,12 @@ static int snd_dbri_hw_free(struct snd_pcm_substream *substream)
2121 */ 2123 */
2122 if (info->dvma_buffer) { 2124 if (info->dvma_buffer) {
2123 if (DBRI_STREAMNO(substream) == DBRI_PLAY) 2125 if (DBRI_STREAMNO(substream) == DBRI_PLAY)
2124 direction = SBUS_DMA_TODEVICE; 2126 direction = DMA_TO_DEVICE;
2125 else 2127 else
2126 direction = SBUS_DMA_FROMDEVICE; 2128 direction = DMA_FROM_DEVICE;
2127 2129
2128 sbus_unmap_single(dbri->sdev, info->dvma_buffer, 2130 dma_unmap_single(&dbri->op->dev, info->dvma_buffer,
2129 substream->runtime->buffer_size, direction); 2131 substream->runtime->buffer_size, direction);
2130 info->dvma_buffer = 0; 2132 info->dvma_buffer = 0;
2131 } 2133 }
2132 if (info->pipe != -1) { 2134 if (info->pipe != -1) {
@@ -2223,7 +2225,6 @@ static int __devinit snd_dbri_pcm(struct snd_card *card)
2223 /* playback count */ 1, 2225 /* playback count */ 1,
2224 /* capture count */ 1, &pcm)) < 0) 2226 /* capture count */ 1, &pcm)) < 0)
2225 return err; 2227 return err;
2226 snd_assert(pcm != NULL, return -EINVAL);
2227 2228
2228 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_dbri_ops); 2229 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_dbri_ops);
2229 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_dbri_ops); 2230 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_dbri_ops);
@@ -2263,9 +2264,10 @@ static int snd_cs4215_get_volume(struct snd_kcontrol *kcontrol,
2263{ 2264{
2264 struct snd_dbri *dbri = snd_kcontrol_chip(kcontrol); 2265 struct snd_dbri *dbri = snd_kcontrol_chip(kcontrol);
2265 struct dbri_streaminfo *info; 2266 struct dbri_streaminfo *info;
2266 snd_assert(dbri != NULL, return -EINVAL); 2267
2268 if (snd_BUG_ON(!dbri))
2269 return -EINVAL;
2267 info = &dbri->stream_info[kcontrol->private_value]; 2270 info = &dbri->stream_info[kcontrol->private_value];
2268 snd_assert(info != NULL, return -EINVAL);
2269 2271
2270 ucontrol->value.integer.value[0] = info->left_gain; 2272 ucontrol->value.integer.value[0] = info->left_gain;
2271 ucontrol->value.integer.value[1] = info->right_gain; 2273 ucontrol->value.integer.value[1] = info->right_gain;
@@ -2331,7 +2333,9 @@ static int snd_cs4215_get_single(struct snd_kcontrol *kcontrol,
2331 int shift = (kcontrol->private_value >> 8) & 0xff; 2333 int shift = (kcontrol->private_value >> 8) & 0xff;
2332 int mask = (kcontrol->private_value >> 16) & 0xff; 2334 int mask = (kcontrol->private_value >> 16) & 0xff;
2333 int invert = (kcontrol->private_value >> 24) & 1; 2335 int invert = (kcontrol->private_value >> 24) & 1;
2334 snd_assert(dbri != NULL, return -EINVAL); 2336
2337 if (snd_BUG_ON(!dbri))
2338 return -EINVAL;
2335 2339
2336 if (elem < 4) 2340 if (elem < 4)
2337 ucontrol->value.integer.value[0] = 2341 ucontrol->value.integer.value[0] =
@@ -2356,7 +2360,9 @@ static int snd_cs4215_put_single(struct snd_kcontrol *kcontrol,
2356 int invert = (kcontrol->private_value >> 24) & 1; 2360 int invert = (kcontrol->private_value >> 24) & 1;
2357 int changed = 0; 2361 int changed = 0;
2358 unsigned short val; 2362 unsigned short val;
2359 snd_assert(dbri != NULL, return -EINVAL); 2363
2364 if (snd_BUG_ON(!dbri))
2365 return -EINVAL;
2360 2366
2361 val = (ucontrol->value.integer.value[0] & mask); 2367 val = (ucontrol->value.integer.value[0] & mask);
2362 if (invert == 1) 2368 if (invert == 1)
@@ -2432,7 +2438,8 @@ static int __devinit snd_dbri_mixer(struct snd_card *card)
2432 int idx, err; 2438 int idx, err;
2433 struct snd_dbri *dbri; 2439 struct snd_dbri *dbri;
2434 2440
2435 snd_assert(card != NULL && card->private_data != NULL, return -EINVAL); 2441 if (snd_BUG_ON(!card || !card->private_data))
2442 return -EINVAL;
2436 dbri = card->private_data; 2443 dbri = card->private_data;
2437 2444
2438 strcpy(card->mixername, card->shortname); 2445 strcpy(card->mixername, card->shortname);
@@ -2514,31 +2521,32 @@ static void __devinit snd_dbri_proc(struct snd_card *card)
2514static void snd_dbri_free(struct snd_dbri *dbri); 2521static void snd_dbri_free(struct snd_dbri *dbri);
2515 2522
2516static int __devinit snd_dbri_create(struct snd_card *card, 2523static int __devinit snd_dbri_create(struct snd_card *card,
2517 struct sbus_dev *sdev, 2524 struct of_device *op,
2518 int irq, int dev) 2525 int irq, int dev)
2519{ 2526{
2520 struct snd_dbri *dbri = card->private_data; 2527 struct snd_dbri *dbri = card->private_data;
2521 int err; 2528 int err;
2522 2529
2523 spin_lock_init(&dbri->lock); 2530 spin_lock_init(&dbri->lock);
2524 dbri->sdev = sdev; 2531 dbri->op = op;
2525 dbri->irq = irq; 2532 dbri->irq = irq;
2526 2533
2527 dbri->dma = sbus_alloc_consistent(sdev, sizeof(struct dbri_dma), 2534 dbri->dma = dma_alloc_coherent(&op->dev,
2528 &dbri->dma_dvma); 2535 sizeof(struct dbri_dma),
2536 &dbri->dma_dvma, GFP_ATOMIC);
2529 memset((void *)dbri->dma, 0, sizeof(struct dbri_dma)); 2537 memset((void *)dbri->dma, 0, sizeof(struct dbri_dma));
2530 2538
2531 dprintk(D_GEN, "DMA Cmd Block 0x%p (0x%08x)\n", 2539 dprintk(D_GEN, "DMA Cmd Block 0x%p (0x%08x)\n",
2532 dbri->dma, dbri->dma_dvma); 2540 dbri->dma, dbri->dma_dvma);
2533 2541
2534 /* Map the registers into memory. */ 2542 /* Map the registers into memory. */
2535 dbri->regs_size = sdev->reg_addrs[0].reg_size; 2543 dbri->regs_size = resource_size(&op->resource[0]);
2536 dbri->regs = sbus_ioremap(&sdev->resource[0], 0, 2544 dbri->regs = of_ioremap(&op->resource[0], 0,
2537 dbri->regs_size, "DBRI Registers"); 2545 dbri->regs_size, "DBRI Registers");
2538 if (!dbri->regs) { 2546 if (!dbri->regs) {
2539 printk(KERN_ERR "DBRI: could not allocate registers\n"); 2547 printk(KERN_ERR "DBRI: could not allocate registers\n");
2540 sbus_free_consistent(sdev, sizeof(struct dbri_dma), 2548 dma_free_coherent(&op->dev, sizeof(struct dbri_dma),
2541 (void *)dbri->dma, dbri->dma_dvma); 2549 (void *)dbri->dma, dbri->dma_dvma);
2542 return -EIO; 2550 return -EIO;
2543 } 2551 }
2544 2552
@@ -2546,9 +2554,9 @@ static int __devinit snd_dbri_create(struct snd_card *card,
2546 "DBRI audio", dbri); 2554 "DBRI audio", dbri);
2547 if (err) { 2555 if (err) {
2548 printk(KERN_ERR "DBRI: Can't get irq %d\n", dbri->irq); 2556 printk(KERN_ERR "DBRI: Can't get irq %d\n", dbri->irq);
2549 sbus_iounmap(dbri->regs, dbri->regs_size); 2557 of_iounmap(&op->resource[0], dbri->regs, dbri->regs_size);
2550 sbus_free_consistent(sdev, sizeof(struct dbri_dma), 2558 dma_free_coherent(&op->dev, sizeof(struct dbri_dma),
2551 (void *)dbri->dma, dbri->dma_dvma); 2559 (void *)dbri->dma, dbri->dma_dvma);
2552 return err; 2560 return err;
2553 } 2561 }
2554 2562
@@ -2572,27 +2580,23 @@ static void snd_dbri_free(struct snd_dbri *dbri)
2572 free_irq(dbri->irq, dbri); 2580 free_irq(dbri->irq, dbri);
2573 2581
2574 if (dbri->regs) 2582 if (dbri->regs)
2575 sbus_iounmap(dbri->regs, dbri->regs_size); 2583 of_iounmap(&dbri->op->resource[0], dbri->regs, dbri->regs_size);
2576 2584
2577 if (dbri->dma) 2585 if (dbri->dma)
2578 sbus_free_consistent(dbri->sdev, sizeof(struct dbri_dma), 2586 dma_free_coherent(&dbri->op->dev,
2579 (void *)dbri->dma, dbri->dma_dvma); 2587 sizeof(struct dbri_dma),
2588 (void *)dbri->dma, dbri->dma_dvma);
2580} 2589}
2581 2590
2582static int __devinit dbri_probe(struct of_device *of_dev, 2591static int __devinit dbri_probe(struct of_device *op, const struct of_device_id *match)
2583 const struct of_device_id *match)
2584{ 2592{
2585 struct sbus_dev *sdev = to_sbus_device(&of_dev->dev);
2586 struct snd_dbri *dbri; 2593 struct snd_dbri *dbri;
2587 int irq;
2588 struct resource *rp; 2594 struct resource *rp;
2589 struct snd_card *card; 2595 struct snd_card *card;
2590 static int dev = 0; 2596 static int dev = 0;
2597 int irq;
2591 int err; 2598 int err;
2592 2599
2593 dprintk(D_GEN, "DBRI: Found %s in SBUS slot %d\n",
2594 sdev->prom_name, sdev->slot);
2595
2596 if (dev >= SNDRV_CARDS) 2600 if (dev >= SNDRV_CARDS)
2597 return -ENODEV; 2601 return -ENODEV;
2598 if (!enable[dev]) { 2602 if (!enable[dev]) {
@@ -2600,7 +2604,7 @@ static int __devinit dbri_probe(struct of_device *of_dev,
2600 return -ENOENT; 2604 return -ENOENT;
2601 } 2605 }
2602 2606
2603 irq = sdev->irqs[0]; 2607 irq = op->irqs[0];
2604 if (irq <= 0) { 2608 if (irq <= 0) {
2605 printk(KERN_ERR "DBRI-%d: No IRQ.\n", dev); 2609 printk(KERN_ERR "DBRI-%d: No IRQ.\n", dev);
2606 return -ENODEV; 2610 return -ENODEV;
@@ -2613,12 +2617,12 @@ static int __devinit dbri_probe(struct of_device *of_dev,
2613 2617
2614 strcpy(card->driver, "DBRI"); 2618 strcpy(card->driver, "DBRI");
2615 strcpy(card->shortname, "Sun DBRI"); 2619 strcpy(card->shortname, "Sun DBRI");
2616 rp = &sdev->resource[0]; 2620 rp = &op->resource[0];
2617 sprintf(card->longname, "%s at 0x%02lx:0x%016Lx, irq %d", 2621 sprintf(card->longname, "%s at 0x%02lx:0x%016Lx, irq %d",
2618 card->shortname, 2622 card->shortname,
2619 rp->flags & 0xffL, (unsigned long long)rp->start, irq); 2623 rp->flags & 0xffL, (unsigned long long)rp->start, irq);
2620 2624
2621 err = snd_dbri_create(card, sdev, irq, dev); 2625 err = snd_dbri_create(card, op, irq, dev);
2622 if (err < 0) { 2626 if (err < 0) {
2623 snd_card_free(card); 2627 snd_card_free(card);
2624 return err; 2628 return err;
@@ -2635,7 +2639,7 @@ static int __devinit dbri_probe(struct of_device *of_dev,
2635 2639
2636 /* /proc file handling */ 2640 /* /proc file handling */
2637 snd_dbri_proc(card); 2641 snd_dbri_proc(card);
2638 dev_set_drvdata(&of_dev->dev, card); 2642 dev_set_drvdata(&op->dev, card);
2639 2643
2640 err = snd_card_register(card); 2644 err = snd_card_register(card);
2641 if (err < 0) 2645 if (err < 0)
@@ -2643,7 +2647,7 @@ static int __devinit dbri_probe(struct of_device *of_dev,
2643 2647
2644 printk(KERN_INFO "audio%d at %p (irq %d) is DBRI(%c)+CS4215(%d)\n", 2648 printk(KERN_INFO "audio%d at %p (irq %d) is DBRI(%c)+CS4215(%d)\n",
2645 dev, dbri->regs, 2649 dev, dbri->regs,
2646 dbri->irq, sdev->prom_name[9], dbri->mm.version); 2650 dbri->irq, op->node->name[9], dbri->mm.version);
2647 dev++; 2651 dev++;
2648 2652
2649 return 0; 2653 return 0;
@@ -2654,19 +2658,19 @@ _err:
2654 return err; 2658 return err;
2655} 2659}
2656 2660
2657static int __devexit dbri_remove(struct of_device *dev) 2661static int __devexit dbri_remove(struct of_device *op)
2658{ 2662{
2659 struct snd_card *card = dev_get_drvdata(&dev->dev); 2663 struct snd_card *card = dev_get_drvdata(&op->dev);
2660 2664
2661 snd_dbri_free(card->private_data); 2665 snd_dbri_free(card->private_data);
2662 snd_card_free(card); 2666 snd_card_free(card);
2663 2667
2664 dev_set_drvdata(&dev->dev, NULL); 2668 dev_set_drvdata(&op->dev, NULL);
2665 2669
2666 return 0; 2670 return 0;
2667} 2671}
2668 2672
2669static struct of_device_id dbri_match[] = { 2673static const struct of_device_id dbri_match[] = {
2670 { 2674 {
2671 .name = "SUNW,DBRIe", 2675 .name = "SUNW,DBRIe",
2672 }, 2676 },
@@ -2688,7 +2692,7 @@ static struct of_platform_driver dbri_sbus_driver = {
2688/* Probe for the dbri chip and then attach the driver. */ 2692/* Probe for the dbri chip and then attach the driver. */
2689static int __init dbri_init(void) 2693static int __init dbri_init(void)
2690{ 2694{
2691 return of_register_driver(&dbri_sbus_driver, &sbus_bus_type); 2695 return of_register_driver(&dbri_sbus_driver, &of_bus_type);
2692} 2696}
2693 2697
2694static void __exit dbri_exit(void) 2698static void __exit dbri_exit(void)