#
# for USB OTG silicon based on Mentor Graphics INVENTRA designs
#

musb_hdrc-objs := musb_core.o

obj-$(CONFIG_USB_MUSB_HDRC)	+= musb_hdrc.o

ifeq ($(CONFIG_ARCH_DAVINCI_DMx),y)
	musb_hdrc-objs	+= davinci.o
endif

ifeq ($(CONFIG_USB_TUSB6010),y)
	musb_hdrc-objs	+= tusb6010.o
endif

ifeq ($(CONFIG_ARCH_OMAP2430),y)
	musb_hdrc-objs	+= omap2430.o
endif

ifeq ($(CONFIG_ARCH_OMAP3430),y)
	musb_hdrc-objs	+= omap2430.o
endif

ifeq ($(CONFIG_ARCH_OMAP4),y)
	musb_hdrc-objs  += omap2430.o
endif

ifeq ($(CONFIG_BF54x),y)
	musb_hdrc-objs	+= blackfin.o
endif

ifeq ($(CONFIG_BF52x),y)
	musb_hdrc-objs	+= blackfin.o
endif

ifeq ($(CONFIG_USB_GADGET_MUSB_HDRC),y)
	musb_hdrc-objs		+= musb_gadget_ep0.o musb_gadget.o
endif

ifeq ($(CONFIG_USB_MUSB_HDRC_HCD),y)
	musb_hdrc-objs		+= musb_virthub.o musb_host.o
endif

ifeq ($(CONFIG_DEBUG_FS),y)
	musb_hdrc-objs		+= musb_debugfs.o
endif

# the kconfig must guarantee that only one of the
# possible I/O schemes will be enabled at a time ...
# PIO only, or DMA (several potential schemes).
# though PIO is always there to back up DMA, and for ep0

ifneq ($(CONFIG_MUSB_PIO_ONLY),y)

  ifeq ($(CONFIG_USB_INVENTRA_DMA),y)
    musb_hdrc-objs		+= musbhsdma.o

  else
    ifeq ($(CONFIG_USB_TI_CPPI_DMA),y)
      musb_hdrc-objs		+= cppi_dma.o

    else
      ifeq ($(CONFIG_USB_TUSB_OMAP_DMA),y)
        musb_hdrc-objs		+= tusb6010_omap.o

      endif
    endif
  endif
endif


################################################################################

# FIXME remove all these extra "-DMUSB_* things, stick to CONFIG_*

ifeq ($(CONFIG_USB_INVENTRA_MUSB_HAS_AHB_ID),y)
	EXTRA_CFLAGS += -DMUSB_AHB_ID
endif

# Debugging

ifeq ($(CONFIG_USB_MUSB_DEBUG),y)
	EXTRA_CFLAGS += -DDEBUG
endif
