Commit eb127cb5 authored by Jassi Brar's avatar Jassi Brar Committed by Felipe Balbi

USB: gadget: f_uac2: Fix broken prm to uac2 mapping

prm_to_uac2() is broken because it tests against pointer it itself
mapped onto, which will never be different.
Fix the mapping by adding pointer to parent chip in each rtd param
and removing the prm_to_uac2().
Reported-by: default avatarJulien Rouviere <jrouviere@qualistream.com>
Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent f37d49ad
...@@ -90,6 +90,7 @@ struct uac2_req { ...@@ -90,6 +90,7 @@ struct uac2_req {
}; };
struct uac2_rtd_params { struct uac2_rtd_params {
struct snd_uac2_chip *uac2; /* parent chip */
bool ep_enabled; /* if the ep is enabled */ bool ep_enabled; /* if the ep is enabled */
/* Size of the ring buffer */ /* Size of the ring buffer */
size_t dma_bytes; size_t dma_bytes;
...@@ -168,18 +169,6 @@ struct snd_uac2_chip *pdev_to_uac2(struct platform_device *p) ...@@ -168,18 +169,6 @@ struct snd_uac2_chip *pdev_to_uac2(struct platform_device *p)
return container_of(p, struct snd_uac2_chip, pdev); return container_of(p, struct snd_uac2_chip, pdev);
} }
static inline
struct snd_uac2_chip *prm_to_uac2(struct uac2_rtd_params *r)
{
struct snd_uac2_chip *uac2 = container_of(r,
struct snd_uac2_chip, c_prm);
if (&uac2->c_prm != r)
uac2 = container_of(r, struct snd_uac2_chip, p_prm);
return uac2;
}
static inline static inline
uint num_channels(uint chanmask) uint num_channels(uint chanmask)
{ {
...@@ -204,7 +193,7 @@ agdev_iso_complete(struct usb_ep *ep, struct usb_request *req) ...@@ -204,7 +193,7 @@ agdev_iso_complete(struct usb_ep *ep, struct usb_request *req)
struct uac2_req *ur = req->context; struct uac2_req *ur = req->context;
struct snd_pcm_substream *substream; struct snd_pcm_substream *substream;
struct uac2_rtd_params *prm = ur->pp; struct uac2_rtd_params *prm = ur->pp;
struct snd_uac2_chip *uac2 = prm_to_uac2(prm); struct snd_uac2_chip *uac2 = prm->uac2;
/* i/f shutting down */ /* i/f shutting down */
if (!prm->ep_enabled) if (!prm->ep_enabled)
...@@ -894,7 +883,7 @@ struct cntrl_range_lay3 { ...@@ -894,7 +883,7 @@ struct cntrl_range_lay3 {
static inline void static inline void
free_ep(struct uac2_rtd_params *prm, struct usb_ep *ep) free_ep(struct uac2_rtd_params *prm, struct usb_ep *ep)
{ {
struct snd_uac2_chip *uac2 = prm_to_uac2(prm); struct snd_uac2_chip *uac2 = prm->uac2;
int i; int i;
prm->ep_enabled = false; prm->ep_enabled = false;
...@@ -970,6 +959,9 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn) ...@@ -970,6 +959,9 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
} }
agdev->in_ep->driver_data = agdev; agdev->in_ep->driver_data = agdev;
uac2->p_prm.uac2 = uac2;
uac2->c_prm.uac2 = uac2;
hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress; hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
hs_epout_desc.wMaxPacketSize = fs_epout_desc.wMaxPacketSize; hs_epout_desc.wMaxPacketSize = fs_epout_desc.wMaxPacketSize;
hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress; hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment