Blame view

sound/ppc/powermac.c 4.41 KB
1a59d1b8e   Thomas Gleixner   treewide: Replace...
1
  // SPDX-License-Identifier: GPL-2.0-or-later
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
  /*
   * Driver for PowerMac AWACS
   * Copyright (c) 2001 by Takashi Iwai <tiwai@suse.de>
   *   based on dmasound.c.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
  #include <linux/init.h>
5e12bea08   Takashi Iwai   [ALSA] powermac -...
8
9
  #include <linux/err.h>
  #include <linux/platform_device.h>
65a772172   Paul Gortmaker   sound: fix driver...
10
  #include <linux/module.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  #include <sound/core.h>
  #include <sound/initval.h>
  #include "pmac.h"
  #include "awacs.h"
  #include "burgundy.h"
  
  #define CHIP_NAME "PMac"
  
  MODULE_DESCRIPTION("PowerMac");
  MODULE_SUPPORTED_DEVICE("{{Apple,PowerMac}}");
  MODULE_LICENSE("GPL");
  
  static int index = SNDRV_DEFAULT_IDX1;		/* Index 0-MAX */
  static char *id = SNDRV_DEFAULT_STR1;		/* ID for this card */
a67ff6a54   Rusty Russell   ALSA: module_para...
25
  static bool enable_beep = 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
30
31
32
  
  module_param(index, int, 0444);
  MODULE_PARM_DESC(index, "Index value for " CHIP_NAME " soundchip.");
  module_param(id, charp, 0444);
  MODULE_PARM_DESC(id, "ID string for " CHIP_NAME " soundchip.");
  module_param(enable_beep, bool, 0444);
  MODULE_PARM_DESC(enable_beep, "Enable beep using PCM.");
f7a9275d9   Clemens Ladisch   [ALSA] unregister...
33
  static struct platform_device *device;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
35
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
   */
