[v2,3/5] ASoC: core: add support to snd_soc_dai_get_sdw_stream()
diff mbox series

Message ID 20190813083550.5877-4-srinivas.kandagatla@linaro.org
State New
Headers show
Series
  • soundwire: Add support to Qualcomm SoundWire master
Related show

Commit Message

Srinivas Kandagatla Aug. 13, 2019, 8:35 a.m. UTC
On platforms which have smart speaker amplifiers connected via
soundwire and modeled as aux devices in ASoC, in such usecases machine
driver should be able to get sdw master stream from dai so that it can
use the runtime stream to setup slave streams.

soundwire already as a set function, get function would provide more
flexibility to above configurations.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 include/sound/soc-dai.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Pierre-Louis Bossart Aug. 13, 2019, 2:44 p.m. UTC | #1
On 8/13/19 3:35 AM, Srinivas Kandagatla wrote:
> On platforms which have smart speaker amplifiers connected via
> soundwire and modeled as aux devices in ASoC, in such usecases machine
> driver should be able to get sdw master stream from dai so that it can
> use the runtime stream to setup slave streams.

using the _set_sdw_stream? I don't fully get the sequence with the 
wording above.

> 
> soundwire already as a set function, get function would provide more
> flexibility to above configurations.

I am not clear if you are asking for both to be used, or get only or set 
only?

