All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Hofman <pavel.hofman@ivitera.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel <alsa-devel@alsa-project.org>
Subject: Re: ESI Juli@ crash with external clock switch - patch
Date: Thu, 15 Jan 2015 22:15:46 +0100	[thread overview]
Message-ID: <54B82E02.3080008@ivitera.com> (raw)
In-Reply-To: <s5hwq4sm2bs.wl-tiwai@suse.de>

Dne 12.1.2015 v 16:43 Takashi Iwai napsal(a):
> At Mon, 12 Jan 2015 09:34:52 +0100,
> Pavel Hofman wrote:
>>
>>
>> I wish I could help but unfortunately my practical knowledge of kernel
>> workqueues is close to zero :-( Of course I will test the patches and
>> will extend them for quartet with testing too.
>
> How about the patch below?  This is a quick fix for 3.19 (and
> stable).  More better fixes will follow later once after it's
> confirmed to work.

Hi,

Thanks a lot, the patch seems to run fine. Only ak4114_init_regs has to 
be called every samplerate change, otherwise the receiver does not 
re-run the samplerate detection and its register with detected 
samplerate does not update its value.

The following patch seems to run ok:

diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
index 52f02a6..796834b 100644
--- a/include/sound/ak4114.h
+++ b/include/sound/ak4114.h
@@ -169,6 +169,7 @@ struct ak4114 {
         ak4114_read_t * read;
         void * private_data;
         unsigned int init: 1;
+       bool in_workq;
         spinlock_t lock;
         unsigned char regmap[6];
         unsigned char txcsb[5];
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index c7f5633..6d643b7 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -152,10 +152,12 @@ static void ak4114_init_regs(struct ak4114 *chip)

  void snd_ak4114_reinit(struct ak4114 *chip)
  {
+       ak4114_init_regs(chip);
+       if (chip->in_workq)
+               return;
         chip->init = 1;
         mb();
-       flush_delayed_work(&chip->work);
-       ak4114_init_regs(chip);
+       cancel_delayed_work_sync(&chip->work);
         /* bring up statistics / event queing */
         chip->init = 0;
         if (chip->kctls[0])
@@ -612,10 +614,12 @@ static void ak4114_stats(struct work_struct *work)
  {
         struct ak4114 *chip = container_of(work, struct ak4114, work.work);

-       if (!chip->init)
+       chip->in_workq = true;
+       if (!chip->init) {
                 snd_ak4114_check_rate_and_errors(chip, chip->check_flags);
-
-       schedule_delayed_work(&chip->work, HZ / 10);
+               schedule_delayed_work(&chip->work, HZ / 10);
+       }
+       chip->in_workq = false;
  }

  EXPORT_SYMBOL(snd_ak4114_create);


>
>>> The HZ/10 isn't that bad, but the problem is that it's unconditionally
>>> running even if user doesn't need/want.
>>
>> It is useful only for the external clock mode. In fact the detection of
>> incoming SPDIF rate is not reliable for internal clock in Juli (while it
>> works just fine in Quartet, its FPGA pins configure the SPDIF receiver
>> differently). IMO the thread could be running only when clock is
>> switched to external.
>
> Yeah, we can do some smart task change in addition to manual on/off.
> Maybe it's good to have an enum control for that.

I am not sure users would want/need to disable a feature which detects 
incoming samplerate. IMO if the work thread is running only in the 
external clock mode, nothing more is needed.

Thanks a lot and regards,

Pavel.

  reply	other threads:[~2015-01-15 21:15 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-11 13:58 ESI Juli@ crash with external clock switch - patch Pavel Hofman
2015-01-11 15:52 ` Takashi Iwai
2015-01-11 17:57   ` Pavel Hofman
2015-01-11 20:36     ` Takashi Iwai
2015-01-11 21:00       ` Pavel Hofman
2015-01-12  8:21         ` Takashi Iwai
2015-01-12  8:34           ` Pavel Hofman
2015-01-12 15:43             ` Takashi Iwai
2015-01-15 21:15               ` Pavel Hofman [this message]
2015-01-16 17:13                 ` Takashi Iwai
2015-01-16 17:19                   ` Takashi Iwai
2015-01-16 20:36                   ` Pavel Hofman
2015-01-16 20:39                     ` Takashi Iwai
2015-01-16 20:53                       ` Pavel Hofman
2015-01-28 20:51                       ` Pavel Hofman
2015-01-28 21:21                         ` Takashi Iwai
2015-01-28 21:24                           ` Pavel Hofman

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=54B82E02.3080008@ivitera.com \
    --to=pavel.hofman@ivitera.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=tiwai@suse.de \
    /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.