Skip to content
This repository has been archived by the owner on Nov 21, 2022. It is now read-only.

Commit

Permalink
usb: fotg210: Select subdriver by mode
Browse files Browse the repository at this point in the history
Check which mode the hardware is in, and selecte the peripheral
driver if the hardware is in explicit peripheral mode, otherwise
select host mode.

This should solve the immediate problem that both subdrivers
can get probed.

Cc: Fabian Vogt <fabian@ritter-vogt.de>
Cc: Yuan-Hsin Chen <yhchen@faraday-tech.com>
Cc: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20221023144708.3596563-3-linus.walleij@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
linusw authored and gregkh committed Nov 9, 2022
1 parent aeffd2c commit 1fac1c4
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions drivers/usb/fotg210/fotg210-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,37 @@
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/usb.h>
#include <linux/usb/otg.h>

#include "fotg210.h"

static int fotg210_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
enum usb_dr_mode mode;
int ret;

if (IS_ENABLED(CONFIG_USB_FOTG210_HCD)) {
ret = fotg210_hcd_probe(pdev);
if (ret)
return ret;
}
if (IS_ENABLED(CONFIG_USB_FOTG210_UDC))
mode = usb_get_dr_mode(dev);

if (mode == USB_DR_MODE_PERIPHERAL)
ret = fotg210_udc_probe(pdev);
else
ret = fotg210_hcd_probe(pdev);

return ret;
}

static int fotg210_remove(struct platform_device *pdev)
{
if (IS_ENABLED(CONFIG_USB_FOTG210_HCD))
fotg210_hcd_remove(pdev);
if (IS_ENABLED(CONFIG_USB_FOTG210_UDC))
struct device *dev = &pdev->dev;
enum usb_dr_mode mode;

mode = usb_get_dr_mode(dev);

if (mode == USB_DR_MODE_PERIPHERAL)
fotg210_udc_remove(pdev);
else
fotg210_hcd_remove(pdev);

return 0;
}
Expand Down

0 comments on commit 1fac1c4

Please sign in to comment.