Changeset 717 for GPL/trunk/alsa-kernel/pci/cs5530.c
- Timestamp:
- Aug 7, 2022, 6:11:12 PM (3 years ago)
- Location:
- GPL/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk
- Property svn:mergeinfo changed
/GPL/branches/uniaud32-next merged: 710-716
- Property svn:mergeinfo changed
-
GPL/trunk/alsa-kernel/pci/cs5530.c
r679 r717 70 70 MODULE_DEVICE_TABLE(pci, snd_cs5530_ids); 71 71 72 static int snd_cs5530_free(struct snd_cs5530 *chip)73 {74 pci_release_regions(chip->pci);75 pci_disable_device(chip->pci);76 kfree(chip);77 return 0;78 }79 80 static int snd_cs5530_dev_free(struct snd_device *device)81 {82 struct snd_cs5530 *chip = device->device_data;83 return snd_cs5530_free(chip);84 }85 86 static void snd_cs5530_remove(struct pci_dev *pci)87 {88 snd_card_free(pci_get_drvdata(pci));89 }90 91 72 static u8 snd_cs5530_mixer_read(unsigned long io, u8 reg) 92 73 { … … 99 80 100 81 static int snd_cs5530_create(struct snd_card *card, 101 struct pci_dev *pci, 102 struct snd_cs5530 **rchip) 82 struct pci_dev *pci) 103 83 { 104 struct snd_cs5530 *chip ;84 struct snd_cs5530 *chip = card->private_data; 105 85 unsigned long sb_base; 106 86 u8 irq, dma8, dma16 = 0; … … 109 89 int err; 110 90 111 static const struct snd_device_ops ops = { 112 .dev_free = snd_cs5530_dev_free, 113 }; 114 *rchip = NULL; 115 116 err = pci_enable_device(pci); 91 err = pcim_enable_device(pci); 117 92 if (err < 0) 118 93 return err; 119 120 chip = kzalloc(sizeof(*chip), GFP_KERNEL);121 if (chip == NULL) {122 pci_disable_device(pci);123 return -ENOMEM;124 }125 94 126 95 chip->card = card; 127 96 chip->pci = pci; 128 97 129 err = pci_request_regions(pci, "CS5530"); 130 if (err < 0) { 131 kfree(chip); 132 pci_disable_device(pci); 133 return err; 134 } 98 err = pcim_iomap_regions(pci, 1 << 0, "CS5530"); 99 if (err < 0) 100 return err; 135 101 chip->pci_base = pci_resource_start(pci, 0); 136 102 #ifndef TARGET_OS2 103 mem = pcim_iomap_table(pci)[0]; 104 #else 137 105 mem = pci_ioremap_bar(pci, 0); 138 if (mem == NULL) { 139 snd_cs5530_free(chip); 140 return -EBUSY; 141 } 142 106 #endif 143 107 map = readw(mem + 0x18); 144 iounmap(mem);145 108 146 109 /* Map bits … … 159 122 else { 160 123 dev_err(card->dev, "Could not find XpressAudio!\n"); 161 snd_cs5530_free(chip);162 124 return -ENODEV; 163 125 } … … 179 141 else { 180 142 dev_err(card->dev, "No 16bit DMA enabled\n"); 181 snd_cs5530_free(chip);182 143 return -ENODEV; 183 144 } … … 191 152 else { 192 153 dev_err(card->dev, "No 8bit DMA enabled\n"); 193 snd_cs5530_free(chip);194 154 return -ENODEV; 195 155 } … … 205 165 else { 206 166 dev_err(card->dev, "SoundBlaster IRQ not set\n"); 207 snd_cs5530_free(chip);208 167 return -ENODEV; 209 168 } … … 215 174 if (err < 0) { 216 175 dev_err(card->dev, "Could not create SoundBlaster\n"); 217 snd_cs5530_free(chip);218 176 return err; 219 177 } … … 222 180 if (err < 0) { 223 181 dev_err(card->dev, "Could not create PCM\n"); 224 snd_cs5530_free(chip);225 182 return err; 226 183 } … … 229 186 if (err < 0) { 230 187 dev_err(card->dev, "Could not create Mixer\n"); 231 snd_cs5530_free(chip); 232 return err; 233 } 234 235 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 236 if (err < 0) { 237 snd_cs5530_free(chip); 238 return err; 239 } 240 241 *rchip = chip; 188 return err; 189 } 190 242 191 return 0; 243 192 } … … 248 197 static int dev; 249 198 struct snd_card *card; 250 struct snd_cs5530 *chip = NULL;199 struct snd_cs5530 *chip; 251 200 int err; 252 201 … … 258 207 } 259 208 260 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 261 0, &card); 262 263 if (err < 0) 264 return err; 265 266 err = snd_cs5530_create(card, pci, &chip); 267 if (err < 0) { 268 snd_card_free(card); 269 return err; 270 } 209 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 210 sizeof(*chip), &card); 211 if (err < 0) 212 return err; 213 chip = card->private_data; 214 215 err = snd_cs5530_create(card, pci); 216 if (err < 0) 217 return err; 271 218 272 219 strcpy(card->driver, "CS5530"); … … 275 222 276 223 err = snd_card_register(card); 277 if (err < 0) { 278 snd_card_free(card); 279 return err; 280 } 224 if (err < 0) 225 return err; 281 226 pci_set_drvdata(pci, card); 282 227 dev++; … … 288 233 .id_table = snd_cs5530_ids, 289 234 .probe = snd_cs5530_probe, 290 .remove = snd_cs5530_remove,291 235 }; 292 236
Note:
See TracChangeset
for help on using the changeset viewer.