On Tue, Oct 20, 2020 at 09:37:05PM +0800, Cheng-yi Chiang wrote:
May I know your suggestion on Ajye's patch "ASoC: qcom: sc7180: Modify machine driver for 2mic" ?
https://lore.kernel.org/r/20200928063744.525700-3-ajye_huang@compal.corp-par...
I think adding code in the machine driver makes the intent straightforward. If we want the machine driver to be fully configurable, we can always add more code to handle properties like gpio, route, widget (mux, text selection) passed in from the device tree.
If the device has both front and rear mics and only one can be active at once that seems obvious and sensible. If the devices only have one of these then this seems like a bad idea.
But I feel that we don't need a machine driver to be that configurable from the device tree. I think having the logic scattered in various dtsi files and relying on manual inspection to understand the usage would be less maintainable than only exposing needed property like gpio. Especially in the complicated case where we need to create a mux widget with callback toggling the gpio like this:
I don't understand what "logic scattered in various dtsi files" means, sorry.
Yes, that should work to describe the dailink we are using. But a more tricky issue is how to do calls like setting PLL in dai startup ops.
...
I think that asking a generic machine driver to do configuration like this with only a limited interface of device property might be too much of an ask for the machine driver.
Richard was looking at some basic configuration for PLLs.
Would you mind if I simplify the compatible string like Srinivas suggested, and send a v12?
As for other two kinds of variations that I am aware of:
- front mic / rear mic
- replace alc5682 with adau7002
The CODEC change is going to be described in the DT no matter what - you'll have a reference to the CODEC node but it may make sense if there's enough custom code around it. For front vs rear mic the simplest thing would just be to not mention which if this is a hardware fixed thing, otherwise a control.
We can set different board names and different compatible strings to achieve such variation. So that it would make sense to describe configuration in compatible strings like you suggested, and also provides UCM a way to distinguish different boards.
I don't recall having suggested distinguishing these things with a compatible string, especially not the microphones. UCM can already use the display names for the boards to distinguish things.