All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Martin Povišer" <povik@cutebit.org>
To: Mark Brown <broonie@kernel.org>
Cc: "Martin Povišer" <povik+lin@cutebit.org>,
	"Liam Girdwood" <lgirdwood@gmail.com>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Jaroslav Kysela" <perex@perex.cz>,
	"Takashi Iwai" <tiwai@suse.com>,
	alsa-devel@alsa-project.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	"Mark Kettenis" <kettenis@openbsd.org>,
	"Hector Martin" <marcan@marcan.st>,
	"Sven Peter" <sven@svenpeter.dev>
Subject: Re: [RFC PATCH 0/5] Apple Macs machine-level ASoC driver
Date: Thu, 31 Mar 2022 15:28:12 +0200	[thread overview]
Message-ID: <CCE4A06E-6D6F-457D-B3C5-C36209BF38D3@cutebit.org> (raw)
In-Reply-To: <YkWfziQzprEsWL72@sirena.org.uk>


> On 31. 3. 2022, at 14:34, Mark Brown <broonie@kernel.org> wrote:
> 
> On Thu, Mar 31, 2022 at 02:04:44AM +0200, Martin Povišer wrote:
> 
>> I put together a machine-level ASoC driver for recent Apple Macs (the
>> ones with ARM64 SoCs) and want to gauge opinions.
> 
> This would be a bit easier to review with a description of the hardware.

The typical hardware configuration the driver is supposed to be used with
is this:

 * SoC with couple of I2S ports.

 * Array of speakers with individual speaker amp chips, hooked to a single
   I2S bus or split between two of the SoC’s I2S ports. Speakers can be
   one, two, four or six in total. The speaker amp chips resemble either
   TAS2770 or TAS2764. 

 * Jack codec hooked to a separate I2S port, operating independently.
   (Codec driver supports set_jack.)

The example in the binding patch describes an actual arrangement on one
piece of hardware.

>> Commit 2 adds a new ASoC card method (filter_controls) to let the card
>> prevent some codec kcontrols from being visible to userspace. For example
>> the TAS2770 speaker amp driver would be happy to expose TDM slot selection
>> and ISENSE/VSENSE enables which is ridiculous. I am all ears on how to
>> make the patch acceptable to upstream.
> 
> The broad issue here is that what you consider ridiculous someone else
> might have some bright ideas for configuring dynamically - if things are
> being exposed for dynamic configuration it's probably because someone
> wanted them, if the control is genuinely useless then it should just be
> removed.  Rather than getting in the way of people's policy arguments
> about how to set things we expose them to userspace and let userspace
> worry about it, usually with the help of UCM files.  The general
> userspace model is that people interact with their sound server more
> than the hardware card.  This is also helpful for people developing use
> cases, it means they're not having to get the kernel rebuilt to tune
> things.

Well but these are codec drivers reused on different systems, it can both
be 'not genuinely useless’ on some system and ridiculous to leave open on
the systems I am trying to write drivers for.

> The TDM swap thing you're mentioning looks like it's a left/right
> selection which people do use sometimes as a way of doing mono mixes and
> reorientation.  The ISENSE/VSENSE is less obvious, though it's possible
> there's issues with not having enough slots on a heavily used TDM bus or
> sometimes disabling the speaker protection processing for whatever
> reason.

Not only that. On TAS2770 the default value for ‘ASI1 Sel’ is ‘I2C offset’
meaning the speaker amp driver ignores my set_tdm_slot calls. If you tell
me it’s okay to change that behaviour and it won’t be considered backwards
compatibility breaking, that would be part of the solution I am seeking
here.

But even then, what for example if the system has a single speaker (as it
does on the Mac mini to be covered by this driver) and the I2S bus is left
undriven for the duration of unused TDM slots? That may genuinely pose
a risk of people blowing their speakers by switching something in alsamixer.
Now I can actually make sure the I2S data lines are always zeroed out in
the ASoC platform driver, but I would rather not even have to tie these
loose ends for a control there’s no reason to expose in the first place
(again, on this system).

The ISENSE/VSENSE controls are also actually useless on these systems as we
are not doing anything to pick up the measured values (which are sent back
over the I2S lines). I don’t know if there can be driver conflict between
two speaker amps trying to drive the I2S lines at the same time should
the user happen to enable SENSE facilities on more than one of them.
Now I can grudgingly study that and rule it out but I would rather hide
the controls altogether.

That’s the reasoning anyway. To reiterate, seems to me the controls
are useless/confusing at best and dangerous at worst.

