Message ID | 20230725023416.11205-13-quic_wcheng@quicinc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Introduce QC USB SND audio offloading support | expand |
On 7/24/2023 7:33 PM, Wesley Cheng wrote: > Some vendor modules will utilize useful parsing and endpoint management > APIs to start audio playback/capture. > > Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> > --- > sound/core/oss/pcm_oss.c | 4 ++-- > sound/usb/card.c | 2 ++ > sound/usb/endpoint.c | 2 ++ > sound/usb/helper.c | 1 + > sound/usb/pcm.c | 9 ++++++--- > sound/usb/pcm.h | 12 ++++++++++++ > 6 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c > index 728c211142d1..7773b5362e1a 100644 > --- a/sound/core/oss/pcm_oss.c > +++ b/sound/core/oss/pcm_oss.c > @@ -444,8 +444,8 @@ static int snd_pcm_hw_param_near(struct snd_pcm_substream *pcm, > } > > static int _snd_pcm_hw_param_set(struct snd_pcm_hw_params *params, > - snd_pcm_hw_param_t var, unsigned int val, > - int dir) > + snd_pcm_hw_param_t var, unsigned int val, > + int dir) > { > int changed; > if (hw_is_mask(var)) { > diff --git a/sound/usb/card.c b/sound/usb/card.c > index 9365d1e17836..a3fad66a3337 100644 > --- a/sound/usb/card.c > +++ b/sound/usb/card.c > @@ -1076,6 +1076,7 @@ int snd_usb_autoresume(struct snd_usb_audio *chip) > } > return 0; > } > +EXPORT_SYMBOL_GPL(snd_usb_autoresume); > > void snd_usb_autosuspend(struct snd_usb_audio *chip) > { > @@ -1089,6 +1090,7 @@ void snd_usb_autosuspend(struct snd_usb_audio *chip) > for (i = 0; i < chip->num_interfaces; i++) > usb_autopm_put_interface(chip->intf[i]); > } > +EXPORT_SYMBOL_GPL(snd_usb_autosuspend); > > static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) > { > diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c > index a385e85c4650..0757499599c8 100644 > --- a/sound/usb/endpoint.c > +++ b/sound/usb/endpoint.c > @@ -866,6 +866,7 @@ snd_usb_endpoint_open(struct snd_usb_audio *chip, > mutex_unlock(&chip->mutex); > return ep; > } > +EXPORT_SYMBOL_GPL(snd_usb_endpoint_open); > > /* > * snd_usb_endpoint_set_sync: Link data and sync endpoints > @@ -1503,6 +1504,7 @@ int snd_usb_endpoint_prepare(struct snd_usb_audio *chip, > mutex_unlock(&chip->mutex); > return err; > } > +EXPORT_SYMBOL_GPL(snd_usb_endpoint_prepare); > > /* get the current rate set to the given clock by any endpoint */ > int snd_usb_endpoint_get_clock_rate(struct snd_usb_audio *chip, int clock) > diff --git a/sound/usb/helper.c b/sound/usb/helper.c > index bf80e55d013a..4322ae3738e6 100644 > --- a/sound/usb/helper.c > +++ b/sound/usb/helper.c > @@ -62,6 +62,7 @@ void *snd_usb_find_csint_desc(void *buffer, int buflen, void *after, u8 dsubtype > } > return NULL; > } > +EXPORT_SYMBOL_GPL(snd_usb_find_csint_desc); > > /* > * Wrapper for usb_control_msg(). > diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c > index eec5232f9fb2..b6fb6d84d9eb 100644 > --- a/sound/usb/pcm.c > +++ b/sound/usb/pcm.c > @@ -87,7 +87,7 @@ static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream > /* > * find a matching audio format > */ > -static const struct audioformat * > +const struct audioformat * > find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > unsigned int rate, unsigned int channels, bool strict_match, > struct snd_usb_substream *subs) > @@ -147,8 +147,9 @@ find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > } > return found; > } > +EXPORT_SYMBOL_GPL(find_format); > > -static const struct audioformat * > +const struct audioformat * > find_substream_format(struct snd_usb_substream *subs, > const struct snd_pcm_hw_params *params) > { > @@ -156,6 +157,7 @@ find_substream_format(struct snd_usb_substream *subs, > params_rate(params), params_channels(params), > true, subs); > } > +EXPORT_SYMBOL_GPL(find_substream_format); > > bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream *subs) > { > @@ -446,7 +448,7 @@ int snd_usb_pcm_resume(struct snd_usb_stream *as) > return 0; > } > > -static void close_endpoints(struct snd_usb_audio *chip, > +void close_endpoints(struct snd_usb_audio *chip, > struct snd_usb_substream *subs) > { > if (subs->data_endpoint) { > @@ -460,6 +462,7 @@ static void close_endpoints(struct snd_usb_audio *chip, > subs->sync_endpoint = NULL; > } > } > +EXPORT_SYMBOL(close_endpoints); EXPORT_SYMBOL_GPL here as well?
On Mon, Jul 24, 2023 at 07:33:56PM -0700, Wesley Cheng wrote: > --- a/sound/usb/pcm.c > +++ b/sound/usb/pcm.c > @@ -87,7 +87,7 @@ static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream > /* > * find a matching audio format > */ > -static const struct audioformat * > +const struct audioformat * > find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > unsigned int rate, unsigned int channels, bool strict_match, > struct snd_usb_substream *subs) > @@ -147,8 +147,9 @@ find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > } > return found; > } > +EXPORT_SYMBOL_GPL(find_format); This is a horrible symbol name for a global function, same for the other ones in this file. If you really want to export them, please put them in the proper "snd_" prefix namespace, or better yet, use a module namespace as well to ensure that we know who is using them. thanks, greg k-h
On Tue, 25 Jul 2023 07:33:57 +0200, Greg KH wrote: > > On Mon, Jul 24, 2023 at 07:33:56PM -0700, Wesley Cheng wrote: > > --- a/sound/usb/pcm.c > > +++ b/sound/usb/pcm.c > > @@ -87,7 +87,7 @@ static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream > > /* > > * find a matching audio format > > */ > > -static const struct audioformat * > > +const struct audioformat * > > find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > > unsigned int rate, unsigned int channels, bool strict_match, > > struct snd_usb_substream *subs) > > @@ -147,8 +147,9 @@ find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, > > } > > return found; > > } > > +EXPORT_SYMBOL_GPL(find_format); > > This is a horrible symbol name for a global function, same for the other > ones in this file. If you really want to export them, please put them > in the proper "snd_" prefix namespace, or better yet, use a module > namespace as well to ensure that we know who is using them. Yes, please add snd_usb_ prefix for all exported symbols from USB-audio driver code. Also, make sure that EXPORT_SYMBOL_GPL() is used for those, too. thanks, Takashi
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index 728c211142d1..7773b5362e1a 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c @@ -444,8 +444,8 @@ static int snd_pcm_hw_param_near(struct snd_pcm_substream *pcm, } static int _snd_pcm_hw_param_set(struct snd_pcm_hw_params *params, - snd_pcm_hw_param_t var, unsigned int val, - int dir) + snd_pcm_hw_param_t var, unsigned int val, + int dir) { int changed; if (hw_is_mask(var)) { diff --git a/sound/usb/card.c b/sound/usb/card.c index 9365d1e17836..a3fad66a3337 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -1076,6 +1076,7 @@ int snd_usb_autoresume(struct snd_usb_audio *chip) } return 0; } +EXPORT_SYMBOL_GPL(snd_usb_autoresume); void snd_usb_autosuspend(struct snd_usb_audio *chip) { @@ -1089,6 +1090,7 @@ void snd_usb_autosuspend(struct snd_usb_audio *chip) for (i = 0; i < chip->num_interfaces; i++) usb_autopm_put_interface(chip->intf[i]); } +EXPORT_SYMBOL_GPL(snd_usb_autosuspend); static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message) { diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index a385e85c4650..0757499599c8 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -866,6 +866,7 @@ snd_usb_endpoint_open(struct snd_usb_audio *chip, mutex_unlock(&chip->mutex); return ep; } +EXPORT_SYMBOL_GPL(snd_usb_endpoint_open); /* * snd_usb_endpoint_set_sync: Link data and sync endpoints @@ -1503,6 +1504,7 @@ int snd_usb_endpoint_prepare(struct snd_usb_audio *chip, mutex_unlock(&chip->mutex); return err; } +EXPORT_SYMBOL_GPL(snd_usb_endpoint_prepare); /* get the current rate set to the given clock by any endpoint */ int snd_usb_endpoint_get_clock_rate(struct snd_usb_audio *chip, int clock) diff --git a/sound/usb/helper.c b/sound/usb/helper.c index bf80e55d013a..4322ae3738e6 100644 --- a/sound/usb/helper.c +++ b/sound/usb/helper.c @@ -62,6 +62,7 @@ void *snd_usb_find_csint_desc(void *buffer, int buflen, void *after, u8 dsubtype } return NULL; } +EXPORT_SYMBOL_GPL(snd_usb_find_csint_desc); /* * Wrapper for usb_control_msg(). diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index eec5232f9fb2..b6fb6d84d9eb 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c @@ -87,7 +87,7 @@ static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream /* * find a matching audio format */ -static const struct audioformat * +const struct audioformat * find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, unsigned int rate, unsigned int channels, bool strict_match, struct snd_usb_substream *subs) @@ -147,8 +147,9 @@ find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, } return found; } +EXPORT_SYMBOL_GPL(find_format); -static const struct audioformat * +const struct audioformat * find_substream_format(struct snd_usb_substream *subs, const struct snd_pcm_hw_params *params) { @@ -156,6 +157,7 @@ find_substream_format(struct snd_usb_substream *subs, params_rate(params), params_channels(params), true, subs); } +EXPORT_SYMBOL_GPL(find_substream_format); bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream *subs) { @@ -446,7 +448,7 @@ int snd_usb_pcm_resume(struct snd_usb_stream *as) return 0; } -static void close_endpoints(struct snd_usb_audio *chip, +void close_endpoints(struct snd_usb_audio *chip, struct snd_usb_substream *subs) { if (subs->data_endpoint) { @@ -460,6 +462,7 @@ static void close_endpoints(struct snd_usb_audio *chip, subs->sync_endpoint = NULL; } } +EXPORT_SYMBOL(close_endpoints); /* * hw_params callback diff --git a/sound/usb/pcm.h b/sound/usb/pcm.h index 388fe2ba346d..b5216cb19e75 100644 --- a/sound/usb/pcm.h +++ b/sound/usb/pcm.h @@ -15,4 +15,16 @@ void snd_usb_preallocate_buffer(struct snd_usb_substream *subs); int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio *chip, struct audioformat *fmt); +void close_endpoints(struct snd_usb_audio *chip, + struct snd_usb_substream *subs); +int configure_endpoints(struct snd_usb_audio *chip, + struct snd_usb_substream *subs); + +const struct audioformat * +find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, + unsigned int rate, unsigned int channels, bool strict_match, + struct snd_usb_substream *subs); +const struct audioformat * +find_substream_format(struct snd_usb_substream *subs, + const struct snd_pcm_hw_params *params); #endif /* __USBAUDIO_PCM_H */
Some vendor modules will utilize useful parsing and endpoint management APIs to start audio playback/capture. Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> --- sound/core/oss/pcm_oss.c | 4 ++-- sound/usb/card.c | 2 ++ sound/usb/endpoint.c | 2 ++ sound/usb/helper.c | 1 + sound/usb/pcm.c | 9 ++++++--- sound/usb/pcm.h | 12 ++++++++++++ 6 files changed, 25 insertions(+), 5 deletions(-)