 9d9779e723
			
		
	
	
	9d9779e723
	
	
	
		
			
			The device.h header was including module.h, making it present for most of these drivers. But we want to clean that up. Call out the include of module.h in the modular network drivers. Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
		
			
				
	
	
		
			88 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * drivers/net/phy/realtek.c
 | |
|  *
 | |
|  * Driver for Realtek PHYs
 | |
|  *
 | |
|  * Author: Johnson Leung <r58129@freescale.com>
 | |
|  *
 | |
|  * Copyright (c) 2004 Freescale Semiconductor, Inc.
 | |
|  *
 | |
|  * 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;  either version 2 of the  License, or (at your
 | |
|  * option) any later version.
 | |
|  *
 | |
|  */
 | |
| #include <linux/phy.h>
 | |
| #include <linux/module.h>
 | |
| 
 | |
| #define RTL821x_PHYSR		0x11
 | |
| #define RTL821x_PHYSR_DUPLEX	0x2000
 | |
| #define RTL821x_PHYSR_SPEED	0xc000
 | |
| #define RTL821x_INER		0x12
 | |
| #define RTL821x_INER_INIT	0x6400
 | |
| #define RTL821x_INSR		0x13
 | |
| 
 | |
| MODULE_DESCRIPTION("Realtek PHY driver");
 | |
| MODULE_AUTHOR("Johnson Leung");
 | |
| MODULE_LICENSE("GPL");
 | |
| 
 | |
| static int rtl821x_ack_interrupt(struct phy_device *phydev)
 | |
| {
 | |
| 	int err;
 | |
| 
 | |
| 	err = phy_read(phydev, RTL821x_INSR);
 | |
| 
 | |
| 	return (err < 0) ? err : 0;
 | |
| }
 | |
| 
 | |
| static int rtl821x_config_intr(struct phy_device *phydev)
 | |
| {
 | |
| 	int err;
 | |
| 
 | |
| 	if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
 | |
| 		err = phy_write(phydev, RTL821x_INER,
 | |
| 				RTL821x_INER_INIT);
 | |
| 	else
 | |
| 		err = phy_write(phydev, RTL821x_INER, 0);
 | |
| 
 | |
| 	return err;
 | |
| }
 | |
| 
 | |
| /* RTL8211B */
 | |
| static struct phy_driver rtl821x_driver = {
 | |
| 	.phy_id		= 0x001cc912,
 | |
| 	.name		= "RTL821x Gigabit Ethernet",
 | |
| 	.phy_id_mask	= 0x001fffff,
 | |
| 	.features	= PHY_GBIT_FEATURES,
 | |
| 	.flags		= PHY_HAS_INTERRUPT,
 | |
| 	.config_aneg	= &genphy_config_aneg,
 | |
| 	.read_status	= &genphy_read_status,
 | |
| 	.ack_interrupt	= &rtl821x_ack_interrupt,
 | |
| 	.config_intr	= &rtl821x_config_intr,
 | |
| 	.driver		= { .owner = THIS_MODULE,},
 | |
| };
 | |
| 
 | |
| static int __init realtek_init(void)
 | |
| {
 | |
| 	int ret;
 | |
| 
 | |
| 	ret = phy_driver_register(&rtl821x_driver);
 | |
| 
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static void __exit realtek_exit(void)
 | |
| {
 | |
| 	phy_driver_unregister(&rtl821x_driver);
 | |
| }
 | |
| 
 | |
| module_init(realtek_init);
 | |
| module_exit(realtek_exit);
 | |
| 
 | |
| static struct mdio_device_id __maybe_unused realtek_tbl[] = {
 | |
| 	{ 0x001cc912, 0x001fffff },
 | |
| 	{ }
 | |
| };
 | |
| 
 | |
| MODULE_DEVICE_TABLE(mdio, realtek_tbl);
 |