forked from mirrors/linux
		
	net: fixed-phy: Add fixed_phy_register_with_gpiod() API
Add fixed_phy_register_with_gpiod() API. It lets users create a fixed_phy instance that uses a GPIO descriptor which was obtained externally e.g. through platform data. This enables platform devices (non-DT based) to use GPIOs for link status. Signed-off-by: Moritz Fischer <mdf@kernel.org> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									a4751093a2
								
							
						
					
					
						commit
						71bd106d25
					
				
					 2 changed files with 40 additions and 7 deletions
				
			
		|  | @ -229,12 +229,12 @@ static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| struct phy_device *fixed_phy_register(unsigned int irq, | ||||
| 				      struct fixed_phy_status *status, | ||||
| 				      struct device_node *np) | ||||
| static struct phy_device *__fixed_phy_register(unsigned int irq, | ||||
| 					       struct fixed_phy_status *status, | ||||
| 					       struct device_node *np, | ||||
| 					       struct gpio_desc *gpiod) | ||||
| { | ||||
| 	struct fixed_mdio_bus *fmb = &platform_fmb; | ||||
| 	struct gpio_desc *gpiod = NULL; | ||||
| 	struct phy_device *phy; | ||||
| 	int phy_addr; | ||||
| 	int ret; | ||||
|  | @ -243,9 +243,11 @@ struct phy_device *fixed_phy_register(unsigned int irq, | |||
| 		return ERR_PTR(-EPROBE_DEFER); | ||||
| 
 | ||||
| 	/* Check if we have a GPIO associated with this fixed phy */ | ||||
| 	gpiod = fixed_phy_get_gpiod(np); | ||||
| 	if (IS_ERR(gpiod)) | ||||
| 		return ERR_CAST(gpiod); | ||||
| 	if (!gpiod) { | ||||
| 		gpiod = fixed_phy_get_gpiod(np); | ||||
| 		if (IS_ERR(gpiod)) | ||||
| 			return ERR_CAST(gpiod); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Get the next available PHY address, up to PHY_MAX_ADDR */ | ||||
| 	phy_addr = ida_simple_get(&phy_fixed_ida, 0, PHY_MAX_ADDR, GFP_KERNEL); | ||||
|  | @ -308,8 +310,24 @@ struct phy_device *fixed_phy_register(unsigned int irq, | |||
| 
 | ||||
| 	return phy; | ||||
| } | ||||
| 
 | ||||
| struct phy_device *fixed_phy_register(unsigned int irq, | ||||
| 				      struct fixed_phy_status *status, | ||||
| 				      struct device_node *np) | ||||
| { | ||||
| 	return __fixed_phy_register(irq, status, np, NULL); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(fixed_phy_register); | ||||
| 
 | ||||
| struct phy_device * | ||||
| fixed_phy_register_with_gpiod(unsigned int irq, | ||||
| 			      struct fixed_phy_status *status, | ||||
| 			      struct gpio_desc *gpiod) | ||||
| { | ||||
| 	return __fixed_phy_register(irq, status, NULL, gpiod); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(fixed_phy_register_with_gpiod); | ||||
| 
 | ||||
| void fixed_phy_unregister(struct phy_device *phy) | ||||
| { | ||||
| 	phy_device_remove(phy); | ||||
|  |  | |||
|  | @ -19,6 +19,12 @@ extern int fixed_phy_add(unsigned int irq, int phy_id, | |||
| extern struct phy_device *fixed_phy_register(unsigned int irq, | ||||
| 					     struct fixed_phy_status *status, | ||||
| 					     struct device_node *np); | ||||
| 
 | ||||
| extern struct phy_device * | ||||
| fixed_phy_register_with_gpiod(unsigned int irq, | ||||
| 			      struct fixed_phy_status *status, | ||||
| 			      struct gpio_desc *gpiod); | ||||
| 
 | ||||
| extern void fixed_phy_unregister(struct phy_device *phydev); | ||||
| extern int fixed_phy_set_link_update(struct phy_device *phydev, | ||||
| 			int (*link_update)(struct net_device *, | ||||
|  | @ -35,6 +41,15 @@ static inline struct phy_device *fixed_phy_register(unsigned int irq, | |||
| { | ||||
| 	return ERR_PTR(-ENODEV); | ||||
| } | ||||
| 
 | ||||
| static inline struct phy_device * | ||||
| fixed_phy_register_with_gpiod(unsigned int irq, | ||||
| 			      struct fixed_phy_status *status, | ||||
| 			      struct gpio_desc *gpiod) | ||||
| { | ||||
| 	return ERR_PTR(-ENODEV); | ||||
| } | ||||
| 
 | ||||
| static inline void fixed_phy_unregister(struct phy_device *phydev) | ||||
| { | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Moritz Fischer
						Moritz Fischer