Changeset 717 for GPL/trunk/alsa-kernel/pci/ymfpci
- Timestamp:
- Aug 7, 2022, 6:11:12 PM (3 years ago)
- Location:
- GPL/trunk
- Files:
-
- 4 edited
-
. (modified) (1 prop)
-
alsa-kernel/pci/ymfpci/ymfpci.c (modified) (15 diffs)
-
alsa-kernel/pci/ymfpci/ymfpci.h (modified) (3 diffs)
-
alsa-kernel/pci/ymfpci/ymfpci_main.c (modified) (6 diffs)
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/ymfpci/ymfpci.c
r703 r717 110 110 111 111 if (!r) { 112 r = request_region(io_port, 1, "YMFPCI gameport"); 112 r = devm_request_region(&chip->pci->dev, io_port, 1, 113 "YMFPCI gameport"); 113 114 if (!r) { 114 115 dev_err(chip->card->dev, … … 122 123 dev_err(chip->card->dev, 123 124 "cannot allocate memory for gameport\n"); 124 release_and_free_resource(r);125 125 return -ENOMEM; 126 126 } … … 131 131 gameport_set_dev_parent(gp, &chip->pci->dev); 132 132 gp->io = io_port; 133 gameport_set_port_data(gp, r);134 133 135 134 if (chip->pci->device >= 0x0010) /* YMF 744/754 */ … … 147 146 { 148 147 if (chip->gameport) { 149 struct resource *r = gameport_get_port_data(chip->gameport);150 151 148 gameport_unregister_port(chip->gameport); 152 149 chip->gameport = NULL; 153 154 release_and_free_resource(r);155 150 } 156 151 } … … 181 176 182 177 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 183 0, &card); 184 if (err < 0) 185 return err; 178 sizeof(*chip), &card); 179 if (err < 0) 180 return err; 181 chip = card->private_data; 186 182 187 183 switch (pci_id->device) { … … 204 200 } 205 201 if (fm_port[dev] > 0) 206 fm_res = request_region(fm_port[dev], 4, "YMFPCI OPL3"); 202 fm_res = devm_request_region(&pci->dev, fm_port[dev], 203 4, "YMFPCI OPL3"); 207 204 if (fm_res) { 208 205 legacy_ctrl |= YMFPCI_LEGACY_FMEN; … … 214 211 } 215 212 if (mpu_port[dev] > 0) 216 mpu_res = request_region(mpu_port[dev], 2, "YMFPCI MPU401"); 213 mpu_res = devm_request_region(&pci->dev, mpu_port[dev], 214 2, "YMFPCI MPU401"); 217 215 if (mpu_res) { 218 216 legacy_ctrl |= YMFPCI_LEGACY_MEN; … … 228 226 } 229 227 if (fm_port[dev] > 0) 230 fm_res = request_region(fm_port[dev], 4, "YMFPCI OPL3"); 228 fm_res = devm_request_region(&pci->dev, fm_port[dev], 229 4, "YMFPCI OPL3"); 231 230 if (fm_res) { 232 231 legacy_ctrl |= YMFPCI_LEGACY_FMEN; … … 243 242 } 244 243 if (mpu_port[dev] > 0) 245 mpu_res = request_region(mpu_port[dev], 2, "YMFPCI MPU401"); 244 mpu_res = devm_request_region(&pci->dev, mpu_port[dev], 245 2, "YMFPCI MPU401"); 246 246 if (mpu_res) { 247 247 legacy_ctrl |= YMFPCI_LEGACY_MEN; … … 258 258 pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); 259 259 pci_write_config_word(pci, PCIR_DSXG_ELEGACY, legacy_ctrl2); 260 err = snd_ymfpci_create(card, pci, old_legacy_ctrl, &chip); 261 if (err < 0) { 262 release_and_free_resource(mpu_res); 263 release_and_free_resource(fm_res); 264 goto free_card; 265 } 266 chip->fm_res = fm_res; 267 chip->mpu_res = mpu_res; 268 card->private_data = chip; 260 err = snd_ymfpci_create(card, pci, old_legacy_ctrl); 261 if (err < 0) 262 return err; 269 263 270 264 strcpy(card->driver, str); … … 276 270 err = snd_ymfpci_pcm(chip, 0); 277 271 if (err < 0) 278 goto free_card;272 return err; 279 273 280 274 err = snd_ymfpci_pcm_spdif(chip, 1); 281 275 if (err < 0) 282 goto free_card;276 return err; 283 277 284 278 err = snd_ymfpci_mixer(chip, rear_switch[dev]); 285 279 if (err < 0) 286 goto free_card;280 return err; 287 281 288 282 if (chip->ac97->ext_id & AC97_EI_SDAC) { 289 283 err = snd_ymfpci_pcm_4ch(chip, 2); 290 284 if (err < 0) 291 goto free_card;285 return err; 292 286 293 287 err = snd_ymfpci_pcm2(chip, 3); 294 288 if (err < 0) 295 goto free_card;289 return err; 296 290 } 297 291 err = snd_ymfpci_timer(chip, 0); 298 292 if (err < 0) 299 goto free_card;300 301 if ( chip->mpu_res) {293 return err; 294 295 if (mpu_res) { 302 296 err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI, 303 297 mpu_port[dev], … … 313 307 } 314 308 } 315 if ( chip->fm_res) {309 if (fm_res) { 316 310 err = snd_opl3_create(card, 317 311 fm_port[dev], … … 328 322 if (err < 0) { 329 323 dev_err(card->dev, "cannot create opl3 hwdep\n"); 330 goto free_card;324 return err; 331 325 } 332 326 } … … 337 331 err = snd_card_register(card); 338 332 if (err < 0) 339 goto free_card;333 return err; 340 334 341 335 pci_set_drvdata(pci, card); 342 336 dev++; 343 337 return 0; 344 345 free_card:346 snd_card_free(card);347 return err;348 }349 350 static void snd_card_ymfpci_remove(struct pci_dev *pci)351 {352 snd_card_free(pci_get_drvdata(pci));353 338 } 354 339 … … 357 342 .id_table = snd_ymfpci_ids, 358 343 .probe = snd_card_ymfpci_probe, 359 .remove = snd_card_ymfpci_remove,360 344 #ifdef CONFIG_PM_SLEEP 361 345 .driver = { -
GPL/trunk/alsa-kernel/pci/ymfpci/ymfpci.h
r679 r717 276 276 unsigned long reg_area_phys; 277 277 void __iomem *reg_area_virt; 278 struct resource *res_reg_area;279 struct resource *fm_res;280 struct resource *mpu_res;281 278 282 279 unsigned short old_legacy_ctrl; … … 285 282 #endif 286 283 287 struct snd_dma_buffer work_ptr;284 struct snd_dma_buffer *work_ptr; 288 285 289 286 unsigned int bank_size_playback; … … 359 356 int snd_ymfpci_create(struct snd_card *card, 360 357 struct pci_dev *pci, 361 unsigned short old_legacy_ctrl, 362 struct snd_ymfpci ** rcodec); 358 unsigned short old_legacy_ctrl); 363 359 void snd_ymfpci_free_gameport(struct snd_ymfpci *chip); 364 360 -
GPL/trunk/alsa-kernel/pci/ymfpci/ymfpci_main.c
r703 r717 2121 2121 /* work_ptr must be aligned to 256 bytes, but it's already 2122 2122 covered with the kernel page allocation mechanism */ 2123 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &chip->pci->dev, 2124 size, &chip->work_ptr) < 0) 2123 chip->work_ptr = snd_devm_alloc_pages(&chip->pci->dev, 2124 SNDRV_DMA_TYPE_DEV, size); 2125 if (!chip->work_ptr) 2125 2126 return -ENOMEM; 2126 ptr = chip->work_ptr .area;2127 ptr_addr = chip->work_ptr .addr;2127 ptr = chip->work_ptr->area; 2128 ptr_addr = chip->work_ptr->addr; 2128 2129 memset(ptr, 0, size); /* for sure */ 2129 2130 … … 2170 2171 2171 2172 snd_BUG_ON(ptr + chip->work_size != 2172 chip->work_ptr .area + chip->work_ptr.bytes);2173 chip->work_ptr->area + chip->work_ptr->bytes); 2173 2174 2174 2175 snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, chip->bank_base_playback_addr); … … 2201 2202 } 2202 2203 2203 static int snd_ymfpci_free(struct snd_ymfpci *chip) 2204 { 2204 static void snd_ymfpci_free(struct snd_card *card) 2205 { 2206 struct snd_ymfpci *chip = card->private_data; 2205 2207 u16 ctrl; 2206 2208 2207 if (snd_BUG_ON(!chip)) 2208 return -EINVAL; 2209 2210 if (chip->res_reg_area) { /* don't touch busy hardware */ 2211 snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0); 2212 snd_ymfpci_writel(chip, YDSXGR_BUF441OUTVOL, 0); 2213 snd_ymfpci_writel(chip, YDSXGR_LEGACYOUTVOL, 0); 2214 snd_ymfpci_writel(chip, YDSXGR_STATUS, ~0); 2215 snd_ymfpci_disable_dsp(chip); 2216 snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, 0); 2217 snd_ymfpci_writel(chip, YDSXGR_RECCTRLBASE, 0); 2218 snd_ymfpci_writel(chip, YDSXGR_EFFCTRLBASE, 0); 2219 snd_ymfpci_writel(chip, YDSXGR_WORKBASE, 0); 2220 snd_ymfpci_writel(chip, YDSXGR_WORKSIZE, 0); 2221 ctrl = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL); 2222 snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, ctrl & ~0x0007); 2223 } 2209 snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0); 2210 snd_ymfpci_writel(chip, YDSXGR_BUF441OUTVOL, 0); 2211 snd_ymfpci_writel(chip, YDSXGR_LEGACYOUTVOL, 0); 2212 snd_ymfpci_writel(chip, YDSXGR_STATUS, ~0); 2213 snd_ymfpci_disable_dsp(chip); 2214 snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, 0); 2215 snd_ymfpci_writel(chip, YDSXGR_RECCTRLBASE, 0); 2216 snd_ymfpci_writel(chip, YDSXGR_EFFCTRLBASE, 0); 2217 snd_ymfpci_writel(chip, YDSXGR_WORKBASE, 0); 2218 snd_ymfpci_writel(chip, YDSXGR_WORKSIZE, 0); 2219 ctrl = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL); 2220 snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, ctrl & ~0x0007); 2224 2221 2225 2222 snd_ymfpci_ac3_done(chip); 2226 2223 2227 /* Set PCI device to D3 state */2228 #if 02229 /* FIXME: temporarily disabled, otherwise we cannot fire up2230 * the chip again unless reboot. ACPI bug?2231 */2232 pci_set_power_state(chip->pci, PCI_D3hot);2233 #endif2234 2235 #ifdef CONFIG_PM_SLEEP2236 kfree(chip->saved_regs);2237 #endif2238 if (chip->irq >= 0)2239 free_irq(chip->irq, chip);2240 release_and_free_resource(chip->mpu_res);2241 release_and_free_resource(chip->fm_res);2242 2224 snd_ymfpci_free_gameport(chip); 2243 iounmap(chip->reg_area_virt); 2244 if (chip->work_ptr.area) 2245 snd_dma_free_pages(&chip->work_ptr); 2246 2247 release_and_free_resource(chip->res_reg_area); 2248 2225 2249 2226 pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl); 2250 2227 2251 pci_disable_device(chip->pci);2252 2228 release_firmware(chip->dsp_microcode); 2253 2229 release_firmware(chip->controller_microcode); 2254 kfree(chip);2255 return 0;2256 }2257 2258 static int snd_ymfpci_dev_free(struct snd_device *device)2259 {2260 struct snd_ymfpci *chip = device->device_data;2261 return snd_ymfpci_free(chip);2262 2230 } 2263 2231 … … 2351 2319 int snd_ymfpci_create(struct snd_card *card, 2352 2320 struct pci_dev *pci, 2353 unsigned short old_legacy_ctrl, 2354 struct snd_ymfpci **rchip) 2355 { 2356 struct snd_ymfpci *chip; 2321 unsigned short old_legacy_ctrl) 2322 { 2323 struct snd_ymfpci *chip = card->private_data; 2357 2324 int err; 2358 static const struct snd_device_ops ops = { 2359 .dev_free = snd_ymfpci_dev_free, 2360 }; 2361 2362 *rchip = NULL; 2363 2325 2364 2326 /* enable PCI device */ 2365 err = pci _enable_device(pci);2327 err = pcim_enable_device(pci); 2366 2328 if (err < 0) 2367 2329 return err; 2368 2330 2369 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2370 if (chip == NULL) {2371 pci_disable_device(pci);2372 return -ENOMEM;2373 }2374 2331 chip->old_legacy_ctrl = old_legacy_ctrl; 2375 2332 spin_lock_init(&chip->reg_lock); … … 2382 2339 chip->device_id = pci->device; 2383 2340 chip->rev = pci->revision; 2341 2342 err = pci_request_regions(pci, "YMFPCI"); 2343 if (err < 0) 2344 return err; 2345 2384 2346 chip->reg_area_phys = pci_resource_start(pci, 0); 2385 chip->reg_area_virt = ioremap(chip->reg_area_phys, 0x8000); 2386 pci_set_master(pci); 2387 chip->src441_used = -1; 2388 2389 chip->res_reg_area = request_mem_region(chip->reg_area_phys, 0x8000, "YMFPCI"); 2390 if (!chip->res_reg_area) { 2347 chip->reg_area_virt = devm_ioremap(&pci->dev, chip->reg_area_phys, 0x8000); 2348 if (!chip->reg_area_virt) { 2391 2349 dev_err(chip->card->dev, 2392 2350 "unable to grab memory region 0x%lx-0x%lx\n", 2393 2351 chip->reg_area_phys, chip->reg_area_phys + 0x8000 - 1); 2394 err = -EBUSY; 2395 goto free_chip; 2396 } 2397 if (request_irq(pci->irq, snd_ymfpci_interrupt, IRQF_SHARED, 2352 return -EBUSY; 2353 } 2354 pci_set_master(pci); 2355 chip->src441_used = -1; 2356 2357 if (devm_request_irq(&pci->dev, pci->irq, snd_ymfpci_interrupt, IRQF_SHARED, 2398 2358 KBUILD_MODNAME, chip)) { 2399 2359 dev_err(chip->card->dev, "unable to grab IRQ %d\n", pci->irq); 2400 err = -EBUSY; 2401 goto free_chip; 2360 return -EBUSY; 2402 2361 } 2403 2362 chip->irq = pci->irq; 2404 2363 card->sync_irq = chip->irq; 2364 card->private_free = snd_ymfpci_free; 2405 2365 2406 2366 snd_ymfpci_aclink_reset(pci); 2407 if (snd_ymfpci_codec_ready(chip, 0) < 0) { 2408 err = -EIO; 2409 goto free_chip; 2410 } 2367 if (snd_ymfpci_codec_ready(chip, 0) < 0) 2368 return -EIO; 2411 2369 2412 2370 err = snd_ymfpci_request_firmware(chip); 2413 2371 if (err < 0) { 2414 2372 dev_err(chip->card->dev, "firmware request failed: %d\n", err); 2415 goto free_chip;2373 return err; 2416 2374 } 2417 2375 snd_ymfpci_download_image(chip); … … 2419 2377 udelay(100); /* seems we need a delay after downloading image.. */ 2420 2378 2421 if (snd_ymfpci_memalloc(chip) < 0) { 2422 err = -EIO; 2423 goto free_chip; 2424 } 2379 if (snd_ymfpci_memalloc(chip) < 0) 2380 return -EIO; 2425 2381 2426 2382 err = snd_ymfpci_ac3_init(chip); 2427 2383 if (err < 0) 2428 goto free_chip;2384 return err; 2429 2385 2430 2386 #ifdef CONFIG_PM_SLEEP 2431 chip->saved_regs = kmalloc_array(YDSXGR_NUM_SAVED_REGS, sizeof(u32), 2432 GFP_KERNEL); 2433 if (chip->saved_regs == NULL) { 2434 err = -ENOMEM; 2435 goto free_chip; 2436 } 2387 chip->saved_regs = devm_kmalloc_array(&pci->dev, YDSXGR_NUM_SAVED_REGS, 2388 sizeof(u32), GFP_KERNEL); 2389 if (!chip->saved_regs) 2390 return -ENOMEM; 2437 2391 #endif 2438 2392 2439 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2440 if (err < 0)2441 goto free_chip;2442 2443 2393 snd_ymfpci_proc_init(card, chip); 2444 2394 2445 *rchip = chip; 2446 return 0; 2447 2448 free_chip: 2449 snd_ymfpci_free(chip); 2450 return err; 2451 } 2395 return 0; 2396 }
Note:
See TracChangeset
for help on using the changeset viewer.
