>On 03/11/18 19:51, Pawel Laszczak wrote: >> Patch adds core.c and core.h file that implements initialization >> of platform driver and adds function responsible for selecting, >> switching and running appropriate Device/Host mode. >> >> Patch also adds gadget.c, host.c, gadget-export.h, host-export.h. >> These files contains templates functions used during initialization. >> The implementation will be added in next patches. >> >> Signed-off-by: Pawel Laszczak <pawell@xxxxxxxxxxx> >> --- >> drivers/usb/cdns3/Kconfig | 20 ++ >> drivers/usb/cdns3/Makefile | 4 + >> drivers/usb/cdns3/core.c | 373 ++++++++++++++++++++++++++++++ >> drivers/usb/cdns3/core.h | 88 +++++++ >> drivers/usb/cdns3/gadget-export.h | 27 +++ >> drivers/usb/cdns3/gadget.c | 36 +++ >> drivers/usb/cdns3/host-export.h | 30 +++ >> drivers/usb/cdns3/host.c | 28 +++ >> 8 files changed, 606 insertions(+) >> create mode 100644 drivers/usb/cdns3/core.c >> create mode 100644 drivers/usb/cdns3/core.h >> create mode 100644 drivers/usb/cdns3/gadget-export.h >> create mode 100644 drivers/usb/cdns3/gadget.c >> create mode 100644 drivers/usb/cdns3/host-export.h >> create mode 100644 drivers/usb/cdns3/host.c >> > > ><snip> > >> diff --git a/drivers/usb/cdns3/core.h b/drivers/usb/cdns3/core.h >> new file mode 100644 >> index 000000000000..e7159c474308 >> --- /dev/null >> +++ b/drivers/usb/cdns3/core.h >> @@ -0,0 +1,88 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +/* >> + * Cadence USBSS DRD Driver. >> + * >> + * Copyright (C) 2017 NXP >> + * Copyright (C) 2018 Cadence. >> + * >> + * Authors: Peter Chen <peter.chen@xxxxxxx> >> + * Pawel Laszczak <pawell@xxxxxxxxxxx> >> + */ >> +#include <linux/usb/otg.h> >> + >> +#ifndef __LINUX_CDNS3_CORE_H >> +#define __LINUX_CDNS3_CORE_H >> + >> +struct cdns3; >> +enum cdns3_roles { >> + CDNS3_ROLE_HOST = 0, >> + CDNS3_ROLE_GADGET, >> + CDNS3_ROLE_END, >> + CDNS3_ROLE_OTG, >> +}; >> + >> +/** >> + * struct cdns3_role_driver - host/gadget role driver >> + * @start: start this role >> + * @stop: stop this role >> + * @suspend: suspend callback for this role >> + * @resume: resume callback for this role >> + * @irq: irq handler for this role >> + * @name: role name string (host/gadget) >> + */ >> +struct cdns3_role_driver { >> + int (*start)(struct cdns3 *cdns); >> + void (*stop)(struct cdns3 *cdns); >> + int (*suspend)(struct cdns3 *cdns, bool do_wakeup); >> + int (*resume)(struct cdns3 *cdns, bool hibernated); >> + irqreturn_t (*irq)(struct cdns3 *cdns); > >Why does role driver need hook to irq handler? > >Can't each driver host or gadget handle it's respective irq >on its own? If the same IRQ line is used it could be requested >as a shared IRQ. When controller is working as Device then host part of controller is held in reset and vice versa, so driver has restricted access to registers. >> + const char *name; >> +}; >> + > >cheers, >-roger > >-- >Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki Thanks, Cheers, Pawel Laszczak