cregit-Linux how code gets into the kernel

Release 4.7 drivers/usb/host/ehci-w90x900.c

Directory: drivers/usb/host
/*
 * linux/driver/usb/host/ehci-w90x900.c
 *
 * Copyright (c) 2008 Nuvoton technology corporation.
 *
 * Wan ZongShun <mcuos.com@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation;version 2 of the License.
 *
 */

#include <linux/dma-mapping.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/usb.h>
#include <linux/usb/hcd.h>

#include "ehci.h"

/* enable phy0 and phy1 for w90p910 */

#define	ENPHY		(0x01<<8)

#define PHY0_CTR	(0xA4)

#define PHY1_CTR	(0xA8)


#define DRIVER_DESC "EHCI w90x900 driver"


static const char hcd_name[] = "ehci-w90x900 ";


static struct hc_driver __read_mostly ehci_w90x900_hc_driver;


static int usb_w90x900_probe(const struct hc_driver *driver, struct platform_device *pdev) { struct usb_hcd *hcd; struct ehci_hcd *ehci; struct resource *res; int retval = 0, irq; unsigned long val; hcd = usb_create_hcd(driver, &pdev->dev, "w90x900 EHCI"); if (!hcd) { retval = -ENOMEM; goto err1; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); hcd->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(hcd->regs)) { retval = PTR_ERR(hcd->regs); goto err2; } hcd->rsrc_start = res->start; hcd->rsrc_len = resource_size(res); ehci = hcd_to_ehci(hcd); ehci->caps = hcd->regs; ehci->regs = hcd->regs + HC_LENGTH(ehci, ehci_readl(ehci, &ehci->caps->hc_capbase)); /* enable PHY 0,1,the regs only apply to w90p910 * 0xA4,0xA8 were offsets of PHY0 and PHY1 controller of * w90p910 IC relative to ehci->regs. */ val = __raw_readl(ehci->regs+PHY0_CTR); val |= ENPHY; __raw_writel(val, ehci->regs+PHY0_CTR); val = __raw_readl(ehci->regs+PHY1_CTR); val |= ENPHY; __raw_writel(val, ehci->regs+PHY1_CTR); irq = platform_get_irq(pdev, 0); if (irq < 0) { retval = irq; goto err2; } retval = usb_add_hcd(hcd, irq, IRQF_SHARED); if (retval != 0) goto err2; device_wakeup_enable(hcd->self.controller); return retval; err2: usb_put_hcd(hcd); err1: return retval; }

Contributors

PersonTokensPropCommitsCommitProp
wan zongshunwan zongshun23980.20%114.29%
varka bhadramvarka bhadram237.72%114.29%
jingoo hanjingoo han175.70%114.29%
peter chenpeter chen93.02%114.29%
julia lawalljulia lawall62.01%114.29%
joe perchesjoe perches20.67%114.29%
jan anderssonjan andersson20.67%114.29%
Total298100.00%7100.00%


static void usb_w90x900_remove(struct usb_hcd *hcd, struct platform_device *pdev) { usb_remove_hcd(hcd); usb_put_hcd(hcd); }

Contributors

PersonTokensPropCommitsCommitProp
wan zongshunwan zongshun2596.15%150.00%
manjunath goudarmanjunath goudar13.85%150.00%
Total26100.00%2100.00%


static int ehci_w90x900_probe(struct platform_device *pdev) { if (usb_disabled()) return -ENODEV; return usb_w90x900_probe(&ehci_w90x900_hc_driver, pdev); }

Contributors

PersonTokensPropCommitsCommitProp
wan zongshunwan zongshun29100.00%1100.00%
Total29100.00%1100.00%


static int ehci_w90x900_remove(struct platform_device *pdev) { struct usb_hcd *hcd = platform_get_drvdata(pdev); usb_w90x900_remove(hcd, pdev); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
wan zongshunwan zongshun31100.00%1100.00%
Total31100.00%1100.00%

static struct platform_driver ehci_hcd_w90x900_driver = { .probe = ehci_w90x900_probe, .remove = ehci_w90x900_remove, .driver = { .name = "w90x900-ehci", }, };
static int __init ehci_w90X900_init(void) { if (usb_disabled()) return -ENODEV; pr_info("%s: " DRIVER_DESC "\n", hcd_name); ehci_init_driver(&ehci_w90x900_hc_driver, NULL); return platform_driver_register(&ehci_hcd_w90x900_driver); }

Contributors

PersonTokensPropCommitsCommitProp
manjunath goudarmanjunath goudar42100.00%1100.00%
Total42100.00%1100.00%

module_init(ehci_w90X900_init);
static void __exit ehci_w90X900_cleanup(void) { platform_driver_unregister(&ehci_hcd_w90x900_driver); }

Contributors

PersonTokensPropCommitsCommitProp
manjunath goudarmanjunath goudar15100.00%1100.00%
Total15100.00%1100.00%

module_exit(ehci_w90X900_cleanup); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_AUTHOR("Wan ZongShun <mcuos.com@gmail.com>"); MODULE_ALIAS("platform:w90p910-ehci"); MODULE_LICENSE("GPL v2");

Overall Contributors

PersonTokensPropCommitsCommitProp
wan zongshunwan zongshun38268.58%111.11%
manjunath goudarmanjunath goudar11520.65%111.11%
varka bhadramvarka bhadram234.13%111.11%
jingoo hanjingoo han173.05%111.11%
peter chenpeter chen91.62%111.11%
julia lawalljulia lawall61.08%111.11%
joe perchesjoe perches20.36%111.11%
jan anderssonjan andersson20.36%111.11%
justin mattockjustin mattock10.18%111.11%
Total557100.00%9100.00%
Directory: drivers/usb/host
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}