All of lore.kernel.org
 help / color / mirror / Atom feed
From: jakob.viketoft@bitsim.com (Jakob Viketoft)
To: linux-arm-kernel@lists.infradead.org
Subject: AC97 problems with pxa...
Date: Wed, 07 Apr 2010 11:13:59 +0200	[thread overview]
Message-ID: <4BBC4CD7.7010606@bitsim.com> (raw)
In-Reply-To: <p2nf17812d71004061909qb3c18439gf38073e39f1b4035@mail.gmail.com>

I'm including the source code for the machine driver inline here, but 
not as a patch as it's not in patch state yet. It's really quite basic. 
Adding a printk (with KERN_ERR) in the colibri270_v2_ac97_init function 
doesn't show up in dmesg and that makes me believe it's never entered. 
The snd_soc_dapm_nc_pin calls doesn't seem to have an effect either...

Regards,

	/Jakob

-----------

/*
  * SoC audio driver for Toradex Colibri 270 v2
  *
  * Copyright 2010 BitSim AB
  *
  * Author: Jakob Viketoft <javi@bitsim.com>
  *
  * Copied from tosa.c:
  * Copyright 2005 Wolfson Microelectronics PLC.
  * Copyright 2005 Openedhand Ltd.
  *
  * Authors: Liam Girdwood <lrg@slimlogic.co.uk>
  *          Richard Purdie <richard@openedhand.com>
  *
  *  This program is free software; you can redistribute  it and/or 
modify it
  *  under  the terms of  the GNU General  Public License as published 
by the
  *  Free Software Foundation;  either version 2 of the  License, or (at 
your
  *  option) any later version.
  *
  */

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/device.h>
#include <linux/gpio.h>

#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>

#include <asm/mach-types.h>
#include <mach/audio.h>

#include "../codecs/wm9712.h"
#include "pxa2xx-pcm.h"
#include "pxa2xx-ac97.h"

static struct snd_soc_card colibri270_v2;

static int colibri270_v2_ac97_init(struct snd_soc_codec *codec)
{
	/* Unused inputs */
	snd_soc_dapm_nc_pin(codec, "MIC2");
	snd_soc_dapm_nc_pin(codec, "PHONE");
	snd_soc_dapm_nc_pin(codec, "PC_BEEP");

	/* Unused outputs */
	snd_soc_dapm_nc_pin(codec, "LOUT2");
	snd_soc_dapm_nc_pin(codec, "ROUT2");
	snd_soc_dapm_nc_pin(codec, "OUT3");
	snd_soc_dapm_nc_pin(codec, "MONOOUT");

	snd_soc_dapm_sync(codec);

	return 0;
}

static struct snd_soc_dai_link colibri270_v2_dai[] = {
{
	.name = "AC97",
	.stream_name = "AC97 HiFi",
	.cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
	.codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
	.init = colibri270_v2_ac97_init,
},
{
	.name = "AC97 Aux",
	.stream_name = "AC97 Aux",
	.cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
	.codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
},
};

static struct snd_soc_card colibri270_v2 = {
	.name = "Colibri 270 v2",
	.platform = &pxa2xx_soc_platform,
	.dai_link = colibri270_v2_dai,
	.num_links = ARRAY_SIZE(colibri270_v2_dai),
};

static struct snd_soc_device colibri270_v2_snd_devdata = {
	.card = &colibri270_v2,
	.codec_dev = &soc_codec_dev_wm9712,
};

static struct platform_device *colibri270_v2_snd_device;

static int __init colibri270_v2_init(void)
{
	int ret;

	if (!machine_is_colibri())
		return -ENODEV;

	colibri270_v2_snd_device = platform_device_alloc("soc-audio", -1);
	if (!colibri270_v2_snd_device) {
		ret = -ENOMEM;
		goto err_alloc;
	}

	platform_set_drvdata(colibri270_v2_snd_device,
			&colibri270_v2_snd_devdata);
	colibri270_v2_snd_devdata.dev = &colibri270_v2_snd_device->dev;
	ret = platform_device_add(colibri270_v2_snd_device);

	if (!ret)
		return 0;

	platform_device_put(colibri270_v2_snd_device);

err_alloc:
	return ret;
}

static void __exit colibri270_v2_exit(void)
{
	platform_device_unregister(colibri270_v2_snd_device);
}

module_init(colibri270_v2_init);
module_exit(colibri270_v2_exit);

/* Module information */
MODULE_AUTHOR("Jakob Viketoft");
MODULE_DESCRIPTION("ALSA SoC Toradex Colibri 270 v2");
MODULE_LICENSE("GPL");

Eric Miao wrote:
> On Wed, Apr 7, 2010 at 5:50 AM, Jakob Viketoft
> <jakob.viketoft@bitsim.com> wrote:
>> Hello!
>>
>> I'm trying to add sound support to a Toradex Colibri 270 v2 card, but
>> have run into some strangeness which I don't quite understand. The v2 of
>> this card uses the WM9712 codec and I've written a machine driver to tie
>> the codec and the pxa2xx-ac97 driver together. I'm using the 2.6.33.1
>> kernel and my machine driver is a simplified version of the tosa driver
>> (no power management or headphone jack logic). However, I get two problems:
>> 1. Internal clock and headphone output is turned off in the
>> AC97_POWERDOWN register and I can't see where to (properly) turn it on,
>> neither in kernel space or in userland. No-one else using this codec
>> seem to be doing it.
>> 2. The init function defined in my snd_soc_card struct doesn't seem to
>> get called, resulting in way too many mixer settings (I have a number of
>> snd_soc_dapm_nc_pin calls) with alsa, but might it also have something
>> to do with problem 1?
>>
>> When explicitly writing 0 (the ugly way) to the AC97_POWERDOWN register
>> I get perfect sound output, but I would like to do it the right way.
>>
>> Two error reports from the dmesg output that might be relevant:
>> * pxa2xx_ac97_try_cold_reset: cold reset timeout (GSR=0x44)
>> * Error: Driver 'pxa2xx-ac97' is already registered, aborting...
>>
>> The AC97 interface is added in the machine initialization through the
>> pxa_set_ac97_info() in the same way as tosa and many others and this
>> could explain the second error message...
>>
>> Any insight would be appreciated!
>>
> 
> Better if you could come up with a patch or source code for analysis.
> 

  reply	other threads:[~2010-04-07  9:13 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-06 21:50 AC97 problems with pxa Jakob Viketoft
2010-04-07  2:09 ` Eric Miao
2010-04-07  9:13   ` Jakob Viketoft [this message]
2010-04-07 19:08     ` Marek Vasut
2010-04-07  7:50 ` Marek Vasut
2010-04-07  9:37   ` Jakob Viketoft
2010-04-07  9:54     ` Mark Brown
2010-04-08  9:17       ` Jakob Viketoft
2010-04-08  9:54         ` Mark Brown
2010-04-08 13:05           ` Jakob Viketoft
2010-04-08 13:49             ` Mark Brown
2010-04-08 14:05               ` Jakob Viketoft
2010-04-08 14:12                 ` Mark Brown
2010-04-08 14:35                   ` Jakob Viketoft
2010-04-08 14:44                     ` Mark Brown
2010-04-08 15:07                       ` Jakob Viketoft
2010-04-08 14:06               ` Jakob Viketoft

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BBC4CD7.7010606@bitsim.com \
    --to=jakob.viketoft@bitsim.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.