diff options
| author | Takashi Iwai <tiwai@suse.de> | 2017-09-04 10:10:27 +0200 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2017-09-04 10:10:27 +0200 | 
| commit | 2a32a4d9c9cc4141abdf8e90f0cd167a614c9e91 (patch) | |
| tree | 1cd995a5f989c879d3d71566a1fa2db9745c5263 /sound | |
| parent | 1f7f51a63114bab3a05920f4b1343154e95e2cb6 (diff) | |
| parent | 39cdc62b1b4efa39831d4de22f990043b0304fff (diff) | |
| download | linux-2a32a4d9c9cc4141abdf8e90f0cd167a614c9e91.tar.bz2 | |
Merge branch 'for-next' into for-linus
Diffstat (limited to 'sound')
168 files changed, 1187 insertions, 1059 deletions
diff --git a/sound/aoa/codecs/onyx.c b/sound/aoa/codecs/onyx.c index a04edff8b729..d2d96ca082b7 100644 --- a/sound/aoa/codecs/onyx.c +++ b/sound/aoa/codecs/onyx.c @@ -167,7 +167,7 @@ static int onyx_snd_vol_put(struct snd_kcontrol *kcontrol,  	return 1;  } -static struct snd_kcontrol_new volume_control = { +static const struct snd_kcontrol_new volume_control = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "Master Playback Volume",  	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE, @@ -229,7 +229,7 @@ static int onyx_snd_inputgain_put(struct snd_kcontrol *kcontrol,  	return n != v;  } -static struct snd_kcontrol_new inputgain_control = { +static const struct snd_kcontrol_new inputgain_control = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "Master Capture Volume",  	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE, @@ -284,7 +284,7 @@ static int onyx_snd_capture_source_put(struct snd_kcontrol *kcontrol,  	return 1;  } -static struct snd_kcontrol_new capture_source_control = { +static const struct snd_kcontrol_new capture_source_control = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	/* If we name this 'Input Source', it properly shows up in  	 * alsamixer as a selection, * but it's shown under the @@ -348,7 +348,7 @@ static int onyx_snd_mute_put(struct snd_kcontrol *kcontrol,  	return !err ? (v != c) : err;  } -static struct snd_kcontrol_new mute_control = { +static const struct snd_kcontrol_new mute_control = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "Master Playback Switch",  	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE, @@ -476,7 +476,7 @@ static int onyx_spdif_mask_get(struct snd_kcontrol *kcontrol,  	return 0;  } -static struct snd_kcontrol_new onyx_spdif_mask = { +static const struct snd_kcontrol_new onyx_spdif_mask = {  	.access =	SNDRV_CTL_ELEM_ACCESS_READ,  	.iface =	SNDRV_CTL_ELEM_IFACE_PCM,  	.name =		SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK), @@ -533,7 +533,7 @@ static int onyx_spdif_put(struct snd_kcontrol *kcontrol,  	return 1;  } -static struct snd_kcontrol_new onyx_spdif_ctrl = { +static const struct snd_kcontrol_new onyx_spdif_ctrl = {  	.access =	SNDRV_CTL_ELEM_ACCESS_READWRITE,  	.iface =	SNDRV_CTL_ELEM_IFACE_PCM,  	.name =		SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c index 733b6365dad6..15c05755d270 100644 --- a/sound/aoa/codecs/tas.c +++ b/sound/aoa/codecs/tas.c @@ -905,8 +905,8 @@ static int tas_i2c_probe(struct i2c_client *client,  		goto fail;  	}  	printk(KERN_DEBUG -	       "snd-aoa-codec-tas: tas found, addr 0x%02x on %s\n", -	       (unsigned int)client->addr, node->full_name); +	       "snd-aoa-codec-tas: tas found, addr 0x%02x on %pOF\n", +	       (unsigned int)client->addr, node);  	return 0;   fail:  	mutex_destroy(&tas->mtx); diff --git a/sound/aoa/soundbus/i2sbus/pcm.c b/sound/aoa/soundbus/i2sbus/pcm.c index 053b09c79053..e618531757e0 100644 --- a/sound/aoa/soundbus/i2sbus/pcm.c +++ b/sound/aoa/soundbus/i2sbus/pcm.c @@ -778,7 +778,7 @@ static snd_pcm_uframes_t i2sbus_playback_pointer(struct snd_pcm_substream  	return i2sbus_pcm_pointer(i2sdev, 0);  } -static struct snd_pcm_ops i2sbus_playback_ops = { +static const struct snd_pcm_ops i2sbus_playback_ops = {  	.open =		i2sbus_playback_open,  	.close =	i2sbus_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -848,7 +848,7 @@ static snd_pcm_uframes_t i2sbus_record_pointer(struct snd_pcm_substream  	return i2sbus_pcm_pointer(i2sdev, 1);  } -static struct snd_pcm_ops i2sbus_record_ops = { +static const struct snd_pcm_ops i2sbus_record_ops = {  	.open =		i2sbus_record_open,  	.close =	i2sbus_record_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 4140b1b95054..0114ffed56dd 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c @@ -348,7 +348,7 @@ static irqreturn_t aaci_irq(int irq, void *devid)  /*   * ALSA support.   */ -static struct snd_pcm_hardware aaci_hw_info = { +static const struct snd_pcm_hardware aaci_hw_info = {  	.info			= SNDRV_PCM_INFO_MMAP |  				  SNDRV_PCM_INFO_MMAP_VALID |  				  SNDRV_PCM_INFO_INTERLEAVED | @@ -635,7 +635,7 @@ static int aaci_pcm_playback_trigger(struct snd_pcm_substream *substream, int cm  	return ret;  } -static struct snd_pcm_ops aaci_playback_ops = { +static const struct snd_pcm_ops aaci_playback_ops = {  	.open		= aaci_pcm_open,  	.close		= aaci_pcm_close,  	.ioctl		= snd_pcm_lib_ioctl, @@ -738,7 +738,7 @@ static int aaci_pcm_capture_prepare(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_ops aaci_capture_ops = { +static const struct snd_pcm_ops aaci_capture_ops = {  	.open		= aaci_pcm_open,  	.close		= aaci_pcm_close,  	.ioctl		= snd_pcm_lib_ioctl, @@ -786,7 +786,7 @@ static SIMPLE_DEV_PM_OPS(aaci_dev_pm_ops, aaci_suspend, aaci_resume);  #endif -static struct ac97_pcm ac97_defs[] = { +static const struct ac97_pcm ac97_defs[] = {  	[0] = {	/* Front PCM */  		.exclusive = 1,  		.r = { diff --git a/sound/arm/pxa2xx-pcm.c b/sound/arm/pxa2xx-pcm.c index 83fcfac97739..1c6f4b436de3 100644 --- a/sound/arm/pxa2xx-pcm.c +++ b/sound/arm/pxa2xx-pcm.c @@ -68,7 +68,7 @@ static int pxa2xx_pcm_close(struct snd_pcm_substream *substream)  	return __pxa2xx_pcm_close(substream);  } -static struct snd_pcm_ops pxa2xx_pcm_ops = { +static const struct snd_pcm_ops pxa2xx_pcm_ops = {  	.open		= pxa2xx_pcm_open,  	.close		= pxa2xx_pcm_close,  	.ioctl		= snd_pcm_lib_ioctl, diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c index 9d2c9d9af688..24623c790773 100644 --- a/sound/atmel/ac97c.c +++ b/sound/atmel/ac97c.c @@ -66,7 +66,7 @@ struct atmel_ac97c {  #define ac97c_readl(chip, reg)				\  	__raw_readl((chip)->regs + AC97C_##reg) -static struct snd_pcm_hardware atmel_ac97c_hw = { +static const struct snd_pcm_hardware atmel_ac97c_hw = {  	.info			= (SNDRV_PCM_INFO_MMAP  				  | SNDRV_PCM_INFO_MMAP_VALID  				  | SNDRV_PCM_INFO_INTERLEAVED @@ -461,7 +461,7 @@ atmel_ac97c_capture_pointer(struct snd_pcm_substream *substream)  	return frames;  } -static struct snd_pcm_ops atmel_ac97_playback_ops = { +static const struct snd_pcm_ops atmel_ac97_playback_ops = {  	.open		= atmel_ac97c_playback_open,  	.close		= atmel_ac97c_playback_close,  	.ioctl		= snd_pcm_lib_ioctl, @@ -472,7 +472,7 @@ static struct snd_pcm_ops atmel_ac97_playback_ops = {  	.pointer	= atmel_ac97c_playback_pointer,  }; -static struct snd_pcm_ops atmel_ac97_capture_ops = { +static const struct snd_pcm_ops atmel_ac97_capture_ops = {  	.open		= atmel_ac97c_capture_open,  	.close		= atmel_ac97c_capture_close,  	.ioctl		= snd_pcm_lib_ioctl, @@ -558,7 +558,7 @@ static irqreturn_t atmel_ac97c_interrupt(int irq, void *dev)  	return retval;  } -static struct ac97_pcm at91_ac97_pcm_defs[] = { +static const struct ac97_pcm at91_ac97_pcm_defs[] = {  	/* Playback */  	{  		.exclusive = 1, diff --git a/sound/core/control.c b/sound/core/control.c index 4525e127afd9..56b3e2d49c82 100644 --- a/sound/core/control.c +++ b/sound/core/control.c @@ -864,14 +864,14 @@ static int snd_ctl_elem_info_user(struct snd_ctl_file *ctl,  	if (copy_from_user(&info, _info, sizeof(info)))  		return -EFAULT; -	snd_power_lock(ctl->card);  	result = snd_power_wait(ctl->card, SNDRV_CTL_POWER_D0); -	if (result >= 0) -		result = snd_ctl_elem_info(ctl, &info); -	snd_power_unlock(ctl->card); -	if (result >= 0) -		if (copy_to_user(_info, &info, sizeof(info))) -			return -EFAULT; +	if (result < 0) +		return result; +	result = snd_ctl_elem_info(ctl, &info); +	if (result < 0) +		return result; +	if (copy_to_user(_info, &info, sizeof(info))) +		return -EFAULT;  	return result;  } @@ -881,24 +881,18 @@ static int snd_ctl_elem_read(struct snd_card *card,  	struct snd_kcontrol *kctl;  	struct snd_kcontrol_volatile *vd;  	unsigned int index_offset; -	int result; -	down_read(&card->controls_rwsem);  	kctl = snd_ctl_find_id(card, &control->id); -	if (kctl == NULL) { -		result = -ENOENT; -	} else { -		index_offset = snd_ctl_get_ioff(kctl, &control->id); -		vd = &kctl->vd[index_offset]; -		if ((vd->access & SNDRV_CTL_ELEM_ACCESS_READ) && -		    kctl->get != NULL) { -			snd_ctl_build_ioff(&control->id, kctl, index_offset); -			result = kctl->get(kctl, control); -		} else -			result = -EPERM; -	} -	up_read(&card->controls_rwsem); -	return result; +	if (kctl == NULL) +		return -ENOENT; + +	index_offset = snd_ctl_get_ioff(kctl, &control->id); +	vd = &kctl->vd[index_offset]; +	if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_READ) && kctl->get == NULL) +		return -EPERM; + +	snd_ctl_build_ioff(&control->id, kctl, index_offset); +	return kctl->get(kctl, control);  }  static int snd_ctl_elem_read_user(struct snd_card *card, @@ -911,14 +905,19 @@ static int snd_ctl_elem_read_user(struct snd_card *card,  	if (IS_ERR(control))  		return PTR_ERR(control); -	snd_power_lock(card);  	result = snd_power_wait(card, SNDRV_CTL_POWER_D0); -	if (result >= 0) -		result = snd_ctl_elem_read(card, control); -	snd_power_unlock(card); -	if (result >= 0) -		if (copy_to_user(_control, control, sizeof(*control))) -			result = -EFAULT; +	if (result < 0) +		goto error; + +	down_read(&card->controls_rwsem); +	result = snd_ctl_elem_read(card, control); +	up_read(&card->controls_rwsem); +	if (result < 0) +		goto error; + +	if (copy_to_user(_control, control, sizeof(*control))) +		result = -EFAULT; + error:  	kfree(control);  	return result;  } @@ -931,30 +930,28 @@ static int snd_ctl_elem_write(struct snd_card *card, struct snd_ctl_file *file,  	unsigned int index_offset;  	int result; -	down_read(&card->controls_rwsem);  	kctl = snd_ctl_find_id(card, &control->id); -	if (kctl == NULL) { -		result = -ENOENT; -	} else { -		index_offset = snd_ctl_get_ioff(kctl, &control->id); -		vd = &kctl->vd[index_offset]; -		if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || -		    kctl->put == NULL || -		    (file && vd->owner && vd->owner != file)) { -			result = -EPERM; -		} else { -			snd_ctl_build_ioff(&control->id, kctl, index_offset); -			result = kctl->put(kctl, control); -		} -		if (result > 0) { -			struct snd_ctl_elem_id id = control->id; -			up_read(&card->controls_rwsem); -			snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &id); -			return 0; -		} +	if (kctl == NULL) +		return -ENOENT; + +	index_offset = snd_ctl_get_ioff(kctl, &control->id); +	vd = &kctl->vd[index_offset]; +	if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kctl->put == NULL || +	    (file && vd->owner && vd->owner != file)) { +		return -EPERM;  	} -	up_read(&card->controls_rwsem); -	return result; + +	snd_ctl_build_ioff(&control->id, kctl, index_offset); +	result = kctl->put(kctl, control); +	if (result < 0) +		return result; + +	if (result > 0) { +		struct snd_ctl_elem_id id = control->id; +		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &id); +	} + +	return 0;  }  static int snd_ctl_elem_write_user(struct snd_ctl_file *file, @@ -969,14 +966,19 @@ static int snd_ctl_elem_write_user(struct snd_ctl_file *file,  		return PTR_ERR(control);  	card = file->card; -	snd_power_lock(card);  	result = snd_power_wait(card, SNDRV_CTL_POWER_D0); -	if (result >= 0) -		result = snd_ctl_elem_write(card, file, control); -	snd_power_unlock(card); -	if (result >= 0) -		if (copy_to_user(_control, control, sizeof(*control))) -			result = -EFAULT; +	if (result < 0) +		goto error; + +	down_write(&card->controls_rwsem); +	result = snd_ctl_elem_write(card, file, control); +	up_write(&card->controls_rwsem); +	if (result < 0) +		goto error; + +	if (copy_to_user(_control, control, sizeof(*control))) +		result = -EFAULT; + error:  	kfree(control);  	return result;  } @@ -1095,9 +1097,7 @@ static int snd_ctl_elem_user_get(struct snd_kcontrol *kcontrol,  	char *src = ue->elem_data +  			snd_ctl_get_ioff(kcontrol, &ucontrol->id) * size; -	mutex_lock(&ue->card->user_ctl_lock);  	memcpy(&ucontrol->value, src, size); -	mutex_unlock(&ue->card->user_ctl_lock);  	return 0;  } @@ -1110,60 +1110,83 @@ static int snd_ctl_elem_user_put(struct snd_kcontrol *kcontrol,  	char *dst = ue->elem_data +  			snd_ctl_get_ioff(kcontrol, &ucontrol->id) * size; -	mutex_lock(&ue->card->user_ctl_lock);  	change = memcmp(&ucontrol->value, dst, size) != 0;  	if (change)  		memcpy(dst, &ucontrol->value, size); -	mutex_unlock(&ue->card->user_ctl_lock);  	return change;  } -static int snd_ctl_elem_user_tlv(struct snd_kcontrol *kcontrol, -				 int op_flag, -				 unsigned int size, -				 unsigned int __user *tlv) +static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, +			    unsigned int size)  { -	struct user_element *ue = kcontrol->private_data; -	int change = 0; -	void *new_data; +	struct user_element *ue = kctl->private_data; +	unsigned int *container; +	struct snd_ctl_elem_id id; +	unsigned int mask = 0; +	int i; +	int change; -	if (op_flag == SNDRV_CTL_TLV_OP_WRITE) { -		if (size > 1024 * 128)	/* sane value */ -			return -EINVAL; +	if (size > 1024 * 128)	/* sane value */ +		return -EINVAL; -		new_data = memdup_user(tlv, size); -		if (IS_ERR(new_data)) -			return PTR_ERR(new_data); -		mutex_lock(&ue->card->user_ctl_lock); -		change = ue->tlv_data_size != size; -		if (!change) -			change = memcmp(ue->tlv_data, new_data, size) != 0; -		kfree(ue->tlv_data); -		ue->tlv_data = new_data; -		ue->tlv_data_size = size; -		mutex_unlock(&ue->card->user_ctl_lock); -	} else { -		int ret = 0; +	container = memdup_user(buf, size); +	if (IS_ERR(container)) +		return PTR_ERR(container); -		mutex_lock(&ue->card->user_ctl_lock); -		if (!ue->tlv_data_size || !ue->tlv_data) { -			ret = -ENXIO; -			goto err_unlock; -		} -		if (size < ue->tlv_data_size) { -			ret = -ENOSPC; -			goto err_unlock; -		} -		if (copy_to_user(tlv, ue->tlv_data, ue->tlv_data_size)) -			ret = -EFAULT; -err_unlock: -		mutex_unlock(&ue->card->user_ctl_lock); -		if (ret) -			return ret; +	change = ue->tlv_data_size != size; +	if (!change) +		change = memcmp(ue->tlv_data, container, size) != 0; +	if (!change) { +		kfree(container); +		return 0;  	} + +	if (ue->tlv_data == NULL) { +		/* Now TLV data is available. */ +		for (i = 0; i < kctl->count; ++i) +			kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; +		mask = SNDRV_CTL_EVENT_MASK_INFO; +	} + +	kfree(ue->tlv_data); +	ue->tlv_data = container; +	ue->tlv_data_size = size; + +	mask |= SNDRV_CTL_EVENT_MASK_TLV; +	for (i = 0; i < kctl->count; ++i) { +		snd_ctl_build_ioff(&id, kctl, i); +		snd_ctl_notify(ue->card, mask, &id); +	} +  	return change;  } +static int read_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, +			 unsigned int size) +{ +	struct user_element *ue = kctl->private_data; + +	if (ue->tlv_data_size == 0 || ue->tlv_data == NULL) +		return -ENXIO; + +	if (size < ue->tlv_data_size) +		return -ENOSPC; + +	if (copy_to_user(buf, ue->tlv_data, ue->tlv_data_size)) +		return -EFAULT; + +	return 0; +} + +static int snd_ctl_elem_user_tlv(struct snd_kcontrol *kctl, int op_flag, +				 unsigned int size, unsigned int __user *buf) +{ +	if (op_flag == SNDRV_CTL_TLV_OP_WRITE) +		return replace_user_tlv(kctl, buf, size); +	else +		return read_user_tlv(kctl, buf, size); +} +  static int snd_ctl_elem_init_enum_names(struct user_element *ue)  {  	char *names, *p; @@ -1267,8 +1290,10 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,  		access = SNDRV_CTL_ELEM_ACCESS_READWRITE;  	access &= (SNDRV_CTL_ELEM_ACCESS_READWRITE |  		   SNDRV_CTL_ELEM_ACCESS_INACTIVE | -		   SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE); -	if (access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE) +		   SNDRV_CTL_ELEM_ACCESS_TLV_WRITE); + +	/* In initial state, nothing is available as TLV container. */ +	if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)  		access |= SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;  	access |= SNDRV_CTL_ELEM_ACCESS_USER; @@ -1331,7 +1356,7 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,  		kctl->get = snd_ctl_elem_user_get;  	if (access & SNDRV_CTL_ELEM_ACCESS_WRITE)  		kctl->put = snd_ctl_elem_user_put; -	if (access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE) +	if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)  		kctl->tlv.c = snd_ctl_elem_user_tlv;  	/* This function manage to free the instance on failure. */ @@ -1405,71 +1430,107 @@ static int snd_ctl_subscribe_events(struct snd_ctl_file *file, int __user *ptr)  	return 0;  } +static int call_tlv_handler(struct snd_ctl_file *file, int op_flag, +			    struct snd_kcontrol *kctl, +			    struct snd_ctl_elem_id *id, +			    unsigned int __user *buf, unsigned int size) +{ +	static const struct { +		int op; +		int perm; +	} pairs[] = { +		{SNDRV_CTL_TLV_OP_READ,  SNDRV_CTL_ELEM_ACCESS_TLV_READ}, +		{SNDRV_CTL_TLV_OP_WRITE, SNDRV_CTL_ELEM_ACCESS_TLV_WRITE}, +		{SNDRV_CTL_TLV_OP_CMD,   SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND}, +	}; +	struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; +	int i; + +	/* Check support of the request for this element. */ +	for (i = 0; i < ARRAY_SIZE(pairs); ++i) { +		if (op_flag == pairs[i].op && (vd->access & pairs[i].perm)) +			break; +	} +	if (i == ARRAY_SIZE(pairs)) +		return -ENXIO; + +	if (kctl->tlv.c == NULL) +		return -ENXIO; + +	/* When locked, this is unavailable. */ +	if (vd->owner != NULL && vd->owner != file) +		return -EPERM; + +	return kctl->tlv.c(kctl, op_flag, size, buf); +} + +static int read_tlv_buf(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id, +			unsigned int __user *buf, unsigned int size) +{ +	struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; +	unsigned int len; + +	if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)) +		return -ENXIO; + +	if (kctl->tlv.p == NULL) +		return -ENXIO; + +	len = sizeof(unsigned int) * 2 + kctl->tlv.p[1]; +	if (size < len) +		return -ENOMEM; + +	if (copy_to_user(buf, kctl->tlv.p, len)) +		return -EFAULT; + +	return 0; +} +  static int snd_ctl_tlv_ioctl(struct snd_ctl_file *file, -                             struct snd_ctl_tlv __user *_tlv, +			     struct snd_ctl_tlv __user *buf,                               int op_flag)  { -	struct snd_card *card = file->card; -	struct snd_ctl_tlv tlv; +	struct snd_ctl_tlv header; +	unsigned int *container; +	unsigned int container_size;  	struct snd_kcontrol *kctl; +	struct snd_ctl_elem_id id;  	struct snd_kcontrol_volatile *vd; -	unsigned int len; -	int err = 0; -	if (copy_from_user(&tlv, _tlv, sizeof(tlv))) +	if (copy_from_user(&header, buf, sizeof(header)))  		return -EFAULT; -	if (tlv.length < sizeof(unsigned int) * 2) + +	/* In design of control core, numerical ID starts at 1. */ +	if (header.numid == 0)  		return -EINVAL; -	if (!tlv.numid) + +	/* At least, container should include type and length fields.  */ +	if (header.length < sizeof(unsigned int) * 2)  		return -EINVAL; -	down_read(&card->controls_rwsem); -	kctl = snd_ctl_find_numid(card, tlv.numid); -	if (kctl == NULL) { -		err = -ENOENT; -		goto __kctl_end; -	} -	if (kctl->tlv.p == NULL) { -		err = -ENXIO; -		goto __kctl_end; -	} -	vd = &kctl->vd[tlv.numid - kctl->id.numid]; -	if ((op_flag == SNDRV_CTL_TLV_OP_READ && -	     (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ) == 0) || -	    (op_flag == SNDRV_CTL_TLV_OP_WRITE && -	     (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) == 0) || -	    (op_flag == SNDRV_CTL_TLV_OP_CMD && -	     (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND) == 0)) { -	    	err = -ENXIO; -	    	goto __kctl_end; -	} +	container_size = header.length; +	container = buf->tlv; + +	kctl = snd_ctl_find_numid(file->card, header.numid); +	if (kctl == NULL) +		return -ENOENT; + +	/* Calculate index of the element in this set. */ +	id = kctl->id; +	snd_ctl_build_ioff(&id, kctl, header.numid - id.numid); +	vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; +  	if (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) { -		if (vd->owner != NULL && vd->owner != file) { -			err = -EPERM; -			goto __kctl_end; -		} -		err = kctl->tlv.c(kctl, op_flag, tlv.length, _tlv->tlv); -		if (err > 0) { -			struct snd_ctl_elem_id id = kctl->id; -			up_read(&card->controls_rwsem); -			snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_TLV, &id); -			return 0; -		} +		return call_tlv_handler(file, op_flag, kctl, &id, container, +					container_size);  	} else { -		if (op_flag != SNDRV_CTL_TLV_OP_READ) { -			err = -ENXIO; -			goto __kctl_end; +		if (op_flag == SNDRV_CTL_TLV_OP_READ) { +			return read_tlv_buf(kctl, &id, container, +					    container_size);  		} -		len = kctl->tlv.p[1] + 2 * sizeof(unsigned int); -		if (tlv.length < len) { -			err = -ENOMEM; -			goto __kctl_end; -		} -		if (copy_to_user(_tlv->tlv, kctl->tlv.p, len)) -			err = -EFAULT;  	} -      __kctl_end: -	up_read(&card->controls_rwsem); -	return err; + +	/* Not supported. */ +	return -ENXIO;  }  static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) @@ -1511,11 +1572,20 @@ static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg  	case SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS:  		return snd_ctl_subscribe_events(ctl, ip);  	case SNDRV_CTL_IOCTL_TLV_READ: -		return snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_READ); +		down_read(&ctl->card->controls_rwsem); +		err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_READ); +		up_read(&ctl->card->controls_rwsem); +		return err;  	case SNDRV_CTL_IOCTL_TLV_WRITE: -		return snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_WRITE); +		down_write(&ctl->card->controls_rwsem); +		err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_WRITE); +		up_write(&ctl->card->controls_rwsem); +		return err;  	case SNDRV_CTL_IOCTL_TLV_COMMAND: -		return snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_CMD); +		down_write(&ctl->card->controls_rwsem); +		err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_CMD); +		up_write(&ctl->card->controls_rwsem); +		return err;  	case SNDRV_CTL_IOCTL_POWER:  		return -ENOPROTOOPT;  	case SNDRV_CTL_IOCTL_POWER_STATE: diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c index 1fa70766ffab..a848836a5de0 100644 --- a/sound/core/control_compat.c +++ b/sound/core/control_compat.c @@ -111,12 +111,10 @@ static int snd_ctl_elem_info_compat(struct snd_ctl_file *ctl,  	if (get_user(data->value.enumerated.item, &data32->value.enumerated.item))  		goto error; -	snd_power_lock(ctl->card);  	err = snd_power_wait(ctl->card, SNDRV_CTL_POWER_D0); -	if (err >= 0) -		err = snd_ctl_elem_info(ctl, data); -	snd_power_unlock(ctl->card); - +	if (err < 0) +		goto error; +	err = snd_ctl_elem_info(ctl, data);  	if (err < 0)  		goto error;  	/* restore info to 32bit */ @@ -315,14 +313,13 @@ static int ctl_elem_read_user(struct snd_card *card,  	if (err < 0)  		goto error; -	snd_power_lock(card);  	err = snd_power_wait(card, SNDRV_CTL_POWER_D0); -	if (err >= 0) -		err = snd_ctl_elem_read(card, data); -	snd_power_unlock(card); -	if (err >= 0) -		err = copy_ctl_value_to_user(userdata, valuep, data, -					     type, count); +	if (err < 0) +		goto error; +	err = snd_ctl_elem_read(card, data); +	if (err < 0) +		goto error; +	err = copy_ctl_value_to_user(userdata, valuep, data, type, count);   error:  	kfree(data);  	return err; @@ -344,14 +341,13 @@ static int ctl_elem_write_user(struct snd_ctl_file *file,  	if (err < 0)  		goto error; -	snd_power_lock(card);  	err = snd_power_wait(card, SNDRV_CTL_POWER_D0); -	if (err >= 0) -		err = snd_ctl_elem_write(card, file, data); -	snd_power_unlock(card); -	if (err >= 0) -		err = copy_ctl_value_to_user(userdata, valuep, data, -					     type, count); +	if (err < 0) +		goto error; +	err = snd_ctl_elem_write(card, file, data); +	if (err < 0) +		goto error; +	err = copy_ctl_value_to_user(userdata, valuep, data, type, count);   error:  	kfree(data);  	return err; diff --git a/sound/core/init.c b/sound/core/init.c index b4365bcf28a7..32ebe2f6bc59 100644 --- a/sound/core/init.c +++ b/sound/core/init.c @@ -248,13 +248,11 @@ int snd_card_new(struct device *parent, int idx, const char *xid,  	INIT_LIST_HEAD(&card->devices);  	init_rwsem(&card->controls_rwsem);  	rwlock_init(&card->ctl_files_rwlock); -	mutex_init(&card->user_ctl_lock);  	INIT_LIST_HEAD(&card->controls);  	INIT_LIST_HEAD(&card->ctl_files);  	spin_lock_init(&card->files_lock);  	INIT_LIST_HEAD(&card->files_list);  #ifdef CONFIG_PM -	mutex_init(&card->power_lock);  	init_waitqueue_head(&card->power_sleep);  #endif @@ -979,8 +977,6 @@ EXPORT_SYMBOL(snd_card_file_remove);   *  Waits until the power-state is changed.   *   *  Return: Zero if successful, or a negative error code. - * - *  Note: the power lock must be active before call.   */  int snd_power_wait(struct snd_card *card, unsigned int power_state)  { @@ -1000,9 +996,7 @@ int snd_power_wait(struct snd_card *card, unsigned int power_state)  		if (snd_power_get_state(card) == power_state)  			break;  		set_current_state(TASK_UNINTERRUPTIBLE); -		snd_power_unlock(card);  		schedule_timeout(30 * HZ); -		snd_power_lock(card);  	}  	remove_wait_queue(&card->power_sleep, &wait);  	return result; diff --git a/sound/core/pcm.c b/sound/core/pcm.c index 89c7485519cb..7eadb7fd8074 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c @@ -523,7 +523,9 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)  	sprintf(name, "pcm%i%c", pcm->device,   		pstr->stream == SNDRV_PCM_STREAM_PLAYBACK ? 'p' : 'c'); -	if ((entry = snd_info_create_card_entry(pcm->card, name, pcm->card->proc_root)) == NULL) +	entry = snd_info_create_card_entry(pcm->card, name, +					   pcm->card->proc_root); +	if (!entry)  		return -ENOMEM;  	entry->mode = S_IFDIR | S_IRUGO | S_IXUGO;  	if (snd_info_register(entry) < 0) { @@ -531,8 +533,8 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)  		return -ENOMEM;  	}  	pstr->proc_root = entry; - -	if ((entry = snd_info_create_card_entry(pcm->card, "info", pstr->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(pcm->card, "info", pstr->proc_root); +	if (entry) {  		snd_info_set_text_ops(entry, pstr, snd_pcm_stream_proc_info_read);  		if (snd_info_register(entry) < 0) {  			snd_info_free_entry(entry); @@ -542,8 +544,9 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)  	pstr->proc_info_entry = entry;  #ifdef CONFIG_SND_PCM_XRUN_DEBUG -	if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug", -						pstr->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(pcm->card, "xrun_debug", +					   pstr->proc_root); +	if (entry) {  		entry->c.text.read = snd_pcm_xrun_debug_read;  		entry->c.text.write = snd_pcm_xrun_debug_write;  		entry->mode |= S_IWUSR; @@ -580,7 +583,9 @@ static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream)  	card = substream->pcm->card;  	sprintf(name, "sub%i", substream->number); -	if ((entry = snd_info_create_card_entry(card, name, substream->pstr->proc_root)) == NULL) +	entry = snd_info_create_card_entry(card, name, +					   substream->pstr->proc_root); +	if (!entry)  		return -ENOMEM;  	entry->mode = S_IFDIR | S_IRUGO | S_IXUGO;  	if (snd_info_register(entry) < 0) { @@ -588,8 +593,8 @@ static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream)  		return -ENOMEM;  	}  	substream->proc_root = entry; - -	if ((entry = snd_info_create_card_entry(card, "info", substream->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(card, "info", substream->proc_root); +	if (entry) {  		snd_info_set_text_ops(entry, substream,  				      snd_pcm_substream_proc_info_read);  		if (snd_info_register(entry) < 0) { @@ -598,8 +603,9 @@ static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream)  		}  	}  	substream->proc_info_entry = entry; - -	if ((entry = snd_info_create_card_entry(card, "hw_params", substream->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(card, "hw_params", +					   substream->proc_root); +	if (entry) {  		snd_info_set_text_ops(entry, substream,  				      snd_pcm_substream_proc_hw_params_read);  		if (snd_info_register(entry) < 0) { @@ -608,8 +614,9 @@ static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream)  		}  	}  	substream->proc_hw_params_entry = entry; - -	if ((entry = snd_info_create_card_entry(card, "sw_params", substream->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(card, "sw_params", +					   substream->proc_root); +	if (entry) {  		snd_info_set_text_ops(entry, substream,  				      snd_pcm_substream_proc_sw_params_read);  		if (snd_info_register(entry) < 0) { @@ -618,8 +625,9 @@ static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream)  		}  	}  	substream->proc_sw_params_entry = entry; - -	if ((entry = snd_info_create_card_entry(card, "status", substream->proc_root)) != NULL) { +	entry = snd_info_create_card_entry(card, "status", +					   substream->proc_root); +	if (entry) {  		snd_info_set_text_ops(entry, substream,  				      snd_pcm_substream_proc_status_read);  		if (snd_info_register(entry) < 0) { @@ -783,21 +791,27 @@ static int _snd_pcm_new(struct snd_card *card, const char *id, int device,  	INIT_LIST_HEAD(&pcm->list);  	if (id)  		strlcpy(pcm->id, id, sizeof(pcm->id)); -	if ((err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_PLAYBACK, playback_count)) < 0) { -		snd_pcm_free(pcm); -		return err; -	} -	if ((err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_CAPTURE, capture_count)) < 0) { -		snd_pcm_free(pcm); -		return err; -	} -	if ((err = snd_device_new(card, SNDRV_DEV_PCM, pcm, &ops)) < 0) { -		snd_pcm_free(pcm); -		return err; -	} + +	err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_PLAYBACK, +				 playback_count); +	if (err < 0) +		goto free_pcm; + +	err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_CAPTURE, capture_count); +	if (err < 0) +		goto free_pcm; + +	err = snd_device_new(card, SNDRV_DEV_PCM, pcm, &ops); +	if (err < 0) +		goto free_pcm; +  	if (rpcm)  		*rpcm = pcm;  	return 0; + +free_pcm: +	snd_pcm_free(pcm); +	return err;  }  /** @@ -1224,7 +1238,8 @@ static void snd_pcm_proc_init(void)  {  	struct snd_info_entry *entry; -	if ((entry = snd_info_create_module_entry(THIS_MODULE, "pcm", NULL)) != NULL) { +	entry = snd_info_create_module_entry(THIS_MODULE, "pcm", NULL); +	if (entry) {  		snd_info_set_text_ops(entry, NULL, snd_pcm_proc_read);  		if (snd_info_register(entry) < 0) {  			snd_info_free_entry(entry); diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c index 10f537f4d735..3a1cc7b97e46 100644 --- a/sound/core/pcm_compat.c +++ b/sound/core/pcm_compat.c @@ -689,10 +689,7 @@ static long snd_pcm_ioctl_compat(struct file *file, unsigned int cmd, unsigned l  	case SNDRV_PCM_IOCTL_XRUN:  	case SNDRV_PCM_IOCTL_LINK:  	case SNDRV_PCM_IOCTL_UNLINK: -		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -			return snd_pcm_playback_ioctl1(file, substream, cmd, argp); -		else -			return snd_pcm_capture_ioctl1(file, substream, cmd, argp); +		return snd_pcm_common_ioctl(file, substream, cmd, argp);  	case SNDRV_PCM_IOCTL_HW_REFINE32:  		return snd_pcm_ioctl_hw_params_compat(substream, 1, argp);  	case SNDRV_PCM_IOCTL_HW_PARAMS32: diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index cf0433f80067..2fec2feac387 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -1830,7 +1830,6 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,  		add_wait_queue(&to_check->sleep, &wait);  		snd_pcm_stream_unlock_irq(substream);  		up_read(&snd_pcm_link_rwsem); -		snd_power_unlock(card);  		if (runtime->no_period_wakeup)  			tout = MAX_SCHEDULE_TIMEOUT;  		else { @@ -1842,7 +1841,6 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,  			tout = msecs_to_jiffies(tout * 1000);  		}  		tout = schedule_timeout_interruptible(tout); -		snd_power_lock(card);  		down_read(&snd_pcm_link_rwsem);  		snd_pcm_stream_lock_irq(substream);  		remove_wait_queue(&to_check->sleep, &wait); @@ -2763,12 +2761,106 @@ static int snd_pcm_tstamp(struct snd_pcm_substream *substream, int __user *_arg)  	runtime->tstamp_type = arg;  	return 0;  } -		 + +static int snd_pcm_xferi_frames_ioctl(struct snd_pcm_substream *substream, +				      struct snd_xferi __user *_xferi) +{ +	struct snd_xferi xferi; +	struct snd_pcm_runtime *runtime = substream->runtime; +	snd_pcm_sframes_t result; + +	if (runtime->status->state == SNDRV_PCM_STATE_OPEN) +		return -EBADFD; +	if (put_user(0, &_xferi->result)) +		return -EFAULT; +	if (copy_from_user(&xferi, _xferi, sizeof(xferi))) +		return -EFAULT; +	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) +		result = snd_pcm_lib_write(substream, xferi.buf, xferi.frames); +	else +		result = snd_pcm_lib_read(substream, xferi.buf, xferi.frames); +	__put_user(result, &_xferi->result); +	return result < 0 ? result : 0; +} + +static int snd_pcm_xfern_frames_ioctl(struct snd_pcm_substream *substream, +				      struct snd_xfern __user *_xfern) +{ +	struct snd_xfern xfern; +	struct snd_pcm_runtime *runtime = substream->runtime; +	void *bufs; +	snd_pcm_sframes_t result; + +	if (runtime->status->state == SNDRV_PCM_STATE_OPEN) +		return -EBADFD; +	if (runtime->channels > 128) +		return -EINVAL; +	if (put_user(0, &_xfern->result)) +		return -EFAULT; +	if (copy_from_user(&xfern, _xfern, sizeof(xfern))) +		return -EFAULT; + +	bufs = memdup_user(xfern.bufs, sizeof(void *) * runtime->channels); +	if (IS_ERR(bufs)) +		return PTR_ERR(bufs); +	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) +		result = snd_pcm_lib_writev(substream, bufs, xfern.frames); +	else +		result = snd_pcm_lib_readv(substream, bufs, xfern.frames); +	kfree(bufs); +	__put_user(result, &_xfern->result); +	return result < 0 ? result : 0; +} + +static int snd_pcm_rewind_ioctl(struct snd_pcm_substream *substream, +				snd_pcm_uframes_t __user *_frames) +{ +	snd_pcm_uframes_t frames; +	snd_pcm_sframes_t result; + +	if (get_user(frames, _frames)) +		return -EFAULT; +	if (put_user(0, _frames)) +		return -EFAULT; +	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) +		result = snd_pcm_playback_rewind(substream, frames); +	else +		result = snd_pcm_capture_rewind(substream, frames); +	__put_user(result, _frames); +	return result < 0 ? result : 0; +} + +static int snd_pcm_forward_ioctl(struct snd_pcm_substream *substream, +				 snd_pcm_uframes_t __user *_frames) +{ +	snd_pcm_uframes_t frames; +	snd_pcm_sframes_t result; + +	if (get_user(frames, _frames)) +		return -EFAULT; +	if (put_user(0, _frames)) +		return -EFAULT; +	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) +		result = snd_pcm_playback_forward(substream, frames); +	else +		result = snd_pcm_capture_forward(substream, frames); +	__put_user(result, _frames); +	return result < 0 ? result : 0; +} +  static int snd_pcm_common_ioctl(struct file *file,  				 struct snd_pcm_substream *substream,  				 unsigned int cmd, void __user *arg)  {  	struct snd_pcm_file *pcm_file = file->private_data; +	int res; + +	if (PCM_RUNTIME_CHECK(substream)) +		return -ENXIO; + +	res = snd_power_wait(substream->pcm->card, SNDRV_CTL_POWER_D0); +	if (res < 0) +		return res;  	switch (cmd) {  	case SNDRV_PCM_IOCTL_PVERSION: @@ -2841,202 +2933,23 @@ static int snd_pcm_common_ioctl(struct file *file,  		return snd_pcm_action_lock_irq(&snd_pcm_action_pause,  					       substream,  					       (int)(unsigned long)arg); -	} -	pcm_dbg(substream->pcm, "unknown ioctl = 0x%x\n", cmd); -	return -ENOTTY; -} - -static int snd_pcm_common_ioctl1(struct file *file, -				 struct snd_pcm_substream *substream, -				 unsigned int cmd, void __user *arg) -{ -	struct snd_card *card = substream->pcm->card; -	int res; - -	snd_power_lock(card); -	res = snd_power_wait(card, SNDRV_CTL_POWER_D0); -	if (res >= 0) -		res = snd_pcm_common_ioctl(file, substream, cmd, arg); -	snd_power_unlock(card); -	return res; -} - -static int snd_pcm_playback_ioctl1(struct file *file, -				   struct snd_pcm_substream *substream, -				   unsigned int cmd, void __user *arg) -{ -	if (PCM_RUNTIME_CHECK(substream)) -		return -ENXIO; -	if (snd_BUG_ON(substream->stream != SNDRV_PCM_STREAM_PLAYBACK)) -		return -EINVAL; -	switch (cmd) {  	case SNDRV_PCM_IOCTL_WRITEI_FRAMES: -	{ -		struct snd_xferi xferi; -		struct snd_xferi __user *_xferi = arg; -		struct snd_pcm_runtime *runtime = substream->runtime; -		snd_pcm_sframes_t result; -		if (runtime->status->state == SNDRV_PCM_STATE_OPEN) -			return -EBADFD; -		if (put_user(0, &_xferi->result)) -			return -EFAULT; -		if (copy_from_user(&xferi, _xferi, sizeof(xferi))) -			return -EFAULT; -		result = snd_pcm_lib_write(substream, xferi.buf, xferi.frames); -		__put_user(result, &_xferi->result); -		return result < 0 ? result : 0; -	} -	case SNDRV_PCM_IOCTL_WRITEN_FRAMES: -	{ -		struct snd_xfern xfern; -		struct snd_xfern __user *_xfern = arg; -		struct snd_pcm_runtime *runtime = substream->runtime; -		void __user **bufs; -		snd_pcm_sframes_t result; -		if (runtime->status->state == SNDRV_PCM_STATE_OPEN) -			return -EBADFD; -		if (runtime->channels > 128) -			return -EINVAL; -		if (put_user(0, &_xfern->result)) -			return -EFAULT; -		if (copy_from_user(&xfern, _xfern, sizeof(xfern))) -			return -EFAULT; - -		bufs = memdup_user(xfern.bufs, -				   sizeof(void *) * runtime->channels); -		if (IS_ERR(bufs)) -			return PTR_ERR(bufs); -		result = snd_pcm_lib_writev(substream, bufs, xfern.frames); -		kfree(bufs); -		__put_user(result, &_xfern->result); -		return result < 0 ? result : 0; -	} -	case SNDRV_PCM_IOCTL_REWIND: -	{ -		snd_pcm_uframes_t frames; -		snd_pcm_uframes_t __user *_frames = arg; -		snd_pcm_sframes_t result; -		if (get_user(frames, _frames)) -			return -EFAULT; -		if (put_user(0, _frames)) -			return -EFAULT; -		result = snd_pcm_playback_rewind(substream, frames); -		__put_user(result, _frames); -		return result < 0 ? result : 0; -	} -	case SNDRV_PCM_IOCTL_FORWARD: -	{ -		snd_pcm_uframes_t frames; -		snd_pcm_uframes_t __user *_frames = arg; -		snd_pcm_sframes_t result; -		if (get_user(frames, _frames)) -			return -EFAULT; -		if (put_user(0, _frames)) -			return -EFAULT; -		result = snd_pcm_playback_forward(substream, frames); -		__put_user(result, _frames); -		return result < 0 ? result : 0; -	} -	} -	return snd_pcm_common_ioctl1(file, substream, cmd, arg); -} - -static int snd_pcm_capture_ioctl1(struct file *file, -				  struct snd_pcm_substream *substream, -				  unsigned int cmd, void __user *arg) -{ -	if (PCM_RUNTIME_CHECK(substream)) -		return -ENXIO; -	if (snd_BUG_ON(substream->stream != SNDRV_PCM_STREAM_CAPTURE)) -		return -EINVAL; -	switch (cmd) {  	case SNDRV_PCM_IOCTL_READI_FRAMES: -	{ -		struct snd_xferi xferi; -		struct snd_xferi __user *_xferi = arg; -		struct snd_pcm_runtime *runtime = substream->runtime; -		snd_pcm_sframes_t result; -		if (runtime->status->state == SNDRV_PCM_STATE_OPEN) -			return -EBADFD; -		if (put_user(0, &_xferi->result)) -			return -EFAULT; -		if (copy_from_user(&xferi, _xferi, sizeof(xferi))) -			return -EFAULT; -		result = snd_pcm_lib_read(substream, xferi.buf, xferi.frames); -		__put_user(result, &_xferi->result); -		return result < 0 ? result : 0; -	} +		return snd_pcm_xferi_frames_ioctl(substream, arg); +	case SNDRV_PCM_IOCTL_WRITEN_FRAMES:  	case SNDRV_PCM_IOCTL_READN_FRAMES: -	{ -		struct snd_xfern xfern; -		struct snd_xfern __user *_xfern = arg; -		struct snd_pcm_runtime *runtime = substream->runtime; -		void *bufs; -		snd_pcm_sframes_t result; -		if (runtime->status->state == SNDRV_PCM_STATE_OPEN) -			return -EBADFD; -		if (runtime->channels > 128) -			return -EINVAL; -		if (put_user(0, &_xfern->result)) -			return -EFAULT; -		if (copy_from_user(&xfern, _xfern, sizeof(xfern))) -			return -EFAULT; - -		bufs = memdup_user(xfern.bufs, -				   sizeof(void *) * runtime->channels); -		if (IS_ERR(bufs)) -			return PTR_ERR(bufs); -		result = snd_pcm_lib_readv(substream, bufs, xfern.frames); -		kfree(bufs); -		__put_user(result, &_xfern->result); -		return result < 0 ? result : 0; -	} +		return snd_pcm_xfern_frames_ioctl(substream, arg);  	case SNDRV_PCM_IOCTL_REWIND: -	{ -		snd_pcm_uframes_t frames; -		snd_pcm_uframes_t __user *_frames = arg; -		snd_pcm_sframes_t result; -		if (get_user(frames, _frames)) -			return -EFAULT; -		if (put_user(0, _frames)) -			return -EFAULT; -		result = snd_pcm_capture_rewind(substream, frames); -		__put_user(result, _frames); -		return result < 0 ? result : 0; -	} +		return snd_pcm_rewind_ioctl(substream, arg);  	case SNDRV_PCM_IOCTL_FORWARD: -	{ -		snd_pcm_uframes_t frames; -		snd_pcm_uframes_t __user *_frames = arg; -		snd_pcm_sframes_t result; -		if (get_user(frames, _frames)) -			return -EFAULT; -		if (put_user(0, _frames)) -			return -EFAULT; -		result = snd_pcm_capture_forward(substream, frames); -		__put_user(result, _frames); -		return result < 0 ? result : 0; +		return snd_pcm_forward_ioctl(substream, arg);  	} -	} -	return snd_pcm_common_ioctl1(file, substream, cmd, arg); -} - -static long snd_pcm_playback_ioctl(struct file *file, unsigned int cmd, -				   unsigned long arg) -{ -	struct snd_pcm_file *pcm_file; - -	pcm_file = file->private_data; - -	if (((cmd >> 8) & 0xff) != 'A') -		return -ENOTTY; - -	return snd_pcm_playback_ioctl1(file, pcm_file->substream, cmd, -				       (void __user *)arg); +	pcm_dbg(substream->pcm, "unknown ioctl = 0x%x\n", cmd); +	return -ENOTTY;  } -static long snd_pcm_capture_ioctl(struct file *file, unsigned int cmd, -				  unsigned long arg) +static long snd_pcm_ioctl(struct file *file, unsigned int cmd, +			  unsigned long arg)  {  	struct snd_pcm_file *pcm_file; @@ -3045,8 +2958,8 @@ static long snd_pcm_capture_ioctl(struct file *file, unsigned int cmd,  	if (((cmd >> 8) & 0xff) != 'A')  		return -ENOTTY; -	return snd_pcm_capture_ioctl1(file, pcm_file->substream, cmd, -				      (void __user *)arg); +	return snd_pcm_common_ioctl(file, pcm_file->substream, cmd, +				     (void __user *)arg);  }  /** @@ -3064,7 +2977,6 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,  {  	snd_pcm_uframes_t *frames = arg;  	snd_pcm_sframes_t result; -	int err;  	switch (cmd) {  	case SNDRV_PCM_IOCTL_FORWARD: @@ -3084,10 +2996,7 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,  	case SNDRV_PCM_IOCTL_START:  		return snd_pcm_start_lock_irq(substream);  	case SNDRV_PCM_IOCTL_DRAIN: -		snd_power_lock(substream->pcm->card); -		err = snd_pcm_drain(substream, NULL); -		snd_power_unlock(substream->pcm->card); -		return err; +		return snd_pcm_drain(substream, NULL);  	case SNDRV_PCM_IOCTL_DROP:  		return snd_pcm_drop(substream);  	case SNDRV_PCM_IOCTL_DELAY: @@ -3791,7 +3700,7 @@ const struct file_operations snd_pcm_f_ops[2] = {  		.release =		snd_pcm_release,  		.llseek =		no_llseek,  		.poll =			snd_pcm_playback_poll, -		.unlocked_ioctl =	snd_pcm_playback_ioctl, +		.unlocked_ioctl =	snd_pcm_ioctl,  		.compat_ioctl = 	snd_pcm_ioctl_compat,  		.mmap =			snd_pcm_mmap,  		.fasync =		snd_pcm_fasync, @@ -3805,7 +3714,7 @@ const struct file_operations snd_pcm_f_ops[2] = {  		.release =		snd_pcm_release,  		.llseek =		no_llseek,  		.poll =			snd_pcm_capture_poll, -		.unlocked_ioctl =	snd_pcm_capture_ioctl, +		.unlocked_ioctl =	snd_pcm_ioctl,  		.compat_ioctl = 	snd_pcm_ioctl_compat,  		.mmap =			snd_pcm_mmap,  		.fasync =		snd_pcm_fasync, diff --git a/sound/core/timer.c b/sound/core/timer.c index a9b9a277e00c..6cdd04a45962 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -393,7 +393,8 @@ unsigned long snd_timer_resolution(struct snd_timer_instance *timeri)  	if (timeri == NULL)  		return 0; -	if ((timer = timeri->timer) != NULL) { +	timer = timeri->timer; +	if (timer) {  		if (timer->hw.c_resolution)  			return timer->hw.c_resolution(timer);  		return timer->hw.resolution; @@ -2096,8 +2097,7 @@ static int __init alsa_timer_init(void)  	err = snd_timer_register_system();  	if (err < 0) {  		pr_err("ALSA: unable to register system timer (%i)\n", err); -		put_device(&timer_dev); -		return err; +		goto put_timer;  	}  	err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0, @@ -2105,12 +2105,15 @@ static int __init alsa_timer_init(void)  	if (err < 0) {  		pr_err("ALSA: unable to register timer device (%i)\n", err);  		snd_timer_free_all(); -		put_device(&timer_dev); -		return err; +		goto put_timer;  	}  	snd_timer_proc_init();  	return 0; + +put_timer: +	put_device(&timer_dev); +	return err;  }  static void __exit alsa_timer_exit(void) diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index 54f348a4fb78..135adb17703c 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -561,7 +561,7 @@ static snd_pcm_uframes_t loopback_pointer(struct snd_pcm_substream *substream)  	return bytes_to_frames(runtime, pos);  } -static struct snd_pcm_hardware loopback_pcm_hardware = +static const struct snd_pcm_hardware loopback_pcm_hardware =  {  	.info =		(SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP |  			 SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE | @@ -750,7 +750,7 @@ static int loopback_close(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_ops loopback_playback_ops = { +static const struct snd_pcm_ops loopback_playback_ops = {  	.open =		loopback_open,  	.close =	loopback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -763,7 +763,7 @@ static struct snd_pcm_ops loopback_playback_ops = {  	.mmap =		snd_pcm_lib_mmap_vmalloc,  }; -static struct snd_pcm_ops loopback_capture_ops = { +static const struct snd_pcm_ops loopback_capture_ops = {  	.open =		loopback_open,  	.close =	loopback_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c index dd5ed037adf2..c0939a0164a6 100644 --- a/sound/drivers/dummy.c +++ b/sound/drivers/dummy.c @@ -520,7 +520,7 @@ static snd_pcm_uframes_t dummy_pcm_pointer(struct snd_pcm_substream *substream)  	return get_dummy_ops(substream)->pointer(substream);  } -static struct snd_pcm_hardware dummy_pcm_hardware = { +static const struct snd_pcm_hardware dummy_pcm_hardware = {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_RESUME | diff --git a/sound/drivers/ml403-ac97cr.c b/sound/drivers/ml403-ac97cr.c index bdcb5721393b..18fd12996cf7 100644 --- a/sound/drivers/ml403-ac97cr.c +++ b/sound/drivers/ml403-ac97cr.c @@ -373,7 +373,7 @@ struct snd_ml403_ac97cr {  	struct snd_pcm_indirect2 capture_ind2_rec;  }; -static struct snd_pcm_hardware snd_ml403_ac97cr_playback = { +static const struct snd_pcm_hardware snd_ml403_ac97cr_playback = {  	.info =	            (SNDRV_PCM_INFO_MMAP |  			     SNDRV_PCM_INFO_INTERLEAVED |  			     SNDRV_PCM_INFO_MMAP_VALID), @@ -392,7 +392,7 @@ static struct snd_pcm_hardware snd_ml403_ac97cr_playback = {  	.fifo_size =	    0,  }; -static struct snd_pcm_hardware snd_ml403_ac97cr_capture = { +static const struct snd_pcm_hardware snd_ml403_ac97cr_capture = {  	.info =	            (SNDRV_PCM_INFO_MMAP |  			     SNDRV_PCM_INFO_INTERLEAVED |  			     SNDRV_PCM_INFO_MMAP_VALID), @@ -759,7 +759,7 @@ static int snd_ml403_ac97cr_capture_close(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_ops snd_ml403_ac97cr_playback_ops = { +static const struct snd_pcm_ops snd_ml403_ac97cr_playback_ops = {  	.open = snd_ml403_ac97cr_playback_open,  	.close = snd_ml403_ac97cr_playback_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -770,7 +770,7 @@ static struct snd_pcm_ops snd_ml403_ac97cr_playback_ops = {  	.pointer = snd_ml403_ac97cr_pcm_pointer,  }; -static struct snd_pcm_ops snd_ml403_ac97cr_capture_ops = { +static const struct snd_pcm_ops snd_ml403_ac97cr_capture_ops = {  	.open = snd_ml403_ac97cr_capture_open,  	.close = snd_ml403_ac97cr_capture_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c index 9b86e00d7d95..b6715764cd1c 100644 --- a/sound/drivers/mpu401/mpu401.c +++ b/sound/drivers/mpu401/mpu401.c @@ -148,7 +148,7 @@ static struct platform_driver snd_mpu401_driver = {  #define IO_EXTENT 2 -static struct pnp_device_id snd_mpu401_pnpids[] = { +static const struct pnp_device_id snd_mpu401_pnpids[] = {  	{ .id = "PNPb006" },  	{ .id = "" }  }; diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c index 3a7c317ae012..b997222274bd 100644 --- a/sound/drivers/mpu401/mpu401_uart.c +++ b/sound/drivers/mpu401/mpu401_uart.c @@ -136,7 +136,7 @@ irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id)  {  	struct snd_mpu401 *mpu = dev_id; -	if (mpu == NULL) +	if (!mpu)  		return IRQ_NONE;  	_snd_mpu401_uart_interrupt(mpu);  	return IRQ_HANDLED; @@ -157,7 +157,7 @@ irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id)  {  	struct snd_mpu401 *mpu = dev_id; -	if (mpu == NULL) +	if (!mpu)  		return IRQ_NONE;  	uart_interrupt_tx(mpu);  	return IRQ_HANDLED; @@ -544,10 +544,9 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,  				   out_enable, in_enable, &rmidi)) < 0)  		return err;  	mpu = kzalloc(sizeof(*mpu), GFP_KERNEL); -	if (mpu == NULL) { -		snd_printk(KERN_ERR "mpu401_uart: cannot allocate\n"); -		snd_device_free(card, rmidi); -		return -ENOMEM; +	if (!mpu) { +		err = -ENOMEM; +		goto free_device;  	}  	rmidi->private_data = mpu;  	rmidi->private_free = snd_mpu401_uart_free; @@ -559,12 +558,12 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,  	if (! (info_flags & MPU401_INFO_INTEGRATED)) {  		int res_size = hardware == MPU401_HW_PC98II ? 4 : 2;  		mpu->res = request_region(port, res_size, "MPU401 UART"); -		if (mpu->res == NULL) { +		if (!mpu->res) {  			snd_printk(KERN_ERR "mpu401_uart: "  				   "unable to grab port 0x%lx size %d\n",  				   port, res_size); -			snd_device_free(card, rmidi); -			return -EBUSY; +			err = -EBUSY; +			goto free_device;  		}  	}  	if (info_flags & MPU401_INFO_MMIO) { @@ -584,8 +583,8 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,  				"MPU401 UART", (void *) mpu)) {  			snd_printk(KERN_ERR "mpu401_uart: "  				   "unable to grab IRQ %d\n", irq); -			snd_device_free(card, rmidi); -			return -EBUSY; +			err = -EBUSY; +			goto free_device;  		}  	}  	if (irq < 0 && !(info_flags & MPU401_INFO_IRQ_HOOK)) @@ -613,6 +612,9 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,  	if (rrawmidi)  		*rrawmidi = rmidi;  	return 0; +free_device: +	snd_device_free(card, rmidi); +	return err;  }  EXPORT_SYMBOL(snd_mpu401_uart_new); diff --git a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c index d5e5b4657b4b..588963d6be28 100644 --- a/sound/drivers/opl3/opl3_lib.c +++ b/sound/drivers/opl3/opl3_lib.c @@ -355,10 +355,8 @@ int snd_opl3_new(struct snd_card *card,  	*ropl3 = NULL;  	opl3 = kzalloc(sizeof(*opl3), GFP_KERNEL); -	if (opl3 == NULL) { -		snd_printk(KERN_ERR "opl3: cannot allocate\n"); +	if (!opl3)  		return -ENOMEM; -	}  	opl3->card = card;  	opl3->hardware = hardware; diff --git a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c index 7821b07415a7..13c0a7e1bc2b 100644 --- a/sound/drivers/opl3/opl3_midi.c +++ b/sound/drivers/opl3/opl3_midi.c @@ -131,8 +131,8 @@ static void debug_alloc(struct snd_opl3 *opl3, char *s, int voice) {  	printk(KERN_DEBUG "time %.5i: %s [%.2i]: ", opl3->use_time, s, voice);  	for (i = 0; i < opl3->max_voices; i++) -		printk("%c", *(str + opl3->voices[i].state + 1)); -	printk("\n"); +		printk(KERN_CONT "%c", *(str + opl3->voices[i].state + 1)); +	printk(KERN_CONT "\n");  }  #endif diff --git a/sound/drivers/pcsp/pcsp.c b/sound/drivers/pcsp/pcsp.c index 72e2d0012084..0dd3f46eb03e 100644 --- a/sound/drivers/pcsp/pcsp.c +++ b/sound/drivers/pcsp/pcsp.c @@ -108,22 +108,17 @@ static int snd_card_pcsp_probe(int devnum, struct device *dev)  		return err;  	err = snd_pcsp_create(card); -	if (err < 0) { -		snd_card_free(card); -		return err; -	} +	if (err < 0) +		goto free_card; +  	if (!nopcm) {  		err = snd_pcsp_new_pcm(&pcsp_chip); -		if (err < 0) { -			snd_card_free(card); -			return err; -		} +		if (err < 0) +			goto free_card;  	}  	err = snd_pcsp_new_mixer(&pcsp_chip, nopcm); -	if (err < 0) { -		snd_card_free(card); -		return err; -	} +	if (err < 0) +		goto free_card;  	strcpy(card->driver, "PC-Speaker");  	strcpy(card->shortname, "pcsp"); @@ -131,12 +126,14 @@ static int snd_card_pcsp_probe(int devnum, struct device *dev)  		pcsp_chip.port);  	err = snd_card_register(card); -	if (err < 0) { -		snd_card_free(card); -		return err; -	} +	if (err < 0) +		goto free_card;  	return 0; + +free_card: +	snd_card_free(card); +	return err;  }  static int alsa_card_pcsp_init(struct device *dev) diff --git a/sound/drivers/pcsp/pcsp_lib.c b/sound/drivers/pcsp/pcsp_lib.c index 44b3632f6940..2f5a35f38ce1 100644 --- a/sound/drivers/pcsp/pcsp_lib.c +++ b/sound/drivers/pcsp/pcsp_lib.c @@ -285,7 +285,7 @@ static snd_pcm_uframes_t snd_pcsp_playback_pointer(struct snd_pcm_substream  	return bytes_to_frames(substream->runtime, pos);  } -static struct snd_pcm_hardware snd_pcsp_playback = { +static const struct snd_pcm_hardware snd_pcsp_playback = {  	.info = (SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_HALF_DUPLEX |  		 SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID), diff --git a/sound/drivers/vx/vx_core.c b/sound/drivers/vx/vx_core.c index f684fffd1397..121357397a6d 100644 --- a/sound/drivers/vx/vx_core.c +++ b/sound/drivers/vx/vx_core.c @@ -256,8 +256,8 @@ int vx_send_msg_nolock(struct vx_core *chip, struct vx_rmh *rmh)  	if (rmh->LgCmd > 1) {  		printk(KERN_DEBUG "  ");  		for (i = 1; i < rmh->LgCmd; i++) -			printk("0x%06x ", rmh->Cmd[i]); -		printk("\n"); +			printk(KERN_CONT "0x%06x ", rmh->Cmd[i]); +		printk(KERN_CONT "\n");  	}  #endif  	/* Check bit M is set according to length of the command */ diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c index d318a33b6cfb..380a028469c4 100644 --- a/sound/drivers/vx/vx_pcm.c +++ b/sound/drivers/vx/vx_pcm.c @@ -500,7 +500,7 @@ static int vx_stop_stream(struct vx_core *chip, struct vx_pipe *pipe)   * playback hw information   */ -static struct snd_pcm_hardware vx_pcm_playback_hw = { +static const struct snd_pcm_hardware vx_pcm_playback_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID /*|*/  				 /*SNDRV_PCM_INFO_RESUME*/), @@ -891,7 +891,7 @@ static const struct snd_pcm_ops vx_pcm_playback_ops = {   * playback hw information   */ -static struct snd_pcm_hardware vx_pcm_capture_hw = { +static const struct snd_pcm_hardware vx_pcm_capture_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID /*|*/  				 /*SNDRV_PCM_INFO_RESUME*/), diff --git a/sound/firewire/bebob/bebob.h b/sound/firewire/bebob/bebob.h index 17678d6ab5a2..df1b1e94c43c 100644 --- a/sound/firewire/bebob/bebob.h +++ b/sound/firewire/bebob/bebob.h @@ -58,7 +58,7 @@ enum snd_bebob_clock_type {  struct snd_bebob_clock_spec {  	unsigned int num;  	const char *const *labels; -	enum snd_bebob_clock_type *types; +	const enum snd_bebob_clock_type *types;  	int (*get)(struct snd_bebob *bebob, unsigned int *id);  };  struct snd_bebob_rate_spec { diff --git a/sound/firewire/bebob/bebob_focusrite.c b/sound/firewire/bebob/bebob_focusrite.c index f11090057949..52b8b61ecddd 100644 --- a/sound/firewire/bebob/bebob_focusrite.c +++ b/sound/firewire/bebob/bebob_focusrite.c @@ -103,12 +103,12 @@ saffire_write_quad(struct snd_bebob *bebob, u64 offset, u32 value)  				  &data, sizeof(__be32), 0);  } -static enum snd_bebob_clock_type saffirepro_10_clk_src_types[] = { +static const enum snd_bebob_clock_type saffirepro_10_clk_src_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* S/PDIF */  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* Word Clock */  }; -static enum snd_bebob_clock_type saffirepro_26_clk_src_types[] = { +static const enum snd_bebob_clock_type saffirepro_26_clk_src_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* S/PDIF */  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* ADAT1 */ @@ -201,7 +201,7 @@ end:  }  const struct snd_bebob_spec saffire_le_spec; -static enum snd_bebob_clock_type saffire_both_clk_src_types[] = { +static const enum snd_bebob_clock_type saffire_both_clk_src_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,  }; diff --git a/sound/firewire/bebob/bebob_maudio.c b/sound/firewire/bebob/bebob_maudio.c index d10208f92edf..bd55620c6a47 100644 --- a/sound/firewire/bebob/bebob_maudio.c +++ b/sound/firewire/bebob/bebob_maudio.c @@ -340,7 +340,7 @@ end:  }  /* Clock source control for special firmware */ -static enum snd_bebob_clock_type special_clk_types[] = { +static const enum snd_bebob_clock_type special_clk_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,	/* With digital mute */  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* SPDIF/ADAT */  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* Word Clock */ diff --git a/sound/firewire/bebob/bebob_terratec.c b/sound/firewire/bebob/bebob_terratec.c index 2fdaf93e7a8d..9770c2127a7a 100644 --- a/sound/firewire/bebob/bebob_terratec.c +++ b/sound/firewire/bebob/bebob_terratec.c @@ -8,7 +8,7 @@  #include "./bebob.h" -static enum snd_bebob_clock_type phase88_rack_clk_src_types[] = { +static const enum snd_bebob_clock_type phase88_rack_clk_src_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* S/PDIF */  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* Word Clock */ diff --git a/sound/firewire/bebob/bebob_yamaha_terratec.c b/sound/firewire/bebob/bebob_yamaha_terratec.c index a6be3e7138e0..8bd78fef3516 100644 --- a/sound/firewire/bebob/bebob_yamaha_terratec.c +++ b/sound/firewire/bebob/bebob_yamaha_terratec.c @@ -31,7 +31,7 @@   * Yamaha GO 44 and GO 46. Yamaha and Terratec had cooperated for these models.   */ -static enum snd_bebob_clock_type clk_src_types[] = { +static const enum snd_bebob_clock_type clk_src_types[] = {  	SND_BEBOB_CLOCK_TYPE_INTERNAL,  	SND_BEBOB_CLOCK_TYPE_EXTERNAL,	/* S/PDIF */  }; diff --git a/sound/firewire/dice/dice.c b/sound/firewire/dice/dice.c index 25e9f77275c4..4ddb4cdd054b 100644 --- a/sound/firewire/dice/dice.c +++ b/sound/firewire/dice/dice.c @@ -26,7 +26,7 @@ MODULE_LICENSE("GPL v2");   */  static bool force_two_pcm_support(struct fw_unit *unit)  { -	const char *const models[] = { +	static const char *const models[] = {  		/* TC Electronic models. */  		"StudioKonnekt48",  		/* Focusrite models. */ diff --git a/sound/firewire/fireface/ff-pcm.c b/sound/firewire/fireface/ff-pcm.c index d12a0e3a4219..e3c16308363d 100644 --- a/sound/firewire/fireface/ff-pcm.c +++ b/sound/firewire/fireface/ff-pcm.c @@ -138,16 +138,12 @@ static int pcm_open(struct snd_pcm_substream *substream)  		return err;  	err = pcm_init_hw_params(ff, substream); -	if (err < 0) { -		snd_ff_stream_lock_release(ff); -		return err; -	} +	if (err < 0) +		goto release_lock;  	err = ff->spec->protocol->get_clock(ff, &rate, &src); -	if (err < 0) { -		snd_ff_stream_lock_release(ff); -		return err; -	} +	if (err < 0) +		goto release_lock;  	if (src != SND_FF_CLOCK_SRC_INTERNAL) {  		for (i = 0; i < CIP_SFC_COUNT; ++i) { @@ -159,8 +155,8 @@ static int pcm_open(struct snd_pcm_substream *substream)  		 * streaming engine can't support.  		 */  		if (i >= CIP_SFC_COUNT) { -			snd_ff_stream_lock_release(ff); -			return -EIO; +			err = -EIO; +			goto release_lock;  		}  		substream->runtime->hw.rate_min = rate; @@ -177,6 +173,10 @@ static int pcm_open(struct snd_pcm_substream *substream)  	snd_pcm_set_sync(substream);  	return 0; + +release_lock: +	snd_ff_stream_lock_release(ff); +	return err;  }  static int pcm_close(struct snd_pcm_substream *substream) diff --git a/sound/firewire/fireface/ff-protocol-ff400.c b/sound/firewire/fireface/ff-protocol-ff400.c index fcec6de80eeb..12aa15df435d 100644 --- a/sound/firewire/fireface/ff-protocol-ff400.c +++ b/sound/firewire/fireface/ff-protocol-ff400.c @@ -356,7 +356,7 @@ static void ff400_dump_clock_config(struct snd_ff *ff,  	snd_iprintf(buffer, "Sync to clock source: %s\n", src);  } -struct snd_ff_protocol snd_ff_protocol_ff400 = { +const struct snd_ff_protocol snd_ff_protocol_ff400 = {  	.get_clock		= ff400_get_clock,  	.begin_session		= ff400_begin_session,  	.finish_session		= ff400_finish_session, diff --git a/sound/firewire/fireface/ff.c b/sound/firewire/fireface/ff.c index eee7c8eac7a6..4974bc7980e9 100644 --- a/sound/firewire/fireface/ff.c +++ b/sound/firewire/fireface/ff.c @@ -157,7 +157,7 @@ static void snd_ff_remove(struct fw_unit *unit)  	}  } -static struct snd_ff_spec spec_ff400 = { +static const struct snd_ff_spec spec_ff400 = {  	.name = "Fireface400",  	.pcm_capture_channels = {18, 14, 10},  	.pcm_playback_channels = {18, 14, 10}, diff --git a/sound/firewire/fireface/ff.h b/sound/firewire/fireface/ff.h index 3cb812a50030..64df44beb950 100644 --- a/sound/firewire/fireface/ff.h +++ b/sound/firewire/fireface/ff.h @@ -47,7 +47,7 @@ struct snd_ff_spec {  	unsigned int midi_in_ports;  	unsigned int midi_out_ports; -	struct snd_ff_protocol *protocol; +	const struct snd_ff_protocol *protocol;  };  struct snd_ff { @@ -112,7 +112,7 @@ struct snd_ff_protocol {  	u64 midi_rx_port_1_reg;  }; -extern struct snd_ff_protocol snd_ff_protocol_ff400; +extern const struct snd_ff_protocol snd_ff_protocol_ff400;  int snd_ff_transaction_register(struct snd_ff *ff);  int snd_ff_transaction_reregister(struct snd_ff *ff); diff --git a/sound/firewire/fireworks/fireworks_proc.c b/sound/firewire/fireworks/fireworks_proc.c index beb0a0ffee57..9c21f31b8b21 100644 --- a/sound/firewire/fireworks/fireworks_proc.c +++ b/sound/firewire/fireworks/fireworks_proc.c @@ -12,7 +12,7 @@  static inline const char*  get_phys_name(struct snd_efw_phys_grp *grp, bool input)  { -	const char *const ch_type[] = { +	static const char *const ch_type[] = {  		"Analog", "S/PDIF", "ADAT", "S/PDIF or ADAT", "Mirroring",  		"Headphones", "I2S", "Guitar", "Pirzo Guitar", "Guitar String",  	}; diff --git a/sound/firewire/isight.c b/sound/firewire/isight.c index 48d6dca471c6..5826aa8362f1 100644 --- a/sound/firewire/isight.c +++ b/sound/firewire/isight.c @@ -444,7 +444,7 @@ static snd_pcm_uframes_t isight_pointer(struct snd_pcm_substream *substream)  static int isight_create_pcm(struct isight *isight)  { -	static struct snd_pcm_ops ops = { +	static const struct snd_pcm_ops ops = {  		.open      = isight_open,  		.close     = isight_close,  		.ioctl     = snd_pcm_lib_ioctl, diff --git a/sound/firewire/motu/motu-midi.c b/sound/firewire/motu/motu-midi.c index e3acfcc53f4e..e55cab6d79c7 100644 --- a/sound/firewire/motu/motu-midi.c +++ b/sound/firewire/motu/motu-midi.c @@ -128,12 +128,12 @@ static void set_midi_substream_names(struct snd_motu *motu,  int snd_motu_create_midi_devices(struct snd_motu *motu)  { -	static struct snd_rawmidi_ops capture_ops = { +	static const struct snd_rawmidi_ops capture_ops = {  		.open		= midi_capture_open,  		.close		= midi_capture_close,  		.trigger	= midi_capture_trigger,  	}; -	static struct snd_rawmidi_ops playback_ops = { +	static const struct snd_rawmidi_ops playback_ops = {  		.open		= midi_playback_open,  		.close		= midi_playback_close,  		.trigger	= midi_playback_trigger, diff --git a/sound/firewire/motu/motu-pcm.c b/sound/firewire/motu/motu-pcm.c index a2b50df70874..4330220890e8 100644 --- a/sound/firewire/motu/motu-pcm.c +++ b/sound/firewire/motu/motu-pcm.c @@ -145,7 +145,7 @@ static int pcm_open(struct snd_pcm_substream *substream)  	mutex_lock(&motu->mutex); -	err = protocol->cache_packet_formats(motu); +	err = snd_motu_stream_cache_packet_formats(motu);  	if (err < 0)  		goto err_locked; @@ -352,7 +352,7 @@ static int playback_ack(struct snd_pcm_substream *substream)  int snd_motu_create_pcm_devices(struct snd_motu *motu)  { -	static struct snd_pcm_ops capture_ops = { +	static const struct snd_pcm_ops capture_ops = {  		.open      = pcm_open,  		.close     = pcm_close,  		.ioctl     = snd_pcm_lib_ioctl, @@ -365,7 +365,7 @@ int snd_motu_create_pcm_devices(struct snd_motu *motu)  		.page      = snd_pcm_lib_get_vmalloc_page,  		.mmap      = snd_pcm_lib_mmap_vmalloc,  	}; -	static struct snd_pcm_ops playback_ops = { +	static const struct snd_pcm_ops playback_ops = {  		.open      = pcm_open,  		.close     = pcm_close,  		.ioctl     = snd_pcm_lib_ioctl, diff --git a/sound/firewire/motu/motu-protocol-v2.c b/sound/firewire/motu/motu-protocol-v2.c index 05b5d287c2f3..525b746330be 100644 --- a/sound/firewire/motu/motu-protocol-v2.c +++ b/sound/firewire/motu/motu-protocol-v2.c @@ -217,12 +217,7 @@ static int v2_cache_packet_formats(struct snd_motu *motu)  	calculate_differed_part(&motu->rx_packet_formats, motu->spec->flags,  			data, V2_OPT_OUT_IFACE_MASK, V2_OPT_OUT_IFACE_SHIFT); -	motu->tx_packet_formats.midi_flag_offset = 4; -	motu->tx_packet_formats.midi_byte_offset = 6;  	motu->tx_packet_formats.pcm_byte_offset = 10; - -	motu->rx_packet_formats.midi_flag_offset = 4; -	motu->rx_packet_formats.midi_byte_offset = 6;  	motu->rx_packet_formats.pcm_byte_offset = 10;  	return 0; diff --git a/sound/firewire/motu/motu-protocol-v3.c b/sound/firewire/motu/motu-protocol-v3.c index ddb647254ed2..c7cd9864dc4d 100644 --- a/sound/firewire/motu/motu-protocol-v3.c +++ b/sound/firewire/motu/motu-protocol-v3.c @@ -291,12 +291,7 @@ static int v3_cache_packet_formats(struct snd_motu *motu)  			V3_ENABLE_OPT_OUT_IFACE_A, V3_NO_ADAT_OPT_OUT_IFACE_A,  			V3_ENABLE_OPT_OUT_IFACE_B, V3_NO_ADAT_OPT_OUT_IFACE_B); -	motu->tx_packet_formats.midi_flag_offset = 8; -	motu->tx_packet_formats.midi_byte_offset = 7;  	motu->tx_packet_formats.pcm_byte_offset = 10; - -	motu->rx_packet_formats.midi_flag_offset = 8; -	motu->rx_packet_formats.midi_byte_offset = 7;  	motu->rx_packet_formats.pcm_byte_offset = 10;  	return 0; diff --git a/sound/firewire/motu/motu-stream.c b/sound/firewire/motu/motu-stream.c index bd458029099e..dc5541c8b359 100644 --- a/sound/firewire/motu/motu-stream.c +++ b/sound/firewire/motu/motu-stream.c @@ -33,7 +33,8 @@ static int start_both_streams(struct snd_motu *motu, unsigned int rate)  	u32 data;  	int err; -	if (motu->spec->flags & SND_MOTU_SPEC_HAS_MIDI) +	if ((motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_2ND_Q) || +	    (motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_3RD_Q))  		midi_ports = 1;  	/* Set packet formation to our packet streaming engine. */ @@ -42,6 +43,12 @@ static int start_both_streams(struct snd_motu *motu, unsigned int rate)  	if (err < 0)  		return err; +	if ((motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_2ND_Q) || +	    (motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_3RD_Q)) +		midi_ports = 1; +	else +		midi_ports = 0; +  	err = amdtp_motu_set_parameters(&motu->tx_stream, rate, midi_ports,  					&motu->tx_packet_formats);  	if (err < 0) @@ -141,6 +148,33 @@ static void stop_isoc_ctx(struct snd_motu *motu, struct amdtp_stream *stream)  	fw_iso_resources_free(resources);  } +int snd_motu_stream_cache_packet_formats(struct snd_motu *motu) +{ +	int err; + +	err = motu->spec->protocol->cache_packet_formats(motu); +	if (err < 0) +		return err; + +	if (motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_2ND_Q) { +		motu->tx_packet_formats.midi_flag_offset = 4; +		motu->tx_packet_formats.midi_byte_offset = 6; +	} else if (motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_3RD_Q) { +		motu->tx_packet_formats.midi_flag_offset = 8; +		motu->tx_packet_formats.midi_byte_offset = 7; +	} + +	if (motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_2ND_Q) { +		motu->rx_packet_formats.midi_flag_offset = 4; +		motu->rx_packet_formats.midi_byte_offset = 6; +	} else if (motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_3RD_Q) { +		motu->rx_packet_formats.midi_flag_offset = 8; +		motu->rx_packet_formats.midi_byte_offset = 7; +	} + +	return 0; +} +  static int ensure_packet_formats(struct snd_motu *motu)  {  	__be32 reg; @@ -184,7 +218,7 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)  		stop_both_streams(motu);  	} -	err = protocol->cache_packet_formats(motu); +	err = snd_motu_stream_cache_packet_formats(motu);  	if (err < 0)  		return err; diff --git a/sound/firewire/motu/motu.c b/sound/firewire/motu/motu.c index 59a270406353..0d6b526105ab 100644 --- a/sound/firewire/motu/motu.c +++ b/sound/firewire/motu/motu.c @@ -103,7 +103,10 @@ static void do_registration(struct work_struct *work)  	if (err < 0)  		goto error; -	if (motu->spec->flags & SND_MOTU_SPEC_HAS_MIDI) { +	if ((motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_2ND_Q) || +	    (motu->spec->flags & SND_MOTU_SPEC_RX_MIDI_3RD_Q) || +	    (motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_2ND_Q) || +	    (motu->spec->flags & SND_MOTU_SPEC_TX_MIDI_3RD_Q)) {  		err = snd_motu_create_midi_devices(motu);  		if (err < 0)  			goto error; @@ -191,20 +194,21 @@ static void motu_bus_update(struct fw_unit *unit)  	snd_motu_transaction_reregister(motu);  } -static struct snd_motu_spec motu_828mk2 = { +static const struct snd_motu_spec motu_828mk2 = {  	.name = "828mk2",  	.protocol = &snd_motu_protocol_v2,  	.flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 |  		 SND_MOTU_SPEC_TX_MICINST_CHUNK |  		 SND_MOTU_SPEC_TX_RETURN_CHUNK |  		 SND_MOTU_SPEC_HAS_OPT_IFACE_A | -		 SND_MOTU_SPEC_HAS_MIDI, +		 SND_MOTU_SPEC_RX_MIDI_2ND_Q | +		 SND_MOTU_SPEC_TX_MIDI_2ND_Q,  	.analog_in_ports = 8,  	.analog_out_ports = 8,  }; -static struct snd_motu_spec motu_828mk3 = { +static const struct snd_motu_spec motu_828mk3 = {  	.name = "828mk3",  	.protocol = &snd_motu_protocol_v3,  	.flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 | @@ -214,12 +218,25 @@ static struct snd_motu_spec motu_828mk3 = {  		 SND_MOTU_SPEC_TX_REVERB_CHUNK |  		 SND_MOTU_SPEC_HAS_OPT_IFACE_A |  		 SND_MOTU_SPEC_HAS_OPT_IFACE_B | -		 SND_MOTU_SPEC_HAS_MIDI, +		 SND_MOTU_SPEC_RX_MIDI_3RD_Q | +		 SND_MOTU_SPEC_TX_MIDI_3RD_Q,  	.analog_in_ports = 8,  	.analog_out_ports = 8,  }; +static const struct snd_motu_spec motu_audio_express = { +	.name = "AudioExpress", +	.protocol = &snd_motu_protocol_v3, +	.flags = SND_MOTU_SPEC_SUPPORT_CLOCK_X2 | +		 SND_MOTU_SPEC_TX_MICINST_CHUNK | +		 SND_MOTU_SPEC_TX_RETURN_CHUNK | +		 SND_MOTU_SPEC_RX_MIDI_2ND_Q | +		 SND_MOTU_SPEC_TX_MIDI_3RD_Q, +	.analog_in_ports = 2, +	.analog_out_ports = 4, +}; +  #define SND_MOTU_DEV_ENTRY(model, data)			\  {							\  	.match_flags	= IEEE1394_MATCH_VENDOR_ID |	\ @@ -235,6 +252,7 @@ static const struct ieee1394_device_id motu_id_table[] = {  	SND_MOTU_DEV_ENTRY(0x101800, &motu_828mk2),  	SND_MOTU_DEV_ENTRY(0x106800, &motu_828mk3),	/* FireWire only. */  	SND_MOTU_DEV_ENTRY(0x100800, &motu_828mk3),	/* Hybrid. */ +	SND_MOTU_DEV_ENTRY(0x104800, &motu_audio_express),  	{ }  };  MODULE_DEVICE_TABLE(ieee1394, motu_id_table); diff --git a/sound/firewire/motu/motu.h b/sound/firewire/motu/motu.h index 8d6a4a3af9cc..4b23cf337c4b 100644 --- a/sound/firewire/motu/motu.h +++ b/sound/firewire/motu/motu.h @@ -82,7 +82,10 @@ enum snd_motu_spec_flags {  	SND_MOTU_SPEC_TX_AESEBU_CHUNK	= 0x0020,  	SND_MOTU_SPEC_HAS_OPT_IFACE_A	= 0x0040,  	SND_MOTU_SPEC_HAS_OPT_IFACE_B	= 0x0080, -	SND_MOTU_SPEC_HAS_MIDI		= 0x0100, +	SND_MOTU_SPEC_RX_MIDI_2ND_Q	= 0x0100, +	SND_MOTU_SPEC_RX_MIDI_3RD_Q	= 0x0200, +	SND_MOTU_SPEC_TX_MIDI_2ND_Q	= 0x0400, +	SND_MOTU_SPEC_TX_MIDI_3RD_Q	= 0x0800,  };  #define SND_MOTU_CLOCK_RATE_COUNT	6 @@ -146,6 +149,7 @@ void snd_motu_transaction_unregister(struct snd_motu *motu);  int snd_motu_stream_init_duplex(struct snd_motu *motu);  void snd_motu_stream_destroy_duplex(struct snd_motu *motu); +int snd_motu_stream_cache_packet_formats(struct snd_motu *motu);  int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate);  void snd_motu_stream_stop_duplex(struct snd_motu *motu);  int snd_motu_stream_lock_try(struct snd_motu *motu); diff --git a/sound/firewire/oxfw/oxfw-scs1x.c b/sound/firewire/oxfw/oxfw-scs1x.c index 93209ebd9121..02d595665898 100644 --- a/sound/firewire/oxfw/oxfw-scs1x.c +++ b/sound/firewire/oxfw/oxfw-scs1x.c @@ -297,12 +297,6 @@ static void midi_capture_trigger(struct snd_rawmidi_substream *stream, int up)  	}  } -static const struct snd_rawmidi_ops midi_capture_ops = { -	.open    = midi_capture_open, -	.close   = midi_capture_close, -	.trigger = midi_capture_trigger, -}; -  static int midi_playback_open(struct snd_rawmidi_substream *stream)  {  	return 0; @@ -363,6 +357,11 @@ void snd_oxfw_scs1x_update(struct snd_oxfw *oxfw)  int snd_oxfw_scs1x_add(struct snd_oxfw *oxfw)  { +	static const struct snd_rawmidi_ops midi_capture_ops = { +		.open    = midi_capture_open, +		.close   = midi_capture_close, +		.trigger = midi_capture_trigger, +	};  	static const struct snd_rawmidi_ops midi_playback_ops = {  		.open    = midi_playback_open,  		.close   = midi_playback_close, diff --git a/sound/firewire/tascam/tascam.c b/sound/firewire/tascam/tascam.c index 9dc93a7eb9da..44ad41fb7374 100644 --- a/sound/firewire/tascam/tascam.c +++ b/sound/firewire/tascam/tascam.c @@ -12,7 +12,7 @@ MODULE_DESCRIPTION("TASCAM FireWire series Driver");  MODULE_AUTHOR("Takashi Sakamoto <o-takashi@sakamocchi.jp>");  MODULE_LICENSE("GPL v2"); -static struct snd_tscm_spec model_specs[] = { +static const struct snd_tscm_spec model_specs[] = {  	{  		.name = "FW-1884",  		.has_adat = true, diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c index 0659bf389489..038a180d3f81 100644 --- a/sound/hda/hdac_i915.c +++ b/sound/hda/hdac_i915.c @@ -336,7 +336,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_i915_register_notifier);  /* check whether intel graphics is present */  static bool i915_gfx_present(void)  { -	static struct pci_device_id ids[] = { +	static const struct pci_device_id ids[] = {  		{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),  		  .class = PCI_BASE_CLASS_DISPLAY << 16,  		  .class_mask = 0xff << 16 }, diff --git a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c index 769226515f0d..4be6c1245820 100644 --- a/sound/isa/ad1816a/ad1816a.c +++ b/sound/isa/ad1816a/ad1816a.c @@ -63,7 +63,7 @@ MODULE_PARM_DESC(enable, "Enable ad1816a based soundcard.");  module_param_array(clockfreq, int, NULL, 0444);  MODULE_PARM_DESC(clockfreq, "Clock frequency for ad1816a driver (default = 0)."); -static struct pnp_card_device_id snd_ad1816a_pnpids[] = { +static const struct pnp_card_device_id snd_ad1816a_pnpids[] = {  	/* Analog Devices AD1815 */  	{ .id = "ADS7150", .devs = { { .id = "ADS7150" }, { .id = "ADS7151" } } },  	/* Analog Device AD1816? */ diff --git a/sound/isa/ad1816a/ad1816a_lib.c b/sound/isa/ad1816a/ad1816a_lib.c index 5c815f5fb044..923201414469 100644 --- a/sound/isa/ad1816a/ad1816a_lib.c +++ b/sound/isa/ad1816a/ad1816a_lib.c @@ -339,7 +339,7 @@ static irqreturn_t snd_ad1816a_interrupt(int irq, void *dev_id)  } -static struct snd_pcm_hardware snd_ad1816a_playback = { +static const struct snd_pcm_hardware snd_ad1816a_playback = {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID),  	.formats =		(SNDRV_PCM_FMTBIT_MU_LAW | SNDRV_PCM_FMTBIT_A_LAW | @@ -358,7 +358,7 @@ static struct snd_pcm_hardware snd_ad1816a_playback = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_ad1816a_capture = { +static const struct snd_pcm_hardware snd_ad1816a_capture = {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID),  	.formats =		(SNDRV_PCM_FMTBIT_MU_LAW | SNDRV_PCM_FMTBIT_A_LAW | @@ -653,7 +653,7 @@ int snd_ad1816a_create(struct snd_card *card,  	return 0;  } -static struct snd_pcm_ops snd_ad1816a_playback_ops = { +static const struct snd_pcm_ops snd_ad1816a_playback_ops = {  	.open =		snd_ad1816a_playback_open,  	.close =	snd_ad1816a_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -664,7 +664,7 @@ static struct snd_pcm_ops snd_ad1816a_playback_ops = {  	.pointer =	snd_ad1816a_playback_pointer,  }; -static struct snd_pcm_ops snd_ad1816a_capture_ops = { +static const struct snd_pcm_ops snd_ad1816a_capture_ops = {  	.open =		snd_ad1816a_capture_open,  	.close =	snd_ad1816a_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/isa/ad1848/ad1848.c b/sound/isa/ad1848/ad1848.c index e739b1c85c25..7c8e92f62f3b 100644 --- a/sound/isa/ad1848/ad1848.c +++ b/sound/isa/ad1848/ad1848.c @@ -110,13 +110,17 @@ static int snd_ad1848_probe(struct device *dev, unsigned int n)  	if (error < 0)  		goto out; -	strcpy(card->driver, "AD1848"); -	strcpy(card->shortname, chip->pcm->name); - -	sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", -		chip->pcm->name, chip->port, irq[n], dma1[n]); -	if (thinkpad[n]) -		strcat(card->longname, " [Thinkpad]"); +	strlcpy(card->driver, "AD1848", sizeof(card->driver)); +	strlcpy(card->shortname, chip->pcm->name, sizeof(card->shortname)); + +	if (!thinkpad[n]) +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %d, dma %d", +			 chip->pcm->name, chip->port, irq[n], dma1[n]); +	else +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %d, dma %d [Thinkpad]", +			 chip->pcm->name, chip->port, irq[n], dma1[n]);  	error = snd_card_register(card);  	if (error < 0) diff --git a/sound/isa/als100.c b/sound/isa/als100.c index bc9ea306ee02..f63142ec287e 100644 --- a/sound/isa/als100.c +++ b/sound/isa/als100.c @@ -79,7 +79,7 @@ struct snd_card_als100 {  	struct snd_sb *chip;  }; -static struct pnp_card_device_id snd_als100_pnpids[] = { +static const struct pnp_card_device_id snd_als100_pnpids[] = {  	/* DT197A30 */  	{ .id = "RWB1688",  	  .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" } }, @@ -222,15 +222,16 @@ static int snd_card_als100_probe(int dev,  	if (pid->driver_data == SB_HW_DT019X) {  		strcpy(card->driver, "DT-019X");  		strcpy(card->shortname, "Diamond Tech. DT-019X"); -		sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d", -			card->shortname, chip->name, chip->port, -			irq[dev], dma8[dev]); +		snprintf(card->longname, sizeof(card->longname), +			 "Diamond Tech. DT-019X, %s at 0x%lx, irq %d, dma %d", +			 chip->name, chip->port, irq[dev], dma8[dev]);  	} else {  		strcpy(card->driver, "ALS100");  		strcpy(card->shortname, "Avance Logic ALS100"); -		sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d&%d", -			card->shortname, chip->name, chip->port, -			irq[dev], dma8[dev], dma16[dev]); +		snprintf(card->longname, sizeof(card->longname), +			 "Avance Logic ALS100, %s at 0x%lx, irq %d, dma %d&%d", +			 chip->name, chip->port, irq[dev], dma8[dev], +			 dma16[dev]);  	}  	if ((error = snd_sb16dsp_pcm(chip, 0)) < 0) { diff --git a/sound/isa/azt2320.c b/sound/isa/azt2320.c index fff186fa621e..4e6fad4f94d9 100644 --- a/sound/isa/azt2320.c +++ b/sound/isa/azt2320.c @@ -79,7 +79,7 @@ struct snd_card_azt2320 {  	struct snd_wss *chip;  }; -static struct pnp_card_device_id snd_azt2320_pnpids[] = { +static const struct pnp_card_device_id snd_azt2320_pnpids[] = {  	/* PRO16V */  	{ .id = "AZT1008", .devs = { { "AZT1008" }, { "AZT2001" }, } },  	/* Aztech Sound Galaxy 16 */ diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c index f64b29ab5cc7..6b8c46942efb 100644 --- a/sound/isa/cmi8330.c +++ b/sound/isa/cmi8330.c @@ -182,7 +182,7 @@ struct snd_cmi8330 {  #ifdef CONFIG_PNP -static struct pnp_card_device_id snd_cmi8330_pnpids[] = { +static const struct pnp_card_device_id snd_cmi8330_pnpids[] = {  	{ .id = "CMI0001", .devs = { { "@X@0001" }, { "@@@0001" }, { "@H@0001" }, { "A@@0001" } } },  	{ .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" } } },  	{ .id = "" } diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c index e8edd9017a2f..d90ab9558f7f 100644 --- a/sound/isa/cs423x/cs4231.c +++ b/sound/isa/cs423x/cs4231.c @@ -109,13 +109,17 @@ static int snd_cs4231_probe(struct device *dev, unsigned int n)  	if (error < 0)  		goto out; -	strcpy(card->driver, "CS4231"); -	strcpy(card->shortname, chip->pcm->name); - -	sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", -		chip->pcm->name, chip->port, irq[n], dma1[n]); -	if (dma2[n] >= 0) -		sprintf(card->longname + strlen(card->longname), "&%d", dma2[n]); +	strlcpy(card->driver, "CS4231", sizeof(card->driver)); +	strlcpy(card->shortname, chip->pcm->name, sizeof(card->shortname)); + +	if (dma2[n] < 0) +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %d, dma %d", +			 chip->pcm->name, chip->port, irq[n], dma1[n]); +	else +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %d, dma %d&%d", +			 chip->pcm->name, chip->port, irq[n], dma1[n], dma2[n]);  	error = snd_wss_mixer(chip);  	if (error < 0) diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c index 1f9a3b2be7a1..70559e59d18f 100644 --- a/sound/isa/cs423x/cs4236.c +++ b/sound/isa/cs423x/cs4236.c @@ -149,7 +149,7 @@ static const struct pnp_device_id snd_cs423x_pnpbiosids[] = {  MODULE_DEVICE_TABLE(pnp, snd_cs423x_pnpbiosids);  #define CS423X_ISAPNP_DRIVER	"cs4232_isapnp" -static struct pnp_card_device_id snd_cs423x_pnpids[] = { +static const struct pnp_card_device_id snd_cs423x_pnpids[] = {  	/* Philips PCA70PS */  	{ .id = "CSC0d32", .devs = { { "CSC0000" }, { "CSC0010" }, { "PNPb006" } } },  	/* TerraTec Maestro 32/96 (CS4232) */ @@ -419,15 +419,17 @@ static int snd_cs423x_probe(struct snd_card *card, int dev)  		if (err < 0)  			return err;  	} -	strcpy(card->driver, chip->pcm->name); -	strcpy(card->shortname, chip->pcm->name); -	sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", -		chip->pcm->name, -		chip->port, -		irq[dev], -		dma1[dev]); -	if (dma2[dev] >= 0) -		sprintf(card->longname + strlen(card->longname), "&%d", dma2[dev]); +	strlcpy(card->driver, chip->pcm->name, sizeof(card->driver)); +	strlcpy(card->shortname, chip->pcm->name, sizeof(card->shortname)); +	if (dma2[dev] < 0) +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %i, dma %i", +			 chip->pcm->name, chip->port, irq[dev], dma1[dev]); +	else +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %i, dma %i&%d", +			 chip->pcm->name, chip->port, irq[dev], dma1[dev], +			 dma2[dev]);  	err = snd_wss_timer(chip, 0);  	if (err < 0) diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c index 36320e7f2789..a826c138e7f5 100644 --- a/sound/isa/es1688/es1688.c +++ b/sound/isa/es1688/es1688.c @@ -321,7 +321,7 @@ static int snd_es968_pnp_resume(struct pnp_card_link *pcard)  }  #endif -static struct pnp_card_device_id snd_es968_pnpids[] = { +static const struct pnp_card_device_id snd_es968_pnpids[] = {  	{ .id = "ESS0968", .devs = { { "@@@0968" }, } },  	{ .id = "ESS0968", .devs = { { "ESS0968" }, } },  	{ .id = "", } /* end */ diff --git a/sound/isa/es1688/es1688_lib.c b/sound/isa/es1688/es1688_lib.c index 5d3df96c5e5b..f9c0662e9a22 100644 --- a/sound/isa/es1688/es1688_lib.c +++ b/sound/isa/es1688/es1688_lib.c @@ -526,7 +526,7 @@ static snd_pcm_uframes_t snd_es1688_capture_pointer(struct snd_pcm_substream *su   */ -static struct snd_pcm_hardware snd_es1688_playback = +static const struct snd_pcm_hardware snd_es1688_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -544,7 +544,7 @@ static struct snd_pcm_hardware snd_es1688_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_es1688_capture = +static const struct snd_pcm_hardware snd_es1688_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -706,7 +706,7 @@ exit:  	return err;  } -static struct snd_pcm_ops snd_es1688_playback_ops = { +static const struct snd_pcm_ops snd_es1688_playback_ops = {  	.open =			snd_es1688_playback_open,  	.close =		snd_es1688_playback_close,  	.ioctl =		snd_es1688_ioctl, @@ -717,7 +717,7 @@ static struct snd_pcm_ops snd_es1688_playback_ops = {  	.pointer =		snd_es1688_playback_pointer,  }; -static struct snd_pcm_ops snd_es1688_capture_ops = { +static const struct snd_pcm_ops snd_es1688_capture_ops = {  	.open =			snd_es1688_capture_open,  	.close =		snd_es1688_capture_close,  	.ioctl =		snd_es1688_ioctl, diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c index ae17a6584061..2a6960c3e2a4 100644 --- a/sound/isa/es18xx.c +++ b/sound/isa/es18xx.c @@ -838,7 +838,7 @@ static snd_pcm_uframes_t snd_es18xx_capture_pointer(struct snd_pcm_substream *su  	return pos >> chip->dma1_shift;  } -static struct snd_pcm_hardware snd_es18xx_playback = +static const struct snd_pcm_hardware snd_es18xx_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_RESUME | @@ -858,7 +858,7 @@ static struct snd_pcm_hardware snd_es18xx_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_es18xx_capture = +static const struct snd_pcm_hardware snd_es18xx_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_RESUME | @@ -1665,7 +1665,7 @@ static int snd_es18xx_probe(struct snd_es18xx *chip,  	return snd_es18xx_initialize(chip, mpu_port, fm_port);  } -static struct snd_pcm_ops snd_es18xx_playback_ops = { +static const struct snd_pcm_ops snd_es18xx_playback_ops = {  	.open =		snd_es18xx_playback_open,  	.close =	snd_es18xx_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1676,7 +1676,7 @@ static struct snd_pcm_ops snd_es18xx_playback_ops = {  	.pointer =	snd_es18xx_playback_pointer,  }; -static struct snd_pcm_ops snd_es18xx_capture_ops = { +static const struct snd_pcm_ops snd_es18xx_capture_ops = {  	.open =		snd_es18xx_capture_open,  	.close =	snd_es18xx_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -2017,7 +2017,7 @@ static int isa_registered;  static int pnp_registered;  static int pnpc_registered; -static struct pnp_device_id snd_audiodrive_pnpbiosids[] = { +static const struct pnp_device_id snd_audiodrive_pnpbiosids[] = {  	{ .id = "ESS1869" },  	{ .id = "ESS1879" },  	{ .id = "" }		/* end */ @@ -2062,7 +2062,7 @@ static int snd_audiodrive_pnp(int dev, struct snd_es18xx *chip,  	return 0;  } -static struct pnp_card_device_id snd_audiodrive_pnpids[] = { +static const struct pnp_card_device_id snd_audiodrive_pnpids[] = {  	/* ESS 1868 (integrated on Compaq dual P-Pro motherboard and Genius 18PnP 3D) */  	{ .id = "ESS1868", .devs = { { "ESS1868" }, { "ESS0000" } } },  	/* ESS 1868 (integrated on Maxisound Cards) */ diff --git a/sound/isa/gus/gus_pcm.c b/sound/isa/gus/gus_pcm.c index 6b3da01a93b7..131b28997e1d 100644 --- a/sound/isa/gus/gus_pcm.c +++ b/sound/isa/gus/gus_pcm.c @@ -650,7 +650,7 @@ static void snd_gf1_pcm_interrupt_dma_read(struct snd_gus_card * gus)  	}  } -static struct snd_pcm_hardware snd_gf1_pcm_playback = +static const struct snd_pcm_hardware snd_gf1_pcm_playback =  {  	.info =			SNDRV_PCM_INFO_NONINTERLEAVED,  	.formats		= (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_U8 | @@ -668,7 +668,7 @@ static struct snd_pcm_hardware snd_gf1_pcm_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_gf1_pcm_capture = +static const struct snd_pcm_hardware snd_gf1_pcm_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -842,7 +842,7 @@ static const struct snd_kcontrol_new snd_gf1_pcm_volume_control1 =  	.put = snd_gf1_pcm_volume_put  }; -static struct snd_pcm_ops snd_gf1_pcm_playback_ops = { +static const struct snd_pcm_ops snd_gf1_pcm_playback_ops = {  	.open =		snd_gf1_pcm_playback_open,  	.close =	snd_gf1_pcm_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -856,7 +856,7 @@ static struct snd_pcm_ops snd_gf1_pcm_playback_ops = {  	.fill_silence =	snd_gf1_pcm_playback_silence,  }; -static struct snd_pcm_ops snd_gf1_pcm_capture_ops = { +static const struct snd_pcm_ops snd_gf1_pcm_capture_ops = {  	.open =		snd_gf1_pcm_capture_open,  	.close =	snd_gf1_pcm_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c index 0687b7ef3e53..a6fc26bf0af2 100644 --- a/sound/isa/gus/interwave.c +++ b/sound/isa/gus/interwave.c @@ -136,7 +136,7 @@ struct snd_interwave {  static int isa_registered;  static int pnp_registered; -static struct pnp_card_device_id snd_interwave_pnpids[] = { +static const struct pnp_card_device_id snd_interwave_pnpids[] = {  #ifndef SNDRV_STB  	/* Gravis UltraSound Plug & Play */  	{ .id = "GRV0001", .devs = { { .id = "GRV0000" } } }, diff --git a/sound/isa/msnd/msnd.c b/sound/isa/msnd/msnd.c index 8109ab3d29d1..569897f64fda 100644 --- a/sound/isa/msnd/msnd.c +++ b/sound/isa/msnd/msnd.c @@ -437,7 +437,7 @@ static void snd_msnd_capture_reset_queue(struct snd_msnd *chip,  	}  } -static struct snd_pcm_hardware snd_msnd_playback = { +static const struct snd_pcm_hardware snd_msnd_playback = {  	.info =			SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED |  				SNDRV_PCM_INFO_MMAP_VALID | @@ -456,7 +456,7 @@ static struct snd_pcm_hardware snd_msnd_playback = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_msnd_capture = { +static const struct snd_pcm_hardware snd_msnd_capture = {  	.info =			SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED |  				SNDRV_PCM_INFO_MMAP_VALID | @@ -572,7 +572,7 @@ snd_msnd_playback_pointer(struct snd_pcm_substream *substream)  } -static struct snd_pcm_ops snd_msnd_playback_ops = { +static const struct snd_pcm_ops snd_msnd_playback_ops = {  	.open =		snd_msnd_playback_open,  	.close =	snd_msnd_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -669,7 +669,7 @@ static int snd_msnd_capture_hw_params(struct snd_pcm_substream *substream,  } -static struct snd_pcm_ops snd_msnd_capture_ops = { +static const struct snd_pcm_ops snd_msnd_capture_ops = {  	.open =		snd_msnd_capture_open,  	.close =	snd_msnd_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c index fc4fb1904aef..45e561c425bf 100644 --- a/sound/isa/msnd/msnd_pinnacle.c +++ b/sound/isa/msnd/msnd_pinnacle.c @@ -1192,7 +1192,7 @@ static void snd_msnd_pnp_remove(struct pnp_card_link *pcard)  static int isa_registered;  static int pnp_registered; -static struct pnp_card_device_id msnd_pnpids[] = { +static const struct pnp_card_device_id msnd_pnpids[] = {  	/* Pinnacle PnP */  	{ .id = "BVJ0440", .devs = { { "TBS0000" }, { "TBS0001" } } },  	{ .id = "" }	/* end */ diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c index 4098e3e0353d..7cce4cd4a23b 100644 --- a/sound/isa/opl3sa2.c +++ b/sound/isa/opl3sa2.c @@ -141,7 +141,7 @@ struct snd_opl3sa2 {  #ifdef CONFIG_PNP -static struct pnp_device_id snd_opl3sa2_pnpbiosids[] = { +static const struct pnp_device_id snd_opl3sa2_pnpbiosids[] = {  	{ .id = "YMH0021" },  	{ .id = "NMX2210" },	/* Gateway Solo 2500 */  	{ .id = "" }		/* end */ @@ -149,7 +149,7 @@ static struct pnp_device_id snd_opl3sa2_pnpbiosids[] = {  MODULE_DEVICE_TABLE(pnp, snd_opl3sa2_pnpbiosids); -static struct pnp_card_device_id snd_opl3sa2_pnpids[] = { +static const struct pnp_card_device_id snd_opl3sa2_pnpids[] = {  	/* Yamaha YMF719E-S (Genius Sound Maker 3DX) */  	{ .id = "YMH0020", .devs = { { "YMH0021" } } },  	/* Yamaha OPL3-SA3 (integrated on Intel's Pentium II AL440LX motherboard) */ diff --git a/sound/isa/opti9xx/miro.c b/sound/isa/opti9xx/miro.c index bcbff56f060d..8894c7c18ad6 100644 --- a/sound/isa/opti9xx/miro.c +++ b/sound/isa/opti9xx/miro.c @@ -143,7 +143,7 @@ static int snd_miro_pnp_is_probed;  #ifdef CONFIG_PNP -static struct pnp_card_device_id snd_miro_pnpids[] = { +static const struct pnp_card_device_id snd_miro_pnpids[] = {  	/* PCM20 and PCM12 in PnP mode */  	{ .id = "MIR0924",  	  .devs = { { "MIR0000" }, { "MIR0002" }, { "MIR0005" } }, }, @@ -1353,9 +1353,10 @@ static int snd_miro_probe(struct snd_card *card)  	}  	strcpy(card->driver, "miro"); -	sprintf(card->longname, "%s: OPTi%s, %s at 0x%lx, irq %d, dma %d&%d", -		card->shortname, miro->name, codec->pcm->name, -		miro->wss_base + 4, miro->irq, miro->dma1, miro->dma2); +	snprintf(card->longname, sizeof(card->longname), +		 "%s: OPTi%s, %s at 0x%lx, irq %d, dma %d&%d", +		 card->shortname, miro->name, codec->pcm->name, +		 miro->wss_base + 4, miro->irq, miro->dma1, miro->dma2);  	if (mpu_port <= 0 || mpu_port == SNDRV_AUTO_PORT)  		rmidi = NULL; diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c index ceddb392b1e3..505cd81e19fa 100644 --- a/sound/isa/opti9xx/opti92x-ad1848.c +++ b/sound/isa/opti9xx/opti92x-ad1848.c @@ -151,7 +151,7 @@ static int snd_opti9xx_pnp_is_probed;  #ifdef CONFIG_PNP -static struct pnp_card_device_id snd_opti9xx_pnpids[] = { +static const struct pnp_card_device_id snd_opti9xx_pnpids[] = {  #ifndef OPTi93X  	/* OPTi 82C924 */  	{ .id = "OPT0924", @@ -879,13 +879,15 @@ static int snd_opti9xx_probe(struct snd_card *card)  	strcpy(card->driver, chip->name);  	sprintf(card->shortname, "OPTi %s", card->driver);  #if defined(CS4231) || defined(OPTi93X) -	sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d&%d", -		card->shortname, codec->pcm->name, -		chip->wss_base + 4, irq, dma1, xdma2); +	snprintf(card->longname, sizeof(card->longname), +		 "%s, %s at 0x%lx, irq %d, dma %d&%d", +		 card->shortname, codec->pcm->name, +		 chip->wss_base + 4, irq, dma1, xdma2);  #else -	sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d", -		card->shortname, codec->pcm->name, chip->wss_base + 4, irq, -		dma1); +	snprintf(card->longname, sizeof(card->longname), +		 "%s, %s at 0x%lx, irq %d, dma %d", +		 card->shortname, codec->pcm->name, chip->wss_base + 4, irq, +		 dma1);  #endif	/* CS4231 || OPTi93X */  	if (mpu_port <= 0 || mpu_port == SNDRV_AUTO_PORT) diff --git a/sound/isa/sb/emu8000_callback.c b/sound/isa/sb/emu8000_callback.c index d28d712f99f4..5a485504f607 100644 --- a/sound/isa/sb/emu8000_callback.c +++ b/sound/isa/sb/emu8000_callback.c @@ -62,7 +62,7 @@ static void snd_emu8000_tweak_voice(struct snd_emu8000 *emu, int ch);  /*   * set up operators   */ -static struct snd_emux_operators emu8000_ops = { +static const struct snd_emux_operators emu8000_ops = {  	.owner =	THIS_MODULE,  	.get_voice =	get_voice,  	.prepare =	start_voice, diff --git a/sound/isa/sb/emu8000_pcm.c b/sound/isa/sb/emu8000_pcm.c index 2ee8d67871ec..8f34551abd8d 100644 --- a/sound/isa/sb/emu8000_pcm.c +++ b/sound/isa/sb/emu8000_pcm.c @@ -157,7 +157,7 @@ static int calc_rate_offset(int hz)  /*   */ -static struct snd_pcm_hardware emu8k_pcm_hw = { +static const struct snd_pcm_hardware emu8k_pcm_hw = {  #ifdef USE_NONINTERLEAVE  	.info =			SNDRV_PCM_INFO_NONINTERLEAVED,  #else @@ -670,7 +670,7 @@ static snd_pcm_uframes_t emu8k_pcm_pointer(struct snd_pcm_substream *subs)  } -static struct snd_pcm_ops emu8k_pcm_ops = { +static const struct snd_pcm_ops emu8k_pcm_ops = {  	.open =		emu8k_pcm_open,  	.close =	emu8k_pcm_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c index 917a93d696c3..8f9ebeb998f6 100644 --- a/sound/isa/sb/sb16.c +++ b/sound/isa/sb/sb16.c @@ -145,7 +145,7 @@ struct snd_card_sb16 {  #ifdef CONFIG_PNP -static struct pnp_card_device_id snd_sb16_pnpids[] = { +static const struct pnp_card_device_id snd_sb16_pnpids[] = {  #ifndef SNDRV_SBAWE  	/* Sound Blaster 16 PnP */  	{ .id = "CTL0024", .devs = { { "CTL0031" } } }, diff --git a/sound/isa/sb/sb16_main.c b/sound/isa/sb/sb16_main.c index 4be1350f6649..3e39ba220c39 100644 --- a/sound/isa/sb/sb16_main.c +++ b/sound/isa/sb/sb16_main.c @@ -473,7 +473,7 @@ static snd_pcm_uframes_t snd_sb16_capture_pointer(struct snd_pcm_substream *subs   */ -static struct snd_pcm_hardware snd_sb16_playback = +static const struct snd_pcm_hardware snd_sb16_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -491,7 +491,7 @@ static struct snd_pcm_hardware snd_sb16_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_sb16_capture = +static const struct snd_pcm_hardware snd_sb16_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -838,7 +838,7 @@ int snd_sb16dsp_configure(struct snd_sb * chip)  	return 0;  } -static struct snd_pcm_ops snd_sb16_playback_ops = { +static const struct snd_pcm_ops snd_sb16_playback_ops = {  	.open =		snd_sb16_playback_open,  	.close =	snd_sb16_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -849,7 +849,7 @@ static struct snd_pcm_ops snd_sb16_playback_ops = {  	.pointer =	snd_sb16_playback_pointer,  }; -static struct snd_pcm_ops snd_sb16_capture_ops = { +static const struct snd_pcm_ops snd_sb16_capture_ops = {  	.open =		snd_sb16_capture_open,  	.close =	snd_sb16_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/isa/sb/sb8_main.c b/sound/isa/sb/sb8_main.c index 0f302be4fb6d..d45df5c54423 100644 --- a/sound/isa/sb/sb8_main.c +++ b/sound/isa/sb/sb8_main.c @@ -447,7 +447,7 @@ static snd_pcm_uframes_t snd_sb8_capture_pointer(struct snd_pcm_substream *subst   */ -static struct snd_pcm_hardware snd_sb8_playback = +static const struct snd_pcm_hardware snd_sb8_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -466,7 +466,7 @@ static struct snd_pcm_hardware snd_sb8_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_sb8_capture = +static const struct snd_pcm_hardware snd_sb8_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -572,7 +572,7 @@ static int snd_sb8_close(struct snd_pcm_substream *substream)   *  Initialization part   */ -static struct snd_pcm_ops snd_sb8_playback_ops = { +static const struct snd_pcm_ops snd_sb8_playback_ops = {  	.open =			snd_sb8_open,  	.close =		snd_sb8_close,  	.ioctl =		snd_pcm_lib_ioctl, @@ -583,7 +583,7 @@ static struct snd_pcm_ops snd_sb8_playback_ops = {  	.pointer =		snd_sb8_playback_pointer,  }; -static struct snd_pcm_ops snd_sb8_capture_ops = { +static const struct snd_pcm_ops snd_sb8_capture_ops = {  	.open =			snd_sb8_open,  	.close =		snd_sb8_close,  	.ioctl =		snd_pcm_lib_ioctl, diff --git a/sound/isa/sscape.c b/sound/isa/sscape.c index 1cd2908e4f12..733adee5afbf 100644 --- a/sound/isa/sscape.c +++ b/sound/isa/sscape.c @@ -88,7 +88,7 @@ MODULE_PARM_DESC(joystick, "Enable gameport.");  static int isa_registered;  static int pnp_registered; -static struct pnp_card_device_id sscape_pnpids[] = { +static const struct pnp_card_device_id sscape_pnpids[] = {  	{ .id = "ENS3081", .devs = { { "ENS0000" } } }, /* Soundscape PnP */  	{ .id = "ENS4081", .devs = { { "ENS1011" } } },	/* VIVO90 */  	{ .id = "" }	/* end */ diff --git a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c index da4e9a85f0af..b1989facd732 100644 --- a/sound/isa/wavefront/wavefront.c +++ b/sound/isa/wavefront/wavefront.c @@ -88,7 +88,7 @@ MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly lo  static int isa_registered;  static int pnp_registered; -static struct pnp_card_device_id snd_wavefront_pnpids[] = { +static const struct pnp_card_device_id snd_wavefront_pnpids[] = {  	/* Tropez */  	{ .id = "CSC7532", .devs = { { "CSC0000" }, { "CSC0010" }, { "PnPb006" }, { "CSC0004" } } },  	/* Tropez+ */ diff --git a/sound/isa/wss/wss_lib.c b/sound/isa/wss/wss_lib.c index 9f4e2e34cbe1..8a852042a066 100644 --- a/sound/isa/wss/wss_lib.c +++ b/sound/isa/wss/wss_lib.c @@ -1452,7 +1452,7 @@ static int snd_wss_probe(struct snd_wss *chip)   */ -static struct snd_pcm_hardware snd_wss_playback = +static const struct snd_pcm_hardware snd_wss_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -1472,7 +1472,7 @@ static struct snd_pcm_hardware snd_wss_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_wss_capture = +static const struct snd_pcm_hardware snd_wss_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -1901,7 +1901,7 @@ int snd_wss_create(struct snd_card *card,  }  EXPORT_SYMBOL(snd_wss_create); -static struct snd_pcm_ops snd_wss_playback_ops = { +static const struct snd_pcm_ops snd_wss_playback_ops = {  	.open =		snd_wss_playback_open,  	.close =	snd_wss_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1912,7 +1912,7 @@ static struct snd_pcm_ops snd_wss_playback_ops = {  	.pointer =	snd_wss_playback_pointer,  }; -static struct snd_pcm_ops snd_wss_capture_ops = { +static const struct snd_pcm_ops snd_wss_capture_ops = {  	.open =		snd_wss_capture_open,  	.close =	snd_wss_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/mips/hal2.c b/sound/mips/hal2.c index 3318c15e324a..37d378a26a50 100644 --- a/sound/mips/hal2.c +++ b/sound/mips/hal2.c @@ -496,7 +496,7 @@ static void hal2_free_dmabuf(struct hal2_codec *codec)  		       DMA_ATTR_NON_CONSISTENT);  } -static struct snd_pcm_hardware hal2_pcm_hw = { +static const struct snd_pcm_hardware hal2_pcm_hw = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_MMAP_VALID |  		 SNDRV_PCM_INFO_INTERLEAVED | @@ -711,7 +711,7 @@ static int hal2_capture_ack(struct snd_pcm_substream *substream)  						 hal2_capture_transfer);  } -static struct snd_pcm_ops hal2_playback_ops = { +static const struct snd_pcm_ops hal2_playback_ops = {  	.open =        hal2_playback_open,  	.close =       hal2_playback_close,  	.ioctl =       snd_pcm_lib_ioctl, @@ -723,7 +723,7 @@ static struct snd_pcm_ops hal2_playback_ops = {  	.ack =         hal2_playback_ack,  }; -static struct snd_pcm_ops hal2_capture_ops = { +static const struct snd_pcm_ops hal2_capture_ops = {  	.open =        hal2_capture_open,  	.close =       hal2_capture_close,  	.ioctl =       snd_pcm_lib_ioctl, diff --git a/sound/mips/sgio2audio.c b/sound/mips/sgio2audio.c index 0ebc1c3727df..71c942162c25 100644 --- a/sound/mips/sgio2audio.c +++ b/sound/mips/sgio2audio.c @@ -532,7 +532,7 @@ static irqreturn_t snd_sgio2audio_error_isr(int irq, void *dev_id)  /* PCM part */  /* PCM hardware definition */ -static struct snd_pcm_hardware snd_sgio2audio_pcm_hw = { +static const struct snd_pcm_hardware snd_sgio2audio_pcm_hw = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_MMAP_VALID |  		 SNDRV_PCM_INFO_INTERLEAVED | @@ -675,7 +675,7 @@ snd_sgio2audio_pcm_pointer(struct snd_pcm_substream *substream)  }  /* operators */ -static struct snd_pcm_ops snd_sgio2audio_playback1_ops = { +static const struct snd_pcm_ops snd_sgio2audio_playback1_ops = {  	.open =        snd_sgio2audio_playback1_open,  	.close =       snd_sgio2audio_pcm_close,  	.ioctl =       snd_pcm_lib_ioctl, @@ -688,7 +688,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback1_ops = {  	.mmap =        snd_pcm_lib_mmap_vmalloc,  }; -static struct snd_pcm_ops snd_sgio2audio_playback2_ops = { +static const struct snd_pcm_ops snd_sgio2audio_playback2_ops = {  	.open =        snd_sgio2audio_playback2_open,  	.close =       snd_sgio2audio_pcm_close,  	.ioctl =       snd_pcm_lib_ioctl, @@ -701,7 +701,7 @@ static struct snd_pcm_ops snd_sgio2audio_playback2_ops = {  	.mmap =        snd_pcm_lib_mmap_vmalloc,  }; -static struct snd_pcm_ops snd_sgio2audio_capture_ops = { +static const struct snd_pcm_ops snd_sgio2audio_capture_ops = {  	.open =        snd_sgio2audio_capture_open,  	.close =       snd_sgio2audio_pcm_close,  	.ioctl =       snd_pcm_lib_ioctl, diff --git a/sound/parisc/harmony.c b/sound/parisc/harmony.c index 5911eb35c2a3..4eddd81d6832 100644 --- a/sound/parisc/harmony.c +++ b/sound/parisc/harmony.c @@ -260,7 +260,7 @@ snd_harmony_rate_bits(int rate)  	return HARMONY_SR_44KHZ;  } -static struct snd_pcm_hardware snd_harmony_playback = +static const struct snd_pcm_hardware snd_harmony_playback =  {  	.info =	(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |   		 SNDRV_PCM_INFO_JOINT_DUPLEX | SNDRV_PCM_INFO_MMAP_VALID | @@ -281,7 +281,7 @@ static struct snd_pcm_hardware snd_harmony_playback =  	.fifo_size = 0,  }; -static struct snd_pcm_hardware snd_harmony_capture = +static const struct snd_pcm_hardware snd_harmony_capture =  {          .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |                   SNDRV_PCM_INFO_JOINT_DUPLEX | SNDRV_PCM_INFO_MMAP_VALID | @@ -596,7 +596,7 @@ snd_harmony_hw_free(struct snd_pcm_substream *ss)  	return snd_pcm_lib_free_pages(ss);  } -static struct snd_pcm_ops snd_harmony_playback_ops = { +static const struct snd_pcm_ops snd_harmony_playback_ops = {  	.open =	snd_harmony_playback_open,  	.close = snd_harmony_playback_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -607,7 +607,7 @@ static struct snd_pcm_ops snd_harmony_playback_ops = {   	.pointer = snd_harmony_playback_pointer,  }; -static struct snd_pcm_ops snd_harmony_capture_ops = { +static const struct snd_pcm_ops snd_harmony_capture_ops = {          .open = snd_harmony_capture_open,          .close = snd_harmony_capture_close,          .ioctl = snd_pcm_lib_ioctl, diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c index 8c36990e26f6..0bf2c04eeada 100644 --- a/sound/pci/ad1889.c +++ b/sound/pci/ad1889.c @@ -283,7 +283,7 @@ snd_ad1889_hw_free(struct snd_pcm_substream *substream)  	return snd_pcm_lib_free_pages(substream);  } -static struct snd_pcm_hardware snd_ad1889_playback_hw = { +static const struct snd_pcm_hardware snd_ad1889_playback_hw = {  	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,  	.formats = SNDRV_PCM_FMTBIT_S16_LE, @@ -300,7 +300,7 @@ static struct snd_pcm_hardware snd_ad1889_playback_hw = {  	/*.fifo_size = 0,*/  }; -static struct snd_pcm_hardware snd_ad1889_capture_hw = { +static const struct snd_pcm_hardware snd_ad1889_capture_hw = {  	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,  	.formats = SNDRV_PCM_FMTBIT_S16_LE, diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index 8567f1e5b9cf..39547e32e584 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c @@ -1540,7 +1540,7 @@ static int snd_ali_close(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_ops snd_ali_playback_ops = { +static const struct snd_pcm_ops snd_ali_playback_ops = {  	.open =		snd_ali_playback_open,  	.close =	snd_ali_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1551,7 +1551,7 @@ static struct snd_pcm_ops snd_ali_playback_ops = {  	.pointer =	snd_ali_playback_pointer,  }; -static struct snd_pcm_ops snd_ali_capture_ops = { +static const struct snd_pcm_ops snd_ali_capture_ops = {  	.open =		snd_ali_capture_open,  	.close =	snd_ali_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1626,7 +1626,7 @@ static int snd_ali_modem_capture_open(struct snd_pcm_substream *substream)  	return snd_ali_modem_open(substream, 1, ALI_MODEM_IN_CHANNEL);  } -static struct snd_pcm_ops snd_ali_modem_playback_ops = { +static const struct snd_pcm_ops snd_ali_modem_playback_ops = {  	.open =		snd_ali_modem_playback_open,  	.close =	snd_ali_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1637,7 +1637,7 @@ static struct snd_pcm_ops snd_ali_modem_playback_ops = {  	.pointer =	snd_ali_pointer,  }; -static struct snd_pcm_ops snd_ali_modem_capture_ops = { +static const struct snd_pcm_ops snd_ali_modem_capture_ops = {  	.open =		snd_ali_modem_capture_open,  	.close =	snd_ali_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1653,8 +1653,8 @@ struct ali_pcm_description {  	char *name;  	unsigned int playback_num;  	unsigned int capture_num; -	struct snd_pcm_ops *playback_ops; -	struct snd_pcm_ops *capture_ops; +	const struct snd_pcm_ops *playback_ops; +	const struct snd_pcm_ops *capture_ops;  	unsigned short class;  }; diff --git a/sound/pci/als300.c b/sound/pci/als300.c index ab75601d7c2c..eaa2d853d922 100644 --- a/sound/pci/als300.c +++ b/sound/pci/als300.c @@ -328,7 +328,7 @@ static int snd_als300_ac97(struct snd_als300 *chip)   * the card when it is running outside of legacy   * mode.   */ -static struct snd_pcm_hardware snd_als300_playback_hw = +static const struct snd_pcm_hardware snd_als300_playback_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED | @@ -347,7 +347,7 @@ static struct snd_pcm_hardware snd_als300_playback_hw =  	.periods_max =		2,  }; -static struct snd_pcm_hardware snd_als300_capture_hw = +static const struct snd_pcm_hardware snd_als300_capture_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED | diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c index 7844a75d8ed9..26b097edec8c 100644 --- a/sound/pci/als4000.c +++ b/sound/pci/als4000.c @@ -592,7 +592,7 @@ static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id)  /*****************************************************************/ -static struct snd_pcm_hardware snd_als4000_playback = +static const struct snd_pcm_hardware snd_als4000_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), @@ -611,7 +611,7 @@ static struct snd_pcm_hardware snd_als4000_playback =  	.fifo_size =		0  }; -static struct snd_pcm_hardware snd_als4000_capture = +static const struct snd_pcm_hardware snd_als4000_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP_VALID), diff --git a/sound/pci/asihpi/hpidebug.c b/sound/pci/asihpi/hpidebug.c index ac86a1f1d3bf..9e122327dc05 100644 --- a/sound/pci/asihpi/hpidebug.c +++ b/sound/pci/asihpi/hpidebug.c @@ -71,8 +71,8 @@ void hpi_debug_data(u16 *pdata, u32 len)  		printk(KERN_DEBUG "%p:", (pdata + i));  		for (k = 0; k < cols && i < len; i++, k++) -			printk("%s%04x", k == 0 ? "" : " ", pdata[i]); +			printk(KERN_CONT "%s%04x", k == 0 ? "" : " ", pdata[i]); -		printk("\n"); +		printk(KERN_CONT "\n");  	}  } diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index a40c918c8dff..7ae63d452bba 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c @@ -1009,7 +1009,7 @@ static int snd_atiixp_pcm_hw_free(struct snd_pcm_substream *substream)  /*   * pcm hardware definition, identical for all DMA types   */ -static struct snd_pcm_hardware snd_atiixp_pcm_hw = +static const struct snd_pcm_hardware snd_atiixp_pcm_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1183,7 +1183,7 @@ static const struct snd_pcm_ops snd_atiixp_spdif_ops = {  	.pointer =	snd_atiixp_pcm_pointer,  }; -static struct ac97_pcm atiixp_pcm_defs[] = { +static const struct ac97_pcm atiixp_pcm_defs[] = {  	/* front PCM */  	{  		.exclusive = 1, diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index 52e0ea7b9b80..a586635664e0 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c @@ -834,7 +834,7 @@ static int snd_atiixp_pcm_hw_free(struct snd_pcm_substream *substream)  /*   * pcm hardware definition, identical for all DMA types   */ -static struct snd_pcm_hardware snd_atiixp_pcm_hw = +static const struct snd_pcm_hardware snd_atiixp_pcm_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/au88x0/au88x0_pcm.c b/sound/pci/au88x0/au88x0_pcm.c index 1aa97012451d..53714e0bf598 100644 --- a/sound/pci/au88x0/au88x0_pcm.c +++ b/sound/pci/au88x0/au88x0_pcm.c @@ -30,7 +30,7 @@  #define VORTEX_PCM_TYPE(x) (x->name[40])  /* hardware definition */ -static struct snd_pcm_hardware snd_vortex_playback_hw_adb = { +static const struct snd_pcm_hardware snd_vortex_playback_hw_adb = {  	.info =  	    (SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */  	     SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED | @@ -51,7 +51,7 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_adb = {  };  #ifndef CHIP_AU8820 -static struct snd_pcm_hardware snd_vortex_playback_hw_a3d = { +static const struct snd_pcm_hardware snd_vortex_playback_hw_a3d = {  	.info =  	    (SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */  	     SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED | @@ -71,7 +71,7 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_a3d = {  	.periods_max = 64,  };  #endif -static struct snd_pcm_hardware snd_vortex_playback_hw_spdif = { +static const struct snd_pcm_hardware snd_vortex_playback_hw_spdif = {  	.info =  	    (SNDRV_PCM_INFO_MMAP | /* SNDRV_PCM_INFO_RESUME | */  	     SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_INTERLEAVED | @@ -94,7 +94,7 @@ static struct snd_pcm_hardware snd_vortex_playback_hw_spdif = {  };  #ifndef CHIP_AU8810 -static struct snd_pcm_hardware snd_vortex_playback_hw_wt = { +static const struct snd_pcm_hardware snd_vortex_playback_hw_wt = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP_VALID), @@ -439,7 +439,7 @@ static snd_pcm_uframes_t snd_vortex_pcm_pointer(struct snd_pcm_substream *substr  }  /* operators */ -static struct snd_pcm_ops snd_vortex_playback_ops = { +static const struct snd_pcm_ops snd_vortex_playback_ops = {  	.open = snd_vortex_pcm_open,  	.close = snd_vortex_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c index 8356180bfe0e..9a49e4243a9c 100644 --- a/sound/pci/aw2/aw2-alsa.c +++ b/sound/pci/aw2/aw2-alsa.c @@ -52,7 +52,7 @@ MODULE_LICENSE("GPL");   * TYPEDEFS   ********************************/    /* hardware definition */ -static struct snd_pcm_hardware snd_aw2_playback_hw = { +static const struct snd_pcm_hardware snd_aw2_playback_hw = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP_VALID), @@ -69,7 +69,7 @@ static struct snd_pcm_hardware snd_aw2_playback_hw = {  	.periods_max = 1024,  }; -static struct snd_pcm_hardware snd_aw2_capture_hw = { +static const struct snd_pcm_hardware snd_aw2_capture_hw = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP_VALID), diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c index de0234294c25..d8ade8771a32 100644 --- a/sound/pci/bt87x.c +++ b/sound/pci/bt87x.c @@ -353,7 +353,7 @@ static irqreturn_t snd_bt87x_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static struct snd_pcm_hardware snd_bt87x_digital_hw = { +static const struct snd_pcm_hardware snd_bt87x_digital_hw = {  	.info = SNDRV_PCM_INFO_MMAP |  		SNDRV_PCM_INFO_INTERLEAVED |  		SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -370,7 +370,7 @@ static struct snd_pcm_hardware snd_bt87x_digital_hw = {  	.periods_max = 255,  }; -static struct snd_pcm_hardware snd_bt87x_analog_hw = { +static const struct snd_pcm_hardware snd_bt87x_analog_hw = {  	.info = SNDRV_PCM_INFO_MMAP |  		SNDRV_PCM_INFO_INTERLEAVED |  		SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index 6165a57a94ae..cd27b5536654 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -296,7 +296,7 @@ static struct snd_ca0106_details ca0106_chip_details[] = {  };  /* hardware definition */ -static struct snd_pcm_hardware snd_ca0106_playback_hw = { +static const struct snd_pcm_hardware snd_ca0106_playback_hw = {  	.info =			SNDRV_PCM_INFO_MMAP |   				SNDRV_PCM_INFO_INTERLEAVED |  				SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -317,7 +317,7 @@ static struct snd_pcm_hardware snd_ca0106_playback_hw = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_ca0106_capture_hw = { +static const struct snd_pcm_hardware snd_ca0106_capture_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP |   				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -660,11 +660,9 @@ static int snd_ca0106_pcm_open_capture_channel(struct snd_pcm_substream *substre  	int err;  	epcm = kzalloc(sizeof(*epcm), GFP_KERNEL); -	if (epcm == NULL) { -		dev_err(chip->card->dev, -			"open_capture_channel: failed epcm alloc\n"); +	if (!epcm)  		return -ENOMEM; -        } +  	epcm->emu = chip;  	epcm->substream = substream;          epcm->channel_id=channel_id; diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index a460cb63e971..26a657870664 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -1477,7 +1477,7 @@ static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id)   */  /* playback on channel A */ -static struct snd_pcm_hardware snd_cmipci_playback = +static const struct snd_pcm_hardware snd_cmipci_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -1497,7 +1497,7 @@ static struct snd_pcm_hardware snd_cmipci_playback =  };  /* capture on channel B */ -static struct snd_pcm_hardware snd_cmipci_capture = +static const struct snd_pcm_hardware snd_cmipci_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -1517,7 +1517,7 @@ static struct snd_pcm_hardware snd_cmipci_capture =  };  /* playback on channel B - stereo 16bit only? */ -static struct snd_pcm_hardware snd_cmipci_playback2 = +static const struct snd_pcm_hardware snd_cmipci_playback2 =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -1537,7 +1537,7 @@ static struct snd_pcm_hardware snd_cmipci_playback2 =  };  /* spdif playback on channel A */ -static struct snd_pcm_hardware snd_cmipci_playback_spdif = +static const struct snd_pcm_hardware snd_cmipci_playback_spdif =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -1557,7 +1557,7 @@ static struct snd_pcm_hardware snd_cmipci_playback_spdif =  };  /* spdif playback on channel A (32bit, IEC958 subframes) */ -static struct snd_pcm_hardware snd_cmipci_playback_iec958_subframe = +static const struct snd_pcm_hardware snd_cmipci_playback_iec958_subframe =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -1577,7 +1577,7 @@ static struct snd_pcm_hardware snd_cmipci_playback_iec958_subframe =  };  /* spdif capture on channel B */ -static struct snd_pcm_hardware snd_cmipci_capture_spdif = +static const struct snd_pcm_hardware snd_cmipci_capture_spdif =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | @@ -3295,20 +3295,23 @@ static int snd_cmipci_probe(struct pci_dev *pci,  		break;  	} -	if ((err = snd_cmipci_create(card, pci, dev, &cm)) < 0) { -		snd_card_free(card); -		return err; -	} +	err = snd_cmipci_create(card, pci, dev, &cm); +	if (err < 0) +		goto free_card; +  	card->private_data = cm; -	if ((err = snd_card_register(card)) < 0) { -		snd_card_free(card); -		return err; -	} +	err = snd_card_register(card); +	if (err < 0) +		goto free_card; +  	pci_set_drvdata(pci, card);  	dev++;  	return 0; +free_card: +	snd_card_free(card); +	return err;  }  static void snd_cmipci_remove(struct pci_dev *pci) diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c index ee7ba4b0b47b..ec4247638fa1 100644 --- a/sound/pci/cs4281.c +++ b/sound/pci/cs4281.c @@ -847,7 +847,7 @@ static snd_pcm_uframes_t snd_cs4281_pointer(struct snd_pcm_substream *substream)  	       snd_cs4281_peekBA0(chip, dma->regDCC) - 1;  } -static struct snd_pcm_hardware snd_cs4281_playback = +static const struct snd_pcm_hardware snd_cs4281_playback =  {  	.info =			SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED | @@ -872,7 +872,7 @@ static struct snd_pcm_hardware snd_cs4281_playback =  	.fifo_size =		CS4281_FIFO_SIZE,  }; -static struct snd_pcm_hardware snd_cs4281_capture = +static const struct snd_pcm_hardware snd_cs4281_capture =  {  	.info =			SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_INTERLEAVED | diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c index 709fb1a503b7..0020fd0efc46 100644 --- a/sound/pci/cs46xx/cs46xx_lib.c +++ b/sound/pci/cs46xx/cs46xx_lib.c @@ -1438,7 +1438,7 @@ static irqreturn_t snd_cs46xx_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static struct snd_pcm_hardware snd_cs46xx_playback = +static const struct snd_pcm_hardware snd_cs46xx_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED |  @@ -1460,7 +1460,7 @@ static struct snd_pcm_hardware snd_cs46xx_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_cs46xx_capture = +static const struct snd_pcm_hardware snd_cs46xx_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED | diff --git a/sound/pci/cs5535audio/cs5535audio_pcm.c b/sound/pci/cs5535audio/cs5535audio_pcm.c index c208c1d8dbb2..ee7065f6e162 100644 --- a/sound/pci/cs5535audio/cs5535audio_pcm.c +++ b/sound/pci/cs5535audio/cs5535audio_pcm.c @@ -33,7 +33,7 @@  #include <sound/ac97_codec.h>  #include "cs5535audio.h" -static struct snd_pcm_hardware snd_cs5535audio_playback = +static const struct snd_pcm_hardware snd_cs5535audio_playback =  {  	.info =			(  				SNDRV_PCM_INFO_MMAP | @@ -62,7 +62,7 @@ static struct snd_pcm_hardware snd_cs5535audio_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_cs5535audio_capture = +static const struct snd_pcm_hardware snd_cs5535audio_capture =  {  	.info =			(  				SNDRV_PCM_INFO_MMAP | diff --git a/sound/pci/ctxfi/cthw20k1.c b/sound/pci/ctxfi/cthw20k1.c index 79edd88d5cd0..8e6eb9d7984b 100644 --- a/sound/pci/ctxfi/cthw20k1.c +++ b/sound/pci/ctxfi/cthw20k1.c @@ -2154,7 +2154,7 @@ static void hw_write_pci(struct hw *hw, u32 reg, u32 data)  		&container_of(hw, struct hw20k1, hw)->reg_pci_lock, flags);  } -static struct hw ct20k1_preset = { +static const struct hw ct20k1_preset = {  	.irq = -1,  	.card_init = hw_card_init, diff --git a/sound/pci/ctxfi/cthw20k2.c b/sound/pci/ctxfi/cthw20k2.c index 18ee7768b7c4..b866d6b2c923 100644 --- a/sound/pci/ctxfi/cthw20k2.c +++ b/sound/pci/ctxfi/cthw20k2.c @@ -2220,7 +2220,7 @@ static void hw_write_20kx(struct hw *hw, u32 reg, u32 data)  	writel(data, hw->mem_base + reg);  } -static struct hw ct20k2_preset = { +static const struct hw ct20k2_preset = {  	.irq = -1,  	.card_init = hw_card_init, diff --git a/sound/pci/ctxfi/ctpcm.c b/sound/pci/ctxfi/ctpcm.c index 974978041558..b36e37ae2b51 100644 --- a/sound/pci/ctxfi/ctpcm.c +++ b/sound/pci/ctxfi/ctpcm.c @@ -21,7 +21,7 @@  #include <sound/pcm.h>  /* Hardware descriptions for playback */ -static struct snd_pcm_hardware ct_pcm_playback_hw = { +static const struct snd_pcm_hardware ct_pcm_playback_hw = {  	.info			= (SNDRV_PCM_INFO_MMAP |  				   SNDRV_PCM_INFO_INTERLEAVED |  				   SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -46,7 +46,7 @@ static struct snd_pcm_hardware ct_pcm_playback_hw = {  	.fifo_size		= 0,  }; -static struct snd_pcm_hardware ct_spdif_passthru_playback_hw = { +static const struct snd_pcm_hardware ct_spdif_passthru_playback_hw = {  	.info			= (SNDRV_PCM_INFO_MMAP |  				   SNDRV_PCM_INFO_INTERLEAVED |  				   SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -69,7 +69,7 @@ static struct snd_pcm_hardware ct_spdif_passthru_playback_hw = {  };  /* Hardware descriptions for capture */ -static struct snd_pcm_hardware ct_pcm_capture_hw = { +static const struct snd_pcm_hardware ct_pcm_capture_hw = {  	.info			= (SNDRV_PCM_INFO_MMAP |  				   SNDRV_PCM_INFO_INTERLEAVED |  				   SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -140,27 +140,28 @@ static int ct_pcm_playback_open(struct snd_pcm_substream *substream)  	err = snd_pcm_hw_constraint_integer(runtime,  					    SNDRV_PCM_HW_PARAM_PERIODS); -	if (err < 0) { -		kfree(apcm); -		return err; -	} +	if (err < 0) +		goto free_pcm; +  	err = snd_pcm_hw_constraint_minmax(runtime,  					   SNDRV_PCM_HW_PARAM_BUFFER_BYTES,  					   1024, UINT_MAX); -	if (err < 0) { -		kfree(apcm); -		return err; -	} +	if (err < 0) +		goto free_pcm;  	apcm->timer = ct_timer_instance_new(atc->timer, apcm);  	if (!apcm->timer) { -		kfree(apcm); -		return -ENOMEM; +		err = -ENOMEM; +		goto free_pcm;  	}  	runtime->private_data = apcm;  	runtime->private_free = ct_atc_pcm_free_substream;  	return 0; + +free_pcm: +	kfree(apcm); +	return err;  }  static int ct_pcm_playback_close(struct snd_pcm_substream *substream) @@ -286,27 +287,28 @@ static int ct_pcm_capture_open(struct snd_pcm_substream *substream)  	err = snd_pcm_hw_constraint_integer(runtime,  					    SNDRV_PCM_HW_PARAM_PERIODS); -	if (err < 0) { -		kfree(apcm); -		return err; -	} +	if (err < 0) +		goto free_pcm; +  	err = snd_pcm_hw_constraint_minmax(runtime,  					   SNDRV_PCM_HW_PARAM_BUFFER_BYTES,  					   1024, UINT_MAX); -	if (err < 0) { -		kfree(apcm); -		return err; -	} +	if (err < 0) +		goto free_pcm;  	apcm->timer = ct_timer_instance_new(atc->timer, apcm);  	if (!apcm->timer) { -		kfree(apcm); -		return -ENOMEM; +		err = -ENOMEM; +		goto free_pcm;  	}  	runtime->private_data = apcm;  	runtime->private_free = ct_atc_pcm_free_substream;  	return 0; + +free_pcm: +	kfree(apcm); +	return err;  }  static int ct_pcm_capture_close(struct snd_pcm_substream *substream) diff --git a/sound/pci/ctxfi/ctresource.c b/sound/pci/ctxfi/ctresource.c index c5124c3c0fd1..80c4d84f9667 100644 --- a/sound/pci/ctxfi/ctresource.c +++ b/sound/pci/ctxfi/ctresource.c @@ -258,10 +258,8 @@ error:  int rsc_mgr_uninit(struct rsc_mgr *mgr)  { -	if (NULL != mgr->rscs) { -		kfree(mgr->rscs); -		mgr->rscs = NULL; -	} +	kfree(mgr->rscs); +	mgr->rscs = NULL;  	if ((NULL != mgr->hw) && (NULL != mgr->ctrl_blk)) {  		switch (mgr->type) { diff --git a/sound/pci/ctxfi/ctsrc.c b/sound/pci/ctxfi/ctsrc.c index a5a72df29801..bb4c9c3c89ae 100644 --- a/sound/pci/ctxfi/ctsrc.c +++ b/sound/pci/ctxfi/ctsrc.c @@ -702,10 +702,8 @@ error1:  static int srcimp_rsc_uninit(struct srcimp *srcimp)  { -	if (NULL != srcimp->imappers) { -		kfree(srcimp->imappers); -		srcimp->imappers = NULL; -	} +	kfree(srcimp->imappers); +	srcimp->imappers = NULL;  	srcimp->ops = NULL;  	srcimp->mgr = NULL;  	rsc_uninit(&srcimp->rsc); diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c index d15ecf9febbf..7326695bca33 100644 --- a/sound/pci/echoaudio/echoaudio.c +++ b/sound/pci/echoaudio/echoaudio.c @@ -826,7 +826,7 @@ static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream)  /* pcm *_ops structures */ -static struct snd_pcm_ops analog_playback_ops = { +static const struct snd_pcm_ops analog_playback_ops = {  	.open = pcm_analog_out_open,  	.close = pcm_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -837,7 +837,7 @@ static struct snd_pcm_ops analog_playback_ops = {  	.pointer = pcm_pointer,  	.page = snd_pcm_sgbuf_ops_page,  }; -static struct snd_pcm_ops analog_capture_ops = { +static const struct snd_pcm_ops analog_capture_ops = {  	.open = pcm_analog_in_open,  	.close = pcm_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -850,7 +850,7 @@ static struct snd_pcm_ops analog_capture_ops = {  };  #ifdef ECHOCARD_HAS_DIGITAL_IO  #ifndef ECHOCARD_HAS_VMIXER -static struct snd_pcm_ops digital_playback_ops = { +static const struct snd_pcm_ops digital_playback_ops = {  	.open = pcm_digital_out_open,  	.close = pcm_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -862,7 +862,7 @@ static struct snd_pcm_ops digital_playback_ops = {  	.page = snd_pcm_sgbuf_ops_page,  };  #endif /* !ECHOCARD_HAS_VMIXER */ -static struct snd_pcm_ops digital_capture_ops = { +static const struct snd_pcm_ops digital_capture_ops = {  	.open = pcm_digital_in_open,  	.close = pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index 77a4413f4564..2c2b12a06177 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c @@ -254,7 +254,7 @@ struct emu10k1x {  };  /* hardware definition */ -static struct snd_pcm_hardware snd_emu10k1x_playback_hw = { +static const struct snd_pcm_hardware snd_emu10k1x_playback_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP |   				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -273,7 +273,7 @@ static struct snd_pcm_hardware snd_emu10k1x_playback_hw = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_emu10k1x_capture_hw = { +static const struct snd_pcm_hardware snd_emu10k1x_capture_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP |   				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c index 5c9054a9f69e..2683b9717215 100644 --- a/sound/pci/emu10k1/emupcm.c +++ b/sound/pci/emu10k1/emupcm.c @@ -556,7 +556,7 @@ static int snd_emu10k1_efx_playback_prepare(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_hardware snd_emu10k1_efx_playback = +static const struct snd_pcm_hardware snd_emu10k1_efx_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_NONINTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -975,7 +975,7 @@ static snd_pcm_uframes_t snd_emu10k1_capture_pointer(struct snd_pcm_substream *s   *  Playback support device description   */ -static struct snd_pcm_hardware snd_emu10k1_playback = +static const struct snd_pcm_hardware snd_emu10k1_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -999,7 +999,7 @@ static struct snd_pcm_hardware snd_emu10k1_playback =   *  Capture support device description   */ -static struct snd_pcm_hardware snd_emu10k1_capture = +static const struct snd_pcm_hardware snd_emu10k1_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1019,7 +1019,7 @@ static struct snd_pcm_hardware snd_emu10k1_capture =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_emu10k1_capture_efx = +static const struct snd_pcm_hardware snd_emu10k1_capture_efx =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1742,7 +1742,7 @@ static snd_pcm_uframes_t snd_emu10k1_fx8010_playback_pointer(struct snd_pcm_subs  	return snd_pcm_indirect_playback_pointer(substream, &pcm->pcm_rec, ptr);  } -static struct snd_pcm_hardware snd_emu10k1_fx8010_playback = +static const struct snd_pcm_hardware snd_emu10k1_fx8010_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_RESUME | diff --git a/sound/pci/emu10k1/p16v.c b/sound/pci/emu10k1/p16v.c index c11f1a29f35d..a30da78a95b7 100644 --- a/sound/pci/emu10k1/p16v.c +++ b/sound/pci/emu10k1/p16v.c @@ -122,7 +122,7 @@   */   /* hardware definition */ -static struct snd_pcm_hardware snd_p16v_playback_hw = { +static const struct snd_pcm_hardware snd_p16v_playback_hw = {  	.info =			SNDRV_PCM_INFO_MMAP |   				SNDRV_PCM_INFO_INTERLEAVED |  				SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -143,7 +143,7 @@ static struct snd_pcm_hardware snd_p16v_playback_hw = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_p16v_capture_hw = { +static const struct snd_pcm_hardware snd_p16v_capture_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c index f0d978e3b274..d4cd6451fdca 100644 --- a/sound/pci/ens1370.c +++ b/sound/pci/ens1370.c @@ -1059,7 +1059,7 @@ static snd_pcm_uframes_t snd_ensoniq_capture_pointer(struct snd_pcm_substream *s  	return ptr;  } -static struct snd_pcm_hardware snd_ensoniq_playback1 = +static const struct snd_pcm_hardware snd_ensoniq_playback1 =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1086,7 +1086,7 @@ static struct snd_pcm_hardware snd_ensoniq_playback1 =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_ensoniq_playback2 = +static const struct snd_pcm_hardware snd_ensoniq_playback2 =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1106,7 +1106,7 @@ static struct snd_pcm_hardware snd_ensoniq_playback2 =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_ensoniq_capture = +static const struct snd_pcm_hardware snd_ensoniq_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c index 069902a06f00..9d248eb2e26c 100644 --- a/sound/pci/es1938.c +++ b/sound/pci/es1938.c @@ -900,7 +900,7 @@ static int snd_es1938_pcm_hw_free(struct snd_pcm_substream *substream)  /* ----------------------------------------------------------------------   * Audio1 Capture (ADC)   * ----------------------------------------------------------------------*/ -static struct snd_pcm_hardware snd_es1938_capture = +static const struct snd_pcm_hardware snd_es1938_capture =  {  	.info =			(SNDRV_PCM_INFO_INTERLEAVED |  				SNDRV_PCM_INFO_BLOCK_TRANSFER), @@ -922,7 +922,7 @@ static struct snd_pcm_hardware snd_es1938_capture =  /* -----------------------------------------------------------------------   * Audio2 Playback (DAC)   * -----------------------------------------------------------------------*/ -static struct snd_pcm_hardware snd_es1938_playback = +static const struct snd_pcm_hardware snd_es1938_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index 2ec2b1ce0af6..0b1845ca6005 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c @@ -1290,7 +1290,7 @@ static snd_pcm_uframes_t snd_es1968_pcm_pointer(struct snd_pcm_substream *substr  	return bytes_to_frames(substream->runtime, ptr % es->dma_size);  } -static struct snd_pcm_hardware snd_es1968_playback = { +static const struct snd_pcm_hardware snd_es1968_playback = {  	.info =			(SNDRV_PCM_INFO_MMAP |                 		         SNDRV_PCM_INFO_MMAP_VALID |  				 SNDRV_PCM_INFO_INTERLEAVED | @@ -1311,7 +1311,7 @@ static struct snd_pcm_hardware snd_es1968_playback = {  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_es1968_capture = { +static const struct snd_pcm_hardware snd_es1968_capture = {  	.info =			(SNDRV_PCM_INFO_NONINTERLEAVED |  				 SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 8e6b04b39dcc..73a67bc3586b 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -599,7 +599,7 @@ static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static struct snd_pcm_hardware snd_fm801_playback = +static const struct snd_pcm_hardware snd_fm801_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -619,7 +619,7 @@ static struct snd_pcm_hardware snd_fm801_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_fm801_capture = +static const struct snd_pcm_hardware snd_fm801_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/hda/dell_wmi_helper.c b/sound/pci/hda/dell_wmi_helper.c index 7efa7bd7acb2..44b1e15682b9 100644 --- a/sound/pci/hda/dell_wmi_helper.c +++ b/sound/pci/hda/dell_wmi_helper.c @@ -5,12 +5,47 @@  #if IS_ENABLED(CONFIG_DELL_LAPTOP)  #include <linux/dell-led.h> +enum { +	MICMUTE_LED_ON, +	MICMUTE_LED_OFF, +	MICMUTE_LED_FOLLOW_CAPTURE, +	MICMUTE_LED_FOLLOW_MUTE, +}; + +static int dell_led_mode = MICMUTE_LED_FOLLOW_MUTE; +static int dell_capture;  static int dell_led_value;  static int (*dell_micmute_led_set_func)(int);  static void (*dell_old_cap_hook)(struct hda_codec *,  			         struct snd_kcontrol *,  				 struct snd_ctl_elem_value *); +static void call_micmute_led_update(void) +{ +	int val; + +	switch (dell_led_mode) { +	case MICMUTE_LED_ON: +		val = 1; +		break; +	case MICMUTE_LED_OFF: +		val = 0; +		break; +	case MICMUTE_LED_FOLLOW_CAPTURE: +		val = dell_capture; +		break; +	case MICMUTE_LED_FOLLOW_MUTE: +	default: +		val = !dell_capture; +		break; +	} + +	if (val == dell_led_value) +		return; +	dell_led_value = val; +	dell_micmute_led_set_func(dell_led_value); +} +  static void update_dell_wmi_micmute_led(struct hda_codec *codec,  				        struct snd_kcontrol *kcontrol,  					struct snd_ctl_elem_value *ucontrol) @@ -22,15 +57,54 @@ static void update_dell_wmi_micmute_led(struct hda_codec *codec,  		return;  	if (strcmp("Capture Switch", ucontrol->id.name) == 0 && ucontrol->id.index == 0) {  		/* TODO: How do I verify if it's a mono or stereo here? */ -		int val = (ucontrol->value.integer.value[0] || ucontrol->value.integer.value[1]) ? 0 : 1; -		if (val == dell_led_value) -			return; -		dell_led_value = val; -		if (dell_micmute_led_set_func) -			dell_micmute_led_set_func(dell_led_value); +		dell_capture = (ucontrol->value.integer.value[0] || +				ucontrol->value.integer.value[1]); +		call_micmute_led_update();  	}  } +static int dell_mic_mute_led_mode_info(struct snd_kcontrol *kcontrol, +				       struct snd_ctl_elem_info *uinfo) +{ +	static const char * const texts[] = { +		"On", "Off", "Follow Capture", "Follow Mute", +	}; + +	return snd_ctl_enum_info(uinfo, 1, ARRAY_SIZE(texts), texts); +} + +static int dell_mic_mute_led_mode_get(struct snd_kcontrol *kcontrol, +				      struct snd_ctl_elem_value *ucontrol) +{ +	ucontrol->value.enumerated.item[0] = dell_led_mode; +	return 0; +} + +static int dell_mic_mute_led_mode_put(struct snd_kcontrol *kcontrol, +				      struct snd_ctl_elem_value *ucontrol) +{ +	unsigned int mode; + +	mode = ucontrol->value.enumerated.item[0]; +	if (mode > MICMUTE_LED_FOLLOW_MUTE) +		mode = MICMUTE_LED_FOLLOW_MUTE; +	if (mode == dell_led_mode) +		return 0; +	dell_led_mode = mode; +	call_micmute_led_update(); +	return 1; +} + +static const struct snd_kcontrol_new dell_mic_mute_mode_ctls[] = { +	{ +		.iface = SNDRV_CTL_ELEM_IFACE_MIXER, +		.name = "Mic Mute-LED Mode", +		.info = dell_mic_mute_led_mode_info, +		.get = dell_mic_mute_led_mode_get, +		.put = dell_mic_mute_led_mode_put, +	}, +	{} +};  static void alc_fixup_dell_wmi(struct hda_codec *codec,  			       const struct hda_fixup *fix, int action) @@ -55,6 +129,7 @@ static void alc_fixup_dell_wmi(struct hda_codec *codec,  				dell_old_cap_hook = spec->gen.cap_sync_hook;  				spec->gen.cap_sync_hook = update_dell_wmi_micmute_led;  				removefunc = false; +				add_mixer(spec, dell_mic_mute_mode_ctls);  			}  		} diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 5ae8ddab6412..f958d8d54d15 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2389,6 +2389,9 @@ static const struct pci_device_id azx_ids[] = {  	/* Coffelake */  	{ PCI_DEVICE(0x8086, 0xa348),  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, +	/* Cannonlake */ +	{ PCI_DEVICE(0x8086, 0x9dc8), +	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},  	/* Broxton-P(Apollolake) */  	{ PCI_DEVICE(0x8086, 0x5a98),  	  .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index e0fb8c6d1bc2..757857313426 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -505,7 +505,7 @@ static int ad1983_auto_smux_enum_put(struct snd_kcontrol *kcontrol,  	return 1;  } -static struct snd_kcontrol_new ad1983_auto_smux_mixer = { +static const struct snd_kcontrol_new ad1983_auto_smux_mixer = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "IEC958 Playback Source",  	.info = ad1983_auto_smux_enum_info, @@ -788,7 +788,7 @@ static int ad1988_auto_smux_enum_put(struct snd_kcontrol *kcontrol,  	return 1;  } -static struct snd_kcontrol_new ad1988_auto_smux_mixer = { +static const struct snd_kcontrol_new ad1988_auto_smux_mixer = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "IEC958 Playback Source",  	.info = ad1988_auto_smux_enum_info, diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 6cefdf6c0b75..63d15b545b33 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c @@ -961,7 +961,7 @@ static int stac_smux_enum_put(struct snd_kcontrol *kcontrol,  				     &spec->cur_smux[smux_idx]);  } -static struct snd_kcontrol_new stac_smux_mixer = { +static const struct snd_kcontrol_new stac_smux_mixer = {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "IEC958 Playback Source",  	/* count set later */ diff --git a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c index da5f37b7fdd0..6808bed0105e 100644 --- a/sound/pci/ice1712/delta.c +++ b/sound/pci/ice1712/delta.c @@ -445,7 +445,7 @@ static const struct snd_kcontrol_new snd_ice1712_delta1010lt_wordclock_status =   * initialize the chips on M-Audio cards   */ -static struct snd_akm4xxx akm_audiophile = { +static const struct snd_akm4xxx akm_audiophile = {  	.type = SND_AK4528,  	.num_adcs = 2,  	.num_dacs = 2, @@ -454,7 +454,7 @@ static struct snd_akm4xxx akm_audiophile = {  	}  }; -static struct snd_ak4xxx_private akm_audiophile_priv = { +static const struct snd_ak4xxx_private akm_audiophile_priv = {  	.caddr = 2,  	.cif = 0,  	.data_mask = ICE1712_DELTA_AP_DOUT, @@ -466,7 +466,7 @@ static struct snd_ak4xxx_private akm_audiophile_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_delta410 = { +static const struct snd_akm4xxx akm_delta410 = {  	.type = SND_AK4529,  	.num_adcs = 2,  	.num_dacs = 8, @@ -475,7 +475,7 @@ static struct snd_akm4xxx akm_delta410 = {  	}  }; -static struct snd_ak4xxx_private akm_delta410_priv = { +static const struct snd_ak4xxx_private akm_delta410_priv = {  	.caddr = 0,  	.cif = 0,  	.data_mask = ICE1712_DELTA_AP_DOUT, @@ -487,7 +487,7 @@ static struct snd_ak4xxx_private akm_delta410_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_delta1010lt = { +static const struct snd_akm4xxx akm_delta1010lt = {  	.type = SND_AK4524,  	.num_adcs = 8,  	.num_dacs = 8, @@ -497,7 +497,7 @@ static struct snd_akm4xxx akm_delta1010lt = {  	}  }; -static struct snd_ak4xxx_private akm_delta1010lt_priv = { +static const struct snd_ak4xxx_private akm_delta1010lt_priv = {  	.caddr = 2,  	.cif = 0, /* the default level of the CIF pin from AK4524 */  	.data_mask = ICE1712_DELTA_1010LT_DOUT, @@ -509,7 +509,7 @@ static struct snd_ak4xxx_private akm_delta1010lt_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_delta66e = { +static const struct snd_akm4xxx akm_delta66e = {  	.type = SND_AK4524,  	.num_adcs = 4,  	.num_dacs = 4, @@ -519,7 +519,7 @@ static struct snd_akm4xxx akm_delta66e = {  	}  }; -static struct snd_ak4xxx_private akm_delta66e_priv = { +static const struct snd_ak4xxx_private akm_delta66e_priv = {  	.caddr = 2,  	.cif = 0, /* the default level of the CIF pin from AK4524 */  	.data_mask = ICE1712_DELTA_66E_DOUT, @@ -532,7 +532,7 @@ static struct snd_ak4xxx_private akm_delta66e_priv = {  }; -static struct snd_akm4xxx akm_delta44 = { +static const struct snd_akm4xxx akm_delta44 = {  	.type = SND_AK4524,  	.num_adcs = 4,  	.num_dacs = 4, @@ -542,7 +542,7 @@ static struct snd_akm4xxx akm_delta44 = {  	}  }; -static struct snd_ak4xxx_private akm_delta44_priv = { +static const struct snd_ak4xxx_private akm_delta44_priv = {  	.caddr = 2,  	.cif = 0, /* the default level of the CIF pin from AK4524 */  	.data_mask = ICE1712_DELTA_CODEC_SERIAL_DATA, @@ -554,7 +554,7 @@ static struct snd_ak4xxx_private akm_delta44_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_vx442 = { +static const struct snd_akm4xxx akm_vx442 = {  	.type = SND_AK4524,  	.num_adcs = 4,  	.num_dacs = 4, @@ -564,7 +564,7 @@ static struct snd_akm4xxx akm_vx442 = {  	}  }; -static struct snd_ak4xxx_private akm_vx442_priv = { +static const struct snd_ak4xxx_private akm_vx442_priv = {  	.caddr = 2,  	.cif = 0,  	.data_mask = ICE1712_VX442_DOUT, diff --git a/sound/pci/ice1712/ews.c b/sound/pci/ice1712/ews.c index ec07136fc288..b8af747ecb43 100644 --- a/sound/pci/ice1712/ews.c +++ b/sound/pci/ice1712/ews.c @@ -344,7 +344,7 @@ static void ews88_setup_spdif(struct snd_ice1712 *ice, int rate)  /*   */ -static struct snd_akm4xxx akm_ews88mt = { +static const struct snd_akm4xxx akm_ews88mt = {  	.num_adcs = 8,  	.num_dacs = 8,  	.type = SND_AK4524, @@ -354,7 +354,7 @@ static struct snd_akm4xxx akm_ews88mt = {  	}  }; -static struct snd_ak4xxx_private akm_ews88mt_priv = { +static const struct snd_ak4xxx_private akm_ews88mt_priv = {  	.caddr = 2,  	.cif = 1, /* CIF high */  	.data_mask = ICE1712_EWS88_SERIAL_DATA, @@ -366,7 +366,7 @@ static struct snd_ak4xxx_private akm_ews88mt_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_ewx2496 = { +static const struct snd_akm4xxx akm_ewx2496 = {  	.num_adcs = 2,  	.num_dacs = 2,  	.type = SND_AK4524, @@ -375,7 +375,7 @@ static struct snd_akm4xxx akm_ewx2496 = {  	}  }; -static struct snd_ak4xxx_private akm_ewx2496_priv = { +static const struct snd_ak4xxx_private akm_ewx2496_priv = {  	.caddr = 2,  	.cif = 1, /* CIF high */  	.data_mask = ICE1712_EWS88_SERIAL_DATA, @@ -387,7 +387,7 @@ static struct snd_ak4xxx_private akm_ewx2496_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_6fire = { +static const struct snd_akm4xxx akm_6fire = {  	.num_adcs = 6,  	.num_dacs = 6,  	.type = SND_AK4524, @@ -396,7 +396,7 @@ static struct snd_akm4xxx akm_6fire = {  	}  }; -static struct snd_ak4xxx_private akm_6fire_priv = { +static const struct snd_ak4xxx_private akm_6fire_priv = {  	.caddr = 2,  	.cif = 1, /* CIF high */  	.data_mask = ICE1712_6FIRE_SERIAL_DATA, diff --git a/sound/pci/ice1712/hoontech.c b/sound/pci/ice1712/hoontech.c index a40001c1d9e8..fa301d31745b 100644 --- a/sound/pci/ice1712/hoontech.c +++ b/sound/pci/ice1712/hoontech.c @@ -166,7 +166,7 @@ static void snd_ice1712_stdsp24_midi2(struct snd_ice1712 *ice, int activate)  	mutex_unlock(&ice->gpio_mutex);  } -static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice) +static int hoontech_init(struct snd_ice1712 *ice, bool staudio)  {  	struct hoontech_spec *spec;  	int box, chn; @@ -203,7 +203,10 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)  	ICE1712_STDSP24_3_INSEL(spec->boxbits, 0);  	/* let's go - activate only functions in first box */ -	spec->config = 0; +	if (staudio) +		spec->config = ICE1712_STDSP24_MUTE; +	else +		spec->config = 0;  			    /* ICE1712_STDSP24_MUTE |  			       ICE1712_STDSP24_INSEL |  			       ICE1712_STDSP24_DAREAR; */ @@ -226,9 +229,16 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)  				     ICE1712_STDSP24_BOX_CHN4 |  				     ICE1712_STDSP24_BOX_MIDI1 |  				     ICE1712_STDSP24_BOX_MIDI2; -	spec->boxconfig[1] =  -	spec->boxconfig[2] =  -	spec->boxconfig[3] = 0; +	if (staudio) { +		spec->boxconfig[1] = +		spec->boxconfig[2] = +		spec->boxconfig[3] = spec->boxconfig[0]; +	} else { +		spec->boxconfig[1] = +		spec->boxconfig[2] = +		spec->boxconfig[3] = 0; +	} +  	snd_ice1712_stdsp24_darear(ice,  		(spec->config & ICE1712_STDSP24_DAREAR) ? 1 : 0);  	snd_ice1712_stdsp24_mute(ice, @@ -248,6 +258,16 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)  	return 0;  } +static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice) +{ +	return hoontech_init(ice, false); +} + +static int snd_ice1712_staudio_init(struct snd_ice1712 *ice) +{ +	return hoontech_init(ice, true); +} +  /*   * AK4524 access   */ @@ -269,7 +289,7 @@ static void stdsp24_ak4524_lock(struct snd_akm4xxx *ak, int chip)  static int snd_ice1712_value_init(struct snd_ice1712 *ice)  {  	/* Hoontech STDSP24 with modified hardware */ -	static struct snd_akm4xxx akm_stdsp24_mv = { +	static const struct snd_akm4xxx akm_stdsp24_mv = {  		.num_adcs = 2,  		.num_dacs = 2,  		.type = SND_AK4524, @@ -278,7 +298,7 @@ static int snd_ice1712_value_init(struct snd_ice1712 *ice)  		}  	}; -	static struct snd_ak4xxx_private akm_stdsp24_mv_priv = { +	static const struct snd_ak4xxx_private akm_stdsp24_mv_priv = {  		.caddr = 2,  		.cif = 1, /* CIF high */  		.data_mask = ICE1712_STDSP24_SERIAL_DATA, @@ -351,5 +371,14 @@ struct snd_ice1712_card_info snd_ice1712_hoontech_cards[] = {  		.model = "ez8",  		.chip_init = snd_ice1712_ez8_init,  	}, +	{ +		/* STAudio ADCIII has the same SSID as Hoontech StA DSP24, +		 * thus identified only via the explicit model option +		 */ +		.subvendor = ICE1712_SUBDEVICE_STAUDIO_ADCIII,	/* a dummy id */ +		.name = "STAudio ADCIII", +		.model = "staudio", +		.chip_init = snd_ice1712_staudio_init, +	},  	{ } /* terminator */  }; diff --git a/sound/pci/ice1712/hoontech.h b/sound/pci/ice1712/hoontech.h index cc1da1e69ad1..7f94943392ce 100644 --- a/sound/pci/ice1712/hoontech.h +++ b/sound/pci/ice1712/hoontech.h @@ -34,6 +34,7 @@  #define ICE1712_SUBDEVICE_STDSP24_VALUE		0x00010010	/* A dummy id for Hoontech SoundTrack Audio DSP 24 Value */  #define ICE1712_SUBDEVICE_STDSP24_MEDIA7_1	0x16141217	/* Hoontech ST Audio DSP24 Media 7.1 */  #define ICE1712_SUBDEVICE_EVENT_EZ8		0x00010001	/* A dummy id for EZ8 */ +#define ICE1712_SUBDEVICE_STAUDIO_ADCIII	0x00010002	/* A dummy id for STAudio ADCIII */  extern struct snd_ice1712_card_info snd_ice1712_hoontech_cards[]; diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c index 5bb146703738..0dbaccf61f33 100644 --- a/sound/pci/ice1712/juli.c +++ b/sound/pci/ice1712/juli.c @@ -282,7 +282,7 @@ static const struct snd_akm4xxx_dac_channel juli_dac[] = {  }; -static struct snd_akm4xxx akm_juli_dac = { +static const struct snd_akm4xxx akm_juli_dac = {  	.type = SND_AK4358,  	.num_dacs = 8,	/* DAC1 - analog out  			   DAC2 - analog in monitor diff --git a/sound/pci/ice1712/phase.c b/sound/pci/ice1712/phase.c index e9ca89c9174b..67fbb28bf033 100644 --- a/sound/pci/ice1712/phase.c +++ b/sound/pci/ice1712/phase.c @@ -102,13 +102,13 @@ static const unsigned char wm_vol[256] = {  #define WM_VOL_MAX	(sizeof(wm_vol) - 1)  #define WM_VOL_MUTE	0x8000 -static struct snd_akm4xxx akm_phase22 = { +static const struct snd_akm4xxx akm_phase22 = {  	.type = SND_AK4524,  	.num_dacs = 2,  	.num_adcs = 2,  }; -static struct snd_ak4xxx_private akm_phase22_priv = { +static const struct snd_ak4xxx_private akm_phase22_priv = {  	.caddr =	2,  	.cif =		1,  	.data_mask =	1 << 4, diff --git a/sound/pci/ice1712/quartet.c b/sound/pci/ice1712/quartet.c index f1b3732cc6d2..d145b5eb7ff8 100644 --- a/sound/pci/ice1712/quartet.c +++ b/sound/pci/ice1712/quartet.c @@ -386,7 +386,7 @@ static const struct snd_akm4xxx_adc_channel qtet_adc[] = {  	AK_CONTROL(PCM_34_CAPTURE_VOLUME, 2),  }; -static struct snd_akm4xxx akm_qtet_dac = { +static const struct snd_akm4xxx akm_qtet_dac = {  	.type = SND_AK4620,  	.num_dacs = 4,	/* DAC1 - Output 12  	*/ diff --git a/sound/pci/ice1712/revo.c b/sound/pci/ice1712/revo.c index 1d81ae677573..6669c389f336 100644 --- a/sound/pci/ice1712/revo.c +++ b/sound/pci/ice1712/revo.c @@ -235,7 +235,7 @@ static const struct snd_akm4xxx_adc_channel revo51_adc[] = {  	},  }; -static struct snd_akm4xxx akm_revo_front = { +static const struct snd_akm4xxx akm_revo_front = {  	.type = SND_AK4381,  	.num_dacs = 2,  	.ops = { @@ -244,7 +244,7 @@ static struct snd_akm4xxx akm_revo_front = {  	.dac_info = revo71_front,  }; -static struct snd_ak4xxx_private akm_revo_front_priv = { +static const struct snd_ak4xxx_private akm_revo_front_priv = {  	.caddr = 1,  	.cif = 0,  	.data_mask = VT1724_REVO_CDOUT, @@ -256,7 +256,7 @@ static struct snd_ak4xxx_private akm_revo_front_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_revo_surround = { +static const struct snd_akm4xxx akm_revo_surround = {  	.type = SND_AK4355,  	.idx_offset = 1,  	.num_dacs = 6, @@ -266,7 +266,7 @@ static struct snd_akm4xxx akm_revo_surround = {  	.dac_info = revo71_surround,  }; -static struct snd_ak4xxx_private akm_revo_surround_priv = { +static const struct snd_ak4xxx_private akm_revo_surround_priv = {  	.caddr = 3,  	.cif = 0,  	.data_mask = VT1724_REVO_CDOUT, @@ -278,7 +278,7 @@ static struct snd_ak4xxx_private akm_revo_surround_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_revo51 = { +static const struct snd_akm4xxx akm_revo51 = {  	.type = SND_AK4358,  	.num_dacs = 8,  	.ops = { @@ -287,7 +287,7 @@ static struct snd_akm4xxx akm_revo51 = {  	.dac_info = revo51_dac,  }; -static struct snd_ak4xxx_private akm_revo51_priv = { +static const struct snd_ak4xxx_private akm_revo51_priv = {  	.caddr = 2,  	.cif = 0,  	.data_mask = VT1724_REVO_CDOUT, @@ -299,13 +299,13 @@ static struct snd_ak4xxx_private akm_revo51_priv = {  	.mask_flags = 0,  }; -static struct snd_akm4xxx akm_revo51_adc = { +static const struct snd_akm4xxx akm_revo51_adc = {  	.type = SND_AK5365,  	.num_adcs = 2,  	.adc_info = revo51_adc,  }; -static struct snd_ak4xxx_private akm_revo51_adc_priv = { +static const struct snd_ak4xxx_private akm_revo51_adc_priv = {  	.caddr = 2,  	.cif = 0,  	.data_mask = VT1724_REVO_CDOUT, @@ -346,7 +346,7 @@ static const struct snd_akm4xxx_dac_channel ap192_dac[] = {  	AK_DAC("PCM Playback Volume", 2)  }; -static struct snd_akm4xxx akm_ap192 = { +static const struct snd_akm4xxx akm_ap192 = {  	.type = SND_AK4358,  	.num_dacs = 2,  	.ops = { @@ -355,7 +355,7 @@ static struct snd_akm4xxx akm_ap192 = {  	.dac_info = ap192_dac,  }; -static struct snd_ak4xxx_private akm_ap192_priv = { +static const struct snd_ak4xxx_private akm_ap192_priv = {  	.caddr = 2,  	.cif = 0,  	.data_mask = VT1724_REVO_CDOUT, diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index a8d7092e93dd..4c24346340f4 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c @@ -1115,7 +1115,7 @@ static snd_pcm_uframes_t snd_intel8x0_pcm_pointer(struct snd_pcm_substream *subs  	return bytes_to_frames(substream->runtime, ptr);  } -static struct snd_pcm_hardware snd_intel8x0_stream = +static const struct snd_pcm_hardware snd_intel8x0_stream =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1367,7 +1367,7 @@ static int snd_intel8x0_ali_spdifout_close(struct snd_pcm_substream *substream)  }  #endif -static struct snd_pcm_ops snd_intel8x0_playback_ops = { +static const struct snd_pcm_ops snd_intel8x0_playback_ops = {  	.open =		snd_intel8x0_playback_open,  	.close =	snd_intel8x0_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1378,7 +1378,7 @@ static struct snd_pcm_ops snd_intel8x0_playback_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_capture_ops = { +static const struct snd_pcm_ops snd_intel8x0_capture_ops = {  	.open =		snd_intel8x0_capture_open,  	.close =	snd_intel8x0_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1389,7 +1389,7 @@ static struct snd_pcm_ops snd_intel8x0_capture_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_capture_mic_ops = { +static const struct snd_pcm_ops snd_intel8x0_capture_mic_ops = {  	.open =		snd_intel8x0_mic_open,  	.close =	snd_intel8x0_mic_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1400,7 +1400,7 @@ static struct snd_pcm_ops snd_intel8x0_capture_mic_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_capture_mic2_ops = { +static const struct snd_pcm_ops snd_intel8x0_capture_mic2_ops = {  	.open =		snd_intel8x0_mic2_open,  	.close =	snd_intel8x0_mic2_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1411,7 +1411,7 @@ static struct snd_pcm_ops snd_intel8x0_capture_mic2_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_capture2_ops = { +static const struct snd_pcm_ops snd_intel8x0_capture2_ops = {  	.open =		snd_intel8x0_capture2_open,  	.close =	snd_intel8x0_capture2_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1422,7 +1422,7 @@ static struct snd_pcm_ops snd_intel8x0_capture2_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_spdif_ops = { +static const struct snd_pcm_ops snd_intel8x0_spdif_ops = {  	.open =		snd_intel8x0_spdif_open,  	.close =	snd_intel8x0_spdif_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1433,7 +1433,7 @@ static struct snd_pcm_ops snd_intel8x0_spdif_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_ali_playback_ops = { +static const struct snd_pcm_ops snd_intel8x0_ali_playback_ops = {  	.open =		snd_intel8x0_playback_open,  	.close =	snd_intel8x0_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1444,7 +1444,7 @@ static struct snd_pcm_ops snd_intel8x0_ali_playback_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_ali_capture_ops = { +static const struct snd_pcm_ops snd_intel8x0_ali_capture_ops = {  	.open =		snd_intel8x0_capture_open,  	.close =	snd_intel8x0_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1455,7 +1455,7 @@ static struct snd_pcm_ops snd_intel8x0_ali_capture_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_ali_capture_mic_ops = { +static const struct snd_pcm_ops snd_intel8x0_ali_capture_mic_ops = {  	.open =		snd_intel8x0_mic_open,  	.close =	snd_intel8x0_mic_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1466,7 +1466,7 @@ static struct snd_pcm_ops snd_intel8x0_ali_capture_mic_ops = {  	.pointer =	snd_intel8x0_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0_ali_ac97spdifout_ops = { +static const struct snd_pcm_ops snd_intel8x0_ali_ac97spdifout_ops = {  	.open =		snd_intel8x0_ali_ac97spdifout_open,  	.close =	snd_intel8x0_ali_ac97spdifout_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1503,8 +1503,8 @@ static struct snd_pcm_ops snd_intel8x0_ali_spdifout_ops = {  struct ich_pcm_table {  	char *suffix; -	struct snd_pcm_ops *playback_ops; -	struct snd_pcm_ops *capture_ops; +	const struct snd_pcm_ops *playback_ops; +	const struct snd_pcm_ops *capture_ops;  	size_t prealloc_size;  	size_t prealloc_max_size;  	int ac97_idx; @@ -1721,7 +1721,7 @@ static void snd_intel8x0_mixer_free_ac97(struct snd_ac97 *ac97)  	chip->ac97[ac97->num] = NULL;  } -static struct ac97_pcm ac97_pcm_defs[] = { +static const struct ac97_pcm ac97_pcm_defs[] = {  	/* front PCM */  	{  		.exclusive = 1, diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c index 18ff668ce7a5..3a4769a97d29 100644 --- a/sound/pci/intel8x0m.c +++ b/sound/pci/intel8x0m.c @@ -611,7 +611,7 @@ static int snd_intel8x0m_pcm_prepare(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_hardware snd_intel8x0m_stream = +static const struct snd_pcm_hardware snd_intel8x0m_stream =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -685,7 +685,7 @@ static int snd_intel8x0m_capture_close(struct snd_pcm_substream *substream)  } -static struct snd_pcm_ops snd_intel8x0m_playback_ops = { +static const struct snd_pcm_ops snd_intel8x0m_playback_ops = {  	.open =		snd_intel8x0m_playback_open,  	.close =	snd_intel8x0m_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -696,7 +696,7 @@ static struct snd_pcm_ops snd_intel8x0m_playback_ops = {  	.pointer =	snd_intel8x0m_pcm_pointer,  }; -static struct snd_pcm_ops snd_intel8x0m_capture_ops = { +static const struct snd_pcm_ops snd_intel8x0m_capture_ops = {  	.open =		snd_intel8x0m_capture_open,  	.close =	snd_intel8x0m_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -710,8 +710,8 @@ static struct snd_pcm_ops snd_intel8x0m_capture_ops = {  struct ich_pcm_table {  	char *suffix; -	struct snd_pcm_ops *playback_ops; -	struct snd_pcm_ops *capture_ops; +	const struct snd_pcm_ops *playback_ops; +	const struct snd_pcm_ops *capture_ops;  	size_t prealloc_size;  	size_t prealloc_max_size;  	int ac97_idx; diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index b28fe4914d6b..04cd71c74e5c 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c @@ -1231,7 +1231,7 @@ static int snd_korg1212_downloadDSPCode(struct snd_korg1212 *korg1212)          return 0;  } -static struct snd_pcm_hardware snd_korg1212_playback_info = +static const struct snd_pcm_hardware snd_korg1212_playback_info =  {  	.info =              (SNDRV_PCM_INFO_MMAP |                                SNDRV_PCM_INFO_MMAP_VALID | @@ -1252,7 +1252,7 @@ static struct snd_pcm_hardware snd_korg1212_playback_info =          .fifo_size =          0,  }; -static struct snd_pcm_hardware snd_korg1212_capture_info = +static const struct snd_pcm_hardware snd_korg1212_capture_info =  {          .info =              (SNDRV_PCM_INFO_MMAP |                                SNDRV_PCM_INFO_MMAP_VALID | diff --git a/sound/pci/lola/lola_pcm.c b/sound/pci/lola/lola_pcm.c index 1268ba329016..310b26a756c9 100644 --- a/sound/pci/lola/lola_pcm.c +++ b/sound/pci/lola/lola_pcm.c @@ -197,7 +197,7 @@ static void lola_stream_reset(struct lola *chip, struct lola_stream *str)  	}  } -static struct snd_pcm_hardware lola_pcm_hw = { +static const struct snd_pcm_hardware lola_pcm_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/lx6464es/lx6464es.c b/sound/pci/lx6464es/lx6464es.c index f9c3e86d55d5..9655b08a1c52 100644 --- a/sound/pci/lx6464es/lx6464es.c +++ b/sound/pci/lx6464es/lx6464es.c @@ -77,7 +77,7 @@ MODULE_DEVICE_TABLE(pci, snd_lx6464es_ids);  /* alsa callbacks */ -static struct snd_pcm_hardware lx_caps = { +static const struct snd_pcm_hardware lx_caps = {  	.info             = (SNDRV_PCM_INFO_MMAP |  			     SNDRV_PCM_INFO_INTERLEAVED |  			     SNDRV_PCM_INFO_MMAP_VALID | diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c index cafea6dc5c01..97ac80af4447 100644 --- a/sound/pci/maestro3.c +++ b/sound/pci/maestro3.c @@ -1681,7 +1681,7 @@ static irqreturn_t snd_m3_interrupt(int irq, void *dev_id)  /*   */ -static struct snd_pcm_hardware snd_m3_playback = +static const struct snd_pcm_hardware snd_m3_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED | @@ -1702,7 +1702,7 @@ static struct snd_pcm_hardware snd_m3_playback =  	.periods_max =		1024,  }; -static struct snd_pcm_hardware snd_m3_capture = +static const struct snd_pcm_hardware snd_m3_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_INTERLEAVED | diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c index 80d439944cb5..a74f1ad7e7b8 100644 --- a/sound/pci/mixart/mixart.c +++ b/sound/pci/mixart/mixart.c @@ -675,7 +675,7 @@ static int snd_mixart_hw_free(struct snd_pcm_substream *subs)  /*   *  TODO CONFIGURATION SPACE for all pcms, mono pcm must update channels_max   */ -static struct snd_pcm_hardware snd_mixart_analog_caps = +static const struct snd_pcm_hardware snd_mixart_analog_caps =  {  	.info             = ( SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -696,7 +696,7 @@ static struct snd_pcm_hardware snd_mixart_analog_caps =  	.periods_max      = (32*1024/256),  }; -static struct snd_pcm_hardware snd_mixart_digital_caps = +static const struct snd_pcm_hardware snd_mixart_digital_caps =  {  	.info             = ( SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -1052,10 +1052,8 @@ static int snd_mixart_create(struct mixart_mgr *mgr, struct snd_card *card, int  	};  	chip = kzalloc(sizeof(*chip), GFP_KERNEL); -	if (! chip) { -		dev_err(card->dev, "cannot allocate chip\n"); +	if (!chip)  		return -ENOMEM; -	}  	chip->card = card;  	chip->chip_idx = idx; @@ -1313,9 +1311,6 @@ static int snd_mixart_probe(struct pci_dev *pci,  	}  	mgr->irq = pci->irq; -	sprintf(mgr->shortname, "Digigram miXart"); -	sprintf(mgr->longname, "%s at 0x%lx & 0x%lx, irq %i", mgr->shortname, mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq); -  	/* init mailbox  */  	mgr->msg_fifo_readptr = 0;  	mgr->msg_fifo_writeptr = 0; @@ -1350,8 +1345,11 @@ static int snd_mixart_probe(struct pci_dev *pci,  		}  		strcpy(card->driver, CARD_NAME); -		sprintf(card->shortname, "%s [PCM #%d]", mgr->shortname, i); -		sprintf(card->longname, "%s [PCM #%d]", mgr->longname, i); +		snprintf(card->shortname, sizeof(card->shortname), +			 "Digigram miXart [PCM #%d]", i); +		snprintf(card->longname, sizeof(card->longname), +			"Digigram miXart at 0x%lx & 0x%lx, irq %i [PCM #%d]", +			mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq, i);  		if ((err = snd_mixart_create(mgr, card, i)) < 0) {  			snd_card_free(card); diff --git a/sound/pci/mixart/mixart.h b/sound/pci/mixart/mixart.h index 426743871540..69b3ece099ad 100644 --- a/sound/pci/mixart/mixart.h +++ b/sound/pci/mixart/mixart.h @@ -74,10 +74,6 @@ struct mixart_mgr {  	/* memory-maps */  	struct mem_area mem[2]; -	/* share the name */ -	char shortname[32];         /* short name of this soundcard */ -	char longname[80];          /* name of this soundcard */ -  	/* one and only blocking message or notification may be pending  */  	u32 pending_event;  	wait_queue_head_t msg_sleep; diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c index 0ef8054c3936..b97f4ea6b56c 100644 --- a/sound/pci/nm256/nm256.c +++ b/sound/pci/nm256/nm256.c @@ -1271,7 +1271,7 @@ snd_nm256_ac97_write(struct snd_ac97 *ac97,  }  /* static resolution table */ -static struct snd_ac97_res_table nm256_res_table[] = { +static const struct snd_ac97_res_table nm256_res_table[] = {  	{ AC97_MASTER, 0x1f1f },  	{ AC97_HEADPHONE, 0x1f1f },  	{ AC97_MASTER_MONO, 0x001f }, diff --git a/sound/pci/pcxhr/pcxhr.c b/sound/pci/pcxhr/pcxhr.c index bb7eee9d0c2b..f9ae72f28ddc 100644 --- a/sound/pci/pcxhr/pcxhr.c +++ b/sound/pci/pcxhr/pcxhr.c @@ -986,7 +986,7 @@ static int pcxhr_hw_free(struct snd_pcm_substream *subs)  /*   *  CONFIGURATION SPACE for all pcms, mono pcm must update channels_max   */ -static struct snd_pcm_hardware pcxhr_caps = +static const struct snd_pcm_hardware pcxhr_caps =  {  	.info             = (SNDRV_PCM_INFO_MMAP |  			     SNDRV_PCM_INFO_INTERLEAVED | @@ -1165,7 +1165,7 @@ int pcxhr_create_pcm(struct snd_pcxhr *chip)  	struct snd_pcm *pcm;  	char name[32]; -	sprintf(name, "pcxhr %d", chip->chip_idx); +	snprintf(name, sizeof(name), "pcxhr %d", chip->chip_idx);  	if ((err = snd_pcm_new(chip->card, name, 0,  			       chip->nb_streams_play,  			       chip->nb_streams_capt, &pcm)) < 0) { @@ -1215,10 +1215,8 @@ static int pcxhr_create(struct pcxhr_mgr *mgr,  	};  	chip = kzalloc(sizeof(*chip), GFP_KERNEL); -	if (! chip) { -		dev_err(card->dev, "cannot allocate chip\n"); +	if (!chip)  		return -ENOMEM; -	}  	chip->card = card;  	chip->chip_idx = idx; @@ -1252,7 +1250,7 @@ static void pcxhr_proc_info(struct snd_info_entry *entry,  	struct snd_pcxhr *chip = entry->private_data;  	struct pcxhr_mgr *mgr = chip->mgr; -	snd_iprintf(buffer, "\n%s\n", mgr->longname); +	snd_iprintf(buffer, "\n%s\n", mgr->name);  	/* stats available when embedded DSP is running */  	if (mgr->dsp_loaded & (1 << PCXHR_FIRMWARE_DSP_MAIN_INDEX)) { @@ -1339,7 +1337,7 @@ static void pcxhr_proc_sync(struct snd_info_entry *entry,  		max_clock = PCXHR_CLOCK_TYPE_MAX;  	} -	snd_iprintf(buffer, "\n%s\n", mgr->longname); +	snd_iprintf(buffer, "\n%s\n", mgr->name);  	snd_iprintf(buffer, "Current Sample Clock\t: %s\n",  		    texts[mgr->cur_clock_type]);  	snd_iprintf(buffer, "Current Sample Rate\t= %d\n", @@ -1597,10 +1595,9 @@ static int pcxhr_probe(struct pci_dev *pci,  	}  	mgr->irq = pci->irq; -	sprintf(mgr->shortname, "Digigram %s", card_name); -	sprintf(mgr->longname, "%s at 0x%lx & 0x%lx, 0x%lx irq %i", -		mgr->shortname, -		mgr->port[0], mgr->port[1], mgr->port[2], mgr->irq); +	snprintf(mgr->name, sizeof(mgr->name), +		 "Digigram at 0x%lx & 0x%lx, 0x%lx irq %i", +		 mgr->port[0], mgr->port[1], mgr->port[2], mgr->irq);  	/* ISR lock  */  	mutex_init(&mgr->lock); @@ -1644,8 +1641,10 @@ static int pcxhr_probe(struct pci_dev *pci,  		}  		strcpy(card->driver, DRIVER_NAME); -		sprintf(card->shortname, "%s [PCM #%d]", mgr->shortname, i); -		sprintf(card->longname, "%s [PCM #%d]", mgr->longname, i); +		snprintf(card->shortname, sizeof(card->shortname), +			 "Digigram [PCM #%d]", i); +		snprintf(card->longname, sizeof(card->longname), +			 "%s [PCM #%d]", mgr->name, i);  		if ((err = pcxhr_create(mgr, card, i)) < 0) {  			snd_card_free(card); diff --git a/sound/pci/pcxhr/pcxhr.h b/sound/pci/pcxhr/pcxhr.h index 9e39e509a3ef..d799cbd37301 100644 --- a/sound/pci/pcxhr/pcxhr.h +++ b/sound/pci/pcxhr/pcxhr.h @@ -75,8 +75,7 @@ struct pcxhr_mgr {  	unsigned long port[3];  	/* share the name */ -	char shortname[32];		/* short name of this soundcard */ -	char longname[96];		/* name of this soundcard */ +	char name[40];			/* name of this soundcard */  	struct pcxhr_rmh *prmh; diff --git a/sound/pci/pcxhr/pcxhr_mixer.c b/sound/pci/pcxhr/pcxhr_mixer.c index 36875df30dbf..d9a1c6c50a87 100644 --- a/sound/pci/pcxhr/pcxhr_mixer.c +++ b/sound/pci/pcxhr/pcxhr_mixer.c @@ -185,7 +185,7 @@ static int pcxhr_analog_vol_put(struct snd_kcontrol *kcontrol,  	return changed;  } -static struct snd_kcontrol_new pcxhr_control_analog_level = { +static const struct snd_kcontrol_new pcxhr_control_analog_level = {  	.iface =	SNDRV_CTL_ELEM_IFACE_MIXER,  	.access =	(SNDRV_CTL_ELEM_ACCESS_READWRITE |  			 SNDRV_CTL_ELEM_ACCESS_TLV_READ), @@ -409,7 +409,7 @@ static int pcxhr_pcm_vol_put(struct snd_kcontrol *kcontrol,  	return changed;  } -static struct snd_kcontrol_new snd_pcxhr_pcm_vol = +static const struct snd_kcontrol_new snd_pcxhr_pcm_vol =  {  	.iface =	SNDRV_CTL_ELEM_IFACE_MIXER,  	.access =	(SNDRV_CTL_ELEM_ACCESS_READWRITE | diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index f067c76d77f8..44f3b48d47b1 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c @@ -1315,7 +1315,7 @@ static int riptide_reset(struct cmdif *cif, struct snd_riptide *chip)  	return 0;  } -static struct snd_pcm_hardware snd_riptide_playback = { +static const struct snd_pcm_hardware snd_riptide_playback = {  	.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_BLOCK_TRANSFER |  		 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID), @@ -1334,7 +1334,7 @@ static struct snd_pcm_hardware snd_riptide_playback = {  	.periods_max = 64,  	.fifo_size = 0,  }; -static struct snd_pcm_hardware snd_riptide_capture = { +static const struct snd_pcm_hardware snd_riptide_capture = {  	.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  		 SNDRV_PCM_INFO_BLOCK_TRANSFER |  		 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_MMAP_VALID), diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c index e4cdef94e4a2..f0906ba416d4 100644 --- a/sound/pci/rme32.c +++ b/sound/pci/rme32.c @@ -314,7 +314,7 @@ static int snd_rme32_capture_copy_kernel(struct snd_pcm_substream *substream,  /*   * SPDIF I/O capabilities (half-duplex mode)   */ -static struct snd_pcm_hardware snd_rme32_spdif_info = { +static const struct snd_pcm_hardware snd_rme32_spdif_info = {  	.info =		(SNDRV_PCM_INFO_MMAP_IOMEM |  			 SNDRV_PCM_INFO_MMAP_VALID |  			 SNDRV_PCM_INFO_INTERLEAVED |  @@ -340,7 +340,7 @@ static struct snd_pcm_hardware snd_rme32_spdif_info = {  /*   * ADAT I/O capabilities (half-duplex mode)   */ -static struct snd_pcm_hardware snd_rme32_adat_info = +static const struct snd_pcm_hardware snd_rme32_adat_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP_IOMEM |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -365,7 +365,7 @@ static struct snd_pcm_hardware snd_rme32_adat_info =  /*   * SPDIF I/O capabilities (full-duplex mode)   */ -static struct snd_pcm_hardware snd_rme32_spdif_fd_info = { +static const struct snd_pcm_hardware snd_rme32_spdif_fd_info = {  	.info =		(SNDRV_PCM_INFO_MMAP |  			 SNDRV_PCM_INFO_MMAP_VALID |  			 SNDRV_PCM_INFO_INTERLEAVED |  @@ -391,7 +391,7 @@ static struct snd_pcm_hardware snd_rme32_spdif_fd_info = {  /*   * ADAT I/O capabilities (full-duplex mode)   */ -static struct snd_pcm_hardware snd_rme32_adat_fd_info = +static const struct snd_pcm_hardware snd_rme32_adat_fd_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP |  			      SNDRV_PCM_INFO_MMAP_VALID | diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c index 2e19ba55e754..dcfa4d7a73e2 100644 --- a/sound/pci/rme96.c +++ b/sound/pci/rme96.c @@ -384,7 +384,7 @@ snd_rme96_capture_copy_kernel(struct snd_pcm_substream *substream,  /*   * Digital output capabilities (S/PDIF)   */ -static struct snd_pcm_hardware snd_rme96_playback_spdif_info = +static const struct snd_pcm_hardware snd_rme96_playback_spdif_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP_IOMEM |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -415,7 +415,7 @@ static struct snd_pcm_hardware snd_rme96_playback_spdif_info =  /*   * Digital input capabilities (S/PDIF)   */ -static struct snd_pcm_hardware snd_rme96_capture_spdif_info = +static const struct snd_pcm_hardware snd_rme96_capture_spdif_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP_IOMEM |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -446,7 +446,7 @@ static struct snd_pcm_hardware snd_rme96_capture_spdif_info =  /*   * Digital output capabilities (ADAT)   */ -static struct snd_pcm_hardware snd_rme96_playback_adat_info = +static const struct snd_pcm_hardware snd_rme96_playback_adat_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP_IOMEM |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -473,7 +473,7 @@ static struct snd_pcm_hardware snd_rme96_playback_adat_info =  /*   * Digital input capabilities (ADAT)   */ -static struct snd_pcm_hardware snd_rme96_capture_adat_info = +static const struct snd_pcm_hardware snd_rme96_capture_adat_info =  {  	.info =		     (SNDRV_PCM_INFO_MMAP_IOMEM |  			      SNDRV_PCM_INFO_MMAP_VALID | @@ -1199,7 +1199,7 @@ snd_rme96_playback_spdif_open(struct snd_pcm_substream *substream)  	snd_pcm_set_sync(substream);  	spin_lock_irq(&rme96->lock);	 -        if (rme96->playback_substream != NULL) { +	if (rme96->playback_substream) {  		spin_unlock_irq(&rme96->lock);                  return -EBUSY;          } @@ -1248,7 +1248,7 @@ snd_rme96_capture_spdif_open(struct snd_pcm_substream *substream)          }  	spin_lock_irq(&rme96->lock); -        if (rme96->capture_substream != NULL) { +	if (rme96->capture_substream) {  		spin_unlock_irq(&rme96->lock);                  return -EBUSY;          } @@ -1268,7 +1268,7 @@ snd_rme96_playback_adat_open(struct snd_pcm_substream *substream)  	snd_pcm_set_sync(substream);  	spin_lock_irq(&rme96->lock);	 -        if (rme96->playback_substream != NULL) { +	if (rme96->playback_substream) {  		spin_unlock_irq(&rme96->lock);                  return -EBUSY;          } @@ -1315,7 +1315,7 @@ snd_rme96_capture_adat_open(struct snd_pcm_substream *substream)          }  	spin_lock_irq(&rme96->lock);	 -        if (rme96->capture_substream != NULL) { +	if (rme96->capture_substream) {  		spin_unlock_irq(&rme96->lock);                  return -EBUSY;          } @@ -1578,9 +1578,9 @@ snd_rme96_free(void *private_data)  {  	struct rme96 *rme96 = (struct rme96 *)private_data; -	if (rme96 == NULL) { +	if (!rme96)  	        return; -	} +  	if (rme96->irq >= 0) {  		snd_rme96_trigger(rme96, RME96_STOP_BOTH);  		rme96->areg &= ~RME96_AR_DAC_EN; @@ -2481,25 +2481,20 @@ snd_rme96_probe(struct pci_dev *pci,  	rme96 = card->private_data;  	rme96->card = card;  	rme96->pci = pci; -	if ((err = snd_rme96_create(rme96)) < 0) { -		snd_card_free(card); -		return err; -	} +	err = snd_rme96_create(rme96); +	if (err) +		goto free_card;  #ifdef CONFIG_PM_SLEEP  	rme96->playback_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);  	if (!rme96->playback_suspend_buffer) { -		dev_err(card->dev, -			   "Failed to allocate playback suspend buffer!\n"); -		snd_card_free(card); -		return -ENOMEM; +		err = -ENOMEM; +		goto free_card;  	}  	rme96->capture_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);  	if (!rme96->capture_suspend_buffer) { -		dev_err(card->dev, -			   "Failed to allocate capture suspend buffer!\n"); -		snd_card_free(card); -		return -ENOMEM; +		err = -ENOMEM; +		goto free_card;  	}  #endif @@ -2525,14 +2520,16 @@ snd_rme96_probe(struct pci_dev *pci,  	}  	sprintf(card->longname, "%s at 0x%lx, irq %d", card->shortname,  		rme96->port, rme96->irq); -	 -	if ((err = snd_card_register(card)) < 0) { -		snd_card_free(card); -		return err;	 -	} +	err = snd_card_register(card); +	if (err) +		goto free_card; +  	pci_set_drvdata(pci, card);  	dev++;  	return 0; +free_card: +	snd_card_free(card); +	return err;  }  static void snd_rme96_remove(struct pci_dev *pci) diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c index fe36d44d16c6..0ff41f9ab434 100644 --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c @@ -4211,7 +4211,7 @@ static int snd_hdsp_prepare(struct snd_pcm_substream *substream)  	return result;  } -static struct snd_pcm_hardware snd_hdsp_playback_subinfo = +static const struct snd_pcm_hardware snd_hdsp_playback_subinfo =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -4241,7 +4241,7 @@ static struct snd_pcm_hardware snd_hdsp_playback_subinfo =  	.fifo_size =		0  }; -static struct snd_pcm_hardware snd_hdsp_capture_subinfo = +static const struct snd_pcm_hardware snd_hdsp_capture_subinfo =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -5381,17 +5381,16 @@ static int snd_hdsp_probe(struct pci_dev *pci,  	card->private_free = snd_hdsp_card_free;  	hdsp->dev = dev;  	hdsp->pci = pci; - -	if ((err = snd_hdsp_create(card, hdsp)) < 0) { -		snd_card_free(card); -		return err; -	} +	err = snd_hdsp_create(card, hdsp); +	if (err) +		goto free_card;  	strcpy(card->shortname, "Hammerfall DSP");  	sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,  		hdsp->port, hdsp->irq); - -	if ((err = snd_card_register(card)) < 0) { +	err = snd_card_register(card); +	if (err) { +free_card:  		snd_card_free(card);  		return err;  	} diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index 254c3d040118..25284d8d9758 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c @@ -1521,7 +1521,7 @@ static void hdspm_silence_playback(struct hdspm *hdspm)  	int n = hdspm->period_bytes;  	void *buf = hdspm->playback_buffer; -	if (buf == NULL) +	if (!buf)  		return;  	for (i = 0; i < HDSPM_MAX_CHANNELS; i++) { @@ -2061,7 +2061,7 @@ static int snd_hdspm_create_midi(struct snd_card *card,  				 struct hdspm *hdspm, int id)  {  	int err; -	char buf[32]; +	char buf[64];  	hdspm->midi[id].id = id;  	hdspm->midi[id].hdspm = hdspm; @@ -2120,19 +2120,23 @@ static int snd_hdspm_create_midi(struct snd_card *card,  	if ((id < 2) || ((2 == id) && ((MADI == hdspm->io_type) ||  					(MADIface == hdspm->io_type)))) {  		if ((id == 0) && (MADIface == hdspm->io_type)) { -			sprintf(buf, "%s MIDIoverMADI", card->shortname); +			snprintf(buf, sizeof(buf), "%s MIDIoverMADI", +				 card->shortname);  		} else if ((id == 2) && (MADI == hdspm->io_type)) { -			sprintf(buf, "%s MIDIoverMADI", card->shortname); +			snprintf(buf, sizeof(buf), "%s MIDIoverMADI", +				 card->shortname);  		} else { -			sprintf(buf, "%s MIDI %d", card->shortname, id+1); +			snprintf(buf, sizeof(buf), "%s MIDI %d", +				 card->shortname, id+1);  		}  		err = snd_rawmidi_new(card, buf, id, 1, 1,  				&hdspm->midi[id].rmidi);  		if (err < 0)  			return err; -		sprintf(hdspm->midi[id].rmidi->name, "%s MIDI %d", -				card->id, id+1); +		snprintf(hdspm->midi[id].rmidi->name, +			 sizeof(hdspm->midi[id].rmidi->name), +			 "%s MIDI %d", card->id, id+1);  		hdspm->midi[id].rmidi->private_data = &hdspm->midi[id];  		snd_rawmidi_set_ops(hdspm->midi[id].rmidi, @@ -2148,14 +2152,16 @@ static int snd_hdspm_create_midi(struct snd_card *card,  			SNDRV_RAWMIDI_INFO_DUPLEX;  	} else {  		/* TCO MTC, read only */ -		sprintf(buf, "%s MTC %d", card->shortname, id+1); +		snprintf(buf, sizeof(buf), "%s MTC %d", +			 card->shortname, id+1);  		err = snd_rawmidi_new(card, buf, id, 1, 1,  				&hdspm->midi[id].rmidi);  		if (err < 0)  			return err; -		sprintf(hdspm->midi[id].rmidi->name, -				"%s MTC %d", card->id, id+1); +		snprintf(hdspm->midi[id].rmidi->name, +			 sizeof(hdspm->midi[id].rmidi->name), +			 "%s MTC %d", card->id, id+1);  		hdspm->midi[id].rmidi->private_data = &hdspm->midi[id];  		snd_rawmidi_set_ops(hdspm->midi[id].rmidi, @@ -4700,7 +4706,7 @@ static int snd_hdspm_create_controls(struct snd_card *card,  		break;  	} -	if (NULL != list) { +	if (list) {  		for (idx = 0; idx < limit; idx++) {  			err = snd_ctl_add(card,  					snd_ctl_new1(&list[idx], hdspm)); @@ -6063,13 +6069,13 @@ static int snd_hdspm_open(struct snd_pcm_substream *substream)  		snd_hdspm_capture_subinfo;  	if (playback) { -		if (hdspm->capture_substream == NULL) +		if (!hdspm->capture_substream)  			hdspm_stop_audio(hdspm);  		hdspm->playback_pid = current->pid;  		hdspm->playback_substream = substream;  	} else { -		if (hdspm->playback_substream == NULL) +		if (!hdspm->playback_substream)  			hdspm_stop_audio(hdspm);  		hdspm->capture_pid = current->pid; @@ -6215,7 +6221,7 @@ static int snd_hdspm_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,  		}  		levels->status2 = hdspm_read(hdspm, HDSPM_statusRegister2); -		s = copy_to_user(argp, levels, sizeof(struct hdspm_peak_rms)); +		s = copy_to_user(argp, levels, sizeof(*levels));  		if (0 != s) {  			/* dev_err(hdspm->card->dev, "copy_to_user(.., .., %lu): %lu  			 [Levels]\n", sizeof(struct hdspm_peak_rms), s); @@ -6260,7 +6266,7 @@ static int snd_hdspm_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,  			ltc.input_format = no_video;  		} -		s = copy_to_user(argp, <c, sizeof(struct hdspm_ltc)); +		s = copy_to_user(argp, <c, sizeof(ltc));  		if (0 != s) {  			/*  			  dev_err(hdspm->card->dev, "copy_to_user(.., .., %lu): %lu [LTC]\n", sizeof(struct hdspm_ltc), s); */ @@ -6351,7 +6357,7 @@ static int snd_hdspm_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,  		if (copy_from_user(&mixer, argp, sizeof(mixer)))  			return -EFAULT;  		if (copy_to_user((void __user *)mixer.mixer, hdspm->mixer, -					sizeof(struct hdspm_mixer))) +				 sizeof(*mixer.mixer)))  			return -EFAULT;  		break; @@ -6630,14 +6636,10 @@ static int snd_hdspm_create(struct snd_card *card,  	hdspm->irq = pci->irq;  	dev_dbg(card->dev, "kmalloc Mixer memory of %zd Bytes\n", -			sizeof(struct hdspm_mixer)); -	hdspm->mixer = kzalloc(sizeof(struct hdspm_mixer), GFP_KERNEL); -	if (!hdspm->mixer) { -		dev_err(card->dev, -			"unable to kmalloc Mixer memory of %d Bytes\n", -				(int)sizeof(struct hdspm_mixer)); +		sizeof(*hdspm->mixer)); +	hdspm->mixer = kzalloc(sizeof(*hdspm->mixer), GFP_KERNEL); +	if (!hdspm->mixer)  		return -ENOMEM; -	}  	hdspm->port_names_in = NULL;  	hdspm->port_names_out = NULL; @@ -6772,11 +6774,10 @@ static int snd_hdspm_create(struct snd_card *card,  		if (hdspm_read(hdspm, HDSPM_statusRegister2) &  				HDSPM_s2_tco_detect) {  			hdspm->midiPorts++; -			hdspm->tco = kzalloc(sizeof(struct hdspm_tco), -					GFP_KERNEL); -			if (NULL != hdspm->tco) { +			hdspm->tco = kzalloc(sizeof(*hdspm->tco), GFP_KERNEL); +			if (hdspm->tco)  				hdspm_tco_write(hdspm); -			} +  			dev_info(card->dev, "AIO/RayDAT TCO module found\n");  		} else {  			hdspm->tco = NULL; @@ -6787,11 +6788,10 @@ static int snd_hdspm_create(struct snd_card *card,  	case AES32:  		if (hdspm_read(hdspm, HDSPM_statusRegister) & HDSPM_tco_detect) {  			hdspm->midiPorts++; -			hdspm->tco = kzalloc(sizeof(struct hdspm_tco), -					GFP_KERNEL); -			if (NULL != hdspm->tco) { +			hdspm->tco = kzalloc(sizeof(*hdspm->tco), GFP_KERNEL); +			if (hdspm->tco)  				hdspm_tco_write(hdspm); -			} +  			dev_info(card->dev, "MADI/AES TCO module found\n");  		} else {  			hdspm->tco = NULL; @@ -6868,8 +6868,9 @@ static int snd_hdspm_create(struct snd_card *card,  		 * this case, we don't set card->id to avoid collisions  		 * when running with multiple cards.  		 */ -		if (NULL == id[hdspm->dev] && hdspm->serial != 0xFFFFFF) { -			sprintf(card->id, "HDSPMx%06x", hdspm->serial); +		if (!id[hdspm->dev] && hdspm->serial != 0xFFFFFF) { +			snprintf(card->id, sizeof(card->id), +				 "HDSPMx%06x", hdspm->serial);  			snd_card_set_id(card, card->id);  		}  	} @@ -6938,7 +6939,7 @@ static int snd_hdspm_probe(struct pci_dev *pci,  	}  	err = snd_card_new(&pci->dev, index[dev], id[dev], -			   THIS_MODULE, sizeof(struct hdspm), &card); +			   THIS_MODULE, sizeof(*hdspm), &card);  	if (err < 0)  		return err; @@ -6954,17 +6955,18 @@ static int snd_hdspm_probe(struct pci_dev *pci,  	}  	if (hdspm->io_type != MADIface) { -		sprintf(card->shortname, "%s_%x", -			hdspm->card_name, -			hdspm->serial); -		sprintf(card->longname, "%s S/N 0x%x at 0x%lx, irq %d", -			hdspm->card_name, -			hdspm->serial, -			hdspm->port, hdspm->irq); +		snprintf(card->shortname, sizeof(card->shortname), "%s_%x", +			hdspm->card_name, hdspm->serial); +		snprintf(card->longname, sizeof(card->longname), +			 "%s S/N 0x%x at 0x%lx, irq %d", +			 hdspm->card_name, hdspm->serial, +			 hdspm->port, hdspm->irq);  	} else { -		sprintf(card->shortname, "%s", hdspm->card_name); -		sprintf(card->longname, "%s at 0x%lx, irq %d", -				hdspm->card_name, hdspm->port, hdspm->irq); +		snprintf(card->shortname, sizeof(card->shortname), "%s", +			 hdspm->card_name); +		snprintf(card->longname, sizeof(card->longname), +			 "%s at 0x%lx, irq %d", +			 hdspm->card_name, hdspm->port, hdspm->irq);  	}  	err = snd_card_register(card); diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c index 150d08898db8..df648b1d9217 100644 --- a/sound/pci/rme9652/rme9652.c +++ b/sound/pci/rme9652/rme9652.c @@ -2181,7 +2181,7 @@ static int snd_rme9652_prepare(struct snd_pcm_substream *substream)  	return result;  } -static struct snd_pcm_hardware snd_rme9652_playback_subinfo = +static const struct snd_pcm_hardware snd_rme9652_playback_subinfo =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -2205,7 +2205,7 @@ static struct snd_pcm_hardware snd_rme9652_playback_subinfo =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_rme9652_capture_subinfo = +static const struct snd_pcm_hardware snd_rme9652_capture_subinfo =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -2618,19 +2618,17 @@ static int snd_rme9652_probe(struct pci_dev *pci,  	card->private_free = snd_rme9652_card_free;  	rme9652->dev = dev;  	rme9652->pci = pci; - -	if ((err = snd_rme9652_create(card, rme9652, precise_ptr[dev])) < 0) { -		snd_card_free(card); -		return err; -	} +	err = snd_rme9652_create(card, rme9652, precise_ptr[dev]); +	if (err) +		goto free_card;  	strcpy(card->shortname, rme9652->card_name);  	sprintf(card->longname, "%s at 0x%lx, irq %d",  		card->shortname, rme9652->port, rme9652->irq); - -	 -	if ((err = snd_card_register(card)) < 0) { +	err = snd_card_register(card); +	if (err) { +free_card:  		snd_card_free(card);  		return err;  	} diff --git a/sound/pci/sis7019.c b/sound/pci/sis7019.c index f3860b850210..964acf302479 100644 --- a/sound/pci/sis7019.c +++ b/sound/pci/sis7019.c @@ -159,7 +159,7 @@ struct sis7019 {   * We'll add a constraint upon open that limits the period and buffer sample   * size to values that are legal for the hardware.   */ -static struct snd_pcm_hardware sis_playback_hw_info = { +static const struct snd_pcm_hardware sis_playback_hw_info = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_MMAP_VALID |  		 SNDRV_PCM_INFO_INTERLEAVED | @@ -180,7 +180,7 @@ static struct snd_pcm_hardware sis_playback_hw_info = {  	.periods_max = (0xfff9 / 9),  }; -static struct snd_pcm_hardware sis_capture_hw_info = { +static const struct snd_pcm_hardware sis_capture_hw_info = {  	.info = (SNDRV_PCM_INFO_MMAP |  		 SNDRV_PCM_INFO_MMAP_VALID |  		 SNDRV_PCM_INFO_INTERLEAVED | @@ -872,7 +872,7 @@ static int sis_pcm_capture_prepare(struct snd_pcm_substream *substream)  	return 0;  } -static struct snd_pcm_ops sis_playback_ops = { +static const struct snd_pcm_ops sis_playback_ops = {  	.open = sis_playback_open,  	.close = sis_substream_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -883,7 +883,7 @@ static struct snd_pcm_ops sis_playback_ops = {  	.pointer = sis_pcm_pointer,  }; -static struct snd_pcm_ops sis_capture_ops = { +static const struct snd_pcm_ops sis_capture_ops = {  	.open = sis_capture_open,  	.close = sis_substream_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c index 784d762f18a7..a8abb15e3c3a 100644 --- a/sound/pci/sonicvibes.c +++ b/sound/pci/sonicvibes.c @@ -776,7 +776,7 @@ static snd_pcm_uframes_t snd_sonicvibes_capture_pointer(struct snd_pcm_substream  	return bytes_to_frames(substream->runtime, ptr);  } -static struct snd_pcm_hardware snd_sonicvibes_playback = +static const struct snd_pcm_hardware snd_sonicvibes_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -795,7 +795,7 @@ static struct snd_pcm_hardware snd_sonicvibes_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_sonicvibes_capture = +static const struct snd_pcm_hardware snd_sonicvibes_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c index 64d3b8eba4bb..eabd84d9ffee 100644 --- a/sound/pci/trident/trident_main.c +++ b/sound/pci/trident/trident_main.c @@ -1727,7 +1727,7 @@ static snd_pcm_uframes_t snd_trident_spdif_pointer(struct snd_pcm_substream *sub   *  Playback support device description   */ -static struct snd_pcm_hardware snd_trident_playback = +static const struct snd_pcm_hardware snd_trident_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1752,7 +1752,7 @@ static struct snd_pcm_hardware snd_trident_playback =   *  Capture support device description   */ -static struct snd_pcm_hardware snd_trident_capture = +static const struct snd_pcm_hardware snd_trident_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1777,7 +1777,7 @@ static struct snd_pcm_hardware snd_trident_capture =   *  Foldback capture support device description   */ -static struct snd_pcm_hardware snd_trident_foldback = +static const struct snd_pcm_hardware snd_trident_foldback =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1801,7 +1801,7 @@ static struct snd_pcm_hardware snd_trident_foldback =   *  SPDIF playback support device description   */ -static struct snd_pcm_hardware snd_trident_spdif = +static const struct snd_pcm_hardware snd_trident_spdif =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -1822,7 +1822,7 @@ static struct snd_pcm_hardware snd_trident_spdif =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_trident_spdif_7018 = +static const struct snd_pcm_hardware snd_trident_spdif_7018 =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -2093,7 +2093,7 @@ static const struct snd_pcm_ops snd_trident_nx_playback_ops = {  	.page =		snd_pcm_sgbuf_ops_page,  }; -static struct snd_pcm_ops snd_trident_capture_ops = { +static const struct snd_pcm_ops snd_trident_capture_ops = {  	.open =		snd_trident_capture_open,  	.close =	snd_trident_capture_close,  	.ioctl =	snd_trident_ioctl, @@ -2104,7 +2104,7 @@ static struct snd_pcm_ops snd_trident_capture_ops = {  	.pointer =	snd_trident_capture_pointer,  }; -static struct snd_pcm_ops snd_trident_si7018_capture_ops = { +static const struct snd_pcm_ops snd_trident_si7018_capture_ops = {  	.open =		snd_trident_capture_open,  	.close =	snd_trident_capture_close,  	.ioctl =	snd_trident_ioctl, @@ -3363,11 +3363,9 @@ static int snd_trident_tlb_alloc(struct snd_trident *trident)  	trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4);  	/* allocate shadow TLB page table (virtual addresses) */  	trident->tlb.shadow_entries = vmalloc(SNDRV_TRIDENT_MAX_PAGES*sizeof(unsigned long)); -	if (trident->tlb.shadow_entries == NULL) { -		dev_err(trident->card->dev, -			"unable to allocate shadow TLB entries\n"); +	if (!trident->tlb.shadow_entries)  		return -ENOMEM; -	} +  	/* allocate and setup silent page and initialise TLB entries */  	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci),  				SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) { diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index c767b8664359..3a1c0b8b4ea2 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c @@ -1150,7 +1150,7 @@ static int snd_via8233_capture_prepare(struct snd_pcm_substream *substream)  /*   * pcm hardware definition, identical for both playback and capture   */ -static struct snd_pcm_hardware snd_via82xx_hw = +static const struct snd_pcm_hardware snd_via82xx_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c index 55f79b2599e7..8a69221c1b86 100644 --- a/sound/pci/via82xx_modem.c +++ b/sound/pci/via82xx_modem.c @@ -714,7 +714,7 @@ static int snd_via82xx_pcm_prepare(struct snd_pcm_substream *substream)  /*   * pcm hardware definition, identical for both playback and capture   */ -static struct snd_pcm_hardware snd_via82xx_hw = +static const struct snd_pcm_hardware snd_via82xx_hw =  {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_BLOCK_TRANSFER | diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c index 1114166c685c..edfd58248082 100644 --- a/sound/pci/ymfpci/ymfpci_main.c +++ b/sound/pci/ymfpci/ymfpci_main.c @@ -845,7 +845,7 @@ static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static struct snd_pcm_hardware snd_ymfpci_playback = +static const struct snd_pcm_hardware snd_ymfpci_playback =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID |  @@ -867,7 +867,7 @@ static struct snd_pcm_hardware snd_ymfpci_playback =  	.fifo_size =		0,  }; -static struct snd_pcm_hardware snd_ymfpci_capture = +static const struct snd_pcm_hardware snd_ymfpci_capture =  {  	.info =			(SNDRV_PCM_INFO_MMAP |  				 SNDRV_PCM_INFO_MMAP_VALID | diff --git a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c index b48aa0a78c19..4a2354b5ae00 100644 --- a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c +++ b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c @@ -193,7 +193,7 @@ static int pdacf_pcm_prepare(struct snd_pcm_substream *subs)   * capture hw information   */ -static struct snd_pcm_hardware pdacf_pcm_capture_hw = { +static const struct snd_pcm_hardware pdacf_pcm_capture_hw = {  	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME |  				 SNDRV_PCM_INFO_MMAP_VALID | @@ -266,7 +266,7 @@ static snd_pcm_uframes_t pdacf_pcm_capture_pointer(struct snd_pcm_substream *sub  /*   * operators for PCM capture   */ -static struct snd_pcm_ops pdacf_pcm_capture_ops = { +static const struct snd_pcm_ops pdacf_pcm_capture_ops = {  	.open =		pdacf_pcm_capture_open,  	.close =	pdacf_pcm_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c index a5843fc5ff20..48dd44f8e914 100644 --- a/sound/ppc/pmac.c +++ b/sound/ppc/pmac.c @@ -509,7 +509,7 @@ static void snd_pmac_pcm_update(struct snd_pmac *chip, struct pmac_stream *rec)   * hw info   */ -static struct snd_pcm_hardware snd_pmac_playback = +static const struct snd_pcm_hardware snd_pmac_playback =  {  	.info =			(SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP | @@ -528,7 +528,7 @@ static struct snd_pcm_hardware snd_pmac_playback =  	.periods_max =		PMAC_MAX_FRAGS,  }; -static struct snd_pcm_hardware snd_pmac_capture = +static const struct snd_pcm_hardware snd_pmac_capture =  {  	.info =			(SNDRV_PCM_INFO_INTERLEAVED |  				 SNDRV_PCM_INFO_MMAP | @@ -681,7 +681,7 @@ static int snd_pmac_capture_close(struct snd_pcm_substream *subs)  /*   */ -static struct snd_pcm_ops snd_pmac_playback_ops = { +static const struct snd_pcm_ops snd_pmac_playback_ops = {  	.open =		snd_pmac_playback_open,  	.close =	snd_pmac_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -692,7 +692,7 @@ static struct snd_pcm_ops snd_pmac_playback_ops = {  	.pointer =	snd_pmac_playback_pointer,  }; -static struct snd_pcm_ops snd_pmac_capture_ops = { +static const struct snd_pcm_ops snd_pmac_capture_ops = {  	.open =		snd_pmac_capture_open,  	.close =	snd_pmac_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/ppc/snd_ps3.c b/sound/ppc/snd_ps3.c index cdd44abfc9e0..36f34f434ecb 100644 --- a/sound/ppc/snd_ps3.c +++ b/sound/ppc/snd_ps3.c @@ -772,7 +772,7 @@ static struct snd_kcontrol_new spdif_ctls[] = {  	},  }; -static struct snd_pcm_ops snd_ps3_pcm_spdif_ops = { +static const struct snd_pcm_ops snd_ps3_pcm_spdif_ops = {  	.open = snd_ps3_pcm_open,  	.close = snd_ps3_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/sh/aica.c b/sound/sh/aica.c index ab4802df62e1..fdc680ae8aa0 100644 --- a/sound/sh/aica.c +++ b/sound/sh/aica.c @@ -211,7 +211,7 @@ static void aica_chn_halt(void)  }  /* ALSA code below */ -static struct snd_pcm_hardware snd_pcm_aica_playback_hw = { +static const struct snd_pcm_hardware snd_pcm_aica_playback_hw = {  	.info = (SNDRV_PCM_INFO_NONINTERLEAVED),  	.formats =  	    (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE | @@ -436,7 +436,7 @@ static unsigned long snd_aicapcm_pcm_pointer(struct snd_pcm_substream  	return readl(AICA_CONTROL_CHANNEL_SAMPLE_NUMBER);  } -static struct snd_pcm_ops snd_aicapcm_playback_ops = { +static const struct snd_pcm_ops snd_aicapcm_playback_ops = {  	.open = snd_aicapcm_pcm_open,  	.close = snd_aicapcm_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/sh/sh_dac_audio.c b/sound/sh/sh_dac_audio.c index c1e00ed715ee..834b2574786f 100644 --- a/sound/sh/sh_dac_audio.c +++ b/sound/sh/sh_dac_audio.c @@ -93,7 +93,7 @@ static void dac_audio_set_rate(struct snd_sh_dac *chip)  /* PCM INTERFACE */ -static struct snd_pcm_hardware snd_sh_dac_pcm_hw = { +static const struct snd_pcm_hardware snd_sh_dac_pcm_hw = {  	.info			= (SNDRV_PCM_INFO_MMAP |  					SNDRV_PCM_INFO_MMAP_VALID |  					SNDRV_PCM_INFO_INTERLEAVED | @@ -252,7 +252,7 @@ snd_pcm_uframes_t snd_sh_dac_pcm_pointer(struct snd_pcm_substream *substream)  }  /* pcm ops */ -static struct snd_pcm_ops snd_sh_dac_pcm_ops = { +static const struct snd_pcm_ops snd_sh_dac_pcm_ops = {  	.open		= snd_sh_dac_pcm_open,  	.close		= snd_sh_dac_pcm_close,  	.ioctl		= snd_pcm_lib_ioctl, @@ -424,7 +424,7 @@ static int snd_sh_dac_probe(struct platform_device *devptr)  	if (err < 0)  		goto probe_error; -	snd_printk("ALSA driver for SuperH DAC audio"); +	snd_printk(KERN_INFO "ALSA driver for SuperH DAC audio");  	platform_set_drvdata(devptr, card);  	return 0; diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 13c875e2392a..62c11e26ce5c 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -653,9 +653,7 @@ int snd_soc_suspend(struct device *dev)  	/* Due to the resume being scheduled into a workqueue we could  	* suspend before that's finished - wait for it to complete.  	 */ -	snd_power_lock(card->snd_card);  	snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0); -	snd_power_unlock(card->snd_card);  	/* we're going to block userspace touching us until resume completes */  	snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot); diff --git a/sound/sparc/amd7930.c b/sound/sparc/amd7930.c index 35c1f6ae773f..56f17410fcea 100644 --- a/sound/sparc/amd7930.c +++ b/sound/sparc/amd7930.c @@ -666,7 +666,7 @@ static snd_pcm_uframes_t snd_amd7930_capture_pointer(struct snd_pcm_substream *s  }  /* Playback and capture have identical properties.  */ -static struct snd_pcm_hardware snd_amd7930_pcm_hw = +static const struct snd_pcm_hardware snd_amd7930_pcm_hw =  {  	.info			= (SNDRV_PCM_INFO_MMAP |  				   SNDRV_PCM_INFO_MMAP_VALID | @@ -733,7 +733,7 @@ static int snd_amd7930_hw_free(struct snd_pcm_substream *substream)  	return snd_pcm_lib_free_pages(substream);  } -static struct snd_pcm_ops snd_amd7930_playback_ops = { +static const struct snd_pcm_ops snd_amd7930_playback_ops = {  	.open		=	snd_amd7930_playback_open,  	.close		=	snd_amd7930_playback_close,  	.ioctl		=	snd_pcm_lib_ioctl, @@ -744,7 +744,7 @@ static struct snd_pcm_ops snd_amd7930_playback_ops = {  	.pointer	=	snd_amd7930_playback_pointer,  }; -static struct snd_pcm_ops snd_amd7930_capture_ops = { +static const struct snd_pcm_ops snd_amd7930_capture_ops = {  	.open		=	snd_amd7930_capture_open,  	.close		=	snd_amd7930_capture_close,  	.ioctl		=	snd_pcm_lib_ioctl, diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c index 3d7d425fbd24..e73c962590eb 100644 --- a/sound/sparc/cs4231.c +++ b/sound/sparc/cs4231.c @@ -1089,7 +1089,7 @@ static int snd_cs4231_probe(struct snd_cs4231 *chip)  	return 0;		/* all things are ok.. */  } -static struct snd_pcm_hardware snd_cs4231_playback = { +static const struct snd_pcm_hardware snd_cs4231_playback = {  	.info			= SNDRV_PCM_INFO_MMAP |  				  SNDRV_PCM_INFO_INTERLEAVED |  				  SNDRV_PCM_INFO_MMAP_VALID | @@ -1113,7 +1113,7 @@ static struct snd_pcm_hardware snd_cs4231_playback = {  	.periods_max		= 1024,  }; -static struct snd_pcm_hardware snd_cs4231_capture = { +static const struct snd_pcm_hardware snd_cs4231_capture = {  	.info			= SNDRV_PCM_INFO_MMAP |  				  SNDRV_PCM_INFO_INTERLEAVED |  				  SNDRV_PCM_INFO_MMAP_VALID | @@ -1203,7 +1203,7 @@ static int snd_cs4231_capture_close(struct snd_pcm_substream *substream)   * XXX the audio AUXIO register...   */ -static struct snd_pcm_ops snd_cs4231_playback_ops = { +static const struct snd_pcm_ops snd_cs4231_playback_ops = {  	.open		=	snd_cs4231_playback_open,  	.close		=	snd_cs4231_playback_close,  	.ioctl		=	snd_pcm_lib_ioctl, @@ -1214,7 +1214,7 @@ static struct snd_pcm_ops snd_cs4231_playback_ops = {  	.pointer	=	snd_cs4231_playback_pointer,  }; -static struct snd_pcm_ops snd_cs4231_capture_ops = { +static const struct snd_pcm_ops snd_cs4231_capture_ops = {  	.open		=	snd_cs4231_capture_open,  	.close		=	snd_cs4231_capture_close,  	.ioctl		=	snd_pcm_lib_ioctl, diff --git a/sound/sparc/dbri.c b/sound/sparc/dbri.c index 52063b262667..abc7bd5055eb 100644 --- a/sound/sparc/dbri.c +++ b/sound/sparc/dbri.c @@ -1980,7 +1980,7 @@ static irqreturn_t snd_dbri_interrupt(int irq, void *dev_id)  /****************************************************************************  		PCM Interface  ****************************************************************************/ -static struct snd_pcm_hardware snd_dbri_pcm_hw = { +static const struct snd_pcm_hardware snd_dbri_pcm_hw = {  	.info		= SNDRV_PCM_INFO_MMAP |  			  SNDRV_PCM_INFO_INTERLEAVED |  			  SNDRV_PCM_INFO_BLOCK_TRANSFER | @@ -2213,7 +2213,7 @@ static snd_pcm_uframes_t snd_dbri_pointer(struct snd_pcm_substream *substream)  	return ret;  } -static struct snd_pcm_ops snd_dbri_ops = { +static const struct snd_pcm_ops snd_dbri_ops = {  	.open = snd_dbri_open,  	.close = snd_dbri_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index fac7e6eb9529..1ef52edeb538 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c @@ -322,7 +322,7 @@ snd_at73c213_pcm_pointer(struct snd_pcm_substream *substream)  	return pos;  } -static struct snd_pcm_ops at73c213_playback_ops = { +static const struct snd_pcm_ops at73c213_playback_ops = {  	.open		= snd_at73c213_pcm_open,  	.close		= snd_at73c213_pcm_close,  	.ioctl		= snd_pcm_lib_ioctl, diff --git a/sound/synth/emux/emux_seq.c b/sound/synth/emux/emux_seq.c index 55579f6b8cb2..396c406d0f77 100644 --- a/sound/synth/emux/emux_seq.c +++ b/sound/synth/emux/emux_seq.c @@ -99,7 +99,7 @@ snd_emux_init_seq(struct snd_emux *emu, struct snd_card *card, int index)  		sprintf(tmpname, "%s Port %d", emu->name, i);  		p = snd_emux_create_port(emu, tmpname, MIDI_CHANNELS,  					 0, &pinfo); -		if (p == NULL) { +		if (!p) {  			snd_printk(KERN_ERR "can't create port\n");  			return -ENOMEM;  		} @@ -144,13 +144,13 @@ snd_emux_create_port(struct snd_emux *emu, char *name,  	int i, type, cap;  	/* Allocate structures for this channel */ -	if ((p = kzalloc(sizeof(*p), GFP_KERNEL)) == NULL) { -		snd_printk(KERN_ERR "no memory\n"); +	p = kzalloc(sizeof(*p), GFP_KERNEL); +	if (!p)  		return NULL; -	} -	p->chset.channels = kcalloc(max_channels, sizeof(struct snd_midi_channel), GFP_KERNEL); -	if (p->chset.channels == NULL) { -		snd_printk(KERN_ERR "no memory\n"); + +	p->chset.channels = kcalloc(max_channels, sizeof(*p->chset.channels), +				    GFP_KERNEL); +	if (!p->chset.channels) {  		kfree(p);  		return NULL;  	} @@ -370,8 +370,8 @@ int snd_emux_init_virmidi(struct snd_emux *emu, struct snd_card *card)  	if (emu->midi_ports <= 0)  		return 0; -	emu->vmidi = kcalloc(emu->midi_ports, sizeof(struct snd_rawmidi *), GFP_KERNEL); -	if (emu->vmidi == NULL) +	emu->vmidi = kcalloc(emu->midi_ports, sizeof(*emu->vmidi), GFP_KERNEL); +	if (!emu->vmidi)  		return -ENOMEM;  	for (i = 0; i < emu->midi_ports; i++) { @@ -403,7 +403,7 @@ int snd_emux_delete_virmidi(struct snd_emux *emu)  {  	int i; -	if (emu->vmidi == NULL) +	if (!emu->vmidi)  		return 0;  	for (i = 0; i < emu->midi_ports; i++) { diff --git a/sound/usb/6fire/chip.c b/sound/usb/6fire/chip.c index dcddfc354ba6..bc2a24f7a791 100644 --- a/sound/usb/6fire/chip.c +++ b/sound/usb/6fire/chip.c @@ -198,7 +198,7 @@ static void usb6fire_chip_disconnect(struct usb_interface *intf)  	}  } -static struct usb_device_id device_table[] = { +static const struct usb_device_id device_table[] = {  	{  		.match_flags = USB_DEVICE_ID_MATCH_DEVICE,  		.idVendor = 0x0ccd, diff --git a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c index 36f4115eb1cd..224a6a5d1c0e 100644 --- a/sound/usb/6fire/pcm.c +++ b/sound/usb/6fire/pcm.c @@ -555,7 +555,7 @@ static snd_pcm_uframes_t usb6fire_pcm_pointer(  	return ret;  } -static struct snd_pcm_ops pcm_ops = { +static const struct snd_pcm_ops pcm_ops = {  	.open = usb6fire_pcm_open,  	.close = usb6fire_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/usb/bcd2000/bcd2000.c b/sound/usb/bcd2000/bcd2000.c index 2ff9d578753a..7371e5b06035 100644 --- a/sound/usb/bcd2000/bcd2000.c +++ b/sound/usb/bcd2000/bcd2000.c @@ -29,7 +29,7 @@  #define PREFIX "snd-bcd2000: "  #define BUFSIZE 64 -static struct usb_device_id id_table[] = { +static const struct usb_device_id id_table[] = {  	{ USB_DEVICE(0x1397, 0x00bd) },  	{ },  }; diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index 8f66ba730d69..fb1c1eac0b5e 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c @@ -338,7 +338,7 @@ unlock:  }  /* operators for both playback and capture */ -static struct snd_pcm_ops snd_usb_caiaq_ops = { +static const struct snd_pcm_ops snd_usb_caiaq_ops = {  	.open =		snd_usb_caiaq_substream_open,  	.close =	snd_usb_caiaq_substream_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -722,7 +722,6 @@ static struct urb **alloc_urbs(struct snd_usb_caiaqdev *cdev, int dir, int *ret)  	int i, frame;  	struct urb **urbs;  	struct usb_device *usb_dev = cdev->chip.dev; -	struct device *dev = caiaqdev_to_dev(cdev);  	unsigned int pipe;  	pipe = (dir == SNDRV_PCM_STREAM_PLAYBACK) ? @@ -731,7 +730,6 @@ static struct urb **alloc_urbs(struct snd_usb_caiaqdev *cdev, int dir, int *ret)  	urbs = kmalloc(N_URBS * sizeof(*urbs), GFP_KERNEL);  	if (!urbs) { -		dev_err(dev, "unable to kmalloc() urbs, OOM!?\n");  		*ret = -ENOMEM;  		return NULL;  	} @@ -746,7 +744,6 @@ static struct urb **alloc_urbs(struct snd_usb_caiaqdev *cdev, int dir, int *ret)  		urbs[i]->transfer_buffer =  			kmalloc(FRAMES_PER_URB * BYTES_PER_FRAME, GFP_KERNEL);  		if (!urbs[i]->transfer_buffer) { -			dev_err(dev, "unable to kmalloc() transfer buffer, OOM!?\n");  			*ret = -ENOMEM;  			return urbs;  		} diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c index b871ba407e4e..0fb6b1b79261 100644 --- a/sound/usb/caiaq/device.c +++ b/sound/usb/caiaq/device.c @@ -81,7 +81,7 @@ enum {  	DEPTH_32	= 3  }; -static struct usb_device_id snd_usb_id_table[] = { +static const struct usb_device_id snd_usb_id_table[] = {  	{  		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,  		.idVendor =	USB_VID_NATIVEINSTRUMENTS, diff --git a/sound/usb/card.c b/sound/usb/card.c index 6640277a725b..3dc36d913550 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -486,7 +486,7 @@ static bool get_alias_id(struct usb_device *dev, unsigned int *id)  	return false;  } -static struct usb_device_id usb_audio_ids[]; /* defined below */ +static const struct usb_device_id usb_audio_ids[]; /* defined below */  /* look for the corresponding quirk */  static const struct snd_usb_audio_quirk * @@ -814,7 +814,7 @@ static int usb_audio_reset_resume(struct usb_interface *intf)  #define usb_audio_reset_resume	NULL  #endif		/* CONFIG_PM */ -static struct usb_device_id usb_audio_ids [] = { +static const struct usb_device_id usb_audio_ids [] = {  #include "quirks-table.h"      { .match_flags = (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS),        .bInterfaceClass = USB_CLASS_AUDIO, diff --git a/sound/usb/hiface/pcm.c b/sound/usb/hiface/pcm.c index 33db205dd12b..175d8d6b7f59 100644 --- a/sound/usb/hiface/pcm.c +++ b/sound/usb/hiface/pcm.c @@ -513,7 +513,7 @@ static snd_pcm_uframes_t hiface_pcm_pointer(struct snd_pcm_substream *alsa_sub)  	return bytes_to_frames(alsa_sub->runtime, dma_offset);  } -static struct snd_pcm_ops pcm_ops = { +static const struct snd_pcm_ops pcm_ops = {  	.open = hiface_pcm_open,  	.close = hiface_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, diff --git a/sound/usb/midi.c b/sound/usb/midi.c index a35f41467237..a92e2b2a91ec 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -242,8 +242,8 @@ static void dump_urb(const char *type, const u8 *data, int length)  {  	snd_printk(KERN_DEBUG "%s packet: [", type);  	for (; length > 0; ++data, --length) -		printk(" %02x", *data); -	printk(" ]\n"); +		printk(KERN_CONT " %02x", *data); +	printk(KERN_CONT " ]\n");  }  #else  #define dump_urb(type, data, length) /* nothing */ @@ -2435,10 +2435,8 @@ int __snd_usbmidi_create(struct snd_card *card,  		err = -ENXIO;  		break;  	} -	if (err < 0) { -		kfree(umidi); -		return err; -	} +	if (err < 0) +		goto free_midi;  	/* create rawmidi device */  	out_ports = 0; @@ -2448,23 +2446,25 @@ int __snd_usbmidi_create(struct snd_card *card,  		in_ports += hweight16(endpoints[i].in_cables);  	}  	err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports); -	if (err < 0) { -		kfree(umidi); -		return err; -	} +	if (err < 0) +		goto free_midi;  	/* create endpoint/port structures */  	if (quirk && quirk->type == QUIRK_MIDI_MIDIMAN)  		err = snd_usbmidi_create_endpoints_midiman(umidi, &endpoints[0]);  	else  		err = snd_usbmidi_create_endpoints(umidi, endpoints); -	if (err < 0) { -		return err; -	} +	if (err < 0) +		goto exit;  	usb_autopm_get_interface_no_resume(umidi->iface);  	list_add_tail(&umidi->list, midi_list);  	return 0; + +free_midi: +	kfree(umidi); +exit: +	return err;  }  EXPORT_SYMBOL(__snd_usbmidi_create); diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c index c19a5dd05631..386fbfd5c617 100644 --- a/sound/usb/misc/ua101.c +++ b/sound/usb/misc/ua101.c @@ -890,7 +890,7 @@ static snd_pcm_uframes_t playback_pcm_pointer(struct snd_pcm_substream *subs)  	return ua101_pcm_pointer(ua, &ua->playback);  } -static struct snd_pcm_ops capture_pcm_ops = { +static const struct snd_pcm_ops capture_pcm_ops = {  	.open = capture_pcm_open,  	.close = capture_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -903,7 +903,7 @@ static struct snd_pcm_ops capture_pcm_ops = {  	.mmap = snd_pcm_lib_mmap_vmalloc,  }; -static struct snd_pcm_ops playback_pcm_ops = { +static const struct snd_pcm_ops playback_pcm_ops = {  	.open = playback_pcm_open,  	.close = playback_pcm_close,  	.ioctl = snd_pcm_lib_ioctl, @@ -1366,7 +1366,7 @@ static void ua101_disconnect(struct usb_interface *interface)  	mutex_unlock(&devices_mutex);  } -static struct usb_device_id ua101_ids[] = { +static const struct usb_device_id ua101_ids[] = {  	{ USB_DEVICE(0x0582, 0x0044) }, /* UA-1000 high speed */  	{ USB_DEVICE(0x0582, 0x007d) }, /* UA-101 high speed */  	{ USB_DEVICE(0x0582, 0x008d) }, /* UA-101 full speed */ diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index e630813c5008..9732edf77f86 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -318,12 +318,15 @@ static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request,  	while (timeout-- > 0) {  		idx = snd_usb_ctrl_intf(chip) | (cval->head.id << 8); -		if (snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request, -				    USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, -				    validx, idx, buf, val_len) >= val_len) { +		err = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request, +				      USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, +				      validx, idx, buf, val_len); +		if (err >= val_len) {  			*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len));  			err = 0;  			goto out; +		} else if (err == -ETIMEDOUT) { +			goto out;  		}  	}  	usb_audio_dbg(chip, @@ -483,12 +486,15 @@ int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval,  	while (timeout-- > 0) {  		idx = snd_usb_ctrl_intf(chip) | (cval->head.id << 8); -		if (snd_usb_ctl_msg(chip->dev, -				    usb_sndctrlpipe(chip->dev, 0), request, -				    USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, -				    validx, idx, buf, val_len) >= 0) { +		err = snd_usb_ctl_msg(chip->dev, +				      usb_sndctrlpipe(chip->dev, 0), request, +				      USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, +				      validx, idx, buf, val_len); +		if (err >= 0) {  			err = 0;  			goto out; +		} else if (err == -ETIMEDOUT) { +			goto out;  		}  	}  	usb_audio_dbg(chip, "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n", diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index 9aa5b1855481..b9c9a19f9588 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -857,7 +857,7 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)  	return ret;  } -static struct snd_pcm_hardware snd_usb_hardware = +static const struct snd_pcm_hardware snd_usb_hardware =  {  	.info =			SNDRV_PCM_INFO_MMAP |  				SNDRV_PCM_INFO_MMAP_VALID | @@ -1690,7 +1690,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream  	return -EINVAL;  } -static struct snd_pcm_ops snd_usb_playback_ops = { +static const struct snd_pcm_ops snd_usb_playback_ops = {  	.open =		snd_usb_playback_open,  	.close =	snd_usb_playback_close,  	.ioctl =	snd_pcm_lib_ioctl, @@ -1703,7 +1703,7 @@ static struct snd_pcm_ops snd_usb_playback_ops = {  	.mmap =		snd_pcm_lib_mmap_vmalloc,  }; -static struct snd_pcm_ops snd_usb_capture_ops = { +static const struct snd_pcm_ops snd_usb_capture_ops = {  	.open =		snd_usb_capture_open,  	.close =	snd_usb_capture_close,  	.ioctl =	snd_pcm_lib_ioctl, diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 5d2a63248b1d..913552078285 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -146,10 +146,9 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip,  	unsigned *rate_table = NULL;  	fp = kmemdup(quirk->data, sizeof(*fp), GFP_KERNEL); -	if (!fp) { -		usb_audio_err(chip, "cannot memdup\n"); +	if (!fp)  		return -ENOMEM; -	} +  	INIT_LIST_HEAD(&fp->list);  	if (fp->nr_rates > MAX_NR_RATES) {  		kfree(fp); diff --git a/sound/usb/stream.c b/sound/usb/stream.c index 8e9548bc1f1a..d1776e5517ff 100644 --- a/sound/usb/stream.c +++ b/sound/usb/stream.c @@ -658,10 +658,8 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)  			continue;  		fp = kzalloc(sizeof(*fp), GFP_KERNEL); -		if (! fp) { -			dev_err(&dev->dev, "cannot malloc\n"); +		if (!fp)  			return -ENOMEM; -		}  		fp->iface = iface_no;  		fp->altsetting = altno; diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c index a33e31b2fc2f..b49d6e953d52 100644 --- a/sound/usb/usx2y/us122l.c +++ b/sound/usb/usx2y/us122l.c @@ -736,7 +736,7 @@ unlock:  	return err;  } -static struct usb_device_id snd_us122l_usb_id_table[] = { +static const struct usb_device_id snd_us122l_usb_id_table[] = {  	{  		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,  		.idVendor =	0x0644, diff --git a/sound/usb/usx2y/usb_stream.c b/sound/usb/usx2y/usb_stream.c index bf618e1500ac..fe926cb9192e 100644 --- a/sound/usb/usx2y/usb_stream.c +++ b/sound/usb/usx2y/usb_stream.c @@ -625,9 +625,9 @@ static void i_capture_start(struct urb *urb)  		       urb->iso_frame_desc[0].actual_length);  		for (pack = 1; pack < urb->number_of_packets; ++pack) {  			int l = urb->iso_frame_desc[pack].actual_length; -			printk(" %i", l); +			printk(KERN_CONT " %i", l);  		} -		printk("\n"); +		printk(KERN_CONT "\n");  	}  #endif  	if (!empty && s->state < usb_stream_sync1) diff --git a/sound/usb/usx2y/usbusx2y.c b/sound/usb/usx2y/usbusx2y.c index 91e0e2a4808c..4569c0efac0a 100644 --- a/sound/usb/usx2y/usbusx2y.c +++ b/sound/usb/usx2y/usbusx2y.c @@ -313,7 +313,7 @@ static void usX2Y_unlinkSeq(struct snd_usX2Y_AsyncSeq *S)  } -static struct usb_device_id snd_usX2Y_usb_id_table[] = { +static const struct usb_device_id snd_usX2Y_usb_id_table[] = {  	{  		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,  		.idVendor =	0x1604, diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c index dd40ca9d858a..f93b355756e6 100644 --- a/sound/usb/usx2y/usbusx2yaudio.c +++ b/sound/usb/usx2y/usbusx2yaudio.c @@ -419,10 +419,8 @@ static int usX2Y_urbs_allocate(struct snd_usX2Y_substream *subs)  	if (is_playback && NULL == subs->tmpbuf) {	/* allocate a temporary buffer for playback */  		subs->tmpbuf = kcalloc(nr_of_packs(), subs->maxpacksize, GFP_KERNEL); -		if (NULL == subs->tmpbuf) { -			snd_printk(KERN_ERR "cannot malloc tmpbuf\n"); +		if (!subs->tmpbuf)  			return -ENOMEM; -		}  	}  	/* allocate and initialize data urbs */  	for (i = 0; i < NRURBS; i++) { @@ -907,7 +905,7 @@ static int snd_usX2Y_pcm_close(struct snd_pcm_substream *substream)  } -static struct snd_pcm_ops snd_usX2Y_pcm_ops =  +static const struct snd_pcm_ops snd_usX2Y_pcm_ops =  {  	.open =		snd_usX2Y_pcm_open,  	.close =	snd_usX2Y_pcm_close, @@ -949,10 +947,9 @@ static int usX2Y_audio_stream_new(struct snd_card *card, int playback_endpoint,  	for (i = playback_endpoint ? SNDRV_PCM_STREAM_PLAYBACK : SNDRV_PCM_STREAM_CAPTURE;  	     i <= SNDRV_PCM_STREAM_CAPTURE; ++i) {  		usX2Y_substream[i] = kzalloc(sizeof(struct snd_usX2Y_substream), GFP_KERNEL); -		if (NULL == usX2Y_substream[i]) { -			snd_printk(KERN_ERR "cannot malloc\n"); +		if (!usX2Y_substream[i])  			return -ENOMEM; -		} +  		usX2Y_substream[i]->usX2Y = usX2Y(card);  	} diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c index d51c7fd7835b..0d050528a4e1 100644 --- a/sound/usb/usx2y/usx2yhwdeppcm.c +++ b/sound/usb/usx2y/usx2yhwdeppcm.c @@ -587,7 +587,7 @@ static int snd_usX2Y_usbpcm_close(struct snd_pcm_substream *substream)  } -static struct snd_pcm_ops snd_usX2Y_usbpcm_ops =  +static const struct snd_pcm_ops snd_usX2Y_usbpcm_ops =  {  	.open =		snd_usX2Y_usbpcm_open,  	.close =	snd_usX2Y_usbpcm_close,  |