usb: dwc3-generic: Export glue structures and functions

In order to allow external SoC-dependent glue drivers to use dwc3-generic
functions, push the glue structures and export the functions to a header
file.

The exported structures and functions are:

- struct dwc3_glue_data
- struct dwc3_glue_ops
- dwc3_glue_bind()
- dwc3_glue_probe()
- dwc3_glue_remove()

The SoC-dependent glue drivers can only define their own wrapper driver
and specify these functions. The drivers can also add their own compatible
strings and configure functions.

Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
Kunihiko Hayashi 2023-02-20 14:50:28 +09:00 committed by Marek Vasut
parent 7c71c684ce
commit ef2313b8a2
2 changed files with 36 additions and 14 deletions

View file

@ -28,11 +28,7 @@
#include <usb/xhci.h>
#include <asm/gpio.h>
struct dwc3_glue_data {
struct clk_bulk clks;
struct reset_ctl_bulk resets;
fdt_addr_t regs;
};
#include "dwc3-generic.h"
struct dwc3_generic_plat {
fdt_addr_t base;
@ -275,12 +271,6 @@ U_BOOT_DRIVER(dwc3_generic_host) = {
};
#endif
struct dwc3_glue_ops {
int (*glue_get_ctrl_dev)(struct udevice *parent, ofnode *node);
void (*glue_configure)(struct udevice *dev, int index,
enum usb_dr_mode mode);
};
void dwc3_imx8mp_glue_configure(struct udevice *dev, int index,
enum usb_dr_mode mode)
{
@ -464,7 +454,7 @@ static int dwc3_glue_bind_common(struct udevice *parent, ofnode node)
return 0;
}
static int dwc3_glue_bind(struct udevice *parent)
int dwc3_glue_bind(struct udevice *parent)
{
struct dwc3_glue_ops *ops = (struct dwc3_glue_ops *)dev_get_driver_data(parent);
ofnode node;
@ -531,7 +521,7 @@ static int dwc3_glue_clk_init(struct udevice *dev,
return 0;
}
static int dwc3_glue_probe(struct udevice *dev)
int dwc3_glue_probe(struct udevice *dev)
{
struct dwc3_glue_ops *ops = (struct dwc3_glue_ops *)dev_get_driver_data(dev);
struct dwc3_glue_data *glue = dev_get_plat(dev);
@ -597,7 +587,7 @@ static int dwc3_glue_probe(struct udevice *dev)
return 0;
}
static int dwc3_glue_remove(struct udevice *dev)
int dwc3_glue_remove(struct udevice *dev)
{
struct dwc3_glue_data *glue = dev_get_plat(dev);

View file

@ -0,0 +1,32 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* dwc3-generic.h - Generic DWC3 Glue layer header
*
* Copyright (C) 2016 - 2018 Xilinx, Inc.
* Copyright (C) 2023 Socionext Inc.
*/
#ifndef __DRIVERS_USB_DWC3_GENERIC_H
#define __DRIVERS_USB_DWC3_GENERIC_H
#include <clk.h>
#include <reset.h>
#include <dwc3-uboot.h>
struct dwc3_glue_data {
struct clk_bulk clks;
struct reset_ctl_bulk resets;
fdt_addr_t regs;
};
struct dwc3_glue_ops {
int (*glue_get_ctrl_dev)(struct udevice *parent, ofnode *node);
void (*glue_configure)(struct udevice *dev, int index,
enum usb_dr_mode mode);
};
int dwc3_glue_bind(struct udevice *parent);
int dwc3_glue_probe(struct udevice *dev);
int dwc3_glue_remove(struct udevice *dev);
#endif