1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-02-15 00:18:03 +00:00
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

96 lines
2.3 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2018 MediaTek Inc.
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/kobject.h>
#include <linux/prefetch.h>
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/idr.h>
#include <linux/dma-mapping.h>
#include <musb_main.h>
#define DRIVER_AUTHOR "Mentor Graphics, Texas Instruments, Nokia"
#define DRIVER_DESC "Inventra Dual-Role USB Controller Driver"
#define MUSB_VERSION "6.0"
#define DRIVER_INFO DRIVER_DESC ", v" MUSB_VERSION
#define MUSB_DRIVER_NAME "musb-hdrc"
const char musb_driver_names[] = MUSB_DRIVER_NAME;
MODULE_DESCRIPTION(DRIVER_INFO);
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
static int musb_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
int irq = 0;
int status;
void __iomem *base;
void __iomem *pbase;
struct resource *iomem;
if (usb_disabled())
return 0;
pr_info("%s: version " MUSB_VERSION ", ?dma?, otg (peripheral+host)\n"
, musb_driver_names);
iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_ioremap(dev, iomem->start, resource_size(iomem));
if (IS_ERR(base))
return PTR_ERR(base);
iomem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
pbase = devm_ioremap(dev, iomem->start, resource_size(iomem));
if (IS_ERR(pbase))
return PTR_ERR(pbase);
irq = platform_get_irq(pdev, 0);
if (irq <= 0)
return -ENODEV;
pr_info("%s mac=0x%lx, phy=0x%lx, irq=%d\n"
, __func__, (unsigned long)base, (unsigned long)pbase, irq);
status = musb_init_controller(dev, irq, base, pbase);
return status;
}
static void musb_shutdown_main(struct platform_device *pdev)
{
return musb_shutdown(pdev);
}
static int musb_remove_main(struct platform_device *pdev)
{
return musb_remove(pdev);
}
extern const struct dev_pm_ops musb_dev_pm_ops;
#define MUSB_DEV_PM_OPS (&musb_dev_pm_ops)
static struct platform_driver musb_driver = {
.driver = {
.name = (char *)musb_driver_names,
.bus = &platform_bus_type,
.owner = THIS_MODULE,
.pm = MUSB_DEV_PM_OPS,
},
.probe = musb_probe,
.remove = musb_remove_main,
.shutdown = musb_shutdown_main,
};
module_platform_driver(musb_driver);