> 
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
>   include/sound/soc-dai.h | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
> index dc48fe081a20..1e01f4a302e0 100644
> --- a/include/sound/soc-dai.h
> +++ b/include/sound/soc-dai.h
> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>   
>   	int (*set_sdw_stream)(struct snd_soc_dai *dai,
>   			void *stream, int direction);
> +	void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>   	/*
>   	 * DAI digital mute - optional.
>   	 * Called by soc-core to minimise any pops.
> @@ -410,4 +411,13 @@ static inline int snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>   		return -ENOTSUPP;
>   }
>   
> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
> +					       int direction)
> +{
> +	if (dai->driver->ops->get_sdw_stream)
> +		return dai->driver->ops->get_sdw_stream(dai, direction);
> +	else
> +		return ERR_PTR(-ENOTSUPP);
> +}
> +
>   #endif
>
Cezary Rojewski Aug. 13, 2019, 4:03 p.m. UTC | #2
On 2019-08-13 10:35, Srinivas Kandagatla wrote:
> On platforms which have smart speaker amplifiers connected via
> soundwire and modeled as aux devices in ASoC, in such usecases machine
> driver should be able to get sdw master stream from dai so that it can
> use the runtime stream to setup slave streams.
> 
> soundwire already as a set function, get function would provide more
> flexibility to above configurations.
> 
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
>   include/sound/soc-dai.h | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
> index dc48fe081a20..1e01f4a302e0 100644
> --- a/include/sound/soc-dai.h
> +++ b/include/sound/soc-dai.h
> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>   
>   	int (*set_sdw_stream)(struct snd_soc_dai *dai,
>   			void *stream, int direction);
> +	void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>   	/*
>   	 * DAI digital mute - optional.
>   	 * Called by soc-core to minimise any pops.
> @@ -410,4 +411,13 @@ static inline int snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>   		return -ENOTSUPP;
>   }
>   
> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
> +					       int direction)
> +{
> +	if (dai->driver->ops->get_sdw_stream)
> +		return dai->driver->ops->get_sdw_stream(dai, direction);
> +	else
> +		return ERR_PTR(-ENOTSUPP);
> +}

Drop redundant else.
Srinivas Kandagatla Aug. 13, 2019, 4:50 p.m. UTC | #3
Thanks for the review,

On 13/08/2019 15:44, Pierre-Louis Bossart wrote:
> On 8/13/19 3:35 AM, Srinivas Kandagatla wrote:
>> On platforms which have smart speaker amplifiers connected via
>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>> driver should be able to get sdw master stream from dai so that it can
>> use the runtime stream to setup slave streams.
> 
> using the _set_sdw_stream? I don't fully get the sequence with the 
> wording above.

Yes, using set_sdw_stream().

> 
>>
>> soundwire already as a set function, get function would provide more
>> flexibility to above configurations.
> 
> I am not clear if you are asking for both to be used, or get only or set 
> only?

It depends on the usecase, in db845c usecase  [1] as Aux device is dai 
less, machine driver is using get function to get hold of master stream 
so that it can setup slave port config.


Looks like there is a typo in above like

This was supposed to be "soundwire already has a set function, get 
function would provide more flexibility to above configurations"

[1] 
https://git.linaro.org/landing-teams/working/qualcomm/kernel.git/tree/sound/soc/qcom/db845c.c?h=integration-linux-qcomlt

thanks,
srini

> 
>>
>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> ---
>>   include/sound/soc-dai.h | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>>
>> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
>> index dc48fe081a20..1e01f4a302e0 100644
>> --- a/include/sound/soc-dai.h
>> +++ b/include/sound/soc-dai.h
>> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>>       int (*set_sdw_stream)(struct snd_soc_dai *dai,
>>               void *stream, int direction);
>> +    void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>>       /*
>>        * DAI digital mute - optional.
>>        * Called by soc-core to minimise any pops.
>> @@ -410,4 +411,13 @@ static inline int 
>> snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>>           return -ENOTSUPP;
>>   }
>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
>> +                           int direction)
>> +{
>> +    if (dai->driver->ops->get_sdw_stream)
>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>> +    else
>> +        return ERR_PTR(-ENOTSUPP);
>> +}
>> +
>>   #endif
>>
>
Srinivas Kandagatla Aug. 13, 2019, 4:52 p.m. UTC | #4
Thanks for the review,

On 13/08/2019 17:03, Cezary Rojewski wrote:
> On 2019-08-13 10:35, Srinivas Kandagatla wrote:
>> On platforms which have smart speaker amplifiers connected via
>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>> driver should be able to get sdw master stream from dai so that it can
>> use the runtime stream to setup slave streams.
>>
>> soundwire already as a set function, get function would provide more
>> flexibility to above configurations.
>>
>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> ---
>>   include/sound/soc-dai.h | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>>
>> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
>> index dc48fe081a20..1e01f4a302e0 100644
>> --- a/include/sound/soc-dai.h
>> +++ b/include/sound/soc-dai.h
>> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>>       int (*set_sdw_stream)(struct snd_soc_dai *dai,
>>               void *stream, int direction);
>> +    void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>>       /*
>>        * DAI digital mute - optional.
>>        * Called by soc-core to minimise any pops.
>> @@ -410,4 +411,13 @@ static inline int 
>> snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>>           return -ENOTSUPP;
>>   }
>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
>> +                           int direction)
>> +{
>> +    if (dai->driver->ops->get_sdw_stream)
>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>> +    else
>> +        return ERR_PTR(-ENOTSUPP);
>> +}
> 
> Drop redundant else.
Not all the dai drivers would implement this function, I guess else is 
not redundant here!

--srini
>
Cezary Rojewski Aug. 13, 2019, 5:29 p.m. UTC | #5
On 2019-08-13 18:52, Srinivas Kandagatla wrote:
> Thanks for the review,
> 
> On 13/08/2019 17:03, Cezary Rojewski wrote:
>> On 2019-08-13 10:35, Srinivas Kandagatla wrote:
>>> On platforms which have smart speaker amplifiers connected via
>>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>>> driver should be able to get sdw master stream from dai so that it can
>>> use the runtime stream to setup slave streams.
>>>
>>> soundwire already as a set function, get function would provide more
>>> flexibility to above configurations.
>>>
>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>>> ---

>>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
>>> +                           int direction)
>>> +{
>>> +    if (dai->driver->ops->get_sdw_stream)
>>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>>> +    else
>>> +        return ERR_PTR(-ENOTSUPP);
>>> +}
>>
>> Drop redundant else.
> Not all the dai drivers would implement this function, I guess else is 
> not redundant here!
> 
> --srini
>>

Eh. By that I meant dropping "else" keyword and reducing indentation for 
"return ERR_PTR(-ENOTSUPP);"

Czarek
Pierre-Louis Bossart Aug. 13, 2019, 5:51 p.m. UTC | #6
On 8/13/19 11:50 AM, Srinivas Kandagatla wrote:
> Thanks for the review,
> 
> On 13/08/2019 15:44, Pierre-Louis Bossart wrote:
>> On 8/13/19 3:35 AM, Srinivas Kandagatla wrote:
>>> On platforms which have smart speaker amplifiers connected via
>>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>>> driver should be able to get sdw master stream from dai so that it can
>>> use the runtime stream to setup slave streams.
>>
>> using the _set_sdw_stream? I don't fully get the sequence with the 
>> wording above.
> 
> Yes, using set_sdw_stream().

Maybe I am missing something here, but I don't see where the 
set_sdw_stream() is called.

Also I don't fully get the rule. set_sdw_stream() looks required, 
get_sdw_stream() is optional, is this what you are suggesting?

>>
>>>
>>> soundwire already as a set function, get function would provide more
>>> flexibility to above configurations.
>>
>> I am not clear if you are asking for both to be used, or get only or 
>> set only?
> 
> It depends on the usecase, in db845c usecase  [1] as Aux device is dai 
> less, machine driver is using get function to get hold of master stream 
> so that it can setup slave port config.
> 
> 
> Looks like there is a typo in above like
> 
> This was supposed to be "soundwire already has a set function, get 
> function would provide more flexibility to above configurations"
> 
> [1] 
> https://git.linaro.org/landing-teams/working/qualcomm/kernel.git/tree/sound/soc/qcom/db845c.c?h=integration-linux-qcomlt 
> 
> 
> thanks,
> srini
> 
>>
>>>
>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>>> ---
>>>   include/sound/soc-dai.h | 10 ++++++++++
>>>   1 file changed, 10 insertions(+)
>>>
>>> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
>>> index dc48fe081a20..1e01f4a302e0 100644
>>> --- a/include/sound/soc-dai.h
>>> +++ b/include/sound/soc-dai.h
>>> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>>>       int (*set_sdw_stream)(struct snd_soc_dai *dai,
>>>               void *stream, int direction);
>>> +    void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>>>       /*
>>>        * DAI digital mute - optional.
>>>        * Called by soc-core to minimise any pops.
>>> @@ -410,4 +411,13 @@ static inline int 
>>> snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>>>           return -ENOTSUPP;
>>>   }
>>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
>>> +                           int direction)
>>> +{
>>> +    if (dai->driver->ops->get_sdw_stream)
>>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>>> +    else
>>> +        return ERR_PTR(-ENOTSUPP);
>>> +}
>>> +
>>>   #endif
>>>
>>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Srinivas Kandagatla Aug. 13, 2019, 6:06 p.m. UTC | #7
On 13/08/2019 18:51, Pierre-Louis Bossart wrote:
> On 8/13/19 11:50 AM, Srinivas Kandagatla wrote:
>> Thanks for the review,
>>
>> On 13/08/2019 15:44, Pierre-Louis Bossart wrote:
>>> On 8/13/19 3:35 AM, Srinivas Kandagatla wrote:
>>>> On platforms which have smart speaker amplifiers connected via
>>>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>>>> driver should be able to get sdw master stream from dai so that it can
>>>> use the runtime stream to setup slave streams.
>>>
>>> using the _set_sdw_stream? I don't fully get the sequence with the 
>>> wording above.
>>
>> Yes, using set_sdw_stream().
> 
> Maybe I am missing something here, but I don't see where the 
> set_sdw_stream() is called.

sorry for the confusion. It was too quick reply. :-)
I was suppose to say sdw_stream_add_slave() instead of set_sdw_stream().

As Aux device is dailess there is no way to get hold of sdw stream 
runtime for slave device associated with it.

Having snd_soc_dai_get_sdw_stream() would help machine driver to get 
hold of sdw_stream_runtime from controller dai and setup slave streams 
using sdw_stream_add_slave().


thanks,
srini


> 
> Also I don't fully get the rule. set_sdw_stream() looks required, 
> get_sdw_stream() is optional, is this what you are suggesting?
> 
>>>
>>>>
>>>> soundwire already as a set function, get function would provide more
>>>> flexibility to above configurations.
>>>
>>> I am not clear if you are asking for both to be used, or get only or 
>>> set only?
>>
>> It depends on the usecase, in db845c usecase  [1] as Aux device is dai 
>> less, machine driver is using get function to get hold of master 
>> stream so that it can setup slave port config.
>>
>>
>> Looks like there is a typo in above like
>>
>> This was supposed to be "soundwire already has a set function, get 
>> function would provide more flexibility to above configurations"
>>
>> [1] 
>> https://git.linaro.org/landing-teams/working/qualcomm/kernel.git/tree/sound/soc/qcom/db845c.c?h=integration-linux-qcomlt 
>>
>>
>> thanks,
>> srini
>>
>>>
>>>>
>>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>>>> ---
>>>>   include/sound/soc-dai.h | 10 ++++++++++
>>>>   1 file changed, 10 insertions(+)
>>>>
>>>> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
>>>> index dc48fe081a20..1e01f4a302e0 100644
>>>> --- a/include/sound/soc-dai.h
>>>> +++ b/include/sound/soc-dai.h
>>>> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>>>>       int (*set_sdw_stream)(struct snd_soc_dai *dai,
>>>>               void *stream, int direction);
>>>> +    void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>>>>       /*
>>>>        * DAI digital mute - optional.
>>>>        * Called by soc-core to minimise any pops.
>>>> @@ -410,4 +411,13 @@ static inline int 
>>>> snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>>>>           return -ENOTSUPP;
>>>>   }
>>>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai 
>>>> *dai,
>>>> +                           int direction)
>>>> +{
>>>> +    if (dai->driver->ops->get_sdw_stream)
>>>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>>>> +    else
>>>> +        return ERR_PTR(-ENOTSUPP);
>>>> +}
>>>> +
>>>>   #endif
>>>>
>>>
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
Pierre-Louis Bossart Aug. 13, 2019, 7:15 p.m. UTC | #8
On 8/13/19 1:06 PM, Srinivas Kandagatla wrote:
> 
> 
> On 13/08/2019 18:51, Pierre-Louis Bossart wrote:
>> On 8/13/19 11:50 AM, Srinivas Kandagatla wrote:
>>> Thanks for the review,
>>>
>>> On 13/08/2019 15:44, Pierre-Louis Bossart wrote:
>>>> On 8/13/19 3:35 AM, Srinivas Kandagatla wrote:
>>>>> On platforms which have smart speaker amplifiers connected via
>>>>> soundwire and modeled as aux devices in ASoC, in such usecases machine
>>>>> driver should be able to get sdw master stream from dai so that it can
>>>>> use the runtime stream to setup slave streams.
>>>>
>>>> using the _set_sdw_stream? I don't fully get the sequence with the 
>>>> wording above.
>>>
>>> Yes, using set_sdw_stream().
>>
>> Maybe I am missing something here, but I don't see where the 
>> set_sdw_stream() is called.
> 
> sorry for the confusion. It was too quick reply. :-)
> I was suppose to say sdw_stream_add_slave() instead of set_sdw_stream().

ok, so get_sdw_stream() and set_sdw_stream() are not meant to be mirrors 
or both implemented. It's just a helper to respectively get a context or 
set a context but a get-modify-set type of operation is not expected.

Do I get this right?

> 
> As Aux device is dailess there is no way to get hold of sdw stream 
> runtime for slave device associated with it.
> 
> Having snd_soc_dai_get_sdw_stream() would help machine driver to get 
> hold of sdw_stream_runtime from controller dai and setup slave streams 
> using sdw_stream_add_slave().
> 
> 
> thanks,
> srini
> 
> 
>>
>> Also I don't fully get the rule. set_sdw_stream() looks required, 
>> get_sdw_stream() is optional, is this what you are suggesting?
>>
>>>>
>>>>>
>>>>> soundwire already as a set function, get function would provide more
>>>>> flexibility to above configurations.
>>>>
>>>> I am not clear if you are asking for both to be used, or get only or 
>>>> set only?
>>>
>>> It depends on the usecase, in db845c usecase  [1] as Aux device is 
>>> dai less, machine driver is using get function to get hold of master 
>>> stream so that it can setup slave port config.
>>>
>>>
>>> Looks like there is a typo in above like
>>>
>>> This was supposed to be "soundwire already has a set function, get 
>>> function would provide more flexibility to above configurations"
>>>
>>> [1] 
>>> https://git.linaro.org/landing-teams/working/qualcomm/kernel.git/tree/sound/soc/qcom/db845c.c?h=integration-linux-qcomlt 
>>>
>>>
>>> thanks,
>>> srini
>>>
>>>>
>>>>>
>>>>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>>>>> ---
>>>>>   include/sound/soc-dai.h | 10 ++++++++++
>>>>>   1 file changed, 10 insertions(+)
>>>>>
>>>>> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
>>>>> index dc48fe081a20..1e01f4a302e0 100644
>>>>> --- a/include/sound/soc-dai.h
>>>>> +++ b/include/sound/soc-dai.h
>>>>> @@ -202,6 +202,7 @@ struct snd_soc_dai_ops {
>>>>>       int (*set_sdw_stream)(struct snd_soc_dai *dai,
>>>>>               void *stream, int direction);
>>>>> +    void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
>>>>>       /*
>>>>>        * DAI digital mute - optional.
>>>>>        * Called by soc-core to minimise any pops.
>>>>> @@ -410,4 +411,13 @@ static inline int 
>>>>> snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
>>>>>           return -ENOTSUPP;
>>>>>   }
>>>>> +static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai 
>>>>> *dai,
>>>>> +                           int direction)
>>>>> +{
>>>>> +    if (dai->driver->ops->get_sdw_stream)
>>>>> +        return dai->driver->ops->get_sdw_stream(dai, direction);
>>>>> +    else
>>>>> +        return ERR_PTR(-ENOTSUPP);
>>>>> +}
>>>>> +
>>>>>   #endif
>>>>>
>>>>
>>> _______________________________________________
>>> Alsa-devel mailing list
>>> Alsa-devel@alsa-project.org
>>> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>>
Mark Brown Aug. 13, 2019, 7:18 p.m. UTC | #9
On Tue, Aug 13, 2019 at 02:15:18PM -0500, Pierre-Louis Bossart wrote:
> On 8/13/19 1:06 PM, Srinivas Kandagatla wrote:

> > sorry for the confusion. It was too quick reply. :-)
> > I was suppose to say sdw_stream_add_slave() instead of set_sdw_stream().

> ok, so get_sdw_stream() and set_sdw_stream() are not meant to be mirrors or
> both implemented. It's just a helper to respectively get a context or set a
> context but a get-modify-set type of operation is not expected.

> Do I get this right?

This seems like it's going to be confusing...
Mark Brown Aug. 13, 2019, 7:19 p.m. UTC | #10
On Tue, Aug 13, 2019 at 07:29:50PM +0200, Cezary Rojewski wrote:
> On 2019-08-13 18:52, Srinivas Kandagatla wrote:
> > On 13/08/2019 17:03, Cezary Rojewski wrote:
> > > On 2019-08-13 10:35, Srinivas Kandagatla wrote:

> > > > +    if (dai->driver->ops->get_sdw_stream)
> > > > +        return dai->driver->ops->get_sdw_stream(dai, direction);
> > > > +    else
> > > > +        return ERR_PTR(-ENOTSUPP);

> > > Drop redundant else.

> > Not all the dai drivers would implement this function, I guess else is
> > not redundant here!

> Eh. By that I meant dropping "else" keyword and reducing indentation for
> "return ERR_PTR(-ENOTSUPP);"

The above is the idiom used throughout the rest of the file.
Pierre-Louis Bossart Aug. 13, 2019, 7:38 p.m. UTC | #11
On 8/13/19 2:18 PM, Mark Brown wrote:
> On Tue, Aug 13, 2019 at 02:15:18PM -0500, Pierre-Louis Bossart wrote:
>> On 8/13/19 1:06 PM, Srinivas Kandagatla wrote:
> 
>>> sorry for the confusion. It was too quick reply. :-)
>>> I was suppose to say sdw_stream_add_slave() instead of set_sdw_stream().
> 
>> ok, so get_sdw_stream() and set_sdw_stream() are not meant to be mirrors or
>> both implemented. It's just a helper to respectively get a context or set a
>> context but a get-modify-set type of operation is not expected.
> 
>> Do I get this right?
> 
> This seems like it's going to be confusing...

Indeed. I don't have a full understanding of that part to be honest, nor 
why we need something SoundWire-specific. We already abused the 
set_tdm_slot API to store an HDaudio stream, now we have a rather 
confusing stream information for SoundWire and I have about 3 other 
'stream' contexts in SOF... I am still doing basic cleanups but this has 
been on my radar for a while.
Mark Brown Aug. 13, 2019, 7:58 p.m. UTC | #12
On Tue, Aug 13, 2019 at 02:38:53PM -0500, Pierre-Louis Bossart wrote:

> Indeed. I don't have a full understanding of that part to be honest, nor why
> we need something SoundWire-specific. We already abused the set_tdm_slot API
> to store an HDaudio stream, now we have a rather confusing stream
> information for SoundWire and I have about 3 other 'stream' contexts in
> SOF... I am still doing basic cleanups but this has been on my radar for a
> while.

There is something to be said for not abusing the TDM slot API if it can
make things clearer by using bus-idiomatic mechanisms, but it does mean
everything needs to know about each individual bus :/ .
Vinod Koul Aug. 14, 2019, 4:11 a.m. UTC | #13
On 13-08-19, 20:58, Mark Brown wrote:
> On Tue, Aug 13, 2019 at 02:38:53PM -0500, Pierre-Louis Bossart wrote:
> 
> > Indeed. I don't have a full understanding of that part to be honest, nor why
> > we need something SoundWire-specific. We already abused the set_tdm_slot API
> > to store an HDaudio stream, now we have a rather confusing stream
> > information for SoundWire and I have about 3 other 'stream' contexts in
> > SOF... I am still doing basic cleanups but this has been on my radar for a
> > while.
> 
> There is something to be said for not abusing the TDM slot API if it can
> make things clearer by using bus-idiomatic mechanisms, but it does mean
> everything needs to know about each individual bus :/ .

Here ASoC doesn't need to know about sdw bus. As Srini explained, this
helps in the case for him to get the stream context and set the stream
context from the machine driver.

Nothing else is expected to be done from this API. We already do a set
using snd_soc_dai_set_sdw_stream(). Here we add the snd_soc_dai_get_sdw_stream() to query

Thanks
Mark Brown Aug. 14, 2019, 9:08 a.m. UTC | #14
On Wed, Aug 14, 2019 at 09:41:42AM +0530, Vinod Koul wrote:
> On 13-08-19, 20:58, Mark Brown wrote:

> > There is something to be said for not abusing the TDM slot API if it can
> > make things clearer by using bus-idiomatic mechanisms, but it does mean
> > everything needs to know about each individual bus :/ .

> Here ASoC doesn't need to know about sdw bus. As Srini explained, this
> helps in the case for him to get the stream context and set the stream
> context from the machine driver.

Other drivers interoperating with the Soundwire DAI might want to do
something, it looks like that's the case for SOF.

> Nothing else is expected to be done from this API. We already do a set
> using snd_soc_dai_set_sdw_stream(). Here we add the snd_soc_dai_get_sdw_stream() to query

Well, if the API is not expected to do anything we can optimize it and
just remove it!
Pierre-Louis Bossart Aug. 14, 2019, 2:09 p.m. UTC | #15
On 8/13/19 11:11 PM, Vinod Koul wrote:
> On 13-08-19, 20:58, Mark Brown wrote:
>> On Tue, Aug 13, 2019 at 02:38:53PM -0500, Pierre-Louis Bossart wrote:
>>
>>> Indeed. I don't have a full understanding of that part to be honest, nor why
>>> we need something SoundWire-specific. We already abused the set_tdm_slot API
>>> to store an HDaudio stream, now we have a rather confusing stream
>>> information for SoundWire and I have about 3 other 'stream' contexts in
>>> SOF... I am still doing basic cleanups but this has been on my radar for a
>>> while.
>>
>> There is something to be said for not abusing the TDM slot API if it can
>> make things clearer by using bus-idiomatic mechanisms, but it does mean
>> everything needs to know about each individual bus :/ .
> 
> Here ASoC doesn't need to know about sdw bus. As Srini explained, this
> helps in the case for him to get the stream context and set the stream
> context from the machine driver.
> 
> Nothing else is expected to be done from this API. We already do a set
> using snd_soc_dai_set_sdw_stream(). Here we add the snd_soc_dai_get_sdw_stream() to query

I didn't see a call to snd_soc_dai_set_sdw_stream() in Srini's code?

Patch
diff mbox series

diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index dc48fe081a20..1e01f4a302e0 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -202,6 +202,7 @@  struct snd_soc_dai_ops {
 
 	int (*set_sdw_stream)(struct snd_soc_dai *dai,
 			void *stream, int direction);
+	void *(*get_sdw_stream)(struct snd_soc_dai *dai, int direction);
 	/*
 	 * DAI digital mute - optional.
 	 * Called by soc-core to minimise any pops.
@@ -410,4 +411,13 @@  static inline int snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
 		return -ENOTSUPP;
 }
 
+static inline void *snd_soc_dai_get_sdw_stream(struct snd_soc_dai *dai,
+					       int direction)
+{
+	if (dai->driver->ops->get_sdw_stream)
+		return dai->driver->ops->get_sdw_stream(dai, direction);
+	else
+		return ERR_PTR(-ENOTSUPP);
+}
+
 #endif