Changeset 710 for GPL/branches
- Timestamp:
- Aug 5, 2022, 2:58:37 AM (3 years ago)
- Location:
- GPL/branches/uniaud32-next
- Files:
- 
      - 85 edited
 
 - 
          
  alsa-kernel/core/info.c (modified) (1 diff)
- 
          
  alsa-kernel/core/init.c (modified) (11 diffs)
- 
          
  alsa-kernel/core/memalloc.c (modified) (6 diffs)
- 
          
  alsa-kernel/core/memalloc_local.h (modified) (1 diff)
- 
          
  alsa-kernel/core/pcm_memory.c (modified) (8 diffs)
- 
          
  alsa-kernel/core/pcm_native.c (modified) (5 diffs)
- 
          
  alsa-kernel/core/rawmidi.c (modified) (2 diffs)
- 
          
  alsa-kernel/core/seq/seq_dummy.c (modified) (1 diff)
- 
          
  alsa-kernel/core/seq_device.c (modified) (2 diffs)
- 
          
  alsa-kernel/core/sgbuf.c (modified) (2 diffs)
- 
          
  alsa-kernel/drivers/mpu401/mpu401.c (modified) (6 diffs)
- 
          
  alsa-kernel/hda/hdac_controller.c (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/compress_driver.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/core.h (modified) (3 diffs)
- 
          
  alsa-kernel/include/sound/emu10k1.h (modified) (3 diffs)
- 
          
  alsa-kernel/include/sound/emu8000.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/hda_codec.h (modified) (2 diffs)
- 
          
  alsa-kernel/include/sound/hdaudio_ext.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/memalloc.h (modified) (2 diffs)
- 
          
  alsa-kernel/include/sound/pcm.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/pxa2xx-lib.h (modified) (4 diffs)
- 
          
  alsa-kernel/include/sound/rawmidi.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/sof.h (modified) (1 diff)
- 
          
  alsa-kernel/include/sound/version.h (modified) (1 diff)
- 
          
  alsa-kernel/include/uapi/sound/asound.h (modified) (2 diffs)
- 
          
  alsa-kernel/isa/sb/sb_common.c (modified) (6 diffs)
- 
          
  alsa-kernel/pci/ali5451/ali5451.c (modified) (12 diffs)
- 
          
  alsa-kernel/pci/als4000.c (modified) (16 diffs)
- 
          
  alsa-kernel/pci/atiixp.c (modified) (9 diffs)
- 
          
  alsa-kernel/pci/au88x0/au88x0.c (modified) (13 diffs)
- 
          
  alsa-kernel/pci/bt87x.c (modified) (9 diffs)
- 
          
  alsa-kernel/pci/ca0106/ca0106.h (modified) (2 diffs)
- 
          
  alsa-kernel/pci/ca0106/ca0106_main.c (modified) (15 diffs)
- 
          
  alsa-kernel/pci/cmipci.c (modified) (15 diffs)
- 
          
  alsa-kernel/pci/cs4281.c (modified) (9 diffs)
- 
          
  alsa-kernel/pci/cs46xx/cs46xx.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/cs46xx/cs46xx.h (modified) (2 diffs)
- 
          
  alsa-kernel/pci/cs46xx/cs46xx_lib.c (modified) (14 diffs)
- 
          
  alsa-kernel/pci/cs5530.c (modified) (14 diffs)
- 
          
  alsa-kernel/pci/cs5535audio/cs5535audio.c (modified) (7 diffs)
- 
          
  alsa-kernel/pci/emu10k1/emu10k1.c (modified) (5 diffs)
- 
          
  alsa-kernel/pci/emu10k1/emu10k1_main.c (modified) (15 diffs)
- 
          
  alsa-kernel/pci/emu10k1/emu10k1x.c (modified) (13 diffs)
- 
          
  alsa-kernel/pci/emu10k1/p16v.c (modified) (4 diffs)
- 
          
  alsa-kernel/pci/ens1370.c (modified) (12 diffs)
- 
          
  alsa-kernel/pci/es1938.c (modified) (11 diffs)
- 
          
  alsa-kernel/pci/es1968.c (modified) (19 diffs)
- 
          
  alsa-kernel/pci/fm801.c (modified) (13 diffs)
- 
          
  alsa-kernel/pci/hda/hda_auto_parser.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/hda/hda_bind.c (modified) (4 diffs)
- 
          
  alsa-kernel/pci/hda/hda_codec.c (modified) (2 diffs)
- 
          
  alsa-kernel/pci/hda/hda_controller.c (modified) (5 diffs)
- 
          
  alsa-kernel/pci/hda/hda_controller.h (modified) (3 diffs)
- 
          
  alsa-kernel/pci/hda/hda_generic.c (modified) (2 diffs)
- 
          
  alsa-kernel/pci/hda/hda_generic.h (modified) (1 diff)
- 
          
  alsa-kernel/pci/hda/hda_intel.c (modified) (15 diffs)
- 
          
  alsa-kernel/pci/hda/hda_intel.h (modified) (2 diffs)
- 
          
  alsa-kernel/pci/hda/hda_local.h (modified) (1 diff)
- 
          
  alsa-kernel/pci/hda/patch_analog.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/hda/patch_ca0132.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/hda/patch_cirrus.c (modified) (6 diffs)
- 
          
  alsa-kernel/pci/hda/patch_conexant.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/hda/patch_hdmi.c (modified) (2 diffs)
- 
          
  alsa-kernel/pci/hda/patch_realtek.c (modified) (22 diffs)
- 
          
  alsa-kernel/pci/hda/patch_sigmatel.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/intel8x0.c (modified) (18 diffs)
- 
          
  alsa-kernel/pci/korg1212/korg1212.c (modified) (14 diffs)
- 
          
  alsa-kernel/pci/maestro3.c (modified) (17 diffs)
- 
          
  alsa-kernel/pci/nm256/nm256.c (modified) (14 diffs)
- 
          
  alsa-kernel/pci/rme9652/hdsp.c (modified) (16 diffs)
- 
          
  alsa-kernel/pci/rme9652/hdspm.c (modified) (11 diffs)
- 
          
  alsa-kernel/pci/rme9652/rme9652.c (modified) (16 diffs)
- 
          
  alsa-kernel/pci/trident/trident.c (modified) (5 diffs)
- 
          
  alsa-kernel/pci/trident/trident.h (modified) (2 diffs)
- 
          
  alsa-kernel/pci/trident/trident_main.c (modified) (15 diffs)
- 
          
  alsa-kernel/pci/trident/trident_memory.c (modified) (3 diffs)
- 
          
  alsa-kernel/pci/via82xx.c (modified) (16 diffs)
- 
          
  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)
- 
          
  include/linux/device.h (modified) (1 diff)
- 
          
  include/linux/interrupt.h (modified) (1 diff)
- 
          
  include/linux/io.h (modified) (1 diff)
- 
          
  include/linux/ioport.h (modified) (1 diff)
- 
          
  include/linux/pci.h (modified) (1 diff)
 
Legend:
- Unmodified
- Added
- Removed
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/info.cr637 r710 17 17 #include <linux/proc_fs.h> 18 18 #include <linux/mutex.h> 19 #include <stdarg.h>20 19 21 20 int snd_info_check_reserved_words(const char *str) 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/init.cr697 r710 139 139 EXPORT_SYMBOL_GPL(snd_device_initialize); 140 140 141 static int snd_card_init(struct snd_card *card, struct device *parent, 142 int idx, const char *xid, struct module *module, 143 size_t extra_size); 141 144 static int snd_card_do_free(struct snd_card *card); 142 145 static const struct attribute_group card_dev_attr_group; … … 168 171 struct snd_card *card; 169 172 int err; 170 #ifdef CONFIG_SND_DEBUG171 char name[8];172 #endif173 173 174 174 if (snd_BUG_ON(!card_ret)) … … 181 181 if (!card) 182 182 return -ENOMEM; 183 184 err = snd_card_init(card, parent, idx, xid, module, extra_size); 185 if (err < 0) { 186 kfree(card); 187 return err; 188 } 189 190 *card_ret = card; 191 return 0; 192 } 193 EXPORT_SYMBOL(snd_card_new); 194 195 static void __snd_card_release(struct device *dev, void *data) 196 { 197 snd_card_free(data); 198 } 199 200 /** 201 * snd_devm_card_new - managed snd_card object creation 202 * @parent: the parent device object 203 * @idx: card index (address) [0 ... (SNDRV_CARDS-1)] 204 * @xid: card identification (ASCII string) 205 * @module: top level module for locking 206 * @extra_size: allocate this extra size after the main soundcard structure 207 * @card_ret: the pointer to store the created card instance 208 * 209 * This function works like snd_card_new() but manages the allocated resource 210 * via devres, i.e. you don't need to free explicitly. 211 * 212 * When a snd_card object is created with this function and registered via 213 * snd_card_register(), the very first devres action to call snd_card_free() 214 * is added automatically. In that way, the resource disconnection is assured 215 * at first, then released in the expected order. 216 */ 217 int snd_devm_card_new(struct device *parent, int idx, const char *xid, 218 struct module *module, size_t extra_size, 219 struct snd_card **card_ret) 220 { 221 struct snd_card *card; 222 int err; 223 224 *card_ret = NULL; 225 card = devres_alloc(__snd_card_release, sizeof(*card) + extra_size, 226 GFP_KERNEL); 227 if (!card) 228 return -ENOMEM; 229 card->managed = true; 230 err = snd_card_init(card, parent, idx, xid, module, extra_size); 231 if (err < 0) { 232 devres_free(card); 233 return err; 234 } 235 236 devres_add(parent, card); 237 *card_ret = card; 238 return 0; 239 } 240 EXPORT_SYMBOL_GPL(snd_devm_card_new); 241 242 static int snd_card_init(struct snd_card *card, struct device *parent, 243 int idx, const char *xid, struct module *module, 244 size_t extra_size) 245 { 246 int err; 247 #ifdef CONFIG_SND_DEBUG 248 char name[8]; 249 #endif 250 183 251 if (extra_size > 0) 184 252 card->private_data = (char *)card + sizeof(struct snd_card); … … 202 270 dev_err(parent, "cannot find the slot for index %d (range 0-%i), error: %d\n", 203 271 idx, snd_ecards_limit - 1, err); 204 kfree(card);205 272 return err; 206 273 } … … 261 328 card->debugfs_root = debugfs_create_dir(name, sound_debugfs_root); 262 329 #endif 263 264 *card_ret = card;265 330 return 0; 266 331 … … 271 336 return err; 272 337 } 273 EXPORT_SYMBOL(snd_card_new);274 338 275 339 /** … … 489 553 static int snd_card_do_free(struct snd_card *card) 490 554 { 555 card->releasing = true; 491 556 #if IS_ENABLED(CONFIG_SND_MIXER_OSS) 492 557 if (snd_mixer_oss_notify_callback) … … 506 571 if (card->release_completion) 507 572 complete(card->release_completion); 508 kfree(card); 573 if (!card->managed) 574 kfree(card); 509 575 return 0; 510 576 } … … 546 612 DECLARE_COMPLETION_ONSTACK(released); 547 613 int ret; 614 615 /* The call of snd_card_free() is allowed from various code paths; 616 * a manual call from the driver and the call via devres_free, and 617 * we need to avoid double-free. Moreover, the release via devres 618 * may call snd_card_free() twice due to its nature, we need to have 619 * the check here at the beginning. 620 */ 621 if (card->releasing) 622 return 0; 548 623 549 624 card->release_completion = &released; … … 755 830 EXPORT_SYMBOL_GPL(snd_card_add_dev_attr); 756 831 832 static void trigger_card_free(void *data) 833 { 834 snd_card_free(data); 835 } 836 757 837 /** 758 838 * snd_card_register - register the soundcard … … 778 858 return err; 779 859 card->registered = true; 780 } 781 860 #ifndef TARGET_OS2 861 } else { 862 if (card->managed) 863 devm_remove_action(card->dev, trigger_card_free, card); 864 #endif 865 } 866 867 #ifndef TARGET_OS2 868 if (card->managed) { 869 err = devm_add_action(card->dev, trigger_card_free, card); 870 if (err < 0) 871 return err; 872 } 873 #endif 782 874 err = snd_device_register_all(card); 783 875 if (err < 0) 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/memalloc.cr697 r710 41 41 gfp_flags); 42 42 #ifdef CONFIG_X86 43 if (dmab->area && dmab->dev.type == SNDRV_DMA_TYPE_DEV_ UC)43 if (dmab->area && dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC) 44 44 set_memory_wc((unsigned long)dmab->area, 45 45 PAGE_ALIGN(size) >> PAGE_SHIFT); … … 68 68 { 69 69 #ifdef CONFIG_X86 70 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_ UC)70 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC) 71 71 set_memory_wb((unsigned long)dmab->area, 72 72 PAGE_ALIGN(dmab->bytes) >> PAGE_SHIFT); … … 201 201 #endif /* CONFIG_GENERIC_ALLOCATOR */ 202 202 case SNDRV_DMA_TYPE_DEV: 203 case SNDRV_DMA_TYPE_DEV_ UC:203 case SNDRV_DMA_TYPE_DEV_WC: 204 204 #ifndef TARGET_OS2 205 205 snd_malloc_dev_pages(dmab, size); … … 211 211 #ifdef CONFIG_SND_DMA_SGBUF 212 212 case SNDRV_DMA_TYPE_DEV_SG: 213 case SNDRV_DMA_TYPE_DEV_ UC_SG:213 case SNDRV_DMA_TYPE_DEV_WC_SG: 214 214 snd_malloc_sgbuf_pages(device, size, dmab, NULL); 215 215 break; … … 283 283 #endif /* CONFIG_GENERIC_ALLOCATOR */ 284 284 case SNDRV_DMA_TYPE_DEV: 285 case SNDRV_DMA_TYPE_DEV_ UC:285 case SNDRV_DMA_TYPE_DEV_WC: 286 286 #ifndef TARGET_OS2 287 287 snd_free_dev_pages(dmab); … … 293 293 #ifdef CONFIG_SND_DMA_SGBUF 294 294 case SNDRV_DMA_TYPE_DEV_SG: 295 case SNDRV_DMA_TYPE_DEV_ UC_SG:295 case SNDRV_DMA_TYPE_DEV_WC_SG: 296 296 snd_free_sgbuf_pages(dmab); 297 297 break; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/memalloc_local.hr697 r710 4 4 5 5 struct snd_malloc_ops { 6 int(*alloc)(struct snd_dma_buffer *dmab, size_t size);6 void *(*alloc)(struct snd_dma_buffer *dmab, size_t size); 7 7 void (*free)(struct snd_dma_buffer *dmab); 8 8 dma_addr_t (*get_addr)(struct snd_dma_buffer *dmab, size_t offset); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/pcm_memory.cr697 r710 68 68 * the minimum size is snd_minimum_buffer. it should be power of 2. 69 69 */ 70 static int preallocate_pcm_pages(struct snd_pcm_substream *substream, size_t size) 70 static int preallocate_pcm_pages(struct snd_pcm_substream *substream, 71 size_t size, bool no_fallback) 71 72 { 72 73 struct snd_dma_buffer *dmab = &substream->dma_buffer; … … 80 81 if (err != -ENOMEM) 81 82 return err; 83 if (no_fallback) 84 break; 82 85 size >>= 1; 83 86 } while (size >= snd_minimum_buffer); … … 87 90 substream->stream ? 'c' : 'p', substream->number, 88 91 substream->pcm->name, orig_size); 89 return 0;92 return -ENOMEM; 90 93 } 91 94 … … 223 226 * pre-allocate the buffer and create a proc file for the substream 224 227 */ 225 static voidpreallocate_pages(struct snd_pcm_substream *substream,228 static int preallocate_pages(struct snd_pcm_substream *substream, 226 229 int type, struct device *data, 227 230 size_t size, size_t max, bool managed) 228 231 { 232 int err; 233 229 234 if (snd_BUG_ON(substream->dma_buffer.dev.type)) 230 return ;235 return -EINVAL; 231 236 232 237 substream->dma_buffer.dev.type = type; 233 238 substream->dma_buffer.dev.dev = data; 234 239 235 if (size > 0 && preallocate_dma && substream->number < maximum_substreams) 236 preallocate_pcm_pages(substream, size); 240 if (size > 0) { 241 if (!max) { 242 /* no fallback, only also inform -ENOMEM */ 243 err = preallocate_pcm_pages(substream, size, true); 244 if (err < 0) 245 return err; 246 } else if (preallocate_dma && 247 substream->number < maximum_substreams) { 248 err = preallocate_pcm_pages(substream, size, false); 249 if (err < 0 && err != -ENOMEM) 250 return err; 251 } 252 } 237 253 238 254 if (substream->dma_buffer.bytes > 0) … … 243 259 if (managed) 244 260 substream->managed_buffer_alloc = 1; 245 } 246 247 static void preallocate_pages_for_all(struct snd_pcm *pcm, int type, 261 return 0; 262 } 263 264 static int preallocate_pages_for_all(struct snd_pcm *pcm, int type, 248 265 void *data, size_t size, size_t max, 249 266 bool managed) 250 267 { 251 268 struct snd_pcm_substream *substream; 252 int stream; 253 254 for_each_pcm_substream(pcm, stream, substream) 255 preallocate_pages(substream, type, data, size, max, managed); 269 int stream, err; 270 271 for_each_pcm_substream(pcm, stream, substream) { 272 err = preallocate_pages(substream, type, data, size, max, managed); 273 if (err < 0) 274 return err; 275 } 276 return 0; 256 277 } 257 278 … … 310 331 * turns on the runtime buffer_changed flag for drivers changing their h/w 311 332 * parameters accordingly. 312 */ 313 void snd_pcm_set_managed_buffer(struct snd_pcm_substream *substream, int type, 333 * 334 * When @size is non-zero and @max is zero, this tries to allocate for only 335 * the exact buffer size without fallback, and may return -ENOMEM. 336 * Otherwise, the function tries to allocate smaller chunks if the allocation 337 * fails. This is the behavior of snd_pcm_set_fixed_buffer(). 338 * 339 * When both @size and @max are zero, the function only sets up the buffer 340 * for later dynamic allocations. It's used typically for buffers with 341 * SNDRV_DMA_TYPE_VMALLOC type. 342 * 343 * Upon successful buffer allocation and setup, the function returns 0. 344 */ 345 int snd_pcm_set_managed_buffer(struct snd_pcm_substream *substream, int type, 314 346 struct device *data, size_t size, size_t max) 315 347 { 316 preallocate_pages(substream, type, data, size, max, true);348 return preallocate_pages(substream, type, data, size, max, true); 317 349 } 318 350 EXPORT_SYMBOL(snd_pcm_set_managed_buffer); … … 330 362 * type and size, and set the managed_buffer_alloc flag to each substream. 331 363 */ 332 voidsnd_pcm_set_managed_buffer_all(struct snd_pcm *pcm, int type,333 334 335 { 336 preallocate_pages_for_all(pcm, type, data, size, max, true);364 int snd_pcm_set_managed_buffer_all(struct snd_pcm *pcm, int type, 365 struct device *data, 366 size_t size, size_t max) 367 { 368 return preallocate_pages_for_all(pcm, type, data, size, max, true); 337 369 } 338 370 EXPORT_SYMBOL(snd_pcm_set_managed_buffer_all); … … 377 409 dmab = &substream->dma_buffer; /* use the pre-allocated buffer */ 378 410 } else { 411 /* dma_max=0 means the fixed size preallocation */ 412 if (substream->dma_buffer.area && !substream->dma_max) 413 return -ENOMEM; 379 414 dmab = kzalloc(sizeof(*dmab), GFP_KERNEL); 380 415 if (! dmab) 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/pcm_native.cr697 r710 248 248 static bool hw_support_mmap(struct snd_pcm_substream *substream) 249 249 { 250 struct snd_dma_buffer *dmabuf; 251 250 252 if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) 251 253 return false; … … 254 256 return true; 255 257 256 switch (substream->dma_buffer.dev.type) { 258 dmabuf = snd_pcm_get_dma_buf(substream); 259 if (!dmabuf) 260 dmabuf = &substream->dma_buffer; 261 switch (dmabuf->dev.type) { 257 262 case SNDRV_DMA_TYPE_UNKNOWN: 258 263 /* we can't know the device, so just assume that the driver does … … 264 269 return true; 265 270 default: 266 return dma_can_mmap( substream->dma_buffer.dev.dev);271 return dma_can_mmap(dmabuf->dev.dev); 267 272 } 268 273 } … … 3666 3671 static bool pcm_status_mmap_allowed(struct snd_pcm_file *pcm_file) 3667 3672 { 3673 /* If drivers require the explicit sync (typically for non-coherent 3674 * pages), we have to disable the mmap of status and control data 3675 * to enforce the control via SYNC_PTR ioctl. 3676 */ 3677 if (pcm_file->substream->runtime->hw.info & SNDRV_PCM_INFO_EXPLICIT_SYNC) 3678 return false; 3668 3679 /* See pcm_control_mmap_allowed() below. 3669 3680 * Since older alsa-lib requires both status and control mmaps to be … … 3679 3690 { 3680 3691 if (pcm_file->no_compat_mmap) 3692 return false; 3693 /* see above */ 3694 if (pcm_file->substream->runtime->hw.info & SNDRV_PCM_INFO_EXPLICIT_SYNC) 3681 3695 return false; 3682 3696 /* Disallow the control mmap when SYNC_APPLPTR flag is set; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/rawmidi.cr697 r710 894 894 } 895 895 } 896 case SNDRV_RAWMIDI_IOCTL_USER_PVERSION: 897 if (get_user(rfile->user_pversion, (unsigned int __user *)arg)) 898 return -EFAULT; 899 return 0; 900 896 901 case SNDRV_RAWMIDI_IOCTL_PARAMS: 897 902 { … … 900 905 if (copy_from_user(¶ms, argp, sizeof(struct snd_rawmidi_params))) 901 906 return -EFAULT; 907 if (rfile->user_pversion < SNDRV_PROTOCOL_VERSION(2, 0, 2)) { 908 params.mode = 0; 909 memset(params.reserved, 0, sizeof(params.reserved)); 910 } 902 911 switch (params.stream) { 903 912 case SNDRV_RAWMIDI_STREAM_OUTPUT: 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/seq/seq_dummy.cr697 r710 21 21 The routing can be done via aconnect program in alsa-utils. 22 22 23 Each client has a static client number 62(= SNDRV_SEQ_CLIENT_DUMMY).23 Each client has a static client number 14 (= SNDRV_SEQ_CLIENT_DUMMY). 24 24 If you want to auto-load this module, you may add the following alias 25 25 in your /etc/conf.modules file. 26 26 27 alias snd-seq-client- 62snd-seq-dummy28 29 The module is loaded on demand for client 62, or /proc/asound/seq/27 alias snd-seq-client-14 snd-seq-dummy 28 29 The module is loaded on demand for client 14, or /proc/asound/seq/ 30 30 is accessed. If you don't need this module to be loaded, alias 31 snd-seq-client- 62as "off". This will help modprobe.31 snd-seq-client-14 as "off". This will help modprobe. 32 32 33 33 The number of ports to be created can be specified via the module 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/seq_device.cr694 r710 157 157 158 158 cancel_autoload_drivers(); 159 if (dev->private_free) 160 dev->private_free(dev); 159 161 put_device(&dev->dev); 160 162 return 0; … … 184 186 static void snd_seq_dev_release(struct device *dev) 185 187 { 186 struct snd_seq_device *sdev = to_seq_dev(dev); 187 188 if (sdev->private_free) 189 sdev->private_free(sdev); 190 kfree(sdev); 188 kfree(to_seq_dev(dev)); 191 189 } 192 190 
- 
      GPL/branches/uniaud32-next/alsa-kernel/core/sgbuf.cr697 r710 53 53 54 54 tmpb.dev.type = SNDRV_DMA_TYPE_DEV; 55 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_ UC_SG)56 tmpb.dev.type = SNDRV_DMA_TYPE_DEV_ UC;55 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC_SG) 56 tmpb.dev.type = SNDRV_DMA_TYPE_DEV_WC; 57 57 tmpb.dev.dev = sgbuf->dev; 58 58 for (i = 0; i < sgbuf->pages; i++) { … … 134 134 if (! sgbuf) 135 135 return NULL; 136 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_ UC_SG) {137 type = SNDRV_DMA_TYPE_DEV_ UC;136 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC_SG) { 137 type = SNDRV_DMA_TYPE_DEV_WC; 138 138 #ifdef pgprot_noncached 139 139 prot = pgprot_noncached(PAGE_KERNEL); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/drivers/mpu401/mpu401.cr697 r710 72 72 73 73 *rcard = NULL; 74 err = snd_ card_new(devptr, index[dev], id[dev], THIS_MODULE,75 74 err = snd_devm_card_new(devptr, index[dev], id[dev], THIS_MODULE, 75 0, &card); 76 76 if (err < 0) 77 77 return err; … … 89 89 if (err < 0) { 90 90 printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]); 91 goto _err;91 return err; 92 92 } 93 93 94 94 *rcard = card; 95 95 return 0; 96 97 _err:98 snd_card_free(card);99 return err;100 96 } 101 97 … … 118 114 return err; 119 115 err = snd_card_register(card); 120 if (err < 0) { 121 snd_card_free(card); 122 return err; 123 } 116 if (err < 0) 117 return err; 124 118 platform_set_drvdata(devptr, card); 125 return 0;126 }127 128 static int snd_mpu401_remove(struct platform_device *devptr)129 {130 snd_card_free(platform_get_drvdata(devptr));131 119 return 0; 132 120 } … … 136 124 static struct platform_driver snd_mpu401_driver = { 137 125 .probe = snd_mpu401_probe, 138 .remove = snd_mpu401_remove,139 126 .driver = { 140 127 .name = SND_MPU401_DRIVER, … … 197 184 return err; 198 185 err = snd_card_register(card); 199 if (err < 0) { 200 snd_card_free(card); 186 if (err < 0) 201 187 return err; 202 }203 188 pnp_set_drvdata(pnp_dev, card); 204 189 snd_mpu401_devices++; … … 209 194 } 210 195 211 static void snd_mpu401_pnp_remove(struct pnp_dev *dev)212 {213 struct snd_card *card = (struct snd_card *) pnp_get_drvdata(dev);214 215 snd_card_disconnect(card);216 snd_card_free_when_closed(card);217 }218 219 196 static struct pnp_driver snd_mpu401_pnp_driver = { 220 197 .name = "mpu401", 221 198 .id_table = snd_mpu401_pnpids, 222 199 .probe = snd_mpu401_pnp_probe, 223 .remove = snd_mpu401_pnp_remove,224 200 }; 225 201 #else 
- 
      GPL/branches/uniaud32-next/alsa-kernel/hda/hdac_controller.cr693 r710 428 428 goto skip_reset; 429 429 430 /* clear STATESTS */ 431 snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); 430 /* clear STATESTS if not in reset */ 431 if (snd_hdac_chip_readb(bus, GCTL) & AZX_GCTL_RESET) 432 snd_hdac_chip_writew(bus, STATESTS, STATESTS_INT_MASK); 432 433 433 434 /* reset controller */ 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/compress_driver.hr692 r710 166 166 167 167 /* compress device register APIs */ 168 int snd_compress_register(struct snd_compr *device);169 int snd_compress_deregister(struct snd_compr *device);170 168 int snd_compress_new(struct snd_card *card, int device, 171 169 int type, const char *id, struct snd_compr *compr); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/core.hr697 r710 121 121 const struct attribute_group *dev_groups[4]; /* assigned sysfs attr */ 122 122 bool registered; /* card_dev is registered? */ 123 bool managed; /* managed via devres */ 124 bool releasing; /* during card free process */ 123 125 int sync_irq; /* assigned irq, used for PCM sync */ 124 126 wait_queue_head_t remove_sleep; … … 278 280 struct module *module, int extra_size, 279 281 struct snd_card **card_ret); 282 int snd_devm_card_new(struct device *parent, int idx, const char *xid, 283 struct module *module, size_t extra_size, 284 struct snd_card **card_ret); 280 285 281 286 int snd_card_disconnect(struct snd_card *card); … … 328 333 void snd_dma_disable(unsigned long dma); 329 334 unsigned int snd_dma_pointer(unsigned long dma, unsigned int size); 335 int snd_devm_request_dma(struct device *dev, int dma, const char *name); 330 336 #endif 331 337 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/emu10k1.hr615 r710 1702 1702 struct snd_dma_buffer ptb_pages; /* page table pages */ 1703 1703 struct snd_dma_device p16v_dma_dev; 1704 struct snd_dma_buffer p16v_buffer;1704 struct snd_dma_buffer *p16v_buffer; 1705 1705 1706 1706 struct snd_util_memhdr *memhdr; /* page allocation list */ … … 1797 1797 long max_cache_bytes, 1798 1798 int enable_ir, 1799 uint subsystem, 1800 struct snd_emu10k1 ** remu); 1799 uint subsystem); 1801 1800 1802 1801 int snd_emu10k1_pcm(struct snd_emu10k1 *emu, int device); … … 1804 1803 int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device); 1805 1804 int snd_p16v_pcm(struct snd_emu10k1 *emu, int device); 1806 int snd_p16v_free(struct snd_emu10k1 * emu);1807 1805 int snd_p16v_mixer(struct snd_emu10k1 * emu); 1808 1806 int snd_emu10k1_pcm_multi(struct snd_emu10k1 *emu, int device); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/emu8000.hr615 r710 57 57 unsigned long port2; /* Port usually at base+0x400 */ 58 58 unsigned long port3; /* Port usually at base+0x800 */ 59 struct resource *res_port1;60 struct resource *res_port2;61 struct resource *res_port3;62 59 unsigned short last_reg;/* Last register command */ 63 60 spinlock_t reg_lock; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/hda_codec.hr692 r710 115 115 int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid); 116 116 #endif 117 void (*reboot_notify)(struct hda_codec *codec);118 117 void (*stream_pm)(struct hda_codec *codec, hda_nid_t nid, bool on); 119 118 }; … … 226 225 227 226 /* misc flags */ 227 unsigned int configured:1; /* codec was configured */ 228 228 unsigned int in_freeing:1; /* being released */ 229 229 unsigned int registered:1; /* codec was registered */ 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/hdaudio_ext.hr693 r710 52 52 * @link_locked: link is locked 53 53 * @link_prepared: link is prepared 54 * link_substream: link substream54 * @link_substream: link substream 55 55 */ 56 56 struct hdac_ext_stream { 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/memalloc.hr697 r710 32 32 #define SNDRV_DMA_TYPE_CONTINUOUS 1 /* continuous no-DMA memory */ 33 33 #define SNDRV_DMA_TYPE_DEV 2 /* generic device continuous */ 34 #define SNDRV_DMA_TYPE_DEV_ UC 5 /* continuous non-cahced */34 #define SNDRV_DMA_TYPE_DEV_WC 5 /* continuous write-combined */ 35 35 #ifdef CONFIG_SND_DMA_SGBUF 36 36 #define SNDRV_DMA_TYPE_DEV_SG 3 /* generic device SG-buffer */ 37 #define SNDRV_DMA_TYPE_DEV_ UC_SG 6 /* SG non-cached */37 #define SNDRV_DMA_TYPE_DEV_WC_SG 6 /* SG write-combined */ 38 38 #else 39 39 #define SNDRV_DMA_TYPE_DEV_SG SNDRV_DMA_TYPE_DEV /* no SG-buf support */ 40 #define SNDRV_DMA_TYPE_DEV_ UC_SG SNDRV_DMA_TYPE_DEV_UC40 #define SNDRV_DMA_TYPE_DEV_WC_SG SNDRV_DMA_TYPE_DEV_WC 41 41 #endif 42 42 #ifdef CONFIG_GENERIC_ALLOCATOR … … 80 80 unsigned int ofs, unsigned int size); 81 81 82 /* device-managed memory allocator */ 83 struct snd_dma_buffer *snd_devm_alloc_pages(struct device *dev, int type, 84 size_t size); 82 85 #endif /* __SOUND_MEMALLOC_H */ 83 86 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/pcm.hr697 r710 1225 1225 int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream); 1226 1226 1227 void snd_pcm_set_managed_buffer(struct snd_pcm_substream *substream, int type, 1228 struct device *data, size_t size, size_t max); 1229 void snd_pcm_set_managed_buffer_all(struct snd_pcm *pcm, int type, 1230 struct device *data, 1231 size_t size, size_t max); 1227 int snd_pcm_set_managed_buffer(struct snd_pcm_substream *substream, int type, 1228 struct device *data, size_t size, size_t max); 1229 int snd_pcm_set_managed_buffer_all(struct snd_pcm *pcm, int type, 1230 struct device *data, 1231 size_t size, size_t max); 1232 1233 /** 1234 * snd_pcm_set_fixed_buffer - Preallocate and set up the fixed size PCM buffer 1235 * @substream: the pcm substream instance 1236 * @type: DMA type (SNDRV_DMA_TYPE_*) 1237 * @data: DMA type dependent data 1238 * @size: the requested pre-allocation size in bytes 1239 * 1240 * This is a variant of snd_pcm_set_managed_buffer(), but this pre-allocates 1241 * only the given sized buffer and doesn't allow re-allocation nor dynamic 1242 * allocation of a larger buffer unlike the standard one. 1243 * The function may return -ENOMEM error, hence the caller must check it. 1244 */ 1245 static inline int __must_check 1246 snd_pcm_set_fixed_buffer(struct snd_pcm_substream *substream, int type, 1247 struct device *data, size_t size) 1248 { 1249 return snd_pcm_set_managed_buffer(substream, type, data, size, 0); 1250 } 1251 1252 /** 1253 * snd_pcm_set_fixed_buffer_all - Preallocate and set up the fixed size PCM buffer 1254 * @pcm: the pcm instance 1255 * @type: DMA type (SNDRV_DMA_TYPE_*) 1256 * @data: DMA type dependent data 1257 * @size: the requested pre-allocation size in bytes 1258 * 1259 * Apply the set up of the fixed buffer via snd_pcm_set_fixed_buffer() for 1260 * all substream. If any of allocation fails, it returns -ENOMEM, hence the 1261 * caller must check the return value. 1262 */ 1263 static inline int __must_check 1264 snd_pcm_set_fixed_buffer_all(struct snd_pcm *pcm, int type, 1265 struct device *data, size_t size) 1266 { 1267 return snd_pcm_set_managed_buffer_all(pcm, type, data, size, 0); 1268 } 1232 1269 1233 1270 int _snd_pcm_lib_alloc_vmalloc_buffer(struct snd_pcm_substream *substream, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/pxa2xx-lib.hr629 r710 15 15 extern int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream, 16 16 struct snd_pcm_hw_params *params); 17 extern int pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream);18 17 extern int pxa2xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd); 19 18 extern snd_pcm_uframes_t pxa2xx_pcm_pointer(struct snd_pcm_substream *substream); … … 21 20 extern int pxa2xx_pcm_open(struct snd_pcm_substream *substream); 22 21 extern int pxa2xx_pcm_close(struct snd_pcm_substream *substream); 23 extern int pxa2xx_pcm_mmap(struct snd_pcm_substream *substream, 24 struct vm_area_struct *vma); 25 extern int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream); 26 extern void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm); 27 extern void pxa2xx_soc_pcm_free(struct snd_soc_component *component, 28 struct snd_pcm *pcm); 22 extern int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm); 29 23 extern int pxa2xx_soc_pcm_new(struct snd_soc_component *component, 30 24 struct snd_soc_pcm_runtime *rtd); … … 36 30 struct snd_pcm_substream *substream, 37 31 struct snd_pcm_hw_params *params); 38 extern int pxa2xx_soc_pcm_hw_free(struct snd_soc_component *component,39 struct snd_pcm_substream *substream);40 32 extern int pxa2xx_soc_pcm_prepare(struct snd_soc_component *component, 41 33 struct snd_pcm_substream *substream); … … 45 37 pxa2xx_soc_pcm_pointer(struct snd_soc_component *component, 46 38 struct snd_pcm_substream *substream); 47 extern int pxa2xx_soc_pcm_mmap(struct snd_soc_component *component,48 struct snd_pcm_substream *substream,49 struct vm_area_struct *vma);50 39 51 40 /* AC97 */ 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/rawmidi.hr697 r710 99 99 struct snd_rawmidi_substream *input; 100 100 struct snd_rawmidi_substream *output; 101 unsigned int user_pversion; /* supported protocol version */ 101 102 }; 102 103 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/sof.hr694 r710 102 102 103 103 int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd); 104 int sof_dai_get_bclk(struct snd_soc_pcm_runtime *rtd); 104 105 105 106 #endif 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/sound/version.hr697 r710 1 1 /* include/version.h */ 2 #define CONFIG_SND_VERSION "5.1 4.7"2 #define CONFIG_SND_VERSION "5.15" 3 3 #define CONFIG_SND_DATE "" 
- 
      GPL/branches/uniaud32-next/alsa-kernel/include/uapi/sound/asound.hr697 r710 324 324 #define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */ 325 325 #define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */ 326 #define SNDRV_PCM_INFO_EXPLICIT_SYNC 0x10000000 /* needs explicit sync of pointers and data */ 326 327 327 328 #define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */ … … 825 826 #define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int) 826 827 #define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info) 828 #define SNDRV_RAWMIDI_IOCTL_USER_PVERSION _IOW('W', 0x02, int) 827 829 #define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params) 828 830 #define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status) 
- 
      GPL/branches/uniaud32-next/alsa-kernel/isa/sb/sb_common.cr697 r710 169 169 } 170 170 171 static int snd_sbdsp_free(struct snd_sb *chip)172 {173 release_and_free_resource(chip->res_port);174 if (chip->irq >= 0)175 free_irq(chip->irq, (void *) chip);176 #ifdef CONFIG_ISA177 if (chip->dma8 >= 0) {178 disable_dma(chip->dma8);179 free_dma(chip->dma8);180 }181 if (chip->dma16 >= 0 && chip->dma16 != chip->dma8) {182 disable_dma(chip->dma16);183 free_dma(chip->dma16);184 }185 #endif186 kfree(chip);187 return 0;188 }189 190 static int snd_sbdsp_dev_free(struct snd_device *device)191 {192 struct snd_sb *chip = device->device_data;193 return snd_sbdsp_free(chip);194 }195 196 171 int snd_sbdsp_create(struct snd_card *card, 197 172 unsigned long port, … … 205 180 struct snd_sb *chip; 206 181 int err; 207 static const struct snd_device_ops ops = {208 .dev_free = snd_sbdsp_dev_free,209 };210 182 211 183 if (snd_BUG_ON(!r_chip)) 212 184 return -EINVAL; 213 185 *r_chip = NULL; 214 chip = kzalloc(sizeof(*chip), GFP_KERNEL);215 if ( chip == NULL)186 chip = devm_kzalloc(card->dev, sizeof(*chip), GFP_KERNEL); 187 if (!chip) 216 188 return -ENOMEM; 217 189 spin_lock_init(&chip->reg_lock); … … 224 196 chip->port = port; 225 197 226 if ( request_irq(irq, irq_handler,227 (hardware == SB_HW_ALS4000 ||228 hardware == SB_HW_CS5530) ?229 IRQF_SHARED : 0,230 "SoundBlaster", (void *) chip)) {198 if (devm_request_irq(card->dev, irq, irq_handler, 199 (hardware == SB_HW_ALS4000 || 200 hardware == SB_HW_CS5530) ? 201 IRQF_SHARED : 0, 202 "SoundBlaster", (void *) chip)) { 231 203 snd_printk(KERN_ERR "sb: can't grab irq %d\n", irq); 232 snd_sbdsp_free(chip);233 204 return -EBUSY; 234 205 } … … 239 210 goto __skip_allocation; 240 211 241 chip->res_port = request_region(port, 16, "SoundBlaster"); 212 chip->res_port = devm_request_region(card->dev, port, 16, 213 "SoundBlaster"); 242 214 if (!chip->res_port) { 243 215 snd_printk(KERN_ERR "sb: can't grab port 0x%lx\n", port); 244 snd_sbdsp_free(chip);245 216 return -EBUSY; 246 217 } 247 218 248 219 #ifdef CONFIG_ISA 249 if (dma8 >= 0 && request_dma(dma8, "SoundBlaster - 8bit")) { 220 if (dma8 >= 0 && snd_devm_request_dma(card->dev, dma8, 221 "SoundBlaster - 8bit")) { 250 222 snd_printk(KERN_ERR "sb: can't grab DMA8 %d\n", dma8); 251 snd_sbdsp_free(chip);252 223 return -EBUSY; 253 224 } … … 257 228 /* no duplex */ 258 229 dma16 = -1; 259 } else if (request_dma(dma16, "SoundBlaster - 16bit")) { 230 } else if (snd_devm_request_dma(card->dev, dma16, 231 "SoundBlaster - 16bit")) { 260 232 snd_printk(KERN_ERR "sb: can't grab DMA16 %d\n", dma16); 261 snd_sbdsp_free(chip);262 233 return -EBUSY; 263 234 } … … 270 241 chip->hardware = hardware; 271 242 err = snd_sbdsp_probe(chip); 272 if (err < 0) { 273 snd_sbdsp_free(chip); 243 if (err < 0) 274 244 return err; 275 }276 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);277 if (err < 0) {278 snd_sbdsp_free(chip);279 return err;280 }281 245 *r_chip = chip; 282 246 return 0; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/ali5451/ali5451.cr693 r710 1918 1918 #endif /* CONFIG_PM_SLEEP */ 1919 1919 1920 static int snd_ali_free(struct snd_ali * codec) 1921 { 1920 static void snd_ali_free(struct snd_card *card) 1921 { 1922 struct snd_ali *codec = card->private_data; 1923 1922 1924 if (codec->hw_initialized) 1923 1925 snd_ali_disable_address_interrupt(codec); 1924 if (codec->irq >= 0)1925 free_irq(codec->irq, codec);1926 if (codec->port)1927 pci_release_regions(codec->pci);1928 pci_disable_device(codec->pci);1929 #ifdef CONFIG_PM_SLEEP1930 kfree(codec->image);1931 #endif1932 1926 pci_dev_put(codec->pci_m1533); 1933 1927 pci_dev_put(codec->pci_m7101); 1934 kfree(codec);1935 return 0;1936 1928 } 1937 1929 … … 2021 2013 codec->port = pci_resource_start(codec->pci, 0); 2022 2014 2023 if (request_irq(codec->pci->irq, snd_ali_card_interrupt, 2024 IRQF_SHARED, KBUILD_MODNAME, codec)) { 2015 if (devm_request_irq(&codec->pci->dev, codec->pci->irq, 2016 snd_ali_card_interrupt, 2017 IRQF_SHARED, KBUILD_MODNAME, codec)) { 2025 2018 dev_err(codec->card->dev, "Unable to request irq.\n"); 2026 2019 return -EBUSY; … … 2031 2024 return 0; 2032 2025 } 2033 static int snd_ali_dev_free(struct snd_device *device)2034 {2035 struct snd_ali *codec = device->device_data;2036 snd_ali_free(codec);2037 return 0;2038 }2039 2026 2040 2027 static int snd_ali_create(struct snd_card *card, 2041 2028 struct pci_dev *pci, 2042 2029 int pcm_streams, 2043 int spdif_support, 2044 struct snd_ali **r_ali) 2045 { 2046 struct snd_ali *codec; 2030 int spdif_support) 2031 { 2032 struct snd_ali *codec = card->private_data; 2047 2033 int i, err; 2048 2034 unsigned short cmdw; 2049 static const struct snd_device_ops ops = {2050 .dev_free = snd_ali_dev_free,2051 };2052 2053 *r_ali = NULL;2054 2035 2055 2036 dev_dbg(card->dev, "creating ...\n"); 2056 2037 2057 2038 /* enable PCI device */ 2058 err = pci _enable_device(pci);2039 err = pcim_enable_device(pci); 2059 2040 if (err < 0) 2060 2041 return err; … … 2063 2044 dev_err(card->dev, 2064 2045 "architecture does not support 31bit PCI busmaster DMA\n"); 2065 pci_disable_device(pci);2066 2046 return -ENXIO; 2067 }2068 2069 codec = kzalloc(sizeof(*codec), GFP_KERNEL);2070 if (!codec) {2071 pci_disable_device(pci);2072 return -ENOMEM;2073 2047 } 2074 2048 … … 2097 2071 pci_write_config_word(pci, PCI_COMMAND, cmdw); 2098 2072 } 2099 pci_set_master(pci); 2100 2101 if (snd_ali_resources(codec)) { 2102 snd_ali_free(codec); 2073 2074 if (snd_ali_resources(codec)) 2103 2075 return -EBUSY; 2104 }2076 card->private_free = snd_ali_free; 2105 2077 2106 2078 codec->synth.chmap = 0; … … 2129 2101 if (!codec->pci_m1533) { 2130 2102 dev_err(card->dev, "cannot find ALi 1533 chip.\n"); 2131 snd_ali_free(codec);2132 2103 return -ENODEV; 2133 2104 } … … 2136 2107 if (!codec->pci_m7101 && codec->revision == ALI_5451_V02) { 2137 2108 dev_err(card->dev, "cannot find ALi 7101 chip.\n"); 2138 snd_ali_free(codec);2139 2109 return -ENODEV; 2140 }2141 2142 dev_dbg(card->dev, "snd_device_new is called.\n");2143 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, codec, &ops);2144 if (err < 0) {2145 snd_ali_free(codec);2146 return err;2147 2110 } 2148 2111 … … 2158 2121 2159 2122 #ifdef CONFIG_PM_SLEEP 2160 codec->image = kmalloc(sizeof(*codec->image), GFP_KERNEL); 2123 codec->image = devm_kmalloc(&pci->dev, sizeof(*codec->image), 2124 GFP_KERNEL); 2161 2125 if (!codec->image) 2162 2126 dev_warn(card->dev, "can't allocate apm buffer\n"); … … 2165 2129 snd_ali_enable_address_interrupt(codec); 2166 2130 codec->hw_initialized = 1; 2167 2168 *r_ali = codec;2169 dev_dbg(card->dev, "created.\n");2170 2131 return 0; 2171 2132 } … … 2180 2141 dev_dbg(&pci->dev, "probe ...\n"); 2181 2142 2182 err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card); 2143 err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, 2144 sizeof(*codec), &card); 2183 2145 if (err < 0) 2184 2146 return err; 2185 2186 err = snd_ali_create(card, pci, pcm_channels, spdif, &codec); 2147 codec = card->private_data; 2148 2149 err = snd_ali_create(card, pci, pcm_channels, spdif); 2187 2150 if (err < 0) 2188 goto error; 2189 card->private_data = codec; 2151 return err; 2190 2152 2191 2153 dev_dbg(&pci->dev, "mixer building ...\n"); 2192 2154 err = snd_ali_mixer(codec); 2193 2155 if (err < 0) 2194 goto error;2156 return err; 2195 2157 2196 2158 dev_dbg(&pci->dev, "pcm building ...\n"); 2197 2159 err = snd_ali_build_pcms(codec); 2198 2160 if (err < 0) 2199 goto error;2161 return err; 2200 2162 2201 2163 snd_ali_proc_init(codec); … … 2210 2172 err = snd_card_register(card); 2211 2173 if (err < 0) 2212 goto error;2174 return err; 2213 2175 2214 2176 pci_set_drvdata(pci, card); 2215 2177 return 0; 2216 2217 error:2218 snd_card_free(card);2219 return err;2220 }2221 2222 static void snd_ali_remove(struct pci_dev *pci)2223 {2224 snd_card_free(pci_get_drvdata(pci));2225 2178 } 2226 2179 … … 2229 2182 .id_table = snd_ali_ids, 2230 2183 .probe = snd_ali_probe, 2231 .remove = snd_ali_remove,2232 2184 .driver = { 2233 2185 .pm = ALI_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/als4000.cr697 r710 750 750 if (joystick_port[dev] == 1) { /* auto-detect */ 751 751 for (io_port = 0x200; io_port <= 0x218; io_port += 8) { 752 r = request_region(io_port, 8, "ALS4000 gameport"); 752 r = devm_request_region(&acard->pci->dev, io_port, 8, 753 "ALS4000 gameport"); 753 754 if (r) 754 755 break; … … 756 757 } else { 757 758 io_port = joystick_port[dev]; 758 r = request_region(io_port, 8, "ALS4000 gameport"); 759 r = devm_request_region(&acard->pci->dev, io_port, 8, 760 "ALS4000 gameport"); 759 761 } 760 762 … … 767 769 if (!gp) { 768 770 dev_err(&acard->pci->dev, "cannot allocate memory for gameport\n"); 769 release_and_free_resource(r);770 771 return -ENOMEM; 771 772 } … … 775 776 gameport_set_dev_parent(gp, &acard->pci->dev); 776 777 gp->io = io_port; 777 gameport_set_port_data(gp, r);778 778 779 779 /* Enable legacy joystick port */ … … 788 788 { 789 789 if (acard->gameport) { 790 struct resource *r = gameport_get_port_data(acard->gameport);791 792 790 gameport_unregister_port(acard->gameport); 793 791 acard->gameport = NULL; … … 795 793 /* disable joystick */ 796 794 snd_als4000_set_addr(acard->iobase, 0, 0, 0, 0); 797 798 release_and_free_resource(r);799 795 } 800 796 } … … 812 808 /* free resources */ 813 809 snd_als4000_free_gameport(acard); 814 pci_release_regions(acard->pci);815 pci_disable_device(acard->pci);816 810 } 817 811 … … 836 830 837 831 /* enable PCI device */ 838 err = pci _enable_device(pci);832 err = pcim_enable_device(pci); 839 833 if (err < 0) 840 834 return err; … … 843 837 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(24))) { 844 838 dev_err(&pci->dev, "architecture does not support 24bit PCI busmaster DMA\n"); 845 pci_disable_device(pci);846 839 return -ENXIO; 847 840 } 848 841 849 842 err = pci_request_regions(pci, "ALS4000"); 850 if (err < 0) { 851 pci_disable_device(pci); 843 if (err < 0) 852 844 return err; 853 }854 845 iobase = pci_resource_start(pci, 0); 855 846 … … 858 849 pci_set_master(pci); 859 850 860 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 861 sizeof(*acard) /* private_data: acard */, 862 &card); 863 if (err < 0) { 864 pci_release_regions(pci); 865 pci_disable_device(pci); 851 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 852 sizeof(*acard) /* private_data: acard */, 853 &card); 854 if (err < 0) 866 855 return err; 867 }868 856 869 857 acard = card->private_data; … … 885 873 &chip); 886 874 if (err < 0) 887 goto out_err;875 return err; 888 876 acard->chip = chip; 889 877 … … 906 894 dev_err(&pci->dev, "no MPU-401 device at 0x%lx?\n", 907 895 iobase + ALS4K_IOB_30_MIDI_DATA); 908 goto out_err;896 return err; 909 897 } 910 898 /* FIXME: ALS4000 has interesting MPU401 configuration features … … 916 904 err = snd_als4000_pcm(chip, 0); 917 905 if (err < 0) 918 goto out_err;906 return err; 919 907 920 908 err = snd_sbmixer_new(chip); 921 909 if (err < 0) 922 goto out_err;910 return err; 923 911 924 912 if (snd_opl3_create(card, … … 932 920 err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); 933 921 if (err < 0) 934 goto out_err;922 return err; 935 923 } 936 924 … … 939 927 err = snd_card_register(card); 940 928 if (err < 0) 941 goto out_err;929 return err; 942 930 943 931 pci_set_drvdata(pci, card); 944 932 dev++; 945 err = 0; 946 goto out; 947 948 out_err: 949 snd_card_free(card); 950 951 out: 952 return err; 953 } 954 955 static void snd_card_als4000_remove(struct pci_dev *pci) 956 { 957 snd_card_free(pci_get_drvdata(pci)); 933 return 0; 958 934 } 959 935 … … 1000 976 .id_table = snd_als4000_ids, 1001 977 .probe = snd_card_als4000_probe, 1002 .remove = snd_card_als4000_remove,1003 978 .driver = { 1004 979 .pm = SND_ALS4000_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/atiixp.cr697 r710 1541 1541 */ 1542 1542 1543 static int snd_atiixp_free(struct atiixp *chip) 1544 { 1545 if (chip->irq < 0) 1546 goto __hw_end; 1547 snd_atiixp_chip_stop(chip); 1548 1549 __hw_end: 1550 if (chip->irq >= 0) 1551 free_irq(chip->irq, chip); 1552 iounmap(chip->remap_addr); 1553 pci_release_regions(chip->pci); 1554 pci_disable_device(chip->pci); 1555 kfree(chip); 1556 return 0; 1557 } 1558 1559 static int snd_atiixp_dev_free(struct snd_device *device) 1560 { 1561 struct atiixp *chip = device->device_data; 1562 return snd_atiixp_free(chip); 1543 static void snd_atiixp_free(struct snd_card *card) 1544 { 1545 snd_atiixp_chip_stop(card->private_data); 1563 1546 } 1564 1547 … … 1566 1549 * constructor for chip instance 1567 1550 */ 1568 static int snd_atiixp_create(struct snd_card *card, 1569 struct pci_dev *pci, 1570 struct atiixp **r_chip) 1571 { 1572 static const struct snd_device_ops ops = { 1573 .dev_free = snd_atiixp_dev_free, 1574 }; 1575 struct atiixp *chip; 1551 static int snd_atiixp_init(struct snd_card *card, struct pci_dev *pci) 1552 { 1553 struct atiixp *chip = card->private_data; 1576 1554 int err; 1577 1555 1578 err = pci _enable_device(pci);1556 err = pcim_enable_device(pci); 1579 1557 if (err < 0) 1580 1558 return err; 1581 1582 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1583 if (chip == NULL) {1584 pci_disable_device(pci);1585 return -ENOMEM;1586 }1587 1559 1588 1560 spin_lock_init(&chip->reg_lock); … … 1591 1563 chip->pci = pci; 1592 1564 chip->irq = -1; 1565 #ifndef TARGET_OS2 1566 err = pcim_iomap_regions(pci, 1 << 0, "ATI IXP AC97"); 1567 if (err < 0) 1568 return err; 1569 #else 1593 1570 err = pci_request_regions(pci, "ATI IXP AC97"); 1594 1571 if (err < 0) { … … 1597 1574 return err; 1598 1575 } 1576 #endif 1599 1577 chip->addr = pci_resource_start(pci, 0); 1578 #ifndef TARGET_OS2 1579 chip->remap_addr = pcim_iomap_table(pci)[0]; 1580 if (devm_request_irq(&pci->dev, pci->irq, snd_atiixp_interrupt, 1581 IRQF_SHARED, KBUILD_MODNAME, chip)) { 1582 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 1583 return -EBUSY; 1584 } 1585 #else 1600 1586 chip->remap_addr = pci_ioremap_bar(pci, 0); 1601 if (chip->remap_addr == NULL) {1602 dev_err(card->dev, "AC'97 space ioremap problem\n");1603 snd_atiixp_free(chip);1604 return -EIO;1605 }1606 1607 1587 if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_SHARED, 1608 1588 KBUILD_MODNAME, chip)) { … … 1611 1591 return -EBUSY; 1612 1592 } 1593 #endif 1613 1594 chip->irq = pci->irq; 1614 1595 card->sync_irq = chip->irq; 1596 card->private_free = snd_atiixp_free; 1615 1597 pci_set_master(pci); 1616 1598 1617 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1618 if (err < 0) {1619 snd_atiixp_free(chip);1620 return err;1621 }1622 1623 *r_chip = chip;1624 1599 return 0; 1625 1600 } … … 1633 1608 int err; 1634 1609 1635 err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card); 1610 err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, 1611 sizeof(*chip), &card); 1636 1612 if (err < 0) 1637 1613 return err; 1614 chip = card->private_data; 1638 1615 1639 1616 strcpy(card->driver, spdif_aclink ? "ATIIXP" : "ATIIXP-SPDMA"); 1640 1617 strcpy(card->shortname, "ATI IXP"); 1641 err = snd_atiixp_ create(card, pci, &chip);1618 err = snd_atiixp_init(card, pci); 1642 1619 if (err < 0) 1643 goto __error; 1644 card->private_data = chip; 1620 return err; 1645 1621 1646 1622 err = snd_atiixp_aclink_reset(chip); 1647 1623 if (err < 0) 1648 goto __error;1624 return err; 1649 1625 1650 1626 chip->spdif_over_aclink = spdif_aclink; … … 1652 1628 err = snd_atiixp_mixer_new(chip, ac97_clock, ac97_quirk); 1653 1629 if (err < 0) 1654 goto __error;1630 return err; 1655 1631 1656 1632 err = snd_atiixp_pcm_new(chip); 1657 1633 if (err < 0) 1658 goto __error;1634 return err; 1659 1635 1660 1636 snd_atiixp_proc_init(chip); … … 1674 1650 err = snd_card_register(card); 1675 1651 if (err < 0) 1676 goto __error;1652 return err; 1677 1653 1678 1654 pci_set_drvdata(pci, card); 1679 1655 return 0; 1680 1681 __error:1682 snd_card_free(card);1683 return err;1684 }1685 1686 static void snd_atiixp_remove(struct pci_dev *pci)1687 {1688 snd_card_free(pci_get_drvdata(pci));1689 1656 } 1690 1657 … … 1693 1660 .id_table = snd_atiixp_ids, 1694 1661 .probe = snd_atiixp_probe, 1695 .remove = snd_atiixp_remove,1696 1662 .driver = { 1697 1663 .pm = SND_ATIIXP_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/au88x0/au88x0.cr697 r710 124 124 // component-destructor 125 125 // (see "Management of Cards and Components") 126 static int snd_vortex_dev_free(struct snd_device *device)127 { 128 vortex_t *vortex = device->device_data;126 static void snd_vortex_free(struct snd_card *card) 127 { 128 vortex_t *vortex = card->private_data; 129 129 130 130 vortex_gameport_unregister(vortex); 131 131 vortex_core_shutdown(vortex); 132 // Take down PCI interface.133 free_irq(vortex->irq, vortex);134 iounmap(vortex->mmio);135 pci_release_regions(vortex->pci_dev);136 pci_disable_device(vortex->pci_dev);137 kfree(vortex);138 139 return 0;140 132 } 141 133 … … 143 135 // (see "Management of Cards and Components") 144 136 static int 145 snd_vortex_create(struct snd_card *card, struct pci_dev *pci , vortex_t ** rchip)146 { 147 vortex_t *chip ;137 snd_vortex_create(struct snd_card *card, struct pci_dev *pci) 138 { 139 vortex_t *chip = card->private_data; 148 140 int err; 149 static const struct snd_device_ops ops = {150 .dev_free = snd_vortex_dev_free,151 };152 153 *rchip = NULL;154 141 155 142 // check PCI availability (DMA). 156 err = pci _enable_device(pci);143 err = pcim_enable_device(pci); 157 144 if (err < 0) 158 145 return err; 159 146 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) { 160 147 dev_err(card->dev, "error to set DMA mask\n"); 161 pci_disable_device(pci);162 148 return -ENXIO; 163 }164 165 chip = kzalloc(sizeof(*chip), GFP_KERNEL);166 if (chip == NULL) {167 pci_disable_device(pci);168 return -ENOMEM;169 149 } 170 150 … … 173 153 // initialize the stuff 174 154 chip->pci_dev = pci; 175 chip->io = pci_resource_start(pci, 0);176 155 chip->vendor = pci->vendor; 177 156 chip->device = pci->device; … … 182 161 // Get MMIO area 183 162 // 184 err = pci _request_regions(pci, CARD_NAME_SHORT);163 err = pcim_iomap_regions(pci, 1 << 0, CARD_NAME_SHORT); 185 164 if (err) 186 goto regions_out; 187 188 chip->mmio = pci_ioremap_bar(pci, 0); 189 if (!chip->mmio) { 190 dev_err(card->dev, "MMIO area remap failed.\n"); 191 err = -ENOMEM; 192 goto ioremap_out; 193 } 165 return err; 166 167 chip->io = pci_resource_start(pci, 0); 168 chip->mmio = pcim_iomap_table(pci)[0]; 194 169 195 170 /* Init audio core. … … 199 174 if (err) { 200 175 dev_err(card->dev, "hw core init failed\n"); 201 goto core_out;202 } 203 204 err = request_irq(pci->irq, vortex_interrupt,205 IRQF_SHARED, KBUILD_MODNAME, chip);176 return err; 177 } 178 179 err = devm_request_irq(&pci->dev, pci->irq, vortex_interrupt, 180 IRQF_SHARED, KBUILD_MODNAME, chip); 206 181 if (err) { 207 182 dev_err(card->dev, "cannot grab irq\n"); 208 goto irq_out;183 return err; 209 184 } 210 185 chip->irq = pci->irq; 211 186 card->sync_irq = chip->irq; 187 card->private_free = snd_vortex_free; 212 188 213 189 pci_set_master(pci); 214 190 // End of PCI setup. 215 216 // Register alsa root device.217 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);218 if (err < 0)219 goto alloc_out;220 221 *rchip = chip;222 223 191 return 0; 224 225 alloc_out:226 free_irq(chip->irq, chip);227 irq_out:228 vortex_core_shutdown(chip);229 core_out:230 iounmap(chip->mmio);231 ioremap_out:232 pci_release_regions(chip->pci_dev);233 regions_out:234 pci_disable_device(chip->pci_dev);235 //FIXME: this not the right place to unregister the gameport236 vortex_gameport_unregister(chip);237 kfree(chip);238 return err;239 192 } 240 193 … … 256 209 } 257 210 // (2) 258 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 259 0, &card); 260 if (err < 0) 261 return err; 211 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 212 sizeof(*chip), &card); 213 if (err < 0) 214 return err; 215 chip = card->private_data; 262 216 263 217 // (3) 264 err = snd_vortex_create(card, pci, &chip); 265 if (err < 0) { 266 snd_card_free(card); 267 return err; 268 } 218 err = snd_vortex_create(card, pci); 219 if (err < 0) 220 return err; 269 221 snd_vortex_workaround(pci, pcifix[dev]); 270 222 … … 277 229 // (4) Alloc components. 278 230 err = snd_vortex_mixer(chip); 279 if (err < 0) { 280 snd_card_free(card); 281 return err; 282 } 231 if (err < 0) 232 return err; 283 233 // ADB pcm. 284 234 err = snd_vortex_new_pcm(chip, VORTEX_PCM_ADB, NR_PCM); 285 if (err < 0) { 286 snd_card_free(card); 287 return err; 288 } 235 if (err < 0) 236 return err; 289 237 #ifndef CHIP_AU8820 290 238 // ADB SPDIF 291 239 err = snd_vortex_new_pcm(chip, VORTEX_PCM_SPDIF, 1); 292 if (err < 0) { 293 snd_card_free(card); 294 return err; 295 } 240 if (err < 0) 241 return err; 296 242 // A3D 297 243 err = snd_vortex_new_pcm(chip, VORTEX_PCM_A3D, NR_A3D); 298 if (err < 0) { 299 snd_card_free(card); 300 return err; 301 } 244 if (err < 0) 245 return err; 302 246 #endif 303 247 /* 304 248 // ADB I2S 305 249 if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_I2S, 1)) < 0) { 306 snd_card_free(card);307 250 return err; 308 251 } … … 311 254 // WT pcm. 312 255 err = snd_vortex_new_pcm(chip, VORTEX_PCM_WT, NR_WT); 313 if (err < 0) { 314 snd_card_free(card); 315 return err; 316 } 256 if (err < 0) 257 return err; 317 258 #endif 318 259 err = snd_vortex_midi(chip); 319 if (err < 0) { 320 snd_card_free(card); 321 return err; 322 } 260 if (err < 0) 261 return err; 323 262 324 263 vortex_gameport_register(chip); … … 343 282 // (5) 344 283 err = pci_read_config_word(pci, PCI_DEVICE_ID, &chip->device); 345 if (err < 0) { 346 snd_card_free(card); 347 return err; 348 } 284 if (err < 0) 285 return err; 349 286 err = pci_read_config_word(pci, PCI_VENDOR_ID, &chip->vendor); 350 if (err < 0) { 351 snd_card_free(card); 352 return err; 353 } 287 if (err < 0) 288 return err; 354 289 chip->rev = pci->revision; 355 290 #ifdef CHIP_AU8830 … … 360 295 dev_alert(card->dev, 361 296 "Please email the results of 'lspci -vv' to openvortex-dev@nongnu.org.\n"); 362 snd_card_free(card); 363 err = -ENODEV; 364 return err; 297 return -ENODEV; 365 298 } 366 299 #endif … … 368 301 // (6) 369 302 err = snd_card_register(card); 370 if (err < 0) { 371 snd_card_free(card); 372 return err; 373 } 303 if (err < 0) 304 return err; 374 305 // (7) 375 306 pci_set_drvdata(pci, card); … … 380 311 } 381 312 382 // destructor -- see "Destructor" sub-section383 static void snd_vortex_remove(struct pci_dev *pci)384 {385 snd_card_free(pci_get_drvdata(pci));386 }387 388 313 // pci_driver definition 389 314 static struct pci_driver vortex_driver = { … … 391 316 .id_table = snd_vortex_ids, 392 317 .probe = snd_vortex_probe, 393 .remove = snd_vortex_remove,394 318 }; 395 319 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/bt87x.cr697 r710 666 666 }; 667 667 668 static int snd_bt87x_free(struct snd_bt87x *chip) 669 { 670 if (chip->mmio) 671 snd_bt87x_stop(chip); 672 if (chip->irq >= 0) 673 free_irq(chip->irq, chip); 674 iounmap(chip->mmio); 675 pci_release_regions(chip->pci); 676 pci_disable_device(chip->pci); 677 kfree(chip); 678 return 0; 679 } 680 681 static int snd_bt87x_dev_free(struct snd_device *device) 682 { 683 struct snd_bt87x *chip = device->device_data; 684 return snd_bt87x_free(chip); 668 static void snd_bt87x_free(struct snd_card *card) 669 { 670 struct snd_bt87x *chip = card->private_data; 671 672 snd_bt87x_stop(chip); 685 673 } 686 674 … … 704 692 705 693 static int snd_bt87x_create(struct snd_card *card, 706 struct pci_dev *pci, 707 struct snd_bt87x **rchip) 708 { 709 struct snd_bt87x *chip; 694 struct pci_dev *pci) 695 { 696 struct snd_bt87x *chip = card->private_data; 710 697 int err; 711 static const struct snd_device_ops ops = { 712 .dev_free = snd_bt87x_dev_free 713 }; 714 715 *rchip = NULL; 716 717 err = pci_enable_device(pci); 698 699 err = pcim_enable_device(pci); 718 700 if (err < 0) 719 701 return err; 720 702 721 chip = kzalloc(sizeof(*chip), GFP_KERNEL);722 if (!chip) {723 pci_disable_device(pci);724 return -ENOMEM;725 }726 703 chip->card = card; 727 704 chip->pci = pci; … … 729 706 spin_lock_init(&chip->reg_lock); 730 707 708 #ifndef TARGET_OS2 709 err = pcim_iomap_regions(pci, 1 << 0, "Bt87x audio"); 710 if (err < 0) 711 return err; 712 chip->mmio = pcim_iomap_table(pci)[0]; 713 #else 731 714 err = pci_request_regions(pci, "Bt87x audio"); 732 715 if (err < 0) { … … 736 719 } 737 720 chip->mmio = pci_ioremap_bar(pci, 0); 738 if (!chip->mmio) { 739 dev_err(card->dev, "cannot remap io memory\n"); 740 err = -ENOMEM; 741 goto fail; 742 } 743 721 #endif 744 722 chip->reg_control = CTL_A_PWRDN | CTL_DA_ES2 | 745 723 CTL_PKTP_16 | (15 << CTL_DA_SDR_SHIFT); … … 749 727 snd_bt87x_writel(chip, REG_INT_STAT, MY_INTERRUPTS); 750 728 751 err = request_irq(pci->irq, snd_bt87x_interrupt, IRQF_SHARED,752 KBUILD_MODNAME, chip);729 err = devm_request_irq(&pci->dev, pci->irq, snd_bt87x_interrupt, 730 IRQF_SHARED, KBUILD_MODNAME, chip); 753 731 if (err < 0) { 754 732 dev_err(card->dev, "cannot grab irq %d\n", pci->irq); 755 goto fail;733 return err; 756 734 } 757 735 chip->irq = pci->irq; 758 736 card->sync_irq = chip->irq; 737 card->private_free = snd_bt87x_free; 759 738 pci_set_master(pci); 760 739 761 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 762 if (err < 0) 763 goto fail; 764 765 *rchip = chip; 766 return 0; 767 768 fail: 769 snd_bt87x_free(chip); 770 return err; 740 return 0; 771 741 } 772 742 … … 878 848 } 879 849 880 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,881 0, &card);850 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 851 sizeof(*chip), &card); 882 852 if (err < 0) 883 853 return err; 884 885 err = snd_bt87x_create(card, pci, &chip); 854 chip = card->private_data; 855 856 err = snd_bt87x_create(card, pci); 886 857 if (err < 0) 887 goto _error;858 return err; 888 859 889 860 memcpy(&chip->board, &snd_bt87x_boards[boardid], sizeof(chip->board)); … … 897 868 err = snd_bt87x_pcm(chip, DEVICE_DIGITAL, "Bt87x Digital"); 898 869 if (err < 0) 899 goto _error;870 return err; 900 871 } 901 872 if (!chip->board.no_analog) { 902 873 err = snd_bt87x_pcm(chip, DEVICE_ANALOG, "Bt87x Analog"); 903 874 if (err < 0) 904 goto _error;875 return err; 905 876 err = snd_ctl_add(card, snd_ctl_new1( 906 877 &snd_bt87x_capture_volume, chip)); 907 878 if (err < 0) 908 goto _error;879 return err; 909 880 err = snd_ctl_add(card, snd_ctl_new1( 910 881 &snd_bt87x_capture_boost, chip)); 911 882 if (err < 0) 912 goto _error;883 return err; 913 884 err = snd_ctl_add(card, snd_ctl_new1( 914 885 &snd_bt87x_capture_source, chip)); 915 886 if (err < 0) 916 goto _error;887 return err; 917 888 } 918 889 dev_info(card->dev, "bt87x%d: Using board %d, %sanalog, %sdigital " … … 930 901 err = snd_card_register(card); 931 902 if (err < 0) 932 goto _error;903 return err; 933 904 934 905 pci_set_drvdata(pci, card); 935 906 ++dev; 936 907 return 0; 937 938 _error:939 snd_card_free(card);940 return err;941 }942 943 static void snd_bt87x_remove(struct pci_dev *pci)944 {945 snd_card_free(pci_get_drvdata(pci));946 908 } 947 909 … … 958 920 .id_table = snd_bt87x_ids, 959 921 .probe = snd_bt87x_probe, 960 .remove = snd_bt87x_remove,961 922 }; 962 923 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/ca0106/ca0106.hr629 r710 668 668 669 669 unsigned long port; 670 struct resource *res_port;671 670 int irq; 672 671 … … 689 688 int capture_mic_line_in; 690 689 691 struct snd_dma_buffer buffer;690 struct snd_dma_buffer *buffer; 692 691 693 692 struct snd_ca_midi midi; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/ca0106/ca0106_main.cr697 r710 723 723 struct snd_ca0106_pcm *epcm = runtime->private_data; 724 724 int channel = epcm->channel_id; 725 u32 *table_base = (u32 *)(emu->buffer .area+(8*16*channel));725 u32 *table_base = (u32 *)(emu->buffer->area+(8*16*channel)); 726 726 u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size); 727 727 u32 hcfg_mask = HCFG_PLAYBACK_S32_LE; … … 751 751 dev_dbg(emu->card->dev, 752 752 "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n", 753 emu->buffer .addr, emu->buffer.area, emu->buffer.bytes);753 emu->buffer->addr, emu->buffer->area, emu->buffer->bytes); 754 754 #endif /* debug */ 755 755 /* Rate can be set per channel. */ … … 801 801 snd_ca0106_ptr_write(emu, 0x71, 0, reg71); 802 802 803 /* FIXME: Check emu->buffer .size before actually writing to it. */803 /* FIXME: Check emu->buffer->size before actually writing to it. */ 804 804 for(i=0; i < runtime->periods; i++) { 805 805 table_base[i*2] = runtime->dma_addr + (i * period_size_bytes); … … 807 807 } 808 808 809 snd_ca0106_ptr_write(emu, PLAYBACK_LIST_ADDR, channel, emu->buffer .addr+(8*16*channel));809 snd_ca0106_ptr_write(emu, PLAYBACK_LIST_ADDR, channel, emu->buffer->addr+(8*16*channel)); 810 810 snd_ca0106_ptr_write(emu, PLAYBACK_LIST_SIZE, channel, (runtime->periods - 1) << 19); 811 811 snd_ca0106_ptr_write(emu, PLAYBACK_LIST_PTR, channel, 0); … … 858 858 dev_dbg(emu->card->dev, 859 859 "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n", 860 emu->buffer .addr, emu->buffer.area, emu->buffer.bytes);860 emu->buffer->addr, emu->buffer->area, emu->buffer->bytes); 861 861 #endif /* debug */ 862 862 /* reg71 controls ADC rate. */ … … 1188 1188 static void ca0106_stop_chip(struct snd_ca0106 *chip); 1189 1189 1190 static int snd_ca0106_free(struct snd_ca0106 *chip) 1191 { 1192 if (chip->res_port != NULL) { 1193 /* avoid access to already used hardware */ 1194 ca0106_stop_chip(chip); 1195 } 1196 if (chip->irq >= 0) 1197 free_irq(chip->irq, chip); 1198 // release the data 1199 #if 1 1200 if (chip->buffer.area) 1201 snd_dma_free_pages(&chip->buffer); 1202 #endif 1203 1204 // release the i/o port 1205 release_and_free_resource(chip->res_port); 1206 1207 pci_disable_device(chip->pci); 1208 kfree(chip); 1209 return 0; 1210 } 1211 1212 static int snd_ca0106_dev_free(struct snd_device *device) 1213 { 1214 struct snd_ca0106 *chip = device->device_data; 1215 return snd_ca0106_free(chip); 1190 static void snd_ca0106_free(struct snd_card *card) 1191 { 1192 struct snd_ca0106 *chip = card->private_data; 1193 1194 ca0106_stop_chip(chip); 1216 1195 } 1217 1196 … … 1599 1578 1600 1579 static int snd_ca0106_create(int dev, struct snd_card *card, 1601 struct pci_dev *pci, 1602 struct snd_ca0106 **rchip) 1603 { 1604 struct snd_ca0106 *chip; 1580 struct pci_dev *pci) 1581 { 1582 struct snd_ca0106 *chip = card->private_data; 1605 1583 const struct snd_ca0106_details *c; 1606 1584 int err; 1607 static const struct snd_device_ops ops = { 1608 .dev_free = snd_ca0106_dev_free, 1609 }; 1610 1611 *rchip = NULL; 1612 1613 err = pci_enable_device(pci); 1585 1586 err = pcim_enable_device(pci); 1614 1587 if (err < 0) 1615 1588 return err; 1616 1589 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) { 1617 1590 dev_err(card->dev, "error to set 32bit mask DMA\n"); 1618 pci_disable_device(pci);1619 1591 return -ENXIO; 1620 }1621 1622 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1623 if (chip == NULL) {1624 pci_disable_device(pci);1625 return -ENOMEM;1626 1592 } 1627 1593 … … 1632 1598 spin_lock_init(&chip->emu_lock); 1633 1599 1600 err = pci_request_regions(pci, "snd_ca0106"); 1601 if (err < 0) 1602 return err; 1634 1603 chip->port = pci_resource_start(pci, 0); 1635 chip->res_port = request_region(chip->port, 0x20, "snd_ca0106"); 1636 if (!chip->res_port) { 1637 snd_ca0106_free(chip); 1638 dev_err(card->dev, "cannot allocate the port\n"); 1639 return -EBUSY; 1640 } 1641 1642 if (request_irq(pci->irq, snd_ca0106_interrupt, 1643 IRQF_SHARED, KBUILD_MODNAME, chip)) { 1644 snd_ca0106_free(chip); 1604 1605 if (devm_request_irq(&pci->dev, pci->irq, snd_ca0106_interrupt, 1606 IRQF_SHARED, KBUILD_MODNAME, chip)) { 1645 1607 dev_err(card->dev, "cannot grab irq\n"); 1646 1608 return -EBUSY; … … 1650 1612 1651 1613 /* This stores the periods table. */ 1614 #ifndef TARGET_OS2 1615 chip->buffer = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 1024); 1616 if (!chip->buffer) 1617 return -ENOMEM; 1618 #else 1652 1619 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 1653 1620 1024, &chip->buffer) < 0) { … … 1655 1622 return -ENOMEM; 1656 1623 } 1657 1624 #endif 1658 1625 pci_set_master(pci); 1659 1626 /* read serial */ … … 1683 1650 1684 1651 ca0106_init_chip(chip, 0); 1685 1686 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1687 if (err < 0) {1688 snd_ca0106_free(chip);1689 return err;1690 }1691 *rchip = chip;1692 1652 return 0; 1693 1653 } … … 1792 1752 } 1793 1753 1794 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,1795 0, &card);1754 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1755 sizeof(*chip), &card); 1796 1756 if (err < 0) 1797 1757 return err; 1798 1799 err = snd_ca0106_create(dev, card, pci, &chip); 1758 chip = card->private_data; 1759 1760 err = snd_ca0106_create(dev, card, pci); 1800 1761 if (err < 0) 1801 goto error;1802 card->private_ data = chip;1762 return err; 1763 card->private_free = snd_ca0106_free; 1803 1764 1804 1765 for (i = 0; i < 4; i++) { 1805 1766 err = snd_ca0106_pcm(chip, i); 1806 1767 if (err < 0) 1807 goto error;1768 return err; 1808 1769 } 1809 1770 … … 1812 1773 err = snd_ca0106_ac97(chip); 1813 1774 if (err < 0) 1814 goto error;1775 return err; 1815 1776 } 1816 1777 err = snd_ca0106_mixer(chip); 1817 1778 if (err < 0) 1818 goto error;1779 return err; 1819 1780 1820 1781 dev_dbg(card->dev, "probe for MIDI channel A ..."); 1821 1782 err = snd_ca0106_midi(chip, CA0106_MIDI_CHAN_A); 1822 1783 if (err < 0) 1823 goto error;1784 return err; 1824 1785 dev_dbg(card->dev, " done.\n"); 1825 1786 … … 1830 1791 err = snd_card_register(card); 1831 1792 if (err < 0) 1832 goto error;1793 return err; 1833 1794 1834 1795 pci_set_drvdata(pci, card); 1835 1796 dev++; 1836 1797 return 0; 1837 1838 error:1839 snd_card_free(card);1840 return err;1841 }1842 1843 static void snd_ca0106_remove(struct pci_dev *pci)1844 {1845 snd_card_free(pci_get_drvdata(pci));1846 1798 } 1847 1799 … … 1899 1851 .id_table = snd_ca0106_ids, 1900 1852 .probe = snd_ca0106_probe, 1901 .remove = snd_ca0106_remove,1902 1853 .driver = { 1903 1854 .pm = SND_CA0106_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cmipci.cr697 r710 2873 2873 for (i = 0; ports[i]; i++) { 2874 2874 io_port = ports[i]; 2875 r = request_region(io_port, 1, "CMIPCI gameport"); 2875 r = devm_request_region(&cm->pci->dev, io_port, 1, 2876 "CMIPCI gameport"); 2876 2877 if (r) 2877 2878 break; … … 2879 2880 } else { 2880 2881 io_port = joystick_port[dev]; 2881 r = request_region(io_port, 1, "CMIPCI gameport"); 2882 r = devm_request_region(&cm->pci->dev, io_port, 1, 2883 "CMIPCI gameport"); 2882 2884 } 2883 2885 … … 2890 2892 if (!gp) { 2891 2893 dev_err(cm->card->dev, "cannot allocate memory for gameport\n"); 2892 release_and_free_resource(r);2893 2894 return -ENOMEM; 2894 2895 } … … 2897 2898 gameport_set_dev_parent(gp, &cm->pci->dev); 2898 2899 gp->io = io_port; 2899 gameport_set_port_data(gp, r);2900 2900 2901 2901 snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN); … … 2909 2909 { 2910 2910 if (cm->gameport) { 2911 struct resource *r = gameport_get_port_data(cm->gameport);2912 2913 2911 gameport_unregister_port(cm->gameport); 2914 2912 cm->gameport = NULL; 2915 2913 2916 2914 snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN); 2917 release_and_free_resource(r);2918 2915 } 2919 2916 } … … 2923 2920 #endif 2924 2921 2925 static int snd_cmipci_free(struct cmipci *cm) 2926 { 2927 if (cm->irq >= 0) { 2928 snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN); 2929 snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_ENSPDOUT); 2930 snd_cmipci_write(cm, CM_REG_INT_HLDCLR, 0); /* disable ints */ 2931 snd_cmipci_ch_reset(cm, CM_CH_PLAY); 2932 snd_cmipci_ch_reset(cm, CM_CH_CAPT); 2933 snd_cmipci_write(cm, CM_REG_FUNCTRL0, 0); /* disable channels */ 2934 snd_cmipci_write(cm, CM_REG_FUNCTRL1, 0); 2935 2936 /* reset mixer */ 2937 snd_cmipci_mixer_write(cm, 0, 0); 2938 2939 free_irq(cm->irq, cm); 2940 } 2922 static void snd_cmipci_free(struct snd_card *card) 2923 { 2924 struct cmipci *cm = card->private_data; 2925 2926 snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN); 2927 snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_ENSPDOUT); 2928 snd_cmipci_write(cm, CM_REG_INT_HLDCLR, 0); /* disable ints */ 2929 snd_cmipci_ch_reset(cm, CM_CH_PLAY); 2930 snd_cmipci_ch_reset(cm, CM_CH_CAPT); 2931 snd_cmipci_write(cm, CM_REG_FUNCTRL0, 0); /* disable channels */ 2932 snd_cmipci_write(cm, CM_REG_FUNCTRL1, 0); 2933 2934 /* reset mixer */ 2935 snd_cmipci_mixer_write(cm, 0, 0); 2941 2936 2942 2937 snd_cmipci_free_gameport(cm); 2943 pci_release_regions(cm->pci);2944 pci_disable_device(cm->pci);2945 kfree(cm);2946 return 0;2947 }2948 2949 static int snd_cmipci_dev_free(struct snd_device *device)2950 {2951 struct cmipci *cm = device->device_data;2952 return snd_cmipci_free(cm);2953 2938 } 2954 2939 … … 3009 2994 3010 2995 static int snd_cmipci_create(struct snd_card *card, struct pci_dev *pci, 3011 int dev , struct cmipci **rcmipci)3012 { 3013 struct cmipci *cm ;2996 int dev) 2997 { 2998 struct cmipci *cm = card->private_data; 3014 2999 int err; 3015 static const struct snd_device_ops ops = {3016 .dev_free = snd_cmipci_dev_free,3017 };3018 3000 unsigned int val; 3019 3001 long iomidi = 0; … … 3026 3008 }; 3027 3009 3028 *rcmipci = NULL; 3029 3030 err = pci_enable_device(pci); 3010 err = pcim_enable_device(pci); 3031 3011 if (err < 0) 3032 3012 return err; 3033 3034 cm = kzalloc(sizeof(*cm), GFP_KERNEL);3035 if (cm == NULL) {3036 pci_disable_device(pci);3037 return -ENOMEM;3038 }3039 3013 3040 3014 spin_lock_init(&cm->reg_lock); … … 3049 3023 3050 3024 err = pci_request_regions(pci, card->driver); 3051 if (err < 0) { 3052 kfree(cm); 3053 pci_disable_device(pci); 3025 if (err < 0) 3054 3026 return err; 3055 }3056 3027 cm->iobase = pci_resource_start(pci, 0); 3057 3028 3029 #ifndef TARGET_OS2 3030 if (devm_request_irq(&pci->dev, pci->irq, snd_cmipci_interrupt, 3031 IRQF_SHARED, KBUILD_MODNAME, cm)) { 3032 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 3033 return -EBUSY; 3034 } 3035 #else 3058 3036 if (request_irq(pci->irq, snd_cmipci_interrupt, 3059 3037 IRQF_SHARED, KBUILD_MODNAME, cm)) { … … 3062 3040 return -EBUSY; 3063 3041 } 3042 #endif 3064 3043 cm->irq = pci->irq; 3065 3044 card->sync_irq = cm->irq; 3045 card->private_free = snd_cmipci_free; 3066 3046 3067 3047 pci_set_master(cm->pci); … … 3163 3143 card->shortname, modelstr, cm->iobase, cm->irq); 3164 3144 3165 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, cm, &ops);3166 if (err < 0) {3167 snd_cmipci_free(cm);3168 return err;3169 }3170 3171 3145 if (cm->chip_version >= 39) { 3172 3146 val = snd_cmipci_read_b(cm, CM_REG_MPU_PCI + 1); … … 3261 3235 snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN); 3262 3236 3263 *rcmipci = cm;3264 3237 return 0; 3265 3238 } … … 3285 3258 } 3286 3259 3287 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,3288 0, &card);3260 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 3261 sizeof(*cm), &card); 3289 3262 if (err < 0) 3290 3263 return err; 3264 cm = card->private_data; 3291 3265 3292 3266 switch (pci->device) { … … 3304 3278 } 3305 3279 3306 err = snd_cmipci_create(card, pci, dev , &cm);3280 err = snd_cmipci_create(card, pci, dev); 3307 3281 if (err < 0) 3308 goto free_card; 3309 3310 card->private_data = cm; 3282 return err; 3311 3283 3312 3284 err = snd_card_register(card); 3313 3285 if (err < 0) 3314 goto free_card;3286 return err; 3315 3287 3316 3288 pci_set_drvdata(pci, card); 3317 3289 dev++; 3318 3290 return 0; 3319 3320 free_card: 3321 snd_card_free(card); 3322 return err; 3323 } 3324 3325 static void snd_cmipci_remove(struct pci_dev *pci) 3326 { 3327 snd_card_free(pci_get_drvdata(pci)); 3328 } 3329 3291 } 3330 3292 3331 3293 #ifdef CONFIG_PM_SLEEP … … 3403 3365 .id_table = snd_cmipci_ids, 3404 3366 .probe = snd_cmipci_probe, 3405 .remove = snd_cmipci_remove,3406 3367 .driver = { 3407 3368 .pm = SND_CMIPCI_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs4281.cr697 r710 1272 1272 #endif /* IS_REACHABLE(CONFIG_GAMEPORT) */ 1273 1273 1274 static int snd_cs4281_free(struct cs4281 *chip) 1275 { 1274 static void snd_cs4281_free(struct snd_card *card) 1275 { 1276 struct cs4281 *chip = card->private_data; 1277 1276 1278 snd_cs4281_free_gameport(chip); 1277 1279 … … 1282 1284 /* Sound System Power Management - Turn Everything OFF */ 1283 1285 snd_cs4281_pokeBA0(chip, BA0_SSPM, 0); 1284 /* PCI interface - D3 state */1285 pci_set_power_state(chip->pci, PCI_D3hot);1286 1287 if (chip->irq >= 0)1288 free_irq(chip->irq, chip);1289 iounmap(chip->ba0);1290 iounmap(chip->ba1);1291 pci_release_regions(chip->pci);1292 pci_disable_device(chip->pci);1293 1294 kfree(chip);1295 return 0;1296 }1297 1298 static int snd_cs4281_dev_free(struct snd_device *device)1299 {1300 struct cs4281 *chip = device->device_data;1301 return snd_cs4281_free(chip);1302 1286 } 1303 1287 … … 1306 1290 static int snd_cs4281_create(struct snd_card *card, 1307 1291 struct pci_dev *pci, 1308 struct cs4281 **rchip,1309 1292 int dual_codec) 1310 1293 { 1311 struct cs4281 *chip; 1312 unsigned int tmp; 1294 struct cs4281 *chip = card->private_data; 1313 1295 int err; 1314 static const struct snd_device_ops ops = { 1315 .dev_free = snd_cs4281_dev_free, 1316 }; 1317 1318 *rchip = NULL; 1319 err = pci_enable_device(pci); 1296 1297 err = pcim_enable_device(pci); 1320 1298 if (err < 0) 1321 1299 return err; 1322 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1323 if (chip == NULL) {1324 pci_disable_device(pci);1325 return -ENOMEM;1326 }1327 1300 spin_lock_init(&chip->reg_lock); 1328 1301 chip->card = card; … … 1336 1309 chip->dual_codec = dual_codec; 1337 1310 1311 #ifndef TARGET_OS2 1312 err = pcim_iomap_regions(pci, 0x03, "CS4281"); /* 2 BARs */ 1313 if (err < 0) 1314 return err; 1315 #else 1338 1316 err = pci_request_regions(pci, "CS4281"); 1339 1317 if (err < 0) { … … 1342 1320 return err; 1343 1321 } 1322 #endif 1344 1323 chip->ba0_addr = pci_resource_start(pci, 0); 1345 1324 chip->ba1_addr = pci_resource_start(pci, 1); 1346 1325 1326 #ifndef TARGET_OS2 1327 chip->ba0 = pcim_iomap_table(pci)[0]; 1328 chip->ba1 = pcim_iomap_table(pci)[1]; 1329 if (devm_request_irq(&pci->dev, pci->irq, snd_cs4281_interrupt, 1330 IRQF_SHARED, KBUILD_MODNAME, chip)) { 1331 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 1332 return -ENOMEM; 1333 } 1334 #else 1347 1335 chip->ba0 = pci_ioremap_bar(pci, 0); 1348 1336 chip->ba1 = pci_ioremap_bar(pci, 1); 1349 if (!chip->ba0 || !chip->ba1) {1350 snd_cs4281_free(chip);1351 return -ENOMEM;1352 }1353 1354 1337 if (request_irq(pci->irq, snd_cs4281_interrupt, IRQF_SHARED, 1355 1338 KBUILD_MODNAME, chip)) { … … 1358 1341 return -ENOMEM; 1359 1342 } 1343 #endif 1360 1344 chip->irq = pci->irq; 1361 1345 card->sync_irq = chip->irq; 1362 1363 tmp = snd_cs4281_chip_init(chip); 1364 if (tmp) { 1365 snd_cs4281_free(chip); 1366 return tmp; 1367 } 1368 1369 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 1370 if (err < 0) { 1371 snd_cs4281_free(chip); 1346 card->private_free = snd_cs4281_free; 1347 1348 err = snd_cs4281_chip_init(chip); 1349 if (err) 1372 1350 return err; 1373 }1374 1351 1375 1352 snd_cs4281_proc_init(chip); 1376 1377 *rchip = chip;1378 1353 return 0; 1379 1354 } … … 1891 1866 } 1892 1867 1893 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,1894 0, &card);1868 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1869 sizeof(*chip), &card); 1895 1870 if (err < 0) 1896 1871 return err; 1897 1898 err = snd_cs4281_create(card, pci, &chip, dual_codec[dev]); 1899 if (err < 0) {1900 snd_card_free(card);1872 chip = card->private_data; 1873 1874 err = snd_cs4281_create(card, pci, dual_codec[dev]); 1875 if (err < 0) 1901 1876 return err; 1902 }1903 card->private_data = chip;1904 1877 1905 1878 err = snd_cs4281_mixer(chip); 1906 if (err < 0) { 1907 snd_card_free(card); 1879 if (err < 0) 1908 1880 return err; 1909 }1910 1881 err = snd_cs4281_pcm(chip, 0); 1911 if (err < 0) { 1912 snd_card_free(card); 1882 if (err < 0) 1913 1883 return err; 1914 }1915 1884 err = snd_cs4281_midi(chip, 0); 1916 if (err < 0) { 1917 snd_card_free(card); 1885 if (err < 0) 1918 1886 return err; 1919 }1920 1887 err = snd_opl3_new(card, OPL3_HW_OPL3_CS4281, &opl3); 1921 if (err < 0) { 1922 snd_card_free(card); 1888 if (err < 0) 1923 1889 return err; 1924 }1925 1890 opl3->private_data = chip; 1926 1891 opl3->command = snd_cs4281_opl3_command; 1927 1892 snd_opl3_init(opl3); 1928 1893 err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); 1929 if (err < 0) { 1930 snd_card_free(card); 1894 if (err < 0) 1931 1895 return err; 1932 }1933 1896 snd_cs4281_create_gameport(chip); 1934 1897 strcpy(card->driver, "CS4281"); … … 1940 1903 1941 1904 err = snd_card_register(card); 1942 if (err < 0) { 1943 snd_card_free(card); 1905 if (err < 0) 1944 1906 return err; 1945 }1946 1907 1947 1908 pci_set_drvdata(pci, card); 1948 1909 dev++; 1949 1910 return 0; 1950 }1951 1952 static void snd_cs4281_remove(struct pci_dev *pci)1953 {1954 snd_card_free(pci_get_drvdata(pci));1955 1911 } 1956 1912 … … 2058 2014 .id_table = snd_cs4281_ids, 2059 2015 .probe = snd_cs4281_probe, 2060 .remove = snd_cs4281_remove,2061 2016 .driver = { 2062 2017 .pm = CS4281_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs46xx/cs46xx.cr697 r710 74 74 } 75 75 76 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,77 0, &card);76 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 77 sizeof(*chip), &card); 78 78 if (err < 0) 79 79 return err; 80 chip = card->private_data; 80 81 err = snd_cs46xx_create(card, pci, 81 external_amp[dev], thinkpad[dev], 82 &chip); 83 if (err < 0) { 84 snd_card_free(card); 82 external_amp[dev], thinkpad[dev]); 83 if (err < 0) 85 84 return err; 86 }87 85 card->private_data = chip; 88 86 chip->accept_valid = mmap_valid[dev]; 89 87 err = snd_cs46xx_pcm(chip, 0); 90 if (err < 0) { 91 snd_card_free(card); 88 if (err < 0) 92 89 return err; 93 }94 90 #ifdef CONFIG_SND_CS46XX_NEW_DSP 95 91 err = snd_cs46xx_pcm_rear(chip, 1); 96 if (err < 0) { 97 snd_card_free(card); 92 if (err < 0) 98 93 return err; 99 }100 94 err = snd_cs46xx_pcm_iec958(chip, 2); 101 if (err < 0) { 102 snd_card_free(card); 95 if (err < 0) 103 96 return err; 104 }105 97 #endif 106 98 err = snd_cs46xx_mixer(chip, 2); 107 if (err < 0) { 108 snd_card_free(card); 99 if (err < 0) 109 100 return err; 110 }111 101 #ifdef CONFIG_SND_CS46XX_NEW_DSP 112 102 if (chip->nr_ac97_codecs ==2) { 113 103 err = snd_cs46xx_pcm_center_lfe(chip, 3); 114 if (err < 0) { 115 snd_card_free(card); 104 if (err < 0) 116 105 return err; 117 }118 106 } 119 107 #endif 120 108 err = snd_cs46xx_midi(chip, 0); 121 if (err < 0) { 122 snd_card_free(card); 109 if (err < 0) 123 110 return err; 124 }125 111 err = snd_cs46xx_start_dsp(chip); 126 if (err < 0) { 127 snd_card_free(card); 112 if (err < 0) 128 113 return err; 129 }130 131 114 132 115 snd_cs46xx_gameport(chip); … … 141 124 142 125 err = snd_card_register(card); 143 if (err < 0) { 144 snd_card_free(card); 126 if (err < 0) 145 127 return err; 146 }147 128 148 129 pci_set_drvdata(pci, card); … … 151 132 } 152 133 153 static void snd_card_cs46xx_remove(struct pci_dev *pci)154 {155 snd_card_free(pci_get_drvdata(pci));156 }157 158 134 static struct pci_driver cs46xx_driver = { 159 135 .name = KBUILD_MODNAME, 160 136 .id_table = snd_cs46xx_ids, 161 137 .probe = snd_card_cs46xx_probe, 162 .remove = snd_card_cs46xx_remove,163 138 #ifdef CONFIG_PM_SLEEP 164 139 .driver = { 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs46xx/cs46xx.hr615 r710 1636 1636 void __iomem *remap_addr; 1637 1637 unsigned long size; 1638 struct resource *resource;1639 1638 }; 1640 1639 … … 1719 1718 int snd_cs46xx_create(struct snd_card *card, 1720 1719 struct pci_dev *pci, 1721 int external_amp, int thinkpad, 1722 struct snd_cs46xx **rcodec); 1720 int external_amp, int thinkpad); 1723 1721 extern const struct dev_pm_ops snd_cs46xx_pm; 1724 1722 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs46xx/cs46xx_lib.cr697 r710 1126 1126 if (runtime->dma_area != cpcm->hw_buf.area) 1127 1127 snd_pcm_lib_free_pages(substream); 1128 runtime->dma_area = cpcm->hw_buf.area; 1129 runtime->dma_addr = cpcm->hw_buf.addr; 1130 runtime->dma_bytes = cpcm->hw_buf.bytes; 1128 snd_pcm_set_runtime_buffer(substream, &cpcm->hw_buf); 1131 1129 1132 1130 … … 1148 1146 1149 1147 } else { 1150 if (runtime->dma_area == cpcm->hw_buf.area) { 1151 runtime->dma_area = NULL; 1152 runtime->dma_addr = 0; 1153 runtime->dma_bytes = 0; 1154 } 1148 if (runtime->dma_area == cpcm->hw_buf.area) 1149 snd_pcm_set_runtime_buffer(substream, NULL); 1155 1150 err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); 1156 1151 if (err < 0) { … … 1201 1196 snd_pcm_lib_free_pages(substream); 1202 1197 1203 runtime->dma_area = NULL; 1204 runtime->dma_addr = 0; 1205 runtime->dma_bytes = 0; 1198 snd_pcm_set_runtime_buffer(substream, NULL); 1206 1199 1207 1200 return 0; … … 1292 1285 if (runtime->dma_area != chip->capt.hw_buf.area) 1293 1286 snd_pcm_lib_free_pages(substream); 1294 runtime->dma_area = chip->capt.hw_buf.area; 1295 runtime->dma_addr = chip->capt.hw_buf.addr; 1296 runtime->dma_bytes = chip->capt.hw_buf.bytes; 1287 snd_pcm_set_runtime_buffer(substream, &chip->capt.hw_buf); 1297 1288 substream->ops = &snd_cs46xx_capture_ops; 1298 1289 } else { 1299 if (runtime->dma_area == chip->capt.hw_buf.area) { 1300 runtime->dma_area = NULL; 1301 runtime->dma_addr = 0; 1302 runtime->dma_bytes = 0; 1303 } 1290 if (runtime->dma_area == chip->capt.hw_buf.area) 1291 snd_pcm_set_runtime_buffer(substream, NULL); 1304 1292 err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); 1305 1293 if (err < 0) … … 1318 1306 if (runtime->dma_area != chip->capt.hw_buf.area) 1319 1307 snd_pcm_lib_free_pages(substream); 1320 runtime->dma_area = NULL; 1321 runtime->dma_addr = 0; 1322 runtime->dma_bytes = 0; 1308 snd_pcm_set_runtime_buffer(substream, NULL); 1323 1309 1324 1310 return 0; … … 1870 1856 * Mixer routines 1871 1857 */ 1872 static void snd_cs46xx_mixer_free_ac97_bus(struct snd_ac97_bus *bus)1873 {1874 struct snd_cs46xx *chip = bus->private_data;1875 1876 chip->ac97_bus = NULL;1877 }1878 1879 1858 static void snd_cs46xx_mixer_free_ac97(struct snd_ac97 *ac97) 1880 1859 { … … 2492 2471 if (err < 0) 2493 2472 return err; 2494 chip->ac97_bus->private_free = snd_cs46xx_mixer_free_ac97_bus;2495 2473 2496 2474 if (cs46xx_detect_codec(chip, CS46XX_PRIMARY_CODEC_INDEX) < 0) … … 2918 2896 2919 2897 2920 static int snd_cs46xx_free(struct snd_cs46xx *chip) 2921 { 2898 static void snd_cs46xx_free(struct snd_card *card) 2899 { 2900 struct snd_cs46xx *chip = card->private_data; 2901 #ifdef CONFIG_SND_CS46XX_NEW_DSP 2922 2902 int idx; 2923 2924 if (snd_BUG_ON(!chip)) 2925 return -EINVAL; 2903 #endif 2926 2904 2927 2905 if (chip->active_ctrl) … … 2935 2913 snd_cs46xx_proc_done(chip); 2936 2914 2937 if (chip->region.idx[0].resource) 2938 snd_cs46xx_hw_stop(chip); 2939 2940 if (chip->irq >= 0) 2941 free_irq(chip->irq, chip); 2915 snd_cs46xx_hw_stop(chip); 2942 2916 2943 2917 if (chip->active_ctrl) 2944 2918 chip->active_ctrl(chip, -chip->amplifier); 2945 2946 for (idx = 0; idx < 5; idx++) {2947 struct snd_cs46xx_region *region = &chip->region.idx[idx];2948 2949 iounmap(region->remap_addr);2950 release_and_free_resource(region->resource);2951 }2952 2919 2953 2920 #ifdef CONFIG_SND_CS46XX_NEW_DSP … … 2961 2928 vfree(chip->ba1); 2962 2929 #endif 2963 2964 #ifdef CONFIG_PM_SLEEP2965 kfree(chip->saved_regs);2966 #endif2967 2968 pci_disable_device(chip->pci);2969 kfree(chip);2970 return 0;2971 }2972 2973 static int snd_cs46xx_dev_free(struct snd_device *device)2974 {2975 struct snd_cs46xx *chip = device->device_data;2976 return snd_cs46xx_free(chip);2977 2930 } 2978 2931 … … 3873 3826 int snd_cs46xx_create(struct snd_card *card, 3874 3827 struct pci_dev *pci, 3875 int external_amp, int thinkpad, 3876 struct snd_cs46xx **rchip) 3877 { 3878 struct snd_cs46xx *chip; 3828 int external_amp, int thinkpad) 3829 { 3830 struct snd_cs46xx *chip = card->private_data; 3879 3831 int err, idx; 3880 3832 struct snd_cs46xx_region *region; 3881 3833 struct cs_card_type *cp; 3882 3834 u16 ss_card, ss_vendor; 3883 static const struct snd_device_ops ops = {3884 .dev_free = snd_cs46xx_dev_free,3885 };3886 3835 3887 *rchip = NULL;3888 3889 3836 /* enable PCI device */ 3890 err = pci _enable_device(pci);3837 err = pcim_enable_device(pci); 3891 3838 if (err < 0) 3892 3839 return err; 3893 3840 3894 chip = kzalloc(sizeof(*chip), GFP_KERNEL);3895 if (chip == NULL) {3896 pci_disable_device(pci);3897 return -ENOMEM;3898 }3899 3841 spin_lock_init(&chip->reg_lock); 3900 3842 #ifdef CONFIG_SND_CS46XX_NEW_DSP … … 3904 3846 chip->pci = pci; 3905 3847 chip->irq = -1; 3848 3849 err = pci_request_regions(pci, "CS46xx"); 3850 if (err < 0) 3851 return err; 3906 3852 chip->ba0_addr = pci_resource_start(pci, 0); 3907 3853 chip->ba1_addr = pci_resource_start(pci, 1); … … 3911 3857 "wrong address(es) - ba0 = 0x%lx, ba1 = 0x%lx\n", 3912 3858 chip->ba0_addr, chip->ba1_addr); 3913 snd_cs46xx_free(chip);3914 3859 return -ENOMEM; 3915 3860 } … … 3983 3928 for (idx = 0; idx < 5; idx++) { 3984 3929 region = &chip->region.idx[idx]; 3985 region->resource = request_mem_region(region->base, region->size, 3986 region->name); 3987 if (!region->resource) { 3988 dev_err(chip->card->dev, 3989 "unable to request memory region 0x%lx-0x%lx\n", 3990 region->base, region->base + region->size - 1); 3991 snd_cs46xx_free(chip); 3992 return -EBUSY; 3993 } 3994 region->remap_addr = ioremap(region->base, region->size); 3930 region->remap_addr = devm_ioremap(&pci->dev, region->base, 3931 region->size); 3995 3932 if (region->remap_addr == NULL) { 3996 3933 dev_err(chip->card->dev, 3997 3934 "%s ioremap problem\n", region->name); 3998 snd_cs46xx_free(chip);3999 3935 return -ENOMEM; 4000 3936 } 4001 3937 } 4002 3938 4003 if ( request_irq(pci->irq, snd_cs46xx_interrupt, IRQF_SHARED,4004 KBUILD_MODNAME, chip)) {3939 if (devm_request_irq(&pci->dev, pci->irq, snd_cs46xx_interrupt, 3940 IRQF_SHARED, KBUILD_MODNAME, chip)) { 4005 3941 dev_err(chip->card->dev, "unable to grab IRQ %d\n", pci->irq); 4006 snd_cs46xx_free(chip);4007 3942 return -EBUSY; 4008 3943 } 4009 3944 chip->irq = pci->irq; 4010 3945 card->sync_irq = chip->irq; 3946 card->private_free = snd_cs46xx_free; 4011 3947 4012 3948 #ifdef CONFIG_SND_CS46XX_NEW_DSP 4013 3949 chip->dsp_spos_instance = cs46xx_dsp_spos_create(chip); 4014 if (chip->dsp_spos_instance == NULL) { 4015 snd_cs46xx_free(chip); 3950 if (!chip->dsp_spos_instance) 4016 3951 return -ENOMEM; 4017 }4018 3952 #endif 4019 3953 4020 3954 err = snd_cs46xx_chip_init(chip); 4021 if (err < 0) { 4022 snd_cs46xx_free(chip); 3955 if (err < 0) 4023 3956 return err; 4024 }4025 4026 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);4027 if (err < 0) {4028 snd_cs46xx_free(chip);4029 return err;4030 }4031 3957 4032 3958 snd_cs46xx_proc_init(card, chip); 4033 3959 4034 3960 #ifdef CONFIG_PM_SLEEP 4035 chip->saved_regs = kmalloc_array(ARRAY_SIZE(saved_regs),4036 sizeof(*chip->saved_regs),4037 GFP_KERNEL);4038 if (!chip->saved_regs) {4039 snd_cs46xx_free(chip);3961 chip->saved_regs = devm_kmalloc_array(&pci->dev, 3962 ARRAY_SIZE(saved_regs), 3963 sizeof(*chip->saved_regs), 3964 GFP_KERNEL); 3965 if (!chip->saved_regs) 4040 3966 return -ENOMEM; 4041 }4042 3967 #endif 4043 3968 4044 3969 chip->active_ctrl(chip, -1); /* disable CLKRUN */ 4045 4046 *rchip = chip; 4047 return 0; 4048 } 3970 return 0; 3971 } 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs5530.cr629 r710 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 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/cs5535audio/cs5535audio.cr697 r710 242 242 } 243 243 244 static int snd_cs5535audio_free(struct cs5535audio *cs5535au) 245 { 246 pci_set_power_state(cs5535au->pci, PCI_D3hot); 247 248 if (cs5535au->irq >= 0) 249 free_irq(cs5535au->irq, cs5535au); 250 251 pci_release_regions(cs5535au->pci); 252 pci_disable_device(cs5535au->pci); 253 kfree(cs5535au); 254 return 0; 255 } 256 257 static int snd_cs5535audio_dev_free(struct snd_device *device) 258 { 259 struct cs5535audio *cs5535au = device->device_data; 260 return snd_cs5535audio_free(cs5535au); 244 static void snd_cs5535audio_free(struct snd_card *card) 245 { 246 olpc_quirks_cleanup(); 261 247 } 262 248 263 249 static int snd_cs5535audio_create(struct snd_card *card, 264 struct pci_dev *pci, 265 struct cs5535audio **rcs5535au) 266 { 267 struct cs5535audio *cs5535au; 268 250 struct pci_dev *pci) 251 { 252 struct cs5535audio *cs5535au = card->private_data; 269 253 int err; 270 static const struct snd_device_ops ops = { 271 .dev_free = snd_cs5535audio_dev_free, 272 }; 273 274 *rcs5535au = NULL; 275 err = pci_enable_device(pci); 254 255 err = pcim_enable_device(pci); 276 256 if (err < 0) 277 257 return err; … … 279 259 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) { 280 260 dev_warn(card->dev, "unable to get 32bit dma\n"); 281 err = -ENXIO; 282 goto pcifail; 283 } 284 285 cs5535au = kzalloc(sizeof(*cs5535au), GFP_KERNEL); 286 if (cs5535au == NULL) { 287 err = -ENOMEM; 288 goto pcifail; 261 return -ENXIO; 289 262 } 290 263 … … 295 268 296 269 err = pci_request_regions(pci, "CS5535 Audio"); 297 if (err < 0) { 298 kfree(cs5535au); 299 goto pcifail; 300 } 270 if (err < 0) 271 return err; 301 272 302 273 cs5535au->port = pci_resource_start(pci, 0); 303 274 304 if ( request_irq(pci->irq, snd_cs5535audio_interrupt,305 IRQF_SHARED, KBUILD_MODNAME, cs5535au)) {275 if (devm_request_irq(&pci->dev, pci->irq, snd_cs5535audio_interrupt, 276 IRQF_SHARED, KBUILD_MODNAME, cs5535au)) { 306 277 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 307 err = -EBUSY; 308 goto sndfail; 278 return -EBUSY; 309 279 } 310 280 … … 313 283 pci_set_master(pci); 314 284 315 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, cs5535au, &ops);316 if (err < 0)317 goto sndfail;318 319 *rcs5535au = cs5535au;320 285 return 0; 321 322 sndfail: /* leave the device alive, just kill the snd */323 snd_cs5535audio_free(cs5535au);324 return err;325 326 pcifail:327 pci_disable_device(pci);328 return err;329 286 } 330 287 … … 344 301 } 345 302 346 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,347 0, &card);348 if (err < 0) 349 return err; 350 351 err = snd_cs5535audio_create(card, pci, &cs5535au);352 if (err < 0) 353 goto probefail_out;354 355 card->private_data = cs5535au;303 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 304 sizeof(*cs5535au), &card); 305 if (err < 0) 306 return err; 307 cs5535au = card->private_data; 308 card->private_free = snd_cs5535audio_free; 309 310 err = snd_cs5535audio_create(card, pci); 311 if (err < 0) 312 return err; 356 313 357 314 err = snd_cs5535audio_mixer(cs5535au); 358 315 if (err < 0) 359 goto probefail_out;316 return err; 360 317 361 318 err = snd_cs5535audio_pcm(cs5535au); 362 319 if (err < 0) 363 goto probefail_out;320 return err; 364 321 365 322 strcpy(card->driver, DRIVER_NAME); … … 372 329 err = snd_card_register(card); 373 330 if (err < 0) 374 goto probefail_out;331 return err; 375 332 376 333 pci_set_drvdata(pci, card); 377 334 dev++; 378 335 return 0; 379 380 probefail_out:381 snd_card_free(card);382 return err;383 }384 385 static void snd_cs5535audio_remove(struct pci_dev *pci)386 {387 olpc_quirks_cleanup();388 snd_card_free(pci_get_drvdata(pci));389 336 } 390 337 … … 393 340 .id_table = snd_cs5535audio_ids, 394 341 .probe = snd_cs5535audio_probe, 395 .remove = snd_cs5535audio_remove,396 342 #ifdef CONFIG_PM_SLEEP 397 343 .driver = { 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/emu10k1/emu10k1.cr697 r710 114 114 } 115 115 116 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 117 0, &card); 118 if (err < 0) 119 return err; 116 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 117 sizeof(*emu), &card); 118 if (err < 0) 119 return err; 120 emu = card->private_data; 121 120 122 if (max_buffer_size[dev] < 32) 121 123 max_buffer_size[dev] = 32; … … 124 126 err = snd_emu10k1_create(card, pci, extin[dev], extout[dev], 125 127 (long)max_buffer_size[dev] * 1024 * 1024, 126 enable_ir[dev], subsystem[dev], 127 &emu); 128 if (err < 0) 129 goto error; 130 card->private_data = emu; 128 enable_ir[dev], subsystem[dev]); 129 if (err < 0) 130 return err; 131 131 emu->delay_pcm_irq = delay_pcm_irq[dev] & 0x1f; 132 132 err = snd_emu10k1_pcm(emu, 0); 133 133 if (err < 0) 134 goto error;134 return err; 135 135 err = snd_emu10k1_pcm_mic(emu, 1); 136 136 if (err < 0) 137 goto error;137 return err; 138 138 err = snd_emu10k1_pcm_efx(emu, 2); 139 139 if (err < 0) 140 goto error;140 return err; 141 141 /* This stores the periods table. */ 142 #ifndef TARGET_OS2 143 if (emu->card_capabilities->ca0151_chip) { /* P16V */ 144 emu->p16v_buffer = 145 snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 1024); 146 if (!emu->p16v_buffer) 147 return -ENOMEM; 148 } 149 #else 142 150 if (emu->card_capabilities->ca0151_chip) { /* P16V */ 143 151 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 144 152 1024, &emu->p16v_buffer); 145 153 if (err < 0) 146 goto error;147 } 148 154 return -ENOMEM; 155 } 156 #endif 149 157 err = snd_emu10k1_mixer(emu, 0, 3); 150 158 if (err < 0) 151 goto error;159 return err; 152 160 153 161 err = snd_emu10k1_timer(emu, 0); 154 162 if (err < 0) 155 goto error;163 return err; 156 164 157 165 err = snd_emu10k1_pcm_multi(emu, 3); 158 166 if (err < 0) 159 goto error;167 return err; 160 168 if (emu->card_capabilities->ca0151_chip) { /* P16V */ 161 169 err = snd_p16v_pcm(emu, 4); 162 170 if (err < 0) 163 goto error;171 return err; 164 172 } 165 173 if (emu->audigy) { 166 174 err = snd_emu10k1_audigy_midi(emu); 167 175 if (err < 0) 168 goto error;176 return err; 169 177 } else { 170 178 err = snd_emu10k1_midi(emu); 171 179 if (err < 0) 172 goto error;180 return err; 173 181 } 174 182 err = snd_emu10k1_fx8010_new(emu, 0); 175 183 if (err < 0) 176 goto error;184 return err; 177 185 #ifdef ENABLE_SYNTH 178 186 if (snd_seq_device_new(card, 1, SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, … … 202 210 err = snd_card_register(card); 203 211 if (err < 0) 204 goto error;212 return err; 205 213 206 214 if (emu->card_capabilities->emu_model) … … 210 218 dev++; 211 219 return 0; 212 213 error:214 snd_card_free(card);215 return err;216 220 } 217 218 static void snd_card_emu10k1_remove(struct pci_dev *pci)219 {220 snd_card_free(pci_get_drvdata(pci));221 }222 223 221 224 222 #ifdef CONFIG_PM_SLEEP … … 278 276 .id_table = snd_emu10k1_ids, 279 277 .probe = snd_card_emu10k1_probe, 280 .remove = snd_card_emu10k1_remove,281 278 .driver = { 282 279 .pm = SND_EMU10K1_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/emu10k1/emu10k1_main.cr693 r710 1252 1252 #endif 1253 1253 1254 static int snd_emu10k1_free(struct snd_emu10k1 *emu)1254 static void snd_emu10k1_free(struct snd_card *card) 1255 1255 { 1256 struct snd_emu10k1 *emu = card->private_data; 1257 1256 1258 if (emu->port) { /* avoid access to already used hardware */ 1257 1259 snd_emu10k1_fx8010_tram_setup(emu, 0); … … 1266 1268 release_firmware(emu->firmware); 1267 1269 release_firmware(emu->dock_fw); 1268 if (emu->irq >= 0)1269 free_irq(emu->irq, emu);1270 1270 snd_util_memhdr_free(emu->memhdr); 1271 1271 if (emu->silent_page.area) … … 1278 1278 free_pm_buffer(emu); 1279 1279 #endif 1280 if (emu->port)1281 pci_release_regions(emu->pci);1282 if (emu->card_capabilities->ca0151_chip) /* P16V */1283 snd_p16v_free(emu);1284 pci_disable_device(emu->pci);1285 kfree(emu);1286 return 0;1287 }1288 1289 static int snd_emu10k1_dev_free(struct snd_device *device)1290 {1291 struct snd_emu10k1 *emu = device->device_data;1292 return snd_emu10k1_free(emu);1293 1280 } 1294 1281 … … 1792 1779 long max_cache_bytes, 1793 1780 int enable_ir, 1794 uint subsystem, 1795 struct snd_emu10k1 **remu) 1781 uint subsystem) 1796 1782 { 1797 struct snd_emu10k1 *emu ;1783 struct snd_emu10k1 *emu = card->private_data; 1798 1784 int idx, err; 1799 1785 int is_audigy; … … 1802 1788 unsigned int silent_page; 1803 1789 const struct snd_emu_chip_details *c; 1804 static const struct snd_device_ops ops = {1805 .dev_free = snd_emu10k1_dev_free,1806 };1807 1808 *remu = NULL;1809 1790 1810 1791 /* enable PCI device */ 1811 err = pci _enable_device(pci);1792 err = pcim_enable_device(pci); 1812 1793 if (err < 0) 1813 1794 return err; 1814 1795 1815 emu = kzalloc(sizeof(*emu), GFP_KERNEL); 1816 if (emu == NULL) { 1817 pci_disable_device(pci); 1818 return -ENOMEM; 1819 } 1796 card->private_free = snd_emu10k1_free; 1820 1797 emu->card = card; 1821 1798 spin_lock_init(&emu->reg_lock); … … 1864 1841 if (c->vendor == 0) { 1865 1842 dev_err(card->dev, "emu10k1: Card not recognised\n"); 1866 kfree(emu);1867 pci_disable_device(pci);1868 1843 return -ENOENT; 1869 1844 } … … 1897 1872 "architecture does not support PCI busmaster DMA with mask 0x%lx\n", 1898 1873 emu->dma_mask); 1899 kfree(emu);1900 pci_disable_device(pci);1901 1874 return -ENXIO; 1902 1875 } … … 1907 1880 1908 1881 err = pci_request_regions(pci, "EMU10K1"); 1909 if (err < 0) { 1910 kfree(emu); 1911 pci_disable_device(pci); 1882 if (err < 0) 1912 1883 return err; 1913 }1914 1884 emu->port = pci_resource_start(pci, 0); 1915 1885 … … 1919 1889 MAXPAGES0); 1920 1890 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size, 1921 &emu->ptb_pages) < 0) { 1922 err = -ENOMEM; 1923 goto error; 1924 } 1891 &emu->ptb_pages) < 0) 1892 return -ENOMEM; 1925 1893 dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n", 1926 1894 (unsigned long)emu->ptb_pages.addr, … … 1937 1905 sizeof(unsigned long)); 1938 1906 #endif 1939 if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) { 1940 err = -ENOMEM; 1941 goto error; 1942 } 1907 1908 if (!emu->page_ptr_table || !emu->page_addr_table) 1909 return -ENOMEM; 1943 1910 1944 1911 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE, 1945 &emu->silent_page) < 0) { 1946 err = -ENOMEM; 1947 goto error; 1948 } 1912 &emu->silent_page) < 0) 1913 return -ENOMEM; 1949 1914 dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n", 1950 1915 (unsigned long)emu->silent_page.addr, … … 1953 1918 1954 1919 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE); 1955 if (emu->memhdr == NULL) { 1956 err = -ENOMEM; 1957 goto error; 1958 } 1920 if (!emu->memhdr) 1921 return -ENOMEM; 1959 1922 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) - 1960 1923 sizeof(struct snd_util_memblk); … … 1974 1937 err = snd_emu10k1_cardbus_init(emu); 1975 1938 if (err < 0) 1976 goto error;1939 return err; 1977 1940 } 1978 1941 if (emu->card_capabilities->ecard) { 1979 1942 err = snd_emu10k1_ecard_init(emu); 1980 1943 if (err < 0) 1981 goto error;1944 return err; 1982 1945 } else if (emu->card_capabilities->emu_model) { 1983 1946 err = snd_emu10k1_emu1010_init(emu); 1984 if (err < 0) { 1985 snd_emu10k1_free(emu); 1947 if (err < 0) 1986 1948 return err; 1987 }1988 1949 } else { 1989 1950 /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version … … 1999 1960 2000 1961 /* irq handler must be registered after I/O ports are activated */ 2001 if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED, 2002 KBUILD_MODNAME, emu)) { 2003 err = -EBUSY; 2004 goto error; 2005 } 1962 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1_interrupt, 1963 IRQF_SHARED, KBUILD_MODNAME, emu)) 1964 return -EBUSY; 2006 1965 emu->irq = pci->irq; 2007 1966 card->sync_irq = emu->irq; … … 2042 2001 err = snd_emu10k1_init(emu, enable_ir, 0); 2043 2002 if (err < 0) 2044 goto error;2003 return err; 2045 2004 #ifdef CONFIG_PM_SLEEP 2046 2005 err = alloc_pm_buffer(emu); 2047 2006 if (err < 0) 2048 goto error;2007 return err; 2049 2008 #endif 2050 2009 … … 2052 2011 err = snd_emu10k1_init_efx(emu); 2053 2012 if (err < 0) 2054 goto error;2013 return err; 2055 2014 snd_emu10k1_audio_enable(emu); 2056 2057 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops);2058 if (err < 0)2059 goto error;2060 2015 2061 2016 #ifdef CONFIG_SND_PROC_FS 2062 2017 snd_emu10k1_proc_init(emu); 2063 2018 #endif 2064 2065 *remu = emu;2066 2019 return 0; 2067 2068 error:2069 snd_emu10k1_free(emu);2070 return err;2071 2020 } 2072 2021 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/emu10k1/emu10k1x.cr697 r710 220 220 221 221 unsigned long port; 222 struct resource *res_port;223 222 int irq; 224 223 … … 237 236 u32 spdif_bits[3]; // SPDIF out setup 238 237 239 struct snd_dma_buffer dma_buffer;238 struct snd_dma_buffer *dma_buffer; 240 239 241 240 struct emu10k1x_midi midi; … … 446 445 struct emu10k1x_pcm *epcm = runtime->private_data; 447 446 int voice = epcm->voice->number; 448 u32 *table_base = (u32 *)(emu->dma_buffer .area+1024*voice);447 u32 *table_base = (u32 *)(emu->dma_buffer->area+1024*voice); 449 448 u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size); 450 449 int i; … … 455 454 } 456 455 457 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer .addr+1024*voice);456 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer->addr+1024*voice); 458 457 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_SIZE, voice, (runtime->periods - 1) << 19); 459 458 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_PTR, voice, 0); … … 741 740 } 742 741 743 static int snd_emu10k1x_free(struct emu10k1x *chip) 744 { 742 static void snd_emu10k1x_free(struct snd_card *card) 743 { 744 struct emu10k1x *chip = card->private_data; 745 745 746 snd_emu10k1x_ptr_write(chip, TRIGGER_CHANNEL, 0, 0); 746 747 // disable interrupts … … 748 749 // disable audio 749 750 outl(HCFG_LOCKSOUNDCACHE, chip->port + HCFG); 750 751 /* release the irq */752 if (chip->irq >= 0)753 free_irq(chip->irq, chip);754 755 // release the i/o port756 release_and_free_resource(chip->res_port);757 758 // release the DMA759 if (chip->dma_buffer.area) {760 snd_dma_free_pages(&chip->dma_buffer);761 }762 763 pci_disable_device(chip->pci);764 765 // release the data766 kfree(chip);767 return 0;768 }769 770 static int snd_emu10k1x_dev_free(struct snd_device *device)771 {772 struct emu10k1x *chip = device->device_data;773 return snd_emu10k1x_free(chip);774 751 } 775 752 … … 889 866 890 867 static int snd_emu10k1x_create(struct snd_card *card, 891 struct pci_dev *pci, 892 struct emu10k1x **rchip) 893 { 894 struct emu10k1x *chip; 868 struct pci_dev *pci) 869 { 870 struct emu10k1x *chip = card->private_data; 895 871 int err; 896 872 int ch; 897 static const struct snd_device_ops ops = { 898 .dev_free = snd_emu10k1x_dev_free, 899 }; 900 901 *rchip = NULL; 902 903 err = pci_enable_device(pci); 873 874 err = pcim_enable_device(pci); 904 875 if (err < 0) 905 876 return err; … … 907 878 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(28)) < 0) { 908 879 dev_err(card->dev, "error to set 28bit mask DMA\n"); 909 pci_disable_device(pci);910 880 return -ENXIO; 911 }912 913 chip = kzalloc(sizeof(*chip), GFP_KERNEL);914 if (chip == NULL) {915 pci_disable_device(pci);916 return -ENOMEM;917 881 } 918 882 … … 924 888 spin_lock_init(&chip->voice_lock); 925 889 890 err = pci_request_regions(pci, "EMU10K1X"); 891 if (err < 0) 892 return err; 926 893 chip->port = pci_resource_start(pci, 0); 927 chip->res_port = request_region(chip->port, 8, "EMU10K1X"); 928 if (!chip->res_port) { 929 dev_err(card->dev, "cannot allocate the port 0x%lx\n", 930 chip->port); 931 snd_emu10k1x_free(chip); 932 return -EBUSY; 933 } 934 935 if (request_irq(pci->irq, snd_emu10k1x_interrupt, 936 IRQF_SHARED, KBUILD_MODNAME, chip)) { 894 895 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1x_interrupt, 896 IRQF_SHARED, KBUILD_MODNAME, chip)) { 937 897 dev_err(card->dev, "cannot grab irq %d\n", pci->irq); 938 snd_emu10k1x_free(chip);939 898 return -EBUSY; 940 899 } 941 900 chip->irq = pci->irq; 942 901 card->sync_irq = chip->irq; 902 card->private_free = snd_emu10k1x_free; 943 903 944 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,945 4 * 1024, &chip->dma_buffer) < 0) {946 snd_emu10k1x_free(chip);904 chip->dma_buffer = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 905 4 * 1024); 906 if (!chip->dma_buffer) 947 907 return -ENOMEM; 948 }949 908 950 909 pci_set_master(pci); … … 1006 965 outl(HCFG_LOCKSOUNDCACHE|HCFG_AUDIOENABLE, chip->port+HCFG); 1007 966 1008 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1009 if (err < 0) {1010 snd_emu10k1x_free(chip);1011 return err;1012 }1013 *rchip = chip;1014 967 return 0; 1015 968 } … … 1561 1514 } 1562 1515 1563 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1564 0, &card); 1565 if (err < 0) 1566 return err; 1567 1568 err = snd_emu10k1x_create(card, pci, &chip); 1569 if (err < 0) { 1570 snd_card_free(card); 1571 return err; 1572 } 1516 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1517 sizeof(*chip), &card); 1518 if (err < 0) 1519 return err; 1520 chip = card->private_data; 1521 1522 err = snd_emu10k1x_create(card, pci); 1523 if (err < 0) 1524 return err; 1573 1525 1574 1526 err = snd_emu10k1x_pcm(chip, 0); 1575 if (err < 0) { 1576 snd_card_free(card); 1577 return err; 1578 } 1527 if (err < 0) 1528 return err; 1579 1529 err = snd_emu10k1x_pcm(chip, 1); 1580 if (err < 0) { 1581 snd_card_free(card); 1582 return err; 1583 } 1530 if (err < 0) 1531 return err; 1584 1532 err = snd_emu10k1x_pcm(chip, 2); 1585 if (err < 0) { 1586 snd_card_free(card); 1587 return err; 1588 } 1533 if (err < 0) 1534 return err; 1589 1535 1590 1536 err = snd_emu10k1x_ac97(chip); 1591 if (err < 0) { 1592 snd_card_free(card); 1593 return err; 1594 } 1537 if (err < 0) 1538 return err; 1595 1539 1596 1540 err = snd_emu10k1x_mixer(chip); 1597 if (err < 0) { 1598 snd_card_free(card); 1599 return err; 1600 } 1541 if (err < 0) 1542 return err; 1601 1543 1602 1544 err = snd_emu10k1x_midi(chip); 1603 if (err < 0) { 1604 snd_card_free(card); 1605 return err; 1606 } 1545 if (err < 0) 1546 return err; 1607 1547 1608 1548 snd_emu10k1x_proc_init(chip); … … 1614 1554 1615 1555 err = snd_card_register(card); 1616 if (err < 0) { 1617 snd_card_free(card); 1618 return err; 1619 } 1556 if (err < 0) 1557 return err; 1620 1558 1621 1559 pci_set_drvdata(pci, card); 1622 1560 dev++; 1623 1561 return 0; 1624 }1625 1626 static void snd_emu10k1x_remove(struct pci_dev *pci)1627 {1628 snd_card_free(pci_get_drvdata(pci));1629 1562 } 1630 1563 … … 1641 1574 .id_table = snd_emu10k1x_ids, 1642 1575 .probe = snd_emu10k1x_probe, 1643 .remove = snd_emu10k1x_remove,1644 1576 }; 1645 1577 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/emu10k1/p16v.cr697 r710 291 291 struct snd_pcm_runtime *runtime = substream->runtime; 292 292 int channel = substream->pcm->device - emu->p16v_device_offset; 293 u32 *table_base = (u32 *)(emu->p16v_buffer .area+(8*16*channel));293 u32 *table_base = (u32 *)(emu->p16v_buffer->area+(8*16*channel)); 294 294 u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size); 295 295 int i; … … 309 309 dev_dbg(emu->card->dev, 310 310 "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n", 311 emu->p16v_buffer .addr, emu->p16v_buffer.area,312 emu->p16v_buffer .bytes);311 emu->p16v_buffer->addr, emu->p16v_buffer->area, 312 emu->p16v_buffer->bytes); 313 313 #endif /* debug */ 314 314 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel); … … 334 334 } 335 335 336 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_ADDR, channel, emu->p16v_buffer .addr+(8*16*channel));336 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_ADDR, channel, emu->p16v_buffer->addr+(8*16*channel)); 337 337 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_SIZE, channel, (runtime->periods - 1) << 19); 338 338 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_PTR, channel, 0); … … 567 567 .pointer = snd_p16v_pcm_pointer_capture, 568 568 }; 569 570 571 int snd_p16v_free(struct snd_emu10k1 *chip)572 {573 // release the data574 if (chip->p16v_buffer.area) {575 snd_dma_free_pages(&chip->p16v_buffer);576 /*577 dev_dbg(chip->card->dev, "period lables free: %p\n",578 &chip->p16v_buffer);579 */580 }581 return 0;582 }583 569 584 570 int snd_p16v_pcm(struct snd_emu10k1 *emu, int device) 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/ens1370.cr697 r710 418 418 419 419 #ifdef CHIP1370 420 struct snd_dma_buffer dma_bug;420 struct snd_dma_buffer *dma_bug; 421 421 #endif 422 422 … … 1876 1876 */ 1877 1877 1878 static int snd_ensoniq_free(struct ensoniq *ensoniq) 1879 { 1878 static void snd_ensoniq_free(struct snd_card *card) 1879 { 1880 struct ensoniq *ensoniq = card->private_data; 1881 1880 1882 snd_ensoniq_free_gameport(ensoniq); 1881 if (ensoniq->irq < 0)1882 goto __hw_end;1883 1883 #ifdef CHIP1370 1884 1884 outl(ES_1370_SERR_DISABLE, ES_REG(ensoniq, CONTROL)); /* switch everything off */ … … 1888 1888 outl(0, ES_REG(ensoniq, SERIAL)); /* clear serial interface */ 1889 1889 #endif 1890 pci_set_power_state(ensoniq->pci, PCI_D3hot);1891 __hw_end:1892 #ifdef CHIP13701893 if (ensoniq->dma_bug.area)1894 snd_dma_free_pages(&ensoniq->dma_bug);1895 #endif1896 if (ensoniq->irq >= 0)1897 free_irq(ensoniq->irq, ensoniq);1898 pci_release_regions(ensoniq->pci);1899 pci_disable_device(ensoniq->pci);1900 kfree(ensoniq);1901 return 0;1902 }1903 1904 static int snd_ensoniq_dev_free(struct snd_device *device)1905 {1906 struct ensoniq *ensoniq = device->device_data;1907 return snd_ensoniq_free(ensoniq);1908 1890 } 1909 1891 … … 1939 1921 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL)); 1940 1922 outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE)); 1941 outl(ensoniq->dma_bug .addr, ES_REG(ensoniq, PHANTOM_FRAME));1923 outl(ensoniq->dma_bug->addr, ES_REG(ensoniq, PHANTOM_FRAME)); 1942 1924 outl(0, ES_REG(ensoniq, PHANTOM_COUNT)); 1943 1925 #else … … 2036 2018 2037 2019 static int snd_ensoniq_create(struct snd_card *card, 2038 struct pci_dev *pci, 2039 struct ensoniq **rensoniq) 2040 { 2041 struct ensoniq *ensoniq; 2020 struct pci_dev *pci) 2021 { 2022 struct ensoniq *ensoniq = card->private_data; 2042 2023 int err; 2043 static const struct snd_device_ops ops = { 2044 .dev_free = snd_ensoniq_dev_free, 2045 }; 2046 2047 *rensoniq = NULL; 2048 err = pci_enable_device(pci); 2024 2025 err = pcim_enable_device(pci); 2049 2026 if (err < 0) 2050 2027 return err; 2051 ensoniq = kzalloc(sizeof(*ensoniq), GFP_KERNEL);2052 if (ensoniq == NULL) {2053 pci_disable_device(pci);2054 return -ENOMEM;2055 }2056 2028 spin_lock_init(&ensoniq->reg_lock); 2057 2029 mutex_init(&ensoniq->src_mutex); … … 2060 2032 ensoniq->irq = -1; 2061 2033 err = pci_request_regions(pci, "Ensoniq AudioPCI"); 2062 if (err < 0) { 2063 kfree(ensoniq); 2064 pci_disable_device(pci); 2034 if (err < 0) 2065 2035 return err; 2066 }2067 2036 ensoniq->port = pci_resource_start(pci, 0); 2037 #ifndef TARGET_OS2 2038 if (devm_request_irq(&pci->dev, pci->irq, snd_audiopci_interrupt, 2039 IRQF_SHARED, KBUILD_MODNAME, ensoniq)) { 2040 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2041 return -EBUSY; 2042 } 2043 #else 2068 2044 if (request_irq(pci->irq, snd_audiopci_interrupt, IRQF_SHARED, 2069 2045 KBUILD_MODNAME, ensoniq)) { … … 2072 2048 return -EBUSY; 2073 2049 } 2050 #endif 2074 2051 ensoniq->irq = pci->irq; 2075 2052 card->sync_irq = ensoniq->irq; 2076 2053 #ifdef CHIP1370 2054 #ifndef TARGET_OS2 2055 ensoniq->dma_bug = 2056 snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 16); 2057 if (!ensoniq->dma_bug) 2058 return -ENOMEM; 2059 #else 2077 2060 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 2078 2061 16, &ensoniq->dma_bug) < 0) { … … 2081 2064 return -EBUSY; 2082 2065 } 2066 #endif 2083 2067 #endif 2084 2068 pci_set_master(pci); … … 2107 2091 #endif 2108 2092 2093 card->private_free = snd_ensoniq_free; 2109 2094 snd_ensoniq_chip_init(ensoniq); 2110 2095 2111 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ensoniq, &ops);2112 if (err < 0) {2113 snd_ensoniq_free(ensoniq);2114 return err;2115 }2116 2117 2096 snd_ensoniq_proc_init(ensoniq); 2118 2119 *rensoniq = ensoniq;2120 2097 return 0; 2121 2098 } … … 2368 2345 } 2369 2346 2370 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2371 0, &card);2347 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2348 sizeof(*ensoniq), &card); 2372 2349 if (err < 0) 2373 2350 return err; 2374 2375 err = snd_ensoniq_create(card, pci, &ensoniq); 2376 if (err < 0) {2377 snd_card_free(card);2351 ensoniq = card->private_data; 2352 2353 err = snd_ensoniq_create(card, pci); 2354 if (err < 0) 2378 2355 return err; 2379 }2380 card->private_data = ensoniq;2381 2356 2382 2357 #ifdef CHIP1370 2383 2358 err = snd_ensoniq_1370_mixer(ensoniq); 2384 if (err < 0) { 2385 snd_card_free(card); 2359 if (err < 0) 2386 2360 return err; 2387 }2388 2361 #endif 2389 2362 #ifdef CHIP1371 2390 2363 err = snd_ensoniq_1371_mixer(ensoniq, spdif[dev], lineio[dev]); 2391 if (err < 0) { 2392 snd_card_free(card); 2364 if (err < 0) 2393 2365 return err; 2394 }2395 2366 #endif 2396 2367 err = snd_ensoniq_pcm(ensoniq, 0); 2397 if (err < 0) { 2398 snd_card_free(card); 2368 if (err < 0) 2399 2369 return err; 2400 }2401 2370 err = snd_ensoniq_pcm2(ensoniq, 1); 2402 if (err < 0) { 2403 snd_card_free(card); 2371 if (err < 0) 2404 2372 return err; 2405 }2406 2373 err = snd_ensoniq_midi(ensoniq, 0); 2407 if (err < 0) { 2408 snd_card_free(card); 2374 if (err < 0) 2409 2375 return err; 2410 }2411 2376 2412 2377 snd_ensoniq_create_gameport(ensoniq, dev); … … 2422 2387 2423 2388 err = snd_card_register(card); 2424 if (err < 0) { 2425 snd_card_free(card); 2389 if (err < 0) 2426 2390 return err; 2427 }2428 2391 2429 2392 pci_set_drvdata(pci, card); 2430 2393 dev++; 2431 2394 return 0; 2432 }2433 2434 static void snd_audiopci_remove(struct pci_dev *pci)2435 {2436 snd_card_free(pci_get_drvdata(pci));2437 2395 } 2438 2396 … … 2441 2399 .id_table = snd_audiopci_ids, 2442 2400 .probe = snd_audiopci_probe, 2443 .remove = snd_audiopci_remove,2444 2401 .driver = { 2445 2402 .pm = SND_ENSONIQ_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/es1938.cr697 r710 1557 1557 #endif /* SUPPORT_JOYSTICK */ 1558 1558 1559 static int snd_es1938_free(struct es1938 *chip) 1560 { 1559 static void snd_es1938_free(struct snd_card *card) 1560 { 1561 struct es1938 *chip = card->private_data; 1562 1561 1563 /* disable irqs */ 1562 1564 outb(0x00, SLIO_REG(chip, IRQCONTROL)); … … 1568 1570 if (chip->irq >= 0) 1569 1571 free_irq(chip->irq, chip); 1570 pci_release_regions(chip->pci);1571 pci_disable_device(chip->pci);1572 kfree(chip);1573 return 0;1574 }1575 1576 static int snd_es1938_dev_free(struct snd_device *device)1577 {1578 struct es1938 *chip = device->device_data;1579 return snd_es1938_free(chip);1580 1572 } 1581 1573 1582 1574 static int snd_es1938_create(struct snd_card *card, 1583 struct pci_dev *pci, 1584 struct es1938 **rchip) 1585 { 1586 struct es1938 *chip; 1575 struct pci_dev *pci) 1576 { 1577 struct es1938 *chip = card->private_data; 1587 1578 int err; 1588 static const struct snd_device_ops ops = {1589 .dev_free = snd_es1938_dev_free,1590 };1591 1592 *rchip = NULL;1593 1579 1594 1580 /* enable PCI device */ 1595 err = pci _enable_device(pci);1581 err = pcim_enable_device(pci); 1596 1582 if (err < 0) 1597 1583 return err; … … 1600 1586 dev_err(card->dev, 1601 1587 "architecture does not support 24bit PCI busmaster DMA\n"); 1602 pci_disable_device(pci);1603 1588 return -ENXIO; 1604 1589 } 1605 1590 1606 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1607 if (chip == NULL) {1608 pci_disable_device(pci);1609 return -ENOMEM;1610 }1611 1591 spin_lock_init(&chip->reg_lock); 1612 1592 spin_lock_init(&chip->mixer_lock); … … 1615 1595 chip->irq = -1; 1616 1596 err = pci_request_regions(pci, "ESS Solo-1"); 1617 if (err < 0) { 1618 kfree(chip); 1619 pci_disable_device(pci); 1597 if (err < 0) 1620 1598 return err; 1621 }1622 1599 chip->io_port = pci_resource_start(pci, 0); 1623 1600 chip->sb_port = pci_resource_start(pci, 1); … … 1625 1602 chip->mpu_port = pci_resource_start(pci, 3); 1626 1603 chip->game_port = pci_resource_start(pci, 4); 1604 /* still use non-managed irq handler as it's re-acquired at PM resume */ 1627 1605 if (request_irq(pci->irq, snd_es1938_interrupt, IRQF_SHARED, 1628 1606 KBUILD_MODNAME, chip)) { 1629 1607 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 1630 snd_es1938_free(chip);1631 1608 return -EBUSY; 1632 1609 } 1633 1610 chip->irq = pci->irq; 1634 1611 card->sync_irq = chip->irq; 1612 card->private_free = snd_es1938_free; 1635 1613 dev_dbg(card->dev, 1636 1614 "create: io: 0x%lx, sb: 0x%lx, vc: 0x%lx, mpu: 0x%lx, game: 0x%lx\n", … … 1640 1618 1641 1619 snd_es1938_chip_init(chip); 1642 1643 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1644 if (err < 0) {1645 snd_es1938_free(chip);1646 return err;1647 }1648 1649 *rchip = chip;1650 1620 return 0; 1651 1621 } … … 1798 1768 } 1799 1769 1800 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,1801 0, &card);1770 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1771 sizeof(*chip), &card); 1802 1772 if (err < 0) 1803 1773 return err; 1804 for (idx = 0; idx < 5; idx++) { 1774 chip = card->private_data; 1775 1776 for (idx = 0; idx < 5; idx++) 1805 1777 if (pci_resource_start(pci, idx) == 0 || 1806 !(pci_resource_flags(pci, idx) & IORESOURCE_IO)) { 1807 snd_card_free(card); 1808 return -ENODEV; 1809 } 1810 } 1811 err = snd_es1938_create(card, pci, &chip); 1812 if (err < 0) { 1813 snd_card_free(card); 1778 !(pci_resource_flags(pci, idx) & IORESOURCE_IO)) 1779 return -ENODEV; 1780 1781 err = snd_es1938_create(card, pci); 1782 if (err < 0) 1814 1783 return err; 1815 }1816 card->private_data = chip;1817 1784 1818 1785 strcpy(card->driver, "ES1938"); … … 1824 1791 1825 1792 err = snd_es1938_new_pcm(chip, 0); 1826 if (err < 0) { 1827 snd_card_free(card); 1793 if (err < 0) 1828 1794 return err; 1829 }1830 1795 err = snd_es1938_mixer(chip); 1831 if (err < 0) { 1832 snd_card_free(card); 1796 if (err < 0) 1833 1797 return err; 1834 }1835 1798 if (snd_opl3_create(card, 1836 1799 SLSB_REG(chip, FMLOWADDR), … … 1841 1804 } else { 1842 1805 err = snd_opl3_timer_new(opl3, 0, 1); 1843 if (err < 0) { 1844 snd_card_free(card); 1806 if (err < 0) 1845 1807 return err; 1846 }1847 1808 err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); 1848 if (err < 0) { 1849 snd_card_free(card); 1809 if (err < 0) 1850 1810 return err; 1851 }1852 1811 } 1853 1812 if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, … … 1865 1824 1866 1825 err = snd_card_register(card); 1867 if (err < 0) { 1868 snd_card_free(card); 1826 if (err < 0) 1869 1827 return err; 1870 }1871 1828 1872 1829 pci_set_drvdata(pci, card); 1873 1830 dev++; 1874 1831 return 0; 1875 }1876 1877 static void snd_es1938_remove(struct pci_dev *pci)1878 {1879 snd_card_free(pci_get_drvdata(pci));1880 1832 } 1881 1833 … … 1884 1836 .id_table = snd_es1938_ids, 1885 1837 .probe = snd_es1938_probe, 1886 .remove = snd_es1938_remove,1887 1838 .driver = { 1888 1839 .pm = ES1938_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/es1968.cr697 r710 2479 2479 return -ENODEV; 2480 2480 2481 #ifndef TARGET_OS2 2482 r = devm_request_region(&chip->pci->dev, JOYSTICK_ADDR, 8, 2483 "ES1968 gameport"); 2484 #else 2481 2485 r = request_region(JOYSTICK_ADDR, 8, "ES1968 gameport"); 2486 #endif 2482 2487 if (!r) 2483 2488 return -EBUSY; … … 2487 2492 dev_err(chip->card->dev, 2488 2493 "cannot allocate memory for gameport\n"); 2489 release_and_free_resource(r);2490 2494 return -ENOMEM; 2491 2495 } … … 2498 2502 gameport_set_dev_parent(gp, &chip->pci->dev); 2499 2503 gp->io = JOYSTICK_ADDR; 2500 gameport_set_port_data(gp, r);2501 2504 2502 2505 gameport_register_port(gp); … … 2508 2511 { 2509 2512 if (chip->gameport) { 2510 struct resource *r = gameport_get_port_data(chip->gameport);2511 2512 2513 gameport_unregister_port(chip->gameport); 2513 2514 chip->gameport = NULL; 2514 2515 release_and_free_resource(r);2516 2515 } 2517 2516 } … … 2527 2526 int err; 2528 2527 2529 input_dev = input_allocate_device();2528 input_dev = devm_input_allocate_device(&chip->pci->dev); 2530 2529 if (!input_dev) 2531 2530 return -ENOMEM; … … 2547 2546 2548 2547 err = input_register_device(input_dev); 2549 if (err) { 2550 input_free_device(input_dev); 2548 if (err) 2551 2549 return err; 2552 }2553 2550 2554 2551 chip->input_dev = input_dev; … … 2634 2631 #endif 2635 2632 2636 static int snd_es1968_free(struct es1968 *chip) 2637 { 2633 static void snd_es1968_free(struct snd_card *card) 2634 { 2635 struct es1968 *chip = card->private_data; 2636 2638 2637 cancel_work_sync(&chip->hwvol_work); 2639 #ifdef CONFIG_SND_ES1968_INPUT2640 if (chip->input_dev)2641 input_unregister_device(chip->input_dev);2642 #endif2643 2638 2644 2639 if (chip->io_port) { … … 2652 2647 #endif 2653 2648 2654 if (chip->irq >= 0)2655 free_irq(chip->irq, chip);2656 2649 snd_es1968_free_gameport(chip); 2657 pci_release_regions(chip->pci);2658 pci_disable_device(chip->pci);2659 kfree(chip);2660 return 0;2661 }2662 2663 static int snd_es1968_dev_free(struct snd_device *device)2664 {2665 struct es1968 *chip = device->device_data;2666 return snd_es1968_free(chip);2667 2650 } 2668 2651 … … 2694 2677 int chip_type, 2695 2678 int do_pm, 2696 int radio_nr, 2697 struct es1968 **chip_ret) 2698 { 2699 static const struct snd_device_ops ops = { 2700 .dev_free = snd_es1968_dev_free, 2701 }; 2702 struct es1968 *chip; 2679 int radio_nr) 2680 { 2681 struct es1968 *chip = card->private_data; 2703 2682 int i, err; 2704 2683 2705 *chip_ret = NULL;2706 2707 2684 /* enable PCI device */ 2708 err = pci _enable_device(pci);2685 err = pcim_enable_device(pci); 2709 2686 if (err < 0) 2710 2687 return err; … … 2713 2690 dev_err(card->dev, 2714 2691 "architecture does not support 28bit PCI busmaster DMA\n"); 2715 pci_disable_device(pci);2716 2692 return -ENXIO; 2717 }2718 2719 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2720 if (! chip) {2721 pci_disable_device(pci);2722 return -ENOMEM;2723 2693 } 2724 2694 … … 2739 2709 2740 2710 err = pci_request_regions(pci, "ESS Maestro"); 2741 if (err < 0) { 2742 kfree(chip); 2743 pci_disable_device(pci); 2711 if (err < 0) 2744 2712 return err; 2745 }2746 2713 chip->io_port = pci_resource_start(pci, 0); 2714 #ifndef TARGET_OS2 2715 if (devm_request_irq(&pci->dev, pci->irq, snd_es1968_interrupt, 2716 IRQF_SHARED, KBUILD_MODNAME, chip)) { 2717 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2718 return -EBUSY; 2719 } 2720 #else 2747 2721 if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_SHARED, 2748 2722 KBUILD_MODNAME, chip)) { … … 2751 2725 return -EBUSY; 2752 2726 } 2727 #endif 2753 2728 chip->irq = pci->irq; 2754 2729 card->sync_irq = chip->irq; 2730 card->private_free = snd_es1968_free; 2755 2731 2756 2732 /* Clear Maestro_map */ … … 2786 2762 snd_es1968_chip_init(chip); 2787 2763 2788 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2789 if (err < 0) {2790 snd_es1968_free(chip);2791 return err;2792 }2793 2794 2764 #ifdef CONFIG_SND_ES1968_RADIO 2795 2765 /* don't play with GPIOs on laptops */ 2796 2766 if (chip->pci->subsystem_vendor != 0x125d) 2797 goto no_radio;2767 return 0; 2798 2768 err = v4l2_device_register(&pci->dev, &chip->v4l2_dev); 2799 if (err < 0) { 2800 snd_es1968_free(chip); 2769 if (err < 0) 2801 2770 return err; 2802 }2803 2771 chip->tea.v4l2_dev = &chip->v4l2_dev; 2804 2772 chip->tea.private_data = chip; … … 2816 2784 } 2817 2785 } 2818 no_radio: 2819 #endif 2820 2821 *chip_ret = chip; 2822 2786 #endif 2823 2787 return 0; 2824 2788 } … … 2843 2807 } 2844 2808 2845 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2846 0, &card);2809 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2810 sizeof(*chip), &card); 2847 2811 if (err < 0) 2848 2812 return err; 2813 chip = card->private_data; 2849 2814 2850 2815 if (total_bufsize[dev] < 128) … … 2858 2823 pci_id->driver_data, 2859 2824 use_pm[dev], 2860 radio_nr[dev], 2861 &chip); 2862 if (err < 0) { 2863 snd_card_free(card); 2825 radio_nr[dev]); 2826 if (err < 0) 2864 2827 return err; 2865 }2866 card->private_data = chip;2867 2828 2868 2829 switch (chip->type) { … … 2882 2843 2883 2844 err = snd_es1968_pcm(chip, 0); 2884 if (err < 0) { 2885 snd_card_free(card); 2845 if (err < 0) 2886 2846 return err; 2887 }2888 2847 2889 2848 err = snd_es1968_mixer(chip); 2890 if (err < 0) { 2891 snd_card_free(card); 2849 if (err < 0) 2892 2850 return err; 2893 }2894 2851 2895 2852 if (enable_mpu[dev] == 2) { … … 2934 2891 2935 2892 err = snd_card_register(card); 2936 if (err < 0) { 2937 snd_card_free(card); 2893 if (err < 0) 2938 2894 return err; 2939 }2940 2895 pci_set_drvdata(pci, card); 2941 2896 dev++; 2942 2897 return 0; 2943 }2944 2945 static void snd_es1968_remove(struct pci_dev *pci)2946 {2947 snd_card_free(pci_get_drvdata(pci));2948 2898 } 2949 2899 … … 2952 2902 .id_table = snd_es1968_ids, 2953 2903 .probe = snd_es1968_probe, 2954 .remove = snd_es1968_remove,2955 2904 .driver = { 2956 2905 .pm = ES1968_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/fm801.cr697 r710 1037 1037 }; 1038 1038 1039 static void snd_fm801_mixer_free_ac97_bus(struct snd_ac97_bus *bus)1040 {1041 struct fm801 *chip = bus->private_data;1042 chip->ac97_bus = NULL;1043 }1044 1045 static void snd_fm801_mixer_free_ac97(struct snd_ac97 *ac97)1046 {1047 struct fm801 *chip = ac97->private_data;1048 if (ac97->num == 0) {1049 chip->ac97 = NULL;1050 } else {1051 chip->ac97_sec = NULL;1052 }1053 }1054 1055 1039 static int snd_fm801_mixer(struct fm801 *chip) 1056 1040 { … … 1066 1050 if (err < 0) 1067 1051 return err; 1068 chip->ac97_bus->private_free = snd_fm801_mixer_free_ac97_bus;1069 1052 1070 1053 memset(&ac97, 0, sizeof(ac97)); 1071 1054 ac97.private_data = chip; 1072 ac97.private_free = snd_fm801_mixer_free_ac97;1073 1055 err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97); 1074 1056 if (err < 0) … … 1186 1168 } 1187 1169 1188 static int snd_fm801_free(struct fm801 *chip) 1189 { 1170 static void snd_fm801_free(struct snd_card *card) 1171 { 1172 struct fm801 *chip = card->private_data; 1190 1173 unsigned short cmdw; 1191 1192 if (chip->irq < 0)1193 goto __end_hw;1194 1174 1195 1175 /* interrupt setup - mask everything */ … … 1198 1178 fm801_writew(chip, IRQ_MASK, cmdw); 1199 1179 1200 devm_free_irq(chip->dev, chip->irq, chip);1201 1202 __end_hw:1203 1180 #ifdef CONFIG_SND_FM801_TEA575X_BOOL 1204 1181 if (!(chip->tea575x_tuner & TUNER_DISABLED)) { … … 1207 1184 } 1208 1185 #endif 1209 return 0; 1210 } 1211 1212 static int snd_fm801_dev_free(struct snd_device *device) 1213 { 1214 struct fm801 *chip = device->device_data; 1215 return snd_fm801_free(chip); 1216 } 1186 } 1187 1217 1188 1218 1189 static int snd_fm801_create(struct snd_card *card, 1219 1190 struct pci_dev *pci, 1220 1191 int tea575x_tuner, 1221 int radio_nr, 1222 struct fm801 **rchip) 1223 { 1224 struct fm801 *chip; 1192 int radio_nr) 1193 { 1194 struct fm801 *chip = card->private_data; 1225 1195 int err; 1226 static const struct snd_device_ops ops = { 1227 .dev_free = snd_fm801_dev_free, 1228 }; 1229 1230 *rchip = NULL; 1196 1231 1197 #ifndef TARGET_OS2 1232 1198 err = pcim_enable_device(pci); 1233 1199 if (err < 0) 1234 1200 return err; 1235 chip = devm_kzalloc(&pci->dev, sizeof(*chip), GFP_KERNEL);1236 1201 #else 1237 1202 if ((err = pci_enable_device(pci)) < 0) 1238 1203 return err; 1239 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1240 1204 #endif 1241 if (chip == NULL)1242 return -ENOMEM;1243 1205 spin_lock_init(&chip->reg_lock); 1244 1206 chip->card = card; … … 1277 1239 #endif 1278 1240 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 1279 snd_fm801_free(chip);1280 1241 return -EBUSY; 1281 1242 } … … 1285 1246 } 1286 1247 1248 card->private_free = snd_fm801_free; 1287 1249 snd_fm801_chip_init(chip); 1288 1289 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1290 if (err < 0) {1291 snd_fm801_free(chip);1292 return err;1293 }1294 1250 1295 1251 #ifdef CONFIG_SND_FM801_TEA575X_BOOL 1296 1252 err = v4l2_device_register(&pci->dev, &chip->v4l2_dev); 1297 if (err < 0) { 1298 snd_fm801_free(chip); 1299 return err; 1300 } 1253 if (err < 0) 1254 return err; 1301 1255 chip->tea.v4l2_dev = &chip->v4l2_dev; 1302 1256 chip->tea.radio_nr = radio_nr; … … 1308 1262 if (snd_tea575x_init(&chip->tea, THIS_MODULE)) { 1309 1263 dev_err(card->dev, "TEA575x radio not found\n"); 1310 snd_fm801_free(chip);1311 1264 return -ENODEV; 1312 1265 } … … 1336 1289 } 1337 1290 #endif 1338 1339 *rchip = chip;1340 1291 return 0; 1341 1292 } … … 1357 1308 } 1358 1309 1359 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1360 0, &card); 1361 if (err < 0) 1362 return err; 1363 err = snd_fm801_create(card, pci, tea575x_tuner[dev], radio_nr[dev], &chip); 1364 if (err < 0) { 1365 snd_card_free(card); 1366 return err; 1367 } 1368 card->private_data = chip; 1310 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1311 sizeof(*chip), &card); 1312 if (err < 0) 1313 return err; 1314 chip = card->private_data; 1315 err = snd_fm801_create(card, pci, tea575x_tuner[dev], radio_nr[dev]); 1316 if (err < 0) 1317 return err; 1369 1318 1370 1319 strcpy(card->driver, "FM801"); … … 1378 1327 1379 1328 err = snd_fm801_pcm(chip, 0); 1380 if (err < 0) { 1381 snd_card_free(card); 1382 return err; 1383 } 1329 if (err < 0) 1330 return err; 1384 1331 err = snd_fm801_mixer(chip); 1385 if (err < 0) { 1386 snd_card_free(card); 1387 return err; 1388 } 1332 if (err < 0) 1333 return err; 1389 1334 err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801, 1390 1335 chip->port + FM801_MPU401_DATA, … … 1392 1337 MPU401_INFO_IRQ_HOOK, 1393 1338 -1, &chip->rmidi); 1394 if (err < 0) { 1395 snd_card_free(card); 1396 return err; 1397 } 1339 if (err < 0) 1340 return err; 1398 1341 err = snd_opl3_create(card, chip->port + FM801_OPL3_BANK0, 1399 1342 chip->port + FM801_OPL3_BANK1, 1400 1343 OPL3_HW_OPL3_FM801, 1, &opl3); 1401 if (err < 0) { 1402 snd_card_free(card); 1403 return err; 1404 } 1344 if (err < 0) 1345 return err; 1405 1346 err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); 1406 if (err < 0) { 1407 snd_card_free(card); 1408 return err; 1409 } 1347 if (err < 0) 1348 return err; 1410 1349 1411 1350 __fm801_tuner_only: 1412 1351 err = snd_card_register(card); 1413 if (err < 0) { 1414 snd_card_free(card); 1415 return err; 1416 } 1352 if (err < 0) 1353 return err; 1417 1354 pci_set_drvdata(pci, card); 1418 1355 dev++; 1419 1356 return 0; 1420 }1421 1422 static void snd_card_fm801_remove(struct pci_dev *pci)1423 {1424 snd_card_free(pci_get_drvdata(pci));1425 1357 } 1426 1358 … … 1492 1424 .id_table = snd_fm801_ids, 1493 1425 .probe = snd_card_fm801_probe, 1494 .remove = snd_card_fm801_remove,1495 1426 .driver = { 1496 1427 .pm = SND_FM801_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_auto_parser.cr693 r710 976 976 * 977 977 * The function tries to find the matching model name at first, if given. 978 * If the model string contains the SSID alias, try to look up with the given 979 * alias ID. 978 980 * If nothing matched, try to look up the PCI SSID. 979 981 * If still nothing matched, try to look up the codec SSID. … … 987 989 int id = HDA_FIXUP_ID_NOT_SET; 988 990 const char *name = NULL; 991 const char *type = NULL; 992 int vendor, device; 989 993 990 994 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) … … 993 997 /* when model=nofixup is given, don't pick up any fixups */ 994 998 if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { 995 codec->fixup_list = NULL; 996 codec->fixup_name = NULL; 997 codec->fixup_id = HDA_FIXUP_ID_NO_FIXUP; 999 id = HDA_FIXUP_ID_NO_FIXUP; 1000 fixlist = NULL; 998 1001 codec_dbg(codec, "%s: picked no fixup (nofixup specified)\n", 999 1002 codec->core.chip_name); 1000 return; 1001 } 1002 1003 goto found; 1004 } 1005 1006 /* match with the model name string */ 1003 1007 if (codec->modelname && models) { 1004 1008 while (models->name) { 1005 1009 if (!strcmp(codec->modelname, models->name)) { 1006 codec->fixup_id = models->id; 1007 codec->fixup_name = models->name; 1008 codec->fixup_list = fixlist; 1010 id = models->id; 1011 name = models->name; 1009 1012 codec_dbg(codec, "%s: picked fixup %s (model specified)\n", 1010 1013 codec->core.chip_name, codec->fixup_name); 1011 return;1014 goto found; 1012 1015 } 1013 1016 models++; 1014 1017 } 1015 1018 } 1016 if (quirk) { 1017 q = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1019 1020 if (!quirk) 1021 return; 1022 1023 /* match with the SSID alias given by the model string "XXXX:YYYY" */ 1024 if (codec->modelname && 1025 sscanf(codec->modelname, "%04x:%04x", &vendor, &device) == 2) { 1026 q = snd_pci_quirk_lookup_id(vendor, device, quirk); 1018 1027 if (q) { 1019 id = q->value; 1028 type = "alias SSID"; 1029 goto found_device; 1030 } 1031 } 1032 1033 /* match with the PCI SSID */ 1034 q = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1035 if (q) { 1036 type = "PCI SSID"; 1037 goto found_device; 1038 } 1039 1040 /* match with the codec SSID */ 1041 q = snd_pci_quirk_lookup_id(codec->core.subsystem_id >> 16, 1042 codec->core.subsystem_id & 0xffff, 1043 quirk); 1044 if (q) { 1045 type = "codec SSID"; 1046 goto found_device; 1047 } 1048 1049 return; /* no matching */ 1050 1051 found_device: 1052 id = q->value; 1020 1053 #ifdef CONFIG_SND_DEBUG_VERBOSE 1021 name = q->name; 1022 codec_dbg(codec, "%s: picked fixup %s (PCI SSID%s)\n", 1023 codec->core.chip_name, name, q->subdevice_mask ? "" : " - vendor generic"); 1054 name = q->name; 1024 1055 #endif 1025 } 1026 } 1027 if (id < 0 && quirk) { 1028 for (q = quirk; q->subvendor || q->subdevice; q++) { 1029 unsigned int vendorid = 1030 q->subdevice | (q->subvendor << 16); 1031 unsigned int mask = 0xffff0000 | q->subdevice_mask; 1032 if ((codec->core.subsystem_id & mask) == (vendorid & mask)) { 1033 id = q->value; 1034 #ifdef CONFIG_SND_DEBUG_VERBOSE 1035 name = q->name; 1036 codec_dbg(codec, "%s: picked fixup %s (codec SSID)\n", 1037 codec->core.chip_name, name); 1038 #endif 1039 break; 1040 } 1041 } 1042 } 1043 1056 codec_dbg(codec, "%s: picked fixup %s for %s %04x:%04x\n", 1057 codec->core.chip_name, name ? name : "", 1058 type, q->subvendor, q->subdevice); 1059 found: 1044 1060 codec->fixup_id = id; 1045 if (id >= 0) { 1046 codec->fixup_list = fixlist; 1047 codec->fixup_name = name; 1048 } 1061 codec->fixup_list = fixlist; 1062 codec->fixup_name = name; 1049 1063 } 1050 1064 EXPORT_SYMBOL_GPL(snd_hda_pick_fixup); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_bind.cr697 r710 168 168 static void hda_codec_driver_shutdown(struct device *dev) 169 169 { 170 struct hda_codec *codec = dev_to_hda_codec(dev); 171 172 if (!pm_runtime_suspended(dev)) { 173 if (codec->patch_ops.reboot_notify) 174 codec->patch_ops.reboot_notify(codec); 175 snd_hda_codec_display_power(codec, false); 176 } 170 snd_hda_codec_shutdown(dev_to_hda_codec(dev)); 177 171 } 178 172 … … 309 303 int err; 310 304 305 if (codec->configured) 306 return 0; 307 311 308 if (is_generic_config(codec)) 312 309 codec->probe_id = HDA_CODEC_ID_GENERIC; … … 314 311 codec->probe_id = 0; 315 312 316 err = snd_hdac_device_register(&codec->core); 317 if (err < 0) 318 return err; 313 if (!device_is_registered(&codec->core.dev)) { 314 err = snd_hdac_device_register(&codec->core); 315 if (err < 0) 316 return err; 317 } 319 318 320 319 if (!codec->preset) … … 323 322 err = codec_bind_generic(codec); 324 323 if (err < 0) { 325 codec_ err(codec, "Unable to bind the codec\n");326 goto error;324 codec_dbg(codec, "Unable to bind the codec\n"); 325 return err; 327 326 } 328 327 } 329 328 330 return 0; 331 332 error: 333 snd_hdac_device_unregister(&codec->core); 334 return err; 329 codec->configured = 1; 330 return 0; 335 331 } 336 332 EXPORT_SYMBOL_GPL(snd_hda_codec_configure); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_codec.cr697 r710 802 802 remove_conn_list(codec); 803 803 snd_hdac_regmap_exit(&codec->core); 804 codec->configured = 0; 804 805 } 805 806 EXPORT_SYMBOL_GPL(snd_hda_codec_cleanup_for_unbind); … … 2998 2999 NULL) 2999 3000 }; 3001 3002 /* suspend the codec at shutdown; called from driver's shutdown callback */ 3003 void snd_hda_codec_shutdown(struct hda_codec *codec) 3004 { 3005 struct hda_pcm *cpcm; 3006 3007 list_for_each_entry(cpcm, &codec->pcm_list_head, list, struct hda_pcm) 3008 snd_pcm_suspend_all(cpcm->pcm); 3009 3010 pm_runtime_force_suspend(hda_codec_dev(codec)); 3011 pm_runtime_disable(hda_codec_dev(codec)); 3012 } 3000 3013 3001 3014 /* 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_controller.cr693 r710 26 26 #include <sound/initval.h> 27 27 #include "hda_controller.h" 28 #include "hda_local.h" 28 29 29 30 #ifndef TARGET_OS2 … … 690 691 } 691 692 692 #ifndef TARGET_OS2693 static int azx_pcm_mmap(struct snd_pcm_substream *substream,694 struct vm_area_struct *area)695 {696 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);697 struct azx *chip = apcm->chip;698 if (chip->ops->pcm_mmap_prepare)699 chip->ops->pcm_mmap_prepare(substream, area);700 return snd_pcm_lib_default_mmap(substream, area);701 }702 #else703 #define azx_pcm_mmap NULL704 #endif705 706 693 static const struct snd_pcm_ops azx_pcm_ops = { 707 694 .open = azx_pcm_open, … … 713 700 .pointer = azx_pcm_pointer, 714 701 .get_time_info = azx_get_time_info, 715 .mmap = azx_pcm_mmap,716 702 }; 717 703 … … 778 764 size = MAX_PREALLOC_SIZE; 779 765 if (chip->uc_buffer) 780 type = SNDRV_DMA_TYPE_DEV_ UC_SG;766 type = SNDRV_DMA_TYPE_DEV_WC_SG; 781 767 snd_pcm_set_managed_buffer_all(pcm, type, chip->card->dev, 782 768 size, MAX_PREALLOC_SIZE); … … 1293 1279 { 1294 1280 struct hda_codec *codec, *next; 1295 1296 /* use _safe version here since snd_hda_codec_configure() deregisters 1297 * the device upon error and deletes itself from the bus list. 1298 */ 1299 list_for_each_codec_safe(codec, next, &chip->bus) { 1300 snd_hda_codec_configure(codec); 1301 } 1302 1303 if (!azx_bus(chip)->num_codecs) 1304 return -ENODEV; 1305 return 0; 1281 int success = 0; 1282 1283 list_for_each_codec(codec, &chip->bus) { 1284 if (!snd_hda_codec_configure(codec)) 1285 success++; 1286 } 1287 1288 if (success) { 1289 /* unregister failed codecs if any codec has been probed */ 1290 list_for_each_codec_safe(codec, next, &chip->bus) { 1291 if (!codec->configured) { 1292 codec_err(codec, "Unable to configure, disabling\n"); 1293 snd_hdac_device_unregister(&codec->core); 1294 } 1295 } 1296 } 1297 1298 return success ? 0 : -ENODEV; 1306 1299 } 1307 1300 EXPORT_SYMBOL_GPL(azx_codec_configure); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_controller.hr629 r710 42 42 #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */ 43 43 #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */ 44 /* 27 unused */44 #define AZX_DCAPS_RETRY_PROBE (1 << 27) /* retry probe if no codec is configured */ 45 45 #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28) /* CORBRP clears itself after reset */ 46 46 #define AZX_DCAPS_NO_MSI64 (1 << 29) /* Stick to 32-bit MSIs */ … … 75 75 /* Disable msi if supported, PCI only */ 76 76 int (*disable_msi_reset_irq)(struct azx *); 77 void (*pcm_mmap_prepare)(struct snd_pcm_substream *substream,78 struct vm_area_struct *area);79 77 /* Check if current position is acceptable */ 80 78 int (*position_check)(struct azx *chip, struct azx_dev *azx_dev); … … 142 140 unsigned int uc_buffer:1; /* non-cached pages for stream buffers */ 143 141 unsigned int align_buffer_size:1; 144 unsigned int region_requested:1;145 142 unsigned int disabled:1; /* disabled by vga_switcheroo */ 146 143 unsigned int pm_prepared:1; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_generic.cr697 r710 6016 6016 EXPORT_SYMBOL_GPL(snd_hda_gen_free); 6017 6017 6018 /**6019 * snd_hda_gen_reboot_notify - Make codec enter D3 before rebooting6020 * @codec: the HDA codec6021 *6022 * This can be put as patch_ops reboot_notify function.6023 */6024 void snd_hda_gen_reboot_notify(struct hda_codec *codec)6025 {6026 /* Make the codec enter D3 to avoid spurious noises from the internal6027 * speaker during (and after) reboot6028 */6029 snd_hda_codec_set_power_to_all(codec, codec->core.afg, AC_PWRST_D3);6030 snd_hda_codec_write(codec, codec->core.afg, 0,6031 AC_VERB_SET_POWER_STATE, AC_PWRST_D3);6032 msleep(10);6033 }6034 EXPORT_SYMBOL_GPL(snd_hda_gen_reboot_notify);6035 6036 6018 #ifdef CONFIG_PM 6037 6019 /** … … 6061 6043 .free = snd_hda_gen_free, 6062 6044 .unsol_event = snd_hda_jack_unsol_event, 6063 .reboot_notify = snd_hda_gen_reboot_notify,6064 6045 #ifdef CONFIG_PM 6065 6046 .check_power_status = snd_hda_gen_check_power_status, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_generic.hr694 r710 325 325 int snd_hda_gen_build_controls(struct hda_codec *codec); 326 326 int snd_hda_gen_build_pcms(struct hda_codec *codec); 327 void snd_hda_gen_reboot_notify(struct hda_codec *codec);328 327 329 328 /* standard jack event callbacks */ 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_intel.cr697 r710 326 326 #define AZX_DCAPS_PRESET_AMD_SB \ 327 327 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_AMD_WORKAROUND |\ 328 AZX_DCAPS_SNOOP_TYPE(ATI) | AZX_DCAPS_PM_RUNTIME) 328 AZX_DCAPS_SNOOP_TYPE(ATI) | AZX_DCAPS_PM_RUNTIME |\ 329 AZX_DCAPS_RETRY_PROBE) 329 330 330 331 /* quirks for Nvidia */ … … 1407 1408 if (bus->irq >= 0) 1408 1409 free_irq(bus->irq, (void*)chip); 1409 if (chip->msi)1410 pci_disable_msi(chip->pci);1411 #ifdef TARGET_OS21412 iounmap((void *)bus->remap_addr);1413 #else1414 iounmap(bus->remap_addr);1415 #endif1416 1410 1417 1411 azx_free_stream_pages(chip); … … 1419 1413 snd_hdac_bus_exit(bus); 1420 1414 1421 if (chip->region_requested)1422 pci_release_regions(chip->pci);1423 1424 pci_disable_device(chip->pci);1425 1415 #ifdef CONFIG_SND_HDA_PATCH_LOADER 1426 1416 release_firmware(chip->fw); … … 1768 1758 static void azx_probe_work(struct work_struct *work) 1769 1759 { 1770 struct hda_intel *hda = container_of(work, struct hda_intel, probe_work );1760 struct hda_intel *hda = container_of(work, struct hda_intel, probe_work.work); 1771 1761 azx_probe_continue(&hda->chip); 1772 1762 } … … 1820 1810 hda = kzalloc(sizeof(*hda), GFP_KERNEL); 1821 1811 #endif 1822 if (!hda) { 1823 pci_disable_device(pci); 1824 return -ENOMEM; 1825 } 1812 if (!hda) 1813 return -ENOMEM; 1826 1814 1827 1815 chip = &hda->chip; … … 1859 1847 1860 1848 err = azx_bus_init(chip, model[dev]); 1861 if (err < 0) { 1862 pci_disable_device(pci); 1849 if (err < 0) 1863 1850 return err; 1864 }1865 1851 1866 1852 /* use the non-cached pages in non-snoop mode */ 1867 1853 if (!azx_snoop(chip)) 1868 azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_ UC;1854 azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC; 1869 1855 1870 1856 if (chip->driver_type == AZX_DRIVER_NVIDIA) { … … 1881 1867 1882 1868 /* continue probing in work context as may trigger request module */ 1883 INIT_ WORK(&hda->probe_work, azx_probe_work);1869 INIT_DELAYED_WORK(&hda->probe_work, azx_probe_work); 1884 1870 1885 1871 *rchip = chip; … … 1908 1894 #endif 1909 1895 1896 #ifndef TARGET_OS2 1897 err = pcim_iomap_regions(pci, 1 << 0, "ICH HD audio"); 1898 #else 1910 1899 err = pci_request_regions(pci, "ICH HD audio"); 1900 #endif 1911 1901 if (err < 0) 1912 1902 return err; 1913 chip->region_requested = 1;1914 1903 1915 1904 bus->addr = pci_resource_start(pci, 0); 1905 #ifndef TARGET_OS2 1906 bus->remap_addr = pcim_iomap_table(pci)[0]; 1907 #else 1916 1908 bus->remap_addr = pci_ioremap_bar(pci, 0); 1917 if (bus->remap_addr == NULL) { 1918 dev_err(card->dev, "ioremap error\n"); 1919 return -ENXIO; 1920 } 1921 1909 #endif 1922 1910 if (chip->driver_type == AZX_DRIVER_SKL) 1923 1911 snd_hdac_bus_parse_capabilities(bus); … … 2101 2089 } 2102 2090 2103 static void pcm_mmap_prepare(struct snd_pcm_substream *substream,2104 struct vm_area_struct *area)2105 {2106 #ifdef CONFIG_X862107 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);2108 struct azx *chip = apcm->chip;2109 if (chip->uc_buffer)2110 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);2111 #endif2112 }2113 2114 2091 /* Denylist for skipping the whole probe: 2115 2092 * some HD-audio PCI entries are exposed without any codecs, and such devices … … 2125 2102 static const struct hda_controller_ops pci_hda_ops = { 2126 2103 .disable_msi_reset_irq = disable_msi_reset_irq, 2127 .pcm_mmap_prepare = pcm_mmap_prepare,2128 2104 .position_check = azx_position_check, 2129 2105 }; … … 2219 2195 #else 2220 2196 if (schedule_probe) 2221 schedule_ work(&hda->probe_work);2197 schedule_delayed_work(&hda->probe_work, 0); 2222 2198 #endif 2223 2199 … … 2306 2282 int err; 2307 2283 2284 if (chip->disabled || hda->init_failed) 2285 return -EIO; 2286 if (hda->probe_retry) 2287 goto probe_retry; 2288 2308 2289 to_hda_bus(bus)->bus_probing = 1; 2309 2290 hda->probe_continued = 1; … … 2367 2348 } 2368 2349 #endif 2350 2351 probe_retry: 2369 2352 if (bus->codec_mask && !(probe_only[dev] & 1)) { 2370 2353 err = azx_codec_configure(chip); 2371 if (err < 0) 2354 if (err) { 2355 if ((chip->driver_caps & AZX_DCAPS_RETRY_PROBE) && 2356 ++hda->probe_retry < 60) { 2357 schedule_delayed_work(&hda->probe_work, 2358 msecs_to_jiffies(1000)); 2359 return 0; /* keep things up */ 2360 } 2361 dev_err(chip->card->dev, "Cannot probe codecs, giving up\n"); 2372 2362 goto out_free; 2363 } 2373 2364 } 2374 2365 … … 2400 2391 complete_all(&hda->probe_wait); 2401 2392 to_hda_bus(bus)->bus_probing = 0; 2393 hda->probe_retry = 0; 2402 2394 return 0; 2403 2395 } … … 2425 2417 */ 2426 2418 device_unlock(&pci->dev); 2427 cancel_ work_sync(&hda->probe_work);2419 cancel_delayed_work_sync(&hda->probe_work); 2428 2420 device_lock(&pci->dev); 2429 2421 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_intel.hr615 r710 15 15 /* sync probing */ 16 16 struct completion probe_wait; 17 struct work_structprobe_work;17 struct delayed_work probe_work; 18 18 19 19 /* card list (for power_save trigger) */ … … 31 31 32 32 bool need_i915_power:1; /* the hda controller needs i915 power */ 33 34 int probe_retry; /* being probe-retry */ 33 35 }; 34 36 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/hda_local.hr697 r710 630 630 unsigned int power_state); 631 631 632 void snd_hda_codec_shutdown(struct hda_codec *codec); 633 632 634 /* 633 635 * AMP control callbacks 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_analog.cr648 r710 76 76 #endif 77 77 78 78 #ifdef CONFIG_PM 79 79 static void ad198x_power_eapd_write(struct hda_codec *codec, hda_nid_t front, 80 80 hda_nid_t hp) … … 116 116 } 117 117 118 static void ad198x_shutup(struct hda_codec *codec)118 static int ad198x_suspend(struct hda_codec *codec) 119 119 { 120 120 snd_hda_shutup_pins(codec); 121 121 ad198x_power_eapd(codec); 122 }123 124 #ifdef CONFIG_PM125 static int ad198x_suspend(struct hda_codec *codec)126 {127 ad198x_shutup(codec);128 122 return 0; 129 123 } … … 172 166 .suspend = ad198x_suspend, 173 167 #endif 174 .reboot_notify = ad198x_shutup,175 168 }; 176 169 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_ca0132.cr697 r710 2275 2275 { 2276 2276 struct ca0132_spec *spec = codec->spec; 2277 int status = -1;2277 int status; 2278 2278 unsigned int scp_send_size = 0; 2279 2279 unsigned int total_size; … … 9778 9778 } 9779 9779 9780 static void ca0132_reboot_notify(struct hda_codec *codec)9781 {9782 codec->patch_ops.free(codec);9783 }9784 9785 9780 #ifdef CONFIG_PM 9786 9781 static int ca0132_suspend(struct hda_codec *codec) … … 9802 9797 .suspend = ca0132_suspend, 9803 9798 #endif 9804 .reboot_notify = ca0132_reboot_notify,9805 9799 }; 9806 9800 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_cirrus.cr694 r710 10 10 #include <linux/module.h> 11 11 #include <sound/core.h> 12 #include <linux/mutex.h>13 12 #include <linux/pci.h> 14 13 #include <sound/tlv.h> … … 26 25 */ 27 26 28 #define CS42L42_HP_CH (2U)29 #define CS42L42_HS_MIC_CH (1U)30 31 27 struct cs_spec { 32 28 struct hda_gen_spec gen; … … 47 43 int (*spdif_sw_put)(struct snd_kcontrol *kcontrol, 48 44 struct snd_ctl_elem_value *ucontrol); 49 50 unsigned int cs42l42_hp_jack_in:1;51 unsigned int cs42l42_mic_jack_in:1;52 unsigned int cs42l42_volume_init:1;53 char cs42l42_hp_volume[CS42L42_HP_CH];54 char cs42l42_hs_mic_volume[CS42L42_HS_MIC_CH];55 56 struct mutex cs8409_i2c_mux;57 58 /* verb exec op override */59 int (*exec_verb)(struct hdac_device *dev, unsigned int cmd,60 unsigned int flags, unsigned int *res);61 45 }; 62 46 … … 570 554 .chain_id = CS420X_GPIO_13, 571 555 }, 572 #if def TARGET_OS2xxx556 #ifndef TARGET_OS2 573 557 [CS420X_MBP81] = { 574 558 .type = HDA_FIXUP_VERBS, … … 1246 1230 } 1247 1231 1248 /* Cirrus Logic CS8409 HDA bridge with1249 * companion codec CS42L421250 */1251 #define CS8409_VENDOR_NID 0x471252 1253 #define CS8409_CS42L42_HP_PIN_NID 0x241254 #define CS8409_CS42L42_SPK_PIN_NID 0x2c1255 #define CS8409_CS42L42_AMIC_PIN_NID 0x341256 #define CS8409_CS42L42_DMIC_PIN_NID 0x441257 #define CS8409_CS42L42_DMIC_ADC_PIN_NID 0x221258 1259 #define CS42L42_HSDET_AUTO_DONE 0x021260 #define CS42L42_HSTYPE_MASK 0x031261 1262 #define CS42L42_JACK_INSERTED 0x0C1263 #define CS42L42_JACK_REMOVED 0x001264 1265 #define GPIO3_INT (1 << 3)1266 #define GPIO4_INT (1 << 4)1267 #define GPIO5_INT (1 << 5)1268 1269 #define CS42L42_I2C_ADDR (0x48 << 1)1270 1271 #define CIR_I2C_ADDR 0x00591272 #define CIR_I2C_DATA 0x005A1273 #define CIR_I2C_CTRL 0x005B1274 #define CIR_I2C_STATUS 0x005C1275 #define CIR_I2C_QWRITE 0x005D1276 #define CIR_I2C_QREAD 0x005E1277 1278 #define CS8409_CS42L42_HP_VOL_REAL_MIN (-63)1279 #define CS8409_CS42L42_HP_VOL_REAL_MAX (0)1280 #define CS8409_CS42L42_AMIC_VOL_REAL_MIN (-97)1281 #define CS8409_CS42L42_AMIC_VOL_REAL_MAX (12)1282 #define CS8409_CS42L42_REG_HS_VOLUME_CHA (0x2301)1283 #define CS8409_CS42L42_REG_HS_VOLUME_CHB (0x2303)1284 #define CS8409_CS42L42_REG_AMIC_VOLUME (0x1D03)1285 1286 struct cs8409_i2c_param {1287 unsigned int addr;1288 unsigned int reg;1289 };1290 1291 struct cs8409_cir_param {1292 unsigned int nid;1293 unsigned int cir;1294 unsigned int coeff;1295 };1296 1297 enum {1298 CS8409_BULLSEYE,1299 CS8409_WARLOCK,1300 CS8409_CYBORG,1301 CS8409_FIXUPS,1302 };1303 1304 static void cs8409_cs42l42_fixups(struct hda_codec *codec,1305 const struct hda_fixup *fix, int action);1306 static int cs8409_cs42l42_exec_verb(struct hdac_device *dev,1307 unsigned int cmd, unsigned int flags, unsigned int *res);1308 1309 /* Dell Inspiron models with cs8409/cs42l42 */1310 static const struct hda_model_fixup cs8409_models[] = {1311 { .id = CS8409_BULLSEYE, .name = "bullseye" },1312 { .id = CS8409_WARLOCK, .name = "warlock" },1313 { .id = CS8409_CYBORG, .name = "cyborg" },1314 {0}1315 };1316 1317 /* Dell Inspiron platforms1318 * with cs8409 bridge and cs42l42 codec1319 */1320 static const struct snd_pci_quirk cs8409_fixup_tbl[] = {1321 SND_PCI_QUIRK(0x1028, 0x0A11, "Bullseye", CS8409_BULLSEYE),1322 SND_PCI_QUIRK(0x1028, 0x0A12, "Bullseye", CS8409_BULLSEYE),1323 SND_PCI_QUIRK(0x1028, 0x0A23, "Bullseye", CS8409_BULLSEYE),1324 SND_PCI_QUIRK(0x1028, 0x0A24, "Bullseye", CS8409_BULLSEYE),1325 SND_PCI_QUIRK(0x1028, 0x0A25, "Bullseye", CS8409_BULLSEYE),1326 SND_PCI_QUIRK(0x1028, 0x0A29, "Bullseye", CS8409_BULLSEYE),1327 SND_PCI_QUIRK(0x1028, 0x0A2A, "Bullseye", CS8409_BULLSEYE),1328 SND_PCI_QUIRK(0x1028, 0x0A2B, "Bullseye", CS8409_BULLSEYE),1329 SND_PCI_QUIRK(0x1028, 0x0AB0, "Warlock", CS8409_WARLOCK),1330 SND_PCI_QUIRK(0x1028, 0x0AB2, "Warlock", CS8409_WARLOCK),1331 SND_PCI_QUIRK(0x1028, 0x0AB1, "Warlock", CS8409_WARLOCK),1332 SND_PCI_QUIRK(0x1028, 0x0AB3, "Warlock", CS8409_WARLOCK),1333 SND_PCI_QUIRK(0x1028, 0x0AB4, "Warlock", CS8409_WARLOCK),1334 SND_PCI_QUIRK(0x1028, 0x0AB5, "Warlock", CS8409_WARLOCK),1335 SND_PCI_QUIRK(0x1028, 0x0AD9, "Warlock", CS8409_WARLOCK),1336 SND_PCI_QUIRK(0x1028, 0x0ADA, "Warlock", CS8409_WARLOCK),1337 SND_PCI_QUIRK(0x1028, 0x0ADB, "Warlock", CS8409_WARLOCK),1338 SND_PCI_QUIRK(0x1028, 0x0ADC, "Warlock", CS8409_WARLOCK),1339 SND_PCI_QUIRK(0x1028, 0x0AF4, "Warlock", CS8409_WARLOCK),1340 SND_PCI_QUIRK(0x1028, 0x0AF5, "Warlock", CS8409_WARLOCK),1341 SND_PCI_QUIRK(0x1028, 0x0A77, "Cyborg", CS8409_CYBORG),1342 SND_PCI_QUIRK(0x1028, 0x0A78, "Cyborg", CS8409_CYBORG),1343 SND_PCI_QUIRK(0x1028, 0x0A79, "Cyborg", CS8409_CYBORG),1344 SND_PCI_QUIRK(0x1028, 0x0A7A, "Cyborg", CS8409_CYBORG),1345 SND_PCI_QUIRK(0x1028, 0x0A7D, "Cyborg", CS8409_CYBORG),1346 SND_PCI_QUIRK(0x1028, 0x0A7E, "Cyborg", CS8409_CYBORG),1347 SND_PCI_QUIRK(0x1028, 0x0A7F, "Cyborg", CS8409_CYBORG),1348 SND_PCI_QUIRK(0x1028, 0x0A80, "Cyborg", CS8409_CYBORG),1349 SND_PCI_QUIRK(0x1028, 0x0ADF, "Cyborg", CS8409_CYBORG),1350 SND_PCI_QUIRK(0x1028, 0x0AE0, "Cyborg", CS8409_CYBORG),1351 SND_PCI_QUIRK(0x1028, 0x0AE1, "Cyborg", CS8409_CYBORG),1352 SND_PCI_QUIRK(0x1028, 0x0AE2, "Cyborg", CS8409_CYBORG),1353 SND_PCI_QUIRK(0x1028, 0x0AE9, "Cyborg", CS8409_CYBORG),1354 SND_PCI_QUIRK(0x1028, 0x0AEA, "Cyborg", CS8409_CYBORG),1355 SND_PCI_QUIRK(0x1028, 0x0AEB, "Cyborg", CS8409_CYBORG),1356 SND_PCI_QUIRK(0x1028, 0x0AEC, "Cyborg", CS8409_CYBORG),1357 SND_PCI_QUIRK(0x1028, 0x0AED, "Cyborg", CS8409_CYBORG),1358 SND_PCI_QUIRK(0x1028, 0x0AEE, "Cyborg", CS8409_CYBORG),1359 SND_PCI_QUIRK(0x1028, 0x0AEF, "Cyborg", CS8409_CYBORG),1360 SND_PCI_QUIRK(0x1028, 0x0AF0, "Cyborg", CS8409_CYBORG),1361 {0} /* terminator */1362 };1363 1364 static const struct hda_verb cs8409_cs42l42_init_verbs[] = {1365 { 0x01, AC_VERB_SET_GPIO_WAKE_MASK, 0x0018 }, /* WAKE from GPIO 3,4 */1366 { 0x47, AC_VERB_SET_PROC_STATE, 0x0001 }, /* Enable VPW processing */1367 { 0x47, AC_VERB_SET_COEF_INDEX, 0x0002 }, /* Configure GPIO 6,7 */1368 { 0x47, AC_VERB_SET_PROC_COEF, 0x0080 }, /* I2C mode */1369 { 0x47, AC_VERB_SET_COEF_INDEX, 0x005b }, /* Set I2C bus speed */1370 { 0x47, AC_VERB_SET_PROC_COEF, 0x0200 }, /* 100kHz I2C_STO = 2 */1371 {0} /* terminator */1372 };1373 1374 static const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {1375 { 0x24, 0x042120f0 }, /* ASP-1-TX */1376 { 0x34, 0x04a12050 }, /* ASP-1-RX */1377 { 0x2c, 0x901000f0 }, /* ASP-2-TX */1378 { 0x44, 0x90a00090 }, /* DMIC-1 */1379 {0} /* terminator */1380 };1381 1382 static const struct hda_fixup cs8409_fixups[] = {1383 [CS8409_BULLSEYE] = {1384 .type = HDA_FIXUP_PINS,1385 .v.pins = cs8409_cs42l42_pincfgs,1386 .chained = true,1387 .chain_id = CS8409_FIXUPS,1388 },1389 [CS8409_WARLOCK] = {1390 .type = HDA_FIXUP_PINS,1391 .v.pins = cs8409_cs42l42_pincfgs,1392 .chained = true,1393 .chain_id = CS8409_FIXUPS,1394 },1395 [CS8409_CYBORG] = {1396 .type = HDA_FIXUP_PINS,1397 .v.pins = cs8409_cs42l42_pincfgs,1398 .chained = true,1399 .chain_id = CS8409_FIXUPS,1400 },1401 [CS8409_FIXUPS] = {1402 .type = HDA_FIXUP_FUNC,1403 .v.func = cs8409_cs42l42_fixups,1404 },1405 };1406 1407 /* Vendor specific HW configuration for CS42L42 */1408 static const struct cs8409_i2c_param cs42l42_init_reg_seq[] = {1409 { 0x1010, 0xB0 },1410 { 0x1D01, 0x00 },1411 { 0x1D02, 0x06 },1412 { 0x1D03, 0x00 },1413 { 0x1107, 0x01 },1414 { 0x1009, 0x02 },1415 { 0x1007, 0x03 },1416 { 0x1201, 0x00 },1417 { 0x1208, 0x13 },1418 { 0x1205, 0xFF },1419 { 0x1206, 0x00 },1420 { 0x1207, 0x20 },1421 { 0x1202, 0x0D },1422 { 0x2A02, 0x02 },1423 { 0x2A03, 0x00 },1424 { 0x2A04, 0x00 },1425 { 0x2A05, 0x02 },1426 { 0x2A06, 0x00 },1427 { 0x2A07, 0x20 },1428 { 0x2A08, 0x02 },1429 { 0x2A09, 0x00 },1430 { 0x2A0A, 0x80 },1431 { 0x2A0B, 0x02 },1432 { 0x2A0C, 0x00 },1433 { 0x2A0D, 0xA0 },1434 { 0x2A01, 0x0C },1435 { 0x2902, 0x01 },1436 { 0x2903, 0x02 },1437 { 0x2904, 0x00 },1438 { 0x2905, 0x00 },1439 { 0x2901, 0x01 },1440 { 0x1101, 0x0A },1441 { 0x1102, 0x84 },1442 { 0x2301, 0x00 },1443 { 0x2303, 0x00 },1444 { 0x2302, 0x3f },1445 { 0x2001, 0x03 },1446 { 0x1B75, 0xB6 },1447 { 0x1B73, 0xC2 },1448 { 0x1129, 0x01 },1449 { 0x1121, 0xF3 },1450 { 0x1103, 0x20 },1451 { 0x1105, 0x00 },1452 { 0x1112, 0xC0 },1453 { 0x1113, 0x80 },1454 { 0x1C03, 0xC0 },1455 { 0x1105, 0x00 },1456 { 0x1112, 0xC0 },1457 { 0x1101, 0x02 },1458 {0} /* Terminator */1459 };1460 1461 /* Vendor specific hw configuration for CS8409 */1462 static const struct cs8409_cir_param cs8409_cs42l42_hw_cfg[] = {1463 { 0x47, 0x00, 0xb008 }, /* +PLL1/2_EN, +I2C_EN */1464 { 0x47, 0x01, 0x0002 }, /* ASP1/2_EN=0, ASP1_STP=1 */1465 { 0x47, 0x02, 0x0a80 }, /* ASP1/2_BUS_IDLE=10, +GPIO_I2C */1466 { 0x47, 0x19, 0x0800 }, /* ASP1.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */1467 { 0x47, 0x1a, 0x0820 }, /* ASP1.A: TX.RAP=0, TX.RSZ=24 bits, TX.RCS=32 */1468 { 0x47, 0x29, 0x0800 }, /* ASP2.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */1469 { 0x47, 0x2a, 0x2800 }, /* ASP2.A: TX.RAP=1, TX.RSZ=24 bits, TX.RCS=0 */1470 { 0x47, 0x39, 0x0800 }, /* ASP1.A: RX.LAP=0, RX.LSZ=24 bits, RX.LCS=0 */1471 { 0x47, 0x3a, 0x0800 }, /* ASP1.A: RX.RAP=0, RX.RSZ=24 bits, RX.RCS=0 */1472 { 0x47, 0x03, 0x8000 }, /* ASP1: LCHI = 00h */1473 { 0x47, 0x04, 0x28ff }, /* ASP1: MC/SC_SRCSEL=PLL1, LCPR=FFh */1474 { 0x47, 0x05, 0x0062 }, /* ASP1: MCEN=0, FSD=011, SCPOL_IN/OUT=0, SCDIV=1:4 */1475 { 0x47, 0x06, 0x801f }, /* ASP2: LCHI=1Fh */1476 { 0x47, 0x07, 0x283f }, /* ASP2: MC/SC_SRCSEL=PLL1, LCPR=3Fh */1477 { 0x47, 0x08, 0x805c }, /* ASP2: 5050=1, MCEN=0, FSD=010, SCPOL_IN/OUT=1, SCDIV=1:16 */1478 { 0x47, 0x09, 0x0023 }, /* DMIC1_MO=10b, DMIC1/2_SR=1 */1479 { 0x47, 0x0a, 0x0000 }, /* ASP1/2_BEEP=0 */1480 { 0x47, 0x01, 0x0062 }, /* ASP1/2_EN=1, ASP1_STP=1 */1481 { 0x47, 0x00, 0x9008 }, /* -PLL2_EN */1482 { 0x47, 0x68, 0x0000 }, /* TX2.A: pre-scale att.=0 dB */1483 { 0x47, 0x82, 0xfc03 }, /* ASP1/2_xxx_EN=1, ASP1/2_MCLK_EN=0, DMIC1_SCL_EN=1 */1484 { 0x47, 0xc0, 0x9999 }, /* test mode on */1485 { 0x47, 0xc5, 0x0000 }, /* GPIO hysteresis = 30 us */1486 { 0x47, 0xc0, 0x0000 }, /* test mode off */1487 {0} /* Terminator */1488 };1489 1490 static const struct cs8409_cir_param cs8409_cs42l42_bullseye_atn[] = {1491 { 0x47, 0x65, 0x4000 }, /* EQ_SEL=1, EQ1/2_EN=0 */1492 { 0x47, 0x64, 0x4000 }, /* +EQ_ACC */1493 { 0x47, 0x65, 0x4010 }, /* +EQ2_EN */1494 { 0x47, 0x63, 0x0647 }, /* EQ_DATA_HI=0x0647 */1495 { 0x47, 0x64, 0xc0c7 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=0, EQ_DATA_LO=0x67 */1496 { 0x47, 0x63, 0x0647 }, /* EQ_DATA_HI=0x0647 */1497 { 0x47, 0x64, 0xc1c7 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=1, EQ_DATA_LO=0x67 */1498 { 0x47, 0x63, 0xf370 }, /* EQ_DATA_HI=0xf370 */1499 { 0x47, 0x64, 0xc271 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=2, EQ_DATA_LO=0x71 */1500 { 0x47, 0x63, 0x1ef8 }, /* EQ_DATA_HI=0x1ef8 */1501 { 0x47, 0x64, 0xc348 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=3, EQ_DATA_LO=0x48 */1502 { 0x47, 0x63, 0xc110 }, /* EQ_DATA_HI=0xc110 */1503 { 0x47, 0x64, 0xc45a }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=4, EQ_DATA_LO=0x5a */1504 { 0x47, 0x63, 0x1f29 }, /* EQ_DATA_HI=0x1f29 */1505 { 0x47, 0x64, 0xc574 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=5, EQ_DATA_LO=0x74 */1506 { 0x47, 0x63, 0x1d7a }, /* EQ_DATA_HI=0x1d7a */1507 { 0x47, 0x64, 0xc653 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=6, EQ_DATA_LO=0x53 */1508 { 0x47, 0x63, 0xc38c }, /* EQ_DATA_HI=0xc38c */1509 { 0x47, 0x64, 0xc714 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=7, EQ_DATA_LO=0x14 */1510 { 0x47, 0x63, 0x1ca3 }, /* EQ_DATA_HI=0x1ca3 */1511 { 0x47, 0x64, 0xc8c7 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=8, EQ_DATA_LO=0xc7 */1512 { 0x47, 0x63, 0xc38c }, /* EQ_DATA_HI=0xc38c */1513 { 0x47, 0x64, 0xc914 }, /* +EQ_WRT, +EQ_ACC, EQ_ADR=9, EQ_DATA_LO=0x14 */1514 { 0x47, 0x64, 0x0000 }, /* -EQ_ACC, -EQ_WRT */1515 {0} /* Terminator */1516 };1517 1518 /**1519 * cs8409_enable_i2c_clock - Enable I2C clocks1520 * @codec: the codec instance1521 * @enable: Enable or disable I2C clocks1522 *1523 * Enable or Disable I2C clocks.1524 */1525 static void cs8409_enable_i2c_clock(struct hda_codec *codec, unsigned int enable)1526 {1527 unsigned int retval;1528 unsigned int newval;1529 1530 retval = cs_vendor_coef_get(codec, 0x0);1531 newval = (enable) ? (retval | 0x8) : (retval & 0xfffffff7);1532 cs_vendor_coef_set(codec, 0x0, newval);1533 }1534 1535 /**1536 * cs8409_i2c_wait_complete - Wait for I2C transaction1537 * @codec: the codec instance1538 *1539 * Wait for I2C transaction to complete.1540 * Return -1 if transaction wait times out.1541 */1542 static int cs8409_i2c_wait_complete(struct hda_codec *codec)1543 {1544 int repeat = 5;1545 unsigned int retval;1546 1547 do {1548 retval = cs_vendor_coef_get(codec, CIR_I2C_STATUS);1549 if ((retval & 0x18) != 0x18) {1550 usleep_range(2000, 4000);1551 --repeat;1552 } else1553 return 0;1554 1555 } while (repeat);1556 1557 return -1;1558 }1559 1560 /**1561 * cs8409_i2c_read - CS8409 I2C Read.1562 * @codec: the codec instance1563 * @i2c_address: I2C Address1564 * @i2c_reg: Register to read1565 * @paged: Is a paged transaction1566 *1567 * CS8409 I2C Read.1568 * Returns negative on error, otherwise returns read value in bits 0-7.1569 */1570 static int cs8409_i2c_read(struct hda_codec *codec,1571 unsigned int i2c_address,1572 unsigned int i2c_reg,1573 unsigned int paged)1574 {1575 unsigned int i2c_reg_data;1576 unsigned int read_data;1577 1578 cs8409_enable_i2c_clock(codec, 1);1579 cs_vendor_coef_set(codec, CIR_I2C_ADDR, i2c_address);1580 1581 if (paged) {1582 cs_vendor_coef_set(codec, CIR_I2C_QWRITE, i2c_reg >> 8);1583 if (cs8409_i2c_wait_complete(codec) < 0) {1584 codec_err(codec,1585 "%s() Paged Transaction Failed 0x%02x : 0x%04x\n",1586 __func__, i2c_address, i2c_reg);1587 return -EIO;1588 }1589 }1590 1591 i2c_reg_data = (i2c_reg << 8) & 0x0ffff;1592 cs_vendor_coef_set(codec, CIR_I2C_QREAD, i2c_reg_data);1593 if (cs8409_i2c_wait_complete(codec) < 0) {1594 codec_err(codec, "%s() Transaction Failed 0x%02x : 0x%04x\n",1595 __func__, i2c_address, i2c_reg);1596 return -EIO;1597 }1598 1599 /* Register in bits 15-8 and the data in 7-0 */1600 read_data = cs_vendor_coef_get(codec, CIR_I2C_QREAD);1601 1602 cs8409_enable_i2c_clock(codec, 0);1603 1604 return read_data & 0x0ff;1605 }1606 1607 /**1608 * cs8409_i2c_write - CS8409 I2C Write.1609 * @codec: the codec instance1610 * @i2c_address: I2C Address1611 * @i2c_reg: Register to write to1612 * @i2c_data: Data to write1613 * @paged: Is a paged transaction1614 *1615 * CS8409 I2C Write.1616 * Returns negative on error, otherwise returns 0.1617 */1618 static int cs8409_i2c_write(struct hda_codec *codec,1619 unsigned int i2c_address, unsigned int i2c_reg,1620 unsigned int i2c_data,1621 unsigned int paged)1622 {1623 unsigned int i2c_reg_data;1624 1625 cs8409_enable_i2c_clock(codec, 1);1626 cs_vendor_coef_set(codec, CIR_I2C_ADDR, i2c_address);1627 1628 if (paged) {1629 cs_vendor_coef_set(codec, CIR_I2C_QWRITE, i2c_reg >> 8);1630 if (cs8409_i2c_wait_complete(codec) < 0) {1631 codec_err(codec,1632 "%s() Paged Transaction Failed 0x%02x : 0x%04x\n",1633 __func__, i2c_address, i2c_reg);1634 return -EIO;1635 }1636 }1637 1638 i2c_reg_data = ((i2c_reg << 8) & 0x0ff00) | (i2c_data & 0x0ff);1639 cs_vendor_coef_set(codec, CIR_I2C_QWRITE, i2c_reg_data);1640 1641 if (cs8409_i2c_wait_complete(codec) < 0) {1642 codec_err(codec, "%s() Transaction Failed 0x%02x : 0x%04x\n",1643 __func__, i2c_address, i2c_reg);1644 return -EIO;1645 }1646 1647 cs8409_enable_i2c_clock(codec, 0);1648 1649 return 0;1650 }1651 1652 static int cs8409_cs42l42_volume_info(struct snd_kcontrol *kcontrol,1653 struct snd_ctl_elem_info *uinfo)1654 {1655 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);1656 u16 nid = get_amp_nid(kcontrol);1657 u8 chs = get_amp_channels(kcontrol);1658 1659 codec_dbg(codec, "%s() nid: %d\n", __func__, nid);1660 switch (nid) {1661 case CS8409_CS42L42_HP_PIN_NID:1662 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;1663 uinfo->count = chs == 3 ? 2 : 1;1664 uinfo->value.integer.min = CS8409_CS42L42_HP_VOL_REAL_MIN;1665 uinfo->value.integer.max = CS8409_CS42L42_HP_VOL_REAL_MAX;1666 break;1667 case CS8409_CS42L42_AMIC_PIN_NID:1668 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;1669 uinfo->count = chs == 3 ? 2 : 1;1670 uinfo->value.integer.min = CS8409_CS42L42_AMIC_VOL_REAL_MIN;1671 uinfo->value.integer.max = CS8409_CS42L42_AMIC_VOL_REAL_MAX;1672 break;1673 default:1674 break;1675 }1676 return 0;1677 }1678 1679 static void cs8409_cs42l42_update_volume(struct hda_codec *codec)1680 {1681 struct cs_spec *spec = codec->spec;1682 int data;1683 1684 mutex_lock(&spec->cs8409_i2c_mux);1685 data = cs8409_i2c_read(codec, CS42L42_I2C_ADDR,1686 CS8409_CS42L42_REG_HS_VOLUME_CHA, 1);1687 if (data >= 0)1688 spec->cs42l42_hp_volume[0] = -data;1689 else1690 spec->cs42l42_hp_volume[0] = CS8409_CS42L42_HP_VOL_REAL_MIN;1691 data = cs8409_i2c_read(codec, CS42L42_I2C_ADDR,1692 CS8409_CS42L42_REG_HS_VOLUME_CHB, 1);1693 if (data >= 0)1694 spec->cs42l42_hp_volume[1] = -data;1695 else1696 spec->cs42l42_hp_volume[1] = CS8409_CS42L42_HP_VOL_REAL_MIN;1697 data = cs8409_i2c_read(codec, CS42L42_I2C_ADDR,1698 CS8409_CS42L42_REG_AMIC_VOLUME, 1);1699 if (data >= 0)1700 spec->cs42l42_hs_mic_volume[0] = -data;1701 else1702 spec->cs42l42_hs_mic_volume[0] = CS8409_CS42L42_AMIC_VOL_REAL_MIN;1703 mutex_unlock(&spec->cs8409_i2c_mux);1704 spec->cs42l42_volume_init = 1;1705 }1706 1707 static int cs8409_cs42l42_volume_get(struct snd_kcontrol *kcontrol,1708 struct snd_ctl_elem_value *ucontrol)1709 {1710 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);1711 struct cs_spec *spec = codec->spec;1712 hda_nid_t nid = get_amp_nid(kcontrol);1713 int chs = get_amp_channels(kcontrol);1714 long *valp = ucontrol->value.integer.value;1715 1716 if (!spec->cs42l42_volume_init) {1717 snd_hda_power_up(codec);1718 cs8409_cs42l42_update_volume(codec);1719 snd_hda_power_down(codec);1720 }1721 switch (nid) {1722 case CS8409_CS42L42_HP_PIN_NID:1723 if (chs & BIT(0))1724 *valp++ = spec->cs42l42_hp_volume[0];1725 if (chs & BIT(1))1726 *valp++ = spec->cs42l42_hp_volume[1];1727 break;1728 case CS8409_CS42L42_AMIC_PIN_NID:1729 if (chs & BIT(0))1730 *valp++ = spec->cs42l42_hs_mic_volume[0];1731 break;1732 default:1733 break;1734 }1735 return 0;1736 }1737 1738 static int cs8409_cs42l42_volume_put(struct snd_kcontrol *kcontrol,1739 struct snd_ctl_elem_value *ucontrol)1740 {1741 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);1742 struct cs_spec *spec = codec->spec;1743 hda_nid_t nid = get_amp_nid(kcontrol);1744 int chs = get_amp_channels(kcontrol);1745 long *valp = ucontrol->value.integer.value;1746 int change = 0;1747 char vol;1748 1749 snd_hda_power_up(codec);1750 switch (nid) {1751 case CS8409_CS42L42_HP_PIN_NID:1752 mutex_lock(&spec->cs8409_i2c_mux);1753 if (chs & BIT(0)) {1754 vol = -(*valp);1755 change = cs8409_i2c_write(codec, CS42L42_I2C_ADDR,1756 CS8409_CS42L42_REG_HS_VOLUME_CHA, vol, 1);1757 valp++;1758 }1759 if (chs & BIT(1)) {1760 vol = -(*valp);1761 change |= cs8409_i2c_write(codec, CS42L42_I2C_ADDR,1762 CS8409_CS42L42_REG_HS_VOLUME_CHB, vol, 1);1763 }1764 mutex_unlock(&spec->cs8409_i2c_mux);1765 break;1766 case CS8409_CS42L42_AMIC_PIN_NID:1767 mutex_lock(&spec->cs8409_i2c_mux);1768 if (chs & BIT(0)) {1769 change = cs8409_i2c_write(1770 codec, CS42L42_I2C_ADDR,1771 CS8409_CS42L42_REG_AMIC_VOLUME, (char)*valp, 1);1772 valp++;1773 }1774 mutex_unlock(&spec->cs8409_i2c_mux);1775 break;1776 default:1777 break;1778 }1779 cs8409_cs42l42_update_volume(codec);1780 snd_hda_power_down(codec);1781 return change;1782 }1783 1784 static const DECLARE_TLV_DB_SCALE(1785 cs8409_cs42l42_hp_db_scale,1786 CS8409_CS42L42_HP_VOL_REAL_MIN * 100, 100, 1);1787 1788 static const DECLARE_TLV_DB_SCALE(1789 cs8409_cs42l42_amic_db_scale,1790 CS8409_CS42L42_AMIC_VOL_REAL_MIN * 100, 100, 1);1791 1792 static const struct snd_kcontrol_new cs8409_cs42l42_hp_volume_mixer = {1793 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,1794 .index = 0,1795 .name = "Headphone Playback Volume",1796 .subdevice = (HDA_SUBDEV_AMP_FLAG | HDA_SUBDEV_NID_FLAG),1797 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE1798 | SNDRV_CTL_ELEM_ACCESS_TLV_READ),1799 .info = cs8409_cs42l42_volume_info,1800 .get = cs8409_cs42l42_volume_get,1801 .put = cs8409_cs42l42_volume_put,1802 .tlv = { .p = cs8409_cs42l42_hp_db_scale },1803 .private_value = HDA_COMPOSE_AMP_VAL(1804 CS8409_CS42L42_HP_PIN_NID, 3, 0, HDA_OUTPUT)1805 | HDA_AMP_VAL_MIN_MUTE1806 };1807 1808 static const struct snd_kcontrol_new cs8409_cs42l42_amic_volume_mixer = {1809 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,1810 .index = 0,1811 .name = "Mic Capture Volume",1812 .subdevice = (HDA_SUBDEV_AMP_FLAG | HDA_SUBDEV_NID_FLAG),1813 .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE1814 | SNDRV_CTL_ELEM_ACCESS_TLV_READ),1815 .info = cs8409_cs42l42_volume_info,1816 .get = cs8409_cs42l42_volume_get,1817 .put = cs8409_cs42l42_volume_put,1818 .tlv = { .p = cs8409_cs42l42_amic_db_scale },1819 .private_value = HDA_COMPOSE_AMP_VAL(1820 CS8409_CS42L42_AMIC_PIN_NID, 1, 0, HDA_INPUT)1821 | HDA_AMP_VAL_MIN_MUTE1822 };1823 1824 /* Assert/release RTS# line to CS42L42 */1825 static void cs8409_cs42l42_reset(struct hda_codec *codec)1826 {1827 struct cs_spec *spec = codec->spec;1828 1829 /* Assert RTS# line */1830 snd_hda_codec_write(codec,1831 codec->core.afg, 0, AC_VERB_SET_GPIO_DATA, 0);1832 /* wait ~10ms */1833 usleep_range(10000, 15000);1834 /* Release RTS# line */1835 snd_hda_codec_write(codec,1836 codec->core.afg, 0, AC_VERB_SET_GPIO_DATA, GPIO5_INT);1837 /* wait ~10ms */1838 usleep_range(10000, 15000);1839 1840 mutex_lock(&spec->cs8409_i2c_mux);1841 1842 /* Clear interrupts, by reading interrupt status registers */1843 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1308, 1);1844 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1309, 1);1845 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130A, 1);1846 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130F, 1);1847 1848 mutex_unlock(&spec->cs8409_i2c_mux);1849 1850 }1851 1852 /* Configure CS42L42 slave codec for jack autodetect */1853 static void cs8409_cs42l42_enable_jack_detect(struct hda_codec *codec)1854 {1855 struct cs_spec *spec = codec->spec;1856 1857 mutex_lock(&spec->cs8409_i2c_mux);1858 1859 /* Set TIP_SENSE_EN for analog front-end of tip sense. */1860 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b70, 0x0020, 1);1861 /* Clear WAKE# */1862 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b71, 0x0001, 1);1863 /* Wait ~2.5ms */1864 usleep_range(2500, 3000);1865 /* Set mode WAKE# output follows the combination logic directly */1866 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b71, 0x0020, 1);1867 /* Clear interrupts status */1868 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130f, 1);1869 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b7b, 1);1870 /* Enable interrupt */1871 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1320, 0x03, 1);1872 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b79, 0x00, 1);1873 1874 mutex_unlock(&spec->cs8409_i2c_mux);1875 }1876 1877 /* Enable and run CS42L42 slave codec jack auto detect */1878 static void cs8409_cs42l42_run_jack_detect(struct hda_codec *codec)1879 {1880 struct cs_spec *spec = codec->spec;1881 1882 mutex_lock(&spec->cs8409_i2c_mux);1883 1884 /* Clear interrupts */1885 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1308, 1);1886 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b77, 1);1887 1888 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1102, 0x87, 1);1889 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1f06, 0x86, 1);1890 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b74, 0x07, 1);1891 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x131b, 0x01, 1);1892 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1120, 0x80, 1);1893 /* Wait ~110ms*/1894 usleep_range(110000, 200000);1895 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x111f, 0x77, 1);1896 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1120, 0xc0, 1);1897 /* Wait ~10ms */1898 usleep_range(10000, 25000);1899 1900 mutex_unlock(&spec->cs8409_i2c_mux);1901 1902 }1903 1904 static void cs8409_cs42l42_reg_setup(struct hda_codec *codec)1905 {1906 const struct cs8409_i2c_param *seq = cs42l42_init_reg_seq;1907 struct cs_spec *spec = codec->spec;1908 1909 mutex_lock(&spec->cs8409_i2c_mux);1910 1911 for (; seq->addr; seq++)1912 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, seq->addr, seq->reg, 1);1913 1914 mutex_unlock(&spec->cs8409_i2c_mux);1915 1916 }1917 1918 /*1919 * In the case of CS8409 we do not have unsolicited events from NID's 0x241920 * and 0x34 where hs mic and hp are connected. Companion codec CS42L42 will1921 * generate interrupt via gpio 4 to notify jack events. We have to overwrite1922 * generic snd_hda_jack_unsol_event(), read CS42L42 jack detect status registers1923 * and then notify status via generic snd_hda_jack_unsol_event() call.1924 */1925 static void cs8409_jack_unsol_event(struct hda_codec *codec, unsigned int res)1926 {1927 struct cs_spec *spec = codec->spec;1928 int status_changed = 0;1929 int reg_cdc_status;1930 int reg_hs_status;1931 int reg_ts_status;1932 int type;1933 struct hda_jack_tbl *jk;1934 1935 /* jack_unsol_event() will be called every time gpio line changing state.1936 * In this case gpio4 line goes up as a result of reading interrupt status1937 * registers in previous cs8409_jack_unsol_event() call.1938 * We don't need to handle this event, ignoring...1939 */1940 if ((res & (1 << 4)))1941 return;1942 1943 mutex_lock(&spec->cs8409_i2c_mux);1944 1945 /* Read jack detect status registers */1946 reg_cdc_status = cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1308, 1);1947 reg_hs_status = cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1124, 1);1948 reg_ts_status = cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130f, 1);1949 1950 /* Clear interrupts, by reading interrupt status registers */1951 cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b7b, 1);1952 1953 mutex_unlock(&spec->cs8409_i2c_mux);1954 1955 /* If status values are < 0, read error has occurred. */1956 if (reg_cdc_status < 0 || reg_hs_status < 0 || reg_ts_status < 0)1957 return;1958 1959 /* HSDET_AUTO_DONE */1960 if (reg_cdc_status & CS42L42_HSDET_AUTO_DONE) {1961 1962 type = ((reg_hs_status & CS42L42_HSTYPE_MASK) + 1);1963 /* CS42L42 reports optical jack as type 41964 * We don't handle optical jack1965 */1966 if (type != 4) {1967 if (!spec->cs42l42_hp_jack_in) {1968 status_changed = 1;1969 spec->cs42l42_hp_jack_in = 1;1970 }1971 /* type = 3 has no mic */1972 if ((!spec->cs42l42_mic_jack_in) && (type != 3)) {1973 status_changed = 1;1974 spec->cs42l42_mic_jack_in = 1;1975 }1976 } else {1977 if (spec->cs42l42_hp_jack_in || spec->cs42l42_mic_jack_in) {1978 status_changed = 1;1979 spec->cs42l42_hp_jack_in = 0;1980 spec->cs42l42_mic_jack_in = 0;1981 }1982 }1983 1984 } else {1985 /* TIP_SENSE INSERT/REMOVE */1986 switch (reg_ts_status) {1987 case CS42L42_JACK_INSERTED:1988 cs8409_cs42l42_run_jack_detect(codec);1989 break;1990 1991 case CS42L42_JACK_REMOVED:1992 if (spec->cs42l42_hp_jack_in || spec->cs42l42_mic_jack_in) {1993 status_changed = 1;1994 spec->cs42l42_hp_jack_in = 0;1995 spec->cs42l42_mic_jack_in = 0;1996 }1997 break;1998 1999 default:2000 /* jack in transition */2001 status_changed = 0;2002 break;2003 }2004 }2005 2006 if (status_changed) {2007 2008 snd_hda_set_pin_ctl(codec, CS8409_CS42L42_SPK_PIN_NID,2009 spec->cs42l42_hp_jack_in ? 0 : PIN_OUT);2010 2011 /* Report jack*/2012 jk = snd_hda_jack_tbl_get_mst(codec, CS8409_CS42L42_HP_PIN_NID, 0);2013 if (jk) {2014 snd_hda_jack_unsol_event(codec,2015 (jk->tag << AC_UNSOL_RES_TAG_SHIFT) & AC_UNSOL_RES_TAG);2016 }2017 /* Report jack*/2018 jk = snd_hda_jack_tbl_get_mst(codec, CS8409_CS42L42_AMIC_PIN_NID, 0);2019 if (jk) {2020 snd_hda_jack_unsol_event(codec,2021 (jk->tag << AC_UNSOL_RES_TAG_SHIFT) & AC_UNSOL_RES_TAG);2022 }2023 }2024 }2025 2026 #ifdef CONFIG_PM2027 /* Manage PDREF, when transition to D3hot */2028 static int cs8409_suspend(struct hda_codec *codec)2029 {2030 struct cs_spec *spec = codec->spec;2031 2032 mutex_lock(&spec->cs8409_i2c_mux);2033 /* Power down CS42L42 ASP/EQ/MIX/HP */2034 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1101, 0xfe, 1);2035 mutex_unlock(&spec->cs8409_i2c_mux);2036 /* Assert CS42L42 RTS# line */2037 snd_hda_codec_write(codec,2038 codec->core.afg, 0, AC_VERB_SET_GPIO_DATA, 0);2039 2040 snd_hda_shutup_pins(codec);2041 2042 return 0;2043 }2044 #endif2045 2046 /* Enable/Disable Unsolicited Response for gpio(s) 3,4 */2047 static void cs8409_enable_ur(struct hda_codec *codec, int flag)2048 {2049 /* GPIO4 INT# and GPIO3 WAKE# */2050 snd_hda_codec_write(codec, codec->core.afg,2051 0, AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK,2052 flag ? (GPIO3_INT | GPIO4_INT) : 0);2053 2054 snd_hda_codec_write(codec, codec->core.afg,2055 0, AC_VERB_SET_UNSOLICITED_ENABLE,2056 flag ? AC_UNSOL_ENABLED : 0);2057 2058 }2059 2060 /* Vendor specific HW configuration2061 * PLL, ASP, I2C, SPI, GPIOs, DMIC etc...2062 */2063 static void cs8409_cs42l42_hw_init(struct hda_codec *codec)2064 {2065 const struct cs8409_cir_param *seq = cs8409_cs42l42_hw_cfg;2066 const struct cs8409_cir_param *seq_bullseye = cs8409_cs42l42_bullseye_atn;2067 struct cs_spec *spec = codec->spec;2068 2069 if (spec->gpio_mask) {2070 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_MASK,2071 spec->gpio_mask);2072 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DIRECTION,2073 spec->gpio_dir);2074 snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,2075 spec->gpio_data);2076 }2077 2078 for (; seq->nid; seq++)2079 cs_vendor_coef_set(codec, seq->cir, seq->coeff);2080 2081 if (codec->fixup_id == CS8409_BULLSEYE)2082 for (; seq_bullseye->nid; seq_bullseye++)2083 cs_vendor_coef_set(codec, seq_bullseye->cir, seq_bullseye->coeff);2084 2085 /* Disable Unsolicited Response during boot */2086 cs8409_enable_ur(codec, 0);2087 2088 /* Reset CS42L42 */2089 cs8409_cs42l42_reset(codec);2090 2091 /* Initialise CS42L42 companion codec */2092 cs8409_cs42l42_reg_setup(codec);2093 2094 if (codec->fixup_id == CS8409_WARLOCK ||2095 codec->fixup_id == CS8409_CYBORG) {2096 /* FULL_SCALE_VOL = 0 for Warlock / Cyborg */2097 mutex_lock(&spec->cs8409_i2c_mux);2098 cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x2001, 0x01, 1);2099 mutex_unlock(&spec->cs8409_i2c_mux);2100 /* DMIC1_MO=00b, DMIC1/2_SR=1 */2101 cs_vendor_coef_set(codec, 0x09, 0x0003);2102 }2103 2104 /* Restore Volumes after Resume */2105 if (spec->cs42l42_volume_init) {2106 mutex_lock(&spec->cs8409_i2c_mux);2107 cs8409_i2c_write(codec, CS42L42_I2C_ADDR,2108 CS8409_CS42L42_REG_HS_VOLUME_CHA,2109 -spec->cs42l42_hp_volume[0],2110 1);2111 cs8409_i2c_write(codec, CS42L42_I2C_ADDR,2112 CS8409_CS42L42_REG_HS_VOLUME_CHB,2113 -spec->cs42l42_hp_volume[1],2114 1);2115 cs8409_i2c_write(codec, CS42L42_I2C_ADDR,2116 CS8409_CS42L42_REG_AMIC_VOLUME,2117 spec->cs42l42_hs_mic_volume[0],2118 1);2119 mutex_unlock(&spec->cs8409_i2c_mux);2120 }2121 2122 cs8409_cs42l42_update_volume(codec);2123 2124 cs8409_cs42l42_enable_jack_detect(codec);2125 2126 /* Enable Unsolicited Response */2127 cs8409_enable_ur(codec, 1);2128 }2129 2130 static int cs8409_cs42l42_init(struct hda_codec *codec)2131 {2132 int ret = snd_hda_gen_init(codec);2133 2134 if (!ret)2135 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);2136 2137 return ret;2138 }2139 2140 static const struct hda_codec_ops cs8409_cs42l42_patch_ops = {2141 .build_controls = cs_build_controls,2142 .build_pcms = snd_hda_gen_build_pcms,2143 .init = cs8409_cs42l42_init,2144 .free = cs_free,2145 .unsol_event = cs8409_jack_unsol_event,2146 #ifdef CONFIG_PM2147 .suspend = cs8409_suspend,2148 #endif2149 };2150 2151 static void cs8409_cs42l42_fixups(struct hda_codec *codec,2152 const struct hda_fixup *fix, int action)2153 {2154 struct cs_spec *spec = codec->spec;2155 int caps;2156 2157 switch (action) {2158 case HDA_FIXUP_ACT_PRE_PROBE:2159 snd_hda_add_verbs(codec, cs8409_cs42l42_init_verbs);2160 /* verb exec op override */2161 spec->exec_verb = codec->core.exec_verb;2162 codec->core.exec_verb = cs8409_cs42l42_exec_verb;2163 2164 mutex_init(&spec->cs8409_i2c_mux);2165 2166 codec->patch_ops = cs8409_cs42l42_patch_ops;2167 2168 spec->gen.suppress_auto_mute = 1;2169 spec->gen.no_primary_hp = 1;2170 spec->gen.suppress_vmaster = 1;2171 2172 /* GPIO 5 out, 3,4 in */2173 spec->gpio_dir = GPIO5_INT;2174 spec->gpio_data = 0;2175 spec->gpio_mask = 0x03f;2176 2177 spec->cs42l42_hp_jack_in = 0;2178 spec->cs42l42_mic_jack_in = 0;2179 2180 /* Basic initial sequence for specific hw configuration */2181 snd_hda_sequence_write(codec, cs8409_cs42l42_init_verbs);2182 2183 /* CS8409 is simple HDA bridge and intended to be used with a remote2184 * companion codec. Most of input/output PIN(s) have only basic2185 * capabilities. NID(s) 0x24 and 0x34 have only OUTC and INC2186 * capabilities and no presence detect capable (PDC) and call to2187 * snd_hda_gen_build_controls() will mark them as non detectable2188 * phantom jacks. However, in this configuration companion codec2189 * CS42L42 is connected to these pins and it has jack detect2190 * capabilities. We have to override pin capabilities,2191 * otherwise they will not be created as input devices.2192 */2193 caps = snd_hdac_read_parm(&codec->core, CS8409_CS42L42_HP_PIN_NID,2194 AC_PAR_PIN_CAP);2195 if (caps >= 0)2196 snd_hdac_override_parm(&codec->core,2197 CS8409_CS42L42_HP_PIN_NID, AC_PAR_PIN_CAP,2198 (caps | (AC_PINCAP_IMP_SENSE | AC_PINCAP_PRES_DETECT)));2199 2200 caps = snd_hdac_read_parm(&codec->core, CS8409_CS42L42_AMIC_PIN_NID,2201 AC_PAR_PIN_CAP);2202 if (caps >= 0)2203 snd_hdac_override_parm(&codec->core,2204 CS8409_CS42L42_AMIC_PIN_NID, AC_PAR_PIN_CAP,2205 (caps | (AC_PINCAP_IMP_SENSE | AC_PINCAP_PRES_DETECT)));2206 2207 snd_hda_override_wcaps(codec, CS8409_CS42L42_HP_PIN_NID,2208 (get_wcaps(codec, CS8409_CS42L42_HP_PIN_NID) | AC_WCAP_UNSOL_CAP));2209 2210 snd_hda_override_wcaps(codec, CS8409_CS42L42_AMIC_PIN_NID,2211 (get_wcaps(codec, CS8409_CS42L42_AMIC_PIN_NID) | AC_WCAP_UNSOL_CAP));2212 break;2213 case HDA_FIXUP_ACT_PROBE:2214 2215 /* Set initial DMIC volume to -26 dB */2216 snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,2217 HDA_INPUT, 0, 0xff, 0x19);2218 snd_hda_gen_add_kctl(&spec->gen,2219 NULL, &cs8409_cs42l42_hp_volume_mixer);2220 snd_hda_gen_add_kctl(&spec->gen,2221 NULL, &cs8409_cs42l42_amic_volume_mixer);2222 cs8409_cs42l42_hw_init(codec);2223 snd_hda_codec_set_name(codec, "CS8409/CS42L42");2224 break;2225 case HDA_FIXUP_ACT_INIT:2226 cs8409_cs42l42_hw_init(codec);2227 fallthrough;2228 case HDA_FIXUP_ACT_BUILD:2229 /* Run jack auto detect first time on boot2230 * after controls have been added, to check if jack has2231 * been already plugged in.2232 * Run immediately after init.2233 */2234 cs8409_cs42l42_run_jack_detect(codec);2235 usleep_range(100000, 150000);2236 break;2237 default:2238 break;2239 }2240 }2241 2242 static int cs8409_cs42l42_exec_verb(struct hdac_device *dev,2243 unsigned int cmd, unsigned int flags, unsigned int *res)2244 {2245 struct hda_codec *codec = container_of(dev, struct hda_codec, core);2246 struct cs_spec *spec = codec->spec;2247 2248 unsigned int nid = ((cmd >> 20) & 0x07f);2249 unsigned int verb = ((cmd >> 8) & 0x0fff);2250 2251 /* CS8409 pins have no AC_PINSENSE_PRESENCE2252 * capabilities. We have to intercept 2 calls for pins 0x24 and 0x342253 * and return correct pin sense values for read_pin_sense() call from2254 * hda_jack based on CS42L42 jack detect status.2255 */2256 switch (nid) {2257 case CS8409_CS42L42_HP_PIN_NID:2258 if (verb == AC_VERB_GET_PIN_SENSE) {2259 *res = (spec->cs42l42_hp_jack_in) ? AC_PINSENSE_PRESENCE : 0;2260 return 0;2261 }2262 break;2263 2264 case CS8409_CS42L42_AMIC_PIN_NID:2265 if (verb == AC_VERB_GET_PIN_SENSE) {2266 *res = (spec->cs42l42_mic_jack_in) ? AC_PINSENSE_PRESENCE : 0;2267 return 0;2268 }2269 break;2270 2271 default:2272 break;2273 }2274 2275 return spec->exec_verb(dev, cmd, flags, res);2276 }2277 2278 static int patch_cs8409(struct hda_codec *codec)2279 {2280 int err;2281 2282 if (!cs_alloc_spec(codec, CS8409_VENDOR_NID))2283 return -ENOMEM;2284 2285 snd_hda_pick_fixup(codec,2286 cs8409_models, cs8409_fixup_tbl, cs8409_fixups);2287 2288 codec_dbg(codec, "Picked ID=%d, VID=%08x, DEV=%08x\n",2289 codec->fixup_id,2290 codec->bus->pci->subsystem_vendor,2291 codec->bus->pci->subsystem_device);2292 2293 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);2294 2295 err = cs_parse_auto_config(codec);2296 if (err < 0) {2297 cs_free(codec);2298 return err;2299 }2300 2301 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);2302 return 0;2303 }2304 2305 1232 /* 2306 1233 * patch entries … … 2312 1239 HDA_CODEC_ENTRY(0x10134210, "CS4210", patch_cs4210), 2313 1240 HDA_CODEC_ENTRY(0x10134213, "CS4213", patch_cs4213), 2314 HDA_CODEC_ENTRY(0x10138409, "CS8409", patch_cs8409),2315 1241 {0} /* terminator */ 2316 1242 }; 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_conexant.cr693 r710 184 184 } 185 185 186 static void cx_auto_ reboot_notify(struct hda_codec *codec)186 static void cx_auto_shutdown(struct hda_codec *codec) 187 187 { 188 188 struct conexant_spec *spec = codec->spec; … … 191 191 from the internal speaker during (and after) reboot */ 192 192 cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, false); 193 snd_hda_gen_reboot_notify(codec);194 193 } 195 194 196 195 static void cx_auto_free(struct hda_codec *codec) 197 196 { 198 cx_auto_ reboot_notify(codec);197 cx_auto_shutdown(codec); 199 198 snd_hda_gen_free(codec); 200 199 } 200 201 #ifdef CONFIG_PM 202 static int cx_auto_suspend(struct hda_codec *codec) 203 { 204 cx_auto_shutdown(codec); 205 return 0; 206 } 207 #endif 201 208 202 209 static const struct hda_codec_ops cx_auto_patch_ops = { … … 204 211 .build_pcms = snd_hda_gen_build_pcms, 205 212 .init = cx_auto_init, 206 .reboot_notify = cx_auto_reboot_notify,207 213 .free = cx_auto_free, 208 214 .unsol_event = snd_hda_jack_unsol_event, 209 215 #ifdef CONFIG_PM 216 .suspend = cx_auto_suspend, 210 217 .check_power_status = snd_hda_gen_check_power_status, 211 218 #endif 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_hdmi.cr708 r710 59 59 module_param(enable_silent_stream, bool, 0644); 60 60 MODULE_PARM_DESC(enable_silent_stream, "Enable Silent Stream for HDMI devices"); 61 62 static bool enable_all_pins; 63 module_param(enable_all_pins, bool, 0444); 64 MODULE_PARM_DESC(enable_all_pins, "Forcibly enable all pins"); 61 65 62 66 struct hdmi_spec_per_cvt { … … 1971 1975 return -EINVAL; 1972 1976 } 1977 1978 if (enable_all_pins) 1979 spec->force_connect = true; 1973 1980 1974 1981 q = snd_pci_quirk_lookup(codec->bus->pci, force_connect_list); 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_realtek.cr697 r710 115 115 #endif 116 116 void (*shutup)(struct hda_codec *codec); 117 void (*reboot_notify)(struct hda_codec *codec);118 117 119 118 int init_amp; … … 535 534 536 535 switch (codec->core.vendor_id) { 536 case 0x10ec0236: 537 case 0x10ec0256: 537 538 case 0x10ec0283: 538 539 case 0x10ec0286: … … 906 907 } 907 908 908 static void alc_reboot_notify(struct hda_codec *codec)909 {910 struct alc_spec *spec = codec->spec;911 912 if (spec && spec->reboot_notify)913 spec->reboot_notify(codec);914 else915 alc_shutup(codec);916 }917 918 909 #define alc_free snd_hda_gen_free 919 910 … … 961 952 .check_power_status = snd_hda_gen_check_power_status, 962 953 #endif 963 .reboot_notify = alc_reboot_notify,964 954 }; 965 955 … … 3094 3084 SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3095 3085 SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3086 SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3096 3087 SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3097 3088 SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3098 3089 SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3099 3090 SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3100 SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3091 SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170SM", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 3092 SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", ALC1220_FIXUP_CLEVO_PB51ED), 3101 3093 SND_PCI_QUIRK(0x1558, 0x9501, "Clevo P950HR", ALC1220_FIXUP_CLEVO_P950), 3102 3094 SND_PCI_QUIRK(0x1558, 0x9506, "Clevo P955HQ", ALC1220_FIXUP_CLEVO_P950), … … 4184 4176 * when booting with headset plugged. So skip setting it for the codec alc257 4185 4177 */ 4186 if (codec->core.vendor_id != 0x10ec0257) 4178 if (spec->codec_variant != ALC269_TYPE_ALC257 && 4179 spec->codec_variant != ALC269_TYPE_ALC256) 4187 4180 alc_update_coef_idx(codec, 0x46, 0, 3 << 12); 4188 4181 … … 6466 6459 6467 6460 if (action == HDA_FIXUP_ACT_PRE_PROBE) { 6468 spec->reboot_notify = snd_hda_gen_reboot_notify; /* reduce noise */6469 6461 spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; 6470 6462 codec->power_save_node = 0; /* avoid click noises */ … … 7110 7102 #endif /* NOT_USED */ 7111 7103 7104 /* GPIO1 = amplifier on/off 7105 * GPIO3 = mic mute LED 7106 */ 7107 static void alc285_fixup_hp_spectre_x360_eb1(struct hda_codec *codec, 7108 const struct hda_fixup *fix, int action) 7109 { 7110 static const hda_nid_t conn[] = { 0x02 }; 7111 7112 struct alc_spec *spec = codec->spec; 7113 static const struct hda_pintbl pincfgs[] = { 7114 { 0x14, 0x90170110 }, /* front/high speakers */ 7115 { 0x17, 0x90170130 }, /* back/bass speakers */ 7116 {0} 7117 }; 7118 7119 //enable micmute led 7120 alc_fixup_hp_gpio_led(codec, action, 0x00, 0x04); 7121 7122 switch (action) { 7123 case HDA_FIXUP_ACT_PRE_PROBE: 7124 spec->micmute_led_polarity = 1; 7125 /* needed for amp of back speakers */ 7126 spec->gpio_mask |= 0x01; 7127 spec->gpio_dir |= 0x01; 7128 snd_hda_apply_pincfgs(codec, pincfgs); 7129 /* share DAC to have unified volume control */ 7130 snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn); 7131 snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn); 7132 break; 7133 case HDA_FIXUP_ACT_INIT: 7134 /* need to toggle GPIO to enable the amp of back speakers */ 7135 alc_update_gpio_data(codec, 0x01, true); 7136 msleep(100); 7137 alc_update_gpio_data(codec, 0x01, false); 7138 break; 7139 } 7140 } 7141 7112 7142 static void alc285_fixup_hp_spectre_x360(struct hda_codec *codec, 7113 7143 const struct hda_fixup *fix, int action) … … 7138 7168 } 7139 7169 7170 /* Fixup for Lenovo Legion 15IMHg05 speaker output on headset removal. */ 7171 static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec, 7172 const struct hda_fixup *fix, 7173 int action) 7174 { 7175 struct alc_spec *spec = codec->spec; 7176 7177 switch (action) { 7178 case HDA_FIXUP_ACT_PRE_PROBE: 7179 spec->gen.suppress_auto_mute = 1; 7180 break; 7181 } 7182 } 7183 7140 7184 /* for alc295_fixup_hp_top_speakers */ 7141 7185 #include "hp_x360_helper.c" … … 7143 7187 /* for alc285_fixup_ideapad_s740_coef() */ 7144 7188 #include "ideapad_s740_helper.c" 7189 7190 static void alc256_fixup_tongfang_reset_persistent_settings(struct hda_codec *codec, 7191 const struct hda_fixup *fix, 7192 int action) 7193 { 7194 /* 7195 * A certain other OS sets these coeffs to different values. On at least one TongFang 7196 * barebone these settings might survive even a cold reboot. So to restore a clean slate the 7197 * values are explicitly reset to default here. Without this, the external microphone is 7198 * always in a plugged-in state, while the internal microphone is always in an unplugged 7199 * state, breaking the ability to use the internal microphone. 7200 */ 7201 alc_write_coef_idx(codec, 0x24, 0x0000); 7202 alc_write_coef_idx(codec, 0x26, 0x0000); 7203 alc_write_coef_idx(codec, 0x29, 0x3000); 7204 alc_write_coef_idx(codec, 0x37, 0xfe05); 7205 alc_write_coef_idx(codec, 0x45, 0x5089); 7206 } 7145 7207 7146 7208 enum { … … 7230 7292 ALC280_FIXUP_HP_9480M, 7231 7293 ALC245_FIXUP_HP_X360_AMP, 7294 ALC285_FIXUP_HP_SPECTRE_X360_EB1, 7232 7295 ALC288_FIXUP_DELL_HEADSET_MODE, 7233 7296 ALC288_FIXUP_DELL1_MIC_NO_PRESENCE, … … 7355 7418 ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, 7356 7419 ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST, 7420 ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS, 7421 ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE, 7422 ALC287_FIXUP_YOGA7_14ITL_SPEAKERS, 7423 ALC287_FIXUP_13S_GEN2_SPEAKERS, 7424 ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS, 7357 7425 }; 7358 7426 … … 9227 9295 .v.func = alc285_fixup_hp_spectre_x360, 9228 9296 }, 9297 [ALC285_FIXUP_HP_SPECTRE_X360_EB1] = { 9298 .type = HDA_FIXUP_FUNC, 9299 .v.func = alc285_fixup_hp_spectre_x360_eb1 9300 }, 9229 9301 [ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = { 9230 9302 .type = HDA_FIXUP_FUNC, … … 9255 9327 .chained = true, 9256 9328 .chain_id = ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF, 9329 }, 9330 #ifdef TARGET_OS2xxx 9331 [ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS] = { 9332 .type = HDA_FIXUP_VERBS, 9333 //.v.verbs = legion_15imhg05_coefs, 9334 .v.verbs = (const struct hda_verb[]) { 9335 // set left speaker Legion 7i. 9336 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9337 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 }, 9338 9339 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9340 { 0x20, AC_VERB_SET_PROC_COEF, 0xc }, 9341 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9342 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a }, 9343 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9344 9345 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9346 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9347 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9348 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9349 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9350 9351 // set right speaker Legion 7i. 9352 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9353 { 0x20, AC_VERB_SET_PROC_COEF, 0x42 }, 9354 9355 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9356 { 0x20, AC_VERB_SET_PROC_COEF, 0xc }, 9357 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9358 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a }, 9359 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9360 9361 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9362 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9363 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9364 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9365 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9366 {} 9367 }, 9368 .chained = true, 9369 .chain_id = ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE, 9370 }, 9371 #endif 9372 [ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE] = { 9373 .type = HDA_FIXUP_FUNC, 9374 .v.func = alc287_fixup_legion_15imhg05_speakers, 9375 .chained = true, 9376 .chain_id = ALC269_FIXUP_HEADSET_MODE, 9377 }, 9378 #ifdef TARGET_OS2xxx 9379 [ALC287_FIXUP_YOGA7_14ITL_SPEAKERS] = { 9380 .type = HDA_FIXUP_VERBS, 9381 .v.verbs = (const struct hda_verb[]) { 9382 // set left speaker Yoga 7i. 9383 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9384 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 }, 9385 9386 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9387 { 0x20, AC_VERB_SET_PROC_COEF, 0xc }, 9388 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9389 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a }, 9390 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9391 9392 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9393 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9394 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9395 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9396 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9397 9398 // set right speaker Yoga 7i. 9399 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9400 { 0x20, AC_VERB_SET_PROC_COEF, 0x46 }, 9401 9402 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9403 { 0x20, AC_VERB_SET_PROC_COEF, 0xc }, 9404 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9405 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a }, 9406 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9407 9408 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9409 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9410 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9411 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9412 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9413 {} 9414 }, 9415 .chained = true, 9416 .chain_id = ALC269_FIXUP_HEADSET_MODE, 9417 }, 9418 [ALC287_FIXUP_13S_GEN2_SPEAKERS] = { 9419 .type = HDA_FIXUP_VERBS, 9420 .v.verbs = (const struct hda_verb[]) { 9421 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9422 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 }, 9423 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9424 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9425 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9426 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9427 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9428 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 }, 9429 { 0x20, AC_VERB_SET_PROC_COEF, 0x42 }, 9430 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 }, 9431 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 }, 9432 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9433 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 }, 9434 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 }, 9435 {} 9436 }, 9437 .chained = true, 9438 .chain_id = ALC269_FIXUP_HEADSET_MODE, 9439 }, 9440 #endif 9441 [ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS] = { 9442 .type = HDA_FIXUP_FUNC, 9443 .v.func = alc256_fixup_tongfang_reset_persistent_settings, 9257 9444 }, 9258 9445 }; … … 9347 9534 SND_PCI_QUIRK(0x1028, 0x0a58, "Dell", ALC255_FIXUP_DELL_HEADSET_MIC), 9348 9535 SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK), 9536 SND_PCI_QUIRK(0x1028, 0x0a62, "Dell Precision 5560", ALC289_FIXUP_DUAL_SPK), 9537 SND_PCI_QUIRK(0x1028, 0x0a9d, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE), 9538 SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE), 9349 9539 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 9350 9540 SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), … … 9449 9639 SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED), 9450 9640 SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), 9641 SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), 9642 SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), 9451 9643 SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), 9452 9644 SND_PCI_QUIRK(0x103c, 0x8847, "HP EliteBook x360 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), … … 9650 9842 SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF), 9651 9843 SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i", ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP), 9844 SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS), 9845 SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS), 9846 SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS), 9847 SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL", ALC287_FIXUP_13S_GEN2_SPEAKERS), 9652 9848 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI), 9653 9849 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), … … 9680 9876 SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802), 9681 9877 SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X), 9878 SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS), 9682 9879 SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC), 9683 9880 SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE), … … 9865 10062 {.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"}, 9866 10063 {.id = ALC285_FIXUP_HP_SPECTRE_X360, .name = "alc285-hp-spectre-x360"}, 10064 {.id = ALC285_FIXUP_HP_SPECTRE_X360_EB1, .name = "alc285-hp-spectre-x360-eb1"}, 9867 10065 {.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"}, 9868 10066 {.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"}, … … 11100 11298 ALC662_FIXUP_ACER_X2660G_HEADSET_MODE, 11101 11299 ALC662_FIXUP_ACER_NITRO_HEADSET_MODE, 11300 ALC668_FIXUP_ASUS_NO_HEADSET_MIC, 11301 ALC668_FIXUP_HEADSET_MIC, 11302 ALC668_FIXUP_MIC_DET_COEF, 11102 11303 }; 11103 11304 … … 11666 11867 .chained = true, 11667 11868 .chain_id = ALC662_FIXUP_USI_FUNC 11869 }, 11870 [ALC668_FIXUP_ASUS_NO_HEADSET_MIC] = { 11871 .type = HDA_FIXUP_PINS, 11872 .v.pins = (const struct hda_pintbl[]) { 11873 { 0x1b, 0x04a1112c }, 11874 { } 11875 }, 11876 .chained = true, 11877 .chain_id = ALC668_FIXUP_HEADSET_MIC 11878 }, 11879 #endif 11880 [ALC668_FIXUP_HEADSET_MIC] = { 11881 .type = HDA_FIXUP_FUNC, 11882 .v.func = alc269_fixup_headset_mic, 11883 .chained = true, 11884 .chain_id = ALC668_FIXUP_MIC_DET_COEF 11885 }, 11886 #ifdef TARGET_OS2xxx 11887 [ALC668_FIXUP_MIC_DET_COEF] = { 11888 .type = HDA_FIXUP_VERBS, 11889 .v.verbs = (const struct hda_verb[]) { 11890 { 0x20, AC_VERB_SET_COEF_INDEX, 0x15 }, 11891 { 0x20, AC_VERB_SET_PROC_COEF, 0x0d60 }, 11892 {} 11893 }, 11668 11894 }, 11669 11895 #endif … … 11703 11929 SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51), 11704 11930 SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51), 11931 SND_PCI_QUIRK(0x1043, 0x185d, "ASUS G551JW", ALC668_FIXUP_ASUS_NO_HEADSET_MIC), 11705 11932 SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8), 11706 11933 SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16), 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/hda/patch_sigmatel.cr694 r710 4482 4482 } 4483 4483 4484 static void stac_shutup(struct hda_codec *codec)4485 {4486 struct sigmatel_spec *spec = codec->spec;4487 4488 snd_hda_shutup_pins(codec);4489 4490 if (spec->eapd_mask)4491 stac_gpio_set(codec, spec->gpio_mask,4492 spec->gpio_dir, spec->gpio_data &4493 ~spec->eapd_mask);4494 }4495 4496 4484 #define stac_free snd_hda_gen_free 4497 4485 … … 4546 4534 static int stac_suspend(struct hda_codec *codec) 4547 4535 { 4548 stac_shutup(codec); 4536 struct sigmatel_spec *spec = codec->spec; 4537 4538 snd_hda_shutup_pins(codec); 4539 4540 if (spec->eapd_mask) 4541 stac_gpio_set(codec, spec->gpio_mask, 4542 spec->gpio_dir, spec->gpio_data & 4543 ~spec->eapd_mask); 4544 4549 4545 return 0; 4550 4546 } … … 4562 4558 .suspend = stac_suspend, 4563 4559 #endif 4564 .reboot_notify = stac_shutup,4565 4560 }; 4566 4561 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/intel8x0.cr697 r710 382 382 383 383 u32 bdbars_count; 384 struct snd_dma_buffer bdbars;384 struct snd_dma_buffer *bdbars; 385 385 u32 int_sta_reg; /* interrupt status register */ 386 386 u32 int_sta_mask; /* interrupt status mask */ … … 1431 1431 1432 1432 #define intel8x0_dma_type(chip) \ 1433 ((chip)->fix_nocache ? SNDRV_DMA_TYPE_DEV_ UC : SNDRV_DMA_TYPE_DEV)1433 ((chip)->fix_nocache ? SNDRV_DMA_TYPE_DEV_WC : SNDRV_DMA_TYPE_DEV) 1434 1434 1435 1435 static int snd_intel8x0_pcm1(struct intel8x0 *chip, int device, … … 2534 2534 } 2535 2535 2536 static int snd_intel8x0_free(struct intel8x0 *chip) 2537 { 2536 static void snd_intel8x0_free(struct snd_card *card) 2537 { 2538 struct intel8x0 *chip = card->private_data; 2538 2539 unsigned int i; 2539 2540 … … 2558 2559 if (chip->irq >= 0) 2559 2560 free_irq(chip->irq, chip); 2560 if (chip->bdbars.area)2561 snd_dma_free_pages(&chip->bdbars);2562 if (chip->addr)2563 pci_iounmap(chip->pci, chip->addr);2564 if (chip->bmaddr)2565 pci_iounmap(chip->pci, chip->bmaddr);2566 pci_release_regions(chip->pci);2567 pci_disable_device(chip->pci);2568 kfree(chip);2569 return 0;2570 2561 } 2571 2562 … … 2666 2657 if (chip->ac97_bus->clock != 48000) 2667 2658 return; /* specified in module option */ 2659 if (chip->inside_vm && !ac97_clock) 2660 return; /* no measurement on VM */ 2668 2661 2669 2662 __again: … … 2854 2847 } 2855 2848 2856 static int snd_intel8x0_dev_free(struct snd_device *device)2857 {2858 struct intel8x0 *chip = device->device_data;2859 return snd_intel8x0_free(chip);2860 }2861 2862 2849 struct ich_reg_info { 2863 2850 unsigned int int_sta_mask; … … 2903 2890 } 2904 2891 2905 static int snd_intel8x0_create(struct snd_card *card, 2906 struct pci_dev *pci, 2907 unsigned long device_type, 2908 struct intel8x0 **r_intel8x0) 2909 { 2910 struct intel8x0 *chip; 2892 static int snd_intel8x0_init(struct snd_card *card, 2893 struct pci_dev *pci, 2894 unsigned long device_type) 2895 { 2896 struct intel8x0 *chip = card->private_data; 2911 2897 int err; 2912 2898 unsigned int i; 2913 2899 unsigned int int_sta_masks; 2914 2900 struct ichdev *ichdev; 2915 static const struct snd_device_ops ops = {2916 .dev_free = snd_intel8x0_dev_free,2917 };2918 2901 2919 2902 static const unsigned int bdbars[] = { … … 2948 2931 const struct ich_reg_info *tbl; 2949 2932 2950 *r_intel8x0 = NULL; 2951 2952 err = pci_enable_device(pci); 2933 err = pcim_enable_device(pci); 2953 2934 if (err < 0) 2954 2935 return err; 2955 2936 2956 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2957 if (chip == NULL) {2958 pci_disable_device(pci);2959 return -ENOMEM;2960 }2961 2937 spin_lock_init(&chip->reg_lock); 2962 2938 chip->device_type = device_type; … … 2984 2960 2985 2961 err = pci_request_regions(pci, card->shortname); 2986 if (err < 0) { 2987 kfree(chip); 2988 pci_disable_device(pci); 2962 if (err < 0) 2989 2963 return err; 2990 }2991 2964 2992 2965 if (device_type == DEVICE_ALI) { 2993 2966 /* ALI5455 has no ac97 region */ 2994 chip->bmaddr = pci_iomap(pci, 0, 0); 2995 goto port_inited; 2996 } 2997 2998 if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) /* ICH4 and Nforce */ 2999 chip->addr = pci_iomap(pci, 2, 0); 3000 else 3001 chip->addr = pci_iomap(pci, 0, 0); 3002 if (!chip->addr) { 3003 dev_err(card->dev, "AC'97 space ioremap problem\n"); 3004 snd_intel8x0_free(chip); 3005 return -EIO; 3006 } 3007 if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) /* ICH4 */ 3008 chip->bmaddr = pci_iomap(pci, 3, 0); 3009 else 3010 chip->bmaddr = pci_iomap(pci, 1, 0); 3011 3012 port_inited: 3013 if (!chip->bmaddr) { 3014 dev_err(card->dev, "Controller space ioremap problem\n"); 3015 snd_intel8x0_free(chip); 3016 return -EIO; 3017 } 2967 chip->bmaddr = pcim_iomap(pci, 0, 0); 2968 } else { 2969 if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) /* ICH4 and Nforce */ 2970 chip->addr = pcim_iomap(pci, 2, 0); 2971 else 2972 chip->addr = pcim_iomap(pci, 0, 0); 2973 if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) /* ICH4 */ 2974 chip->bmaddr = pcim_iomap(pci, 3, 0); 2975 else 2976 chip->bmaddr = pcim_iomap(pci, 1, 0); 2977 } 2978 3018 2979 chip->bdbars_count = bdbars[device_type]; 3019 2980 … … 3051 3012 /* allocate buffer descriptor lists */ 3052 3013 /* the start of each lists must be aligned to 8 bytes */ 3014 #ifndef TARGET_OS2 3015 chip->bdbars = snd_devm_alloc_pages(&pci->dev, intel8x0_dma_type(chip), 3016 chip->bdbars_count * sizeof(u32) * 3017 ICH_MAX_FRAGS * 2); 3018 if (!chip->bdbars) 3019 return -ENOMEM; 3020 #else 3053 3021 if (snd_dma_alloc_pages(intel8x0_dma_type(chip), &pci->dev, 3054 3022 chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, … … 3058 3026 return -ENOMEM; 3059 3027 } 3028 #endif 3060 3029 /* tables must be aligned to 8 bytes here, but the kernel pages 3061 3030 are much bigger, so we don't care (on i386) */ … … 3063 3032 for (i = 0; i < chip->bdbars_count; i++) { 3064 3033 ichdev = &chip->ichd[i]; 3065 ichdev->bdbar = ((__le32 *)chip->bdbars .area) +3034 ichdev->bdbar = ((__le32 *)chip->bdbars->area) + 3066 3035 (i * ICH_MAX_FRAGS * 2); 3067 ichdev->bdbar_addr = chip->bdbars .addr +3036 ichdev->bdbar_addr = chip->bdbars->addr + 3068 3037 (i * sizeof(u32) * ICH_MAX_FRAGS * 2); 3069 3038 int_sta_masks |= ichdev->int_sta_mask; … … 3099 3068 3100 3069 err = snd_intel8x0_chip_init(chip, 1); 3101 if (err < 0) { 3102 snd_intel8x0_free(chip); 3070 if (err < 0) 3103 3071 return err; 3104 }3105 3072 3106 3073 /* request irq after initializaing int_sta_mask, etc */ 3074 /* NOTE: we don't use devm version here since it's released / 3075 * re-acquired in PM callbacks. 3076 * It's released explicitly in snd_intel8x0_free(), too. 3077 */ 3107 3078 if (request_irq(pci->irq, snd_intel8x0_interrupt, 3108 3079 IRQF_SHARED, KBUILD_MODNAME, chip)) { 3109 3080 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 3110 snd_intel8x0_free(chip);3111 3081 return -EBUSY; 3112 3082 } … … 3114 3084 card->sync_irq = chip->irq; 3115 3085 3116 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 3117 if (err < 0) { 3118 snd_intel8x0_free(chip); 3119 return err; 3120 } 3121 3122 *r_intel8x0 = chip; 3086 card->private_free = snd_intel8x0_free; 3087 3123 3088 return 0; 3124 3089 } … … 3186 3151 struct shortname_table *name; 3187 3152 3188 err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card); 3153 err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, 3154 sizeof(*chip), &card); 3189 3155 if (err < 0) 3190 3156 return err; 3157 chip = card->private_data; 3191 3158 3192 3159 if (spdif_aclink < 0) … … 3222 3189 } 3223 3190 3224 err = snd_intel8x0_create(card, pci, pci_id->driver_data, &chip); 3225 if (err < 0) { 3226 snd_card_free(card); 3191 err = snd_intel8x0_init(card, pci, pci_id->driver_data); 3192 if (err < 0) 3227 3193 return err; 3228 }3229 card->private_data = chip;3230 3194 3231 3195 err = snd_intel8x0_mixer(chip, ac97_clock, ac97_quirk); 3232 if (err < 0) { 3233 snd_card_free(card); 3196 if (err < 0) 3234 3197 return err; 3235 }3236 3198 err = snd_intel8x0_pcm(chip); 3237 if (err < 0) { 3238 snd_card_free(card); 3199 if (err < 0) 3239 3200 return err; 3240 }3241 3201 3242 3202 snd_intel8x0_proc_init(chip); … … 3256 3216 3257 3217 err = snd_card_register(card); 3258 if (err < 0) { 3259 snd_card_free(card); 3218 if (err < 0) 3260 3219 return err; 3261 } 3220 3262 3221 pci_set_drvdata(pci, card); 3263 3222 return 0; 3264 }3265 3266 static void snd_intel8x0_remove(struct pci_dev *pci)3267 {3268 snd_card_free(pci_get_drvdata(pci));3269 3223 } 3270 3224 … … 3273 3227 .id_table = snd_intel8x0_ids, 3274 3228 .probe = snd_intel8x0_probe, 3275 .remove = snd_intel8x0_remove,3276 3229 .driver = { 3277 3230 .pm = INTEL8X0_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/korg1212/korg1212.cr697 r710 321 321 void __iomem *iobase; 322 322 323 struct snd_dma_buffer dma_dsp;324 struct snd_dma_bufferdma_play;325 struct snd_dma_bufferdma_rec;326 struct snd_dma_buffer dma_shared;323 struct snd_dma_buffer *dma_dsp; 324 struct snd_dma_buffer *dma_play; 325 struct snd_dma_buffer *dma_rec; 326 struct snd_dma_buffer *dma_shared; 327 327 328 328 u32 DataBufsSize; … … 1201 1201 1202 1202 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_StartDSPDownload, 1203 UpperWordSwap(korg1212->dma_dsp.addr),1204 1203 UpperWordSwap(korg1212->dma_dsp->addr), 1204 0, 0, 0); 1205 1205 if (rc) 1206 1206 K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n", … … 1383 1383 1384 1384 runtime->hw = snd_korg1212_playback_info; 1385 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_play);1385 snd_pcm_set_runtime_buffer(substream, korg1212->dma_play); 1386 1386 1387 1387 spin_lock_irqsave(&korg1212->lock, flags); … … 1414 1414 1415 1415 runtime->hw = snd_korg1212_capture_info; 1416 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_rec);1416 snd_pcm_set_runtime_buffer(substream, korg1212->dma_rec); 1417 1417 1418 1418 spin_lock_irqsave(&korg1212->lock, flags); … … 2081 2081 } 2082 2082 2083 static int 2084 snd_korg1212_free(struct snd_korg1212 *korg1212) 2085 { 2086 snd_korg1212_TurnOffIdleMonitor(korg1212); 2087 2088 if (korg1212->irq >= 0) { 2089 snd_korg1212_DisableCardInterrupts(korg1212); 2090 free_irq(korg1212->irq, korg1212); 2091 korg1212->irq = -1; 2092 } 2093 2094 if (korg1212->iobase != NULL) { 2095 iounmap(korg1212->iobase); 2096 korg1212->iobase = NULL; 2097 } 2098 2099 pci_release_regions(korg1212->pci); 2100 2101 // ---------------------------------------------------- 2102 // free up memory resources used for the DSP download. 2103 // ---------------------------------------------------- 2104 if (korg1212->dma_dsp.area) { 2105 snd_dma_free_pages(&korg1212->dma_dsp); 2106 korg1212->dma_dsp.area = NULL; 2107 } 2108 2109 #ifndef K1212_LARGEALLOC 2110 2111 // ------------------------------------------------------ 2112 // free up memory resources used for the Play/Rec Buffers 2113 // ------------------------------------------------------ 2114 if (korg1212->dma_play.area) { 2115 snd_dma_free_pages(&korg1212->dma_play); 2116 korg1212->dma_play.area = NULL; 2117 } 2118 2119 if (korg1212->dma_rec.area) { 2120 snd_dma_free_pages(&korg1212->dma_rec); 2121 korg1212->dma_rec.area = NULL; 2122 } 2123 2124 #endif 2125 2126 // ---------------------------------------------------- 2127 // free up memory resources used for the Shared Buffers 2128 // ---------------------------------------------------- 2129 if (korg1212->dma_shared.area) { 2130 snd_dma_free_pages(&korg1212->dma_shared); 2131 korg1212->dma_shared.area = NULL; 2132 } 2133 2134 pci_disable_device(korg1212->pci); 2135 kfree(korg1212); 2136 return 0; 2137 } 2138 2139 static int snd_korg1212_dev_free(struct snd_device *device) 2140 { 2141 struct snd_korg1212 *korg1212 = device->device_data; 2142 K1212_DEBUG_PRINTK("K1212_DEBUG: Freeing device\n"); 2143 return snd_korg1212_free(korg1212); 2144 } 2145 2146 static int snd_korg1212_create(struct snd_card *card, struct pci_dev *pci, 2147 struct snd_korg1212 **rchip) 2083 static void 2084 snd_korg1212_free(struct snd_card *card) 2085 { 2086 struct snd_korg1212 *korg1212 = card->private_data; 2087 2088 snd_korg1212_TurnOffIdleMonitor(korg1212); 2089 snd_korg1212_DisableCardInterrupts(korg1212); 2090 } 2091 2092 static int snd_korg1212_create(struct snd_card *card, struct pci_dev *pci) 2148 2093 2149 2094 { 2150 2095 int err, rc; 2151 2096 unsigned int i; 2152 unsigned iomem_size;2097 __maybe_unused unsigned iomem_size; 2153 2098 __maybe_unused unsigned ioport_size; 2154 2099 __maybe_unused unsigned iomem2_size; 2155 struct snd_korg1212 * korg1212;2100 struct snd_korg1212 *korg1212 = card->private_data; 2156 2101 const struct firmware *dsp_code; 2157 2102 2158 static const struct snd_device_ops ops = { 2159 .dev_free = snd_korg1212_dev_free, 2160 }; 2161 2162 * rchip = NULL; 2163 err = pci_enable_device(pci); 2103 err = pcim_enable_device(pci); 2164 2104 if (err < 0) 2165 2105 return err; 2166 2167 korg1212 = kzalloc(sizeof(*korg1212), GFP_KERNEL);2168 if (korg1212 == NULL) {2169 pci_disable_device(pci);2170 return -ENOMEM;2171 }2172 2106 2173 2107 korg1212->card = card; … … 2199 2133 korg1212->volumePhase[i] = 0; 2200 2134 2201 err = pci_request_regions(pci, "korg1212"); 2202 if (err < 0) { 2203 kfree(korg1212); 2204 pci_disable_device(pci); 2135 err = pcim_iomap_regions_request_all(pci, 1 << 0, "korg1212"); 2136 if (err < 0) 2205 2137 return err; 2206 }2207 2138 2208 2139 korg1212->iomem = pci_resource_start(korg1212->pci, 0); … … 2224 2155 stateName[korg1212->cardState]); 2225 2156 2226 korg1212->iobase = ioremap(korg1212->iomem, iomem_size); 2227 if (!korg1212->iobase) { 2228 snd_printk(KERN_ERR "korg1212: unable to remap memory region 0x%lx-0x%lx\n", korg1212->iomem, 2229 korg1212->iomem + iomem_size - 1); 2230 snd_korg1212_free(korg1212); 2157 korg1212->iobase = pcim_iomap_table(pci)[0]; 2158 2159 err = devm_request_irq(&pci->dev, pci->irq, snd_korg1212_interrupt, 2160 IRQF_SHARED, 2161 KBUILD_MODNAME, korg1212); 2162 2163 if (err) { 2164 snd_printk(KERN_ERR "korg1212: unable to grab IRQ %d\n", pci->irq); 2231 2165 return -EBUSY; 2232 2166 } 2233 2167 2234 err = request_irq(pci->irq, snd_korg1212_interrupt,2235 IRQF_SHARED,2236 KBUILD_MODNAME, korg1212);2237 2238 if (err) {2239 snd_printk(KERN_ERR "korg1212: unable to grab IRQ %d\n", pci->irq);2240 snd_korg1212_free(korg1212);2241 return -EBUSY;2242 }2243 2244 2168 korg1212->irq = pci->irq; 2245 2169 card->sync_irq = korg1212->irq; 2170 card->private_free = snd_korg1212_free; 2246 2171 2247 2172 pci_set_master(korg1212->pci); … … 2282 2207 stateName[korg1212->cardState]); 2283 2208 2284 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 2285 sizeof(struct KorgSharedBuffer), &korg1212->dma_shared) < 0) { 2286 snd_printk(KERN_ERR "korg1212: can not allocate shared buffer memory (%zd bytes)\n", sizeof(struct KorgSharedBuffer)); 2287 snd_korg1212_free(korg1212); 2288 return -ENOMEM; 2289 } 2290 korg1212->sharedBufferPtr = (struct KorgSharedBuffer *)korg1212->dma_shared.area; 2291 korg1212->sharedBufferPhy = korg1212->dma_shared.addr; 2209 korg1212->dma_shared = snd_devm_alloc_pages(&pci->dev, 2210 SNDRV_DMA_TYPE_DEV, 2211 sizeof(struct KorgSharedBuffer)); 2212 if (!korg1212->dma_shared) 2213 return -ENOMEM; 2214 korg1212->sharedBufferPtr = (struct KorgSharedBuffer *)korg1212->dma_shared->area; 2215 korg1212->sharedBufferPhy = korg1212->dma_shared->addr; 2292 2216 2293 2217 K1212_DEBUG_PRINTK("K1212_DEBUG: Shared Buffer Area = 0x%p (0x%08lx), %d bytes\n", korg1212->sharedBufferPtr, korg1212->sharedBufferPhy, sizeof(struct KorgSharedBuffer)); 2294 2218 2295 2219 #ifndef K1212_LARGEALLOC 2296 2297 2220 korg1212->DataBufsSize = sizeof(struct KorgAudioBuffer) * kNumBuffers; 2298 2299 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 2300 korg1212->DataBufsSize, &korg1212->dma_play) < 0) { 2301 snd_printk(KERN_ERR "korg1212: can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize); 2302 snd_korg1212_free(korg1212); 2303 return -ENOMEM; 2304 } 2305 korg1212->playDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_play.area; 2306 korg1212->PlayDataPhy = korg1212->dma_play.addr; 2221 korg1212->dma_play = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 2222 korg1212->DataBufsSize); 2223 if (!korg1212->dma_play) 2224 return -ENOMEM; 2225 2226 korg1212->playDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_play->area; 2227 korg1212->PlayDataPhy = korg1212->dma_play->addr; 2307 2228 2308 2229 K1212_DEBUG_PRINTK("K1212_DEBUG: Play Data Area = 0x%p (0x%08x), %d bytes\n", 2309 2230 korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize); 2310 2231 2311 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 2312 korg1212->DataBufsSize, &korg1212->dma_rec) < 0) { 2313 snd_printk(KERN_ERR "korg1212: can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize); 2314 snd_korg1212_free(korg1212); 2315 return -ENOMEM; 2316 } 2317 korg1212->recordDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_rec.area; 2318 korg1212->RecDataPhy = korg1212->dma_rec.addr; 2232 korg1212->dma_rec = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 2233 korg1212->DataBufsSize); 2234 if (!korg1212->dma_rec) 2235 return -ENOMEM; 2236 2237 korg1212->recordDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_rec->area; 2238 korg1212->RecDataPhy = korg1212->dma_rec->addr; 2319 2239 2320 2240 K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n", … … 2340 2260 if (err < 0) { 2341 2261 snd_printk(KERN_ERR "firmware not available\n"); 2342 snd_korg1212_free(korg1212);2343 2262 return err; 2344 2263 } 2345 2264 2346 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 2347 dsp_code->size, &korg1212->dma_dsp) < 0) { 2348 snd_printk(KERN_ERR "korg1212: cannot allocate dsp code memory (%zd bytes)\n", dsp_code->size); 2349 snd_korg1212_free(korg1212); 2265 korg1212->dma_dsp = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 2266 dsp_code->size); 2267 if (!korg1212->dma_dsp) { 2350 2268 release_firmware(dsp_code); 2351 2352 2269 return -ENOMEM; 2270 } 2353 2271 2354 2272 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP Code area = 0x%p (0x%08x) %d bytes [%s]\n", 2355 korg1212->dma_dsp .area, korg1212->dma_dsp.addr, dsp_code->size,2273 korg1212->dma_dsp->area, korg1212->dma_dsp->addr, dsp_code->size, 2356 2274 stateName[korg1212->cardState]); 2357 2275 2358 memcpy(korg1212->dma_dsp .area, dsp_code->data, dsp_code->size);2276 memcpy(korg1212->dma_dsp->area, dsp_code->data, dsp_code->size); 2359 2277 2360 2278 release_firmware(dsp_code); … … 2365 2283 K1212_DEBUG_PRINTK("K1212_DEBUG: Reboot Card - RC = %d [%s]\n", rc, stateName[korg1212->cardState]); 2366 2284 2367 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, korg1212, &ops);2368 if (err < 0) {2369 snd_korg1212_free(korg1212);2370 return err;2371 }2372 2373 2285 snd_korg1212_EnableCardInterrupts(korg1212); 2374 2286 … … 2412 2324 2413 2325 snd_korg1212_proc_init(korg1212); 2414 2415 * rchip = korg1212; 2326 2416 2327 return 0; 2417 2418 2328 } 2419 2329 … … 2438 2348 return -ENOENT; 2439 2349 } 2440 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2441 0, &card);2350 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2351 sizeof(*korg1212), &card); 2442 2352 if (err < 0) 2443 2353 return err; 2444 2445 err = snd_korg1212_create(card, pci, &korg1212); 2446 if (err < 0) {2447 snd_card_free(card);2354 korg1212 = card->private_data; 2355 2356 err = snd_korg1212_create(card, pci); 2357 if (err < 0) 2448 2358 return err; 2449 }2450 2359 2451 2360 strcpy(card->driver, "korg1212"); … … 2457 2366 2458 2367 err = snd_card_register(card); 2459 if (err < 0) { 2460 snd_card_free(card); 2368 if (err < 0) 2461 2369 return err; 2462 }2463 2370 pci_set_drvdata(pci, card); 2464 2371 dev++; 2465 2372 return 0; 2466 }2467 2468 static void snd_korg1212_remove(struct pci_dev *pci)2469 {2470 snd_card_free(pci_get_drvdata(pci));2471 2373 } 2472 2374 … … 2475 2377 .id_table = snd_korg1212_ids, 2476 2378 .probe = snd_korg1212_probe, 2477 .remove = snd_korg1212_remove,2478 2379 }; 2479 2380 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/maestro3.cr697 r710 2351 2351 */ 2352 2352 2353 static int snd_m3_free(struct snd_m3 *chip) 2354 { 2353 static void snd_m3_free(struct snd_card *card) 2354 { 2355 struct snd_m3 *chip = card->private_data; 2355 2356 struct m3_dma *s; 2356 2357 int i; 2357 2358 2358 2359 cancel_work_sync(&chip->hwvol_work); 2359 #ifdef CONFIG_SND_MAESTRO3_INPUT2360 if (chip->input_dev)2361 input_unregister_device(chip->input_dev);2362 #endif2363 2360 2364 2361 if (chip->substreams) { … … 2371 2368 } 2372 2369 spin_unlock_irq(&chip->reg_lock); 2373 kfree(chip->substreams);2374 2370 } 2375 2371 if (chip->iobase) { … … 2380 2376 vfree(chip->suspend_mem); 2381 2377 #endif 2382 2383 if (chip->irq >= 0)2384 free_irq(chip->irq, chip);2385 2386 if (chip->iobase)2387 pci_release_regions(chip->pci);2388 2389 2378 release_firmware(chip->assp_kernel_image); 2390 2379 release_firmware(chip->assp_minisrc_image); 2391 2392 pci_disable_device(chip->pci);2393 kfree(chip);2394 return 0;2395 2380 } 2396 2381 … … 2485 2470 int err; 2486 2471 2487 input_dev = input_allocate_device();2472 input_dev = devm_input_allocate_device(&chip->pci->dev); 2488 2473 if (!input_dev) 2489 2474 return -ENOMEM; … … 2505 2490 2506 2491 err = input_register_device(input_dev); 2507 if (err) { 2508 input_free_device(input_dev); 2492 if (err) 2509 2493 return err; 2510 }2511 2494 2512 2495 chip->input_dev = input_dev; … … 2517 2500 /* 2518 2501 */ 2519 2520 static int snd_m3_dev_free(struct snd_device *device)2521 {2522 struct snd_m3 *chip = device->device_data;2523 return snd_m3_free(chip);2524 }2525 2502 2526 2503 static int 2527 2504 snd_m3_create(struct snd_card *card, struct pci_dev *pci, 2528 2505 int enable_amp, 2529 int amp_gpio, 2530 struct snd_m3 **chip_ret) 2531 { 2532 struct snd_m3 *chip; 2506 int amp_gpio) 2507 { 2508 struct snd_m3 *chip = card->private_data; 2533 2509 int i, err; 2534 2510 const struct snd_pci_quirk *quirk; 2535 static const struct snd_device_ops ops = { 2536 .dev_free = snd_m3_dev_free, 2537 }; 2538 2539 *chip_ret = NULL; 2540 2541 if (pci_enable_device(pci)) 2511 2512 if (pcim_enable_device(pci)) 2542 2513 return -EIO; 2543 2514 … … 2546 2517 dev_err(card->dev, 2547 2518 "architecture does not support 28bit PCI busmaster DMA\n"); 2548 pci_disable_device(pci);2549 2519 return -ENXIO; 2550 }2551 2552 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2553 if (chip == NULL) {2554 pci_disable_device(pci);2555 return -ENOMEM;2556 2520 } 2557 2521 … … 2571 2535 chip->irq = -1; 2572 2536 INIT_WORK(&chip->hwvol_work, snd_m3_update_hw_volume); 2537 card->private_free = snd_m3_free; 2573 2538 2574 2539 chip->external_amp = enable_amp; … … 2600 2565 2601 2566 chip->num_substreams = NR_DSPS; 2567 #ifndef TARGET_OS2 2568 chip->substreams = devm_kcalloc(&pci->dev, chip->num_substreams, 2569 sizeof(struct m3_dma), GFP_KERNEL); 2570 #else 2602 2571 chip->substreams = kcalloc(chip->num_substreams, sizeof(struct m3_dma), 2603 2572 GFP_KERNEL); 2604 if (chip->substreams == NULL) { 2605 kfree(chip); 2606 pci_disable_device(pci); 2573 #endif 2574 if (!chip->substreams) 2607 2575 return -ENOMEM; 2608 }2609 2576 2610 2577 err = request_firmware(&chip->assp_kernel_image, 2611 2578 "ess/maestro3_assp_kernel.fw", &pci->dev); 2612 2579 if (err < 0) 2613 goto free_chip;2580 return err; 2614 2581 2615 2582 err = request_firmware(&chip->assp_minisrc_image, 2616 2583 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2617 2584 if (err < 0) 2618 goto free_chip;2585 return err; 2619 2586 2620 2587 err = pci_request_regions(pci, card->driver); 2621 2588 if (err < 0) 2622 goto free_chip;2589 return err; 2623 2590 2624 2591 chip->iobase = pci_resource_start(pci, 0); … … 2636 2603 snd_m3_hv_init(chip); 2637 2604 2605 #ifndef TARGET_OS2 2606 if (devm_request_irq(&pci->dev, pci->irq, snd_m3_interrupt, IRQF_SHARED, 2607 KBUILD_MODNAME, chip)) { 2608 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2609 return -ENOMEM; 2610 } 2611 #else 2638 2612 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED, 2639 2613 KBUILD_MODNAME, chip)) { 2640 2614 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2641 err =-ENOMEM;2642 goto free_chip;2643 } 2615 return -ENOMEM; 2616 } 2617 #endif 2644 2618 chip->irq = pci->irq; 2645 2619 card->sync_irq = chip->irq; … … 2654 2628 #endif 2655 2629 2656 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2657 if (err < 0)2658 goto free_chip;2659 2660 2630 err = snd_m3_mixer(chip); 2661 2631 if (err < 0) … … 2686 2656 snd_m3_assp_continue(chip); 2687 2657 2688 *chip_ret = chip;2689 2690 2658 return 0; 2691 2692 free_chip:2693 snd_m3_free(chip);2694 return err;2695 2659 } 2696 2660 … … 2716 2680 } 2717 2681 2718 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2719 0, &card);2682 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2683 sizeof(*chip), &card); 2720 2684 if (err < 0) 2721 2685 return err; 2686 chip = card->private_data; 2722 2687 2723 2688 switch (pci->device) { … … 2735 2700 } 2736 2701 2737 err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev] , &chip);2702 err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev]); 2738 2703 if (err < 0) 2739 goto free_card; 2740 2741 card->private_data = chip; 2704 return err; 2742 2705 2743 2706 sprintf(card->shortname, "ESS %s PCI", card->driver); … … 2747 2710 err = snd_card_register(card); 2748 2711 if (err < 0) 2749 goto free_card;2712 return err; 2750 2713 2751 2714 #if 0 /* TODO: not supported yet */ … … 2762 2725 dev++; 2763 2726 return 0; 2764 2765 free_card:2766 snd_card_free(card);2767 return err;2768 }2769 2770 static void snd_m3_remove(struct pci_dev *pci)2771 {2772 snd_card_free(pci_get_drvdata(pci));2773 2727 } 2774 2728 … … 2777 2731 .id_table = snd_m3_ids, 2778 2732 .probe = snd_m3_probe, 2779 .remove = snd_m3_remove,2780 2733 .driver = { 2781 2734 .pm = M3_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/nm256/nm256.cr697 r710 198 198 199 199 void __iomem *cport; /* control port */ 200 struct resource *res_cport; /* its resource */201 200 unsigned long cport_addr; /* physical address */ 202 201 203 202 void __iomem *buffer; /* buffer */ 204 struct resource *res_buffer; /* its resource */205 203 unsigned long buffer_addr; /* buffer phyiscal address */ 206 204 … … 1318 1316 }; 1319 1317 1320 chip->ac97_regs = kcalloc(ARRAY_SIZE(nm256_ac97_init_val), 1321 sizeof(short), GFP_KERNEL); 1318 chip->ac97_regs = devm_kcalloc(chip->card->dev, 1319 ARRAY_SIZE(nm256_ac97_init_val), 1320 sizeof(short), GFP_KERNEL); 1322 1321 if (! chip->ac97_regs) 1323 1322 return -ENOMEM; … … 1442 1441 #endif /* CONFIG_PM_SLEEP */ 1443 1442 1444 static int snd_nm256_free(struct nm256 *chip) 1445 { 1443 static void snd_nm256_free(struct snd_card *card) 1444 { 1445 struct nm256 *chip = card->private_data; 1446 1446 1447 if (chip->streams[SNDRV_PCM_STREAM_PLAYBACK].running) 1447 1448 snd_nm256_playback_stop(chip); 1448 1449 if (chip->streams[SNDRV_PCM_STREAM_CAPTURE].running) 1449 1450 snd_nm256_capture_stop(chip); 1450 1451 if (chip->irq >= 0)1452 free_irq(chip->irq, chip);1453 1454 iounmap(chip->cport);1455 iounmap(chip->buffer);1456 release_and_free_resource(chip->res_cport);1457 release_and_free_resource(chip->res_buffer);1458 1459 pci_disable_device(chip->pci);1460 kfree(chip->ac97_regs);1461 kfree(chip);1462 return 0;1463 }1464 1465 static int snd_nm256_dev_free(struct snd_device *device)1466 {1467 struct nm256 *chip = device->device_data;1468 return snd_nm256_free(chip);1469 1451 } 1470 1452 1471 1453 static int 1472 snd_nm256_create(struct snd_card *card, struct pci_dev *pci, 1473 struct nm256 **chip_ret) 1474 { 1475 struct nm256 *chip; 1454 snd_nm256_create(struct snd_card *card, struct pci_dev *pci) 1455 { 1456 struct nm256 *chip = card->private_data; 1476 1457 int err, pval; 1477 static const struct snd_device_ops ops = {1478 .dev_free = snd_nm256_dev_free,1479 };1480 1458 u32 addr; 1481 1459 1482 *chip_ret = NULL; 1483 1484 err = pci_enable_device(pci); 1460 err = pcim_enable_device(pci); 1485 1461 if (err < 0) 1486 1462 return err; 1487 1488 chip = kzalloc(sizeof(*chip), GFP_KERNEL);1489 if (chip == NULL) {1490 pci_disable_device(pci);1491 return -ENOMEM;1492 }1493 1463 1494 1464 chip->card = card; … … 1513 1483 chip->cport_addr = pci_resource_start(pci, 1); 1514 1484 1485 err = pci_request_regions(pci, card->driver); 1486 if (err < 0) 1487 return err; 1488 1515 1489 /* Init the memory port info. */ 1516 1490 /* remap control port (#2) */ 1517 chip->res_cport = request_mem_region(chip->cport_addr, NM_PORT2_SIZE, 1518 card->driver); 1519 if (chip->res_cport == NULL) { 1520 dev_err(card->dev, "memory region 0x%lx (size 0x%x) busy\n", 1521 chip->cport_addr, NM_PORT2_SIZE); 1522 err = -EBUSY; 1523 goto __error; 1524 } 1525 chip->cport = ioremap(chip->cport_addr, NM_PORT2_SIZE); 1526 if (chip->cport == NULL) { 1491 chip->cport = devm_ioremap(&pci->dev, chip->cport_addr, NM_PORT2_SIZE); 1492 if (!chip->cport) { 1527 1493 dev_err(card->dev, "unable to map control port %lx\n", 1528 1494 chip->cport_addr); 1529 err = -ENOMEM; 1530 goto __error; 1495 return -ENOMEM; 1531 1496 } 1532 1497 … … 1544 1509 dev_err(card->dev, 1545 1510 "or try sb16, opl3sa2, or cs423x drivers instead.\n"); 1546 err = -ENXIO; 1547 goto __error; 1511 return -ENXIO; 1548 1512 } 1549 1513 } … … 1577 1541 err = snd_nm256_peek_for_sig(chip); 1578 1542 if (err < 0) 1579 goto __error;1543 return err; 1580 1544 } 1581 1545 … … 1586 1550 chip->buffer_start, chip->buffer_end); 1587 1551 1588 chip->res_buffer = request_mem_region(chip->buffer_addr, 1589 chip->buffer_size, 1590 card->driver); 1591 if (chip->res_buffer == NULL) { 1592 dev_err(card->dev, "buffer 0x%lx (size 0x%x) busy\n", 1593 chip->buffer_addr, chip->buffer_size); 1594 err = -EBUSY; 1595 goto __error; 1596 } 1597 chip->buffer = ioremap(chip->buffer_addr, chip->buffer_size); 1598 if (chip->buffer == NULL) { 1599 err = -ENOMEM; 1552 chip->buffer = devm_ioremap(&pci->dev, chip->buffer_addr, 1553 chip->buffer_size); 1554 if (!chip->buffer) { 1600 1555 dev_err(card->dev, "unable to map ring buffer at %lx\n", 1601 1556 chip->buffer_addr); 1602 goto __error;1557 return -ENOMEM; 1603 1558 } 1604 1559 … … 1623 1578 1624 1579 snd_nm256_init_chip(chip); 1580 card->private_free = snd_nm256_free; 1625 1581 1626 1582 // pci_set_master(pci); /* needed? */ 1627 1628 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 1629 if (err < 0) 1630 goto __error; 1631 1632 *chip_ret = chip; 1633 return 0; 1634 1635 __error: 1636 snd_nm256_free(chip); 1637 return err; 1583 return 0; 1638 1584 } 1639 1585 … … 1678 1624 } 1679 1625 1680 err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card); 1626 err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, 1627 sizeof(*chip), &card); 1681 1628 if (err < 0) 1682 1629 return err; 1630 chip = card->private_data; 1683 1631 1684 1632 switch (pci->device) { … … 1694 1642 default: 1695 1643 dev_err(&pci->dev, "invalid device id 0x%x\n", pci->device); 1696 snd_card_free(card);1697 1644 return -EINVAL; 1698 1645 } … … 1709 1656 if (capture_bufsize > 128) 1710 1657 capture_bufsize = 128; 1711 err = snd_nm256_create(card, pci, &chip); 1712 if (err < 0) { 1713 snd_card_free(card); 1658 err = snd_nm256_create(card, pci); 1659 if (err < 0) 1714 1660 return err; 1715 }1716 card->private_data = chip;1717 1661 1718 1662 if (reset_workaround) { … … 1727 1671 1728 1672 err = snd_nm256_pcm(chip, 0); 1729 if (err < 0) { 1730 snd_card_free(card); 1673 if (err < 0) 1731 1674 return err; 1732 }1733 1675 err = snd_nm256_mixer(chip); 1734 if (err < 0) { 1735 snd_card_free(card); 1676 if (err < 0) 1736 1677 return err; 1737 }1738 1678 1739 1679 sprintf(card->shortname, "NeoMagic %s", card->driver); … … 1743 1683 1744 1684 err = snd_card_register(card); 1745 if (err < 0) { 1746 snd_card_free(card); 1685 if (err < 0) 1747 1686 return err; 1748 }1749 1687 1750 1688 pci_set_drvdata(pci, card); 1751 1689 return 0; 1752 1690 } 1753 1754 static void snd_nm256_remove(struct pci_dev *pci)1755 {1756 snd_card_free(pci_get_drvdata(pci));1757 }1758 1759 1691 1760 1692 static struct pci_driver nm256_driver = { … … 1762 1694 .id_table = snd_nm256_ids, 1763 1695 .probe = snd_nm256_probe, 1764 .remove = snd_nm256_remove,1765 1696 .driver = { 1766 1697 .pm = NM256_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/rme9652/hdsp.cr697 r710 469 469 u32 io_loopback; /* output loopback channel states*/ 470 470 471 struct snd_dma_buffer capture_dma_buf;472 struct snd_dma_buffer playback_dma_buf;471 struct snd_dma_buffer *capture_dma_buf; 472 struct snd_dma_buffer *playback_dma_buf; 473 473 unsigned char *capture_buffer; /* suitably aligned address */ 474 474 unsigned char *playback_buffer; /* suitably aligned address */ … … 566 566 }; 567 567 568 static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size) 569 { 570 return snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, size, dmab); 571 } 572 573 static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci) 574 { 575 if (dmab->area) 576 snd_dma_free_pages(dmab); 577 } 578 568 static struct snd_dma_buffer * 569 snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size) 570 { 571 return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size); 572 } 579 573 580 574 static const struct pci_device_id snd_hdsp_ids[] = { … … 3769 3763 } 3770 3764 3771 static void snd_hdsp_free_buffers(struct hdsp *hdsp)3772 {3773 snd_hammerfall_free_buffer(&hdsp->capture_dma_buf, hdsp->pci);3774 snd_hammerfall_free_buffer(&hdsp->playback_dma_buf, hdsp->pci);3775 }3776 3777 3765 static int snd_hdsp_initialize_memory(struct hdsp *hdsp) 3778 3766 { 3779 3767 unsigned long pb_bus, cb_bus; 3780 3768 3781 if (snd_hammerfall_get_buffer(hdsp->pci, &hdsp->capture_dma_buf, HDSP_DMA_AREA_BYTES) < 0 || 3782 snd_hammerfall_get_buffer(hdsp->pci, &hdsp->playback_dma_buf, HDSP_DMA_AREA_BYTES) < 0) { 3783 if (hdsp->capture_dma_buf.area) 3784 snd_dma_free_pages(&hdsp->capture_dma_buf); 3769 hdsp->capture_dma_buf = 3770 snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES); 3771 hdsp->playback_dma_buf = 3772 snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES); 3773 if (!hdsp->capture_dma_buf || !hdsp->playback_dma_buf) { 3785 3774 dev_err(hdsp->card->dev, 3786 3775 "%s: no buffers available\n", hdsp->card_name); … … 3790 3779 /* Align to bus-space 64K boundary */ 3791 3780 3792 cb_bus = ALIGN(hdsp->capture_dma_buf .addr, 0x10000ul);3793 pb_bus = ALIGN(hdsp->playback_dma_buf .addr, 0x10000ul);3781 cb_bus = ALIGN(hdsp->capture_dma_buf->addr, 0x10000ul); 3782 pb_bus = ALIGN(hdsp->playback_dma_buf->addr, 0x10000ul); 3794 3783 3795 3784 /* Tell the card where it is */ … … 3798 3787 hdsp_write(hdsp, HDSP_outputBufferAddress, pb_bus); 3799 3788 3800 hdsp->capture_buffer = hdsp->capture_dma_buf .area + (cb_bus - hdsp->capture_dma_buf.addr);3801 hdsp->playback_buffer = hdsp->playback_dma_buf .area + (pb_bus - hdsp->playback_dma_buf.addr);3789 hdsp->capture_buffer = hdsp->capture_dma_buf->area + (cb_bus - hdsp->capture_dma_buf->addr); 3790 hdsp->playback_buffer = hdsp->playback_dma_buf->area + (pb_bus - hdsp->playback_dma_buf->addr); 3802 3791 3803 3792 return 0; … … 4519 4508 4520 4509 runtime->hw = snd_hdsp_playback_subinfo; 4521 runtime->dma_area = hdsp->playback_buffer; 4522 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4510 snd_pcm_set_runtime_buffer(substream, hdsp->playback_dma_buf); 4523 4511 4524 4512 hdsp->playback_pid = current->pid; … … 4596 4584 4597 4585 runtime->hw = snd_hdsp_capture_subinfo; 4598 runtime->dma_area = hdsp->capture_buffer; 4599 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4586 snd_pcm_set_runtime_buffer(substream, hdsp->capture_dma_buf); 4600 4587 4601 4588 hdsp->capture_pid = current->pid; … … 5314 5301 } 5315 5302 5316 err = pci _enable_device(pci);5303 err = pcim_enable_device(pci); 5317 5304 if (err < 0) 5318 5305 return err; … … 5324 5311 return err; 5325 5312 hdsp->port = pci_resource_start(pci, 0); 5326 hdsp->iobase = ioremap(hdsp->port, HDSP_IO_EXTENT);5313 hdsp->iobase = devm_ioremap(&pci->dev, hdsp->port, HDSP_IO_EXTENT); 5327 5314 if (!hdsp->iobase) { 5328 5315 dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n", … … 5331 5318 } 5332 5319 5333 if ( request_irq(pci->irq, snd_hdsp_interrupt, IRQF_SHARED,5334 KBUILD_MODNAME, hdsp)) {5320 if (devm_request_irq(&pci->dev, pci->irq, snd_hdsp_interrupt, 5321 IRQF_SHARED, KBUILD_MODNAME, hdsp)) { 5335 5322 dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq); 5336 5323 return -EBUSY; … … 5412 5399 } 5413 5400 5414 static int snd_hdsp_free(struct hdsp *hdsp) 5415 { 5401 static void snd_hdsp_card_free(struct snd_card *card) 5402 { 5403 struct hdsp *hdsp = card->private_data; 5404 5416 5405 if (hdsp->port) { 5417 5406 /* stop the audio, and cancel all interrupts */ … … 5421 5410 } 5422 5411 5423 if (hdsp->irq >= 0)5424 free_irq(hdsp->irq, (void *)hdsp);5425 5426 snd_hdsp_free_buffers(hdsp);5427 5428 5412 release_firmware(hdsp->firmware); 5429 5413 vfree(hdsp->fw_uploaded); 5430 iounmap(hdsp->iobase);5431 5432 if (hdsp->port)5433 pci_release_regions(hdsp->pci);5434 5435 if (pci_is_enabled(hdsp->pci))5436 pci_disable_device(hdsp->pci);5437 return 0;5438 }5439 5440 static void snd_hdsp_card_free(struct snd_card *card)5441 {5442 struct hdsp *hdsp = card->private_data;5443 5444 if (hdsp)5445 snd_hdsp_free(hdsp);5446 5414 } 5447 5415 … … 5461 5429 } 5462 5430 5463 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,5464 5431 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 5432 sizeof(struct hdsp), &card); 5465 5433 if (err < 0) 5466 5434 return err; … … 5472 5440 err = snd_hdsp_create(card, hdsp); 5473 5441 if (err) 5474 goto free_card;5442 return err; 5475 5443 5476 5444 strcpy(card->shortname, "Hammerfall DSP"); … … 5478 5446 hdsp->port, hdsp->irq); 5479 5447 err = snd_card_register(card); 5480 if (err) { 5481 free_card: 5482 snd_card_free(card); 5448 if (err) 5483 5449 return err; 5484 }5485 5450 pci_set_drvdata(pci, card); 5486 5451 dev++; 5487 5452 return 0; 5488 }5489 5490 static void snd_hdsp_remove(struct pci_dev *pci)5491 {5492 snd_card_free(pci_get_drvdata(pci));5493 5453 } 5494 5454 … … 5497 5457 .id_table = snd_hdsp_ids, 5498 5458 .probe = snd_hdsp_probe, 5499 .remove = snd_hdsp_remove,5500 5459 }; 5501 5460 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/rme9652/hdspm.cr693 r710 6576 6576 } 6577 6577 6578 err = pci _enable_device(pci);6578 err = pcim_enable_device(pci); 6579 6579 if (err < 0) 6580 6580 return err; … … 6582 6582 pci_set_master(hdspm->pci); 6583 6583 6584 err = pci _request_regions(pci, "hdspm");6584 err = pcim_iomap_regions(pci, 1 << 0, "hdspm"); 6585 6585 if (err < 0) 6586 6586 return err; … … 6588 6588 hdspm->port = pci_resource_start(pci, 0); 6589 6589 io_extent = pci_resource_len(pci, 0); 6590 6591 dev_dbg(card->dev, "grabbed memory region 0x%lx-0x%lx\n", 6592 hdspm->port, hdspm->port + io_extent - 1); 6593 6594 hdspm->iobase = ioremap(hdspm->port, io_extent); 6595 if (!hdspm->iobase) { 6596 dev_err(card->dev, "unable to remap region 0x%lx-0x%lx\n", 6597 hdspm->port, hdspm->port + io_extent - 1); 6598 return -EBUSY; 6599 } 6590 hdspm->iobase = pcim_iomap_table(pci)[0]; 6600 6591 dev_dbg(card->dev, "remapped region (0x%lx) 0x%lx-0x%lx\n", 6601 6592 (unsigned long)hdspm->iobase, hdspm->port, 6602 6593 hdspm->port + io_extent - 1); 6603 6594 6604 if ( request_irq(pci->irq, snd_hdspm_interrupt,6605 IRQF_SHARED, KBUILD_MODNAME, hdspm)) {6595 if (devm_request_irq(&pci->dev, pci->irq, snd_hdspm_interrupt, 6596 IRQF_SHARED, KBUILD_MODNAME, hdspm)) { 6606 6597 dev_err(card->dev, "unable to use IRQ %d\n", pci->irq); 6607 6598 return -EBUSY; … … 6615 6606 dev_dbg(card->dev, "kmalloc Mixer memory of %zd Bytes\n", 6616 6607 sizeof(*hdspm->mixer)); 6617 hdspm->mixer = kzalloc(sizeof(*hdspm->mixer), GFP_KERNEL);6608 hdspm->mixer = devm_kzalloc(&pci->dev, sizeof(*hdspm->mixer), GFP_KERNEL); 6618 6609 if (!hdspm->mixer) 6619 6610 return -ENOMEM; … … 6860 6851 6861 6852 6862 static int snd_hdspm_free(struct hdspm * hdspm) 6863 { 6853 static void snd_hdspm_card_free(struct snd_card *card) 6854 { 6855 struct hdspm *hdspm = card->private_data; 6864 6856 6865 6857 if (hdspm->port) { … … 6874 6866 hdspm->control_register); 6875 6867 } 6876 6877 if (hdspm->irq >= 0)6878 free_irq(hdspm->irq, (void *) hdspm);6879 6880 kfree(hdspm->mixer);6881 iounmap(hdspm->iobase);6882 6883 if (hdspm->port)6884 pci_release_regions(hdspm->pci);6885 6886 if (pci_is_enabled(hdspm->pci))6887 pci_disable_device(hdspm->pci);6888 return 0;6889 }6890 6891 6892 static void snd_hdspm_card_free(struct snd_card *card)6893 {6894 struct hdspm *hdspm = card->private_data;6895 6896 if (hdspm)6897 snd_hdspm_free(hdspm);6898 6868 } 6899 6869 … … 6914 6884 } 6915 6885 6916 err = snd_ card_new(&pci->dev, index[dev], id[dev],6917 6886 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], 6887 THIS_MODULE, sizeof(*hdspm), &card); 6918 6888 if (err < 0) 6919 6889 return err; … … 6926 6896 err = snd_hdspm_create(card, hdspm); 6927 6897 if (err < 0) 6928 goto free_card;6898 return err; 6929 6899 6930 6900 if (hdspm->io_type != MADIface) { … … 6945 6915 err = snd_card_register(card); 6946 6916 if (err < 0) 6947 goto free_card;6917 return err; 6948 6918 6949 6919 pci_set_drvdata(pci, card); … … 6951 6921 dev++; 6952 6922 return 0; 6953 6954 free_card:6955 snd_card_free(card);6956 return err;6957 }6958 6959 static void snd_hdspm_remove(struct pci_dev *pci)6960 {6961 snd_card_free(pci_get_drvdata(pci));6962 6923 } 6963 6924 … … 6966 6927 .id_table = snd_hdspm_ids, 6967 6928 .probe = snd_hdspm_probe, 6968 .remove = snd_hdspm_remove,6969 6929 }; 6970 6930 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/rme9652/rme9652.cr697 r710 209 209 unsigned char ss_channels; /* different for hammerfall/hammerfall-light */ 210 210 211 struct snd_dma_buffer playback_dma_buf;212 struct snd_dma_buffer capture_dma_buf;211 struct snd_dma_buffer *playback_dma_buf; 212 struct snd_dma_buffer *capture_dma_buf; 213 213 214 214 unsigned char *capture_buffer; /* suitably aligned address */ … … 276 276 }; 277 277 278 static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size) 279 { 280 return snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, size, dmab); 281 } 282 283 static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci) 284 { 285 if (dmab->area) 286 snd_dma_free_pages(dmab); 287 } 288 278 static struct snd_dma_buffer * 279 snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size) 280 { 281 return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size); 282 } 289 283 290 284 static const struct pci_device_id snd_rme9652_ids[] = { … … 1716 1710 } 1717 1711 1718 static void snd_rme9652_free_buffers(struct snd_rme9652 *rme9652) 1719 { 1720 snd_hammerfall_free_buffer(&rme9652->capture_dma_buf, rme9652->pci); 1721 snd_hammerfall_free_buffer(&rme9652->playback_dma_buf, rme9652->pci); 1722 } 1723 1724 static int snd_rme9652_free(struct snd_rme9652 *rme9652) 1725 { 1712 static void snd_rme9652_card_free(struct snd_card *card) 1713 { 1714 struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) card->private_data; 1715 1726 1716 if (rme9652->irq >= 0) 1727 1717 rme9652_stop(rme9652); 1728 snd_rme9652_free_buffers(rme9652);1729 1730 if (rme9652->irq >= 0)1731 free_irq(rme9652->irq, (void *)rme9652);1732 iounmap(rme9652->iobase);1733 if (rme9652->port)1734 pci_release_regions(rme9652->pci);1735 1736 if (pci_is_enabled(rme9652->pci))1737 pci_disable_device(rme9652->pci);1738 return 0;1739 1718 } 1740 1719 … … 1743 1722 unsigned long pb_bus, cb_bus; 1744 1723 1745 if (snd_hammerfall_get_buffer(rme9652->pci, &rme9652->capture_dma_buf, RME9652_DMA_AREA_BYTES) < 0 || 1746 snd_hammerfall_get_buffer(rme9652->pci, &rme9652->playback_dma_buf, RME9652_DMA_AREA_BYTES) < 0) { 1747 if (rme9652->capture_dma_buf.area) 1748 snd_dma_free_pages(&rme9652->capture_dma_buf); 1724 rme9652->capture_dma_buf = 1725 snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES); 1726 rme9652->playback_dma_buf = 1727 snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES); 1728 if (!rme9652->capture_dma_buf || !rme9652->playback_dma_buf) { 1749 1729 dev_err(rme9652->card->dev, 1750 1730 "%s: no buffers available\n", rme9652->card_name); … … 1754 1734 /* Align to bus-space 64K boundary */ 1755 1735 1756 cb_bus = ALIGN(rme9652->capture_dma_buf .addr, 0x10000ul);1757 pb_bus = ALIGN(rme9652->playback_dma_buf .addr, 0x10000ul);1736 cb_bus = ALIGN(rme9652->capture_dma_buf->addr, 0x10000ul); 1737 pb_bus = ALIGN(rme9652->playback_dma_buf->addr, 0x10000ul); 1758 1738 1759 1739 /* Tell the card where it is */ … … 1762 1742 rme9652_write(rme9652, RME9652_play_buffer, pb_bus); 1763 1743 1764 rme9652->capture_buffer = rme9652->capture_dma_buf .area + (cb_bus - rme9652->capture_dma_buf.addr);1765 rme9652->playback_buffer = rme9652->playback_dma_buf .area + (pb_bus - rme9652->playback_dma_buf.addr);1744 rme9652->capture_buffer = rme9652->capture_dma_buf->area + (cb_bus - rme9652->capture_dma_buf->addr); 1745 rme9652->playback_buffer = rme9652->playback_dma_buf->area + (pb_bus - rme9652->playback_dma_buf->addr); 1766 1746 1767 1747 return 0; … … 2280 2260 2281 2261 runtime->hw = snd_rme9652_playback_subinfo; 2282 runtime->dma_area = rme9652->playback_buffer; 2283 runtime->dma_bytes = RME9652_DMA_AREA_BYTES; 2262 snd_pcm_set_runtime_buffer(substream, rme9652->playback_dma_buf); 2284 2263 2285 2264 if (rme9652->capture_substream == NULL) { … … 2340 2319 2341 2320 runtime->hw = snd_rme9652_capture_subinfo; 2342 runtime->dma_area = rme9652->capture_buffer; 2343 runtime->dma_bytes = RME9652_DMA_AREA_BYTES; 2321 snd_pcm_set_runtime_buffer(substream, rme9652->capture_dma_buf); 2344 2322 2345 2323 if (rme9652->playback_substream == NULL) { … … 2453 2431 } 2454 2432 2455 err = pci _enable_device(pci);2433 err = pcim_enable_device(pci); 2456 2434 if (err < 0) 2457 2435 return err; … … 2463 2441 return err; 2464 2442 rme9652->port = pci_resource_start(pci, 0); 2465 rme9652->iobase = ioremap(rme9652->port, RME9652_IO_EXTENT);2443 rme9652->iobase = devm_ioremap(&pci->dev, rme9652->port, RME9652_IO_EXTENT); 2466 2444 if (rme9652->iobase == NULL) { 2467 2445 dev_err(card->dev, "unable to remap region 0x%lx-0x%lx\n", … … 2470 2448 } 2471 2449 2472 if ( request_irq(pci->irq, snd_rme9652_interrupt, IRQF_SHARED,2473 KBUILD_MODNAME, rme9652)) {2450 if (devm_request_irq(&pci->dev, pci->irq, snd_rme9652_interrupt, 2451 IRQF_SHARED, KBUILD_MODNAME, rme9652)) { 2474 2452 dev_err(card->dev, "unable to request IRQ %d\n", pci->irq); 2475 2453 return -EBUSY; … … 2563 2541 } 2564 2542 2565 static void snd_rme9652_card_free(struct snd_card *card)2566 {2567 struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) card->private_data;2568 2569 if (rme9652)2570 snd_rme9652_free(rme9652);2571 }2572 2573 2543 static int snd_rme9652_probe(struct pci_dev *pci, 2574 2544 const struct pci_device_id *pci_id) … … 2586 2556 } 2587 2557 2588 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2589 2558 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2559 sizeof(struct snd_rme9652), &card); 2590 2560 2591 2561 if (err < 0) … … 2598 2568 err = snd_rme9652_create(card, rme9652, precise_ptr[dev]); 2599 2569 if (err) 2600 goto free_card;2570 return err; 2601 2571 2602 2572 strcpy(card->shortname, rme9652->card_name); … … 2605 2575 card->shortname, rme9652->port, rme9652->irq); 2606 2576 err = snd_card_register(card); 2607 if (err) { 2608 free_card: 2609 snd_card_free(card); 2577 if (err) 2610 2578 return err; 2611 }2612 2579 pci_set_drvdata(pci, card); 2613 2580 dev++; 2614 2581 return 0; 2615 }2616 2617 static void snd_rme9652_remove(struct pci_dev *pci)2618 {2619 snd_card_free(pci_get_drvdata(pci));2620 2582 } 2621 2583 … … 2624 2586 .id_table = snd_rme9652_ids, 2625 2587 .probe = snd_rme9652_probe, 2626 .remove = snd_rme9652_remove,2627 2588 }; 2628 2589 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/trident/trident.cr697 r710 72 72 } 73 73 74 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,75 0, &card);74 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 75 sizeof(*trident), &card); 76 76 if (err < 0) 77 77 return err; 78 trident = card->private_data; 78 79 79 80 err = snd_trident_create(card, pci, 80 81 pcm_channels[dev], 81 82 ((pci->vendor << 16) | pci->device) == TRIDENT_DEVICE_ID_SI7018 ? 1 : 2, 82 wavetable_size[dev], 83 &trident); 84 if (err < 0) { 85 snd_card_free(card); 83 wavetable_size[dev]); 84 if (err < 0) 86 85 return err; 87 }88 card->private_data = trident;89 86 90 87 switch (trident->device) { … … 112 109 113 110 err = snd_trident_pcm(trident, pcm_dev++); 114 if (err < 0) { 115 snd_card_free(card); 111 if (err < 0) 116 112 return err; 117 }118 113 switch (trident->device) { 119 114 case TRIDENT_DEVICE_ID_DX: 120 115 case TRIDENT_DEVICE_ID_NX: 121 116 err = snd_trident_foldback_pcm(trident, pcm_dev++); 122 if (err < 0) { 123 snd_card_free(card); 117 if (err < 0) 124 118 return err; 125 }126 119 break; 127 120 } 128 121 if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) { 129 122 err = snd_trident_spdif_pcm(trident, pcm_dev++); 130 if (err < 0) { 131 snd_card_free(card); 123 if (err < 0) 132 124 return err; 133 }134 125 } 135 126 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { … … 139 130 MPU401_INFO_IRQ_HOOK, 140 131 -1, &trident->rmidi); 141 if (err < 0) { 142 snd_card_free(card); 132 if (err < 0) 143 133 return err; 144 }145 134 } 146 135 … … 148 137 149 138 err = snd_card_register(card); 150 if (err < 0) { 151 snd_card_free(card); 139 if (err < 0) 152 140 return err; 153 }154 141 pci_set_drvdata(pci, card); 155 142 dev++; 156 143 return 0; 157 }158 159 static void snd_trident_remove(struct pci_dev *pci)160 {161 snd_card_free(pci_get_drvdata(pci));162 144 } 163 145 … … 166 148 .id_table = snd_trident_ids, 167 149 .probe = snd_trident_probe, 168 .remove = snd_trident_remove,169 150 #ifdef CONFIG_PM_SLEEP 170 151 .driver = { 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/trident/trident.hr697 r710 252 252 __le32 *entries; /* 16k-aligned TLB table */ 253 253 dma_addr_t entries_dmaaddr; /* 16k-aligned PCI address to TLB table */ 254 struct snd_dma_buffer buffer;254 struct snd_dma_buffer *buffer; 255 255 struct snd_util_memhdr * memhdr; /* page allocation list */ 256 struct snd_dma_buffer silent_page;256 struct snd_dma_buffer *silent_page; 257 257 }; 258 258 … … 401 401 int pcm_streams, 402 402 int pcm_spdif_device, 403 int max_wavetable_size, 404 struct snd_trident ** rtrident); 403 int max_wavetable_size); 405 404 int snd_trident_create_gameport(struct snd_trident *trident); 406 405 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/trident/trident_main.cr697 r710 47 47 static void snd_trident_clear_voices(struct snd_trident * trident, 48 48 unsigned short v_min, unsigned short v_max); 49 static int snd_trident_free(struct snd_trident *trident);49 static void snd_trident_free(struct snd_card *card); 50 50 51 51 /* … … 3312 3312 } 3313 3313 3314 static int snd_trident_dev_free(struct snd_device *device)3315 {3316 struct snd_trident *trident = device->device_data;3317 return snd_trident_free(trident);3318 }3319 3320 3314 /*--------------------------------------------------------------------------- 3321 3315 snd_trident_tlb_alloc … … 3337 3331 32kB region and correct offset when necessary */ 3338 3332 3333 #ifndef TARGET_OS2 3334 trident->tlb.buffer = 3335 snd_devm_alloc_pages(&trident->pci->dev, SNDRV_DMA_TYPE_DEV, 3336 2 * SNDRV_TRIDENT_MAX_PAGES * 4); 3337 if (!trident->tlb.buffer) { 3338 dev_err(trident->card->dev, "unable to allocate TLB buffer\n"); 3339 return -ENOMEM; 3340 } 3341 #else 3339 3342 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &trident->pci->dev, 3340 3343 2 * SNDRV_TRIDENT_MAX_PAGES * 4, &trident->tlb.buffer) < 0) { … … 3342 3345 return -ENOMEM; 3343 3346 } 3344 trident->tlb.entries = (__le32 *)ALIGN((unsigned long)trident->tlb.buffer.area, SNDRV_TRIDENT_MAX_PAGES * 4); 3345 trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4); 3347 #endif 3348 trident->tlb.entries = (__le32 *)ALIGN((unsigned long)trident->tlb.buffer->area, SNDRV_TRIDENT_MAX_PAGES * 4); 3349 trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer->addr, SNDRV_TRIDENT_MAX_PAGES * 4); 3346 3350 3347 3351 /* allocate and setup silent page and initialise TLB entries */ 3352 #ifndef TARGET_OS2 3353 trident->tlb.silent_page = 3354 snd_devm_alloc_pages(&trident->pci->dev, SNDRV_DMA_TYPE_DEV, 3355 SNDRV_TRIDENT_PAGE_SIZE); 3356 if (!trident->tlb.silent_page) { 3357 dev_err(trident->card->dev, "unable to allocate silent page\n"); 3358 return -ENOMEM; 3359 } 3360 #else 3348 3361 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &trident->pci->dev, 3349 3362 SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) { … … 3351 3364 return -ENOMEM; 3352 3365 } 3353 memset(trident->tlb.silent_page.area, 0, SNDRV_TRIDENT_PAGE_SIZE); 3366 #endif 3367 memset(trident->tlb.silent_page->area, 0, SNDRV_TRIDENT_PAGE_SIZE); 3354 3368 for (i = 0; i < SNDRV_TRIDENT_MAX_PAGES; i++) 3355 trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page .addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1));3369 trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page->addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1)); 3356 3370 3357 3371 /* use emu memory block manager code to manage tlb page allocation */ … … 3510 3524 int pcm_streams, 3511 3525 int pcm_spdif_device, 3512 int max_wavetable_size, 3513 struct snd_trident ** rtrident) 3514 { 3515 struct snd_trident *trident; 3526 int max_wavetable_size) 3527 { 3528 struct snd_trident *trident = card->private_data; 3516 3529 int i, err; 3517 3530 struct snd_trident_voice *voice; 3518 3531 struct snd_trident_pcm_mixer *tmix; 3519 static const struct snd_device_ops ops = {3520 .dev_free = snd_trident_dev_free,3521 };3522 3523 *rtrident = NULL;3524 3532 3525 3533 /* enable PCI device */ 3526 err = pci _enable_device(pci);3534 err = pcim_enable_device(pci); 3527 3535 if (err < 0) 3528 3536 return err; … … 3531 3539 dev_err(card->dev, 3532 3540 "architecture does not support 30bit PCI busmaster DMA\n"); 3533 pci_disable_device(pci);3534 3541 return -ENXIO; 3535 3542 } 3536 3543 3537 trident = kzalloc(sizeof(*trident), GFP_KERNEL);3538 if (trident == NULL) {3539 pci_disable_device(pci);3540 return -ENOMEM;3541 }3542 3544 trident->device = (pci->vendor << 16) | pci->device; 3543 3545 trident->card = card; … … 3555 3557 trident->synth.max_size = max_wavetable_size * 1024; 3556 3558 trident->irq = -1; 3559 card->private_free = snd_trident_free; 3557 3560 3558 3561 trident->midi_port = TRID_REG(trident, T4D_MPU401_BASE); … … 3560 3563 3561 3564 err = pci_request_regions(pci, "Trident Audio"); 3562 if (err < 0) { 3563 kfree(trident); 3564 pci_disable_device(pci); 3565 if (err < 0) 3565 3566 return err; 3566 }3567 3567 trident->port = pci_resource_start(pci, 0); 3568 3568 3569 if ( request_irq(pci->irq, snd_trident_interrupt, IRQF_SHARED,3570 KBUILD_MODNAME, trident)) {3569 if (devm_request_irq(&pci->dev, pci->irq, snd_trident_interrupt, 3570 IRQF_SHARED, KBUILD_MODNAME, trident)) { 3571 3571 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 3572 snd_trident_free(trident);3573 3572 return -EBUSY; 3574 3573 } … … 3578 3577 /* allocate 16k-aligned TLB for NX cards */ 3579 3578 trident->tlb.entries = NULL; 3580 trident->tlb.buffer.area = NULL;3581 3579 if (trident->device == TRIDENT_DEVICE_ID_NX) { 3582 3580 err = snd_trident_tlb_alloc(trident); 3583 if (err < 0) { 3584 snd_trident_free(trident); 3581 if (err < 0) 3585 3582 return err; 3586 }3587 3583 } 3588 3584 … … 3604 3600 break; 3605 3601 } 3606 if (err < 0) { 3607 snd_trident_free(trident); 3602 if (err < 0) 3608 3603 return err; 3609 }3610 3611 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops);3612 if (err < 0) {3613 snd_trident_free(trident);3614 return err;3615 }3616 3604 3617 3605 err = snd_trident_mixer(trident, pcm_spdif_device); … … 3637 3625 3638 3626 snd_trident_proc_init(trident); 3639 *rtrident = trident;3640 3627 return 0; 3641 3628 } … … 3647 3634 the 4DWave card. 3648 3635 3649 Parameters: trident - device specific private data for 4DWave card3636 Parameters: card - card to release 3650 3637 3651 3638 Returns: None. … … 3653 3640 ---------------------------------------------------------------------------*/ 3654 3641 3655 static int snd_trident_free(struct snd_trident *trident) 3656 { 3642 static void snd_trident_free(struct snd_card *card) 3643 { 3644 struct snd_trident *trident = card->private_data; 3645 3657 3646 snd_trident_free_gameport(trident); 3658 3647 snd_trident_disable_eso(trident); … … 3663 3652 outl(0, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); 3664 3653 } 3665 if (trident->irq >= 0) 3666 free_irq(trident->irq, trident); 3667 if (trident->tlb.buffer.area) { 3654 if (trident->tlb.buffer) { 3668 3655 outl(0, TRID_REG(trident, NX_TLBC)); 3669 3656 snd_util_memhdr_free(trident->tlb.memhdr); 3670 if (trident->tlb.silent_page.area) 3671 snd_dma_free_pages(&trident->tlb.silent_page); 3672 snd_dma_free_pages(&trident->tlb.buffer); 3673 } 3674 pci_release_regions(trident->pci); 3675 pci_disable_device(trident->pci); 3676 kfree(trident); 3677 return 0; 3657 } 3678 3658 } 3679 3659 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/trident/trident_memory.cr697 r710 32 32 #define set_tlb_bus(trident,page,addr) __set_tlb_bus(trident,page,addr) 33 33 /* fill TLB entrie(s) corresponding to page with silence pointer */ 34 #define set_silent_tlb(trident,page) __set_tlb_bus(trident, page, trident->tlb.silent_page .addr)34 #define set_silent_tlb(trident,page) __set_tlb_bus(trident, page, trident->tlb.silent_page->addr) 35 35 /* get aligned page from offset address */ 36 36 #define get_aligned_page(offset) ((offset) >> 12) … … 59 59 { 60 60 page <<= 1; 61 __set_tlb_bus(trident, page, trident->tlb.silent_page .addr);62 __set_tlb_bus(trident, page+1, trident->tlb.silent_page .addr);61 __set_tlb_bus(trident, page, trident->tlb.silent_page->addr); 62 __set_tlb_bus(trident, page+1, trident->tlb.silent_page->addr); 63 63 } 64 64 … … 93 93 page *= UNIT_PAGES; 94 94 for (i = 0; i < UNIT_PAGES; i++, page++) 95 __set_tlb_bus(trident, page, trident->tlb.silent_page .addr);95 __set_tlb_bus(trident, page, trident->tlb.silent_page->addr); 96 96 } 97 97 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/via82xx.cr697 r710 1916 1916 { 1917 1917 struct gameport *gp; 1918 struct resource *r;1919 1918 1920 1919 if (!joystick) 1921 1920 return -ENODEV; 1922 1921 1923 r = request_region(JOYSTICK_ADDR, 8, "VIA686 gameport");1924 if (!r) {1922 if (!devm_request_region(chip->card->dev, JOYSTICK_ADDR, 8, 1923 "VIA686 gameport")) { 1925 1924 dev_warn(chip->card->dev, "cannot reserve joystick port %#x\n", 1926 1925 JOYSTICK_ADDR); … … 1932 1931 dev_err(chip->card->dev, 1933 1932 "cannot allocate memory for gameport\n"); 1934 release_and_free_resource(r);1935 1933 return -ENOMEM; 1936 1934 } … … 1940 1938 gameport_set_dev_parent(gp, &chip->pci->dev); 1941 1939 gp->io = JOYSTICK_ADDR; 1942 gameport_set_port_data(gp, r);1943 1940 1944 1941 /* Enable legacy joystick port */ … … 1954 1951 { 1955 1952 if (chip->gameport) { 1956 struct resource *r = gameport_get_port_data(chip->gameport);1957 1958 1953 gameport_unregister_port(chip->gameport); 1959 1954 chip->gameport = NULL; 1960 release_and_free_resource(r);1961 1955 } 1962 1956 } … … 2068 2062 } 2069 2063 if (mpu_port >= 0x200) 2064 #ifndef TARGET_OS2 2065 chip->mpu_res = devm_request_region(&chip->pci->dev, mpu_port, 2066 2, "VIA82xx MPU401"); 2067 #else 2070 2068 chip->mpu_res = request_region(mpu_port, 2, "VIA82xx MPU401"); 2069 #endif 2071 2070 if (chip->mpu_res) { 2072 2071 if (rev_h) … … 2307 2306 #endif /* CONFIG_PM_SLEEP */ 2308 2307 2309 static int snd_via82xx_free(struct via82xx *chip) 2310 { 2308 static void snd_via82xx_free(struct snd_card *card) 2309 { 2310 struct via82xx *chip = card->private_data; 2311 2311 unsigned int i; 2312 2312 2313 if (chip->irq < 0)2314 goto __end_hw;2315 2313 /* disable interrupts */ 2316 2314 for (i = 0; i < chip->num_devs; i++) 2317 2315 snd_via82xx_channel_reset(chip, &chip->devs[i]); 2318 2319 if (chip->irq >= 0)2320 free_irq(chip->irq, chip);2321 __end_hw:2322 release_and_free_resource(chip->mpu_res);2323 pci_release_regions(chip->pci);2324 2316 2325 2317 if (chip->chip_type == TYPE_VIA686) { … … 2328 2320 pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, chip->old_legacy_cfg); 2329 2321 } 2330 pci_disable_device(chip->pci);2331 kfree(chip);2332 return 0;2333 }2334 2335 static int snd_via82xx_dev_free(struct snd_device *device)2336 {2337 struct via82xx *chip = device->device_data;2338 return snd_via82xx_free(chip);2339 2322 } 2340 2323 … … 2343 2326 int chip_type, 2344 2327 int revision, 2345 unsigned int ac97_clock, 2346 struct via82xx **r_via) 2347 { 2348 struct via82xx *chip; 2328 unsigned int ac97_clock) 2329 { 2330 struct via82xx *chip = card->private_data; 2349 2331 int err; 2350 static const struct snd_device_ops ops = { 2351 .dev_free = snd_via82xx_dev_free, 2352 }; 2353 2354 err = pci_enable_device(pci); 2332 2333 err = pcim_enable_device(pci); 2355 2334 if (err < 0) 2356 2335 return err; 2357 2358 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2359 if (!chip) {2360 pci_disable_device(pci);2361 return -ENOMEM;2362 }2363 2336 2364 2337 chip->chip_type = chip_type; … … 2378 2351 2379 2352 err = pci_request_regions(pci, card->driver); 2380 if (err < 0) { 2381 kfree(chip); 2382 pci_disable_device(pci); 2353 if (err < 0) 2383 2354 return err; 2384 }2385 2355 chip->port = pci_resource_start(pci, 0); 2356 #ifndef TARGET_OS2 2357 if (devm_request_irq(&pci->dev, pci->irq, 2358 chip_type == TYPE_VIA8233 ? 2359 snd_via8233_interrupt : snd_via686_interrupt, 2360 IRQF_SHARED, 2361 KBUILD_MODNAME, chip)) { 2362 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2363 return -EBUSY; 2364 } 2365 #else 2386 2366 if (request_irq(pci->irq, 2387 2367 chip_type == TYPE_VIA8233 ? … … 2393 2373 return -EBUSY; 2394 2374 } 2375 #endif 2395 2376 chip->irq = pci->irq; 2396 2377 card->sync_irq = chip->irq; 2378 card->private_free = snd_via82xx_free; 2397 2379 if (ac97_clock >= 8000 && ac97_clock <= 48000) 2398 2380 chip->ac97_clock = ac97_clock; 2399 2381 2400 2382 err = snd_via82xx_chip_init(chip); 2401 if (err < 0) { 2402 snd_via82xx_free(chip); 2383 if (err < 0) 2403 2384 return err; 2404 }2405 2406 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2407 if (err < 0) {2408 snd_via82xx_free(chip);2409 return err;2410 }2411 2385 2412 2386 /* The 8233 ac97 controller does not implement the master bit … … 2414 2388 * We call pci_set_master here because it does not hurt. */ 2415 2389 pci_set_master(pci); 2416 2417 *r_via = chip;2418 2390 return 0; 2419 2391 } … … 2516 2488 int err; 2517 2489 2518 err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card); 2490 err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, 2491 sizeof(*chip), &card); 2519 2492 if (err < 0) 2520 2493 return err; 2494 chip = card->private_data; 2521 2495 2522 2496 card_type = pci_id->driver_data; … … 2557 2531 default: 2558 2532 dev_err(card->dev, "invalid card type %d\n", card_type); 2559 err = -EINVAL; 2560 goto __error; 2533 return -EINVAL; 2561 2534 } 2562 2535 2563 2536 err = snd_via82xx_create(card, pci, chip_type, pci->revision, 2564 ac97_clock , &chip);2537 ac97_clock); 2565 2538 if (err < 0) 2566 goto __error; 2567 card->private_data = chip; 2539 return err; 2568 2540 err = snd_via82xx_mixer_new(chip, ac97_quirk); 2569 2541 if (err < 0) 2570 goto __error;2542 return err; 2571 2543 2572 2544 if (chip_type == TYPE_VIA686) { 2573 2545 err = snd_via686_pcm_new(chip); 2574 2546 if (err < 0) 2575 goto __error;2547 return err; 2576 2548 err = snd_via686_init_misc(chip); 2577 2549 if (err < 0) 2578 goto __error;2550 return err; 2579 2551 } else { 2580 2552 if (chip_type == TYPE_VIA8233A) { 2581 2553 err = snd_via8233a_pcm_new(chip); 2582 2554 if (err < 0) 2583 goto __error;2555 return err; 2584 2556 // chip->dxs_fixed = 1; /* FIXME: use 48k for DXS #3? */ 2585 2557 } else { 2586 2558 err = snd_via8233_pcm_new(chip); 2587 2559 if (err < 0) 2588 goto __error;2560 return err; 2589 2561 if (dxs_support == VIA_DXS_48K) 2590 2562 chip->dxs_fixed = 1; … … 2598 2570 err = snd_via8233_init_misc(chip); 2599 2571 if (err < 0) 2600 goto __error;2572 return err; 2601 2573 } 2602 2574 … … 2612 2584 2613 2585 err = snd_card_register(card); 2614 if (err < 0) { 2615 snd_card_free(card); 2586 if (err < 0) 2616 2587 return err; 2617 }2618 2588 pci_set_drvdata(pci, card); 2619 2589 return 0; 2620 2621 __error:2622 snd_card_free(card);2623 return err;2624 }2625 2626 static void snd_via82xx_remove(struct pci_dev *pci)2627 {2628 snd_card_free(pci_get_drvdata(pci));2629 2590 } 2630 2591 … … 2633 2594 .id_table = snd_via82xx_ids, 2634 2595 .probe = snd_via82xx_probe, 2635 .remove = snd_via82xx_remove,2636 2596 .driver = { 2637 2597 .pm = SND_VIA82XX_PM_OPS, 
- 
      GPL/branches/uniaud32-next/alsa-kernel/pci/ymfpci/ymfpci.cr697 r710 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/branches/uniaud32-next/alsa-kernel/pci/ymfpci/ymfpci.hr615 r710 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/branches/uniaud32-next/alsa-kernel/pci/ymfpci/ymfpci_main.cr697 r710 2121 2121 /* work_ptr must be aligned to 256 bytes, but it's already 2122 2122 covered with the kernel page allocation mechanism */ 2123 #ifndef TARGET_OS2 2124 chip->work_ptr = snd_devm_alloc_pages(&chip->pci->dev, 2125 SNDRV_DMA_TYPE_DEV, size); 2126 if (!chip->work_ptr) 2127 return -ENOMEM; 2128 #else 2123 2129 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &chip->pci->dev, 2124 2130 size, &chip->work_ptr) < 0) 2125 2131 return -ENOMEM; 2126 ptr = chip->work_ptr.area; 2127 ptr_addr = chip->work_ptr.addr; 2132 #endif 2133 ptr = chip->work_ptr->area; 2134 ptr_addr = chip->work_ptr->addr; 2128 2135 memset(ptr, 0, size); /* for sure */ 2129 2136 … … 2170 2177 2171 2178 snd_BUG_ON(ptr + chip->work_size != 2172 chip->work_ptr .area + chip->work_ptr.bytes);2179 chip->work_ptr->area + chip->work_ptr->bytes); 2173 2180 2174 2181 snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, chip->bank_base_playback_addr); … … 2201 2208 } 2202 2209 2203 static int snd_ymfpci_free(struct snd_ymfpci *chip) 2204 { 2210 static void snd_ymfpci_free(struct snd_card *card) 2211 { 2212 struct snd_ymfpci *chip = card->private_data; 2205 2213 u16 ctrl; 2206 2214 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 } 2215 snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0); 2216 snd_ymfpci_writel(chip, YDSXGR_BUF441OUTVOL, 0); 2217 snd_ymfpci_writel(chip, YDSXGR_LEGACYOUTVOL, 0); 2218 snd_ymfpci_writel(chip, YDSXGR_STATUS, ~0); 2219 snd_ymfpci_disable_dsp(chip); 2220 snd_ymfpci_writel(chip, YDSXGR_PLAYCTRLBASE, 0); 2221 snd_ymfpci_writel(chip, YDSXGR_RECCTRLBASE, 0); 2222 snd_ymfpci_writel(chip, YDSXGR_EFFCTRLBASE, 0); 2223 snd_ymfpci_writel(chip, YDSXGR_WORKBASE, 0); 2224 snd_ymfpci_writel(chip, YDSXGR_WORKSIZE, 0); 2225 ctrl = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL); 2226 snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, ctrl & ~0x0007); 2224 2227 2225 2228 snd_ymfpci_ac3_done(chip); 2226 2229 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 2230 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 2231 2249 2232 pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl); 2250 2233 2251 pci_disable_device(chip->pci);2252 2234 release_firmware(chip->dsp_microcode); 2253 2235 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 2236 } 2263 2237 … … 2351 2325 int snd_ymfpci_create(struct snd_card *card, 2352 2326 struct pci_dev *pci, 2353 unsigned short old_legacy_ctrl, 2354 struct snd_ymfpci **rchip) 2355 { 2356 struct snd_ymfpci *chip; 2327 unsigned short old_legacy_ctrl) 2328 { 2329 struct snd_ymfpci *chip = card->private_data; 2357 2330 int err; 2358 static const struct snd_device_ops ops = { 2359 .dev_free = snd_ymfpci_dev_free, 2360 }; 2361 2362 *rchip = NULL; 2363 2331 2364 2332 /* enable PCI device */ 2365 err = pci _enable_device(pci);2333 err = pcim_enable_device(pci); 2366 2334 if (err < 0) 2367 2335 return err; 2368 2336 2369 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2370 if (chip == NULL) {2371 pci_disable_device(pci);2372 return -ENOMEM;2373 }2374 2337 chip->old_legacy_ctrl = old_legacy_ctrl; 2375 2338 spin_lock_init(&chip->reg_lock); … … 2382 2345 chip->device_id = pci->device; 2383 2346 chip->rev = pci->revision; 2347 2348 err = pci_request_regions(pci, "YMFPCI"); 2349 if (err < 0) 2350 return err; 2351 2384 2352 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) { 2353 chip->reg_area_virt = devm_ioremap(&pci->dev, chip->reg_area_phys, 0x8000); 2354 if (!chip->reg_area_virt) { 2391 2355 dev_err(chip->card->dev, 2392 2356 "unable to grab memory region 0x%lx-0x%lx\n", 2393 2357 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, 2358 return -EBUSY; 2359 } 2360 pci_set_master(pci); 2361 chip->src441_used = -1; 2362 2363 if (devm_request_irq(&pci->dev, pci->irq, snd_ymfpci_interrupt, IRQF_SHARED, 2398 2364 KBUILD_MODNAME, chip)) { 2399 2365 dev_err(chip->card->dev, "unable to grab IRQ %d\n", pci->irq); 2400 err = -EBUSY; 2401 goto free_chip; 2366 return -EBUSY; 2402 2367 } 2403 2368 chip->irq = pci->irq; 2404 2369 card->sync_irq = chip->irq; 2370 card->private_free = snd_ymfpci_free; 2405 2371 2406 2372 snd_ymfpci_aclink_reset(pci); 2407 if (snd_ymfpci_codec_ready(chip, 0) < 0) { 2408 err = -EIO; 2409 goto free_chip; 2410 } 2373 if (snd_ymfpci_codec_ready(chip, 0) < 0) 2374 return -EIO; 2411 2375 2412 2376 err = snd_ymfpci_request_firmware(chip); 2413 2377 if (err < 0) { 2414 2378 dev_err(chip->card->dev, "firmware request failed: %d\n", err); 2415 goto free_chip;2379 return err; 2416 2380 } 2417 2381 snd_ymfpci_download_image(chip); … … 2419 2383 udelay(100); /* seems we need a delay after downloading image.. */ 2420 2384 2421 if (snd_ymfpci_memalloc(chip) < 0) { 2422 err = -EIO; 2423 goto free_chip; 2424 } 2385 if (snd_ymfpci_memalloc(chip) < 0) 2386 return -EIO; 2425 2387 2426 2388 err = snd_ymfpci_ac3_init(chip); 2427 2389 if (err < 0) 2428 goto free_chip;2390 return err; 2429 2391 2430 2392 #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 } 2393 chip->saved_regs = devm_kmalloc_array(&pci->dev, YDSXGR_NUM_SAVED_REGS, 2394 sizeof(u32), GFP_KERNEL); 2395 if (!chip->saved_regs) 2396 return -ENOMEM; 2437 2397 #endif 2438 2398 2439 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2440 if (err < 0)2441 goto free_chip;2442 2443 2399 snd_ymfpci_proc_init(card, chip); 2444 2400 2445 *rchip = chip; 2446 return 0; 2447 2448 free_chip: 2449 snd_ymfpci_free(chip); 2450 return err; 2451 } 2401 return 0; 2402 } 
- 
      GPL/branches/uniaud32-next/include/linux/device.hr647 r710 290 290 /* debugging and troubleshooting/diagnostic helpers. */ 291 291 extern const char *dev_driver_string(const struct device *dev); 292 292 #define devm_kzalloc(A, B, C) kzalloc(B, C) 293 #define devm_kmalloc(A, B, C) kmalloc(B, C) 294 #define devm_kcalloc(A, B, C, D) kmalloc(B, C, D) 295 #define devm_kmalloc_array(A, B, C, D) kmalloc_array(B, C, D) 293 296 #endif /* _LINUX_DEVICE_H */ 294 297 
- 
      GPL/branches/uniaud32-next/include/linux/interrupt.hr647 r710 154 154 155 155 static inline void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id) {} 156 #define devm_request_irq(A, B, C, D, E, F) request_irq(B, C, D, E, F) 157 156 158 #endif 
- 
      GPL/branches/uniaud32-next/include/linux/io.hr647 r710 7 7 #include <linux/err.h> 8 8 9 #define devm_ioremap(A, B, C) ioremap(B, C) 9 10 #endif /* _LINUX_IO_H */ 
- 
      GPL/branches/uniaud32-next/include/linux/ioport.hr647 r710 111 111 extern int autoirq_report(int waittime); 112 112 113 #define devm_request_region(A, B, C, D) request_region(B, C, D) 113 114 #endif /* _LINUX_IOPORT_H */ 
- 
      GPL/branches/uniaud32-next/include/linux/pci.hr708 r710 770 770 771 771 #define dev_is_pci(d) (true) 772 772 #define pcim_enable_device pci_enable_device 773 #define pcim_iomap pci_iomap 773 774 #endif /* LINUX_PCI_H */ 
  Note:
 See   TracChangeset
 for help on using the changeset viewer.
  
