[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