Merge branch 'fix/misc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'fix/misc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  sound: pcm_lib: fix unsorted list constraint handling
  sound: vx222: fix input level control range check
  ALSA: ali5451: fix timeout handling in snd_ali_{codecs,timer}_ready()
			
			
This commit is contained in:
		
						commit
						a206e9417f
					
				| @ -943,47 +943,24 @@ static int snd_interval_ratden(struct snd_interval *i, | ||||
| int snd_interval_list(struct snd_interval *i, unsigned int count, unsigned int *list, unsigned int mask) | ||||
| { | ||||
|         unsigned int k; | ||||
| 	int changed = 0; | ||||
| 	struct snd_interval list_range; | ||||
| 
 | ||||
| 	if (!count) { | ||||
| 		i->empty = 1; | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	snd_interval_any(&list_range); | ||||
| 	list_range.min = UINT_MAX; | ||||
| 	list_range.max = 0; | ||||
|         for (k = 0; k < count; k++) { | ||||
| 		if (mask && !(mask & (1 << k))) | ||||
| 			continue; | ||||
|                 if (i->min == list[k] && !i->openmin) | ||||
|                         goto _l1; | ||||
|                 if (i->min < list[k]) { | ||||
|                         i->min = list[k]; | ||||
| 			i->openmin = 0; | ||||
| 			changed = 1; | ||||
|                         goto _l1; | ||||
|                 } | ||||
|         } | ||||
|         i->empty = 1; | ||||
|         return -EINVAL; | ||||
|  _l1: | ||||
|         for (k = count; k-- > 0;) { | ||||
| 		if (mask && !(mask & (1 << k))) | ||||
| 		if (!snd_interval_test(i, list[k])) | ||||
| 			continue; | ||||
|                 if (i->max == list[k] && !i->openmax) | ||||
|                         goto _l2; | ||||
|                 if (i->max > list[k]) { | ||||
|                         i->max = list[k]; | ||||
| 			i->openmax = 0; | ||||
| 			changed = 1; | ||||
|                         goto _l2; | ||||
|                 } | ||||
| 		list_range.min = min(list_range.min, list[k]); | ||||
| 		list_range.max = max(list_range.max, list[k]); | ||||
|         } | ||||
|         i->empty = 1; | ||||
|         return -EINVAL; | ||||
|  _l2: | ||||
| 	if (snd_interval_checkempty(i)) { | ||||
| 		i->empty = 1; | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
|         return changed; | ||||
| 	return snd_interval_refine(i, &list_range); | ||||
| } | ||||
| 
 | ||||
| EXPORT_SYMBOL(snd_interval_list); | ||||
|  | ||||
| @ -310,12 +310,16 @@ static int snd_ali_codec_ready(struct snd_ali *codec, | ||||
| 	unsigned int res; | ||||
| 	 | ||||
| 	end_time = jiffies + msecs_to_jiffies(250); | ||||
| 	do { | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		res = snd_ali_5451_peek(codec,port); | ||||
| 		if (!(res & 0x8000)) | ||||
| 			return 0; | ||||
| 		if (!time_after_eq(end_time, jiffies)) | ||||
| 			break; | ||||
| 		schedule_timeout_uninterruptible(1); | ||||
| 	} while (time_after_eq(end_time, jiffies)); | ||||
| 	} | ||||
| 
 | ||||
| 	snd_ali_5451_poke(codec, port, res & ~0x8000); | ||||
| 	snd_printdd("ali_codec_ready: codec is not ready.\n "); | ||||
| 	return -EIO; | ||||
| @ -327,15 +331,17 @@ static int snd_ali_stimer_ready(struct snd_ali *codec) | ||||
| 	unsigned long dwChk1,dwChk2; | ||||
| 	 | ||||
| 	dwChk1 = snd_ali_5451_peek(codec, ALI_STIMER); | ||||
| 	dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER); | ||||
| 
 | ||||
| 	end_time = jiffies + msecs_to_jiffies(250); | ||||
| 	do { | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER); | ||||
| 		if (dwChk2 != dwChk1) | ||||
| 			return 0; | ||||
| 		if (!time_after_eq(end_time, jiffies)) | ||||
| 			break; | ||||
| 		schedule_timeout_uninterruptible(1); | ||||
| 	} while (time_after_eq(end_time, jiffies)); | ||||
| 	} | ||||
| 
 | ||||
| 	snd_printk(KERN_ERR "ali_stimer_read: stimer is not ready.\n"); | ||||
| 	return -EIO; | ||||
| } | ||||
|  | ||||
| @ -885,10 +885,10 @@ static int vx_input_level_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem | ||||
| 	struct vx_core *_chip = snd_kcontrol_chip(kcontrol); | ||||
| 	struct snd_vx222 *chip = (struct snd_vx222 *)_chip; | ||||
| 	if (ucontrol->value.integer.value[0] < 0 || | ||||
| 	    ucontrol->value.integer.value[0] < MIC_LEVEL_MAX) | ||||
| 	    ucontrol->value.integer.value[0] > MIC_LEVEL_MAX) | ||||
| 		return -EINVAL; | ||||
| 	if (ucontrol->value.integer.value[1] < 0 || | ||||
| 	    ucontrol->value.integer.value[1] < MIC_LEVEL_MAX) | ||||
| 	    ucontrol->value.integer.value[1] > MIC_LEVEL_MAX) | ||||
| 		return -EINVAL; | ||||
| 	mutex_lock(&_chip->mixer_mutex); | ||||
| 	if (chip->input_level[0] != ucontrol->value.integer.value[0] || | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user