15afafc25   Bill Pemberton   ALSA: ppc: remove...
37
  static int snd_pmac_probe(struct platform_device *devptr)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
  {
65b29f503   Takashi Iwai   [ALSA] Remove xxx...
39
40
  	struct snd_card *card;
  	struct snd_pmac *chip;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
  	char *name_ext;
  	int err;
107687974   Takashi Iwai   ALSA: ppc: Conver...
43
  	err = snd_card_new(&devptr->dev, index, id, THIS_MODULE, 0, &card);
bd7dd77c2   Takashi Iwai   ALSA: Convert to ...
44
45
  	if (err < 0)
  		return err;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
47
48
  
  	if ((err = snd_pmac_new(card, &chip)) < 0)
  		goto __error;
5e12bea08   Takashi Iwai   [ALSA] powermac -...
49
  	card->private_data = chip;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  
  	switch (chip->model) {
  	case PMAC_BURGUNDY:
  		strcpy(card->driver, "PMac Burgundy");
  		strcpy(card->shortname, "PowerMac Burgundy");
  		sprintf(card->longname, "%s (Dev %d) Sub-frame %d",
  			card->shortname, chip->device_id, chip->subframe);
  		if ((err = snd_pmac_burgundy_init(chip)) < 0)
  			goto __error;
  		break;
  	case PMAC_DACA:
  		strcpy(card->driver, "PMac DACA");
  		strcpy(card->shortname, "PowerMac DACA");
  		sprintf(card->longname, "%s (Dev %d) Sub-frame %d",
  			card->shortname, chip->device_id, chip->subframe);
  		if ((err = snd_pmac_daca_init(chip)) < 0)
  			goto __error;
  		break;
  	case PMAC_TUMBLER:
  	case PMAC_SNAPPER:
  		name_ext = chip->model == PMAC_TUMBLER ? "Tumbler" : "Snapper";
  		sprintf(card->driver, "PMac %s", name_ext);
  		sprintf(card->shortname, "PowerMac %s", name_ext);
  		sprintf(card->longname, "%s (Dev %d) Sub-frame %d",
  			card->shortname, chip->device_id, chip->subframe);
  		if ( snd_pmac_tumbler_init(chip) < 0 || snd_pmac_tumbler_post_init() < 0)
  			goto __error;
  		break;
  	case PMAC_AWACS:
  	case PMAC_SCREAMER:
  		name_ext = chip->model == PMAC_SCREAMER ? "Screamer" : "AWACS";
  		sprintf(card->driver, "PMac %s", name_ext);
  		sprintf(card->shortname, "PowerMac %s", name_ext);
  		if (chip->is_pbook_3400)
  			name_ext = " [PB3400]";
  		else if (chip->is_pbook_G3)
  			name_ext = " [PBG3]";
  		else
  			name_ext = "";
  		sprintf(card->longname, "%s%s Rev %d",
  			card->shortname, name_ext, chip->revision);
  		if ((err = snd_pmac_awacs_init(chip)) < 0)
  			goto __error;
  		break;
  	default:
6da671138   Takashi Iwai   ALSA: powermac - ...
95
96
  		snd_printk(KERN_ERR "unsupported hardware %d
  ", chip->model);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
99
100
101
102
103
104
105
106
107
108
109
  		err = -EINVAL;
  		goto __error;
  	}
  
  	if ((err = snd_pmac_pcm_new(chip)) < 0)
  		goto __error;
  
  	chip->initialized = 1;
  	if (enable_beep)
  		snd_pmac_attach_beep(chip);
  
  	if ((err = snd_card_register(card)) < 0)
  		goto __error;
5e12bea08   Takashi Iwai   [ALSA] powermac -...
110
  	platform_set_drvdata(devptr, card);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
112
113
114
115
116
  	return 0;
  
  __error:
  	snd_card_free(card);
  	return err;
  }
15afafc25   Bill Pemberton   ALSA: ppc: remove...
117
  static int snd_pmac_remove(struct platform_device *devptr)
5e12bea08   Takashi Iwai   [ALSA] powermac -...
118
119
  {
  	snd_card_free(platform_get_drvdata(devptr));
5e12bea08   Takashi Iwai   [ALSA] powermac -...
120
121
  	return 0;
  }
d34e4e00a   Takashi Iwai   ALSA: platform: C...
122
  #ifdef CONFIG_PM_SLEEP
284e7ca75   Takashi Iwai   ALSA: convert PM ...
123
  static int snd_pmac_driver_suspend(struct device *dev)
5e12bea08   Takashi Iwai   [ALSA] powermac -...
124
  {
284e7ca75   Takashi Iwai   ALSA: convert PM ...
125
  	struct snd_card *card = dev_get_drvdata(dev);
5e12bea08   Takashi Iwai   [ALSA] powermac -...
126
127
128
  	snd_pmac_suspend(card->private_data);
  	return 0;
  }
284e7ca75   Takashi Iwai   ALSA: convert PM ...
129
  static int snd_pmac_driver_resume(struct device *dev)
5e12bea08   Takashi Iwai   [ALSA] powermac -...
130
  {
284e7ca75   Takashi Iwai   ALSA: convert PM ...
131
  	struct snd_card *card = dev_get_drvdata(dev);
5e12bea08   Takashi Iwai   [ALSA] powermac -...
132
133
134
  	snd_pmac_resume(card->private_data);
  	return 0;
  }
284e7ca75   Takashi Iwai   ALSA: convert PM ...
135
136
137
138
139
  
  static SIMPLE_DEV_PM_OPS(snd_pmac_pm, snd_pmac_driver_suspend, snd_pmac_driver_resume);
  #define SND_PMAC_PM_OPS	&snd_pmac_pm
  #else
  #define SND_PMAC_PM_OPS	NULL
5e12bea08   Takashi Iwai   [ALSA] powermac -...
140
141
142
143
144
145
  #endif
  
  #define SND_PMAC_DRIVER		"snd_powermac"
  
  static struct platform_driver snd_pmac_driver = {
  	.probe		= snd_pmac_probe,
15afafc25   Bill Pemberton   ALSA: ppc: remove...
146
  	.remove		= snd_pmac_remove,
5e12bea08   Takashi Iwai   [ALSA] powermac -...
147
  	.driver		= {
8bf01d8ab   Takashi Iwai   ALSA: Add missing...
148
  		.name	= SND_PMAC_DRIVER,
284e7ca75   Takashi Iwai   ALSA: convert PM ...
149
  		.pm	= SND_PMAC_PM_OPS,
5e12bea08   Takashi Iwai   [ALSA] powermac -...
150
151
  	},
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
153
154
155
  
  static int __init alsa_card_pmac_init(void)
  {
  	int err;
5e12bea08   Takashi Iwai   [ALSA] powermac -...
156
157
  
  	if ((err = platform_driver_register(&snd_pmac_driver)) < 0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158
  		return err;
5e12bea08   Takashi Iwai   [ALSA] powermac -...
159
  	device = platform_device_register_simple(SND_PMAC_DRIVER, -1, NULL, 0);
545b07d36   Johannes Berg   [ALSA] make snd-p...
160
  	return 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161
162
163
164
165
  
  }
  
  static void __exit alsa_card_pmac_exit(void)
  {
545b07d36   Johannes Berg   [ALSA] make snd-p...
166
167
  	if (!IS_ERR(device))
  		platform_device_unregister(device);
5e12bea08   Takashi Iwai   [ALSA] powermac -...
168
  	platform_driver_unregister(&snd_pmac_driver);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
170
171
172
  }
  
  module_init(alsa_card_pmac_init)
  module_exit(alsa_card_pmac_exit)