[alsa-devel] [Pull request] Support for wm9705 codec and two machines that use it.

Takashi Iwai tiwai at suse.de
Fri Jan 16 12:03:37 CET 2009


At Thu, 15 Jan 2009 10:06:53 +0000,
Ian Molton wrote:
> 
> +static unsigned int ac97_read(struct snd_soc_codec *codec, unsigned int 
> reg)
> +{
> +	u16 *cache = codec->reg_cache;
> +
> +	switch (reg) {
> +	case AC97_RESET:
> +	case AC97_VENDOR_ID1:
> +	case AC97_VENDOR_ID2:
> +		return soc_ac97_ops.read(codec->ac97, reg);
> +	default:
> +		reg = reg >> 1;
> +
> +		if (reg > (ARRAY_SIZE(wm9705_reg)))
> +			return -EIO;

Shouldn't be this "reg >= ARRAY_SIZE(wm9705_reg)" ?

> +static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
> +	unsigned int val)
> +{
> +	u16 *cache = codec->reg_cache;
> +
> +	soc_ac97_ops.write(codec->ac97, reg, val);
> +	reg = reg >> 1;
> +	if (reg <= (ARRAY_SIZE(wm9705_reg)))
> +		cache[reg] = val;

Ditto, should be "reg < ARRAY_SIZE(wm9705_reg)".

> +static int wm9705_soc_probe(struct platform_device *pdev)
> +{
> +	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
> +	struct snd_soc_codec *codec;
> +	int ret = 0;
> +
> +	printk(KERN_INFO "WM9705 SoC Audio Codec\n");
> +
> +	socdev->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
> +	if (socdev->codec == NULL)
> +		return -ENOMEM;
> +	codec = socdev->codec;
> +	mutex_init(&codec->mutex);
> +
> +	codec->reg_cache =
> +		kzalloc(sizeof(u16) * ARRAY_SIZE(wm9705_reg), GFP_KERNEL);
> +	if (codec->reg_cache == NULL) {
> +		ret = -ENOMEM;
> +		goto cache_err;
> +	}
> +	memcpy(codec->reg_cache, wm9705_reg,
> +		sizeof(u16) * ARRAY_SIZE(wm9705_reg));

You can use kmemdup() here.


thanks,

Takashi


More information about the Alsa-devel mailing list