linux-arm-kernel.lists.infradead.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).