Martin


  reply	other threads:[~2022-03-31 13:28 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-31  0:04 [RFC PATCH 0/5] Apple Macs machine-level ASoC driver Martin Povišer
2022-03-31  0:04 ` Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 1/5] dt-bindings: sound: Add Apple Macs sound system Martin Povišer
2022-03-31  0:04   ` Martin Povišer
2022-03-31  6:43   ` Krzysztof Kozlowski
2022-03-31  6:57     ` Martin Povišer
2022-03-31  8:17       ` Krzysztof Kozlowski
2022-03-31  8:23         ` Martin Povišer
2022-03-31  8:26           ` Krzysztof Kozlowski
2022-03-31  0:04 ` [RFC PATCH 2/5] HACK: ASoC: Add card->filter_controls hook Martin Povišer
2022-03-31  0:04   ` Martin Povišer
2022-03-31 11:34   ` Mark Brown
2022-03-31 11:34     ` Mark Brown
2022-03-31  0:04 ` [RFC PATCH 3/5] HACK: ASoC: Tolerate N-cpus-to-M-codecs links Martin Povišer
2022-03-31  0:04   ` Martin Povišer
2022-04-04 12:28   ` Mark Brown
2022-04-04 12:28     ` Mark Brown
2022-04-22 14:06     ` Martin Povišer
2022-04-22 14:06       ` Martin Povišer
2022-04-25 12:25       ` Mark Brown
2022-04-25 12:25         ` Mark Brown
2022-04-25 12:34         ` Martin Povišer
2022-04-25 12:34           ` Martin Povišer
2022-04-25 12:55           ` Mark Brown
2022-04-25 12:55             ` Mark Brown
2022-04-25 13:11             ` Martin Povišer
2022-04-25 13:11               ` Martin Povišer
2022-04-25 13:46               ` Mark Brown
2022-04-25 13:46                 ` Mark Brown
2022-04-25 13:55                 ` Martin Povišer
2022-04-25 13:55                   ` Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 4/5] ASoC: Introduce snd_soc_of_get_dai_link_cpus Martin Povišer
2022-03-31  0:04   ` Martin Povišer
2022-03-31  0:04 ` [RFC PATCH 5/5] ASoC: Add macaudio machine driver Martin Povišer
2022-03-31  0:04   ` Martin Povišer
2022-03-31 11:59   ` Mark Brown
2022-03-31 11:59     ` Mark Brown
2022-03-31 12:08     ` Martin Povišer
2022-03-31 12:16       ` Martin Povišer
2022-03-31 12:56       ` Mark Brown
2022-03-31 12:56         ` Mark Brown
2022-03-31 12:34 ` [RFC PATCH 0/5] Apple Macs machine-level ASoC driver Mark Brown
2022-03-31 12:34   ` Mark Brown
2022-03-31 13:28   ` Martin Povišer [this message]
2022-03-31 14:18     ` Mark Brown
2022-03-31 14:18       ` Mark Brown
2022-03-31 15:04       ` Martin Povišer
2022-03-31 15:36         ` Mark Brown
2022-03-31 15:36           ` Mark Brown
2022-04-22 10:43           ` Martin Povišer
2022-04-22 10:43             ` Martin Povišer
2022-04-22 11:19             ` Mark Brown
2022-04-22 11:19               ` Mark Brown
2022-04-22 11:28               ` Martin Povišer
2022-04-22 11:28                 ` Martin Povišer
2022-04-22 11:33                 ` Mark Brown
2022-04-22 11:33                   ` Mark Brown
2022-04-22 11:44                   ` Martin Povišer
2022-04-22 11:44                     ` Martin Povišer
2022-04-22 12:22                     ` Mark Brown
2022-04-22 12:22                       ` Mark Brown
2022-04-22 12:36                       ` Martin Povišer
2022-04-22 12:36                         ` Martin Povišer
2022-04-22 12:44                         ` Mark Brown
2022-04-22 12:44                           ` Mark Brown
2022-04-22 12:53                           ` Martin Povišer
2022-04-22 12:53                             ` Martin Povišer
2022-04-22 13:06                             ` Mark Brown
2022-04-22 13:06                               ` Mark Brown
2022-04-22 13:59                               ` Martin Povišer
2022-04-22 13:59                                 ` Martin Povišer
2022-03-31 13:28   ` Hector Martin
2022-03-31 13:28     ` Hector Martin
2022-03-31 14:33     ` Mark Brown
2022-03-31 14:33       ` Mark Brown
2022-04-05  9:31 ` (subset) " Mark Brown
2022-04-05  9:31   ` Mark Brown

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=CCE4A06E-6D6F-457D-B3C5-C36209BF38D3@cutebit.org \
    --to=povik@cutebit.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=kettenis@openbsd.org \
    --cc=krzk+dt@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcan@marcan.st \
    --cc=perex@perex.cz \
    --cc=povik+lin@cutebit.org \
    --cc=robh+dt@kernel.org \
    --cc=sven@svenpeter.dev \
    --cc=tiwai@suse.com \
    /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.