Skip to content

Commit

Permalink
USB: gadget: f_uac2: Fix broken prm to uac2 mapping
Browse files Browse the repository at this point in the history
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: Julien Rouviere <jrouviere@qualistream.com>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Jassi Brar authored and Felipe Balbi committed Jun 10, 2013
1 parent f37d49a commit eb127cb
Showing 1 changed file with 6 additions and 14 deletions.
20 changes: 6 additions & 14 deletions drivers/usb/gadget/f_uac2.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ struct uac2_req {
};

struct uac2_rtd_params {
struct snd_uac2_chip *uac2; /* parent chip */
bool ep_enabled; /* if the ep is enabled */
/* Size of the ring buffer */
size_t dma_bytes;
Expand Down Expand Up @@ -168,18 +169,6 @@ struct snd_uac2_chip *pdev_to_uac2(struct platform_device *p)
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
uint num_channels(uint chanmask)
{
Expand All @@ -204,7 +193,7 @@ agdev_iso_complete(struct usb_ep *ep, struct usb_request *req)
struct uac2_req *ur = req->context;
struct snd_pcm_substream *substream;
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 */
if (!prm->ep_enabled)
Expand Down Expand Up @@ -894,7 +883,7 @@ struct cntrl_range_lay3 {
static inline void
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;

prm->ep_enabled = false;
Expand Down Expand Up @@ -970,6 +959,9 @@ afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
}
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.wMaxPacketSize = fs_epout_desc.wMaxPacketSize;
hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
Expand Down

0 comments on commit eb127cb

Please sign in to comment.